Obligement - L'Amiga au maximum

Vendredi 17 novembre 2017 - 22:17  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · 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 in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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 : Assembleur - XPK et ARexx : l'interrogation d'ARexx
(Article écrit par Frédéric Delacroix et extrait d'Amiga News - janvier 1997)


Dans notre exemple d'écriture d'une bibliothèque ARexx, nous en sommes arrivés à la disposition de la fonction d'interrogation d'ARexx. Je vais maintenant vous décrire dans les détails le travail de cette fonction, et nous aborderons également la programmation de XPK.

En avant !

Nous en étions au point où ARexx appelle la fonction d'interrogation à la recherche d'une fonction qu'il cherche à localiser. Le registre A0 contient alors une structure RexxMsg telle qu'on l'a vue le mois dernier. Dans cette structure (qui n'est pas à considérer comme une structure Message : surtout pas de GetMsg()), le champ le plus important dans notre cas est le premier argument : rm_Args (aussi appelé Arg0). Il contient le nom de la fonction qu'ARexx recherche, sous forme d'une ArgString. Notre fonction doit donc comparer cet argument avec les noms de fonctions de notre bibliothèque.

A partir de là, de deux choses l'une : ou la fonction est connue, ou elle ne l'est pas. Dans les deux cas, il ne faudra surtout pas modifier la structure RexxMsg ni les Argstrings associés : elles serviront à d'autres appels de bibliothèques de la part d'ARexx. Si la fonction demandée est inconnue, on doit retourner 1 en D0 (ce qui correspond à l'erreur "Program not found"). ARexx sait alors qu'il doit continuer sa recherche. Si, par contre, la fonction est connue, il nous faut d'exécuter. Pour cela, les différents arguments passés à la fonction se trouve dans les autres champs du tableau d'Argstrings rm_Args, le nombre d'arguments donnés étant dans l'octet de poids faible de rm_Action (soit dans l'octet rm_Action+3). Ce nombre inclut les arguments passés en tant que valeurs par défaut, auquel cas le pointeur correspondant est nul, mais n'inclut pas Arg0 (le nom de la fonction).

Une fois la fonction exécutée, on doit retourner 0 en D0 (ce qui indique l'absence d'erreur) et le résultat sous forme d'ArgString en A1. C'est du moins ce que dit la doc officielle, il semble que ce soit plutôt en A0. Soyons prudent : à la fois en A0 et A1. La création d'une telle ArgString se fait très simplement grâce à la fonction CreateArgsting() de la rexxsyslib.library et consorts.

Si une erreur s'est produite, le code de l'erreur est à retourner en D0 (par exemple : 17=nombre d'arguments incorrects), mais il ne faut pas renvoyer de résultat. N'oubliez pas non plus que le code 1 est réservé à un usage particulier.

L'exemple

Dans notre exemple, tout ceci est accompli en scrutant une table, de façon à rendre le programme très extensible, même si dans la version que je vous présente ici, seules les fonctions PackFile() et UnpackFile() sont présentes. La documentation est au format "autodoc", de sorte que vous pourrez, grâce à l'utilitaire "autodoc" (fourni sur le CD Developer Kit), extraire la dite documentation du source, et éventuellement la convertir au format AmigaGuide grâce à AD2AG :

autodoc -t8 -s -l RexxXPK.s >rexxxpk.doc
ad2ag rexxxpk.doc

Je vous laisse donc avec la fin du programme entamé le mois dernier qu'il suffit de taper à la suite. Examinez également les prochaines disquettes de la collection DPAT, dans lesquelles vous retrouverez cette bibliothèque rexxxpk.library (ou une version améliorée) et quelques scripts ARexx utiles (comme un script permettant d'ouvrir et sauvegarder des fichiers compressés avec XPK dans l'éditeur CygnusEd 3.5).

En attendant, cet exemple-ci devrait vous permettre de tester la bibliothèque. Le mois prochain, programmation de XPK avec un autre exemple.

Assembleur
Assembleur
Assembleur
Assembleur


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