|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nous en étions, à l'épisode précédent, aux instructions diverses, et en prenant notre courage à deux mains, nous allons d'abord passer au crible celles qui n'ont pas encore été vues. XRANGE D'un usage ponctuel, cette instruction permet d'afficher une plage de valeur comprise entre une borne inférieure et une supérieure.
Attention, il faut écrire "XRANGE(..." et non "XRANGE (...". La parenthèse doit toujours coller à l'instruction ! VALUE A première vue, je ne vois pas très bien à quoi peut bien servir cette instruction qui me fait vaguement penser à une certaine instruction "LET" d'un vieux BASIC. VALUE fournit la valeur qu'on lui transmet comme argument.
"SAY VALUE(a)" ou "SAY a", c'est du pareil au même : 97. Mais comme je l'ai souligné plus haut, attention :
Ce qui donne :
Autrement dit, ARexx, et c'est encore une démonstration de l'utilisation sans contrainte de sa syntaxe, prend VALUE non pas comme une instruction VALUE() mais comme le mot "VALUE" ! Tout cela à cause d'un espace qui s'est infiltré entre VALUE et la parenthèse !
Quelle catastrophe ! ARexx accepte des noms de fonctions comme variables sans être le moins du monde dérangé ! Donc attention, n'oubliez jamais de "coller" les parenthèses et étant débutant de placer vos instructions en majuscules par exemple pour marquer une différence avec les variables (ce dernier point n'est évidemment pas recommandé dans un certain bouquin dont je ne me lasse pas de faire la publicité :-)). UPPER Permet de transformer une chaîne en majuscules. Les moyens pour transformer une chaîne en majuscules ne manquent pas :
UPPER() ne sert à rien pour transformer des constantes mais peut être utile dans le cas d'une transformation d'une variable au sens propre du terme. Attention, avec la logique qui caractérise papa ARexx, inutile de s'acharner à transformer le UPPER en LOWER, car cette dernière fonction de passage en minuscules, n'existe tout simplement pas ! TRUNC Cette instruction permet de retenir un certain nombre de décimales mais elle n'arrondit pas le résultat. Si le nombre de décimale n'est pas indiqué comme arguments, TRUNC() renvoie la partie entière.
TRIM Sans être raciste, cette instruction oublie les "blancs" en trop :
Mais attention, seuls les blancs à l'extrémité gauche de la chaîne font leurs valises. Pour supprimer n'importe quel espace, il faut utiliser une autre fonction (voir plus loin, à "COMPRESS"). TRANSLATE
Cette fonction ordonne les données suivant une table de translation. 'aedcb' correspond à '15432' : 'a' == '1', 'd' == '4'... 'abcde' dicte l'ordre dans lequel on désire sortir la chaîne '15432' par rapport à la table 'aedcb' qui lui correspond. Si cela vous paraît un peu flou, exécuter l'exemple plusieurs fois en modifiant l'ordre de '15432'. La première possibilité correspond à UPPER(). TRACE
L'instruction TRACE() permet de suivre pas a pas le déroulement du programme : on peut ainsi trouver à quel endroit le programme "boucle sans fin" par exemple. Remplacez "LABELS" par "ALL" ou "COMMANDS" ou "SCAN" ou "RESULTS" ou "ERRORS" ou "INTERMEDIATES" pour découvrir les différentes possibilités. SYMBOL
Cette instruction retourne la valeur 'VAR' si vous testez une variable numérique ou alphabétique ou bien alphanumérique. Si la variable n'a pas encore été déclarée c'est la valeur 'LIT' qui est retournée (de même, si vous tentez de tester une fonction). Finalement si vous tentez de tester un nom qui ne peut devenir une variable/fonction, SYMBOL() renvoie la valeur 'BAD'. C'est ici le cas du caractère "ç". STRIP Cette instruction permet d'enlever les blancs à droite 'TRAILING' ou à gauche 'LEADING' ou à droite et gauche 'BOTH' d'une chaîne. TRIM() est l'équivalent de STRIP(CHAINE,'TRAILING').
On peut indiquer quel caractère on désire supprimer en le rajoutant comme dernier argument. Par défaut, il s'agit bien entendu du blanc. STORAGE Vous désirez connaître la mémoire disponible de votre système ? Il suffisait de le demander : STORAGE() sans arguments. Et vous désirez remplir une zone mémoire ? Rien de plus simple mais attention en utilisant cette possibilité car l'Amiga est un système multitâche et il faut éviter tout débordement mémoire sous peine de Guru Meditation !
Attention, 'ADRESSE' est une chaîne de caractères de 4 octets en hexadécimal. Par défaut, "la valeur de remplissage" est zéro. La chaîne de retour est l'ancien contenu de l'emplacement mémoire.
Je place 'AMIGA-NEWS' en $50000 puis je replace l'ancien contenu. Cette instruction est à manipuler avec de multiples précautions ! SPACE Encore une instruction pour gérer les "blancs". Elle spécifie le nombre d'espaces (par défaut) que vous désirez entre deux mots (mots séparés déjà par un espace cela va sans dire).
SOURCELINE Combien de lignes dans mon super programme ARexx ? Attendez je compte... Mais non ! Laissons ARexx nous donner la réponse :
Un retour de chariot (NEW LINE,RETURN) est comptablisé comme une ligne. Les "lignes de commentaires" sont également des lignes. En indiquant le numéro de ligne entre parenthèses, SOURCELINE nous renvoie le texte source de cette ligne ! Le programme suivant se liste lui-même :
SHOW SHOW(option,nom) nous permet d'examiner de plus près l'environnement disponible sous ARexx. 'Option' est soit 'CLIP' ou 'FILES' ou 'INTERNAL' ou 'LIBRARIES' ou 'PORTS'.
Le petit programme ci-dessus est très utile comme vous le constaterez plus loin pour déterminer si une "library" utilisatrice (qui apporte d'autres fonctions !) est disponible. RANDU et RANDOM La génération d'un nombre pseudo-aléatoire est en pratique en informatique. ARexx répond présent à cette possibilité. Pourquoi pseudo ? Parce qu'après "x" exécutions de l'instruction RANDU(), celle-ci finira par retomber sur ses pattes et par nous générer à nouveau la même série de nombres... Quelle est la période de RANDU() ? Aucune idée et ce n'est référencé nulle part... RANDU() génère un nombre aléatoire entre 0 et 1 tandis que RANDOM() permet d'obtenir un nombre entre une borne inférieure (1 minimum) et une supérieure (999 maximum) :
PRAGMA PRAGMA(option,[valeur]) sollicite AmigaDOS pour certaines actions très spéciales.
HASH AmigaDOS utilise un moyen très particulier pour stocker les données sur disquette. D'après le nom du fichier, il calcule une valeur qui servira de déplacement dans un "secteur répertoire" pour retrouver le numéro du secteur qui correspond à ce fichier...
DATATYPE
...retourne la valeur "CHAR" dans le cas d'une variable alphabétique ou alphanumérique et "NUM" si la variable est de type numérique. COPIES / COMPRESS / CENTRE / ABBREV
ADDLIB et REMLIB C'est ici que les Romains s'empoignèrent. Toutes les instructions présentées jusqu'à présent sont soit des instruction "internes" à ARexx (SAY) soit ce que l'on appelle des "build-in function", il s'agit des entrailles du système. Mais rares sont les programmeurs qui s'en contenteront. ADDLIB() permet d'ajouter de nouvelles fonctions au panel déjà large des 'build-in function'. La première bibliothèque qu'il est possible d'ajouter dès le départ est la "rexxsupport" qui est livrée avec le langage ARexx. Il existe des bibliothèques pour ARexx disponibles dans le DP et très intéressantes ! Mais nous découvrirons cela ensemble. Usage : ADDLIB(Nom, priorité, PremierDécalage, version). Le premier décalage ("offset") est pratiquement toujours "-30" (les décalages qui précèdent -30 sont occupés par des fonctions internes à chaque bibliothèques : Open() Close() Expunge()...). En plaçant '0' comme "version" ADDLIB() tentera d'ouvrir la bibliothèque disponible quelle que soit sa version. La priorité est fixée à zéro et ne s'emploie pas d'ailleurs pour les bibliothèques.
ARG Il s'agit de rechercher les paramètres CLI: (voir plus bas pour l'exemple).
SHOWDIRO et STATEF() sont deux commandes de la "rexxsupport". La première permet d'afficher le contenu du répertoire spécifié et la deuxième de fournir des renseignements sur le fichier ou répertoire. Nous avons vu toutes les autres commandes et donc vous êtes en mesure de comprendre ce programme. ![]() ![]()
|