home *** CD-ROM | disk | FTP | other *** search
/ RISCWORLD 7 / RISCWORLD_VOL7.iso / Software / Issue6 / SDL.ZIP / !SDL / include / SDL / h / SDL_stdinc < prev    next >
Encoding:
Text File  |  2006-09-20  |  15.1 KB  |  587 lines

  1. /*
  2.     SDL - Simple DirectMedia Layer
  3.     Copyright (C) 1997-2006 Sam Lantinga
  4.  
  5.     This library is free software; you can redistribute it and/or
  6.     modify it under the terms of the GNU Lesser General Public
  7.     License as published by the Free Software Foundation; either
  8.     version 2.1 of the License, or (at your option) any later version.
  9.  
  10.     This library is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.     Lesser General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU Lesser General Public
  16.     License along with this library; if not, write to the Free Software
  17.     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  18.  
  19.     Sam Lantinga
  20.     slouken@libsdl.org
  21. */
  22.  
  23. /* This is a general header that includes C language support */
  24.  
  25. #ifndef _SDL_stdinc_h
  26. #define _SDL_stdinc_h
  27.  
  28. #include "SDL_config.h"
  29.  
  30.  
  31. #ifdef HAVE_SYS_TYPES_H
  32. #include <sys/types.h>
  33. #endif
  34. #ifdef HAVE_STDIO_H
  35. #include <stdio.h>
  36. #endif
  37. #if defined(STDC_HEADERS)
  38. # include <stdlib.h>
  39. # include <stddef.h>
  40. # include <stdarg.h>
  41. #else
  42. # if defined(HAVE_STDLIB_H)
  43. #  include <stdlib.h>
  44. # elif defined(HAVE_MALLOC_H)
  45. #  include <malloc.h>
  46. # endif
  47. # if defined(HAVE_STDDEF_H)
  48. #  include <stddef.h>
  49. # endif
  50. # if defined(HAVE_STDARG_H)
  51. #  include <stdarg.h>
  52. # endif
  53. #endif
  54. #ifdef HAVE_STRING_H
  55. # if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
  56. #  include <memory.h>
  57. # endif
  58. # include <string.h>
  59. #endif
  60. #ifdef HAVE_STRINGS_H
  61. # include <strings.h>
  62. #endif
  63. #if defined(HAVE_INTTYPES_H)
  64. # include <inttypes.h>
  65. #elif defined(HAVE_STDINT_H)
  66. # include <stdint.h>
  67. #endif
  68. #ifdef HAVE_CTYPE_H
  69. # include <ctype.h>
  70. #endif
  71. #ifdef HAVE_ICONV_H
  72. # include <iconv.h>
  73. #endif
  74.  
  75. /* The number of elements in an array */
  76. #define SDL_arraysize(array)    (sizeof(array)/sizeof(array[0]))
  77. #define SDL_TABLESIZE(table)    SDL_arraysize(table)
  78.  
  79. /* Basic data types */
  80. typedef enum SDL_bool {
  81.     SDL_FALSE = 0,
  82.     SDL_TRUE  = 1
  83. } SDL_bool;
  84.  
  85. typedef int8_t        Sint8;
  86. typedef uint8_t        Uint8;
  87. typedef int16_t        Sint16;
  88. typedef uint16_t    Uint16;
  89. typedef int32_t        Sint32;
  90. typedef uint32_t    Uint32;
  91.  
  92. #ifdef SDL_HAS_64BIT_TYPE
  93. typedef int64_t        Sint64;
  94. typedef uint64_t    Uint64;
  95. #else
  96. /* This is really just a hack to prevent the compiler from complaining */
  97. typedef struct {
  98.     Uint32 hi;
  99.     Uint32 lo;
  100. } Uint64, Sint64;
  101. #endif
  102.  
  103. /* Make sure the types really have the right sizes */
  104. #define SDL_COMPILE_TIME_ASSERT(name, x)               \
  105.        typedef int SDL_dummy_ ## name[(x) * 2 - 1]
  106.  
  107. SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1);
  108. SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1);
  109. SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2);
  110. SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2);
  111. SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4);
  112. SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4);
  113. SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8);
  114. SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8);
  115.  
  116. /* Check to make sure enums are the size of ints, for structure packing.
  117.    For both Watcom C/C++ and Borland C/C++ the compiler option that makes
  118.    enums having the size of an int must be enabled.
  119.    This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
  120. */
  121. /* Enable enums always int in CodeWarrior (for MPW use "-enum int") */
  122. #ifdef __MWERKS__
  123. #pragma enumsalwaysint on
  124. #endif
  125.  
  126. typedef enum {
  127.     DUMMY_ENUM_VALUE
  128. } SDL_DUMMY_ENUM;
  129.  
  130. SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));
  131.  
  132.  
  133. #include "begin_code.h"
  134. /* Set up for C function definitions, even when using C++ */
  135. #ifdef __cplusplus
  136. extern "C" {
  137. #endif
  138.  
  139. #ifdef HAVE_MALLOC
  140. #define SDL_malloc    malloc
  141. #else
  142. extern DECLSPEC void * SDLCALL SDL_malloc(size_t size);
  143. #endif
  144.  
  145. #ifdef HAVE_CALLOC
  146. #define SDL_calloc    calloc
  147. #else
  148. extern DECLSPEC void * SDLCALL SDL_calloc(size_t nmemb, size_t size);
  149. #endif
  150.  
  151. #ifdef HAVE_REALLOC
  152. #define SDL_realloc    realloc
  153. #else
  154. extern DECLSPEC void * SDLCALL SDL_realloc(void *mem, size_t size);
  155. #endif
  156.  
  157. #ifdef HAVE_FREE
  158. #define SDL_free    free
  159. #else
  160. extern DECLSPEC void SDLCALL SDL_free(void *mem);
  161. #endif
  162.  
  163. #if defined(HAVE_ALLOCA) && !defined(alloca)
  164. # if defined(HAVE_ALLOCA_H)
  165. #  include <alloca.h>
  166. # elif defined(__GNUC__)
  167. #  define alloca __builtin_alloca
  168. # elif defined(_MSC_VER)
  169. #  include <malloc.h>
  170. #  define alloca _alloca
  171. # elif defined(__WATCOMC__)
  172. #  include <malloc.h>
  173. # elif defined(__DMC__)
  174. #  include <stdlib.h>
  175. # elif defined(__AIX__)
  176.   #pragma alloca
  177. # elif defined(__MRC__)
  178.    void *alloca (unsigned);
  179. # else
  180.    char *alloca ();
  181. # endif
  182. #endif
  183. #ifdef HAVE_ALLOCA
  184. #define SDL_stack_alloc(type, count)    (type*)alloca(sizeof(type)*count)
  185. #define SDL_stack_free(data)
  186. #else
  187. #define SDL_stack_alloc(type, count)    (type*)SDL_malloc(sizeof(type)*count)
  188. #define SDL_stack_free(data)            SDL_free(data)
  189. #endif
  190.  
  191. #ifdef HAVE_GETENV
  192. #define SDL_getenv    getenv
  193. #else
  194. extern DECLSPEC char * SDLCALL SDL_getenv(const char *name);
  195. #endif
  196.  
  197. #ifdef HAVE_PUTENV
  198. #define SDL_putenv    putenv
  199. #else
  200. extern DECLSPEC int SDLCALL SDL_putenv(const char *variable);
  201. #endif
  202.  
  203. #ifdef HAVE_QSORT
  204. #define SDL_qsort    qsort
  205. #else
  206. extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size,
  207.            int (*compare)(const void *, const void *));
  208. #endif
  209.  
  210. #ifdef HAVE_ABS
  211. #define SDL_abs        abs
  212. #else
  213. #define SDL_abs(X)    ((X) < 0 ? -(X) : (X))
  214. #endif
  215.  
  216. #define SDL_min(x, y)    (((x) < (y)) ? (x) : (y))
  217. #define SDL_max(x, y)    (((x) > (y)) ? (x) : (y))
  218.  
  219. #ifdef HAVE_CTYPE_H
  220. #define SDL_isdigit(X)  isdigit(X)
  221. #define SDL_isspace(X)  isspace(X)
  222. #define SDL_toupper(X)  toupper(X)
  223. #define SDL_tolower(X)  tolower(X)
  224. #else
  225. #define SDL_isdigit(X)  (((X) >= '0') && ((X) <= '9'))
  226. #define SDL_isspace(X)  (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n'))
  227. #define SDL_toupper(X)  (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X))
  228. #define SDL_tolower(X)  (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X))
  229. #endif
  230.  
  231. #ifdef HAVE_MEMSET
  232. #define SDL_memset      memset
  233. #else
  234. extern DECLSPEC void * SDLCALL SDL_memset(void *dst, int c, size_t len);
  235. #endif
  236.  
  237. #if defined(__GNUC__) && defined(i386)
  238. #define SDL_memset4(dst, val, len)                \
  239. do {                                \
  240.     int u0, u1, u2;                        \
  241.     __asm__ __volatile__ (                    \
  242.         "cld\n\t"                    \
  243.         "rep ; stosl\n\t"                \
  244.         : "=&D" (u0), "=&a" (u1), "=&c" (u2)        \
  245.         : "0" (dst), "1" (val), "2" ((Uint32)(len))    \
  246.         : "memory" );                    \
  247. } while(0)
  248. #endif
  249. #ifndef SDL_memset4
  250. #define SDL_memset4(dst, val, len)        \
  251. do {                        \
  252.     unsigned _count = (len);        \
  253.     unsigned _n = (_count + 3) / 4;        \
  254.     Uint32 *_p = (Uint32 *)(dst);        \
  255.     Uint32 _val = (val);            \
  256.         switch (_count % 4) {            \
  257.         case 0: do {    *_p++ = _val;        \
  258.         case 3:         *_p++ = _val;        \
  259.         case 2:         *_p++ = _val;        \
  260.         case 1:         *_p++ = _val;        \
  261.         } while ( --_n );        \
  262.     }                    \
  263. } while(0)
  264. #endif
  265.  
  266. #if defined(__GNUC__) && defined(i386)
  267. #define SDL_memcpy(dst, src, len)                      \
  268. do {                                      \
  269.     int u0, u1, u2;                                \
  270.     __asm__ __volatile__ (                          \
  271.         "cld\n\t"                          \
  272.         "rep ; movsl\n\t"                      \
  273.         "testb $2,%b4\n\t"                      \
  274.         "je 1f\n\t"                          \
  275.         "movsw\n"                          \
  276.         "1:\ttestb $1,%b4\n\t"                      \
  277.         "je 2f\n\t"                          \
  278.         "movsb\n"                          \
  279.         "2:"                              \
  280.         : "=&c" (u0), "=&D" (u1), "=&S" (u2)              \
  281.         : "0" ((unsigned)(len)/4), "q" (len), "1" (dst),"2" (src) \
  282.         : "memory" );                          \
  283. } while(0)
  284. #endif
  285. #ifndef SDL_memcpy
  286. #ifdef HAVE_MEMCPY
  287. #define SDL_memcpy      memcpy
  288. #elif defined(HAVE_BCOPY)
  289. #define SDL_memcpy(d, s, n)    bcopy((s), (d), (n))
  290. #else
  291. extern DECLSPEC void * SDLCALL SDL_memcpy(void *dst, const void *src, size_t len);
  292. #endif
  293. #endif
  294.  
  295. #if defined(__GNUC__) && defined(i386)
  296. #define SDL_memcpy4(dst, src, len)                \
  297. do {                                \
  298.     int ecx, edi, esi;                    \
  299.     __asm__ __volatile__ (                    \
  300.         "cld\n\t"                    \
  301.         "rep ; movsl"                    \
  302.         : "=&c" (ecx), "=&D" (edi), "=&S" (esi)        \
  303.         : "0" ((unsigned)(len)), "1" (dst), "2" (src)    \
  304.         : "memory" );                    \
  305. } while(0)
  306. #endif
  307. #ifndef SDL_memcpy4
  308. #define SDL_memcpy4(dst, src, len)    SDL_memcpy(dst, src, (len) << 2)
  309. #endif
  310.  
  311. #if defined(__GNUC__) && defined(i386)
  312. #define SDL_revcpy(dst, src, len)            \
  313. do {                            \
  314.     int u0, u1, u2;                    \
  315.     char *dstp = (char *)(dst);            \
  316.     char *srcp = (char *)(src);            \
  317.     int n = (len);                    \
  318.     if ( n >= 4 ) {                    \
  319.     __asm__ __volatile__ (                \
  320.         "std\n\t"                \
  321.         "rep ; movsl\n\t"            \
  322.         : "=&c" (u0), "=&D" (u1), "=&S" (u2)    \
  323.         : "0" (n >> 2),                \
  324.           "1" (dstp+(n-4)), "2" (srcp+(n-4))    \
  325.         : "memory" );                \
  326.     }                        \
  327.     switch (n & 3) {                \
  328.         case 3: dstp[2] = srcp[2];        \
  329.         case 2: dstp[1] = srcp[1];        \
  330.         case 1: dstp[0] = srcp[0];        \
  331.             break;                \
  332.         default:                \
  333.             break;                \
  334.     }                        \
  335. } while(0)
  336. #endif
  337. #ifndef SDL_revcpy
  338. extern DECLSPEC void * SDLCALL SDL_revcpy(void *dst, const void *src, size_t len);
  339. #endif
  340.  
  341. #ifdef HAVE_MEMMOVE
  342. #define SDL_memmove     memmove
  343. #elif defined(HAVE_BCOPY)
  344. #define SDL_memmove(d, s, n)    bcopy((s), (d), (n))
  345. #else
  346. #define SDL_memmove(dst, src, len)            \
  347. do {                            \
  348.     if ( dst < src ) {                \
  349.         SDL_memcpy(dst, src, len);        \
  350.     } else {                    \
  351.         SDL_revcpy(dst, src, len);        \
  352.     }                        \
  353. } while(0)
  354. #endif
  355.  
  356. #ifdef HAVE_MEMCMP
  357. #define SDL_memcmp      memcmp
  358. #else
  359. extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len);
  360. #endif
  361.  
  362. #ifdef HAVE_STRLEN
  363. #define SDL_strlen      strlen
  364. #else
  365. extern DECLSPEC size_t SDLCALL SDL_strlen(const char *string);
  366. #endif
  367.  
  368. #ifdef HAVE_STRLCPY
  369. #define SDL_strlcpy     strlcpy
  370. #else
  371. extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen);
  372. #endif
  373.  
  374. #ifdef HAVE_STRLCAT
  375. #define SDL_strlcat    strlcat
  376. #else
  377. extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen);
  378. #endif
  379.  
  380. #ifdef HAVE_STRDUP
  381. #define SDL_strdup     strdup
  382. #else
  383. extern DECLSPEC char * SDLCALL SDL_strdup(const char *string);
  384. #endif
  385.  
  386. #ifdef HAVE__STRREV
  387. #define SDL_strrev      _strrev
  388. #else
  389. extern DECLSPEC char * SDLCALL SDL_strrev(char *string);
  390. #endif
  391.  
  392. #ifdef HAVE__STRUPR
  393. #define SDL_strupr      _strupr
  394. #else
  395. extern DECLSPEC char * SDLCALL SDL_strupr(char *string);
  396. #endif
  397.  
  398. #ifdef HAVE__STRLWR
  399. #define SDL_strlwr      _strlwr
  400. #else
  401. extern DECLSPEC char * SDLCALL SDL_strlwr(char *string);
  402. #endif
  403.  
  404. #ifdef HAVE_STRCHR
  405. #define SDL_strchr      strchr
  406. #elif defined(HAVE_INDEX)
  407. #define SDL_strchr      index
  408. #else
  409. extern DECLSPEC char * SDLCALL SDL_strchr(const char *string, int c);
  410. #endif
  411.  
  412. #ifdef HAVE_STRRCHR
  413. #define SDL_strrchr     strrchr
  414. #elif defined(HAVE_RINDEX)
  415. #define SDL_strrchr     rindex
  416. #else
  417. extern DECLSPEC char * SDLCALL SDL_strrchr(const char *string, int c);
  418. #endif
  419.  
  420. #ifdef HAVE_STRSTR
  421. #define SDL_strstr      strstr
  422. #else
  423. extern DECLSPEC char * SDLCALL SDL_strstr(const char *haystack, const char *needle);
  424. #endif
  425.  
  426. #ifdef HAVE_ITOA
  427. #define SDL_itoa        itoa
  428. #else
  429. #define SDL_itoa(value, string, radix)    SDL_ltoa((long)value, string, radix)
  430. #endif
  431.  
  432. #ifdef HAVE__LTOA
  433. #define SDL_ltoa        _ltoa
  434. #else
  435. extern DECLSPEC char * SDLCALL SDL_ltoa(long value, char *string, int radix);
  436. #endif
  437.  
  438. #ifdef HAVE__UITOA
  439. #define SDL_uitoa       _uitoa
  440. #else
  441. #define SDL_uitoa(value, string, radix)    SDL_ultoa((long)value, string, radix)
  442. #endif
  443.  
  444. #ifdef HAVE__ULTOA
  445. #define SDL_ultoa       _ultoa
  446. #else
  447. extern DECLSPEC char * SDLCALL SDL_ultoa(unsigned long value, char *string, int radix);
  448. #endif
  449.  
  450. #ifdef HAVE_STRTOL
  451. #define SDL_strtol      strtol
  452. #else
  453. extern DECLSPEC long SDLCALL SDL_strtol(const char *string, char **endp, int base);
  454. #endif
  455.  
  456. #ifdef HAVE_STRTOUL
  457. #define SDL_strtoul      strtoul
  458. #else
  459. extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *string, char **endp, int base);
  460. #endif
  461.  
  462. #ifdef SDL_HAS_64BIT_TYPE
  463.  
  464. #ifdef HAVE__I64TOA
  465. #define SDL_lltoa       _i64toa
  466. #else
  467. extern DECLSPEC char* SDLCALL SDL_lltoa(Sint64 value, char *string, int radix);
  468. #endif
  469.  
  470. #ifdef HAVE__UI64TOA
  471. #define SDL_ulltoa      _ui64toa
  472. #else
  473. extern DECLSPEC char* SDLCALL SDL_ulltoa(Uint64 value, char *string, int radix);
  474. #endif
  475.  
  476. #ifdef HAVE_STRTOLL
  477. #define SDL_strtoll     strtoll
  478. #else
  479. extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *string, char **endp, int base);
  480. #endif
  481.  
  482. #ifdef HAVE_STRTOULL
  483. #define SDL_strtoull     strtoull
  484. #else
  485. extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *string, char **endp, int base);
  486. #endif
  487.  
  488. #endif /* SDL_HAS_64BIT_TYPE */
  489.  
  490. #ifdef HAVE_STRTOD
  491. #define SDL_strtod      strtod
  492. #else
  493. extern DECLSPEC double SDLCALL SDL_strtod(const char *string, char **endp);
  494. #endif
  495.  
  496. #ifdef HAVE_ATOI
  497. #define SDL_atoi        atoi
  498. #else
  499. #define SDL_atoi(X)     SDL_strtol(X, NULL, 0)
  500. #endif
  501.  
  502. #ifdef HAVE_ATOF
  503. #define SDL_atof        atof
  504. #else
  505. #define SDL_atof(X)     SDL_strtod(X, NULL)
  506. #endif
  507.  
  508. #ifdef HAVE_STRCMP
  509. #define SDL_strcmp      strcmp
  510. #else
  511. extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2);
  512. #endif
  513.  
  514. #ifdef HAVE_STRNCMP
  515. #define SDL_strncmp     strncmp
  516. #else
  517. extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen);
  518. #endif
  519.  
  520. #ifdef HAVE_STRCASECMP
  521. #define SDL_strcasecmp  strcasecmp
  522. #elif defined(HAVE__STRICMP)
  523. #define SDL_strcasecmp  _stricmp
  524. #else
  525. extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2);
  526. #endif
  527.  
  528. #ifdef HAVE_STRNCASECMP
  529. #define SDL_strncasecmp strncasecmp
  530. #elif defined(HAVE__STRNICMP)
  531. #define SDL_strncasecmp _strnicmp
  532. #else
  533. extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t maxlen);
  534. #endif
  535.  
  536. #ifdef HAVE_SSCANF
  537. #define SDL_sscanf      sscanf
  538. #else
  539. extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...);
  540. #endif
  541.  
  542. #ifdef HAVE_SNPRINTF
  543. #define SDL_snprintf    snprintf
  544. #else
  545. extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...);
  546. #endif
  547.  
  548. #ifdef HAVE_VSNPRINTF
  549. #define SDL_vsnprintf   vsnprintf
  550. #else
  551. extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap);
  552. #endif
  553.  
  554. /* The SDL implementation of iconv() returns these error codes */
  555. #define SDL_ICONV_ERROR        (size_t)-1
  556. #define SDL_ICONV_E2BIG        (size_t)-2
  557. #define SDL_ICONV_EILSEQ    (size_t)-3
  558. #define SDL_ICONV_EINVAL    (size_t)-4
  559.  
  560. #ifdef HAVE_ICONV
  561. #define SDL_iconv_t     iconv_t
  562. #define SDL_iconv_open  iconv_open
  563. #define SDL_iconv_close iconv_close
  564. extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
  565. #else
  566. typedef struct _SDL_iconv_t *SDL_iconv_t;
  567. extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, const char *fromcode);
  568. extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd);
  569. extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
  570. #endif
  571. /* This function converts a string between encodings in one pass, returning a
  572.    string that must be freed with SDL_free() or NULL on error.
  573. */
  574. extern DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, char *inbuf, size_t inbytesleft);
  575. #define SDL_iconv_utf8_ascii(S)        SDL_iconv_string("ASCII", "UTF-8", S, SDL_strlen(S)+1)
  576. #define SDL_iconv_utf8_latin1(S)    SDL_iconv_string("LATIN1", "UTF-8", S, SDL_strlen(S)+1)
  577. #define SDL_iconv_utf8_ucs2(S)        (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1)
  578. #define SDL_iconv_utf8_ucs4(S)        (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
  579.  
  580. /* Ends C function definitions when using C++ */
  581. #ifdef __cplusplus
  582. }
  583. #endif
  584. #include "close_code.h"
  585.  
  586. #endif /* _SDL_stdinc_h */
  587.