diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-28 10:15:55 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-28 10:15:55 +0200 |
| commit | 97a1983c59152372dfdcd4ef5277d91382b6ade3 (patch) | |
| tree | 1e7c027d9cac6a38173bed433830883f16c9ebe4 /src | |
| parent | 42e60bc7c52d49805a74d19745574e28d76ab46f (diff) | |
| download | box64-97a1983c59152372dfdcd4ef5277d91382b6ade3.tar.gz box64-97a1983c59152372dfdcd4ef5277d91382b6ade3.zip | |
[BOX32][WRAPPER] Added a bunch of 32bits functions to SDL2 and libc
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/sdl2align32.h | 2 | ||||
| -rw-r--r-- | src/libtools/sdl2align32.c | 110 | ||||
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 25 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibctypes32.h | 2 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedsdl2defs32.h | 2 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedsdl2types32.h | 15 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedsdl2undefs32.h | 2 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.c | 10 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.h | 5 | ||||
| -rwxr-xr-x | src/wrapped32/wrappedlibc.c | 30 | ||||
| -rwxr-xr-x | src/wrapped32/wrappedlibc_private.h | 32 | ||||
| -rw-r--r-- | src/wrapped32/wrappedsdl2.c | 117 | ||||
| -rw-r--r-- | src/wrapped32/wrappedsdl2_private.h | 126 |
13 files changed, 375 insertions, 103 deletions
diff --git a/src/include/sdl2align32.h b/src/include/sdl2align32.h index 4e0e97b5..6cca070b 100644 --- a/src/include/sdl2align32.h +++ b/src/include/sdl2align32.h @@ -880,8 +880,10 @@ typedef struct __attribute__((packed)) my_SDL2_RWops_32_s { void inplace_SDL2_DisplayMode_to_64(void* a); void inplace_SDL2_DisplayMode_to_32(void* a); +void convert_SDL2_DisplayMode_to_64(void* dst_, void* src_); void convert_SDL2_DisplayMode_to_32(void* dst_, void* src_); +void convert_SDL2_Event_to_64(void* dst_, const void* src_); void convert_SDL2_Event_to_32(void* dst_, const void* src_); void inplace_SDL2_Palette_to_32(void* a); diff --git a/src/libtools/sdl2align32.c b/src/libtools/sdl2align32.c index dbef7722..7c417869 100644 --- a/src/libtools/sdl2align32.c +++ b/src/libtools/sdl2align32.c @@ -43,6 +43,116 @@ void convert_SDL2_DisplayMode_to_32(void* dst_, void* src_) dst->driverdata = to_ptrv(src->driverdata); } +void convert_SDL2_DisplayMode_to_64(void* dst_, void* src_) +{ + if (!src_ || !dst_) return; + my_SDL2_DisplayMode_32_t* src = src_; + my_SDL2_DisplayMode_t* dst = dst_; + dst->format = src->format; + dst->w = src->w; + dst->h = src->h; + dst->refresh_rate = src->refresh_rate; + dst->driverdata = from_ptrv(src->driverdata); +} + +void convert_SDL2_Event_to_64(void* dst_, const void* src_) +{ + if (!src_ || !dst_) return; + const my_SDL2_Event_32_t* src = src_; + my_SDL2_Event_t* dst = dst_; + dst->type = src->type; + switch (src->type) { + case SDL2_WINDOWEVENT: + dst->window.type = src->window.type; + dst->window.timestamp = src->window.timestamp; + dst->window.windowID = src->window.windowID; + dst->window.event = src->window.event; + dst->window.padding1 = src->window.padding1; + dst->window.padding2 = src->window.padding2; + dst->window.padding3 = src->window.padding3; + dst->window.data1 = src->window.data1; + dst->window.data2 = src->window.data2; + break; + case SDL2_MOUSEMOTION: + dst->motion.type = src->motion.type; + dst->motion.timestamp = src->motion.timestamp; + dst->motion.windowID = src->motion.windowID; + dst->motion.which = src->motion.which; + dst->motion.state = src->motion.state; + dst->motion.x = src->motion.x; + dst->motion.y = src->motion.y; + dst->motion.xrel = src->motion.xrel; + dst->motion.yrel = src->motion.yrel; + break; + case SDL2_MOUSEBUTTONDOWN: + case SDL2_MOUSEBUTTONUP: + dst->button.type = src->button.type; + dst->button.timestamp = src->button.timestamp; + dst->button.windowID = src->button.windowID; + dst->button.which = src->button.which; + dst->button.button = src->button.button; + dst->button.state = src->button.state; + dst->button.clicks = src->button.clicks; + dst->button.padding1 = src->button.padding1; + dst->button.x = src->button.x; + dst->button.y = src->button.y; + break; + case SDL2_AUDIODEVICEADDED: + case SDL2_AUDIODEVICEREMOVED: + dst->adevice.type = src->adevice.type; + dst->adevice.timestamp = src->adevice.timestamp; + dst->adevice.which = src->adevice.which; + dst->adevice.iscapture = src->adevice.iscapture; + dst->adevice.padding1 = src->adevice.padding1; + dst->adevice.padding2 = src->adevice.padding2; + dst->adevice.padding3 = src->adevice.padding3; + break; + case SDL2_KEYDOWN: + case SDL2_KEYUP: + dst->key.type = src->key.type; + dst->key.timestamp = src->key.timestamp; + dst->key.windowID = src->key.windowID; + dst->key.state = src->key.state; + dst->key.repeat = src->key.repeat; + dst->key.padding2 = src->key.padding2; + dst->key.padding3 = src->key.padding3; + dst->key.keysym.scancode = src->key.keysym.scancode; + dst->key.keysym.sym = src->key.keysym.sym; + dst->key.keysym.mod = src->key.keysym.mod; + dst->key.keysym.unused = src->key.keysym.unused; + break; + case SDL2_TEXTEDITING: + dst->edit.type = src->edit.type; + dst->edit.timestamp = src->edit.timestamp; + dst->edit.windowID = src->edit.windowID; + memcpy(dst->edit.text, src->edit.text, 32); + dst->edit.start = src->edit.start; + dst->edit.length = src->edit.length; + break; + case SDL2_TEXTINPUT: + dst->text.type = src->text.type; + dst->text.timestamp = src->text.timestamp; + dst->text.windowID = src->text.windowID; + memcpy(dst->text.text, src->text.text, 32); + break; + case SDL2_MOUSEWHEEL: + dst->wheel.type = src->wheel.type; + dst->wheel.timestamp = src->wheel.timestamp; + dst->wheel.windowID = src->wheel.windowID; + dst->wheel.which = src->wheel.which; + dst->wheel.x = src->wheel.x; + dst->wheel.y = src->wheel.y; + dst->wheel.direction = src->wheel.direction; + dst->wheel.preciseX = src->wheel.preciseX; + dst->wheel.preciseY = src->wheel.preciseY; + dst->wheel.mouseX = src->wheel.mouseX; + dst->wheel.mouseY = src->wheel.mouseY; + break; + default: + printf_log(LOG_INFO, "Warning, unsuported SDL2 event %d\n", src->type); + memcpy(dst, src, sizeof(my_SDL2_Event_32_t)); + } +} void convert_SDL2_Event_to_32(void* dst_, const void* src_) { if (!src_ || !dst_) return; diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt index de40c7fd..f43b5f14 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -62,6 +62,7 @@ #() pFv -> pFv #() pFi -> pFi #() pFu -> pFu +#() pFl -> pFl #() pFL -> pFL #() pFp -> pFp #() pFX -> pFX @@ -327,6 +328,7 @@ #() iFpuC -> iFpuC #() iFpuu -> iFpuu #() iFpuU -> iFpuU +#() iFpfu -> iFpfu #() iFpLi -> iFpLi #() iFpLp -> iFpLp #() iFppi -> iFppi @@ -501,6 +503,7 @@ #() vFupii -> vFupii #() vFuppi -> vFuppi #() vFuppu -> vFuppu +#() vFUUpi -> vFUUpi #() vFffff -> vFffff #() vFdddd -> vFdddd #() vFllii -> vFllii @@ -888,6 +891,7 @@ #() vFlliiiip -> vFlliiiip #() vFpipipiu -> vFpipipiu #() vFpddiidd -> vFpddiidd +#() iFEpuiupV -> iFEpuiupV #() iFEpLiipV -> iFEpLiipV #() iFEXLpppp -> iFEXLpppp #() iFuiiiuup -> iFuiiiuup @@ -927,6 +931,7 @@ #() vFuuufffff -> vFuuufffff #() vFffffffff -> vFffffffff #() iFEpippppp -> iFEpippppp +#() iFEpLiLppp -> iFEpLiLppp #() iFuiiiiuup -> iFuiiiiuup #() iFXpIIIppp -> iFXpIIIppp #() CFuiifpppp -> CFuiifpppp @@ -1216,11 +1221,13 @@ wrappedlibc: - getpwnam_r - pFpLLiN: - pFppLLp: +- iFpuiupV: - iFpLvvpp: - iFpLiipV: - pFpLiiii: - pFpLiiiI: - iFpippppp: +- iFpLiLppp: - pFiiiiiiiiilt: - asctime wrappedlibdl: @@ -1598,27 +1605,42 @@ wrappedsdl1: - iFpWCiWCi: - SDL_BuildAudioCVT wrappedsdl2: -% G SDL_JoystickGUID UU +% J SDL2_GUID_t uuuu - vFp: - SDL_FreeSurface - iFp: - SDL_PollEvent + - SDL_PushEvent - pFv: - SDL_GetBasePath - pFp: - SDL_GL_GetProcAddress +- JFi: + - SDL_JoystickGetDeviceGUID - vFpp: + - SDL_AddEventWatch + - SDL_DelEventWatch - SDL_SetWindowIcon - vFpV: - SDL_Log - iFip: + - SDL_GetCurrentDisplayMode - SDL_GetDesktopDisplayMode +- iFpi: + - SDL_WaitEventTimeout - iFpp: + - SDL_GetWindowDisplayMode - SDL_OpenAudio + - SDL_SetWindowDisplayMode +- pFpi: + - SDL_LoadBMP_RW + - SDL_notreal - pFpp: - SDL_RWFromFile - iFppV: - SDL_sscanf +- pFpii: + - SDL_CreateColorCursor - pFppp: - SDL_CreateThread - iFpLpp: @@ -1629,3 +1651,4 @@ wrappedsdl2: - SDL_OpenAudioDevice - pFpiiiiu: - SDL_CreateRGBSurfaceWithFormatFrom +% JFEi -> pFEpi diff --git a/src/wrapped32/generated/wrappedlibctypes32.h b/src/wrapped32/generated/wrappedlibctypes32.h index 5e517840..2c18f2a7 100644 --- a/src/wrapped32/generated/wrappedlibctypes32.h +++ b/src/wrapped32/generated/wrappedlibctypes32.h @@ -91,11 +91,13 @@ typedef int32_t (*iFpiLpp_t)(void*, int32_t, uintptr_t, void*, void*); typedef int32_t (*iFpppup_t)(void*, void*, void*, uint32_t, void*); typedef void* (*pFpLLiN_t)(void*, uintptr_t, uintptr_t, int32_t, ...); typedef void* (*pFppLLp_t)(void*, void*, uintptr_t, uintptr_t, void*); +typedef int32_t (*iFpuiupV_t)(void*, uint32_t, int32_t, uint32_t, void*, ...); typedef int32_t (*iFpLvvpp_t)(void*, uintptr_t, void, void, void*, void*); typedef int32_t (*iFpLiipV_t)(void*, uintptr_t, int32_t, int32_t, void*, ...); typedef void* (*pFpLiiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t); typedef void* (*pFpLiiiI_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); typedef int32_t (*iFpippppp_t)(void*, int32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFpLiLppp_t)(void*, uintptr_t, int32_t, uintptr_t, void*, void*, void*); typedef void* (*pFiiiiiiiiilt_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, char*); #define SUPER() ADDED_FUNCTIONS() \ diff --git a/src/wrapped32/generated/wrappedsdl2defs32.h b/src/wrapped32/generated/wrappedsdl2defs32.h index 239a09b9..b0899840 100644 --- a/src/wrapped32/generated/wrappedsdl2defs32.h +++ b/src/wrapped32/generated/wrappedsdl2defs32.h @@ -4,5 +4,7 @@ #ifndef __wrappedsdl2DEFS32_H_ #define __wrappedsdl2DEFS32_H_ +#define JFEi pFEpi +#define JFEi_32 pFEpi_32 #endif // __wrappedsdl2DEFS32_H_ diff --git a/src/wrapped32/generated/wrappedsdl2types32.h b/src/wrapped32/generated/wrappedsdl2types32.h index ec19e213..badbbc81 100644 --- a/src/wrapped32/generated/wrappedsdl2types32.h +++ b/src/wrapped32/generated/wrappedsdl2types32.h @@ -15,12 +15,16 @@ typedef void (*vFp_t)(void*); typedef int32_t (*iFp_t)(void*); typedef void* (*pFv_t)(void); typedef void* (*pFp_t)(void*); +typedef SDL2_GUID_t (*JFi_t)(int32_t); typedef void (*vFpp_t)(void*, void*); typedef void (*vFpV_t)(void*, ...); typedef int32_t (*iFip_t)(int32_t, void*); +typedef int32_t (*iFpi_t)(void*, int32_t); typedef int32_t (*iFpp_t)(void*, void*); +typedef void* (*pFpi_t)(void*, int32_t); typedef void* (*pFpp_t)(void*, void*); typedef int32_t (*iFppV_t)(void*, void*, ...); +typedef void* (*pFpii_t)(void*, int32_t, int32_t); typedef void* (*pFppp_t)(void*, void*, void*); typedef int32_t (*iFpLpp_t)(void*, uintptr_t, void*, void*); typedef int32_t (*iFpLpV_t)(void*, uintptr_t, void*, ...); @@ -30,14 +34,25 @@ typedef void* (*pFpiiiiu_t)(void*, int32_t, int32_t, int32_t, int32_t, uint32_t) #define SUPER() ADDED_FUNCTIONS() \ GO(SDL_FreeSurface, vFp_t) \ GO(SDL_PollEvent, iFp_t) \ + GO(SDL_PushEvent, iFp_t) \ GO(SDL_GetBasePath, pFv_t) \ GO(SDL_GL_GetProcAddress, pFp_t) \ + GO(SDL_JoystickGetDeviceGUID, JFi_t) \ + GO(SDL_AddEventWatch, vFpp_t) \ + GO(SDL_DelEventWatch, vFpp_t) \ GO(SDL_SetWindowIcon, vFpp_t) \ GO(SDL_Log, vFpV_t) \ + GO(SDL_GetCurrentDisplayMode, iFip_t) \ GO(SDL_GetDesktopDisplayMode, iFip_t) \ + GO(SDL_WaitEventTimeout, iFpi_t) \ + GO(SDL_GetWindowDisplayMode, iFpp_t) \ GO(SDL_OpenAudio, iFpp_t) \ + GO(SDL_SetWindowDisplayMode, iFpp_t) \ + GO(SDL_LoadBMP_RW, pFpi_t) \ + GO(SDL_notreal, pFpi_t) \ GO(SDL_RWFromFile, pFpp_t) \ GO(SDL_sscanf, iFppV_t) \ + GO(SDL_CreateColorCursor, pFpii_t) \ GO(SDL_CreateThread, pFppp_t) \ GO(SDL_vsnprintf, iFpLpp_t) \ GO(SDL_snprintf, iFpLpV_t) \ diff --git a/src/wrapped32/generated/wrappedsdl2undefs32.h b/src/wrapped32/generated/wrappedsdl2undefs32.h index 71be2e55..3bacf653 100644 --- a/src/wrapped32/generated/wrappedsdl2undefs32.h +++ b/src/wrapped32/generated/wrappedsdl2undefs32.h @@ -4,5 +4,7 @@ #ifndef __wrappedsdl2UNDEFS32_H_ #define __wrappedsdl2UNDEFS32_H_ +#undef JFEi +#undef JFEi_32 #endif // __wrappedsdl2UNDEFS32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index bef6ca09..de01ca30 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -152,6 +152,7 @@ typedef uintptr_t (*LFp_t)(void*); typedef void* (*pFv_t)(void); typedef void* (*pFi_t)(int32_t); typedef void* (*pFu_t)(uint32_t); +typedef void* (*pFl_t)(intptr_t); typedef void* (*pFL_t)(uintptr_t); typedef void* (*pFp_t)(void*); typedef void* (*pFX_t)(void*); @@ -417,6 +418,7 @@ typedef int32_t (*iFpip_t)(void*, int32_t, void*); typedef int32_t (*iFpuC_t)(void*, uint32_t, uint8_t); typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); typedef int32_t (*iFpuU_t)(void*, uint32_t, uint64_t); +typedef int32_t (*iFpfu_t)(void*, float, uint32_t); typedef int32_t (*iFpLi_t)(void*, uintptr_t, int32_t); typedef int32_t (*iFpLp_t)(void*, uintptr_t, void*); typedef int32_t (*iFppi_t)(void*, void*, int32_t); @@ -591,6 +593,7 @@ typedef void (*vFulpp_t)(uint32_t, intptr_t, void*, void*); typedef void (*vFupii_t)(uint32_t, void*, int32_t, int32_t); typedef void (*vFuppi_t)(uint32_t, void*, void*, int32_t); typedef void (*vFuppu_t)(uint32_t, void*, void*, uint32_t); +typedef void (*vFUUpi_t)(uint64_t, uint64_t, void*, int32_t); typedef void (*vFffff_t)(float, float, float, float); typedef void (*vFdddd_t)(double, double, double, double); typedef void (*vFllii_t)(intptr_t, intptr_t, int32_t, int32_t); @@ -978,6 +981,7 @@ typedef void (*vFudddddd_t)(uint32_t, double, double, double, double, double, do typedef void (*vFlliiiip_t)(intptr_t, intptr_t, int32_t, int32_t, int32_t, int32_t, void*); typedef void (*vFpipipiu_t)(void*, int32_t, void*, int32_t, void*, int32_t, uint32_t); typedef void (*vFpddiidd_t)(void*, double, double, int32_t, int32_t, double, double); +typedef int32_t (*iFEpuiupV_t)(x64emu_t*, void*, uint32_t, int32_t, uint32_t, void*, void*); typedef int32_t (*iFEpLiipV_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, void*, void*); typedef int32_t (*iFEXLpppp_t)(x64emu_t*, void*, uintptr_t, void*, void*, void*, void*); typedef int32_t (*iFuiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); @@ -1017,6 +1021,7 @@ typedef void (*vFuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, u typedef void (*vFuuufffff_t)(uint32_t, uint32_t, uint32_t, float, float, float, float, float); typedef void (*vFffffffff_t)(float, float, float, float, float, float, float, float); typedef int32_t (*iFEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFEpLiLppp_t)(x64emu_t*, void*, uintptr_t, int32_t, uintptr_t, void*, void*, void*); typedef int32_t (*iFuiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFXpIIIppp_t)(void*, void*, int64_t, int64_t, int64_t, void*, void*, void*); typedef uint8_t (*CFuiifpppp_t)(uint32_t, int32_t, int32_t, float, void*, void*, void*, void*); @@ -1206,6 +1211,7 @@ void LFp_32(x64emu_t *emu, uintptr_t fcn) { LFp_t fn = (LFp_t)fcn; R_EAX = to_ul void pFv_32(x64emu_t *emu, uintptr_t fcn) { pFv_t fn = (pFv_t)fcn; R_EAX = to_ptrv(fn()); } void pFi_32(x64emu_t *emu, uintptr_t fcn) { pFi_t fn = (pFi_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4))); } void pFu_32(x64emu_t *emu, uintptr_t fcn) { pFu_t fn = (pFu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4))); } +void pFl_32(x64emu_t *emu, uintptr_t fcn) { pFl_t fn = (pFl_t)fcn; R_EAX = to_ptrv(fn(to_long(from_ptri(long_t, R_ESP + 4)))); } void pFL_32(x64emu_t *emu, uintptr_t fcn) { pFL_t fn = (pFL_t)fcn; R_EAX = to_ptrv(fn(to_ulong(from_ptri(ulong_t, R_ESP + 4)))); } void pFp_32(x64emu_t *emu, uintptr_t fcn) { pFp_t fn = (pFp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4))); } void pFX_32(x64emu_t *emu, uintptr_t fcn) { pFX_t fn = (pFX_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)))); } @@ -1471,6 +1477,7 @@ void iFpip_32(x64emu_t *emu, uintptr_t fcn) { iFpip_t fn = (iFpip_t)fcn; R_EAX = void iFpuC_32(x64emu_t *emu, uintptr_t fcn) { iFpuC_t fn = (iFpuC_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12)); } void iFpuu_32(x64emu_t *emu, uintptr_t fcn) { iFpuu_t fn = (iFpuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } void iFpuU_32(x64emu_t *emu, uintptr_t fcn) { iFpuU_t fn = (iFpuU_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); } +void iFpfu_32(x64emu_t *emu, uintptr_t fcn) { iFpfu_t fn = (iFpfu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } void iFpLi_32(x64emu_t *emu, uintptr_t fcn) { iFpLi_t fn = (iFpLi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); } void iFpLp_32(x64emu_t *emu, uintptr_t fcn) { iFpLp_t fn = (iFpLp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } void iFppi_32(x64emu_t *emu, uintptr_t fcn) { iFppi_t fn = (iFppi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } @@ -1645,6 +1652,7 @@ void vFulpp_32(x64emu_t *emu, uintptr_t fcn) { vFulpp_t fn = (vFulpp_t)fcn; fn(f void vFupii_32(x64emu_t *emu, uintptr_t fcn) { vFupii_t fn = (vFupii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } void vFuppi_32(x64emu_t *emu, uintptr_t fcn) { vFuppi_t fn = (vFuppi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } void vFuppu_32(x64emu_t *emu, uintptr_t fcn) { vFuppu_t fn = (vFuppu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFUUpi_32(x64emu_t *emu, uintptr_t fcn) { vFUUpi_t fn = (vFUUpi_t)fcn; fn(from_ptri(uint64_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 12), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } void vFffff_32(x64emu_t *emu, uintptr_t fcn) { vFffff_t fn = (vFffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16)); } void vFdddd_32(x64emu_t *emu, uintptr_t fcn) { vFdddd_t fn = (vFdddd_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28)); } void vFllii_32(x64emu_t *emu, uintptr_t fcn) { vFllii_t fn = (vFllii_t)fcn; fn(to_long(from_ptri(long_t, R_ESP + 4)), to_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } @@ -2032,6 +2040,7 @@ void vFudddddd_32(x64emu_t *emu, uintptr_t fcn) { vFudddddd_t fn = (vFudddddd_t) void vFlliiiip_32(x64emu_t *emu, uintptr_t fcn) { vFlliiiip_t fn = (vFlliiiip_t)fcn; fn(to_long(from_ptri(long_t, R_ESP + 4)), to_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } void vFpipipiu_32(x64emu_t *emu, uintptr_t fcn) { vFpipipiu_t fn = (vFpipipiu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } void vFpddiidd_32(x64emu_t *emu, uintptr_t fcn) { vFpddiidd_t fn = (vFpddiidd_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(double, R_ESP + 32), from_ptri(double, R_ESP + 40)); } +void iFEpuiupV_32(x64emu_t *emu, uintptr_t fcn) { iFEpuiupV_t fn = (iFEpuiupV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptrv(R_ESP + 24)); } void iFEpLiipV_32(x64emu_t *emu, uintptr_t fcn) { iFEpLiipV_t fn = (iFEpLiipV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptrv(R_ESP + 24)); } void iFEXLpppp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLpppp_t fn = (iFEXLpppp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } void iFuiiiuup_32(x64emu_t *emu, uintptr_t fcn) { iFuiiiuup_t fn = (iFuiiiuup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } @@ -2071,6 +2080,7 @@ void vFuuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuu_t fn = (vFuuuuuuuu void vFuuufffff_32(x64emu_t *emu, uintptr_t fcn) { vFuuufffff_t fn = (vFuuufffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32)); } void vFffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFffffffff_t fn = (vFffffffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32)); } void iFEpippppp_32(x64emu_t *emu, uintptr_t fcn) { iFEpippppp_t fn = (iFEpippppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void iFEpLiLppp_32(x64emu_t *emu, uintptr_t fcn) { iFEpLiLppp_t fn = (iFEpLiLppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), to_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } void iFuiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { iFuiiiiuup_t fn = (iFuiiiiuup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } void iFXpIIIppp_32(x64emu_t *emu, uintptr_t fcn) { iFXpIIIppp_t fn = (iFXpIIIppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 28), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44)); } void CFuiifpppp_32(x64emu_t *emu, uintptr_t fcn) { CFuiifpppp_t fn = (CFuiifpppp_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index c040c523..118dc064 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -103,6 +103,7 @@ void LFp_32(x64emu_t *emu, uintptr_t fnc); void pFv_32(x64emu_t *emu, uintptr_t fnc); void pFi_32(x64emu_t *emu, uintptr_t fnc); void pFu_32(x64emu_t *emu, uintptr_t fnc); +void pFl_32(x64emu_t *emu, uintptr_t fnc); void pFL_32(x64emu_t *emu, uintptr_t fnc); void pFp_32(x64emu_t *emu, uintptr_t fnc); void pFX_32(x64emu_t *emu, uintptr_t fnc); @@ -368,6 +369,7 @@ void iFpip_32(x64emu_t *emu, uintptr_t fnc); void iFpuC_32(x64emu_t *emu, uintptr_t fnc); void iFpuu_32(x64emu_t *emu, uintptr_t fnc); void iFpuU_32(x64emu_t *emu, uintptr_t fnc); +void iFpfu_32(x64emu_t *emu, uintptr_t fnc); void iFpLi_32(x64emu_t *emu, uintptr_t fnc); void iFpLp_32(x64emu_t *emu, uintptr_t fnc); void iFppi_32(x64emu_t *emu, uintptr_t fnc); @@ -542,6 +544,7 @@ void vFulpp_32(x64emu_t *emu, uintptr_t fnc); void vFupii_32(x64emu_t *emu, uintptr_t fnc); void vFuppi_32(x64emu_t *emu, uintptr_t fnc); void vFuppu_32(x64emu_t *emu, uintptr_t fnc); +void vFUUpi_32(x64emu_t *emu, uintptr_t fnc); void vFffff_32(x64emu_t *emu, uintptr_t fnc); void vFdddd_32(x64emu_t *emu, uintptr_t fnc); void vFllii_32(x64emu_t *emu, uintptr_t fnc); @@ -929,6 +932,7 @@ void vFudddddd_32(x64emu_t *emu, uintptr_t fnc); void vFlliiiip_32(x64emu_t *emu, uintptr_t fnc); void vFpipipiu_32(x64emu_t *emu, uintptr_t fnc); void vFpddiidd_32(x64emu_t *emu, uintptr_t fnc); +void iFEpuiupV_32(x64emu_t *emu, uintptr_t fnc); void iFEpLiipV_32(x64emu_t *emu, uintptr_t fnc); void iFEXLpppp_32(x64emu_t *emu, uintptr_t fnc); void iFuiiiuup_32(x64emu_t *emu, uintptr_t fnc); @@ -968,6 +972,7 @@ void vFuuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); void vFuuufffff_32(x64emu_t *emu, uintptr_t fnc); void vFffffffff_32(x64emu_t *emu, uintptr_t fnc); void iFEpippppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpLiLppp_32(x64emu_t *emu, uintptr_t fnc); void iFuiiiiuup_32(x64emu_t *emu, uintptr_t fnc); void iFXpIIIppp_32(x64emu_t *emu, uintptr_t fnc); void CFuiifpppp_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c index f4a0dff7..21381bd8 100755 --- a/src/wrapped32/wrappedlibc.c +++ b/src/wrapped32/wrappedlibc.c @@ -915,22 +915,14 @@ EXPORT int my32_vswprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, uint3 return r; } EXPORT int my32___vswprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, uint32_t* b) __attribute__((alias("my32_vswprintf"))); -#if 0 + EXPORT int my32___vswprintf_chk(x64emu_t* emu, void* buff, size_t s, int flags, size_t m, void * fmt, void * b, va_list V) { - #ifndef NOALIGN // need to align on arm - myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + myStackAlignW32((const char*)fmt, (uint32_t*)b, emu->scratch); PREPARE_VALIST_32; - void* f = vswprintf; - int r = ((iFpupp_t)f)(buff, s, fmt, VARARGS_32); - return r; - #else - void* f = vswprintf; - int r = ((iFpupp_t)f)(buff, s, fmt, (uint32_t*)b); - return r; - #endif + return vswprintf(buff, s, fmt, VARARGS_32); } -#endif + EXPORT int my32_vswscanf(x64emu_t* emu, void* buff, void* fmt, void* b) { myStackAlignScanfW32((const char*)fmt, (uint32_t*)b, emu->scratch); @@ -966,21 +958,13 @@ EXPORT void my32_vwarn(x64emu_t* emu, void* fmt, void* b) { #endif } +#endif EXPORT int my32___swprintf_chk(x64emu_t* emu, void* s, uint32_t n, int32_t flag, uint32_t slen, void* fmt, void * b) { - #ifndef NOALIGN - myStackAlignW((const char*)fmt, b, emu->scratch); + myStackAlignW32((const char*)fmt, b, emu->scratch); PREPARE_VALIST_32; - void* f = vswprintf; - int r = ((iFpupp_t)f)(s, n, fmt, VARARGS_32); - return r; - #else - void* f = vswprintf; - int r = ((iFpupp_t)f)(s, n, fmt, b); - return r; - #endif + return vswprintf(s, n, fmt, VARARGS_32); } -#endif EXPORT int my32_swprintf(x64emu_t* emu, void* s, uint32_t n, void* fmt, void *b) { myStackAlignW32((const char*)fmt, b, emu->scratch); diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h index 1c6e5efb..05fc21e1 100755 --- a/src/wrapped32/wrappedlibc_private.h +++ b/src/wrapped32/wrappedlibc_private.h @@ -47,7 +47,7 @@ GOW(access, iFpi) //DATAV(__after_morecore_hook, 4) GO(alarm, iFu) //GO2(aligned_alloc, pFuu, memalign) -//GO(alphasort, iFpp) +GO(alphasort, iFpp) GOM(alphasort64, iFEpp) //DATA(argp_err_exit_status, 4) // argp_error // Weak @@ -349,7 +349,7 @@ GO(__fgets_chk, pFpLiS) // __fgetws_unlocked_chk //GO(fgetxattr, iFippu) GO(fileno, iFS) -//GOW(fileno_unlocked, iFp) +GOW(fileno_unlocked, iFS) GOW(finite, iFd) GO(__finite, iFd) GOW(finitef, iFf) @@ -508,7 +508,7 @@ GOM(getifaddrs, iFEbp_) //GOW(getitimer, iFip) // get_kernel_syms // Weak //GOW(getline, iFppp) -//GO(getloadavg, iFpi) +GO(getloadavg, iFpi) GO(getlogin, pFv) GO(getlogin_r, iFpu) // __getlogin_r_chk @@ -767,7 +767,7 @@ GO(ioctl, iFiLN) //the vararg is just to have optional arg of various type, bu // _IO_ftrylockfile //GO(_IO_funlockfile, vFS) // _IO_fwrite -//GO(_IO_getc, iFS) +GO(_IO_getc, iFS) // _IO_getline //GO(_IO_getline_info, LFSpLiip) // _IO_gets @@ -794,7 +794,7 @@ GOW(iopl, iFi) // _IO_printf //GO(_IO_proc_close, iFS) //GO(_IO_proc_open, pFSpp) -//GO(_IO_putc, iFip) +GO(_IO_putc, iFiS) // _IO_puts //GO(_IO_remove_marker, vFp) //GO(_IO_seekmark, iFSpi) @@ -955,7 +955,7 @@ GO(isxdigit, iFi) // isxdigit_l // Weak // _itoa_lower_digits // type R // __ivaliduser -//GO(jrand48, iFp) +GO(jrand48, lFp) // jrand48_r // Weak // key_decryptsession // key_decryptsession_pk @@ -1284,8 +1284,8 @@ GOM(__printf_chk, iFEvpV) //%% // __profile_frequency //DATAM(__progname, 4) //DATAM(__progname_full, 4) -//DATAM(program_invocation_name, 4) -//DATAM(program_invocation_short_name, 4) +DATAM(program_invocation_name, 4) +DATAM(program_invocation_short_name, 4) //GOW(pselect, iFippppp) // psignal //GO(ptrace, iFiupp) // will that work??? @@ -1423,8 +1423,8 @@ GOW(rmdir, iFp) // ruserok // ruserok_af // ruserpass -//GOW(sbrk, pFl) -//GO(__sbrk, pFl) +GOW(sbrk, pFl) +GO(__sbrk, pFl) // scalbn // Weak // scalbnf // Weak // scalbnl // Weak @@ -1759,7 +1759,7 @@ GOM(swapcontext, iFEpp) //%% // swapoff // Weak // swapon // Weak GOM(swprintf, iFEpupV) //%% -//GOM(__swprintf_chk, iFEpuiupV) //%% +GOM(__swprintf_chk, iFEpuiupV) //%% GOM(swscanf, iFEppV) GOW(symlink, iFpp) //GO(symlinkat, iFpip) @@ -1809,9 +1809,9 @@ GO(timerfd_create, iFii) //GOW(times, iFp) DATAM(timezone, 4) //DATAB(__timezone, 4) // type B -//GO(tmpfile, pFv) +GO(tmpfile, pFv) //GO(tmpfile64, pFv) -//GO(tmpnam, pFp) +GO(tmpnam, pFp) //GO(tmpnam_r, pFp) GO(toascii, iFi) // __toascii_l // Weak @@ -1907,7 +1907,7 @@ GOM(__vsprintf_chk, iFEpiLpp) //%% // __vsscanf // Weak GOWM(vswprintf, iFEpLpp) //%% GOWM(__vswprintf, iFEpLpp) //%% -//GOWM(__vswprintf_chk, iFEpLiLppp) //%% +GOWM(__vswprintf_chk, iFEpLiLppp) //%% GOM(vswscanf, iFEppp) //GO(vsyslog, vFipp) //GO(__vsyslog_chk, vFiipp) @@ -1917,7 +1917,7 @@ GOM(vswscanf, iFEppp) //GOM(vwprintf, iFEpp) //%% //GO2(__vwprintf_chk, iFEvpp, my_vwprintf) //GO(vwscanf, iFpp) -//GOW(wait, iFp) +GOW(wait, iFp) //GOW(__wait, iFp) //GOW(wait3, iFpip) //GOW(wait4, iFipip) @@ -1972,7 +1972,7 @@ GO(wcsstr, pFpp) //GO(__wcstod_internal, dFppi) // __wcstod_l // wcstod_l // Weak -//GO(wcstof, fFpp) +GO(wcstof, fFpBp_) // __wcstof_internal // __wcstof_l // wcstof_l // Weak diff --git a/src/wrapped32/wrappedsdl2.c b/src/wrapped32/wrappedsdl2.c index bf444cff..2c355306 100644 --- a/src/wrapped32/wrappedsdl2.c +++ b/src/wrapped32/wrappedsdl2.c @@ -26,10 +26,17 @@ #include "sdl2align32.h" +#include "generated/wrappedsdl2defs32.h" +#define JFEi_32 pFEpi_32 + extern const char* sdl2Name; #define LIBNAME sdl2 typedef struct { + uint8_t data[16]; +} SDL2_GUID_t; + +typedef struct { int32_t freq; uint16_t format; uint8_t channels; @@ -72,6 +79,42 @@ typedef void (*vFiupV_t)(int, uint32_t, void*, va_list); GO(4) +// eventfilter +#define GO(A) \ +static uintptr_t my_eventfilter_fct_##A = 0; \ +static int my_eventfilter_##A(void* userdata, void* event) \ +{ \ + my_SDL2_Event_32_t evt = {0}; \ + convert_SDL2_Event_to_32(&evt, event); \ + return (int)RunFunctionFmt(my_eventfilter_fct_##A, "pp", userdata, &evt); \ +} +SUPER() +#undef GO +static void* find_eventfilter_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_eventfilter_fct_##A == (uintptr_t)fct) return my_eventfilter_##A; + SUPER() + #undef GO + #define GO(A) if(my_eventfilter_fct_##A == 0) {my_eventfilter_fct_##A = (uintptr_t)fct; return my_eventfilter_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for 32bits SDL2 eventfilter callback\n"); + return NULL; + +} +static void* reverse_eventfilter_Fct(void* fct) +{ + if(!fct) return fct; + if(CheckBridged(my_lib->w.bridge, fct)) + return (void*)CheckBridged(my_lib->w.bridge, fct); + #define GO(A) if(my_eventfilter_##A == fct) return (void*)my_eventfilter_fct_##A; + SUPER() + #undef GO + return (void*)AddBridge(my_lib->w.bridge, iFpp_32, fct, 0, NULL); +} // AudioCallback #define GO(A) \ static uintptr_t my32_2_AudioCallback_fct_##A = 0; \ @@ -109,6 +152,35 @@ EXPORT int my32_2_SDL_GetDesktopDisplayMode(int displayIndex, void* mode) return ret; } +EXPORT int my32_2_SDL_GetCurrentDisplayMode(int displayIndex, void* mode) +{ + my_SDL2_DisplayMode_t my_mode = { 0 }; + int ret = my->SDL_GetCurrentDisplayMode(displayIndex, &my_mode); + convert_SDL2_DisplayMode_to_32(mode, &my_mode); + return ret; +} + +EXPORT int my32_2_SDL_GetWindowDisplayMode(void* window, void* mode) +{ + my_SDL2_DisplayMode_t my_mode = { 0 }; + int ret = my->SDL_GetWindowDisplayMode(window, &my_mode); + convert_SDL2_DisplayMode_to_32(mode, &my_mode); + return ret; +} + +EXPORT int my32_2_SDL_SetWindowDisplayMode(void* window, void* mode) +{ + my_SDL2_DisplayMode_t* mode_l = { 0 }; + convert_SDL2_DisplayMode_to_64(&mode_l, mode); + return my->SDL_SetWindowDisplayMode(window, &mode_l); +} + +EXPORT void* my32_2_SDL_JoystickGetDeviceGUID(void* ret, int index) +{ + *(SDL2_GUID_t*)ret = my->SDL_JoystickGetDeviceGUID(index); + return ret; +} + EXPORT int my32_2_SDL_OpenAudio(x64emu_t* emu, void* d, void* o) { SDL2_AudioSpec desired = { 0 }; @@ -237,6 +309,14 @@ EXPORT void my32_2_SDL_SetWindowIcon(x64emu_t* emu, void* window, void* icon) inplace_SDL2_Surface_to_32(icon); } +EXPORT void* my32_2_SDL_CreateColorCursor(void* s, int x, int y) +{ + inplace_SDL2_Surface_to_64(s); + void* ret = my->SDL_CreateColorCursor(s, x, y); + inplace_SDL2_Surface_to_32(s); + return ret; +} + EXPORT void my32_2_SDL_FreeSurface(x64emu_t* emu, void* surface) { inplace_SDL2_Surface_to_64(surface); @@ -251,6 +331,30 @@ EXPORT void* my32_2_SDL_CreateThread(x64emu_t* emu, void* f, void* n, void* p) return my->SDL_CreateThread(fnc, n, et); } +EXPORT int my32_2_SDL_WaitEventTimeout(my_SDL2_Event_32_t* evt, int timeout) +{ + my_SDL2_Event_t event = {0}; + int ret = my->SDL_WaitEventTimeout(evt?(&event):NULL, timeout); + convert_SDL2_Event_to_32(evt, &event); + return ret; +} + +EXPORT int my32_2_SDL_PushEvent(my_SDL2_Event_32_t* evt) +{ + my_SDL2_Event_t event = {0}; + convert_SDL2_Event_to_64(&event, evt); + return my->SDL_PushEvent(&event); +} + +EXPORT void my32_2_SDL_AddEventWatch(x64emu_t* emu, void* p, void* userdata) +{ + my->SDL_AddEventWatch(find_eventfilter_Fct(p), userdata); +} +EXPORT void my32_2_SDL_DelEventWatch(x64emu_t* emu, void* p, void* userdata) +{ + my->SDL_DelEventWatch(find_eventfilter_Fct(p), userdata); +} + EXPORT void* my32_2_SDL_RWFromFile(x64emu_t* emu, void* a, void* b) { SDL2_RWops_t* r = (SDL2_RWops_t*)my->SDL_RWFromFile(a, b); @@ -259,6 +363,19 @@ EXPORT void* my32_2_SDL_RWFromFile(x64emu_t* emu, void* a, void* b) return ret; } +EXPORT void *my32_2_SDL_LoadBMP_RW(x64emu_t* emu, void* a, int b) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t* rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->SDL_LoadBMP_RW(rw, b); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + inplace_SDL2_Surface_to_32(r); + return r; +} + #define ALTMY my32_2_ #define CUSTOM_INIT \ diff --git a/src/wrapped32/wrappedsdl2_private.h b/src/wrapped32/wrappedsdl2_private.h index 684141b4..c3b4906c 100644 --- a/src/wrapped32/wrappedsdl2_private.h +++ b/src/wrapped32/wrappedsdl2_private.h @@ -2,7 +2,7 @@ #error Meh! #endif -//%S G SDL_JoystickGUID UU +//%S J SDL2_GUID_t uuuu // SDL_GUID is struct uin8_t data[16] => UU when in args, H when is return // _fini @@ -10,7 +10,7 @@ // GO(SDL_abs, iFi) // GO(SDL_acos, dFd) // GO(SDL_acosf, fFf) -// GOM(SDL_AddEventWatch, vFEpp) +GOM(SDL_AddEventWatch, vFEpp) // SDL_AddHintCallback // GOM(SDL_AddTimer, pFEupp) // GO(SDL_AllocFormat, pFu) @@ -51,7 +51,7 @@ GO(SDL_calloc, pFLL) // GO(SDL_ClearHints, vFv) // GO(SDL_ClearQueuedAudio, vFu) GO(SDL_CloseAudio, vFv) -// GO(SDL_CloseAudioDevice, vFu) +GO(SDL_CloseAudioDevice, vFu) // GO(SDL_ComposeCustomBlendMode, uFuuuuuu) // GO(SDL_CondBroadcast, iFp) // GO(SDL_CondSignal, iFp) @@ -65,7 +65,7 @@ GO(SDL_CloseAudio, vFv) // GO(SDL_copysignf, fFff) // GO(SDL_cos, dFd) // GO(SDL_cosf, fFf) -// GO(SDL_CreateColorCursor, pFpii) +GOM(SDL_CreateColorCursor, pFpii) //%noE // GO(SDL_CreateCond, pFv) // GO(SDL_CreateCursor, pFppiiii) GO(SDL_CreateMutex, pFv) @@ -86,7 +86,7 @@ GO(SDL_CreateWindow, pFpiiiiu) // GO(SDL_CreateWindowAndRenderer, iFiiupp) // GO(SDL_CreateWindowFrom, pFp) GO(SDL_Delay, vFu) -// GOM(SDL_DelEventWatch, vFEpp) +GOM(SDL_DelEventWatch, vFEpp) // SDL_DelHintCallback // GO(SDL_DequeueAudio, uFupu) // GO(SDL_DestroyCond, vFp) @@ -94,7 +94,7 @@ GO(SDL_Delay, vFu) // GO(SDL_DestroyRenderer, vFp) // GO(SDL_DestroySemaphore, vFp) // GO(SDL_DestroyTexture, vFp) -// GO(SDL_DestroyWindow, vFp) +GO(SDL_DestroyWindow, vFp) // GO(SDL_DestroyWindowSurface, iFp) // GO(SDL_DetachThread, vFp) GO(SDL_DisableScreenSaver, vFv) @@ -119,7 +119,7 @@ GO(SDL_DisableScreenSaver, vFv) // GO(SDL_fmodf, fFff) GO(SDL_free, vFp) GO(SDL_FreeAudioStream, vFp) -// GO(SDL_FreeCursor, vFp) +GO(SDL_FreeCursor, vFp) // GO(SDL_FreeFormat, vFp) // GO(SDL_FreePalette, vFp) // GO(SDL_FreeRW, vFp) @@ -127,7 +127,7 @@ GOM(SDL_FreeSurface, vFEp) // GO(SDL_FreeWAV, vFp) // GO(SDL_GameControllerAddMapping, iFp) // GOM(SDL_GameControllerAddMappingsFromRW, iFEpi) -// GO(SDL_GameControllerClose, vFp) +GO(SDL_GameControllerClose, vFp) GO(SDL_GameControllerEventState, iFi) // GO(SDL_GameControllerFromInstanceID, pFi) // GO(SDL_GameControllerFromPlayerIndex, pFi) @@ -139,7 +139,7 @@ GO(SDL_GameControllerEventState, iFi) // GO(SDL_GameControllerGetButton, CFpi) // GO(SDL_GameControllerGetButtonFromString, iFp) // GO(SDL_GameControllerGetFirmwareVersion, WFp) -// GO(SDL_GameControllerGetJoystick, pFp) +GO(SDL_GameControllerGetJoystick, pFp) // GO(SDL_GameControllerGetNumTouchpads, iFp) // GO(SDL_GameControllerGetNumTouchpadFingers, iFpi) // GO(SDL_GameControllerGetPlayerIndex, iFp) @@ -165,7 +165,7 @@ GO(SDL_GameControllerEventState, iFi) // GO(SDL_GameControllerName, pFp) // GO(SDL_GameControllerNameForIndex, pFi) // GO(SDL_GameControllerNumMappings, iFv) -// GO(SDL_GameControllerOpen, pFi) +GO(SDL_GameControllerOpen, pFi) // GO(SDL_GameControllerPath, pFp) // GO(SDL_GameControllerPathForIndex, pFi) // GO(SDL_GameControllerRumble, iFpWWu) @@ -189,22 +189,22 @@ GOM(SDL_GetBasePath, pFEv) // GO(SDL_GetColorKey, iFpp) // GO(SDL_GetCPUCacheLineSize, iFv) // GO(SDL_GetCPUCount, iFv) -// GO(SDL_GetCurrentAudioDriver, pFv) -// GO(SDL_GetCurrentDisplayMode, iFip) -// GO(SDL_GetCurrentVideoDriver, pFv) +GO(SDL_GetCurrentAudioDriver, pFv) +GOM(SDL_GetCurrentDisplayMode, iFip) //%noE +GO(SDL_GetCurrentVideoDriver, pFv) // GO(SDL_GetCursor, pFv) // SDL_GetDefaultAssertionHandler // GO(SDL_GetDefaultAudioInfo, iFppi) // GO(SDL_GetDefaultCursor, pFv) GOM(SDL_GetDesktopDisplayMode, iFEip) -// GO(SDL_GetDisplayBounds, iFip) +GO(SDL_GetDisplayBounds, iFip) // GO(SDL_GetDisplayDPI, iFippp) // GO(SDL_GetDisplayMode, iFiip) // GO(SDL_GetDisplayName, pFi) // GO(SDL_GetDisplayOrientation, uFi) GO(SDL_GetDisplayUsableBounds, iFip) GO(SDL_getenv, pFp) -// GO(SDL_GetError, pFv) +GO(SDL_GetError, pFv) // GOM(SDL_GetEventFilter, iFEpp) // GO(SDL_GetGlobalMouseState, uFpp) // GO(SDL_GetGrabbedWindow, pFv) @@ -217,18 +217,18 @@ GO(SDL_GetHintBoolean, uFpu) // GO(SDL_GetKeyFromScancode, iFu) // GO(SDL_GetKeyName, pFi) // GO(SDL_GetMemoryFunctions, vFpppp) -// GO(SDL_GetModState, uFv) +GO(SDL_GetModState, uFv) // GO(SDL_GetMouseFocus, pFv) GO(SDL_GetMouseState, uFpp) -// GO(SDL_GetNumAllocations, iFv) -// GO(SDL_GetNumAudioDevices, iFi) -// GO(SDL_GetNumAudioDrivers, iFv) -// GO(SDL_GetNumDisplayModes, iFi) -// GO(SDL_GetNumRenderDrivers, iFv) -// GO(SDL_GetNumTouchDevices, iFv) -// GO(SDL_GetNumTouchFingers, iFu) -// GO(SDL_GetNumVideoDisplays, iFv) -// GO(SDL_GetNumVideoDrivers, iFv) +GO(SDL_GetNumAllocations, iFv) +GO(SDL_GetNumAudioDevices, iFi) +GO(SDL_GetNumAudioDrivers, iFv) +GO(SDL_GetNumDisplayModes, iFi) +GO(SDL_GetNumRenderDrivers, iFv) +GO(SDL_GetNumTouchDevices, iFv) +GO(SDL_GetNumTouchFingers, iFu) +GO(SDL_GetNumVideoDisplays, iFv) +GO(SDL_GetNumVideoDrivers, iFv) // GOM(SDL_GetOriginalMemoryFunctions, // GO(SDL_GetPerformanceCounter, UFv) // GO(SDL_GetPerformanceFrequency, LFv) @@ -277,13 +277,13 @@ GO(SDL_GetTicks, uFv) // GO(SDL_GetWindowBordersSize, iFppppp) // GO(SDL_GetWindowBrightness, fFp) // GO(SDL_GetWindowData, pFpp) -// GO(SDL_GetWindowDisplayIndex, iFp) -// GO(SDL_GetWindowDisplayMode, iFpp) +GO(SDL_GetWindowDisplayIndex, iFp) +GOM(SDL_GetWindowDisplayMode, iFpp) //%noE GO(SDL_GetWindowFlags, uFp) // GO(SDL_GetWindowFromID, pFu) // GO(SDL_GetWindowGammaRamp, iFpppp) -// GO(SDL_GetWindowGrab, iFp) -// GO(SDL_GetWindowID, uFp) +GO(SDL_GetWindowGrab, iFp) +GO(SDL_GetWindowID, uFp) // GO(SDL_GetWindowMaximumSize, vFppp) // GO(SDL_GetWindowMinimumSize, vFppp) // GO(SDL_GetWindowOpacity, iFpp) @@ -298,7 +298,7 @@ GO(SDL_GetWindowSize, vFppp) // GO(SDL_GetYUVConversionModeForResolution, uFii) // GO(SDL_GL_BindTexture, iFppp) GO(SDL_GL_CreateContext, pFp) -// GO(SDL_GL_DeleteContext, vFp) +GO(SDL_GL_DeleteContext, vFp) // GO(SDL_GL_ExtensionSupported, iFp) // GO(SDL_GL_GetAttribute, iFup) // GO(SDL_GL_GetCurrentContext, pFv) @@ -306,8 +306,8 @@ GO(SDL_GL_CreateContext, pFp) GO(SDL_GL_GetDrawableSize, vFppp) GOM(SDL_GL_GetProcAddress, pFEp) GO(SDL_GL_GetSwapInterval, iFv) -// GO(SDL_GL_LoadLibrary, iFp) -// GO(SDL_GL_MakeCurrent, iFpp) +GO(SDL_GL_LoadLibrary, iFp) +GO(SDL_GL_MakeCurrent, iFpp) GO(SDL_GL_ResetAttributes, vFv) GO(SDL_GL_SetAttribute, iFui) GO(SDL_GL_SetSwapInterval, iFi) @@ -315,7 +315,7 @@ GO(SDL_GL_SwapWindow, vFp) GO(SDL_GL_UnbindTexture, iFp) GO(SDL_GL_UnloadLibrary, vFv) // GO(SDL_GUIDToString, vFUUpi) -// GO(SDL_HapticClose, vFp) +GO(SDL_HapticClose, vFp) // GO(SDL_HapticDestroyEffect, vFpi) // GO(SDL_HapticEffectSupported, iFpp) // GO(SDL_HapticGetEffectStatus, iFpi) @@ -327,12 +327,12 @@ GO(SDL_GL_UnloadLibrary, vFv) // GO(SDL_HapticNumEffectsPlaying, iFp) // GO(SDL_HapticOpen, pFi) // GO(SDL_HapticOpened, iFi) -// GO(SDL_HapticOpenFromJoystick, pFp) +GO(SDL_HapticOpenFromJoystick, pFp) // GO(SDL_HapticOpenFromMouse, pFv) // GO(SDL_HapticPause, iFp) // GO(SDL_HapticQuery, uFp) -// GO(SDL_HapticRumbleInit, iFp) -// GO(SDL_HapticRumblePlay, iFpfu) +GO(SDL_HapticRumbleInit, iFp) +GO(SDL_HapticRumblePlay, iFpfu) // GO(SDL_HapticRumbleStop, iFp) // GO(SDL_HapticRumbleSupported, iFp) // GO(SDL_HapticRunEffect, iFpiu) @@ -364,7 +364,7 @@ GO(SDL_GL_UnloadLibrary, vFv) // GOM(SDL_HasSSE3, iFv) // GOM(SDL_HasSSE41, iFv) // GOM(SDL_HasSSE42, iFv) -// GO(SDL_HideWindow, vFp) +GO(SDL_HideWindow, vFp) // GO(SDL_HasWindowSurface, iFp) // GO(SDL_iconv, LFppppp) // GO(SDL_iconv_close, iFp) @@ -375,7 +375,7 @@ GO(SDL_InitSubSystem, iFu) // GO(SDL_IntersectRect, uFppp) // GO(SDL_IntersectRectAndLine, uFppppp) // GO(SDL_isdigit, iFi) -// GO(SDL_IsGameController, uFi) +GO(SDL_IsGameController, uFi) // GO(SDL_IsScreenKeyboardShown, uFp) // GO(SDL_IsScreenSaverEnabled, iFv) // GO(SDL_IsShapedWindow, uFp) @@ -384,7 +384,7 @@ GO(SDL_InitSubSystem, iFu) GO(SDL_IsTextInputActive, iFv) // GO(SDL_itoa, pFipi) // GO(SDL_JoystickAttachVirtualEx, iFp) -// GO(SDL_JoystickClose, vFp) +GO(SDL_JoystickClose, vFp) // GO(SDL_JoystickCurrentPowerLevel, iFp) GO(SDL_JoystickEventState, iFi) // GO(SDL_JoystickFromInstanceID, pFi) @@ -393,7 +393,7 @@ GO(SDL_JoystickEventState, iFi) // GO(SDL_JoystickGetAxisInitialState, uFpip) // GO(SDL_JoystickGetBall, iFpipp) // GO(SDL_JoystickGetButton, CFpi) -// GO(SDL_JoystickGetDeviceGUID, HFi) // return a struct that is "uint8_t data[16]" +GOS(SDL_JoystickGetDeviceGUID, JFEi) // return a struct that is "uint8_t data[16]" // GO(SDL_JoystickGetDeviceInstanceID, iFi) // GO(SDL_JoystickGetDevicePlayerIndex, iFi) // GO(SDL_JoystickGetDeviceProduct, WFi) @@ -403,7 +403,7 @@ GO(SDL_JoystickEventState, iFi) // GO(SDL_JoystickGetFirmwareVersion, WFp) // GO(SDL_JoystickGetGUID, HFp) // GO(SDL_JoystickGetGUIDFromString, HFp) -// GO(SDL_JoystickGetGUIDString, vFUUpi) //uint8_t data[16] passed as 1st argument... +GO(SDL_JoystickGetGUIDString, vFUUpi) //uint8_t data[16] passed as 1st argument... // GO(SDL_JoystickGetHat, CFpi) // GO(SDL_JoystickGetPlayerIndex, iFp) // GO(SDL_JoystickGetProduct, WFp) @@ -411,15 +411,15 @@ GO(SDL_JoystickEventState, iFi) // GO(SDL_JoystickGetSerial, pFp) // GO(SDL_JoystickGetType, uFp) // GO(SDL_JoystickGetVendor, WFp) -// GO(SDL_JoystickInstanceID, iFp) +GO(SDL_JoystickInstanceID, iFp) // GO(SDL_JoystickIsHaptic, iFp) // GO(SDL_JoystickName, pFp) -// GO(SDL_JoystickNameForIndex, pFi) +GO(SDL_JoystickNameForIndex, pFi) // GO(SDL_JoystickNumAxes, iFp) // GO(SDL_JoystickNumBalls, iFp) // GO(SDL_JoystickNumButtons, iFp) // GO(SDL_JoystickNumHats, iFp) -// GO(SDL_JoystickOpen, pFi) +GO(SDL_JoystickOpen, pFi) // GO(SDL_JoystickPath, pFp) // GO(SDL_JoystickPathForIndex, pFi) // GO(SDL_JoystickRumble, iFpWWu) @@ -427,7 +427,7 @@ GO(SDL_JoystickEventState, iFi) // GO(SDL_JoystickUpdate, vFv) // GO(SDL_LinuxSetThreadPriority, iFli) // GO(SDL_lltoa, pFlpi) -// GOM(SDL_LoadBMP_RW, pFEpi) +GOM(SDL_LoadBMP_RW, pFEpi) // GO(SDL_LoadDollarTemplates, iFip) // GO(SDL_LoadFile, pFpp) // GOM(SDL_LoadFile_RW, pFEppi) @@ -492,13 +492,13 @@ GOM(SDL_PollEvent, iFp) //%noE // GO(SDL_pow, dFdd) // GO(SDL_powf, fFff) // GO(SDL_PumpEvents, vFv) -// GO(SDL_PushEvent, iFp) +GOM(SDL_PushEvent, iFp) //%noE // GO2(SDL_qsort, vFEpuup, my_qsort) // GO(SDL_QueryTexture, iFppppp) // GO(SDL_QueueAudio, iFupu) GO(SDL_Quit, vFv) -// GO(SDL_QuitSubSystem, vFu) -// GO(SDL_RaiseWindow, vFp) + GO(SDL_QuitSubSystem, vFu) +GO(SDL_RaiseWindow, vFp) // GOM(SDL_ReadBE16, uFEp) // GOM(SDL_ReadBE32, uFEp) // GOM(SDL_ReadBE64, UFEp) @@ -562,8 +562,8 @@ GOM(SDL_RWFromFile, pFEpp) // GOM(SDL_SaveAllDollarTemplates, iFEp) // GOM(SDL_SaveBMP_RW, iFEppi) // GOM(SDL_SaveDollarTemplate, iFEip) -// GO(SDL_scalbn, dFdi) -// GO(SDL_scalbnf, fFfi) +GO(SDL_scalbn, dFdi) +GO(SDL_scalbnf, fFfi) // GO(SDL_SemPost, iFp) // GO(SDL_SemTryWait, iFp) // GO(SDL_SemValue, uFp) @@ -587,19 +587,19 @@ GOM(SDL_RWFromFile, pFEpp) // GO(SDL_SetClipboardText, iFp) // GO(SDL_SetClipRect, uFpp) // GO(SDL_SetColorKey, iFpiu) -// GO(SDL_SetCursor, vFp) +GO(SDL_SetCursor, vFp) GO(SDL_setenv, iFppi) // GO(SDL_SetError, iFppppp) // it use ..., so putarbitrary 4 args // GOM(SDL_SetEventFilter, vFEpp) GO(SDL_SetHint, uFpp) // GO(SDL_SetHintWithPriority, uFppu) -// GO(SDL_SetMainReady, vFv) +GO(SDL_SetMainReady, vFv) // GOM(SDL_SetMemoryFunctions, -// GO(SDL_SetModState, vFu) +GO(SDL_SetModState, vFu) // GO(SDL_SetPaletteColors, iFppii) // SDL_SetPixelFormatPalette // GO(SDL_SetPrimarySelectionText, iFp) -// GO(SDL_SetRelativeMouseMode, iFi) +GO(SDL_SetRelativeMouseMode, iFi) // GO(SDL_SetRenderDrawBlendMode, iFpu) GO(SDL_SetRenderDrawColor, iFpCCCC) // GO(SDL_SetRenderTarget, iFpp) @@ -615,12 +615,12 @@ GO(SDL_SetRenderDrawColor, iFpCCCC) // GO(SDL_SetTextureColorMod, iFpCCC) // GO(SDL_SetTextureScaleMode, iFpu) GO(SDL_SetThreadPriority, iFu) -// GO(SDL_SetWindowBordered, vFpi) +GO(SDL_SetWindowBordered, vFpi) // GO(SDL_SetWindowBrightness, iFpf) // GO(SDL_SetWindowData, pFppp) -// GO(SDL_SetWindowDisplayMode, iFpp) +GOM(SDL_SetWindowDisplayMode, iFpp) //%noE GO(SDL_SetWindowFullscreen, iFpu) -// GO(SDL_SetWindowGammaRamp, iFpppp) +GO(SDL_SetWindowGammaRamp, iFpppp) GO(SDL_SetWindowGrab, vFpi) // SDL_SetWindowHitTest GOM(SDL_SetWindowIcon, vFEpp) @@ -629,11 +629,11 @@ GOM(SDL_SetWindowIcon, vFEpp) GO(SDL_SetWindowMinimumSize, vFpii) // SDL_SetWindowModalFor // SDL_SetWindowOpacity -// GO(SDL_SetWindowPosition, vFpii) -// GO(SDL_SetWindowResizable, vFpi) +GO(SDL_SetWindowPosition, vFpii) +GO(SDL_SetWindowResizable, vFpi) // GO(SDL_SetWindowShape, iFppp) -// GO(SDL_SetWindowSize, vFpii) -// GO(SDL_SetWindowTitle, vFpp) +GO(SDL_SetWindowSize, vFpii) +GO(SDL_SetWindowTitle, vFpp) // SDL_SetYUVConversionMode GO(SDL_ShowCursor, iFi) // GO(SDL_ShowMessageBox, iFpp) @@ -711,7 +711,7 @@ GOM(SDL_vsnprintf, iFEpLpp) // GO(SDL_Vulkan_LoadLibrary, iFp) //TODO: wrap to also call my_dlopen with path? // GO(SDL_Vulkan_UnloadLibrary, vFv) // GO(SDL_WaitEvent, iFp) -// GO(SDL_WaitEventTimeout, iFpi) +GOM(SDL_WaitEventTimeout, iFpi) //%noE // GO(SDL_WaitThread, vFpp) GO(SDL_WarpMouseGlobal, iFii) GO(SDL_WarpMouseInWindow, vFpii) @@ -739,7 +739,7 @@ GO(SDL_WasInit, uFu) // GO2(SDL_mutexV, iFp, SDL_UnlockMutex) GO(SDL_doesntexist, IFpIi) - +GOM(SDL_notreal, pFEpi) // GOM(SDL_IsJoystickPS4, iFEWW) // GOM(SDL_IsJoystickNintendoSwitchPro, iFEWW) // GOM(SDL_IsJoystickSteamController, iFEWW) |