1 | LibSAP est une librarie de manipulation des archives SAP écrite en ANSI C.
|
---|
2 | Elle fournit à la fois des routines de manipulation bas-niveau des archives
|
---|
3 | SAP considérées comme format physique (images de disquettes) et des routines
|
---|
4 | de manipulation haut-niveau des archives SAP considérées comme format
|
---|
5 | logique (compatible avec le DOS BASIC Thomson).
|
---|
6 |
|
---|
7 |
|
---|
8 |
|
---|
9 | 1. Routines de manipulation du format physique:
|
---|
10 |
|
---|
11 | sapID sap_OpenArchive(const char filename[], int *format);
|
---|
12 | Cette routine ouvre l'archive SAP dont le nom est spécifié par 'filename' et
|
---|
13 | retourne le numéro d'identification (sapID) attaché à cette archive à partir
|
---|
14 | de cet instant. Ce numéro d'identification sera passé aux autres routines de
|
---|
15 | la librairie pour désigner l'archive SAP sur laquelle elle devront agir.
|
---|
16 | Le paramètre 'format' retourne le format de l'archive SAP, qui peut-être
|
---|
17 | SAP_FORMAT1 ou SAP_FORMAT2.
|
---|
18 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
19 | d'erreur dans la variable sap_errno:
|
---|
20 | SAP_ETOOMANY: trop d'archives SAP sont ouvertes simultanément.
|
---|
21 | SAP_ENOENT: l'archive SAP spécifiée n'existe pas.
|
---|
22 | SAP_EBADF: le fichier spécifié n'est pas une archive SAP.
|
---|
23 |
|
---|
24 |
|
---|
25 | sapID sap_CreateArchive(const char filename[], int format);
|
---|
26 | Cette routine crée une archive SAP dont le nom est spécifié par 'filename'
|
---|
27 | et retourne le numéro d'identification (sapID) attaché à cette archive à
|
---|
28 | partir de cet instant. Ce numéro d'identification sera passé aux autres
|
---|
29 | routines de la librairie pour désigner l'archive SAP sur laquelle elle
|
---|
30 | devront agir.
|
---|
31 | Le paramètre 'format' spécifie le format de l'archive SAP, qui peut-être
|
---|
32 | SAP_FORMAT1 ou SAP_FORMAT2.
|
---|
33 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
34 | d'erreur dans la variable sap_errno:
|
---|
35 | SAP_ETOOMANY: trop d'archives SAP sont ouvertes simultanément.
|
---|
36 | SAP_EPERM: impossible de créer le fichier sur le support d'enregistrement.
|
---|
37 |
|
---|
38 |
|
---|
39 | int sap_CloseArchive(sapID id);
|
---|
40 | Cette routine ferme une archive SAP ouverte par sap_OpenArchive() ou créée
|
---|
41 | par sap_CreateArchive() et retourne SAP_OK.
|
---|
42 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
43 | d'erreur dans la variable sap_errno:
|
---|
44 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
45 |
|
---|
46 |
|
---|
47 | int sap_FillArchive(sapID id, sapsector_t *sapsector);
|
---|
48 | Cette routine remplie une archive créée par sap_CreateArchive() secteur
|
---|
49 | par secteur, en commençant par le secteur 1 de la piste 0. A chaque appel
|
---|
50 | le numéro de secteur est incrémenté de 1 et, si la piste courante devient
|
---|
51 | pleine, la piste suivante est sélectionnée. Retourne SAP_OK.
|
---|
52 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
53 | d'erreur dans la variable sap_errno:
|
---|
54 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
55 | SAP_ENOSPC: l'archive SAP est pleine.
|
---|
56 |
|
---|
57 |
|
---|
58 | int sap_ReadSector(sapID id, int track, int sect, sapsector_t *sapsector);
|
---|
59 | Cette routine lit le secteur numéro 'sect' de la piste numéro 'track' et
|
---|
60 | place le résultat dans la structure désignée par 'sapsector', retournant
|
---|
61 | SAP_OK ou une combinaison des flags suivants:
|
---|
62 | SAP_NO_STD_FMT: le format du secteur est non standard.
|
---|
63 | SAP_PROTECTED : le secteur est protégé en écriture.
|
---|
64 | SAP_BAD_SECTOR: le secteur a de mauvais identificateurs (piste, secteur)
|
---|
65 | SAP_CRC_ERROR : erreur de CRC sur les données du secteur.
|
---|
66 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
67 | d'erreur dans la variable sap_errno:
|
---|
68 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
69 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
70 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
71 |
|
---|
72 |
|
---|
73 | int sap_ReadSectorEx(sapID id, int track, int sect, int nsects, unsigned char data[]);
|
---|
74 | Cette routine lit 'nsects' secteurs de la piste 'track' à partir du
|
---|
75 | secteur 'sect' et place le résultat dans le tableau 'data'. Retourne
|
---|
76 | SAP_OK.
|
---|
77 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
78 | d'erreur dans la variable sap_errno:
|
---|
79 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
80 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
81 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
82 |
|
---|
83 |
|
---|
84 | int sap_WriteSector(sapID id, int track, int sect, sapsector_t *sapsector);
|
---|
85 | Cette routine écrit le secteur désigné par 'sapsector' au secteur numéro
|
---|
86 | 'sect' de la piste numéro 'track'. Tous les champs du secteur doivent être
|
---|
87 | spécifiés, exceptés les deux champs relatifs au CRC qui seront calculés
|
---|
88 | par la routine elle-même. Retourne SAP_OK.
|
---|
89 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
90 | d'erreur dans la variable sap_errno:
|
---|
91 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
92 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
93 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
94 |
|
---|
95 |
|
---|
96 | int sap_WriteSectorEx(sapID id, int track, int sect, int nsects, const unsigned char data[])
|
---|
97 | Cette routine écrit 'nsects' secteurs dans la piste 'track' à partir du
|
---|
98 | secteur 'sect' en utilisant les données du tableau 'data'. Retourne
|
---|
99 | SAP_OK.
|
---|
100 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
101 | d'erreur dans la variable sap_errno:
|
---|
102 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
103 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
104 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
105 |
|
---|
106 |
|
---|
107 |
|
---|
108 | 2. Routines de manipulation du format logique:
|
---|
109 |
|
---|
110 | int sap_FormatArchive(sapID id, int capacity);
|
---|
111 | Cette routine formate une archive SAP au format DOS BASIC Thomson et
|
---|
112 | retourne SAP_OK. Elle supporte les capacités SAP_TRK80 (80 pistes) et
|
---|
113 | SAP_TRK40 (40 pistes). Elle peut être utilisée à la fois sur une archive
|
---|
114 | créée par sap_CreateArchive() ou ouverte par sap_OpenArchive().
|
---|
115 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
116 | d'erreur dans la variable sap_errno:
|
---|
117 | SAP_EINVAL: le numéro d'identification (sapID) ou le format est invalide.
|
---|
118 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
119 |
|
---|
120 |
|
---|
121 | int sap_ListArchive(sapID id, char buffer[], int buffer_size);
|
---|
122 | Cette routine copie la liste des fichiers (au sens du DOS BASIC Thomson)
|
---|
123 | présents dans l'archive SAP dans le tampon 'buffer' dont la taille est en
|
---|
124 | octets est spécifiée par 'buffer_size' et retourne le nombre de ligne de
|
---|
125 | cette liste.
|
---|
126 | Si une erreur survient, la routine retourne 0 et stocke le numéro
|
---|
127 | d'erreur dans la variable sap_errno:
|
---|
128 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
129 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
130 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
131 |
|
---|
132 |
|
---|
133 | int sap_AddFile(sapID id, const char filename[]);
|
---|
134 | Cette routine ajoute le fichier spécifié par 'filename' à l'archive SAP
|
---|
135 | (en tant que fichier au sens du DOS BASIC Thomson) et retourne la taille
|
---|
136 | du fichier en octets.
|
---|
137 | Si une erreur survient, la routine retourne 0 et stocke le numéro
|
---|
138 | d'erreur dans la variable sap_errno:
|
---|
139 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
140 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
141 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
142 | SAP_ENOENT: le fichier n'existe pas.
|
---|
143 | SAP_ENFILE: le fichier est vide.
|
---|
144 | SAP_ENOSPC: le répertoire de l'archive SAP est plein.
|
---|
145 | SAP_EFBIG: le fichier est trop gros pour l'espace libre de l'archive SAP.
|
---|
146 |
|
---|
147 |
|
---|
148 | int sap_DeleteFile(sapID id, const char pattern[]);
|
---|
149 | Cette routine efface le fichier spécifié par 'pattern' de l'archive SAP
|
---|
150 | et retourne la taille du fichier en octets. Elle traite la présence des
|
---|
151 | wildcards '*' et '?' dans la chaîne 'pattern' et retourne dans ce cas la
|
---|
152 | taille totale de tous les fichiers effacés (éventuellement nulle).
|
---|
153 | Si une erreur survient, la routine retourne 0 et stocke le numéro
|
---|
154 | d'erreur dans la variable sap_errno:
|
---|
155 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
156 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
157 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
158 | SAP_ENOENT: le fichier n'existe pas dans l'archive SAP (erreur non valide
|
---|
159 | lorsque 'pattern' contient au moins une wilcard).
|
---|
160 |
|
---|
161 |
|
---|
162 | int sap_ExtractFile(sapID id, const char pattern[]);
|
---|
163 | Cette routine extrait le fichier spécifié par 'pattern' de l'archive SAP
|
---|
164 | et retourne la taille du fichier en octets. Elle traite la présence des
|
---|
165 | wildcards '*' et '?' dans la chaîne 'pattern' et retourne dans ce cas la
|
---|
166 | taille totale de tous les fichiers extraits (éventuellement nulle).
|
---|
167 | Si une erreur survient, la routine retourne 0 et stocke le numéro
|
---|
168 | d'erreur dans la variable sap_errno:
|
---|
169 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
170 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
171 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
172 | SAP_ENOENT: le fichier n'existe pas dans l'archive SAP (erreur non valide
|
---|
173 | lorsque 'pattern' contient au moins une wilcard).
|
---|
174 | SAP_EPERM: impossible d'écrire le ou les fichiers sur le support.
|
---|
175 |
|
---|
176 |
|
---|
177 |
|
---|
178 | int sap_GetFileInfo(sapID id, const char filename[], sapfileinfo_t *info);
|
---|
179 | Cette routine remplit les champs de la structure 'info' avec les
|
---|
180 | informations relatives au fichier 'filename' spécifié. Retourne SAP_OK.
|
---|
181 | Si une erreur survient, la routine retourne SAP_ERROR et stocke le numéro
|
---|
182 | d'erreur dans la variable sap_errno:
|
---|
183 | SAP_EINVAL: le numéro d'identification (sapID) est invalide.
|
---|
184 | SAP_EEMPTY: l'archive SAP est vide.
|
---|
185 | SAP_EBUSY: l'archive SAP est en train d'être remplie par sap_FillArchive()
|
---|
186 | SAP_ENOENT: le fichier n'existe pas dans l'archive SAP.
|
---|
187 |
|
---|
188 |
|
---|
189 |
|
---|
190 | Eric Botcazou
|
---|
191 | e-mail: <ebotcazou@libertysurf.fr>
|
---|