Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
BSAVE, alors que vous ne pourriez<br />
gr. sauver un tableau par PRINT<br />
La gestion du fichier de<br />
données<br />
Principes généraux<br />
On utilise <strong>la</strong> routine RWTS, qui permet<br />
de lire ou d'écrire directement<br />
un secteur (soit 256 octets) sur <strong>la</strong> disquette.<br />
Revenons tout d'abord A l'adresse<br />
des enregistrements évoquée plus<br />
haut. Elle est codée sur deux octets,<br />
avec :<br />
• octet 1 :<br />
• octet 2:<br />
piste physique sur <strong>la</strong> disquette<br />
(P)<br />
4 bits de droite = secteur<br />
physique (5)<br />
4 bits de gauche = position<br />
de l'enregistrement<br />
dans le secteur (PO).<br />
Ainsi, pour lire un enregistrement,<br />
par exemple, on découpe le<br />
deuxième octet de l'adresse stockée<br />
dans <strong>la</strong> table d'index, on va lire le<br />
secteur 5 de <strong>la</strong> piste P dans un buffer,<br />
et l'on sait alors que les données<br />
de l'enregistrement concerné commencent<br />
en PO dans ce buffer. En<br />
fait, les positions étant comptées â<br />
partir de ° et si LE est <strong>la</strong> longueur de<br />
l'enregistrement, le premier commence<br />
en 0, le second en LE, le troisième<br />
en 2.LE ... Tout dépend bien<br />
sOr de LE et l'on voil bien que, dans<br />
le système présenté ici, <strong>la</strong> longueur<br />
de l'enregistrement ne doit pas dépasser<br />
256 caractères (c'est un<br />
exemple simplifié, ne l'oublions<br />
pas ... I.<br />
Il est certain également que l'efficacité<br />
de l'occupation de <strong>la</strong> disquette<br />
dépend du rapport entre LE et 256 :<br />
si vos enregistrements font 130 caractères,<br />
vous ne pouvez en mettre<br />
qu'un par secteur, et perdez ainsi<br />
presque <strong>la</strong> moitié de <strong>la</strong> capacité de<br />
stockage. Autant dire qu'il vaut<br />
mieux s'arranger pour n'avoir que<br />
128 caractères par enregistrement au<br />
lieu de 130 !<br />
La disquette "Fichier" n'est pas initialisée<br />
selon <strong>la</strong> procédure standard<br />
(voir le programme INIT ci-après).<br />
On utilise <strong>la</strong> commande de formatage<br />
de RWTS (Cf Manuel DOS 3.3)<br />
et l'on écrit ensuite sur le secteur 0<br />
de <strong>la</strong> piste ° les informations nécessaires<br />
à <strong>la</strong> gestion du fichier. A partir<br />
du secteur 1 de <strong>la</strong> piste 0 jusqu'au<br />
secteur 15 de <strong>la</strong> piste 34, tous les<br />
secteurs sont disponibles pour vos<br />
enregistrements.<br />
Une sous-routine spéciale assure le<br />
transfert des données des variables<br />
de l'enregistrement vers le buffer du<br />
fichier et du buffer vers les variables.<br />
En effet. uti liser des instructions<br />
PEEK et POKE retarde sensiblement<br />
les opérations de lecture/écriture et<br />
suppose ['emploi de variables alphanumériques<br />
dont le contenu change<br />
à chaque transfert de caractère, d'où<br />
saturation de <strong>la</strong> mémoire.<br />
Initialisation d'une disquette<br />
Fichier<br />
Le seul paramètre à fournir est <strong>la</strong><br />
longueur de ]' enregistrement LE<br />
(ligne 15 du programme INIT). Le<br />
RUN de ce programme assure ensuite<br />
l'initialisation d'une disquette<br />
vierge p<strong>la</strong>cée dans le drive 2. c'est-àdire<br />
:<br />
- formatage de <strong>la</strong> disquette<br />
- écriture en piste O/secteur 0 (physiques)<br />
des paramètres de départ :<br />
première piste jamais utilisée (0) et<br />
premier secteur jamais utilisé (1),<br />
première piste et premier secteur<br />
libres (également 0 et 1), nombre de<br />
zones par secteur (INT(256!LE)),<br />
nombre de zones utilisées dans le<br />
premier secteur libre (0), adresse de<br />
<strong>la</strong> demière zone libérée (piste:::: :O et<br />
secteur=O) mise à 0 pour signaler<br />
J'absence de zones libérées pour<br />
l'instant, longueur de l'enregistrement<br />
A noter que le terme "secteur" employé<br />
ci-dessus se rapporte A <strong>la</strong> définition<br />
de l'adresse, c'est·à-dire qu'il<br />
comporte â <strong>la</strong> fois l'indication du secteur<br />
physique et de <strong>la</strong> position dans<br />
ce secteur ; il s'agit donc d'un "sec·<br />
teur logique".<br />
Utilisation des routines<br />
L'instruction "&" permet d'accéder<br />
aux traitements de gestion du fichier<br />
(<strong>la</strong> ligne 2 du programme BASIC de<br />
démonstration p<strong>la</strong>ce A l'adresse $3F5<br />
un JMP $8E70). Quatre instructions<br />
sont ainsi disponibles:<br />
• &W: écriture d'un enregistrement<br />
• &R : lecture d'un enregistrement<br />
• &M: modification d'un enregistrement<br />
• &A: annu<strong>la</strong>tion d'un enregistremenl<br />
Au niveau du BASIC, vous n'avez<br />
plus à vous préoccuper de l'affecta-<br />
tian des adresses aux enregistrements<br />
ou de <strong>la</strong> récupération des adresses libérées<br />
par des annu<strong>la</strong>tions d'enregistrements;<br />
tout ce<strong>la</strong> est pris en charge<br />
par les routines assembleur.<br />
Quelques mots maintenant au sujet<br />
des variables BASIC qui constituent<br />
l'enregistremenl<br />
Ce sont des variables alphanumériques<br />
Simples (27 au maximum) dont<br />
il convient de spécifier le premier caractère<br />
du nom (Z$= 'V" dans notre<br />
exemple) et le nombre diminué de 1<br />
(soit 2 dans notre exemple). Les variables<br />
utilisées ci-après sont ainsi<br />
VA$, VB$ et VC$.<br />
Si vous voulez utiliser 5 variables<br />
dont le non commence par W, il<br />
vous suffit de modifier <strong>la</strong> ligne 4<br />
comme suit :<br />
... , Z$:"W", POKE 250,ASCIZ$),<br />
POKE 249,4WA$: ""WB$: "",<br />
WC$= "":WD$= "":WE$= ""<br />
Les routines assurent ensuite automatiquement<br />
le transfert du contenu<br />
de ces variables déc<strong>la</strong>rées dans l'enregistrement<br />
sur disquette et réciproquemenl<br />
A noter que <strong>la</strong> longueur de<br />
chacune de ces variables est enregistrée<br />
en même temps que son<br />
contenu : n'oubliez donc pas de rajouter<br />
un octet par variable lorsque<br />
vous calculez votre LE.<br />
Attention également, en ce qui<br />
concerne le transfert "enregistrement<br />
vers variables", au fait que l'on<br />
court-circuite <strong>la</strong> procédure Applesoft<br />
d'affectation des valeurs aux variables<br />
alphanumériques et de contrÔle<br />
de <strong>la</strong> p<strong>la</strong>ce libre (le fameux FRE(O)).<br />
C'est pourquoi nous utilisons ici l'une<br />
des versions des routines FRE présentées<br />
dans le numéro 2 de <strong>Pom's</strong><br />
afin d'effectuer si nécessaire le "Garbage<br />
Collection" après chaque opération<br />
de lecture (CALl 37500). Ne<br />
pas le faire, notamment au cours<br />
d'une lecture séquentielle du fichier,<br />
risque de <strong>la</strong>isser "descendre" les<br />
chaînes de caractères jusqu'au bas<br />
de <strong>la</strong> mémoire, avec les résultats surprenants<br />
que ce<strong>la</strong> suppose !<br />
Enfin, notons que les disquettes "fichier"<br />
ainsi gérées sont copiables<br />
sans problème par COPVA.<br />
<strong>Pom's</strong> n° 9