Suivez-nous sur X

|
|
|
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
|
|
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
|
|
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
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : GFA Basic - arp.library
(Article écrit par Dominique Lorre et extrait d'Amiga News Tech - juin 1990)
|
|
La arp.library
Qui ne connaît pas aujourd'hui la fameuse arp.library et son non moins célèbre sélectionneur de fichiers ?
En tout cas cette bibliothèque de fonctions a été utilisée par de nombreux développeurs et dans des langages
tels que le C, l'assembleur, le Modula II, l'AmigaBASIC, l'ARexx et aussi le HiSoft Basic. A cette liste
manquait le GFA Basic. Cela est certainement dû à la relative nouveauté de ce langage qui a beaucoup de peine
à s'imposer sur Amiga. Cependant, ce langage possède toutes les commandes nécessaires à l'interfaçage de la
bibliothèque ARP.
L'utilisation de l'ARP en GFA Basic apporte-t-elle grand-chose à ce langage ? Oui, si l'on considère que
celle-ci offre de nombreuses fonctions dont la reconnaissance des caractères génériques, l'évaluation
d'une ligne de commande et bien sûr son fameux sélectionneur de fichiers.
Un sélectionneur de fichiers
Mais, me direz-vous, le
GFA Basic possède son propre sélectionneur de fichiers et il est inutile d'appeler celui de l'ARP.
Je répondrai que le sélectionneur de l'ARP est avantageux à plus d'un titre. Sa première qualité
vient de sa renommée et de sa présence dans de nombreux programmes, qui font que ce sélectionneur
est connu de beaucoup d'utilisateurs d'Amiga. En second lieu, celui-ci est âgé de plusieurs années :
il descend du vieux sélectionneur de Charlie Heath visible par exemple dans le programme PerfectSound,
qui l'a constamment amélioré depuis. De cette ancienneté découlent naturellement efficacité, rapidité et
facilité d'emploi.
On peut affirmer sans crainte qu'il s'agit du sélectionneur de fichiers le plus
efficace jamais créé sur Amiga (celui d'AZ est un concurrent valable à qui j'attribuerai la palme de
l'esthétisme). Efficace car le programmeur peut y ajouter ses propres gadgets et redéfinir la fenêtre
d'affichage.
Mon but n'est pas de critiquer le sélectionneur du GFA Basic, qui j'en suis sûr se bonifiera avec le
temps. Le premier sélectionneur de Charlie Heath était loin d'être convivial, mais pour l'époque il était
exceptionnel car la plupart des logiciels n'offraient pas encore de liste de fichiers (chargez un fichier
avec NotePad, vous comprendrez). Non, le seul défaut grave de ce sélectionneur est un bogue
faisant que 48 octets ne sont pas rendus au système à la fin de son appel. Ceci a entraîné de nombreuses
erreurs "aléatoires" dans plusieurs programmes particulièrement gros.
C'est une raison suffisante pour
utiliser la arp.library. La version utilisée ici de l'ARP est la 1.3, numéro 39.1. Il est absolument
garanti que le programme ci-dessous ne fonctionnera pas avec une version inférieure. Et j'ose espérer
qu'il fonctionnera avec les versions postérieures. Le fichier arp.library doit être contenu dans le
répertoire Libs: et son numéro de version peut être obtenu avec la commande du CLI
"version arp.library".
Au cas où vous n'auriez pas ce fichier sous la main, je vous conseillerai premièrement de faire le
tour de vos disquettes, un grand nombre de logiciels utilisant la arp.library (qui est domaine public,
je le rappelle), il existe une chance non négligeable pour que vous retrouviez ce fichier dans le
répertoire Libs: de l'une d'entre elles. Sinon, les moyens possibles de se la procurer sont les
disquettes Fish, ou d'autres collections du domaine public, et aussi la plupart des serveurs proposant
du téléchargement sur Amiga. Vérifiez bien qu'il s'agit de la version 1.3.
Pour ce qui est de la documentation,
celle-ci existe en plusieurs parties. Comme le projet ARP comprend également des commandes remplaçant
celles du CLI, la partie de la documentation qui y fait allusion ne vous intéressera pas. Ce qu'il
vous faudra, c'est le fichier arppro13.zoo qui contient l'ensemble des informations utiles aux
développeurs. Ce fichier (en anglais...) compressé avec Zoo vous renseignera sur l'utilisation de
chacune des fonctions de la bibliothèque, vous permettra de retrouver les décalages de ces
fonctions (arp_proto.h) et contient un accord de licence obligatoire pour les développeurs voulant diffuser
légalement des programmes utilisant l'ARP. Je devais au moins vous prévenir.
Pour ce qui est de la partie technique, je me suis enfin décidé à documenter correctement mes programmes,
ce qui devrait vous satisfaire...
Le listing
Ce programme tente d'illustrer l'utilisation de la arp.library avec le GFA Basic.
' Ouverture de la arp.library et initialisations
@initall
' appel du sélecteur de fichiers
resultat%=@filerequest(monfilereq%,"You know what?",WINDOW(5),172,30)
' le résultat est lu, si on a zéro, l'utilisateur a sélectionné Cancel
' ou il s'est produit une erreur lors de l'appel du sélecteur
' par exemple, une position incorrecte des coordonnées haut et gauche.
IF resultat%
' l'utilisateur a choisi un fichier. Son chemin se trouve dans fr_dir%
' et son nom dans fr_file%
file$=CHAR{fr_file%}
chemin$=CHAR{fr_dir%}
PRINT "ok"
PRINT "Fichier : ";file$
PRINT "Chemin : ";chemin$
ELSE
PRINT "Pas de sélection"
ENDIF
PRINT "Un bouton de la souris"
PRINT "Pour quitter le programme..."
REPEAT
UNTIL MOUSEK
@freeall
PROCEDURE initall
' Dimensionnement du tableau de registres pour l'instruction RCALL
DIM regs%(15)
' Ouverture d'un écran séparé
OPENS 1
' Ouverture d'une fenêtre
OPENW #5
' Ouverture de la arp.library
arpname$="arp.library"+CHR$(0)
arpname%=V:arpname$
arpbase%=OpenLibrary(arpname%,0)
IF arpbase%=0
PRINT "Impossible d'ouvrir la arp library"
END
ENDIF
' Allocation d'une structure FileRequest
' Celle-ci sera libérée par le CloseLibrary
monfilereq%=@arpallocfreq
IF monfilereq%=0
PRINT "Erreur d'allocation de la structure FileRequest"
~CloseLibrary(arpbase%)
END
ENDIF
RETURN
PROCEDURE freeall
' Fermeture de la arp.library
' Cet appel libère également le (ou les) sélecteur(s) de fichiers
~CloseLibrary(arpbase%)
CLOSEW #5
CLOSES 1
RETURN
' Cette procédure permet d'accéder de manière simple aux
' différents éléments de la structure FileRequest
PROCEDURE filereqstruct(filereq%)
ABSOLUTE fr_hail%,filereq% ! titre
ABSOLUTE fr_file%,filereq%+4 ! nom du fichier
ABSOLUTE fr_dir%,filereq%+8 ! chemin du fichier
ABSOLUTE fr_window%,filereq%+12 ! fenêtre
ABSOLUTE fr_funcflagsl,filereq%+16 ! drapeaux
ABSOLUTE fr_flags2,filereq%+17 ! autres drapeaux
ABSOLUTE fr_function%,filereq%+18 ! fonction externe
ABSOLUTE fr_leftedge&,filereq%+22 ! position gauche
ABSOLUTE fr_topedge&,filereq%+24 ! position haut
RETURN
' Allocation d'une structure FileRequest
' l'adresse de la nouvelle structure est retournée dans
' le registre D0 (regs%(0))
FUNCTION arpallocfreq
regs%(14)=arpbase%
RCALL arpbase%-&H294,regs%()
RETURN regs%(0)
ENDFUNC
' Appel du FileRequest
' titre$ : chaine de caractères affichée sur le sélecteur et sur l'écran
' fenetre% : adresse de la fenêtre où le sélecteur sera affiché
FUNCTION filerequest(filereq%,titre$,fenetre%,gauche&,haut&)
ftitre$=titre$+CHR$(0)
filereqstruct(filereq%)
fr_hail%=V:ftitre$
fr_window%=fenetre%
fr_leftedge&=gauche&
fr_topedge&=haut&
regs%(14)=arpbase%
regs%(8)=filereq%
RCALL arpbase%-&H126,regs%()
RETURN regs%(0)
ENDFUNC
|
Et voici le résultat :
Merci à Guillaume Guittenit pour avoir retapé le code et proposé l'image du résultat !
|