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