31 #include "SDL_config.h"
33 #ifdef HAVE_SYS_TYPES_H
34 #include <sys/types.h>
39 #if defined(STDC_HEADERS)
44 # if defined(HAVE_STDLIB_H)
46 # elif defined(HAVE_MALLOC_H)
49 # if defined(HAVE_STDDEF_H)
52 # if defined(HAVE_STDARG_H)
57 # if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
65 #if defined(HAVE_INTTYPES_H)
66 # include <inttypes.h>
67 #elif defined(HAVE_STDINT_H)
76 #if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
83 #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
84 #define SDL_TABLESIZE(table) SDL_arraysize(table)
94 #define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression)
95 #define SDL_static_cast(type, expression) static_cast<type>(expression)
96 #define SDL_const_cast(type, expression) const_cast<type>(expression)
98 #define SDL_reinterpret_cast(type, expression) ((type)(expression))
99 #define SDL_static_cast(type, expression) ((type)(expression))
100 #define SDL_const_cast(type, expression) ((type)(expression))
105 #define SDL_FOURCC(A, B, C, D) \
106 ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \
107 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \
108 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \
109 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24))
159 #define SDL_COMPILE_TIME_ASSERT(name, x) \
160 typedef int SDL_dummy_ ## name[(x) * 2 - 1]
162 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
163 SDL_COMPILE_TIME_ASSERT(uint8,
sizeof(
Uint8) == 1);
164 SDL_COMPILE_TIME_ASSERT(sint8,
sizeof(
Sint8) == 1);
165 SDL_COMPILE_TIME_ASSERT(uint16,
sizeof(
Uint16) == 2);
166 SDL_COMPILE_TIME_ASSERT(sint16,
sizeof(
Sint16) == 2);
167 SDL_COMPILE_TIME_ASSERT(uint32,
sizeof(
Uint32) == 4);
168 SDL_COMPILE_TIME_ASSERT(sint32,
sizeof(
Sint32) == 4);
169 SDL_COMPILE_TIME_ASSERT(uint64,
sizeof(
Uint64) == 8);
170 SDL_COMPILE_TIME_ASSERT(sint64,
sizeof(
Sint64) == 8);
181 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
182 #if !defined(__ANDROID__)
189 SDL_COMPILE_TIME_ASSERT(
enum,
sizeof(SDL_DUMMY_ENUM) ==
sizeof(
int));
200 #if defined(HAVE_ALLOCA) && !defined(alloca)
201 # if defined(HAVE_ALLOCA_H)
203 # elif defined(__GNUC__)
204 # define alloca __builtin_alloca
205 # elif defined(_MSC_VER)
207 # define alloca _alloca
208 # elif defined(__WATCOMC__)
210 # elif defined(__BORLANDC__)
212 # elif defined(__DMC__)
214 # elif defined(__AIX__)
216 # elif defined(__MRC__)
217 void *alloca(
unsigned);
223 #define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
224 #define SDL_stack_free(data)
226 #define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count))
227 #define SDL_stack_free(data) SDL_free(data)
230 extern DECLSPEC
void *SDLCALL SDL_malloc(
size_t size);
231 extern DECLSPEC
void *SDLCALL SDL_calloc(
size_t nmemb,
size_t size);
232 extern DECLSPEC
void *SDLCALL SDL_realloc(
void *mem,
size_t size);
233 extern DECLSPEC
void SDLCALL SDL_free(
void *mem);
235 extern DECLSPEC
char *SDLCALL SDL_getenv(
const char *name);
236 extern DECLSPEC
int SDLCALL SDL_setenv(
const char *name,
const char *value,
int overwrite);
238 extern DECLSPEC
void SDLCALL SDL_qsort(
void *base,
size_t nmemb,
size_t size,
int (*compare) (
const void *,
const void *));
240 extern DECLSPEC
int SDLCALL SDL_abs(
int x);
244 #define SDL_min(x, y) (((x) < (y)) ? (x) : (y))
245 #define SDL_max(x, y) (((x) > (y)) ? (x) : (y))
247 extern DECLSPEC
int SDLCALL SDL_isdigit(
int x);
248 extern DECLSPEC
int SDLCALL SDL_isspace(
int x);
249 extern DECLSPEC
int SDLCALL SDL_toupper(
int x);
250 extern DECLSPEC
int SDLCALL SDL_tolower(
int x);
252 extern DECLSPEC
void *SDLCALL SDL_memset(
void *dst,
int c,
size_t len);
254 #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
255 #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
258 SDL_FORCE_INLINE
void SDL_memset4(
void *dst,
int val,
size_t dwords)
260 #if defined(__GNUC__) && defined(i386)
262 __asm__ __volatile__ (
265 :
"=&D" (u0),
"=&a" (u1),
"=&c" (u2)
266 :
"0" (dst),
"1" (val),
"2" (SDL_static_cast(
Uint32, dwords))
270 size_t _n = (dwords + 3) / 4;
277 case 0:
do { *_p++ = _val;
278 case 3: *_p++ = _val;
279 case 2: *_p++ = _val;
280 case 1: *_p++ = _val;
287 extern DECLSPEC
void *SDLCALL SDL_memcpy(
void *dst,
const void *src,
size_t len);
289 SDL_FORCE_INLINE
void *SDL_memcpy4(
void *dst,
const void *src,
size_t dwords)
291 return SDL_memcpy(dst, src, dwords * 4);
294 extern DECLSPEC
void *SDLCALL SDL_memmove(
void *dst,
const void *src,
size_t len);
295 extern DECLSPEC
int SDLCALL SDL_memcmp(
const void *s1,
const void *s2,
size_t len);
297 extern DECLSPEC
size_t SDLCALL SDL_wcslen(
const wchar_t *wstr);
298 extern DECLSPEC
size_t SDLCALL SDL_wcslcpy(
wchar_t *dst,
const wchar_t *src,
size_t maxlen);
299 extern DECLSPEC
size_t SDLCALL SDL_wcslcat(
wchar_t *dst,
const wchar_t *src,
size_t maxlen);
301 extern DECLSPEC
size_t SDLCALL SDL_strlen(
const char *str);
302 extern DECLSPEC
size_t SDLCALL SDL_strlcpy(
char *dst,
const char *src,
size_t maxlen);
303 extern DECLSPEC
size_t SDLCALL SDL_utf8strlcpy(
char *dst,
const char *src,
size_t dst_bytes);
304 extern DECLSPEC
size_t SDLCALL SDL_strlcat(
char *dst,
const char *src,
size_t maxlen);
305 extern DECLSPEC
char *SDLCALL SDL_strdup(
const char *str);
306 extern DECLSPEC
char *SDLCALL SDL_strrev(
char *str);
307 extern DECLSPEC
char *SDLCALL SDL_strupr(
char *str);
308 extern DECLSPEC
char *SDLCALL SDL_strlwr(
char *str);
309 extern DECLSPEC
char *SDLCALL SDL_strchr(
const char *str,
int c);
310 extern DECLSPEC
char *SDLCALL SDL_strrchr(
const char *str,
int c);
311 extern DECLSPEC
char *SDLCALL SDL_strstr(
const char *haystack,
const char *needle);
313 extern DECLSPEC
char *SDLCALL SDL_itoa(
int value,
char *str,
int radix);
314 extern DECLSPEC
char *SDLCALL SDL_uitoa(
unsigned int value,
char *str,
int radix);
315 extern DECLSPEC
char *SDLCALL SDL_ltoa(
long value,
char *str,
int radix);
316 extern DECLSPEC
char *SDLCALL SDL_ultoa(
unsigned long value,
char *str,
int radix);
317 extern DECLSPEC
char *SDLCALL SDL_lltoa(
Sint64 value,
char *str,
int radix);
318 extern DECLSPEC
char *SDLCALL SDL_ulltoa(
Uint64 value,
char *str,
int radix);
320 extern DECLSPEC
int SDLCALL SDL_atoi(
const char *str);
321 extern DECLSPEC
double SDLCALL SDL_atof(
const char *str);
322 extern DECLSPEC
long SDLCALL SDL_strtol(
const char *str,
char **endp,
int base);
323 extern DECLSPEC
unsigned long SDLCALL SDL_strtoul(
const char *str,
char **endp,
int base);
324 extern DECLSPEC
Sint64 SDLCALL SDL_strtoll(
const char *str,
char **endp,
int base);
325 extern DECLSPEC
Uint64 SDLCALL SDL_strtoull(
const char *str,
char **endp,
int base);
326 extern DECLSPEC
double SDLCALL SDL_strtod(
const char *str,
char **endp);
328 extern DECLSPEC
int SDLCALL SDL_strcmp(
const char *str1,
const char *str2);
329 extern DECLSPEC
int SDLCALL SDL_strncmp(
const char *str1,
const char *str2,
size_t maxlen);
330 extern DECLSPEC
int SDLCALL SDL_strcasecmp(
const char *str1,
const char *str2);
331 extern DECLSPEC
int SDLCALL SDL_strncasecmp(
const char *str1,
const char *str2,
size_t len);
333 extern DECLSPEC
int SDLCALL SDL_sscanf(
const char *text,
const char *fmt, ...);
334 extern DECLSPEC
int SDLCALL SDL_snprintf(
char *text,
size_t maxlen,
const char *fmt, ...);
335 extern DECLSPEC
int SDLCALL SDL_vsnprintf(
char *text,
size_t maxlen,
const char *fmt, va_list ap);
339 #define M_PI 3.14159265358979323846264338327950288
343 extern DECLSPEC
double SDLCALL SDL_atan(
double x);
344 extern DECLSPEC
double SDLCALL SDL_atan2(
double x,
double y);
345 extern DECLSPEC
double SDLCALL SDL_ceil(
double x);
346 extern DECLSPEC
double SDLCALL SDL_copysign(
double x,
double y);
347 extern DECLSPEC
double SDLCALL SDL_cos(
double x);
348 extern DECLSPEC
float SDLCALL SDL_cosf(
float x);
349 extern DECLSPEC
double SDLCALL SDL_fabs(
double x);
350 extern DECLSPEC
double SDLCALL SDL_floor(
double x);
351 extern DECLSPEC
double SDLCALL SDL_log(
double x);
352 extern DECLSPEC
double SDLCALL SDL_pow(
double x,
double y);
353 extern DECLSPEC
double SDLCALL SDL_scalbn(
double x,
int n);
354 extern DECLSPEC
double SDLCALL SDL_sin(
double x);
355 extern DECLSPEC
float SDLCALL SDL_sinf(
float x);
356 extern DECLSPEC
double SDLCALL SDL_sqrt(
double x);
359 #define SDL_ICONV_ERROR (size_t)-1
360 #define SDL_ICONV_E2BIG (size_t)-2
361 #define SDL_ICONV_EILSEQ (size_t)-3
362 #define SDL_ICONV_EINVAL (size_t)-4
365 typedef struct _SDL_iconv_t *SDL_iconv_t;
366 extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(
const char *tocode,
367 const char *fromcode);
368 extern DECLSPEC
int SDLCALL SDL_iconv_close(SDL_iconv_t cd);
369 extern DECLSPEC
size_t SDLCALL SDL_iconv(SDL_iconv_t cd,
const char **inbuf,
370 size_t * inbytesleft,
char **outbuf,
371 size_t * outbytesleft);
377 const char *fromcode,
380 #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
381 #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1)
382 #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1)
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:129
uint64_t Uint64
An unsigned 64-bit integer type.
Definition: SDL_stdinc.h:154
int64_t Sint64
A signed 64-bit integer type.
Definition: SDL_stdinc.h:150
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:145
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:137
int8_t Sint8
A signed 8-bit integer type.
Definition: SDL_stdinc.h:125
int32_t Sint32
A signed 32-bit integer type.
Definition: SDL_stdinc.h:141
DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft)
int16_t Sint16
A signed 16-bit integer type.
Definition: SDL_stdinc.h:133