Obligement - L'Amiga au maximum

Jeudi 21 mars 2019 - 00:28  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · 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 en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


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 - Instruction PARSE (première partie)
(Article écrit par François Gueugnon et extrait d'Amiga News Tech - juillet 1991)


L'instruction PARSE que nous avions entrevue précédemment, mérite une analyse fouillée parce qu'elle est d'une part constamment utilisée et joue un rôle important dans l'acquisition et le traitement des chaînes de caractères (seuls objets connus d'ARexx) et parce que, d'autre part, elle présente des possibilités optionnelles nombreuses et variées.

L'instruction PARSE fournit un mécanisme pour extraire une ou plusieurs sous-chaînes d'une chaîne source et pour les assigner à des variables qui pourront être utilisées par la suite au gré du programmeur. L'instruction PARSE est composée de trois parties distinctes et indépendantes et peut de façon formelle s'écrire :

PARSE source traitement

Le mot réservé "PARSE", écrit en majuscules, identifie l'opération. La partie "source" détermine l'origine de la chaîne de caractères qui va être traitée. La source peut être décrite par des mots réservés différents (ARG, EXTERNAL, NUMERIC, PULL, SOURCE, VAR, et VERSION). Nous allons y revenir. La troisième partie 'traitement' décrit la façon dont la chaîne de caractères acquise depuis la source va être traitée. Il n'y a pas ici de mots réservés mais un formalisme descriptif utilisant des règles que nous préciserons plus loin.

Un mot réservé optionnel peut être placé tout juste après le mot PARSE. Il s'agit du mot réservé UPPER, qui transforme la chaîne acquise en majuscules avant le traitement.

Enfin, parce que cette instruction est fréquemment utilisée, il en existe des formes abrégées : PULL pour PARSE UPPER PULL et ARG pour PARSE UPPER ARG. Ces formes sont synonymes, comme l'étaient ECHO et SAY décrites précédemment. Cela simplifie indéniablement l'écriture mais complique la lecture, d'autant plus qu'une fonction ARG() existe aussi. C'est pourquoi nous restons très réservés quant à l'emploi de ces abréviations.

Analyse des options source

ARG

Mis pour "argument", c'est l'un des moyens de passer des paramètres à un programme au moment de son invocation depuis la console. Imaginons par exemple que nous disposions d'un programme ARexx qui compte les lettres des mots qu'on lui fournit et dont le nom est "CompteLettres". L'invocation à partir de la console CLI/Shell sera :

RX CompteLettres mot

Où "mot" est le mot dont on veut compter les lettres. Les premières lignes du programme CompteLettres seront donc obligatoirement pour l'option ARG :

/* titre */ ; c'est le début d'un programme ARexx
PARSE UPPER ARG 'traitement'

Ou en abrégé :

ARG 'traitement'

Il est tout à fait possible de passer ainsi plusieurs paramètres au programme. L'invocation s'écrit alors :

RX CompteLettres mot_1 mot_2... mot_n

On peut ainsi fournir jusqu'à 15 paramètres différents. Il appartiendra à la partie 'traitement' du programme invoqué, de trier les mots. Pour l'instant, il suffit d'écrire les mots avec un espace entre eux et de ne taper la touche "Entrée" qu'à la fin. L'espace est un délimiteur, l'Entrée en est un autre. Cette forme est dite implicite, il en existe d'autres que nous indiquerons au passage.

PULL

Le fonctionnement de l'option PULL dépend du type de console utilisée. S'il s'agit d'une console de type CLI ou Shell, le fonctionnement est limité. S'il s'agit d'une console de type WShell ou ConMan, le fonctionnement est normal. La différence entre les deux types de consoles est la capacité pour WShell et ConMan de gérer une pile.

1. Fonctionnement simplifié avec CLI/Shell : cette instruction permet d'acquérir une chaîne de caractères, mais cette fois, on peut choisir le moment de l'introduction de la chaîne. L'invocation se fera de façon plus simple : RX CompteLettres. Le programme invoqué se déroule et au moment où la chaîne d'entrée est nécessaire, on trouve une forme semblable à celle-ci :

SAY "Tapez deux mots séparés par un espace"   ; lit l'opérateur
PARSE UPPER PULL 'traitement'                 ; ou
PULL             'traitement'                 ; forme abrégée

...et le programme attend une entrée suivie d'un retour charriot. Là encore, c'est la partie 'traitement' qui triera la chaîne acquise.

2. Fonctionnement normal avec console WShell/ConMan : ces consoles incorporent un raffinement supplémentaire sous forme d'une pile. Une pile est une forme de mémoire atypée dans laquelle on peut mettre à peu près ce que l'on veut. On peut imaginer cette mémoire sous forme d'un tuyau dont une extrémité est dédiée à la sortie par construction. Il existe deux façons d'empiler quelque chose dans ce tuyau. La première consiste à empiler par l'extrémité libre, si bien que par la sortie on verra arriver les éléments mémorisés dans l'ordre de mémorisation (en anglais First In First Out - premier entré premier sorti). Cette opération d'empilage est réalisée par une commande ARexx QUEUE.

La deuxième façon consiste à pousser la pile vers le haut en mémorisant un élément par l'extrémité sortie. Dans ce cas, il s'agit d'une pile Last In First Out/dernier entré premier sorti. La commande ARexx qui réalise cette fonction est PUSH (ces deux commandes ne sont efficaces que s'il y a possibilité de pile dans la console).

Pour extraire quelque chose de la pile, il n'y a qu'un chemin : l'extrémité sortie. L'instruction ARexx qui permet d'extraire un élément de la pile est PULL. L'élément extrait est ôté de la pile et celle-ci descend d'un cran. Les deux modes de chargement sont simultanément possibles, et la responsabilité de la gestion incombe au programmeur.

Le fonctionnement de l'instruction PARSE UPPER PULL 'traitement' devient alors plus clair. Si la console ne gère pas de pile, le programme attend une entrée clavier suivie d'un retour. Si la console gère une pile et que celle-ci contient quelque chose, il y a extraction réelle de la pile.

Deux cas peuvent encore se présenter. Que se passe-t-il à la suite d'un appel par PULL si la pile est vide ? La réponse est la même que pour une console sans pile, le programme attend une entrée clavier suivie d'un retour. Que se passe-t-il si, à la fin du programme, il reste encore quelque chose dans la pile ? La réponse doit être circonstanciée. Cela dépend en effet de qui reprend la main. Mais dans tous les cas, ce qui se présente à la sortie de la pile sera interprété, selon les règles de ce qui prendra la main. Exemple : le programme ARexx se termine et il y a retour à la console. Imaginons qu'il restait la chaîne "dir DH0:" dans la pile. A la fin de l'exécution du programme ARexx, dès le retour à la console, il y aura exécution de l'instruction AmigaDOS "DIR DH0:". Pour généraliser, si ce qui reste dans la pile n'a pas de sens pour celui qui prend la main, il y a dans le meilleur des cas, apparition d'un message d'erreur, ou, dans le pire des cas, du Guru.

On peut commencer à envisager l'intérêt d'une console à pile pour échanger des commandes et des paramètres entre des programmes de nature différente.

EXTERNAL

Cette option ne fonctionne pas comme décrit dans le manuel. Elle a fait l'objet d'une rectification dans la version 1.15. Cette option attend systématiquement une entrée au clavier, non pas à partir de la console courante (qui gère les deux flux standards stdin et stdout) mais à partir du flux stderr de la console d'erreur, ouverte par appel de la commande TCO (Tracing Console Open), placée dans le répertoire C:. TCO ouvre une fenêtre spéciale dans laquelle s'inscrit la trace de l'exécution du programme en cours et qui peut recevoir des entrées clavier. A partir de cette fenêtre, le fonctionnement de EXTERNAL est identique à celui de PULL, mais l'information ne provient pas de la pile. Ceci est fait pour éviter de perturber la pile qui a le statut de "Public" et peut donc servir à d'autres programmes. La fermeture de la fenêtre s'effectue par la commande TCC (Tracing Console Close), elle aussi placée dans C:. La fermeture peut toutefois ne pas être immédiate, à cause du double emploi de cette fenêtre.

VAR

Mise pour "variable", cette option ne "regarde" plus vers l'extérieur mais fournit à une variable interne du programme, le moyen d'être traitée de la même façon par la partie 'traitement' de l'instruction PARSE. Par exemple, si :

MaVariable='chaîne de plusieurs groupes de caractères'

...l' instruction :

PARSE VAR MaVariable 'traitement'

...effectuera le traitement décrit sur MaVariable. Là encore et comme partout ailleurs, le mot UPPER peut être placé, s'il y a besoin. juste derrière PARSE.

Il reste maintenant à voir les formes dédiées de l'instruction PARSE. Ces formes sont dites dédiées parce qu'elles fournissent une information identifiée à priori sur l'environnement.

NUMERIC

Cette option fournit une information en rapport avec les précisions numériques et les formats des nombres en usage. Elle fournit une chaîne de trois mots :
  • DIGITS, qui contient le nombre de chiffres de la précision des calculs.
  • FUZZ, qui contient le nombre de chiffres à ignorer lors des opérations de comparaison numérique.
  • FORM, qui contient soit SCIENTIFIC soit ENGINEERING. Dans le premier cas, les nombres sont présentés en notation exponentielle, ajustée de façon à ce que la partie non nulle de la mantisse soit comprise entre 0 et 1. Dans le deuxième cas, la forme est aussi exponentielle mais l'exposant varie de trois en trois (par mille) et la mantisse (si non nulle) est comprise entre 0 et 1000. Ces choix peuvent être effectués par ailleurs pour chaque opération réalisée dans le programme, au moyen de l'instruction NUMERIC (autre que l'option PARSE ici décrite) et de ses paramètres.
SOURCE

Cette option retourne une chaîne qui contient six mots :
  • COMMAND ou FONCTION indique si le programme a été invoqué comme une commande ou une fonction. Une des différences est que la commande retourne un code spécifique nommé RC (pour Return Code), et qui a pour valeur 1 ou 0, selon la réussite d'exécution de la commande (0 pour réussi 1 pour échec), alors que la fonction peut retourner une valeur ou une chaîne.
  • INDICATEUR BOOLÉEN 0/1 indique que le demandeur attend une chaîne de caractères en retour ou non.
  • CALLED indique le nom qui a été utilisé pour invoquer le programme.
  • RESOLVED indique le nom qui a été utilisé en fin lors de l'appel réel.
  • EXT est l'extension du nom du fichier qui a été utilisée pour la recherche. La valeur par défaut est REXX, c'est pourquoi un programme intitulé "MonProgramme.REXX" peut être invoqué par "MonProgramme" tout simplement.
  • HOST indique l'adresse REXX de l'hôte qui a envoyé la commande.
VERSION

Cette option retourne une chaîne contenant six mots :
  • AREXX.
  • VERSION contient la version de l'interpréteur courant. Ici par exemple, 1.15.
  • CPU indique un microprocesseur 68000/10/20/30 selon le cas.
  • MPU contient NONE ou 68881, ce qui indique l'éventuelle présence du coprocesseur arithmétique.
  • VIDEO contient le standard vidéo courant, soit PAL pour les versions européennes ou NTSC pour les autres.
  • FREQ contient la fréquence du réseau : 50 Hz ou 60 Hz.
A retenir
  • Selon que l'on utilise une console avec pile ou sans, certaines options de l'instruction PARSE fonctionnent différemment.

  • Les options SOURCE et les modes 'traitement' sont indépendants et pourront être combinés.

  • Dans les options SOURCE, il y a des options anonymes qui peuvent être utilisées selon le gré du programmeur et des options dédiées qui fournissent des renseignements sur l'environnement.

  • Les options SOURCE permettent de dialoguer avec l'intérieur du programme (VAR) ou avec l'extérieur de type ARexx (ARG) ou non (PULL).
Nous avons maintenant passé en revue toutes les options SOURCE de l'instruction PARSE. Nous analyserons prochainement la partie 'traitement'.


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