summaryrefslogtreecommitdiff
path: root/source/3rd-party/SDL2/src/dynapi
diff options
context:
space:
mode:
Diffstat (limited to 'source/3rd-party/SDL2/src/dynapi')
-rw-r--r--source/3rd-party/SDL2/src/dynapi/SDL_dynapi.c332
-rw-r--r--source/3rd-party/SDL2/src/dynapi/SDL_dynapi.h67
-rw-r--r--source/3rd-party/SDL2/src/dynapi/SDL_dynapi_overrides.h703
-rw-r--r--source/3rd-party/SDL2/src/dynapi/SDL_dynapi_procs.h757
-rw-r--r--source/3rd-party/SDL2/src/dynapi/gendynapi.pl141
5 files changed, 2000 insertions, 0 deletions
diff --git a/source/3rd-party/SDL2/src/dynapi/SDL_dynapi.c b/source/3rd-party/SDL2/src/dynapi/SDL_dynapi.c
new file mode 100644
index 0000000..97bc218
--- /dev/null
+++ b/source/3rd-party/SDL2/src/dynapi/SDL_dynapi.c
@@ -0,0 +1,332 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "SDL_config.h"
+#include "SDL_dynapi.h"
+
+#if SDL_DYNAMIC_API
+
+#if defined(__OS2__)
+#define INCL_DOS
+#define INCL_DOSERRORS
+#include <os2.h>
+#include <dos.h>
+#endif
+
+#include "SDL.h"
+
+/* These headers have system specific definitions, so aren't included above */
+#include "SDL_syswm.h"
+#include "SDL_vulkan.h"
+
+/* This is the version of the dynamic API. This doesn't match the SDL version
+ and should not change until there's been a major revamp in API/ABI.
+ So 2.0.5 adds functions over 2.0.4? This number doesn't change;
+ the sizeof (jump_table) changes instead. But 2.1.0 changes how a function
+ works in an incompatible way or removes a function? This number changes,
+ since sizeof (jump_table) isn't sufficient anymore. It's likely
+ we'll forget to bump every time we add a function, so this is the
+ failsafe switch for major API change decisions. Respect it and use it
+ sparingly. */
+#define SDL_DYNAPI_VERSION 1
+
+static void SDL_InitDynamicAPI(void);
+
+
+/* BE CAREFUL CALLING ANY SDL CODE IN HERE, IT WILL BLOW UP.
+ Even self-contained stuff might call SDL_Error and break everything. */
+
+
+/* behold, the macro salsa! */
+
+/* !!! FIXME: ...disabled...until we write it. :) */
+#define DISABLE_JUMP_MAGIC 1
+
+#if DISABLE_JUMP_MAGIC
+/* Can't use the macro for varargs nonsense. This is atrocious. */
+#define SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, logname, prio) \
+ _static void SDLCALL SDL_Log##logname##name(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \
+ va_list ap; initcall; va_start(ap, fmt); \
+ jump_table.SDL_LogMessageV(category, SDL_LOG_PRIORITY_##prio, fmt, ap); \
+ va_end(ap); \
+ }
+
+#define SDL_DYNAPI_VARARGS(_static, name, initcall) \
+ _static int SDLCALL SDL_SetError##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \
+ char buf[512]; /* !!! FIXME: dynamic allocation */ \
+ va_list ap; initcall; va_start(ap, fmt); \
+ jump_table.SDL_vsnprintf(buf, sizeof (buf), fmt, ap); \
+ va_end(ap); \
+ return jump_table.SDL_SetError("%s", buf); \
+ } \
+ _static int SDLCALL SDL_sscanf##name(const char *buf, SDL_SCANF_FORMAT_STRING const char *fmt, ...) { \
+ int retval; va_list ap; initcall; va_start(ap, fmt); \
+ retval = jump_table.SDL_vsscanf(buf, fmt, ap); \
+ va_end(ap); \
+ return retval; \
+ } \
+ _static int SDLCALL SDL_snprintf##name(SDL_OUT_Z_CAP(maxlen) char *buf, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \
+ int retval; va_list ap; initcall; va_start(ap, fmt); \
+ retval = jump_table.SDL_vsnprintf(buf, maxlen, fmt, ap); \
+ va_end(ap); \
+ return retval; \
+ } \
+ _static void SDLCALL SDL_Log##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \
+ va_list ap; initcall; va_start(ap, fmt); \
+ jump_table.SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, fmt, ap); \
+ va_end(ap); \
+ } \
+ _static void SDLCALL SDL_LogMessage##name(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \
+ va_list ap; initcall; va_start(ap, fmt); \
+ jump_table.SDL_LogMessageV(category, priority, fmt, ap); \
+ va_end(ap); \
+ } \
+ SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, Verbose, VERBOSE) \
+ SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, Debug, DEBUG) \
+ SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, Info, INFO) \
+ SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, Warn, WARN) \
+ SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, Error, ERROR) \
+ SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, Critical, CRITICAL)
+#endif
+
+
+/* Typedefs for function pointers for jump table, and predeclare funcs */
+/* The DEFAULT funcs will init jump table and then call real function. */
+/* The REAL funcs are the actual functions, name-mangled to not clash. */
+#define SDL_DYNAPI_PROC(rc,fn,params,args,ret) \
+ typedef rc (SDLCALL *SDL_DYNAPIFN_##fn) params; \
+ static rc SDLCALL fn##_DEFAULT params; \
+ extern rc SDLCALL fn##_REAL params;
+#include "SDL_dynapi_procs.h"
+#undef SDL_DYNAPI_PROC
+
+/* The jump table! */
+typedef struct {
+ #define SDL_DYNAPI_PROC(rc,fn,params,args,ret) SDL_DYNAPIFN_##fn fn;
+ #include "SDL_dynapi_procs.h"
+ #undef SDL_DYNAPI_PROC
+} SDL_DYNAPI_jump_table;
+
+/* Predeclare the default functions for initializing the jump table. */
+#define SDL_DYNAPI_PROC(rc,fn,params,args,ret) static rc SDLCALL fn##_DEFAULT params;
+#include "SDL_dynapi_procs.h"
+#undef SDL_DYNAPI_PROC
+
+/* The actual jump table. */
+static SDL_DYNAPI_jump_table jump_table = {
+ #define SDL_DYNAPI_PROC(rc,fn,params,args,ret) fn##_DEFAULT,
+ #include "SDL_dynapi_procs.h"
+ #undef SDL_DYNAPI_PROC
+};
+
+/* Default functions init the function table then call right thing. */
+#if DISABLE_JUMP_MAGIC
+#define SDL_DYNAPI_PROC(rc,fn,params,args,ret) \
+ static rc SDLCALL fn##_DEFAULT params { \
+ SDL_InitDynamicAPI(); \
+ ret jump_table.fn args; \
+ }
+#define SDL_DYNAPI_PROC_NO_VARARGS 1
+#include "SDL_dynapi_procs.h"
+#undef SDL_DYNAPI_PROC
+#undef SDL_DYNAPI_PROC_NO_VARARGS
+SDL_DYNAPI_VARARGS(static, _DEFAULT, SDL_InitDynamicAPI())
+#else
+/* !!! FIXME: need the jump magic. */
+#error Write me.
+#endif
+
+/* Public API functions to jump into the jump table. */
+#if DISABLE_JUMP_MAGIC
+#define SDL_DYNAPI_PROC(rc,fn,params,args,ret) \
+ rc SDLCALL fn params { ret jump_table.fn args; }
+#define SDL_DYNAPI_PROC_NO_VARARGS 1
+#include "SDL_dynapi_procs.h"
+#undef SDL_DYNAPI_PROC
+#undef SDL_DYNAPI_PROC_NO_VARARGS
+SDL_DYNAPI_VARARGS(,,)
+#else
+/* !!! FIXME: need the jump magic. */
+#error Write me.
+#endif
+
+/* we make this a static function so we can call the correct one without the
+ system's dynamic linker resolving to the wrong version of this. */
+static Sint32
+initialize_jumptable(Uint32 apiver, void *table, Uint32 tablesize)
+{
+ SDL_DYNAPI_jump_table *output_jump_table = (SDL_DYNAPI_jump_table *) table;
+
+ if (apiver != SDL_DYNAPI_VERSION) {
+ /* !!! FIXME: can maybe handle older versions? */
+ return -1; /* not compatible. */
+ } else if (tablesize > sizeof (jump_table)) {
+ return -1; /* newer version of SDL with functions we can't provide. */
+ }
+
+ /* Init our jump table first. */
+ #define SDL_DYNAPI_PROC(rc,fn,params,args,ret) jump_table.fn = fn##_REAL;
+ #include "SDL_dynapi_procs.h"
+ #undef SDL_DYNAPI_PROC
+
+ /* Then the external table... */
+ if (output_jump_table != &jump_table) {
+ jump_table.SDL_memcpy(output_jump_table, &jump_table, tablesize);
+ }
+
+ /* Safe to call SDL functions now; jump table is initialized! */
+
+ return 0; /* success! */
+}
+
+
+/* Here's the exported entry point that fills in the jump table. */
+/* Use specific types when an "int" might suffice to keep this sane. */
+typedef Sint32 (SDLCALL *SDL_DYNAPI_ENTRYFN)(Uint32 apiver, void *table, Uint32 tablesize);
+extern DECLSPEC Sint32 SDLCALL SDL_DYNAPI_entry(Uint32, void *, Uint32);
+
+Sint32
+SDL_DYNAPI_entry(Uint32 apiver, void *table, Uint32 tablesize)
+{
+ return initialize_jumptable(apiver, table, tablesize);
+}
+
+
+/* Obviously we can't use SDL_LoadObject() to load SDL. :) */
+/* Also obviously, we never close the loaded library. */
+#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN 1
+#endif
+#include <windows.h>
+static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym)
+{
+ HANDLE lib = LoadLibraryA(fname);
+ void *retval = NULL;
+ if (lib) {
+ retval = GetProcAddress(lib, sym);
+ if (retval == NULL) {
+ FreeLibrary(lib);
+ }
+ }
+ return retval;
+}
+
+#elif defined(unix) || defined(__unix__) || defined(__APPLE__) || defined(__HAIKU__) || defined(__QNX__)
+#include <dlfcn.h>
+static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym)
+{
+ void *lib = dlopen(fname, RTLD_NOW | RTLD_LOCAL);
+ void *retval = NULL;
+ if (lib != NULL) {
+ retval = dlsym(lib, sym);
+ if (retval == NULL) {
+ dlclose(lib);
+ }
+ }
+ return retval;
+}
+
+#elif defined(__OS2__)
+static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym)
+{
+ HMODULE hmodule;
+ PFN retval = NULL;
+ char error[256];
+ if (DosLoadModule(&error, sizeof(error), fname, &hmodule) == NO_ERROR) {
+ if (DosQueryProcAddr(hmodule, 0, sym, &retval) != NO_ERROR) {
+ DosFreeModule(hmodule);
+ }
+ }
+ return (void *) retval;
+}
+
+#else
+#error Please define your platform.
+#endif
+
+
+static void
+SDL_InitDynamicAPILocked(void)
+{
+ const char *libname = SDL_getenv_REAL("SDL_DYNAMIC_API");
+ SDL_DYNAPI_ENTRYFN entry = NULL; /* funcs from here by default. */
+
+ if (libname) {
+ entry = (SDL_DYNAPI_ENTRYFN) get_sdlapi_entry(libname, "SDL_DYNAPI_entry");
+ if (!entry) {
+ /* !!! FIXME: fail to startup here instead? */
+ /* !!! FIXME: definitely warn user. */
+ /* Just fill in the function pointers from this library. */
+ }
+ }
+
+ if (!entry || (entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table)) < 0)) {
+ /* !!! FIXME: fail to startup here instead? */
+ /* !!! FIXME: definitely warn user. */
+ /* Just fill in the function pointers from this library. */
+ if (!entry) {
+ if (!initialize_jumptable(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table))) {
+ /* !!! FIXME: now we're screwed. Should definitely abort now. */
+ }
+ }
+ }
+
+ /* we intentionally never close the newly-loaded lib, of course. */
+}
+
+static void
+SDL_InitDynamicAPI(void)
+{
+ /* So the theory is that every function in the jump table defaults to
+ * calling this function, and then replaces itself with a version that
+ * doesn't call this function anymore. But it's possible that, in an
+ * extreme corner case, you can have a second thread hit this function
+ * while the jump table is being initialized by the first.
+ * In this case, a spinlock is really painful compared to what spinlocks
+ * _should_ be used for, but this would only happen once, and should be
+ * insanely rare, as you would have to spin a thread outside of SDL (as
+ * SDL_CreateThread() would also call this function before building the
+ * new thread).
+ */
+ static SDL_bool already_initialized = SDL_FALSE;
+
+ /* SDL_AtomicLock calls SDL mutex functions to emulate if
+ SDL_ATOMIC_DISABLED, which we can't do here, so in such a
+ configuration, you're on your own. */
+ #if !SDL_ATOMIC_DISABLED
+ static SDL_SpinLock lock = 0;
+ SDL_AtomicLock_REAL(&lock);
+ #endif
+
+ if (!already_initialized) {
+ SDL_InitDynamicAPILocked();
+ already_initialized = SDL_TRUE;
+ }
+
+ #if !SDL_ATOMIC_DISABLED
+ SDL_AtomicUnlock_REAL(&lock);
+ #endif
+}
+
+#endif /* SDL_DYNAMIC_API */
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/source/3rd-party/SDL2/src/dynapi/SDL_dynapi.h b/source/3rd-party/SDL2/src/dynapi/SDL_dynapi.h
new file mode 100644
index 0000000..73316f1
--- /dev/null
+++ b/source/3rd-party/SDL2/src/dynapi/SDL_dynapi.h
@@ -0,0 +1,67 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef SDL_dynapi_h_
+#define SDL_dynapi_h_
+
+/* IMPORTANT:
+ This is the master switch to disabling the dynamic API. We made it so you
+ have to hand-edit an internal source file in SDL to turn it off; you
+ can do it if you want it badly enough, but hopefully you won't want to.
+ You should understand the ramifications of turning this off: it makes it
+ hard to update your SDL in the field, and impossible if you've statically
+ linked SDL into your app. Understand that platforms change, and if we can't
+ drop in an updated SDL, your application can definitely break some time
+ in the future, even if it's fine today.
+ To be sure, as new system-level video and audio APIs are introduced, an
+ updated SDL can transparently take advantage of them, but your program will
+ not without this feature. Think hard before turning it off.
+*/
+#ifdef SDL_DYNAMIC_API /* Tried to force it on the command line? */
+#error Nope, you have to edit this file to force this off.
+#endif
+
+#ifdef __APPLE__
+#include "TargetConditionals.h"
+#endif
+
+#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE /* probably not useful on iOS. */
+#define SDL_DYNAMIC_API 0
+#elif defined(__native_client__) && __native_client__ /* probably not useful on NACL. */
+#define SDL_DYNAMIC_API 0
+#elif defined(__EMSCRIPTEN__) && __EMSCRIPTEN__ /* probably not useful on Emscripten. */
+#define SDL_DYNAMIC_API 0
+#elif defined(SDL_BUILDING_WINRT) && SDL_BUILDING_WINRT /* probably not useful on WinRT, given current .dll loading restrictions */
+#define SDL_DYNAMIC_API 0
+#elif defined(__PSP__) && __PSP__
+#define SDL_DYNAMIC_API 0
+#elif defined(__clang_analyzer__)
+#define SDL_DYNAMIC_API 0 /* Turn off for static analysis, so reports are more clear. */
+#endif
+
+/* everyone else. This is where we turn on the API if nothing forced it off. */
+#ifndef SDL_DYNAMIC_API
+#define SDL_DYNAMIC_API 1
+#endif
+
+#endif
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/source/3rd-party/SDL2/src/dynapi/SDL_dynapi_overrides.h b/source/3rd-party/SDL2/src/dynapi/SDL_dynapi_overrides.h
new file mode 100644
index 0000000..7454213
--- /dev/null
+++ b/source/3rd-party/SDL2/src/dynapi/SDL_dynapi_overrides.h
@@ -0,0 +1,703 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+/* vi: set ts=4 sw=4 expandtab: */
+
+/* DO NOT EDIT THIS FILE BY HAND. It is autogenerated by gendynapi.pl. */
+
+#if !SDL_DYNAMIC_API
+#error You should not be here.
+#endif
+
+#define SDL_SetError SDL_SetError_REAL
+#define SDL_Log SDL_Log_REAL
+#define SDL_LogVerbose SDL_LogVerbose_REAL
+#define SDL_LogDebug SDL_LogDebug_REAL
+#define SDL_LogInfo SDL_LogInfo_REAL
+#define SDL_LogWarn SDL_LogWarn_REAL
+#define SDL_LogError SDL_LogError_REAL
+#define SDL_LogCritical SDL_LogCritical_REAL
+#define SDL_LogMessage SDL_LogMessage_REAL
+#define SDL_sscanf SDL_sscanf_REAL
+#define SDL_snprintf SDL_snprintf_REAL
+#define SDL_CreateThread SDL_CreateThread_REAL
+#define SDL_RWFromFP SDL_RWFromFP_REAL
+#define SDL_RegisterApp SDL_RegisterApp_REAL
+#define SDL_UnregisterApp SDL_UnregisterApp_REAL
+#define SDL_Direct3D9GetAdapterIndex SDL_Direct3D9GetAdapterIndex_REAL
+#define SDL_RenderGetD3D9Device SDL_RenderGetD3D9Device_REAL
+#define SDL_iPhoneSetAnimationCallback SDL_iPhoneSetAnimationCallback_REAL
+#define SDL_iPhoneSetEventPump SDL_iPhoneSetEventPump_REAL
+#define SDL_AndroidGetJNIEnv SDL_AndroidGetJNIEnv_REAL
+#define SDL_AndroidGetActivity SDL_AndroidGetActivity_REAL
+#define SDL_AndroidGetInternalStoragePath SDL_AndroidGetInternalStoragePath_REAL
+#define SDL_AndroidGetExternalStorageState SDL_AndroidGetExternalStorageState_REAL
+#define SDL_AndroidGetExternalStoragePath SDL_AndroidGetExternalStoragePath_REAL
+#define SDL_Init SDL_Init_REAL
+#define SDL_InitSubSystem SDL_InitSubSystem_REAL
+#define SDL_QuitSubSystem SDL_QuitSubSystem_REAL
+#define SDL_WasInit SDL_WasInit_REAL
+#define SDL_Quit SDL_Quit_REAL
+#define SDL_ReportAssertion SDL_ReportAssertion_REAL
+#define SDL_SetAssertionHandler SDL_SetAssertionHandler_REAL
+#define SDL_GetAssertionReport SDL_GetAssertionReport_REAL
+#define SDL_ResetAssertionReport SDL_ResetAssertionReport_REAL
+#define SDL_AtomicTryLock SDL_AtomicTryLock_REAL
+#define SDL_AtomicLock SDL_AtomicLock_REAL
+#define SDL_AtomicUnlock SDL_AtomicUnlock_REAL
+#define SDL_AtomicCAS SDL_AtomicCAS_REAL
+#define SDL_AtomicSet SDL_AtomicSet_REAL
+#define SDL_AtomicGet SDL_AtomicGet_REAL
+#define SDL_AtomicAdd SDL_AtomicAdd_REAL
+#define SDL_AtomicCASPtr SDL_AtomicCASPtr_REAL
+#define SDL_AtomicSetPtr SDL_AtomicSetPtr_REAL
+#define SDL_AtomicGetPtr SDL_AtomicGetPtr_REAL
+#define SDL_GetNumAudioDrivers SDL_GetNumAudioDrivers_REAL
+#define SDL_GetAudioDriver SDL_GetAudioDriver_REAL
+#define SDL_AudioInit SDL_AudioInit_REAL
+#define SDL_AudioQuit SDL_AudioQuit_REAL
+#define SDL_GetCurrentAudioDriver SDL_GetCurrentAudioDriver_REAL
+#define SDL_OpenAudio SDL_OpenAudio_REAL
+#define SDL_GetNumAudioDevices SDL_GetNumAudioDevices_REAL
+#define SDL_GetAudioDeviceName SDL_GetAudioDeviceName_REAL
+#define SDL_OpenAudioDevice SDL_OpenAudioDevice_REAL
+#define SDL_GetAudioStatus SDL_GetAudioStatus_REAL
+#define SDL_GetAudioDeviceStatus SDL_GetAudioDeviceStatus_REAL
+#define SDL_PauseAudio SDL_PauseAudio_REAL
+#define SDL_PauseAudioDevice SDL_PauseAudioDevice_REAL
+#define SDL_LoadWAV_RW SDL_LoadWAV_RW_REAL
+#define SDL_FreeWAV SDL_FreeWAV_REAL
+#define SDL_BuildAudioCVT SDL_BuildAudioCVT_REAL
+#define SDL_ConvertAudio SDL_ConvertAudio_REAL
+#define SDL_MixAudio SDL_MixAudio_REAL
+#define SDL_MixAudioFormat SDL_MixAudioFormat_REAL
+#define SDL_LockAudio SDL_LockAudio_REAL
+#define SDL_LockAudioDevice SDL_LockAudioDevice_REAL
+#define SDL_UnlockAudio SDL_UnlockAudio_REAL
+#define SDL_UnlockAudioDevice SDL_UnlockAudioDevice_REAL
+#define SDL_CloseAudio SDL_CloseAudio_REAL
+#define SDL_CloseAudioDevice SDL_CloseAudioDevice_REAL
+#define SDL_SetClipboardText SDL_SetClipboardText_REAL
+#define SDL_GetClipboardText SDL_GetClipboardText_REAL
+#define SDL_HasClipboardText SDL_HasClipboardText_REAL
+#define SDL_GetCPUCount SDL_GetCPUCount_REAL
+#define SDL_GetCPUCacheLineSize SDL_GetCPUCacheLineSize_REAL
+#define SDL_HasRDTSC SDL_HasRDTSC_REAL
+#define SDL_HasAltiVec SDL_HasAltiVec_REAL
+#define SDL_HasMMX SDL_HasMMX_REAL
+#define SDL_Has3DNow SDL_Has3DNow_REAL
+#define SDL_HasSSE SDL_HasSSE_REAL
+#define SDL_HasSSE2 SDL_HasSSE2_REAL
+#define SDL_HasSSE3 SDL_HasSSE3_REAL
+#define SDL_HasSSE41 SDL_HasSSE41_REAL
+#define SDL_HasSSE42 SDL_HasSSE42_REAL
+#define SDL_GetSystemRAM SDL_GetSystemRAM_REAL
+#define SDL_GetError SDL_GetError_REAL
+#define SDL_ClearError SDL_ClearError_REAL
+#define SDL_Error SDL_Error_REAL
+#define SDL_PumpEvents SDL_PumpEvents_REAL
+#define SDL_PeepEvents SDL_PeepEvents_REAL
+#define SDL_HasEvent SDL_HasEvent_REAL
+#define SDL_HasEvents SDL_HasEvents_REAL
+#define SDL_FlushEvent SDL_FlushEvent_REAL
+#define SDL_FlushEvents SDL_FlushEvents_REAL
+#define SDL_PollEvent SDL_PollEvent_REAL
+#define SDL_WaitEvent SDL_WaitEvent_REAL
+#define SDL_WaitEventTimeout SDL_WaitEventTimeout_REAL
+#define SDL_PushEvent SDL_PushEvent_REAL
+#define SDL_SetEventFilter SDL_SetEventFilter_REAL
+#define SDL_GetEventFilter SDL_GetEventFilter_REAL
+#define SDL_AddEventWatch SDL_AddEventWatch_REAL
+#define SDL_DelEventWatch SDL_DelEventWatch_REAL
+#define SDL_FilterEvents SDL_FilterEvents_REAL
+#define SDL_EventState SDL_EventState_REAL
+#define SDL_RegisterEvents SDL_RegisterEvents_REAL
+#define SDL_GetBasePath SDL_GetBasePath_REAL
+#define SDL_GetPrefPath SDL_GetPrefPath_REAL
+#define SDL_GameControllerAddMapping SDL_GameControllerAddMapping_REAL
+#define SDL_GameControllerMappingForGUID SDL_GameControllerMappingForGUID_REAL
+#define SDL_GameControllerMapping SDL_GameControllerMapping_REAL
+#define SDL_IsGameController SDL_IsGameController_REAL
+#define SDL_GameControllerNameForIndex SDL_GameControllerNameForIndex_REAL
+#define SDL_GameControllerOpen SDL_GameControllerOpen_REAL
+#define SDL_GameControllerName SDL_GameControllerName_REAL
+#define SDL_GameControllerGetAttached SDL_GameControllerGetAttached_REAL
+#define SDL_GameControllerGetJoystick SDL_GameControllerGetJoystick_REAL
+#define SDL_GameControllerEventState SDL_GameControllerEventState_REAL
+#define SDL_GameControllerUpdate SDL_GameControllerUpdate_REAL
+#define SDL_GameControllerGetAxisFromString SDL_GameControllerGetAxisFromString_REAL
+#define SDL_GameControllerGetStringForAxis SDL_GameControllerGetStringForAxis_REAL
+#define SDL_GameControllerGetBindForAxis SDL_GameControllerGetBindForAxis_REAL
+#define SDL_GameControllerGetAxis SDL_GameControllerGetAxis_REAL
+#define SDL_GameControllerGetButtonFromString SDL_GameControllerGetButtonFromString_REAL
+#define SDL_GameControllerGetStringForButton SDL_GameControllerGetStringForButton_REAL
+#define SDL_GameControllerGetBindForButton SDL_GameControllerGetBindForButton_REAL
+#define SDL_GameControllerGetButton SDL_GameControllerGetButton_REAL
+#define SDL_GameControllerClose SDL_GameControllerClose_REAL
+#define SDL_RecordGesture SDL_RecordGesture_REAL
+#define SDL_SaveAllDollarTemplates SDL_SaveAllDollarTemplates_REAL
+#define SDL_SaveDollarTemplate SDL_SaveDollarTemplate_REAL
+#define SDL_LoadDollarTemplates SDL_LoadDollarTemplates_REAL
+#define SDL_NumHaptics SDL_NumHaptics_REAL
+#define SDL_HapticName SDL_HapticName_REAL
+#define SDL_HapticOpen SDL_HapticOpen_REAL
+#define SDL_HapticOpened SDL_HapticOpened_REAL
+#define SDL_HapticIndex SDL_HapticIndex_REAL
+#define SDL_MouseIsHaptic SDL_MouseIsHaptic_REAL
+#define SDL_HapticOpenFromMouse SDL_HapticOpenFromMouse_REAL
+#define SDL_JoystickIsHaptic SDL_JoystickIsHaptic_REAL
+#define SDL_HapticOpenFromJoystick SDL_HapticOpenFromJoystick_REAL
+#define SDL_HapticClose SDL_HapticClose_REAL
+#define SDL_HapticNumEffects SDL_HapticNumEffects_REAL
+#define SDL_HapticNumEffectsPlaying SDL_HapticNumEffectsPlaying_REAL
+#define SDL_HapticQuery SDL_HapticQuery_REAL
+#define SDL_HapticNumAxes SDL_HapticNumAxes_REAL
+#define SDL_HapticEffectSupported SDL_HapticEffectSupported_REAL
+#define SDL_HapticNewEffect SDL_HapticNewEffect_REAL
+#define SDL_HapticUpdateEffect SDL_HapticUpdateEffect_REAL
+#define SDL_HapticRunEffect SDL_HapticRunEffect_REAL
+#define SDL_HapticStopEffect SDL_HapticStopEffect_REAL
+#define SDL_HapticDestroyEffect SDL_HapticDestroyEffect_REAL
+#define SDL_HapticGetEffectStatus SDL_HapticGetEffectStatus_REAL
+#define SDL_HapticSetGain SDL_HapticSetGain_REAL
+#define SDL_HapticSetAutocenter SDL_HapticSetAutocenter_REAL
+#define SDL_HapticPause SDL_HapticPause_REAL
+#define SDL_HapticUnpause SDL_HapticUnpause_REAL
+#define SDL_HapticStopAll SDL_HapticStopAll_REAL
+#define SDL_HapticRumbleSupported SDL_HapticRumbleSupported_REAL
+#define SDL_HapticRumbleInit SDL_HapticRumbleInit_REAL
+#define SDL_HapticRumblePlay SDL_HapticRumblePlay_REAL
+#define SDL_HapticRumbleStop SDL_HapticRumbleStop_REAL
+#define SDL_SetHintWithPriority SDL_SetHintWithPriority_REAL
+#define SDL_SetHint SDL_SetHint_REAL
+#define SDL_GetHint SDL_GetHint_REAL
+#define SDL_AddHintCallback SDL_AddHintCallback_REAL
+#define SDL_DelHintCallback SDL_DelHintCallback_REAL
+#define SDL_ClearHints SDL_ClearHints_REAL
+#define SDL_NumJoysticks SDL_NumJoysticks_REAL
+#define SDL_JoystickNameForIndex SDL_JoystickNameForIndex_REAL
+#define SDL_JoystickOpen SDL_JoystickOpen_REAL
+#define SDL_JoystickName SDL_JoystickName_REAL
+#define SDL_JoystickGetDeviceGUID SDL_JoystickGetDeviceGUID_REAL
+#define SDL_JoystickGetGUID SDL_JoystickGetGUID_REAL
+#define SDL_JoystickGetGUIDString SDL_JoystickGetGUIDString_REAL
+#define SDL_JoystickGetGUIDFromString SDL_JoystickGetGUIDFromString_REAL
+#define SDL_JoystickGetAttached SDL_JoystickGetAttached_REAL
+#define SDL_JoystickInstanceID SDL_JoystickInstanceID_REAL
+#define SDL_JoystickNumAxes SDL_JoystickNumAxes_REAL
+#define SDL_JoystickNumBalls SDL_JoystickNumBalls_REAL
+#define SDL_JoystickNumHats SDL_JoystickNumHats_REAL
+#define SDL_JoystickNumButtons SDL_JoystickNumButtons_REAL
+#define SDL_JoystickUpdate SDL_JoystickUpdate_REAL
+#define SDL_JoystickEventState SDL_JoystickEventState_REAL
+#define SDL_JoystickGetAxis SDL_JoystickGetAxis_REAL
+#define SDL_JoystickGetHat SDL_JoystickGetHat_REAL
+#define SDL_JoystickGetBall SDL_JoystickGetBall_REAL
+#define SDL_JoystickGetButton SDL_JoystickGetButton_REAL
+#define SDL_JoystickClose SDL_JoystickClose_REAL
+#define SDL_GetKeyboardFocus SDL_GetKeyboardFocus_REAL
+#define SDL_GetKeyboardState SDL_GetKeyboardState_REAL
+#define SDL_GetModState SDL_GetModState_REAL
+#define SDL_SetModState SDL_SetModState_REAL
+#define SDL_GetKeyFromScancode SDL_GetKeyFromScancode_REAL
+#define SDL_GetScancodeFromKey SDL_GetScancodeFromKey_REAL
+#define SDL_GetScancodeName SDL_GetScancodeName_REAL
+#define SDL_GetScancodeFromName SDL_GetScancodeFromName_REAL
+#define SDL_GetKeyName SDL_GetKeyName_REAL
+#define SDL_GetKeyFromName SDL_GetKeyFromName_REAL
+#define SDL_StartTextInput SDL_StartTextInput_REAL
+#define SDL_IsTextInputActive SDL_IsTextInputActive_REAL
+#define SDL_StopTextInput SDL_StopTextInput_REAL
+#define SDL_SetTextInputRect SDL_SetTextInputRect_REAL
+#define SDL_HasScreenKeyboardSupport SDL_HasScreenKeyboardSupport_REAL
+#define SDL_IsScreenKeyboardShown SDL_IsScreenKeyboardShown_REAL
+#define SDL_LoadObject SDL_LoadObject_REAL
+#define SDL_LoadFunction SDL_LoadFunction_REAL
+#define SDL_UnloadObject SDL_UnloadObject_REAL
+#define SDL_LogSetAllPriority SDL_LogSetAllPriority_REAL
+#define SDL_LogSetPriority SDL_LogSetPriority_REAL
+#define SDL_LogGetPriority SDL_LogGetPriority_REAL
+#define SDL_LogResetPriorities SDL_LogResetPriorities_REAL
+#define SDL_LogMessageV SDL_LogMessageV_REAL
+#define SDL_LogGetOutputFunction SDL_LogGetOutputFunction_REAL
+#define SDL_LogSetOutputFunction SDL_LogSetOutputFunction_REAL
+#define SDL_SetMainReady SDL_SetMainReady_REAL
+#define SDL_ShowMessageBox SDL_ShowMessageBox_REAL
+#define SDL_ShowSimpleMessageBox SDL_ShowSimpleMessageBox_REAL
+#define SDL_GetMouseFocus SDL_GetMouseFocus_REAL
+#define SDL_GetMouseState SDL_GetMouseState_REAL
+#define SDL_GetRelativeMouseState SDL_GetRelativeMouseState_REAL
+#define SDL_WarpMouseInWindow SDL_WarpMouseInWindow_REAL
+#define SDL_SetRelativeMouseMode SDL_SetRelativeMouseMode_REAL
+#define SDL_GetRelativeMouseMode SDL_GetRelativeMouseMode_REAL
+#define SDL_CreateCursor SDL_CreateCursor_REAL
+#define SDL_CreateColorCursor SDL_CreateColorCursor_REAL
+#define SDL_CreateSystemCursor SDL_CreateSystemCursor_REAL
+#define SDL_SetCursor SDL_SetCursor_REAL
+#define SDL_GetCursor SDL_GetCursor_REAL
+#define SDL_GetDefaultCursor SDL_GetDefaultCursor_REAL
+#define SDL_FreeCursor SDL_FreeCursor_REAL
+#define SDL_ShowCursor SDL_ShowCursor_REAL
+#define SDL_CreateMutex SDL_CreateMutex_REAL
+#define SDL_LockMutex SDL_LockMutex_REAL
+#define SDL_TryLockMutex SDL_TryLockMutex_REAL
+#define SDL_UnlockMutex SDL_UnlockMutex_REAL
+#define SDL_DestroyMutex SDL_DestroyMutex_REAL
+#define SDL_CreateSemaphore SDL_CreateSemaphore_REAL
+#define SDL_DestroySemaphore SDL_DestroySemaphore_REAL
+#define SDL_SemWait SDL_SemWait_REAL
+#define SDL_SemTryWait SDL_SemTryWait_REAL
+#define SDL_SemWaitTimeout SDL_SemWaitTimeout_REAL
+#define SDL_SemPost SDL_SemPost_REAL
+#define SDL_SemValue SDL_SemValue_REAL
+#define SDL_CreateCond SDL_CreateCond_REAL
+#define SDL_DestroyCond SDL_DestroyCond_REAL
+#define SDL_CondSignal SDL_CondSignal_REAL
+#define SDL_CondBroadcast SDL_CondBroadcast_REAL
+#define SDL_CondWait SDL_CondWait_REAL
+#define SDL_CondWaitTimeout SDL_CondWaitTimeout_REAL
+#define SDL_GetPixelFormatName SDL_GetPixelFormatName_REAL
+#define SDL_PixelFormatEnumToMasks SDL_PixelFormatEnumToMasks_REAL
+#define SDL_MasksToPixelFormatEnum SDL_MasksToPixelFormatEnum_REAL
+#define SDL_AllocFormat SDL_AllocFormat_REAL
+#define SDL_FreeFormat SDL_FreeFormat_REAL
+#define SDL_AllocPalette SDL_AllocPalette_REAL
+#define SDL_SetPixelFormatPalette SDL_SetPixelFormatPalette_REAL
+#define SDL_SetPaletteColors SDL_SetPaletteColors_REAL
+#define SDL_FreePalette SDL_FreePalette_REAL
+#define SDL_MapRGB SDL_MapRGB_REAL
+#define SDL_MapRGBA SDL_MapRGBA_REAL
+#define SDL_GetRGB SDL_GetRGB_REAL
+#define SDL_GetRGBA SDL_GetRGBA_REAL
+#define SDL_CalculateGammaRamp SDL_CalculateGammaRamp_REAL
+#define SDL_GetPlatform SDL_GetPlatform_REAL
+#define SDL_GetPowerInfo SDL_GetPowerInfo_REAL
+#define SDL_HasIntersection SDL_HasIntersection_REAL
+#define SDL_IntersectRect SDL_IntersectRect_REAL
+#define SDL_UnionRect SDL_UnionRect_REAL
+#define SDL_EnclosePoints SDL_EnclosePoints_REAL
+#define SDL_IntersectRectAndLine SDL_IntersectRectAndLine_REAL
+#define SDL_GetNumRenderDrivers SDL_GetNumRenderDrivers_REAL
+#define SDL_GetRenderDriverInfo SDL_GetRenderDriverInfo_REAL
+#define SDL_CreateWindowAndRenderer SDL_CreateWindowAndRenderer_REAL
+#define SDL_CreateRenderer SDL_CreateRenderer_REAL
+#define SDL_CreateSoftwareRenderer SDL_CreateSoftwareRenderer_REAL
+#define SDL_GetRenderer SDL_GetRenderer_REAL
+#define SDL_GetRendererInfo SDL_GetRendererInfo_REAL
+#define SDL_GetRendererOutputSize SDL_GetRendererOutputSize_REAL
+#define SDL_CreateTexture SDL_CreateTexture_REAL
+#define SDL_CreateTextureFromSurface SDL_CreateTextureFromSurface_REAL
+#define SDL_QueryTexture SDL_QueryTexture_REAL
+#define SDL_SetTextureColorMod SDL_SetTextureColorMod_REAL
+#define SDL_GetTextureColorMod SDL_GetTextureColorMod_REAL
+#define SDL_SetTextureAlphaMod SDL_SetTextureAlphaMod_REAL
+#define SDL_GetTextureAlphaMod SDL_GetTextureAlphaMod_REAL
+#define SDL_SetTextureBlendMode SDL_SetTextureBlendMode_REAL
+#define SDL_GetTextureBlendMode SDL_GetTextureBlendMode_REAL
+#define SDL_UpdateTexture SDL_UpdateTexture_REAL
+#define SDL_UpdateYUVTexture SDL_UpdateYUVTexture_REAL
+#define SDL_LockTexture SDL_LockTexture_REAL
+#define SDL_UnlockTexture SDL_UnlockTexture_REAL
+#define SDL_RenderTargetSupported SDL_RenderTargetSupported_REAL
+#define SDL_SetRenderTarget SDL_SetRenderTarget_REAL
+#define SDL_GetRenderTarget SDL_GetRenderTarget_REAL
+#define SDL_RenderSetLogicalSize SDL_RenderSetLogicalSize_REAL
+#define SDL_RenderGetLogicalSize SDL_RenderGetLogicalSize_REAL
+#define SDL_RenderSetViewport SDL_RenderSetViewport_REAL
+#define SDL_RenderGetViewport SDL_RenderGetViewport_REAL
+#define SDL_RenderSetClipRect SDL_RenderSetClipRect_REAL
+#define SDL_RenderGetClipRect SDL_RenderGetClipRect_REAL
+#define SDL_RenderSetScale SDL_RenderSetScale_REAL
+#define SDL_RenderGetScale SDL_RenderGetScale_REAL
+#define SDL_SetRenderDrawColor SDL_SetRenderDrawColor_REAL
+#define SDL_GetRenderDrawColor SDL_GetRenderDrawColor_REAL
+#define SDL_SetRenderDrawBlendMode SDL_SetRenderDrawBlendMode_REAL
+#define SDL_GetRenderDrawBlendMode SDL_GetRenderDrawBlendMode_REAL
+#define SDL_RenderClear SDL_RenderClear_REAL
+#define SDL_RenderDrawPoint SDL_RenderDrawPoint_REAL
+#define SDL_RenderDrawPoints SDL_RenderDrawPoints_REAL
+#define SDL_RenderDrawLine SDL_RenderDrawLine_REAL
+#define SDL_RenderDrawLines SDL_RenderDrawLines_REAL
+#define SDL_RenderDrawRect SDL_RenderDrawRect_REAL
+#define SDL_RenderDrawRects SDL_RenderDrawRects_REAL
+#define SDL_RenderFillRect SDL_RenderFillRect_REAL
+#define SDL_RenderFillRects SDL_RenderFillRects_REAL
+#define SDL_RenderCopy SDL_RenderCopy_REAL
+#define SDL_RenderCopyEx SDL_RenderCopyEx_REAL
+#define SDL_RenderReadPixels SDL_RenderReadPixels_REAL
+#define SDL_RenderPresent SDL_RenderPresent_REAL
+#define SDL_DestroyTexture SDL_DestroyTexture_REAL
+#define SDL_DestroyRenderer SDL_DestroyRenderer_REAL
+#define SDL_GL_BindTexture SDL_GL_BindTexture_REAL
+#define SDL_GL_UnbindTexture SDL_GL_UnbindTexture_REAL
+#define SDL_RWFromFile SDL_RWFromFile_REAL
+#define SDL_RWFromMem SDL_RWFromMem_REAL
+#define SDL_RWFromConstMem SDL_RWFromConstMem_REAL
+#define SDL_AllocRW SDL_AllocRW_REAL
+#define SDL_FreeRW SDL_FreeRW_REAL
+#define SDL_ReadU8 SDL_ReadU8_REAL
+#define SDL_ReadLE16 SDL_ReadLE16_REAL
+#define SDL_ReadBE16 SDL_ReadBE16_REAL
+#define SDL_ReadLE32 SDL_ReadLE32_REAL
+#define SDL_ReadBE32 SDL_ReadBE32_REAL
+#define SDL_ReadLE64 SDL_ReadLE64_REAL
+#define SDL_ReadBE64 SDL_ReadBE64_REAL
+#define SDL_WriteU8 SDL_WriteU8_REAL
+#define SDL_WriteLE16 SDL_WriteLE16_REAL
+#define SDL_WriteBE16 SDL_WriteBE16_REAL
+#define SDL_WriteLE32 SDL_WriteLE32_REAL
+#define SDL_WriteBE32 SDL_WriteBE32_REAL
+#define SDL_WriteLE64 SDL_WriteLE64_REAL
+#define SDL_WriteBE64 SDL_WriteBE64_REAL
+#define SDL_CreateShapedWindow SDL_CreateShapedWindow_REAL
+#define SDL_IsShapedWindow SDL_IsShapedWindow_REAL
+#define SDL_SetWindowShape SDL_SetWindowShape_REAL
+#define SDL_GetShapedWindowMode SDL_GetShapedWindowMode_REAL
+#define SDL_malloc SDL_malloc_REAL
+#define SDL_calloc SDL_calloc_REAL
+#define SDL_realloc SDL_realloc_REAL
+#define SDL_free SDL_free_REAL
+#define SDL_getenv SDL_getenv_REAL
+#define SDL_setenv SDL_setenv_REAL
+#define SDL_qsort SDL_qsort_REAL
+#define SDL_abs SDL_abs_REAL
+#define SDL_isdigit SDL_isdigit_REAL
+#define SDL_isspace SDL_isspace_REAL
+#define SDL_toupper SDL_toupper_REAL
+#define SDL_tolower SDL_tolower_REAL
+#define SDL_memset SDL_memset_REAL
+#define SDL_memcpy SDL_memcpy_REAL
+#define SDL_memmove SDL_memmove_REAL
+#define SDL_memcmp SDL_memcmp_REAL
+#define SDL_wcslen SDL_wcslen_REAL
+#define SDL_wcslcpy SDL_wcslcpy_REAL
+#define SDL_wcslcat SDL_wcslcat_REAL
+#define SDL_strlen SDL_strlen_REAL
+#define SDL_strlcpy SDL_strlcpy_REAL
+#define SDL_utf8strlcpy SDL_utf8strlcpy_REAL
+#define SDL_strlcat SDL_strlcat_REAL
+#define SDL_strdup SDL_strdup_REAL
+#define SDL_strrev SDL_strrev_REAL
+#define SDL_strupr SDL_strupr_REAL
+#define SDL_strlwr SDL_strlwr_REAL
+#define SDL_strchr SDL_strchr_REAL
+#define SDL_strrchr SDL_strrchr_REAL
+#define SDL_strstr SDL_strstr_REAL
+#define SDL_itoa SDL_itoa_REAL
+#define SDL_uitoa SDL_uitoa_REAL
+#define SDL_ltoa SDL_ltoa_REAL
+#define SDL_ultoa SDL_ultoa_REAL
+#define SDL_lltoa SDL_lltoa_REAL
+#define SDL_ulltoa SDL_ulltoa_REAL
+#define SDL_atoi SDL_atoi_REAL
+#define SDL_atof SDL_atof_REAL
+#define SDL_strtol SDL_strtol_REAL
+#define SDL_strtoul SDL_strtoul_REAL
+#define SDL_strtoll SDL_strtoll_REAL
+#define SDL_strtoull SDL_strtoull_REAL
+#define SDL_strtod SDL_strtod_REAL
+#define SDL_strcmp SDL_strcmp_REAL
+#define SDL_strncmp SDL_strncmp_REAL
+#define SDL_strcasecmp SDL_strcasecmp_REAL
+#define SDL_strncasecmp SDL_strncasecmp_REAL
+#define SDL_vsnprintf SDL_vsnprintf_REAL
+#define SDL_acos SDL_acos_REAL
+#define SDL_asin SDL_asin_REAL
+#define SDL_atan SDL_atan_REAL
+#define SDL_atan2 SDL_atan2_REAL
+#define SDL_ceil SDL_ceil_REAL
+#define SDL_copysign SDL_copysign_REAL
+#define SDL_cos SDL_cos_REAL
+#define SDL_cosf SDL_cosf_REAL
+#define SDL_fabs SDL_fabs_REAL
+#define SDL_floor SDL_floor_REAL
+#define SDL_log SDL_log_REAL
+#define SDL_pow SDL_pow_REAL
+#define SDL_scalbn SDL_scalbn_REAL
+#define SDL_sin SDL_sin_REAL
+#define SDL_sinf SDL_sinf_REAL
+#define SDL_sqrt SDL_sqrt_REAL
+#define SDL_iconv_open SDL_iconv_open_REAL
+#define SDL_iconv_close SDL_iconv_close_REAL
+#define SDL_iconv SDL_iconv_REAL
+#define SDL_iconv_string SDL_iconv_string_REAL
+#define SDL_CreateRGBSurfaceWithFormat SDL_CreateRGBSurfaceWithFormat_REAL
+#define SDL_CreateRGBSurfaceWithFormatFrom SDL_CreateRGBSurfaceWithFormatFrom_REAL
+#define SDL_CreateRGBSurface SDL_CreateRGBSurface_REAL
+#define SDL_CreateRGBSurfaceFrom SDL_CreateRGBSurfaceFrom_REAL
+#define SDL_FreeSurface SDL_FreeSurface_REAL
+#define SDL_SetSurfacePalette SDL_SetSurfacePalette_REAL
+#define SDL_LockSurface SDL_LockSurface_REAL
+#define SDL_UnlockSurface SDL_UnlockSurface_REAL
+#define SDL_LoadBMP_RW SDL_LoadBMP_RW_REAL
+#define SDL_SaveBMP_RW SDL_SaveBMP_RW_REAL
+#define SDL_SetSurfaceRLE SDL_SetSurfaceRLE_REAL
+#define SDL_SetColorKey SDL_SetColorKey_REAL
+#define SDL_GetColorKey SDL_GetColorKey_REAL
+#define SDL_SetSurfaceColorMod SDL_SetSurfaceColorMod_REAL
+#define SDL_GetSurfaceColorMod SDL_GetSurfaceColorMod_REAL
+#define SDL_SetSurfaceAlphaMod SDL_SetSurfaceAlphaMod_REAL
+#define SDL_GetSurfaceAlphaMod SDL_GetSurfaceAlphaMod_REAL
+#define SDL_SetSurfaceBlendMode SDL_SetSurfaceBlendMode_REAL
+#define SDL_GetSurfaceBlendMode SDL_GetSurfaceBlendMode_REAL
+#define SDL_SetClipRect SDL_SetClipRect_REAL
+#define SDL_GetClipRect SDL_GetClipRect_REAL
+#define SDL_ConvertSurface SDL_ConvertSurface_REAL
+#define SDL_ConvertSurfaceFormat SDL_ConvertSurfaceFormat_REAL
+#define SDL_ConvertPixels SDL_ConvertPixels_REAL
+#define SDL_FillRect SDL_FillRect_REAL
+#define SDL_FillRects SDL_FillRects_REAL
+#define SDL_UpperBlit SDL_UpperBlit_REAL
+#define SDL_LowerBlit SDL_LowerBlit_REAL
+#define SDL_SoftStretch SDL_SoftStretch_REAL
+#define SDL_UpperBlitScaled SDL_UpperBlitScaled_REAL
+#define SDL_LowerBlitScaled SDL_LowerBlitScaled_REAL
+#define SDL_GetWindowWMInfo SDL_GetWindowWMInfo_REAL
+#define SDL_GetThreadName SDL_GetThreadName_REAL
+#define SDL_ThreadID SDL_ThreadID_REAL
+#define SDL_GetThreadID SDL_GetThreadID_REAL
+#define SDL_SetThreadPriority SDL_SetThreadPriority_REAL
+#define SDL_WaitThread SDL_WaitThread_REAL
+#define SDL_DetachThread SDL_DetachThread_REAL
+#define SDL_TLSCreate SDL_TLSCreate_REAL
+#define SDL_TLSGet SDL_TLSGet_REAL
+#define SDL_TLSSet SDL_TLSSet_REAL
+#define SDL_GetTicks SDL_GetTicks_REAL
+#define SDL_GetPerformanceCounter SDL_GetPerformanceCounter_REAL
+#define SDL_GetPerformanceFrequency SDL_GetPerformanceFrequency_REAL
+#define SDL_Delay SDL_Delay_REAL
+#define SDL_AddTimer SDL_AddTimer_REAL
+#define SDL_RemoveTimer SDL_RemoveTimer_REAL
+#define SDL_GetNumTouchDevices SDL_GetNumTouchDevices_REAL
+#define SDL_GetTouchDevice SDL_GetTouchDevice_REAL
+#define SDL_GetNumTouchFingers SDL_GetNumTouchFingers_REAL
+#define SDL_GetTouchFinger SDL_GetTouchFinger_REAL
+#define SDL_GetVersion SDL_GetVersion_REAL
+#define SDL_GetRevision SDL_GetRevision_REAL
+#define SDL_GetRevisionNumber SDL_GetRevisionNumber_REAL
+#define SDL_GetNumVideoDrivers SDL_GetNumVideoDrivers_REAL
+#define SDL_GetVideoDriver SDL_GetVideoDriver_REAL
+#define SDL_VideoInit SDL_VideoInit_REAL
+#define SDL_VideoQuit SDL_VideoQuit_REAL
+#define SDL_GetCurrentVideoDriver SDL_GetCurrentVideoDriver_REAL
+#define SDL_GetNumVideoDisplays SDL_GetNumVideoDisplays_REAL
+#define SDL_GetDisplayName SDL_GetDisplayName_REAL
+#define SDL_GetDisplayBounds SDL_GetDisplayBounds_REAL
+#define SDL_GetDisplayDPI SDL_GetDisplayDPI_REAL
+#define SDL_GetNumDisplayModes SDL_GetNumDisplayModes_REAL
+#define SDL_GetDisplayMode SDL_GetDisplayMode_REAL
+#define SDL_GetDesktopDisplayMode SDL_GetDesktopDisplayMode_REAL
+#define SDL_GetCurrentDisplayMode SDL_GetCurrentDisplayMode_REAL
+#define SDL_GetClosestDisplayMode SDL_GetClosestDisplayMode_REAL
+#define SDL_GetWindowDisplayIndex SDL_GetWindowDisplayIndex_REAL
+#define SDL_SetWindowDisplayMode SDL_SetWindowDisplayMode_REAL
+#define SDL_GetWindowDisplayMode SDL_GetWindowDisplayMode_REAL
+#define SDL_GetWindowPixelFormat SDL_GetWindowPixelFormat_REAL
+#define SDL_CreateWindow SDL_CreateWindow_REAL
+#define SDL_CreateWindowFrom SDL_CreateWindowFrom_REAL
+#define SDL_GetWindowID SDL_GetWindowID_REAL
+#define SDL_GetWindowFromID SDL_GetWindowFromID_REAL
+#define SDL_GetWindowFlags SDL_GetWindowFlags_REAL
+#define SDL_SetWindowTitle SDL_SetWindowTitle_REAL
+#define SDL_GetWindowTitle SDL_GetWindowTitle_REAL
+#define SDL_SetWindowIcon SDL_SetWindowIcon_REAL
+#define SDL_SetWindowData SDL_SetWindowData_REAL
+#define SDL_GetWindowData SDL_GetWindowData_REAL
+#define SDL_SetWindowPosition SDL_SetWindowPosition_REAL
+#define SDL_GetWindowPosition SDL_GetWindowPosition_REAL
+#define SDL_SetWindowSize SDL_SetWindowSize_REAL
+#define SDL_GetWindowSize SDL_GetWindowSize_REAL
+#define SDL_SetWindowMinimumSize SDL_SetWindowMinimumSize_REAL
+#define SDL_GetWindowMinimumSize SDL_GetWindowMinimumSize_REAL
+#define SDL_SetWindowMaximumSize SDL_SetWindowMaximumSize_REAL
+#define SDL_GetWindowMaximumSize SDL_GetWindowMaximumSize_REAL
+#define SDL_SetWindowBordered SDL_SetWindowBordered_REAL
+#define SDL_ShowWindow SDL_ShowWindow_REAL
+#define SDL_HideWindow SDL_HideWindow_REAL
+#define SDL_RaiseWindow SDL_RaiseWindow_REAL
+#define SDL_MaximizeWindow SDL_MaximizeWindow_REAL
+#define SDL_MinimizeWindow SDL_MinimizeWindow_REAL
+#define SDL_RestoreWindow SDL_RestoreWindow_REAL
+#define SDL_SetWindowFullscreen SDL_SetWindowFullscreen_REAL
+#define SDL_GetWindowSurface SDL_GetWindowSurface_REAL
+#define SDL_UpdateWindowSurface SDL_UpdateWindowSurface_REAL
+#define SDL_UpdateWindowSurfaceRects SDL_UpdateWindowSurfaceRects_REAL
+#define SDL_SetWindowGrab SDL_SetWindowGrab_REAL
+#define SDL_GetWindowGrab SDL_GetWindowGrab_REAL
+#define SDL_SetWindowBrightness SDL_SetWindowBrightness_REAL
+#define SDL_GetWindowBrightness SDL_GetWindowBrightness_REAL
+#define SDL_SetWindowGammaRamp SDL_SetWindowGammaRamp_REAL
+#define SDL_GetWindowGammaRamp SDL_GetWindowGammaRamp_REAL
+#define SDL_DestroyWindow SDL_DestroyWindow_REAL
+#define SDL_IsScreenSaverEnabled SDL_IsScreenSaverEnabled_REAL
+#define SDL_EnableScreenSaver SDL_EnableScreenSaver_REAL
+#define SDL_DisableScreenSaver SDL_DisableScreenSaver_REAL
+#define SDL_GL_LoadLibrary SDL_GL_LoadLibrary_REAL
+#define SDL_GL_GetProcAddress SDL_GL_GetProcAddress_REAL
+#define SDL_GL_UnloadLibrary SDL_GL_UnloadLibrary_REAL
+#define SDL_GL_ExtensionSupported SDL_GL_ExtensionSupported_REAL
+#define SDL_GL_SetAttribute SDL_GL_SetAttribute_REAL
+#define SDL_GL_GetAttribute SDL_GL_GetAttribute_REAL
+#define SDL_GL_CreateContext SDL_GL_CreateContext_REAL
+#define SDL_GL_MakeCurrent SDL_GL_MakeCurrent_REAL
+#define SDL_GL_GetCurrentWindow SDL_GL_GetCurrentWindow_REAL
+#define SDL_GL_GetCurrentContext SDL_GL_GetCurrentContext_REAL
+#define SDL_GL_GetDrawableSize SDL_GL_GetDrawableSize_REAL
+#define SDL_GL_SetSwapInterval SDL_GL_SetSwapInterval_REAL
+#define SDL_GL_GetSwapInterval SDL_GL_GetSwapInterval_REAL
+#define SDL_GL_SwapWindow SDL_GL_SwapWindow_REAL
+#define SDL_GL_DeleteContext SDL_GL_DeleteContext_REAL
+#define SDL_vsscanf SDL_vsscanf_REAL
+#define SDL_GameControllerAddMappingsFromRW SDL_GameControllerAddMappingsFromRW_REAL
+#define SDL_GL_ResetAttributes SDL_GL_ResetAttributes_REAL
+#define SDL_HasAVX SDL_HasAVX_REAL
+#define SDL_GetDefaultAssertionHandler SDL_GetDefaultAssertionHandler_REAL
+#define SDL_GetAssertionHandler SDL_GetAssertionHandler_REAL
+#define SDL_DXGIGetOutputInfo SDL_DXGIGetOutputInfo_REAL
+#define SDL_RenderIsClipEnabled SDL_RenderIsClipEnabled_REAL
+#define SDL_WinRTRunApp SDL_WinRTRunApp_REAL
+#define SDL_WarpMouseGlobal SDL_WarpMouseGlobal_REAL
+#define SDL_WinRTGetFSPathUNICODE SDL_WinRTGetFSPathUNICODE_REAL
+#define SDL_WinRTGetFSPathUTF8 SDL_WinRTGetFSPathUTF8_REAL
+#define SDL_WinRTRunApp SDL_WinRTRunApp_REAL
+#define SDL_sqrtf SDL_sqrtf_REAL
+#define SDL_tan SDL_tan_REAL
+#define SDL_tanf SDL_tanf_REAL
+#define SDL_CaptureMouse SDL_CaptureMouse_REAL
+#define SDL_SetWindowHitTest SDL_SetWindowHitTest_REAL
+#define SDL_GetGlobalMouseState SDL_GetGlobalMouseState_REAL
+#define SDL_HasAVX2 SDL_HasAVX2_REAL
+#define SDL_QueueAudio SDL_QueueAudio_REAL
+#define SDL_GetQueuedAudioSize SDL_GetQueuedAudioSize_REAL
+#define SDL_ClearQueuedAudio SDL_ClearQueuedAudio_REAL
+#define SDL_GetGrabbedWindow SDL_GetGrabbedWindow_REAL
+#define SDL_SetWindowsMessageHook SDL_SetWindowsMessageHook_REAL
+#define SDL_JoystickCurrentPowerLevel SDL_JoystickCurrentPowerLevel_REAL
+#define SDL_GameControllerFromInstanceID SDL_GameControllerFromInstanceID_REAL
+#define SDL_JoystickFromInstanceID SDL_JoystickFromInstanceID_REAL
+#define SDL_GetDisplayUsableBounds SDL_GetDisplayUsableBounds_REAL
+#define SDL_GetWindowBordersSize SDL_GetWindowBordersSize_REAL
+#define SDL_SetWindowOpacity SDL_SetWindowOpacity_REAL
+#define SDL_GetWindowOpacity SDL_GetWindowOpacity_REAL
+#define SDL_SetWindowInputFocus SDL_SetWindowInputFocus_REAL
+#define SDL_SetWindowModalFor SDL_SetWindowModalFor_REAL
+#define SDL_RenderSetIntegerScale SDL_RenderSetIntegerScale_REAL
+#define SDL_RenderGetIntegerScale SDL_RenderGetIntegerScale_REAL
+#define SDL_DequeueAudio SDL_DequeueAudio_REAL
+#define SDL_SetWindowResizable SDL_SetWindowResizable_REAL
+#define SDL_CreateRGBSurfaceWithFormat SDL_CreateRGBSurfaceWithFormat_REAL
+#define SDL_CreateRGBSurfaceWithFormatFrom SDL_CreateRGBSurfaceWithFormatFrom_REAL
+#define SDL_GetHintBoolean SDL_GetHintBoolean_REAL
+#define SDL_JoystickGetDeviceVendor SDL_JoystickGetDeviceVendor_REAL
+#define SDL_JoystickGetDeviceProduct SDL_JoystickGetDeviceProduct_REAL
+#define SDL_JoystickGetDeviceProductVersion SDL_JoystickGetDeviceProductVersion_REAL
+#define SDL_JoystickGetVendor SDL_JoystickGetVendor_REAL
+#define SDL_JoystickGetProduct SDL_JoystickGetProduct_REAL
+#define SDL_JoystickGetProductVersion SDL_JoystickGetProductVersion_REAL
+#define SDL_GameControllerGetVendor SDL_GameControllerGetVendor_REAL
+#define SDL_GameControllerGetProduct SDL_GameControllerGetProduct_REAL
+#define SDL_GameControllerGetProductVersion SDL_GameControllerGetProductVersion_REAL
+#define SDL_HasNEON SDL_HasNEON_REAL
+#define SDL_GameControllerNumMappings SDL_GameControllerNumMappings_REAL
+#define SDL_GameControllerMappingForIndex SDL_GameControllerMappingForIndex_REAL
+#define SDL_JoystickGetAxisInitialState SDL_JoystickGetAxisInitialState_REAL
+#define SDL_JoystickGetDeviceType SDL_JoystickGetDeviceType_REAL
+#define SDL_JoystickGetType SDL_JoystickGetType_REAL
+#define SDL_MemoryBarrierReleaseFunction SDL_MemoryBarrierReleaseFunction_REAL
+#define SDL_MemoryBarrierAcquireFunction SDL_MemoryBarrierAcquireFunction_REAL
+#define SDL_JoystickGetDeviceInstanceID SDL_JoystickGetDeviceInstanceID_REAL
+#define SDL_utf8strlen SDL_utf8strlen_REAL
+#define SDL_LoadFile_RW SDL_LoadFile_RW_REAL
+#define SDL_wcscmp SDL_wcscmp_REAL
+#define SDL_ComposeCustomBlendMode SDL_ComposeCustomBlendMode_REAL
+#define SDL_DuplicateSurface SDL_DuplicateSurface_REAL
+#define SDL_Vulkan_LoadLibrary SDL_Vulkan_LoadLibrary_REAL
+#define SDL_Vulkan_GetVkGetInstanceProcAddr SDL_Vulkan_GetVkGetInstanceProcAddr_REAL
+#define SDL_Vulkan_UnloadLibrary SDL_Vulkan_UnloadLibrary_REAL
+#define SDL_Vulkan_GetInstanceExtensions SDL_Vulkan_GetInstanceExtensions_REAL
+#define SDL_Vulkan_CreateSurface SDL_Vulkan_CreateSurface_REAL
+#define SDL_Vulkan_GetDrawableSize SDL_Vulkan_GetDrawableSize_REAL
+#define SDL_LockJoysticks SDL_LockJoysticks_REAL
+#define SDL_UnlockJoysticks SDL_UnlockJoysticks_REAL
+#define SDL_GetMemoryFunctions SDL_GetMemoryFunctions_REAL
+#define SDL_SetMemoryFunctions SDL_SetMemoryFunctions_REAL
+#define SDL_GetNumAllocations SDL_GetNumAllocations_REAL
+#define SDL_NewAudioStream SDL_NewAudioStream_REAL
+#define SDL_AudioStreamPut SDL_AudioStreamPut_REAL
+#define SDL_AudioStreamGet SDL_AudioStreamGet_REAL
+#define SDL_AudioStreamClear SDL_AudioStreamClear_REAL
+#define SDL_AudioStreamAvailable SDL_AudioStreamAvailable_REAL
+#define SDL_FreeAudioStream SDL_FreeAudioStream_REAL
+#define SDL_AudioStreamFlush SDL_AudioStreamFlush_REAL
+#define SDL_acosf SDL_acosf_REAL
+#define SDL_asinf SDL_asinf_REAL
+#define SDL_atanf SDL_atanf_REAL
+#define SDL_atan2f SDL_atan2f_REAL
+#define SDL_ceilf SDL_ceilf_REAL
+#define SDL_copysignf SDL_copysignf_REAL
+#define SDL_fabsf SDL_fabsf_REAL
+#define SDL_floorf SDL_floorf_REAL
+#define SDL_logf SDL_logf_REAL
+#define SDL_powf SDL_powf_REAL
+#define SDL_scalbnf SDL_scalbnf_REAL
+#define SDL_fmod SDL_fmod_REAL
+#define SDL_fmodf SDL_fmodf_REAL
+#define SDL_SetYUVConversionMode SDL_SetYUVConversionMode_REAL
+#define SDL_GetYUVConversionMode SDL_GetYUVConversionMode_REAL
+#define SDL_GetYUVConversionModeForResolution SDL_GetYUVConversionModeForResolution_REAL
+#define SDL_RenderGetMetalLayer SDL_RenderGetMetalLayer_REAL
+#define SDL_RenderGetMetalCommandEncoder SDL_RenderGetMetalCommandEncoder_REAL
+#define SDL_IsAndroidTV SDL_IsAndroidTV_REAL
+#define SDL_WinRTGetDeviceFamily SDL_WinRTGetDeviceFamily_REAL
+#define SDL_log10 SDL_log10_REAL
+#define SDL_log10f SDL_log10f_REAL
+#define SDL_GameControllerMappingForDeviceIndex SDL_GameControllerMappingForDeviceIndex_REAL
+#define SDL_LinuxSetThreadPriority SDL_LinuxSetThreadPriority_REAL
+#define SDL_HasAVX512F SDL_HasAVX512F_REAL
+#define SDL_IsChromebook SDL_IsChromebook_REAL
+#define SDL_IsDeXMode SDL_IsDeXMode_REAL
+#define SDL_AndroidBackButton SDL_AndroidBackButton_REAL
+#define SDL_exp SDL_exp_REAL
+#define SDL_expf SDL_expf_REAL
+#define SDL_wcsdup SDL_wcsdup_REAL
+#define SDL_GameControllerRumble SDL_GameControllerRumble_REAL
+#define SDL_JoystickRumble SDL_JoystickRumble_REAL
+#define SDL_NumSensors SDL_NumSensors_REAL
+#define SDL_SensorGetDeviceName SDL_SensorGetDeviceName_REAL
+#define SDL_SensorGetDeviceType SDL_SensorGetDeviceType_REAL
+#define SDL_SensorGetDeviceNonPortableType SDL_SensorGetDeviceNonPortableType_REAL
+#define SDL_SensorGetDeviceInstanceID SDL_SensorGetDeviceInstanceID_REAL
+#define SDL_SensorOpen SDL_SensorOpen_REAL
+#define SDL_SensorFromInstanceID SDL_SensorFromInstanceID_REAL
+#define SDL_SensorGetName SDL_SensorGetName_REAL
+#define SDL_SensorGetType SDL_SensorGetType_REAL
+#define SDL_SensorGetNonPortableType SDL_SensorGetNonPortableType_REAL
+#define SDL_SensorGetInstanceID SDL_SensorGetInstanceID_REAL
+#define SDL_SensorGetData SDL_SensorGetData_REAL
+#define SDL_SensorClose SDL_SensorClose_REAL
+#define SDL_SensorUpdate SDL_SensorUpdate_REAL
+#define SDL_IsTablet SDL_IsTablet_REAL
+#define SDL_GetDisplayOrientation SDL_GetDisplayOrientation_REAL
+#define SDL_HasColorKey SDL_HasColorKey_REAL
+#define SDL_CreateThreadWithStackSize SDL_CreateThreadWithStackSize_REAL
+#define SDL_JoystickGetDevicePlayerIndex SDL_JoystickGetDevicePlayerIndex_REAL
+#define SDL_JoystickGetPlayerIndex SDL_JoystickGetPlayerIndex_REAL
+#define SDL_GameControllerGetPlayerIndex SDL_GameControllerGetPlayerIndex_REAL
diff --git a/source/3rd-party/SDL2/src/dynapi/SDL_dynapi_procs.h b/source/3rd-party/SDL2/src/dynapi/SDL_dynapi_procs.h
new file mode 100644
index 0000000..0a1f3ae
--- /dev/null
+++ b/source/3rd-party/SDL2/src/dynapi/SDL_dynapi_procs.h
@@ -0,0 +1,757 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+/* vi: set ts=4 sw=4 expandtab: */
+
+/*
+ DO NOT EDIT THIS FILE BY HAND. It is autogenerated by gendynapi.pl.
+ NEVER REARRANGE THIS FILE, THE ORDER IS ABI LAW.
+ Changing this file means bumping SDL_DYNAPI_VERSION. You can safely add
+ new items to the end of the file, though.
+ Also, this file gets included multiple times, don't add #pragma once, etc.
+*/
+
+/* direct jump magic can use these, the rest needs special code. */
+#if !SDL_DYNAPI_PROC_NO_VARARGS
+SDL_DYNAPI_PROC(int,SDL_SetError,(SDL_PRINTF_FORMAT_STRING const char *a, ...),(a),return)
+SDL_DYNAPI_PROC(void,SDL_Log,(SDL_PRINTF_FORMAT_STRING const char *a, ...),(a),)
+SDL_DYNAPI_PROC(void,SDL_LogVerbose,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_LogDebug,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_LogInfo,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_LogWarn,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_LogError,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_LogCritical,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_LogMessage,(int a, SDL_LogPriority b, SDL_PRINTF_FORMAT_STRING const char *c, ...),(a,b,c),)
+SDL_DYNAPI_PROC(int,SDL_sscanf,(const char *a, SDL_SCANF_FORMAT_STRING const char *b, ...),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_snprintf,(SDL_OUT_Z_CAP(b) char *a, size_t b, SDL_PRINTF_FORMAT_STRING const char *c, ...),(a,b,c),return)
+#endif
+
+#ifdef SDL_CreateThread
+#undef SDL_CreateThread
+#endif
+
+#if defined(__WIN32__) && !defined(HAVE_LIBC)
+SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThread,(SDL_ThreadFunction a, const char *b, void *c, pfnSDL_CurrentBeginThread d, pfnSDL_CurrentEndThread e),(a,b,c,d,e),return)
+#elif defined(__OS2__)
+SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThread,(SDL_ThreadFunction a, const char *b, void *c, pfnSDL_CurrentBeginThread d, pfnSDL_CurrentEndThread e),(a,b,c,d,e),return)
+#else
+SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThread,(SDL_ThreadFunction a, const char *b, void *c),(a,b,c),return)
+#endif
+
+#ifdef HAVE_STDIO_H
+SDL_DYNAPI_PROC(SDL_RWops*,SDL_RWFromFP,(FILE *a, SDL_bool b),(a,b),return)
+#else
+SDL_DYNAPI_PROC(SDL_RWops*,SDL_RWFromFP,(void *a, SDL_bool b),(a,b),return)
+#endif
+
+#ifdef __WIN32__
+SDL_DYNAPI_PROC(int,SDL_RegisterApp,(char *a, Uint32 b, void *c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_UnregisterApp,(void),(),)
+SDL_DYNAPI_PROC(int,SDL_Direct3D9GetAdapterIndex,(int a),(a),return)
+SDL_DYNAPI_PROC(IDirect3DDevice9*,SDL_RenderGetD3D9Device,(SDL_Renderer *a),(a),return)
+#endif
+
+#ifdef __IPHONEOS__
+SDL_DYNAPI_PROC(int,SDL_iPhoneSetAnimationCallback,(SDL_Window *a, int b, void c, void *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(void,SDL_iPhoneSetEventPump,(SDL_bool a),(a),)
+#endif
+
+#ifdef __ANDROID__
+SDL_DYNAPI_PROC(void*,SDL_AndroidGetJNIEnv,(void),(),return)
+SDL_DYNAPI_PROC(void*,SDL_AndroidGetActivity,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_AndroidGetInternalStoragePath,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_AndroidGetExternalStorageState,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_AndroidGetExternalStoragePath,(void),(),return)
+#endif
+
+SDL_DYNAPI_PROC(int,SDL_Init,(Uint32 a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_InitSubSystem,(Uint32 a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_QuitSubSystem,(Uint32 a),(a),)
+SDL_DYNAPI_PROC(Uint32,SDL_WasInit,(Uint32 a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_Quit,(void),(),)
+SDL_DYNAPI_PROC(SDL_assert_state,SDL_ReportAssertion,(SDL_assert_data *a, const char *b, const char *c, int d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(void,SDL_SetAssertionHandler,(SDL_AssertionHandler a, void *b),(a,b),)
+SDL_DYNAPI_PROC(const SDL_assert_data*,SDL_GetAssertionReport,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_ResetAssertionReport,(void),(),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_AtomicTryLock,(SDL_SpinLock *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_AtomicLock,(SDL_SpinLock *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_AtomicUnlock,(SDL_SpinLock *a),(a),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_AtomicCAS,(SDL_atomic_t *a, int b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_AtomicSet,(SDL_atomic_t *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_AtomicGet,(SDL_atomic_t *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_AtomicAdd,(SDL_atomic_t *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_AtomicCASPtr,(void **a, void *b, void *c),(a,b,c),return)
+SDL_DYNAPI_PROC(void*,SDL_AtomicSetPtr,(void **a, void *b),(a,b),return)
+SDL_DYNAPI_PROC(void*,SDL_AtomicGetPtr,(void **a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumAudioDrivers,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetAudioDriver,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_AudioInit,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_AudioQuit,(void),(),)
+SDL_DYNAPI_PROC(const char*,SDL_GetCurrentAudioDriver,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_OpenAudio,(SDL_AudioSpec *a, SDL_AudioSpec *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumAudioDevices,(int a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetAudioDeviceName,(int a, int b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_AudioDeviceID,SDL_OpenAudioDevice,(const char *a, int b, const SDL_AudioSpec *c, SDL_AudioSpec *d, int e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(SDL_AudioStatus,SDL_GetAudioStatus,(void),(),return)
+SDL_DYNAPI_PROC(SDL_AudioStatus,SDL_GetAudioDeviceStatus,(SDL_AudioDeviceID a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_PauseAudio,(int a),(a),)
+SDL_DYNAPI_PROC(void,SDL_PauseAudioDevice,(SDL_AudioDeviceID a, int b),(a,b),)
+SDL_DYNAPI_PROC(SDL_AudioSpec*,SDL_LoadWAV_RW,(SDL_RWops *a, int b, SDL_AudioSpec *c, Uint8 **d, Uint32 *e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(void,SDL_FreeWAV,(Uint8 *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_BuildAudioCVT,(SDL_AudioCVT *a, SDL_AudioFormat b, Uint8 c, int d, SDL_AudioFormat e, Uint8 f, int g),(a,b,c,d,e,f,g),return)
+SDL_DYNAPI_PROC(int,SDL_ConvertAudio,(SDL_AudioCVT *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_MixAudio,(Uint8 *a, const Uint8 *b, Uint32 c, int d),(a,b,c,d),)
+SDL_DYNAPI_PROC(void,SDL_MixAudioFormat,(Uint8 *a, const Uint8 *b, SDL_AudioFormat c, Uint32 d, int e),(a,b,c,d,e),)
+SDL_DYNAPI_PROC(void,SDL_LockAudio,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_LockAudioDevice,(SDL_AudioDeviceID a),(a),)
+SDL_DYNAPI_PROC(void,SDL_UnlockAudio,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_UnlockAudioDevice,(SDL_AudioDeviceID a),(a),)
+SDL_DYNAPI_PROC(void,SDL_CloseAudio,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_CloseAudioDevice,(SDL_AudioDeviceID a),(a),)
+SDL_DYNAPI_PROC(int,SDL_SetClipboardText,(const char *a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_GetClipboardText,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasClipboardText,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_GetCPUCount,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_GetCPUCacheLineSize,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasRDTSC,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasAltiVec,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasMMX,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_Has3DNow,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasSSE,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasSSE2,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasSSE3,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasSSE41,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasSSE42,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_GetSystemRAM,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetError,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_ClearError,(void),(),)
+SDL_DYNAPI_PROC(int,SDL_Error,(SDL_errorcode a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_PumpEvents,(void),(),)
+SDL_DYNAPI_PROC(int,SDL_PeepEvents,(SDL_Event *a, int b, SDL_eventaction c, Uint32 d, Uint32 e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasEvent,(Uint32 a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasEvents,(Uint32 a, Uint32 b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_FlushEvent,(Uint32 a),(a),)
+SDL_DYNAPI_PROC(void,SDL_FlushEvents,(Uint32 a, Uint32 b),(a,b),)
+SDL_DYNAPI_PROC(int,SDL_PollEvent,(SDL_Event *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_WaitEvent,(SDL_Event *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_WaitEventTimeout,(SDL_Event *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_PushEvent,(SDL_Event *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_SetEventFilter,(SDL_EventFilter a, void *b),(a,b),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_GetEventFilter,(SDL_EventFilter *a, void **b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_AddEventWatch,(SDL_EventFilter a, void *b),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_DelEventWatch,(SDL_EventFilter a, void *b),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_FilterEvents,(SDL_EventFilter a, void *b),(a,b),)
+SDL_DYNAPI_PROC(Uint8,SDL_EventState,(Uint32 a, int b),(a,b),return)
+SDL_DYNAPI_PROC(Uint32,SDL_RegisterEvents,(int a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_GetBasePath,(void),(),return)
+SDL_DYNAPI_PROC(char*,SDL_GetPrefPath,(const char *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GameControllerAddMapping,(const char *a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_GameControllerMappingForGUID,(SDL_JoystickGUID a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_GameControllerMapping,(SDL_GameController *a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsGameController,(int a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_GameControllerNameForIndex,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_GameController*,SDL_GameControllerOpen,(int a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_GameControllerName,(SDL_GameController *a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_GameControllerGetAttached,(SDL_GameController *a),(a),return)
+SDL_DYNAPI_PROC(SDL_Joystick*,SDL_GameControllerGetJoystick,(SDL_GameController *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GameControllerEventState,(int a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_GameControllerUpdate,(void),(),)
+SDL_DYNAPI_PROC(SDL_GameControllerAxis,SDL_GameControllerGetAxisFromString,(const char *a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_GameControllerGetStringForAxis,(SDL_GameControllerAxis a),(a),return)
+SDL_DYNAPI_PROC(SDL_GameControllerButtonBind,SDL_GameControllerGetBindForAxis,(SDL_GameController *a, SDL_GameControllerAxis b),(a,b),return)
+SDL_DYNAPI_PROC(Sint16,SDL_GameControllerGetAxis,(SDL_GameController *a, SDL_GameControllerAxis b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_GameControllerButton,SDL_GameControllerGetButtonFromString,(const char *a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_GameControllerGetStringForButton,(SDL_GameControllerButton a),(a),return)
+SDL_DYNAPI_PROC(SDL_GameControllerButtonBind,SDL_GameControllerGetBindForButton,(SDL_GameController *a, SDL_GameControllerButton b),(a,b),return)
+SDL_DYNAPI_PROC(Uint8,SDL_GameControllerGetButton,(SDL_GameController *a, SDL_GameControllerButton b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_GameControllerClose,(SDL_GameController *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_RecordGesture,(SDL_TouchID a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SaveAllDollarTemplates,(SDL_RWops *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SaveDollarTemplate,(SDL_GestureID a, SDL_RWops *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_LoadDollarTemplates,(SDL_TouchID a, SDL_RWops *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_NumHaptics,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_HapticName,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_Haptic*,SDL_HapticOpen,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticOpened,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticIndex,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_MouseIsHaptic,(void),(),return)
+SDL_DYNAPI_PROC(SDL_Haptic*,SDL_HapticOpenFromMouse,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_JoystickIsHaptic,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(SDL_Haptic*,SDL_HapticOpenFromJoystick,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_HapticClose,(SDL_Haptic *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_HapticNumEffects,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticNumEffectsPlaying,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(unsigned int,SDL_HapticQuery,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticNumAxes,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticEffectSupported,(SDL_Haptic *a, SDL_HapticEffect *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_HapticNewEffect,(SDL_Haptic *a, SDL_HapticEffect *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_HapticUpdateEffect,(SDL_Haptic *a, int b, SDL_HapticEffect *c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_HapticRunEffect,(SDL_Haptic *a, int b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_HapticStopEffect,(SDL_Haptic *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_HapticDestroyEffect,(SDL_Haptic *a, int b),(a,b),)
+SDL_DYNAPI_PROC(int,SDL_HapticGetEffectStatus,(SDL_Haptic *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_HapticSetGain,(SDL_Haptic *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_HapticSetAutocenter,(SDL_Haptic *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_HapticPause,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticUnpause,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticStopAll,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticRumbleSupported,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticRumbleInit,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_HapticRumblePlay,(SDL_Haptic *a, float b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_HapticRumbleStop,(SDL_Haptic *a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_SetHintWithPriority,(const char *a, const char *b, SDL_HintPriority c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_SetHint,(const char *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetHint,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_AddHintCallback,(const char *a, SDL_HintCallback b, void *c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_DelHintCallback,(const char *a, SDL_HintCallback b, void *c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_ClearHints,(void),(),)
+SDL_DYNAPI_PROC(int,SDL_NumJoysticks,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_JoystickNameForIndex,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_Joystick*,SDL_JoystickOpen,(int a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_JoystickName,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(SDL_JoystickGUID,SDL_JoystickGetDeviceGUID,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_JoystickGUID,SDL_JoystickGetGUID,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_JoystickGetGUIDString,(SDL_JoystickGUID a, char *b, int c),(a,b,c),)
+SDL_DYNAPI_PROC(SDL_JoystickGUID,SDL_JoystickGetGUIDFromString,(const char *a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_JoystickGetAttached,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(SDL_JoystickID,SDL_JoystickInstanceID,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_JoystickNumAxes,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_JoystickNumBalls,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_JoystickNumHats,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_JoystickNumButtons,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_JoystickUpdate,(void),(),)
+SDL_DYNAPI_PROC(int,SDL_JoystickEventState,(int a),(a),return)
+SDL_DYNAPI_PROC(Sint16,SDL_JoystickGetAxis,(SDL_Joystick *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(Uint8,SDL_JoystickGetHat,(SDL_Joystick *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_JoystickGetBall,(SDL_Joystick *a, int b, int *c, int *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(Uint8,SDL_JoystickGetButton,(SDL_Joystick *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_JoystickClose,(SDL_Joystick *a),(a),)
+SDL_DYNAPI_PROC(SDL_Window*,SDL_GetKeyboardFocus,(void),(),return)
+SDL_DYNAPI_PROC(const Uint8*,SDL_GetKeyboardState,(int *a),(a),return)
+SDL_DYNAPI_PROC(SDL_Keymod,SDL_GetModState,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_SetModState,(SDL_Keymod a),(a),)
+SDL_DYNAPI_PROC(SDL_Keycode,SDL_GetKeyFromScancode,(SDL_Scancode a),(a),return)
+SDL_DYNAPI_PROC(SDL_Scancode,SDL_GetScancodeFromKey,(SDL_Keycode a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetScancodeName,(SDL_Scancode a),(a),return)
+SDL_DYNAPI_PROC(SDL_Scancode,SDL_GetScancodeFromName,(const char *a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetKeyName,(SDL_Keycode a),(a),return)
+SDL_DYNAPI_PROC(SDL_Keycode,SDL_GetKeyFromName,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_StartTextInput,(void),(),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsTextInputActive,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_StopTextInput,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_SetTextInputRect,(SDL_Rect *a),(a),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasScreenKeyboardSupport,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsScreenKeyboardShown,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(void*,SDL_LoadObject,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void*,SDL_LoadFunction,(void *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_UnloadObject,(void *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_LogSetAllPriority,(SDL_LogPriority a),(a),)
+SDL_DYNAPI_PROC(void,SDL_LogSetPriority,(int a, SDL_LogPriority b),(a,b),)
+SDL_DYNAPI_PROC(SDL_LogPriority,SDL_LogGetPriority,(int a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_LogResetPriorities,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_LogMessageV,(int a, SDL_LogPriority b, const char *c, va_list d),(a,b,c,d),)
+SDL_DYNAPI_PROC(void,SDL_LogGetOutputFunction,(SDL_LogOutputFunction *a, void **b),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_LogSetOutputFunction,(SDL_LogOutputFunction a, void *b),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_SetMainReady,(void),(),)
+SDL_DYNAPI_PROC(int,SDL_ShowMessageBox,(const SDL_MessageBoxData *a, int *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_ShowSimpleMessageBox,(Uint32 a, const char *b, const char *c, SDL_Window *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(SDL_Window*,SDL_GetMouseFocus,(void),(),return)
+SDL_DYNAPI_PROC(Uint32,SDL_GetMouseState,(int *a, int *b),(a,b),return)
+SDL_DYNAPI_PROC(Uint32,SDL_GetRelativeMouseState,(int *a, int *b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_WarpMouseInWindow,(SDL_Window *a, int b, int c),(a,b,c),)
+SDL_DYNAPI_PROC(int,SDL_SetRelativeMouseMode,(SDL_bool a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_GetRelativeMouseMode,(void),(),return)
+SDL_DYNAPI_PROC(SDL_Cursor*,SDL_CreateCursor,(const Uint8 *a, const Uint8 *b, int c, int d, int e, int f),(a,b,c,d,e,f),return)
+SDL_DYNAPI_PROC(SDL_Cursor*,SDL_CreateColorCursor,(SDL_Surface *a, int b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_Cursor*,SDL_CreateSystemCursor,(SDL_SystemCursor a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_SetCursor,(SDL_Cursor *a),(a),)
+SDL_DYNAPI_PROC(SDL_Cursor*,SDL_GetCursor,(void),(),return)
+SDL_DYNAPI_PROC(SDL_Cursor*,SDL_GetDefaultCursor,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_FreeCursor,(SDL_Cursor *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_ShowCursor,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_mutex*,SDL_CreateMutex,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_LockMutex,(SDL_mutex *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_TryLockMutex,(SDL_mutex *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_UnlockMutex,(SDL_mutex *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_DestroyMutex,(SDL_mutex *a),(a),)
+SDL_DYNAPI_PROC(SDL_sem*,SDL_CreateSemaphore,(Uint32 a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_DestroySemaphore,(SDL_sem *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_SemWait,(SDL_sem *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SemTryWait,(SDL_sem *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SemWaitTimeout,(SDL_sem *a, Uint32 b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_SemPost,(SDL_sem *a),(a),return)
+SDL_DYNAPI_PROC(Uint32,SDL_SemValue,(SDL_sem *a),(a),return)
+SDL_DYNAPI_PROC(SDL_cond*,SDL_CreateCond,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_DestroyCond,(SDL_cond *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_CondSignal,(SDL_cond *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_CondBroadcast,(SDL_cond *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_CondWait,(SDL_cond *a, SDL_mutex *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_CondWaitTimeout,(SDL_cond *a, SDL_mutex *b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetPixelFormatName,(Uint32 a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_PixelFormatEnumToMasks,(Uint32 a, int *b, Uint32 *c, Uint32 *d, Uint32 *e, Uint32 *f),(a,b,c,d,e,f),return)
+SDL_DYNAPI_PROC(Uint32,SDL_MasksToPixelFormatEnum,(int a, Uint32 b, Uint32 c, Uint32 d, Uint32 e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(SDL_PixelFormat*,SDL_AllocFormat,(Uint32 a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_FreeFormat,(SDL_PixelFormat *a),(a),)
+SDL_DYNAPI_PROC(SDL_Palette*,SDL_AllocPalette,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetPixelFormatPalette,(SDL_PixelFormat *a, SDL_Palette *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_SetPaletteColors,(SDL_Palette *a, const SDL_Color *b, int c, int d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(void,SDL_FreePalette,(SDL_Palette *a),(a),)
+SDL_DYNAPI_PROC(Uint32,SDL_MapRGB,(const SDL_PixelFormat *a, Uint8 b, Uint8 c, Uint8 d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(Uint32,SDL_MapRGBA,(const SDL_PixelFormat *a, Uint8 b, Uint8 c, Uint8 d, Uint8 e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(void,SDL_GetRGB,(Uint32 a, const SDL_PixelFormat *b, Uint8 *c, Uint8 *d, Uint8 *e),(a,b,c,d,e),)
+SDL_DYNAPI_PROC(void,SDL_GetRGBA,(Uint32 a, const SDL_PixelFormat *b, Uint8 *c, Uint8 *d, Uint8 *e, Uint8 *f),(a,b,c,d,e,f),)
+SDL_DYNAPI_PROC(void,SDL_CalculateGammaRamp,(float a, Uint16 *b),(a,b),)
+SDL_DYNAPI_PROC(const char*,SDL_GetPlatform,(void),(),return)
+SDL_DYNAPI_PROC(SDL_PowerState,SDL_GetPowerInfo,(int *a, int *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasIntersection,(const SDL_Rect *a, const SDL_Rect *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IntersectRect,(const SDL_Rect *a, const SDL_Rect *b, SDL_Rect *c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_UnionRect,(const SDL_Rect *a, const SDL_Rect *b, SDL_Rect *c),(a,b,c),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_EnclosePoints,(const SDL_Point *a, int b, const SDL_Rect *c, SDL_Rect *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IntersectRectAndLine,(const SDL_Rect *a, int *b, int *c, int *d, int *e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumRenderDrivers,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_GetRenderDriverInfo,(int a, SDL_RendererInfo *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_CreateWindowAndRenderer,(int a, int b, Uint32 c, SDL_Window **d, SDL_Renderer **e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateRenderer,(SDL_Window *a, int b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateSoftwareRenderer,(SDL_Surface *a),(a),return)
+SDL_DYNAPI_PROC(SDL_Renderer*,SDL_GetRenderer,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GetRendererInfo,(SDL_Renderer *a, SDL_RendererInfo *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetRendererOutputSize,(SDL_Renderer *a, int *b, int *c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTexture,(SDL_Renderer *a, Uint32 b, int c, int d, int e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTextureFromSurface,(SDL_Renderer *a, SDL_Surface *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_QueryTexture,(SDL_Texture *a, Uint32 *b, int *c, int *d, int *e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(int,SDL_SetTextureColorMod,(SDL_Texture *a, Uint8 b, Uint8 c, Uint8 d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_GetTextureColorMod,(SDL_Texture *a, Uint8 *b, Uint8 *c, Uint8 *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_SetTextureAlphaMod,(SDL_Texture *a, Uint8 b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetTextureAlphaMod,(SDL_Texture *a, Uint8 *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_SetTextureBlendMode,(SDL_Texture *a, SDL_BlendMode b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetTextureBlendMode,(SDL_Texture *a, SDL_BlendMode *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_UpdateTexture,(SDL_Texture *a, const SDL_Rect *b, const void *c, int d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_UpdateYUVTexture,(SDL_Texture *a, const SDL_Rect *b, const Uint8 *c, int d, const Uint8 *e, int f, const Uint8 *g, int h),(a,b,c,d,e,f,g,h),return)
+SDL_DYNAPI_PROC(int,SDL_LockTexture,(SDL_Texture *a, const SDL_Rect *b, void **c, int *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(void,SDL_UnlockTexture,(SDL_Texture *a),(a),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_RenderTargetSupported,(SDL_Renderer *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetRenderTarget,(SDL_Renderer *a, SDL_Texture *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_Texture*,SDL_GetRenderTarget,(SDL_Renderer *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_RenderSetLogicalSize,(SDL_Renderer *a, int b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_RenderGetLogicalSize,(SDL_Renderer *a, int *b, int *c),(a,b,c),)
+SDL_DYNAPI_PROC(int,SDL_RenderSetViewport,(SDL_Renderer *a, const SDL_Rect *b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_RenderGetViewport,(SDL_Renderer *a, SDL_Rect *b),(a,b),)
+SDL_DYNAPI_PROC(int,SDL_RenderSetClipRect,(SDL_Renderer *a, const SDL_Rect *b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_RenderGetClipRect,(SDL_Renderer *a, SDL_Rect *b),(a,b),)
+SDL_DYNAPI_PROC(int,SDL_RenderSetScale,(SDL_Renderer *a, float b, float c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_RenderGetScale,(SDL_Renderer *a, float *b, float *c),(a,b,c),)
+SDL_DYNAPI_PROC(int,SDL_SetRenderDrawColor,(SDL_Renderer *a, Uint8 b, Uint8 c, Uint8 d, Uint8 e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(int,SDL_GetRenderDrawColor,(SDL_Renderer *a, Uint8 *b, Uint8 *c, Uint8 *d, Uint8 *e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(int,SDL_SetRenderDrawBlendMode,(SDL_Renderer *a, SDL_BlendMode b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetRenderDrawBlendMode,(SDL_Renderer *a, SDL_BlendMode *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_RenderClear,(SDL_Renderer *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_RenderDrawPoint,(SDL_Renderer *a, int b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_RenderDrawPoints,(SDL_Renderer *a, const SDL_Point *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_RenderDrawLine,(SDL_Renderer *a, int b, int c, int d, int e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(int,SDL_RenderDrawLines,(SDL_Renderer *a, const SDL_Point *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_RenderDrawRect,(SDL_Renderer *a, const SDL_Rect *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_RenderDrawRects,(SDL_Renderer *a, const SDL_Rect *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_RenderFillRect,(SDL_Renderer *a, const SDL_Rect *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_RenderFillRects,(SDL_Renderer *a, const SDL_Rect *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_RenderCopy,(SDL_Renderer *a, SDL_Texture *b, const SDL_Rect *c, const SDL_Rect *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_RenderCopyEx,(SDL_Renderer *a, SDL_Texture *b, const SDL_Rect *c, const SDL_Rect *d, const double e, const SDL_Point *f, const SDL_RendererFlip g),(a,b,c,d,e,f,g),return)
+SDL_DYNAPI_PROC(int,SDL_RenderReadPixels,(SDL_Renderer *a, const SDL_Rect *b, Uint32 c, void *d, int e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(void,SDL_RenderPresent,(SDL_Renderer *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_DestroyTexture,(SDL_Texture *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_DestroyRenderer,(SDL_Renderer *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_GL_BindTexture,(SDL_Texture *a, float *b, float *c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_GL_UnbindTexture,(SDL_Texture *a),(a),return)
+SDL_DYNAPI_PROC(SDL_RWops*,SDL_RWFromFile,(const char *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_RWops*,SDL_RWFromMem,(void *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_RWops*,SDL_RWFromConstMem,(const void *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_RWops*,SDL_AllocRW,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_FreeRW,(SDL_RWops *a),(a),)
+SDL_DYNAPI_PROC(Uint8,SDL_ReadU8,(SDL_RWops *a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_ReadLE16,(SDL_RWops *a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_ReadBE16,(SDL_RWops *a),(a),return)
+SDL_DYNAPI_PROC(Uint32,SDL_ReadLE32,(SDL_RWops *a),(a),return)
+SDL_DYNAPI_PROC(Uint32,SDL_ReadBE32,(SDL_RWops *a),(a),return)
+SDL_DYNAPI_PROC(Uint64,SDL_ReadLE64,(SDL_RWops *a),(a),return)
+SDL_DYNAPI_PROC(Uint64,SDL_ReadBE64,(SDL_RWops *a),(a),return)
+SDL_DYNAPI_PROC(size_t,SDL_WriteU8,(SDL_RWops *a, Uint8 b),(a,b),return)
+SDL_DYNAPI_PROC(size_t,SDL_WriteLE16,(SDL_RWops *a, Uint16 b),(a,b),return)
+SDL_DYNAPI_PROC(size_t,SDL_WriteBE16,(SDL_RWops *a, Uint16 b),(a,b),return)
+SDL_DYNAPI_PROC(size_t,SDL_WriteLE32,(SDL_RWops *a, Uint32 b),(a,b),return)
+SDL_DYNAPI_PROC(size_t,SDL_WriteBE32,(SDL_RWops *a, Uint32 b),(a,b),return)
+SDL_DYNAPI_PROC(size_t,SDL_WriteLE64,(SDL_RWops *a, Uint64 b),(a,b),return)
+SDL_DYNAPI_PROC(size_t,SDL_WriteBE64,(SDL_RWops *a, Uint64 b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_Window*,SDL_CreateShapedWindow,(const char *a, unsigned int b, unsigned int c, unsigned int d, unsigned int e, Uint32 f),(a,b,c,d,e,f),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsShapedWindow,(const SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetWindowShape,(SDL_Window *a, SDL_Surface *b, SDL_WindowShapeMode *c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_GetShapedWindowMode,(SDL_Window *a, SDL_WindowShapeMode *b),(a,b),return)
+SDL_DYNAPI_PROC(void*,SDL_malloc,(size_t a),(a),return)
+SDL_DYNAPI_PROC(void*,SDL_calloc,(size_t a, size_t b),(a,b),return)
+SDL_DYNAPI_PROC(void*,SDL_realloc,(void *a, size_t b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_free,(void *a),(a),)
+SDL_DYNAPI_PROC(char*,SDL_getenv,(const char *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_setenv,(const char *a, const char *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_qsort,(void *a, size_t b, size_t c, int (*d)(const void *, const void *)),(a,b,c,d),)
+SDL_DYNAPI_PROC(int,SDL_abs,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_isdigit,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_isspace,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_toupper,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_tolower,(int a),(a),return)
+SDL_DYNAPI_PROC(void*,SDL_memset,(SDL_OUT_BYTECAP(c) void *a, int b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(void*,SDL_memcpy,(SDL_OUT_BYTECAP(c) void *a, SDL_IN_BYTECAP(c) const void *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(void*,SDL_memmove,(SDL_OUT_BYTECAP(c) void *a, SDL_IN_BYTECAP(c) const void *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_memcmp,(const void *a, const void *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(size_t,SDL_wcslen,(const wchar_t *a),(a),return)
+SDL_DYNAPI_PROC(size_t,SDL_wcslcpy,(SDL_OUT_Z_CAP(c) wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(size_t,SDL_wcslcat,(SDL_INOUT_Z_CAP(c) wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(size_t,SDL_strlen,(const char *a),(a),return)
+SDL_DYNAPI_PROC(size_t,SDL_strlcpy,(SDL_OUT_Z_CAP(c) char *a, const char *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(size_t,SDL_utf8strlcpy,(SDL_OUT_Z_CAP(c) char *a, const char *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(size_t,SDL_strlcat,(SDL_INOUT_Z_CAP(c) char *a, const char *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(char*,SDL_strdup,(const char *a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_strrev,(char *a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_strupr,(char *a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_strlwr,(char *a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_strchr,(const char *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(char*,SDL_strrchr,(const char *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(char*,SDL_strstr,(const char *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(char*,SDL_itoa,(int a, char *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(char*,SDL_uitoa,(unsigned int a, char *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(char*,SDL_ltoa,(long a, char *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(char*,SDL_ultoa,(unsigned long a, char *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(char*,SDL_lltoa,(Sint64 a, char *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(char*,SDL_ulltoa,(Uint64 a, char *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_atoi,(const char *a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_atof,(const char *a),(a),return)
+SDL_DYNAPI_PROC(long,SDL_strtol,(const char *a, char **b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(unsigned long,SDL_strtoul,(const char *a, char **b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(Sint64,SDL_strtoll,(const char *a, char **b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(Uint64,SDL_strtoull,(const char *a, char **b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(double,SDL_strtod,(const char *a, char **b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_strcmp,(const char *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_strncmp,(const char *a, const char *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_strcasecmp,(const char *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_strncasecmp,(const char *a, const char *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_vsnprintf,(SDL_OUT_Z_CAP(b) char *a, size_t b, const char *c, va_list d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(double,SDL_acos,(double a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_asin,(double a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_atan,(double a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_atan2,(double a, double b),(a,b),return)
+SDL_DYNAPI_PROC(double,SDL_ceil,(double a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_copysign,(double a, double b),(a,b),return)
+SDL_DYNAPI_PROC(double,SDL_cos,(double a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_cosf,(float a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_fabs,(double a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_floor,(double a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_log,(double a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_pow,(double a, double b),(a,b),return)
+SDL_DYNAPI_PROC(double,SDL_scalbn,(double a, int b),(a,b),return)
+SDL_DYNAPI_PROC(double,SDL_sin,(double a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_sinf,(float a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_sqrt,(double a),(a),return)
+SDL_DYNAPI_PROC(SDL_iconv_t,SDL_iconv_open,(const char *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_iconv_close,(SDL_iconv_t a),(a),return)
+SDL_DYNAPI_PROC(size_t,SDL_iconv,(SDL_iconv_t a, const char **b, size_t *c, char **d, size_t *e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(char*,SDL_iconv_string,(const char *a, const char *b, const char *c, size_t d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_CreateRGBSurface,(Uint32 a, int b, int c, int d, Uint32 e, Uint32 f, Uint32 g, Uint32 h),(a,b,c,d,e,f,g,h),return)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_CreateRGBSurfaceFrom,(void *a, int b, int c, int d, int e, Uint32 f, Uint32 g, Uint32 h, Uint32 i),(a,b,c,d,e,f,g,h,i),return)
+SDL_DYNAPI_PROC(void,SDL_FreeSurface,(SDL_Surface *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_SetSurfacePalette,(SDL_Surface *a, SDL_Palette *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_LockSurface,(SDL_Surface *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_UnlockSurface,(SDL_Surface *a),(a),)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_LoadBMP_RW,(SDL_RWops *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_SaveBMP_RW,(SDL_Surface *a, SDL_RWops *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_SetSurfaceRLE,(SDL_Surface *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_SetColorKey,(SDL_Surface *a, int b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_GetColorKey,(SDL_Surface *a, Uint32 *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_SetSurfaceColorMod,(SDL_Surface *a, Uint8 b, Uint8 c, Uint8 d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_GetSurfaceColorMod,(SDL_Surface *a, Uint8 *b, Uint8 *c, Uint8 *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_SetSurfaceAlphaMod,(SDL_Surface *a, Uint8 b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetSurfaceAlphaMod,(SDL_Surface *a, Uint8 *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_SetSurfaceBlendMode,(SDL_Surface *a, SDL_BlendMode b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetSurfaceBlendMode,(SDL_Surface *a, SDL_BlendMode *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_SetClipRect,(SDL_Surface *a, const SDL_Rect *b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_GetClipRect,(SDL_Surface *a, SDL_Rect *b),(a,b),)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_ConvertSurface,(SDL_Surface *a, const SDL_PixelFormat *b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_ConvertSurfaceFormat,(SDL_Surface *a, Uint32 b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_ConvertPixels,(int a, int b, Uint32 c, const void *d, int e, Uint32 f, void *g, int h),(a,b,c,d,e,f,g,h),return)
+SDL_DYNAPI_PROC(int,SDL_FillRect,(SDL_Surface *a, const SDL_Rect *b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_FillRects,(SDL_Surface *a, const SDL_Rect *b, int c, Uint32 d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_UpperBlit,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, SDL_Rect *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_LowerBlit,(SDL_Surface *a, SDL_Rect *b, SDL_Surface *c, SDL_Rect *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_SoftStretch,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, const SDL_Rect *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_UpperBlitScaled,(SDL_Surface *a, const SDL_Rect *b, SDL_Surface *c, SDL_Rect *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_LowerBlitScaled,(SDL_Surface *a, SDL_Rect *b, SDL_Surface *c, SDL_Rect *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_GetWindowWMInfo,(SDL_Window *a, SDL_SysWMinfo *b),(a,b),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetThreadName,(SDL_Thread *a),(a),return)
+SDL_DYNAPI_PROC(SDL_threadID,SDL_ThreadID,(void),(),return)
+SDL_DYNAPI_PROC(SDL_threadID,SDL_GetThreadID,(SDL_Thread *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetThreadPriority,(SDL_ThreadPriority a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_WaitThread,(SDL_Thread *a, int *b),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_DetachThread,(SDL_Thread *a),(a),)
+SDL_DYNAPI_PROC(SDL_TLSID,SDL_TLSCreate,(void),(),return)
+SDL_DYNAPI_PROC(void*,SDL_TLSGet,(SDL_TLSID a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_TLSSet,(SDL_TLSID a, const void *b, void (*c)(void*)),(a,b,c),return)
+SDL_DYNAPI_PROC(Uint32,SDL_GetTicks,(void),(),return)
+SDL_DYNAPI_PROC(Uint64,SDL_GetPerformanceCounter,(void),(),return)
+SDL_DYNAPI_PROC(Uint64,SDL_GetPerformanceFrequency,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_Delay,(Uint32 a),(a),)
+SDL_DYNAPI_PROC(SDL_TimerID,SDL_AddTimer,(Uint32 a, SDL_TimerCallback b, void *c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_RemoveTimer,(SDL_TimerID a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumTouchDevices,(void),(),return)
+SDL_DYNAPI_PROC(SDL_TouchID,SDL_GetTouchDevice,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumTouchFingers,(SDL_TouchID a),(a),return)
+SDL_DYNAPI_PROC(SDL_Finger*,SDL_GetTouchFinger,(SDL_TouchID a, int b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_GetVersion,(SDL_version *a),(a),)
+SDL_DYNAPI_PROC(const char*,SDL_GetRevision,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_GetRevisionNumber,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumVideoDrivers,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetVideoDriver,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_VideoInit,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_VideoQuit,(void),(),)
+SDL_DYNAPI_PROC(const char*,SDL_GetCurrentVideoDriver,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumVideoDisplays,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_GetDisplayName,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GetDisplayBounds,(int a, SDL_Rect *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumDisplayModes,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GetDisplayMode,(int a, int b, SDL_DisplayMode *c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_GetDesktopDisplayMode,(int a, SDL_DisplayMode *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetCurrentDisplayMode,(int a, SDL_DisplayMode *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_DisplayMode*,SDL_GetClosestDisplayMode,(int a, const SDL_DisplayMode *b, SDL_DisplayMode *c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_GetWindowDisplayIndex,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetWindowDisplayMode,(SDL_Window *a, const SDL_DisplayMode *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetWindowDisplayMode,(SDL_Window *a, SDL_DisplayMode *b),(a,b),return)
+SDL_DYNAPI_PROC(Uint32,SDL_GetWindowPixelFormat,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(SDL_Window*,SDL_CreateWindow,(const char *a, int b, int c, int d, int e, Uint32 f),(a,b,c,d,e,f),return)
+SDL_DYNAPI_PROC(SDL_Window*,SDL_CreateWindowFrom,(const void *a),(a),return)
+SDL_DYNAPI_PROC(Uint32,SDL_GetWindowID,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(SDL_Window*,SDL_GetWindowFromID,(Uint32 a),(a),return)
+SDL_DYNAPI_PROC(Uint32,SDL_GetWindowFlags,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_SetWindowTitle,(SDL_Window *a, const char *b),(a,b),)
+SDL_DYNAPI_PROC(const char*,SDL_GetWindowTitle,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_SetWindowIcon,(SDL_Window *a, SDL_Surface *b),(a,b),)
+SDL_DYNAPI_PROC(void*,SDL_SetWindowData,(SDL_Window *a, const char *b, void *c),(a,b,c),return)
+SDL_DYNAPI_PROC(void*,SDL_GetWindowData,(SDL_Window *a, const char *b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_SetWindowPosition,(SDL_Window *a, int b, int c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_GetWindowPosition,(SDL_Window *a, int *b, int *c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_SetWindowSize,(SDL_Window *a, int b, int c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_GetWindowSize,(SDL_Window *a, int *b, int *c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_SetWindowMinimumSize,(SDL_Window *a, int b, int c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_GetWindowMinimumSize,(SDL_Window *a, int *b, int *c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_SetWindowMaximumSize,(SDL_Window *a, int b, int c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_GetWindowMaximumSize,(SDL_Window *a, int *b, int *c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_SetWindowBordered,(SDL_Window *a, SDL_bool b),(a,b),)
+SDL_DYNAPI_PROC(void,SDL_ShowWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_HideWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_RaiseWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_MaximizeWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_MinimizeWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_RestoreWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_SetWindowFullscreen,(SDL_Window *a, Uint32 b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_GetWindowSurface,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_UpdateWindowSurface,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_UpdateWindowSurfaceRects,(SDL_Window *a, const SDL_Rect *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_SetWindowGrab,(SDL_Window *a, SDL_bool b),(a,b),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_GetWindowGrab,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetWindowBrightness,(SDL_Window *a, float b),(a,b),return)
+SDL_DYNAPI_PROC(float,SDL_GetWindowBrightness,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetWindowGammaRamp,(SDL_Window *a, const Uint16 *b, const Uint16 *c, const Uint16 *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_GetWindowGammaRamp,(SDL_Window *a, Uint16 *b, Uint16 *c, Uint16 *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(void,SDL_DestroyWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsScreenSaverEnabled,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_EnableScreenSaver,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_DisableScreenSaver,(void),(),)
+SDL_DYNAPI_PROC(int,SDL_GL_LoadLibrary,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void*,SDL_GL_GetProcAddress,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_GL_UnloadLibrary,(void),(),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_GL_ExtensionSupported,(const char *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GL_SetAttribute,(SDL_GLattr a, int b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GL_GetAttribute,(SDL_GLattr a, int *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_GLContext,SDL_GL_CreateContext,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GL_MakeCurrent,(SDL_Window *a, SDL_GLContext b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_Window*,SDL_GL_GetCurrentWindow,(void),(),return)
+SDL_DYNAPI_PROC(SDL_GLContext,SDL_GL_GetCurrentContext,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_GL_GetDrawableSize,(SDL_Window *a, int *b, int *c),(a,b,c),)
+SDL_DYNAPI_PROC(int,SDL_GL_SetSwapInterval,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GL_GetSwapInterval,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_GL_SwapWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_GL_DeleteContext,(SDL_GLContext a),(a),)
+SDL_DYNAPI_PROC(int,SDL_vsscanf,(const char *a, const char *b, va_list c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_GameControllerAddMappingsFromRW,(SDL_RWops *a, int b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_GL_ResetAttributes,(void),(),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX,(void),(),return)
+SDL_DYNAPI_PROC(SDL_AssertionHandler,SDL_GetDefaultAssertionHandler,(void),(),return)
+SDL_DYNAPI_PROC(SDL_AssertionHandler,SDL_GetAssertionHandler,(void **a),(a),return)
+#ifdef __WIN32__
+SDL_DYNAPI_PROC(SDL_bool,SDL_DXGIGetOutputInfo,(int a,int *b, int *c),(a,b,c),return)
+#endif
+SDL_DYNAPI_PROC(SDL_bool,SDL_RenderIsClipEnabled,(SDL_Renderer *a),(a),return)
+#ifdef __WINRT__
+SDL_DYNAPI_PROC(int,SDL_WinRTRunApp,(int a, char **b, void *c),(a,b,c),return)
+SDL_DYNAPI_PROC(const wchar_t*,SDL_WinRTGetFSPathUNICODE,(SDL_WinRT_Path a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_WinRTGetFSPathUTF8,(SDL_WinRT_Path a),(a),return)
+#endif
+SDL_DYNAPI_PROC(int,SDL_WarpMouseGlobal,(int a, int b),(a,b),return)
+SDL_DYNAPI_PROC(float,SDL_sqrtf,(float a),(a),return)
+SDL_DYNAPI_PROC(double,SDL_tan,(double a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_tanf,(float a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_CaptureMouse,(SDL_bool a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetWindowHitTest,(SDL_Window *a, SDL_HitTest b, void *c),(a,b,c),return)
+SDL_DYNAPI_PROC(Uint32,SDL_GetGlobalMouseState,(int *a, int *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX2,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_QueueAudio,(SDL_AudioDeviceID a, const void *b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(Uint32,SDL_GetQueuedAudioSize,(SDL_AudioDeviceID a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_ClearQueuedAudio,(SDL_AudioDeviceID a),(a),)
+SDL_DYNAPI_PROC(SDL_Window*,SDL_GetGrabbedWindow,(void),(),return)
+#ifdef __WIN32__
+SDL_DYNAPI_PROC(void,SDL_SetWindowsMessageHook,(SDL_WindowsMessageHook a, void *b),(a,b),)
+#endif
+SDL_DYNAPI_PROC(int,SDL_GetDisplayDPI,(int a, float *b, float *c, float *d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(SDL_JoystickPowerLevel,SDL_JoystickCurrentPowerLevel,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(SDL_GameController*,SDL_GameControllerFromInstanceID,(SDL_JoystickID a),(a),return)
+SDL_DYNAPI_PROC(SDL_Joystick*,SDL_JoystickFromInstanceID,(SDL_JoystickID a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GetDisplayUsableBounds,(int a, SDL_Rect *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetWindowBordersSize,(SDL_Window *a, int *b, int *c, int *d, int *e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(int,SDL_SetWindowOpacity,(SDL_Window *a, float b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetWindowOpacity,(SDL_Window *a, float *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_SetWindowInputFocus,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SetWindowModalFor,(SDL_Window *a, SDL_Window *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_RenderSetIntegerScale,(SDL_Renderer *a, SDL_bool b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_RenderGetIntegerScale,(SDL_Renderer *a),(a),return)
+SDL_DYNAPI_PROC(Uint32,SDL_DequeueAudio,(SDL_AudioDeviceID a, void *b, Uint32 c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_SetWindowResizable,(SDL_Window *a, SDL_bool b),(a,b),)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_CreateRGBSurfaceWithFormat,(Uint32 a, int b, int c, int d, Uint32 e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_CreateRGBSurfaceWithFormatFrom,(void *a, int b, int c, int d, int e, Uint32 f),(a,b,c,d,e,f),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_GetHintBoolean,(const char *a, SDL_bool b),(a,b),return)
+SDL_DYNAPI_PROC(Uint16,SDL_JoystickGetDeviceVendor,(int a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_JoystickGetDeviceProduct,(int a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_JoystickGetDeviceProductVersion,(int a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_JoystickGetVendor,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_JoystickGetProduct,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_JoystickGetProductVersion,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_GameControllerGetVendor,(SDL_GameController *a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_GameControllerGetProduct,(SDL_GameController *a),(a),return)
+SDL_DYNAPI_PROC(Uint16,SDL_GameControllerGetProductVersion,(SDL_GameController *a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasNEON,(void),(),return)
+SDL_DYNAPI_PROC(int,SDL_GameControllerNumMappings,(void),(),return)
+SDL_DYNAPI_PROC(char*,SDL_GameControllerMappingForIndex,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_JoystickGetAxisInitialState,(SDL_Joystick *a, int b, Sint16 *c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_JoystickType,SDL_JoystickGetDeviceType,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_JoystickType,SDL_JoystickGetType,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_MemoryBarrierReleaseFunction,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_MemoryBarrierAcquireFunction,(void),(),)
+SDL_DYNAPI_PROC(SDL_JoystickID,SDL_JoystickGetDeviceInstanceID,(int a),(a),return)
+SDL_DYNAPI_PROC(size_t,SDL_utf8strlen,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void*,SDL_LoadFile_RW,(SDL_RWops *a, size_t *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_wcscmp,(const wchar_t *a, const wchar_t *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_BlendMode,SDL_ComposeCustomBlendMode,(SDL_BlendFactor a, SDL_BlendFactor b, SDL_BlendOperation c, SDL_BlendFactor d, SDL_BlendFactor e, SDL_BlendOperation f),(a,b,c,d,e,f),return)
+SDL_DYNAPI_PROC(SDL_Surface*,SDL_DuplicateSurface,(SDL_Surface *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_Vulkan_LoadLibrary,(const char *a),(a),return)
+SDL_DYNAPI_PROC(void*,SDL_Vulkan_GetVkGetInstanceProcAddr,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_Vulkan_UnloadLibrary,(void),(),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_Vulkan_GetInstanceExtensions,(SDL_Window *a, unsigned int *b, const char **c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_Vulkan_CreateSurface,(SDL_Window *a, VkInstance b, VkSurfaceKHR *c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_Vulkan_GetDrawableSize,(SDL_Window *a, int *b, int *c),(a,b,c),)
+SDL_DYNAPI_PROC(void,SDL_LockJoysticks,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_UnlockJoysticks,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_GetMemoryFunctions,(SDL_malloc_func *a, SDL_calloc_func *b, SDL_realloc_func *c, SDL_free_func *d),(a,b,c,d),)
+SDL_DYNAPI_PROC(int,SDL_SetMemoryFunctions,(SDL_malloc_func a, SDL_calloc_func b, SDL_realloc_func c, SDL_free_func d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_GetNumAllocations,(void),(),return)
+SDL_DYNAPI_PROC(SDL_AudioStream*,SDL_NewAudioStream,(const SDL_AudioFormat a, const Uint8 b, const int c, const SDL_AudioFormat d, const Uint8 e, const int f),(a,b,c,d,e,f),return)
+SDL_DYNAPI_PROC(int,SDL_AudioStreamPut,(SDL_AudioStream *a, const void *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(int,SDL_AudioStreamGet,(SDL_AudioStream *a, void *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_AudioStreamClear,(SDL_AudioStream *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_AudioStreamAvailable,(SDL_AudioStream *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_FreeAudioStream,(SDL_AudioStream *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_AudioStreamFlush,(SDL_AudioStream *a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_acosf,(float a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_asinf,(float a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_atanf,(float a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_atan2f,(float a, float b),(a,b),return)
+SDL_DYNAPI_PROC(float,SDL_ceilf,(float a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_copysignf,(float a, float b),(a,b),return)
+SDL_DYNAPI_PROC(float,SDL_fabsf,(float a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_floorf,(float a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_logf,(float a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_powf,(float a, float b),(a,b),return)
+SDL_DYNAPI_PROC(float,SDL_scalbnf,(float a, int b),(a,b),return)
+SDL_DYNAPI_PROC(double,SDL_fmod,(double a, double b),(a,b),return)
+SDL_DYNAPI_PROC(float,SDL_fmodf,(float a, float b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_SetYUVConversionMode,(SDL_YUV_CONVERSION_MODE a),(a),)
+SDL_DYNAPI_PROC(SDL_YUV_CONVERSION_MODE,SDL_GetYUVConversionMode,(void),(),return)
+SDL_DYNAPI_PROC(SDL_YUV_CONVERSION_MODE,SDL_GetYUVConversionModeForResolution,(int a, int b),(a,b),return)
+SDL_DYNAPI_PROC(void*,SDL_RenderGetMetalLayer,(SDL_Renderer *a),(a),return)
+SDL_DYNAPI_PROC(void*,SDL_RenderGetMetalCommandEncoder,(SDL_Renderer *a),(a),return)
+#ifdef __WINRT__
+SDL_DYNAPI_PROC(SDL_WinRT_DeviceFamily,SDL_WinRTGetDeviceFamily,(void),(),return)
+#endif
+#ifdef __ANDROID__
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsAndroidTV,(void),(),return)
+#endif
+SDL_DYNAPI_PROC(double,SDL_log10,(double a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_log10f,(float a),(a),return)
+SDL_DYNAPI_PROC(char*,SDL_GameControllerMappingForDeviceIndex,(int a),(a),return)
+#ifdef __LINUX__
+SDL_DYNAPI_PROC(int,SDL_LinuxSetThreadPriority,(Sint64 a, int b),(a,b),return)
+#endif
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX512F,(void),(),return)
+#ifdef __ANDROID__
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsChromebook,(void),(),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsDeXMode,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_AndroidBackButton,(void),(),return)
+#endif
+SDL_DYNAPI_PROC(double,SDL_exp,(double a),(a),return)
+SDL_DYNAPI_PROC(float,SDL_expf,(float a),(a),return)
+SDL_DYNAPI_PROC(wchar_t*,SDL_wcsdup,(const wchar_t *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GameControllerRumble,(SDL_GameController *a, Uint16 b, Uint16 c, Uint32 d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_JoystickRumble,(SDL_Joystick *a, Uint16 b, Uint16 c, Uint32 d),(a,b,c,d),return)
+SDL_DYNAPI_PROC(int,SDL_NumSensors,(void),(),return)
+SDL_DYNAPI_PROC(const char*,SDL_SensorGetDeviceName,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_SensorType,SDL_SensorGetDeviceType,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SensorGetDeviceNonPortableType,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_SensorID,SDL_SensorGetDeviceInstanceID,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_Sensor*,SDL_SensorOpen,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_Sensor*,SDL_SensorFromInstanceID,(SDL_SensorID a),(a),return)
+SDL_DYNAPI_PROC(const char*,SDL_SensorGetName,(SDL_Sensor *a),(a),return)
+SDL_DYNAPI_PROC(SDL_SensorType,SDL_SensorGetType,(SDL_Sensor *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SensorGetNonPortableType,(SDL_Sensor *a),(a),return)
+SDL_DYNAPI_PROC(SDL_SensorID,SDL_SensorGetInstanceID,(SDL_Sensor *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_SensorGetData,(SDL_Sensor *a, float *b, int c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_SensorClose,(SDL_Sensor *a),(a),)
+SDL_DYNAPI_PROC(void,SDL_SensorUpdate,(void),(),)
+SDL_DYNAPI_PROC(SDL_bool,SDL_IsTablet,(void),(),return)
+SDL_DYNAPI_PROC(SDL_DisplayOrientation,SDL_GetDisplayOrientation,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasColorKey,(SDL_Surface *a),(a),return)
+
+#ifdef SDL_CreateThreadWithStackSize
+#undef SDL_CreateThreadWithStackSize
+#endif
+
+#if defined(__WIN32__) && !defined(HAVE_LIBC)
+SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThreadWithStackSize,(SDL_ThreadFunction a, const char *b, const size_t c, void *d, pfnSDL_CurrentBeginThread e, pfnSDL_CurrentEndThread f),(a,b,c,d,e,f),return)
+#elif defined(__OS2__)
+SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThreadWithStackSize,(SDL_ThreadFunction a, const char *b, const size_t c, void *d, pfnSDL_CurrentBeginThread e, pfnSDL_CurrentEndThread f),(a,b,c,d,e,f),return)
+#else
+SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThreadWithStackSize,(SDL_ThreadFunction a, const char *b, const size_t c, void *d),(a,b,c,d),return)
+#endif
+
+SDL_DYNAPI_PROC(int,SDL_JoystickGetDevicePlayerIndex,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_JoystickGetPlayerIndex,(SDL_Joystick *a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_GameControllerGetPlayerIndex,(SDL_GameController *a),(a),return)
diff --git a/source/3rd-party/SDL2/src/dynapi/gendynapi.pl b/source/3rd-party/SDL2/src/dynapi/gendynapi.pl
new file mode 100644
index 0000000..721241b
--- /dev/null
+++ b/source/3rd-party/SDL2/src/dynapi/gendynapi.pl
@@ -0,0 +1,141 @@
+#!/usr/bin/perl -w
+
+# Simple DirectMedia Layer
+# Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
+#
+# This software is provided 'as-is', without any express or implied
+# warranty. In no event will the authors be held liable for any damages
+# arising from the use of this software.
+#
+# Permission is granted to anyone to use this software for any purpose,
+# including commercial applications, and to alter it and redistribute it
+# freely, subject to the following restrictions:
+#
+# 1. The origin of this software must not be misrepresented; you must not
+# claim that you wrote the original software. If you use this software
+# in a product, an acknowledgment in the product documentation would be
+# appreciated but is not required.
+# 2. Altered source versions must be plainly marked as such, and must not be
+# misrepresented as being the original software.
+# 3. This notice may not be removed or altered from any source distribution.
+
+# WHAT IS THIS?
+# When you add a public API to SDL, please run this script, make sure the
+# output looks sane (hg diff, it adds to existing files), and commit it.
+# It keeps the dynamic API jump table operating correctly.
+
+# If you wanted this to be readable, you shouldn't have used perl.
+
+use warnings;
+use strict;
+use File::Basename;
+
+chdir(dirname(__FILE__) . '/../..');
+my $sdl_dynapi_procs_h = "src/dynapi/SDL_dynapi_procs.h";
+my $sdl_dynapi_overrides_h = "src/dynapi/SDL_dynapi_overrides.h";
+
+my %existing = ();
+if (-f $sdl_dynapi_procs_h) {
+ open(SDL_DYNAPI_PROCS_H, '<', $sdl_dynapi_procs_h) or die("Can't open $sdl_dynapi_procs_h: $!\n");
+ while (<SDL_DYNAPI_PROCS_H>) {
+ if (/\ASDL_DYNAPI_PROC\(.*?,(.*?),/) {
+ $existing{$1} = 1;
+ }
+ }
+ close(SDL_DYNAPI_PROCS_H)
+}
+
+open(SDL_DYNAPI_PROCS_H, '>>', $sdl_dynapi_procs_h) or die("Can't open $sdl_dynapi_procs_h: $!\n");
+open(SDL_DYNAPI_OVERRIDES_H, '>>', $sdl_dynapi_overrides_h) or die("Can't open $sdl_dynapi_overrides_h: $!\n");
+
+opendir(HEADERS, 'include') or die("Can't open include dir: $!\n");
+while (readdir(HEADERS)) {
+ next if not /\.h\Z/;
+ my $header = "include/$_";
+ open(HEADER, '<', $header) or die("Can't open $header: $!\n");
+ while (<HEADER>) {
+ chomp;
+ next if not /\A\s*extern\s+DECLSPEC/;
+ my $decl = "$_ ";
+ if (not $decl =~ /\)\s*;/) {
+ while (<HEADER>) {
+ chomp;
+ s/\A\s+//;
+ s/\s+\Z//;
+ $decl .= "$_ ";
+ last if /\)\s*;/;
+ }
+ }
+
+ $decl =~ s/\s+\Z//;
+ #print("DECL: [$decl]\n");
+
+ if ($decl =~ /\A\s*extern\s+DECLSPEC\s+(const\s+|)(unsigned\s+|)(.*?)\s*(\*?)\s*SDLCALL\s+(.*?)\s*\((.*?)\);/) {
+ my $rc = "$1$2$3$4";
+ my $fn = $5;
+
+ next if $existing{$fn}; # already slotted into the jump table.
+
+ my @params = split(',', $6);
+
+ #print("rc == '$rc', fn == '$fn', params == '$params'\n");
+
+ my $retstr = ($rc eq 'void') ? '' : 'return';
+ my $paramstr = '(';
+ my $argstr = '(';
+ my $i = 0;
+ foreach (@params) {
+ my $str = $_;
+ $str =~ s/\A\s+//;
+ $str =~ s/\s+\Z//;
+ #print("1PARAM: $str\n");
+ if ($str eq 'void') {
+ $paramstr .= 'void';
+ } elsif ($str eq '...') {
+ if ($i > 0) {
+ $paramstr .= ', ';
+ }
+ $paramstr .= $str;
+ } elsif ($str =~ /\A\s*((const\s+|)(unsigned\s+|)([a-zA-Z0-9_]*)\s*([\*\s]*))\s*(.*?)\Z/) {
+ #print("PARSED: [$1], [$2], [$3], [$4], [$5]\n");
+ my $type = $1;
+ my $var = $6;
+ $type =~ s/\A\s+//;
+ $type =~ s/\s+\Z//;
+ $var =~ s/\A\s+//;
+ $var =~ s/\s+\Z//;
+ $type =~ s/\s*\*\Z/*/g;
+ $type =~ s/\s*(\*+)\Z/ $1/;
+ #print("SPLIT: ($type, $var)\n");
+ my $name = chr(ord('a') + $i);
+ if ($i > 0) {
+ $paramstr .= ', ';
+ $argstr .= ',';
+ }
+ my $spc = ($type =~ /\*\Z/) ? '' : ' ';
+ $paramstr .= "$type$spc$name";
+ $argstr .= "$name";
+ }
+ $i++;
+ }
+
+ $paramstr = '(void' if ($i == 0); # Just to make this consistent.
+
+ $paramstr .= ')';
+ $argstr .= ')';
+
+ print("NEW: $decl\n");
+ print SDL_DYNAPI_PROCS_H "SDL_DYNAPI_PROC($rc,$fn,$paramstr,$argstr,$retstr)\n";
+ print SDL_DYNAPI_OVERRIDES_H "#define $fn ${fn}_REAL\n";
+ } else {
+ print("Failed to parse decl [$decl]!\n");
+ }
+ }
+ close(HEADER);
+}
+closedir(HEADERS);
+
+close(SDL_DYNAPI_PROCS_H);
+close(SDL_DYNAPI_OVERRIDES_H);
+
+# vi: set ts=4 sw=4 expandtab: