diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-08-03 09:50:10 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-08-03 09:50:10 +0200 |
| commit | 2d321bbd335a2d0b21f4389f61ffcd2307d3aee4 (patch) | |
| tree | 6944a31f9f7f02d8355fa1d898cfc20afb6fc92a /src | |
| parent | 5b5f7c133e83b0f71c86850565c249ab5723aae0 (diff) | |
| download | box64-2d321bbd335a2d0b21f4389f61ffcd2307d3aee4.tar.gz box64-2d321bbd335a2d0b21f4389f61ffcd2307d3aee4.zip | |
Added 4 more libXt wrapped functions
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 6 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibxttypes.h | 6 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 2 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibxt.c | 68 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibxt_private.h | 8 |
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) |