native_audio 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +7 -0
  2. data/assets/include/GL/glew.h +26427 -0
  3. data/assets/include/GLES2/gl2.h +656 -0
  4. data/assets/include/GLES2/gl2ext.h +3949 -0
  5. data/assets/include/GLES2/gl2ext_angle.h +701 -0
  6. data/assets/include/GLES2/gl2platform.h +27 -0
  7. data/assets/include/GLES3/gl3.h +1192 -0
  8. data/assets/include/GLES3/gl31.h +1507 -0
  9. data/assets/include/GLES3/gl32.h +1808 -0
  10. data/assets/include/GLES3/gl3platform.h +27 -0
  11. data/assets/include/KHR/khrplatform.h +290 -0
  12. data/assets/include/SDL2/SDL.h +233 -0
  13. data/assets/include/SDL2/SDL_assert.h +326 -0
  14. data/assets/include/SDL2/SDL_atomic.h +415 -0
  15. data/assets/include/SDL2/SDL_audio.h +1500 -0
  16. data/assets/include/SDL2/SDL_bits.h +126 -0
  17. data/assets/include/SDL2/SDL_blendmode.h +198 -0
  18. data/assets/include/SDL2/SDL_clipboard.h +141 -0
  19. data/assets/include/SDL2/SDL_config.h +61 -0
  20. data/assets/include/SDL2/SDL_config_android.h +194 -0
  21. data/assets/include/SDL2/SDL_config_emscripten.h +218 -0
  22. data/assets/include/SDL2/SDL_config_iphoneos.h +217 -0
  23. data/assets/include/SDL2/SDL_config_macosx.h +277 -0
  24. data/assets/include/SDL2/SDL_config_minimal.h +95 -0
  25. data/assets/include/SDL2/SDL_config_ngage.h +89 -0
  26. data/assets/include/SDL2/SDL_config_os2.h +207 -0
  27. data/assets/include/SDL2/SDL_config_pandora.h +141 -0
  28. data/assets/include/SDL2/SDL_config_windows.h +331 -0
  29. data/assets/include/SDL2/SDL_config_wingdk.h +253 -0
  30. data/assets/include/SDL2/SDL_config_winrt.h +220 -0
  31. data/assets/include/SDL2/SDL_config_xbox.h +235 -0
  32. data/assets/include/SDL2/SDL_copying.h +20 -0
  33. data/assets/include/SDL2/SDL_cpuinfo.h +594 -0
  34. data/assets/include/SDL2/SDL_egl.h +2352 -0
  35. data/assets/include/SDL2/SDL_endian.h +348 -0
  36. data/assets/include/SDL2/SDL_error.h +163 -0
  37. data/assets/include/SDL2/SDL_events.h +1166 -0
  38. data/assets/include/SDL2/SDL_filesystem.h +149 -0
  39. data/assets/include/SDL2/SDL_gamecontroller.h +1074 -0
  40. data/assets/include/SDL2/SDL_gesture.h +117 -0
  41. data/assets/include/SDL2/SDL_guid.h +100 -0
  42. data/assets/include/SDL2/SDL_haptic.h +1341 -0
  43. data/assets/include/SDL2/SDL_hidapi.h +451 -0
  44. data/assets/include/SDL2/SDL_hints.h +2569 -0
  45. data/assets/include/SDL2/SDL_image.h +2173 -0
  46. data/assets/include/SDL2/SDL_joystick.h +1066 -0
  47. data/assets/include/SDL2/SDL_keyboard.h +353 -0
  48. data/assets/include/SDL2/SDL_keycode.h +358 -0
  49. data/assets/include/SDL2/SDL_loadso.h +115 -0
  50. data/assets/include/SDL2/SDL_locale.h +103 -0
  51. data/assets/include/SDL2/SDL_log.h +404 -0
  52. data/assets/include/SDL2/SDL_main.h +275 -0
  53. data/assets/include/SDL2/SDL_messagebox.h +193 -0
  54. data/assets/include/SDL2/SDL_metal.h +113 -0
  55. data/assets/include/SDL2/SDL_misc.h +79 -0
  56. data/assets/include/SDL2/SDL_mixer.h +2784 -0
  57. data/assets/include/SDL2/SDL_mouse.h +465 -0
  58. data/assets/include/SDL2/SDL_mutex.h +471 -0
  59. data/assets/include/SDL2/SDL_name.h +33 -0
  60. data/assets/include/SDL2/SDL_opengl.h +2132 -0
  61. data/assets/include/SDL2/SDL_opengl_glext.h +13209 -0
  62. data/assets/include/SDL2/SDL_opengles.h +39 -0
  63. data/assets/include/SDL2/SDL_opengles2.h +52 -0
  64. data/assets/include/SDL2/SDL_opengles2_gl2.h +656 -0
  65. data/assets/include/SDL2/SDL_opengles2_gl2ext.h +4033 -0
  66. data/assets/include/SDL2/SDL_opengles2_gl2platform.h +27 -0
  67. data/assets/include/SDL2/SDL_opengles2_khrplatform.h +311 -0
  68. data/assets/include/SDL2/SDL_pixels.h +644 -0
  69. data/assets/include/SDL2/SDL_platform.h +261 -0
  70. data/assets/include/SDL2/SDL_power.h +88 -0
  71. data/assets/include/SDL2/SDL_quit.h +58 -0
  72. data/assets/include/SDL2/SDL_rect.h +376 -0
  73. data/assets/include/SDL2/SDL_render.h +1919 -0
  74. data/assets/include/SDL2/SDL_revision.h +6 -0
  75. data/assets/include/SDL2/SDL_rwops.h +841 -0
  76. data/assets/include/SDL2/SDL_scancode.h +438 -0
  77. data/assets/include/SDL2/SDL_sensor.h +322 -0
  78. data/assets/include/SDL2/SDL_shape.h +155 -0
  79. data/assets/include/SDL2/SDL_stdinc.h +830 -0
  80. data/assets/include/SDL2/SDL_surface.h +997 -0
  81. data/assets/include/SDL2/SDL_system.h +623 -0
  82. data/assets/include/SDL2/SDL_syswm.h +386 -0
  83. data/assets/include/SDL2/SDL_test.h +69 -0
  84. data/assets/include/SDL2/SDL_test_assert.h +105 -0
  85. data/assets/include/SDL2/SDL_test_common.h +236 -0
  86. data/assets/include/SDL2/SDL_test_compare.h +69 -0
  87. data/assets/include/SDL2/SDL_test_crc32.h +124 -0
  88. data/assets/include/SDL2/SDL_test_font.h +168 -0
  89. data/assets/include/SDL2/SDL_test_fuzzer.h +386 -0
  90. data/assets/include/SDL2/SDL_test_harness.h +134 -0
  91. data/assets/include/SDL2/SDL_test_images.h +78 -0
  92. data/assets/include/SDL2/SDL_test_log.h +67 -0
  93. data/assets/include/SDL2/SDL_test_md5.h +129 -0
  94. data/assets/include/SDL2/SDL_test_memory.h +63 -0
  95. data/assets/include/SDL2/SDL_test_random.h +115 -0
  96. data/assets/include/SDL2/SDL_thread.h +464 -0
  97. data/assets/include/SDL2/SDL_timer.h +222 -0
  98. data/assets/include/SDL2/SDL_touch.h +150 -0
  99. data/assets/include/SDL2/SDL_ttf.h +2316 -0
  100. data/assets/include/SDL2/SDL_types.h +29 -0
  101. data/assets/include/SDL2/SDL_version.h +204 -0
  102. data/assets/include/SDL2/SDL_video.h +2150 -0
  103. data/assets/include/SDL2/SDL_vulkan.h +215 -0
  104. data/assets/include/SDL2/begin_code.h +187 -0
  105. data/assets/include/SDL2/close_code.h +40 -0
  106. data/assets/macos/universal/lib/libFLAC.a +0 -0
  107. data/assets/macos/universal/lib/libSDL2.a +0 -0
  108. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  109. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  110. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  111. data/assets/macos/universal/lib/libmodplug.a +0 -0
  112. data/assets/macos/universal/lib/libmpg123.a +0 -0
  113. data/assets/macos/universal/lib/libogg.a +0 -0
  114. data/assets/macos/universal/lib/libvorbis.a +0 -0
  115. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  116. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  117. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  118. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  119. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  120. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  121. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  122. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  123. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  124. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  125. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  126. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +1 -0
  127. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  128. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  129. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  130. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  131. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  132. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  133. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  134. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  135. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  136. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  137. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  138. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  139. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  140. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  141. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  142. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +1 -0
  143. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  144. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  145. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  146. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  147. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  148. data/ext/Makefile +270 -0
  149. data/ext/audio.c +80 -0
  150. data/ext/audio.o +0 -0
  151. data/ext/extconf.h +3 -0
  152. data/ext/extconf.rb +177 -0
  153. data/ext/mkmf.log +7 -0
  154. data/lib/audio.bundle +0 -0
  155. data/lib/native_audio.rb +50 -0
  156. metadata +198 -0
@@ -0,0 +1,830 @@
1
+ /*
2
+ Simple DirectMedia Layer
3
+ Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
4
+
5
+ This software is provided 'as-is', without any express or implied
6
+ warranty. In no event will the authors be held liable for any damages
7
+ arising from the use of this software.
8
+
9
+ Permission is granted to anyone to use this software for any purpose,
10
+ including commercial applications, and to alter it and redistribute it
11
+ freely, subject to the following restrictions:
12
+
13
+ 1. The origin of this software must not be misrepresented; you must not
14
+ claim that you wrote the original software. If you use this software
15
+ in a product, an acknowledgment in the product documentation would be
16
+ appreciated but is not required.
17
+ 2. Altered source versions must be plainly marked as such, and must not be
18
+ misrepresented as being the original software.
19
+ 3. This notice may not be removed or altered from any source distribution.
20
+ */
21
+
22
+ /**
23
+ * \file SDL_stdinc.h
24
+ *
25
+ * This is a general header that includes C language support.
26
+ */
27
+
28
+ #ifndef SDL_stdinc_h_
29
+ #define SDL_stdinc_h_
30
+
31
+ #include "SDL_config.h"
32
+
33
+ #ifdef __APPLE__
34
+ #ifndef _DARWIN_C_SOURCE
35
+ #define _DARWIN_C_SOURCE 1 /* for memset_pattern4() */
36
+ #endif
37
+ #endif
38
+
39
+ #ifdef HAVE_SYS_TYPES_H
40
+ #include <sys/types.h>
41
+ #endif
42
+ #ifdef HAVE_STDIO_H
43
+ #include <stdio.h>
44
+ #endif
45
+ #if defined(STDC_HEADERS)
46
+ # include <stdlib.h>
47
+ # include <stddef.h>
48
+ # include <stdarg.h>
49
+ #else
50
+ # if defined(HAVE_STDLIB_H)
51
+ # include <stdlib.h>
52
+ # elif defined(HAVE_MALLOC_H)
53
+ # include <malloc.h>
54
+ # endif
55
+ # if defined(HAVE_STDDEF_H)
56
+ # include <stddef.h>
57
+ # endif
58
+ # if defined(HAVE_STDARG_H)
59
+ # include <stdarg.h>
60
+ # endif
61
+ #endif
62
+ #ifdef HAVE_STRING_H
63
+ # if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H)
64
+ # include <memory.h>
65
+ # endif
66
+ # include <string.h>
67
+ #endif
68
+ #ifdef HAVE_STRINGS_H
69
+ # include <strings.h>
70
+ #endif
71
+ #ifdef HAVE_WCHAR_H
72
+ # include <wchar.h>
73
+ #endif
74
+ #if defined(HAVE_INTTYPES_H)
75
+ # include <inttypes.h>
76
+ #elif defined(HAVE_STDINT_H)
77
+ # include <stdint.h>
78
+ #endif
79
+ #ifdef HAVE_CTYPE_H
80
+ # include <ctype.h>
81
+ #endif
82
+ #ifdef HAVE_MATH_H
83
+ # if defined(_MSC_VER)
84
+ /* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on
85
+ Visual Studio. See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx
86
+ for more information.
87
+ */
88
+ # define _USE_MATH_DEFINES
89
+ # endif
90
+ # include <math.h>
91
+ #endif
92
+ #ifdef HAVE_FLOAT_H
93
+ # include <float.h>
94
+ #endif
95
+ #if defined(HAVE_ALLOCA) && !defined(alloca)
96
+ # if defined(HAVE_ALLOCA_H)
97
+ # include <alloca.h>
98
+ # elif defined(__GNUC__)
99
+ # define alloca __builtin_alloca
100
+ # elif defined(_MSC_VER)
101
+ # include <malloc.h>
102
+ # define alloca _alloca
103
+ # elif defined(__WATCOMC__)
104
+ # include <malloc.h>
105
+ # elif defined(__BORLANDC__)
106
+ # include <malloc.h>
107
+ # elif defined(__DMC__)
108
+ # include <stdlib.h>
109
+ # elif defined(__AIX__)
110
+ #pragma alloca
111
+ # elif defined(__MRC__)
112
+ void *alloca(unsigned);
113
+ # else
114
+ char *alloca();
115
+ # endif
116
+ #endif
117
+
118
+ #ifdef SIZE_MAX
119
+ # define SDL_SIZE_MAX SIZE_MAX
120
+ #else
121
+ # define SDL_SIZE_MAX ((size_t) -1)
122
+ #endif
123
+
124
+ /**
125
+ * Check if the compiler supports a given builtin.
126
+ * Supported by virtually all clang versions and recent gcc. Use this
127
+ * instead of checking the clang version if possible.
128
+ */
129
+ #ifdef __has_builtin
130
+ #define _SDL_HAS_BUILTIN(x) __has_builtin(x)
131
+ #else
132
+ #define _SDL_HAS_BUILTIN(x) 0
133
+ #endif
134
+
135
+ /**
136
+ * The number of elements in an array.
137
+ */
138
+ #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
139
+ #define SDL_TABLESIZE(table) SDL_arraysize(table)
140
+
141
+ /**
142
+ * Macro useful for building other macros with strings in them
143
+ *
144
+ * e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n")
145
+ */
146
+ #define SDL_STRINGIFY_ARG(arg) #arg
147
+
148
+ /**
149
+ * \name Cast operators
150
+ *
151
+ * Use proper C++ casts when compiled as C++ to be compatible with the option
152
+ * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above).
153
+ */
154
+ /* @{ */
155
+ #ifdef __cplusplus
156
+ #define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression)
157
+ #define SDL_static_cast(type, expression) static_cast<type>(expression)
158
+ #define SDL_const_cast(type, expression) const_cast<type>(expression)
159
+ #else
160
+ #define SDL_reinterpret_cast(type, expression) ((type)(expression))
161
+ #define SDL_static_cast(type, expression) ((type)(expression))
162
+ #define SDL_const_cast(type, expression) ((type)(expression))
163
+ #endif
164
+ /* @} *//* Cast operators */
165
+
166
+ /* Define a four character code as a Uint32 */
167
+ #define SDL_FOURCC(A, B, C, D) \
168
+ ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \
169
+ (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \
170
+ (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \
171
+ (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24))
172
+
173
+ /**
174
+ * \name Basic data types
175
+ */
176
+ /* @{ */
177
+
178
+ #ifdef __CC_ARM
179
+ /* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */
180
+ #define SDL_FALSE 0
181
+ #define SDL_TRUE 1
182
+ typedef int SDL_bool;
183
+ #else
184
+ typedef enum
185
+ {
186
+ SDL_FALSE = 0,
187
+ SDL_TRUE = 1
188
+ } SDL_bool;
189
+ #endif
190
+
191
+ /**
192
+ * \brief A signed 8-bit integer type.
193
+ */
194
+ #define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */
195
+ #define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */
196
+ typedef int8_t Sint8;
197
+ /**
198
+ * \brief An unsigned 8-bit integer type.
199
+ */
200
+ #define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */
201
+ #define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */
202
+ typedef uint8_t Uint8;
203
+ /**
204
+ * \brief A signed 16-bit integer type.
205
+ */
206
+ #define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */
207
+ #define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */
208
+ typedef int16_t Sint16;
209
+ /**
210
+ * \brief An unsigned 16-bit integer type.
211
+ */
212
+ #define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */
213
+ #define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */
214
+ typedef uint16_t Uint16;
215
+ /**
216
+ * \brief A signed 32-bit integer type.
217
+ */
218
+ #define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */
219
+ #define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */
220
+ typedef int32_t Sint32;
221
+ /**
222
+ * \brief An unsigned 32-bit integer type.
223
+ */
224
+ #define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */
225
+ #define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */
226
+ typedef uint32_t Uint32;
227
+
228
+ /**
229
+ * \brief A signed 64-bit integer type.
230
+ */
231
+ #define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */
232
+ #define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */
233
+ typedef int64_t Sint64;
234
+ /**
235
+ * \brief An unsigned 64-bit integer type.
236
+ */
237
+ #define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */
238
+ #define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */
239
+ typedef uint64_t Uint64;
240
+
241
+ /* @} *//* Basic data types */
242
+
243
+ /**
244
+ * \name Floating-point constants
245
+ */
246
+ /* @{ */
247
+
248
+ #ifdef FLT_EPSILON
249
+ #define SDL_FLT_EPSILON FLT_EPSILON
250
+ #else
251
+ #define SDL_FLT_EPSILON 1.1920928955078125e-07F /* 0x0.000002p0 */
252
+ #endif
253
+
254
+ /* @} *//* Floating-point constants */
255
+
256
+ /* Make sure we have macros for printing width-based integers.
257
+ * <stdint.h> should define these but this is not true all platforms.
258
+ * (for example win32) */
259
+ #ifndef SDL_PRIs64
260
+ #ifdef PRIs64
261
+ #define SDL_PRIs64 PRIs64
262
+ #elif defined(__WIN32__) || defined(__GDK__)
263
+ #define SDL_PRIs64 "I64d"
264
+ #elif defined(__LINUX__) && defined(__LP64__)
265
+ #define SDL_PRIs64 "ld"
266
+ #else
267
+ #define SDL_PRIs64 "lld"
268
+ #endif
269
+ #endif
270
+ #ifndef SDL_PRIu64
271
+ #ifdef PRIu64
272
+ #define SDL_PRIu64 PRIu64
273
+ #elif defined(__WIN32__) || defined(__GDK__)
274
+ #define SDL_PRIu64 "I64u"
275
+ #elif defined(__LINUX__) && defined(__LP64__)
276
+ #define SDL_PRIu64 "lu"
277
+ #else
278
+ #define SDL_PRIu64 "llu"
279
+ #endif
280
+ #endif
281
+ #ifndef SDL_PRIx64
282
+ #ifdef PRIx64
283
+ #define SDL_PRIx64 PRIx64
284
+ #elif defined(__WIN32__) || defined(__GDK__)
285
+ #define SDL_PRIx64 "I64x"
286
+ #elif defined(__LINUX__) && defined(__LP64__)
287
+ #define SDL_PRIx64 "lx"
288
+ #else
289
+ #define SDL_PRIx64 "llx"
290
+ #endif
291
+ #endif
292
+ #ifndef SDL_PRIX64
293
+ #ifdef PRIX64
294
+ #define SDL_PRIX64 PRIX64
295
+ #elif defined(__WIN32__) || defined(__GDK__)
296
+ #define SDL_PRIX64 "I64X"
297
+ #elif defined(__LINUX__) && defined(__LP64__)
298
+ #define SDL_PRIX64 "lX"
299
+ #else
300
+ #define SDL_PRIX64 "llX"
301
+ #endif
302
+ #endif
303
+ #ifndef SDL_PRIs32
304
+ #ifdef PRId32
305
+ #define SDL_PRIs32 PRId32
306
+ #else
307
+ #define SDL_PRIs32 "d"
308
+ #endif
309
+ #endif
310
+ #ifndef SDL_PRIu32
311
+ #ifdef PRIu32
312
+ #define SDL_PRIu32 PRIu32
313
+ #else
314
+ #define SDL_PRIu32 "u"
315
+ #endif
316
+ #endif
317
+ #ifndef SDL_PRIx32
318
+ #ifdef PRIx32
319
+ #define SDL_PRIx32 PRIx32
320
+ #else
321
+ #define SDL_PRIx32 "x"
322
+ #endif
323
+ #endif
324
+ #ifndef SDL_PRIX32
325
+ #ifdef PRIX32
326
+ #define SDL_PRIX32 PRIX32
327
+ #else
328
+ #define SDL_PRIX32 "X"
329
+ #endif
330
+ #endif
331
+
332
+ /* Annotations to help code analysis tools */
333
+ #ifdef SDL_DISABLE_ANALYZE_MACROS
334
+ #define SDL_IN_BYTECAP(x)
335
+ #define SDL_INOUT_Z_CAP(x)
336
+ #define SDL_OUT_Z_CAP(x)
337
+ #define SDL_OUT_CAP(x)
338
+ #define SDL_OUT_BYTECAP(x)
339
+ #define SDL_OUT_Z_BYTECAP(x)
340
+ #define SDL_PRINTF_FORMAT_STRING
341
+ #define SDL_SCANF_FORMAT_STRING
342
+ #define SDL_PRINTF_VARARG_FUNC( fmtargnumber )
343
+ #define SDL_SCANF_VARARG_FUNC( fmtargnumber )
344
+ #else
345
+ #if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */
346
+ #include <sal.h>
347
+
348
+ #define SDL_IN_BYTECAP(x) _In_bytecount_(x)
349
+ #define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x)
350
+ #define SDL_OUT_Z_CAP(x) _Out_z_cap_(x)
351
+ #define SDL_OUT_CAP(x) _Out_cap_(x)
352
+ #define SDL_OUT_BYTECAP(x) _Out_bytecap_(x)
353
+ #define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x)
354
+
355
+ #define SDL_PRINTF_FORMAT_STRING _Printf_format_string_
356
+ #define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_
357
+ #else
358
+ #define SDL_IN_BYTECAP(x)
359
+ #define SDL_INOUT_Z_CAP(x)
360
+ #define SDL_OUT_Z_CAP(x)
361
+ #define SDL_OUT_CAP(x)
362
+ #define SDL_OUT_BYTECAP(x)
363
+ #define SDL_OUT_Z_BYTECAP(x)
364
+ #define SDL_PRINTF_FORMAT_STRING
365
+ #define SDL_SCANF_FORMAT_STRING
366
+ #endif
367
+ #if defined(__GNUC__)
368
+ #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 )))
369
+ #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 )))
370
+ #else
371
+ #define SDL_PRINTF_VARARG_FUNC( fmtargnumber )
372
+ #define SDL_SCANF_VARARG_FUNC( fmtargnumber )
373
+ #endif
374
+ #endif /* SDL_DISABLE_ANALYZE_MACROS */
375
+
376
+ #ifndef SDL_COMPILE_TIME_ASSERT
377
+ #if defined(__cplusplus)
378
+ #if (__cplusplus >= 201103L)
379
+ #define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x)
380
+ #endif
381
+ #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
382
+ #define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x)
383
+ #endif
384
+ #endif /* !SDL_COMPILE_TIME_ASSERT */
385
+
386
+ #ifndef SDL_COMPILE_TIME_ASSERT
387
+ /* universal, but may trigger -Wunused-local-typedefs */
388
+ #define SDL_COMPILE_TIME_ASSERT(name, x) \
389
+ typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1]
390
+ #endif
391
+
392
+ /** \cond */
393
+ #ifndef DOXYGEN_SHOULD_IGNORE_THIS
394
+ SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1);
395
+ SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1);
396
+ SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2);
397
+ SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2);
398
+ SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4);
399
+ SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4);
400
+ SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8);
401
+ SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8);
402
+ #endif /* DOXYGEN_SHOULD_IGNORE_THIS */
403
+ /** \endcond */
404
+
405
+ /* Check to make sure enums are the size of ints, for structure packing.
406
+ For both Watcom C/C++ and Borland C/C++ the compiler option that makes
407
+ enums having the size of an int must be enabled.
408
+ This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
409
+ */
410
+
411
+ /** \cond */
412
+ #ifndef DOXYGEN_SHOULD_IGNORE_THIS
413
+ #if !defined(__ANDROID__) && !defined(__VITA__) && !defined(__3DS__)
414
+ /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */
415
+ typedef enum
416
+ {
417
+ DUMMY_ENUM_VALUE
418
+ } SDL_DUMMY_ENUM;
419
+
420
+ SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));
421
+ #endif
422
+ #endif /* DOXYGEN_SHOULD_IGNORE_THIS */
423
+ /** \endcond */
424
+
425
+ #include "begin_code.h"
426
+ /* Set up for C function definitions, even when using C++ */
427
+ #ifdef __cplusplus
428
+ extern "C" {
429
+ #endif
430
+
431
+ #ifdef HAVE_ALLOCA
432
+ #define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
433
+ #define SDL_stack_free(data)
434
+ #else
435
+ #define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count))
436
+ #define SDL_stack_free(data) SDL_free(data)
437
+ #endif
438
+
439
+ extern DECLSPEC void *SDLCALL SDL_malloc(size_t size);
440
+ extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size);
441
+ extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size);
442
+ extern DECLSPEC void SDLCALL SDL_free(void *mem);
443
+
444
+ typedef void *(SDLCALL *SDL_malloc_func)(size_t size);
445
+ typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size);
446
+ typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size);
447
+ typedef void (SDLCALL *SDL_free_func)(void *mem);
448
+
449
+ /**
450
+ * Get the original set of SDL memory functions
451
+ *
452
+ * \since This function is available since SDL 2.24.0.
453
+ */
454
+ extern DECLSPEC void SDLCALL SDL_GetOriginalMemoryFunctions(SDL_malloc_func *malloc_func,
455
+ SDL_calloc_func *calloc_func,
456
+ SDL_realloc_func *realloc_func,
457
+ SDL_free_func *free_func);
458
+
459
+ /**
460
+ * Get the current set of SDL memory functions
461
+ *
462
+ * \since This function is available since SDL 2.0.7.
463
+ */
464
+ extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func,
465
+ SDL_calloc_func *calloc_func,
466
+ SDL_realloc_func *realloc_func,
467
+ SDL_free_func *free_func);
468
+
469
+ /**
470
+ * Replace SDL's memory allocation functions with a custom set
471
+ *
472
+ * \since This function is available since SDL 2.0.7.
473
+ */
474
+ extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func,
475
+ SDL_calloc_func calloc_func,
476
+ SDL_realloc_func realloc_func,
477
+ SDL_free_func free_func);
478
+
479
+ /**
480
+ * Get the number of outstanding (unfreed) allocations
481
+ *
482
+ * \since This function is available since SDL 2.0.7.
483
+ */
484
+ extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void);
485
+
486
+ extern DECLSPEC char *SDLCALL SDL_getenv(const char *name);
487
+ extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite);
488
+
489
+ extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *));
490
+ extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *));
491
+
492
+ extern DECLSPEC int SDLCALL SDL_abs(int x);
493
+
494
+ /* NOTE: these double-evaluate their arguments, so you should never have side effects in the parameters */
495
+ #define SDL_min(x, y) (((x) < (y)) ? (x) : (y))
496
+ #define SDL_max(x, y) (((x) > (y)) ? (x) : (y))
497
+ #define SDL_clamp(x, a, b) (((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x)))
498
+
499
+ extern DECLSPEC int SDLCALL SDL_isalpha(int x);
500
+ extern DECLSPEC int SDLCALL SDL_isalnum(int x);
501
+ extern DECLSPEC int SDLCALL SDL_isblank(int x);
502
+ extern DECLSPEC int SDLCALL SDL_iscntrl(int x);
503
+ extern DECLSPEC int SDLCALL SDL_isdigit(int x);
504
+ extern DECLSPEC int SDLCALL SDL_isxdigit(int x);
505
+ extern DECLSPEC int SDLCALL SDL_ispunct(int x);
506
+ extern DECLSPEC int SDLCALL SDL_isspace(int x);
507
+ extern DECLSPEC int SDLCALL SDL_isupper(int x);
508
+ extern DECLSPEC int SDLCALL SDL_islower(int x);
509
+ extern DECLSPEC int SDLCALL SDL_isprint(int x);
510
+ extern DECLSPEC int SDLCALL SDL_isgraph(int x);
511
+ extern DECLSPEC int SDLCALL SDL_toupper(int x);
512
+ extern DECLSPEC int SDLCALL SDL_tolower(int x);
513
+
514
+ extern DECLSPEC Uint16 SDLCALL SDL_crc16(Uint16 crc, const void *data, size_t len);
515
+ extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len);
516
+
517
+ extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len);
518
+
519
+ #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
520
+ #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
521
+ #define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x)))
522
+
523
+ #define SDL_copyp(dst, src) \
524
+ { SDL_COMPILE_TIME_ASSERT(SDL_copyp, sizeof (*(dst)) == sizeof (*(src))); } \
525
+ SDL_memcpy((dst), (src), sizeof (*(src)))
526
+
527
+
528
+ /* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */
529
+ SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords)
530
+ {
531
+ #ifdef __APPLE__
532
+ memset_pattern4(dst, &val, dwords * 4);
533
+ #elif defined(__GNUC__) && defined(__i386__)
534
+ int u0, u1, u2;
535
+ __asm__ __volatile__ (
536
+ "cld \n\t"
537
+ "rep ; stosl \n\t"
538
+ : "=&D" (u0), "=&a" (u1), "=&c" (u2)
539
+ : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords))
540
+ : "memory"
541
+ );
542
+ #else
543
+ size_t _n = (dwords + 3) / 4;
544
+ Uint32 *_p = SDL_static_cast(Uint32 *, dst);
545
+ Uint32 _val = (val);
546
+ if (dwords == 0) {
547
+ return;
548
+ }
549
+ switch (dwords % 4) {
550
+ case 0: do { *_p++ = _val; SDL_FALLTHROUGH;
551
+ case 3: *_p++ = _val; SDL_FALLTHROUGH;
552
+ case 2: *_p++ = _val; SDL_FALLTHROUGH;
553
+ case 1: *_p++ = _val;
554
+ } while ( --_n );
555
+ }
556
+ #endif
557
+ }
558
+
559
+ extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len);
560
+
561
+ extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len);
562
+ extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len);
563
+
564
+ extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr);
565
+ extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen);
566
+ extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen);
567
+ extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr);
568
+ extern DECLSPEC wchar_t *SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle);
569
+
570
+ extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2);
571
+ extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen);
572
+ extern DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2);
573
+ extern DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t len);
574
+
575
+ extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str);
576
+ extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen);
577
+ extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes);
578
+ extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen);
579
+ extern DECLSPEC char *SDLCALL SDL_strdup(const char *str);
580
+ extern DECLSPEC char *SDLCALL SDL_strrev(char *str);
581
+ extern DECLSPEC char *SDLCALL SDL_strupr(char *str);
582
+ extern DECLSPEC char *SDLCALL SDL_strlwr(char *str);
583
+ extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c);
584
+ extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c);
585
+ extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle);
586
+ extern DECLSPEC char *SDLCALL SDL_strcasestr(const char *haystack, const char *needle);
587
+ extern DECLSPEC char *SDLCALL SDL_strtokr(char *s1, const char *s2, char **saveptr);
588
+ extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str);
589
+ extern DECLSPEC size_t SDLCALL SDL_utf8strnlen(const char *str, size_t bytes);
590
+
591
+ extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix);
592
+ extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix);
593
+ extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix);
594
+ extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix);
595
+ extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix);
596
+ extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix);
597
+
598
+ extern DECLSPEC int SDLCALL SDL_atoi(const char *str);
599
+ extern DECLSPEC double SDLCALL SDL_atof(const char *str);
600
+ extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base);
601
+ extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base);
602
+ extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base);
603
+ extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base);
604
+ extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp);
605
+
606
+ extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2);
607
+ extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen);
608
+ extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2);
609
+ extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len);
610
+
611
+ extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2);
612
+ extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap);
613
+ extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3);
614
+ extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap);
615
+ extern DECLSPEC int SDLCALL SDL_asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
616
+ extern DECLSPEC int SDLCALL SDL_vasprintf(char **strp, const char *fmt, va_list ap);
617
+
618
+ #ifndef HAVE_M_PI
619
+ #ifndef M_PI
620
+ #define M_PI 3.14159265358979323846264338327950288 /**< pi */
621
+ #endif
622
+ #endif
623
+
624
+ /**
625
+ * Use this function to compute arc cosine of `x`.
626
+ *
627
+ * The definition of `y = acos(x)` is `x = cos(y)`.
628
+ *
629
+ * Domain: `-1 <= x <= 1`
630
+ *
631
+ * Range: `0 <= y <= Pi`
632
+ *
633
+ * \param x floating point value, in radians.
634
+ * \returns arc cosine of `x`.
635
+ *
636
+ * \since This function is available since SDL 2.0.2.
637
+ */
638
+ extern DECLSPEC double SDLCALL SDL_acos(double x);
639
+ extern DECLSPEC float SDLCALL SDL_acosf(float x);
640
+ extern DECLSPEC double SDLCALL SDL_asin(double x);
641
+ extern DECLSPEC float SDLCALL SDL_asinf(float x);
642
+ extern DECLSPEC double SDLCALL SDL_atan(double x);
643
+ extern DECLSPEC float SDLCALL SDL_atanf(float x);
644
+ extern DECLSPEC double SDLCALL SDL_atan2(double y, double x);
645
+ extern DECLSPEC float SDLCALL SDL_atan2f(float y, float x);
646
+ extern DECLSPEC double SDLCALL SDL_ceil(double x);
647
+ extern DECLSPEC float SDLCALL SDL_ceilf(float x);
648
+ extern DECLSPEC double SDLCALL SDL_copysign(double x, double y);
649
+ extern DECLSPEC float SDLCALL SDL_copysignf(float x, float y);
650
+ extern DECLSPEC double SDLCALL SDL_cos(double x);
651
+ extern DECLSPEC float SDLCALL SDL_cosf(float x);
652
+ extern DECLSPEC double SDLCALL SDL_exp(double x);
653
+ extern DECLSPEC float SDLCALL SDL_expf(float x);
654
+ extern DECLSPEC double SDLCALL SDL_fabs(double x);
655
+ extern DECLSPEC float SDLCALL SDL_fabsf(float x);
656
+ extern DECLSPEC double SDLCALL SDL_floor(double x);
657
+ extern DECLSPEC float SDLCALL SDL_floorf(float x);
658
+ extern DECLSPEC double SDLCALL SDL_trunc(double x);
659
+ extern DECLSPEC float SDLCALL SDL_truncf(float x);
660
+ extern DECLSPEC double SDLCALL SDL_fmod(double x, double y);
661
+ extern DECLSPEC float SDLCALL SDL_fmodf(float x, float y);
662
+ extern DECLSPEC double SDLCALL SDL_log(double x);
663
+ extern DECLSPEC float SDLCALL SDL_logf(float x);
664
+ extern DECLSPEC double SDLCALL SDL_log10(double x);
665
+ extern DECLSPEC float SDLCALL SDL_log10f(float x);
666
+ extern DECLSPEC double SDLCALL SDL_pow(double x, double y);
667
+ extern DECLSPEC float SDLCALL SDL_powf(float x, float y);
668
+ extern DECLSPEC double SDLCALL SDL_round(double x);
669
+ extern DECLSPEC float SDLCALL SDL_roundf(float x);
670
+ extern DECLSPEC long SDLCALL SDL_lround(double x);
671
+ extern DECLSPEC long SDLCALL SDL_lroundf(float x);
672
+ extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n);
673
+ extern DECLSPEC float SDLCALL SDL_scalbnf(float x, int n);
674
+ extern DECLSPEC double SDLCALL SDL_sin(double x);
675
+ extern DECLSPEC float SDLCALL SDL_sinf(float x);
676
+ extern DECLSPEC double SDLCALL SDL_sqrt(double x);
677
+ extern DECLSPEC float SDLCALL SDL_sqrtf(float x);
678
+ extern DECLSPEC double SDLCALL SDL_tan(double x);
679
+ extern DECLSPEC float SDLCALL SDL_tanf(float x);
680
+
681
+ /* The SDL implementation of iconv() returns these error codes */
682
+ #define SDL_ICONV_ERROR (size_t)-1
683
+ #define SDL_ICONV_E2BIG (size_t)-2
684
+ #define SDL_ICONV_EILSEQ (size_t)-3
685
+ #define SDL_ICONV_EINVAL (size_t)-4
686
+
687
+ /* SDL_iconv_* are now always real symbols/types, not macros or inlined. */
688
+ typedef struct _SDL_iconv_t *SDL_iconv_t;
689
+ extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode,
690
+ const char *fromcode);
691
+ extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd);
692
+ extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf,
693
+ size_t * inbytesleft, char **outbuf,
694
+ size_t * outbytesleft);
695
+
696
+ /**
697
+ * This function converts a string between encodings in one pass, returning a
698
+ * string that must be freed with SDL_free() or NULL on error.
699
+ *
700
+ * \since This function is available since SDL 2.0.0.
701
+ */
702
+ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode,
703
+ const char *fromcode,
704
+ const char *inbuf,
705
+ size_t inbytesleft);
706
+ #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
707
+ #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1)
708
+ #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1)
709
+ #define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t))
710
+
711
+ /* force builds using Clang's static analysis tools to use literal C runtime
712
+ here, since there are possibly tests that are ineffective otherwise. */
713
+ #if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS)
714
+
715
+ /* The analyzer knows about strlcpy even when the system doesn't provide it */
716
+ #ifndef HAVE_STRLCPY
717
+ size_t strlcpy(char* dst, const char* src, size_t size);
718
+ #endif
719
+
720
+ /* The analyzer knows about strlcat even when the system doesn't provide it */
721
+ #ifndef HAVE_STRLCAT
722
+ size_t strlcat(char* dst, const char* src, size_t size);
723
+ #endif
724
+
725
+ #define SDL_malloc malloc
726
+ #define SDL_calloc calloc
727
+ #define SDL_realloc realloc
728
+ #define SDL_free free
729
+ #define SDL_memset memset
730
+ #define SDL_memcpy memcpy
731
+ #define SDL_memmove memmove
732
+ #define SDL_memcmp memcmp
733
+ #define SDL_strlcpy strlcpy
734
+ #define SDL_strlcat strlcat
735
+ #define SDL_strlen strlen
736
+ #define SDL_wcslen wcslen
737
+ #define SDL_wcslcpy wcslcpy
738
+ #define SDL_wcslcat wcslcat
739
+ #define SDL_strdup strdup
740
+ #define SDL_wcsdup wcsdup
741
+ #define SDL_strchr strchr
742
+ #define SDL_strrchr strrchr
743
+ #define SDL_strstr strstr
744
+ #define SDL_wcsstr wcsstr
745
+ #define SDL_strtokr strtok_r
746
+ #define SDL_strcmp strcmp
747
+ #define SDL_wcscmp wcscmp
748
+ #define SDL_strncmp strncmp
749
+ #define SDL_wcsncmp wcsncmp
750
+ #define SDL_strcasecmp strcasecmp
751
+ #define SDL_strncasecmp strncasecmp
752
+ #define SDL_sscanf sscanf
753
+ #define SDL_vsscanf vsscanf
754
+ #define SDL_snprintf snprintf
755
+ #define SDL_vsnprintf vsnprintf
756
+ #endif
757
+
758
+ SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords)
759
+ {
760
+ return SDL_memcpy(dst, src, dwords * 4);
761
+ }
762
+
763
+ /**
764
+ * If a * b would overflow, return -1. Otherwise store a * b via ret
765
+ * and return 0.
766
+ *
767
+ * \since This function is available since SDL 2.24.0.
768
+ */
769
+ SDL_FORCE_INLINE int SDL_size_mul_overflow (size_t a,
770
+ size_t b,
771
+ size_t *ret)
772
+ {
773
+ if (a != 0 && b > SDL_SIZE_MAX / a) {
774
+ return -1;
775
+ }
776
+ *ret = a * b;
777
+ return 0;
778
+ }
779
+
780
+ #if _SDL_HAS_BUILTIN(__builtin_mul_overflow)
781
+ /* This needs to be wrapped in an inline rather than being a direct #define,
782
+ * because __builtin_mul_overflow() is type-generic, but we want to be
783
+ * consistent about interpreting a and b as size_t. */
784
+ SDL_FORCE_INLINE int _SDL_size_mul_overflow_builtin (size_t a,
785
+ size_t b,
786
+ size_t *ret)
787
+ {
788
+ return __builtin_mul_overflow(a, b, ret) == 0 ? 0 : -1;
789
+ }
790
+ #define SDL_size_mul_overflow(a, b, ret) (_SDL_size_mul_overflow_builtin(a, b, ret))
791
+ #endif
792
+
793
+ /**
794
+ * If a + b would overflow, return -1. Otherwise store a + b via ret
795
+ * and return 0.
796
+ *
797
+ * \since This function is available since SDL 2.24.0.
798
+ */
799
+ SDL_FORCE_INLINE int SDL_size_add_overflow (size_t a,
800
+ size_t b,
801
+ size_t *ret)
802
+ {
803
+ if (b > SDL_SIZE_MAX - a) {
804
+ return -1;
805
+ }
806
+ *ret = a + b;
807
+ return 0;
808
+ }
809
+
810
+ #if _SDL_HAS_BUILTIN(__builtin_add_overflow)
811
+ /* This needs to be wrapped in an inline rather than being a direct #define,
812
+ * the same as the call to __builtin_mul_overflow() above. */
813
+ SDL_FORCE_INLINE int _SDL_size_add_overflow_builtin (size_t a,
814
+ size_t b,
815
+ size_t *ret)
816
+ {
817
+ return __builtin_add_overflow(a, b, ret) == 0 ? 0 : -1;
818
+ }
819
+ #define SDL_size_add_overflow(a, b, ret) (_SDL_size_add_overflow_builtin(a, b, ret))
820
+ #endif
821
+
822
+ /* Ends C function definitions when using C++ */
823
+ #ifdef __cplusplus
824
+ }
825
+ #endif
826
+ #include "close_code.h"
827
+
828
+ #endif /* SDL_stdinc_h_ */
829
+
830
+ /* vi: set ts=4 sw=4 expandtab: */