Les éléments suivant sont à placer dans le répertoire RESIDENT. Ils ne peuvent être compilés.
Les fichiers résidents du répertoire RESIDENTS sont des informations non compilées des 5 types d’objets nécessaires à PB.
Nous pouvons nous même installer un de ces types dans le fichier résident avec pbcompiler.exe option /RESIDENT voir doc.
Les Constantes.
Les Structures.
Les interfaces.
Les Macros.
Les Prototypes.
Les procédures peuvent être compilées avec tailBite et l’autre partie avec pbcompiler /RESIDENT
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, "LIBRAIRIE PB 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()
;{- 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", "L:\program Files\purebasic")
SetGadgetText(#String_0, Path_lib$)
SetGadgetText(#String_2, Path_lib$)
SetGadgetText(#String_5, Path_lib$+"RESIDENTS\")
;****************************************************** 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\PB431\"; 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\defaut.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)
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
;
Pour ma part à la compilation je sépare les procédures et les 5 éléments définis ci-dessus comme certains auteurs le font (en deux parties).
et je compile les procédures avec tailBite et l’autre partie avec pbcompiler /RESIDENT