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