-- Cut and paste from the C preprocessor output -- Removed inline/defined functions which are not supported by luajit -- Instead, those are defined into defines.lua -- Note there are some tests here and there to stay cross-platform local ffi = require 'ffi' ffi.cdef[[ typedef struct _FILE FILE; ]] ffi.cdef[[ const char * SDL_GetPlatform (void); typedef enum { SDL_FALSE = 0, SDL_TRUE = 1 } SDL_bool; typedef int8_t Sint8; typedef uint8_t Uint8; typedef int16_t Sint16; typedef uint16_t Uint16; typedef int32_t Sint32; typedef uint32_t Uint32; typedef int64_t Sint64; typedef uint64_t Uint64; typedef int SDL_dummy_uint8[(sizeof(Uint8) == 1) * 2 - 1]; typedef int SDL_dummy_sint8[(sizeof(Sint8) == 1) * 2 - 1]; typedef int SDL_dummy_uint16[(sizeof(Uint16) == 2) * 2 - 1]; typedef int SDL_dummy_sint16[(sizeof(Sint16) == 2) * 2 - 1]; typedef int SDL_dummy_uint32[(sizeof(Uint32) == 4) * 2 - 1]; typedef int SDL_dummy_sint32[(sizeof(Sint32) == 4) * 2 - 1]; typedef int SDL_dummy_uint64[(sizeof(Uint64) == 8) * 2 - 1]; typedef int SDL_dummy_sint64[(sizeof(Sint64) == 8) * 2 - 1]; typedef enum { DUMMY_ENUM_VALUE } SDL_DUMMY_ENUM; typedef int SDL_dummy_enum[(sizeof(SDL_DUMMY_ENUM) == sizeof(int)) * 2 - 1]; void * SDL_malloc(size_t size); void * SDL_calloc(size_t nmemb, size_t size); void * SDL_realloc(void *mem, size_t size); void SDL_free(void *mem); char * SDL_getenv(const char *name); int SDL_setenv(const char *name, const char *value, int overwrite); void SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); int SDL_abs(int x); int SDL_isdigit(int x); int SDL_isspace(int x); int SDL_toupper(int x); int SDL_tolower(int x); void * SDL_memset(void *dst, int c, size_t len); void * SDL_memcpy(void *dst, const void *src, size_t len); void * SDL_memmove(void *dst, const void *src, size_t len); int SDL_memcmp(const void *s1, const void *s2, size_t len); size_t SDL_wcslen(const wchar_t *wstr); size_t SDL_wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen); size_t SDL_wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen); size_t SDL_strlen(const char *str); size_t SDL_strlcpy(char *dst, const char *src, size_t maxlen); size_t SDL_utf8strlcpy(char *dst, const char *src, size_t dst_bytes); size_t SDL_strlcat(char *dst, const char *src, size_t maxlen); char * SDL_strdup(const char *str); char * SDL_strrev(char *str); char * SDL_strupr(char *str); char * SDL_strlwr(char *str); char * SDL_strchr(const char *str, int c); char * SDL_strrchr(const char *str, int c); char * SDL_strstr(const char *haystack, const char *needle); char * SDL_itoa(int value, char *str, int radix); char * SDL_uitoa(unsigned int value, char *str, int radix); char * SDL_ltoa(long value, char *str, int radix); char * SDL_ultoa(unsigned long value, char *str, int radix); char * SDL_lltoa(Sint64 value, char *str, int radix); char * SDL_ulltoa(Uint64 value, char *str, int radix); int SDL_atoi(const char *str); double SDL_atof(const char *str); long SDL_strtol(const char *str, char **endp, int base); unsigned long SDL_strtoul(const char *str, char **endp, int base); Sint64 SDL_strtoll(const char *str, char **endp, int base); Uint64 SDL_strtoull(const char *str, char **endp, int base); double SDL_strtod(const char *str, char **endp); int SDL_strcmp(const char *str1, const char *str2); int SDL_strncmp(const char *str1, const char *str2, size_t maxlen); int SDL_strcasecmp(const char *str1, const char *str2); int SDL_strncasecmp(const char *str1, const char *str2, size_t len); int SDL_sscanf(const char *text, const char *fmt, ...); int SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); int SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); double SDL_atan(double x); double SDL_atan2(double x, double y); double SDL_ceil(double x); double SDL_copysign(double x, double y); double SDL_cos(double x); float SDL_cosf(float x); double SDL_fabs(double x); double SDL_floor(double x); double SDL_log(double x); double SDL_pow(double x, double y); double SDL_scalbn(double x, int n); double SDL_sin(double x); float SDL_sinf(float x); double SDL_sqrt(double x); typedef struct _SDL_iconv_t *SDL_iconv_t; SDL_iconv_t SDL_iconv_open(const char *tocode, const char *fromcode); int SDL_iconv_close(SDL_iconv_t cd); size_t SDL_iconv(SDL_iconv_t cd, const char **inbuf, size_t * inbytesleft, char **outbuf, size_t * outbytesleft); char * SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft); int SDL_main(int argc, char *argv[]); void SDL_SetMainReady(void); typedef enum { SDL_ASSERTION_RETRY, SDL_ASSERTION_BREAK, SDL_ASSERTION_ABORT, SDL_ASSERTION_IGNORE, SDL_ASSERTION_ALWAYS_IGNORE } SDL_assert_state; typedef struct SDL_assert_data { int always_ignore; unsigned int trigger_count; const char *condition; const char *filename; int linenum; const char *function; const struct SDL_assert_data *next; } SDL_assert_data; SDL_assert_state SDL_ReportAssertion(SDL_assert_data *, const char *, const char *, int); typedef SDL_assert_state ( *SDL_AssertionHandler)( const SDL_assert_data* data, void* userdata); void SDL_SetAssertionHandler( SDL_AssertionHandler handler, void *userdata); const SDL_assert_data * SDL_GetAssertionReport(void); void SDL_ResetAssertionReport(void); typedef int SDL_SpinLock; SDL_bool SDL_AtomicTryLock(SDL_SpinLock *lock); void SDL_AtomicLock(SDL_SpinLock *lock); void SDL_AtomicUnlock(SDL_SpinLock *lock); typedef struct { int value; } SDL_atomic_t; int SDL_SetError(const char *fmt, ...); const char * SDL_GetError(void); void SDL_ClearError(void); typedef enum { SDL_ENOMEM, SDL_EFREAD, SDL_EFWRITE, SDL_EFSEEK, SDL_UNSUPPORTED, SDL_LASTERROR } SDL_errorcode; int SDL_Error(SDL_errorcode code); struct SDL_mutex; typedef struct SDL_mutex SDL_mutex; SDL_mutex * SDL_CreateMutex(void); int SDL_LockMutex(SDL_mutex * mutex); int SDL_TryLockMutex(SDL_mutex * mutex); int SDL_UnlockMutex(SDL_mutex * mutex); void SDL_DestroyMutex(SDL_mutex * mutex); struct SDL_semaphore; typedef struct SDL_semaphore SDL_sem; SDL_sem * SDL_CreateSemaphore(Uint32 initial_value); void SDL_DestroySemaphore(SDL_sem * sem); int SDL_SemWait(SDL_sem * sem); int SDL_SemTryWait(SDL_sem * sem); int SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); int SDL_SemPost(SDL_sem * sem); Uint32 SDL_SemValue(SDL_sem * sem); struct SDL_cond; typedef struct SDL_cond SDL_cond; SDL_cond * SDL_CreateCond(void); void SDL_DestroyCond(SDL_cond * cond); int SDL_CondSignal(SDL_cond * cond); int SDL_CondBroadcast(SDL_cond * cond); int SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); int SDL_CondWaitTimeout(SDL_cond * cond, SDL_mutex * mutex, Uint32 ms); struct SDL_Thread; typedef struct SDL_Thread SDL_Thread; typedef unsigned long SDL_threadID; typedef unsigned int SDL_TLSID; typedef enum { SDL_THREAD_PRIORITY_LOW, SDL_THREAD_PRIORITY_NORMAL, SDL_THREAD_PRIORITY_HIGH } SDL_ThreadPriority; typedef int ( * SDL_ThreadFunction) (void *data); ]] if jit.os == 'Windows' then ffi.cdef[[ typedef uintptr_t (*pfnSDL_CurrentBeginThread) (void *, unsigned, unsigned (*func)(void*), void *arg, unsigned, unsigned *threadID); typedef void (*pfnSDL_CurrentEndThread) (unsigned code); uintptr_t _beginthreadex(void *, unsigned, unsigned (*func)(void*), void *arg, unsigned, unsigned *threadID); void _endthreadex(unsigned retval); /* note: this fails. why? pfnSDL_CurrentBeginThread _beginthreadex; pfnSDL_CurrentEndThread _endthreadex; */ SDL_Thread * SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); ]] else ffi.cdef[[ SDL_Thread * SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); ]] end ffi.cdef[[ const char * SDL_GetThreadName(SDL_Thread *thread); SDL_threadID SDL_ThreadID(void); SDL_threadID SDL_GetThreadID(SDL_Thread * thread); int SDL_SetThreadPriority(SDL_ThreadPriority priority); void SDL_WaitThread(SDL_Thread * thread, int *status); SDL_TLSID SDL_TLSCreate(void); void * SDL_TLSGet(SDL_TLSID id); int SDL_TLSSet(SDL_TLSID id, const void *value, void (*destructor)(void*)); typedef struct SDL_RWops { Sint64 ( * size) (struct SDL_RWops * context); Sint64 ( * seek) (struct SDL_RWops * context, Sint64 offset, int whence); size_t ( * read) (struct SDL_RWops * context, void *ptr, size_t size, size_t maxnum); size_t ( * write) (struct SDL_RWops * context, const void *ptr, size_t size, size_t num); int ( * close) (struct SDL_RWops * context); Uint32 type; union { struct { SDL_bool autoclose; FILE *fp; } stdio; struct { Uint8 *base; Uint8 *here; Uint8 *stop; } mem; struct { void *data1; void *data2; } unknown; } hidden; } SDL_RWops; SDL_RWops * SDL_RWFromFile(const char *file, const char *mode); SDL_RWops * SDL_RWFromFP(FILE * fp, SDL_bool autoclose); SDL_RWops * SDL_RWFromMem(void *mem, int size); SDL_RWops * SDL_RWFromConstMem(const void *mem, int size); SDL_RWops * SDL_AllocRW(void); void SDL_FreeRW(SDL_RWops * area); Uint8 SDL_ReadU8(SDL_RWops * src); Uint16 SDL_ReadLE16(SDL_RWops * src); Uint16 SDL_ReadBE16(SDL_RWops * src); Uint32 SDL_ReadLE32(SDL_RWops * src); Uint32 SDL_ReadBE32(SDL_RWops * src); Uint64 SDL_ReadLE64(SDL_RWops * src); Uint64 SDL_ReadBE64(SDL_RWops * src); size_t SDL_WriteU8(SDL_RWops * dst, Uint8 value); size_t SDL_WriteLE16(SDL_RWops * dst, Uint16 value); size_t SDL_WriteBE16(SDL_RWops * dst, Uint16 value); size_t SDL_WriteLE32(SDL_RWops * dst, Uint32 value); size_t SDL_WriteBE32(SDL_RWops * dst, Uint32 value); size_t SDL_WriteLE64(SDL_RWops * dst, Uint64 value); size_t SDL_WriteBE64(SDL_RWops * dst, Uint64 value); typedef Uint16 SDL_AudioFormat; typedef void ( * SDL_AudioCallback) (void *userdata, Uint8 * stream, int len); typedef struct SDL_AudioSpec { int freq; SDL_AudioFormat format; Uint8 channels; Uint8 silence; Uint16 samples; Uint16 padding; Uint32 size; SDL_AudioCallback callback; void *userdata; } SDL_AudioSpec; struct SDL_AudioCVT; typedef void ( * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, SDL_AudioFormat format); typedef struct SDL_AudioCVT { int needed; SDL_AudioFormat src_format; SDL_AudioFormat dst_format; double rate_incr; Uint8 *buf; int len; int len_cvt; int len_mult; double len_ratio; SDL_AudioFilter filters[10]; int filter_index; } __attribute__((packed)) SDL_AudioCVT; int SDL_GetNumAudioDrivers(void); const char * SDL_GetAudioDriver(int index); int SDL_AudioInit(const char *driver_name); void SDL_AudioQuit(void); const char * SDL_GetCurrentAudioDriver(void); int SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained); typedef Uint32 SDL_AudioDeviceID; int SDL_GetNumAudioDevices(int iscapture); const char * SDL_GetAudioDeviceName(int index, int iscapture); SDL_AudioDeviceID SDL_OpenAudioDevice(const char *device, int iscapture, const SDL_AudioSpec * desired, SDL_AudioSpec * obtained, int allowed_changes); typedef enum { SDL_AUDIO_STOPPED = 0, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED } SDL_AudioStatus; SDL_AudioStatus SDL_GetAudioStatus(void); SDL_AudioStatus SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); void SDL_PauseAudio(int pause_on); void SDL_PauseAudioDevice(SDL_AudioDeviceID dev, int pause_on); SDL_AudioSpec * SDL_LoadWAV_RW(SDL_RWops * src, int freesrc, SDL_AudioSpec * spec, Uint8 ** audio_buf, Uint32 * audio_len); void SDL_FreeWAV(Uint8 * audio_buf); int SDL_BuildAudioCVT(SDL_AudioCVT * cvt, SDL_AudioFormat src_format, Uint8 src_channels, int src_rate, SDL_AudioFormat dst_format, Uint8 dst_channels, int dst_rate); int SDL_ConvertAudio(SDL_AudioCVT * cvt); void SDL_MixAudio(Uint8 * dst, const Uint8 * src, Uint32 len, int volume); void SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format, Uint32 len, int volume); void SDL_LockAudio(void); void SDL_LockAudioDevice(SDL_AudioDeviceID dev); void SDL_UnlockAudio(void); void SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); void SDL_CloseAudio(void); void SDL_CloseAudioDevice(SDL_AudioDeviceID dev); int SDL_SetClipboardText(const char *text); char * SDL_GetClipboardText(void); SDL_bool SDL_HasClipboardText(void); int SDL_GetCPUCount(void); int SDL_GetCPUCacheLineSize(void); SDL_bool SDL_HasRDTSC(void); SDL_bool SDL_HasAltiVec(void); SDL_bool SDL_HasMMX(void); SDL_bool SDL_Has3DNow(void); SDL_bool SDL_HasSSE(void); SDL_bool SDL_HasSSE2(void); SDL_bool SDL_HasSSE3(void); SDL_bool SDL_HasSSE41(void); SDL_bool SDL_HasSSE42(void); enum { SDL_PIXELTYPE_UNKNOWN, SDL_PIXELTYPE_INDEX1, SDL_PIXELTYPE_INDEX4, SDL_PIXELTYPE_INDEX8, SDL_PIXELTYPE_PACKED8, SDL_PIXELTYPE_PACKED16, SDL_PIXELTYPE_PACKED32, SDL_PIXELTYPE_ARRAYU8, SDL_PIXELTYPE_ARRAYU16, SDL_PIXELTYPE_ARRAYU32, SDL_PIXELTYPE_ARRAYF16, SDL_PIXELTYPE_ARRAYF32 }; enum { SDL_BITMAPORDER_NONE, SDL_BITMAPORDER_4321, SDL_BITMAPORDER_1234 }; enum { SDL_PACKEDORDER_NONE, SDL_PACKEDORDER_XRGB, SDL_PACKEDORDER_RGBX, SDL_PACKEDORDER_ARGB, SDL_PACKEDORDER_RGBA, SDL_PACKEDORDER_XBGR, SDL_PACKEDORDER_BGRX, SDL_PACKEDORDER_ABGR, SDL_PACKEDORDER_BGRA }; enum { SDL_ARRAYORDER_NONE, SDL_ARRAYORDER_RGB, SDL_ARRAYORDER_RGBA, SDL_ARRAYORDER_ARGB, SDL_ARRAYORDER_BGR, SDL_ARRAYORDER_BGRA, SDL_ARRAYORDER_ABGR }; enum { SDL_PACKEDLAYOUT_NONE, SDL_PACKEDLAYOUT_332, SDL_PACKEDLAYOUT_4444, SDL_PACKEDLAYOUT_1555, SDL_PACKEDLAYOUT_5551, SDL_PACKEDLAYOUT_565, SDL_PACKEDLAYOUT_8888, SDL_PACKEDLAYOUT_2101010, SDL_PACKEDLAYOUT_1010102 }; enum { SDL_PIXELFORMAT_UNKNOWN, SDL_PIXELFORMAT_INDEX1LSB = ((1 << 28) | ((SDL_PIXELTYPE_INDEX1) << 24) | ((SDL_BITMAPORDER_4321) << 20) | ((0) << 16) | ((1) << 8) | ((0) << 0)), SDL_PIXELFORMAT_INDEX1MSB = ((1 << 28) | ((SDL_PIXELTYPE_INDEX1) << 24) | ((SDL_BITMAPORDER_1234) << 20) | ((0) << 16) | ((1) << 8) | ((0) << 0)), SDL_PIXELFORMAT_INDEX4LSB = ((1 << 28) | ((SDL_PIXELTYPE_INDEX4) << 24) | ((SDL_BITMAPORDER_4321) << 20) | ((0) << 16) | ((4) << 8) | ((0) << 0)), SDL_PIXELFORMAT_INDEX4MSB = ((1 << 28) | ((SDL_PIXELTYPE_INDEX4) << 24) | ((SDL_BITMAPORDER_1234) << 20) | ((0) << 16) | ((4) << 8) | ((0) << 0)), SDL_PIXELFORMAT_INDEX8 = ((1 << 28) | ((SDL_PIXELTYPE_INDEX8) << 24) | ((0) << 20) | ((0) << 16) | ((8) << 8) | ((1) << 0)), SDL_PIXELFORMAT_RGB332 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED8) << 24) | ((SDL_PACKEDORDER_XRGB) << 20) | ((SDL_PACKEDLAYOUT_332) << 16) | ((8) << 8) | ((1) << 0)), SDL_PIXELFORMAT_RGB444 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_XRGB) << 20) | ((SDL_PACKEDLAYOUT_4444) << 16) | ((12) << 8) | ((2) << 0)), SDL_PIXELFORMAT_RGB555 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_XRGB) << 20) | ((SDL_PACKEDLAYOUT_1555) << 16) | ((15) << 8) | ((2) << 0)), SDL_PIXELFORMAT_BGR555 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_XBGR) << 20) | ((SDL_PACKEDLAYOUT_1555) << 16) | ((15) << 8) | ((2) << 0)), SDL_PIXELFORMAT_ARGB4444 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_ARGB) << 20) | ((SDL_PACKEDLAYOUT_4444) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_RGBA4444 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_RGBA) << 20) | ((SDL_PACKEDLAYOUT_4444) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_ABGR4444 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_ABGR) << 20) | ((SDL_PACKEDLAYOUT_4444) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_BGRA4444 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_BGRA) << 20) | ((SDL_PACKEDLAYOUT_4444) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_ARGB1555 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_ARGB) << 20) | ((SDL_PACKEDLAYOUT_1555) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_RGBA5551 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_RGBA) << 20) | ((SDL_PACKEDLAYOUT_5551) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_ABGR1555 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_ABGR) << 20) | ((SDL_PACKEDLAYOUT_1555) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_BGRA5551 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_BGRA) << 20) | ((SDL_PACKEDLAYOUT_5551) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_RGB565 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_XRGB) << 20) | ((SDL_PACKEDLAYOUT_565) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_BGR565 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED16) << 24) | ((SDL_PACKEDORDER_XBGR) << 20) | ((SDL_PACKEDLAYOUT_565) << 16) | ((16) << 8) | ((2) << 0)), SDL_PIXELFORMAT_RGB24 = ((1 << 28) | ((SDL_PIXELTYPE_ARRAYU8) << 24) | ((SDL_ARRAYORDER_RGB) << 20) | ((0) << 16) | ((24) << 8) | ((3) << 0)), SDL_PIXELFORMAT_BGR24 = ((1 << 28) | ((SDL_PIXELTYPE_ARRAYU8) << 24) | ((SDL_ARRAYORDER_BGR) << 20) | ((0) << 16) | ((24) << 8) | ((3) << 0)), SDL_PIXELFORMAT_RGB888 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_XRGB) << 20) | ((SDL_PACKEDLAYOUT_8888) << 16) | ((24) << 8) | ((4) << 0)), SDL_PIXELFORMAT_RGBX8888 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_RGBX) << 20) | ((SDL_PACKEDLAYOUT_8888) << 16) | ((24) << 8) | ((4) << 0)), SDL_PIXELFORMAT_BGR888 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_XBGR) << 20) | ((SDL_PACKEDLAYOUT_8888) << 16) | ((24) << 8) | ((4) << 0)), SDL_PIXELFORMAT_BGRX8888 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_BGRX) << 20) | ((SDL_PACKEDLAYOUT_8888) << 16) | ((24) << 8) | ((4) << 0)), SDL_PIXELFORMAT_ARGB8888 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_ARGB) << 20) | ((SDL_PACKEDLAYOUT_8888) << 16) | ((32) << 8) | ((4) << 0)), SDL_PIXELFORMAT_RGBA8888 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_RGBA) << 20) | ((SDL_PACKEDLAYOUT_8888) << 16) | ((32) << 8) | ((4) << 0)), SDL_PIXELFORMAT_ABGR8888 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_ABGR) << 20) | ((SDL_PACKEDLAYOUT_8888) << 16) | ((32) << 8) | ((4) << 0)), SDL_PIXELFORMAT_BGRA8888 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_BGRA) << 20) | ((SDL_PACKEDLAYOUT_8888) << 16) | ((32) << 8) | ((4) << 0)), SDL_PIXELFORMAT_ARGB2101010 = ((1 << 28) | ((SDL_PIXELTYPE_PACKED32) << 24) | ((SDL_PACKEDORDER_ARGB) << 20) | ((SDL_PACKEDLAYOUT_2101010) << 16) | ((32) << 8) | ((4) << 0)), SDL_PIXELFORMAT_YV12 = ((((Uint32)(((Uint8)(('Y'))))) << 0) | (((Uint32)(((Uint8)(('V'))))) << 8) | (((Uint32)(((Uint8)(('1'))))) << 16) | (((Uint32)(((Uint8)(('2'))))) << 24)), SDL_PIXELFORMAT_IYUV = ((((Uint32)(((Uint8)(('I'))))) << 0) | (((Uint32)(((Uint8)(('Y'))))) << 8) | (((Uint32)(((Uint8)(('U'))))) << 16) | (((Uint32)(((Uint8)(('V'))))) << 24)), SDL_PIXELFORMAT_YUY2 = ((((Uint32)(((Uint8)(('Y'))))) << 0) | (((Uint32)(((Uint8)(('U'))))) << 8) | (((Uint32)(((Uint8)(('Y'))))) << 16) | (((Uint32)(((Uint8)(('2'))))) << 24)), SDL_PIXELFORMAT_UYVY = ((((Uint32)(((Uint8)(('U'))))) << 0) | (((Uint32)(((Uint8)(('Y'))))) << 8) | (((Uint32)(((Uint8)(('V'))))) << 16) | (((Uint32)(((Uint8)(('Y'))))) << 24)), SDL_PIXELFORMAT_YVYU = ((((Uint32)(((Uint8)(('Y'))))) << 0) | (((Uint32)(((Uint8)(('V'))))) << 8) | (((Uint32)(((Uint8)(('Y'))))) << 16) | (((Uint32)(((Uint8)(('U'))))) << 24)) }; typedef struct SDL_Color { Uint8 r; Uint8 g; Uint8 b; Uint8 a; } SDL_Color; typedef struct SDL_Palette { int ncolors; SDL_Color *colors; Uint32 version; int refcount; } SDL_Palette; typedef struct SDL_PixelFormat { Uint32 format; SDL_Palette *palette; Uint8 BitsPerPixel; Uint8 BytesPerPixel; Uint8 padding[2]; Uint32 Rmask; Uint32 Gmask; Uint32 Bmask; Uint32 Amask; Uint8 Rloss; Uint8 Gloss; Uint8 Bloss; Uint8 Aloss; Uint8 Rshift; Uint8 Gshift; Uint8 Bshift; Uint8 Ashift; int refcount; struct SDL_PixelFormat *next; } SDL_PixelFormat; const char* SDL_GetPixelFormatName(Uint32 format); SDL_bool SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp, Uint32 * Rmask, Uint32 * Gmask, Uint32 * Bmask, Uint32 * Amask); Uint32 SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); SDL_PixelFormat * SDL_AllocFormat(Uint32 pixel_format); void SDL_FreeFormat(SDL_PixelFormat *format); SDL_Palette * SDL_AllocPalette(int ncolors); int SDL_SetPixelFormatPalette(SDL_PixelFormat * format, SDL_Palette *palette); int SDL_SetPaletteColors(SDL_Palette * palette, const SDL_Color * colors, int firstcolor, int ncolors); void SDL_FreePalette(SDL_Palette * palette); Uint32 SDL_MapRGB(const SDL_PixelFormat * format, Uint8 r, Uint8 g, Uint8 b); Uint32 SDL_MapRGBA(const SDL_PixelFormat * format, Uint8 r, Uint8 g, Uint8 b, Uint8 a); void SDL_GetRGB(Uint32 pixel, const SDL_PixelFormat * format, Uint8 * r, Uint8 * g, Uint8 * b); void SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormat * format, Uint8 * r, Uint8 * g, Uint8 * b, Uint8 * a); void SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); typedef struct { int x; int y; } SDL_Point; typedef struct SDL_Rect { int x, y; int w, h; } SDL_Rect; SDL_bool SDL_HasIntersection(const SDL_Rect * A, const SDL_Rect * B); SDL_bool SDL_IntersectRect(const SDL_Rect * A, const SDL_Rect * B, SDL_Rect * result); void SDL_UnionRect(const SDL_Rect * A, const SDL_Rect * B, SDL_Rect * result); SDL_bool SDL_EnclosePoints(const SDL_Point * points, int count, const SDL_Rect * clip, SDL_Rect * result); SDL_bool SDL_IntersectRectAndLine(const SDL_Rect * rect, int *X1, int *Y1, int *X2, int *Y2); typedef enum { SDL_BLENDMODE_NONE = 0x00000000, SDL_BLENDMODE_BLEND = 0x00000001, SDL_BLENDMODE_ADD = 0x00000002, SDL_BLENDMODE_MOD = 0x00000004 } SDL_BlendMode; typedef struct SDL_Surface { Uint32 flags; SDL_PixelFormat *format; int w, h; int pitch; void *pixels; void *userdata; int locked; void *lock_data; SDL_Rect clip_rect; struct SDL_BlitMap *map; int refcount; } SDL_Surface; typedef int (*SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, struct SDL_Surface * dst, SDL_Rect * dstrect); SDL_Surface * SDL_CreateRGBSurface (Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); SDL_Surface * SDL_CreateRGBSurfaceFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); void SDL_FreeSurface(SDL_Surface * surface); int SDL_SetSurfacePalette(SDL_Surface * surface, SDL_Palette * palette); int SDL_LockSurface(SDL_Surface * surface); void SDL_UnlockSurface(SDL_Surface * surface); SDL_Surface * SDL_LoadBMP_RW(SDL_RWops * src, int freesrc); int SDL_SaveBMP_RW (SDL_Surface * surface, SDL_RWops * dst, int freedst); int SDL_SetSurfaceRLE(SDL_Surface * surface, int flag); int SDL_SetColorKey(SDL_Surface * surface, int flag, Uint32 key); int SDL_GetColorKey(SDL_Surface * surface, Uint32 * key); int SDL_SetSurfaceColorMod(SDL_Surface * surface, Uint8 r, Uint8 g, Uint8 b); int SDL_GetSurfaceColorMod(SDL_Surface * surface, Uint8 * r, Uint8 * g, Uint8 * b); int SDL_SetSurfaceAlphaMod(SDL_Surface * surface, Uint8 alpha); int SDL_GetSurfaceAlphaMod(SDL_Surface * surface, Uint8 * alpha); int SDL_SetSurfaceBlendMode(SDL_Surface * surface, SDL_BlendMode blendMode); int SDL_GetSurfaceBlendMode(SDL_Surface * surface, SDL_BlendMode *blendMode); SDL_bool SDL_SetClipRect(SDL_Surface * surface, const SDL_Rect * rect); void SDL_GetClipRect(SDL_Surface * surface, SDL_Rect * rect); SDL_Surface * SDL_ConvertSurface (SDL_Surface * src, SDL_PixelFormat * fmt, Uint32 flags); SDL_Surface * SDL_ConvertSurfaceFormat (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); int SDL_ConvertPixels(int width, int height, Uint32 src_format, const void * src, int src_pitch, Uint32 dst_format, void * dst, int dst_pitch); int SDL_FillRect (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); int SDL_FillRects (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); int SDL_UpperBlit (SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); int SDL_LowerBlit (SDL_Surface * src, SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); int SDL_SoftStretch(SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, const SDL_Rect * dstrect); int SDL_UpperBlitScaled (SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); int SDL_LowerBlitScaled (SDL_Surface * src, SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); typedef struct { Uint32 format; int w; int h; int refresh_rate; void *driverdata; } SDL_DisplayMode; typedef struct SDL_Window SDL_Window; typedef enum { SDL_WINDOW_FULLSCREEN = 0x00000001, SDL_WINDOW_OPENGL = 0x00000002, SDL_WINDOW_SHOWN = 0x00000004, SDL_WINDOW_HIDDEN = 0x00000008, SDL_WINDOW_BORDERLESS = 0x00000010, SDL_WINDOW_RESIZABLE = 0x00000020, SDL_WINDOW_MINIMIZED = 0x00000040, SDL_WINDOW_MAXIMIZED = 0x00000080, SDL_WINDOW_INPUT_GRABBED = 0x00000100, SDL_WINDOW_INPUT_FOCUS = 0x00000200, SDL_WINDOW_MOUSE_FOCUS = 0x00000400, SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), SDL_WINDOW_FOREIGN = 0x00000800 } SDL_WindowFlags; typedef enum { SDL_WINDOWEVENT_NONE, SDL_WINDOWEVENT_SHOWN, SDL_WINDOWEVENT_HIDDEN, SDL_WINDOWEVENT_EXPOSED, SDL_WINDOWEVENT_MOVED, SDL_WINDOWEVENT_RESIZED, SDL_WINDOWEVENT_SIZE_CHANGED, SDL_WINDOWEVENT_MINIMIZED, SDL_WINDOWEVENT_MAXIMIZED, SDL_WINDOWEVENT_RESTORED, SDL_WINDOWEVENT_ENTER, SDL_WINDOWEVENT_LEAVE, SDL_WINDOWEVENT_FOCUS_GAINED, SDL_WINDOWEVENT_FOCUS_LOST, SDL_WINDOWEVENT_CLOSE } SDL_WindowEventID; typedef void *SDL_GLContext; typedef enum { SDL_GL_RED_SIZE, SDL_GL_GREEN_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_ALPHA_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_DOUBLEBUFFER, SDL_GL_DEPTH_SIZE, SDL_GL_STENCIL_SIZE, SDL_GL_ACCUM_RED_SIZE, SDL_GL_ACCUM_GREEN_SIZE, SDL_GL_ACCUM_BLUE_SIZE, SDL_GL_ACCUM_ALPHA_SIZE, SDL_GL_STEREO, SDL_GL_MULTISAMPLEBUFFERS, SDL_GL_MULTISAMPLESAMPLES, SDL_GL_ACCELERATED_VISUAL, SDL_GL_RETAINED_BACKING, SDL_GL_CONTEXT_MAJOR_VERSION, SDL_GL_CONTEXT_MINOR_VERSION, SDL_GL_CONTEXT_EGL, SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_SHARE_WITH_CURRENT_CONTEXT } SDL_GLattr; typedef enum { SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, SDL_GL_CONTEXT_PROFILE_ES = 0x0004 } SDL_GLprofile; typedef enum { SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 } SDL_GLcontextFlag; int SDL_GetNumVideoDrivers(void); const char * SDL_GetVideoDriver(int index); int SDL_VideoInit(const char *driver_name); void SDL_VideoQuit(void); const char * SDL_GetCurrentVideoDriver(void); int SDL_GetNumVideoDisplays(void); const char * SDL_GetDisplayName(int displayIndex); int SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); int SDL_GetNumDisplayModes(int displayIndex); int SDL_GetDisplayMode(int displayIndex, int modeIndex, SDL_DisplayMode * mode); int SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); int SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); SDL_DisplayMode * SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); int SDL_GetWindowDisplayIndex(SDL_Window * window); int SDL_SetWindowDisplayMode(SDL_Window * window, const SDL_DisplayMode * mode); int SDL_GetWindowDisplayMode(SDL_Window * window, SDL_DisplayMode * mode); Uint32 SDL_GetWindowPixelFormat(SDL_Window * window); SDL_Window * SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags); SDL_Window * SDL_CreateWindowFrom(const void *data); Uint32 SDL_GetWindowID(SDL_Window * window); SDL_Window * SDL_GetWindowFromID(Uint32 id); Uint32 SDL_GetWindowFlags(SDL_Window * window); void SDL_SetWindowTitle(SDL_Window * window, const char *title); const char * SDL_GetWindowTitle(SDL_Window * window); void SDL_SetWindowIcon(SDL_Window * window, SDL_Surface * icon); void* SDL_SetWindowData(SDL_Window * window, const char *name, void *userdata); void * SDL_GetWindowData(SDL_Window * window, const char *name); void SDL_SetWindowPosition(SDL_Window * window, int x, int y); void SDL_GetWindowPosition(SDL_Window * window, int *x, int *y); void SDL_SetWindowSize(SDL_Window * window, int w, int h); void SDL_GetWindowSize(SDL_Window * window, int *w, int *h); void SDL_SetWindowMinimumSize(SDL_Window * window, int min_w, int min_h); void SDL_GetWindowMinimumSize(SDL_Window * window, int *w, int *h); void SDL_SetWindowMaximumSize(SDL_Window * window, int max_w, int max_h); void SDL_GetWindowMaximumSize(SDL_Window * window, int *w, int *h); void SDL_SetWindowBordered(SDL_Window * window, SDL_bool bordered); void SDL_ShowWindow(SDL_Window * window); void SDL_HideWindow(SDL_Window * window); void SDL_RaiseWindow(SDL_Window * window); void SDL_MaximizeWindow(SDL_Window * window); void SDL_MinimizeWindow(SDL_Window * window); void SDL_RestoreWindow(SDL_Window * window); int SDL_SetWindowFullscreen(SDL_Window * window, Uint32 flags); SDL_Surface * SDL_GetWindowSurface(SDL_Window * window); int SDL_UpdateWindowSurface(SDL_Window * window); int SDL_UpdateWindowSurfaceRects(SDL_Window * window, const SDL_Rect * rects, int numrects); void SDL_SetWindowGrab(SDL_Window * window, SDL_bool grabbed); SDL_bool SDL_GetWindowGrab(SDL_Window * window); int SDL_SetWindowBrightness(SDL_Window * window, float brightness); float SDL_GetWindowBrightness(SDL_Window * window); int SDL_SetWindowGammaRamp(SDL_Window * window, const Uint16 * red, const Uint16 * green, const Uint16 * blue); int SDL_GetWindowGammaRamp(SDL_Window * window, Uint16 * red, Uint16 * green, Uint16 * blue); void SDL_DestroyWindow(SDL_Window * window); SDL_bool SDL_IsScreenSaverEnabled(void); void SDL_EnableScreenSaver(void); void SDL_DisableScreenSaver(void); int SDL_GL_LoadLibrary(const char *path); void * SDL_GL_GetProcAddress(const char *proc); void SDL_GL_UnloadLibrary(void); SDL_bool SDL_GL_ExtensionSupported(const char *extension); int SDL_GL_SetAttribute(SDL_GLattr attr, int value); int SDL_GL_GetAttribute(SDL_GLattr attr, int *value); SDL_GLContext SDL_GL_CreateContext(SDL_Window * window); int SDL_GL_MakeCurrent(SDL_Window * window, SDL_GLContext context); SDL_Window* SDL_GL_GetCurrentWindow(void); SDL_GLContext SDL_GL_GetCurrentContext(void); int SDL_GL_SetSwapInterval(int interval); int SDL_GL_GetSwapInterval(void); void SDL_GL_SwapWindow(SDL_Window * window); void SDL_GL_DeleteContext(SDL_GLContext context); typedef enum { SDL_SCANCODE_UNKNOWN = 0, SDL_SCANCODE_A = 4, SDL_SCANCODE_B = 5, SDL_SCANCODE_C = 6, SDL_SCANCODE_D = 7, SDL_SCANCODE_E = 8, SDL_SCANCODE_F = 9, SDL_SCANCODE_G = 10, SDL_SCANCODE_H = 11, SDL_SCANCODE_I = 12, SDL_SCANCODE_J = 13, SDL_SCANCODE_K = 14, SDL_SCANCODE_L = 15, SDL_SCANCODE_M = 16, SDL_SCANCODE_N = 17, SDL_SCANCODE_O = 18, SDL_SCANCODE_P = 19, SDL_SCANCODE_Q = 20, SDL_SCANCODE_R = 21, SDL_SCANCODE_S = 22, SDL_SCANCODE_T = 23, SDL_SCANCODE_U = 24, SDL_SCANCODE_V = 25, SDL_SCANCODE_W = 26, SDL_SCANCODE_X = 27, SDL_SCANCODE_Y = 28, SDL_SCANCODE_Z = 29, SDL_SCANCODE_1 = 30, SDL_SCANCODE_2 = 31, SDL_SCANCODE_3 = 32, SDL_SCANCODE_4 = 33, SDL_SCANCODE_5 = 34, SDL_SCANCODE_6 = 35, SDL_SCANCODE_7 = 36, SDL_SCANCODE_8 = 37, SDL_SCANCODE_9 = 38, SDL_SCANCODE_0 = 39, SDL_SCANCODE_RETURN = 40, SDL_SCANCODE_ESCAPE = 41, SDL_SCANCODE_BACKSPACE = 42, SDL_SCANCODE_TAB = 43, SDL_SCANCODE_SPACE = 44, SDL_SCANCODE_MINUS = 45, SDL_SCANCODE_EQUALS = 46, SDL_SCANCODE_LEFTBRACKET = 47, SDL_SCANCODE_RIGHTBRACKET = 48, SDL_SCANCODE_BACKSLASH = 49, SDL_SCANCODE_NONUSHASH = 50, SDL_SCANCODE_SEMICOLON = 51, SDL_SCANCODE_APOSTROPHE = 52, SDL_SCANCODE_GRAVE = 53, SDL_SCANCODE_COMMA = 54, SDL_SCANCODE_PERIOD = 55, SDL_SCANCODE_SLASH = 56, SDL_SCANCODE_CAPSLOCK = 57, SDL_SCANCODE_F1 = 58, SDL_SCANCODE_F2 = 59, SDL_SCANCODE_F3 = 60, SDL_SCANCODE_F4 = 61, SDL_SCANCODE_F5 = 62, SDL_SCANCODE_F6 = 63, SDL_SCANCODE_F7 = 64, SDL_SCANCODE_F8 = 65, SDL_SCANCODE_F9 = 66, SDL_SCANCODE_F10 = 67, SDL_SCANCODE_F11 = 68, SDL_SCANCODE_F12 = 69, SDL_SCANCODE_PRINTSCREEN = 70, SDL_SCANCODE_SCROLLLOCK = 71, SDL_SCANCODE_PAUSE = 72, SDL_SCANCODE_INSERT = 73, SDL_SCANCODE_HOME = 74, SDL_SCANCODE_PAGEUP = 75, SDL_SCANCODE_DELETE = 76, SDL_SCANCODE_END = 77, SDL_SCANCODE_PAGEDOWN = 78, SDL_SCANCODE_RIGHT = 79, SDL_SCANCODE_LEFT = 80, SDL_SCANCODE_DOWN = 81, SDL_SCANCODE_UP = 82, SDL_SCANCODE_NUMLOCKCLEAR = 83, SDL_SCANCODE_KP_DIVIDE = 84, SDL_SCANCODE_KP_MULTIPLY = 85, SDL_SCANCODE_KP_MINUS = 86, SDL_SCANCODE_KP_PLUS = 87, SDL_SCANCODE_KP_ENTER = 88, SDL_SCANCODE_KP_1 = 89, SDL_SCANCODE_KP_2 = 90, SDL_SCANCODE_KP_3 = 91, SDL_SCANCODE_KP_4 = 92, SDL_SCANCODE_KP_5 = 93, SDL_SCANCODE_KP_6 = 94, SDL_SCANCODE_KP_7 = 95, SDL_SCANCODE_KP_8 = 96, SDL_SCANCODE_KP_9 = 97, SDL_SCANCODE_KP_0 = 98, SDL_SCANCODE_KP_PERIOD = 99, SDL_SCANCODE_NONUSBACKSLASH = 100, SDL_SCANCODE_APPLICATION = 101, SDL_SCANCODE_POWER = 102, SDL_SCANCODE_KP_EQUALS = 103, SDL_SCANCODE_F13 = 104, SDL_SCANCODE_F14 = 105, SDL_SCANCODE_F15 = 106, SDL_SCANCODE_F16 = 107, SDL_SCANCODE_F17 = 108, SDL_SCANCODE_F18 = 109, SDL_SCANCODE_F19 = 110, SDL_SCANCODE_F20 = 111, SDL_SCANCODE_F21 = 112, SDL_SCANCODE_F22 = 113, SDL_SCANCODE_F23 = 114, SDL_SCANCODE_F24 = 115, SDL_SCANCODE_EXECUTE = 116, SDL_SCANCODE_HELP = 117, SDL_SCANCODE_MENU = 118, SDL_SCANCODE_SELECT = 119, SDL_SCANCODE_STOP = 120, SDL_SCANCODE_AGAIN = 121, SDL_SCANCODE_UNDO = 122, SDL_SCANCODE_CUT = 123, SDL_SCANCODE_COPY = 124, SDL_SCANCODE_PASTE = 125, SDL_SCANCODE_FIND = 126, SDL_SCANCODE_MUTE = 127, SDL_SCANCODE_VOLUMEUP = 128, SDL_SCANCODE_VOLUMEDOWN = 129, SDL_SCANCODE_KP_COMMA = 133, SDL_SCANCODE_KP_EQUALSAS400 = 134, SDL_SCANCODE_INTERNATIONAL1 = 135, SDL_SCANCODE_INTERNATIONAL2 = 136, SDL_SCANCODE_INTERNATIONAL3 = 137, SDL_SCANCODE_INTERNATIONAL4 = 138, SDL_SCANCODE_INTERNATIONAL5 = 139, SDL_SCANCODE_INTERNATIONAL6 = 140, SDL_SCANCODE_INTERNATIONAL7 = 141, SDL_SCANCODE_INTERNATIONAL8 = 142, SDL_SCANCODE_INTERNATIONAL9 = 143, SDL_SCANCODE_LANG1 = 144, SDL_SCANCODE_LANG2 = 145, SDL_SCANCODE_LANG3 = 146, SDL_SCANCODE_LANG4 = 147, SDL_SCANCODE_LANG5 = 148, SDL_SCANCODE_LANG6 = 149, SDL_SCANCODE_LANG7 = 150, SDL_SCANCODE_LANG8 = 151, SDL_SCANCODE_LANG9 = 152, SDL_SCANCODE_ALTERASE = 153, SDL_SCANCODE_SYSREQ = 154, SDL_SCANCODE_CANCEL = 155, SDL_SCANCODE_CLEAR = 156, SDL_SCANCODE_PRIOR = 157, SDL_SCANCODE_RETURN2 = 158, SDL_SCANCODE_SEPARATOR = 159, SDL_SCANCODE_OUT = 160, SDL_SCANCODE_OPER = 161, SDL_SCANCODE_CLEARAGAIN = 162, SDL_SCANCODE_CRSEL = 163, SDL_SCANCODE_EXSEL = 164, SDL_SCANCODE_KP_00 = 176, SDL_SCANCODE_KP_000 = 177, SDL_SCANCODE_THOUSANDSSEPARATOR = 178, SDL_SCANCODE_DECIMALSEPARATOR = 179, SDL_SCANCODE_CURRENCYUNIT = 180, SDL_SCANCODE_CURRENCYSUBUNIT = 181, SDL_SCANCODE_KP_LEFTPAREN = 182, SDL_SCANCODE_KP_RIGHTPAREN = 183, SDL_SCANCODE_KP_LEFTBRACE = 184, SDL_SCANCODE_KP_RIGHTBRACE = 185, SDL_SCANCODE_KP_TAB = 186, SDL_SCANCODE_KP_BACKSPACE = 187, SDL_SCANCODE_KP_A = 188, SDL_SCANCODE_KP_B = 189, SDL_SCANCODE_KP_C = 190, SDL_SCANCODE_KP_D = 191, SDL_SCANCODE_KP_E = 192, SDL_SCANCODE_KP_F = 193, SDL_SCANCODE_KP_XOR = 194, SDL_SCANCODE_KP_POWER = 195, SDL_SCANCODE_KP_PERCENT = 196, SDL_SCANCODE_KP_LESS = 197, SDL_SCANCODE_KP_GREATER = 198, SDL_SCANCODE_KP_AMPERSAND = 199, SDL_SCANCODE_KP_DBLAMPERSAND = 200, SDL_SCANCODE_KP_VERTICALBAR = 201, SDL_SCANCODE_KP_DBLVERTICALBAR = 202, SDL_SCANCODE_KP_COLON = 203, SDL_SCANCODE_KP_HASH = 204, SDL_SCANCODE_KP_SPACE = 205, SDL_SCANCODE_KP_AT = 206, SDL_SCANCODE_KP_EXCLAM = 207, SDL_SCANCODE_KP_MEMSTORE = 208, SDL_SCANCODE_KP_MEMRECALL = 209, SDL_SCANCODE_KP_MEMCLEAR = 210, SDL_SCANCODE_KP_MEMADD = 211, SDL_SCANCODE_KP_MEMSUBTRACT = 212, SDL_SCANCODE_KP_MEMMULTIPLY = 213, SDL_SCANCODE_KP_MEMDIVIDE = 214, SDL_SCANCODE_KP_PLUSMINUS = 215, SDL_SCANCODE_KP_CLEAR = 216, SDL_SCANCODE_KP_CLEARENTRY = 217, SDL_SCANCODE_KP_BINARY = 218, SDL_SCANCODE_KP_OCTAL = 219, SDL_SCANCODE_KP_DECIMAL = 220, SDL_SCANCODE_KP_HEXADECIMAL = 221, SDL_SCANCODE_LCTRL = 224, SDL_SCANCODE_LSHIFT = 225, SDL_SCANCODE_LALT = 226, SDL_SCANCODE_LGUI = 227, SDL_SCANCODE_RCTRL = 228, SDL_SCANCODE_RSHIFT = 229, SDL_SCANCODE_RALT = 230, SDL_SCANCODE_RGUI = 231, SDL_SCANCODE_MODE = 257, SDL_SCANCODE_AUDIONEXT = 258, SDL_SCANCODE_AUDIOPREV = 259, SDL_SCANCODE_AUDIOSTOP = 260, SDL_SCANCODE_AUDIOPLAY = 261, SDL_SCANCODE_AUDIOMUTE = 262, SDL_SCANCODE_MEDIASELECT = 263, SDL_SCANCODE_WWW = 264, SDL_SCANCODE_MAIL = 265, SDL_SCANCODE_CALCULATOR = 266, SDL_SCANCODE_COMPUTER = 267, SDL_SCANCODE_AC_SEARCH = 268, SDL_SCANCODE_AC_HOME = 269, SDL_SCANCODE_AC_BACK = 270, SDL_SCANCODE_AC_FORWARD = 271, SDL_SCANCODE_AC_STOP = 272, SDL_SCANCODE_AC_REFRESH = 273, SDL_SCANCODE_AC_BOOKMARKS = 274, SDL_SCANCODE_BRIGHTNESSDOWN = 275, SDL_SCANCODE_BRIGHTNESSUP = 276, SDL_SCANCODE_DISPLAYSWITCH = 277, SDL_SCANCODE_KBDILLUMTOGGLE = 278, SDL_SCANCODE_KBDILLUMDOWN = 279, SDL_SCANCODE_KBDILLUMUP = 280, SDL_SCANCODE_EJECT = 281, SDL_SCANCODE_SLEEP = 282, SDL_SCANCODE_APP1 = 283, SDL_SCANCODE_APP2 = 284, SDL_NUM_SCANCODES = 512 } SDL_Scancode; typedef Sint32 SDL_Keycode; enum { SDLK_UNKNOWN = 0, SDLK_RETURN = '\r', SDLK_ESCAPE = '\033', SDLK_BACKSPACE = '\b', SDLK_TAB = '\t', SDLK_SPACE = ' ', SDLK_EXCLAIM = '!', SDLK_QUOTEDBL = '"', SDLK_HASH = '#', SDLK_PERCENT = '%', SDLK_DOLLAR = '$', SDLK_AMPERSAND = '&', SDLK_QUOTE = '\'', SDLK_LEFTPAREN = '(', SDLK_RIGHTPAREN = ')', SDLK_ASTERISK = '*', SDLK_PLUS = '+', SDLK_COMMA = ',', SDLK_MINUS = '-', SDLK_PERIOD = '.', SDLK_SLASH = '/', SDLK_0 = '0', SDLK_1 = '1', SDLK_2 = '2', SDLK_3 = '3', SDLK_4 = '4', SDLK_5 = '5', SDLK_6 = '6', SDLK_7 = '7', SDLK_8 = '8', SDLK_9 = '9', SDLK_COLON = ':', SDLK_SEMICOLON = ';', SDLK_LESS = '<', SDLK_EQUALS = '=', SDLK_GREATER = '>', SDLK_QUESTION = '?', SDLK_AT = '@', SDLK_LEFTBRACKET = '[', SDLK_BACKSLASH = '\\', SDLK_RIGHTBRACKET = ']', SDLK_CARET = '^', SDLK_UNDERSCORE = '_', SDLK_BACKQUOTE = '`', SDLK_a = 'a', SDLK_b = 'b', SDLK_c = 'c', SDLK_d = 'd', SDLK_e = 'e', SDLK_f = 'f', SDLK_g = 'g', SDLK_h = 'h', SDLK_i = 'i', SDLK_j = 'j', SDLK_k = 'k', SDLK_l = 'l', SDLK_m = 'm', SDLK_n = 'n', SDLK_o = 'o', SDLK_p = 'p', SDLK_q = 'q', SDLK_r = 'r', SDLK_s = 's', SDLK_t = 't', SDLK_u = 'u', SDLK_v = 'v', SDLK_w = 'w', SDLK_x = 'x', SDLK_y = 'y', SDLK_z = 'z', SDLK_CAPSLOCK = (SDL_SCANCODE_CAPSLOCK | (1<<30)), SDLK_F1 = (SDL_SCANCODE_F1 | (1<<30)), SDLK_F2 = (SDL_SCANCODE_F2 | (1<<30)), SDLK_F3 = (SDL_SCANCODE_F3 | (1<<30)), SDLK_F4 = (SDL_SCANCODE_F4 | (1<<30)), SDLK_F5 = (SDL_SCANCODE_F5 | (1<<30)), SDLK_F6 = (SDL_SCANCODE_F6 | (1<<30)), SDLK_F7 = (SDL_SCANCODE_F7 | (1<<30)), SDLK_F8 = (SDL_SCANCODE_F8 | (1<<30)), SDLK_F9 = (SDL_SCANCODE_F9 | (1<<30)), SDLK_F10 = (SDL_SCANCODE_F10 | (1<<30)), SDLK_F11 = (SDL_SCANCODE_F11 | (1<<30)), SDLK_F12 = (SDL_SCANCODE_F12 | (1<<30)), SDLK_PRINTSCREEN = (SDL_SCANCODE_PRINTSCREEN | (1<<30)), SDLK_SCROLLLOCK = (SDL_SCANCODE_SCROLLLOCK | (1<<30)), SDLK_PAUSE = (SDL_SCANCODE_PAUSE | (1<<30)), SDLK_INSERT = (SDL_SCANCODE_INSERT | (1<<30)), SDLK_HOME = (SDL_SCANCODE_HOME | (1<<30)), SDLK_PAGEUP = (SDL_SCANCODE_PAGEUP | (1<<30)), SDLK_DELETE = '\177', SDLK_END = (SDL_SCANCODE_END | (1<<30)), SDLK_PAGEDOWN = (SDL_SCANCODE_PAGEDOWN | (1<<30)), SDLK_RIGHT = (SDL_SCANCODE_RIGHT | (1<<30)), SDLK_LEFT = (SDL_SCANCODE_LEFT | (1<<30)), SDLK_DOWN = (SDL_SCANCODE_DOWN | (1<<30)), SDLK_UP = (SDL_SCANCODE_UP | (1<<30)), SDLK_NUMLOCKCLEAR = (SDL_SCANCODE_NUMLOCKCLEAR | (1<<30)), SDLK_KP_DIVIDE = (SDL_SCANCODE_KP_DIVIDE | (1<<30)), SDLK_KP_MULTIPLY = (SDL_SCANCODE_KP_MULTIPLY | (1<<30)), SDLK_KP_MINUS = (SDL_SCANCODE_KP_MINUS | (1<<30)), SDLK_KP_PLUS = (SDL_SCANCODE_KP_PLUS | (1<<30)), SDLK_KP_ENTER = (SDL_SCANCODE_KP_ENTER | (1<<30)), SDLK_KP_1 = (SDL_SCANCODE_KP_1 | (1<<30)), SDLK_KP_2 = (SDL_SCANCODE_KP_2 | (1<<30)), SDLK_KP_3 = (SDL_SCANCODE_KP_3 | (1<<30)), SDLK_KP_4 = (SDL_SCANCODE_KP_4 | (1<<30)), SDLK_KP_5 = (SDL_SCANCODE_KP_5 | (1<<30)), SDLK_KP_6 = (SDL_SCANCODE_KP_6 | (1<<30)), SDLK_KP_7 = (SDL_SCANCODE_KP_7 | (1<<30)), SDLK_KP_8 = (SDL_SCANCODE_KP_8 | (1<<30)), SDLK_KP_9 = (SDL_SCANCODE_KP_9 | (1<<30)), SDLK_KP_0 = (SDL_SCANCODE_KP_0 | (1<<30)), SDLK_KP_PERIOD = (SDL_SCANCODE_KP_PERIOD | (1<<30)), SDLK_APPLICATION = (SDL_SCANCODE_APPLICATION | (1<<30)), SDLK_POWER = (SDL_SCANCODE_POWER | (1<<30)), SDLK_KP_EQUALS = (SDL_SCANCODE_KP_EQUALS | (1<<30)), SDLK_F13 = (SDL_SCANCODE_F13 | (1<<30)), SDLK_F14 = (SDL_SCANCODE_F14 | (1<<30)), SDLK_F15 = (SDL_SCANCODE_F15 | (1<<30)), SDLK_F16 = (SDL_SCANCODE_F16 | (1<<30)), SDLK_F17 = (SDL_SCANCODE_F17 | (1<<30)), SDLK_F18 = (SDL_SCANCODE_F18 | (1<<30)), SDLK_F19 = (SDL_SCANCODE_F19 | (1<<30)), SDLK_F20 = (SDL_SCANCODE_F20 | (1<<30)), SDLK_F21 = (SDL_SCANCODE_F21 | (1<<30)), SDLK_F22 = (SDL_SCANCODE_F22 | (1<<30)), SDLK_F23 = (SDL_SCANCODE_F23 | (1<<30)), SDLK_F24 = (SDL_SCANCODE_F24 | (1<<30)), SDLK_EXECUTE = (SDL_SCANCODE_EXECUTE | (1<<30)), SDLK_HELP = (SDL_SCANCODE_HELP | (1<<30)), SDLK_MENU = (SDL_SCANCODE_MENU | (1<<30)), SDLK_SELECT = (SDL_SCANCODE_SELECT | (1<<30)), SDLK_STOP = (SDL_SCANCODE_STOP | (1<<30)), SDLK_AGAIN = (SDL_SCANCODE_AGAIN | (1<<30)), SDLK_UNDO = (SDL_SCANCODE_UNDO | (1<<30)), SDLK_CUT = (SDL_SCANCODE_CUT | (1<<30)), SDLK_COPY = (SDL_SCANCODE_COPY | (1<<30)), SDLK_PASTE = (SDL_SCANCODE_PASTE | (1<<30)), SDLK_FIND = (SDL_SCANCODE_FIND | (1<<30)), SDLK_MUTE = (SDL_SCANCODE_MUTE | (1<<30)), SDLK_VOLUMEUP = (SDL_SCANCODE_VOLUMEUP | (1<<30)), SDLK_VOLUMEDOWN = (SDL_SCANCODE_VOLUMEDOWN | (1<<30)), SDLK_KP_COMMA = (SDL_SCANCODE_KP_COMMA | (1<<30)), SDLK_KP_EQUALSAS400 = (SDL_SCANCODE_KP_EQUALSAS400 | (1<<30)), SDLK_ALTERASE = (SDL_SCANCODE_ALTERASE | (1<<30)), SDLK_SYSREQ = (SDL_SCANCODE_SYSREQ | (1<<30)), SDLK_CANCEL = (SDL_SCANCODE_CANCEL | (1<<30)), SDLK_CLEAR = (SDL_SCANCODE_CLEAR | (1<<30)), SDLK_PRIOR = (SDL_SCANCODE_PRIOR | (1<<30)), SDLK_RETURN2 = (SDL_SCANCODE_RETURN2 | (1<<30)), SDLK_SEPARATOR = (SDL_SCANCODE_SEPARATOR | (1<<30)), SDLK_OUT = (SDL_SCANCODE_OUT | (1<<30)), SDLK_OPER = (SDL_SCANCODE_OPER | (1<<30)), SDLK_CLEARAGAIN = (SDL_SCANCODE_CLEARAGAIN | (1<<30)), SDLK_CRSEL = (SDL_SCANCODE_CRSEL | (1<<30)), SDLK_EXSEL = (SDL_SCANCODE_EXSEL | (1<<30)), SDLK_KP_00 = (SDL_SCANCODE_KP_00 | (1<<30)), SDLK_KP_000 = (SDL_SCANCODE_KP_000 | (1<<30)), SDLK_THOUSANDSSEPARATOR = (SDL_SCANCODE_THOUSANDSSEPARATOR | (1<<30)), SDLK_DECIMALSEPARATOR = (SDL_SCANCODE_DECIMALSEPARATOR | (1<<30)), SDLK_CURRENCYUNIT = (SDL_SCANCODE_CURRENCYUNIT | (1<<30)), SDLK_CURRENCYSUBUNIT = (SDL_SCANCODE_CURRENCYSUBUNIT | (1<<30)), SDLK_KP_LEFTPAREN = (SDL_SCANCODE_KP_LEFTPAREN | (1<<30)), SDLK_KP_RIGHTPAREN = (SDL_SCANCODE_KP_RIGHTPAREN | (1<<30)), SDLK_KP_LEFTBRACE = (SDL_SCANCODE_KP_LEFTBRACE | (1<<30)), SDLK_KP_RIGHTBRACE = (SDL_SCANCODE_KP_RIGHTBRACE | (1<<30)), SDLK_KP_TAB = (SDL_SCANCODE_KP_TAB | (1<<30)), SDLK_KP_BACKSPACE = (SDL_SCANCODE_KP_BACKSPACE | (1<<30)), SDLK_KP_A = (SDL_SCANCODE_KP_A | (1<<30)), SDLK_KP_B = (SDL_SCANCODE_KP_B | (1<<30)), SDLK_KP_C = (SDL_SCANCODE_KP_C | (1<<30)), SDLK_KP_D = (SDL_SCANCODE_KP_D | (1<<30)), SDLK_KP_E = (SDL_SCANCODE_KP_E | (1<<30)), SDLK_KP_F = (SDL_SCANCODE_KP_F | (1<<30)), SDLK_KP_XOR = (SDL_SCANCODE_KP_XOR | (1<<30)), SDLK_KP_POWER = (SDL_SCANCODE_KP_POWER | (1<<30)), SDLK_KP_PERCENT = (SDL_SCANCODE_KP_PERCENT | (1<<30)), SDLK_KP_LESS = (SDL_SCANCODE_KP_LESS | (1<<30)), SDLK_KP_GREATER = (SDL_SCANCODE_KP_GREATER | (1<<30)), SDLK_KP_AMPERSAND = (SDL_SCANCODE_KP_AMPERSAND | (1<<30)), SDLK_KP_DBLAMPERSAND = (SDL_SCANCODE_KP_DBLAMPERSAND | (1<<30)), SDLK_KP_VERTICALBAR = (SDL_SCANCODE_KP_VERTICALBAR | (1<<30)), SDLK_KP_DBLVERTICALBAR = (SDL_SCANCODE_KP_DBLVERTICALBAR | (1<<30)), SDLK_KP_COLON = (SDL_SCANCODE_KP_COLON | (1<<30)), SDLK_KP_HASH = (SDL_SCANCODE_KP_HASH | (1<<30)), SDLK_KP_SPACE = (SDL_SCANCODE_KP_SPACE | (1<<30)), SDLK_KP_AT = (SDL_SCANCODE_KP_AT | (1<<30)), SDLK_KP_EXCLAM = (SDL_SCANCODE_KP_EXCLAM | (1<<30)), SDLK_KP_MEMSTORE = (SDL_SCANCODE_KP_MEMSTORE | (1<<30)), SDLK_KP_MEMRECALL = (SDL_SCANCODE_KP_MEMRECALL | (1<<30)), SDLK_KP_MEMCLEAR = (SDL_SCANCODE_KP_MEMCLEAR | (1<<30)), SDLK_KP_MEMADD = (SDL_SCANCODE_KP_MEMADD | (1<<30)), SDLK_KP_MEMSUBTRACT = (SDL_SCANCODE_KP_MEMSUBTRACT | (1<<30)), SDLK_KP_MEMMULTIPLY = (SDL_SCANCODE_KP_MEMMULTIPLY | (1<<30)), SDLK_KP_MEMDIVIDE = (SDL_SCANCODE_KP_MEMDIVIDE | (1<<30)), SDLK_KP_PLUSMINUS = (SDL_SCANCODE_KP_PLUSMINUS | (1<<30)), SDLK_KP_CLEAR = (SDL_SCANCODE_KP_CLEAR | (1<<30)), SDLK_KP_CLEARENTRY = (SDL_SCANCODE_KP_CLEARENTRY | (1<<30)), SDLK_KP_BINARY = (SDL_SCANCODE_KP_BINARY | (1<<30)), SDLK_KP_OCTAL = (SDL_SCANCODE_KP_OCTAL | (1<<30)), SDLK_KP_DECIMAL = (SDL_SCANCODE_KP_DECIMAL | (1<<30)), SDLK_KP_HEXADECIMAL = (SDL_SCANCODE_KP_HEXADECIMAL | (1<<30)), SDLK_LCTRL = (SDL_SCANCODE_LCTRL | (1<<30)), SDLK_LSHIFT = (SDL_SCANCODE_LSHIFT | (1<<30)), SDLK_LALT = (SDL_SCANCODE_LALT | (1<<30)), SDLK_LGUI = (SDL_SCANCODE_LGUI | (1<<30)), SDLK_RCTRL = (SDL_SCANCODE_RCTRL | (1<<30)), SDLK_RSHIFT = (SDL_SCANCODE_RSHIFT | (1<<30)), SDLK_RALT = (SDL_SCANCODE_RALT | (1<<30)), SDLK_RGUI = (SDL_SCANCODE_RGUI | (1<<30)), SDLK_MODE = (SDL_SCANCODE_MODE | (1<<30)), SDLK_AUDIONEXT = (SDL_SCANCODE_AUDIONEXT | (1<<30)), SDLK_AUDIOPREV = (SDL_SCANCODE_AUDIOPREV | (1<<30)), SDLK_AUDIOSTOP = (SDL_SCANCODE_AUDIOSTOP | (1<<30)), SDLK_AUDIOPLAY = (SDL_SCANCODE_AUDIOPLAY | (1<<30)), SDLK_AUDIOMUTE = (SDL_SCANCODE_AUDIOMUTE | (1<<30)), SDLK_MEDIASELECT = (SDL_SCANCODE_MEDIASELECT | (1<<30)), SDLK_WWW = (SDL_SCANCODE_WWW | (1<<30)), SDLK_MAIL = (SDL_SCANCODE_MAIL | (1<<30)), SDLK_CALCULATOR = (SDL_SCANCODE_CALCULATOR | (1<<30)), SDLK_COMPUTER = (SDL_SCANCODE_COMPUTER | (1<<30)), SDLK_AC_SEARCH = (SDL_SCANCODE_AC_SEARCH | (1<<30)), SDLK_AC_HOME = (SDL_SCANCODE_AC_HOME | (1<<30)), SDLK_AC_BACK = (SDL_SCANCODE_AC_BACK | (1<<30)), SDLK_AC_FORWARD = (SDL_SCANCODE_AC_FORWARD | (1<<30)), SDLK_AC_STOP = (SDL_SCANCODE_AC_STOP | (1<<30)), SDLK_AC_REFRESH = (SDL_SCANCODE_AC_REFRESH | (1<<30)), SDLK_AC_BOOKMARKS = (SDL_SCANCODE_AC_BOOKMARKS | (1<<30)), SDLK_BRIGHTNESSDOWN = (SDL_SCANCODE_BRIGHTNESSDOWN | (1<<30)), SDLK_BRIGHTNESSUP = (SDL_SCANCODE_BRIGHTNESSUP | (1<<30)), SDLK_DISPLAYSWITCH = (SDL_SCANCODE_DISPLAYSWITCH | (1<<30)), SDLK_KBDILLUMTOGGLE = (SDL_SCANCODE_KBDILLUMTOGGLE | (1<<30)), SDLK_KBDILLUMDOWN = (SDL_SCANCODE_KBDILLUMDOWN | (1<<30)), SDLK_KBDILLUMUP = (SDL_SCANCODE_KBDILLUMUP | (1<<30)), SDLK_EJECT = (SDL_SCANCODE_EJECT | (1<<30)), SDLK_SLEEP = (SDL_SCANCODE_SLEEP | (1<<30)) }; typedef enum { SDL_KMOD_NONE = 0x0000, SDL_KMOD_LSHIFT = 0x0001, SDL_KMOD_RSHIFT = 0x0002, SDL_KMOD_LCTRL = 0x0040, SDL_KMOD_RCTRL = 0x0080, SDL_KMOD_LALT = 0x0100, SDL_KMOD_RALT = 0x0200, SDL_KMOD_LGUI = 0x0400, SDL_KMOD_RGUI = 0x0800, SDL_KMOD_NUM = 0x1000, SDL_KMOD_CAPS = 0x2000, SDL_KMOD_MODE = 0x4000, SDL_KMOD_RESERVED = 0x8000 } SDL_Keymod; typedef struct SDL_Keysym { SDL_Scancode scancode; SDL_Keycode sym; Uint16 mod; Uint32 unused; } SDL_Keysym; SDL_Window * SDL_GetKeyboardFocus(void); const Uint8 * SDL_GetKeyboardState(int *numkeys); SDL_Keymod SDL_GetModState(void); void SDL_SetModState(SDL_Keymod modstate); SDL_Keycode SDL_GetKeyFromScancode(SDL_Scancode scancode); SDL_Scancode SDL_GetScancodeFromKey(SDL_Keycode key); const char * SDL_GetScancodeName(SDL_Scancode scancode); SDL_Scancode SDL_GetScancodeFromName(const char *name); const char * SDL_GetKeyName(SDL_Keycode key); SDL_Keycode SDL_GetKeyFromName(const char *name); void SDL_StartTextInput(void); SDL_bool SDL_IsTextInputActive(void); void SDL_StopTextInput(void); void SDL_SetTextInputRect(SDL_Rect *rect); SDL_bool SDL_HasScreenKeyboardSupport(void); SDL_bool SDL_IsScreenKeyboardShown(SDL_Window *window); typedef struct SDL_Cursor SDL_Cursor; typedef enum { SDL_SYSTEM_CURSOR_ARROW, SDL_SYSTEM_CURSOR_IBEAM, SDL_SYSTEM_CURSOR_WAIT, SDL_SYSTEM_CURSOR_CROSSHAIR, SDL_SYSTEM_CURSOR_WAITARROW, SDL_SYSTEM_CURSOR_SIZENWSE, SDL_SYSTEM_CURSOR_SIZENESW, SDL_SYSTEM_CURSOR_SIZEWE, SDL_SYSTEM_CURSOR_SIZENS, SDL_SYSTEM_CURSOR_SIZEALL, SDL_SYSTEM_CURSOR_NO, SDL_SYSTEM_CURSOR_HAND, SDL_NUM_SYSTEM_CURSORS } SDL_SystemCursor; SDL_Window * SDL_GetMouseFocus(void); Uint32 SDL_GetMouseState(int *x, int *y); Uint32 SDL_GetRelativeMouseState(int *x, int *y); void SDL_WarpMouseInWindow(SDL_Window * window, int x, int y); int SDL_SetRelativeMouseMode(SDL_bool enabled); SDL_bool SDL_GetRelativeMouseMode(void); SDL_Cursor * SDL_CreateCursor(const Uint8 * data, const Uint8 * mask, int w, int h, int hot_x, int hot_y); SDL_Cursor * SDL_CreateColorCursor(SDL_Surface *surface, int hot_x, int hot_y); SDL_Cursor * SDL_CreateSystemCursor(SDL_SystemCursor id); void SDL_SetCursor(SDL_Cursor * cursor); SDL_Cursor * SDL_GetCursor(void); SDL_Cursor * SDL_GetDefaultCursor(void); void SDL_FreeCursor(SDL_Cursor * cursor); int SDL_ShowCursor(int toggle); struct _SDL_Joystick; typedef struct _SDL_Joystick SDL_Joystick; typedef struct { Uint8 data[16]; } SDL_JoystickGUID; typedef Sint32 SDL_JoystickID; int SDL_NumJoysticks(void); const char * SDL_JoystickNameForIndex(int device_index); SDL_Joystick * SDL_JoystickOpen(int device_index); const char * SDL_JoystickName(SDL_Joystick * joystick); SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index); SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick * joystick); void SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); SDL_JoystickGUID SDL_JoystickGetGUIDFromString(const char *pchGUID); SDL_bool SDL_JoystickGetAttached(SDL_Joystick * joystick); SDL_JoystickID SDL_JoystickInstanceID(SDL_Joystick * joystick); int SDL_JoystickNumAxes(SDL_Joystick * joystick); int SDL_JoystickNumBalls(SDL_Joystick * joystick); int SDL_JoystickNumHats(SDL_Joystick * joystick); int SDL_JoystickNumButtons(SDL_Joystick * joystick); void SDL_JoystickUpdate(void); int SDL_JoystickEventState(int state); Sint16 SDL_JoystickGetAxis(SDL_Joystick * joystick, int axis); Uint8 SDL_JoystickGetHat(SDL_Joystick * joystick, int hat); int SDL_JoystickGetBall(SDL_Joystick * joystick, int ball, int *dx, int *dy); Uint8 SDL_JoystickGetButton(SDL_Joystick * joystick, int button); void SDL_JoystickClose(SDL_Joystick * joystick); struct _SDL_GameController; typedef struct _SDL_GameController SDL_GameController; typedef enum { SDL_CONTROLLER_BINDTYPE_NONE = 0, SDL_CONTROLLER_BINDTYPE_BUTTON, SDL_CONTROLLER_BINDTYPE_AXIS, SDL_CONTROLLER_BINDTYPE_HAT } SDL_GameControllerBindType; typedef struct SDL_GameControllerButtonBind { SDL_GameControllerBindType bindType; union { int button; int axis; struct { int hat; int hat_mask; } hat; } value; } SDL_GameControllerButtonBind; int SDL_GameControllerAddMapping( const char* mappingString ); char * SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid ); char * SDL_GameControllerMapping( SDL_GameController * gamecontroller ); SDL_bool SDL_IsGameController(int joystick_index); const char * SDL_GameControllerNameForIndex(int joystick_index); SDL_GameController * SDL_GameControllerOpen(int joystick_index); const char * SDL_GameControllerName(SDL_GameController *gamecontroller); SDL_bool SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); SDL_Joystick * SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); int SDL_GameControllerEventState(int state); void SDL_GameControllerUpdate(void); typedef enum { SDL_CONTROLLER_AXIS_INVALID = -1, SDL_CONTROLLER_AXIS_LEFTX, SDL_CONTROLLER_AXIS_LEFTY, SDL_CONTROLLER_AXIS_RIGHTX, SDL_CONTROLLER_AXIS_RIGHTY, SDL_CONTROLLER_AXIS_TRIGGERLEFT, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, SDL_CONTROLLER_AXIS_MAX } SDL_GameControllerAxis; SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(const char *pchString); const char* SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); Sint16 SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); typedef enum { SDL_CONTROLLER_BUTTON_INVALID = -1, SDL_CONTROLLER_BUTTON_A, SDL_CONTROLLER_BUTTON_B, SDL_CONTROLLER_BUTTON_X, SDL_CONTROLLER_BUTTON_Y, SDL_CONTROLLER_BUTTON_BACK, SDL_CONTROLLER_BUTTON_GUIDE, SDL_CONTROLLER_BUTTON_START, SDL_CONTROLLER_BUTTON_LEFTSTICK, SDL_CONTROLLER_BUTTON_RIGHTSTICK, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, SDL_CONTROLLER_BUTTON_DPAD_UP, SDL_CONTROLLER_BUTTON_DPAD_DOWN, SDL_CONTROLLER_BUTTON_DPAD_LEFT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, SDL_CONTROLLER_BUTTON_MAX } SDL_GameControllerButton; SDL_GameControllerButton SDL_GameControllerGetButtonFromString(const char *pchString); const char* SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); Uint8 SDL_GameControllerGetButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); void SDL_GameControllerClose(SDL_GameController *gamecontroller); typedef Sint64 SDL_TouchID; typedef Sint64 SDL_FingerID; typedef struct SDL_Finger { SDL_FingerID id; float x; float y; float pressure; } SDL_Finger; int SDL_GetNumTouchDevices(void); SDL_TouchID SDL_GetTouchDevice(int index); int SDL_GetNumTouchFingers(SDL_TouchID touchID); SDL_Finger * SDL_GetTouchFinger(SDL_TouchID touchID, int index); typedef Sint64 SDL_GestureID; int SDL_RecordGesture(SDL_TouchID touchId); int SDL_SaveAllDollarTemplates(SDL_RWops *src); int SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *src); int SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); typedef enum { SDL_FIRSTEVENT = 0, SDL_QUIT = 0x100, SDL_APP_TERMINATING, SDL_APP_LOWMEMORY, SDL_APP_WILLENTERBACKGROUND, SDL_APP_DIDENTERBACKGROUND, SDL_APP_WILLENTERFOREGROUND, SDL_APP_DIDENTERFOREGROUND, SDL_WINDOWEVENT = 0x200, SDL_SYSWMEVENT, SDL_KEYDOWN = 0x300, SDL_KEYUP, SDL_TEXTEDITING, SDL_TEXTINPUT, SDL_MOUSEMOTION = 0x400, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_MOUSEWHEEL, SDL_JOYAXISMOTION = 0x600, SDL_JOYBALLMOTION, SDL_JOYHATMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED, SDL_CONTROLLERAXISMOTION = 0x650, SDL_CONTROLLERBUTTONDOWN, SDL_CONTROLLERBUTTONUP, SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, SDL_CONTROLLERDEVICEREMAPPED, SDL_FINGERDOWN = 0x700, SDL_FINGERUP, SDL_FINGERMOTION, SDL_DOLLARGESTURE = 0x800, SDL_DOLLARRECORD, SDL_MULTIGESTURE, SDL_CLIPBOARDUPDATE = 0x900, SDL_DROPFILE = 0x1000, SDL_USEREVENT = 0x8000, SDL_LASTEVENT = 0xFFFF } SDL_EventType; typedef struct SDL_CommonEvent { Uint32 type; Uint32 timestamp; } SDL_CommonEvent; typedef struct SDL_WindowEvent { Uint32 type; Uint32 timestamp; Uint32 windowID; Uint8 event; Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint32 data1; Sint32 data2; } SDL_WindowEvent; typedef struct SDL_KeyboardEvent { Uint32 type; Uint32 timestamp; Uint32 windowID; Uint8 state; Uint8 repeat; Uint8 padding2; Uint8 padding3; SDL_Keysym keysym; } SDL_KeyboardEvent; typedef struct SDL_TextEditingEvent { Uint32 type; Uint32 timestamp; Uint32 windowID; char text[(32)]; Sint32 start; Sint32 length; } SDL_TextEditingEvent; typedef struct SDL_TextInputEvent { Uint32 type; Uint32 timestamp; Uint32 windowID; char text[(32)]; } SDL_TextInputEvent; typedef struct SDL_MouseMotionEvent { Uint32 type; Uint32 timestamp; Uint32 windowID; Uint32 which; Uint32 state; Sint32 x; Sint32 y; Sint32 xrel; Sint32 yrel; } SDL_MouseMotionEvent; typedef struct SDL_MouseButtonEvent { Uint32 type; Uint32 timestamp; Uint32 windowID; Uint32 which; Uint8 button; Uint8 state; Uint8 padding1; Uint8 padding2; Sint32 x; Sint32 y; } SDL_MouseButtonEvent; typedef struct SDL_MouseWheelEvent { Uint32 type; Uint32 timestamp; Uint32 windowID; Uint32 which; Sint32 x; Sint32 y; } SDL_MouseWheelEvent; typedef struct SDL_JoyAxisEvent { Uint32 type; Uint32 timestamp; SDL_JoystickID which; Uint8 axis; Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint16 value; Uint16 padding4; } SDL_JoyAxisEvent; typedef struct SDL_JoyBallEvent { Uint32 type; Uint32 timestamp; SDL_JoystickID which; Uint8 ball; Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint16 xrel; Sint16 yrel; } SDL_JoyBallEvent; typedef struct SDL_JoyHatEvent { Uint32 type; Uint32 timestamp; SDL_JoystickID which; Uint8 hat; Uint8 value; Uint8 padding1; Uint8 padding2; } SDL_JoyHatEvent; typedef struct SDL_JoyButtonEvent { Uint32 type; Uint32 timestamp; SDL_JoystickID which; Uint8 button; Uint8 state; Uint8 padding1; Uint8 padding2; } SDL_JoyButtonEvent; typedef struct SDL_JoyDeviceEvent { Uint32 type; Uint32 timestamp; Sint32 which; } SDL_JoyDeviceEvent; typedef struct SDL_ControllerAxisEvent { Uint32 type; Uint32 timestamp; SDL_JoystickID which; Uint8 axis; Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint16 value; Uint16 padding4; } SDL_ControllerAxisEvent; typedef struct SDL_ControllerButtonEvent { Uint32 type; Uint32 timestamp; SDL_JoystickID which; Uint8 button; Uint8 state; Uint8 padding1; Uint8 padding2; } SDL_ControllerButtonEvent; typedef struct SDL_ControllerDeviceEvent { Uint32 type; Uint32 timestamp; Sint32 which; } SDL_ControllerDeviceEvent; typedef struct SDL_TouchFingerEvent { Uint32 type; Uint32 timestamp; SDL_TouchID touchId; SDL_FingerID fingerId; float x; float y; float dx; float dy; float pressure; } SDL_TouchFingerEvent; typedef struct SDL_MultiGestureEvent { Uint32 type; Uint32 timestamp; SDL_TouchID touchId; float dTheta; float dDist; float x; float y; Uint16 numFingers; Uint16 padding; } SDL_MultiGestureEvent; typedef struct SDL_DollarGestureEvent { Uint32 type; Uint32 timestamp; SDL_TouchID touchId; SDL_GestureID gestureId; Uint32 numFingers; float error; float x; float y; } SDL_DollarGestureEvent; typedef struct SDL_DropEvent { Uint32 type; Uint32 timestamp; char *file; } SDL_DropEvent; typedef struct SDL_QuitEvent { Uint32 type; Uint32 timestamp; } SDL_QuitEvent; typedef struct SDL_OSEvent { Uint32 type; Uint32 timestamp; } SDL_OSEvent; typedef struct SDL_UserEvent { Uint32 type; Uint32 timestamp; Uint32 windowID; Sint32 code; void *data1; void *data2; } SDL_UserEvent; struct SDL_SysWMmsg; typedef struct SDL_SysWMmsg SDL_SysWMmsg; typedef struct SDL_SysWMEvent { Uint32 type; Uint32 timestamp; SDL_SysWMmsg *msg; } SDL_SysWMEvent; typedef union SDL_Event { Uint32 type; SDL_CommonEvent common; SDL_WindowEvent window; SDL_KeyboardEvent key; SDL_TextEditingEvent edit; SDL_TextInputEvent text; SDL_MouseMotionEvent motion; SDL_MouseButtonEvent button; SDL_MouseWheelEvent wheel; SDL_JoyAxisEvent jaxis; SDL_JoyBallEvent jball; SDL_JoyHatEvent jhat; SDL_JoyButtonEvent jbutton; SDL_JoyDeviceEvent jdevice; SDL_ControllerAxisEvent caxis; SDL_ControllerButtonEvent cbutton; SDL_ControllerDeviceEvent cdevice; SDL_QuitEvent quit; SDL_UserEvent user; SDL_SysWMEvent syswm; SDL_TouchFingerEvent tfinger; SDL_MultiGestureEvent mgesture; SDL_DollarGestureEvent dgesture; SDL_DropEvent drop; Uint8 padding[56]; } SDL_Event; void SDL_PumpEvents(void); typedef enum { SDL_ADDEVENT, SDL_PEEKEVENT, SDL_GETEVENT } SDL_eventaction; int SDL_PeepEvents(SDL_Event * events, int numevents, SDL_eventaction action, Uint32 minType, Uint32 maxType); SDL_bool SDL_HasEvent(Uint32 type); SDL_bool SDL_HasEvents(Uint32 minType, Uint32 maxType); void SDL_FlushEvent(Uint32 type); void SDL_FlushEvents(Uint32 minType, Uint32 maxType); int SDL_PollEvent(SDL_Event * event); int SDL_WaitEvent(SDL_Event * event); int SDL_WaitEventTimeout(SDL_Event * event, int timeout); int SDL_PushEvent(SDL_Event * event); typedef int ( * SDL_EventFilter) (void *userdata, SDL_Event * event); void SDL_SetEventFilter(SDL_EventFilter filter, void *userdata); SDL_bool SDL_GetEventFilter(SDL_EventFilter * filter, void **userdata); void SDL_AddEventWatch(SDL_EventFilter filter, void *userdata); void SDL_DelEventWatch(SDL_EventFilter filter, void *userdata); void SDL_FilterEvents(SDL_EventFilter filter, void *userdata); Uint8 SDL_EventState(Uint32 type, int state); Uint32 SDL_RegisterEvents(int numevents); struct _SDL_Haptic; typedef struct _SDL_Haptic SDL_Haptic; typedef struct SDL_HapticDirection { Uint8 type; Sint32 dir[3]; } SDL_HapticDirection; typedef struct SDL_HapticConstant { Uint16 type; SDL_HapticDirection direction; Uint32 length; Uint16 delay; Uint16 button; Uint16 interval; Sint16 level; Uint16 attack_length; Uint16 attack_level; Uint16 fade_length; Uint16 fade_level; } SDL_HapticConstant; typedef struct SDL_HapticPeriodic { Uint16 type; SDL_HapticDirection direction; Uint32 length; Uint16 delay; Uint16 button; Uint16 interval; Uint16 period; Sint16 magnitude; Sint16 offset; Uint16 phase; Uint16 attack_length; Uint16 attack_level; Uint16 fade_length; Uint16 fade_level; } SDL_HapticPeriodic; typedef struct SDL_HapticCondition { Uint16 type; SDL_HapticDirection direction; Uint32 length; Uint16 delay; Uint16 button; Uint16 interval; Uint16 right_sat[3]; Uint16 left_sat[3]; Sint16 right_coeff[3]; Sint16 left_coeff[3]; Uint16 deadband[3]; Sint16 center[3]; } SDL_HapticCondition; typedef struct SDL_HapticRamp { Uint16 type; SDL_HapticDirection direction; Uint32 length; Uint16 delay; Uint16 button; Uint16 interval; Sint16 start; Sint16 end; Uint16 attack_length; Uint16 attack_level; Uint16 fade_length; Uint16 fade_level; } SDL_HapticRamp; typedef struct SDL_HapticLeftRight { Uint16 type; Uint32 length; Uint16 large_magnitude; Uint16 small_magnitude; } SDL_HapticLeftRight; typedef struct SDL_HapticCustom { Uint16 type; SDL_HapticDirection direction; Uint32 length; Uint16 delay; Uint16 button; Uint16 interval; Uint8 channels; Uint16 period; Uint16 samples; Uint16 *data; Uint16 attack_length; Uint16 attack_level; Uint16 fade_length; Uint16 fade_level; } SDL_HapticCustom; typedef union SDL_HapticEffect { Uint16 type; SDL_HapticConstant constant; SDL_HapticPeriodic periodic; SDL_HapticCondition condition; SDL_HapticRamp ramp; SDL_HapticLeftRight leftright; SDL_HapticCustom custom; } SDL_HapticEffect; int SDL_NumHaptics(void); const char * SDL_HapticName(int device_index); SDL_Haptic * SDL_HapticOpen(int device_index); int SDL_HapticOpened(int device_index); int SDL_HapticIndex(SDL_Haptic * haptic); int SDL_MouseIsHaptic(void); SDL_Haptic * SDL_HapticOpenFromMouse(void); int SDL_JoystickIsHaptic(SDL_Joystick * joystick); SDL_Haptic * SDL_HapticOpenFromJoystick(SDL_Joystick * joystick); void SDL_HapticClose(SDL_Haptic * haptic); int SDL_HapticNumEffects(SDL_Haptic * haptic); int SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); unsigned int SDL_HapticQuery(SDL_Haptic * haptic); int SDL_HapticNumAxes(SDL_Haptic * haptic); int SDL_HapticEffectSupported(SDL_Haptic * haptic, SDL_HapticEffect * effect); int SDL_HapticNewEffect(SDL_Haptic * haptic, SDL_HapticEffect * effect); int SDL_HapticUpdateEffect(SDL_Haptic * haptic, int effect, SDL_HapticEffect * data); int SDL_HapticRunEffect(SDL_Haptic * haptic, int effect, Uint32 iterations); int SDL_HapticStopEffect(SDL_Haptic * haptic, int effect); void SDL_HapticDestroyEffect(SDL_Haptic * haptic, int effect); int SDL_HapticGetEffectStatus(SDL_Haptic * haptic, int effect); int SDL_HapticSetGain(SDL_Haptic * haptic, int gain); int SDL_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter); int SDL_HapticPause(SDL_Haptic * haptic); int SDL_HapticUnpause(SDL_Haptic * haptic); int SDL_HapticStopAll(SDL_Haptic * haptic); int SDL_HapticRumbleSupported(SDL_Haptic * haptic); int SDL_HapticRumbleInit(SDL_Haptic * haptic); int SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); int SDL_HapticRumbleStop(SDL_Haptic * haptic); typedef enum { SDL_HINT_DEFAULT, SDL_HINT_NORMAL, SDL_HINT_OVERRIDE } SDL_HintPriority; SDL_bool SDL_SetHintWithPriority(const char *name, const char *value, SDL_HintPriority priority); SDL_bool SDL_SetHint(const char *name, const char *value); const char * SDL_GetHint(const char *name); typedef void (*SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); void SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata); void SDL_DelHintCallback(const char *name, SDL_HintCallback callback, void *userdata); void SDL_ClearHints(void); void * SDL_LoadObject(const char *sofile); void * SDL_LoadFunction(void *handle, const char *name); void SDL_UnloadObject(void *handle); enum { SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_CATEGORY_ERROR, SDL_LOG_CATEGORY_ASSERT, SDL_LOG_CATEGORY_SYSTEM, SDL_LOG_CATEGORY_AUDIO, SDL_LOG_CATEGORY_VIDEO, SDL_LOG_CATEGORY_RENDER, SDL_LOG_CATEGORY_INPUT, SDL_LOG_CATEGORY_TEST, SDL_LOG_CATEGORY_RESERVED1, SDL_LOG_CATEGORY_RESERVED2, SDL_LOG_CATEGORY_RESERVED3, SDL_LOG_CATEGORY_RESERVED4, SDL_LOG_CATEGORY_RESERVED5, SDL_LOG_CATEGORY_RESERVED6, SDL_LOG_CATEGORY_RESERVED7, SDL_LOG_CATEGORY_RESERVED8, SDL_LOG_CATEGORY_RESERVED9, SDL_LOG_CATEGORY_RESERVED10, SDL_LOG_CATEGORY_CUSTOM }; typedef enum { SDL_LOG_PRIORITY_VERBOSE = 1, SDL_LOG_PRIORITY_DEBUG, SDL_LOG_PRIORITY_INFO, SDL_LOG_PRIORITY_WARN, SDL_LOG_PRIORITY_ERROR, SDL_LOG_PRIORITY_CRITICAL, SDL_NUM_LOG_PRIORITIES } SDL_LogPriority; void SDL_LogSetAllPriority(SDL_LogPriority priority); void SDL_LogSetPriority(int category, SDL_LogPriority priority); SDL_LogPriority SDL_LogGetPriority(int category); void SDL_LogResetPriorities(void); void SDL_Log(const char *fmt, ...); void SDL_LogVerbose(int category, const char *fmt, ...); void SDL_LogDebug(int category, const char *fmt, ...); void SDL_LogInfo(int category, const char *fmt, ...); void SDL_LogWarn(int category, const char *fmt, ...); void SDL_LogError(int category, const char *fmt, ...); void SDL_LogCritical(int category, const char *fmt, ...); void SDL_LogMessage(int category, SDL_LogPriority priority, const char *fmt, ...); void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap); typedef void (*SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); void SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); void SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); typedef enum { SDL_MESSAGEBOX_ERROR = 0x00000010, SDL_MESSAGEBOX_WARNING = 0x00000020, SDL_MESSAGEBOX_INFORMATION = 0x00000040 } SDL_MessageBoxFlags; typedef enum { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 } SDL_MessageBoxButtonFlags; typedef struct { Uint32 flags; int buttonid; const char * text; } SDL_MessageBoxButtonData; typedef struct { Uint8 r, g, b; } SDL_MessageBoxColor; typedef enum { SDL_MESSAGEBOX_COLOR_BACKGROUND, SDL_MESSAGEBOX_COLOR_TEXT, SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, SDL_MESSAGEBOX_COLOR_MAX } SDL_MessageBoxColorType; typedef struct { SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; } SDL_MessageBoxColorScheme; typedef struct { Uint32 flags; SDL_Window *window; const char *title; const char *message; int numbuttons; const SDL_MessageBoxButtonData *buttons; const SDL_MessageBoxColorScheme *colorScheme; } SDL_MessageBoxData; int SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); int SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); typedef enum { SDL_POWERSTATE_UNKNOWN, SDL_POWERSTATE_ON_BATTERY, SDL_POWERSTATE_NO_BATTERY, SDL_POWERSTATE_CHARGING, SDL_POWERSTATE_CHARGED } SDL_PowerState; SDL_PowerState SDL_GetPowerInfo(int *secs, int *pct); typedef enum { SDL_RENDERER_SOFTWARE = 0x00000001, SDL_RENDERER_ACCELERATED = 0x00000002, SDL_RENDERER_PRESENTVSYNC = 0x00000004, SDL_RENDERER_TARGETTEXTURE = 0x00000008 } SDL_RendererFlags; typedef struct SDL_RendererInfo { const char *name; Uint32 flags; Uint32 num_texture_formats; Uint32 texture_formats[16]; int max_texture_width; int max_texture_height; } SDL_RendererInfo; typedef enum { SDL_TEXTUREACCESS_STATIC, SDL_TEXTUREACCESS_STREAMING, SDL_TEXTUREACCESS_TARGET } SDL_TextureAccess; typedef enum { SDL_TEXTUREMODULATE_NONE = 0x00000000, SDL_TEXTUREMODULATE_COLOR = 0x00000001, SDL_TEXTUREMODULATE_ALPHA = 0x00000002 } SDL_TextureModulate; typedef enum { SDL_FLIP_NONE = 0x00000000, SDL_FLIP_HORIZONTAL = 0x00000001, SDL_FLIP_VERTICAL = 0x00000002 } SDL_RendererFlip; struct SDL_Renderer; typedef struct SDL_Renderer SDL_Renderer; struct SDL_Texture; typedef struct SDL_Texture SDL_Texture; int SDL_GetNumRenderDrivers(void); int SDL_GetRenderDriverInfo(int index, SDL_RendererInfo * info); int SDL_CreateWindowAndRenderer( int width, int height, Uint32 window_flags, SDL_Window **window, SDL_Renderer **renderer); SDL_Renderer * SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags); SDL_Renderer * SDL_CreateSoftwareRenderer(SDL_Surface * surface); SDL_Renderer * SDL_GetRenderer(SDL_Window * window); int SDL_GetRendererInfo(SDL_Renderer * renderer, SDL_RendererInfo * info); int SDL_GetRendererOutputSize(SDL_Renderer * renderer, int *w, int *h); SDL_Texture * SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int h); SDL_Texture * SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); int SDL_QueryTexture(SDL_Texture * texture, Uint32 * format, int *access, int *w, int *h); int SDL_SetTextureColorMod(SDL_Texture * texture, Uint8 r, Uint8 g, Uint8 b); int SDL_GetTextureColorMod(SDL_Texture * texture, Uint8 * r, Uint8 * g, Uint8 * b); int SDL_SetTextureAlphaMod(SDL_Texture * texture, Uint8 alpha); int SDL_GetTextureAlphaMod(SDL_Texture * texture, Uint8 * alpha); int SDL_SetTextureBlendMode(SDL_Texture * texture, SDL_BlendMode blendMode); int SDL_GetTextureBlendMode(SDL_Texture * texture, SDL_BlendMode *blendMode); int SDL_UpdateTexture(SDL_Texture * texture, const SDL_Rect * rect, const void *pixels, int pitch); int SDL_LockTexture(SDL_Texture * texture, const SDL_Rect * rect, void **pixels, int *pitch); void SDL_UnlockTexture(SDL_Texture * texture); SDL_bool SDL_RenderTargetSupported(SDL_Renderer *renderer); int SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture); SDL_Texture * SDL_GetRenderTarget(SDL_Renderer *renderer); int SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); void SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); int SDL_RenderSetViewport(SDL_Renderer * renderer, const SDL_Rect * rect); void SDL_RenderGetViewport(SDL_Renderer * renderer, SDL_Rect * rect); int SDL_RenderSetClipRect(SDL_Renderer * renderer, const SDL_Rect * rect); void SDL_RenderGetClipRect(SDL_Renderer * renderer, SDL_Rect * rect); int SDL_RenderSetScale(SDL_Renderer * renderer, float scaleX, float scaleY); void SDL_RenderGetScale(SDL_Renderer * renderer, float *scaleX, float *scaleY); int SDL_SetRenderDrawColor(SDL_Renderer * renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a); int SDL_GetRenderDrawColor(SDL_Renderer * renderer, Uint8 * r, Uint8 * g, Uint8 * b, Uint8 * a); int SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, SDL_BlendMode blendMode); int SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, SDL_BlendMode *blendMode); int SDL_RenderClear(SDL_Renderer * renderer); int SDL_RenderDrawPoint(SDL_Renderer * renderer, int x, int y); int SDL_RenderDrawPoints(SDL_Renderer * renderer, const SDL_Point * points, int count); int SDL_RenderDrawLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2); int SDL_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points, int count); int SDL_RenderDrawRect(SDL_Renderer * renderer, const SDL_Rect * rect); int SDL_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect * rects, int count); int SDL_RenderFillRect(SDL_Renderer * renderer, const SDL_Rect * rect); int SDL_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect * rects, int count); int SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, const SDL_Rect * dstrect); int SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, const SDL_Rect * dstrect, const double angle, const SDL_Point *center, const SDL_RendererFlip flip); int SDL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, Uint32 format, void *pixels, int pitch); void SDL_RenderPresent(SDL_Renderer * renderer); void SDL_DestroyTexture(SDL_Texture * texture); void SDL_DestroyRenderer(SDL_Renderer * renderer); int SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); int SDL_GL_UnbindTexture(SDL_Texture *texture); Uint32 SDL_GetTicks(void); Uint64 SDL_GetPerformanceCounter(void); Uint64 SDL_GetPerformanceFrequency(void); void SDL_Delay(Uint32 ms); typedef Uint32 ( * SDL_TimerCallback) (Uint32 interval, void *param); typedef int SDL_TimerID; SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void *param); SDL_bool SDL_RemoveTimer(SDL_TimerID id); typedef struct SDL_version { Uint8 major; Uint8 minor; Uint8 patch; } SDL_version; void SDL_GetVersion(SDL_version * ver); const char * SDL_GetRevision(void); int SDL_GetRevisionNumber(void); int SDL_Init(Uint32 flags); int SDL_InitSubSystem(Uint32 flags); void SDL_QuitSubSystem(Uint32 flags); Uint32 SDL_WasInit(Uint32 flags); void SDL_Quit(void); ]] -- sdl ffi.cdef[[ enum { SDL_INIT_TIMER = 0x00000001, SDL_INIT_AUDIO = 0x00000010, SDL_INIT_VIDEO = 0x00000020, SDL_INIT_JOYSTICK = 0x00000200, SDL_INIT_HAPTIC = 0x00001000, SDL_INIT_GAMECONTROLLER = 0x00002000, SDL_INIT_EVENTS = 0x00004000, SDL_INIT_NOPARACHUTE = 0x00100000, SDL_INIT_EVERYTHING = ( \ SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \ ) }; ]] -- audio ffi.cdef[[ enum { SDL_AUDIO_MASK_BITSIZE = (0xFF), SDL_AUDIO_MASK_DATATYPE = (1<<8), SDL_AUDIO_MASK_ENDIAN = (1<<12), SDL_AUDIO_MASK_SIGNED = (1<<15) }; enum { SDL_AUDIO_U8 = 0x0008, SDL_AUDIO_S8 = 0x8008, SDL_AUDIO_U16LSB = 0x0010, SDL_AUDIO_S16LSB = 0x8010, SDL_AUDIO_U16MSB = 0x1010, SDL_AUDIO_S16MSB = 0x9010, SDL_AUDIO_U16 = SDL_AUDIO_U16LSB, SDL_AUDIO_S16 = SDL_AUDIO_S16LSB, SDL_AUDIO_S32LSB = 0x8020, SDL_AUDIO_S32MSB = 0x9020, SDL_AUDIO_S32 = SDL_AUDIO_S32LSB, SDL_AUDIO_F32LSB = 0x8120, SDL_AUDIO_F32MSB = 0x9120, SDL_AUDIO_F32 = SDL_AUDIO_F32LSB }; enum { SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = 0x00000001, SDL_AUDIO_ALLOW_FORMAT_CHANGE = 0x00000002, SDL_AUDIO_ALLOW_CHANNELS_CHANGE = 0x00000004, SDL_AUDIO_ALLOW_ANY_CHANGE = (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE), SDL_MIX_MAXVOLUME = 128 }; ]] -- events ffi.cdef[[ enum { SDL_RELEASED = 0, SDL_PRESSED = 1, SDL_QUERY = -1, SDL_IGNORE = 0, SDL_DISABLE = 0, SDL_ENABLE = 1 }; ]] -- haptic ffi.cdef[[ enum { SDL_HAPTIC_CONSTANT = (1<<0), SDL_HAPTIC_SINE = (1<<1), SDL_HAPTIC_LEFTRIGHT = (1<<2), SDL_HAPTIC_TRIANGLE = (1<<3), SDL_HAPTIC_SAWTOOTHUP = (1<<4), SDL_HAPTIC_SAWTOOTHDOWN = (1<<5), SDL_HAPTIC_RAMP = (1<<6), SDL_HAPTIC_SPRING = (1<<7), SDL_HAPTIC_DAMPER = (1<<8), SDL_HAPTIC_INERTIA = (1<<9), SDL_HAPTIC_FRICTION = (1<<10), SDL_HAPTIC_CUSTOM = (1<<11), SDL_HAPTIC_GAIN = (1<<12), SDL_HAPTIC_AUTOCENTER = (1<<13), SDL_HAPTIC_STATUS = (1<<14), SDL_HAPTIC_PAUSE = (1<<15), SDL_HAPTIC_POLAR = 0, SDL_HAPTIC_CARTESIAN = 1, SDL_HAPTIC_SPHERICAL = 2, SDL_HAPTIC_INFINITY = 4294967295U }; ]] -- joystick ffi.cdef[[ enum { SDL_HAT_CENTERED = 0x00, SDL_HAT_UP = 0x01, SDL_HAT_RIGHT = 0x02, SDL_HAT_DOWN = 0x04, SDL_HAT_LEFT = 0x08, SDL_HAT_RIGHTUP = (SDL_HAT_RIGHT|SDL_HAT_UP), SDL_HAT_RIGHTDOWN = (SDL_HAT_RIGHT|SDL_HAT_DOWN), SDL_HAT_LEFTUP = (SDL_HAT_LEFT|SDL_HAT_UP), SDL_HAT_LEFTDOWN = (SDL_HAT_LEFT|SDL_HAT_DOWN) }; ]] -- keycode ffi.cdef[[ enum { SDL_SCANCODE_MASK = (1<<30), SDL_KMOD_CTRL = (SDL_KMOD_LCTRL|SDL_KMOD_RCTRL), SDL_KMOD_SHIFT = (SDL_KMOD_LSHIFT|SDL_KMOD_RSHIFT), SDL_KMOD_ALT = (SDL_KMOD_LALT|SDL_KMOD_RALT), SDL_KMOD_GUI = (SDL_KMOD_LGUI|SDL_KMOD_RGUI) }; ]] -- main if jit.os == 'Windows' then ffi.cdef[[ int SDL_RegisterApp(char *name, Uint32 style, void *hInst); void SDL_UnregisterApp(void); ]] end -- mouse ffi.cdef[[ enum { SDL_BUTTON_LEFT = 1, SDL_BUTTON_MIDDLE = 2, SDL_BUTTON_RIGHT = 3, SDL_BUTTON_X1 = 4, SDL_BUTTON_X2 = 5, SDL_BUTTON_LMASK = 1 << (SDL_BUTTON_LEFT-1), SDL_BUTTON_MMASK = 1 << (SDL_BUTTON_MIDDLE-1), SDL_BUTTON_RMASK = 1 << (SDL_BUTTON_RIGHT-1), SDL_BUTTON_X1MASK = 1 << (SDL_BUTTON_X1-1), SDL_BUTTON_X2MASK = 1 << (SDL_BUTTON_X2-1), }; ]] -- mutex ffi.cdef[[ enum { SDL_MUTEX_TIMEDOUT = 1, SDL_MUTEX_MAXWAIT = (~(Uint32)0) }; ]] -- pixels ffi.cdef[[ enum { SDL_ALPHA_OPAQUE = 255, SDL_ALPHA_TRANSPARENT = 0 }; ]] -- rwops ffi.cdef[[ enum { SDL_RWOPS_UNKNOWN = 0, SDL_RWOPS_WINFILE = 1, SDL_RWOPS_STDFILE = 2, SDL_RWOPS_JNIFILE = 3, SDL_RWOPS_MEMORY = 4, SDL_RWOPS_MEMORY_RO = 5 }; ]] -- shape ffi.cdef[[ enum { SDL_NONSHAPEABLE_WINDOW = -1, SDL_INVALID_SHAPE_ARGUMENT = -2, SDL_WINDOW_LACKS_SHAPE = -3 }; ]] -- surface ffi.cdef[[ enum { SDL_SWSURFACE = 0, SDL_PREALLOC = 0x00000001, SDL_RLEACCEL = 0x00000002, SDL_DONTFREE = 0x00000004 }; ]] -- video ffi.cdef[[ enum { SDL_WINDOWPOS_CENTERED_MASK = 0x2FFF0000, SDL_WINDOWPOS_CENTERED = 0x2FFF0000 }; ]]