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