|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Suite de notre incursion dans le langage ARexx de William Hawes. L'article précédent était destiné à des débutants ignorant tout ou presque du langage. J'ai donc brièvement expliqué comment installer ARexx sur votre machine, comment écrire et lancer les programmes et nous avons vu ensemble quelques instructions clés et certains aspects du langage. Écrire des articles sur ARexx n'est pas chose aisée car la tentation est grande de se lancer immédiatement dans les aspects complexes du langage qui en font sa spécificité et sa puissance. Cette difficulté est liée à l'aspect hybride du langage : il est fait à la fois pour les débutants et pour les programmeurs confirmés. Désolé si je suis quelque peu didactique ce mois-ci, mais j'ai pris la décision de passer en revue certaines fonctions/instructions clés afin de vous donner une vue d'ensemble de ce qu'il est possible de faire en ARexx. Le but de la manoeuvre n'est pas de vous faire apprendre par coeur toutes ces fonctions mais plutôt de faire en sorte que lorsque vous serez confronté à un problème, vous vous souviendrez qu'il existe une fonction qui fait exactement ce que vous recherchez. Il ne vous restera alors plus qu'à vous reporter à la documentation pour en avoir l'explication exhaustive. Description des classes d'instruction On peut diviser le langage en trois classes distinctes, chaque instruction faisant partie d'une de ces trois classes. William Hawes a donné une nomenclature précise pour ces classes, que je vais essayer de respecter dans ce qui suit même si je fais parfois l'amalgame entre les termes instructions/commandes/fonctions. Les instructions Il s'agit des commandes faisant partie du noyau du langage. Elles seront toujours présentes, quel que soit votre environnement et regroupent principalement les commandes de boucle (DO), de test (IF THEN ELSE), de pilotage externe (ADDRESS), d'appel de procédures (CALL), etc. Elles sont au nombre d'une trentaine. Les commandes Nous retrouvons dans cette catégorie toutes les instructions qu'ARexx ne connaît pas et qui sont destinées à une application externe. J'ai donné un exemple de telle commande dans l'article précédent en faisant changer la taille des tabulations dans un QED via ARexx. Il n'est évidemment pas question de détailler les commandes dans cet article puisque par définition, elles sont dépendantes de l'application à laquelle elles sont destinées. Un programme comme Deluxe Paint ne comprendra pas les mêmes commandes que CygnusEd. Je vous renvoie à la documentation ARexx de l'application que vous désirez piloter. Les fonctions Cette classe regroupe en fait toutes les commandes n'entrant pas dans les définitions précédentes, c'est-à-dire toutes les fonctions que l'on trouve dans des bibliothèques externes qui sont livrées parfois avec ARexx et parfois séparément. Ces bibliothèques se retrouvent sous la forme familière de ".library" et se placent tout naturellement dans votre répertoire "Libs:". Une bibliothèque joue un rôle particulier : il s'agit de la rexxsupport.library. Celle-ci est livrée avec ARexx et on peut considérer qu'elle forme une prolongation des instructions mais avec tout l'interfaçage spécifiquement Amiga, encore que cette dénomination soit encore trop vague. En fait, il s'agit essentiellement de l'aspect système (multitâche, Exec) de l'Amiga, et non son aspect graphique (Intuition). On retrouve en vrac les fonctions de conversions de types, gestions de bits, chaînes, fichiers, etc. D'autres bibliothèques externes commencent à apparaître mais il en est une qui s'est désormais imposée comme standard de fait. Il s'agit de la rexxarplib.library, de Willy Langeveld, l'auteur de VLT. Initialement conçue de façon à pouvoir appeler des fonctions ARP à partir d'ARexx, cette bibliothèque s'est vite vu confier des tâches bien plus générales comme la gestion des fenêtres, menus, gadgets, requêtes, etc. On trouve donc ici le complémentaire de la rexxsupport.library puisqu'elle gère également un aspect spécifiquement Amiga mais du côté graphique cette fois. Ces deux bibliothèques sont indispensables pour tout développement qui se veut sérieux. Vous pouvez naturellement vous passer de la rexxarplib pour programmer mais le résultat aura un aspect austère qui n'est plus de mise depuis la sortie du système 2.0. Une parenthèse à ce sujet : si vous développez sous 2.0, il vous faut absolument rexxarplib.library v3.0, les versions précédentes ayant fait preuve de gros bogues sous la nouvelle version du système. D'ailleurs, cette version 3.0 est bien plus performante que la précédente et elle est disponible ici. Les instructions Les instructions sont la connaissance minimale que vous devez retenir du langage. Sans elles, vous ne serez pas capable d'écrire une ligne (un peu comme si vous ignoriez des instructions comme PRINT, IF, GOTO en BASIC, encore que ce ne soit pas un très grosse perte pour cette dernière :-)). La lecture rapide de programmes ARexx vous enseignera très rapidement la syntaxe du langage : Tests conditionnels :
Boucles :
Aiguillage :
Entrées/sorties :
Débogage :
Contrôle externe :
Analyse de chaîne :
...et quelques autres de moindre importance. Les fonctions Il y a beaucoup à dire là encore. Ce mois-ci, je me contenterai de faire un tour d'horizon rapide de la rexxsupport.library. Mais avant d'en faire la description, comment se servir d'une bibliothèque externe ? Il faut pour cela faire appel à la fonction addlib(). Prenez l'habitude, quand vous commencez à écrire un programme, de taper les deux lignes suivantes :
Cela vous donnera accès à toutes les fonctions de ces deux bibliothèques (qui doivent être présentes dans "Libs:", je le rappelle). Ne prêtez pas attention aux trois paramètres derrière le nom, vous n'aurez probablement jamais à en utiliser d'autres. Commençons par les fonctions de conversion de bases en tout genre. Nous trouvons ainsi b2c, c2h (binaire <-> caractère), c2d (caractère vers décimal), c2x (caractère vers hexa), etc. Exemple : "say c2d('20'x)" retournera 32. Puis les traitements de bits en tous genres : bittst, hitxor, bitand. Les manipulations de chaînes sont un des points forts d'ARexx étant donné qu'il s'agit en fait du seul type que le langage comprend. Vous pouvez donc effacer des sous-chaînes (delstr), des mots (delword), faire des insertions (insert), repérer une sous-chaîne (index), isoler des sous-chaînes (left, right), etc. Gestion de fichiers :
Examen du système : show.
Gestion de l'environnement : pragma. Cette fonction a plusieurs effets selon l'argument avec lequel vous l'appelez.
Tout comme les variables d'environnement, le presse-papiers n'est rien de plus qu'un ensemble de paires clé/valeur. Pour créer une paire, on procédera comme suit :
...et pour obtenir la valeur correspondante :
Enfin, j'ai volontairement passé sous silence une autre bibliothèque externe. Il s'agit de la rexxsyslib.library. La raison est qu'elle contient des fonctions très spécifiques à l'interprète ARexx et l'utilisateur moyen n'aura que très rarement l'occasion d'y faire appel. Notez qu'il n'est pas nécessaire d'utiliser addlib() pour pouvoir bénéficier des fonctions de cette bibliothèque : elle est ajoutée automatiquement dès le lancement de l'interprète. Conclusion Je pense qu'à la fin de ce deuxième épisode, vous devez commencer à avoir une idée d'ensemble assez précise sur ce qu'est ARexx. Désolé de ne pas avoir montré davantage de code mais il a fallu faire un choix. Vous pouvez toujours vous reporter au listing "Events.rexx" paru dans cet article qui utilise quelques-uns des principes que j'ai exposés, et même certains dont je n'ai parlé (je fais allusion aux "Compound Statements", les objets composés). Comme j'avais expliqué ces objets dans cet article, vous pouvez vous y référer si vous désirez compléter votre connaissance du langage.
|