123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712 |
- /****************************************************************************
- *
- * SciTech Multi-platform Graphics Library
- *
- * ========================================================================
- *
- * The contents of this file are subject to the SciTech MGL Public
- * License Version 1.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.scitechsoft.com/mgl-license.txt
- *
- * Software distributed under the License is distributed on an
- * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
- *
- * The Initial Developer of the Original Code is SciTech Software, Inc.
- * All Rights Reserved.
- *
- * ========================================================================
- *
- * Language: ANSI C
- * Environment: any
- *
- * Description: General header file for operating system portable code.
- *
- ****************************************************************************/
- #ifndef __SCITECH_H
- #define __SCITECH_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
- * __WIN32_VXD__ Compiling for a 32-bit C based VxD
- * __NT_DRIVER__ Compiling for a 32-bit C based NT device driver
- * __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
- * __QNX__ Compiling for the QNX realtime OS (Unix compatible)
- * __LINUX__ Compiling for the Linux OS (Unix compatible)
- * __FREEBSD__ Compiling for the FreeBSD OS (Unix compatible)
- * __BEOS__ Compiling for the BeOS (Unix compatible)
- * __SMX32__ Compiling for the SMX 32-bit Real Time OS
- * __ENEA_OSE__ Compiling for the OSE embedded OS
- * __RTTARGET__ Compiling for the RTTarget 32-bit embedded OS
- * __MACOS__ Compiling for the MacOS platform (PowerPC)
- * __DRIVER__ Compiling for a 32-bit binary compatible driver
- * __CONSOLE__ Compiling for a fullscreen OS console mode
- * __SNAP__ Compiling as a Snap executeable or dynamic library
- *
- * __INTEL__ Compiling for Intel CPU's
- * __ALPHA__ Compiling for DEC Alpha CPU's
- * __MIPS__ Compiling for MIPS CPU's
- * __PPC__ Compiling for PowerPC CPU's
- * __MC68K__ Compiling for Motorola 680x0
- *
- * __BIG_ENDIAN__ Compiling for a big endian processor
- *
- */
- #ifdef __SC__
- #if __INTSIZE == 4
- #define __SC386__
- #endif
- #endif
- /* Determine some things that are compiler specific */
- #ifdef __GNUC__
- #ifdef __cplusplus
- /* G++ currently fucks this up! */
- #define __cdecl
- #define __stdcall
- #else
- #undef __cdecl
- #undef __stdcall
- #define __cdecl __attribute__ ((cdecl))
- #define __stdcall __attribute__ ((stdcall))
- #endif
- #define __FLAT__ /* GCC is always 32 bit flat model */
- #define __HAS_BOOL__ /* Latest GNU C++ has ibool type */
- #define __HAS_LONG_LONG__ /* GNU C supports long long type */
- #include <stdio.h> /* Bring in for definition of NULL */
- #endif
- #ifdef __BORLANDC__
- #if (__BORLANDC__ >= 0x500) || defined(CLASSLIB_DEFS_H)
- #define __HAS_BOOL__ /* Borland C++ 5.0 defines ibool type */
- #endif
- #if (__BORLANDC__ >= 0x502) && !defined(VTOOLSD) && !defined(__SMX32__)
- #define __HAS_INT64__ /* Borland C++ 5.02 supports __int64 type */
- #endif
- #endif
- #if defined(_MSC_VER) && !defined(__SC__) && !defined(VTOOLSD) && !defined(__SMX32__)
- #define __HAS_INT64__ /* Visual C++ supports __int64 type */
- #endif
- #if defined(__WATCOMC__) && (__WATCOMC__ >= 1100) && !defined(VTOOLSD) && !defined(__SMX32__)
- #define __HAS_INT64__ /* Watcom C++ 11.0 supports __int64 type */
- #endif
- /*---------------------------------------------------------------------------
- * Determine the compile time environment. This must be done for each
- * supported platform so that we can determine at compile time the target
- * environment, hopefully without requiring #define's from the user.
- *-------------------------------------------------------------------------*/
- /* 32-bit binary compatible driver. Compiled as Win32, but as OS neutral */
- #ifdef __DRIVER__
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #undef __WINDOWS__
- #undef _WIN32
- #undef __WIN32__
- #undef __NT__
- /* 32-bit Snap exe or dll. Compiled as Win32, but as OS neutral */
- #elif defined(__SNAP__)
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #undef __WINDOWS__
- #undef _WIN32
- #undef __WIN32__
- #undef __NT__
- /* 32-bit Windows VxD compile environment */
- #elif defined(__vtoolsd_h_) || defined(VTOOLSD)
- #include <vtoolsc.h>
- #define __WIN32_VXD__
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #define _MAX_PATH 256
- #undef __WINDOWS32__
- /* 32-bit Windows NT driver compile environment: TODO!! */
- #elif defined(__NT_DRIVER__)
- #include "ntdriver.h"
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #define _MAX_PATH 256
- #undef __WINDOWS32__
- /* 32-bit SMX compile environment */
- #elif defined(__SMX32__)
- #ifndef __MSDOS__
- #define __MSDOS__
- #endif
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- /* 32-bit Enea OSE environment */
- #elif defined(__ENEA_OSE__)
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- /* 32-bit RTTarget-32 environment */
- #elif defined(__RTTARGET__)
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- /* 32-bit extended DOS compile environment */
- #elif defined(__MSDOS__) || defined(__MSDOS32__) || defined(__DOS__) || defined(__DPMI32__) || (defined(M_I86) && (!defined(__SC386__) && !defined(M_I386))) || defined(TNT)
- #ifndef __MSDOS__
- #define __MSDOS__
- #endif
- #if defined(__MSDOS32__) || defined(__386__) || defined(__FLAT__) || defined(__NT__) || defined(__SC386__)
- #ifndef __MSDOS32__
- #define __MSDOS32__
- #endif
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __REALDOS__
- #define __REALDOS__
- #endif
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- /* 16-bit Windows compile environment */
- #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
- /* 16-bit DOS compile environment */
- #else
- #ifndef __16BIT__
- #define __16BIT__
- #endif
- #ifndef __MSDOS16__
- #define __MSDOS16__
- #endif
- #ifndef __REALDOS__
- #define __REALDOS__
- #endif
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- #endif
- /* 32-bit Windows compile environment */
- #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
- /* 32-bit OS/2 VDD compile environment */
- /* We're assuming (for now) that CL386 must be used */
- #elif defined(MSDOS) && defined(M_I386)
- /* fixes necessary to compile with CL386 */
- #define __cdecl _cdecl
- typedef unsigned int size_t;
- #include <mvdm.h>
- /* This should probably be somewhere else... */
- /* Inline eligible functions (we have no CRT libs for CL386) */
- #pragma intrinsic (strcpy, strcmp, strlen, strcat)
- #pragma intrinsic (memcmp, memcpy, memset)
- #define __OS2_VDD__
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #define CCHMAXPATH 256
- #define _MAX_PATH 256
- #ifndef __OS2__
- #define __OS2__
- #endif
- #ifndef __OS2_32__
- #define __OS2_32__
- #endif
- /* 16-bit OS/2 compile environment */
- #elif defined(__OS2_16__)
- #ifndef __OS2__
- #define __OS2__
- #endif
- #ifndef __16BIT__
- #define __16BIT__
- #endif
- #ifndef __OS2_PM__
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- #endif
- /* 32-bit OS/2 compile environment */
- #elif defined(__OS2__) || defined(__OS2_32__)
- #ifndef __OS2__
- #define __OS2__
- #endif
- #ifndef __OS2_32__
- #define __OS2_32__
- #endif
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __OS2_PM__
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- #endif
- /* 32-bit QNX compile environment */
- #elif defined(__QNX__)
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __UNIX__
- #define __UNIX__
- #endif
- #ifdef __GNUC__
- #define stricmp strcasecmp
- #endif
- #if !defined(__PHOTON__) && !defined(__X11__)
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- #endif
- /* 32-bit Linux compile environment */
- #elif defined(__LINUX__) || defined(linux)
- #ifndef __LINUX__
- #define __LINUX__
- #endif
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __UNIX__
- #define __UNIX__
- #endif
- #ifdef __GNUC__
- #define stricmp strcasecmp
- #endif
- #ifndef __X11__
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- #endif
- /* 32-bit FreeBSD compile environment */
- #elif defined(__FREEBSD__)
- #ifndef __FREEBSD__
- #define __FREEBSD__
- #endif
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __UNIX__
- #define __UNIX__
- #endif
- #ifdef __GNUC__
- #define stricmp strcasecmp
- #endif
- #ifndef __X11__
- #ifndef __CONSOLE__
- #define __CONSOLE__
- #endif
- #endif
- /* 32-bit BeOS compile environment */
- #elif defined(__BEOS__)
- #ifndef __32BIT__
- #define __32BIT__
- #endif
- #ifndef __UNIX__
- #define __UNIX__
- #endif
- #ifdef __GNUC__
- #define stricmp strcasecmp
- #endif
- /* Unsupported OS! */
- #else
- #error This platform is not currently supported!
- #endif
- /* Determine the CPU type that we are compiling for */
- #if defined(__M_ALPHA) || defined(__ALPHA_) || defined(__ALPHA) || defined(__alpha)
- #ifndef __ALPHA__
- #define __ALPHA__
- #endif
- #elif defined(__M_PPC) || defined(__POWERC)
- #ifndef __PPC__
- #define __PPC__
- #endif
- #elif defined(__M_MRX000)
- #ifndef __MIPS__
- #define __MIPS__
- #endif
- #else
- #ifndef __INTEL__
- #define __INTEL__ /* Assume Intel if nothing found */
- #endif
- #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
- * _VARAPI - Modifiers for variables; Watcom C++ mangles C++ globals
- * _STDCALL - Win32 __stdcall where possible, __cdecl if not supported
- */
- #if defined(_MSC_VER) && defined(_WIN32) && !defined(__SC__)
- #define __PASCAL __stdcall
- #else
- #define __PASCAL __pascal
- #endif
- #if defined(NO_STDCALL)
- #define _STDCALL __cdecl
- #else
- #define _STDCALL __stdcall
- #endif
- #ifdef __WATCOMC__
- #if (__WATCOMC__ >= 1050)
- #define _VARAPI __cdecl
- #else
- #define _VARAPI
- #endif
- #else
- #define _VARAPI
- #endif
- #if defined(__IBMC__) || defined(__IBMCPP__)
- #define PTR_DECL_IN_FRONT
- #endif
- /* Define the calling conventions for all public functions. For simplicity
- * we define all public functions as __cdecl calling conventions, so that
- * they are the same across all compilers and runtime DLL's.
- */
- #define _PUBAPI __cdecl
- #define _ASMAPI __cdecl
- /* Determine the syntax for declaring a function pointer with a
- * calling conventions override. Most compilers require the calling
- * convention to be declared in front of the '*', but others require
- * it to be declared after the '*'. We handle both in here depending
- * on what the compiler requires.
- */
- #ifdef PTR_DECL_IN_FRONT
- #define _PUBAPIP * _PUBAPI
- #define _ASMAPIP * _ASMAPI
- #else
- #define _PUBAPIP _PUBAPI *
- #define _ASMAPIP _ASMAPI *
- #endif
- /* Useful macros */
- #define PRIVATE static
- #define PUBLIC
- /* This HAS to be 0L for 16-bit real mode code to work!!! */
- #ifndef NULL
- # define _NULL 0L
- # define NULL _NULL
- #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
- #if defined(__BEOS__)
- #include <SupportDefs.h>
- #else
- #ifdef __LINUX__
- #include <sys/types.h>
- #ifdef __STRICT_ANSI__
- typedef unsigned short ushort;
- typedef unsigned long ulong;
- typedef unsigned int uint;
- #endif
- #ifdef __KERNEL__
- #define __GENDEFS_2
- #endif
- #else
- #if !(defined(__QNXNTO__) && defined(GENERAL_STRUCT))
- typedef unsigned short ushort;
- typedef unsigned long ulong;
- #endif
- typedef unsigned int uint;
- #endif
- typedef unsigned char uchar;
- #endif
- typedef int ibool; /* Integer boolean type */
- #ifdef USE_BOOL /* Only for older code */
- #ifndef __cplusplus
- #define bool ibool /* Standard C */
- #else
- #ifndef __HAS_BOOL__
- #define bool ibool /* Older C++ compilers */
- #endif
- #endif /* __cplusplus */
- #endif /* USE_BOOL */
- #endif /* __GENDEFS */
- /* More general typedefs compatible with Linux kernel code */
- #ifndef __GENDEFS_2
- #define __GENDEFS_2
- typedef char s8;
- typedef unsigned char u8;
- typedef short s16;
- typedef unsigned short u16;
- #ifdef __16BIT__
- typedef long s32;
- typedef unsigned long u32;
- #else
- typedef int s32;
- typedef unsigned int u32;
- #endif
- typedef struct {
- u32 low;
- s32 high;
- } __i64;
- #ifdef __HAS_LONG_LONG__
- #define __NATIVE_INT64__
- typedef long long s64;
- typedef unsigned long long u64;
- #elif defined(__HAS_INT64__) && !defined(__16BIT__)
- #define __NATIVE_INT64__
- typedef __int64 s64;
- typedef unsigned __int64 u64;
- #else
- typedef __i64 s64;
- typedef __i64 u64;
- #endif
- #endif
- /* Boolean truth values */
- #undef false
- #undef true
- #undef NO
- #undef YES
- #undef FALSE
- #undef TRUE
- #define false 0
- #define true 1
- #define NO 0
- #define YES 1
- #define FALSE 0
- #define TRUE 1
- /* Inline debugger interrupts for Watcom C++ and Borland C++ */
- #ifdef __WATCOMC__
- void DebugInt(void);
- #pragma aux DebugInt = \
- "int 3";
- void DebugVxD(void);
- #pragma aux DebugVxD = \
- "int 1";
- #elif defined(__BORLANDC__)
- #define DebugInt() __emit__(0xCC)
- #define DebugVxD() {__emit__(0xCD); __emit__(0x01);}
- #elif defined(_MSC_VER)
- #define DebugInt() _asm int 0x3
- #define DebugVxD() _asm int 0x1
- #elif defined(__GNUC__)
- #define DebugInt() asm volatile ("int $0x3")
- #define DebugVxD() asm volatile ("int $0x1")
- #else
- void _ASMAPI DebugInt(void);
- void _ASMAPI DebugVxD(void);
- #endif
- /* Macros to break once and never break again */
- #define DebugIntOnce() \
- { \
- static ibool firstTime = true; \
- if (firstTime) { \
- firstTime = false; \
- DebugInt(); \
- } \
- }
- #define DebugVxDOnce() \
- { \
- static ibool firstTime = true; \
- if (firstTime) { \
- firstTime = false; \
- DebugVxD(); \
- } \
- }
- /* Macros for linux string compatibility functions */
- #ifdef __LINUX__
- #define stricmp strcasecmp
- #define strnicmp strncasecmp
- #endif
- /* Macros for NT driver string compatibility functions */
- #ifdef __NT_DRIVER__
- #define stricmp _stricmp
- #define strnicmp _strnicmp
- #endif
- /* Get rid of some helaciously annoying Visual C++ warnings! */
- #if defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__SC__)
- #pragma warning(disable:4761) /* integral size mismatch in argument; conversion supplied */
- #pragma warning(disable:4244) /* conversion from 'unsigned short ' to 'unsigned char ', possible loss of data */
- #pragma warning(disable:4018) /* '<' : signed/unsigned mismatch */
- #pragma warning(disable:4305) /* 'initializing' : truncation from 'const double' to 'float' */
- #endif
- /*---------------------------------------------------------------------------
- * Set of debugging macros used by the libraries. If the debug flag is
- * set, they are turned on depending on the setting of the flag. User code
- * can override the default functions called when a check fails, and the
- * MGL does this so it can restore the system from graphics mode to display
- * an error message. These functions also log information to the
- * scitech.log file in the root directory of the hard drive when problems
- * show up.
- *
- * If you set the value of CHECKED to be 2, it will also enable code to
- * insert hard coded debugger interrupt into the source code at the line of
- * code where the check fail. This is useful if you run the code under a
- * debugger as it will break inside the debugger before exiting with a
- * failure condition.
- *
- * Also for code compiled to run under Windows, we also call the
- * OutputDebugString function to send the message to the system debugger
- * such as Soft-ICE or WDEB386. Hence if you get any non-fatal warnings you
- * will see those on the debugger terminal as well as in the log file.
- *-------------------------------------------------------------------------*/
- #ifdef __cplusplus
- extern "C" { /* Use "C" linkage when in C++ mode */
- #endif
- extern void (*_CHK_fail)(int fatal,const char *msg,const char *cond,const char *file,int line);
- void _CHK_defaultFail(int fatal,const char *msg,const char *cond,const char *file,int line);
- #ifdef CHECKED
- # define CHK(x) x
- #if CHECKED > 1
- # define CHECK(p) \
- ((p) ? (void)0 : DebugInt(), \
- _CHK_fail(1,"Check failed: '%s', file %s, line %d\n", \
- #p, __FILE__, __LINE__))
- # define WARN(p) \
- ((p) ? (void)0 : DebugInt(), \
- _CHK_fail(0,"Warning: '%s', file %s, line %d\n", \
- #p, __FILE__, __LINE__))
- #else
- # define CHECK(p) \
- ((p) ? (void)0 : \
- _CHK_fail(1,"Check failed: '%s', file %s, line %d\n", \
- #p, __FILE__, __LINE__))
- # define WARN(p) \
- ((p) ? (void)0 : \
- _CHK_fail(0,"Warning: '%s', file %s, line %d\n", \
- #p, __FILE__, __LINE__))
- #endif
- # define LOGFATAL(msg) \
- _CHK_fail(1,"Fatal error: '%s', file %s, line %d\n", \
- msg, __FILE__, __LINE__)
- # define LOGWARN(msg) \
- _CHK_fail(0,"Warning: '%s', file %s, line %d\n", \
- msg, __FILE__, __LINE__)
- #else
- # define CHK(x)
- # define CHECK(p) ((void)0)
- # define WARN(p) ((void)0)
- # define LOGFATAL(msg) ((void)0)
- # define LOGWARN(msg) ((void)0)
- #endif
- #ifdef __cplusplus
- } /* End of "C" linkage for C++ */
- #endif
- #endif /* __SCITECH_H */
|