Pas de script a proprement parler ce mois-ci, mais un petit detour par les bibliotheques de fonctions pour ARexx. II est en effet plus que frequent de trouver a droite ou a gauche, mais surtout a droite; des Scripts ARexx faisant appel a des fonctions externes au langage. Explications.
On l'a dit et repete, ARexx dispose d'un certain nombre de com-mandes et de fonctions internes, qui permettent deja de realiser pas mai de petites choses plus ou moins sympathiques. Certes, mais on en a vite fait le tour. Fort heureusement, le langage est tres facilement extensible, l'exemple le plus evident etant la floppee d'applications dites "compatibles ARexx", qui disposent toutes de leur propre lot de commandes supplementaires. Ainsi, l'excellent emulateur de terminal Term ajou-te-t-il la commande "DIAL", qui permet de composer le numero de telephone d'un BBS depuis un script ARexx. Autre exemple, DeluxePaint 5 reconnait la commande "CIRCLE", qui dessine un cercie ou un disque a 1'ecran. C'est tres bien en soi, mais deux problemes se posent. D'abord, les commandes de chaque programme sont forcśment en rapport avec son domaine d'application : on imagine en effet assez mai, meme si cela est techniquement pos-sible, DPaint offrant une commande permet-
tant de jouer un module Protracker. Ensuite, et c'est assez logique, il faut imperativement que le programme en question tourne en tache de fond. D'autre part, une application ne peut pas toujours fournir toutes les Solutions a un probleme. Ainsi, j'ai dit dans le premier article de cette serie, qu'il serait tout a fait possible d'ecrire un veritable traitement de textes en ARexx. C'est parfaitement vrai, mais vous imaginez bien maintenant que cela ne peut se faire qu'avec seulement les commandes internes du langage : la ques-tion de 1'utilisation d'lntuition (fenetres, menus, etc.) se pose immediatement, et aucune application ARexx ne fournit la reponse. Pourtant, il y en a une, a ce probleme precis ainsi qu'a beaucoup d'autres.
La reponse
La solution consiste donc a utiliser des fonctions specialisees que des developpeurs inde-pendants ont eu la bonne idee de regrouper au sein de bibliotheques partagees. Cekoidon ? C'est tres simple. Le principe est strictement identigue a celui qu'utilisent les programmeurs en C ou en Auembleur. Vous avez tous entendu parler de 1'intuition.libra-ry, de la gadtools.library, ou de la graphics.library ? Pour resumer tout en sche-matisant, ce sont des portions de codę situees dans la ROM de 1'Amiga, dont le but est de simplifier le developpement des pro-grammes. On les appelle des "biblio-theques" parce qu'en informatique, un groupe de fonction s'appelle une "biblio-theque" ("library", en anglais). On dit egale-ment qu'elles sont "partagees" parce que, de par le caractere multitache de l'Amiga, un nombre quelconque de programmes peu-vent les utiliser en meme temps. Un exemple ? Bon, d'accord, mais c'est bien parce que c’est vous : la bibliotheque intui-tion.library contient une fonction nommee OpenWindow() qui permet d'ouvrir une nouvelle fenetre a 1'ecran. Tous les programmes utilisant des fenetres Intuition appeilent tót ou tard cette fonction. lis parta-gent donc, pendant un certain laps de temps, le meme codę. Cependant, toutes les bibliotheques partagees ne se trouvent pas forcćment en ROM. II en existe aussi sur disque, habituellement stockees dans le tiroir LIBS: de votre disquette Workbench, et char-gees en RAM la premiere fois qu'un programme demande a y acceder. Si d'autres programmes utilisent par la suitę la meme bibliothegue, ils se partagent evidemment la
Listing 1
/* V6rifie que la rexxsupporc.1ibrary est dispo-nible */IF ~SH0W('L', 'rexxsupport.1ibrary') THEN
DO
IF -ADDLIB('rexxsupport.1ibrary', 0, -
30) THEN DO
SAY 'Impossible d''ouvrir la rexx-support.library ! '
EXIT 10
END
END
Listing 2 /*
* $VER: Faute.rexx 1.0 (12.12.95)
łk
* S'utilise cortune 'Fault' du Shell, mais en ARexx
*
* Ecrit par Franęois Bellet-Taitois
* (c) Dream 95
*
TRACĘ RESULTS
V
/* Verifie que la locale.1ibrary est disponible */
IF -SHOW('L', 'locale.library') THEN DO
IF -ADDLIB('locale.library', 0, -30)
THEN DO
SAY 'Impossible d''ouvrir la locale .library !'
EXIT 10
END
END
/* Quelle numśro demande-t-on ?*/
PARSE ARG erreur
/* Est-ce bien un nombre ? */
IF (erreur = ") I (VERIFY(erreur, '0123456789')
0) THEN DO
SAY 'Usage: rx Faute ERROR/A/N'
EXIT 5
END
/* Ouvre le catalogue du Shell * OpenCatalog() est dans la loca)e.1ibrary */