@Geo Trouvepatou
Lorsque j'écris un code il y a quelques règles strictes en place :
- 1 instruction = 1 ligne de code (Pas de ":" entre deux instructions sur la même ligne)
- 1 ProcedureReturn par procédure (À moins d'être vraiment, vraiment pris au pied du mur)
- Aucun Goto, GoSub, FakeReturn ou Return
- Aucunes variables Globales
- Aucunes variables en vrac dans le code, à l'exception des variables de contrôles de boucle ou de travail local dans une procédure
- Programmation Basée Objet (Objet = Structure) Idéalement 1 fichier = 1 structure
- Les chemins d'accès aux membres d'une structure sont "Wrapés" dans des macros
Disons que dans le cas de ThothBox, je ne peux pas imposer ces règles de manière aussi agressive que lorsque je travaille seul ou lorsque je suis le chef de projet.
Pour les constantes de portabilité, je suggère de les groupés sur un seul et même fichier et les organiser comme ceci :
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Constants usefull for code portability
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
#EOL$ = #CRLF$
#DirectorySeparator = "\"
CompilerCase #PB_OS_Linux
#EOL$ = #LF$
#DirectorySeparator = "/"
#White = 16777215
#LightGray = 15132390
#Gray = 12500670
#DarkGray = 6908265
#Red = 255
#Orange = 32767
#Gold = 49151
#Yellow = 65535
#Green = 65280
#DarkGreen = 32512
#Chartreuse = 65407
#SeaGreen = 32575
#Aquamarine = 12582783
#Turquoise = 12566335
#Blue = 16711680
#DarkBlue = 12517376
#Cyan = 16776960
#Purple = 16711850
#Lavender = 16760767
#Magenta = 16711935
#Brown = 3755147
#Black = 0
CompilerCase #PB_OS_MacOS
#EOL$ = #CR$
#DirectorySeparator = "/"
#White = 16777215
#LightGray = 15132390
#Gray = 12500670
#DarkGray = 6908265
#Red = 255
#Orange = 32767
#Gold = 49151
#Yellow = 65535
#Green = 65280
#DarkGreen = 32512
#Chartreuse = 65407
#SeaGreen = 32575
#Aquamarine = 12582783
#Turquoise = 12566335
#Blue = 16711680
#DarkBlue = 12517376
#Cyan = 16776960
#Purple = 16711850
#Lavender = 16760767
#Magenta = 16711935
#Brown = 3755147
#Black = 0
CompilerEndSelect
Et pour la commande de création de répertoire, voici le code corrigé :
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : BuiltPathDirectory()
; Nom du fichier : BuiltPathDirectory.pbi
; Version du fichier : 1.0.1
; Programmation : OK
; Programmé par : Guimauve
; Date : 29-04-2008
; Mise à jour : 14-09-2011
; Codé avec PureBasic V4.60
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure.b BuiltPathDirectory(Path.s)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
#PathSep = "\"
CompilerCase #PB_OS_Linux
#PathSep = "/"
CompilerCase #PB_OS_MacOS
#PathSep = "/"
CompilerEndSelect
If Right(Path, 1) <> #PathSep
Path + #PathSep
EndIf
DirectoryQty = CountString(Path, #PathSep)
For DirectoryID = 1 To DirectoryQty
Directory.s = Directory + StringField(Path, DirectoryID, #PathSep) + #PathSep
If FileSize(Directory) <> -2
CreateDirectory(Directory)
EndIf
Next
If FileSize(Directory) = -2
Success.b = #True
Else
Success = #False
EndIf
ProcedureReturn Success
EndProcedure
; Debug BuiltPathDirectory("toto\titi\vovo\aze") ; Windows
; BuiltPathDirectory("toto/titi/vovo/aze") ; Linux
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Et celle que je propose pour Thothbox en fonction des constantes données plus haut :
Code : Tout sélectionner
Procedure.b CreatePath(Path.s)
If Right(Path, 1) <> #DirectorySeparator
Path + #DirectorySeparator
EndIf
DirectoryQty = CountString(Path, #DirectorySeparator)
For DirectoryID = 1 To DirectoryQty
Directory.s = Directory + StringField(Path, DirectoryID, #DirectorySeparator) + #DirectorySeparator
If FileSize(Directory) <> -2
CreateDirectory(Directory)
EndIf
Next
If FileSize(Directory) = -2
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Moi je pars en visite chez ma mère cette week-end (environ 200 km pour y aller) je ne pourrai donc pas toucher à Thothbox avant la semaine prochaine.
A+
Guimauve