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> |
---|