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