/* ---------------------------------------------------------------------
   (c) ED 1999-2008
   Projet       : CLIB
   Fonction     : Gestion d'une chaine banalisee
   Module       : BUFSZ
   Fichier      : BUFSZ.C
   Creation     : 17-11-1999
   Modification : 06-04-2008
   --------------------------------------------------------------------- */

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

   1.1 du 06-04-2008 Ajout de "ed/inc/mem.h"
   1.0 du 14-12-1999 Version operationelle
   0.0 du 17-11-1999 Creation

   --------------------------------------------------------------------- */
#ifdef __cplusplus
#error This source file is not C++ but rather C. Please use a C-compiler
#endif

#include "ed/inc/sys.h"
#include "ed/inc/bufsz.h"

/* macros ============================================================== */

#define MODULE "BUFSZ"
#define VER "1.1"
#define ID "BUFSZ Module \"C\" (c) ED 1999-2008"

/* constants =========================================================== */
/* types =============================================================== */
/* structures ========================================================== */
/* private variables =================================================== */
/* private functions =================================================== */
/* entry points ======================================================== */

/* ---------------------------------------------------------------------
   BUFSZ_sver()
   ---------------------------------------------------------------------
   Role : Retourne une chaine "Version"
   ---------------------------------------------------------------------
   E :
   S : Pointeur de chaine ASCIIZ
   --------------------------------------------------------------------- */
const char *BUFSZ_sver (void)
{
   return VER;
}

/* ---------------------------------------------------------------------
   BUFSZ_sid()
   ---------------------------------------------------------------------
   Role : Retourne une chaine "Identification"
   ---------------------------------------------------------------------
   E :
   S : Pointeur de chaine ASCIIZ
   --------------------------------------------------------------------- */
const char *BUFSZ_sid (void)
{
   return ID;
}

/* ---------------------------------------------------------------------
   BUFSZ_init()
   ---------------------------------------------------------------------
   Role : Initialisation
   ---------------------------------------------------------------------
   E : Pointeur de donnees
   E : chaine
   E : type d'allocation
   S :
   --------------------------------------------------------------------- */
void BUFSZ_init (sBUFSZ * pBuf, char const *const sz, eMEM eMem)
{
   ENUM_CHECK ();

   if (pBuf != NULL)
   {
      /*assert (eMem >= 0); un enum est toujours > 0 ? */
      ASSERT (eMem < MEM_NB);

      pBuf->sz = sz;
      pBuf->eMem = eMem;

   }
}

/* ---------------------------------------------------------------------
   BUFSZ_move()
   ---------------------------------------------------------------------
   Role : Deplacer (la source est effacee)
   ---------------------------------------------------------------------
   E : Source
   E : Destination
   S :
   --------------------------------------------------------------------- */
void BUFSZ_move (sBUFSZ * pBufSrc, sBUFSZ * pBufDes)
{
   if (pBufSrc != NULL
       && pBufDes != NULL
      )
   {
      /* copie */
      *pBufDes = *pBufSrc;

      /* effacement */
      {
         sBUFSZ Buf0 =
         {0, MEM_STA};
         *pBufSrc = Buf0;
      }

   }
}

/* ---------------------------------------------------------------------
   BUFSZ_end()
   ---------------------------------------------------------------------
   Role : Liberation automatique du bloc de donnees si il est dynamique
   ---------------------------------------------------------------------
   E : Pointeur de donnees
   S :
   --------------------------------------------------------------------- */
void BUFSZ_end (sBUFSZ * pBuf)
{
   if (pBuf != NULL)
   {
      if (pBuf->eMem == MEM_DYN)
      {
         if (pBuf->sz != NULL)
         {
            free ((void *) pBuf->sz);

            pBuf->eMem = MEM_STA;
         }
      }
      pBuf->sz = NULL;
   }
}

/* public variables ==================================================== */
/* File generated by 'NEW.EXE' Ver 1.19 (c) ED 1998-99 */
