about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-29 21:10:54 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-29 21:10:54 +0200
commit874238f61eeefa52a2feda292882e0d0b0a200c3 (patch)
treeb69486fdf2288b570fd4e0ef984989f5c79f5aa2 /src/libtools
parent9968963b971de4123ceb8e12d4434eb808ac3333 (diff)
downloadbox64-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.c65
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);