Home | History | Annotate | Download | only in INCLUDE
      1 /****************************************************************************
      2 *
      3 *                   Copyright (C) 1996 SciTech Software
      4 *                           All rights reserved.
      5 *
      6 * Filename:     $Workfile:   debug.h  $
      7 * Version:      $Revision:   1.17  $
      8 *
      9 * Language:     ANSI C
     10 * Environment:  any
     11 *
     12 * Description:  General header file for operating system portable code.
     13 *
     14 * $Date:   04 Mar 1997 11:34:08  $ $Author:   KendallB  $
     15 *
     16 ****************************************************************************/
     17 
     18 #ifndef __DEBUG_H
     19 #define __DEBUG_H
     20 
     21 /* We have the following defines to identify the compilation environment:
     22  *
     23  *	__16BIT__		Compiling for 16 bit code (any environment)
     24  *  __32BIT__       Compiling for 32 bit code (any environment)
     25  *	__MSDOS__		Compiling for MS-DOS (includes __WINDOWS16__, __WIN386__)
     26  *  __REALDOS__     Compiling for MS-DOS (excludes __WINDOWS16__)
     27  *  __MSDOS16__ 	Compiling for 16 bit MS-DOS
     28  *  __MSDOS32__ 	Compiling for 32 bit MS-DOS
     29  *  __WINDOWS__ 	Compiling for Windows
     30  *	__WINDOWS16__	Compiling for 16 bit Windows (__MSDOS__ also defined)
     31  *	__WINDOWS32__	Compiling for 32 bit Windows
     32  *  __WIN386__      Compiling for Watcom C++ Win386 extended Windows
     33  *  __OS2__     	Compiling for OS/2
     34  *  __OS2_16__  	Compiling for 16 bit OS/2
     35  *  __OS2_32__ 		Compiling for 32 bit OS/2
     36  *  __UNIX__   		Compiling for Unix
     37  *
     38  */
     39 
     40 #ifdef	__SC__
     41 #if		__INTSIZE == 4
     42 #define __SC386__
     43 #endif
     44 #endif
     45 
     46 #ifdef	__GNUC__
     47 #define	__cdecl			/* GCC doesn't know about __cdecl modifiers		*/
     48 #define	__FLAT__		/* GCC is always 32 bit flat model				*/
     49 #define	__HAS_BOOL__	/* Latest GNU C++ has bool type					*/
     50 #endif
     51 
     52 #ifdef	__BORLANDC__
     53 #if	(__BORLANDC__ >= 0x500) || defined(CLASSLIB_DEFS_H)
     54 #define	__HAS_BOOL__	/* Borland C++ 5.0 and later define bool type	*/
     55 #endif
     56 #endif
     57 
     58 /* For the Metaware High C/C++ compiler, there is no _cdecl calling
     59  * convention. The conventions can be changed, but it is a complicated
     60  * process involving #pragmas, and all externally referenced functions
     61  * will use stack based calling conventions. We also need to change the
     62  * global aliasing conventions to use underscores for external function
     63  * and variables names, so that our assembler routines will link
     64  * correctly (except of course the main function - man what a PAIN!).
     65  */
     66 
     67 #ifdef	__HIGHC__
     68 #define	__cdecl
     69 #define	__FLAT__	/* High C is always 32 bit flat model				*/
     70 #pragma Global_aliasing_convention("_%r")
     71 extern main();
     72 #pragma Alias(main,"main")
     73 #endif
     74 
     75 #if     defined(__MSDOS__) || defined(__DOS__) || defined(__DPMI32__) || (defined(M_I86) && !defined(__SC386__))
     76 #ifndef __MSDOS__
     77 #define __MSDOS__
     78 #endif
     79 #if     defined(__386__) || defined(__FLAT__) || defined(__NT__) || defined(__SC386__)
     80 #ifndef	__MSDOS32__
     81 #define __MSDOS32__
     82 #endif
     83 #ifndef	__32BIT__
     84 #define __32BIT__
     85 #endif
     86 #ifndef __REALDOS__
     87 #define __REALDOS__
     88 #endif
     89 #elif   (defined(_Windows) || defined(_WINDOWS)) && !defined(__DPMI16__)
     90 #ifndef	__16BIT__
     91 #define	__16BIT__
     92 #endif
     93 #ifndef __WINDOWS16__
     94 #define	__WINDOWS16__
     95 #endif
     96 #ifndef __WINDOWS__
     97 #define __WINDOWS__
     98 #endif
     99 #ifndef	__MSDOS__
    100 #define	__MSDOS__
    101 #endif
    102 #else
    103 #ifndef	__16BIT__
    104 #define	__16BIT__
    105 #endif
    106 #ifndef __MSDOS16__
    107 #define __MSDOS16__
    108 #endif
    109 #ifndef __REALDOS__
    110 #define __REALDOS__
    111 #endif
    112 #endif
    113 #elif   defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
    114 #ifndef	__32BIT__
    115 #define __32BIT__
    116 #endif
    117 #ifndef	__WINDOWS32__
    118 #define	__WINDOWS32__
    119 #endif
    120 #ifndef	_WIN32
    121 #define	_WIN32					/* Microsoft Win32 SDK headers use _WIN32 */
    122 #endif
    123 #ifndef	WIN32
    124 #define	WIN32					/* OpenGL headers use WIN32 */
    125 #endif
    126 #ifndef __WINDOWS__
    127 #define __WINDOWS__
    128 #endif
    129 #elif   defined(__WINDOWS_386__)
    130 #ifndef	__32BIT__
    131 #define __32BIT__
    132 #endif
    133 #ifndef __WIN386__
    134 #define __WIN386__
    135 #endif
    136 #ifndef __WINDOWS__
    137 #define __WINDOWS__
    138 #endif
    139 #ifndef	__MSDOS__
    140 #define	__MSDOS__
    141 #endif
    142 #elif   defined(__OS2__)
    143 #ifndef __OS2__                 /* TODO: to be completed */
    144 #define __OS2__
    145 #define	__OS2_32__				/* Default to 32 bit OS/2 */
    146 #endif
    147 #else
    148 #define __UNIX__				/* TODO: to be completed */
    149 #endif
    150 
    151 /* We have the following defines to define the calling conventions for
    152  * publicly accesible functions:
    153  *
    154  *  _PUBAPI - Compiler default calling conventions for all public 'C' functions
    155  *  _ASMAPI - Calling conventions for all public assembler functions
    156  *  _DLLAPI - Calling conventions for all DLL exported functions
    157  *  _DLLVAR - Modifier to export/import globals in 32 bit DLL's
    158  *  _EXPORT - Expands to _export when compiling a DLL
    159  *  _VARAPI - Modifiers for variables; Watcom C++ mangles C++ globals
    160  */
    161 
    162 #define _PUBAPI
    163 #define _ASMAPI __cdecl
    164 
    165 #if defined(_MSC_VER) && defined(_WIN32) && !defined(__SC__)
    166 #define __PASCAL    __stdcall
    167 #define __export
    168 #define	__import
    169 #else
    170 #define __PASCAL    __pascal
    171 #endif
    172 
    173 #if defined(__WATCOMC__)
    174 #define	_VARAPI		__cdecl
    175 #else
    176 #define	_VARAPI
    177 #endif
    178 
    179 #if     defined(__WINDOWS__)
    180 #ifdef  BUILD_DLL
    181 #define _DLLASM __export __cdecl
    182 #define _EXPORT __export
    183 #ifdef  __WINDOWS32__
    184 #define _DLLAPI __export __PASCAL
    185 #define _DLLVAR __export
    186 #else
    187 #define _DLLAPI  __export __far __pascal
    188 #define _DLLVAR
    189 #endif
    190 #else
    191 #define _DLLASM __cdecl
    192 #define	_EXPORT
    193 #ifdef  __WINDOWS32__
    194 #define _DLLAPI __PASCAL
    195 #define _DLLVAR __import
    196 #else
    197 #define _DLLAPI __far __pascal
    198 #define _DLLVAR
    199 #endif
    200 #endif
    201 #else
    202 #define _EXPORT
    203 #define _DLLAPI
    204 #define _DLLVAR
    205 #endif
    206 
    207 /* Useful macros */
    208 
    209 #define PRIVATE static
    210 #define PUBLIC
    211 
    212 #ifdef  DEBUG
    213 #       define DBG(x) x
    214 #else
    215 #       define DBG(x)
    216 #endif
    217 
    218 #ifndef NULL
    219 #       define NULL 0L
    220 #endif
    221 
    222 #ifndef MAX
    223 #       define MAX(a,b) ( ((a) > (b)) ? (a) : (b))
    224 #endif
    225 #ifndef MIN
    226 #       define MIN(a,b) ( ((a) < (b)) ? (a) : (b))
    227 #endif
    228 #ifndef ABS
    229 #       define ABS(a)   ((a) >= 0 ? (a) : -(a))
    230 #endif
    231 #ifndef	SIGN
    232 #		define SIGN(a)	((a) > 0 ? 1 : -1)
    233 #endif
    234 
    235 /* General typedefs */
    236 
    237 #ifndef __GENDEFS
    238 #define __GENDEFS
    239 typedef unsigned char   uchar;
    240 typedef unsigned short  ushort;
    241 typedef unsigned int    uint;
    242 typedef unsigned long   ulong;
    243 typedef int             ibool;		/* Integer boolean type			*/
    244 #ifndef	__cplusplus
    245 #define	bool			ibool		/* Standard C					*/
    246 #else
    247 #ifndef	__HAS_BOOL__
    248 #define	bool			ibool		/* Older C++ compilers			*/
    249 #endif
    250 #endif	/* __cplusplus */
    251 #endif  /* __GENDEFS */
    252 
    253 /* Includes Windows headers, as they define TRUE and FALSE */
    254 
    255 #ifdef	__WINDOWS__
    256 #ifndef _WINDOWS_                   /* Dont include if already included */
    257 #ifndef __WIN386__
    258 #define STRICT
    259 #define	WIN32_LEAN_AND_MEAN
    260 #endif
    261 #include <windows.h>
    262 #endif
    263 #endif
    264 
    265 /* Boolean truth values */
    266 
    267 #undef	false
    268 #undef	true
    269 #undef	NO
    270 #undef	YES
    271 #undef	FALSE
    272 #undef	TRUE
    273 
    274 #ifdef	__cplusplus					/* Cast to bool's for C++ code		*/
    275 #define false       ((bool)0)
    276 #define true        ((bool)1)
    277 #define NO          ((bool)0)
    278 #define YES         ((bool)1)
    279 #define FALSE       ((bool)0)
    280 #define TRUE        ((bool)1)
    281 #else								/* Define to 0 and 1 for C code		*/
    282 #define false       0
    283 #define true        1
    284 #define NO          0
    285 #define YES         1
    286 #define FALSE       0
    287 #define TRUE        1
    288 #endif
    289 
    290 #endif  /* __DEBUG_H */
    291