IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Interface du compilateur PureBasic

Date de publication : 21 novembre 2009

Par Comtois
 

Cet article est la traduction d'un document PureBasic traitant de l'interface de communication du compilateur de PureBasic avec des éditeurs et des scripts.

I. Compatibilité
II. Généralités
III. Sous système et le mode Unicode
III-1. Commandes supportées (depuis la version 4.10)
III-1-1. END
III-1-2. SOURCE<T><FichierSource>
III-1-3. SOURCEALIAS<T><SouceFile Alias>
III-1-4. INCLUDEPATH<T><Chemin>
III-1-5. RESOURCE<T><File>
III-1-6. ICON<T><File>
III-1-7. TARGET<T><FichierCible>
III-1-8. CONSTANT<T><ConstantDefinition>
III-1-9. LINKER<T><FichierCommandeLieur>
III-1-10. COMPILE<T><FlagsList>
III-1-10-1. Réponses du compilateur
III-1-10-1-i. SUCCESS
III-1-10-1-ii. ERROR<T>SYNTAX<T><Source NumeroLigne>
III-1-11. INCLUDEFILE<T><NomFichier><T><NumeroLigne>
III-1-12. MESSAGE<T><Texte>
III-1-13. OUTPUT<T>COMPLETE
III-1-14. FUNCTIONLIST
III-1-15. STRUCTURELIST
III-1-16. INTERFACELIST
III-1-17. STRUCTURE<T><Nom>
III-1-18. INTERFACE<T><Nom>
III-1-19. HELPDIRECTORY<T><NomFonction>
III-3. Remerciements


I. Compatibilité

Nous [la PBTeam] essayons de garder la compatibilité avec les anciennes versions autant que possible, donc les anciens éditeurs/scripts peuvent encore fonctionner avec les nouvelles versions de PB.

Les exceptions seront inscrites dans ce document fourni avec chaque nouvelle version de compilateur.

Les anciennes versions de PB pour Windows (inférieures à 4.00) utilisaient une Interface qui n'est plus valable pour les versions récentes (supérieures Version 4.00). Donc, si vous utilisiez cette Interface, il vous faut faire la mise à jour.


II. Généralités

Quand le compilateur est démarré avec l'option /STANDBY (sous Windows) ou l'option --standby (sous Linux et Mac), il va attendre les commandes depuis l'entrée standard et répondre vers la sortie standard. Cela permet de contrôler le compilateur depuis un langage ou script capable d'accéder au canal standard du programme.

Sous PB, la librairie 'Process' permet cet échange d'information.

Les commandes doivent être données sous forme de texte terminé par un code de retour chariot (code ASCII 13, #CRLF ou #LF). Il est important de respecter cette syntaxe sinon le compilateur va mal réagir. La fonction 'WriteProgramStringN()' de la librairie 'process' assure bien cette manoeuvre.

D'autres langages ont cette même fonction comme fflush() en C.

Une commande doit être écrite en majuscule en début de ligne, suivi d'éventuels arguments séparés par une tabulation. (Les tabulations sont Notées <T> dans ce document).

Il ne doit pas y avoir d'espace, sauf s'ils appartiennent à un des arguments d'une commande.

Excepté au démarrage, le compilateur écrira tout dans la sortie standard en tant que réponse à une commande envoyée. Donc, vous avez besoin de vérifier l'arrivée d'une réponse uniquement après l'envoi d'une commande.

Le retour de réponse dépend donc uniquement du fait que l'on envoie des commandes. Si rien n'est envoyé, la réponse est une ligne unique de départ.

Dès le démarrage, le compilateur écrit cette ligne:
STARTING<T><VersionNr><VersionString>
<VersionNr> contient le numéro de version du compilateur sous la forme '4.30'
Cette valeur peut être utilisée pour déterminer quelles commandes sont supportés par le compilateur.

<VersionString> est la version du compilateur sous la forme 'PureBasic 4.10 (Windows - x86)'.

Ensuite, le compilateur charge ses librairies, et indique la ligne suivante:
READY
- Le compilateur a fini son chargement initial et est prêt à fonctionner.

ERROR<T><Message>
- Le compilateur ne peut pas fonctionner correctement pour les raisons données dans le message.

ERROR<T>SUBSYSTEM<T><SubsystemName>
- Le compilateur ne trouve pas le sous-système spécifié.

Après le message 'READY', le compilateur attend désormais les commandes sur le canal d'entrée standard.

Par contre, après un message 'ERROR', le compilateur s'arrête immédiatement.


III. Sous système et le mode Unicode

Les options de librairie sous-système et d'unicode ne peuvent être modifiées pendant le fonctionnement du compilateur.

Pour effectuer un tel changement, le compilateur doit être redémarré. C'est pourquoi ces deux types d'options sont indisponibles ici. Ces deux types d'options doivent être spécifiées dans la ligne de commande, au démarrage du compilateur, au même titre que l'option /STANDBY.


III-1. Commandes supportées (depuis la version 4.10)



III-1-1. END

Ordonne au compilateur de s'arrêter.

Paramètre(s) : Aucun
Réponse(s) : Aucune


III-1-2. SOURCE<T><FichierSource>

Indique au compilateur le nom du fichier source pour la prochaine compilation.

Paramètre(s) : Le nom du fichier source. (Il doit contenir l'intégralité du chemin d'accès)
Réponse(s) : Aucune


III-1-3. SOURCEALIAS<T><SouceFile Alias>

Indique au compilateur le nom du fichier qui sera retourné dans la constante #PB_Compiler_File pour le code source principal à la place du nom de fichier spécifié par la commande SOURCE.
C'est utile pour les éditeurs qui compilent à partir d'un fichier temporaire, mais qui veulent que le fichier source réel soit reporté ici.

Paramètre(s) : Le nom du fichier (doit contenir l'intégralité du chemin d'accès)
Réponse(s) : Aucune


III-1-4. INCLUDEPATH<T><Chemin>

Indique au compilateur quelles instructions de tous les 'FichierDInclusion' seront prises en compte.
Cela permet de mettre le fichier source dans répertoire temporaire en incluant les fichiers relatifs au chemin d'origine.
Si le chemin d'inclusion n'est pas spécifié, le chemin du fichier source est utilisé par défaut.

Paramètre(s) : Le chemin d'accès. Il doit être complet et terminé par un caractère '\' ou '/' (selon l'OS)
Réponse(s) : Aucune


III-1-5. RESOURCE<T><File>

(Pour Windows uniquement) Spécifie un script ressource (*.rc) à inclure dans la compilation.

Paramètre(s) : Le nom de fichier. (doit contenir le chemin complet)
Réponse(s) : Aucune


III-1-6. ICON<T><File>

Spécifie une icône pour l'application.

Paramètre(s) : Le nom de fichier. (doit contenir le chemin complet)
Réponse(s) : Aucune

Types de fichier supportés :

  • Windows : *.ico
  • MacOSX : *.icns
  • Linux : Non supporté

III-1-7. TARGET<T><FichierCible>

Spécifie le fichier cible pour la prochaine compilation.

Paramètre(s) : Le nom de fichier. (doit contenir le chemin complet)
Réponse(s) : Aucune


III-1-8. CONSTANT<T><ConstantDefinition>

Définit une constante pour la prochaine compilation.

Paramètre(s) : La ligne définissant intégralement la constante
Réponse(s) : Aucune. Si la définition venait à créer une erreur, cette erreur n'apparaîtra qu'à la prochaine compilation.


info C'est la même règle pour l'option /CONSTANT dans la ligne de commande. Ce qui signifie que la syntaxe doit être du type "NAME=Value" sans le caractère '#' et sans espace autour du signe '='.
Cela signifie aussi que les nombres seront interprétés comme des constantes numériques alors que toute expression autre qu'un nombre sera considérée comme une constante chaîne.

III-1-9. LINKER<T><FichierCommandeLieur>

Spécifie les options de la ligne de commande pour le lieur (Semblable à l'option /LINKER de la ligne de commande).

Paramètre(s) : Un nom de fichier contenant les commandes pour le lieur (doit contenir le chemin complet)
Réponse(s) : Aucune


III-1-10. COMPILE<T><FlagsList>

COMPILE<T><FlagsList> Démarre la compilation avec un fichier source, un fichier cible et les drapeaux d'état préalablement spécifiés. Paramètre(s) : Liste des drapeaux d'état séparés par une tabulation. Drapeaux d'état possibles :

  • DEBUGGER - Compilateur avec débogueur
  • INLINEASM - Autorise l'assembleur en ligne
  • DLL - Crée un DLL
  • XPSKIN - Active les skins XP (Windows uniquement)
  • ADMINISTRATOR - Mode administrateur sous Vista (Windows uniquement)
  • USER - Mode utilisateur (Windows uniquement)
  • CONSOLE - Crée un exécutable en mode console (Windows uniquement)
  • ONERROR - Autorise les instructions de la librairie OnError
  • MMX - Crée un exécutable optimisé MMX
  • 3DNOW - Crée un exécutable optimisé 3DNOW
  • SSE - Crée un exécutable optimisé SSE
  • SSE2 - Crée un exécutable optimisé SSE2
  • DYNAMICCPU - Crée un exécutable compatible à tous les CPUs
  • THREAD - - Crée un exécutable avec sécurisation des threads
  • PROGRESS - Indique la progression de la compilation (Cf plus bas)
  • WARNINGS - Affiche les messages d'avertissement (Ver 4.30 Cf plus bas)
Exemple: 'COMPILE<T>DEBUGGER<T>THREAD' compilera avec le débogueur et avec la sécurisation des threads.

Après que la commande ait été exécutée (avec ou sans succès), toutes les options (SOURCE, TARGET, ICON, RESOURCE, INCLUDEPATH, CONSTANT, LINKER) seront effacées.
Elles ont donc besoin d'être à nouveau spécifiées par la suite pour une future compilation.

Réponse(s) :
Si le drapeau d'état PROGRESS est spécifié, le compilateur répondra par une ou plusieurs des lignes suivantes :

  • PROGRESS<T>INCLUDE<T><FileName> - un nouveau fichier est inclu
  • PROGRESS<T>LINES<T><LinesCount> - renseigne de la progression toutes les 1000 lignes ainsi qu'à la fin totale de la lecture
  • PROGRESS<T>ASSEMBLING - indique que l'assemblage est accompli
  • PROGRESS<T>LINKING - indique que les liens sont accomplis
De nouveaux indicateurs de progression devraient voir le jour à l'avenir, donc pour assurer la compatibilité future, les lignes de réponse sous la forme 'PROGRESS<T>XXX' et qui ne sont pas comprises doivent être ignorées.

Pour les versions 4.30 et ultérieures, si le drapeau d'état 'WARNINGS' est spécifié, le compilateur est susceptible d'émettre des messages d'avertissement. La séquence est comme le modèle qui suit :

WARNING<T><Source NumeroLigne> : Un message d'avertissement est émis pour la ligne donnée.

Ce qui suit est un nombre de lignes d'informations optionnelles terminé par la ligne 'OUTPUT<T>COMPLETE'.

A l'avenir, il pourra y avoir plus de lignes en guise de réponse, donc pour assurer la compatibilité future, il est recommandé de lire toutes les lignes jusqu'à ce que la ligne 'OUTPUT<T>COMPLETE' soit atteinte en ignorant ce qui est non identifiable. Ce qui suit est un ensemble d'informations optionnelles se terminant toujours par le signal 'OUTPUT<T>COMPLETE' A l'avenir, d'autres types de réponse pourront être ajoutées donc... pour assurer... la compatibilité, il est... recommandé de lire toutes les lignes jusqu'à ce que la ligne 'OUTPUT<T>COMPLETE' soit atteinte, en ignorant les lignes qui ne sont pas identifiables.

INCLUDEFILE<T><NomFichier><T><NumeroLigne> Une erreur s'est produite dans un fichier d'inclusion. Les arguments donnent le nom de fichier et le numéro de ligne dans lesquels s'est produite l'erreur.

MACRO<T><ErrorLine><T><TotalMacroLines> Une erreur a eu lieu dans une macro. Ce qui suit cette ligne est le contenu de la macro déployée. (<TotalMacroLines> = nombre de lignes). Cela se termine par une ligne contenant 'MACRO<T>COMPLETE'

<ErrorLine> donne la ligne dans la macro a provoqué une erreur.

MESSAGE<T><Texte> Le message de l'erreur actuellement décelée.

OUTPUT<T>COMPLETE Indique la fin de la séquence d'informations sur l'erreur de syntaxe.

Note : Si certain des numéros de ligne ne peuvent pas être déterminés par le compilateur (par exemple pour les erreurs qui ne peuvent pas être précisément localisées), le numéro de ligne retourné sera -1. Donc, vous devez vous attendre à gérer ce type de valeur.

  • ERROR<T>ASSEMBLER
  • ERROR<T>LINKER
  • ERROR<T>RESOURCE
Une erreur a été détectée durant l'assemblage, le linkage ou la compilation des ressources de script. Les informations qui suivent sont alors retournées par le compilateur sous la forme d'une séquence se terminant par 'OUTPUT<T>COMPLETE'.


III-1-10-1. Réponses du compilateur

Quand la compilation est effectuée, la réponse peut être :


III-1-10-1-i. SUCCESS

La compilation s'est passée correctement.


III-1-10-1-ii. ERROR<T>SYNTAX<T><Source NumeroLigne>

Une erreur a été détectée durant la compilation du code PB.

L'argument <Source NumeroLigne> donne le numéro de ligne où l'erreur s'est produite.


III-1-11. INCLUDEFILE<T><NomFichier><T><NumeroLigne>

L'erreur décelé se situe dans un fichier d'inclusion. Les arguments indiquent donc le nom de fichier et la ligne mise en cause dans le fichier d'inclusion.


III-1-12. MESSAGE<T><Texte>

Le message d'avertissement actuel.


III-1-13. OUTPUT<T>COMPLETE

Indique la fin de la séquence d'avertissement.


III-1-14. FUNCTIONLIST

Demande le listing des fonctions connues par le compilateur.(Fonctions PB + Fonctions librairie utilisateur)
Paramètre(s) : Aucun
Réponse(s) : La première ligne contient le nombre de fonctions. Il y succède une fonction par ligne avec le nom de la fonction et une brève description (si spécifié durant la création de la librairie). La séquence se termine par 'OUTPUT<T>COMPLETE'.


III-1-15. STRUCTURELIST

Demande le listing des structures connues par le compilateur.
Paramètre(s) : Aucun
Réponse(s) : La première ligne contient le nombre de structures. Il y succède un nom de structure par ligne. La séquence se termine par 'OUTPUT<T>COMPLETE'.


III-1-16. INTERFACELIST

Demande le listing des interfaces connues par le compilateur.
Paramètre(s) : Aucun
Réponse(s) : La première ligne contient le nombre d'interfaces. Il y succède un nom d'interface par ligne. La séquence se termine par 'OUTPUT<T>COMPLETE'.


III-1-17. STRUCTURE<T><Nom>

Demande le contenu d'une structure connue par le compilateur.
Paramètre(s) : Le nom de la structure
Réponse(s) : La définition de la structure à raison d'un membre par ligne. La séquence se termine par 'OUTPUT<T>COMPLETE'.


III-1-18. INTERFACE<T><Nom>

Demande le contenu d'une interface connue par le compilateur.
Paramètre(s) : Le nom de l'interface
Réponse(s) : La définition de l'interface à raison d'un membre par ligne. La séquence se termine par 'OUTPUT<T>COMPLETE'.


III-1-19. HELPDIRECTORY<T><NomFonction>

Demande au compilateur le nom de la librairie d'une fonction spécifiée.
Paramètre(s) : Le nom de la fonction
Réponse(s) : Soit 'API', soit 'UNKNOWN' soit le nom de le librairie spécifiée


III-3. Remerciements

Je tiens à remercier tout particulièrement Ollivier pour cette traduction, je me suis contenté de la mettre en page. ainsi que les membres de la communauté PureBasic pour leur participation à la rédaction de cet article, sans oublier l'équipe PureBasic qui travaille sans relâche pour améliorer ce fabuleux langage.



Valid XHTML 1.0 TransitionalValid CSS!