Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
793 lines (702 loc) · 20.8 KB

SDL_stdinc.h

File metadata and controls

793 lines (702 loc) · 20.8 KB
 
Feb 10, 2006
Feb 10, 2006
1
2
/*
SDL - Simple DirectMedia Layer
Dec 8, 2008
Dec 8, 2008
3
Copyright (C) 1997-2009 Sam Lantinga
Feb 10, 2006
Feb 10, 2006
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
Jul 10, 2006
Jul 10, 2006
23
/**
Oct 19, 2009
Oct 19, 2009
24
25
26
* \file SDL_stdinc.h
*
* This is a general header that includes C language support.
Jul 10, 2006
Jul 10, 2006
27
*/
Feb 10, 2006
Feb 10, 2006
28
29
30
31
32
33
34
#ifndef _SDL_stdinc_h
#define _SDL_stdinc_h
#include "SDL_config.h"
Apr 13, 2006
Apr 13, 2006
35
#ifdef HAVE_SYS_TYPES_H
Feb 10, 2006
Feb 10, 2006
36
37
#include <sys/types.h>
#endif
Apr 13, 2006
Apr 13, 2006
38
#ifdef HAVE_STDIO_H
Feb 10, 2006
Feb 10, 2006
39
40
#include <stdio.h>
#endif
Apr 13, 2006
Apr 13, 2006
41
#if defined(STDC_HEADERS)
Feb 10, 2006
Feb 10, 2006
42
43
44
45
# include <stdlib.h>
# include <stddef.h>
# include <stdarg.h>
#else
Apr 13, 2006
Apr 13, 2006
46
47
48
49
# if defined(HAVE_STDLIB_H)
# include <stdlib.h>
# elif defined(HAVE_MALLOC_H)
# include <malloc.h>
Feb 10, 2006
Feb 10, 2006
50
# endif
Apr 13, 2006
Apr 13, 2006
51
52
# if defined(HAVE_STDDEF_H)
# include <stddef.h>
Feb 24, 2006
Feb 24, 2006
53
# endif
Apr 13, 2006
Apr 13, 2006
54
55
# if defined(HAVE_STDARG_H)
# include <stdarg.h>
Feb 10, 2006
Feb 10, 2006
56
57
# endif
#endif
Apr 13, 2006
Apr 13, 2006
58
59
60
#ifdef HAVE_STRING_H
# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
# include <memory.h>
Feb 10, 2006
Feb 10, 2006
61
62
63
# endif
# include <string.h>
#endif
Apr 13, 2006
Apr 13, 2006
64
#ifdef HAVE_STRINGS_H
Feb 10, 2006
Feb 10, 2006
65
66
# include <strings.h>
#endif
Apr 13, 2006
Apr 13, 2006
67
#if defined(HAVE_INTTYPES_H)
Feb 10, 2006
Feb 10, 2006
68
# include <inttypes.h>
Apr 13, 2006
Apr 13, 2006
69
#elif defined(HAVE_STDINT_H)
Feb 10, 2006
Feb 10, 2006
70
71
# include <stdint.h>
#endif
Apr 13, 2006
Apr 13, 2006
72
#ifdef HAVE_CTYPE_H
Feb 10, 2006
Feb 10, 2006
73
74
# include <ctype.h>
#endif
Jan 10, 2009
Jan 10, 2009
75
76
77
#ifdef HAVE_MATH_H
# include <math.h>
#endif
Sep 21, 2009
Sep 21, 2009
78
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
Mar 13, 2006
Mar 13, 2006
79
80
# include <iconv.h>
#endif
Feb 10, 2006
Feb 10, 2006
81
Oct 19, 2009
Oct 19, 2009
82
83
84
/**
* The number of elements in an array.
*/
Feb 10, 2006
Feb 10, 2006
85
86
87
#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
#define SDL_TABLESIZE(table) SDL_arraysize(table)
Oct 19, 2009
Oct 19, 2009
88
89
90
91
92
93
94
/**
* \name Cast operators
*
* Use proper C++ casts when compiled as C++ to be compatible with the option
* -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above).
*/
/*@{*/
Feb 17, 2009
Feb 17, 2009
95
96
97
98
99
100
101
#ifdef __cplusplus
#define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression)
#define SDL_static_cast(type, expression) static_cast<type>(expression)
#else
#define SDL_reinterpret_cast(type, expression) ((type)(expression))
#define SDL_static_cast(type, expression) ((type)(expression))
#endif
Oct 19, 2009
Oct 19, 2009
102
103
104
105
106
107
/*@}*//*Cast operators*/
/**
* \name Basic data types
*/
/*@{*/
Feb 17, 2009
Feb 17, 2009
108
Oct 10, 2009
Oct 10, 2009
109
typedef enum
Jul 10, 2006
Jul 10, 2006
110
111
112
{
SDL_FALSE = 0,
SDL_TRUE = 1
Feb 10, 2006
Feb 10, 2006
113
114
} SDL_bool;
Jul 10, 2006
Jul 10, 2006
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
* \brief A signed 8-bit integer type.
*/
typedef int8_t Sint8;
/**
* \brief An unsigned 8-bit integer type.
*/
typedef uint8_t Uint8;
/**
* \brief A signed 16-bit integer type.
*/
typedef int16_t Sint16;
/**
* \brief An unsigned 16-bit integer type.
*/
typedef uint16_t Uint16;
/**
* \brief A signed 32-bit integer type.
*/
typedef int32_t Sint32;
/**
* \brief An unsigned 32-bit integer type.
*/
typedef uint32_t Uint32;
Feb 10, 2006
Feb 10, 2006
139
140
#ifdef SDL_HAS_64BIT_TYPE
Jul 10, 2006
Jul 10, 2006
141
142
143
144
145
146
147
148
149
150
/**
* \brief A signed 64-bit integer type.
* \warning On platforms without any sort of 64-bit datatype, this is equivalent to Sint32!
*/
typedef int64_t Sint64;
/**
* \brief An unsigned 64-bit integer type.
* \warning On platforms without any sort of 64-bit datatype, this is equivalent to Uint32!
*/
typedef uint64_t Uint64;
Feb 10, 2006
Feb 10, 2006
151
152
#else
/* This is really just a hack to prevent the compiler from complaining */
Oct 1, 2006
Oct 1, 2006
153
154
typedef Sint32 Sint64;
typedef Uint32 Uint64;
Feb 10, 2006
Feb 10, 2006
155
156
#endif
Oct 19, 2009
Oct 19, 2009
157
158
159
/*@}*//*Basic data types*/
Feb 10, 2006
Feb 10, 2006
160
161
#define SDL_COMPILE_TIME_ASSERT(name, x) \
typedef int SDL_dummy_ ## name[(x) * 2 - 1]
Oct 19, 2009
Oct 19, 2009
162
/** \cond */
Jul 10, 2006
Jul 10, 2006
163
#ifndef DOXYGEN_SHOULD_IGNORE_THIS
Feb 10, 2006
Feb 10, 2006
164
165
166
167
168
169
SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1);
SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1);
SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2);
SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2);
SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4);
SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4);
Aug 27, 2008
Aug 27, 2008
170
171
172
#ifndef __NINTENDODS__ /* TODO: figure out why the following happens:
include/SDL_stdinc.h:150: error: size of array 'SDL_dummy_uint64' is negative
include/SDL_stdinc.h:151: error: size of array 'SDL_dummy_sint64' is negative */
Jul 5, 2008
Jul 5, 2008
173
174
SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8);
SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8);
Aug 27, 2008
Aug 27, 2008
175
#endif
Jul 10, 2006
Jul 10, 2006
176
#endif /* DOXYGEN_SHOULD_IGNORE_THIS */
Oct 19, 2009
Oct 19, 2009
177
/** \endcond */
Feb 10, 2006
Feb 10, 2006
178
179
180
181
182
183
184
185
186
187
188
/* Check to make sure enums are the size of ints, for structure packing.
For both Watcom C/C++ and Borland C/C++ the compiler option that makes
enums having the size of an int must be enabled.
This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
*/
/* Enable enums always int in CodeWarrior (for MPW use "-enum int") */
#ifdef __MWERKS__
#pragma enumsalwaysint on
#endif
Oct 19, 2009
Oct 19, 2009
189
/** \cond */
Jul 10, 2006
Jul 10, 2006
190
#ifndef DOXYGEN_SHOULD_IGNORE_THIS
Aug 27, 2008
Aug 27, 2008
191
#ifndef __NINTENDODS__ /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */
Jul 10, 2006
Jul 10, 2006
192
193
194
typedef enum
{
DUMMY_ENUM_VALUE
Feb 10, 2006
Feb 10, 2006
195
196
197
} SDL_DUMMY_ENUM;
SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));
Aug 27, 2008
Aug 27, 2008
198
#endif
Jul 10, 2006
Jul 10, 2006
199
#endif /* DOXYGEN_SHOULD_IGNORE_THIS */
Oct 19, 2009
Oct 19, 2009
200
/** \endcond */
Feb 10, 2006
Feb 10, 2006
201
202
203
204
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
Jul 10, 2006
Jul 10, 2006
205
/* *INDENT-OFF* */
Feb 10, 2006
Feb 10, 2006
206
extern "C" {
Jul 10, 2006
Jul 10, 2006
207
/* *INDENT-ON* */
Feb 10, 2006
Feb 10, 2006
208
209
#endif
Apr 13, 2006
Apr 13, 2006
210
#ifdef HAVE_MALLOC
Feb 10, 2006
Feb 10, 2006
211
212
#define SDL_malloc malloc
#else
Jul 10, 2006
Jul 10, 2006
213
extern DECLSPEC void *SDLCALL SDL_malloc(size_t size);
Feb 10, 2006
Feb 10, 2006
214
215
#endif
Apr 13, 2006
Apr 13, 2006
216
#ifdef HAVE_CALLOC
Feb 10, 2006
Feb 10, 2006
217
218
#define SDL_calloc calloc
#else
Jul 10, 2006
Jul 10, 2006
219
extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size);
Feb 10, 2006
Feb 10, 2006
220
221
#endif
Apr 13, 2006
Apr 13, 2006
222
#ifdef HAVE_REALLOC
Feb 10, 2006
Feb 10, 2006
223
224
#define SDL_realloc realloc
#else
Jul 10, 2006
Jul 10, 2006
225
extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size);
Feb 10, 2006
Feb 10, 2006
226
227
#endif
Apr 13, 2006
Apr 13, 2006
228
#ifdef HAVE_FREE
Feb 10, 2006
Feb 10, 2006
229
230
231
232
233
#define SDL_free free
#else
extern DECLSPEC void SDLCALL SDL_free(void *mem);
#endif
Apr 13, 2006
Apr 13, 2006
234
235
#if defined(HAVE_ALLOCA) && !defined(alloca)
# if defined(HAVE_ALLOCA_H)
Feb 20, 2006
Feb 20, 2006
236
# include <alloca.h>
Feb 21, 2006
Feb 21, 2006
237
# elif defined(__GNUC__)
Feb 20, 2006
Feb 20, 2006
238
# define alloca __builtin_alloca
Feb 21, 2006
Feb 21, 2006
239
# elif defined(_MSC_VER)
Feb 20, 2006
Feb 20, 2006
240
241
# include <malloc.h>
# define alloca _alloca
May 7, 2006
May 7, 2006
242
243
# elif defined(__WATCOMC__)
# include <malloc.h>
Dec 28, 2007
Dec 28, 2007
244
245
# elif defined(__BORLANDC__)
# include <malloc.h>
Jun 21, 2006
Jun 21, 2006
246
247
# elif defined(__DMC__)
# include <stdlib.h>
Feb 21, 2006
Feb 21, 2006
248
# elif defined(__AIX__)
Jul 10, 2006
Jul 10, 2006
249
#pragma alloca
May 14, 2006
May 14, 2006
250
# elif defined(__MRC__)
Jul 10, 2006
Jul 10, 2006
251
void *alloca(unsigned);
Feb 20, 2006
Feb 20, 2006
252
# else
Jul 10, 2006
Jul 10, 2006
253
char *alloca();
Feb 20, 2006
Feb 20, 2006
254
255
# endif
#endif
Apr 13, 2006
Apr 13, 2006
256
#ifdef HAVE_ALLOCA
Nov 29, 2006
Nov 29, 2006
257
#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
Feb 10, 2006
Feb 10, 2006
258
259
#define SDL_stack_free(data)
#else
Nov 29, 2006
Nov 29, 2006
260
#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count))
Feb 10, 2006
Feb 10, 2006
261
262
263
#define SDL_stack_free(data) SDL_free(data)
#endif
Apr 13, 2006
Apr 13, 2006
264
#ifdef HAVE_GETENV
Feb 10, 2006
Feb 10, 2006
265
266
#define SDL_getenv getenv
#else
Jul 10, 2006
Jul 10, 2006
267
extern DECLSPEC char *SDLCALL SDL_getenv(const char *name);
Feb 10, 2006
Feb 10, 2006
268
269
#endif
Dec 15, 2009
Dec 15, 2009
270
271
272
273
274
275
276
277
278
279
/**
* \warning On some platforms, the string you pass to SDL_putenv() becomes
* part of the environment table directly...it will use this specific
* buffer, and not a copy of it! This means you can't free it, and
* other pieces of code may try to write to it. In practice, this
* isn't a big deal, but be aware of the possibility.
* However, due to this issue, you should be prepared to
* pass a (char*), or be willing to cast away the constness of your
* string for this call.
*/
Apr 13, 2006
Apr 13, 2006
280
#ifdef HAVE_PUTENV
Feb 10, 2006
Feb 10, 2006
281
282
283
284
285
#define SDL_putenv putenv
#else
extern DECLSPEC int SDLCALL SDL_putenv(const char *variable);
#endif
Apr 13, 2006
Apr 13, 2006
286
#ifdef HAVE_QSORT
Feb 10, 2006
Feb 10, 2006
287
288
289
#define SDL_qsort qsort
#else
extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size,
Jul 10, 2006
Jul 10, 2006
290
291
int (*compare) (const void *,
const void *));
Feb 10, 2006
Feb 10, 2006
292
293
#endif
Apr 13, 2006
Apr 13, 2006
294
#ifdef HAVE_ABS
Feb 10, 2006
Feb 10, 2006
295
296
297
298
299
#define SDL_abs abs
#else
#define SDL_abs(X) ((X) < 0 ? -(X) : (X))
#endif
Feb 19, 2006
Feb 19, 2006
300
301
302
#define SDL_min(x, y) (((x) < (y)) ? (x) : (y))
#define SDL_max(x, y) (((x) > (y)) ? (x) : (y))
Apr 13, 2006
Apr 13, 2006
303
#ifdef HAVE_CTYPE_H
Feb 10, 2006
Feb 10, 2006
304
305
306
307
308
309
310
311
312
313
314
#define SDL_isdigit(X) isdigit(X)
#define SDL_isspace(X) isspace(X)
#define SDL_toupper(X) toupper(X)
#define SDL_tolower(X) tolower(X)
#else
#define SDL_isdigit(X) (((X) >= '0') && ((X) <= '9'))
#define SDL_isspace(X) (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n'))
#define SDL_toupper(X) (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X))
#define SDL_tolower(X) (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X))
#endif
Apr 13, 2006
Apr 13, 2006
315
#ifdef HAVE_MEMSET
Feb 10, 2006
Feb 10, 2006
316
317
#define SDL_memset memset
#else
Jul 10, 2006
Jul 10, 2006
318
extern DECLSPEC void *SDLCALL SDL_memset(void *dst, int c, size_t len);
Feb 10, 2006
Feb 10, 2006
319
#endif
Jul 10, 2006
Jul 10, 2006
320
321
#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
Feb 10, 2006
Feb 10, 2006
322
Jul 8, 2007
Jul 8, 2007
323
#if defined(__GNUC__) && defined(i386)
Feb 10, 2006
Feb 10, 2006
324
325
326
327
328
329
330
#define SDL_memset4(dst, val, len) \
do { \
int u0, u1, u2; \
__asm__ __volatile__ ( \
"cld\n\t" \
"rep ; stosl\n\t" \
: "=&D" (u0), "=&a" (u1), "=&c" (u2) \
Feb 17, 2009
Feb 17, 2009
331
: "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, len)) \
Feb 10, 2006
Feb 10, 2006
332
333
334
335
336
337
338
339
: "memory" ); \
} while(0)
#endif
#ifndef SDL_memset4
#define SDL_memset4(dst, val, len) \
do { \
unsigned _count = (len); \
unsigned _n = (_count + 3) / 4; \
Feb 17, 2009
Feb 17, 2009
340
Uint32 *_p = SDL_static_cast(Uint32 *, dst); \
Feb 10, 2006
Feb 10, 2006
341
Uint32 _val = (val); \
Aug 7, 2009
Aug 7, 2009
342
if (len == 0) break; \
Feb 10, 2006
Feb 10, 2006
343
344
345
346
347
348
349
350
351
352
switch (_count % 4) { \
case 0: do { *_p++ = _val; \
case 3: *_p++ = _val; \
case 2: *_p++ = _val; \
case 1: *_p++ = _val; \
} while ( --_n ); \
} \
} while(0)
#endif
Jun 3, 2007
Jun 3, 2007
353
354
355
356
/* We can count on memcpy existing on Mac OS X and being well-tuned. */
#if defined(__MACH__) && defined(__APPLE__)
#define SDL_memcpy(dst, src, len) memcpy(dst, src, len)
#elif defined(__GNUC__) && defined(i386)
Feb 10, 2006
Feb 10, 2006
357
358
359
360
361
362
363
364
365
366
367
368
369
370
#define SDL_memcpy(dst, src, len) \
do { \
int u0, u1, u2; \
__asm__ __volatile__ ( \
"cld\n\t" \
"rep ; movsl\n\t" \
"testb $2,%b4\n\t" \
"je 1f\n\t" \
"movsw\n" \
"1:\ttestb $1,%b4\n\t" \
"je 2f\n\t" \
"movsb\n" \
"2:" \
: "=&c" (u0), "=&D" (u1), "=&S" (u2) \
Feb 17, 2009
Feb 17, 2009
371
: "0" (SDL_static_cast(unsigned, len)/4), "q" (len), "1" (dst),"2" (src) \
Feb 10, 2006
Feb 10, 2006
372
373
374
375
: "memory" ); \
} while(0)
#endif
#ifndef SDL_memcpy
Apr 13, 2006
Apr 13, 2006
376
#ifdef HAVE_MEMCPY
Feb 10, 2006
Feb 10, 2006
377
#define SDL_memcpy memcpy
Apr 13, 2006
Apr 13, 2006
378
#elif defined(HAVE_BCOPY)
Feb 10, 2006
Feb 10, 2006
379
380
#define SDL_memcpy(d, s, n) bcopy((s), (d), (n))
#else
Jul 10, 2006
Jul 10, 2006
381
382
extern DECLSPEC void *SDLCALL SDL_memcpy(void *dst, const void *src,
size_t len);
Feb 10, 2006
Feb 10, 2006
383
384
385
#endif
#endif
Jun 3, 2007
Jun 3, 2007
386
387
388
389
/* We can count on memcpy existing on Mac OS X and being well-tuned. */
#if defined(__MACH__) && defined(__APPLE__)
#define SDL_memcpy4(dst, src, len) memcpy(dst, src, (len)*4)
#elif defined(__GNUC__) && defined(i386)
Feb 10, 2006
Feb 10, 2006
390
391
392
393
394
395
396
#define SDL_memcpy4(dst, src, len) \
do { \
int ecx, edi, esi; \
__asm__ __volatile__ ( \
"cld\n\t" \
"rep ; movsl" \
: "=&c" (ecx), "=&D" (edi), "=&S" (esi) \
Feb 17, 2009
Feb 17, 2009
397
: "0" (SDL_static_cast(unsigned, len)), "1" (dst), "2" (src) \
Feb 10, 2006
Feb 10, 2006
398
399
400
401
402
403
404
405
406
407
408
: "memory" ); \
} while(0)
#endif
#ifndef SDL_memcpy4
#define SDL_memcpy4(dst, src, len) SDL_memcpy(dst, src, (len) << 2)
#endif
#if defined(__GNUC__) && defined(i386)
#define SDL_revcpy(dst, src, len) \
do { \
int u0, u1, u2; \
Feb 17, 2009
Feb 17, 2009
409
410
char *dstp = SDL_static_cast(char *, dst); \
char *srcp = SDL_static_cast(char *, src); \
Feb 10, 2006
Feb 10, 2006
411
412
413
414
415
int n = (len); \
if ( n >= 4 ) { \
__asm__ __volatile__ ( \
"std\n\t" \
"rep ; movsl\n\t" \
Feb 4, 2008
Feb 4, 2008
416
"cld\n\t" \
Feb 10, 2006
Feb 10, 2006
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
: "=&c" (u0), "=&D" (u1), "=&S" (u2) \
: "0" (n >> 2), \
"1" (dstp+(n-4)), "2" (srcp+(n-4)) \
: "memory" ); \
} \
switch (n & 3) { \
case 3: dstp[2] = srcp[2]; \
case 2: dstp[1] = srcp[1]; \
case 1: dstp[0] = srcp[0]; \
break; \
default: \
break; \
} \
} while(0)
#endif
#ifndef SDL_revcpy
Jul 10, 2006
Jul 10, 2006
433
434
extern DECLSPEC void *SDLCALL SDL_revcpy(void *dst, const void *src,
size_t len);
Feb 10, 2006
Feb 10, 2006
435
436
#endif
Apr 13, 2006
Apr 13, 2006
437
#ifdef HAVE_MEMMOVE
Feb 10, 2006
Feb 10, 2006
438
#define SDL_memmove memmove
Apr 13, 2006
Apr 13, 2006
439
#elif defined(HAVE_BCOPY)
Feb 10, 2006
Feb 10, 2006
440
441
442
443
444
445
446
447
448
449
450
451
#define SDL_memmove(d, s, n) bcopy((s), (d), (n))
#else
#define SDL_memmove(dst, src, len) \
do { \
if ( dst < src ) { \
SDL_memcpy(dst, src, len); \
} else { \
SDL_revcpy(dst, src, len); \
} \
} while(0)
#endif
Apr 13, 2006
Apr 13, 2006
452
#ifdef HAVE_MEMCMP
Feb 10, 2006
Feb 10, 2006
453
454
#define SDL_memcmp memcmp
#else
Jul 10, 2006
Jul 10, 2006
455
456
extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2,
size_t len);
Feb 10, 2006
Feb 10, 2006
457
458
#endif
Apr 13, 2006
Apr 13, 2006
459
#ifdef HAVE_STRLEN
Feb 10, 2006
Feb 10, 2006
460
461
462
463
464
#define SDL_strlen strlen
#else
extern DECLSPEC size_t SDLCALL SDL_strlen(const char *string);
#endif
Jul 13, 2006
Jul 13, 2006
465
466
467
#ifdef HAVE_WCSLEN
#define SDL_wcslen wcslen
#else
Aug 27, 2008
Aug 27, 2008
468
469
470
#if !defined(wchar_t) && defined(__NINTENDODS__)
#define wchar_t short /* TODO: figure out why libnds doesn't have this */
#endif
Jul 14, 2006
Jul 14, 2006
471
extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t * string);
Jul 13, 2006
Jul 13, 2006
472
473
#endif
Apr 13, 2006
Apr 13, 2006
474
#ifdef HAVE_STRLCPY
Feb 19, 2006
Feb 19, 2006
475
#define SDL_strlcpy strlcpy
Feb 10, 2006
Feb 10, 2006
476
#else
Jul 10, 2006
Jul 10, 2006
477
478
extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src,
size_t maxlen);
Feb 10, 2006
Feb 10, 2006
479
480
#endif
Apr 13, 2006
Apr 13, 2006
481
#ifdef HAVE_STRLCAT
Feb 19, 2006
Feb 19, 2006
482
#define SDL_strlcat strlcat
Feb 10, 2006
Feb 10, 2006
483
#else
Jul 10, 2006
Jul 10, 2006
484
485
extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src,
size_t maxlen);
Feb 10, 2006
Feb 10, 2006
486
487
#endif
Apr 13, 2006
Apr 13, 2006
488
#ifdef HAVE_STRDUP
Feb 10, 2006
Feb 10, 2006
489
490
#define SDL_strdup strdup
#else
Jul 10, 2006
Jul 10, 2006
491
extern DECLSPEC char *SDLCALL SDL_strdup(const char *string);
Feb 10, 2006
Feb 10, 2006
492
493
#endif
Apr 13, 2006
Apr 13, 2006
494
#ifdef HAVE__STRREV
Feb 10, 2006
Feb 10, 2006
495
496
#define SDL_strrev _strrev
#else
Jul 10, 2006
Jul 10, 2006
497
extern DECLSPEC char *SDLCALL SDL_strrev(char *string);
Feb 10, 2006
Feb 10, 2006
498
499
#endif
Apr 13, 2006
Apr 13, 2006
500
#ifdef HAVE__STRUPR
Feb 10, 2006
Feb 10, 2006
501
502
#define SDL_strupr _strupr
#else
Jul 10, 2006
Jul 10, 2006
503
extern DECLSPEC char *SDLCALL SDL_strupr(char *string);
Feb 10, 2006
Feb 10, 2006
504
505
#endif
Apr 13, 2006
Apr 13, 2006
506
#ifdef HAVE__STRLWR
Feb 10, 2006
Feb 10, 2006
507
508
#define SDL_strlwr _strlwr
#else
Jul 10, 2006
Jul 10, 2006
509
extern DECLSPEC char *SDLCALL SDL_strlwr(char *string);
Feb 10, 2006
Feb 10, 2006
510
511
#endif
Apr 13, 2006
Apr 13, 2006
512
#ifdef HAVE_STRCHR
Feb 10, 2006
Feb 10, 2006
513
#define SDL_strchr strchr
Apr 13, 2006
Apr 13, 2006
514
#elif defined(HAVE_INDEX)
Feb 10, 2006
Feb 10, 2006
515
516
#define SDL_strchr index
#else
Jul 10, 2006
Jul 10, 2006
517
extern DECLSPEC char *SDLCALL SDL_strchr(const char *string, int c);
Feb 10, 2006
Feb 10, 2006
518
519
#endif
Apr 13, 2006
Apr 13, 2006
520
#ifdef HAVE_STRRCHR
Feb 10, 2006
Feb 10, 2006
521
#define SDL_strrchr strrchr
Apr 13, 2006
Apr 13, 2006
522
#elif defined(HAVE_RINDEX)
Feb 10, 2006
Feb 10, 2006
523
524
#define SDL_strrchr rindex
#else
Jul 10, 2006
Jul 10, 2006
525
extern DECLSPEC char *SDLCALL SDL_strrchr(const char *string, int c);
Feb 10, 2006
Feb 10, 2006
526
527
#endif
Apr 13, 2006
Apr 13, 2006
528
#ifdef HAVE_STRSTR
Feb 10, 2006
Feb 10, 2006
529
530
#define SDL_strstr strstr
#else
Jul 10, 2006
Jul 10, 2006
531
532
extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack,
const char *needle);
Feb 10, 2006
Feb 10, 2006
533
534
#endif
Apr 13, 2006
Apr 13, 2006
535
#ifdef HAVE_ITOA
Feb 10, 2006
Feb 10, 2006
536
537
538
539
540
#define SDL_itoa itoa
#else
#define SDL_itoa(value, string, radix) SDL_ltoa((long)value, string, radix)
#endif
Apr 13, 2006
Apr 13, 2006
541
#ifdef HAVE__LTOA
Feb 10, 2006
Feb 10, 2006
542
543
#define SDL_ltoa _ltoa
#else
Jul 10, 2006
Jul 10, 2006
544
extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *string, int radix);
Feb 10, 2006
Feb 10, 2006
545
546
#endif
Apr 13, 2006
Apr 13, 2006
547
#ifdef HAVE__UITOA
Feb 10, 2006
Feb 10, 2006
548
549
550
551
552
#define SDL_uitoa _uitoa
#else
#define SDL_uitoa(value, string, radix) SDL_ultoa((long)value, string, radix)
#endif
Apr 13, 2006
Apr 13, 2006
553
#ifdef HAVE__ULTOA
Feb 10, 2006
Feb 10, 2006
554
555
#define SDL_ultoa _ultoa
#else
Jul 10, 2006
Jul 10, 2006
556
557
extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *string,
int radix);
Feb 10, 2006
Feb 10, 2006
558
559
#endif
Apr 13, 2006
Apr 13, 2006
560
#ifdef HAVE_STRTOL
Feb 10, 2006
Feb 10, 2006
561
562
#define SDL_strtol strtol
#else
Jul 10, 2006
Jul 10, 2006
563
564
extern DECLSPEC long SDLCALL SDL_strtol(const char *string, char **endp,
int base);
Feb 10, 2006
Feb 10, 2006
565
566
#endif
Apr 13, 2006
Apr 13, 2006
567
#ifdef HAVE_STRTOUL
Mar 1, 2006
Mar 1, 2006
568
569
#define SDL_strtoul strtoul
#else
Jul 10, 2006
Jul 10, 2006
570
571
extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *string,
char **endp, int base);
Mar 1, 2006
Mar 1, 2006
572
573
#endif
Apr 13, 2006
Apr 13, 2006
574
#ifdef SDL_HAS_64BIT_TYPE
Feb 10, 2006
Feb 10, 2006
575
Apr 13, 2006
Apr 13, 2006
576
#ifdef HAVE__I64TOA
Feb 10, 2006
Feb 10, 2006
577
578
#define SDL_lltoa _i64toa
#else
Jul 10, 2006
Jul 10, 2006
579
580
extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *string,
int radix);
Feb 10, 2006
Feb 10, 2006
581
582
#endif
Apr 13, 2006
Apr 13, 2006
583
#ifdef HAVE__UI64TOA
Feb 10, 2006
Feb 10, 2006
584
585
#define SDL_ulltoa _ui64toa
#else
Jul 10, 2006
Jul 10, 2006
586
587
extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *string,
int radix);
Feb 10, 2006
Feb 10, 2006
588
589
#endif
Apr 13, 2006
Apr 13, 2006
590
#ifdef HAVE_STRTOLL
Feb 10, 2006
Feb 10, 2006
591
592
#define SDL_strtoll strtoll
#else
Jul 10, 2006
Jul 10, 2006
593
594
extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *string, char **endp,
int base);
Feb 10, 2006
Feb 10, 2006
595
596
#endif
Apr 13, 2006
Apr 13, 2006
597
#ifdef HAVE_STRTOULL
Mar 1, 2006
Mar 1, 2006
598
599
#define SDL_strtoull strtoull
#else
Jul 10, 2006
Jul 10, 2006
600
601
extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *string, char **endp,
int base);
Mar 1, 2006
Mar 1, 2006
602
603
#endif
Feb 10, 2006
Feb 10, 2006
604
605
#endif /* SDL_HAS_64BIT_TYPE */
Apr 13, 2006
Apr 13, 2006
606
#ifdef HAVE_STRTOD
Feb 10, 2006
Feb 10, 2006
607
608
609
610
611
#define SDL_strtod strtod
#else
extern DECLSPEC double SDLCALL SDL_strtod(const char *string, char **endp);
#endif
Apr 13, 2006
Apr 13, 2006
612
#ifdef HAVE_ATOI
Feb 10, 2006
Feb 10, 2006
613
614
615
616
617
#define SDL_atoi atoi
#else
#define SDL_atoi(X) SDL_strtol(X, NULL, 0)
#endif
Apr 13, 2006
Apr 13, 2006
618
#ifdef HAVE_ATOF
Feb 10, 2006
Feb 10, 2006
619
620
621
622
623
#define SDL_atof atof
#else
#define SDL_atof(X) SDL_strtod(X, NULL)
#endif
Apr 13, 2006
Apr 13, 2006
624
#ifdef HAVE_STRCMP
Feb 10, 2006
Feb 10, 2006
625
626
627
628
629
#define SDL_strcmp strcmp
#else
extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2);
#endif
Apr 13, 2006
Apr 13, 2006
630
#ifdef HAVE_STRNCMP
Feb 10, 2006
Feb 10, 2006
631
632
#define SDL_strncmp strncmp
#else
Jul 10, 2006
Jul 10, 2006
633
634
extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2,
size_t maxlen);
Feb 10, 2006
Feb 10, 2006
635
636
#endif
Apr 13, 2006
Apr 13, 2006
637
#ifdef HAVE_STRCASECMP
Feb 10, 2006
Feb 10, 2006
638
#define SDL_strcasecmp strcasecmp
Apr 13, 2006
Apr 13, 2006
639
#elif defined(HAVE__STRICMP)
Mar 13, 2006
Mar 13, 2006
640
#define SDL_strcasecmp _stricmp
Feb 10, 2006
Feb 10, 2006
641
#else
Jul 10, 2006
Jul 10, 2006
642
643
extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1,
const char *str2);
Feb 10, 2006
Feb 10, 2006
644
645
#endif
Apr 13, 2006
Apr 13, 2006
646
#ifdef HAVE_STRNCASECMP
Mar 13, 2006
Mar 13, 2006
647
#define SDL_strncasecmp strncasecmp
Apr 13, 2006
Apr 13, 2006
648
#elif defined(HAVE__STRNICMP)
Mar 13, 2006
Mar 13, 2006
649
#define SDL_strncasecmp _strnicmp
Mar 13, 2006
Mar 13, 2006
650
#else
Jul 10, 2006
Jul 10, 2006
651
652
extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1,
const char *str2, size_t maxlen);
Mar 13, 2006
Mar 13, 2006
653
654
#endif
Apr 13, 2006
Apr 13, 2006
655
#ifdef HAVE_SSCANF
Feb 10, 2006
Feb 10, 2006
656
657
#define SDL_sscanf sscanf
#else
Jul 10, 2006
Jul 10, 2006
658
659
extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt,
...);
Feb 10, 2006
Feb 10, 2006
660
661
#endif
Apr 13, 2006
Apr 13, 2006
662
#ifdef HAVE_SNPRINTF
Feb 10, 2006
Feb 10, 2006
663
664
#define SDL_snprintf snprintf
#else
Jul 10, 2006
Jul 10, 2006
665
666
extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen,
const char *fmt, ...);
Feb 10, 2006
Feb 10, 2006
667
668
#endif
Apr 13, 2006
Apr 13, 2006
669
#ifdef HAVE_VSNPRINTF
Feb 10, 2006
Feb 10, 2006
670
671
#define SDL_vsnprintf vsnprintf
#else
Jul 10, 2006
Jul 10, 2006
672
673
extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen,
const char *fmt, va_list ap);
Feb 10, 2006
Feb 10, 2006
674
675
#endif
Jan 10, 2009
Jan 10, 2009
676
677
678
679
#ifndef HAVE_M_PI
#define M_PI 3.14159265358979323846264338327950288 /* pi */
#endif
Jan 12, 2009
Jan 12, 2009
680
681
682
683
684
685
#ifdef HAVE_CEIL
#define SDL_ceil ceil
#else
#define SDL_ceil(x) ((double)(int)((x)+0.5))
#endif
Jan 10, 2009
Jan 10, 2009
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
#ifdef HAVE_COPYSIGN
#define SDL_copysign copysign
#else
extern DECLSPEC double SDLCALL SDL_copysign(double x, double y);
#endif
#ifdef HAVE_COS
#define SDL_cos cos
#else
extern DECLSPEC double SDLCALL SDL_cos(double x);
#endif
#ifdef HAVE_COSF
#define SDL_cosf cosf
#else
#define SDL_cosf(x) (float)SDL_cos((double)x)
#endif
#ifdef HAVE_FABS
#define SDL_fabs fabs
#else
extern DECLSPEC double SDLCALL SDL_fabs(double x);
#endif
#ifdef HAVE_FLOOR
#define SDL_floor floor
#else
extern DECLSPEC double SDLCALL SDL_floor(double x);
#endif
#ifdef HAVE_LOG
#define SDL_log log
#else
extern DECLSPEC double SDLCALL SDL_log(double x);
#endif
#ifdef HAVE_POW
#define SDL_pow pow
#else
extern DECLSPEC double SDLCALL SDL_pow(double x, double y);
#endif
#ifdef HAVE_SCALBN
#define SDL_scalbn scalbn
#else
extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n);
#endif
#ifdef HAVE_SIN
#define SDL_sin sin
#else
extern DECLSPEC double SDLCALL SDL_sin(double x);
#endif
#ifdef HAVE_SINF
#define SDL_sinf sinf
#else
#define SDL_sinf(x) (float)SDL_sin((double)x)
#endif
#ifdef HAVE_SQRT
#define SDL_sqrt sqrt
#else
extern DECLSPEC double SDLCALL SDL_sqrt(double x);
#endif
Mar 13, 2006
Mar 13, 2006
752
753
754
755
756
757
/* The SDL implementation of iconv() returns these error codes */
#define SDL_ICONV_ERROR (size_t)-1
#define SDL_ICONV_E2BIG (size_t)-2
#define SDL_ICONV_EILSEQ (size_t)-3
#define SDL_ICONV_EINVAL (size_t)-4
Sep 21, 2009
Sep 21, 2009
758
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
Mar 13, 2006
Mar 13, 2006
759
760
761
762
763
#define SDL_iconv_t iconv_t
#define SDL_iconv_open iconv_open
#define SDL_iconv_close iconv_close
#else
typedef struct _SDL_iconv_t *SDL_iconv_t;
Jul 10, 2006
Jul 10, 2006
764
765
extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode,
const char *fromcode);
Mar 13, 2006
Mar 13, 2006
766
extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd);
Jun 28, 2007
Jun 28, 2007
767
768
#endif
extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf,
Jul 10, 2006
Jul 10, 2006
769
770
size_t * inbytesleft, char **outbuf,
size_t * outbytesleft);
Oct 19, 2009
Oct 19, 2009
771
772
773
774
/**
* This function converts a string between encodings in one pass, returning a
* string that must be freed with SDL_free() or NULL on error.
*/
Jul 10, 2006
Jul 10, 2006
775
776
extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode,
const char *fromcode,
Jun 28, 2007
Jun 28, 2007
777
const char *inbuf,
Jul 10, 2006
Jul 10, 2006
778
size_t inbytesleft);
Jul 4, 2007
Jul 4, 2007
779
#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
Mar 13, 2006
Mar 13, 2006
780
781
782
#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1)
#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
Feb 10, 2006
Feb 10, 2006
783
784
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
Jul 10, 2006
Jul 10, 2006
785
/* *INDENT-OFF* */
Feb 10, 2006
Feb 10, 2006
786
}
Jul 10, 2006
Jul 10, 2006
787
/* *INDENT-ON* */
Feb 10, 2006
Feb 10, 2006
788
789
790
791
#endif
#include "close_code.h"
#endif /* _SDL_stdinc_h */
Jul 10, 2006
Jul 10, 2006
792
793
/* vi: set ts=4 sw=4 expandtab: */