Menu

libsap_fr

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

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.