Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /****************************************************************************
  2. *
  3. *                   Copyright (C) 1996 SciTech Software
  4. *                           All rights reserved.
  5. *
  6. * Filename:     $Workfile:   debug.h  $
  7. * Version:      $Revision:   1.17  $
  8. *
  9. * Language:     ANSI C
  10. * Environment:  any
  11. *
  12. * Description:  General header file for operating system portable code.
  13. *
  14. * $Date:   04 Mar 1997 11:34:08  $ $Author:   KendallB  $
  15. *
  16. ****************************************************************************/
  17.  
  18. #ifndef __DEBUG_H
  19. #define __DEBUG_H
  20.  
  21. /* We have the following defines to identify the compilation environment:
  22.  *
  23.  *      __16BIT__               Compiling for 16 bit code (any environment)
  24.  *  __32BIT__       Compiling for 32 bit code (any environment)
  25.  *      __MSDOS__               Compiling for MS-DOS (includes __WINDOWS16__, __WIN386__)
  26.  *  __REALDOS__     Compiling for MS-DOS (excludes __WINDOWS16__)
  27.  *  __MSDOS16__         Compiling for 16 bit MS-DOS
  28.  *  __MSDOS32__         Compiling for 32 bit MS-DOS
  29.  *  __WINDOWS__         Compiling for Windows
  30.  *      __WINDOWS16__   Compiling for 16 bit Windows (__MSDOS__ also defined)
  31.  *      __WINDOWS32__   Compiling for 32 bit Windows
  32.  *  __WIN386__      Compiling for Watcom C++ Win386 extended Windows
  33.  *  __OS2__             Compiling for OS/2
  34.  *  __OS2_16__          Compiling for 16 bit OS/2
  35.  *  __OS2_32__          Compiling for 32 bit OS/2
  36.  *  __UNIX__            Compiling for Unix
  37.  *
  38.  */
  39.  
  40. #ifdef  __SC__
  41. #if             __INTSIZE == 4
  42. #define __SC386__
  43. #endif
  44. #endif
  45.  
  46. #ifdef  __GNUC__
  47. #define __cdecl                 /* GCC doesn't know about __cdecl modifiers             */
  48. #define __FLAT__                /* GCC is always 32 bit flat model                              */
  49. #define __HAS_BOOL__    /* Latest GNU C++ has bool type                                 */
  50. #endif
  51.  
  52. #ifdef  __BORLANDC__
  53. #if     (__BORLANDC__ >= 0x500) || defined(CLASSLIB_DEFS_H)
  54. #define __HAS_BOOL__    /* Borland C++ 5.0 and later define bool type   */
  55. #endif
  56. #endif
  57.  
  58. /* For the Metaware High C/C++ compiler, there is no _cdecl calling
  59.  * convention. The conventions can be changed, but it is a complicated
  60.  * process involving #pragmas, and all externally referenced functions
  61.  * will use stack based calling conventions. We also need to change the
  62.  * global aliasing conventions to use underscores for external function
  63.  * and variables names, so that our assembler routines will link
  64.  * correctly (except of course the main function - man what a PAIN!).
  65.  */
  66.  
  67. #ifdef  __HIGHC__
  68. #define __cdecl
  69. #define __FLAT__        /* High C is always 32 bit flat model                           */
  70. #pragma Global_aliasing_convention("_%r")
  71. extern main();
  72. #pragma Alias(main,"main")
  73. #endif
  74.  
  75. #if     defined(__MSDOS__) || defined(__DOS__) || defined(__DPMI32__) || (defined(M_I86) && !defined(__SC386__))
  76. #ifndef __MSDOS__
  77. #define __MSDOS__
  78. #endif
  79. #if     defined(__386__) || defined(__FLAT__) || defined(__NT__) || defined(__SC386__)
  80. #ifndef __MSDOS32__
  81. #define __MSDOS32__
  82. #endif
  83. #ifndef __32BIT__
  84. #define __32BIT__
  85. #endif
  86. #ifndef __REALDOS__
  87. #define __REALDOS__
  88. #endif
  89. #elif   (defined(_Windows) || defined(_WINDOWS)) && !defined(__DPMI16__)
  90. #ifndef __16BIT__
  91. #define __16BIT__
  92. #endif
  93. #ifndef __WINDOWS16__
  94. #define __WINDOWS16__
  95. #endif
  96. #ifndef __WINDOWS__
  97. #define __WINDOWS__
  98. #endif
  99. #ifndef __MSDOS__
  100. #define __MSDOS__
  101. #endif
  102. #else
  103. #ifndef __16BIT__
  104. #define __16BIT__
  105. #endif
  106. #ifndef __MSDOS16__
  107. #define __MSDOS16__
  108. #endif
  109. #ifndef __REALDOS__
  110. #define __REALDOS__
  111. #endif
  112. #endif
  113. #elif   defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
  114. #ifndef __32BIT__
  115. #define __32BIT__
  116. #endif
  117. #ifndef __WINDOWS32__
  118. #define __WINDOWS32__
  119. #endif
  120. #ifndef _WIN32
  121. #define _WIN32                                  /* Microsoft Win32 SDK headers use _WIN32 */
  122. #endif
  123. #ifndef WIN32
  124. #define WIN32                                   /* OpenGL headers use WIN32 */
  125. #endif
  126. #ifndef __WINDOWS__
  127. #define __WINDOWS__
  128. #endif
  129. #elif   defined(__WINDOWS_386__)
  130. #ifndef __32BIT__
  131. #define __32BIT__
  132. #endif
  133. #ifndef __WIN386__
  134. #define __WIN386__
  135. #endif
  136. #ifndef __WINDOWS__
  137. #define __WINDOWS__
  138. #endif
  139. #ifndef __MSDOS__
  140. #define __MSDOS__
  141. #endif
  142. #elif   defined(__OS2__)
  143. #ifndef __OS2__                 /* TODO: to be completed */
  144. #define __OS2__
  145. #define __OS2_32__                              /* Default to 32 bit OS/2 */
  146. #endif
  147. #else
  148. #define __UNIX__                                /* TODO: to be completed */
  149. #endif
  150.  
  151. /* We have the following defines to define the calling conventions for
  152.  * publicly accesible functions:
  153.  *
  154.  *  _PUBAPI - Compiler default calling conventions for all public 'C' functions
  155.  *  _ASMAPI - Calling conventions for all public assembler functions
  156.  *  _DLLAPI - Calling conventions for all DLL exported functions
  157.  *  _DLLVAR - Modifier to export/import globals in 32 bit DLL's
  158.  *  _EXPORT - Expands to _export when compiling a DLL
  159.  *  _VARAPI - Modifiers for variables; Watcom C++ mangles C++ globals
  160.  */
  161.  
  162. #define _PUBAPI
  163. #define _ASMAPI __cdecl
  164.  
  165. #if defined(_MSC_VER) && defined(_WIN32) && !defined(__SC__)
  166. #define __PASCAL    __stdcall
  167. #define __export
  168. #define __import
  169. #else
  170. #define __PASCAL    __pascal
  171. #endif
  172.  
  173. #if defined(__WATCOMC__)
  174. #define _VARAPI         __cdecl
  175. #else
  176. #define _VARAPI
  177. #endif
  178.  
  179. #if     defined(__WINDOWS__)
  180. #ifdef  BUILD_DLL
  181. #define _DLLASM __export __cdecl
  182. #define _EXPORT __export
  183. #ifdef  __WINDOWS32__
  184. #define _DLLAPI __export __PASCAL
  185. #define _DLLVAR __export
  186. #else
  187. #define _DLLAPI  __export __far __pascal
  188. #define _DLLVAR
  189. #endif
  190. #else
  191. #define _DLLASM __cdecl
  192. #define _EXPORT
  193. #ifdef  __WINDOWS32__
  194. #define _DLLAPI __PASCAL
  195. #define _DLLVAR __import
  196. #else
  197. #define _DLLAPI __far __pascal
  198. #define _DLLVAR
  199. #endif
  200. #endif
  201. #else
  202. #define _EXPORT
  203. #define _DLLAPI
  204. #define _DLLVAR
  205. #endif
  206.  
  207. /* Useful macros */
  208.  
  209. #define PRIVATE static
  210. #define PUBLIC
  211.  
  212. #ifdef  DEBUG
  213. #       define DBG(x) x
  214. #else
  215. #       define DBG(x)
  216. #endif
  217.  
  218. #ifndef NULL
  219. #       define NULL 0L
  220. #endif
  221.  
  222. #ifndef MAX
  223. #       define MAX(a,b) ( ((a) > (b)) ? (a) : (b))
  224. #endif
  225. #ifndef MIN
  226. #       define MIN(a,b) ( ((a) < (b)) ? (a) : (b))
  227. #endif
  228. #ifndef ABS
  229. #       define ABS(a)   ((a) >= 0 ? (a) : -(a))
  230. #endif
  231. #ifndef SIGN
  232. #               define SIGN(a)  ((a) > 0 ? 1 : -1)
  233. #endif
  234.  
  235. /* General typedefs */
  236.  
  237. #ifndef __GENDEFS
  238. #define __GENDEFS
  239. typedef unsigned char   uchar;
  240. typedef unsigned short  ushort;
  241. typedef unsigned int    uint;
  242. typedef unsigned long   ulong;
  243. typedef int             ibool;          /* Integer boolean type                 */
  244. #ifndef __cplusplus
  245. #define bool                    ibool           /* Standard C                                   */
  246. #else
  247. #ifndef __HAS_BOOL__
  248. #define bool                    ibool           /* Older C++ compilers                  */
  249. #endif
  250. #endif  /* __cplusplus */
  251. #endif  /* __GENDEFS */
  252.  
  253. /* Includes Windows headers, as they define TRUE and FALSE */
  254.  
  255. #ifdef  __WINDOWS__
  256. #ifndef _WINDOWS_                   /* Dont include if already included */
  257. #ifndef __WIN386__
  258. #define STRICT
  259. #define WIN32_LEAN_AND_MEAN
  260. #endif
  261. #include <windows.h>
  262. #endif
  263. #endif
  264.  
  265. /* Boolean truth values */
  266.  
  267. #undef  false
  268. #undef  true
  269. #undef  NO
  270. #undef  YES
  271. #undef  FALSE
  272. #undef  TRUE
  273.  
  274. #ifdef  __cplusplus                                     /* Cast to bool's for C++ code          */
  275. #define false       ((bool)0)
  276. #define true        ((bool)1)
  277. #define NO          ((bool)0)
  278. #define YES         ((bool)1)
  279. #define FALSE       ((bool)0)
  280. #define TRUE        ((bool)1)
  281. #else                                                           /* Define to 0 and 1 for C code         */
  282. #define false       0
  283. #define true        1
  284. #define NO          0
  285. #define YES         1
  286. #define FALSE       0
  287. #define TRUE        1
  288. #endif
  289.  
  290. #endif  /* __DEBUG_H */
  291.