about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-08-03 09:50:10 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-08-03 09:50:10 +0200
commit2d321bbd335a2d0b21f4389f61ffcd2307d3aee4 (patch)
tree6944a31f9f7f02d8355fa1d898cfc20afb6fc92a /src
parent5b5f7c133e83b0f71c86850565c249ab5723aae0 (diff)
downloadbox64-2d321bbd335a2d0b21f4389f61ffcd2307d3aee4.tar.gz
box64-2d321bbd335a2d0b21f4389f61ffcd2307d3aee4.zip
Added 4 more libXt wrapped functions
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt6
-rw-r--r--src/wrapped/generated/wrappedlibxttypes.h6
-rw-r--r--src/wrapped/generated/wrapper.c4
-rw-r--r--src/wrapped/generated/wrapper.h2
-rwxr-xr-xsrc/wrapped/wrappedlibxt.c68
-rwxr-xr-xsrc/wrapped/wrappedlibxt_private.h8
6 files changed, 87 insertions, 7 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 382a0f9d..d5deed0a 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -661,6 +661,7 @@
 #() UFppip
 #() lFEpip
 #() lFEppL
+#() lFEppp
 #() lFiiLu
 #() lFiipL
 #() lFipil
@@ -1113,6 +1114,7 @@
 #() uFpppppi
 #() uFpppppp
 #() UFpippup
+#() lFEpippp
 #() lFipipLu
 #() lFipLipu
 #() lFipLipp
@@ -2134,8 +2136,12 @@ wrappedlibxrandr:
 wrappedlibxrender:
 wrappedlibxss:
 wrappedlibxt:
+- lFppp:
+  - XtAppAddWorkProc
 - vFpuipp:
   - XtAddEventHandler
+- lFpippp:
+  - XtAppAddInput
 wrappedlibxtst:
 - iFpppp:
   - XRecordEnableContext
diff --git a/src/wrapped/generated/wrappedlibxttypes.h b/src/wrapped/generated/wrappedlibxttypes.h
index 7abc4352..f794f36f 100644
--- a/src/wrapped/generated/wrappedlibxttypes.h
+++ b/src/wrapped/generated/wrappedlibxttypes.h
@@ -11,9 +11,13 @@
 #define ADDED_FUNCTIONS() 
 #endif
 
+typedef intptr_t (*lFppp_t)(void*, void*, void*);
 typedef void (*vFpuipp_t)(void*, uint64_t, int64_t, void*, void*);
+typedef intptr_t (*lFpippp_t)(void*, int64_t, void*, void*, void*);
 
 #define SUPER() ADDED_FUNCTIONS() \
-	GO(XtAddEventHandler, vFpuipp_t)
+	GO(XtAppAddWorkProc, lFppp_t) \
+	GO(XtAddEventHandler, vFpuipp_t) \
+	GO(XtAppAddInput, lFpippp_t)
 
 #endif // __wrappedlibxtTYPES_H_
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 3954ae25..201e99e6 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -695,6 +695,7 @@ typedef uint64_t (*UFpipp_t)(void*, int64_t, void*, void*);
 typedef uint64_t (*UFppip_t)(void*, void*, int64_t, void*);
 typedef intptr_t (*lFEpip_t)(x64emu_t*, void*, int64_t, void*);
 typedef intptr_t (*lFEppL_t)(x64emu_t*, void*, void*, uintptr_t);
+typedef intptr_t (*lFEppp_t)(x64emu_t*, void*, void*, void*);
 typedef intptr_t (*lFiiLu_t)(int64_t, int64_t, uintptr_t, uint64_t);
 typedef intptr_t (*lFiipL_t)(int64_t, int64_t, void*, uintptr_t);
 typedef intptr_t (*lFipil_t)(int64_t, void*, int64_t, intptr_t);
@@ -1147,6 +1148,7 @@ typedef uint64_t (*uFpuippp_t)(void*, uint64_t, int64_t, void*, void*, void*);
 typedef uint64_t (*uFpppppi_t)(void*, void*, void*, void*, void*, int64_t);
 typedef uint64_t (*uFpppppp_t)(void*, void*, void*, void*, void*, void*);
 typedef uint64_t (*UFpippup_t)(void*, int64_t, void*, void*, uint64_t, void*);
+typedef intptr_t (*lFEpippp_t)(x64emu_t*, void*, int64_t, void*, void*, void*);
 typedef intptr_t (*lFipipLu_t)(int64_t, void*, int64_t, void*, uintptr_t, uint64_t);
 typedef intptr_t (*lFipLipu_t)(int64_t, void*, uintptr_t, int64_t, void*, uint64_t);
 typedef intptr_t (*lFipLipp_t)(int64_t, void*, uintptr_t, int64_t, void*, void*);
@@ -2217,6 +2219,7 @@ void UFpipp(x64emu_t *emu, uintptr_t fcn) { UFpipp_t fn = (UFpipp_t)fcn; R_RAX=f
 void UFppip(x64emu_t *emu, uintptr_t fcn) { UFppip_t fn = (UFppip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX); }
 void lFEpip(x64emu_t *emu, uintptr_t fcn) { lFEpip_t fn = (lFEpip_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX); }
 void lFEppL(x64emu_t *emu, uintptr_t fcn) { lFEppL_t fn = (lFEppL_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); }
+void lFEppp(x64emu_t *emu, uintptr_t fcn) { lFEppp_t fn = (lFEppp_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); }
 void lFiiLu(x64emu_t *emu, uintptr_t fcn) { lFiiLu_t fn = (lFiiLu_t)fcn; R_RAX=(intptr_t)fn((int64_t)R_RDI, (int64_t)R_RSI, (uintptr_t)R_RDX, (uint64_t)R_RCX); }
 void lFiipL(x64emu_t *emu, uintptr_t fcn) { lFiipL_t fn = (lFiipL_t)fcn; R_RAX=(intptr_t)fn((int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); }
 void lFipil(x64emu_t *emu, uintptr_t fcn) { lFipil_t fn = (lFipil_t)fcn; R_RAX=(intptr_t)fn((int64_t)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (intptr_t)R_RCX); }
@@ -2669,6 +2672,7 @@ void uFpuippp(x64emu_t *emu, uintptr_t fcn) { uFpuippp_t fn = (uFpuippp_t)fcn; R
 void uFpppppi(x64emu_t *emu, uintptr_t fcn) { uFpppppi_t fn = (uFpppppi_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int64_t)R_R9); }
 void uFpppppp(x64emu_t *emu, uintptr_t fcn) { uFpppppp_t fn = (uFpppppp_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); }
 void UFpippup(x64emu_t *emu, uintptr_t fcn) { UFpippup_t fn = (UFpippup_t)fcn; R_RAX=fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint64_t)R_R8, (void*)R_R9); }
+void lFEpippp(x64emu_t *emu, uintptr_t fcn) { lFEpippp_t fn = (lFEpippp_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void lFipipLu(x64emu_t *emu, uintptr_t fcn) { lFipipLu_t fn = (lFipipLu_t)fcn; R_RAX=(intptr_t)fn((int64_t)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uint64_t)R_R9); }
 void lFipLipu(x64emu_t *emu, uintptr_t fcn) { lFipLipu_t fn = (lFipLipu_t)fcn; R_RAX=(intptr_t)fn((int64_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int64_t)R_RCX, (void*)R_R8, (uint64_t)R_R9); }
 void lFipLipp(x64emu_t *emu, uintptr_t fcn) { lFipLipp_t fn = (lFipLipp_t)fcn; R_RAX=(intptr_t)fn((int64_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int64_t)R_RCX, (void*)R_R8, (void*)R_R9); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index e3d5f0b2..9e9b92ee 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -694,6 +694,7 @@ void UFpipp(x64emu_t *emu, uintptr_t fnc);
 void UFppip(x64emu_t *emu, uintptr_t fnc);
 void lFEpip(x64emu_t *emu, uintptr_t fnc);
 void lFEppL(x64emu_t *emu, uintptr_t fnc);
+void lFEppp(x64emu_t *emu, uintptr_t fnc);
 void lFiiLu(x64emu_t *emu, uintptr_t fnc);
 void lFiipL(x64emu_t *emu, uintptr_t fnc);
 void lFipil(x64emu_t *emu, uintptr_t fnc);
@@ -1146,6 +1147,7 @@ void uFpuippp(x64emu_t *emu, uintptr_t fnc);
 void uFpppppi(x64emu_t *emu, uintptr_t fnc);
 void uFpppppp(x64emu_t *emu, uintptr_t fnc);
 void UFpippup(x64emu_t *emu, uintptr_t fnc);
+void lFEpippp(x64emu_t *emu, uintptr_t fnc);
 void lFipipLu(x64emu_t *emu, uintptr_t fnc);
 void lFipLipu(x64emu_t *emu, uintptr_t fnc);
 void lFipLipp(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedlibxt.c b/src/wrapped/wrappedlibxt.c
index f35265e9..d432e50a 100755
--- a/src/wrapped/wrappedlibxt.c
+++ b/src/wrapped/wrappedlibxt.c
@@ -29,8 +29,10 @@ typedef struct libxt_my_s {
     #undef GO
 } libxt_my_t;
 
+static library_t* my_lib = NULL;
 void* getXtMy(library_t* lib)
 {
+    my_lib = lib;
     libxt_my_t* my = (libxt_my_t*)calloc(1, sizeof(libxt_my_t));
     #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A);
     SUPER()
@@ -41,6 +43,7 @@ void* getXtMy(library_t* lib)
 
 void freeXtMy(void* lib)
 {
+    my_lib = NULL;
     (void)lib;
     //libxt_my_t *my = (libxt_my_t *)lib;
 }
@@ -55,6 +58,7 @@ GO(5)   \
 GO(6)   \
 GO(7)
 
+// Event
 #define GO(A)   \
 static uintptr_t my_Event_fct_##A = 0;   \
 static void my_Event_##A(void* w, void* data, void* event)     \
@@ -66,6 +70,7 @@ SUPER()
 static void* findEventFct(void* fct)
 {
     if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
     #define GO(A) if(my_Event_fct_##A == (uintptr_t)fct) return my_Event_##A;
     SUPER()
     #undef GO
@@ -75,6 +80,50 @@ static void* findEventFct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for libXt Event callback\n");
     return NULL;
 }
+// WorkProc
+#define GO(A)   \
+static uintptr_t my_WorkProc_fct_##A = 0;   \
+static int my_WorkProc_##A(void* p)         \
+{                                           \
+    return (int)RunFunction(my_context, my_WorkProc_fct_##A, 1, p);\
+}
+SUPER()
+#undef GO
+static void* findWorkProcFct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_WorkProc_fct_##A == (uintptr_t)fct) return my_WorkProc_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_WorkProc_fct_##A == 0) {my_WorkProc_fct_##A = (uintptr_t)fct; return my_WorkProc_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libXt WorkProc callback\n");
+    return NULL;
+}
+// InputCallback
+#define GO(A)   \
+static uintptr_t my_InputCallback_fct_##A = 0;                      \
+static void my_InputCallback_##A(void* p, void* s, void* id)        \
+{                                                                   \
+    RunFunction(my_context, my_InputCallback_fct_##A, 3, p, s, id); \
+}
+SUPER()
+#undef GO
+static void* findInputCallbackFct(void* fct)
+{
+    if(!fct) return NULL;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_InputCallback_fct_##A == (uintptr_t)fct) return my_InputCallback_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_InputCallback_fct_##A == 0) {my_InputCallback_fct_##A = (uintptr_t)fct; return my_InputCallback_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libXt InputCallback callback\n");
+    return NULL;
+}
 #undef SUPER
 
 
@@ -82,12 +131,27 @@ EXPORT void my_XtAddEventHandler(x64emu_t* emu, void* w, uint32_t mask, int32_t
 {
     (void)emu;
     void* fct = findEventFct(cb);
-    library_t* lib = GetLibInternal(libxtName);
-    libxt_my_t* my = (libxt_my_t*)lib->priv.w.p2;
+    libxt_my_t* my = (libxt_my_t*)my_lib->priv.w.p2;
 
     my->XtAddEventHandler(w, mask, maskable, fct, data);
 }
 
+EXPORT long my_XtAppAddWorkProc(x64emu_t* emu, void* context, void* proc, void* data)
+{
+    (void)emu;
+    libxt_my_t* my = (libxt_my_t*)my_lib->priv.w.p2;
+
+    return my->XtAppAddWorkProc(context, findWorkProcFct(proc), data);
+}
+
+EXPORT long my_XtAppAddInput(x64emu_t* emu, void* context, int source, void* cond, void* proc, void* data)
+{
+    (void)emu;
+    libxt_my_t* my = (libxt_my_t*)my_lib->priv.w.p2;
+
+    return my->XtAppAddInput(context, source, cond, findInputCallbackFct(proc), data);
+}
+
 #define CUSTOM_INIT \
     lib->priv.w.p2 = getXtMy(lib);   \
     lib->priv.w.needed = 2; \
diff --git a/src/wrapped/wrappedlibxt_private.h b/src/wrapped/wrappedlibxt_private.h
index 904c6645..68139c5e 100755
--- a/src/wrapped/wrappedlibxt_private.h
+++ b/src/wrapped/wrappedlibxt_private.h
@@ -28,10 +28,10 @@ GOM(XtAddEventHandler, vFEpuipp)
 //GO(XtAppAddActions, 
 //GO(XtAppAddBlockHook, 
 //GO(XtAppAddConverter, 
-//GO(XtAppAddInput, 
+GOM(XtAppAddInput, lFEpippp)
 //GO(XtAppAddSignal, 
 //GO(XtAppAddTimeOut, 
-//GO(XtAppAddWorkProc, 
+GOM(XtAppAddWorkProc, lFEppp)
 GO(XtAppCreateShell, pFpppppu)
 //GO(_XtAppCreateShell, 
 //GO(XtAppError, 
@@ -345,13 +345,13 @@ GO(XtRegisterDrawable, vFppp)
 GO(XtRemoveEventHandler, vFpup)     // need to wrap to free event handler?
 //GO(XtRemoveEventTypeHandler, 
 //GO(XtRemoveGrab, 
-//GO(XtRemoveInput, 
+GO(XtRemoveInput, vFl)
 //GO(XtRemoveRawEventHandler, 
 //GO(XtRemoveSignal, 
 //GO(_XtRemoveStateTreeByIndex, 
 GO(XtRemoveTimeOut, vFp)
 //GO(_XtRemoveTranslations, 
-//GO(XtRemoveWorkProc, 
+GO(XtRemoveWorkProc, vFl)
 //GO(XtReservePropertyAtom, 
 GO(XtResizeWidget, vFpuuu)
 GO(XtResizeWindow, vFp)