290 lines
7.2 KiB
C
290 lines
7.2 KiB
C
/****************************************************************************
|
|
*
|
|
* Copyright (C) 1996 SciTech Software
|
|
* All rights reserved.
|
|
*
|
|
* Filename: $Workfile: debug.h $
|
|
* Version: $Revision: 1 $
|
|
*
|
|
* Language: ANSI C
|
|
* Environment: any
|
|
*
|
|
* Description: General header file for operating system portable code.
|
|
*
|
|
* $Date: 1/22/98 12:19p $ $Author: Jmonroe $
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __DEBUG_H
|
|
#define __DEBUG_H
|
|
|
|
/* We have the following defines to identify the compilation environment:
|
|
*
|
|
* __16BIT__ Compiling for 16 bit code (any environment)
|
|
* __32BIT__ Compiling for 32 bit code (any environment)
|
|
* __MSDOS__ Compiling for MS-DOS (includes __WINDOWS16__, __WIN386__)
|
|
* __REALDOS__ Compiling for MS-DOS (excludes __WINDOWS16__)
|
|
* __MSDOS16__ Compiling for 16 bit MS-DOS
|
|
* __MSDOS32__ Compiling for 32 bit MS-DOS
|
|
* __WINDOWS__ Compiling for Windows
|
|
* __WINDOWS16__ Compiling for 16 bit Windows (__MSDOS__ also defined)
|
|
* __WINDOWS32__ Compiling for 32 bit Windows
|
|
* __WIN386__ Compiling for Watcom C++ Win386 extended Windows
|
|
* __OS2__ Compiling for OS/2
|
|
* __OS2_16__ Compiling for 16 bit OS/2
|
|
* __OS2_32__ Compiling for 32 bit OS/2
|
|
* __UNIX__ Compiling for Unix
|
|
*
|
|
*/
|
|
|
|
#ifdef __SC__
|
|
#if __INTSIZE == 4
|
|
#define __SC386__
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __GNUC__
|
|
#define __cdecl /* GCC doesn't know about __cdecl modifiers */
|
|
#define __FLAT__ /* GCC is always 32 bit flat model */
|
|
#define __HAS_BOOL__ /* Latest GNU C++ has bool type */
|
|
#endif
|
|
|
|
#ifdef __BORLANDC__
|
|
#if (__BORLANDC__ >= 0x500) || defined(CLASSLIB_DEFS_H)
|
|
#define __HAS_BOOL__ /* Borland C++ 5.0 and later define bool type */
|
|
#endif
|
|
#endif
|
|
|
|
/* For the Metaware High C/C++ compiler, there is no _cdecl calling
|
|
* convention. The conventions can be changed, but it is a complicated
|
|
* process involving #pragmas, and all externally referenced functions
|
|
* will use stack based calling conventions. We also need to change the
|
|
* global aliasing conventions to use underscores for external function
|
|
* and variables names, so that our assembler routines will link
|
|
* correctly (except of course the main function - man what a PAIN!).
|
|
*/
|
|
|
|
#ifdef __HIGHC__
|
|
#define __cdecl
|
|
#define __FLAT__ /* High C is always 32 bit flat model */
|
|
#pragma Global_aliasing_convention("_%r")
|
|
extern main();
|
|
#pragma Alias(main,"main")
|
|
#endif
|
|
|
|
#if defined(__MSDOS__) || defined(__DOS__) || defined(__DPMI32__) || (defined(M_I86) && !defined(__SC386__))
|
|
#ifndef __MSDOS__
|
|
#define __MSDOS__
|
|
#endif
|
|
#if defined(__386__) || defined(__FLAT__) || defined(__NT__) || defined(__SC386__)
|
|
#ifndef __MSDOS32__
|
|
#define __MSDOS32__
|
|
#endif
|
|
#ifndef __32BIT__
|
|
#define __32BIT__
|
|
#endif
|
|
#ifndef __REALDOS__
|
|
#define __REALDOS__
|
|
#endif
|
|
#elif (defined(_Windows) || defined(_WINDOWS)) && !defined(__DPMI16__)
|
|
#ifndef __16BIT__
|
|
#define __16BIT__
|
|
#endif
|
|
#ifndef __WINDOWS16__
|
|
#define __WINDOWS16__
|
|
#endif
|
|
#ifndef __WINDOWS__
|
|
#define __WINDOWS__
|
|
#endif
|
|
#ifndef __MSDOS__
|
|
#define __MSDOS__
|
|
#endif
|
|
#else
|
|
#ifndef __16BIT__
|
|
#define __16BIT__
|
|
#endif
|
|
#ifndef __MSDOS16__
|
|
#define __MSDOS16__
|
|
#endif
|
|
#ifndef __REALDOS__
|
|
#define __REALDOS__
|
|
#endif
|
|
#endif
|
|
#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
|
|
#ifndef __32BIT__
|
|
#define __32BIT__
|
|
#endif
|
|
#ifndef __WINDOWS32__
|
|
#define __WINDOWS32__
|
|
#endif
|
|
#ifndef _WIN32
|
|
#define _WIN32 /* Microsoft Win32 SDK headers use _WIN32 */
|
|
#endif
|
|
#ifndef WIN32
|
|
#define WIN32 /* OpenGL headers use WIN32 */
|
|
#endif
|
|
#ifndef __WINDOWS__
|
|
#define __WINDOWS__
|
|
#endif
|
|
#elif defined(__WINDOWS_386__)
|
|
#ifndef __32BIT__
|
|
#define __32BIT__
|
|
#endif
|
|
#ifndef __WIN386__
|
|
#define __WIN386__
|
|
#endif
|
|
#ifndef __WINDOWS__
|
|
#define __WINDOWS__
|
|
#endif
|
|
#ifndef __MSDOS__
|
|
#define __MSDOS__
|
|
#endif
|
|
#elif defined(__OS2__)
|
|
#ifndef __OS2__ /* TODO: to be completed */
|
|
#define __OS2__
|
|
#define __OS2_32__ /* Default to 32 bit OS/2 */
|
|
#endif
|
|
#else
|
|
#define __UNIX__ /* TODO: to be completed */
|
|
#endif
|
|
|
|
/* We have the following defines to define the calling conventions for
|
|
* publicly accesible functions:
|
|
*
|
|
* _PUBAPI - Compiler default calling conventions for all public 'C' functions
|
|
* _ASMAPI - Calling conventions for all public assembler functions
|
|
* _DLLAPI - Calling conventions for all DLL exported functions
|
|
* _DLLVAR - Modifier to export/import globals in 32 bit DLL's
|
|
* _EXPORT - Expands to _export when compiling a DLL
|
|
* _VARAPI - Modifiers for variables; Watcom C++ mangles C++ globals
|
|
*/
|
|
|
|
#define _PUBAPI
|
|
#define _ASMAPI __cdecl
|
|
|
|
#if defined(_MSC_VER) && defined(_WIN32) && !defined(__SC__)
|
|
#define __PASCAL __stdcall
|
|
#define __export
|
|
#define __import
|
|
#else
|
|
#define __PASCAL __pascal
|
|
#endif
|
|
|
|
#if defined(__WATCOMC__)
|
|
#define _VARAPI __cdecl
|
|
#else
|
|
#define _VARAPI
|
|
#endif
|
|
|
|
#if defined(__WINDOWS__)
|
|
#ifdef BUILD_DLL
|
|
#define _DLLASM __export __cdecl
|
|
#define _EXPORT __export
|
|
#ifdef __WINDOWS32__
|
|
#define _DLLAPI __export __PASCAL
|
|
#define _DLLVAR __export
|
|
#else
|
|
#define _DLLAPI __export __far __pascal
|
|
#define _DLLVAR
|
|
#endif
|
|
#else
|
|
#define _DLLASM __cdecl
|
|
#define _EXPORT
|
|
#ifdef __WINDOWS32__
|
|
#define _DLLAPI __PASCAL
|
|
#define _DLLVAR __import
|
|
#else
|
|
#define _DLLAPI __far __pascal
|
|
#define _DLLVAR
|
|
#endif
|
|
#endif
|
|
#else
|
|
#define _EXPORT
|
|
#define _DLLAPI
|
|
#define _DLLVAR
|
|
#endif
|
|
|
|
/* Useful macros */
|
|
|
|
#define PRIVATE static
|
|
#define PUBLIC
|
|
|
|
#ifdef DEBUG
|
|
# define DBG(x) x
|
|
#else
|
|
# define DBG(x)
|
|
#endif
|
|
|
|
#ifndef NULL
|
|
# define NULL 0L
|
|
#endif
|
|
|
|
#ifndef MAX
|
|
# define MAX(a,b) ( ((a) > (b)) ? (a) : (b))
|
|
#endif
|
|
#ifndef MIN
|
|
# define MIN(a,b) ( ((a) < (b)) ? (a) : (b))
|
|
#endif
|
|
#ifndef ABS
|
|
# define ABS(a) ((a) >= 0 ? (a) : -(a))
|
|
#endif
|
|
#ifndef SIGN
|
|
# define SIGN(a) ((a) > 0 ? 1 : -1)
|
|
#endif
|
|
|
|
/* General typedefs */
|
|
|
|
#ifndef __GENDEFS
|
|
#define __GENDEFS
|
|
typedef unsigned char uchar;
|
|
typedef unsigned short ushort;
|
|
typedef unsigned int uint;
|
|
typedef unsigned long ulong;
|
|
typedef int ibool; /* Integer boolean type */
|
|
#ifndef __cplusplus
|
|
#define bool ibool /* Standard C */
|
|
#else
|
|
#ifndef __HAS_BOOL__
|
|
#define bool ibool /* Older C++ compilers */
|
|
#endif
|
|
#endif /* __cplusplus */
|
|
#endif /* __GENDEFS */
|
|
|
|
/* Includes Windows headers, as they define TRUE and FALSE */
|
|
|
|
#ifdef __WINDOWS__
|
|
#ifndef _WINDOWS_ /* Dont include if already included */
|
|
#ifndef __WIN386__
|
|
#define STRICT
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
#include <windows.h>
|
|
#endif
|
|
#endif
|
|
|
|
/* Boolean truth values */
|
|
|
|
#undef false
|
|
#undef true
|
|
#undef NO
|
|
#undef YES
|
|
#undef FALSE
|
|
#undef TRUE
|
|
|
|
#ifdef __cplusplus /* Cast to bool's for C++ code */
|
|
#define false ((bool)0)
|
|
#define true ((bool)1)
|
|
#define NO ((bool)0)
|
|
#define YES ((bool)1)
|
|
#define FALSE ((bool)0)
|
|
#define TRUE ((bool)1)
|
|
#else /* Define to 0 and 1 for C code */
|
|
#define false 0
|
|
#define true 1
|
|
#define NO 0
|
|
#define YES 1
|
|
#define FALSE 0
|
|
#define TRUE 1
|
|
#endif
|
|
|
|
#endif /* __DEBUG_H */
|