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