Obligement - L'Amiga au maximum

Samedi 17 novembre 2018 - 03:55  

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 : Assembleur/C - La requête de fichiers de la arp.library
(Article écrit par Dominique Genot et extrait d'Amiga News Tech - janvier 1991)


Chaque programmeur se heurte un jour ou l'autre au problème qui consiste à demander à l'utilisateur du programme le nom d'un fichier : chargement, sauvegarde, données...

Cette interaction est une des routines de base de la arp.library ; elle s'appelle FileRequest (requête de fichiers). Tout le monde a déjà vu cette routine en action : elle ouvre une fenêtre munie de trois gadgets booléens (Ok, Parent, Cancel), d'un gadget vertical proportionnel pour visualiser tous les répertoires et fichiers du chemin courant, et de deux gadgets de chaîne pour entrer au clavier le nom du chemin et celui du fichier, on peut aussi cliquer sur le bouton droit de la souris pour changer de disque. C'est cette requête qui s'ouvre quand on demande à charger un fichier avec l'assembleur Devpac. Ceux qui ont déjà programmé cette requête savent que cela prend du temps pour une tâche finalement triviale et fastidieuse. Celui-ci est-il au moins simple à utiliser ? La réponse est oui... (ouf !).

La seule chose nécessaire est bien entendu la bibliothèque ARP qui est dans le domaine public et qui se trouve dans le tiroir "Libs:" de beaucoup d'utilitaires courants (comme Devpac), Il suffit de la copier dans le tiroir "Libs:" de sa disquette système. On peut en connaître la version en tapant sous CLI "version arp.library". Les sources qui suivent sont valables pour la version 34.1 et au-delà.

Deux types de sources sont donnés : en C (Lattice 4.01) et en assembleur (Devpac 2), ce qui devrait satisfaire la plupart des programmeurs (pour le GFA Basic, voir cet article).

Programmation en C

Cela va nous permettre de préciser les structures nécessaires. En effet, ouvrir la requête, c'est bien, récupérer les réponses, c'est mieux ! Une seule structure est ici nécessaire : elle s'appelle FileRequester et elle décrit les caractéristiques de la fenêtre que l'on veut ouvrir :

assembleur

Ce qui est directement utilisable :
  • fr_titre est un pointeur sur la chaîne qui contient le titre voulu pour la requête (du style "Ma Requête" pour rester traditionnel...).
  • fr_file est un pointeur sur un tampon mémoire qui contiendra au retour le nom du fichier choisi (plus un octet à 0).
  • fr_dir est un pointeur sur un tampon mémoire qui contiendra le nom du chemin.
  • fr_window permet de choisir la fenêtre Intuition dans laquelle s'ouvrira la requête. Si on met à 0 ce pointeur, la requête s'ouvre alors dans la fenêtre active au moment de l'appel. Si on a ouvert sa propre fenêtre Intuition par l'instruction "Window=OpenWindow(&NewWindow);", on pourra fixer ce pointeur par "Freq.fr_window=Window;"
  • fr_reserved2 est un long mot qui, dans les versions ultérieures (au-delà de 34.1) indique la position du coin supérieur gauche de la requête (par rapport au coin supérieur gauche de l'écran ?). Il est alors décomposé comme suit :
UWORD fr_leftedge /* marge gauche */
UWORD fr_topedge /* hauteur du coin */

Quand cette structure est définie et initialisée, y compris les tampons nécessaires :

char fname[80]; /* 79 octets +0 pour le nom de fichier */
char dirname[120]; /* idem pour le nom du chemin */
char nom_complet[200]; /* pour le nom complet */

Il faut préciser l'offset de la routine FileRequest avec une instruction pragma au début du source :

#pragma libcall ArpBase FileRequest 126 801

Ceci correspond à :

D0 = FileRequest(FileRequester) (A0)

L'offset de la routine est -$126 dans ArpBase et le registre A0 doit pointer sur la structure FileRequester. En retour, D0 contient 0 s'il y a eu une erreur ou si l'utilisateur a cliqué sur "Cancel". Si tout s'est déroulé normalement, D0 contient l'adresse du tampon qui contient le nom du fichier choisi ("fname" dans le source qui suit).

Voici le programme (sous LATTICE 4.0) :

assembleur

Programmation en assembleur

La structure est la même que précédemment, on la définit sous Devpac avec le compteur interne "rs". Pour la signification de chaque label, voir le paragraphe précédent. Rappelons les conditions d'appel :

FileRequest EQU -$126
D0 = FileRequest(FileRequester) (A0)

Donc A0 doit pointer sur une structure FileRequester et D0 donne le résultat de la demande : D0=0 si "Cancel" ou si un problème fut rencontré, sinon D0 pointe sur le nom du fichier.

Précisons que si une fenêtre Intuition est ouverte, on peut fixer le pointeur "fr_window" pour que la requête s'ouvre dans cette fenêtre.

Exemple :

move.l _intuitionbase,A6   ; la bibliothèque Intuition étant ouverte
lea fenetre,a0             ; structure de la fenêtre à ouvrir
JSR OpenWindow(A6)         ; ->D0=adresse fenêtre ouverte
lea FileReq,a0             ; filerequester à ouvrir
move.l d0,fr_window(A0)   ; initialise le pointeur fr_window

Enfin, si le pointeur "fr_window" est à 0, la requête s'ouvrira dans la fenêtre à partir de laquelle le programme fut lancé (sauf si le programme est lancé sous Devpac, la requête s'ouvre alors dans la fenêtre ouverte par défaut). Voici le source du programme sous Devpac 2 :

assembleur
assembleur
assembleur
assembleur

Comme les deux sources le montrent, il ne faut pas oublier de "coller" le nom du répertoire et celui du fichier pour avoir le nom complet (en ajoutant un "/" si nécessaire).


[Retour en haut] / [Retour aux articles]