[1] | 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> |
---|