Obligement - L'Amiga au maximum

Vendredi 06 juin 2025 - 12:19  

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 - Décompression simplifiée de fichiers
(Article écrit par Randy Finch et extrait du Randy Finch's Web Site - octobre 1991)


Qu'est-ce qu'ARexx ?

Tout d'abord, ARexx n'est pas le surnom d'un des dinosaures préhistoriques. Il s'agit de la version Amiga du langage REXX. ARexx a été écrit par William "Bill" S. Hawes et est vendu par lui (voir les informations à la fin de cet article). J'ai parlé à Bill Hawes au téléphone à quelques reprises et je l'ai rencontré il y a environ trois ans. Il semble être un gars très gentil et talentueux. Bill Hawes est devenu célèbre dans la communauté Amiga il y a plusieurs années lorsqu'il a rendu son programme ConMan librement distribuable. ConMan a ajouté l'édition en ligne de commande et l'historique à la fenêtre CLI. Bill Hawes a ajouté WShell à ConMan afin de créer un environnement de commande complet pour remplacer le CLI. Ce produit est disponible dans le commerce. Je l'utilise depuis des années et j'en suis très satisfait. Je continue à l'utiliser même si Commodore a maintenant un Shell inclut au système d'exploitation.

L'apogée du succès de Bill Hawes (jusqu'à présent) doit être ARexx. Lorsque j'ai assisté à la conférence des développeurs Amiga en 1988 à Washington, des appels ont été lancés aux développeurs pour qu'ils incorporent des interfaces ARexx dans leurs produits. Ces appels ont porté leurs fruits. De très nombreux logiciels pour Amiga disposent désormais d'interfaces ARexx. C'est devenu tellement courant que Commodore a fait d'ARexx un élément standard de la version 2.0 du système d'exploitation.

Encore une fois, qu'est-ce qu'ARexx ?

ARexx est un langage de programmation de haut niveau doté d'une fonction de débogage au niveau de la source et plus encore. Il peut également être utilisé comme un langage de commande. Les programmes de commande, plus communément appelés fichiers de traitement par lot( ("batch"), scripts ou macros, peuvent être utilisés pour étendre l'ensemble des commandes prédéfinies du système d'exploitation. Il ne fait aucun doute que la plupart d'entre vous ont écrit, à un moment ou à un autre, un script dans lequel plusieurs commandes ont été combinées pour créer un programme qui a accompli une tâche qu'aucune commande n'aurait pu accomplir seule. ARexx permet d'écrire des scripts avec la flexibilité supplémentaire d'avoir un langage de programmation à disposition. Les scripts standard reposent entièrement sur les commandes du système d'exploitation. Cela rend certaines tâches assez difficiles, car les constructions en boucle peuvent être difficiles à mettre en oeuvre, des variables peuvent être nécessaires, etc. ARexx permet d'implémenter facilement ces types de tâches puisque le langage de programmation et les commandes du système d'exploitation peuvent être combinés de manière simple et utile. Un exemple sera donné plus tard.

ARexx peut également communiquer avec des programmes d'application. Cette fonction peut être utilisée pour permettre à l'utilisateur de personnaliser un programme, ou pour permettre à un programme de contrôler un autre programme dans l'environnement multitâche de l'Amiga. Il s'agit d'une fonctionnalité très puissante. Cet article se concentrera sur ARexx en tant que langage de programmation et de commande.

ARexx comme langage de programmation

ARexx est un langage interprété. Les programmes peuvent être créés avec un éditeur de texte et enregistrés sur le disque sous forme de fichier ASCII. L'interpréteur ARexx lira ce fichier et l'exécutera à la volée. Afin d'exécuter un programme ARexx, un programme d'arrière-plan appelé "processus résident" doit être chargé. Le nom du programme du processus résident est REXXMAST. Si les programmes ARexx doivent être exécutés fréquemment, le programme REXXMAST peut être chargé à partir du fichier script startup-sequence. Le processus résident restera chargé et disponible jusqu'à ce que la commande RXC soit émise. Un programme ARexx, qui doit avoir une extension ".rexx" (par exemple - program.rexx), peut être exécuté en émettant la commande :

RX programme [arguments]

Si vous utilisez WShell, la commande RX n'est pas nécessaire car le Shell peut lancer des programmes ARexx sans RX. Lorsqu'une tentative d'exécution d'un programme est effectuée, le répertoire actuel est d'abord recherché. Si le programme n'y est pas trouvé, le répertoire actuellement attribué au périphérique rexx : est recherché.

ARexx va dans la bibliothèque

Les disquettes de distribution d'ARexx contiennent deux bibliothèques partagées qui doivent être copiées dans le répertoire "Libs:" : rexxsyslib.library et rexxsupport.library. La première contient des fonctions qui sont largement utilisées pendant l'interprétation du programme. Bien que de nombreuses fonctions soient très spécifiques à l'interpréteur, certaines d'entre elles peuvent être utiles dans les programmes utilisateurs. Cette bibliothèque est ouverte lorsque REXXMAST est chargé. Cette dernière bibliothèque contient des fonctions utiles spécifiques à l'Amiga. Elle doit être ouverte par l'utilisateur. De plus, ARexx utilise la bibliothèque partagée mathieeedoubbas.library sur le disque du Workbench pour effectuer des calculs en virgule flottante.

Un programme d'exemple

A ce stade, examinons un programme d'exemple. Il s'intitule FX.rexx et est présenté dans le listing 1. Les numéros de ligne ont été ajoutés afin que vous puissiez suivre facilement le programme au cours de la discussion suivante. FX.rexx est un programme générique d'extraction de fichiers.

Je dirige un petit club de bibliothèque du domaine public dans ma région. De ce fait, je télécharge fréquemment des programmes depuis des tableaux d'affichage pour les inclure dans les disquettes de la bibliothèque. En général, les fichiers des tableaux d'affichage sont compressés à l'aide de l'un des nombreux programmes de compression disponibles. Les trois programmes de compression que j'utilise le plus fréquemment sont Arc, Zoo et Lharc. Les fichiers compressés à l'aide de ces trois programmes ont pour nom d'extension standard ".arc", ".zoo" et ".lzh", respectivement. Au cours d'une session de télécommunications typique, je télécharge plusieurs fichiers compressés, les stockant tous dans un répertoire sur mon disque dur. Lorsque le téléchargement est terminé, je crée un sous-répertoire pour chaque fichier et je décompresse chaque fichier dans son sous-répertoire correspondant à l'aide du programme de compression approprié. Cela peut être un casse-tête lorsque de nombreux fichiers ont été téléchargés. J'ai donc écrit FX.rexx pour me soulager. Jetons un coup d'oeil détaillé à FX.rexx.

   Listing 1 -- FX.rexx, programme d'extraction générique de fichiers


    1  /* Generic File Extractor -- Randy C. Finch 1990 */
    2
    3  'list >ram:rcflist files quick'
    4
    5  call open('rcf','ram:rcflist','R')
    6
    7  do until eof('rcf')
    8       fn = readln('rcf')
    9       rs = right(fn,4)
   10       if rs == '.arc' | ,
   11          rs == '.zoo' | ,
   12          rs == '.lzh'
   13       then do
   14          ls = left(fn,length(fn)-4)
   15          'makedir ' ls
   16          'cd ' ls
   17          select
   18               when rs == '.arc' then   'arc x /'ls'.arc'
   19               when rs == '.zoo' then   'zoo x// /'ls'.zoo'
   20               when rs == '.lzh' then   'lharc -x x /'ls'.lzh'
   21          end  /* select */
   22          'cd /'
   23       end   /* do */
   24  end   /* do */
   25  call close('rcf')
   26  'delete ram:rcflist'

Toutes les clauses sauf Santa Claus

La ligne 1 est une ligne de commentaire. Tous les programmes ARexx, pour des raisons historiques, doivent commencer par une ligne de commentaire. Notez que les commentaires ARexx sont identiques aux commentaires C avec une ouverture "/*" et une fermeture "*/".

La ligne 3 est une clause de commande. ARexx reconnaît plusieurs types de clauses telles que les clauses nulles (par exemple, les lignes 1 et 2), les clauses de label (aucun exemple), les clauses d'affectation (par exemple, les lignes 8 et 9), les clauses d'instruction (par exemple, les lignes 7 et 10) et les clauses de commande (par exemple, les lignes 3 et 15). Toute déclaration qui ne peut être classée dans l'un des quatre premiers types de clause est classée comme une clause de commande. L'expression de la déclaration est évaluée et transmise à l'hôte externe qui peut être le système d'exploitation, comme dans notre cas, ou un programme d'application. Remarquez que des guillemets simples entourent la commande "LIST" à la ligne 3. Cela n'est pas nécessaire tant qu'il n'y a rien dans la clause de commande qui puisse être confondu avec un autre type de clause. À la ligne 3, le symbole ">" pose problème car il est interprété par ARexx comme un symbole "supérieur à" et non comme le symbole de redirection prévu pour la commande "LIST". L'objectif de la ligne 3 est de créer une liste rapide (uniquement les noms) des fichiers du répertoire courant (qui devrait être celui contenant les fichiers téléchargés) dans un fichier nommé "RCFLIST" dans le RAM Disk:.

La ligne 5 est une clause d'instruction qui appelle une des nombreuses fonctions internes. La fonction "OPEN" ouvre le fichier "ram:RCFLIST", qui vient d'être créé, avec un nom logique de RCF. Le "R" signifie que le fichier sera lu.

Se mettre en boucle

La ligne 7 est une instruction DO indiquant que toutes les instructions jusqu'à l'instruction END correspondante de la ligne 24 doivent être répétées jusqu'à ce que la fin du fichier RCF soit atteinte. L'instruction DO d'ARexx est très polyvalente, car elle remplit toutes les fonctions des instructions FOR, DO..WHILE et WHILE du C.

La ligne 8 utilise la fonction interne "READLN" pour lire une ligne du fichier RCF et affecter la chaîne à la variable FN.

La ligne 9 extrait les quatre caractères de droite de FN et les affecte à la variable RS.

Its The Same Old Line

Les lignes 10, 11 et 12 sont en fait une seule ligne. ARexx interprète la virgule à la fin des lignes 10 et 11 pour signifier que la ligne suivante est une continuation de la ligne actuelle. ARexx permet également à plusieurs instructions de résider sur une seule ligne en les séparant par un point-virgule. L'instruction IF des lignes 10 à 12 vérifie si l'extension du nom de fichier courant, FN, correspond à l'une des trois qui peuvent être traitées par le programme. Si c'est le cas, les instructions contenues dans les instructions THEN DO..END (lignes 13-23) sont exécutées. Dans le cas contraire, l'exécution du programme reprend à la ligne 24. Le double signe égal "==" est appelé opérateur d'égalité exacte et indique qu'une comparaison doit être effectuée caractère par caractère. Si l'opérateur d'égalité "=" est utilisé, les blancs de tête sont ignorés et la chaîne la plus courte sera complétée par des blancs. Le symbole "|" est un opérateur logique OU inclusif.

Voici votre affectation

La ligne 14 affecte tous les caractères de la chaîne FN, sauf les quatre derniers, l'extension du nom de fichier, à la variable LS. Remarquez que la fonction "LENGTH" est appelée dans la fonction "LEFT".

Suivez ces commandes

Les lignes 15 et 16 commencent à montrer la véritable puissance d'ARexx. Chacune de ces lignes combine une commande du système d'exploitation avec une variable ARexx. ARexx évalue toujours une expression avant de la transmettre à l'hôte. Dans ces cas, une concaténation de chaînes de caractères est impliquée, ainsi qu'une substitution de variable. Par exemple, à la ligne 15, la variable "LS" est remplacée par sa valeur actuelle. Supposons que FN soit égal à "RAYTRACE.zoo". LS sera alors égale à "RAYTRACE". Ainsi, la ligne 15 sera évaluée comme "MAKEDIR RAYTRACE" et la ligne 16 comme "CD RAYTRACE". Ces deux lignes ont pour effet de créer un sous-répertoire portant le même nom que le fichier compressé sans l'extension, puis de faire de ce nouveau répertoire le répertoire courant. Vous pourriez vous demander ce qui se passerait si la ligne 15 était exécutée avant que LS n'ait été attribué à quoi que ce soit. Ceci fait apparaître une caractéristique intéressante d'ARexx. Toutes les variables sont sans typage ; elles sont stockées sous forme de chaînes de caractères. Lorsqu'une expression exige qu'une variable soit considérée comme autre chose, par exemple numérique, la chaîne est convertie au format approprié et l'expression est évaluée. Lorsqu'une variable non assignée est rencontrée dans une expression, ARexx la rend égale à son propre nom. Cela signifie que la variable non assignée LS est égale à "LS". Par conséquent, si "MAKEDIR" LS est exécuté avant que LS ne soit assigné, un répertoire portant le nom de LS sera créé.

Faire la bonne sélection

Les lignes 17 à 21 constituent une structure "SELECT". Ici, le programme de compression approprié est exécuté en fonction de l'extension du nom de fichier dans la variable RS. Les instructions "WHEN" sont utilisées pour la sélection. Notez que pour les trois appels de programme de compression qui suivent les instructions "THEN" des lignes 18 à 20, un "/" apparaît juste avant le guillemet simple de fermeture qui est suivi immédiatement de la variable LS. L'expression de la ligne 19 est évaluée à ZOO "x// /RAYTRACE.zoo". Cette commande appelle ZOO, qui doit se trouver dans votre chemin de commande, en lui demandant d'extraire les fichiers du fichier "RAYTRACE.zoo" un répertoire plus haut dans l'arborescence. Tous les fichiers extraits apparaîtront dans le répertoire courant, qui est "RAYTRACE" (voir ligne 16). La ligne 22 est une commande CD qui change le répertoire courant en celui dans lequel se trouvent les fichiers compressés.

Remontée

La ligne 23 est l'instruction "END" qui correspond à l'instruction "DO" de la ligne 13. L'instruction "END" de la ligne 24 correspond à l'instruction "DO" de la ligne 7. Lorsqu'elle s'exécute, l'une des deux choses suivantes se produit. Si la fin du fichier RCF n'a pas été atteinte, la boucle "DO" commençant à la ligne 7 s'exécute à nouveau. Si la fin du fichier a été atteinte, la boucle est quittée et les lignes 25 et 26 sont exécutées, ce qui ferme et supprime le fichier qui a été créé à la ligne 3. Il n'est pas vraiment nécessaire de fermer les fichiers dans ARexx car l'interpréteur conserve une liste des fichiers ouverts et les ferme lorsqu'un programme se termine. Cependant, FX.rexx a dû fermer "ram:RCFLIST" parce que ce fichier devait être supprimé avant que le programme ne se termine.

Voilà, c'est terminé. J'espère vous avoir aidé à mieux comprendre ce langage important pour l'Amiga appelé ARexx.

Pour plus de lecture : Cowlishaw, M. F. ; The REXX Language : A Practical Guide to Programming ; Prentice-Hall 1985.


[Retour en haut] / [Retour aux articles]