Un navigateur de code (Windows)

Programmation d'applications complexes
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par cage »

Ok, merci.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par cage »

Bonsoir,

Chacun de mes projets comporte son propre fichier .pbp dans son propre dossier.

Mettre à jour manuellement chaque fichier .pbp est vraiment contraignant, surtout lorsque l'on a plusieurs dizaines de projets a gérer.
Pour me faciliter la vie, je met à jour tous les fichiers .pbp en une seule passe a l'aide d'un utilitaire développé en PB (Update-pbp.pb)
mais aussi,
pour me faciliter la vie, je compile tous les fichiers .pbp en une seule passe a l'aide d'un utilitaire développé en PB (Compile-pbp.pb)

Voici l'architecture disque de mes différents projets:
Y:\PB\PB2\PROJET00\projet00.pb
Y:\PB\PB2\PROJET00\projet00.pbp
...
Y:\PB\PB2\PROJET99\projet99.pb
Y:\PB\PB2\PROJET99\projet9.pbp
Y:\PB\PB2\1-Update-pbp.pb
Y:\PB\PB2\2-Compile-pbp.pb

En réalité, chaque projet a son nom propre et non PROJETXX

Voici le code du fichier 1-Update-pbp.pb

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
Ce code ne crée pas les fichiers .pbp mais les mets à jour en fonctions de critères que vous pouvez modifier a votre guise.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par cage »

Re,

Voici le code du fichier 2-Compile-pbp.pb:

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
Ce code compile chaque projet .pbp en fonction du contenu de chaque fichier .pbp

Un fichier log est créé qui retrace l'ensemble de la compilation des .pbp
Les erreurs sont affichés et un bilan global des erreurs est donné a la fin de l'exécution de cet utilitaire.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par ZapMan »

Hello Cage.
Merci pour le partage de tes codes !
Ils sont conformes à l'utilisation des projets que tu décrivais déjà dans les posts précédents et je conçois à quel point ils peuvent être pratiques pour le type de besoin que tu as. Mais je vois mal comment intégrer ce genre de routine dans PBBrowser sans l'alourdir avec un panneau de préférence dédié, car la plus grand partie des données que tu intègres avec tes fonctions sont des données personnalisées.
Je pense que tes codes sont parfaits pour répondre à tes besoins et qu'ils serviront probablement à d'autres membres du forum s'ils tombent dessus et partagent ce type de besoin.

Ce que j'avais en tête en décidant de gérer les projets avec PBBrowser répond à des besoins différents :
  • Lorsqu'un code n'est pas intégré dans un projet et que l'on intervient sur les "Options du compilateur", tous les réglages que l'on fait sont enregistrés à la fin du fichier de code, dans une liste qui a la forme suivante :

    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
    Cette liste est masquée lorsque l'on ouvre un fichier .pb avec l'IDE, mais on peut la voir si l'on ouvre le même fichier avec WordPad, par exemple.
  • Lorsqu'un code est intégré dans un projet et que l'on intervient sur les "Options du compilateur", tous les réglages que l'on fait sont enregistrés dans le projet. C'est plutôt une bonne idée, car cela permet d'avoir plusieurs projets différents pour le même code, et donc d'avoir plusieurs types de réglages que l'on peut conserver indépendamment.
  • Ce que je trouve extrêmement ennuyeux, c'est quand on passe d'un système à l'autre. Car, au moment de sa création, le projet ne prend pas la peine d'examiner les codes que l'on y intègre, et tous les réglages que l'on avait faits dans "Options du compilateur" sont perdus. Il faut recommencer à zéro, ce qui peut être vraiment fastidieux si l'on avait par exemple, défini des constantes et ajusté divers autres paramètres. C'est fastidieux et c'est agaçant, parce qu'il suffirait d'avoir une conversion automatique des options précédemment définies pour s'éviter ce genre de choses.
  • D'autre part, il est également fastidieux (et un peu agaçant) de devoir intégrer dans le projet les fichiers qui constituent le code, alors même qu'un simple examen des mentions "Include", "XInclude" et "IncludeBinary" permet d'en dresser la liste.
Voilà donc ce que fait PBBrowser depuis la version Beta 0.13 : il est capable de construire un projet à partir de la liste des fichiers qui a recensé en examinant les "Include", "XInclude" et "IncludeBinary", et il récupère toutes les "Options du compilateur" qui figuraient dans le fichier principal pour les intégrer dans ce nouveau projet. Plus besoin de tout se retaper à la main !
Lorsque le projet existe déjà, il se contente de comparer la liste de ses fichiers avec celle qu'il a dressé lui-même en examinant le code, et il demande à l'utilisateur s'il veut ajouter ou retirer des fichiers du projets, en fonction du résultat de cette comparaison.

Cette Beta 0.13 est en ligne à l'adresse qui figure dans le premier post.
Elle comporte également la correction du bug que tu avais identifié dans l'analyse des variables utilisées ou non, ainsi que la corrections des fautes de frappe ("suvies" ou lieu de "suivies" et "PPB" au lieu de "PBB") que tu m'a signalées.

Tout est fonctionnel et je n'ai pas résisté à l'envie de le mettre en ligne tout de suite. Mais il manque encore quelques petits messages indiquant à l'utilisateur ce qui vient de se produire (quand la fonction est exécutée) et - par exemple - pour lui proposer d'ouvrir le projet après sa création. J'ajouterai ça dans les versions à venir.

Encore un très grand merci pour ton aide, tes explications et ta fidélité à PBBrowser !
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par cage »

Bonjour,

Merci pour cette nouvelle version.
Téléchargée, compilée et testée.

J'ai testé uniquement l'outil "Créer ou mettre à jour un 'projet' PureBasic"

Le fichier .pbp est bien créé et fonctionnel.

Par 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.
Il vaut mieux rester en relatif.
Contenu actuel:

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>
Contenu souhaité:

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>
Ceci permet de déplacer le/les dossier(s) du projet sans avoir a modifier les fichiers .pbp
Je vais continuer a tester et a te remonter ce que je pourrais éventuellement trouver.
:D
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par cage »

Un autre petit soucis

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
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

A part utiliser la valeur de a dans la procédure, il-y-a-t'il une autre possibilité ?

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par ZapMan »

Bonjour Cage,

Encore merci pour ce nouveau test !
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.
Tu as raison.
J'ai fait ça en me disant que cela permettait de déplacer le fichier du projet sans avoir à recréer la liste des fichiers (ce qui est vrai aussi).
Mais cela ne suit pas la logique initiale de l'éditeur de PureBasic lorsqu'on y crée un projet. Après réflexion (et grâce à ta remarque) j'en viens à me dire qu'il faut suivre la même logique ou cela va créer tout un tas de problème. La beta 0.14 corrige donc ce point.
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
Je suis également tombé sur ce genre de cas lors de mes tests personnels.
La mention de PBBrowser n'est pas fausse pour autant : la variable est bien "déclarée mais non utilisée".
Est-ce vraiment un problème d'avoir ce commentaire ? N'est-ce pas plutôt une bonne chose de le voir figurer, en cas de doute lorsque tu reviendras éventuellement sur cette procédure dans quelques années ?

Ce qui est par contre anormal, c'est la mention

Code : Tout sélectionner

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 ?

En faisant mes tests, j'ai constaté que la fonction "Vérifier les déclarations des procédures" (tout comme l'améliorateur cosmétique) ne donne évidemment aucun résultat lorsque le fichier n'a pas été préalablement enregistré par l'utilisateur. La beta 0.14 prévient désormais l'utilisateur qu'il faut d'abord enregistrer le code avant de lancer ces fonctions.

Par ailleurs, je reviens sur la fonction de création/mise à jour de projet pour ajouter d'autres remarques :
- Lorsque le projet est ouvert, dans l'IDE, PBBrowser ne parvenait pas à le modifier et il ne signalait pas cette difficulté. La beta 0.14 commence par regarder si le projet est ouvert dans l'IDE et, si c'est le cas, signale à l'utilisateur qu'il faut le fermer pour pouvoir le mettre à jour.
- Une fois le projet créé ou modifié, la beta 0.14 demande à l'utilisateur s'il veut l'ouvrir.
- Lorsque l'examen d'un projet existant est fait et qu'il ne donne lieu à aucune modification, la beta 0.14 signale à l'utilisateur que le projet était à jour et que rien n'a été modifié.
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par ZapMan »

Je viens de publier la beta 0.14 et le commentaire ci-dessus a été édité en conséquence.
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par cage »

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 ?
Méaculpa, j'avais ajouté Debug a pour voir si ça suffisait.
C'est le pourquoi de Protected a ; ********* Added by PBBrowser.
De plus, j'ai effacé le Debug a

Je vais tester cette nouvelle version et te remonter ...

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par ZapMan »

Je viens de mettre en ligne la version beta 0.15 qui corrige quelques petits bugs :
- La vérification des variables locales ne marchait pas bien dans les procédures déclarées comme 'ProcedureC'
- Le path de l'exécutable n'était pas correctement ajusté dans "Création et mise à jours des projets".

Et je viens de constater un autre problème : lorsque PBBrowser dresse la liste des fichiers appartenant au projet à l'aide des 'Include', 'XInclude' ou 'IncludeBinary', il ne sait pas calculer les adresses intégrant des noms de constantes.
Par exemple :

Code : Tout sélectionner

#LocalDataDir$ = "CreateMyEBook Data\"
IncludeBinary #LocalDataDir$ + "images\open.ico"
Je vais travailler là-dessus.
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par ZapMan »

La Beta 0.16 est en ligne. Elle règle le problème des noms de constantes dans les déclarations Include, XInclude et BinaryInclude.
Un bug très occasionnel dans la liste des variables utilisées ou non par une procédure a également été débusqué et réglé.

Le lien de téléchargement figure en page 1, dans le premier post de ce sujet.
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par cage »

Bonjour,

Merci pour cette nouvelle version.
Téléchargée, compilée et testée.

Quelques petites choses:

Quand 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.

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."

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 ?

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.
J'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.

Pour 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

Pense-tu qu'il serait possible de trier les procédures en les réécrivant par ordre alphabétique.

Aprè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.

J'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.
Je n'ai malheureusement pas noté sur quelle partie du code.
Je vais essayer de retrouver où.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par ZapMan »

Bonjour Cage.
Je réponds à ton festival de remarques. J'ai bien peur de ne pas t'apporter grand chose de satisfaisant cette fois, mais allons-y !
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 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: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."
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: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 ?
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: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.
Oui, il y a la place pour ça. Ce sera dans la prochaine version.
cage 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
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ûr :). Je l'inscris sur la 'To do list'.
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.
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: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.
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: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.
Si tu as l'occasion de re-parcourir ton code, tu vas sans doute retomber dessus à un moment où à un autre.
Je viens justement de faire un ajustement sur cette fonction qui ne gérait pas correctement l'opérateur "With", ni les codes ascii représentés par la forme 'l' (cette façon de procéder assez peu connue permet de représenter le code ascii de la lettre "l". C'est-à-dire que Debug 'l' donne le même résultat que Debug Asc("l")). Ces ajustements figureront dans la version beta 0.17.
Si tu remets le doigt sur ton signe "+", envoie moi le code de la ligne où ça figure, et je corrigerai.

Merci encore pour tous tes tests !!
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Un navigateur de code (Windows)

Message par cage »

Bonsoir,
cage 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.
En regardant bien, j'ai trouvé une incohérence dans l'onglet Variables
Image
Une variable .a est trouvée par PBBrowser alors que cette variable n'existe pas.
Une variable .a dans le code provoque un Line X: Syntax error.
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."
Simplement faire un Ctrl+B sur la ligne qui commence par Declare ... ou mettre un point virgule au début de la ligne Declare ...
Les procédures se trouvant en fin du code ont besoin d'êtres déclarées en début du code avant de pouvoir êtres utilisées.
Ce qui serait bien, c'est que PBBrowser nous avertisse avant d"exécuter le code.
Ça revient un peu au même que ma demande de déclarer toutes les procédures au début du code.
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.
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.
Je ne fais pas attention a l'ordre dans lequel je les écris et il m'arrive même de changer le nom de mes procédures en cours de route.
Au final, on obtiens un ensemble de procédures dont les noms sont dans n'importe quel ordre.
Ma demande était de trier les procédures alphabétiquement par leur nom sans rien changer dans leur code pour qu'elles se retrouvent par ordre alphabétique dans le code final.
Ce qui revient a modifier le code, mais seulement pour réécrire les procédures dans l'ordre alphabétique de leur nom. (Procédures a-->z)

Poursuite des tests en cours.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Un navigateur de code (Windows)

Message par Micoute »

Ce logiciel me paraît très prometteur, c'est dommage que je programme beaucoup moins que dans mes belles années, mais bravo à ZapMan pour tout ce labeur.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre