sujet : Portée des macros
La doc ne donne pas la portée des macros. J’ai essayé de placer les 7 macros suivantes dans les positions suivantes.
1) En tête de programme
2) Dans un module avec ou pas les mêmes noms
3) En changeant les noms des macros ou si elles ont le même nom en modifiant par un signe = ou == ou => pour les reconnaitre
4) E n plaçant les macros et une structure dans le répertoire RESIDENTS
Pour vérifier le bon fonctionnement j’ai testé les variables et les structures .en testant en même temps la portée viable des macros alors que celles-ci ne peuvent être définies dans la section declaremodule.
Les éléments acceptés dans la section DeclareModule peuvent être les suivants: procédures (seule la déclaration des procédures est autorisée), structures, macros, variables, constantes, énumérations, tableaux, listes, maps et les étiquettes (labels).
Dans un premier temps laissons ces macros en tête de programme
Et faisons un essai avec le programme suivant :
Code : Tout sélectionner
;************************************** Macros d'origine pour essai qui servent à être placé dans RESIDENTS pou observer les effets **********
; Macro _q_t_
; "
; EndMacro
; Macro _n(__n)
; _q_t_#__n#=_q_t_+Str(__n)+" "
; EndMacro
; Macro _f(__F,__nv=8)
; _q_t_#__F#=_q_t_+StrF(__f,__nv)+" "
; EndMacro
; Macro _d(__D,__nv=8)
; _q_t_#__D#=_q_t_+StrD(__D,__nv)+" "
; EndMacro
; Macro _s(__S)
; _q_t_#__S#=_q_t_+__S+" "
; EndMacro
; Macro _Q(__Q)
; _q_t_#__Q#=_q_t_+Str(__Q)+" "
; EndMacro
; Macro _NL
; "N°L="+Str(#PB_Compiler_Line)+" ** "
; EndMacro
; ; ************* les structures en tt^$ete du PRG *******************
; Structure s_256B ; ou 256 octets
; StructureUnion
; VB.b[256]
; VA.a[256]
; VC.c[256] ; en ascii
; VU.u[128]
; VW.w[128]
; VL.l[64]
; VI.i[64] ; en 32bits
; VF.f[64]
; VQ.q[32]
; VD.d[32]
; VS1.s{256}
; VS256.s{1}[256] ; V comme variable S comme String Premier nombre de caractère deuxième nombre d'occurrences
; EndStructureUnion
; EndStructure
;****************** Macros de même fonction que les précédentes mais avec un mom différent pour utilisation après compile des premières*****************
;****************** Macros de même nom que les suivante dans le module mais avec => pour les distinguer *************
Macro __q_t_
"
EndMacro
Macro __n(__n)
__q_t_#__n#=>__q_t_+Str(__n)+" "
EndMacro
Macro __f(__F,__nv=8)
__q_t_#__F#=>__q_t_+StrF(__f,__nv)+" "
EndMacro
Macro __d(__D,__nv=8)
__q_t_#__D#=>__q_t_+StrD(__D,__nv)+" "
EndMacro
Macro __s(__S)
__q_t_#__S#=>__q_t_+__S+" "
EndMacro
Macro __Q(__Q)
__q_t_#__Q#=>__q_t_+Str(__Q)+" "
EndMacro
Macro __NL
"N°L=>"+Str(#PB_Compiler_Line)+" ** "
EndMacro
;***************************************************************************************************************************
;* ICI NOUS SOMMES DANS LE MODULE *
;***************************************************************************************************************************
DeclareModule essai
Structure s_256Byt ; ou 256 octets
StructureUnion
VB.b[256]
VA.a[256]
VC.c[256] ; en ascii
VU.u[128]
VW.w[128]
VL.l[64]
VI.i[64] ; en 32bits
VF.f[64]
VQ.q[32]
VD.d[32]
VS1.s{256}
VS256.s{1}[256] ; V comme variable S comme String Premier nombre de caractère deuxième nombre d'occurrences
EndStructureUnion
EndStructure
Define STC.s_256Byt
Dim tab.l(30)
Define abcd.s
EndDeclareModule
;******************** Macros de même nom que les précédentes en tête de programme mais avec == pour les distinguer *************
Module essai
Debug "***************************************************************************************************************************"
Debug "* ICI NOUS SOMMES DANS LE Module *"
Debug "***************************************************************************************************************************"
Macro __q_t_
"
EndMacro
Macro __n(__n)
__q_t_#__n#==__q_t_+Str(__n)+" "
EndMacro
Macro __f(__F,__nv=8)
__q_t_#__F#==__q_t_+StrF(__f,__nv)+" "
EndMacro
Macro __d(__D,__nv=8)
__q_t_#__D#==__q_t_+StrD(__D,__nv)+" "
EndMacro
Macro __s(__S)
__q_t_#__S#==__q_t_+__S+" "
EndMacro
Macro __Q(__Q)
__q_t_#__Q#==__q_t_+Str(__Q)+" "
EndMacro
Macro __NL
"N°L=="+Str(#PB_Compiler_Line)+" ** "
EndMacro
For i=0 To 255
STC\VC[i]=i
Next
For j=1 To 16
deb$=""
For k=1 To 16
indjk=(j-1)*16+(k-1)
deb$+Str(STC\VC[indjk])+" "
Next
Debug __nl+deb$
Next
*tab=@tab(0);; Permet de vérifier que ce pointeur est disponible dans IDE sous la forme essai::*tab
For i=0 To 30
tab(i)=i*i
Next
Debug __nl+deb2$
A.a='a'
B.b='b'
C.c='c'
D.d=23.25
F.f=54.52
abc.s="Element interne"
abcd=abc+" public"
abc+" privé"
Debug __NL+__s(a)+__s(abc)+__s(abcd)+__n(A)+__d(D)+__f(F)
; Debug _NL+__s(a)+_s(abc)+_s(abcd)+_n(A)+_d(D)+_f(F) ;; supprimer le commentaire après avoir placé les macros et la structures_256b dans RESIDENTS
deb2$=""
For k=0 To 30
deb2$+__n(tab(k))
Next
Debug __NL+deb2$
; Debug _NL+deb2$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
EndModule
Debug "***************************************************************************************************************************"
Debug "* ICI NOUS SOMMES DANS LE PRG PRINCIPAL *"
Debug "***************************************************************************************************************************"
A.a='k'
B.b='l'
C.c='m'
D.d=2.45
F.f=67.89
abc.s="Element externe"
Debug __NL+__s(a)+__s(abc)+__s(essai::abcd); +__n(essai::A)+__d(essai::D)+__f(essai::F) ; la partie précédente n'est pas connue (pas de define dans declaremodule)
Debug essai::abcd+" accessible dans le prg principal après déclaration dans le module et avec l'option Nom_module::nom_variable ***"
deb2$=""
For j=0 To 30
deb2$+__n(essai::tab(j))
Next
Debug __NL+deb2$
; Debug _NL+deb2$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
For j=1 To 16
deb$=""
For k=1 To 16
indjk=(j-1)*16+(k-1)
deb$+Str(essai::STC\VC[indjk])+" "
Next
Debug __nl+deb$
; Debug __nl+deb$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
Next
UseModule essai
Debug "***************************************************************************************************************************"
Debug "* ICI NOUS SOMMES DANS LE PRG PRINCIPAL mais sous usemodule *"
Debug "***************************************************************************************************************************"
Define AAA.s_256Byt ; LA structure définie dans declaremodule est bien connue ici
Debug __NL+__s(a)+__s(abc)+__s(essai::abcd); +__n(A)+__d(D)+__f(F) ; la partie précédente n'est pas connue ici (pas de define dans declaremodule)
Debug __NL+__s(a)+__s(abc)+__s(abcd)
; Debug _NL+_s(a)+_s(abc)+_s(essai::abcd) ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
; Debug _NL+_s(a)+_s(abc)+_s(abcd) ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
deb2$=""
For j=0 To 30
deb2$+__n(tab(j))
Next
Debug __NL+deb2$
; Debug _NL+deb2$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
For j=1 To 16
deb$=""
For k=1 To 16
indjk=(j-1)*16+(k-1)
deb$+Str(STC\VC[indjk])+" "
Next
Debug __nl+deb$
; Debug _NL+deb2$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
Next
UnuseModule essai
Debug "***************************************************************************************************************************"
Debug "* ICI NOUS SOMMES DANS LE PRG PRINCIPAL mais après unusemodule *"
Debug "***************************************************************************************************************************"
Debug __NL+__s(a)+__s(abc)+__s(essai::abcd); +__n(A)+__d(D)+__f(F) ; la partie précédente n'est pas connue ici (pas de define dans declaremodule)
; Debug _NL+_s(a)+_s(abc)+_s(essai::abcd) ;; supprimer le commentaire après avoir placé LES macros et la structure s_256b dans RESIDENTS
; Debug "*tab="+Str(essai::*TAB) ; erreur l'IDE nous propose pourtant *TAB qui n'est pas déclaré
1) les macros internes au module suivent les mêmes règles que les variables qui ne sont pas définies dans la section declaremodule
2) On peut donc donner les mêmes noms aux macros en tête de prg ou dans le module.
3) Seules les variables et les structures déclarées dans la section declaremodule peuvent être lues en externe
Nom_module ::nom_variable ou en utilisant usemodule nom_module unusemodule
4) On peut déclarer publiques les variables et les structures (voir Doc) alors que les macros ne peuvent pas l’être.
En conclusion les macros en tête du prg principal ne sont connues que dans le prg principal et pas dans le module
Et les macros définies dans le module ne sont connues que dans le module et ne peuvent pas être connues à l’extérieur.
Maintenant nous allons placer dans le répertoire RESIDENTS iles 7 premières Macros et la structure s_256b
Code : Tout sélectionner
Macro _q_t_
"
EndMacro
Macro _n(__n)
_q_t_#__n#=_q_t_+Str(__n)+" "
EndMacro
Macro _f(__F,__nv=8)
_q_t_#__F#=_q_t_+StrF(__f,__nv)+" "
EndMacro
Macro _d(__D,__nv=8)
_q_t_#__D#=_q_t_+StrD(__D,__nv)+" "
EndMacro
Macro _s(__S)
_q_t_#__S#=_q_t_+__S+" "
EndMacro
Macro _Q(__Q)
_q_t_#__Q#=_q_t_+Str(__Q)+" "
EndMacro
Macro _NL
"N°L="+Str(#PB_Compiler_Line)+" ** "
EndMacro
Structure s_256B ; ou 256 octets
StructureUnion
VB.b[256]
VA.a[256]
VC.c[256] ; en ascii
VU.u[128]
VW.w[128]
VL.l[64]
VI.i[64] ; en 32bits
VF.f[64]
VQ.q[32]
VD.d[32]
VS1.s{256}
VS256.s{1}[256] ; V comme variable S comme String Premier nombre de caractère deuxième nombre d'occurrences
EndStructureUnion
EndStructure
Code : Tout sélectionner
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#String_0
#String_2
#String_5
#Text_0
#Text_2
#Text_5
#Button_0
#Button_2
#Button_5
#Editor_41
#Button_11
#Button_12
#Button_13
#Text_6
EndEnumeration
Dim fic${256}(20)
Dim res${256}(20)
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 398, 69, 800, 446, "Aide pour créer un résident", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
StringGadget(#String_0, 145, 20, 520, 25, "")
StringGadget(#String_2, 145, 65, 520, 25, "")
StringGadget(#String_5, 145, 115, 520, 25, "")
TextGadget(#Text_0, 10, 20, 125, 25, "LIB PB pour compiler", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Text_2, 10, 65, 125, 25, "NOM de la source", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Text_5, 10, 115, 125, 25, "PATH et NOM du résident", #PB_Text_Center|#SS_CENTERIMAGE)
ButtonGadget(#Button_0, 690, 20, 100, 25, "Parcourir")
ButtonGadget(#Button_2, 690, 65, 100, 25, "Parcourir")
ButtonGadget(#Button_5, 690, 110, 100, 25, "Parcourir")
EditorGadget(#Editor_41, 20, 205, 760, 235)
; Font1 = LoadFont(#PB_Any, "Courier New" , 8, #PB_Font_Bold )
Font1 = LoadFont(#PB_Any, "Courier New" , 8)
SetGadgetFont(#Editor_41, FontID(Font1))
TextGadget(#Text_6 , 10, 150, 430, 50, "",#PB_Text_Border);,#PB_Text_Border)
ButtonGadget(#Button_11, 450, 155, 100, 30, "Création du Batch")
ButtonGadget(#Button_12, 570, 155, 100, 30, "OK Créez")
ButtonGadget(#Button_13, 690, 155, 100, 30, "Terminer")
EndIf
EndProcedure
OpenWindow_Window_0()
Path_lib$="L:\program Files\purebasic" ;;==> Path à corriger en fonction de votre environnement
;{- Event loop
Repeat
Event = WaitWindowEvent()
Select Event
; ///////////////////
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
Select EventGadget
Case #String_0
Case #String_2
Case #String_5
PathFil_Res$=GetGadgetText(#String_5)
Case #Text_0
Case #Text_2
Case #Text_5
;************************************************************** BOUTON Parcourir LIB PB ***********************************************************
Case #Button_0 ; bouton recherche chemin principal de PB
Path_lib$=PathRequester("Donnez la librairie PureBasic",Path_lib$)
SetGadgetText(#String_0,Path_lib$+"compilers\")
; SetGadgetText(#String_2, Path_lib$)
If FileSize(GetGadgetText(#String_0))=-1
SetGadgetText(#Text_6, Path_lib$ + Chr(10) +" N'est pas un répertoire PB")
Coul_t = GetGadgetColor(#text_6, #PB_Gadget_FrontColor)
Coul_f = GetGadgetColor(#text_6, #PB_Gadget_BackColor)
SetGadgetColor(#Text_6, #PB_Gadget_BackColor, RGB(0,0,$CE))
SetGadgetColor(#Text_6, #PB_Gadget_FrontColor,RGB(255,255,0))
SetGadgetText(#String_0,"")
Else
RGB_A=GetGadgetColor(#Button_0,#PB_Gadget_BackColor)
SetGadgetText(#Text_6,"")
SetGadgetColor(#Text_6, #PB_Gadget_BackColor, RGB_A)
SetGadgetColor(#Text_6, #PB_Gadget_FrontColor,RGB(0,0,0))
SetGadgetText(#String_5, Path_lib$+"RESIDENTS\")
EndIf
;****************************************************** BOUTON Parcourir du prg.pb qui va faire un résident ********************************
Case #Button_2 ; recherche prg.pb qui va faire un résident
FichierParDefaut$ = "L:\program files\PB520\"; Répertoire et fichier par défaut qui seront affichés
; Avec la chaîne suivante nous allons définir les filtres ("|" comme séparateur) pour l'affichage de fichier :
; 1er : "Texte (*.txt)" comme nom, ".txt" et ".bat" comme extension autorisée
; 2ème : "PureBasic (*.pb)" comme nom, ".pb" comme extension autorisée
; 3ème : "Tous les fichiers (*.*)" comme nom, "*.*" comme extension autorisée, valide pour tous les fichiers
Filtre$ = "PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
Filtre = 0 ; utiliser par défaut le premier des trois filtres possibles
Path_Src$ = OpenFileRequester("Choisissez un fichier source", FichierParDefaut$, Filtre$, Filtre)
SetGadgetText(#String_2, Path_Src$)
;****************************************************** BOUTON Parcourir pour donner le nom du résident ********************************
Case #Button_5
; Path_Res$ = PathRequester("Donnez le Chemin et dans la zone ,le nom du résident ", GetGadgetText(#String_5))
FichierParDefaut$ = Path_lib$+"RESIDENTS\*.res"; Répertoire et fichier par défaut qui seront affichés
Filtre$ = "Pb résident (*.res)|*.res |Tous les fichiers (*.*)|*.*"
Path_Res$ = OpenFileRequester("Donnez le Nom d'un résident existant ou pas ", FichierParDefaut$, Filtre$, Filtre)
;************************** tester la structure du fichier *******************************
If UCase(Right(path_res$,4))<>".RES"
path_res$+".res"
EndIf
Debug path_res$
SetGadgetText(#String_5, Path_Res$)
PathFil_Res$=GetGadgetText(#String_5)
; If FileSize(PathFil_Res$)>0
; If MessageRequester("ATTENTION LE FICHIER EXISTE DEJA ", "Voulez vous l'écraser", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
; Else
; PathFil_Res$=""
; EndIf
; EndIf
Case #Editor_41
; Debug event
;************************************************************** BOUTON Création du Batch ***********************************************************
Case #Button_11
; If FileSize(PathFil_Res$)>0
; If MessageRequester("ATTENTION FICHIER "+pathfil_res$+" EXISTE DEJA ", "Voulez vous l'écraser", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
; Else
; PathFil_Res$=""
; SetGadgetText(#String_5, Path_lib$+"RESIDENTS\")
; EndIf
; EndIf
If Path_lib$<>"" And Path_Src$<>"" And GetFilePart(PathFil_Res$)<>""
ft$=Space(255)
mask$="%YY"+Str(DayOfYear(Date()))
fp$="PB"+FormatDate(mask$,Date())
fb$=Path_lib$+fp$+".BAT"
; GetTempFileName_(@U$,@fp$,000,@ft$)
asci$ = Space($FFF)
ASCII$="ECHO off"+Chr(10)
; ASCII$+"pushd "+Chr(34)+path_lib$+Chr(34)+Chr(10)
; ASCII$+"If (%2+CHR(10)==() Goto erreurf")
ASCII$+"If exist "+Chr(34)+PathFil_Res$+Chr(34)+ " del "+Chr(34)+ PathFil_Res$+Chr(34)+Chr(10)
ASCII$+ Chr(34)+Path_lib$+"compilers\pbcompiler"+Chr(34)+" "+Chr(34)+Path_Src$+Chr(34) + " /RESIDENT " +Chr(34)+ PathFil_Res$+Chr(34)+Chr(10)
ClearGadgetItems(#Editor_41)
AddGadgetItem(#Editor_41,-1,"REM Fichier "+fb$)
AddGadgetItem(#Editor_41,-1, ASCII$)
AddGadgetItem(#Editor_41,-1, "ECHO TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT TAPEZ EXIT")
Else
MessageRequester("ATTENTION l'une de ces zones n'est pas correcte ", "Lib="+Path_lib$+Chr(10)+"Source="+Path_Src$+Chr(10)+"Resident="+PathFil_Res$)
EndIf
;************************************************************** BOUTON OK ***********************************************************
Case #Button_12 ; Bouton OK
Texte$ = GetGadgetText(#Editor_41)
For k=1 To 20
fic$(k)=StringField(Texte$, k, Chr(34))
If Len(fic$)=0
mf=k
EndIf
If RTrim(LTrim(UCase(fic$(k-1))))="DEL"
fic2$=fic$(k)
If k>1
fic1$=fic$(k-2)
EndIf
EndIf
If RTrim(LTrim(UCase(fic$(k-1))))="/RESIDENT"
fic3$=fic$(k)
EndIf
Next
fic1$=RTrim(LTrim(fic1$))
fic2$=RTrim(LTrim(fic2$))
fic3$=RTrim(LTrim(fic3$))
; Debug f_s(fic2$)+f_s(fic3$)
If FileSize(fic2$)>0
If fic2$=fic3$
If MessageRequester("ATTENTION FICHIER "+fic2$+" EXISTE DEJA ", "Voulez vous l'écraser", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
Else
PathFil_Res$=""
EndIf
Else
If MessageRequester("ATTENTION FICHIER "+fic2$+" EXISTE DEJA ", "Voulez vous le supprimer"+Chr(10)+"et créer "+fic3$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
Else
PathFil_Res$=""
EndIf
EndIf
EndIf
If fic2$<>fic1$
; 123456789012345678901234567890123456 1234567890123456789012345678901234567890
; SetGadgetColor(#Text_6, RGB(255, 0, 0), #PB_Gadget_FrontColor)
SetGadgetText(#Text_6, "Fichier de controle différent du fichier à supprimer"+Chr(10)+" fichier Controle "+fic1$+Chr(10)+" fichier à supprimer "+fic2$)
Coul_t = GetGadgetColor(#text_6, #PB_Gadget_FrontColor)
Coul_f = GetGadgetColor(#text_6, #PB_Gadget_BackColor)
SetGadgetColor(#Text_6, #PB_Gadget_BackColor, RGB(0,0,$CE))
SetGadgetColor(#Text_6, #PB_Gadget_FrontColor,RGB(255,255,0))
; SetGadgetColor(#Text_6, RGB(255, 0, 0), #PB_Gadget_FrontColor)
PathFil_Res$=""
EndIf
Texte$ = GetGadgetText(#Editor_41)
If Texte$<>"" And PathFil_Res$<>""
FB.l=CreateFile(#PB_Any,fb$)
WriteData(FB, @Texte$, Len(Texte$))
CloseFile(FB)
prg=RunProgram("cmd"," /C "+ Chr(34)+fb$+Chr(34) ,"",30)
If prg
AddGadgetItem(#Editor_41,-1,"******************************** R E S U L T A T S *******************************************")
s_ascii$=ReadProgramString(prg)
Texte$=s_ascii$
OemToChar_(@s_ascii$,@s_ascii$)
texte2$=s_acii$+Chr(10)
Resultat=AddGadgetItem(#Editor_41,-1,s_ansi$)
While ProgramRunning(prg)
s_ascii$=ReadProgramString(prg)
OemToChar_(@s_ascii$,@s_ascii$)
Resultat=AddGadgetItem(#Editor_41,-1,s_ascii$)
texte2$+s_ascii$+Chr(10)
Wend
EndIf
For k=1 To 20
res$(k)=StringField(texte2$,k,Chr(10))
p_r=FindString(UCase(res$(k)),"RESIDENT",1)
p_c=FindString(UCase(res$(k)),"CREATED",1)
If p_r<>0
mp_r=p_r
If p_c<>0
mp_c=p_c
mk=k
EndIf
EndIf
Next
EndIf
Case #Button_13
If mk>0 And mp_r>0 And mp_c>0
Resultat=DeleteFile(fb$)
CloseWindow(#Window_0)
Break
Else
If MessageRequester("Vous n'avez pas réussi à créer "+Chr(10)+"Le résident ="+PathFil_Res$,"Voulez-vous continuer ? Oui ou Non",#PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes
; Coul_t = GetGadgetColor("text_6, #PB_Gadget_FrontColor)
; Coul_f = GetGadgetColor("text_6, #PB_Gadget_backColor)
SetGadgetText(#Text_6, "")
SetGadgetColor(#Text_6, #PB_Gadget_BackColor, Coul_f)
SetGadgetColor(#Text_6, #PB_Gadget_FrontColor,coul_t)
Else
Resultat=DeleteFile(fb$)
CloseWindow(#Window_0)
Break
EndIf
EndIf
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
ForEver
;
Nous pouvons observer que les 7 macros et la structure s_256b sont accessibles en tout point du programme
ils sont devenus "Global" ce qui réduit le champ de programmation.
exemple précédent après avoir placé les 7 macros et la structure dans RESIDENTS
Code : Tout sélectionner
;***************************************************************************************************************************
;* ICI NOUS SOMMES DANS LE MODULE après avoir placé les macros et la structure s_256b dans RESIDENTS *
;***************************************************************************************************************************
DeclareModule essai
Define STC.s_256B
Dim tab.l(30)
Define abcd.s
EndDeclareModule
;******************** Macros de même nom que les précédentes en tête de programme mais avec == pour les distinguer *************
Module essai
Debug "***************************************************************************************************************************"
Debug "* ICI NOUS SOMMES DANS LE Module *"
Debug "***************************************************************************************************************************"
For i=0 To 255
STC\VC[i]=i
Next
For j=1 To 16
deb$=""
For k=1 To 16
indjk=(j-1)*16+(k-1)
deb$+Str(STC\VC[indjk])+" "
Next
Debug _nl+deb$
Next
*tab=@tab(0);; Permet de vérifier que ce pointeur est disponible dans IDE sous la forme essai::*tab
For i=0 To 30
tab(i)=i*i
Next
Debug _nl+deb2$
A.a='a'
B.b='b'
C.c='c'
D.d=23.25
F.f=54.52
abc.s="Element interne"
abcd=abc+" public"
abc+" privé"
Debug _NL+_s(a)+_s(abc)+_s(abcd)+_n(A)+_d(D)+_f(F) ;; supprimer le commentaire après avoir placé les macros et la structures_256b dans RESIDENTS
deb2$=""
For k=0 To 30
deb2$+_n(tab(k))
Next
Debug _NL+deb2$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
EndModule
Debug "***************************************************************************************************************************"
Debug "* ICI NOUS SOMMES DANS LE PRG PRINCIPAL *"
Debug "***************************************************************************************************************************"
A.a='k'
B.b='l'
C.c='m'
D.d=2.45
F.f=67.89
abc.s="Element externe"
Debug _NL+_s(a)+_s(abc)+_s(essai::abcd); +__n(essai::A)+__d(essai::D)+__f(essai::F) ; la partie précédente n'est pas connue (pas de define dans declaremodule)
Debug _s(essai::abcd) ;;+" accessible dans le prg principal après déclaration dans le module et avec l'option Nom_module::nom_variable ***")
deb2$=""
For j=0 To 30
deb2$+_n(essai::tab(j))
Next
Debug _NL+deb2$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
For j=1 To 16
deb$=""
For k=1 To 16
indjk=(j-1)*16+(k-1)
deb$+Str(essai::STC\VC[indjk])+" "
Next
Debug _nl+deb$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
Next
UseModule essai
Debug "***************************************************************************************************************************"
Debug "* ICI NOUS SOMMES DANS LE PRG PRINCIPAL mais sous usemodule *"
Debug "***************************************************************************************************************************"
Define AAA.s_256B ; LA structure définie dans declaremodule est bien connue ici
Debug _NL+_s(a)+_s(abc)+_s(essai::abcd) ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
Debug _NL+_s(a)+_s(abc)+_s(abcd) ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
deb2$=""
For j=0 To 30
deb2$+_n(tab(j))
Next
Debug _NL+deb2$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
For j=1 To 16
deb$=""
For k=1 To 16
indjk=(j-1)*16+(k-1)
deb$+Str(STC\VC[indjk])+" "
Next
; Debug __nl+deb$
Debug _NL+deb2$ ;; supprimer le commentaire après avoir placé LES macros et la structures_256b dans RESIDENTS
Next
UnuseModule essai
Debug "***************************************************************************************************************************"
Debug "* ICI NOUS SOMMES DANS LE PRG PRINCIPAL mais après unusemodule *"
Debug "***************************************************************************************************************************"
Debug _NL+_s(a)+_s(abc)+_s(essai::abcd) ;; supprimer le commentaire après avoir placé LES macros et la structure s_256b dans RESIDENTS
; Debug "*tab="+Str(essai::*TAB) ; erreur l'IDE nous propose pourtant *TAB qui n'est pas déclaré
Les Constantes.
Les Structures.
Les interfaces.
Les Macros.
Les Prototypes.
qui peuvent aussi être placés dans le répertoire RESIDENTS
A plus