#ifndef H_ED_FIC_20030218091041
#define H_ED_FIC_20030218091041

#ifdef __cplusplus
extern "C"
{
#endif

/* ---------------------------------------------------------------------
   (c) ED 1998-2005
   Projet       : CLIB
   Fonction     : Gestion des fichiers
   Module       : FIC
   Fichier      : FIC.H
   Creation     : 31-12-1998
   Modification : 02-05-2005
   --------------------------------------------------------------------- */

/* ---------------------------------------------------------------------
   Journal

   1.10 du 02-05-2005 Amelioration portabilite
   .                  (Fonctions POSIX.1 fstat() au lieu de DOS)
   1.9 du 29-04-2005 Homogenisation des formats de dates.
   .                 Suppression de pseudo-trigaphs
   1.8 du 17-01-2005 Mise au point FIC_backup()
   1.7 du 05-03-2003 Amelioration de la gestion des erreurs dans FIC_copy()
   1.6 du 18-02-2003 Ajout de FIC_ext_is()
   1.5 du 12-01-2001 Ajout de FIC_scantext()
   1.4 du 05-10-2000 Amelioration FIC_copy()
   1.3 du 07-06-2000 Ajoute FIC_getline()
   1.2 du 20-04-2000 Ajoute FIC_backup()
   1.1 du 04-04-2000 Restrictions ANSI, compatibilite DJGPP
   1.0 du 31-12-1998 Mise au normes du module
   0.3 du 16-12-98 remplace _open() _close() par fopen() et fclose()

   0.2 du 27-10-98 Ajoute date et time
   0.1 du 10-10-98 Version operationelle

   --------------------------------------------------------------------- */
#include <stdio.h>
#include "ed/inc/types.h"

/* public data ========================================================= */
/* macros ============================================================== */
/* constants =========================================================== */

/* cr de FIC_getline() */
   typedef enum
   {
#define ITEM(a) a,
#include "ed/inc/fic_err.itm"
#undef ITEM
      FIC_ERR_NB
   }
   eFIC_ERR;

/* Taille dst chaines *** NE PAS MODIFIER *** */
   enum
   {
      FIC_DATE_SIZE = 11,
      FIC_TIME_SIZE = 9,
      FIC_SIZE_SIZE = 13,
      FIC_dummy
   };

/* types =============================================================== */

/* ---------------------------------------------------------------------
   fFIC_SCANTEXT
   ---------------------------------------------------------------------
   Role : FIC_scantext callback
   ---------------------------------------------------------------------
   E : user context
   E : line
   E : line read status
   S : 0 = continue 1 = stop
   --------------------------------------------------------------------- */
   typedef int fFIC_SCANTEXT (void *puser, char *sline, eFIC_ERR line_sts);

/* structures ========================================================== */
/* internal public data ================================================ */
/* internal public functions =========================================== */
/* entry points ======================================================== */

/* ---------------------------------------------------------------------
   FIC_sver()
   ---------------------------------------------------------------------
   Role : Retourne une chaine "Version"
   ---------------------------------------------------------------------
   E :
   S : Pointeur de chaine ASCIIZ
   --------------------------------------------------------------------- */
   char const *FIC_sver (void);

/* ---------------------------------------------------------------------
   FIC_sid()
   ---------------------------------------------------------------------
   Role : Retourne une chaine "Identification"
   ---------------------------------------------------------------------
   E :
   S : Pointeur de chaine ASCIIZ
   --------------------------------------------------------------------- */
   char const *FIC_sid (void);

/* ---------------------------------------------------------------------
   FIC_serr()
   ---------------------------------------------------------------------
   Role : Retourne une chaine erreur
   ---------------------------------------------------------------------
   E :
   S : Pointeur de chaine ASCIIZ
   --------------------------------------------------------------------- */
   char const *FIC_serr (eFIC_ERR const err);

/* ---------------------------------------------------------------------
   FIC_exist()
   ---------------------------------------------------------------------
   Role : Teste la presence d'un fichier
   ---------------------------------------------------------------------
   E : Fichier
   S : 0=KO 1=OK
   --------------------------------------------------------------------- */
   int FIC_exist (const char *const sfile);

/* ---------------------------------------------------------------------
   FIC_load()
   ---------------------------------------------------------------------
   Role : Restauration binaire
   ---------------------------------------------------------------------
   E : Fichier
   S : 0=KO 1=OK
   --------------------------------------------------------------------- */
   int FIC_load (const char *const sfile
                 ,void *const pdata
                 ,size_t const n);

/* ---------------------------------------------------------------------
   FIC_save()
   ---------------------------------------------------------------------
   Role : Sauvegarde binaire
   ---------------------------------------------------------------------
   E : Fichier
   S :
   --------------------------------------------------------------------- */
   void FIC_save (const char *const sfile
                  ,void *const pdata
                  ,size_t const n);

/* ---------------------------------------------------------------------
   FIC_copy()
   ---------------------------------------------------------------------
   Role : Duplication d'un fichier
   ---------------------------------------------------------------------
   E : Fichier source
   E : Fichier dsttination
   S : EXIT_FAILURE / EXIT_SUCCESS
   --------------------------------------------------------------------- */
   int FIC_copy (const char *const ssrc, const char *const sdst);

/* ---------------------------------------------------------------------
   FIC_backup()
   ---------------------------------------------------------------------
   Role : sauvegarde un fichier en conservant une copie de secours
   ---------------------------------------------------------------------
   E : Fichier original
   E : Fichier temporaire (modifie)
   E : extension de secours
   S :
   --------------------------------------------------------------------- */
   void FIC_backup (char const *const s_old
                    ,char const *const s_new
                    ,char const *const s_bak_ext);

/* ---------------------------------------------------------------------
   FIC_getline()
   ---------------------------------------------------------------------
   Role : lire une ligne en la testant
   ---------------------------------------------------------------------
   E : Contexte de fichier
   E : ligne
   E : Longeur de la ligne
   S : 0=OK
   1=pas tout lu
   2=err lect
   3=err param
   ---------------------------------------------------------------------- */
   eFIC_ERR FIC_getline (FILE * const fp
                         ,char *const line
                         ,size_t const len);

/* ---------------------------------------------------------------------
   FIC_size ()
   ---------------------------------------------------------------------

   ---------------------------------------------------------------------
   I: file name
   O: size of the file in bytes
   --------------------------------------------------------------------- */
   ulong FIC_size (char const *const fname);

/* ---------------------------------------------------------------------
   FIC_str_size()
   ---------------------------------------------------------------------
   Role : Recuperer une chaine "Taille du fichier"
   ---------------------------------------------------------------------
   E : Fichier
   E : Chaine
   E : Longeur max de la chaine
   S :
   --------------------------------------------------------------------- */
   void FIC_str_size (const char *const sfile
                      ,char *const s_size
                      ,size_t const len);

/* ---------------------------------------------------------------------
   FIC_scantext()
   ---------------------------------------------------------------------
   Role : Lire un fichier. Appeler un traitement a chaque ligne
   ---------------------------------------------------------------------
   E : Fichier
   E : Fonction de traitement de la ligne
   E : contexte utilisateur
   S : 0 = OK 1 = erreur. Voir errno
   --------------------------------------------------------------------- */
   eFIC_ERR FIC_scantext (const char *const sfile
                          ,fFIC_SCANTEXT * const pf
                          ,void *const puser);

/* ---------------------------------------------------------------------
   FIC_ext_is()
   ---------------------------------------------------------------------
   determiner si un fichier a telle ou telle extension
   ---------------------------------------------------------------------
   E : Nom du fichier
   E : extension
   S : 0 = non 1 = oui
   --------------------------------------------------------------------- */
   int FIC_ext_is (char const *const fname, char const *const ext);


#if (defined (__BORLANDC__) && !defined (__STDC__)) \
 || defined (__GNUC__)      \
 || defined (_MSC_VER)


/* ---------------------------------------------------------------------
   FIC_date()
   ---------------------------------------------------------------------
   Role : Recuperer une chaine "Date du fichier"
   ---------------------------------------------------------------------
   E : Fichier
   E : Chaine
   E : Longeur max de la chaine
   S :
   --------------------------------------------------------------------- */
   void FIC_str_date (const char *const sfile
                      ,char *const sdate
                      ,size_t const size);

/* ---------------------------------------------------------------------
   FIC_time()
   ---------------------------------------------------------------------
   Role : Recuperer une chaine "Heure du fichier"
   ---------------------------------------------------------------------
   E : Fichier
   E : Chaine
   E : Longeur max de la chaine
   S :
   --------------------------------------------------------------------- */
   void FIC_str_time (const char *const sfile
                      ,char *const stime_
                      ,size_t const size);

#endif

/* File generated by 'NEW.EXE' Ver 1.13 (c) ED 1998 */

#ifdef __cplusplus
}
#endif

#endif                          /* H_ED_FIC_20030218091041 */

/* Guards added by GUARD (c) ED 2000-2003 Feb 14 2003 Ver. 1.5 */
