Obligement - L'Amiga au maximum

Mardi 12 décembre 2017 - 07:25  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : ARexx - classes d'instruction, instructions, fonctions
(Article écrit par Cédric Beust et extrait d'Amiga News - février 1992)


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 :

if reponse = 'o' then say "Oui"

Boucles :

do while i < 5i = i+1
do j = 2 to 10j = j * 2
do for 10 say "Dix fois la même phrase"

Aiguillage :

select when rep = 'o' call ouvreFenetre()
when rep = '?' call aide()
otherwise say "Erreur Recommencez"
end

Entrées/sorties :

say, push, pull, queue

Débogage :

trace all /* affichage de toutes les étapes */
trace results /* les résultats uniquement */
trace command /* les commandes uniquement */

Contrôle externe :

address QEDI TAB 4

Analyse de chaîne :

parse date jour ':' mois ':' année
/* si date = '02:Jan:92' , cette instruction mettra */
/* dans la variable mois la valeur 02 */

...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 :

call addlib("rexxsupport.library",0,-30,0)
call addlib("rexxarplib.library",0,-30,0)

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 :

open('fichier','S:startup-sequence','R') /* ouverture */
close('fichier') /* fermeture /*
if (eof('fichier')) /* test de fin de fichier */
ligne = readln('fichier') /* lecture d'une ligne */
car = readch('fichier') /* lecture d'un caractère */
seek('fichier',10,'E') /* positionnement à 10 car de la fin */

Examen du système : show.

V /* affiche le contenu du presse-papiers */
say show('files') /* affiche les fichiers ouverts */
say show('libraries') /* affiche les bibliothèques chargées */
say show('ports') /* affiche les ports */

Gestion de l'environnement : pragma.

Cette fonction a plusieurs effets selon l'argument avec lequel vous l'appelez.
  • say pragma('directory') vous donnera le répertoire courant.
  • call pragma('directory','dh0:') change le répertoire vers dh0:.
  • say pragma('id') donne le numéro de la tâche en cours.
  • say pragma('priority') donne (ou règle) la priorité de la tâche.
  • say pragma('stack') retourne (ou règle) la taille de la pile.
  • say pragma('w','null') annule toute requête qui pourrait apparaître.
Quelques mots à propos du presse-papiers (alias clipboard), évoqué en même temps que la fonction "show". Il s'agit d'un mécanisme interne à ARexx qui permet de communiquer des données entre deux processus externes. Bien sûr, il est toujours possible de les faire communiquer via des fichiers ou des variables d'environnement (ce qui revient pratiquement au même), mais l'utilisation du presse-papiers est plus judicieuse dans la plupart des cas, et de toutes façons plus rapide.

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 :

call setclip('hauteur',10)

...et pour obtenir la valeur correspondante :

say getclip('hauteur')
==> 10

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.


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]