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 - Moniteur de disquette GFA D-Mon (deuxième partie : fonctions dédiées aux fichiers)
(Article écrit par Étienne Mouratila et extrait d'Amiga News Tech - octobre 1990)
|
|
Nous avons commencé le mois dernier à mettre au point un mini utilitaire de disquettes, permettant diverses
opérations sur les fichiers et sur les secteurs du disque. Ce mois-ci, nous abordons les premières fonctions
dédiées aux fichiers.
Avant toute chose, il semble important de rappeler que GFA-Dmon (puisque tel est son nom) n'a, et de loin, pas
la prétention d'égaler un programme comme DiskMaster ou DiskCraft. Simplement, il sert d'exemple pour la
programmation en GFA Basic d'une part, et celle d'AmigaDOS depuis ce langage d'autre part. Un emploi
modeste certes, mais utile tout de même.
Dans ce qui va suivre, nous allons développer trois procédures de type "primaire", c'est-à-dire pas bien
compliquées. Elles portent les doux noms de FileView, FileErase et FileRename. Vous noterez que bien que GFA
Basic dispose des instructions KILL et NAME AS, nous avons préféré, encore une fois pour des raisons d'illustration,
appeler directement AmigaDOS via les fonctions DeleteFile() et Rename() de la dos.library. Cela complique un
tout petit peu les choses, puisque les noms des fichiers sont passés sous forme de pointeurs plutôt que directement
de chaînes de caractères, mais GFA Basic met à notre disposition la fonction V: qui renvoie l'adresse d'une
variable alphanumérique. Exactement ce qu'il nous faut.
FileView
Cette procédure affiche à l'écran le contenu d'un fichier, de préférence texte ASCII, mais un fichier binaire
peut également être visualisé de cette manière. Ici de même, nous avons préféré utiliser Open() de la dos.library
plutôt qu'OPEN du GFA Basic (la nuance est subtile...) ainsi que Read() et Close() en lieu et place de INPUT # et CLOSE,
respectivement.
Les choses sont de fait légèrement plus compliquées, Read() exigeant de savoir combien de caractères elle doit extraire
du fichier. Pour nous simplifier toutefois un peu la vie, nous avons limité ce nombre à 1 et construisons une chaîne 1$
qui sera affichée à l'écran dès que sa longueur aura atteint 80 caractères (largeur maximale de l'écran) OU que l'on
aura lu un Line-Feed (ASC1110). On passe alors à la ligne suivante, et, toutes les 20 lignes affichées, on demande à
l'utilisateur s'il désire poursuivre la visualisation ou bien s'il préfère arrêter là. Dans le second cas, la boucle
WHILE... WEND se termine, sinon elle continue jusqu'à ce que Read() ait renvoyé le code 0, signifiant que la fin du
fichier a été atteinte.
FileRename
Cette procédure sert à donner un nouveau nom à un fichier existant sur la disquette. L'instruction GFA "FILESELECT"
est utilisée pour entrer à la fois l'ancien nom du fichier et le nouveau, nous évitant ainsi l'écriture de routines
de gestion des gadgets d'Intuition, totalement hors de propos ici.
Ensuite, et de même que dans la procédure précédente, on appelle la dos.library (fonction Rename())
avec comme paramètres les pointeurs sur les deux noms de fichiers, obtenus par la fonction V:.
Si tout se passe bien, la variable status% contient la valeur -1, sinon elle contient un code d'erreur que nous
affichons dans une ALERT, après avoir pris soin de ramener notre écran devant les autres grâce à la fonction
de l'intuition.library ScreenToFront(), ceci au cas où une requête système serait apparue lors de l'exécution
de Rename() ("Please insert volume XXXX in any drive", etc.).
FileErase
La dernière procédure pour ce mois-ci propose d'effacer un fichier du disque, par le biais de la fonction DeleteFile()
de la dos.library. Là encore, on aurait très bien pu utiliser l'instruction KILL du GFA Basic, mais bon...
Tout comme dans FileRename, la variable status% contient le résultat de l'opération : -1 si tout va bien, un
code d'erreur dans le cas contraire, code d'erreur qui est affiché dans une ALERT.
Insérez donc ces trois petits listings dans le programme principal donné le mois dernier.
See you soon
Voilà, on s'arrêtera là pour aujourd'hui. Ces trois procédures ne sont certes pas bien compliquées,
mais j'espère qu'elles vous auront suffisamment mis l'eau à la bouche pour nous retrouver le mois prochain,
où nous développerons l'édition hexadécimale/ASCII d'un fichier et commencerons l'étude des fonctions
de catalogue. D'ici là, bon courage...
|