Obligement - L'Amiga au maximum

Mardi 23 avril 2024 - 13:47  

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 - Catalogue d'un disque (deuxième partie)
(Article écrit par François Gueugnon et extrait d'Amiga News Tech - novembre 1991)


Dans le chapitre précédent, nous avons écrit et expliqué le premier module (Repertoire) de notre projet d'édition du catalogue du disque de notre choix. Nous nous attaquons aujourd'hui au second module (Traitement).

Rappelons que ce premier module permettait d'obtenir de manière quasi-certaine, c'est-à-dire sans risque d'erreur, le nom du disque dont on désire obtenir le catalogue, ce nom pouvant être logique (par exemple, Arexx:) ou bien physique (par exemple, DH0:). Mais afin de permettre l'interfaçage entre les deux modules, nous proposons une petite, toute petite, modification. Il s'agit d'ajouter juste avant l'instruction EXIT les deux instructions PUSH suivantes :

PUSH device
PUSH 'rx ram:Traitement'
EXIT /* Ligne 48 du module précédent */

Ces deux instructions "poussent" dans la pile de la console, d'une part la variable ARexx "device" (qui contient la définition du disque choisi) et d'autre part, une instruction du type CLI, Shell ou ConMan.

Voici alors ce qui va se passer (on supposera que le nom du programme décrit ci-après est "Traitement" et qu'il est placé en RAM:).

Il faut d'abord lancer le premier programme, qui va obtenir le nom légal du disque à analyser. A la fin de ce programme, juste avant EXIT, ces deux instructions vont pousser dans la pile le nom du disque à analyser et celui du programme qui devra le faire. Notons en passant que ces deux instructions appartiennent chacune à des mondes différents. Dès la sortie par EXIT, la main revient à l'hôte, ici la console. L'instruction rx ram:Traitement, insérée en dernier par PUSH, est celle qui va être rappelée la première (différence entre PUSH et QUEUE). C'est une instruction légale pour la console, elle lance donc le programme ARexx Traitement.

Dans ce programme qui prend alors la main, la première instruction est PULL nomvariable ; cette instruction extrait de la pile celle qui reste, à savoir le nom du disque à traiter. Voici donc une particularité intéressante qui permet de passer à peu près n'importe quoi d'un programme à un autre, sans égard pour la différence des types de programme.

Programme Traitement

Ce programme permet d'obtenir le répertoire du disque précédemment défini avec la longueur de chaque fichier. Voici son mécanisme :
  • En utilisant la fonction "dir opt a" du DOS, création d'un fichier en RAM: nommé "repertoire".
  • Analyse ligne par ligne de ce fichier et obtention de la taille de chaque entrée.
  • Création d'un fichier en RAM: nommé "resul" comprenant les indications nécessaires au prochain programme pour afficher notre forme personnelle du répertoire.
Note : on aurait pu utiliser les fonctions spécialisées d'ARexx pour obtenir le répertoire désiré (en l'occurrence, la fonction DIR). Nous avons bien précisé que nous ne cherchions qu'à montrer des fonctionnements et des mécanismes !

Pour analyser le fichier placé en RAM, il faut en connaître la structure. C'est un fichier texte, dans lequel chaque ligne peut contenir soit un nom de répertoire, soit deux noms de fichiers. Le décalage des répertoires entre eux, selon leur rang, est de cinq caractères, le premier étant à trois caractères de la marge gauche. Les fichiers d'un répertoire sont décalés de deux caractères à droite.

C'est le calcul de la position du répertoire qui donne son rang et les fichiers qui lui sont affectés. Il faut donc retenir les différentes positions pour affecter correctement les fichiers aux répertoires, surtout en revenant d'un emboîtement de répertoires ! Les fichiers, eux, sont placés à raison de deux par ligne, lorsque le nombre est pair. Dans le cas contraire, il n'y en a qu'un. Un intitulé de fichier peut contenir des espaces ce qui leurre ARexx, qui l'interprète comme un séparateur. En conséquence, l'extraction des fichiers se fera par position, car elle reste heureusement constante.

Enfin, le fichier résultat aura une forme particulière. Ce sera une chaîne de caractères contenant toutes les informations nécessaires, concaténées sans espaces et avec des séparateurs spécifiques. Cette chaîne sera construite par concaténations consécutives des valeurs utiles dès leur obtention.

Avertissement : une erreur de programmation initiale fait que la chaîne finale n'a pas tout à fait la régularité souhaitée. Au moment d'effectuer la correction, nous avons pensé tirer parti de la chose en transformant un bogue en caractéristique ! En effet, dans le programme suivant, nous verrons comment filtrer et corriger l'erreur. Ceci pour montrer la souplesse des programmes qui peuvent traiter des logiciels extérieurs sans s'occuper vraiment de la logique matérielle de ces programmes.

Ce programme fait partie d'un tout. On peut toutefois le lancer seul (par exemple, rx ram:traitement) ; l'instruction PULL en tête attend alors un argument qui aurait été placé dans la pile par le programme précédent. Comme il n'y est pas, il faut le fournir à partir du clavier. Par exemple, DF1: et puis la touche "Entrée".

Listing du programme

Ce programme est listé ci-dessous. Rappelons que les numéros de lignes n'ont été mis que pour faciliter la lecture ; il ne faut pas les taper lors de la recopie du programme. Les explications nécessaires ont été directement incluses dans le listing, mais il semble toutefois utile d'apporter quelques compléments.

Certaines lignes de programme sont trop longues pour la largeur de la page de l'éditeur utilisé. Dans ce cas, il est possible de couper la ligne sans affecter son intégrité logique, en plaçant une virgule à l'endroit de la coupure, suivie bien sûr d'un retour-chariot.

La création d'une chaîne de caractères continue pour matérialiser le résultat est totalement arbitraire. Mais cela représente une bonne introduction à la lecture de chaînes qui n'ont pas de sens ASCII, c'est-à-dire du code ou tout autre chose, dans lesquelles la notion de ligne n'a pas de sens. C'est un des aspects sympathiques et uniques d'ARexx de traiter uniquement des caractères.

Dans ce programme, nous voyons comment nous pouvons, d'une part, acquérir des noms de répertoires ou de fichiers, les traiter, mélanger, construire et leur faire subir tout ce qu'on peut effectuer sur des chaînes de caractères et d'autre part, pourvu qu'ils aient une forme légale, les utiliser comme commandes par exemple pour changer de répertoire !

Enfin pour passer des éléments : variables, chaînes, valeurs, tableaux, commandes, etc., nous avions utilisé et nous utilisons encore cette fois-ci, le passage par la pile. Cependant, nous avons ici utilisé concurremment une autre méthode qui s'apparente aux POKE et PEEK du BASIC, avec cette différence essentielle toutefois que l'opération se fait au travers de l'allocateur général de l'Amiga et qu'en conséquence, il n'y a pas de risque d'écraser un espace occupé par quelqu'un d'autre, non plus que de risquer pour soi les mêmes déboires. Dans le présent programme, nous n'avons pas pris la précaution de vérifier que l'allocation avait été correctement effectuée en regardant le RC (pour Return Code), ce qui est imprudent en milieu multitâche.

Cette allocation survient à la fin du programme demandeur d'allocation. Cela impose de gérer la désallocation lorsque il n'est plus utile de conserver cet espace. L'instruction est FREESPACE(adresse,taille), d'où la nécessité de passer ces valeurs aux programmes utilisateurs.

ARexx
ARexx


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