include/SDL_stdinc.h
author Sam Lantinga <slouken@libsdl.org>
Mon, 21 Sep 2009 11:04:32 +0000
branchSDL-1.2
changeset 4222 6823a52d06fa
parent 4217 4c4113c2162c
child 4224 6637846f3f7f
permissions -rw-r--r--
Fixed bug #714

fuzzyTew@gmail.com 2009-03-14 15:18:45 PDT

Created an attachment (id=305) [details]
patch to change HAVE_ICONV to HAVE_ICONV_H

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