#ifndef __P
# if defined(__STDC__) ||  defined(__GNUC__)
#  define __P(x) x
# else
#  define __P(x) ()
# endif
#endif
/*------------------------------------------------------------\
|                                                             |
| Tool    :                    RDSGDS                         |
|                                                             |
| File    :                  gds_error.h                      |
|                                                             |
| Authors :                 Pierre Vittet                     |
|                    Modified by Jacomme Ludovic              |
| Date    :                   04/07/93                        |
|                                                             |
\------------------------------------------------------------*/

# ifndef RDSGDS_ERROR
# define RDSGDS_ERROR

/*------------------------------------------------------------\
|                                                             |
|                           Constants                         |
|                                                             |
\------------------------------------------------------------*/

/* erreurs generales */

#define ENOMEM       1          /* No enough core. */
#define EIO          2          /* IO error. */
#define EFTRUNC      3          /* The file is teuncated somewhere. */
#define ENOFILE      4          /* Cannot open file. */
#define ENOSPACE     5          /* No more space on disk. */
#define ECLOCK       6          /* Cannot read internal clock well. */
#define EOVERFL      7          /* Overflow or underflow. */
#define ENOMODEL     8          /* Unknown model in Rds. */
#define ENODONE      99

/* Programme en cours de finition... Cela permet de definir par exemple l'en-tete d'une */
/* fonction et de ne pas faire son corps. C'est utile si on doit fabriquer une librai-  */
/* rie et que l'on est en retard : n'importe qui peut quand meme inclure cette fonction */
/* dans un executable, il ne se passera rien lors de son appel. Il suffit simplement de */
/* recompiler lorsque la librairie est terminee.                                        */

/* erreurs specifiques aux parser/driver */

#define ENOCODE      101        /* Le code rencontre n'est pas reconnu.  */
#define ENORELE      102        /* Le code existe bien mais correspond a une version trop recente du format d e stockage */
                                /* (GDS2, CIF...), dans la version avec laquelle on travaille, ce code etait envisage   */
                                /* mais pas encore implemente.  */
#define ELAYERUNDEF  103        /* There is no layer of this index in the technology. */
#define ENOTHER      255        /* Any other (wierd !) error. */

/*********
*
* Voici la liste des valeurs que peut prendre la variable "error" dans toutes
* les fonctions de lecture qui vont suivre.
* Remarque : "error" correspond a "a" dans la macro traitebool et a "c" dans la macro
* setbool (bien qu'elle y prenne, dans la pratique,  toujours la valeur TRUNCERR).
*
***/

#define TRUNCERR  TRUE + 2 /* Comme ca, on est sur que c'est different de  */
#define NOMEMORY  TRUE + 3 /* la valeur qui peut avoir ete definie pour */
#define IOERR     TRUE + 4 /* TRUE              */
#define CODEINCONNU  TRUE + 5
#define ATTRTABLERR  TRUE + 6
#define BGNSTRERR TRUE + 7
#define STYPTABLERR  TRUE + 8
#define MASKERR      TRUE + 9
#define STRTYPERR TRUE + 10
#define BOUNDARYERR  TRUE + 11
#define PATHERR      TRUE + 12
#define SREFERR      TRUE + 13
#define AREFERR      TRUE + 14
#define TEXTERR      TRUE + 15
#define NODERR    TRUE + 16
#define BOXERR    TRUE + 17
#define REFLIBSERR   TRUE + 18
#define FONTSERR  TRUE + 19
#define TEXTNODERR   TRUE + 20
#define STRNAMERR TRUE + 21

/*------------------------------------------------------------\
|                                                             |
|                            Macro                            |
|                                                             |
\------------------------------------------------------------*/

/*------------------------------------------------------------\
|                                                             |
|                            Types                            |
|                                                             |
\------------------------------------------------------------*/

/*********
*
*           STRUCT VAR
*
* Cette structure est utilisee pour contenir certaines variables du programme.
*
***/

struct var {
        short v_error;          /* code d'erreur         */
        char *v_textp;          /* pointeur vers un texte quelconque.   */
                                /* Peut, par exemple, etre utilise pour completer un message d'erreur   */
};

/*------------------------------------------------------------\
|                                                             |
|                          Variables                          |
|                                                             |
\------------------------------------------------------------*/

 extern int pv_warning;
 extern struct var pv_error;

/*------------------------------------------------------------\
|                                                             |
|                          Functions                          |
|                                                             |
\------------------------------------------------------------*/

  extern            int  pv_give_error __P((char *message));
  extern           void  pv_init_error __P(());
  extern           void  pv_set_pv_error __P((int error_number));
  extern           void  pv_emet_warning __P((char *Name, char *texte1, char *texte2));

# endif
