diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-10-08 16:20:41 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-10-08 16:20:41 +0200 |
| commit | a029fca7bdfb656ce0ee103429dc7e71e3c36992 (patch) | |
| tree | 1fc290ca7a7dfa2a9ced7f8e711cbf48bb40f355 /src | |
| parent | 3cfe54f8cf7bb3c66b5b95cd3de4865f307b4b5b (diff) | |
| download | box64-a029fca7bdfb656ce0ee103429dc7e71e3c36992.tar.gz box64-a029fca7bdfb656ce0ee103429dc7e71e3c36992.zip | |
[BOX32][WRAPPER] more 32bits wrapped function to libxrandr
Diffstat (limited to 'src')
| -rw-r--r-- | src/libtools/my_x11_conv.c | 53 | ||||
| -rw-r--r-- | src/libtools/my_x11_conv.h | 3 | ||||
| -rw-r--r-- | src/libtools/my_x11_defs.h | 15 | ||||
| -rw-r--r-- | src/libtools/my_x11_defs_32.h | 15 | ||||
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 4 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibxrandrtypes32.h | 3 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.c | 2 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.h | 1 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibxrandr.c | 14 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibxrandr_private.h | 4 |
10 files changed, 112 insertions, 2 deletions
diff --git a/src/libtools/my_x11_conv.c b/src/libtools/my_x11_conv.c index 816f9b9b..7a26313b 100644 --- a/src/libtools/my_x11_conv.c +++ b/src/libtools/my_x11_conv.c @@ -1439,3 +1439,56 @@ void* inplace_XFilters_enlarge(void* a) } return a; } + +void* inplace_XRRMonitorInfo_shrink(void* a, int n) +{ + if(a) { + my_XRRMonitorInfo_t* src = a; + my_XRRMonitorInfo_32_t* dst = a; + for(int i=0; i<n; ++i) { + for(int j=0; j<src->noutput; ++j) + ((ulong_t*)src->outputs)[j] = to_ulong(src->outputs[j]); + dst->name = to_ulong(src->name); + dst->primary = src->primary; + dst->automatic = src->automatic; + dst->noutput = src->noutput; + dst->x = src->x; + dst->y = src->y; + dst->width = src->width; + dst->height = src->height; + dst->mwidth = src->mwidth; + dst->mheight = src->mheight; + dst->outputs = to_ptrv(src->outputs); + src++; + dst++; + } + src->name = 0; // mark the last record... + } + return a; +} + +void* inplace_XRRMonitorInfo_enlarge(void* a, int n) +{ + if(a) { + my_XRRMonitorInfo_32_t* src = a; + my_XRRMonitorInfo_t* dst = a; + for(int i=0; i<n; ++i) { + dst->name = from_ulong(src->name); + dst->primary = src->primary; + dst->automatic = src->automatic; + dst->noutput = src->noutput; + dst->x = src->x; + dst->y = src->y; + dst->width = src->width; + dst->height = src->height; + dst->mwidth = src->mwidth; + dst->mheight = src->mheight; + dst->outputs = from_ptrv(src->outputs); + for(int j=dst->noutput-1; j>=0; --j) + ((unsigned long*)dst->outputs)[j] = from_ulong(dst->outputs[j]); + src++; + dst++; + } + } + return a; +} diff --git a/src/libtools/my_x11_conv.h b/src/libtools/my_x11_conv.h index 01596f78..0d9fd314 100644 --- a/src/libtools/my_x11_conv.h +++ b/src/libtools/my_x11_conv.h @@ -116,4 +116,7 @@ void* inplace_XDeviceInfo_enlarge(void* a); void* inplace_XFilters_shrink(void* a); void* inplace_XFilters_enlarge(void* a); +void* inplace_XRRMonitorInfo_shrink(void* a, int n); +void* inplace_XRRMonitorInfo_enlarge(void* a, int n); + #endif//MY_X11_CONV \ No newline at end of file diff --git a/src/libtools/my_x11_defs.h b/src/libtools/my_x11_defs.h index b2b64dad..a0f87321 100644 --- a/src/libtools/my_x11_defs.h +++ b/src/libtools/my_x11_defs.h @@ -1472,4 +1472,19 @@ typedef struct my_XFilters_s { short *alias; } my_XFilters_t; +typedef struct my__XRRMonitorInfo_s { + XID name; + int primary; + int automatic; + int noutput; + int x; + int y; + int width; + int height; + int mwidth; + int mheight; + XID* outputs; +} my_XRRMonitorInfo_t; + + #endif//MY_X11_DEFS \ No newline at end of file diff --git a/src/libtools/my_x11_defs_32.h b/src/libtools/my_x11_defs_32.h index 5d596485..0f24a865 100644 --- a/src/libtools/my_x11_defs_32.h +++ b/src/libtools/my_x11_defs_32.h @@ -1414,4 +1414,19 @@ typedef struct my_XFilters_32_s { ptr_t alias; //short * } my_XFilters_32_t; +typedef struct my__XRRMonitorInfo_32_s { + XID_32 name; + int primary; + int automatic; + int noutput; + int x; + int y; + int width; + int height; + int mwidth; + int mheight; + ptr_t outputs; //XID* +} my_XRRMonitorInfo_32_t; + + #endif//MY_X11_DEFS_32 \ No newline at end of file diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt index cc18d84f..22b7296b 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -1506,6 +1506,7 @@ #() pFEXipp -> pFEXipp #() pFEXCip -> pFEXCip #() pFEXlpp -> pFEXlpp +#() pFEXLip -> pFEXLip #() pFEXpip -> pFEXpip #() pFEXppi -> pFEXppi #() pFuiupp -> pFuiupp @@ -3260,6 +3261,7 @@ wrappedlibxi: - XGrabDevice wrappedlibxrandr: - vFp: + - XRRFreeMonitors - XRRFreeProviderInfo - XRRFreeProviderResources - iFp: @@ -3281,6 +3283,8 @@ wrappedlibxrandr: - XRRGetProviderInfo - iFXpLp: - XRRSetPanning +- pFXLip: + - XRRGetMonitors - iFXpLLiiLWpi: - XRRSetCrtcConfig wrappedlibxrender: diff --git a/src/wrapped32/generated/wrappedlibxrandrtypes32.h b/src/wrapped32/generated/wrappedlibxrandrtypes32.h index efaa1d1d..f17bd9d9 100644 --- a/src/wrapped32/generated/wrappedlibxrandrtypes32.h +++ b/src/wrapped32/generated/wrappedlibxrandrtypes32.h @@ -19,9 +19,11 @@ typedef void* (*pFXLL_t)(void*, uintptr_t, uintptr_t); typedef void* (*pFXLp_t)(void*, uintptr_t, void*); typedef void* (*pFXpL_t)(void*, void*, uintptr_t); typedef int32_t (*iFXpLp_t)(void*, void*, uintptr_t, void*); +typedef void* (*pFXLip_t)(void*, uintptr_t, int32_t, void*); typedef int32_t (*iFXpLLiiLWpi_t)(void*, void*, uintptr_t, uintptr_t, int32_t, int32_t, uintptr_t, uint16_t, void*, int32_t); #define SUPER() ADDED_FUNCTIONS() \ + GO(XRRFreeMonitors, vFp_t) \ GO(XRRFreeProviderInfo, vFp_t) \ GO(XRRFreeProviderResources, vFp_t) \ GO(XRRUpdateConfiguration, iFp_t) \ @@ -36,6 +38,7 @@ typedef int32_t (*iFXpLLiiLWpi_t)(void*, void*, uintptr_t, uintptr_t, int32_t, i GO(XRRGetPanning, pFXpL_t) \ GO(XRRGetProviderInfo, pFXpL_t) \ GO(XRRSetPanning, iFXpLp_t) \ + GO(XRRGetMonitors, pFXLip_t) \ GO(XRRSetCrtcConfig, iFXpLLiiLWpi_t) #endif // __wrappedlibxrandrTYPES32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index 0139b26b..96413f89 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -1600,6 +1600,7 @@ typedef void* (*pFEpnup_t)(x64emu_t*, void*, void*, uint32_t, void*); typedef void* (*pFEXipp_t)(x64emu_t*, void*, int32_t, void*, void*); typedef void* (*pFEXCip_t)(x64emu_t*, void*, uint8_t, int32_t, void*); typedef void* (*pFEXlpp_t)(x64emu_t*, void*, intptr_t, void*, void*); +typedef void* (*pFEXLip_t)(x64emu_t*, void*, uintptr_t, int32_t, void*); typedef void* (*pFEXpip_t)(x64emu_t*, void*, void*, int32_t, void*); typedef void* (*pFEXppi_t)(x64emu_t*, void*, void*, void*, int32_t); typedef void* (*pFuiupp_t)(uint32_t, int32_t, uint32_t, void*, void*); @@ -3769,6 +3770,7 @@ void pFEpnup_32(x64emu_t *emu, uintptr_t fcn) { pFEpnup_t fn = (pFEpnup_t)fcn; v void pFEXipp_32(x64emu_t *emu, uintptr_t fcn) { pFEXipp_t fn = (pFEXipp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFEXCip_32(x64emu_t *emu, uintptr_t fcn) { pFEXCip_t fn = (pFEXCip_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint8_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFEXlpp_32(x64emu_t *emu, uintptr_t fcn) { pFEXlpp_t fn = (pFEXlpp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFEXLip_32(x64emu_t *emu, uintptr_t fcn) { pFEXLip_t fn = (pFEXLip_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFEXpip_32(x64emu_t *emu, uintptr_t fcn) { pFEXpip_t fn = (pFEXpip_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFEXppi_32(x64emu_t *emu, uintptr_t fcn) { pFEXppi_t fn = (pFEXppi_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16))); } void pFuiupp_32(x64emu_t *emu, uintptr_t fcn) { pFuiupp_t fn = (pFuiupp_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20))); } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index 59e28768..40fe80a0 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -1547,6 +1547,7 @@ void pFEpnup_32(x64emu_t *emu, uintptr_t fnc); void pFEXipp_32(x64emu_t *emu, uintptr_t fnc); void pFEXCip_32(x64emu_t *emu, uintptr_t fnc); void pFEXlpp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXLip_32(x64emu_t *emu, uintptr_t fnc); void pFEXpip_32(x64emu_t *emu, uintptr_t fnc); void pFEXppi_32(x64emu_t *emu, uintptr_t fnc); void pFuiupp_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedlibxrandr.c b/src/wrapped32/wrappedlibxrandr.c index 80079554..dfc60b56 100644 --- a/src/wrapped32/wrappedlibxrandr.c +++ b/src/wrapped32/wrappedlibxrandr.c @@ -166,6 +166,20 @@ EXPORT int my32_XRRUpdateConfiguration(x64emu_t* emu, my_XEvent_32_t* evt) return my->XRRUpdateConfiguration(&evt_l); } +EXPORT void* my32_XRRGetMonitors(x64emu_t* emu, void* dpy, XID window, int get_active, int* nmonitors) +{ + void* ret = my->XRRGetMonitors(dpy, window, get_active, nmonitors); + return inplace_XRRMonitorInfo_shrink(ret, *nmonitors); +} + +EXPORT void my32_XRRFreeMonitors(x64emu_t* emu, void* monitors) +{ + if(!monitors) return; + int n = 0; + while(((my_XRRMonitorInfo_32_t*)monitors)[n].name) ++n; + my->XRRFreeMonitors(inplace_XRRMonitorInfo_enlarge(monitors, n)); +} + #ifdef ANDROID #define NEEDED_LIBS "libX11.so", "libXext.so", "libXrender.so" #else diff --git a/src/wrapped32/wrappedlibxrandr_private.h b/src/wrapped32/wrappedlibxrandr_private.h index a2611c5c..925cdf66 100644 --- a/src/wrapped32/wrappedlibxrandr_private.h +++ b/src/wrapped32/wrappedlibxrandr_private.h @@ -68,6 +68,6 @@ GO(XRRDeleteOutputMode, vFXLL) GOM(XRRGetOutputInfo, pFEXpL) GO(XRRConfigureProviderProperty, vFXLLiiibl_) //GO(XRRAllocateMonitor, bLiiiiiiiiibL__FXi) -//GO(XRRGetMonitors, bLiiiiiiiiibL__FXLip) +GOM(XRRGetMonitors, pFEXLip) //GO(XRRSetMonitor, vFXLbLiiiiiiiiibL__) -//GO(XRRFreeMonitors, vFbLiiiiiiiiibL__) +GOM(XRRFreeMonitors, vFEp) |