diff options
Diffstat (limited to 'board/MAI/bios_emulator/scitech/include/scitech.h')
| -rw-r--r-- | board/MAI/bios_emulator/scitech/include/scitech.h | 712 | 
1 files changed, 712 insertions, 0 deletions
| diff --git a/board/MAI/bios_emulator/scitech/include/scitech.h b/board/MAI/bios_emulator/scitech/include/scitech.h new file mode 100644 index 000000000..1dbfface0 --- /dev/null +++ b/board/MAI/bios_emulator/scitech/include/scitech.h @@ -0,0 +1,712 @@ +/**************************************************************************** +* +*                   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 */ |