Subversion Repositories Games.Descent

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.     SDL - Simple DirectMedia Layer
  3.     Copyright (C) 1997-2009 Sam Lantinga
  4.  
  5.     This library is free software; you can redistribute it and/or
  6.     modify it under the terms of the GNU Library General Public
  7.     License as published by the Free Software Foundation; either
  8.     version 2 of the License, or (at your option) any later version.
  9.  
  10.     This library is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.     Library General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU Library General Public
  16.     License along with this library; if not, write to the Free
  17.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  
  19.     Sam Lantinga
  20.     slouken@libsdl.org
  21. */
  22.  
  23. /**
  24.  *  @file begin_code.h
  25.  *  This file sets things up for C dynamic library function definitions,
  26.  *  static inlined functions, and structures aligned at 4-byte alignment.
  27.  *  If you don't like ugly C preprocessor code, don't look at this file. :)
  28.  */
  29.  
  30. /**
  31.  *  @file begin_code.h
  32.  *  This shouldn't be nested -- included it around code only.
  33.  */
  34. #ifdef _begin_code_h
  35. #error Nested inclusion of begin_code.h
  36. #endif
  37. #define _begin_code_h
  38.  
  39. /**
  40.  *  @def DECLSPEC
  41.  *  Some compilers use a special export keyword
  42.  */
  43. #ifndef DECLSPEC
  44. # if defined(__BEOS__) || defined(__HAIKU__)
  45. #  if defined(__GNUC__)
  46. #   define DECLSPEC     __declspec(dllexport)
  47. #  else
  48. #   define DECLSPEC     __declspec(export)
  49. #  endif
  50. # elif defined(__WIN32__)
  51. #  ifdef __BORLANDC__
  52. #   ifdef BUILD_SDL
  53. #    define DECLSPEC
  54. #   else
  55. #    define DECLSPEC    __declspec(dllimport)
  56. #   endif
  57. #  else
  58. #   define DECLSPEC     __declspec(dllexport)
  59. #  endif
  60. # elif defined(__OS2__)
  61. #  ifdef __WATCOMC__
  62. #   ifdef BUILD_SDL
  63. #    define DECLSPEC    __declspec(dllexport)
  64. #   else
  65. #    define DECLSPEC
  66. #   endif
  67. #  elif defined (__GNUC__) && __GNUC__ < 4
  68. #   /* Added support for GCC-EMX <v4.x */
  69. #   /* this is needed for XFree86/OS2 developement */
  70. #   /* F. Ambacher(anakor@snafu.de) 05.2008 */
  71. #   ifdef BUILD_SDL
  72. #    define DECLSPEC    __declspec(dllexport)
  73. #   else
  74. #    define DECLSPEC
  75. #   endif
  76. #  else
  77. #   define DECLSPEC
  78. #  endif
  79. # else
  80. #  if defined(__GNUC__) && __GNUC__ >= 4
  81. #   define DECLSPEC     __attribute__ ((visibility("default")))
  82. #  else
  83. #   define DECLSPEC
  84. #  endif
  85. # endif
  86. #endif
  87.  
  88. /**
  89.  *  @def SDLCALL
  90.  *  By default SDL uses the C calling convention
  91.  */
  92. #ifndef SDLCALL
  93. # if defined(__WIN32__) && !defined(__GNUC__)
  94. #  define SDLCALL __cdecl
  95. # elif defined(__OS2__)
  96. #  if defined (__GNUC__) && __GNUC__ < 4
  97. #   /* Added support for GCC-EMX <v4.x */
  98. #   /* this is needed for XFree86/OS2 developement */
  99. #   /* F. Ambacher(anakor@snafu.de) 05.2008 */
  100. #   define SDLCALL _cdecl
  101. #  else
  102. #   /* On other compilers on OS/2, we use the _System calling convention */
  103. #   /* to be compatible with every compiler */
  104. #   define SDLCALL _System
  105. #  endif
  106. # else
  107. #  define SDLCALL
  108. # endif
  109. #endif /* SDLCALL */
  110.  
  111. #ifdef __SYMBIAN32__
  112. #ifndef EKA2
  113. #undef DECLSPEC
  114. #define DECLSPEC
  115. #elif !defined(__WINS__)
  116. #undef DECLSPEC
  117. #define DECLSPEC __declspec(dllexport)
  118. #endif /* !EKA2 */
  119. #endif /* __SYMBIAN32__ */
  120.  
  121. /**
  122.  *  @file begin_code.h
  123.  *  Force structure packing at 4 byte alignment.
  124.  *  This is necessary if the header is included in code which has structure
  125.  *  packing set to an alternate value, say for loading structures from disk.
  126.  *  The packing is reset to the previous value in close_code.h
  127.  */
  128. #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__)
  129. #ifdef _MSC_VER
  130. #pragma warning(disable: 4103)
  131. #endif
  132. #ifdef __BORLANDC__
  133. #pragma nopackwarning
  134. #endif
  135. #pragma pack(push,4)
  136. #elif (defined(__MWERKS__) && defined(__MACOS__))
  137. #pragma options align=mac68k4byte
  138. #pragma enumsalwaysint on
  139. #endif /* Compiler needs structure packing set */
  140.  
  141. /**
  142.  *  @def SDL_INLINE_OKAY
  143.  *  Set up compiler-specific options for inlining functions
  144.  */
  145. #ifndef SDL_INLINE_OKAY
  146. #ifdef __GNUC__
  147. #define SDL_INLINE_OKAY
  148. #else
  149. /* Add any special compiler-specific cases here */
  150. #if defined(_MSC_VER) || defined(__BORLANDC__) || \
  151.     defined(__DMC__) || defined(__SC__) || \
  152.     defined(__WATCOMC__) || defined(__LCC__) || \
  153.     defined(__DECC) || defined(__EABI__)
  154. #ifndef __inline__
  155. #define __inline__      __inline
  156. #endif
  157. #define SDL_INLINE_OKAY
  158. #else
  159. #if !defined(__MRC__) && !defined(_SGI_SOURCE)
  160. #ifndef __inline__
  161. #define __inline__ inline
  162. #endif
  163. #define SDL_INLINE_OKAY
  164. #endif /* Not a funky compiler */
  165. #endif /* Visual C++ */
  166. #endif /* GNU C */
  167. #endif /* SDL_INLINE_OKAY */
  168.  
  169. /**
  170.  *  @def __inline__
  171.  *  If inlining isn't supported, remove "__inline__", turning static
  172.  *  inlined functions into static functions (resulting in code bloat
  173.  *  in all files which include the offending header files)
  174.  */
  175. #ifndef SDL_INLINE_OKAY
  176. #define __inline__
  177. #endif
  178.  
  179. /**
  180.  *  @def NULL
  181.  *  Apparently this is needed by several Windows compilers
  182.  */
  183. #if !defined(__MACH__)
  184. #ifndef NULL
  185. #ifdef __cplusplus
  186. #define NULL 0
  187. #else
  188. #define NULL ((void *)0)
  189. #endif
  190. #endif /* NULL */
  191. #endif /* ! Mac OS X - breaks precompiled headers */
  192.