Suivez-nous sur X

|
|
|
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
|
|
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
|
|
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
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : ARexx - premiers pas
(Article écrit par Cédric Beust et extrait d'Amiga News - janvier 1992)
|
|
Si, comme beaucoup de personnes, vous aimeriez programmer votre Amiga mais votre première expérience avec l'AmigaBasic
vous en a définitivement fait passer le goût... Si "compilateur" est un mot que vous osez à peine prononcer sans rougir
et que vous en êtes resté au bon vieux "run toto" de l'Apple II... Si ARexx est un nom qui éveille un vague intérêt chez
vous mais que vous résistez difficilement à dix lignes d'un article sur le sujet, et encore moins d'un listing...
Si vous venez d'acquérir un A500+ et que vous avez un superbe système 2.0 devant les yeux mais que la lecture de la
documentation vous incommode fortement, surtout celle succincte liée à ARexx...
Si vous avez hoché la tête à chacune
de ces suppositions et que vous n'êtes pas encore irrité par mon style très conditionnel d'introduction, alors cet
article vous concerne car il sera peut-être le premier que vous lirez en intégralité sur ARexx. Tel est mon souhait en tout cas.
Maintenant que j'ai votre attention, je vous expose mes buts. J'ai l'intention de vous prendre par la main et de vous
faire découvrir petit à petit le monde de la programmation de l'Amiga par le petit bout de la lorgnette. Pas
de compilateur à acheter ni de commandes ésotériques à taper pour obtenir un exécutable: vous avez tout sous la main.
Je vais quand même supposer que vous êtes capable d'ouvrir un Shell et d'y lancer des commandes. A part ça, un éditeur
quelconque suffira largement pour ces premiers pas.
Vous ne trouverez pas dans cet article une description exhaustive
des commandes. Un coup d'oeil à votre manuel vous donnera tous les renseignements à ce sujet. Ce que le manuel ne vous
donnera pas, en revanche, c'est la distinction entre ce qui est essentiel pour commencer et les commandes spécialisées
dont vous ne vous servirez qu'avec davantage de pratique. Pas de panique : j'ai fait ce filtrage pour vous. Suivez le guide !
Premier programme
Afin de conserver votre attention intacte, je ne vais pas vous bombarder d'arguments visant à vous démontrer en quoi ARexx
se distingue des autres langages de programmation. Restons simples, telle est ma devise. Je vais vous montrer comme il est
facile d'écrire un programme en quelques minutes et je suis certain que, séduit par cette simplicité, vous aurez envie d'en
savoir plus.
Si vous avez le système 2.0, vous n'avez besoin de rien d'autre car ARexx fait partie de la distribution. Dans le cas
contraire, il vous faudra faire l'acquisition d'ARexx auprès de son auteur, Bill Hawes.
Comment ne pas passer par l'incontournable "Hello World", fidèle de tous les programmateurs depuis tant d'années ?
Tout simplement en étant un peu mégalomane et en faisant preuve d'un peu d'imagination. Ce qui amène le premier programme
que voici :
/* Un premier programme */
say "Salut Terrien, je te donne l'heure:"
address command "date"
|
Sauvez ce programme en RAM: par exemple et appelez-le "p1.rexx". Si ce n'est pas déjà fait, il faut en premier lieu
lancer le serveur principal d'ARexx, qui s'appelle "rexxmast". Maintenant, tapez sous Shell la commande
"rx ram:p1.rexx" et vous verrez s'afficher la phrase attendue...
Contrairement aux apparences, ce programme vous enseigne plein de choses. Tout d'abord, qu'un programme ARexx
commence toujours par un commentaire. C'est une bonne habitude à prendre de toute façon, et puis si cela ne
vous plaît pas, rien ne vous empêche de mettre un commentaire vide. Ce commentaire est délimité par "/*" et "*/".
Notez que les commentaires peuvent être indentés, ce qui est pratique pour mettre entre commentaires toute une
portion de code alors que celle-ci contient déjà des commentaires.
La commande standard d'affichage est "say". Elle affiche toujours son contenu suivi d'un retour chariot.
Vous pouvez concaténer plusieurs éléments sur un même "say" en les séparant par "||".
La communication inter-applications sous ARexx
Le mot-clé "address" est un des plus importants du langage, et c'est pourquoi je l'introduis dès maintenant.
C'est lui qui permet à vos programmes de piloter des applications possédant un port ARexx. Beaucoup de logiciels
offrent cette possibilité désormais mais peu donnent le moyen pratique de le réaliser. Si c'est une question
que vous vous êtes toujours posée sans jamais oser la demander, voici enfin la réponse. Dans ce programme, je spécifie
que je m'adresse à l'hôte command (il s'agit du Shell) et je lui envoie la commande qui suit (date).
Voici donc déjà un moyen simple d'exécuter des commmandes Shell.
Prenons un exemple plus concret. Supposons que vouz ayez lancé l'éditeur de texte QED et que vous souhaitiez lui
envoyer une commande l'aide d'ARexx ; par exemple le changement de la taille des tabulations à 7.
La première chose à faire est d'identifier le nom du port sur lequel QED attend ses ordres. On peut faire ça
en ARexx avec le programme suivant :
/* Quels sont les ports ARexx actifs actuellement ? */
say show(ports)
|
Si vous lancez ce programme, vous obtiendrez par exemple un résultat ressemblant à celui-ci :
PlayBeepPort ConClip.rendezvous MachIII Port MachHand M3 Timer Beep REXX AREXX WSH_Completer cxreply_port
cxcon_port cxid_port SNAP FF2:) Bypass KD_lib wIconifyPort wIconSetterPort Exchange Spliner Virus_Checker
DirWork Stuff WSH_6 ProWrite ced_port rexx_ced QED1 IPrefs.rendezvous SetPatch Port
On a tôt fait de repérer que le nom qui nous intéresse est "QED1". On exécute alors notre plan avec le
programme suivant :
/* Envoie une requête à QED /*
address QED1 TAB 3
|
Vérifiez tout d'abord la taille des tabulations dans QED (avec "Amiga droite + T"), puis lancez le
programme par la méthode que vous commencez à connaître et constatez que la requête a été reçue par QED.
Je ne vais pas m'étendre davantage sur cet aspect pour le moment : restons simples.
Je pense qu'il était important de souligner cet aspect et peut-être cela ouvre-t-il des horizons à certains d'entre vous.
Il existe bien entendu des méthodes plus rigoureuses pour localiser le port que vous recherchez, et tout cela est
indiqué dans la documentation ARexx livrée avec le programme que vous souhaitez piloter. Je vous y renvoie donc.
Un peu d'organisation
Avant d'aller plus avant, précisons quelques règles de bienséance concernant l'organisation de vos fichiers.
C'était implicite dans les paragraphes précédents, mais le minimum est d'avoir mis vos commande "rexxmast"
et "rx" dans votre répertoire "C:", si ce n'est déjà fait.
Ensuite, il est fortement recommandé d'avoir une assignation "rexx:" vers un répertoire dans lequel vous stockerez
tous vos admirables listings ARexx. Par exemple, si vous avez un disque dur, créez un répertoire avec la commande
"mkdir dh0:rexx" et ajoutez dans votre user-startup (ou startup-sequence si vous utilisez le 1.3) la commande "assign
rexx: dh0:rexx".
Le répertoire "rexx:" est le premier répertoire parcouru par "rx" à la recherche de votre commande
(ou le deuxième, le premier étant le répertoire courant, je ne sais plus exactement). Si vous stockez vos
programmes dans ce répertoire, il n'est plus nécessaire de spécifier le chemin intégral lors de l'appel de
"rx". Si vous déplacez p1.rexx dans ce répertoire, vous pouvez l'appeler par un simple "rx p1".
Notez que le suffixe ".rexx" est également facultatif. Je vous conseille de le mettre à tous les programmes
"indépendants" que vous écrivez. Par "indépendant", je veux dire qu'ils ne pilotent aucune application.
Si ce n'est pas le cas, il est préférable de leur mettre un suffixe permettant à l'application en question
de retrouver les siens lors du parcours de rexx: (dans le cas de QED, c'est le suffixe ".qed").
Là encore, Cf. la documentation ARexx de votre programme.
Un pas plus loin dans le langage
Voici un autre programme à méditer :
Une première constatation : ce programme est faux :-). Ne m'en veuillez pas, c'est voulu.
Il y a plusieurs choses intéressantes dans ce programme, indépendamment du fait que c'est moi
qui l'ai écrit. D'abord, il montre quelques structures de boucle et de test classiques.
Pour peu que vous ayez déjà programmé dans votre vie, vous devez être capable de comprendre
à quoi elles correspondent.
Ensuite, j'ai utilisé l'instruction "parse". C'est une instruction très puissante qui peut être
utilisée de plein de façons différentes. Ici, je l'ai utilisée pour analyser la ligne de commande
lors de l'appel du programme, c'est-à-dire tous les mots qui suivent "fibo" lors de l'appel "rx fibo n".
Dans le cas présent, la seule chose qui m'intéresse est de connaître la valeur de "n" afin de l'utiliser
dans ma boucle. "parse" est très pratique pour analyser une longue chaîne parsemée de symboles que
vous attendez (des virgules, des blancs, des tirets) afin d'en retirer les informations dont vous avez besoin.
Je reviendrai sur sa syntaxe car on peut difficilement faire des programmes performants sans l'utiliser...
Après quelques essais, je me suis rendu compte que mon programme rendait des valeurs incorrectes. J'ai donc
utilisé la commande "trace" afin de suivre de plus près le déroulement du programme.
J'ai uniquement demandé à tracer tous les résultats du programme. Lancez-le et vous obtiendrez l'affichage suivant :
Je crois que cet affichage est suffisamment clair : les lignes exécutées sont précédées par leur numéro et
les valeurs suivant ">>>" sont les résultats des calculs. Je pense que vous voyez immédiatement à quel point
cette fonction peut faciliter la tâche du programmeur... Il y a bien évidemment beaucoup d'autres façons
de tracer le programme de façon à ne se concentrer que sur l'essentiel.
Conclusion
J'espère que cette introduction vous aura intéressé. Si c'est le cas, gardez à l'esprit que le meilleur moyen
d'apprendre rapidement est de lire les listings des autres. Replongez-vous donc dans vos disquettes de DP et
disséquez-les. Je crois vous avoir donné les bases nécessaires à une compréhension minimale et vous ne devriez
pas vous sentir trop dépaysé.
|