File Already Closed
Vous voulez créer un programme assembleur pour utiliser sous Basic les routines de l'ExtraMoniteur et gérer
un fichier sur disquette? Excellente idée! Cela permet de charger ou sauver des fichiers qu'aucune instruction
Basic ne saurait gérer. D'autant plus que les FCB et les DSB de tous les lecteurs sont déjà déclarés,
installés et les erreurs reliées directement au Basic bref: les routines de l'ExtraMoniteur ne demandent
qu'à être utilisées.
Vous pokez alors votre nom de fichier de 11 caractères en &H624F, le numéro
de lecteur en &H6049 et vous envoyez la sauce par un EXEC.
Mais pour peu qu'une erreur soit survenue pendant une sauvegarde ou un chargement,
que vous n'ayez pas refermé le fichier et que vous demandiez une nouvelle opération sur le même fichier,
votre programme Basic vous repousse par un impitoyable "File Already Open".
Il existe une solution propre (cf. "Désassemblage du Basic" par Obsidian).
Lorsque vous ouvrez un fichier par un OPEN#1 en input ou en output, le Basic
va placer un repère dans la liste des canaux (qui peuvent être au nombre de 16) à l'adresse du premier
canal. Mais le Basic utilise aussi un canal spécial pour tous les chargements logiciels introduits par
les instructions LOAD, SAVE, LOADM, SAVEM, LOADP, SAVEP... Il suffit de déclarer votre fichier ouvert
par ce canal, juste après son ouverture par la routine ExtraMoniteur OPEN de votre programme assembleur:
LDB #$80 Numéro de FCB
ORB #$80 + type "disk"
ORB $624B + mode d'ouverture
STB $6943 Déclare au Basic le fichier ouvert
... puis de le déclarer fermé après sa fermeture par la routine
ExtraMoniteur CLOSE de votre programme assembleur:
CLR $6943 Plus de fichier déclaré
L'avantage d'une telle installation est qu'avant de vous rendre la main, si une erreur survient
malencontreusement et à n'importe quel moment, le Basic se chargera lui-même de refermer proprement
le fichier d'après son mode d'ouverture.
|