diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-29 21:10:54 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-29 21:10:54 +0200 |
| commit | 874238f61eeefa52a2feda292882e0d0b0a200c3 (patch) | |
| tree | b69486fdf2288b570fd4e0ef984989f5c79f5aa2 /src/libtools | |
| parent | 9968963b971de4123ceb8e12d4434eb808ac3333 (diff) | |
| download | box64-874238f61eeefa52a2feda292882e0d0b0a200c3.tar.gz box64-874238f61eeefa52a2feda292882e0d0b0a200c3.zip | |
[BOX32][WRAPPER] Added more SDL2 and freetype function, and fixed missing fonts in many games ([BOX64] also fixed some SDL2 signature on RWops)
Diffstat (limited to 'src/libtools')
| -rw-r--r-- | src/libtools/sdl2rwops.c | 65 |
1 files changed, 60 insertions, 5 deletions
diff --git a/src/libtools/sdl2rwops.c b/src/libtools/sdl2rwops.c index d7d2f34c..54d1ee1a 100644 --- a/src/libtools/sdl2rwops.c +++ b/src/libtools/sdl2rwops.c @@ -55,6 +55,12 @@ typedef struct SDL2_RWops_s { SDL2_RWops_t *orig; sdl2_freerw custom_free; } my; + #ifdef BOX32 + struct { + my_SDL2_RWops_32_t *orig; + sdl2_freerw custom_free; + } my32; + #endif } hidden; } SDL2_RWops_t; @@ -87,7 +93,7 @@ EXPORT int64_t my2_native_size(SDL2_RWops_t *context) #ifdef BOX32 if(box64_is32bits) { inplace_SDL2_RWops_to_64(context); - int ret = context->hidden.my.orig->size(context->hidden.my.orig); + int64_t ret = context->hidden.my.orig->size(context->hidden.my.orig); inplace_SDL2_RWops_to_32(context); return ret; } @@ -99,7 +105,7 @@ EXPORT int64_t my2_native_seek(SDL2_RWops_t *context, int64_t offset, int32_t wh #ifdef BOX32 if(box64_is32bits) { inplace_SDL2_RWops_to_64(context); - int ret = context->hidden.my.orig->seek(context->hidden.my.orig, offset, whence); + int64_t ret = context->hidden.my.orig->seek(context->hidden.my.orig, offset, whence); inplace_SDL2_RWops_to_32(context); return ret; } @@ -111,7 +117,7 @@ EXPORT size_t my2_native_read(SDL2_RWops_t *context, void *ptr, size_t size, siz #ifdef BOX32 if(box64_is32bits) { inplace_SDL2_RWops_to_64(context); - int ret = context->hidden.my.orig->read(context->hidden.my.orig, ptr, size, maxnum); + size_t ret = context->hidden.my.orig->read(context->hidden.my.orig, ptr, size, maxnum); inplace_SDL2_RWops_to_32(context); return ret; } @@ -123,7 +129,7 @@ EXPORT size_t my2_native_write(SDL2_RWops_t *context, const void *ptr, size_t si #ifdef BOX32 if(box64_is32bits) { inplace_SDL2_RWops_to_64(context); - int ret = context->hidden.my.orig->write(context->hidden.my.orig, ptr, size, num); + size_t ret = context->hidden.my.orig->write(context->hidden.my.orig, ptr, size, num); inplace_SDL2_RWops_to_32(context); return ret; } @@ -143,23 +149,68 @@ EXPORT int32_t my2_native_close(SDL2_RWops_t *context) } EXPORT int64_t my2_emulated_size(SDL2_RWops_t *context) { + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->size) == my2_native_size) + return my2_native_size(context->hidden.my.orig); + uintptr_t f = context->hidden.my32.orig->size; + int64_t ret = (int64_t)RunFunctionFmt(f, "p", context->hidden.my32.orig); + return ret; + } + #endif return (int64_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->size, "p", context->hidden.my.orig); } EXPORT int64_t my2_emulated_seek(SDL2_RWops_t *context, int64_t offset, int32_t whence) { + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->seek) == my2_native_seek) + return my2_native_seek(context->hidden.my.orig, offset, whence); + uintptr_t f = context->hidden.my32.orig->seek; + int64_t ret = (int64_t)RunFunctionFmt(f, "pIi", context->hidden.my32.orig, offset, whence); + return ret; + } + #endif return (int64_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->seek, "pIi", context->hidden.my.orig, offset, whence); } EXPORT size_t my2_emulated_read(SDL2_RWops_t *context, void *ptr, size_t size, size_t maxnum) { + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->read) == my2_native_read) + return my2_native_read(context->hidden.my.orig, ptr, size, maxnum); + uintptr_t f = context->hidden.my32.orig->read; + size_t ret = (size_t)RunFunctionFmt(f, "ppLL", context->hidden.my32.orig, ptr, size, maxnum); + return ret; + } + #endif return (size_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->read, "ppLL", context->hidden.my.orig, ptr, size, maxnum); } EXPORT size_t my2_emulated_write(SDL2_RWops_t *context, const void *ptr, size_t size, size_t num) { + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->write) == my2_native_write) + return my2_native_write(context->hidden.my.orig, ptr, size, num); + uintptr_t f = context->hidden.my32.orig->write; + size_t ret = (size_t)RunFunctionFmt(f, "ppLL", context->hidden.my32.orig, ptr, size, num); + return ret; + } + #endif return (size_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->write, "ppLL", context->hidden.my.orig, ptr, size, num); } EXPORT int32_t my2_emulated_close(SDL2_RWops_t *context) { - int ret = (int32_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->close, "p", context->hidden.my.orig); + int ret = 0; + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->close) == my2_native_close) + return my2_native_close(context->hidden.my.orig); + uintptr_t f = context->hidden.my32.orig->close; + ret = (size_t)RunFunctionFmt(f, "p", context->hidden.my32.orig); + } else + #endif + ret = (int32_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->close, "p", context->hidden.my.orig); context->hidden.my.custom_free(context); return ret; } @@ -276,6 +327,10 @@ int64_t RWNativeSeek2(SDL2_RWops_t *ops, int64_t offset, int32_t whence) { return ops->seek(ops, offset, whence); } +int64_t RWNativeSize2(SDL2_RWops_t *ops) +{ + return ops->size(ops); +} size_t RWNativeRead2(SDL2_RWops_t* ops, void* ptr, size_t size, size_t maxnum) { return ops->read(ops, ptr, size, maxnum); |