Une nouvelle constante pour le compilateur

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Une nouvelle constante pour le compilateur

Message par Thyphoon »

Une idée en triant mon répertoire avec tout mes fichiers d'include qui sont partager entre plusieurs projet.
ça serait bien d'avoir une constante du style

Code : Tout sélectionner

#PB_Compiler_MainSourceFile 
avec comme valeur #true si il s'agit du fichier principal de la compilation ou #false si c'est un include.
ça permettrait de mettre du code de test ou des exemples sur nos fichiers d'include qui ne serait pas compilé lorsqu'on inclus le fichier a un autre programme principal.
Vous comprenez ce que que je veux dire ? :roll:

on pourrait rajouter dans l'IDE dans le menu compiler "compiler le fichier courant individuellement" histoire de compilier un fichier sans l'inclure au reste du projet ça pourrait être pratique ! non ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Une nouvelle constante pour le compilateur

Message par Le Soldat Inconnu »

Du même avis :D Ce serait fort pratique
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

Re: Une nouvelle constante pour le compilateur

Message par anissa »

histoire de compiler un fichier sans l'inclure au reste du projet ça pourrait être pratique !non ?
Ce serait intéressant dans la mesure où ça sera effectivement plus rapide et qu'on puisse aussi corriger rapidement les erreurs de syntaxes.. Mais, que se passera t il si ce morceau de code utilise un lien (procedure ou fonction) qui se trouve sur l'autre bout de code qui ne sera pas compilé en même temps que ce premier code?
Je ne sais pas si c correct ce que je dis mais bon, corrigez moi si j'ai mal compris...
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Une nouvelle constante pour le compilateur

Message par Thyphoon »

anissa a écrit : Ce serait intéressant dans la mesure où ça sera effectivement plus rapide et qu'on puisse aussi corriger rapidement les erreurs de syntaxes.. Mais, que se passera t il si ce morceau de code utilise un lien (procedure ou fonction) qui se trouve sur l'autre bout de code qui ne sera pas compilé en même temps que ce premier code?
et bien si il y a un include dans le fichier en question alors il sera prit en compte.

je ré explique:pour tout mes projets j'ai un répertoire que j'appel shareinclude dans le quel j'ai des codes pour faire des trucs spécifique. Un pour le easing (mouvement), un pour un interpréteur de script, un pour des fonctions sur les sprites3D qui ne sont pas intégré a PB d'office etc... chaqu'un de ces codes est autonome. Si j'ai besoin d'un interpréteur de script dans un de mes projets alors je fais un include de ce fichier. D'ou l'idée de cette nouvelle constante. ça permet de laisser le code de démonstration a la fin du fichier et qu'il ne soit pas prit en compte lorsqu'il est inclus dans un projet, et si le fichier est tout seul alors il execute le code de démonstration/exemple
Qu'en penses tu ? est ce que je suis un peu plus claire ?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Une nouvelle constante pour le compilateur

Message par G-Rom »

Je ne vois pas l'intérêt, tu as deja des fct du style : Defined()
A toi de les utiliser, non?
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Une nouvelle constante pour le compilateur

Message par Thyphoon »

G-Rom a écrit :Je ne vois pas l'intérêt, tu as deja des fct du style : Defined()
A toi de les utiliser, non?
Heu je vois pas du tout ce que ça vient faire ici ...
Bon je sais que je suis pas le meilleur pour expliquer les choses mais bon ...
J'aimerais juste une constante qui permet au moment ou je compile le code savoir si le fichier en question est le fichier principal du projet ou si c'est un fichier inclus dans un autre.
Exemple de fichier

Code : Tout sélectionner

; Autor: Thomas (ts-soft) Schulz
; PB-Version: 4.xx
; OS: windows/linux/macos

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Linux
    ImportC #PB_Compiler_Home + "purelibraries/linux/libraries/zlib.a"
  CompilerCase #PB_OS_MacOS
    ImportC "/usr/lib/libz.dylib"
  CompilerCase #PB_OS_Windows
    ImportC "zlib.lib"
CompilerEndSelect
compress2(*dest, *destLen, *source, sourceLen, level)
uncompress(*dest, *destLen, *source, sourceLen)
EndImport
    
Procedure zipPackMemory(*source, sourceLen = #PB_Default, level = #PB_Default)
  Protected *dest, destLen
  
  If level < #PB_Default Or level > 9 : level = #PB_Default : EndIf
  If *source
    If sourceLen = #PB_Default : sourceLen = MemorySize(*source) : EndIf
    destLen = sourceLen + 13 + (Int(sourceLen / 100))
    *dest = AllocateMemory(destLen)
    If *dest
      If Not compress2(*dest, @destLen, *source, sourceLen, level)
        *dest = ReAllocateMemory(*dest, destLen)
        ProcedureReturn *dest
      EndIf
    EndIf
  EndIf
EndProcedure

Procedure zipUnpackMemory(*source, *dest)
  Protected sourceLen = MemorySize(*source)
  Protected destLen = MemorySize(*dest)
  
  If Not uncompress(*dest, @destLen, *source, sourceLen)
    ProcedureReturn destLen
  EndIf
EndProcedure

;si ce code est exécuter seul alors je compile aussi l'exemple qui va avec
;et je ne compile pas ce code si ce fichier est inclus dans un projet
CompilerIf #PB_Compiler_MainSourceFile=#True
  text.s="test de compression dans une phrase tres longue..."
  size=StringByteLength(text,#PB_Ascii)+1
  Debug "taille de depart:"+Str(size)
  *Mem = AllocateMemory(size)
  PokeS(*Mem,text)
  *src=zipPackMemory(*Mem)
  Debug "taille compressé:"+Str(MemorySize(*src))
  FreeMemory(*Mem)
  *new=AllocateMemory(size)
  zipUnpackMemory(*src, *new)
  Debug PeekS(*new,#PB_Ascii)
CompilerEndIf

G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Une nouvelle constante pour le compilateur

Message par G-Rom »

J'ai tres bien compris ta demande, ce que je voulais dire c'est que tu peut déclarer une constante dans ton fichier principal, et dans tes includes utiliser la fonction defined() pour compiler ou pas la partie exemple, je te ferais un exemple en rentrant, coder avec un mobile c'est pas facile. :mrgreen:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Une nouvelle constante pour le compilateur

Message par Thyphoon »

G-Rom a écrit :J'ai tres bien compris ta demande, ce que je voulais dire c'est que tu peut déclarer une constante dans ton fichier principal, et dans tes includes utiliser la fonction defined() pour compiler ou pas la partie exemple, je te ferais un exemple en rentrant, coder avec un mobile c'est pas facile. :mrgreen:
Je veux bien ! je suis currieux de voir comment tu veux faire ! :D Merci d'avance ! :D
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Une nouvelle constante pour le compilateur

Message par G-Rom »

dans tes includes , tu rajoute ceci :

Code : Tout sélectionner

CompilerIf Defined(MAIN_FILE,#PB_Constant)=0
  Debug "Cette partie sera compilé"
CompilerEndIf
a la place de 'Debug "Cette partie sera compilé"' tu colles ton exemple.
et dans ton fichier principal , tu déclares #MAIN_FILE = 0, comme ca , ton main quand il sera compilé , il ne compilera pas les exemples dans les includes , d'ou l'inutilité de ta demande :D
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Une nouvelle constante pour le compilateur

Message par Thyphoon »

Merci beaucoup ! Effectivement c'est pas mal du tout ! ça me plait !! :o)
bon une constante qui serait géré directement dans PB ça serait le top, mais ta methode en attendant est bonne ! Merci :mrgreen:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Une nouvelle constante pour le compilateur

Message par Le Soldat Inconnu »

Oui, excellente idée :)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Une nouvelle constante pour le compilateur

Message par G-Rom »

Thyphoon a écrit :Merci beaucoup ! Effectivement c'est pas mal du tout ! ça me plait !! :o)
bon une constante qui serait géré directement dans PB ça serait le top, mais ta methode en attendant est bonne ! Merci :mrgreen:
Comment veut tu que le compilateur détermine le fichier principal , en PB il n'y a pas de fonction d'entrer , comme main() en C.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Une nouvelle constante pour le compilateur

Message par Thyphoon »

G-Rom a écrit :
Thyphoon a écrit :Merci beaucoup ! Effectivement c'est pas mal du tout ! ça me plait !! :o)
bon une constante qui serait géré directement dans PB ça serait le top, mais ta methode en attendant est bonne ! Merci :mrgreen:
Comment veut tu que le compilateur détermine le fichier principal , en PB il n'y a pas de fonction d'entrer , comme main() en C.
ba tout simplement car dans un projet il est marqué => menu compiler=>compiler option=>main source file
mais il peut le déterminer facilement au moment de la compilation a savoir si cette partie du code vient d'un include ou pas !
Répondre