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