#ifndef __STDTYPES_H
#define __STDTYPES_H

#ifdef XVT
#ifndef XVT_INCL_XVTENV
#include <xvt_env.h>
#endif    
#endif

#ifndef DBG
#ifndef NDEBUG
#define DBG
#endif
#endif

#define pure =0

#define HIDDEN static

#define EOL             -1
#define NOERR   0

// @doc EXTERNAL

// @type UINT8 | Altro nome di assegnazione per gli unsigned char
typedef unsigned char UINT8;

// @type UINT16 | Altro nome di assegnazione per gli unsigned short
typedef unsigned short UINT16;

// @doc EXTERNAL

// @type UINT32 | Altro nome di assegnazione per gli unsigned long
typedef unsigned long UINT32;
// @doc EXTERNAL

// @type INT8 | Altro nome di assegnazione per i char
typedef char INT8;
// @type INT16 | Altro nome di assegnazione per gli short
typedef short INT16;

// @doc EXTERNAL

// @type INT32 | Altro nome di assegnazione per i long
typedef long INT32;
// @doc EXTERNAL

// @type bool | Tipo booleano che puo' assumere i valori TRUE (definito come 1)
//    e FALSE (definito come 0).

#ifdef WIN32

#ifndef __cplusplus
typedef unsigned short bool;
#endif

#else

typedef unsigned char bool;

#endif

#define FALSE 0
#define TRUE  1


// @doc EXTERNAL

// @type word | Tipo per la definizione di tipi di lunghezza pari a due byte
typedef UINT16 word;
// @doc EXTERNAL

// @type dword | Tipo per la definizione di tipi di lunghezza pari a quattro byte
typedef UINT32 dword;
// @doc EXTERNAL

// @type byte | Tipo per la definizione di tipi di lunghezza pari ad un byte
typedef UINT8 byte;
// @doc EXTERNAL

// @type KEY | Tipo per la definizione di variabili destinati a contenere i caratteri
//    immessi da tastiera
typedef UINT16 KEY;

#define UNDEFINED -32767

#undef _SVID

int  get_serial_number();
bool test_assistance_year();

long get_std_level();
void set_std_level(const long l);
void init_global_vars();
void free_global_vars();

/*
#ifdef __cplusplus
extern void* operator new(unsigned);
extern void operator delete(void*);
#endif
*/

#endif // __STDTYPES_H