### LibSAP LibSAP est une librarie de manipulation des archives SAP écrite en ANSI C. Elle fournit à la fois des routines de manipulation bas-niveau des archives SAP considérées comme format physique (images de disquettes) et des routines de manipulation haut-niveau des archives SAP considérées comme format logique (compatible avec le DOS BASIC Thomson). Ouverture d'une archive SAP Création d'une archive SAP Fermeture d'une archive SAP Remplissage une archive SAP Lecture d'un secteur SAP Lecture d'une série de secteurs SAP Ecriture d'un secteur SAP Ecriture d'une série de secteurs SAP Formatage d'une archive SAP Récupération d'un répertoire SAP Ajout d'un fichier à l'archive SAP Effacement de fichier(s) de l'archive SAP Extraction de fichier(s) de l'archive SAP Lecture des informations de fichier ##### Ouverture d'une archive SAP sapID sap_OpenArchive(const char filename[], int *format); filename : nom de l'archive SAP format : retour du format de l'archive SAP (sap_FORMAT1 ou sap_FORMAT2) Retourne l'identificateur de l'archive SAP. En cas d'erreur, sap_ERROR est retourné et sap_errno contient l'un des codes d'erreur suivants: SAP_ETOOMANY : trop d'archives SAP sont ouvertes simultanément. SAP_ENOENT : l'archive SAP spécifiée n'existe pas. SAP_EBADF : le fichier spécifié n'est pas une archive SAP. ##### Création d'une archive SAP sapID sap_CreateArchive(const char filename[], int format); filename : nom de l'archive SAP format : format de l'archive SAP (sap_FORMAT1 ou sap_FORMAT2) Retourne l'identificateur de l'archive SAP. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_ETOOMANY : trop d'archives SAP sont ouvertes simultanément. SAP_EPERM : impossible de créer le fichier sur le support d'enregistrement. ##### Fermeture d'une archive SAP int sap_CloseArchive(sapID id); id : identificateur de l'archive SAP Retourne SAP_OK. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. ##### Remplissage une archive SAP int sap_FillArchive(sapID id, sapsector_t *sapsector); id : identificateur de l'archive SAP sapsector : pointeur sur la structure de secteur Cette routine remplie une archive créée par sap_CreateArchive() secteur par secteur, en commençant par le secteur 1 de la piste 0. A chaque appel le numéro de secteur est incrémenté de 1 et, si la piste courante devient pleine, la piste suivante est sélectionnée. Retourne SAP_OK. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_ENOSPC : l'archive SAP est pleine. ##### Lecture d'un secteur SAP int sap_ReadSector(sapID id, int track, int sect, sapsector_t *sapsector); id : identificateur de l'archive SAP track : numéro de piste sect : numéro de secteur sapsector : pointeur sur la structure de secteur Le résultat de la lecture est dans la structure désignée par 'sapsector'. Retourne SAP_OK ou une combinaison des flags suivants: SAP_NO_STD_FMT : le format du secteur est non standard. SAP_PROTECTED : le secteur est protégé en écriture. SAP_BAD_SECTOR : le secteur a de mauvais identificateurs (piste, secteur) SAP_CRC_ERROR : erreur de CRC sur les données du secteur. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() ##### Lecture d'une série de secteurs SAP int sap_ReadSectorEx(sapID id, int track, int sect, int nsects, unsigned char data[]); id : identificateur de l'archive SAP track : numéro de piste de départ sect : numéro de secteur de départ nsect : nombre de secteurs à lire data : pointeur sur le buffer de secteurs Retourne SAP_OK. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() ##### Écriture d'un secteur SAP int sap_WriteSector(sapID id, int track, int sect, sapsector_t *sapsector); id : identificateur de l'archive SAP track : numéro de piste sect : numéro de secteur sapsector : pointeur sur la structure de secteur Tous les champs du secteur doivent être spécifiés, exceptés les deux champs relatifs au CRC qui seront calculés par la routine elle-même. Retourne SAP_OK. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() ##### Écriture d'une série de secteurs SAP int sap_WriteSectorEx(sapID id, int track, int sect, int nsects, const unsigned char data[]); id : identificateur de l'archive SAP track : numéro de piste de départ sect : numéro de secteur de départ nsect : nombre de secteurs à écrire data : pointeur sur le buffer de secteurs Retourne SAP_OK. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() ##### Formatage d'une archive SAP int sap_FormatArchive(sapID id, int capacity); id : identificateur de l'archive SAP capacity : sap_TRK80 (80 pistes) ou sap_TRK40 (40 pistes) Retourne SAP_OK. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) ou le format est invalide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() ##### Récupération d'un répertoire SAP int sap_ListArchive(sapID id, char buffer[], int buffer_size); id : identificateur de l'archive SAP buffer : buffer de répertoire buffer_size : taille du buffer de répertoire Retourne le nombre de lignes de la liste. En cas d'erreur, 0 est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() ##### Ajout d'un fichier à l'archive SAP int sap_AddFile(sapID id, const char filename[]); id : identificateur de l'archive SAP filename : nom du fichier à ajouter Retourne la taille du fichier en octets. En cas d'erreur, 0 est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() SAP_ENOENT : le fichier n'existe pas. SAP_ENFILE : le fichier est vide. SAP_ENOSPC : le répertoire de l'archive SAP est plein. SAP_EFBIG : le fichier est trop gros pour l'espace libre de l'archive SAP. ##### Effacement de fichier(s) de l'archive SAP int sap_DeleteFile(sapID id, const char pattern[]); id : identificateur de l'archive SAP pattern : pattern des fichiers à effacer ('*' et '?' sont supportés) Retourne la taille du (des) fichier(s) en octets. En cas d'erreur, 0 est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() SAP_ENOENT : le fichier n'existe pas dans l'archive SAP (erreur non valide lorsque pattern contient au moins une wilcard). ##### Extraction de fichier(s) de l'archive SAP int sap_ExtractFile(sapID id, const char pattern[]); id : identificateur de l'archive SAP pattern : pattern des fichiers à extraire ('*' et '?' sont supportés) Retourne la taille du (des) fichier(s) en octets. En cas d'erreur, 0 est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() SAP_ENOENT : le fichier n'existe pas dans l'archive SAP (erreur non valide lorsque 'pattern' contient au moins une wilcard). SAP_EPERM : impossible d'écrire le ou les fichiers sur le support. ##### Lecture des informations de fichier int sap_GetFileInfo(sapID id, const char filename[], sapfileinfo_t *info); id : identificateur de l'archive SAP filename : nom du fichier à examiner info : pointeur sur la structure d'information Retourne SAP_OK. En cas d'erreur, SAP_ERROR est retourné et 'sap_errno' contient l'un des codes d'erreur suivants: SAP_EINVAL : le numéro d'identification (sapID) est invalide. SAP_EEMPTY : l'archive SAP est vide. SAP_EBUSY : l'archive SAP est en train d'être remplie par sap_FillArchive() SAP_ENOENT : le fichier n'existe pas dans l'archive SAP.