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