146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/*
246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    SDL - Simple DirectMedia Layer
346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Copyright (C) 1997-2006 Sam Lantinga
446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    This library is free software; you can redistribute it and/or
646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    modify it under the terms of the GNU Lesser General Public
746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    License as published by the Free Software Foundation; either
846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    version 2.1 of the License, or (at your option) any later version.
946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    This library is distributed in the hope that it will be useful,
1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    but WITHOUT ANY WARRANTY; without even the implied warranty of
1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Lesser General Public License for more details.
1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    You should have received a copy of the GNU Lesser General Public
1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    License along with this library; if not, write to the Free Software
1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Sam Lantinga
2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    slouken@libsdl.org
2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* This is a general header that includes C language support */
2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef _SDL_stdinc_h
2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define _SDL_stdinc_h
2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h"
2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_SYS_TYPES_H
3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <sys/types.h>
3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STDIO_H
3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <stdio.h>
3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(STDC_HEADERS)
3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <stdlib.h>
3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <stddef.h>
4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <stdarg.h>
4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# if defined(HAVE_STDLIB_H)
4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <stdlib.h>
4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# elif defined(HAVE_MALLOC_H)
4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <malloc.h>
4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# endif
4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# if defined(HAVE_STDDEF_H)
4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <stddef.h>
4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# endif
5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# if defined(HAVE_STDARG_H)
5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <stdarg.h>
5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# endif
5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRING_H
5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <memory.h>
5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# endif
5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <string.h>
5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRINGS_H
6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <strings.h>
6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(HAVE_INTTYPES_H)
6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <inttypes.h>
6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(HAVE_STDINT_H)
6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <stdint.h>
6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_CTYPE_H
6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <ctype.h>
7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_ICONV_H
7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# include <iconv.h>
7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* The number of elements in an array */
7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_arraysize(array)	(sizeof(array)/sizeof(array[0]))
7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_TABLESIZE(table)	SDL_arraysize(table)
7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Basic data types */
8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef enum SDL_bool {
8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_FALSE = 0,
8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_TRUE  = 1
8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} SDL_bool;
8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef int8_t		Sint8;
8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef uint8_t		Uint8;
8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef int16_t		Sint16;
8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef uint16_t	Uint16;
8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef int32_t		Sint32;
9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef uint32_t	Uint32;
9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef SDL_HAS_64BIT_TYPE
9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef int64_t		Sint64;
9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef SYMBIAN32_GCCE
9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef uint64_t	Uint64;
9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* This is really just a hack to prevent the compiler from complaining */
9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef struct {
10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint32 hi;
10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint32 lo;
10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} Uint64, Sint64;
10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Make sure the types really have the right sizes */
10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_COMPILE_TIME_ASSERT(name, x)               \
10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner       typedef int SDL_dummy_ ## name[(x) * 2 - 1]
10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
10946be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1);
11046be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1);
11146be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2);
11246be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2);
11346be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4);
11446be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4);
11546be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8);
11646be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8);
11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Check to make sure enums are the size of ints, for structure packing.
11946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   For both Watcom C/C++ and Borland C/C++ the compiler option that makes
12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   enums having the size of an int must be enabled.
12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Enable enums always int in CodeWarrior (for MPW use "-enum int") */
12446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef __MWERKS__
12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma enumsalwaysint on
12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef enum {
12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	DUMMY_ENUM_VALUE
13046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} SDL_DUMMY_ENUM;
13146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef __NDS__
13346be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));
13446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
13546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "begin_code.h"
13846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Set up for C function definitions, even when using C++ */
13946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef __cplusplus
14046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern "C" {
14146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
14246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
14346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_MALLOC
14446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_malloc	malloc
14546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
14646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC void * SDLCALL SDL_malloc(size_t size);
14746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
14846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
14946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_CALLOC
15046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_calloc	calloc
15146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
15246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC void * SDLCALL SDL_calloc(size_t nmemb, size_t size);
15346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
15446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
15546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_REALLOC
15646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_realloc	realloc
15746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
15846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC void * SDLCALL SDL_realloc(void *mem, size_t size);
15946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
16046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
16146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_FREE
16246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_free	free
16346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
16446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC void SDLCALL SDL_free(void *mem);
16546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
16646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
16746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(HAVE_ALLOCA) && !defined(alloca)
16846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# if defined(HAVE_ALLOCA_H)
16946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <alloca.h>
17046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# elif defined(__GNUC__)
17146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  define alloca __builtin_alloca
17246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# elif defined(_MSC_VER)
17346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <malloc.h>
17446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  define alloca _alloca
17546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# elif defined(__WATCOMC__)
17646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <malloc.h>
17746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# elif defined(__DMC__)
17846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#  include <stdlib.h>
17946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# elif defined(__AIX__)
18046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #pragma alloca
18146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# elif defined(__MRC__)
18246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   void *alloca (unsigned);
18346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# else
18446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   char *alloca ();
18546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# endif
18646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
18746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_ALLOCA
18846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_stack_alloc(type, count)    (type*)alloca(sizeof(type)*(count))
18946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_stack_free(data)
19046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
19146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_stack_alloc(type, count)    (type*)SDL_malloc(sizeof(type)*(count))
19246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_stack_free(data)            SDL_free(data)
19346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
19446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
19546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_GETENV
19646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_getenv	getenv
19746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
19846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_getenv(const char *name);
19946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
20046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
20146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_PUTENV
20246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_putenv	putenv
20346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
20446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_putenv(const char *variable);
20546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
20646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
20746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_QSORT
20846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_qsort	qsort
20946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
21046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size,
21146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner           int (*compare)(const void *, const void *));
21246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
21346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
21446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_ABS
21546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_abs		abs
21646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
21746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_abs(X)	((X) < 0 ? -(X) : (X))
21846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
21946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
22046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_min(x, y)	(((x) < (y)) ? (x) : (y))
22146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_max(x, y)	(((x) > (y)) ? (x) : (y))
22246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
22346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_CTYPE_H
22446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_isdigit(X)  isdigit(X)
22546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_isspace(X)  isspace(X)
22646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_toupper(X)  toupper(X)
22746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_tolower(X)  tolower(X)
22846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
22946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_isdigit(X)  (((X) >= '0') && ((X) <= '9'))
23046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_isspace(X)  (((X) == ' ') || ((X) == '\t') || ((X) == '\r') || ((X) == '\n'))
23146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_toupper(X)  (((X) >= 'a') && ((X) <= 'z') ? ('A'+((X)-'a')) : (X))
23246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_tolower(X)  (((X) >= 'A') && ((X) <= 'Z') ? ('a'+((X)-'A')) : (X))
23346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
23446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
23546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_MEMSET
23646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memset      memset
23746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
23846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC void * SDLCALL SDL_memset(void *dst, int c, size_t len);
23946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
24046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
24146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(__GNUC__) && defined(i386)
24246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memset4(dst, val, len)				\
24346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerdo {								\
24446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int u0, u1, u2;						\
24546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	__asm__ __volatile__ (					\
24646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"cld\n\t"					\
24746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"rep ; stosl\n\t"				\
24846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "=&D" (u0), "=&a" (u1), "=&c" (u2)		\
24946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "0" (dst), "1" (val), "2" ((Uint32)(len))	\
25046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "memory" );					\
25146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} while(0)
25246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
25346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef SDL_memset4
25446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memset4(dst, val, len)		\
25546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerdo {						\
25646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	unsigned _count = (len);		\
25746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	unsigned _n = (_count + 3) / 4;		\
25846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint32 *_p = (Uint32 *)(dst);		\
25946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint32 _val = (val);			\
26046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner        switch (_count % 4) {			\
26146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner        case 0: do {    *_p++ = _val;		\
26246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner        case 3:         *_p++ = _val;		\
26346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner        case 2:         *_p++ = _val;		\
26446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner        case 1:         *_p++ = _val;		\
26546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		} while ( --_n );		\
26646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	}					\
26746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} while(0)
26846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
26946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
27046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* We can count on memcpy existing on Mac OS X and being well-tuned. */
27146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(__MACH__) && defined(__APPLE__)
27246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memcpy(dst, src, len) memcpy(dst, src, len)
27346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(__GNUC__) && defined(i386)
27446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memcpy(dst, src, len)					  \
27546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerdo {									  \
27646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int u0, u1, u2;						  	  \
27746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	__asm__ __volatile__ (						  \
27846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"cld\n\t"						  \
27946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"rep ; movsl\n\t"					  \
28046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"testb $2,%b4\n\t"					  \
28146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"je 1f\n\t"						  \
28246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"movsw\n"						  \
28346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"1:\ttestb $1,%b4\n\t"					  \
28446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"je 2f\n\t"						  \
28546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"movsb\n"						  \
28646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"2:"							  \
28746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "=&c" (u0), "=&D" (u1), "=&S" (u2)			  \
28846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "0" ((unsigned)(len)/4), "q" (len), "1" (dst),"2" (src) \
28946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "memory" );						  \
29046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} while(0)
29146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
29246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef SDL_memcpy
29346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_MEMCPY
29446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memcpy      memcpy
29546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(HAVE_BCOPY)
29646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memcpy(d, s, n)	bcopy((s), (d), (n))
29746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
29846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC void * SDLCALL SDL_memcpy(void *dst, const void *src, size_t len);
29946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
30046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
30146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
30246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* We can count on memcpy existing on Mac OS X and being well-tuned. */
30346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(__MACH__) && defined(__APPLE__)
30446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memcpy4(dst, src, len) memcpy(dst, src, (len)*4)
30546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(__GNUC__) && defined(i386)
30646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memcpy4(dst, src, len)				\
30746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerdo {								\
30846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int ecx, edi, esi;					\
30946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	__asm__ __volatile__ (					\
31046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"cld\n\t"					\
31146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"rep ; movsl"					\
31246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "=&c" (ecx), "=&D" (edi), "=&S" (esi)		\
31346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "0" ((unsigned)(len)), "1" (dst), "2" (src)	\
31446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "memory" );					\
31546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} while(0)
31646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
31746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef SDL_memcpy4
31846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memcpy4(dst, src, len)	SDL_memcpy(dst, src, (len) << 2)
31946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
32046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
32146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(__GNUC__) && defined(i386)
32246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_revcpy(dst, src, len)			\
32346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerdo {							\
32446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int u0, u1, u2;					\
32546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	char *dstp = (char *)(dst);			\
32646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	char *srcp = (char *)(src);			\
32746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int n = (len);					\
32846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	if ( n >= 4 ) {					\
32946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	__asm__ __volatile__ (				\
33046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"std\n\t"				\
33146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		"rep ; movsl\n\t"			\
33246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "=&c" (u0), "=&D" (u1), "=&S" (u2)	\
33346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "0" (n >> 2),				\
33446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  "1" (dstp+(n-4)), "2" (srcp+(n-4))	\
33546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		: "memory" );				\
33646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	}						\
33746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	switch (n & 3) {				\
33846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		case 3: dstp[2] = srcp[2];		\
33946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		case 2: dstp[1] = srcp[1];		\
34046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		case 1: dstp[0] = srcp[0];		\
34146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner			break;				\
34246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		default:				\
34346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner			break;				\
34446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	}						\
34546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} while(0)
34646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
34746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef SDL_revcpy
34846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC void * SDLCALL SDL_revcpy(void *dst, const void *src, size_t len);
34946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
35046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
35146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_MEMMOVE
35246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memmove     memmove
35346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(HAVE_BCOPY)
35446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memmove(d, s, n)	bcopy((s), (d), (n))
35546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
35646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memmove(dst, src, len)			\
35746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerdo {							\
35846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	if ( dst < src ) {				\
35946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		SDL_memcpy(dst, src, len);		\
36046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	} else {					\
36146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		SDL_revcpy(dst, src, len);		\
36246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	}						\
36346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} while(0)
36446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
36546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
36646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_MEMCMP
36746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_memcmp      memcmp
36846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
36946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len);
37046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
37146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
37246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRLEN
37346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strlen      strlen
37446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
37546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC size_t SDLCALL SDL_strlen(const char *string);
37646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
37746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
37846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRLCPY
37946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strlcpy     strlcpy
38046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
38146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen);
38246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
38346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
38446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRLCAT
38546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strlcat    strlcat
38646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
38746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen);
38846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
38946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
39046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRDUP
39146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strdup     strdup
39246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
39346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_strdup(const char *string);
39446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
39546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
39646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE__STRREV
39746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strrev      _strrev
39846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
39946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_strrev(char *string);
40046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
40146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
40246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE__STRUPR
40346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strupr      _strupr
40446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
40546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_strupr(char *string);
40646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
40746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
40846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE__STRLWR
40946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strlwr      _strlwr
41046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
41146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_strlwr(char *string);
41246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
41346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
41446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRCHR
41546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strchr      strchr
41646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(HAVE_INDEX)
41746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strchr      index
41846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
41946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_strchr(const char *string, int c);
42046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
42146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
42246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRRCHR
42346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strrchr     strrchr
42446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(HAVE_RINDEX)
42546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strrchr     rindex
42646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
42746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_strrchr(const char *string, int c);
42846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
42946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
43046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRSTR
43146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strstr      strstr
43246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
43346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_strstr(const char *haystack, const char *needle);
43446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
43546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
43646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_ITOA
43746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_itoa        itoa
43846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
43946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_itoa(value, string, radix)	SDL_ltoa((long)value, string, radix)
44046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
44146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
44246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE__LTOA
44346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_ltoa        _ltoa
44446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
44546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_ltoa(long value, char *string, int radix);
44646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
44746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
44846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE__UITOA
44946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_uitoa       _uitoa
45046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
45146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_uitoa(value, string, radix)	SDL_ultoa((long)value, string, radix)
45246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
45346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
45446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE__ULTOA
45546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_ultoa       _ultoa
45646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
45746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_ultoa(unsigned long value, char *string, int radix);
45846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
45946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
46046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRTOL
46146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strtol      strtol
46246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
46346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC long SDLCALL SDL_strtol(const char *string, char **endp, int base);
46446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
46546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
46646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRTOUL
46746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strtoul      strtoul
46846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
46946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *string, char **endp, int base);
47046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
47146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
47246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef SDL_HAS_64BIT_TYPE
47346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
47446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE__I64TOA
47546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_lltoa       _i64toa
47646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
47746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char* SDLCALL SDL_lltoa(Sint64 value, char *string, int radix);
47846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
47946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
48046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE__UI64TOA
48146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_ulltoa      _ui64toa
48246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
48346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char* SDLCALL SDL_ulltoa(Uint64 value, char *string, int radix);
48446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
48546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
48646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRTOLL
48746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strtoll     strtoll
48846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
48946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *string, char **endp, int base);
49046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
49146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
49246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRTOULL
49346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strtoull     strtoull
49446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
49546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *string, char **endp, int base);
49646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
49746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
49846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* SDL_HAS_64BIT_TYPE */
49946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
50046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRTOD
50146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strtod      strtod
50246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
50346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC double SDLCALL SDL_strtod(const char *string, char **endp);
50446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
50546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
50646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_ATOI
50746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_atoi        atoi
50846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
50946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_atoi(X)     SDL_strtol(X, NULL, 0)
51046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
51146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
51246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_ATOF
51346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_atof        atof
51446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
51546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_atof(X)     SDL_strtod(X, NULL)
51646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
51746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
51846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRCMP
51946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strcmp      strcmp
52046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
52146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2);
52246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
52346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
52446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRNCMP
52546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strncmp     strncmp
52646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
52746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen);
52846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
52946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
53046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRCASECMP
53146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strcasecmp  strcasecmp
53246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(HAVE__STRICMP)
53346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strcasecmp  _stricmp
53446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
53546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2);
53646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
53746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
53846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_STRNCASECMP
53946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strncasecmp strncasecmp
54046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#elif defined(HAVE__STRNICMP)
54146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_strncasecmp _strnicmp
54246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
54346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t maxlen);
54446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
54546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
54646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_SSCANF
54746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_sscanf      sscanf
54846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
54946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...);
55046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
55146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
55246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_SNPRINTF
55346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_snprintf    snprintf
55446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
55546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...);
55646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
55746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
55846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_VSNPRINTF
55946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_vsnprintf   vsnprintf
56046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
56146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap);
56246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
56346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
56446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* The SDL implementation of iconv() returns these error codes */
56546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_ICONV_ERROR		(size_t)-1
56646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_ICONV_E2BIG		(size_t)-2
56746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_ICONV_EILSEQ	(size_t)-3
56846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_ICONV_EINVAL	(size_t)-4
56946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
57046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef HAVE_ICONV
57146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_iconv_t     iconv_t
57246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_iconv_open  iconv_open
57346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_iconv_close iconv_close
57446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else
57546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef struct _SDL_iconv_t *SDL_iconv_t;
57646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, const char *fromcode);
57746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd);
57846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
57946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
58046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* This function converts a string between encodings in one pass, returning a
58146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   string that must be freed with SDL_free() or NULL on error.
58246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
58346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft);
58446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_iconv_utf8_locale(S)	SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
58546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_iconv_utf8_ucs2(S)		(Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1)
58646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_iconv_utf8_ucs4(S)		(Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
58746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
58846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Ends C function definitions when using C++ */
58946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef __cplusplus
59046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner}
59146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
59246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "close_code.h"
59346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
59446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* _SDL_stdinc_h */
595