Obligement - L'Amiga au maximum

Jeudi 25 avril 2024 - 04:00  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


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 toute façon 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]