#if !defined (_TYPESIZE_H)
#define _TYPESIZE_H
//
// typesize.h written by tom schlangen
// ---------- modified by TJW
//
// this is an attempt to somewhat reduce problems by unifying
// compiler dependend type sizes.
//
// the basic set/list of unified types required to be present
// for each compiler is:
//
// --------+-----------------+-------+-----------------------
// name | description | bytes | range
// --------+-----------------+-------+-----------------------
// CHAR | signed char | 1 | -128..127
// UCHAR | unsigned char | 1 | 0..255
// INT16 | signed word | 2 | -32768..32767
// UINT16 | unsigned word | 2 | 0..65535
// INT32 | signed dword | 4 | -2147483648..2147483647
// UINT32 | unsigned dword | 4 | 0..4294967295
// --------+-----------------+-------+-----------------------
//
// besides that, there are some further general purpose types
// with guaranteed (either by ANSI C or by us) sizes/ranges.
// these should be used with care, since beneath their
// guaranteed size they are strictly compiler specific. so if
// you use them, make sure you do so only within the
// guaranteed range. also take care not to use them in byte-
// aligned (`packed') structures, since the size of the re-
// resulting structures may vary from compiler to compiler,
// which may cause hazzard on in certain cases.
//
// --------+-------------------------------------------------
// name | description
// --------+-------------------------------------------------
// INT | general purpose compiler specific `signed int'.
// | ANSI C guarantees at least 2 bytes,
// | range -32768..32767 for this type.
// UINT | general purpose compiler specific `unsigned int',
// | we guarantee at least 2 bytes,
// | range 0..65535 for this type.
// LONG | general purpose compiler specific `signed long'.
// | ANSI C * guarantees at least 4 bytes,
// | range -2147483648..2147483647 for this type.
// ULONG | general purpose compiler specific `unsigned long'.
// | we guarantee at least 4 bytes,
// | range 0..4294967295 for this type.
// --------+-------------------------------------------------
//
// the following definition blocks are in alphabetical order
// of the various compilers identification defines. please add
// the definitions for your compiler, if not already present.
//
#ifdef __OS2__
#define INCL_DOSPROCESS
#define INCL_DOSERRORS
#include <os2.h>
#endif
#if defined ( __NT__ )
#define WIN32_LEAN_AND_MEAN
#define NOMSG
#define NOGDI
#if !defined(__EMX__) && !defined(__MINGW32__)
#include <windows.h>
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
// the EMX/GNU 32bit compilers
#if defined(__EMX__)
#if !defined(__OS2_H__) && !defined(_OS2_H) && !defined(_WINNT_H) // os2.h defines it already
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
#endif
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
// --------------------------------------------------------------------------
#if !defined(__OS2_H__) && !defined(_OS2_H) && !defined(_WINNT_H) // os2.h defines it already
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif
#endif // #if defined(__EMX__)
#if (defined(__linux__) && !defined(__alpha)) || defined(__FreeBSD__) || defined(__DJGPP__) || defined(__MINGW32__) || defined(__BEOS__) || defined(__OpenBSD__) || defined(__CYGWIN__)
#if !defined(_WINNT_H)
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
// --------------------------------------------------------------------------
#endif
/* Alpha AXP running Digital Unix (and possibly also Linux/Alpha?)
This is a 64 bit architecture */
#if defined(__alpha)
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
// --------------------------------------------------------------------------
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 8 byte
typedef unsigned long ULONG; // 8 byte
typedef void VOID;
#endif
/* AIX using xlc or gcc. Unfortunately, the _AIX constant is also defined
on 64 bit RS/6000 machines. As I do not have such a thing available,
I do not know how to discern it from a 32 bit one, so the following will
probably not work there. */
#if defined(_AIX)
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
// --------------------------------------------------------------------------
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif
#if defined(__sun__)
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
// --------------------------------------------------------------------------
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif
#if defined(__hpux)
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
// --------------------------------------------------------------------------
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif
// the Borland compiler family - valid for DOS, OS/2 and Win32 versions
#if defined(__BORLANDC__)
#ifndef __OS2_H__
typedef signed char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
#endif
typedef signed short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef signed long INT32; // 4 byte
typedef unsigned long UINT32; // 4 byte
// --------------------------------------------------------------------------
#ifndef __OS2_H__
typedef signed int INT; // 2/4 byte
typedef unsigned int UINT; // 2/4 byte
typedef signed long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
#if !defined(NT) && !defined(__NT__) && !defined(WINNT)
typedef void VOID;
#endif
#endif
#endif // #if defined(__BORLANDC__)
// the IBM 32bit CSet/VAC++ compilers
#if defined(__IBMC__) || defined(__IBMCPP__)
#ifndef __OS2_H__ // os2.h defines it already
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
#endif
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
// --------------------------------------------------------------------------
#ifndef __OS2_H__ // os2.h defines it already
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif
#endif // #if defined(__IBMC(PP)__)
// the uSoft 16bit compiler family for DOS
#if defined(_MSC_VER) && (_MSC_VER < 1200)
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
typedef int INT16; // 2 byte
typedef unsigned int UINT16; // 2 byte
typedef long INT32; // 4 byte
typedef unsigned long UINT32; // 4 byte
// --------------------------------------------------------------------------
typedef int INT; // 2 byte
typedef unsigned int UINT; // 2 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif // #if defined(_MSC_VER)
// the Watcom 16/32bit compilers
#if defined(__WATCOMC__)
#if !defined(__OS2_H__) && !defined(__NT__) // os2.h and windows.h defines it already
typedef signed char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
#endif
typedef signed short int INT16; // 2 byte
typedef unsigned short int UINT16; // 2 byte
typedef signed long int INT32; // 4 byte
typedef unsigned long int UINT32; // 4 byte
// --------------------------------------------------------------------------
#if !defined(__OS2_H__) && !defined(__NT__) // os2.h and windows.h defines it already
typedef signed int INT; // 2/4 byte
typedef unsigned int UINT; // 2/4 byte
typedef signed long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif
#endif // #if defined(__WATCOMC__)
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
// --------------------------------------------------------------------------
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
//typedef void VOID;
#endif
// MacOS X with gcc
#if defined(__APPLE__) && defined(__MACH__)
typedef char CHAR; // 1 byte
typedef unsigned char UCHAR; // 1 byte
typedef short INT16; // 2 byte
typedef unsigned short UINT16; // 2 byte
typedef int INT32; // 4 byte
typedef unsigned int UINT32; // 4 byte
// --------------------------------------------------------------------------
typedef int INT; // 4 byte
typedef unsigned int UINT; // 4 byte
typedef long LONG; // 4 byte
typedef unsigned long ULONG; // 4 byte
typedef void VOID;
#endif
#ifdef __cplusplus
}
#endif
#endif // #if !defined(_TYPESIZE_H)
syntax highlighted by Code2HTML, v. 0.9.1