about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-28 11:17:26 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-28 11:17:26 +0200
commit3919bb2e7de813732b7a8917744eadddf3ecfa67 (patch)
treef868ea3af3d42d4fd4a9c1aab3a3afd5ddcb6e9b /src
parent93e8434a87c845956784a53e49111c46a099feba (diff)
downloadbox64-3919bb2e7de813732b7a8917744eadddf3ecfa67.tar.gz
box64-3919bb2e7de813732b7a8917744eadddf3ecfa67.zip
[BOX32][WRAPPER] Added 32bits wrapped libexpat and another batch of wrapped function for 32bits libfreetype and SDL2
Diffstat (limited to 'src')
-rw-r--r--src/library_list_32.h3
-rw-r--r--src/wrapped32/generated/functions_list.txt36
-rw-r--r--src/wrapped32/generated/wrappedexpatdefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedexpattypes32.h22
-rw-r--r--src/wrapped32/generated/wrappedexpatundefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedfreetypetypes32.h25
-rw-r--r--src/wrapped32/generated/wrapper32.c10
-rw-r--r--src/wrapped32/generated/wrapper32.h5
-rw-r--r--src/wrapped32/wrappedexpat.c696
-rw-r--r--src/wrapped32/wrappedexpat_private.h71
-rw-r--r--src/wrapped32/wrappedfreetype.c247
-rw-r--r--src/wrapped32/wrappedfreetype_private.h28
-rw-r--r--src/wrapped32/wrappedsdl2_private.h2
13 files changed, 1146 insertions, 15 deletions
diff --git a/src/library_list_32.h b/src/library_list_32.h
index 32b03c95..c4fe2276 100644
--- a/src/library_list_32.h
+++ b/src/library_list_32.h
@@ -30,4 +30,7 @@ GO("libopenal.so.0", openal)
 GO("libopenal.so", openal)
 GO("openal.so", openal)
 
+GO("libexpat.so.1", expat)
+GO("libexpat.so", expat)
+
 GO("crashhandler.so", crashhandler)
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt
index f43b5f14..19cf1462 100644
--- a/src/wrapped32/generated/functions_list.txt
+++ b/src/wrapped32/generated/functions_list.txt
@@ -362,6 +362,7 @@
 #() uFuuu -> uFuuu
 #() uFuup -> uFuup
 #() uFupp -> uFupp
+#() uFpii -> uFpii
 #() uFpuU -> uFpuU
 #() uFppu -> uFppu
 #() fFuii -> fFuii
@@ -375,6 +376,7 @@
 #() lFppi -> lFppi
 #() lFppL -> lFppL
 #() LFEpi -> LFEpi
+#() LFEpp -> LFEpp
 #() LFpii -> LFpii
 #() LFpip -> LFpip
 #() LFppi -> LFppi
@@ -570,6 +572,7 @@
 #() lFipLi -> lFipLi
 #() lFipLl -> lFipLl
 #() lFpuip -> lFpuip
+#() LFEpLp -> LFEpLp
 #() LFEXii -> LFEXii
 #() LFpLLS -> LFpLLS
 #() LFppLp -> LFppLp
@@ -702,6 +705,7 @@
 #() iFEiiip -> iFEiiip
 #() iFEipii -> iFEipii
 #() iFEpipp -> iFEpipp
+#() iFEpupu -> iFEpupu
 #() iFEpupV -> iFEpupV
 #() iFEpLpp -> iFEpLpp
 #() iFEpLpV -> iFEpLpV
@@ -817,6 +821,7 @@
 #() iFEuppLp -> iFEuppLp
 #() iFEpiLpp -> iFEpiLpp
 #() iFEplluu -> iFEplluu
+#() iFEpLlpp -> iFEpLlpp
 #() iFEppipp -> iFEppipp
 #() iFEppllp -> iFEppllp
 #() iFEpppup -> iFEpppup
@@ -1058,25 +1063,56 @@
 #() iFEpvvpV -> iFEppV
 #() iFEpLvvpp -> iFEpLpp
 wrappedcrashhandler:
+wrappedexpat:
+- vFpp:
+  - XML_SetCharacterDataHandler
+- vFppp:
+  - XML_SetDoctypeDeclHandler
+  - XML_SetElementHandler
 wrappedfreetype:
 - iFp:
   - FT_Done_Face
+  - FT_Has_PS_Glyph_Names
+- uFp:
+  - FT_Get_Sfnt_Name_Count
+- pFp:
+  - FT_Get_Postscript_Name
+  - FT_Get_X11_Font_Format
 - vFpp:
   - FT_Outline_Get_CBox
+- iFpi:
+  - FT_Select_Charmap
+  - FT_Select_Size
 - iFpu:
   - FT_Render_Glyph
+- iFpp:
+  - FT_Get_PS_Font_Info
 - uFpL:
   - FT_Get_Char_Index
+- LFpp:
+  - FT_Get_First_Char
+- pFpi:
+  - FT_Get_Sfnt_Table
+- iFpip:
+  - FT_Get_Sfnt_Name
 - iFpui:
   - FT_Load_Glyph
 - iFpuu:
   - FT_Set_Pixel_Sizes
 - iFpLi:
   - FT_Load_Char
+- iFppp:
+  - FT_Get_BDF_Property
+- LFpLp:
+  - FT_Get_Next_Char
+- iFpupu:
+  - FT_Get_Glyph_Name
 - iFpplp:
   - FT_New_Face
 - iFplluu:
   - FT_Set_Char_Size
+- iFpLlpp:
+  - FT_Load_Sfnt_Table
 - iFppllp:
   - FT_New_Memory_Face
 wrappedldlinux:
diff --git a/src/wrapped32/generated/wrappedexpatdefs32.h b/src/wrapped32/generated/wrappedexpatdefs32.h
new file mode 100644
index 00000000..ba9ba295
--- /dev/null
+++ b/src/wrapped32/generated/wrappedexpatdefs32.h
@@ -0,0 +1,8 @@
+/******************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) *
+ ******************************************************************/
+#ifndef __wrappedexpatDEFS32_H_
+#define __wrappedexpatDEFS32_H_
+
+
+#endif // __wrappedexpatDEFS32_H_
diff --git a/src/wrapped32/generated/wrappedexpattypes32.h b/src/wrapped32/generated/wrappedexpattypes32.h
new file mode 100644
index 00000000..b3bed412
--- /dev/null
+++ b/src/wrapped32/generated/wrappedexpattypes32.h
@@ -0,0 +1,22 @@
+/******************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) *
+ ******************************************************************/
+#ifndef __wrappedexpatTYPES32_H_
+#define __wrappedexpatTYPES32_H_
+
+#ifndef LIBNAME
+#error You should only #include this file inside a wrapped*.c file
+#endif
+#ifndef ADDED_FUNCTIONS
+#define ADDED_FUNCTIONS() 
+#endif
+
+typedef void (*vFpp_t)(void*, void*);
+typedef void (*vFppp_t)(void*, void*, void*);
+
+#define SUPER() ADDED_FUNCTIONS() \
+	GO(XML_SetCharacterDataHandler, vFpp_t) \
+	GO(XML_SetDoctypeDeclHandler, vFppp_t) \
+	GO(XML_SetElementHandler, vFppp_t)
+
+#endif // __wrappedexpatTYPES32_H_
diff --git a/src/wrapped32/generated/wrappedexpatundefs32.h b/src/wrapped32/generated/wrappedexpatundefs32.h
new file mode 100644
index 00000000..62f20708
--- /dev/null
+++ b/src/wrapped32/generated/wrappedexpatundefs32.h
@@ -0,0 +1,8 @@
+/******************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) *
+ ******************************************************************/
+#ifndef __wrappedexpatUNDEFS32_H_
+#define __wrappedexpatUNDEFS32_H_
+
+
+#endif // __wrappedexpatUNDEFS32_H_
diff --git a/src/wrapped32/generated/wrappedfreetypetypes32.h b/src/wrapped32/generated/wrappedfreetypetypes32.h
index 868f7d07..eea13522 100644
--- a/src/wrapped32/generated/wrappedfreetypetypes32.h
+++ b/src/wrapped32/generated/wrappedfreetypetypes32.h
@@ -12,26 +12,51 @@
 #endif
 
 typedef int32_t (*iFp_t)(void*);
+typedef uint32_t (*uFp_t)(void*);
+typedef void* (*pFp_t)(void*);
 typedef void (*vFpp_t)(void*, void*);
+typedef int32_t (*iFpi_t)(void*, int32_t);
 typedef int32_t (*iFpu_t)(void*, uint32_t);
+typedef int32_t (*iFpp_t)(void*, void*);
 typedef uint32_t (*uFpL_t)(void*, uintptr_t);
+typedef uintptr_t (*LFpp_t)(void*, void*);
+typedef void* (*pFpi_t)(void*, int32_t);
+typedef int32_t (*iFpip_t)(void*, int32_t, void*);
 typedef int32_t (*iFpui_t)(void*, uint32_t, int32_t);
 typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t);
 typedef int32_t (*iFpLi_t)(void*, uintptr_t, int32_t);
+typedef int32_t (*iFppp_t)(void*, void*, void*);
+typedef uintptr_t (*LFpLp_t)(void*, uintptr_t, void*);
+typedef int32_t (*iFpupu_t)(void*, uint32_t, void*, uint32_t);
 typedef int32_t (*iFpplp_t)(void*, void*, intptr_t, void*);
 typedef int32_t (*iFplluu_t)(void*, intptr_t, intptr_t, uint32_t, uint32_t);
+typedef int32_t (*iFpLlpp_t)(void*, uintptr_t, intptr_t, void*, void*);
 typedef int32_t (*iFppllp_t)(void*, void*, intptr_t, intptr_t, void*);
 
 #define SUPER() ADDED_FUNCTIONS() \
 	GO(FT_Done_Face, iFp_t) \
+	GO(FT_Has_PS_Glyph_Names, iFp_t) \
+	GO(FT_Get_Sfnt_Name_Count, uFp_t) \
+	GO(FT_Get_Postscript_Name, pFp_t) \
+	GO(FT_Get_X11_Font_Format, pFp_t) \
 	GO(FT_Outline_Get_CBox, vFpp_t) \
+	GO(FT_Select_Charmap, iFpi_t) \
+	GO(FT_Select_Size, iFpi_t) \
 	GO(FT_Render_Glyph, iFpu_t) \
+	GO(FT_Get_PS_Font_Info, iFpp_t) \
 	GO(FT_Get_Char_Index, uFpL_t) \
+	GO(FT_Get_First_Char, LFpp_t) \
+	GO(FT_Get_Sfnt_Table, pFpi_t) \
+	GO(FT_Get_Sfnt_Name, iFpip_t) \
 	GO(FT_Load_Glyph, iFpui_t) \
 	GO(FT_Set_Pixel_Sizes, iFpuu_t) \
 	GO(FT_Load_Char, iFpLi_t) \
+	GO(FT_Get_BDF_Property, iFppp_t) \
+	GO(FT_Get_Next_Char, LFpLp_t) \
+	GO(FT_Get_Glyph_Name, iFpupu_t) \
 	GO(FT_New_Face, iFpplp_t) \
 	GO(FT_Set_Char_Size, iFplluu_t) \
+	GO(FT_Load_Sfnt_Table, iFpLlpp_t) \
 	GO(FT_New_Memory_Face, iFppllp_t)
 
 #endif // __wrappedfreetypeTYPES32_H_
diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c
index de01ca30..3546f5f3 100644
--- a/src/wrapped32/generated/wrapper32.c
+++ b/src/wrapped32/generated/wrapper32.c
@@ -452,6 +452,7 @@ typedef uint32_t (*uFuip_t)(uint32_t, int32_t, void*);
 typedef uint32_t (*uFuuu_t)(uint32_t, uint32_t, uint32_t);
 typedef uint32_t (*uFuup_t)(uint32_t, uint32_t, void*);
 typedef uint32_t (*uFupp_t)(uint32_t, void*, void*);
+typedef uint32_t (*uFpii_t)(void*, int32_t, int32_t);
 typedef uint32_t (*uFpuU_t)(void*, uint32_t, uint64_t);
 typedef uint32_t (*uFppu_t)(void*, void*, uint32_t);
 typedef float (*fFuii_t)(uint32_t, int32_t, int32_t);
@@ -465,6 +466,7 @@ typedef intptr_t (*lFpLL_t)(void*, uintptr_t, uintptr_t);
 typedef intptr_t (*lFppi_t)(void*, void*, int32_t);
 typedef intptr_t (*lFppL_t)(void*, void*, uintptr_t);
 typedef uintptr_t (*LFEpi_t)(x64emu_t*, void*, int32_t);
+typedef uintptr_t (*LFEpp_t)(x64emu_t*, void*, void*);
 typedef uintptr_t (*LFpii_t)(void*, int32_t, int32_t);
 typedef uintptr_t (*LFpip_t)(void*, int32_t, void*);
 typedef uintptr_t (*LFppi_t)(void*, void*, int32_t);
@@ -660,6 +662,7 @@ typedef intptr_t (*lFiipL_t)(int32_t, int32_t, void*, uintptr_t);
 typedef intptr_t (*lFipLi_t)(int32_t, void*, uintptr_t, int32_t);
 typedef intptr_t (*lFipLl_t)(int32_t, void*, uintptr_t, intptr_t);
 typedef intptr_t (*lFpuip_t)(void*, uint32_t, int32_t, void*);
+typedef uintptr_t (*LFEpLp_t)(x64emu_t*, void*, uintptr_t, void*);
 typedef uintptr_t (*LFEXii_t)(x64emu_t*, void*, int32_t, int32_t);
 typedef uintptr_t (*LFpLLS_t)(void*, uintptr_t, uintptr_t, void*);
 typedef uintptr_t (*LFppLp_t)(void*, void*, uintptr_t, void*);
@@ -792,6 +795,7 @@ typedef void (*vFppppp_t)(void*, void*, void*, void*, void*);
 typedef int32_t (*iFEiiip_t)(x64emu_t*, int32_t, int32_t, int32_t, void*);
 typedef int32_t (*iFEipii_t)(x64emu_t*, int32_t, void*, int32_t, int32_t);
 typedef int32_t (*iFEpipp_t)(x64emu_t*, void*, int32_t, void*, void*);
+typedef int32_t (*iFEpupu_t)(x64emu_t*, void*, uint32_t, void*, uint32_t);
 typedef int32_t (*iFEpupV_t)(x64emu_t*, void*, uint32_t, void*, void*);
 typedef int32_t (*iFEpLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*);
 typedef int32_t (*iFEpLpV_t)(x64emu_t*, void*, uintptr_t, void*, void*);
@@ -907,6 +911,7 @@ typedef int32_t (*iFEuppup_t)(x64emu_t*, uint32_t, void*, void*, uint32_t, void*
 typedef int32_t (*iFEuppLp_t)(x64emu_t*, uint32_t, void*, void*, uintptr_t, void*);
 typedef int32_t (*iFEpiLpp_t)(x64emu_t*, void*, int32_t, uintptr_t, void*, void*);
 typedef int32_t (*iFEplluu_t)(x64emu_t*, void*, intptr_t, intptr_t, uint32_t, uint32_t);
+typedef int32_t (*iFEpLlpp_t)(x64emu_t*, void*, uintptr_t, intptr_t, void*, void*);
 typedef int32_t (*iFEppipp_t)(x64emu_t*, void*, void*, int32_t, void*, void*);
 typedef int32_t (*iFEppllp_t)(x64emu_t*, void*, void*, intptr_t, intptr_t, void*);
 typedef int32_t (*iFEpppup_t)(x64emu_t*, void*, void*, void*, uint32_t, void*);
@@ -1511,6 +1516,7 @@ void uFuip_32(x64emu_t *emu, uintptr_t fcn) { uFuip_t fn = (uFuip_t)fcn; R_EAX =
 void uFuuu_32(x64emu_t *emu, uintptr_t fcn) { uFuuu_t fn = (uFuuu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); }
 void uFuup_32(x64emu_t *emu, uintptr_t fcn) { uFuup_t fn = (uFuup_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void uFupp_32(x64emu_t *emu, uintptr_t fcn) { uFupp_t fn = (uFupp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); }
+void uFpii_32(x64emu_t *emu, uintptr_t fcn) { uFpii_t fn = (uFpii_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); }
 void uFpuU_32(x64emu_t *emu, uintptr_t fcn) { uFpuU_t fn = (uFpuU_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); }
 void uFppu_32(x64emu_t *emu, uintptr_t fcn) { uFppu_t fn = (uFppu_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); }
 void fFuii_32(x64emu_t *emu, uintptr_t fcn) { fFuii_t fn = (fFuii_t)fcn; float fl = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); fpu_do_push(emu); ST0val = fl; }
@@ -1524,6 +1530,7 @@ void lFpLL_32(x64emu_t *emu, uintptr_t fcn) { lFpLL_t fn = (lFpLL_t)fcn; R_EAX =
 void lFppi_32(x64emu_t *emu, uintptr_t fcn) { lFppi_t fn = (lFppi_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); }
 void lFppL_32(x64emu_t *emu, uintptr_t fcn) { lFppL_t fn = (lFppL_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)))); }
 void LFEpi_32(x64emu_t *emu, uintptr_t fcn) { LFEpi_t fn = (LFEpi_t)fcn; R_EAX = to_ulong(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); }
+void LFEpp_32(x64emu_t *emu, uintptr_t fcn) { LFEpp_t fn = (LFEpp_t)fcn; R_EAX = to_ulong(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); }
 void LFpii_32(x64emu_t *emu, uintptr_t fcn) { LFpii_t fn = (LFpii_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); }
 void LFpip_32(x64emu_t *emu, uintptr_t fcn) { LFpip_t fn = (LFpip_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12))); }
 void LFppi_32(x64emu_t *emu, uintptr_t fcn) { LFppi_t fn = (LFppi_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); }
@@ -1719,6 +1726,7 @@ void lFiipL_32(x64emu_t *emu, uintptr_t fcn) { lFiipL_t fn = (lFiipL_t)fcn; R_EA
 void lFipLi_32(x64emu_t *emu, uintptr_t fcn) { lFipLi_t fn = (lFipLi_t)fcn; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16))); }
 void lFipLl_32(x64emu_t *emu, uintptr_t fcn) { lFipLl_t fn = (lFipLl_t)fcn; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)), to_long(from_ptri(long_t, R_ESP + 16)))); }
 void lFpuip_32(x64emu_t *emu, uintptr_t fcn) { lFpuip_t fn = (lFpuip_t)fcn; R_EAX = to_long(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))); }
+void LFEpLp_32(x64emu_t *emu, uintptr_t fcn) { LFEpLp_t fn = (LFEpLp_t)fcn; R_EAX = to_ulong(fn(emu, from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12))); }
 void LFEXii_32(x64emu_t *emu, uintptr_t fcn) { LFEXii_t fn = (LFEXii_t)fcn; R_EAX = to_ulong(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); }
 void LFpLLS_32(x64emu_t *emu, uintptr_t fcn) { LFpLLS_t fn = (LFpLLS_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), to_ulong(from_ptri(ulong_t, R_ESP + 12)), io_convert32(from_ptriv(R_ESP + 16)))); }
 void LFppLp_32(x64emu_t *emu, uintptr_t fcn) { LFppLp_t fn = (LFppLp_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16))); }
@@ -1851,6 +1859,7 @@ void vFppppp_32(x64emu_t *emu, uintptr_t fcn) { vFppppp_t fn = (vFppppp_t)fcn; f
 void iFEiiip_32(x64emu_t *emu, uintptr_t fcn) { iFEiiip_t fn = (iFEiiip_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); }
 void iFEipii_32(x64emu_t *emu, uintptr_t fcn) { iFEipii_t fn = (iFEipii_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); }
 void iFEpipp_32(x64emu_t *emu, uintptr_t fcn) { iFEpipp_t fn = (iFEpipp_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)); }
+void iFEpupu_32(x64emu_t *emu, uintptr_t fcn) { iFEpupu_t fn = (iFEpupu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); }
 void iFEpupV_32(x64emu_t *emu, uintptr_t fcn) { iFEpupV_t fn = (iFEpupV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); }
 void iFEpLpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpLpp_t fn = (iFEpLpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); }
 void iFEpLpV_32(x64emu_t *emu, uintptr_t fcn) { iFEpLpV_t fn = (iFEpLpV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); }
@@ -1966,6 +1975,7 @@ void iFEuppup_32(x64emu_t *emu, uintptr_t fcn) { iFEuppup_t fn = (iFEuppup_t)fcn
 void iFEuppLp_32(x64emu_t *emu, uintptr_t fcn) { iFEuppLp_t fn = (iFEuppLp_t)fcn; R_EAX = fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), to_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); }
 void iFEpiLpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpiLpp_t fn = (iFEpiLpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); }
 void iFEplluu_32(x64emu_t *emu, uintptr_t fcn) { iFEplluu_t fn = (iFEplluu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), to_long(from_ptri(long_t, R_ESP + 8)), to_long(from_ptri(long_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); }
+void iFEpLlpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpLlpp_t fn = (iFEpLlpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), to_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); }
 void iFEppipp_32(x64emu_t *emu, uintptr_t fcn) { iFEppipp_t fn = (iFEppipp_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)); }
 void iFEppllp_32(x64emu_t *emu, uintptr_t fcn) { iFEppllp_t fn = (iFEppllp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_long(from_ptri(long_t, R_ESP + 12)), to_long(from_ptri(long_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); }
 void iFEpppup_32(x64emu_t *emu, uintptr_t fcn) { iFEpppup_t fn = (iFEpppup_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); }
diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h
index 118dc064..1b16db48 100644
--- a/src/wrapped32/generated/wrapper32.h
+++ b/src/wrapped32/generated/wrapper32.h
@@ -403,6 +403,7 @@ void uFuip_32(x64emu_t *emu, uintptr_t fnc);
 void uFuuu_32(x64emu_t *emu, uintptr_t fnc);
 void uFuup_32(x64emu_t *emu, uintptr_t fnc);
 void uFupp_32(x64emu_t *emu, uintptr_t fnc);
+void uFpii_32(x64emu_t *emu, uintptr_t fnc);
 void uFpuU_32(x64emu_t *emu, uintptr_t fnc);
 void uFppu_32(x64emu_t *emu, uintptr_t fnc);
 void fFuii_32(x64emu_t *emu, uintptr_t fnc);
@@ -416,6 +417,7 @@ void lFpLL_32(x64emu_t *emu, uintptr_t fnc);
 void lFppi_32(x64emu_t *emu, uintptr_t fnc);
 void lFppL_32(x64emu_t *emu, uintptr_t fnc);
 void LFEpi_32(x64emu_t *emu, uintptr_t fnc);
+void LFEpp_32(x64emu_t *emu, uintptr_t fnc);
 void LFpii_32(x64emu_t *emu, uintptr_t fnc);
 void LFpip_32(x64emu_t *emu, uintptr_t fnc);
 void LFppi_32(x64emu_t *emu, uintptr_t fnc);
@@ -611,6 +613,7 @@ void lFiipL_32(x64emu_t *emu, uintptr_t fnc);
 void lFipLi_32(x64emu_t *emu, uintptr_t fnc);
 void lFipLl_32(x64emu_t *emu, uintptr_t fnc);
 void lFpuip_32(x64emu_t *emu, uintptr_t fnc);
+void LFEpLp_32(x64emu_t *emu, uintptr_t fnc);
 void LFEXii_32(x64emu_t *emu, uintptr_t fnc);
 void LFpLLS_32(x64emu_t *emu, uintptr_t fnc);
 void LFppLp_32(x64emu_t *emu, uintptr_t fnc);
@@ -743,6 +746,7 @@ void vFppppp_32(x64emu_t *emu, uintptr_t fnc);
 void iFEiiip_32(x64emu_t *emu, uintptr_t fnc);
 void iFEipii_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpipp_32(x64emu_t *emu, uintptr_t fnc);
+void iFEpupu_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpupV_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpLpp_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpLpV_32(x64emu_t *emu, uintptr_t fnc);
@@ -858,6 +862,7 @@ void iFEuppup_32(x64emu_t *emu, uintptr_t fnc);
 void iFEuppLp_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpiLpp_32(x64emu_t *emu, uintptr_t fnc);
 void iFEplluu_32(x64emu_t *emu, uintptr_t fnc);
+void iFEpLlpp_32(x64emu_t *emu, uintptr_t fnc);
 void iFEppipp_32(x64emu_t *emu, uintptr_t fnc);
 void iFEppllp_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpppup_32(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped32/wrappedexpat.c b/src/wrapped32/wrappedexpat.c
new file mode 100644
index 00000000..1467aaaf
--- /dev/null
+++ b/src/wrapped32/wrappedexpat.c
@@ -0,0 +1,696 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <dlfcn.h>
+
+#include "wrappedlibs.h"
+
+#include "debug.h"
+#include "wrapper32.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+#include "emu/x64emu_private.h"
+#include "callback.h"
+#include "librarian.h"
+#include "box32context.h"
+#include "emu/x64emu_private.h"
+#include "myalign32.h"
+
+static const char* expatName = "libexpat.so.1";
+#define LIBNAME expat
+
+#include "generated/wrappedexpattypes32.h"
+
+#include "wrappercallback32.h"
+
+#define SUPER() \
+GO(0)   \
+GO(1)   \
+GO(2)   \
+GO(3)   \
+GO(4)
+
+// Start ...
+#define GO(A)   \
+static uintptr_t my_Start_fct_##A = 0;                                                      \
+static void* my_Start_##A(void* data, void* name, void* attr)                               \
+{                                                                                           \
+    return (void*)RunFunctionFmt(my_Start_fct_##A, "ppp", data, name, attr);          \
+}
+SUPER()
+#undef GO
+static void* find_Start_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_Start_fct_##A == (uintptr_t)fct) return my_Start_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_Start_fct_##A == 0) {my_Start_fct_##A = (uintptr_t)fct; return my_Start_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat Start callback\n");
+    return NULL;
+}
+// End ...
+#define GO(A)   \
+static uintptr_t my_End_fct_##A = 0;                                \
+static void my_End_##A(void* data, void* name)                      \
+{                                                                   \
+    RunFunctionFmt(my_End_fct_##A, "pp", data, name);         \
+}
+SUPER()
+#undef GO
+static void* find_End_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_End_fct_##A == (uintptr_t)fct) return my_End_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_End_fct_##A == 0) {my_End_fct_##A = (uintptr_t)fct; return my_End_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat End callback\n");
+    return NULL;
+}
+// CharData ...
+#define GO(A)   \
+static uintptr_t my_CharData_fct_##A = 0;                               \
+static void my_CharData_##A(void* data, void* s, int l)                 \
+{                                                                       \
+    RunFunctionFmt(my_CharData_fct_##A, "ppi", data, s, l);       \
+}
+SUPER()
+#undef GO
+static void* find_CharData_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_CharData_fct_##A == (uintptr_t)fct) return my_CharData_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_CharData_fct_##A == 0) {my_CharData_fct_##A = (uintptr_t)fct; return my_CharData_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat CharData callback\n");
+    return NULL;
+}
+// StartNamespaceDecl ...
+#define GO(A)   \
+static uintptr_t my_StartNamespaceDecl_fct_##A = 0;                                     \
+static void my_StartNamespaceDecl_##A(void* data, void* name, void* attr)               \
+{                                                                                       \
+    RunFunctionFmt(my_StartNamespaceDecl_fct_##A, "ppp", data, name, attr);       \
+}
+SUPER()
+#undef GO
+static void* find_StartNamespaceDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_StartNamespaceDecl_fct_##A == (uintptr_t)fct) return my_StartNamespaceDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_StartNamespaceDecl_fct_##A == 0) {my_StartNamespaceDecl_fct_##A = (uintptr_t)fct; return my_StartNamespaceDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat StartNamespaceDecl callback\n");
+    return NULL;
+}
+// EndNamespaceDecl ...
+#define GO(A)   \
+static uintptr_t my_EndNamespaceDecl_fct_##A = 0;                               \
+static void my_EndNamespaceDecl_##A(void* data, void* name)                     \
+{                                                                               \
+    RunFunctionFmt(my_EndNamespaceDecl_fct_##A, "pp", data, name);        \
+}
+SUPER()
+#undef GO
+static void* find_EndNamespaceDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_EndNamespaceDecl_fct_##A == (uintptr_t)fct) return my_EndNamespaceDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_EndNamespaceDecl_fct_##A == 0) {my_EndNamespaceDecl_fct_##A = (uintptr_t)fct; return my_EndNamespaceDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat EndNamespaceDecl callback\n");
+    return NULL;
+}
+// StartElement ...
+#define GO(A)   \
+static uintptr_t my_StartElement_fct_##A = 0;                                       \
+static void my_StartElement_##A(void* data, void* name, void* attr)                 \
+{                                                                                   \
+    RunFunctionFmt(my_StartElement_fct_##A, "ppp", data, name, attr);         \
+}
+SUPER()
+#undef GO
+static void* find_StartElement_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_StartElement_fct_##A == (uintptr_t)fct) return my_StartElement_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_StartElement_fct_##A == 0) {my_StartElement_fct_##A = (uintptr_t)fct; return my_StartElement_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat StartElement callback\n");
+    return NULL;
+}
+// EndElement ...
+#define GO(A)   \
+static uintptr_t my_EndElement_fct_##A = 0;                                 \
+static void my_EndElement_##A(void* data, void* name)                       \
+{                                                                           \
+    RunFunctionFmt(my_EndElement_fct_##A, "pp", data, name);          \
+}
+SUPER()
+#undef GO
+static void* find_EndElement_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_EndElement_fct_##A == (uintptr_t)fct) return my_EndElement_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_EndElement_fct_##A == 0) {my_EndElement_fct_##A = (uintptr_t)fct; return my_EndElement_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat EndElement callback\n");
+    return NULL;
+}
+// ProcessingInstruction ...
+#define GO(A)   \
+static uintptr_t my_ProcessingInstruction_fct_##A = 0;                            \
+static void my_ProcessingInstruction_##A(void* a, void* b, void* c)               \
+{                                                                                 \
+    RunFunctionFmt(my_ProcessingInstruction_fct_##A, "ppp", a, b, c);         \
+}
+SUPER()
+#undef GO
+static void* find_ProcessingInstruction_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_ProcessingInstruction_fct_##A == (uintptr_t)fct) return my_ProcessingInstruction_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_ProcessingInstruction_fct_##A == 0) {my_ProcessingInstruction_fct_##A = (uintptr_t)fct; return my_ProcessingInstruction_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat ProcessingInstruction callback\n");
+    return NULL;
+}
+// Comment ...
+#define GO(A)   \
+static uintptr_t my_Comment_fct_##A = 0;                        \
+static void my_Comment_##A(void* a, void* b)                    \
+{                                                               \
+    RunFunctionFmt(my_Comment_fct_##A, "pp", a, b);       \
+}
+SUPER()
+#undef GO
+static void* find_Comment_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_Comment_fct_##A == (uintptr_t)fct) return my_Comment_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_Comment_fct_##A == 0) {my_Comment_fct_##A = (uintptr_t)fct; return my_Comment_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat Comment callback\n");
+    return NULL;
+}
+// StartCdataSection ...
+#define GO(A)   \
+static uintptr_t my_StartCdataSection_fct_##A = 0;                       \
+static void my_StartCdataSection_##A(void* data)                         \
+{                                                                        \
+    RunFunctionFmt(my_StartCdataSection_fct_##A, "p", data);      \
+}
+SUPER()
+#undef GO
+static void* find_StartCdataSection_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_StartCdataSection_fct_##A == (uintptr_t)fct) return my_StartCdataSection_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_StartCdataSection_fct_##A == 0) {my_StartCdataSection_fct_##A = (uintptr_t)fct; return my_StartCdataSection_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat StartCdataSection callback\n");
+    return NULL;
+}
+// EndCdataSection ...
+#define GO(A)   \
+static uintptr_t my_EndCdataSection_fct_##A = 0;                       \
+static void my_EndCdataSection_##A(void* data)                         \
+{                                                                      \
+    RunFunctionFmt(my_EndCdataSection_fct_##A, "p", data);        \
+}
+SUPER()
+#undef GO
+static void* find_EndCdataSection_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_EndCdataSection_fct_##A == (uintptr_t)fct) return my_EndCdataSection_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_EndCdataSection_fct_##A == 0) {my_EndCdataSection_fct_##A = (uintptr_t)fct; return my_EndCdataSection_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat EndCdataSection callback\n");
+    return NULL;
+}
+// Default ...
+#define GO(A)   \
+static uintptr_t my_Default_fct_##A = 0;                                    \
+static void my_Default_##A(void* data, void* name, int len)                 \
+{                                                                           \
+    RunFunctionFmt(my_Default_fct_##A, "ppi", data, name, len);       \
+}
+SUPER()
+#undef GO
+static void* find_Default_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_Default_fct_##A == (uintptr_t)fct) return my_Default_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_Default_fct_##A == 0) {my_Default_fct_##A = (uintptr_t)fct; return my_Default_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat Default callback\n");
+    return NULL;
+}
+// StartDoctypeDecl ...
+#define GO(A)   \
+static uintptr_t my_StartDoctypeDecl_fct_##A = 0;                                    \
+static void my_StartDoctypeDecl_##A(void* a, void* b, void* c, void* d, int e)       \
+{                                                                                    \
+    RunFunctionFmt(my_StartDoctypeDecl_fct_##A, "ppppi", a, b, c, d, e);      \
+}
+SUPER()
+#undef GO
+static void* find_StartDoctypeDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_StartDoctypeDecl_fct_##A == (uintptr_t)fct) return my_StartDoctypeDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_StartDoctypeDecl_fct_##A == 0) {my_StartDoctypeDecl_fct_##A = (uintptr_t)fct; return my_StartDoctypeDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat StartDoctypeDecl callback\n");
+    return NULL;
+}
+// EndDoctypeDecl ...
+#define GO(A)   \
+static uintptr_t my_EndDoctypeDecl_fct_##A = 0;                       \
+static void my_EndDoctypeDecl_##A(void* data)                         \
+{                                                                     \
+    RunFunctionFmt(my_EndDoctypeDecl_fct_##A, "p", data);         \
+}
+SUPER()
+#undef GO
+static void* find_EndDoctypeDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_EndDoctypeDecl_fct_##A == (uintptr_t)fct) return my_EndDoctypeDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_EndDoctypeDecl_fct_##A == 0) {my_EndDoctypeDecl_fct_##A = (uintptr_t)fct; return my_EndDoctypeDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat EndDoctypeDecl callback\n");
+    return NULL;
+}
+// EntityDecl ...
+#define GO(A)   \
+static uintptr_t my_EntityDecl_fct_##A = 0;                                                                \
+static void my_EntityDecl_##A(void* a, void* b, int c, void* d, int e, void* f, void* g, void* h, void* i) \
+{                                                                                                          \
+    RunFunctionFmt(my_EntityDecl_fct_##A, "ppipipppp", a, b, c, d, e, f, g, h, i);                    \
+}
+SUPER()
+#undef GO
+static void* find_EntityDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_EntityDecl_fct_##A == (uintptr_t)fct) return my_EntityDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_EntityDecl_fct_##A == 0) {my_EntityDecl_fct_##A = (uintptr_t)fct; return my_EntityDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat EntityDecl callback\n");
+    return NULL;
+}
+// ElementDecl ...
+#define GO(A)   \
+static uintptr_t my_ElementDecl_fct_##A = 0;                            \
+static void my_ElementDecl_##A(void* a, void* b, void* c)               \
+{                                                                       \
+    RunFunctionFmt(my_ElementDecl_fct_##A, "ppp", a, b, c);       \
+}
+SUPER()
+#undef GO
+static void* find_ElementDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_ElementDecl_fct_##A == (uintptr_t)fct) return my_ElementDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_ElementDecl_fct_##A == 0) {my_ElementDecl_fct_##A = (uintptr_t)fct; return my_ElementDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat ElementDecl callback\n");
+    return NULL;
+}
+// UnknownEncoding ...
+#define GO(A)   \
+static uintptr_t my_UnknownEncoding_fct_##A = 0;                                        \
+static int my_UnknownEncoding_##A(void* a, void* b, void* c)                            \
+{                                                                                       \
+    return (int)RunFunctionFmt(my_UnknownEncoding_fct_##A, "ppp", a, b, c);       \
+}
+SUPER()
+#undef GO
+static void* find_UnknownEncoding_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_UnknownEncoding_fct_##A == (uintptr_t)fct) return my_UnknownEncoding_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_UnknownEncoding_fct_##A == 0) {my_UnknownEncoding_fct_##A = (uintptr_t)fct; return my_UnknownEncoding_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat UnknownEncoding callback\n");
+    return NULL;
+}
+// UnparsedEntityDecl ...
+#define GO(A)   \
+static uintptr_t my_UnparsedEntityDecl_fct_##A = 0;                                         \
+static void my_UnparsedEntityDecl_##A(void* a, void* b, void* c, void* d, void* e, void* f) \
+{                                                                                           \
+    RunFunctionFmt(my_UnparsedEntityDecl_fct_##A, "pppppp", a, b, c, d, e, f);        \
+}
+SUPER()
+#undef GO
+static void* find_UnparsedEntityDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_UnparsedEntityDecl_fct_##A == (uintptr_t)fct) return my_UnparsedEntityDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_UnparsedEntityDecl_fct_##A == 0) {my_UnparsedEntityDecl_fct_##A = (uintptr_t)fct; return my_UnparsedEntityDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat UnparsedEntityDecl callback\n");
+    return NULL;
+}
+// NotationDecl ...
+#define GO(A)   \
+static uintptr_t my_NotationDecl_fct_##A = 0;                                    \
+static void my_NotationDecl_##A(void* a, void* b, void* c, void* d, void* e)     \
+{                                                                                \
+    RunFunctionFmt(my_NotationDecl_fct_##A, "ppppp", a, b, c, d, e);      \
+}
+SUPER()
+#undef GO
+static void* find_NotationDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_NotationDecl_fct_##A == (uintptr_t)fct) return my_NotationDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_NotationDecl_fct_##A == 0) {my_NotationDecl_fct_##A = (uintptr_t)fct; return my_NotationDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat NotationDecl callback\n");
+    return NULL;
+}
+// NotStandalone ...
+#define GO(A)   \
+static uintptr_t my_NotStandalone_fct_##A = 0;                                   \
+static int my_NotStandalone_##A(void* data)                                      \
+{                                                                                \
+    return (int)RunFunctionFmt(my_NotStandalone_fct_##A, "p", data);      \
+}
+SUPER()
+#undef GO
+static void* find_NotStandalone_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_NotStandalone_fct_##A == (uintptr_t)fct) return my_NotStandalone_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_NotStandalone_fct_##A == 0) {my_NotStandalone_fct_##A = (uintptr_t)fct; return my_NotStandalone_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat NotStandalone callback\n");
+    return NULL;
+}
+// ExternalEntityRef ...
+#define GO(A)   \
+static uintptr_t my_ExternalEntityRef_fct_##A = 0;                                                \
+static int my_ExternalEntityRef_##A(void* a, void* b, void* c, void* d, void* e)                  \
+{                                                                                                 \
+    return (int)RunFunctionFmt(my_ExternalEntityRef_fct_##A, "ppppp", a, b, c, d, e);         \
+}
+SUPER()
+#undef GO
+static void* find_ExternalEntityRef_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_ExternalEntityRef_fct_##A == (uintptr_t)fct) return my_ExternalEntityRef_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_ExternalEntityRef_fct_##A == 0) {my_ExternalEntityRef_fct_##A = (uintptr_t)fct; return my_ExternalEntityRef_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat ExternalEntityRef callback\n");
+    return NULL;
+}
+// XmlDecl ...
+#define GO(A)   \
+static uintptr_t my_XmlDecl_fct_##A = 0;                                \
+static void my_XmlDecl_##A(void* a, void* b, void* c, int d)            \
+{                                                                       \
+    RunFunctionFmt(my_XmlDecl_fct_##A, "pppi", a, b, c, d);       \
+}
+SUPER()
+#undef GO
+static void* find_XmlDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_XmlDecl_fct_##A == (uintptr_t)fct) return my_XmlDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_XmlDecl_fct_##A == 0) {my_XmlDecl_fct_##A = (uintptr_t)fct; return my_XmlDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat XmlDecl callback\n");
+    return NULL;
+}
+// AttlistDecl ...
+#define GO(A)   \
+static uintptr_t my_AttlistDecl_fct_##A = 0;                                        \
+static void my_AttlistDecl_##A(void* a, void* b, void* c, void* d, void* e, int f)  \
+{                                                                                   \
+    RunFunctionFmt(my_AttlistDecl_fct_##A, "pppppi", a, b, c, d, e, f);       \
+}
+SUPER()
+#undef GO
+static void* find_AttlistDecl_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_AttlistDecl_fct_##A == (uintptr_t)fct) return my_AttlistDecl_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_AttlistDecl_fct_##A == 0) {my_AttlistDecl_fct_##A = (uintptr_t)fct; return my_AttlistDecl_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat AttlistDecl callback\n");
+    return NULL;
+}
+// SkippedEntity ...
+#define GO(A)   \
+static uintptr_t my_SkippedEntity_fct_##A = 0;                            \
+static void my_SkippedEntity_##A(void* a, void* b, int c)                 \
+{                                                                         \
+    RunFunctionFmt(my_SkippedEntity_fct_##A, "ppi", a, b, c);         \
+}
+SUPER()
+#undef GO
+static void* find_SkippedEntity_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_SkippedEntity_fct_##A == (uintptr_t)fct) return my_SkippedEntity_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_SkippedEntity_fct_##A == 0) {my_SkippedEntity_fct_##A = (uintptr_t)fct; return my_SkippedEntity_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for expat SkippedEntity callback\n");
+    return NULL;
+}
+#undef SUPER
+
+EXPORT void my32_XML_SetElementHandler(x64emu_t* emu, void* p, void* start, void* end)
+{
+    my->XML_SetElementHandler(p, find_Start_Fct(start), find_End_Fct(end));
+}
+
+EXPORT void my32_XML_SetCharacterDataHandler(x64emu_t* emu, void* p, void* h)
+{
+    my->XML_SetCharacterDataHandler(p, find_CharData_Fct(h));
+}
+
+//EXPORT void my32_XML_SetNamespaceDeclHandler(x64emu_t* emu, void* p, void* start, void* end)
+//{
+//    my->XML_SetNamespaceDeclHandler(p, find_StartNamespaceDecl_Fct(start), find_EndNamespaceDecl_Fct(end));
+//}
+
+//EXPORT void my32_XML_SetEntityDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetEntityDeclHandler(p, find_EntityDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetStartDoctypeDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetStartDoctypeDeclHandler(p, find_StartDoctypeDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetEndDoctypeDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetEndDoctypeDeclHandler(p, find_EndDoctypeDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetElementDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetElementDeclHandler(p, find_ElementDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetDefaultHandlerExpand(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetDefaultHandlerExpand(p, find_Default_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetCommentHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetCommentHandler(p, find_Comment_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetProcessingInstructionHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetProcessingInstructionHandler(p, find_ProcessingInstruction_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetStartElementHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetStartElementHandler(p, find_StartElement_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetEndElementHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetEndElementHandler(p, find_EndElement_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetUnknownEncodingHandler(x64emu_t* emu, void* p, void* f, void* d)
+//{
+//    my->XML_SetUnknownEncodingHandler(p, find_UnknownEncoding_Fct(f), d);
+//}
+
+//EXPORT void my32_XML_SetUnparsedEntityDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetUnparsedEntityDeclHandler(p, find_UnparsedEntityDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetNotationDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetNotationDeclHandler(p, find_NotationDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetStartNamespaceDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetStartNamespaceDeclHandler(p, find_StartNamespaceDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetEndNamespaceDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetEndNamespaceDeclHandler(p, find_EndNamespaceDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetStartCdataSectionHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetStartCdataSectionHandler(p, find_StartCdataSection_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetEndCdataSectionHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetEndCdataSectionHandler(p, find_EndCdataSection_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetDefaultHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetDefaultHandler(p, find_Default_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetNotStandaloneHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetNotStandaloneHandler(p, find_NotStandalone_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetExternalEntityRefHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetExternalEntityRefHandler(p, find_ExternalEntityRef_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetXmlDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetXmlDeclHandler(p, find_XmlDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetAttlistDeclHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetAttlistDeclHandler(p, find_AttlistDecl_Fct(f));
+//}
+
+//EXPORT void my32_XML_SetSkippedEntityHandler(x64emu_t* emu, void* p, void* f)
+//{
+//    my->XML_SetSkippedEntityHandler(p, find_SkippedEntity_Fct(f));
+//}
+
+EXPORT void my32_XML_SetDoctypeDeclHandler(x64emu_t* emu, void* p, void* start, void* end)
+{
+    (void)emu;
+    my->XML_SetDoctypeDeclHandler(p, find_Start_Fct(start), find_End_Fct(end));
+}
+
+#include "wrappedlib_init32.h"
diff --git a/src/wrapped32/wrappedexpat_private.h b/src/wrapped32/wrappedexpat_private.h
new file mode 100644
index 00000000..975de9d5
--- /dev/null
+++ b/src/wrapped32/wrappedexpat_private.h
@@ -0,0 +1,71 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error Meh...
+#endif
+
+//GO(_INTERNAL_trim_to_complete_utf8_characters, 
+//GO(XML_DefaultCurrent, vFp)
+GO(XML_ErrorString, pFu)
+//GO(XML_ExpatVersion, pFv)
+//GO(XML_ExpatVersionInfo, pFp)   // return a struct of 3 int. Use shadow pointer on ARM64 and x86_64
+//GO(XML_ExternalEntityParserCreate, pFppp)
+//GO(XML_FreeContentModel, vFpp)
+//GO(XML_GetBase, pFp)
+GO(XML_GetBuffer, pFpi)
+//GO(XML_GetCurrentByteCount, iFp)
+//GO(XML_GetCurrentByteIndex, lFp)
+//GO(XML_GetCurrentColumnNumber, LFp)
+GO(XML_GetCurrentLineNumber, LFp)
+GO(XML_GetErrorCode, uFp)
+//GO(XML_GetFeatureList, pFv)
+//GO(XML_GetIdAttributeIndex, iFp)
+//GO(XML_GetInputContext, pFppp)
+//GO(XML_GetParsingStatus, vFpp)
+//GO(XML_GetSpecifiedAttributeCount, iFp)
+//GO(XML_MemFree, vFpp)
+//GO(XML_MemMalloc, pFpL)
+//GO(XML_MemRealloc, pFppL)
+//GO(XML_Parse, uFppii)
+GO(XML_ParseBuffer, uFpii)
+GO(XML_ParserCreate, pFp)
+//GO(XML_ParserCreate_MM, pFpppp) // return a structure
+//GO(XML_ParserCreateNS, pFpc)
+GO(XML_ParserFree, vFp)
+//GO(XML_ParserReset, CFpp)
+//GO(XML_ResumeParser, uFp)
+//GOM(XML_SetAttlistDeclHandler, vFEpp)
+//GO(XML_SetBase, uFpp)
+//GOM(XML_SetCdataSectionHandler, vFEppp)
+GOM(XML_SetCharacterDataHandler, vFEpp)
+//GOM(XML_SetCommentHandler, vFEpp)
+//GOM(XML_SetDefaultHandler, vFEpp)
+//GOM(XML_SetDefaultHandlerExpand, vFEpp)
+GOM(XML_SetDoctypeDeclHandler, vFEppp)
+//GOM(XML_SetElementDeclHandler, vFEpp)
+GOM(XML_SetElementHandler, vFEppp)
+//GO(XML_SetEncoding, uFpp)
+//GOM(XML_SetEndCdataSectionHandler, vFEpp)
+//GOM(XML_SetEndDoctypeDeclHandler, vFEpp)
+//GOM(XML_SetEndElementHandler, vFEpp)
+//GOM(XML_SetEndNamespaceDeclHandler, vFEpp)
+//GOM(XML_SetEntityDeclHandler, vFEpp)
+//GOM(XML_SetExternalEntityRefHandler, vFEpp)
+//GO(XML_SetExternalEntityRefHandlerArg, vFpp)
+//GO(XML_SetHashSalt, iFpL)
+//GOM(XML_SetNamespaceDeclHandler, vFEppp)
+//GOM(XML_SetNotationDeclHandler, vFEpp)
+//GOM(XML_SetNotStandaloneHandler, vFEpp)
+//GO(XML_SetParamEntityParsing, iFpu)
+//GOM(XML_SetProcessingInstructionHandler, vFEpp)
+//GO(XML_SetReturnNSTriplet, vFpi)
+//GOM(XML_SetSkippedEntityHandler, vFEpp)
+//GOM(XML_SetStartCdataSectionHandler, vFEpp)
+//GOM(XML_SetStartDoctypeDeclHandler, vFEpp)
+//GOM(XML_SetStartElementHandler, vFEpp)
+//GOM(XML_SetStartNamespaceDeclHandler, vFEpp)
+//GOM(XML_SetUnknownEncodingHandler, vFEppp)
+//GOM(XML_SetUnparsedEntityDeclHandler, vFEpp)
+GO(XML_SetUserData, vFpp)
+//GOM(XML_SetXmlDeclHandler, vFEpp)
+//GO(XML_StopParser, uFpC)
+//GO(XML_UseForeignDTD, uFpC)
+//GO(XML_UseParserAsHandlerArg, vFp)
diff --git a/src/wrapped32/wrappedfreetype.c b/src/wrapped32/wrappedfreetype.c
index 1b06fe13..685ad760 100644
--- a/src/wrapped32/wrappedfreetype.c
+++ b/src/wrapped32/wrappedfreetype.c
@@ -201,6 +201,46 @@ typedef struct  FT_MemoryRec_s
     void*           realloc;
 } FT_MemoryRec_t;
 
+typedef struct  PS_PrivateRec_s
+{
+    int        unique_id;
+    int        lenIV;
+    uint8_t    num_blue_values;
+    uint8_t    num_other_blues;
+    uint8_t    num_family_blues;
+    uint8_t    num_family_other_blues;
+    int16_t    blue_values[14];
+    int16_t    other_blues[10];
+    int16_t    family_blues      [14];
+    int16_t    family_other_blues[10];
+    long       blue_scale;
+    int        blue_shift;
+    int        blue_fuzz;
+    uint16_t   standard_width[1];
+    uint16_t   standard_height[1];
+    uint8_t    num_snap_widths;
+    uint8_t    num_snap_heights;
+    uint8_t    force_bold;
+    uint8_t    round_stem_up;
+    int16_t    snap_widths [13];
+    int16_t    snap_heights[13];
+    long       expansion_factor;
+    long       language_group;
+    long       password;
+    int16_t    min_feature[2];
+} PS_PrivateRec_t;
+
+typedef struct  BDF_PropertyRec_s
+{
+    int  type;
+    union {
+        void*     atom; //const char*
+        int       integer;
+        uint32_t  cardinal;
+
+    } u;
+} BDF_PropertyRec_t;
+
 // 32bits FreeType structures
 typedef union  FT_StreamDesc_32_s
 {
@@ -372,6 +412,47 @@ typedef struct  FT_MemoryRec_32_s
     ptr_t           realloc;//void*
 } FT_MemoryRec_32_t;
 
+typedef struct  PS_PrivateRec_32_s
+{
+    int        unique_id;
+    int        lenIV;
+    uint8_t    num_blue_values;
+    uint8_t    num_other_blues;
+    uint8_t    num_family_blues;
+    uint8_t    num_family_other_blues;
+    int16_t    blue_values[14];
+    int16_t    other_blues[10];
+    int16_t    family_blues      [14];
+    int16_t    family_other_blues[10];
+    long_t     blue_scale;
+    int        blue_shift;
+    int        blue_fuzz;
+    uint16_t   standard_width[1];
+    uint16_t   standard_height[1];
+    uint8_t    num_snap_widths;
+    uint8_t    num_snap_heights;
+    uint8_t    force_bold;
+    uint8_t    round_stem_up;
+    int16_t    snap_widths [13];
+    int16_t    snap_heights[13];
+    long_t     expansion_factor;
+    long_t     language_group;
+    long_t     password;
+    int16_t    min_feature[2];
+} PS_PrivateRec_32_t;
+
+typedef struct  BDF_PropertyRec_32_s
+{
+    int  type;
+    union {
+        ptr_t     atom; //const char*
+        int       integer;
+        uint32_t  cardinal;
+
+    } u;
+} BDF_PropertyRec_32_t;
+
+
 void inplace_FT_GlyphSlot_shrink(void* a)
 {
     if(!a) return;
@@ -609,6 +690,53 @@ void inplace_FT_FaceRec_enlarge(void* a)
     inplace_FT_GlyphSlot_enlarge(glyphslot);
 }
 
+void convert_PS_PrivateRec_to_32(void* d, void* s)
+{
+    PS_PrivateRec_t* src = s;
+    PS_PrivateRec_32_t* dst = d;
+
+    dst->unique_id = src->unique_id;
+    dst->lenIV = src->lenIV;
+    dst->num_blue_values = src->num_blue_values;
+    dst->num_other_blues = src->num_other_blues;
+    dst->num_family_blues = src->num_family_blues;
+    dst->num_family_other_blues = src->num_family_other_blues;
+    memcpy(dst->blue_values, src->blue_values, sizeof(dst->blue_values));
+    memcpy(dst->other_blues, src->other_blues, sizeof(dst->other_blues));
+    memcpy(dst->family_blues, src->family_blues, sizeof(dst->family_blues));
+    memcpy(dst->family_other_blues, src->family_other_blues, sizeof(dst->family_other_blues));
+    dst->blue_scale = src->blue_scale;
+    dst->blue_shift = src->blue_shift;
+    dst->blue_fuzz = src->blue_fuzz;
+    dst->standard_width[0] = src->standard_width[0];
+    dst->standard_height[0] = src->standard_height[0];
+    dst->num_snap_widths = src->num_snap_widths;
+    dst->num_snap_heights = src->num_snap_heights;
+    dst->force_bold = src->force_bold;
+    dst->round_stem_up = src->round_stem_up;
+    memcpy(dst->snap_widths, src->snap_widths, sizeof(dst->snap_widths));
+    memcpy(dst->snap_heights, src->snap_heights, sizeof(dst->snap_heights));
+    dst->expansion_factor = src->expansion_factor;
+    dst->language_group = src->language_group;
+    dst->password = src->password;
+    dst->min_feature[0] = src->min_feature[0];
+    dst->min_feature[1] = src->min_feature[1];
+}
+
+void convert_BDF_PropertyRec_to_32(void* d, void* s)
+{
+    BDF_PropertyRec_t* src = s;
+    BDF_PropertyRec_32_t* dst = d;
+
+    dst->type = src->type;
+    switch(dst->type) {
+        case 0: break;
+        case 1: dst->u.atom = to_ptrv(src->u.atom); break;
+        case 2: dst->u.integer = src->u.integer; break;
+        case 3: dst->u.cardinal = src->u.cardinal; break;
+    }
+}
+
 #define ADDED_FUNCTIONS()                   \
 
 #include "generated/wrappedfreetypetypes32.h"
@@ -954,6 +1082,125 @@ EXPORT int my32_FT_New_Memory_Face(x64emu_t* emu, void* lib, void* base, long si
     return ret;
 }
 
+EXPORT uint32_t my32_FT_Get_Sfnt_Name_Count(x64emu_t* emu, void* face)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    uint32_t ret = my->FT_Get_Sfnt_Name_Count(face);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT uint32_t my32_FT_Get_Sfnt_Name(x64emu_t* emu, void* face, uint32_t idx, void* name)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    uint32_t ret = my->FT_Get_Sfnt_Name(face, idx, name);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT int my32_FT_Get_Glyph_Name(x64emu_t* emu, void* face, uint32_t index, void* buff, uint32_t size)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Get_Glyph_Name(face, index, buff, size);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT void* my32_FT_Get_X11_Font_Format(x64emu_t* emu, void* face)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    void* ret = my->FT_Get_X11_Font_Format(face);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT void* my32_FT_Get_Postscript_Name(x64emu_t* emu, void* face)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    void* ret = my->FT_Get_Postscript_Name(face);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT int my32_FT_Load_Sfnt_Table(x64emu_t* emu, void* face, unsigned long tag, long offset, void*  buff, ulong_t* length)
+{
+    unsigned long len_l = 0;
+    if(length) len_l = from_ulong(*length);
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Load_Sfnt_Table(face, tag, offset, buff, length?(&len_l):NULL);
+    inplace_FT_FaceRec_shrink(face);
+    if(length) *length = to_ulong(len_l);
+    return ret;
+}
+
+EXPORT unsigned long my32_FT_Get_First_Char(x64emu_t* emu, void* face, uint32_t* index)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    unsigned long ret = my->FT_Get_First_Char(face, index);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT int my32_FT_Get_PS_Font_Info(x64emu_t* emu, void* face, PS_PrivateRec_32_t* info)
+{
+    PS_PrivateRec_t info_l = {0};
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Get_PS_Font_Info(face, &info_l);
+    inplace_FT_FaceRec_shrink(face);
+    convert_PS_PrivateRec_to_32(info, &info_l);
+    return ret;
+}
+
+EXPORT int my32_FT_Select_Charmap(x64emu_t* emu, void* face, int encoding)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Select_Charmap(face, encoding);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT void* my32_FT_Get_Sfnt_Table(x64emu_t* emu, void* face, int tag)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    void* ret = my->FT_Get_Sfnt_Table(face, tag);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT int my32_FT_Select_Size(x64emu_t* emu, void* face, int index)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Select_Size(face, index);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT unsigned long my32_FT_Get_Next_Char(x64emu_t* emu, void* face, unsigned long code, void* buff)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    unsigned long ret = my->FT_Get_Next_Char(face, code, buff);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT int my32_FT_Has_PS_Glyph_Names(x64emu_t* emu, void* face)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Has_PS_Glyph_Names(face);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT int my32_FT_Get_BDF_Property(x64emu_t* emu, void* face, void* name, BDF_PropertyRec_32_t* prop)
+{
+    BDF_PropertyRec_t prop_l = {0};
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Get_BDF_Property(face, name, &prop_l);
+    inplace_FT_FaceRec_shrink(face);
+    convert_BDF_PropertyRec_to_32(prop, &prop_l);
+    return ret;
+}
+
 EXPORT int my32_FT_Done_Face(x64emu_t* emu, void* face)
 {
     inplace_FT_FaceRec_enlarge(face);
diff --git a/src/wrapped32/wrappedfreetype_private.h b/src/wrapped32/wrappedfreetype_private.h
index e5e7904f..cb2ca559 100644
--- a/src/wrapped32/wrappedfreetype_private.h
+++ b/src/wrapped32/wrappedfreetype_private.h
@@ -38,7 +38,7 @@ GO(FT_FloorFix, lFl)
 //GO(FT_Get_Advance, iFpiup)
 //GO(FT_Get_Advances, iFpuuip)
 //GO(FT_Get_BDF_Charset_ID, 
-//GO(FT_Get_BDF_Property, 
+GOM(FT_Get_BDF_Property, iFEppp)
 GOM(FT_Get_Char_Index, uFEpL)
 //GO(FT_Get_Charmap_Index, iFp)
 //GO(FT_Get_Color_Glyph_Layer, iFpupp)
@@ -50,33 +50,33 @@ GOM(FT_Get_Char_Index, uFEpL)
 //GO(FT_Get_CID_Registry_Ordering_Supplement, 
 //GO(FT_Get_CMap_Format, 
 //GO(FT_Get_CMap_Language_ID, 
-//GO(FT_Get_First_Char, LFpp)
+GOM(FT_Get_First_Char, LFEpp)
 //GO(FT_Get_Font_Format, pFp)
 //GO(FT_Get_FSType_Flags, WFp)
 //GO(FT_Get_Gasp, 
 //GO(FT_Get_Glyph, iFpp)
-//GO(FT_Get_Glyph_Name, iFpupu)
+GOM(FT_Get_Glyph_Name, iFEpupu)
 //GO(FT_Get_Kerning, iFpuuup)
 //GO(FT_Get_MM_Blend_Coordinates, 
 //GO(FT_Get_MM_Var, iFpp)
 //GO(FT_Get_Module, pFpp)
 //GO(FT_Get_Multi_Master, 
 //GO(FT_Get_Name_Index, uFpp)
-//GO(FT_Get_Next_Char, LFpLp)
+GOM(FT_Get_Next_Char, LFEpLp)
 //GO(FT_Get_Paint, iFppip)    // FT_OpaquePaint is a struct with "pi"
 //GO(FT_Get_Paint_Layers, iFppp)
 //GO(FT_Get_PFR_Advance, 
 //GO(FT_Get_PFR_Kerning, 
 //GO(FT_Get_PFR_Metrics, 
-//GO(FT_Get_Postscript_Name, pFp)
-//GO(FT_Get_PS_Font_Info, iFpp)
+GOM(FT_Get_Postscript_Name, pFEp)
+GOM(FT_Get_PS_Font_Info, iFEpp)
 //GO(FT_Get_PS_Font_Private, 
 //GO(FT_Get_PS_Font_Value, 
 //GO(FT_Get_Renderer, pFpu)
 //GO(FT_Get_Sfnt_LangTag, 
-//GO(FT_Get_Sfnt_Name, iFpip)
-//GO(FT_Get_Sfnt_Name_Count, uFp)
-//GO(FT_Get_Sfnt_Table, pFpi)
+GOM(FT_Get_Sfnt_Name, iFEpip)
+GOM(FT_Get_Sfnt_Name_Count, uFEp)
+GOM(FT_Get_Sfnt_Table, pFEpi)
 //GO(FT_Get_SubGlyph_Info, iFpuppppp)
 //GO(FT_Get_Track_Kerning, iFplip)
 //GO(FT_Get_Transform, vFppp)
@@ -84,7 +84,7 @@ GOM(FT_Get_Char_Index, uFEpL)
 //GO(FT_Get_Var_Blend_Coordinates, iFpup)
 //GO(FT_Get_Var_Design_Coordinates, 
 //GO(FT_Get_WinFNT_Header, iFpp)  // does FT_WinFNT_HeaderRec_ needs alignment?
-//GO(FT_Get_X11_Font_Format, pFp)
+GOM(FT_Get_X11_Font_Format, pFEp)
 //GO(FT_Glyph_Copy, iFpp)
 //GO(FT_Glyph_Get_CBox, vFpup)
 //GO(FT_GlyphSlot_Embolden, vFp)
@@ -95,7 +95,7 @@ GOM(FT_Get_Char_Index, uFEpL)
 //GO(FT_Glyph_To_Bitmap, iFpupC)
 //GO(FT_Glyph_Transform, iFppp)
 //GO(FT_Gzip_Uncompress, 
-//GO(FT_Has_PS_Glyph_Names, 
+GOM(FT_Has_PS_Glyph_Names, iFEp)
 GO(FT_Init_FreeType, iFBp_)
 //GO(FT_Library_SetLcdFilter, iFpu)
 //GO(FT_Library_SetLcdFilterWeights, iFpp)
@@ -109,7 +109,7 @@ GO(FT_Init_FreeType, iFBp_)
 //GO(FT_List_Up, vFpp)
 GOM(FT_Load_Char, iFEpLi)
 GOM(FT_Load_Glyph, iFEpui)
-//GO(FT_Load_Sfnt_Table, iFpLlpp)
+GOM(FT_Load_Sfnt_Table, iFEpLlpp)
 //GO(FT_Matrix_Invert, iFp)
 //GO(FT_Matrix_Multiply, vFpp)
 //GO(FT_MulDiv, lFlll)
@@ -149,8 +149,8 @@ GOM(FT_Outline_Get_CBox, vFEpp)
 GOM(FT_Render_Glyph, iFEpu)
 //GO(FT_Request_Size, iFpp)
 //GO(FT_RoundFix, 
-//GO(FT_Select_Charmap, iFpi)
-//GO(FT_Select_Size, iFpi)
+GOM(FT_Select_Charmap, iFEpi)
+GOM(FT_Select_Size, iFEpi)
 //GO(FT_Set_Charmap, iFpp)
 GOM(FT_Set_Char_Size, iFEplluu)
 //GO(FT_Set_Debug_Hook, 
diff --git a/src/wrapped32/wrappedsdl2_private.h b/src/wrapped32/wrappedsdl2_private.h
index c3b4906c..c00e8cfb 100644
--- a/src/wrapped32/wrappedsdl2_private.h
+++ b/src/wrapped32/wrappedsdl2_private.h
@@ -77,7 +77,7 @@ GOM(SDL_CreateRGBSurfaceWithFormatFrom, pFEpiiiiu)
 // GO(SDL_CreateSemaphore, pFu)
 // GO(SDL_CreateShapedWindow, pFpuuuuu)
 // GO(SDL_CreateSoftwareRenderer, pFp)
-// GO(SDL_CreateSystemCursor, pFu)
+GO(SDL_CreateSystemCursor, pFu)
 GO(SDL_CreateTexture, pFpuiii)
 // GO(SDL_CreateTextureFromSurface, pFpp)
 GOM(SDL_CreateThread, pFEppp)