03.07.2013 Views

Magazine Pom's : la collection

Magazine Pom's : la collection

Magazine Pom's : la collection

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!