diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-10-10 19:20:09 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-10-10 19:20:29 +0200 |
| commit | 1f6ce24eaaa90353789817bd7d32b89af5e5f86a (patch) | |
| tree | 5a771f55f1631bd6db5a318bf941c2972dd5bd1d /src | |
| parent | 4a82f21cc3e7ca2a4c9b2518f82846e61e5bacfe (diff) | |
| download | box64-1f6ce24eaaa90353789817bd7d32b89af5e5f86a.tar.gz box64-1f6ce24eaaa90353789817bd7d32b89af5e5f86a.zip | |
[BOX32] Added and fixed some 32bits functions for libX11 and friends
Diffstat (limited to 'src')
| -rw-r--r-- | src/libtools/my_x11_conv.c | 227 | ||||
| -rw-r--r-- | src/libtools/my_x11_conv.h | 12 | ||||
| -rw-r--r-- | src/libtools/my_x11_defs.h | 8 | ||||
| -rw-r--r-- | src/libtools/my_x11_defs_32.h | 8 | ||||
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 12 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibx11types32.h | 5 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibxrandrtypes32.h | 4 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.c | 6 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.h | 3 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibx11.c | 49 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibx11_private.h | 6 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibxrandr.c | 228 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibxrandr_private.h | 4 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibxxf86vm_private.h | 2 |
14 files changed, 346 insertions, 228 deletions
diff --git a/src/libtools/my_x11_conv.c b/src/libtools/my_x11_conv.c index 6b5cd549..4ff5b4ae 100644 --- a/src/libtools/my_x11_conv.c +++ b/src/libtools/my_x11_conv.c @@ -1022,3 +1022,230 @@ void* inplace_XImage_enlarge(void* a) UnwrapXImage(a, a); return a; } + +void convert_XRRModeInfo_to_32(void* d, const void* s) +{ + my_XRRModeInfo_32_t *dst = d; + const my_XRRModeInfo_t *src = s; + dst->id = to_ulong(src->id); + dst->width = src->width; + dst->height = src->height; + dst->dotClock = to_ulong(src->dotClock); + dst->hSyncStart = src->hSyncStart; + dst->hSyncEnd = src->hSyncEnd; + dst->hTotal = src->hTotal; + dst->hSkew = src->hSkew; + dst->vSyncStart = src->vSyncStart; + dst->vSyncEnd = src->vSyncEnd; + dst->vTotal = src->vTotal; + dst->name = to_ptrv(src->name); + dst->nameLength = src->nameLength; + dst->modeFlags = to_ulong(src->modeFlags); +} + +void convert_XRRModeInfo_to_64(void* d, const void* s) +{ + my_XRRModeInfo_t *dst = d; + const my_XRRModeInfo_32_t *src = s; + dst->modeFlags = from_ulong(src->modeFlags); + dst->nameLength = src->nameLength; + dst->name = from_ptrv(src->name); + dst->vTotal = src->vTotal; + dst->vSyncEnd = src->vSyncEnd; + dst->vSyncStart = src->vSyncStart; + dst->hSkew = src->hSkew; + dst->hTotal = src->hTotal; + dst->hSyncEnd = src->hSyncEnd; + dst->hSyncStart = src->hSyncStart; + dst->dotClock = from_ulong(src->dotClock); + dst->height = src->height; + dst->width = src->width; + dst->id = from_ulong(src->id); +} + +void inplace_XRRScreenResources_shrink(void* s) +{ + if(!s) return; + my_XRRScreenResources_32_t *dst = s; + my_XRRScreenResources_t *src = s; + // shrinking, so forward... + dst->timestamp = to_ulong(src->timestamp); + dst->configTimestamp = to_ulong(src->configTimestamp); + dst->ncrtc = src->ncrtc; + for(int i=0; i<dst->ncrtc; ++i) + ((XID_32*)src->crtcs)[i] = to_ulong(src->crtcs[i]); + dst->crtcs = to_ptrv(src->crtcs); + dst->noutput = src->noutput; + for(int i=0; i<dst->noutput; ++i) + ((XID_32*)src->outputs)[i] = to_ulong(src->outputs[i]); + dst->outputs = to_ptrv(src->outputs); + dst->nmode = src->nmode; + for(int i=0; i<dst->noutput; ++i) + convert_XRRModeInfo_to_32(&((my_XRRModeInfo_32_t*)src->modes)[i], &src->modes[i]); + dst->modes = to_ptrv(src->modes); +} + +void inplace_XRRScreenResources_enlarge(void* s) +{ + if(!s) return; + my_XRRScreenResources_t *dst = s; + my_XRRScreenResources_32_t *src = s; + // enlarge, so backward... + int nmode = src->nmode; + int noutput = src->noutput; + int ncrtc = src->ncrtc; + dst->modes = from_ptrv(src->modes); + for(int i=nmode-1; i>=0; --i) + convert_XRRModeInfo_to_64(&dst->modes[i], &((my_XRRModeInfo_32_t*)dst->modes)[i]); + dst->nmode = src->nmode; + dst->outputs = from_ptrv(src->outputs); + for(int i=noutput-1; i>=0; --i) + dst->outputs[i] = from_ulong(((XID_32*)dst->outputs)[i]); + dst->noutput = src->noutput; + dst->crtcs = from_ptrv(src->crtcs); + for(int i=ncrtc-1; i>=0; --i) + dst->crtcs[i] = from_ulong(((XID_32*)dst->crtcs)[i]); + dst->ncrtc = src->ncrtc; + dst->configTimestamp = to_ulong(src->configTimestamp); + dst->timestamp = to_ulong(src->timestamp); +} + +void inplace_XRRCrtcInfo_shrink(void* s) +{ + if(!s) return; + my_XRRCrtcInfo_32_t *dst = s; + my_XRRCrtcInfo_t *src = s; + dst->timestamp = to_ulong(src->timestamp); + dst->x = src->x; + dst->y = src->y; + dst->width = src->width; + dst->height = src->height; + dst->mode = to_ulong(src->mode); + dst->rotation = src->rotation; + for(int i=0; i<src->noutput; ++i) + ((XID_32*)src->outputs)[i] = to_ulong(src->outputs[i]); + dst->noutput = src->noutput; + dst->outputs = to_ptrv(src->outputs); + dst->rotations = src->rotations; + dst->npossible = src->npossible; + for(int i=0; i<dst->npossible; ++i) + ((XID_32*)src->possible)[i] = to_ulong(src->possible[i]); + dst->possible = to_ptrv(src->possible); +} + +void inplace_XRROutputInfo_shrink(void* s) +{ + if(!s) return; + my_XRROutputInfo_32_t *dst = s; + my_XRROutputInfo_t *src = s; + dst->timestamp = to_ulong(src->timestamp); + dst->crtc = src->crtc; + dst->name = to_ptrv(src->name); + dst->nameLen = src->nameLen; + dst->mm_width = to_ulong(src->mm_width); + dst->mm_height = to_ulong(src->mm_height); + dst->connection = src->connection; + dst->subpixel_order = src->subpixel_order; + dst->ncrtc = src->ncrtc; + for(int i=0; i<dst->ncrtc; ++i) + ((XID_32*)src->crtcs)[i] = to_ulong(src->crtcs[i]); + dst->crtcs = to_ptrv(src->crtcs); + dst->nclone = src->nclone; + for(int i=0; i<dst->nclone; ++i) + ((XID_32*)src->clones)[i] = to_ulong(src->clones[i]); + dst->clones = to_ptrv(src->clones); + dst->nmode = src->nmode; + dst->npreferred = src->npreferred; + for(int i=0; i<dst->nmode; ++i) + ((XID_32*)src->modes)[i] = to_ulong(src->modes[i]); + dst->modes = to_ptrv(src->modes); +} + +void inplace_XRRProviderInfo_shrink(void* a) +{ + if(!a) return; + my_XRRProviderInfo_32_t *dst = a; + my_XRRProviderInfo_t* src = a; + + for(int i=0; i<src->ncrtcs; ++i) + ((ulong_t*)src->crtcs)[i] = to_ulong(src->crtcs[i]); + for(int i=0; i<src->noutputs; ++i) + ((ulong_t*)src->outputs)[i] = to_ulong(src->outputs[i]); + for(int i=0; i<src->nassociatedproviders; ++i) + ((ulong_t*)src->associated_providers)[i] = to_ulong(src->associated_providers[i]); + dst->capabilities = src->capabilities; + dst->ncrtcs = src->ncrtcs; + dst->crtcs = to_ptrv(src->crtcs); + dst->noutputs = src->noutputs; + dst->outputs = to_ptrv(src->outputs); + dst->name = to_ptrv(src->name); + dst->nassociatedproviders = src->nassociatedproviders; + dst->associated_providers = to_ptrv(src->associated_providers); + dst->associated_capability = to_ptrv(src->associated_capability); + dst->nameLen = src->nameLen; +} +void inplace_XRRProviderInfo_enlarge(void* a) +{ + if(!a) return; + my_XRRProviderInfo_t *dst = a; + my_XRRProviderInfo_32_t* src = a; + + dst->nameLen = src->nameLen; + dst->associated_capability = from_ptrv(src->associated_capability); + dst->associated_providers = from_ptrv(src->associated_providers); + dst->nassociatedproviders = src->nassociatedproviders; + dst->name = from_ptrv(src->name); + dst->outputs = from_ptrv(src->outputs); + dst->noutputs = src->noutputs; + dst->crtcs = from_ptrv(src->crtcs); + dst->ncrtcs = src->ncrtcs; + dst->capabilities = src->capabilities; + for(int i=dst->ncrtcs-1; i>=0; --i) + dst->crtcs[i] = from_ulong(((ulong_t*)dst->crtcs)[i]); + for(int i=dst->noutputs-1; i>=0; --i) + dst->outputs[i] = from_ulong(((ulong_t*)dst->outputs)[i]); + for(int i=dst->nassociatedproviders-1; i>=0; --i) + dst->associated_providers[i] = from_ulong(((ulong_t*)dst->associated_providers)[i]); +} + +void inplace_XRRProviderResources_shrink(void* a) +{ + if(!a) return; + my_XRRProviderResources_32_t* dst = a; + my_XRRProviderResources_t* src = a; + + for(int i=0; i<src->nproviders; ++i) + ((ulong_t*)src->providers)[i] = to_ulong(src->providers[i]); + dst->timestamp = to_long(src->timestamp); + dst->nproviders = src->nproviders; + dst->providers = to_ptrv(src->providers); +} +void inplace_XRRProviderResources_enlarge(void* a) +{ + if(!a) return; + my_XRRProviderResources_t* dst = a; + my_XRRProviderResources_32_t* src = a; + + dst->timestamp = from_long(src->timestamp); + dst->nproviders = src->nproviders; + dst->providers = from_ptrv(src->providers); + for(int i=dst->nproviders-1; i>=0; --i) + dst->providers[i] = from_ulong(((ulong_t*)dst->providers)[i]); +} + +void* inplace_XRRPropertyInfo_shrink(void* a) +{ + if(!a) return NULL; + my_XRRPropertyInfo_t* src = a; + my_XRRPropertyInfo_32_t* dst = a; + + for(int i=0; i<src->num_values; ++i) + ((long_t*)src->values)[i] = to_long(src->values[i]); + dst->pending = src->pending; + dst->range = src->range; + dst->immutable = src->immutable; + dst->num_values = src->num_values; + dst->values = to_ptrv(src->values); + + return a; +} \ No newline at end of file diff --git a/src/libtools/my_x11_conv.h b/src/libtools/my_x11_conv.h index 142c0566..1d758f8a 100644 --- a/src/libtools/my_x11_conv.h +++ b/src/libtools/my_x11_conv.h @@ -64,4 +64,16 @@ void UnwrapXImage(void* d, void* s); void* inplace_XImage_shrink(void* a); void* inplace_XImage_enlarge(void* a); +void convert_XRRModeInfo_to_32(void* d, const void* s); +void convert_XRRModeInfo_to_64(void* d, const void* s); +void inplace_XRRScreenResources_shrink(void* s); +void inplace_XRRScreenResources_enlarge(void* s); +void inplace_XRRCrtcInfo_shrink(void* s); +void inplace_XRROutputInfo_shrink(void* s); +void inplace_XRRProviderInfo_shrink(void* a); +void inplace_XRRProviderInfo_enlarge(void* a); +void inplace_XRRProviderResources_shrink(void* a); +void inplace_XRRProviderResources_enlarge(void* a); +void* inplace_XRRPropertyInfo_shrink(void* a); + #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 a8fde6e2..2c104307 100644 --- a/src/libtools/my_x11_defs.h +++ b/src/libtools/my_x11_defs.h @@ -1028,4 +1028,12 @@ typedef struct my_XExtensionHooks_s { char*(*error_string)(void* dpy, int, my_XExtCodes_t* e, char* s, int n); } my_XExtensionHooks_t; +typedef struct my_XRRPropertyInfo_s { + int pending; + int range; + int immutable; + int num_values; + long* values; +} my_XRRPropertyInfo_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 00756242..f12c75c1 100644 --- a/src/libtools/my_x11_defs_32.h +++ b/src/libtools/my_x11_defs_32.h @@ -961,4 +961,12 @@ typedef struct my_XExtensionHooks_32_s { ptr_t error_string; //char*(*error_string)(void* dpy, int, my_XExtCodes_t* e, char* s, int n); } my_XExtensionHooks_32_t; +typedef struct my_XRRPropertyInfo_32_s { + int pending; + int range; + int immutable; + int num_values; + ptr_t values; //long* +} my_XRRPropertyInfo_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 4febe202..04d6defb 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -814,6 +814,7 @@ #() pFEppi -> pFEppi #() pFEppp -> pFEppp #() pFEXip -> pFEXip +#() pFEXLL -> pFEXLL #() pFEXLp -> pFEXLp #() pFEXpL -> pFEXpL #() pFEXpp -> pFEXpp @@ -988,6 +989,7 @@ #() iFEXLlp -> iFEXLlp #() iFEXLLp -> iFEXLLp #() iFEXLpi -> iFEXLpi +#() iFEXLpp -> iFEXLpp #() iFEXpLp -> iFEXpLp #() iFEXppu -> iFEXppu #() iFEXppp -> iFEXppp @@ -1330,6 +1332,7 @@ #() vFXppuulll -> vFXppuulll #() iFEpippppp -> iFEpippppp #() iFEpLiLppp -> iFEpLiLppp +#() iFEppipppp -> iFEppipppp #() iFuiiiiuup -> iFuiiiiuup #() iFpuippupp -> iFpuippupp #() iFpuuiiuuu -> iFpuuiiuuu @@ -2039,6 +2042,7 @@ wrappedlibx11: - XGetWMHints - pFXp: - XListExtensions + - XLoadQueryFont - vFXLp: - XSetWMNormalHints - iFpip: @@ -2066,6 +2070,8 @@ wrappedlibx11: - iFXLpi: - XQueryColors - XSetWMProtocols +- iFXLpp: + - XGetWMNormalHints - iFXppp: - XCheckIfEvent - XIfEvent @@ -2098,6 +2104,8 @@ wrappedlibx11: - iFXppppp: - XRegisterIMInstantiateCallback - XUnregisterIMInstantiateCallback +- iFppipppp: + - XTextExtents - iFXLLLiipi: - XChangeProperty - pFXLiiuuLi: @@ -2167,6 +2175,10 @@ wrappedlibxrandr: - XRRGetProviderResources - XRRGetScreenResources - XRRGetScreenResourcesCurrent +- pFXLL: + - XRRQueryOutputProperty +- pFXLp: + - XRRListOutputProperties - pFXpL: - XRRGetCrtcInfo - XRRGetOutputInfo diff --git a/src/wrapped32/generated/wrappedlibx11types32.h b/src/wrapped32/generated/wrappedlibx11types32.h index 866b9ed0..599a0b42 100644 --- a/src/wrapped32/generated/wrappedlibx11types32.h +++ b/src/wrapped32/generated/wrappedlibx11types32.h @@ -38,6 +38,7 @@ typedef int32_t (*iFXLip_t)(void*, uintptr_t, int32_t, void*); typedef int32_t (*iFXLlp_t)(void*, uintptr_t, intptr_t, void*); typedef int32_t (*iFXLLp_t)(void*, uintptr_t, uintptr_t, void*); typedef int32_t (*iFXLpi_t)(void*, uintptr_t, void*, int32_t); +typedef int32_t (*iFXLpp_t)(void*, uintptr_t, void*, void*); typedef int32_t (*iFXppp_t)(void*, void*, void*, void*); typedef void* (*pFXlpp_t)(void*, intptr_t, void*, void*); typedef int32_t (*iFXbpLiL_pp_t)(void*, struct_pLiL_t*, void*, void*); @@ -52,6 +53,7 @@ typedef void* (*pFXpppp_t)(void*, void*, void*, void*, void*); typedef int32_t (*iFpppipp_t)(void*, void*, void*, int32_t, void*, void*); typedef int32_t (*iFXLpppp_t)(void*, uintptr_t, void*, void*, void*, void*); typedef int32_t (*iFXppppp_t)(void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void*); typedef int32_t (*iFXLLLiipi_t)(void*, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); typedef void* (*pFXLiiuuLi_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t); typedef void (*vFXLpppippp_t)(void*, uintptr_t, void*, void*, void*, int32_t, void*, void*, void*); @@ -90,6 +92,7 @@ typedef uintptr_t (*LFXLiiuuuiupLp_t)(void*, uintptr_t, int32_t, int32_t, uint32 GO(XSynchronize, pFXi_t) \ GO(XGetWMHints, pFXL_t) \ GO(XListExtensions, pFXp_t) \ + GO(XLoadQueryFont, pFXp_t) \ GO(XSetWMNormalHints, vFXLp_t) \ GO(XStringListToTextProperty, iFpip_t) \ GO(XCheckTypedEvent, iFXip_t) \ @@ -106,6 +109,7 @@ typedef uintptr_t (*LFXLiiuuuiupLp_t)(void*, uintptr_t, int32_t, int32_t, uint32 GO(XChangeWindowAttributes, iFXLLp_t) \ GO(XQueryColors, iFXLpi_t) \ GO(XSetWMProtocols, iFXLpi_t) \ + GO(XGetWMNormalHints, iFXLpp_t) \ GO(XCheckIfEvent, iFXppp_t) \ GO(XIfEvent, iFXppp_t) \ GO(XGetVisualInfo, pFXlpp_t) \ @@ -124,6 +128,7 @@ typedef uintptr_t (*LFXLiiuuuiupLp_t)(void*, uintptr_t, int32_t, int32_t, uint32 GO(XQueryTree, iFXLpppp_t) \ GO(XRegisterIMInstantiateCallback, iFXppppp_t) \ GO(XUnregisterIMInstantiateCallback, iFXppppp_t) \ + GO(XTextExtents, iFppipppp_t) \ GO(XChangeProperty, iFXLLLiipi_t) \ GO(XGetImage, pFXLiiuuLi_t) \ GO(XSetWMProperties, vFXLpppippp_t) \ diff --git a/src/wrapped32/generated/wrappedlibxrandrtypes32.h b/src/wrapped32/generated/wrappedlibxrandrtypes32.h index d50f7515..1f2eb12b 100644 --- a/src/wrapped32/generated/wrappedlibxrandrtypes32.h +++ b/src/wrapped32/generated/wrappedlibxrandrtypes32.h @@ -13,6 +13,8 @@ typedef void (*vFp_t)(void*); typedef void* (*pFXL_t)(void*, uintptr_t); +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 int32_t (*iFXpLLiiLWpi_t)(void*, void*, uintptr_t, uintptr_t, int32_t, int32_t, uintptr_t, uint16_t, void*, int32_t); @@ -23,6 +25,8 @@ typedef int32_t (*iFXpLLiiLWpi_t)(void*, void*, uintptr_t, uintptr_t, int32_t, i GO(XRRGetProviderResources, pFXL_t) \ GO(XRRGetScreenResources, pFXL_t) \ GO(XRRGetScreenResourcesCurrent, pFXL_t) \ + GO(XRRQueryOutputProperty, pFXLL_t) \ + GO(XRRListOutputProperties, pFXLp_t) \ GO(XRRGetCrtcInfo, pFXpL_t) \ GO(XRRGetOutputInfo, pFXpL_t) \ GO(XRRGetPanning, pFXpL_t) \ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index 49bdd8d6..6e4230ff 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -904,6 +904,7 @@ typedef void* (*pFEpip_t)(x64emu_t*, void*, int32_t, void*); typedef void* (*pFEppi_t)(x64emu_t*, void*, void*, int32_t); typedef void* (*pFEppp_t)(x64emu_t*, void*, void*, void*); typedef void* (*pFEXip_t)(x64emu_t*, void*, int32_t, void*); +typedef void* (*pFEXLL_t)(x64emu_t*, void*, uintptr_t, uintptr_t); typedef void* (*pFEXLp_t)(x64emu_t*, void*, uintptr_t, void*); typedef void* (*pFEXpL_t)(x64emu_t*, void*, void*, uintptr_t); typedef void* (*pFEXpp_t)(x64emu_t*, void*, void*, void*); @@ -1078,6 +1079,7 @@ typedef int32_t (*iFEXLip_t)(x64emu_t*, void*, uintptr_t, int32_t, void*); typedef int32_t (*iFEXLlp_t)(x64emu_t*, void*, uintptr_t, intptr_t, void*); typedef int32_t (*iFEXLLp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*); typedef int32_t (*iFEXLpi_t)(x64emu_t*, void*, uintptr_t, void*, int32_t); +typedef int32_t (*iFEXLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*); typedef int32_t (*iFEXpLp_t)(x64emu_t*, void*, void*, uintptr_t, void*); typedef int32_t (*iFEXppu_t)(x64emu_t*, void*, void*, void*, uint32_t); typedef int32_t (*iFEXppp_t)(x64emu_t*, void*, void*, void*, void*); @@ -1420,6 +1422,7 @@ typedef void (*vFXLppiipi_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, v typedef void (*vFXppuulll_t)(void*, void*, void*, uint32_t, uint32_t, intptr_t, intptr_t, intptr_t); typedef int32_t (*iFEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); typedef int32_t (*iFEpLiLppp_t)(x64emu_t*, void*, uintptr_t, int32_t, uintptr_t, void*, void*, void*); +typedef int32_t (*iFEppipppp_t)(x64emu_t*, void*, void*, int32_t, void*, void*, void*, void*); typedef int32_t (*iFuiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFpuippupp_t)(void*, uint32_t, int32_t, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFpuuiiuuu_t)(void*, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t); @@ -2397,6 +2400,7 @@ void pFEpip_32(x64emu_t *emu, uintptr_t fcn) { pFEpip_t fn = (pFEpip_t)fcn; R_EA void pFEppi_32(x64emu_t *emu, uintptr_t fcn) { pFEppi_t fn = (pFEppi_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } void pFEppp_32(x64emu_t *emu, uintptr_t fcn) { pFEppp_t fn = (pFEppp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } void pFEXip_32(x64emu_t *emu, uintptr_t fcn) { pFEXip_t fn = (pFEXip_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))); } +void pFEXLL_32(x64emu_t *emu, uintptr_t fcn) { pFEXLL_t fn = (pFEXLL_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } void pFEXLp_32(x64emu_t *emu, uintptr_t fcn) { pFEXLp_t fn = (pFEXLp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12))); } void pFEXpL_32(x64emu_t *emu, uintptr_t fcn) { pFEXpL_t fn = (pFEXpL_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } void pFEXpp_32(x64emu_t *emu, uintptr_t fcn) { pFEXpp_t fn = (pFEXpp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } @@ -2571,6 +2575,7 @@ void iFEXLip_32(x64emu_t *emu, uintptr_t fcn) { iFEXLip_t fn = (iFEXLip_t)fcn; R void iFEXLlp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLlp_t fn = (iFEXLlp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } void iFEXLLp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLLp_t fn = (iFEXLLp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } void iFEXLpi_32(x64emu_t *emu, uintptr_t fcn) { iFEXLpi_t fn = (iFEXLpi_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFEXLpp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLpp_t fn = (iFEXLpp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } void iFEXpLp_32(x64emu_t *emu, uintptr_t fcn) { iFEXpLp_t fn = (iFEXpLp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } void iFEXppu_32(x64emu_t *emu, uintptr_t fcn) { iFEXppu_t fn = (iFEXppu_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } void iFEXppp_32(x64emu_t *emu, uintptr_t fcn) { iFEXppp_t fn = (iFEXppp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } @@ -2913,6 +2918,7 @@ void vFXLppiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXLppiipi_t fn = (vFXLppiipi void vFXppuulll_32(x64emu_t *emu, uintptr_t fcn) { vFXppuulll_t fn = (vFXppuulll_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24)), from_long(from_ptri(long_t, R_ESP + 28)), from_long(from_ptri(long_t, R_ESP + 32))); } void iFEpippppp_32(x64emu_t *emu, uintptr_t fcn) { iFEpippppp_t fn = (iFEpippppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } void iFEpLiLppp_32(x64emu_t *emu, uintptr_t fcn) { iFEpLiLppp_t fn = (iFEpLiLppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void iFEppipppp_32(x64emu_t *emu, uintptr_t fcn) { iFEppipppp_t fn = (iFEppipppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } void iFuiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { iFuiiiiuup_t fn = (iFuiiiiuup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } void iFpuippupp_32(x64emu_t *emu, uintptr_t fcn) { iFpuippupp_t fn = (iFpuippupp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } void iFpuuiiuuu_32(x64emu_t *emu, uintptr_t fcn) { iFpuuiiuuu_t fn = (iFpuuiiuuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32)); } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index ff9a0d6b..c9194cf6 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -855,6 +855,7 @@ void pFEpip_32(x64emu_t *emu, uintptr_t fnc); void pFEppi_32(x64emu_t *emu, uintptr_t fnc); void pFEppp_32(x64emu_t *emu, uintptr_t fnc); void pFEXip_32(x64emu_t *emu, uintptr_t fnc); +void pFEXLL_32(x64emu_t *emu, uintptr_t fnc); void pFEXLp_32(x64emu_t *emu, uintptr_t fnc); void pFEXpL_32(x64emu_t *emu, uintptr_t fnc); void pFEXpp_32(x64emu_t *emu, uintptr_t fnc); @@ -1029,6 +1030,7 @@ void iFEXLip_32(x64emu_t *emu, uintptr_t fnc); void iFEXLlp_32(x64emu_t *emu, uintptr_t fnc); void iFEXLLp_32(x64emu_t *emu, uintptr_t fnc); void iFEXLpi_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLpp_32(x64emu_t *emu, uintptr_t fnc); void iFEXpLp_32(x64emu_t *emu, uintptr_t fnc); void iFEXppu_32(x64emu_t *emu, uintptr_t fnc); void iFEXppp_32(x64emu_t *emu, uintptr_t fnc); @@ -1371,6 +1373,7 @@ void vFXLppiipi_32(x64emu_t *emu, uintptr_t fnc); void vFXppuulll_32(x64emu_t *emu, uintptr_t fnc); void iFEpippppp_32(x64emu_t *emu, uintptr_t fnc); void iFEpLiLppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEppipppp_32(x64emu_t *emu, uintptr_t fnc); void iFuiiiiuup_32(x64emu_t *emu, uintptr_t fnc); void iFpuippupp_32(x64emu_t *emu, uintptr_t fnc); void iFpuuiiuuu_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedlibx11.c b/src/wrapped32/wrappedlibx11.c index b83e6786..463e6cdc 100644 --- a/src/wrapped32/wrappedlibx11.c +++ b/src/wrapped32/wrappedlibx11.c @@ -1236,34 +1236,34 @@ GO(XNStringConversionCallback) switch (VAARGSZ) \ { \ case 2: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), NULL); \ break; \ case 4: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), NULL); \ break; \ case 6: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], va[4], va[5], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), NULL); \ break; \ case 8: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], va[4], va[5], va[6], va[7], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), NULL); \ break; \ case 10: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], va[4], va[5], va[6], va[7], va[8], va[9], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), NULL); \ break; \ case 12: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], va[4], va[5], va[6], va[7], va[8], va[9], va[10], va[11], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), NULL); \ break; \ case 14: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], va[4], va[5], va[6], va[7], va[8], va[9], va[10], va[11], va[12], va[13], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), from_ulong(va[12]), from_ulong(va[13]), NULL); \ break; \ case 16: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], va[4], va[5], va[6], va[7], va[8], va[9], va[10], va[11], va[12], va[13], va[14], va[15], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), from_ulong(va[12]), from_ulong(va[13]), from_ulong(va[14]), from_ulong(va[15]), NULL); \ break; \ case 18: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], va[4], va[5], va[6], va[7], va[8], va[9], va[10], va[11], va[12], va[13], va[14], va[15], va[16], va[17], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), from_ulong(va[12]), from_ulong(va[13]), from_ulong(va[14]), from_ulong(va[15]), from_ulong(va[16]), from_ulong(va[17]), NULL); \ break; \ case 20: \ - RESULT = FUNC(FIRST_ARG, va[0], va[1], va[2], va[3], va[4], va[5], va[6], va[7], va[8], va[9], va[10], va[11], va[12], va[13], va[14], va[15], va[16], va[17], va[18], va[19], NULL); \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), from_ulong(va[12]), from_ulong(va[13]), from_ulong(va[14]), from_ulong(va[15]), from_ulong(va[16]), from_ulong(va[17]), from_ulong(va[18]), from_ulong(va[19]), NULL); \ break; \ default: \ printf_log(LOG_NONE, "warning: %s's vasize (%d) is too large, need create new call case!\n", __func__, VAARGSZ); \ @@ -1804,6 +1804,19 @@ EXPORT int my32_XSetWMNormalHints(x64emu_t* emu, void* dpy, XID window, void* hi my->XSetWMNormalHints(dpy, window, hints); inplace_shrink_wmsizehints(hints); } + +EXPORT int my32_XGetWMNormalHints(x64emu_t* emu, void* dpy, XID window, void* hints, long_t* supplied) +{ + long supplied_l = 0; + int hints_l[17+2] = {0}; + int ret = my->XGetWMNormalHints(dpy, window, hints?hints_l:NULL, supplied?(&supplied_l):NULL); + if(supplied) *supplied = to_long(supplied_l); + if(hints) { + *(long_t*)hints = to_long(*(long*)hints_l); + memcpy(hints+4, hints_l+2, 17*4); + } + return ret; +} #if 0 EXPORT void* my32__XGetRequest(x64emu_t* emu, my_XDisplay_t* dpy, uint8_t type, size_t len) { @@ -2118,6 +2131,22 @@ EXPORT int my32_XGetWindowProperty(x64emu_t* emu, void* dpy, XID window, XID pro return ret; } +EXPORT int my32_XTextExtents(x64emu_t* emu, my_XFontStruct_32_t* font_struct, void* string, int nchars, int* dir, int* ascent, int* descent, my_XCharStruct_32_t* overall) +{ + //XCharStruct doesn't need any changes + inplace_XFontStruct_enlarge(font_struct); + int ret = my->XTextExtents(font_struct, string, nchars, dir, ascent, descent, overall); + inplace_XFontStruct_shrink(font_struct); + return ret; +} + +EXPORT void* my32_XLoadQueryFont(x64emu_t* emu, void* dpy, void* name) +{ + void* ret = my->XLoadQueryFont(dpy, name); + inplace_XFontStruct_shrink(ret); + return ret; +} + EXPORT void my32_XLockDisplay(x64emu_t* emu, void* dpy) { my->XLockDisplay(dpy); diff --git a/src/wrapped32/wrappedlibx11_private.h b/src/wrapped32/wrappedlibx11_private.h index f1c6f0cc..1aee969f 100644 --- a/src/wrapped32/wrappedlibx11_private.h +++ b/src/wrapped32/wrappedlibx11_private.h @@ -419,7 +419,7 @@ GO(XGetWMClientMachine, iFXLbpLiL_) GOM(XGetWMHints, pFEXL) GO(XGetWMIconName, iFXLbpLiL_) GO(XGetWMName, iFXLbpLiL_) -//GO(XGetWMNormalHints, iFpLpp) +GOM(XGetWMNormalHints, iFEXLpp) //GO(XGetWMProtocols, iFXLbbL__p) //GO(XGetWMSizeHints, iFpLppL) //GO(XGetZoomHints, iFpLp) @@ -871,7 +871,7 @@ GOM(XListExtensions, pFEXp)//GOM(XListExtensions, bp_FEXp) GO(XListPixmapFormats, pFXp) //GO(XListProperties, bL_FXLp) GO(XLoadFont, LFXp) -//GOSM(XLoadQueryFont, bpLuuuuuiuibLL_pppii_FEXp) +GOM(XLoadQueryFont, pFEXp) GO(xlocaledir, vFpi) GO(XLocaleOfFontSet, pFp) GO(XLocaleOfIM, pFp) @@ -1132,7 +1132,7 @@ GO(XSubtractRegion, iFppp) GO(XSupportsLocale, iFv) GO(XSync, iFXi) GOM(XSynchronize, pFEXi) -//GO(XTextExtents, iFppipppp) +GOM(XTextExtents, iFEppipppp) //GO(XTextExtents16, iFppipppp) //GO(_XTextHeight, iFppi) //GO(_XTextHeight16, iFppi) diff --git a/src/wrapped32/wrappedlibxrandr.c b/src/wrapped32/wrappedlibxrandr.c index 39b49a35..727e9113 100644 --- a/src/wrapped32/wrappedlibxrandr.c +++ b/src/wrapped32/wrappedlibxrandr.c @@ -25,100 +25,12 @@ #define LIBNAME libxrandr -#include "libtools/my_x11_defs.h" -#include "libtools/my_x11_defs_32.h" +#include "libtools/my_x11_conv.h" #include "generated/wrappedlibxrandrtypes32.h" #include "wrappercallback32.h" -void convert_XRRModeInfo_to_32(void* d, const void* s) -{ - my_XRRModeInfo_32_t *dst = d; - const my_XRRModeInfo_t *src = s; - dst->id = to_ulong(src->id); - dst->width = src->width; - dst->height = src->height; - dst->dotClock = to_ulong(src->dotClock); - dst->hSyncStart = src->hSyncStart; - dst->hSyncEnd = src->hSyncEnd; - dst->hTotal = src->hTotal; - dst->hSkew = src->hSkew; - dst->vSyncStart = src->vSyncStart; - dst->vSyncEnd = src->vSyncEnd; - dst->vTotal = src->vTotal; - dst->name = to_ptrv(src->name); - dst->nameLength = src->nameLength; - dst->modeFlags = to_ulong(src->modeFlags); -} - -void convert_XRRModeInfo_to_64(void* d, const void* s) -{ - my_XRRModeInfo_t *dst = d; - const my_XRRModeInfo_32_t *src = s; - dst->modeFlags = from_ulong(src->modeFlags); - dst->nameLength = src->nameLength; - dst->name = from_ptrv(src->name); - dst->vTotal = src->vTotal; - dst->vSyncEnd = src->vSyncEnd; - dst->vSyncStart = src->vSyncStart; - dst->hSkew = src->hSkew; - dst->hTotal = src->hTotal; - dst->hSyncEnd = src->hSyncEnd; - dst->hSyncStart = src->hSyncStart; - dst->dotClock = from_ulong(src->dotClock); - dst->height = src->height; - dst->width = src->width; - dst->id = from_ulong(src->id); -} - -void inplace_XRRScreenResources_shrink(void* s) -{ - if(!s) return; - my_XRRScreenResources_32_t *dst = s; - my_XRRScreenResources_t *src = s; - // shrinking, so forward... - dst->timestamp = to_ulong(src->timestamp); - dst->configTimestamp = to_ulong(src->configTimestamp); - dst->ncrtc = src->ncrtc; - for(int i=0; i<dst->ncrtc; ++i) - ((XID_32*)src->crtcs)[i] = to_ulong(src->crtcs[i]); - dst->crtcs = to_ptrv(src->crtcs); - dst->noutput = src->noutput; - for(int i=0; i<dst->noutput; ++i) - ((XID_32*)src->outputs)[i] = to_ulong(src->outputs[i]); - dst->outputs = to_ptrv(src->outputs); - dst->nmode = src->nmode; - for(int i=0; i<dst->noutput; ++i) - convert_XRRModeInfo_to_32(&((my_XRRModeInfo_32_t*)src->modes)[i], &src->modes[i]); - dst->modes = to_ptrv(src->modes); -} - -void inplace_XRRScreenResources_enlarge(void* s) -{ - if(!s) return; - my_XRRScreenResources_t *dst = s; - my_XRRScreenResources_32_t *src = s; - // enlarge, so backward... - int nmode = src->nmode; - int noutput = src->noutput; - int ncrtc = src->ncrtc; - dst->modes = from_ptrv(src->modes); - for(int i=nmode-1; i>=0; --i) - convert_XRRModeInfo_to_64(&dst->modes[i], &((my_XRRModeInfo_32_t*)dst->modes)[i]); - dst->nmode = src->nmode; - dst->outputs = from_ptrv(src->outputs); - for(int i=noutput-1; i>=0; --i) - dst->outputs[i] = from_ulong(((XID_32*)dst->outputs)[i]); - dst->noutput = src->noutput; - dst->crtcs = from_ptrv(src->crtcs); - for(int i=ncrtc-1; i>=0; --i) - dst->crtcs[i] = from_ulong(((XID_32*)dst->crtcs)[i]); - dst->ncrtc = src->ncrtc; - dst->configTimestamp = to_ulong(src->configTimestamp); - dst->timestamp = to_ulong(src->timestamp); -} - EXPORT void* my32_XRRGetScreenResources(x64emu_t* emu, void* dpy, XID window) { void* ret = my->XRRGetScreenResources(dpy, window); @@ -177,29 +89,6 @@ EXPORT int my32_XRRSetPanning(x64emu_t* emu, void* dpy, void* res, XID crtc, voi return ret; } -void inplace_XRRCrtcInfo_shrink(void* s) -{ - if(!s) return; - my_XRRCrtcInfo_32_t *dst = s; - my_XRRCrtcInfo_t *src = s; - dst->timestamp = to_ulong(src->timestamp); - dst->x = src->x; - dst->y = src->y; - dst->width = src->width; - dst->height = src->height; - dst->mode = to_ulong(src->mode); - dst->rotation = src->rotation; - for(int i=0; i<src->noutput; ++i) - ((XID_32*)src->outputs)[i] = to_ulong(src->outputs[i]); - dst->noutput = src->noutput; - dst->outputs = to_ptrv(src->outputs); - dst->rotations = src->rotations; - dst->npossible = src->npossible; - for(int i=0; i<dst->npossible; ++i) - ((XID_32*)src->possible)[i] = to_ulong(src->possible[i]); - dst->possible = to_ptrv(src->possible); -} - EXPORT void* my32_XRRGetCrtcInfo(x64emu_t* emu, void* dpy, void* res, XID crtc) { inplace_XRRScreenResources_enlarge(res); @@ -209,34 +98,6 @@ EXPORT void* my32_XRRGetCrtcInfo(x64emu_t* emu, void* dpy, void* res, XID crtc) return ret; } -void inplace_XRROutputInfo_shrink(void* s) -{ - if(!s) return; - my_XRROutputInfo_32_t *dst = s; - my_XRROutputInfo_t *src = s; - dst->timestamp = to_ulong(src->timestamp); - dst->crtc = src->crtc; - dst->name = to_ptrv(src->name); - dst->nameLen = src->nameLen; - dst->mm_width = to_ulong(src->mm_width); - dst->mm_height = to_ulong(src->mm_height); - dst->connection = src->connection; - dst->subpixel_order = src->subpixel_order; - dst->ncrtc = src->ncrtc; - for(int i=0; i<dst->ncrtc; ++i) - ((XID_32*)src->crtcs)[i] = to_ulong(src->crtcs[i]); - dst->crtcs = to_ptrv(src->crtcs); - dst->nclone = src->nclone; - for(int i=0; i<dst->nclone; ++i) - ((XID_32*)src->clones)[i] = to_ulong(src->clones[i]); - dst->clones = to_ptrv(src->clones); - dst->nmode = src->nmode; - dst->npreferred = src->npreferred; - for(int i=0; i<dst->nmode; ++i) - ((XID_32*)src->modes)[i] = to_ulong(src->modes[i]); - dst->modes = to_ptrv(src->modes); -} - EXPORT void* my32_XRRGetOutputInfo(x64emu_t* emu, void* dpy, void* res, XID window) { inplace_XRRScreenResources_enlarge(res); @@ -246,53 +107,6 @@ EXPORT void* my32_XRRGetOutputInfo(x64emu_t* emu, void* dpy, void* res, XID wind return ret; } -void inplace_XRRProviderInfo_shrink(void* a) -{ - if(!a) return; - my_XRRProviderInfo_32_t *dst = a; - my_XRRProviderInfo_t* src = a; - - for(int i=0; i<src->ncrtcs; ++i) - ((ulong_t*)src->crtcs)[i] = to_ulong(src->crtcs[i]); - for(int i=0; i<src->noutputs; ++i) - ((ulong_t*)src->outputs)[i] = to_ulong(src->outputs[i]); - for(int i=0; i<src->nassociatedproviders; ++i) - ((ulong_t*)src->associated_providers)[i] = to_ulong(src->associated_providers[i]); - dst->capabilities = src->capabilities; - dst->ncrtcs = src->ncrtcs; - dst->crtcs = to_ptrv(src->crtcs); - dst->noutputs = src->noutputs; - dst->outputs = to_ptrv(src->outputs); - dst->name = to_ptrv(src->name); - dst->nassociatedproviders = src->nassociatedproviders; - dst->associated_providers = to_ptrv(src->associated_providers); - dst->associated_capability = to_ptrv(src->associated_capability); - dst->nameLen = src->nameLen; -} -void inplace_XRRProviderInfo_enlarge(void* a) -{ - if(!a) return; - my_XRRProviderInfo_t *dst = a; - my_XRRProviderInfo_32_t* src = a; - - dst->nameLen = src->nameLen; - dst->associated_capability = from_ptrv(src->associated_capability); - dst->associated_providers = from_ptrv(src->associated_providers); - dst->nassociatedproviders = src->nassociatedproviders; - dst->name = from_ptrv(src->name); - dst->outputs = from_ptrv(src->outputs); - dst->noutputs = src->noutputs; - dst->crtcs = from_ptrv(src->crtcs); - dst->ncrtcs = src->ncrtcs; - dst->capabilities = src->capabilities; - for(int i=dst->ncrtcs-1; i>=0; --i) - dst->crtcs[i] = from_ulong(((ulong_t*)dst->crtcs)[i]); - for(int i=dst->noutputs-1; i>=0; --i) - dst->outputs[i] = from_ulong(((ulong_t*)dst->outputs)[i]); - for(int i=dst->nassociatedproviders-1; i>=0; --i) - dst->associated_providers[i] = from_ulong(((ulong_t*)dst->associated_providers)[i]); -} - EXPORT void* my32_XRRGetProviderInfo(x64emu_t* emu, void* dpy, void* res, XID provider) { inplace_XRRScreenResources_enlarge(res); @@ -308,31 +122,6 @@ EXPORT void my32_XRRFreeProviderInfo(x64emu_t* emu, void* r) my->XRRFreeProviderInfo(r); } -void inplace_XRRProviderResources_shrink(void* a) -{ - if(!a) return; - my_XRRProviderResources_32_t* dst = a; - my_XRRProviderResources_t* src = a; - - for(int i=0; i<src->nproviders; ++i) - ((ulong_t*)src->providers)[i] = to_ulong(src->providers[i]); - dst->timestamp = to_long(src->timestamp); - dst->nproviders = src->nproviders; - dst->providers = to_ptrv(src->providers); -} -void inplace_XRRProviderResources_enlarge(void* a) -{ - if(!a) return; - my_XRRProviderResources_t* dst = a; - my_XRRProviderResources_32_t* src = a; - - dst->timestamp = from_long(src->timestamp); - dst->nproviders = src->nproviders; - dst->providers = from_ptrv(src->providers); - for(int i=dst->nproviders-1; i>=0; --i) - dst->providers[i] = from_ulong(((ulong_t*)dst->providers)[i]); -} - EXPORT void* my32_XRRGetProviderResources(x64emu_t* emu, void* dpy, XID window) { void* ret = my->XRRGetProviderResources(dpy, window); @@ -346,6 +135,21 @@ EXPORT void my32_XRRFreeProviderResources(x64emu_t* emu, void* r) my->XRRFreeProviderResources(r); } +EXPORT void* my32_XRRListOutputProperties(x64emu_t* emu, void* dpy, XID out, int* num) +{ + XID* ret = my->XRRListOutputProperties(dpy, out, num); + if(!ret) return NULL; + XID_32* ret_s = (XID_32*)ret; + for(int i=0; i<*num; ++i) + ret_s[i] = to_ulong(ret[i]); + return ret; +} + +EXPORT void* my32_XRRQueryOutputProperty(x64emu_t* emu, void* dpy, XID output, XID prop) +{ + void* ret = my->XRRQueryOutputProperty(dpy, output, prop); + return inplace_XRRPropertyInfo_shrink(ret); +} #ifdef ANDROID #define NEEDED_LIBS "libX11.so", "libXext.so", "libXrender.so" diff --git a/src/wrapped32/wrappedlibxrandr_private.h b/src/wrapped32/wrappedlibxrandr_private.h index 28804660..bfed161b 100644 --- a/src/wrapped32/wrappedlibxrandr_private.h +++ b/src/wrapped32/wrappedlibxrandr_private.h @@ -5,7 +5,7 @@ GO(XRRQueryVersion, iFXpp) GO(XRRFreeScreenConfigInfo, vFp) GOM(XRRGetCrtcInfo, pFEXpL) -//GO(XRRListOutputProperties, bL_FXLp) +GOM(XRRListOutputProperties, pFEXLp) GO(XRRQueryExtension, iFXpp) //GO(XRRAllocModeInfo, bLuuLuuuuuuupuL_Fpi) //GO(XRRGetProviderProperty, iFXLLlliiLbL_pbL_bL_bp_) @@ -50,7 +50,7 @@ GO(XRRGetScreenSizeRange, iFXLpppp) GO(XRRRates, pFXiip) GOM(XRRFreeProviderInfo, vFEp) GO(XRRConfigRates, pFpip) -//GO(XRRQueryOutputProperty, biiiibl__FXLL) +GOM(XRRQueryOutputProperty, pFEXLL) GO(XRRGetOutputProperty, iFXLLlliiLBL_pBL_BL_Bp_) //GO(XRRFreeGamma, vFbippp_) GO(XRRRootToScreen, iFXL) diff --git a/src/wrapped32/wrappedlibxxf86vm_private.h b/src/wrapped32/wrappedlibxxf86vm_private.h index eb906fab..2abad1e7 100644 --- a/src/wrapped32/wrappedlibxxf86vm_private.h +++ b/src/wrapped32/wrappedlibxxf86vm_private.h @@ -2,7 +2,7 @@ #error Meh... #endif -//GO(XF86VidModeGetViewPort, iFpipp) +GO(XF86VidModeGetViewPort, iFXipp) //GO(XF86VidModeValidateModeLine, iFpip) GO(XF86VidModeGetGamma, iFXip) GO(XF86VidModeSetGamma, iFXip) |