📄 scitech.h
字号:
#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;#endiftypedef unsigned int uint;#endiftypedef unsigned char uchar;#endiftypedef 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_2typedef char s8;typedef unsigned char u8;typedef short s16;typedef unsigned short u16;#ifdef __16BIT__typedef long s32;typedef unsigned long u32;#elsetypedef int s32;typedef unsigned int u32;#endiftypedef 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;#elsetypedef __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")#elsevoid _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 __cplusplusextern "C" { /* Use "C" linkage when in C++ mode */#endifextern 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 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -