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