un ou deux exemples c'est plus parlant mais c'est comme vous voulez!, merki

Code : Tout sélectionner
Procedure.s CheminPureBasic()
; retourne le chemin du dossier Purebasic quelque soit l'OS sous windows
cbData = (#MAX_PATH * 2) + 2
lpbData = AllocateMemory(cbData)
If GetVersion_() & $ff0000 ; Windows NT/XP
If RegOpenKeyEx_(#HKEY_CLASSES_ROOT, "Applications\PureBasic.exe\shell\open\command", 0, #KEY_ALL_ACCESS, @hKey1) = #ERROR_SUCCESS
If RegQueryValueEx_(hKey1, "", 0, @Type, lpbData, @cbData) = #ERROR_SUCCESS
Folder$ = PeekS(lpbData)
Folder$ = GetPathPart(Mid(Folder$, 2, Len(Folder$) - 7))
EndIf
RegCloseKey_(hKey1)
EndIf
Else ; The same for Win9x
If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Classes\PureBasic.exe\shell\open\command", 0, #KEY_ALL_ACCESS, @hKey1) = #ERROR_SUCCESS
If RegQueryValueEx_(hKey1, "", 0, @Type, lpbData, @cbData) = #ERROR_SUCCESS
Folder$ = PeekS(lpbData)
Folder$ = GetPathPart(Mid(Folder$, 2, Len(Folder$) - 7))
EndIf
RegCloseKey_(hKey1)
EndIf
EndIf
FreeMemory(lpbData)
ProcedureReturn Folder$
EndProcedure
; on teste si le fichier Purebasic.asm du dossier Compiler existe, si oui on l'efface
; pour être sur que la fonction a réussi
Chemin_PB.s = CheminPureBasic()
Fichier_PureBasic.s = Chemin_PB + "Projets\Fortix.pb"
Fichier_asm.s = Chemin_PB + "Projets\Fortix.asm"
If ReadFile(0, Fichier_asm) <> 0
; on le supprime
CloseFile(0)
If DeleteFile(Fichier_asm) = 0
; le fichier n'a pas pu être effacé
MessageRequester("Attention","Le fichier "+Fichier_asm+Chr(10)+"n'a pas pu être effacé"+Chr(10)+Chr(10)+"ferez le fichier ou l'application qui utilise ce fichier avant de recommencer",16)
Else
a = RunProgram(Chemin_PB + "Compilers\PBCompiler.exe", Chr(34)+ Fichier_PureBasic + Chr(34) + " /INLINEASM /COMMENTED /EXE " + Chr(34) , CheminPureBasic()+ "Projets\", #PB_Program_Wait)
EndIf
Else
a = RunProgram(Chemin_PB + "Compilers\PBCompiler.exe", Chr(34)+ Fichier_PureBasic + Chr(34) + " /INLINEASM /COMMENTED /EXE " + Chr(34) , CheminPureBasic()+ "Projets\", #PB_Program_Wait)
EndIf
; on fait une copie du fichier asm en le renommant
If CopyFile(Chemin_PB+"Compilers\Purebasic.asm", Fichier_asm)
Taille = FileSize(Fichier_asm)
MessageRequester("Création de fichier asm PureBasic", "Le fichier asm " + Fichier_asm + " a été créé " + Chr(10) + Chr(10) + "Taille du fichier : " + Chr(10) + Str(Taille) + " octets", $40)
Else
MessageRequester("Création de fichier asm PureBasic","Impossible de créer le fichier asm",$40)
EndIf
Code : Tout sélectionner
Procedure.s CheminPureBasic()
; retourne le chemin du dossier Purebasic quelque soit l'OS sous windows
cbData = (#MAX_PATH * 2) + 2
lpbData = AllocateMemory(cbData)
If GetVersion_() & $ff0000 ; Windows NT/XP
If RegOpenKeyEx_(#HKEY_CLASSES_ROOT, "Applications\PureBasic.exe\shell\open\command", 0, #KEY_ALL_ACCESS, @hKey1) = #ERROR_SUCCESS
If RegQueryValueEx_(hKey1, "", 0, @Type, lpbData, @cbData) = #ERROR_SUCCESS
Folder$ = PeekS(lpbData)
Folder$ = GetPathPart(Mid(Folder$, 2, Len(Folder$) - 7))
EndIf
RegCloseKey_(hKey1)
EndIf
Else ; The same for Win9x
If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Classes\PureBasic.exe\shell\open\command", 0, #KEY_ALL_ACCESS, @hKey1) = #ERROR_SUCCESS
If RegQueryValueEx_(hKey1, "", 0, @Type, lpbData, @cbData) = #ERROR_SUCCESS
Folder$ = PeekS(lpbData)
Folder$ = GetPathPart(Mid(Folder$, 2, Len(Folder$) - 7))
EndIf
RegCloseKey_(hKey1)
EndIf
EndIf
FreeMemory(lpbData)
ProcedureReturn Folder$
EndProcedure
Procedure.b CreateAsm(FichierPureBasic.s)
; retourne #true si le fichier asm a correctement été créé sinon retourne #false
If LCase(GetExtensionPart(FichierPureBasic)) = "pb"
FichierAsm.s = Mid(GetFilePart(FichierPureBasic), 1, Len(GetFilePart(FichierPureBasic)) - 2) + "asm"
FichierExe.s = Mid(GetFilePart(FichierPureBasic), 1, Len(GetFilePart(FichierPureBasic)) - 2)
CheminAsm.s = GetPathPart(FichierPureBasic)
Else
; ce n'est pas un fichier PB, on quitte
ProcedureReturn #False
EndIf
Sortie$ = ""
Compilateur = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", Chr(34)+ FichierPureBasic + Chr(34) + " /INLINEASM /COMMENTED /EXE " + Chr(34)+ FichierExe+Chr(34) , "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
If Compilateur
While ProgramRunning(Compilateur)
Sortie$ + ReadProgramString(Compilateur) + Chr(13)
Wend
EndIf
DeleteFile(CheminAsm+FichierExe)
If ProgramExitCode(Compilateur) = 0
If FindString(Sortie$, "- Feel the ..PuRe.. Power -", Len(Sortie$)-28)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
Chemin_PB.s = CheminPureBasic()
Fichier_PureBasic.s = Chemin_PB + "Projets\Fortix.pb"
Fichier_asm.s = Chemin_PB + "Projets\Fortix.asm"
If ReadFile(0, Fichier_asm) <> 0
; on le supprime
CloseFile(0)
If DeleteFile(Fichier_asm) = 0
; le fichier n'a pas pu être effacé
MessageRequester("Attention","Le fichier "+Fichier_asm+Chr(10)+"n'a pas pu être effacé"+Chr(10)+Chr(10)+"fermez le fichier ou l'application qui utilise ce fichier avant de recommencer",16)
Else
retour = CreateAsm(Fichier_PureBasic)
EndIf
Else
retour = CreateAsm(Fichier_PureBasic)
EndIf
If retour
; on fait une copie du fichier asm en le renommant
If CopyFile(Chemin_PB+"Compilers\Purebasic.asm", Fichier_asm)
Taille = FileSize(Fichier_asm)
MessageRequester("Création de fichier asm PureBasic", "Le fichier asm " + Fichier_asm + " a été créé " + Chr(10) + Chr(10) + "Taille du fichier : " + Chr(10) + Str(Taille) + " octets", $40)
Else
MessageRequester("Création de fichier asm PureBasic","Impossible de créer le fichier asm",$40)
EndIf
Else
MessageRequester("Création de fichier asm PureBasic","Impossible de créer le fichier asm",$40)
EndIf
Code : Tout sélectionner
Chemin_PB.s = #PB_Compiler_Home
RegisLG a écrit :Denis, pourquoi ne pas supprimer ta procédure CheminPureBasic() et utiliserCode : Tout sélectionner
Chemin_PB.s = #PB_Compiler_Home
A la fin de la compilation, l'executable est automatiquement lancé.C:\Program Files\PureBasic\Projets>..\compilers\pbcompiler.exe "fortix.pb" /inlineasm /commented
Depuis les versions précédante de PB, il n'est pas possible de faire un asm sans créer un exe ou sans lancer la création d'un exe. J'ai déjà demandé à Fred d'avoir une commande pour créer un asm sans avoir ce comportement (toujours pas faitRegisLG a écrit :Un truc qui m'échappe :
A partir de la ligne de commande sous xp, je tape ceci :A la fin de la compilation, l'executable est automatiquement lancé.C:\Program Files\PureBasic\Projets>..\compilers\pbcompiler.exe "fortix.pb" /inlineasm /commented
Par contre avec ton programme, l'executable n'est pas lancé (j'ai testé en mettant en commentaire la ligne 'DeleteFile(CheminAsm+FichierExe)').
Je ne comprends pas pourquoi, le même programme (pbcompiler.exe) a 2 comportements différents suivant qu'il est lancé en ligne de commande ou via un runprogram.
Une idée ?
La création de l'asm fonctionne bien avec les commandes dos, peut-être que la version de démo ne permet pas la création de l'asmFig a écrit :Autre question, pourquoi on a pas une commande dans l'IDE pour sortir le fichier asm ? (actuellement j'utilise la jaPBe et la version 4.00 demo)