0,0 → 1,290 |
/**************************************************************************** |
* |
* Copyright (C) 1996 SciTech Software |
* All rights reserved. |
* |
* Filename: $Workfile: debug.h $ |
* Version: $Revision: 1.17 $ |
* |
* Language: ANSI C |
* Environment: any |
* |
* Description: General header file for operating system portable code. |
* |
* $Date: 04 Mar 1997 11:34:08 $ $Author: KendallB $ |
* |
****************************************************************************/ |
|
#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 */ |