| /**************************************************************************** |
| * |
| * 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 */ |