about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-10 19:20:09 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-10 19:20:29 +0200
commit1f6ce24eaaa90353789817bd7d32b89af5e5f86a (patch)
tree5a771f55f1631bd6db5a318bf941c2972dd5bd1d /src
parent4a82f21cc3e7ca2a4c9b2518f82846e61e5bacfe (diff)
downloadbox64-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.c227
-rw-r--r--src/libtools/my_x11_conv.h12
-rw-r--r--src/libtools/my_x11_defs.h8
-rw-r--r--src/libtools/my_x11_defs_32.h8
-rw-r--r--src/wrapped32/generated/functions_list.txt12
-rw-r--r--src/wrapped32/generated/wrappedlibx11types32.h5
-rw-r--r--src/wrapped32/generated/wrappedlibxrandrtypes32.h4
-rw-r--r--src/wrapped32/generated/wrapper32.c6
-rw-r--r--src/wrapped32/generated/wrapper32.h3
-rw-r--r--src/wrapped32/wrappedlibx11.c49
-rw-r--r--src/wrapped32/wrappedlibx11_private.h6
-rw-r--r--src/wrapped32/wrappedlibxrandr.c228
-rw-r--r--src/wrapped32/wrappedlibxrandr_private.h4
-rw-r--r--src/wrapped32/wrappedlibxxf86vm_private.h2
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)