Re: Un navigateur de code (Windows)
Publié : dim. 17/nov./2024 19:35
Ok, merci.
cage
cage
Forums PureBasic - Français
https://www.purebasic.fr/french/
Code : Tout sélectionner
;
;************************************************************************
;Title : update-pbp.pb (For all my projects)
;Auteur : (C) 2024 CAGE
;Date : 2024/11/17
;Version PB : PureBasic 6.12 LTS (Windows - x86)
;Version PB : PureBasic 6.12 LTS (Windows - x64)
;Compiler Options
;~~~~~~~~~~~~~~~~
;Compiler Options : [x] Optimize generated code
;Compiler Options : [.] Enable inline ASM syntax coloring
;Compiler Options : [.] Create threadsafe executable
;Compiler Options : [.] Enable OnError lines support
;Compiler Options : [.] Enable DPI aware executable (Windows and macOS)
;Compiler Options : [.] Enable moderm theme support (for Windows X and above)
;Compiler Options : [.] Request Administrator mode for Windows Vista and above
;Compiler Options : [.] Request User mode for Windows Vista and above (no virtualisation)
;Compiler Options : [.] Enable DLL preloading protection (Windows)
;Compiler Options : Library Subsystem: []
;Compiler Options : Executable format: [Windows] [All CPU]
;Compiler Options : Linker options file: []
;Compile/Run
;~~~~~~~~~~~
;Compile/Run : [x] Enable Debugger
;Compile/Run : [x] Enable Purifier
;Compile/Run : [.] Use selected Debugger: [Integrated IDE Debugger]
;Compile/Run : [.] Use Warning mode: [Ignore Warning ]
;Compile/Run : Run executable with:
;Compile/Run : Executable CommandLine: []
;Compile/Run : Current directory: []
;Compile/Run : [x] Create temporary executable in the source directory
;Compile/Constants
;~~~~~~~~~~~~~~~~
;Compile/Constants: [.] #PB_Editor_CompileCount:
;Compile/Constants: [.] #PB_Editor_BuildCount:
;Compile/Constants: [x] #PB_Editor_CreateExecutable
;
;Libairies
;~~~~~~~~~
;Libairies: aucunes
;
;https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl
;************************************************************************
;
;========================================================================
OnErrorGoto(?ErrorHandler)
;========================================================================
EnableExplicit
EnableDebugger
CompilerSelect #PB_Compiler_EnableExplicit
CompilerCase #False
CompilerError "EnableExplicit must be indicated"
CompilerDefault
CompilerEndSelect
CompilerSelect #PB_Compiler_ExecutableFormat
CompilerCase #PB_Compiler_Executable
CompilerDefault
CompilerError "'Executable format:' must be Windows"
CompilerEndSelect
;{ Remarques:
;
;https://www.purebasic.com/documentation/reference/general_rules.html
;https://www.purebasic.com/french/documentation/reference/general_rules.html
;
;Ne PAS confondre les constantes #NUL, #Null et #Null$.
;
;La constante #NUL représente le caractère NUL.
;La constante #Null représente un pointeur null.
;La constante #Null$ représente une chaîne nulle,cad une chaine de caractère non initialisé.
;La constante #NUL$ n’existe pas.
;La constante #Empty$ représente une chaîne vide (exactement la même chose que "")
;La constante #CRLF$ représente un retour à la ligne sous Windows.
; C’est une chaîne composée des caractères #CR et #LF
; Ou la concaténation de #CR$ et #LF$
;}
Global AppPath$ = GetPathPart(ProgramFilename())
SetCurrentDirectory(AppPath$)
#copyright$ = "copyright © 2024 CAGE"
#purebasic$ = "PureBasic 6.12 LTS"
Global G$ = Chr(34)
Global CREATOR32$ = "PureBasic 6.12 LTS (Windows - x86)"
Global CREATOR64$ = "PureBasic 6.12 LTS (Windows - x64)"
Global COMPILER32$ = Space(6)+"<compiler version="+G$+CREATOR32$+G$+"/>"
Global COMPILER64$ = Space(6)+"<compiler version="+G$+CREATOR64$+G$+"/>"
Global VER1$ = FormatDate("%yy,%mm,0,%dd" , Date()) ; value="15,11,0,16"
Global VER2$ = FormatDate("%yy.%mm.%dd" , Date()) ; value="15.11.16"
Global YYYY$ = FormatDate("%yyyy" , Date()) ; value="202é"
Global YMD$ = FormatDate("%yyyy/%mm/%dd" , Date()) ; value="2022/09/23"
Global MINDATE$ = Str(Date(Year(Date()),Month(Date()),01,0,0,1))
Global MAXDATE$ = Str(Date(Year(Date())+1,Month(Date()),01,0,0,1))
Global foldr$, old$
Global project$ , pbpfile$, bakfile$, tmpfile$
Procedure.a fileExist(f$)
If FileSize(f$) = -1
ProcedureReturn #False
Else
ProcedureReturn #True
EndIf
EndProcedure
Procedure.a folderExist(f$)
If FileSize(f$) = -2
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.a updateInclude(f$)
Protected readline$
Protected text$
Protected in.a = 0
Protected out.a = 1
Protected pbfile$ = f$
Protected bakfile$ = pbfile$ + ".bak"
Protected tmpfile$ = pbfile$ + ".tmp"
If Not fileExist(bakfile$)
CopyFile(pbfile$, bakfile$)
Else
;DeleteFile(bakfile$, #PB_FileSystem_Force)
EndIf
DeleteFile(tmpfile$, #PB_FileSystem_Force)
CopyFile(pbfile$, tmpfile$)
If ReadFile(in, tmpfile$)
If CreateFile(out, pbfile$,#PB_UTF8)
While Eof(in) = 0 ; loop as long the 'end of file' isn't reached
readline$ = RTrim(ReadString(in))
; ;Auteur : (C) 2023 CAGE
; ;Date : 2023/08/10
; ;Auteur : (C) 2023 CAGE
If FindString(readline$,";Auteur : (C)",1,#PB_String_NoCase)
text$ = ";Auteur : (C) "+YYYY$+ " CAGE"
Debug text$
WriteStringN(out, text$)
; ;Date : 2023/08/10
ElseIf FindString(readline$,";Date : 20",1,#PB_String_NoCase)
text$ = ";Date : "+YMD$
Debug text$
WriteStringN(out, text$)
; ;Version PB : PureBasic 6.00 LTS (Windows - x86)
; ;Version PB : PureBasic 6.00 LTS (Windows - x64)
ElseIf FindString(readline$,";Version PB : PureBasic",1,#PB_String_NoCase)
If FindString(readline$,"(Windows - x86)",1,#PB_String_NoCase)
text$ = ";Version PB : "+CREATOR32$
EndIf
If FindString(readline$,"(Windows - x64)",1,#PB_String_NoCase)
text$ = ";Version PB : "+CREATOR64$
EndIf
Debug text$
WriteStringN(out, text$)
; ;
Else
Debug readline$
WriteStringN(out, readline$)
EndIf
Wend
CloseFile(out)
Else
; ecriture impossible
EndIf
CloseFile(in)
Else
; leture impossible
EndIf
DeleteFile(tmpfile$, #PB_FileSystem_Force)
EndProcedure
Procedure.a updateVersion(f$)
Protected readline$
Protected text$
Protected in.a = 0
Protected out.a = 1
Protected pbfile$ = f$
Protected bakfile$ = pbfile$ + ".bak"
Protected tmpfile$ = pbfile$ + ".tmp"
If Not fileExist(bakfile$)
CopyFile(pbfile$, bakfile$)
Else
;DeleteFile(bakfile$, #PB_FileSystem_Force)
EndIf
DeleteFile(tmpfile$, #PB_FileSystem_Force)
CopyFile(pbfile$, tmpfile$)
If ReadFile(in, tmpfile$)
If CreateFile(out, pbfile$,#PB_UTF8)
While Eof(in) = 0 ; loop as long the 'end of file' isn't reached
readline$ = RTrim(ReadString(in))
; ;Auteur : (C) 2022 CAGE
; ;Date : 2022/09/22
If FindString(readline$,";Auteur : (C)",1,#PB_String_NoCase)
text$ = ";Auteur : (C) "+YYYY$+ " CAGE"
Debug text$
WriteStringN(out, text$)
;Date : 2022/09/22
ElseIf FindString(readline$,";Date : 20",1,#PB_String_NoCase)
text$ = ";Date : "+YMD$
Debug text$
WriteStringN(out, text$)
; ;Version PB : PureBasic 6.00 LTS (Windows - x86)
; ;Version PB : PureBasic 6.00 LTS (Windows - x64)
ElseIf FindString(readline$,";Version PB : PureBasic",1,#PB_String_NoCase)
If FindString(readline$,"(Windows - x86)",1,#PB_String_NoCase)
text$ = ";Version PB : "+CREATOR32$
EndIf
If FindString(readline$,"(Windows - x64)",1,#PB_String_NoCase)
text$ = ";Version PB : "+CREATOR64$
EndIf
Debug text$
WriteStringN(out, text$)
; #AppVer$ = "22.07.01"
ElseIf FindString(readline$,"#AppVer$ = ",1,#PB_String_NoCase)
text$ = "#AppVer$ = "+G$+VER2$+G$
Debug text$
WriteStringN(out, text$)
; #MINDATE = 1656633601 ;;; Debug Date(2022,07,01,0,0,1) ; = 1656633601
ElseIf FindString(readline$,"#MINDATE = ",#PB_String_NoCase)
text$ = "#MINDATE = "+MINDATE$+" ;;; Debug Date(2022,07,01,0,0,1) ; = 1656633601"
Debug text$
WriteStringN(out, text$)
ElseIf FindString(readline$,"#MAXDATE = ",#PB_String_NoCase)
text$ = "#MAXDATE = "+MAXDATE$+" ;;; Debug Date(2023,07,01,0,0,1) ; = 1688169601"
Debug text$
WriteStringN(out, text$)
; #copyright$ = "copyright © 2022 CAGE"
ElseIf FindString(readline$,"#copyright$ = ",#PB_String_NoCase)
text$ = "#copyright$ = "+G$+#copyright$+G$
Debug text$
WriteStringN(out, text$)
; #purebasic$ = "PureBasic 6.00 LTS"
ElseIf FindString(readline$,"#purebasic$ = ",#PB_String_NoCase)
text$ = "#purebasic$ = "+G$+#purebasic$+G$
Debug text$
WriteStringN(out, text$)
Else
Debug readline$
WriteStringN(out, readline$)
EndIf
Wend
CloseFile(out)
Else
; ecriture impossible
EndIf
CloseFile(in)
Else
; leture impossible
EndIf
DeleteFile(tmpfile$, #PB_FileSystem_Force)
EndProcedure
Procedure.a updateProject(pbp$)
Protected readline$
Protected text$
Protected in.a = 0
Protected out.a = 1
If ReadFile(in,pbp$)
If CreateFile(out, pbpfile$,#PB_UTF8)
While Eof(in) = 0 ; loop as long the 'end of file' isn't reached
readline$ = RTrim(ReadString(in))
;<project xmlns="http://www.purebasic.com/namespace" version="1.0" creator="PureBasic 6.00 LTS (Windows - x64)">
If FindString(readline$,"creator=",1,#PB_String_NoCase)
text$ = "<project xmlns="+G$+"http://www.purebasic.com/namespace"+G$+" version="+G$+"1.0"+G$+" creator="+G$+CREATOR64$+G$+">"
Debug text$
WriteStringN(out, text$)
;<compiler version="PureBasic 6.00 LTS (Windows - x86)"/>
;<compiler version="PureBasic 6.00 LTS (Windows - x64)"/>
ElseIf FindString(readline$,"compiler version=",1,#PB_String_NoCase)
If FindString(readline$,"x86",1,#PB_String_NoCase)
Debug COMPILER32$
WriteStringN(out, COMPILER32$)
Else
Debug COMPILER64$
WriteStringN(out, COMPILER64$)
EndIf
;<field0 value="15,11,0,15"/>
;<field1 value="15,11,0,15"/>
;<field4 value="15.11.15"/>
;<field5 value="15.11.15"/>
ElseIf FindString(readline$,"field0 value=",1,#PB_String_NoCase)
text$ = " <field0 value="+G$+VER1$+G$+"/>"
Debug text$
WriteStringN(out, text$)
Continue
ElseIf FindString(readline$,"field1 value=",1,#PB_String_NoCase)
text$ = " <field1 value="+G$+VER1$+G$+"/>"
Debug text$
WriteStringN(out, text$)
Continue
ElseIf FindString(readline$,"field2 value=",1,#PB_String_NoCase)
text$ = " <field2 value="+G$+"CAGE"+G$+"/>"
Debug text$
WriteStringN(out, text$)
Continue
ElseIf FindString(readline$,"field4 value=",1,#PB_String_NoCase)
text$ = " <field4 value="+G$+VER2$+G$+"/>"
Debug text$
WriteStringN(out, text$)
Continue
ElseIf FindString(readline$,"field5 value=",1,#PB_String_NoCase)
text$ = " <field5 value="+G$+VER2$+G$+"/>"
Debug text$
WriteStringN(out, text$)
Continue
ElseIf FindString(readline$,"field9 value=",1,#PB_String_NoCase)
text$ = " <field9 value="+G$+"© CAGE"+G$+"/>"
Debug text$
WriteStringN(out, text$)
Continue
ElseIf FindString(readline$,"field10 value=",1,#PB_String_NoCase)
text$ = " <field10 value="+G$+"This software is the property of the author : CAGE"+G$+"/>"
Debug text$
WriteStringN(out, text$)
Continue
Else
Debug readline$
WriteStringN(out, readline$)
EndIf
Wend
CloseFile(out)
Else
; ecriture impossible
EndIf
CloseFile(in)
Else
; leture impossible
EndIf
EndProcedure
NewList folders.s()
Define NewMap PROJET.s()
Define P=0
;Sélectionner les projets
Define AllProjects=#False ; #True or #False
Select AllProjects
Case #True
P+1:PROJET(Str(P)) = "*.*"
Case #False
; P+1:PROJET(Str(P)) = "MYADBCTRL"
P+1:PROJET(Str(P)) = "MYPLAYERIPTV"
; P+1:PROJET(Str(P)) = "MYTVCLUBTV"
; P+1:PROJET(Str(P)) = "MYWINGET"
; P+1:PROJET(Str(P)) = "MPBROWSER"
; P+1:PROJET(Str(P)) = "PORTABILISER-PB"
; P+1:PROJET(Str(P)) = "TVFREEFR"
; P+1:PROJET(Str(P)) = "VPN-INDICATEUR"
; P+1:PROJET(Str(P)) = "YHLE-FREE"
Default : End
EndSelect
ForEach PROJET()
;If ExamineDirectory(0, ".", "*.*")
If ExamineDirectory(0, ".", PROJET())
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
foldr$ = DirectoryEntryName(0)
If foldr$ <> old$
Select Left(LCase(foldr$), 12)
Case ".", "..", "icones"
Default
AddElement(folders())
folders() = foldr$
EndSelect
EndIf
old$ = foldr$
EndIf
Wend
FinishDirectory(0)
EndIf
Next
SortList(folders(), #PB_Sort_Ascending | #PB_Sort_NoCase)
;updateInclude("pb-include.pbi")
;updateVersion("pb-version.pbi")
;updateVersion("pb-console-version.pbi")
ForEach folders()
foldr$ = folders()
If ExamineDirectory(0, ".\" + foldr$, "*.pbp")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
project$ = DirectoryEntryName(0)
pbpfile$ = ".\" + foldr$ + "\" + project$
bakfile$ = pbpfile$ + ".bak"
tmpfile$ = pbpfile$ + ".tmp"
Debug pbpfile$
If Not fileExist(bakfile$)
;Debug bakfile$
CopyFile(pbpfile$, bakfile$)
Else
;DeleteFile(bakfile$, #PB_FileSystem_Force)
EndIf
DeleteFile(tmpfile$, #PB_FileSystem_Force)
CopyFile(pbpfile$, tmpfile$)
updateProject(tmpfile$)
DeleteFile(tmpfile$, #PB_FileSystem_Force)
EndIf
Wend
EndIf
Next
ErrorHandler:
End
Code : Tout sélectionner
;
;************************************************************************
;Title : compile-pbp.pb (For all my projects)
;Auteur : (C) 2024 CAGE
;Date : 2024/11/18
;Version PB : PureBasic 6.12 LTS (Windows - x86)
;Version PB : PureBasic 6.12 LTS (Windows - x64)
;Compiler Options
;~~~~~~~~~~~~~~~~
;Compiler Options : [x] Optimize generated code
;Compiler Options : [.] Enable inline ASM syntax coloring
;Compiler Options : [.] Create threadsafe executable
;Compiler Options : [.] Enable OnError lines support
;Compiler Options : [.] Enable DPI aware executable (Windows and macOS)
;Compiler Options : [.] Enable moderm theme support (for Windows X and above)
;Compiler Options : [.] Request Administrator mode for Windows Vista and above
;Compiler Options : [.] Request User mode for Windows Vista and above (no virtualisation)
;Compiler Options : [.] Enable DLL preloading protection (Windows)
;Compiler Options : Library Subsystem: []
;Compiler Options : Executable format: [Console] [All CPU]
;Compiler Options : Linker options file: []
;Compile/Run
;~~~~~~~~~~~
;Compile/Run : [x] Enable Debugger
;Compile/Run : [x] Enable Purifier
;Compile/Run : [.] Use selected Debugger: [Integrated IDE Debugger]
;Compile/Run : [.] Use Warning mode: [Ignore Warning ]
;Compile/Run : Run executable with:
;Compile/Run : Executable CommandLine: []
;Compile/Run : Current directory: []
;Compile/Run : [x] Create temporary executable in the source directory
;Compile/Constants
;~~~~~~~~~~~~~~~~
;Compile/Constants: [.] #PB_Editor_CompileCount:
;Compile/Constants: [.] #PB_Editor_BuildCount:
;Compile/Constants: [x] #PB_Editor_CreateExecutable
;
;Libairies
;~~~~~~~~~
;Libairies: aucunes
;
;https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl
;************************************************************************
;
;========================================================================
OnErrorGoto(?ErrorHandler)
;========================================================================
EnableExplicit
EnableDebugger
CompilerSelect #PB_Compiler_EnableExplicit
CompilerCase #False
CompilerError "EnableExplicit must be indicated"
CompilerDefault
CompilerEndSelect
CompilerSelect #PB_Compiler_ExecutableFormat
CompilerCase #PB_Compiler_Console
CompilerDefault
CompilerError "'Executable format:' must be Console"
CompilerEndSelect
;{ Remarques:
;
;https://www.purebasic.com/documentation/reference/general_rules.html
;https://www.purebasic.com/french/documentation/reference/general_rules.html
;
;Ne PAS confondre les constantes #NUL, #Null et #Null$.
;
;La constante #NUL représente le caractère NUL.
;La constante #Null représente un pointeur null.
;La constante #Null$ représente une chaîne nulle,cad une chaine de caractère non initialisé.
;La constante #NUL$ n’existe pas.
;La constante #Empty$ représente une chaîne vide (exactement la même chose que "")
;La constante #CRLF$ représente un retour à la ligne sous Windows.
; C’est une chaîne composée des caractères #CR et #LF
; Ou la concaténation de #CR$ et #LF$
;}
Global AppPath$ = GetPathPart(ProgramFilename())
SetCurrentDirectory(AppPath$)
Global G$ = Chr(34)
;;; ************************************************************************
;;; ====> A MODIFIER EN FONCTION DE VOTRE CONFIGURATION
Global PUREBASIC$ = "c:\program files\purebasic\purebasic.exe"
Global CREATOR32$ = "PureBasic 6.12 LTS (Windows - x86)"
Global CREATOR64$ = "PureBasic 6.12 LTS (Windows - x64)"
Global COMPILER32$ = " <compiler version="+G$+"PureBasic 6.12 LTS (Windows - x86)"+G$+"/>"
Global COMPILER64$ = " <compiler version="+G$+"PureBasic 6.12 LTS (Windows - x64)"+G$+"/>"
Global VER0$ = FormatDate("%yyyy/%mm/%dd", Date()) ; value="2021/04/15"
Global VER1$ = FormatDate("%yy,%mm,0,%dd", Date()) ; value="15,11,0,16"
Global VER2$ = FormatDate("%yy.%mm.%dd" , Date()) ; value="15.11.16"
;;; <==== A MODIFIER EN FONCTION DE VOTRE CONFIGURATION
;;; ************************************************************************
Global folder$, old$
Global pbpfile$, pbfile$, projet$
Procedure.b fileExist(f$)
If FileSize(f$) = -1
ProcedureReturn #False
Else
ProcedureReturn #True
EndIf
EndProcedure
Procedure.b folderExist(f$)
If FileSize(f$) = -2
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
NewList folders.s()
Define NewMap PROJET.s()
Define P=0
;Sélectionner les projets
Define AllProjects=#False ; #True or #False
Select AllProjects
Case #True
P+1:PROJET(Str(P)) = "*.*"
Case #False
; P+1:PROJET(Str(P)) = "MYADBCTRL"
P+1:PROJET(Str(P)) = "MYPLAYERIPTV"
; P+1:PROJET(Str(P)) = "MYTVCLUBTV"
; P+1:PROJET(Str(P)) = "MYWINGET"
; P+1:PROJET(Str(P)) = "MPBROWSER"
; P+1:PROJET(Str(P)) = "PORTABILISER-PB"
; P+1:PROJET(Str(P)) = "TVFREEFR"
; P+1:PROJET(Str(P)) = "VPN-INDICATEUR"
; P+1:PROJET(Str(P)) = "YHLE-FREE"
Default : End
EndSelect
ForEach PROJET()
;If ExamineDirectory(0, ".", "*.*")
If ExamineDirectory(0, ".", PROJET())
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
folder$ = DirectoryEntryName(0)
If folder$ <> old$
Select Left(LCase(folder$), 12)
Case ".", "..", "icones"
Default
AddElement(folders())
folders() = folder$
EndSelect
EndIf
old$ = folder$
EndIf
Wend
FinishDirectory(0)
EndIf
Next
SortList(folders(), #PB_Sort_Ascending | #PB_Sort_NoCase)
Define PROJET=0
Define PROJETS=0
Structure champs
folder.s
pbfile.s
EndStructure
NewList projets.champs()
ForEach folders()
folder$ = folders()
If ExamineDirectory(0, ".\" + folder$, "*.pbp")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
PROJETS+1
pbfile$ = DirectoryEntryName(0)
AddElement(projets())
projets()\folder = folder$
projets()\pbfile = pbfile$
EndIf
Wend
EndIf
Next
Define sepd$="================================================="
Define sepc$="=============================================================================="
Define compiler, ExitCode, out$, outc$, outd$, log$
Define ERREURS=0
If OpenConsole()
ConsoleTitle("Compiler le projet PureBasic : ")
Define stdout = GetStdHandle_(#STD_OUTPUT_HANDLE)
Define windowSize.SMALL_RECT
With windowSize.SMALL_RECT
\left = 0
\top = 0
\right = 79
\bottom = 30
EndWith
SetConsoleWindowInfo_(stdout, #True, @windowSize)
PrintN(#Null$)
ForEach projets()
folder$ = projets()\folder
pbfile$ = projets()\pbfile
outc$=sepc$+#CRLF$
outc$+RSet(UCase(folder$),45," ")+#CRLF$
outc$+sepc$+#CRLF$
outd$=sepd$+#CR$
outd$+RSet(UCase(folder$),60," ")+#CR$
outd$+sepd$+#CR$
projet$ = GetFilePart(pbfile$)
ConsoleTitle("Compiler le projet PureBasic : "+projet$)
outc$+"Compiler le projet : "+folder$+"\"+projet$+#CR$
outd$+"Compiler le projet : "+folder$+"\"+projet$+#CR$
ConsoleColor(12,0)
PrintN(outc$) : Debug outd$ : log$+outc$
ConsoleColor(15,0)
outc$=#Null$ : outd$=#Null$
projet$=AppPath$+folder$+"\"+pbfile$ ;;; : Debug projet$
compiler = RunProgram(PUREBASIC$, "/build " + projet$, #Null$, #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
If compiler
PROJET+1
While ProgramRunning(compiler)
If AvailableProgramOutput(compiler)
out$ + ReadProgramString(compiler) + Chr(13)
EndIf
Wend
Exitcode = ProgramExitCode(compiler)
CloseProgram(compiler)
out$+"PROJET "+UCase(projets()\folder+"\"+projets()\pbfile)+" ("+PROJET+"/"+PROJETS+") : EXITCODE = "+Exitcode
ERREURS+Exitcode
out$=ReplaceString(out$,"(Windows - x86)","(Windows - x86)"+#CR$+#CR$,#PB_String_NoCase)
out$=ReplaceString(out$,Space(30)+"[ Ok ]","[ Ok ]",#PB_String_NoCase)
out$=ReplaceString(out$,Space(30)+"[ Error ]","[ Error ]",#PB_String_NoCase)
outc$=ReplaceString(out$,#CR$,#CRLF$)
PrintN(outc$) : Debug out$ : log$+outc$+#CRLF$
out$=""
;;; #True = 1
;;; #False = 0
;;; Exitcode = 0 la commande s'est bien terminée
;;; Exitcode = <> 0 une erreur s'est produite
EndIf
Next
outc$=sepc$+#CRLF$+#CRLF$
outd$=sepd$+#CRLF$+#CRLF$
PrintN(outc$) : Debug outd$ : log$+outc$
out$="NOMBRE TOTAL D'ERREURS POUR "+PROJETS+" PROJETS = "+ERREURS+#CRLF$+#CRLF$
PrintN(out$) : Debug out$ : log$+out$
Define filelog$=GetFilePart(ProgramFilename(),#PB_FileSystem_NoExtension)+".log"
Define out=CreateFile(#PB_Any,filelog$)
If out
WriteString(out,log$)
CloseFile(out)
EndIf
ConsoleTitle("Résultats de la compilation : "+ERREURS+" erreur(s) / "+PROJETS+" projets")
Print("Appuyez sur la touche [Q] pour (Q)uitter: ")
Define key$
Repeat
key$ = UCase(Inkey())
If key$="Q":Break:EndIf
Delay(20)
ForEver
CloseConsole()
EndIf
ErrorHandler:
End
Code : Tout sélectionner
; IDE Options = PureBasic 6.10 LTS (Windows - x86)
; CursorPosition = 7082
; FirstLine = 4632
; Folding = NHRT58ABF8o8-
; Optimizer
; EnableXP
; DPIAware
; UseIcon = PBBrowser resources\Images\PBBrowserLogo.ico
; Executable = PBBrowser.exe
Code : Tout sélectionner
<section name="targets">
<target name="Cible par défaut" enabled="1" default="1">
<inputfile value="Y:\PB\PB2\MYPLAYERIPTV\myLiveTV.pb"/>
<outputfile value="Y:\PB\PB2\MYPLAYERIPTV\myLiveTV.exe"/>
<options thread="1" xpskin="1" dpiaware="1" dllprotection="1" debug="1" optimizer="1"/>
<purifier enable="1"/>
<temporaryexe value="source"/>
<execonstant enable="1"/>
</target>
</section>
Code : Tout sélectionner
<section name="targets">
<target name="Cible par défaut" enabled="1" default="1">
<inputfile value="myLiveTV.pb"/>
<outputfile value="myLiveTV.exe"/>
<options thread="1" xpskin="1" dpiaware="1" dllprotection="1" debug="1" optimizer="1"/>
<purifier enable="1"/>
<temporaryexe value="source"/>
<execonstant enable="1"/>
</target>
</section>
Code : Tout sélectionner
Declare.a loop(*a)
CreateThread(@loop(), #True)
Procedure.a loop(*a)
; Variables déclarées mais non utilisées : *a ********* (PBBrowser comment)
Protected a ; ********* Added by PBBrowser.
Static isRunning.b
If isRunning
ProcedureReturn - 1
Else
isRunning = #True
EndIf
Repeat
freeWorkingMemory()
Delay(30000)
ForEver
isRunning = #False
EndProcedure
Tu as raison.cage a écrit : mar. 19/nov./2024 13:39Par contre, dans le fichier .pbp que tu crée, tu indiques le nom complet des fichiers pour inputfile et outputfile
A mon avis, ce n'est pas une bonne chose car on ne peut plus déplacer les fichiers.
Je suis également tombé sur ce genre de cas lors de mes tests personnels.cage a écrit : mar. 19/nov./2024 13:39 La fonction Thread = CreateThread(@ProcedureName(), *Value) nécessite un paramètre *Value
Par contre, ce paramètre n'est pas obligatoirement utilisé.
Dans ma procédure loop(*a), je n'ai pas besoin de la valeur de *a
Code : Tout sélectionner
Protected a ; ********* Added by PBBrowser.
Méaculpa, j'avais ajouté Debug a pour voir si ça suffisait.Ce qui est par contre anormal, c'est la mention
Protected a ; ********* Added by PBBrowser.
que ma version de PBBrowser (je viens de faire le test) n'ajoute pas à la procédure (et pour cause : la variable a n'est pas utilisée dans ta procédure).
Peut-être que cela date d'une ancienne version de PBBrowser ?
Code : Tout sélectionner
#LocalDataDir$ = "CreateMyEBook Data\"
IncludeBinary #LocalDataDir$ + "images\open.ico"
Code : Tout sélectionner
Temps consacré à l'exploration : 1,324 ms.
Temps dépensé en gestion de la fenêtre : 580 ms.
Durée totale de la phase d'exploration : 1,905 ms.
Longueur totale du code : 67,286 bytes / 1,806 lignes.
Nombre d'éléments trouvés / Éléments utilisés :
Procédure: 22 / 21.
Structure: 2 / 2.
Macro: 0 / 0.
Énumération: 3 / 3.
Interface: 0 / 0.
Label: 9 / 9.
Constante: 54 / 54.
Variable: 34 / 33.
Cette fonction de comparaison est tout à fait propre à l'IDE, et je l'ai peu utilisée. Encore une fois, cette fonction qui signale le fait qu'un fichier a été modifié n'est pas gérée par PBBrowser, mais par l'IDE lui-même (l'éditeur de PureBasic). Quand je fais un test pour voir si le comportement que tu signales se reproduit -> oui, je constate là même chose. Apparemment, les boutons suivant et précédent ne fonctionnent pas ou ne fonctionnent pas à tous les coups. Il faudrait faire un rapport de bug auprès de l'équipe PureBasic sur le forum anglais.cage a écrit : jeu. 21/nov./2024 20:27Quand j'obtiens la fenêtre qui m'indique que le fichier a été modifié sur le disque et que je clique "View Differences", une fenêtre s'ouvre avec les 2 fichiers cote a cote. Quand je clique sur "Go to next difference" ou "Go to previous difference", il ne se passe rien.
Cette remarque n'est pas tout à fait claire pour moi. Je ne suis pas sûr de comprendre ce que tu entends pas "commenter les déclarations des procédures". Ce qu'il est important de comprendre, c'est que le rôle de PBBrowser n'est pas de vérifier la syntaxe ou la cohérence du code, ce que l'IDE et le compilateur font déjà très bien. PBBrowser est conçu pour naviguer dans un code écrit et formaté selon les règles de PureBasic. Lorsqu'il tombe sur une définition de procédure, il s'attend à ce qu'elle se termine par "EndProcedure". Lorsqu'il tombe sur un appel de procédure, il s'attend à ce que cette procédure existe, etc. J'ai tenté de faire en sorte qu'il n'y ait pas de plantage quand il tombe sur des configurations de code aberrantes et il peut arriver qu'il en signale quelques unes, mais, encore une fois, ce n'est pas son rôle. Il suffit de tenter une compilation d'un code pour que l'IDE et le compilateur en signalent les faiblesses, alors je n'ai pas cherché à tout refaire de mon côté.cage a écrit : jeu. 21/nov./2024 20:27Si je commente une ou plusieurs voire toutes les déclarations des procédures, l'outil "Vérifier les déclarations des procédures" ne m'indique pas le soucis. Bien sur, si j'exécute l'application, j'ai tout de suite un message "Line xxx: Procedure() is not a function, array, list, map or macro."
Il suffit d'aller dans "Listes", puis "Variables", et de chercher celle qui est en gris au lieu d'être en noir.cage a écrit : jeu. 21/nov./2024 20:27Dans les statistiques, je n'arrive pas a trouver la variable déclarée et non utilisée. (Variable: 34 / 33.) Il-y-a-t'il une astuce pour la trouver ?
Oui, il y a la place pour ça. Ce sera dans la prochaine version.cage a écrit : jeu. 21/nov./2024 20:27J'ai voulu copier une partie du texte dans "Aide et Outils de PBBrowser" pour le mettre dans un fichier teste, et je n'ai pas pu. Peut-être un bouton "Copier" a coté du bouton "Quitter" pour pouvoir copier le message d'aide.
Je suis effectivement tombé sur plusieurs posts des forums anglais et français dans lesquels des codeurs avaient développés des petites fonctions qui recensent les procédures du code et fabriquent une liste de mentions 'Declare' à partir de là. Cela ne correspond pas du tout à mes pratiques personnelles de codage, mais si certains le font, ça n'interdit pas de leur proposer un outil pour ça. Il se trouve que ce genre de tâche rentre parfaitement dans la catégorie de ce que les outils de PBBrowser peuvent faire. C'est vraiment simple à programmer. Le plus ennuyeux, c'est de créer et gérer un panneau de choix qui demande à l'utilisateur ce qu'il veut précisément faire (avec chaque texte du panneau en version multilingue, bien sûrcage a écrit : jeu. 21/nov./2024 20:27Pour les procédures, peut-être ajouter la possibilité de les déclarer au début du code même en commentaire. Je parle uniquement des procédures du fichier .pb du projet, pas des fichiers Include
Il y a plusieurs façons d'interpréter cette question. Proposes-tu de concevoir une fonction qui renommeraient les procédures existantes en fonction d'un tri particulier ? Encore une fois, ça n'a rien de compliqué, mais c'est l'interface du bazard qui reste d'être casse-pied à mettre au point, d'autant que je ne vois pas trop à quels genres d'objectifs ça pourrait répondre et qu'il faudrait prévoir une utilisation aussi large que possible pour que cette fonction ait un sens.cage a écrit : jeu. 21/nov./2024 20:27Pense-tu qu'il serait possible de trier les procédures en les réécrivant par ordre alphabétique.
Le pliage et le dépliage sont gérés par l'IDE, et il n'offre qu'un nombre vraiment restreint de commandes en ligne pour pouvoir interagir avec lui et tenter de modifier son comportement. Il n'existe pour le moment aucun moyen d'automatiser ou de modifier sa façon de gérer les pliages. Tout ce que tu peux faire, c'est utiliser CTRL + F4 dans l'IDE.cage a écrit : jeu. 21/nov./2024 20:27Après une recherche dans le code, une grande partie des procédures sont dépliées. Serait-il possible d'avoir la possibilité de replier uniquement les procédures.
Si tu as l'occasion de re-parcourir ton code, tu vas sans doute retomber dessus à un moment où à un autre.cage a écrit : jeu. 21/nov./2024 20:27J'ai aussi rencontré un petit soucis cosmétique avec l'outil "Améliorateur cosmétique". Quelques signes "+" n'étaient ni précédés ni suivis d'un espace.
En regardant bien, j'ai trouvé une incohérence dans l'onglet Variablescage a écrit : ↑jeu. 21/nov./2024 20:27
Dans les statistiques, je n'arrive pas a trouver la variable déclarée et non utilisée. (Variable: 34 / 33.) Il-y-a-t'il une astuce pour la trouver ?
Il suffit d'aller dans "Listes", puis "Variables", et de chercher celle qui est en gris au lieu d'être en noir.
Simplement faire un Ctrl+B sur la ligne qui commence par Declare ... ou mettre un point virgule au début de la ligne Declare ...cage a écrit : ↑jeu. 21/nov./2024 20:27
Si je commente une ou plusieurs voire toutes les déclarations des procédures, l'outil "Vérifier les déclarations des procédures" ne m'indique pas le soucis. Bien sur, si j'exécute l'application, j'ai tout de suite un message "Line xxx: Procedure() is not a function, array, list, map or macro."
Comme tout un chacun, je crée les procédures au fur et a mesure de mes besoins pour arriver a mes fins avec mon application.cage a écrit : ↑jeu. 21/nov./2024 20:27
Pense-tu qu'il serait possible de trier les procédures en les réécrivant par ordre alphabétique.
Il y a plusieurs façons d'interpréter cette question. Proposes-tu de concevoir une fonction qui renommeraient les procédures existantes en fonction d'un tri particulier ? Encore une fois, ça n'a rien de compliqué, mais c'est l'interface du bazard qui reste d'être casse-pied à mettre au point, d'autant que je ne vois pas trop à quels genres d'objectifs ça pourrait répondre et qu'il faudrait prévoir une utilisation aussi large que possible pour que cette fonction ait un sens.