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")
71extern 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
239typedef unsigned char   uchar;
240typedef unsigned short  ushort;
241typedef unsigned int    uint;
242typedef unsigned long   ulong;
243typedef 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