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)
74 # if defined(__WINRT__)
79 # define _USE_MATH_DEFINES
86 #if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
93 #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
94 #define SDL_TABLESIZE(table) SDL_arraysize(table)
104 #define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression)
105 #define SDL_static_cast(type, expression) static_cast<type>(expression)
106 #define SDL_const_cast(type, expression) const_cast<type>(expression)
108 #define SDL_reinterpret_cast(type, expression) ((type)(expression))
109 #define SDL_static_cast(type, expression) ((type)(expression))
110 #define SDL_const_cast(type, expression) ((type)(expression))
115 #define SDL_FOURCC(A, B, C, D) \
116 ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \
117 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \
118 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \
119 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24))
169 #define SDL_COMPILE_TIME_ASSERT(name, x) \
170 typedef int SDL_dummy_ ## name[(x) * 2 - 1]
172 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
173 SDL_COMPILE_TIME_ASSERT(uint8,
sizeof(
Uint8) == 1);
174 SDL_COMPILE_TIME_ASSERT(sint8,
sizeof(
Sint8) == 1);
175 SDL_COMPILE_TIME_ASSERT(uint16,
sizeof(
Uint16) == 2);
176 SDL_COMPILE_TIME_ASSERT(sint16,
sizeof(
Sint16) == 2);
177 SDL_COMPILE_TIME_ASSERT(uint32,
sizeof(
Uint32) == 4);
178 SDL_COMPILE_TIME_ASSERT(sint32,
sizeof(
Sint32) == 4);
179 SDL_COMPILE_TIME_ASSERT(uint64,
sizeof(
Uint64) == 8);
180 SDL_COMPILE_TIME_ASSERT(sint64,
sizeof(
Sint64) == 8);
191 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
192 #if !defined(__ANDROID__)
199 SDL_COMPILE_TIME_ASSERT(
enum,
sizeof(SDL_DUMMY_ENUM) ==
sizeof(
int));
210 #if defined(HAVE_ALLOCA) && !defined(alloca)
211 # if defined(HAVE_ALLOCA_H)
213 # elif defined(__GNUC__)
214 # define alloca __builtin_alloca
215 # elif defined(_MSC_VER)
217 # define alloca _alloca
218 # elif defined(__WATCOMC__)
220 # elif defined(__BORLANDC__)
222 # elif defined(__DMC__)
224 # elif defined(__AIX__)
226 # elif defined(__MRC__)
227 void *alloca(
unsigned);
233 #define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
234 #define SDL_stack_free(data)
236 #define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count))
237 #define SDL_stack_free(data) SDL_free(data)
240 extern DECLSPEC
void *SDLCALL SDL_malloc(
size_t size);
241 extern DECLSPEC
void *SDLCALL SDL_calloc(
size_t nmemb,
size_t size);
242 extern DECLSPEC
void *SDLCALL SDL_realloc(
void *mem,
size_t size);
243 extern DECLSPEC
void SDLCALL SDL_free(
void *mem);
245 extern DECLSPEC
char *SDLCALL SDL_getenv(
const char *name);
246 extern DECLSPEC
int SDLCALL SDL_setenv(
const char *name,
const char *value,
int overwrite);
248 extern DECLSPEC
void SDLCALL SDL_qsort(
void *base,
size_t nmemb,
size_t size,
int (*compare) (
const void *,
const void *));
250 extern DECLSPEC
int SDLCALL SDL_abs(
int x);
254 #define SDL_min(x, y) (((x) < (y)) ? (x) : (y))
255 #define SDL_max(x, y) (((x) > (y)) ? (x) : (y))
257 extern DECLSPEC
int SDLCALL SDL_isdigit(
int x);
258 extern DECLSPEC
int SDLCALL SDL_isspace(
int x);
259 extern DECLSPEC
int SDLCALL SDL_toupper(
int x);
260 extern DECLSPEC
int SDLCALL SDL_tolower(
int x);
262 extern DECLSPEC
void *SDLCALL SDL_memset(
void *dst,
int c,
size_t len);
264 #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
265 #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
268 SDL_FORCE_INLINE
void SDL_memset4(
void *dst,
Uint32 val,
size_t dwords)
270 #if defined(__GNUC__) && defined(i386)
272 __asm__ __volatile__ (
275 :
"=&D" (u0),
"=&a" (u1),
"=&c" (u2)
276 :
"0" (dst),
"1" (val),
"2" (SDL_static_cast(
Uint32, dwords))
280 size_t _n = (dwords + 3) / 4;
287 case 0:
do { *_p++ = _val;
288 case 3: *_p++ = _val;
289 case 2: *_p++ = _val;
290 case 1: *_p++ = _val;
297 extern DECLSPEC
void *SDLCALL SDL_memcpy(
void *dst,
const void *src,
size_t len);
299 SDL_FORCE_INLINE
void *SDL_memcpy4(
void *dst,
const void *src,
size_t dwords)
301 return SDL_memcpy(dst, src, dwords * 4);
304 extern DECLSPEC
void *SDLCALL SDL_memmove(
void *dst,
const void *src,
size_t len);
305 extern DECLSPEC
int SDLCALL SDL_memcmp(
const void *s1,
const void *s2,
size_t len);
307 extern DECLSPEC
size_t SDLCALL SDL_wcslen(
const wchar_t *wstr);
308 extern DECLSPEC
size_t SDLCALL SDL_wcslcpy(
wchar_t *dst,
const wchar_t *src,
size_t maxlen);
309 extern DECLSPEC
size_t SDLCALL SDL_wcslcat(
wchar_t *dst,
const wchar_t *src,
size_t maxlen);
311 extern DECLSPEC
size_t SDLCALL SDL_strlen(
const char *str);
312 extern DECLSPEC
size_t SDLCALL SDL_strlcpy(
char *dst,
const char *src,
size_t maxlen);
313 extern DECLSPEC
size_t SDLCALL SDL_utf8strlcpy(
char *dst,
const char *src,
size_t dst_bytes);
314 extern DECLSPEC
size_t SDLCALL SDL_strlcat(
char *dst,
const char *src,
size_t maxlen);
315 extern DECLSPEC
char *SDLCALL SDL_strdup(
const char *str);
316 extern DECLSPEC
char *SDLCALL SDL_strrev(
char *str);
317 extern DECLSPEC
char *SDLCALL SDL_strupr(
char *str);
318 extern DECLSPEC
char *SDLCALL SDL_strlwr(
char *str);
319 extern DECLSPEC
char *SDLCALL SDL_strchr(
const char *str,
int c);
320 extern DECLSPEC
char *SDLCALL SDL_strrchr(
const char *str,
int c);
321 extern DECLSPEC
char *SDLCALL SDL_strstr(
const char *haystack,
const char *needle);
323 extern DECLSPEC
char *SDLCALL SDL_itoa(
int value,
char *str,
int radix);
324 extern DECLSPEC
char *SDLCALL SDL_uitoa(
unsigned int value,
char *str,
int radix);
325 extern DECLSPEC
char *SDLCALL SDL_ltoa(
long value,
char *str,
int radix);
326 extern DECLSPEC
char *SDLCALL SDL_ultoa(
unsigned long value,
char *str,
int radix);
327 extern DECLSPEC
char *SDLCALL SDL_lltoa(
Sint64 value,
char *str,
int radix);
328 extern DECLSPEC
char *SDLCALL SDL_ulltoa(
Uint64 value,
char *str,
int radix);
330 extern DECLSPEC
int SDLCALL SDL_atoi(
const char *str);
331 extern DECLSPEC
double SDLCALL SDL_atof(
const char *str);
332 extern DECLSPEC
long SDLCALL SDL_strtol(
const char *str,
char **endp,
int base);
333 extern DECLSPEC
unsigned long SDLCALL SDL_strtoul(
const char *str,
char **endp,
int base);
334 extern DECLSPEC
Sint64 SDLCALL SDL_strtoll(
const char *str,
char **endp,
int base);
335 extern DECLSPEC
Uint64 SDLCALL SDL_strtoull(
const char *str,
char **endp,
int base);
336 extern DECLSPEC
double SDLCALL SDL_strtod(
const char *str,
char **endp);
338 extern DECLSPEC
int SDLCALL SDL_strcmp(
const char *str1,
const char *str2);
339 extern DECLSPEC
int SDLCALL SDL_strncmp(
const char *str1,
const char *str2,
size_t maxlen);
340 extern DECLSPEC
int SDLCALL SDL_strcasecmp(
const char *str1,
const char *str2);
341 extern DECLSPEC
int SDLCALL SDL_strncasecmp(
const char *str1,
const char *str2,
size_t len);
343 extern DECLSPEC
int SDLCALL SDL_sscanf(
const char *text,
const char *fmt, ...);
344 extern DECLSPEC
int SDLCALL SDL_vsscanf(
const char *text,
const char *fmt, va_list ap);
345 extern DECLSPEC
int SDLCALL SDL_snprintf(
char *text,
size_t maxlen,
const char *fmt, ...);
346 extern DECLSPEC
int SDLCALL SDL_vsnprintf(
char *text,
size_t maxlen,
const char *fmt, va_list ap);
350 #define M_PI 3.14159265358979323846264338327950288
354 extern DECLSPEC
double SDLCALL SDL_acos(
double x);
355 extern DECLSPEC
double SDLCALL SDL_asin(
double x);
356 extern DECLSPEC
double SDLCALL SDL_atan(
double x);
357 extern DECLSPEC
double SDLCALL SDL_atan2(
double x,
double y);
358 extern DECLSPEC
double SDLCALL SDL_ceil(
double x);
359 extern DECLSPEC
double SDLCALL SDL_copysign(
double x,
double y);
360 extern DECLSPEC
double SDLCALL SDL_cos(
double x);
361 extern DECLSPEC
float SDLCALL SDL_cosf(
float x);
362 extern DECLSPEC
double SDLCALL SDL_fabs(
double x);
363 extern DECLSPEC
double SDLCALL SDL_floor(
double x);
364 extern DECLSPEC
double SDLCALL SDL_log(
double x);
365 extern DECLSPEC
double SDLCALL SDL_pow(
double x,
double y);
366 extern DECLSPEC
double SDLCALL SDL_scalbn(
double x,
int n);
367 extern DECLSPEC
double SDLCALL SDL_sin(
double x);
368 extern DECLSPEC
float SDLCALL SDL_sinf(
float x);
369 extern DECLSPEC
double SDLCALL SDL_sqrt(
double x);
372 #define SDL_ICONV_ERROR (size_t)-1
373 #define SDL_ICONV_E2BIG (size_t)-2
374 #define SDL_ICONV_EILSEQ (size_t)-3
375 #define SDL_ICONV_EINVAL (size_t)-4
378 typedef struct _SDL_iconv_t *SDL_iconv_t;
379 extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(
const char *tocode,
380 const char *fromcode);
381 extern DECLSPEC
int SDLCALL SDL_iconv_close(SDL_iconv_t cd);
382 extern DECLSPEC
size_t SDLCALL SDL_iconv(SDL_iconv_t cd,
const char **inbuf,
383 size_t * inbytesleft,
char **outbuf,
384 size_t * outbytesleft);
390 const char *fromcode,
393 #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
394 #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1)
395 #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:139
uint64_t Uint64
An unsigned 64-bit integer type.
Definition: SDL_stdinc.h:164
int64_t Sint64
A signed 64-bit integer type.
Definition: SDL_stdinc.h:160
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:147
int8_t Sint8
A signed 8-bit integer type.
Definition: SDL_stdinc.h:135
int32_t Sint32
A signed 32-bit integer type.
Definition: SDL_stdinc.h:151
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:143