This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
SDL_stdinc.h
792 lines (700 loc) · 20.7 KB
1
2
/*
SDL - Simple DirectMedia Layer
3
Copyright (C) 1997-2010 Sam Lantinga
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
*/
23
/**
24
25
26
* \file SDL_stdinc.h
*
* This is a general header that includes C language support.
27
*/
28
29
30
31
32
33
34
#ifndef _SDL_stdinc_h
#define _SDL_stdinc_h
#include "SDL_config.h"
35
#ifdef HAVE_SYS_TYPES_H
36
37
#include <sys/types.h>
#endif
38
#ifdef HAVE_STDIO_H
39
40
#include <stdio.h>
#endif
41
#if defined(STDC_HEADERS)
42
43
44
45
# include <stdlib.h>
# include <stddef.h>
# include <stdarg.h>
#else
46
47
48
49
# if defined(HAVE_STDLIB_H)
# include <stdlib.h>
# elif defined(HAVE_MALLOC_H)
# include <malloc.h>
50
# endif
51
52
# if defined(HAVE_STDDEF_H)
# include <stddef.h>
53
# endif
54
55
# if defined(HAVE_STDARG_H)
# include <stdarg.h>
56
57
# endif
#endif
58
59
60
#ifdef HAVE_STRING_H
# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
# include <memory.h>
61
62
63
# endif
# include <string.h>
#endif
64
#ifdef HAVE_STRINGS_H
65
66
# include <strings.h>
#endif
67
#if defined(HAVE_INTTYPES_H)
68
# include <inttypes.h>
69
#elif defined(HAVE_STDINT_H)
70
71
# include <stdint.h>
#endif
72
#ifdef HAVE_CTYPE_H
73
74
# include <ctype.h>
#endif
75
76
77
#ifdef HAVE_MATH_H
# include <math.h>
#endif
78
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
79
80
# include <iconv.h>
#endif
81
82
83
84
/**
* The number of elements in an array.
*/
85
86
87
#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
#define SDL_TABLESIZE(table) SDL_arraysize(table)
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).
*/
/*@{*/
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
102
103
/*@}*//*Cast operators*/
104
105
106
107
108
109
110
/* Define a four character code as a Uint32 */
#define SDL_FOURCC(A, B, C, D) \
((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \
(SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \
(SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \
(SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24))
111
112
113
114
/**
* \name Basic data types
*/
/*@{*/
115
116
typedef enum
117
118
119
{
SDL_FALSE = 0,
SDL_TRUE = 1
120
121
} SDL_bool;
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**
* \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;
146
147
#ifdef SDL_HAS_64BIT_TYPE
148
149
150
151
152
153
154
155
156
157
/**
* \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;
158
159
#else
/* This is really just a hack to prevent the compiler from complaining */
160
161
typedef Sint32 Sint64;
typedef Uint32 Uint64;
162
163
#endif
164
165
166
/*@}*//*Basic data types*/
167
168
#define SDL_COMPILE_TIME_ASSERT(name, x) \
typedef int SDL_dummy_ ## name[(x) * 2 - 1]
169
/** \cond */
170
#ifndef DOXYGEN_SHOULD_IGNORE_THIS
171
172
173
174
175
176
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);
177
178
179
#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 */
180
181
SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8);
SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8);
182
#endif
183
#endif /* DOXYGEN_SHOULD_IGNORE_THIS */
184
/** \endcond */
185
186
187
188
189
190
191
192
193
194
195
/* 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
196
/** \cond */
197
#ifndef DOXYGEN_SHOULD_IGNORE_THIS
198
#ifndef __NINTENDODS__ /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */
199
200
201
typedef enum
{
DUMMY_ENUM_VALUE
202
203
204
} SDL_DUMMY_ENUM;
SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));
205
#endif
206
#endif /* DOXYGEN_SHOULD_IGNORE_THIS */
207
/** \endcond */
208
209
210
211
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
212
/* *INDENT-OFF* */
213
extern "C" {
214
/* *INDENT-ON* */
215
216
#endif
217
#ifdef HAVE_MALLOC
218
219
#define SDL_malloc malloc
#else
220
extern DECLSPEC void *SDLCALL SDL_malloc(size_t size);
221
222
#endif
223
#ifdef HAVE_CALLOC
224
225
#define SDL_calloc calloc
#else
226
extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size);
227
228
#endif
229
#ifdef HAVE_REALLOC
230
231
#define SDL_realloc realloc
#else
232
extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size);
233
234
#endif
235
#ifdef HAVE_FREE
236
237
238
239
240
#define SDL_free free
#else
extern DECLSPEC void SDLCALL SDL_free(void *mem);
#endif
241
242
#if defined(HAVE_ALLOCA) && !defined(alloca)
# if defined(HAVE_ALLOCA_H)
243
# include <alloca.h>
244
# elif defined(__GNUC__)
245
# define alloca __builtin_alloca
246
# elif defined(_MSC_VER)
247
248
# include <malloc.h>
# define alloca _alloca
249
250
# elif defined(__WATCOMC__)
# include <malloc.h>
251
252
# elif defined(__BORLANDC__)
# include <malloc.h>
253
254
# elif defined(__DMC__)
# include <stdlib.h>
255
# elif defined(__AIX__)
256
#pragma alloca
257
# elif defined(__MRC__)
258
void *alloca(unsigned);
259
# else
260
char *alloca();
261
262
# endif
#endif
263
#ifdef HAVE_ALLOCA
264
#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
265
266
#define SDL_stack_free(data)
#else
267
#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count))
268
269
270
#define SDL_stack_free(data) SDL_free(data)
#endif
271
#ifdef HAVE_GETENV
272
273
#define SDL_getenv getenv
#else
274
extern DECLSPEC char *SDLCALL SDL_getenv(const char *name);
275
276
#endif
277
278
279
/* SDL_putenv() has moved to SDL_compat. */
#ifdef HAVE_SETENV
#define SDL_setenv setenv
280
#else
281
282
extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value,
int overwrite);
283
284
#endif
285
#ifdef HAVE_QSORT
286
287
288
#define SDL_qsort qsort
#else
extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size,
289
290
int (*compare) (const void *,
const void *));
291
292
#endif
293
#ifdef HAVE_ABS
294
295
296
297
298
#define SDL_abs abs
#else
#define SDL_abs(X) ((X) < 0 ? -(X) : (X))
#endif
299
300
301
#define SDL_min(x, y) (((x) < (y)) ? (x) : (y))
#define SDL_max(x, y) (((x) > (y)) ? (x) : (y))
302
#ifdef HAVE_CTYPE_H
303
304
305
306
307
308
309
310
311
312
313
#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
314
#ifdef HAVE_MEMSET
315
316
#define SDL_memset memset
#else
317
extern DECLSPEC void *SDLCALL SDL_memset(void *dst, int c, size_t len);
318
#endif
319
320
#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
321
322
#if defined(__GNUC__) && defined(i386)
323
324
325
326
327
328
329
#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) \
330
: "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, len)) \
331
332
333
334
335
336
337
338
: "memory" ); \
} while(0)
#endif
#ifndef SDL_memset4
#define SDL_memset4(dst, val, len) \
do { \
unsigned _count = (len); \
unsigned _n = (_count + 3) / 4; \
339
Uint32 *_p = SDL_static_cast(Uint32 *, dst); \
340
Uint32 _val = (val); \
341
if (len == 0) break; \
342
343
344
345
346
347
348
349
350
351
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
352
353
354
355
/* 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)
356
357
358
359
360
361
362
363
364
365
366
367
368
369
#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) \
370
: "0" (SDL_static_cast(unsigned, len)/4), "q" (len), "1" (dst),"2" (src) \
371
372
373
374
: "memory" ); \
} while(0)
#endif
#ifndef SDL_memcpy
375
#ifdef HAVE_MEMCPY
376
#define SDL_memcpy memcpy
377
#elif defined(HAVE_BCOPY)
378
379
#define SDL_memcpy(d, s, n) bcopy((s), (d), (n))
#else
380
381
extern DECLSPEC void *SDLCALL SDL_memcpy(void *dst, const void *src,
size_t len);
382
383
384
#endif
#endif
385
386
387
388
/* 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)
389
390
391
392
393
394
395
#define SDL_memcpy4(dst, src, len) \
do { \
int ecx, edi, esi; \
__asm__ __volatile__ ( \
"cld\n\t" \
"rep ; movsl" \
: "=&c" (ecx), "=&D" (edi), "=&S" (esi) \
396
: "0" (SDL_static_cast(unsigned, len)), "1" (dst), "2" (src) \
397
398
399
400
401
402
403
404
405
406
407
: "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; \
408
409
char *dstp = SDL_static_cast(char *, dst); \
char *srcp = SDL_static_cast(char *, src); \
410
411
412
413
414
int n = (len); \
if ( n >= 4 ) { \
__asm__ __volatile__ ( \
"std\n\t" \
"rep ; movsl\n\t" \
415
"cld\n\t" \
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
: "=&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
432
433
extern DECLSPEC void *SDLCALL SDL_revcpy(void *dst, const void *src,
size_t len);
434
435
#endif
436
#ifdef HAVE_MEMMOVE
437
#define SDL_memmove memmove
438
#elif defined(HAVE_BCOPY)
439
440
441
442
443
444
445
446
447
448
449
450
#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
451
#ifdef HAVE_MEMCMP
452
453
#define SDL_memcmp memcmp
#else
454
455
extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2,
size_t len);
456
457
#endif
458
#ifdef HAVE_STRLEN
459
460
461
462
463
#define SDL_strlen strlen
#else
extern DECLSPEC size_t SDLCALL SDL_strlen(const char *string);
#endif
464
465
466
#ifdef HAVE_WCSLEN
#define SDL_wcslen wcslen
#else
467
468
469
#if !defined(wchar_t) && defined(__NINTENDODS__)
#define wchar_t short /* TODO: figure out why libnds doesn't have this */
#endif
470
extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t * string);
471
472
#endif
473
#ifdef HAVE_STRLCPY
474
#define SDL_strlcpy strlcpy
475
#else
476
477
extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src,
size_t maxlen);
478
479
#endif
480
#ifdef HAVE_STRLCAT
481
#define SDL_strlcat strlcat
482
#else
483
484
extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src,
size_t maxlen);
485
486
#endif
487
#ifdef HAVE_STRDUP
488
489
#define SDL_strdup strdup
#else
490
extern DECLSPEC char *SDLCALL SDL_strdup(const char *string);
491
492
#endif
493
#ifdef HAVE__STRREV
494
495
#define SDL_strrev _strrev
#else
496
extern DECLSPEC char *SDLCALL SDL_strrev(char *string);
497
498
#endif
499
#ifdef HAVE__STRUPR
500
501
#define SDL_strupr _strupr
#else
502
extern DECLSPEC char *SDLCALL SDL_strupr(char *string);
503
504
#endif
505
#ifdef HAVE__STRLWR
506
507
#define SDL_strlwr _strlwr
#else
508
extern DECLSPEC char *SDLCALL SDL_strlwr(char *string);
509
510
#endif
511
#ifdef HAVE_STRCHR
512
#define SDL_strchr strchr
513
#elif defined(HAVE_INDEX)
514
515
#define SDL_strchr index
#else
516
extern DECLSPEC char *SDLCALL SDL_strchr(const char *string, int c);
517
518
#endif
519
#ifdef HAVE_STRRCHR
520
#define SDL_strrchr strrchr
521
#elif defined(HAVE_RINDEX)
522
523
#define SDL_strrchr rindex
#else
524
extern DECLSPEC char *SDLCALL SDL_strrchr(const char *string, int c);
525
526
#endif
527
#ifdef HAVE_STRSTR
528
529
#define SDL_strstr strstr
#else
530
531
extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack,
const char *needle);
532
533
#endif
534
#ifdef HAVE_ITOA
535
536
537
538
539
#define SDL_itoa itoa
#else
#define SDL_itoa(value, string, radix) SDL_ltoa((long)value, string, radix)
#endif
540
#ifdef HAVE__LTOA
541
542
#define SDL_ltoa _ltoa
#else
543
extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *string, int radix);
544
545
#endif
546
#ifdef HAVE__UITOA
547
548
549
550
551
#define SDL_uitoa _uitoa
#else
#define SDL_uitoa(value, string, radix) SDL_ultoa((long)value, string, radix)
#endif
552
#ifdef HAVE__ULTOA
553
554
#define SDL_ultoa _ultoa
#else
555
556
extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *string,
int radix);
557
558
#endif
559
#ifdef HAVE_STRTOL
560
561
#define SDL_strtol strtol
#else
562
563
extern DECLSPEC long SDLCALL SDL_strtol(const char *string, char **endp,
int base);
564
565
#endif
566
#ifdef HAVE_STRTOUL
567
568
#define SDL_strtoul strtoul
#else
569
570
extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *string,
char **endp, int base);
571
572
#endif
573
#ifdef SDL_HAS_64BIT_TYPE
574
575
#ifdef HAVE__I64TOA
576
577
#define SDL_lltoa _i64toa
#else
578
579
extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *string,
int radix);
580
581
#endif
582
#ifdef HAVE__UI64TOA
583
584
#define SDL_ulltoa _ui64toa
#else
585
586
extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *string,
int radix);
587
588
#endif
589
#ifdef HAVE_STRTOLL
590
591
#define SDL_strtoll strtoll
#else
592
593
extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *string, char **endp,
int base);
594
595
#endif
596
#ifdef HAVE_STRTOULL
597
598
#define SDL_strtoull strtoull
#else
599
600
extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *string, char **endp,
int base);
601
602
#endif
603
604
#endif /* SDL_HAS_64BIT_TYPE */
605
#ifdef HAVE_STRTOD
606
607
608
609
610
#define SDL_strtod strtod
#else
extern DECLSPEC double SDLCALL SDL_strtod(const char *string, char **endp);
#endif
611
#ifdef HAVE_ATOI
612
613
614
615
616
#define SDL_atoi atoi
#else
#define SDL_atoi(X) SDL_strtol(X, NULL, 0)
#endif
617
#ifdef HAVE_ATOF
618
619
620
621
622
#define SDL_atof atof
#else
#define SDL_atof(X) SDL_strtod(X, NULL)
#endif
623
#ifdef HAVE_STRCMP
624
625
626
627
628
#define SDL_strcmp strcmp
#else
extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2);
#endif
629
#ifdef HAVE_STRNCMP
630
631
#define SDL_strncmp strncmp
#else
632
633
extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2,
size_t maxlen);
634
635
#endif
636
#ifdef HAVE_STRCASECMP
637
#define SDL_strcasecmp strcasecmp
638
#elif defined(HAVE__STRICMP)
639
#define SDL_strcasecmp _stricmp
640
#else
641
642
extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1,
const char *str2);
643
644
#endif
645
#ifdef HAVE_STRNCASECMP
646
#define SDL_strncasecmp strncasecmp
647
#elif defined(HAVE__STRNICMP)
648
#define SDL_strncasecmp _strnicmp
649
#else
650
651
extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1,
const char *str2, size_t maxlen);
652
653
#endif
654
#ifdef HAVE_SSCANF
655
656
#define SDL_sscanf sscanf
#else
657
658
extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt,
...);
659
660
#endif
661
#ifdef HAVE_SNPRINTF
662
663
#define SDL_snprintf snprintf
#else
664
665
extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen,
const char *fmt, ...);
666
667
#endif
668
#ifdef HAVE_VSNPRINTF
669
670
#define SDL_vsnprintf vsnprintf
#else
671
672
extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen,
const char *fmt, va_list ap);
673
674
#endif
675
676
677
678
#ifndef HAVE_M_PI
#define M_PI 3.14159265358979323846264338327950288 /* pi */
#endif
679
680
681
682
683
684
#ifdef HAVE_CEIL
#define SDL_ceil ceil
#else
#define SDL_ceil(x) ((double)(int)((x)+0.5))
#endif
685
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
#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
751
752
753
754
755
756
/* 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
757
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
758
759
760
761
762
#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;
763
764
extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode,
const char *fromcode);
765
extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd);
766
767
#endif
extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf,
768
769
size_t * inbytesleft, char **outbuf,
size_t * outbytesleft);
770
771
772
773
/**
* This function converts a string between encodings in one pass, returning a
* string that must be freed with SDL_free() or NULL on error.
*/
774
775
extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode,
const char *fromcode,
776
const char *inbuf,
777
size_t inbytesleft);
778
#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
779
780
781
#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)
782
783
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
784
/* *INDENT-OFF* */
785
}
786
/* *INDENT-ON* */
787
788
789
790
#endif
#include "close_code.h"
#endif /* _SDL_stdinc_h */
791
792
/* vi: set ts=4 sw=4 expandtab: */