From 090327e76e133f09a7576a46a46be7bc43e52696 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 9 Dec 2013 16:03:18 -0500 Subject: [PATCH] Implemented the Dynamic API magic. --- CMakeLists.txt | 1 + VisualC/SDL/SDL_VS2008.vcproj | 16 + VisualC/SDL/SDL_VS2010.vcxproj | 4 + VisualC/SDL/SDL_VS2012.vcxproj | 4 + VisualC/SDL/SDL_VS2013.vcxproj | 4 + Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj | 28 + Xcode/SDL/SDL.xcodeproj/project.pbxproj | 48 ++ configure.in | 1 + include/SDL_thread.h | 5 + premake/projects/SDL2.lua | 1 + src/SDL_internal.h | 10 + src/audio/SDL_audio.c | 4 + src/dynapi/SDL_dynapi.c | 302 ++++++++++ src/dynapi/SDL_dynapi.h | 50 ++ src/dynapi/SDL_dynapi_overrides.h | 571 +++++++++++++++++++ src/dynapi/SDL_dynapi_procs.h | 599 ++++++++++++++++++++ src/dynapi/gendynapi.pl | 141 +++++ src/haptic/windows/SDL_syshaptic.c | 4 + src/joystick/windows/SDL_dxjoystick.c | 4 + src/thread/SDL_thread.c | 8 +- src/timer/SDL_timer.c | 4 + 21 files changed, 1808 insertions(+), 1 deletion(-) create mode 100644 src/dynapi/SDL_dynapi.c create mode 100644 src/dynapi/SDL_dynapi.h create mode 100644 src/dynapi/SDL_dynapi_overrides.h create mode 100644 src/dynapi/SDL_dynapi_procs.h create mode 100755 src/dynapi/gendynapi.pl diff --git a/CMakeLists.txt b/CMakeLists.txt index bef514cb8998e..3871d96cd75fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -240,6 +240,7 @@ file(GLOB SOURCE_FILES ${SDL2_SOURCE_DIR}/src/atomic/*.c ${SDL2_SOURCE_DIR}/src/audio/*.c ${SDL2_SOURCE_DIR}/src/cpuinfo/*.c + ${SDL2_SOURCE_DIR}/src/dynapi/*.c ${SDL2_SOURCE_DIR}/src/events/*.c ${SDL2_SOURCE_DIR}/src/file/*.c ${SDL2_SOURCE_DIR}/src/libm/*.c diff --git a/VisualC/SDL/SDL_VS2008.vcproj b/VisualC/SDL/SDL_VS2008.vcproj index 7d48e6144f473..fe3aed7130e60 100644 --- a/VisualC/SDL/SDL_VS2008.vcproj +++ b/VisualC/SDL/SDL_VS2008.vcproj @@ -1224,6 +1224,22 @@ RelativePath="..\..\src\core\windows\SDL_windows.h" > + + + + + + + + diff --git a/VisualC/SDL/SDL_VS2010.vcxproj b/VisualC/SDL/SDL_VS2010.vcxproj index 7a17ced35d50d..16895411643a7 100644 --- a/VisualC/SDL/SDL_VS2010.vcxproj +++ b/VisualC/SDL/SDL_VS2010.vcxproj @@ -479,6 +479,9 @@ + + + @@ -559,6 +562,7 @@ + diff --git a/VisualC/SDL/SDL_VS2012.vcxproj b/VisualC/SDL/SDL_VS2012.vcxproj index f60a4d9aa6f89..ae0ad9d1d07ca 100644 --- a/VisualC/SDL/SDL_VS2012.vcxproj +++ b/VisualC/SDL/SDL_VS2012.vcxproj @@ -270,6 +270,9 @@ + + + @@ -350,6 +353,7 @@ + diff --git a/VisualC/SDL/SDL_VS2013.vcxproj b/VisualC/SDL/SDL_VS2013.vcxproj index df6019a62b9eb..110793f2d6a2d 100644 --- a/VisualC/SDL/SDL_VS2013.vcxproj +++ b/VisualC/SDL/SDL_VS2013.vcxproj @@ -273,6 +273,9 @@ + + + @@ -352,6 +355,7 @@ + diff --git a/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj b/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj index 78d1c0b8d4e2d..8541fa34330b0 100755 --- a/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj +++ b/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj @@ -67,6 +67,11 @@ 04F7808512FB753F00FC43C0 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7808312FB753F00FC43C0 /* SDL_nullframebuffer.c */; }; 04FFAB8B12E23B8D00BA343D /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04FFAB8912E23B8D00BA343D /* SDL_atomic.c */; }; 04FFAB8C12E23B8D00BA343D /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 04FFAB8A12E23B8D00BA343D /* SDL_spinlock.c */; }; + 56A6702E18565E450007D20F /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6702D18565E450007D20F /* SDL_internal.h */; }; + 56A6703518565E760007D20F /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6703118565E760007D20F /* SDL_dynapi_overrides.h */; }; + 56A6703618565E760007D20F /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6703218565E760007D20F /* SDL_dynapi_procs.h */; }; + 56A6703718565E760007D20F /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A6703318565E760007D20F /* SDL_dynapi.c */; }; + 56A6703818565E760007D20F /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6703418565E760007D20F /* SDL_dynapi.h */; }; 56C181DF17C44D5E00406AE3 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 56C181DE17C44D5E00406AE3 /* SDL_filesystem.h */; }; 56C181E217C44D7A00406AE3 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C181E117C44D7A00406AE3 /* SDL_sysfilesystem.m */; }; 56EA86FB13E9EC2B002E47EB /* SDL_coreaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 56EA86F913E9EC2B002E47EB /* SDL_coreaudio.c */; }; @@ -260,6 +265,11 @@ 04F7808312FB753F00FC43C0 /* SDL_nullframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullframebuffer.c; sourceTree = ""; }; 04FFAB8912E23B8D00BA343D /* SDL_atomic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_atomic.c; sourceTree = ""; }; 04FFAB8A12E23B8D00BA343D /* SDL_spinlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_spinlock.c; sourceTree = ""; }; + 56A6702D18565E450007D20F /* SDL_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_internal.h; path = ../../src/SDL_internal.h; sourceTree = ""; }; + 56A6703118565E760007D20F /* SDL_dynapi_overrides.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi_overrides.h; path = ../../src/dynapi/SDL_dynapi_overrides.h; sourceTree = ""; }; + 56A6703218565E760007D20F /* SDL_dynapi_procs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi_procs.h; path = ../../src/dynapi/SDL_dynapi_procs.h; sourceTree = ""; }; + 56A6703318565E760007D20F /* SDL_dynapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_dynapi.c; path = ../../src/dynapi/SDL_dynapi.c; sourceTree = ""; }; + 56A6703418565E760007D20F /* SDL_dynapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi.h; path = ../../src/dynapi/SDL_dynapi.h; sourceTree = ""; }; 56C181DE17C44D5E00406AE3 /* SDL_filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_filesystem.h; sourceTree = ""; }; 56C181E117C44D7A00406AE3 /* SDL_sysfilesystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDL_sysfilesystem.m; path = ../../src/filesystem/cocoa/SDL_sysfilesystem.m; sourceTree = ""; }; 56EA86F913E9EC2B002E47EB /* SDL_coreaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_coreaudio.c; path = coreaudio/SDL_coreaudio.c; sourceTree = ""; }; @@ -552,6 +562,17 @@ name = CustomTemplate; sourceTree = ""; }; + 56A6702F18565E4F0007D20F /* dynapi */ = { + isa = PBXGroup; + children = ( + 56A6703118565E760007D20F /* SDL_dynapi_overrides.h */, + 56A6703218565E760007D20F /* SDL_dynapi_procs.h */, + 56A6703318565E760007D20F /* SDL_dynapi.c */, + 56A6703418565E760007D20F /* SDL_dynapi.h */, + ); + name = dynapi; + sourceTree = ""; + }; 56C181E017C44D6900406AE3 /* filesystem */ = { isa = PBXGroup; children = ( @@ -737,6 +758,7 @@ 04B2ECEF1025CEB900F9BC5F /* atomic */, FD99B8FB0DD52EDC00FB1D6B /* audio */, FD99B98A0DD52EDC00FB1D6B /* cpuinfo */, + 56A6702F18565E4F0007D20F /* dynapi */, FD99B98C0DD52EDC00FB1D6B /* events */, FD99B99D0DD52EDC00FB1D6B /* file */, 56C181E017C44D6900406AE3 /* filesystem */, @@ -749,6 +771,7 @@ FD99B9E00DD52EDC00FB1D6B /* thread */, FD99BA1E0DD52EDC00FB1D6B /* timer */, FDA682420DF2374D00F98A1A /* video */, + 56A6702D18565E450007D20F /* SDL_internal.h */, 04F2AF551104ABD200D6DDF7 /* SDL_assert.c */, 04BAC09A1300C1290055DE28 /* SDL_assert_c.h */, FD99B9D40DD52EDC00FB1D6B /* SDL_error_c.h */, @@ -941,6 +964,7 @@ FDA684530DF2374E00F98A1A /* SDL_blit_auto.h in Headers */, FDA684550DF2374E00F98A1A /* SDL_blit_copy.h in Headers */, FDA6845D0DF2374E00F98A1A /* SDL_pixels_c.h in Headers */, + 56A6703618565E760007D20F /* SDL_dynapi_procs.h in Headers */, FDA684630DF2374E00F98A1A /* SDL_RLEaccel_c.h in Headers */, FDA684670DF2374E00F98A1A /* SDL_sysvideo.h in Headers */, FDA685FC0DF244C800F98A1A /* SDL_nullevents_c.h in Headers */, @@ -953,7 +977,9 @@ FD689F200E26E5D900F90B21 /* SDL_uikitvideo.h in Headers */, FD689F240E26E5D900F90B21 /* SDL_uikitwindow.h in Headers */, FD689F260E26E5D900F90B21 /* SDL_uikitopenglview.h in Headers */, + 56A6703818565E760007D20F /* SDL_dynapi.h in Headers */, FD689FCF0E26E9D400F90B21 /* SDL_uikitappdelegate.h in Headers */, + 56A6703518565E760007D20F /* SDL_dynapi_overrides.h in Headers */, 047677BD0EA76A31008ABAF1 /* SDL_syshaptic.h in Headers */, 046387420F0B5B7D0041FD65 /* SDL_blit_slow.h in Headers */, 006E9888119552DD001DE610 /* SDL_rwopsbundlesupport.h in Headers */, @@ -989,6 +1015,7 @@ AA7558A21595D55500BBD41B /* SDL_cpuinfo.h in Headers */, AA7558A31595D55500BBD41B /* SDL_endian.h in Headers */, AA7558A41595D55500BBD41B /* SDL_error.h in Headers */, + 56A6702E18565E450007D20F /* SDL_internal.h in Headers */, AA7558A51595D55500BBD41B /* SDL_events.h in Headers */, AA7558A61595D55500BBD41B /* SDL_gesture.h in Headers */, AA7558A71595D55500BBD41B /* SDL_haptic.h in Headers */, @@ -1117,6 +1144,7 @@ FD6526700DE8FCDD002AD96B /* SDL_cpuinfo.c in Sources */, FD6526710DE8FCDD002AD96B /* SDL_events.c in Sources */, FD6526720DE8FCDD002AD96B /* SDL_keyboard.c in Sources */, + 56A6703718565E760007D20F /* SDL_dynapi.c in Sources */, FD6526730DE8FCDD002AD96B /* SDL_mouse.c in Sources */, FD6526740DE8FCDD002AD96B /* SDL_quit.c in Sources */, FD6526750DE8FCDD002AD96B /* SDL_windowevents.c in Sources */, diff --git a/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Xcode/SDL/SDL.xcodeproj/project.pbxproj index 9002cc656ffbd..fa8e493474b60 100755 --- a/Xcode/SDL/SDL.xcodeproj/project.pbxproj +++ b/Xcode/SDL/SDL.xcodeproj/project.pbxproj @@ -393,6 +393,21 @@ 566CDE90148F0AC200C5A9BB /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 566CDE8E148F0AC200C5A9BB /* SDL_dropevents.c */; }; 567E2F1C17C44BB2005F1892 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 567E2F1B17C44BB2005F1892 /* SDL_sysfilesystem.m */; }; 567E2F2117C44C35005F1892 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56A670091856545C0007D20F /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A670081856545C0007D20F /* SDL_internal.h */; }; + 56A6700A1856545C0007D20F /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A670081856545C0007D20F /* SDL_internal.h */; }; + 56A6700B1856545C0007D20F /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A670081856545C0007D20F /* SDL_internal.h */; }; + 56A67021185654B40007D20F /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */; }; + 56A67022185654B40007D20F /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */; }; + 56A67023185654B40007D20F /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */; }; + 56A67024185654B40007D20F /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A6701E185654B40007D20F /* SDL_dynapi.c */; }; + 56A67025185654B40007D20F /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A6701E185654B40007D20F /* SDL_dynapi.c */; }; + 56A67026185654B40007D20F /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A6701E185654B40007D20F /* SDL_dynapi.c */; }; + 56A67027185654B40007D20F /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701F185654B40007D20F /* SDL_dynapi.h */; }; + 56A67028185654B40007D20F /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701F185654B40007D20F /* SDL_dynapi.h */; }; + 56A67029185654B40007D20F /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701F185654B40007D20F /* SDL_dynapi.h */; }; + 56A6702A185654B40007D20F /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */; }; + 56A6702B185654B40007D20F /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */; }; + 56A6702C185654B40007D20F /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */; }; A77E6EB4167AB0A90010E40B /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; }; A77E6EB5167AB0A90010E40B /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; }; AA0AD09D16648D1700CE5896 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */; }; @@ -994,6 +1009,11 @@ 566CDE8E148F0AC200C5A9BB /* SDL_dropevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dropevents.c; sourceTree = ""; }; 567E2F1B17C44BB2005F1892 /* SDL_sysfilesystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDL_sysfilesystem.m; path = ../../src/filesystem/cocoa/SDL_sysfilesystem.m; sourceTree = ""; }; 567E2F2017C44C35005F1892 /* SDL_filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_filesystem.h; sourceTree = ""; }; + 56A670081856545C0007D20F /* SDL_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_internal.h; path = ../../src/SDL_internal.h; sourceTree = ""; }; + 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi_procs.h; path = ../../src/dynapi/SDL_dynapi_procs.h; sourceTree = ""; }; + 56A6701E185654B40007D20F /* SDL_dynapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_dynapi.c; path = ../../src/dynapi/SDL_dynapi.c; sourceTree = ""; }; + 56A6701F185654B40007D20F /* SDL_dynapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi.h; path = ../../src/dynapi/SDL_dynapi.h; sourceTree = ""; }; + 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi_overrides.h; path = ../../src/dynapi/SDL_dynapi_overrides.h; sourceTree = ""; }; A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gamecontroller.h; sourceTree = ""; }; AA0F8490178D5ECC00823F9D /* SDL_systls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systls.c; sourceTree = ""; }; AA628AC8159367B7005138DD /* SDL_rotate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rotate.c; sourceTree = ""; }; @@ -1651,6 +1671,7 @@ 04BDFD7312E6671700899322 /* atomic */, 04BDFD7612E6671700899322 /* audio */, 04BDFDD312E6671700899322 /* cpuinfo */, + 56A6701C1856549B0007D20F /* dynapi */, 04BDFDD512E6671700899322 /* events */, 567E2F1F17C44BBB005F1892 /* filesystem */, 04BDFDEC12E6671700899322 /* file */, @@ -1663,6 +1684,7 @@ 04BDFE6412E6671800899322 /* thread */, 04BDFE9512E6671800899322 /* timer */, 04BDFEA712E6671800899322 /* video */, + 56A670081856545C0007D20F /* SDL_internal.h */, 04BDFE5512E6671700899322 /* SDL_assert_c.h */, 04BDFE5612E6671700899322 /* SDL_assert.c */, 04BDFE5812E6671700899322 /* SDL_error_c.h */, @@ -1682,6 +1704,17 @@ name = filesystem; sourceTree = ""; }; + 56A6701C1856549B0007D20F /* dynapi */ = { + isa = PBXGroup; + children = ( + 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */, + 56A6701E185654B40007D20F /* SDL_dynapi.c */, + 56A6701F185654B40007D20F /* SDL_dynapi.h */, + 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */, + ); + name = dynapi; + sourceTree = ""; + }; BEC562FE0761C0E800A33029 /* Linked Frameworks */ = { isa = PBXGroup; children = ( @@ -1747,6 +1780,7 @@ AA7558061595D4D800BBD41B /* SDL_clipboard.h in Headers */, AA7558081595D4D800BBD41B /* SDL_config_macosx.h in Headers */, AA75580A1595D4D800BBD41B /* SDL_config.h in Headers */, + 56A670091856545C0007D20F /* SDL_internal.h in Headers */, AA75580C1595D4D800BBD41B /* SDL_copying.h in Headers */, AA75580E1595D4D800BBD41B /* SDL_cpuinfo.h in Headers */, AA7558101595D4D800BBD41B /* SDL_endian.h in Headers */, @@ -1805,6 +1839,7 @@ 04BD004512E6671800899322 /* scancodes_linux.h in Headers */, 04BD004712E6671800899322 /* scancodes_xfree86.h in Headers */, 04BD004912E6671800899322 /* SDL_clipboardevents_c.h in Headers */, + 56A6702A185654B40007D20F /* SDL_dynapi_overrides.h in Headers */, 04BD004B12E6671800899322 /* SDL_events_c.h in Headers */, 04BD004D12E6671800899322 /* SDL_gesture_c.h in Headers */, 04BD004F12E6671800899322 /* SDL_keyboard_c.h in Headers */, @@ -1855,6 +1890,7 @@ 04BD01EE12E6671800899322 /* SDL_x11opengles.h in Headers */, 04BD01F212E6671800899322 /* SDL_x11shape.h in Headers */, 04BD01F312E6671800899322 /* SDL_x11sym.h in Headers */, + 56A67021185654B40007D20F /* SDL_dynapi_procs.h in Headers */, 04BD01F512E6671800899322 /* SDL_x11touch.h in Headers */, 04BD01F712E6671800899322 /* SDL_x11video.h in Headers */, 04BD01F912E6671800899322 /* SDL_x11window.h in Headers */, @@ -1865,6 +1901,7 @@ 04F7804A12FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */, 04F7804C12FB74A200FC43C0 /* SDL_blendline.h in Headers */, 04F7804E12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */, + 56A67027185654B40007D20F /* SDL_dynapi.h in Headers */, 04F7804F12FB74A200FC43C0 /* SDL_draw.h in Headers */, 04F7805112FB74A200FC43C0 /* SDL_drawline.h in Headers */, 04F7805312FB74A200FC43C0 /* SDL_drawpoint.h in Headers */, @@ -1917,6 +1954,7 @@ AA75582F1595D4D800BBD41B /* SDL_name.h in Headers */, AA7558311595D4D800BBD41B /* SDL_opengl.h in Headers */, AA7558331595D4D800BBD41B /* SDL_opengles.h in Headers */, + 56A67028185654B40007D20F /* SDL_dynapi.h in Headers */, AA7558351595D4D800BBD41B /* SDL_opengles2.h in Headers */, AA7558371595D4D800BBD41B /* SDL_pixels.h in Headers */, AA7558391595D4D800BBD41B /* SDL_platform.h in Headers */, @@ -1928,6 +1966,7 @@ AA7558451595D4D800BBD41B /* SDL_rwops.h in Headers */, AA7558471595D4D800BBD41B /* SDL_scancode.h in Headers */, AA7558491595D4D800BBD41B /* SDL_shape.h in Headers */, + 56A6702B185654B40007D20F /* SDL_dynapi_overrides.h in Headers */, AA75584B1595D4D800BBD41B /* SDL_stdinc.h in Headers */, AA75584D1595D4D800BBD41B /* SDL_surface.h in Headers */, AA75584F1595D4D800BBD41B /* SDL_system.h in Headers */, @@ -1939,6 +1978,7 @@ AA75585B1595D4D800BBD41B /* SDL_version.h in Headers */, AA75585D1595D4D800BBD41B /* SDL_video.h in Headers */, 04BD022512E6671800899322 /* SDL_diskaudio.h in Headers */, + 56A6700A1856545C0007D20F /* SDL_internal.h in Headers */, 04BD022D12E6671800899322 /* SDL_dummyaudio.h in Headers */, 04BD023512E6671800899322 /* SDL_coreaudio.h in Headers */, 04BD024312E6671800899322 /* SDL_audio_c.h in Headers */, @@ -1953,6 +1993,7 @@ 04BD026212E6671800899322 /* scancodes_xfree86.h in Headers */, 04BD026412E6671800899322 /* SDL_clipboardevents_c.h in Headers */, 04BD026612E6671800899322 /* SDL_events_c.h in Headers */, + 56A67022185654B40007D20F /* SDL_dynapi_procs.h in Headers */, 04BD026812E6671800899322 /* SDL_gesture_c.h in Headers */, 04BD026A12E6671800899322 /* SDL_keyboard_c.h in Headers */, 04BD026C12E6671800899322 /* SDL_mouse_c.h in Headers */, @@ -2063,6 +2104,7 @@ DB313FE117554B71006C0E22 /* SDL_name.h in Headers */, DB313FE217554B71006C0E22 /* SDL_opengl.h in Headers */, DB313FE317554B71006C0E22 /* SDL_opengles.h in Headers */, + 56A67029185654B40007D20F /* SDL_dynapi.h in Headers */, DB313FE417554B71006C0E22 /* SDL_opengles2.h in Headers */, DB313FE517554B71006C0E22 /* SDL_pixels.h in Headers */, DB313FE617554B71006C0E22 /* SDL_platform.h in Headers */, @@ -2074,6 +2116,7 @@ DB313FEC17554B71006C0E22 /* SDL_rwops.h in Headers */, DB313FED17554B71006C0E22 /* SDL_scancode.h in Headers */, DB313FEE17554B71006C0E22 /* SDL_shape.h in Headers */, + 56A6702C185654B40007D20F /* SDL_dynapi_overrides.h in Headers */, DB313FEF17554B71006C0E22 /* SDL_stdinc.h in Headers */, DB313FF017554B71006C0E22 /* SDL_surface.h in Headers */, DB313FF117554B71006C0E22 /* SDL_system.h in Headers */, @@ -2085,6 +2128,7 @@ DB313FF717554B71006C0E22 /* SDL_version.h in Headers */, DB313FF817554B71006C0E22 /* SDL_video.h in Headers */, DB313F7417554B71006C0E22 /* SDL_diskaudio.h in Headers */, + 56A6700B1856545C0007D20F /* SDL_internal.h in Headers */, DB313F7517554B71006C0E22 /* SDL_dummyaudio.h in Headers */, DB313F7617554B71006C0E22 /* SDL_coreaudio.h in Headers */, DB313F7717554B71006C0E22 /* SDL_audio_c.h in Headers */, @@ -2099,6 +2143,7 @@ DB313F8017554B71006C0E22 /* scancodes_xfree86.h in Headers */, DB313F8117554B71006C0E22 /* SDL_clipboardevents_c.h in Headers */, DB313F8217554B71006C0E22 /* SDL_events_c.h in Headers */, + 56A67023185654B40007D20F /* SDL_dynapi_procs.h in Headers */, DB313F8317554B71006C0E22 /* SDL_gesture_c.h in Headers */, DB313F8417554B71006C0E22 /* SDL_keyboard_c.h in Headers */, DB313F8517554B71006C0E22 /* SDL_mouse_c.h in Headers */, @@ -2442,6 +2487,7 @@ 0442EC1D12FE1BCB004C9285 /* SDL_render_sw.c in Sources */, 0442EC5A12FE1C60004C9285 /* SDL_x11framebuffer.c in Sources */, 0442EC5F12FE1C75004C9285 /* SDL_hints.c in Sources */, + 56A67024185654B40007D20F /* SDL_dynapi.c in Sources */, 04BAC0C81300C2160055DE28 /* SDL_log.c in Sources */, 0435673E1303160F00BA5428 /* SDL_shaders_gl.c in Sources */, 566CDE90148F0AC200C5A9BB /* SDL_dropevents.c in Sources */, @@ -2560,6 +2606,7 @@ 04F7805E12FB74A200FC43C0 /* SDL_drawpoint.c in Sources */, 0442EC1912FE1BBA004C9285 /* SDL_render_gl.c in Sources */, 0442EC1F12FE1BCB004C9285 /* SDL_render_sw.c in Sources */, + 56A67025185654B40007D20F /* SDL_dynapi.c in Sources */, 0442EC5C12FE1C60004C9285 /* SDL_x11framebuffer.c in Sources */, 0442EC6012FE1C75004C9285 /* SDL_hints.c in Sources */, 04BAC0C91300C2160055DE28 /* SDL_log.c in Sources */, @@ -2678,6 +2725,7 @@ DB31406017554B71006C0E22 /* SDL_drawpoint.c in Sources */, DB31406117554B71006C0E22 /* SDL_render_gl.c in Sources */, DB31406217554B71006C0E22 /* SDL_render_sw.c in Sources */, + 56A67026185654B40007D20F /* SDL_dynapi.c in Sources */, DB31406317554B71006C0E22 /* SDL_x11framebuffer.c in Sources */, DB31406417554B71006C0E22 /* SDL_hints.c in Sources */, DB31406517554B71006C0E22 /* SDL_log.c in Sources */, diff --git a/configure.in b/configure.in index 5a5f7da1e644c..17f5d187c56e8 100644 --- a/configure.in +++ b/configure.in @@ -326,6 +326,7 @@ SOURCES="$SOURCES $srcdir/src/*.c" SOURCES="$SOURCES $srcdir/src/atomic/*.c" SOURCES="$SOURCES $srcdir/src/audio/*.c" SOURCES="$SOURCES $srcdir/src/cpuinfo/*.c" +SOURCES="$SOURCES $srcdir/src/dynapi/*.c" SOURCES="$SOURCES $srcdir/src/events/*.c" SOURCES="$SOURCES $srcdir/src/file/*.c" SOURCES="$SOURCES $srcdir/src/haptic/*.c" diff --git a/include/SDL_thread.h b/include/SDL_thread.h index f1e01c920f4c8..8f50f6e50d5ec 100644 --- a/include/SDL_thread.h +++ b/include/SDL_thread.h @@ -111,7 +111,12 @@ SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, /** * Create a thread. */ +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) +#else #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) +#endif #else diff --git a/premake/projects/SDL2.lua b/premake/projects/SDL2.lua index 56dee8e219a9f..e5a4aa081105c 100755 --- a/premake/projects/SDL2.lua +++ b/premake/projects/SDL2.lua @@ -69,6 +69,7 @@ SDL_project "SDL2" "/audio/disk/", "/audio/dummy/", "/cpuinfo/", + "/dynapi/", "/events/", "/file/", "/haptic/", diff --git a/src/SDL_internal.h b/src/SDL_internal.h index b3578769c8f06..3ccae74c980c2 100644 --- a/src/SDL_internal.h +++ b/src/SDL_internal.h @@ -21,6 +21,16 @@ #ifndef _SDL_internal_h #define _SDL_internal_h +#include "dynapi/SDL_dynapi.h" + +#if SDL_DYNAMIC_API +#include "dynapi/SDL_dynapi_overrides.h" +/* force DECLSPEC and SDLCALL off...it's all internal symbols now. + These will have actual #defines during SDL_dynapi.c only */ +#define DECLSPEC +#define SDLCALL +#endif + #include "SDL_config.h" #endif diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index a21af0b1275ed..c068887ae4098 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -1036,7 +1036,11 @@ open_audio_device(const char *devname, int iscapture, /* !!! FIXME: this is nasty. */ #if defined(__WIN32__) && !defined(HAVE_LIBC) #undef SDL_CreateThread +#if SDL_DYNAMIC_API + device->thread = SDL_CreateThread_REAL(SDL_RunAudio, name, device, NULL, NULL); +#else device->thread = SDL_CreateThread(SDL_RunAudio, name, device, NULL, NULL); +#endif #else device->thread = SDL_CreateThread(SDL_RunAudio, name, device); #endif diff --git a/src/dynapi/SDL_dynapi.c b/src/dynapi/SDL_dynapi.c new file mode 100644 index 0000000000000..f04a9048e17c4 --- /dev/null +++ b/src/dynapi/SDL_dynapi.c @@ -0,0 +1,302 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + 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 + +#include "SDL.h" + +/* !!! FIXME: Shouldn't these be included in SDL.h? */ +#include "SDL_shape.h" +#include "SDL_syswm.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 SDL_Log##logname##name(int category, 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 SDL_SetError##name(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 SDL_sscanf##name(const char *buf, 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 SDL_snprintf##name(char *buf, size_t buflen, const char *fmt, ...) { \ + int retval; va_list ap; initcall; va_start(ap, fmt); \ + retval = jump_table.SDL_vsnprintf(buf, buflen, fmt, ap); \ + va_end(ap); \ + return retval; \ + } \ + _static void SDL_Log##name(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 SDL_LogMessage##name(int category, SDL_LogPriority priority, 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 (*SDL_DYNAPIFN_##fn) params; \ + static rc fn##_DEFAULT params; \ + extern rc 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 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 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 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 + + + +/* 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) +{ + 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! */ +} + + +/* Obviously we can't use SDL_LoadObject() to load SDL. :) */ +/* Also obviously, we never close the loaded library. */ +#if defined(_WINDOWS) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#include +static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym) +{ + HANDLE lib = LoadLibraryA(fname); + return lib ? GetProcAddress(lib, sym) : NULL; +} + +#elif defined(__HAIKU__) +#include +static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym) +{ + image_id lib = load_add_on(fname); + void *retval = NULL; + if ((lib < 0) || (get_image_symbol(lib, sym, B_SYMBOL_TYPE_TEXT, &retval) != B_NO_ERROR)) { + retval = NULL; + } + return retval; +} +#elif defined(unix) || defined(__APPLE__) +#include +static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym) +{ + void *lib = dlopen(fname, RTLD_NOW | RTLD_LOCAL); + return lib ? dlsym(lib, sym) : NULL; +} +#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 = SDL_DYNAPI_entry; /* 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. */ + entry = SDL_DYNAPI_entry; + } + } + + if (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 != SDL_DYNAPI_entry) { + if (!SDL_DYNAPI_entry(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 volatile 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/src/dynapi/SDL_dynapi.h b/src/dynapi/SDL_dynapi.h new file mode 100644 index 0000000000000..eb1c014408f4f --- /dev/null +++ b/src/dynapi/SDL_dynapi.h @@ -0,0 +1,50 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + 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 + +#if defined(__APPLE__) && TARGET_OS_IPHONE /* probably not useful on iOS. */ +#define SDL_DYNAMIC_API 0 +#else /* everyone else. */ +#define SDL_DYNAMIC_API 1 +#endif + +#endif + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h new file mode 100644 index 0000000000000..dfa5509fac087 --- /dev/null +++ b/src/dynapi/SDL_dynapi_overrides.h @@ -0,0 +1,571 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + 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 + +/* so annoying. */ +#if defined(__thumb__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)) +#define SDL_MemoryBarrierRelease SDL_MemoryBarrierRelease_REAL +#define SDL_MemoryBarrierAcquire SDL_MemoryBarrierAcquire_REAL +#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_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_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 diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h new file mode 100644 index 0000000000000..c860f202bf9e0 --- /dev/null +++ b/src/dynapi/SDL_dynapi_procs.h @@ -0,0 +1,599 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2013 Sam Lantinga + + 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,(const char *a, ...),(a),return) +SDL_DYNAPI_PROC(void,SDL_Log,(const char *a, ...),(a),) +SDL_DYNAPI_PROC(void,SDL_LogVerbose,(int a, const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogDebug,(int a, const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogInfo,(int a, const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogWarn,(int a, const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogError,(int a, const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogCritical,(int a, const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogMessage,(int a, SDL_LogPriority b, const char *c, ...),(a,b,c),) +SDL_DYNAPI_PROC(int,SDL_sscanf,(const char *a, const char *b, ...),(a,b),return) +SDL_DYNAPI_PROC(int,SDL_snprintf,(char *a, size_t b, 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) +#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 __thumb__ /* so annoying. */ +SDL_DYNAPI_PROC(void,SDL_MemoryBarrierRelease,(void),(),) +SDL_DYNAPI_PROC(void,SDL_MemoryBarrierAcquire,(void),(),) +#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 + +#if defined(__IPHONEOS__) && __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 + +#if defined(__ANDROID__) && __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,(void *a, int b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(void*,SDL_memcpy,(void *a, const void *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(void*,SDL_memmove,(void *a, 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,(wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(size_t,SDL_wcslcat,(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,(char *a, const char *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(size_t,SDL_utf8strlcpy,(char *a, const char *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(size_t,SDL_strlcat,(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,(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) diff --git a/src/dynapi/gendynapi.pl b/src/dynapi/gendynapi.pl new file mode 100755 index 0000000000000..b76afbd8a016d --- /dev/null +++ b/src/dynapi/gendynapi.pl @@ -0,0 +1,141 @@ +#!/usr/bin/perl -w + +# Simple DirectMedia Layer +# Copyright (C) 1997-2013 Sam Lantinga +# +# 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 () { + 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 (
) { + chomp; + next if not /\A\s*extern\s+DECLSPEC/; + my $decl = "$_ "; + if (not $decl =~ /\)\s*;/) { + while (
) { + 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: diff --git a/src/haptic/windows/SDL_syshaptic.c b/src/haptic/windows/SDL_syshaptic.c index ed2c98cc63b16..3025f9bbcb2d5 100644 --- a/src/haptic/windows/SDL_syshaptic.c +++ b/src/haptic/windows/SDL_syshaptic.c @@ -428,7 +428,11 @@ SDL_SYS_HapticOpenFromXInput(SDL_Haptic * haptic, Uint8 userid) #if defined(__WIN32__) && !defined(HAVE_LIBC) /* !!! FIXME: this is nasty. */ #undef SDL_CreateThread + #if SDL_DYNAMIC_API + haptic->hwdata->thread = SDL_CreateThread_REAL(SDL_RunXInputHaptic, threadName, haptic->hwdata, NULL, NULL); + #else haptic->hwdata->thread = SDL_CreateThread(SDL_RunXInputHaptic, threadName, haptic->hwdata, NULL, NULL); + #endif #else haptic->hwdata->thread = SDL_CreateThread(SDL_RunXInputHaptic, threadName, haptic->hwdata); #endif diff --git a/src/joystick/windows/SDL_dxjoystick.c b/src/joystick/windows/SDL_dxjoystick.c index 919d980b87a08..c8a0d7babd981 100644 --- a/src/joystick/windows/SDL_dxjoystick.c +++ b/src/joystick/windows/SDL_dxjoystick.c @@ -630,7 +630,11 @@ SDL_SYS_JoystickInit(void) /* spin up the thread to detect hotplug of devices */ #if defined(__WIN32__) && !defined(HAVE_LIBC) #undef SDL_CreateThread +#if SDL_DYNAMIC_API + s_threadJoystick= SDL_CreateThread_REAL( SDL_JoystickThread, "SDL_joystick", NULL, NULL, NULL ); +#else s_threadJoystick= SDL_CreateThread( SDL_JoystickThread, "SDL_joystick", NULL, NULL, NULL ); +#endif #else s_threadJoystick = SDL_CreateThread( SDL_JoystickThread, "SDL_joystick", NULL ); #endif diff --git a/src/thread/SDL_thread.c b/src/thread/SDL_thread.c index 268bb8e8379c1..ce51489205759 100644 --- a/src/thread/SDL_thread.c +++ b/src/thread/SDL_thread.c @@ -296,8 +296,14 @@ SDL_RunThread(void *data) } } -#ifdef SDL_PASSED_BEGINTHREAD_ENDTHREAD +#ifdef SDL_CreateThread #undef SDL_CreateThread +#endif +#if SDL_DYNAMIC_API +#define SDL_CreateThread SDL_CreateThread_REAL +#endif + +#ifdef SDL_PASSED_BEGINTHREAD_ENDTHREAD DECLSPEC SDL_Thread *SDLCALL SDL_CreateThread(int (SDLCALL * fn) (void *), const char *name, void *data, diff --git a/src/timer/SDL_timer.c b/src/timer/SDL_timer.c index fca57ac05e8ac..3996b360e4177 100644 --- a/src/timer/SDL_timer.c +++ b/src/timer/SDL_timer.c @@ -224,7 +224,11 @@ SDL_TimerInit(void) /* !!! FIXME: this is nasty. */ #if defined(__WIN32__) && !defined(HAVE_LIBC) #undef SDL_CreateThread +#if SDL_DYNAMIC_API + data->thread = SDL_CreateThread_REAL(SDL_TimerThread, name, data, NULL, NULL); +#else data->thread = SDL_CreateThread(SDL_TimerThread, name, data, NULL, NULL); +#endif #else data->thread = SDL_CreateThread(SDL_TimerThread, name, data); #endif