scitech.h

来自「适合KS8695X」· C头文件 代码 · 共 713 行 · 第 1/2 页

H
713
字号
#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 */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?