about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-05 09:38:01 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-05 09:38:01 +0200
commit21b60db107dce0da9ffaeab018271840e01abc5c (patch)
tree9fae9f552c49da192e7b4a5e89e0842aa5c8a8b5
parentbaa3f573aebb4872dfb582d6523dafb8e0130753 (diff)
downloadbox64-21b60db107dce0da9ffaeab018271840e01abc5c.tar.gz
box64-21b60db107dce0da9ffaeab018271840e01abc5c.zip
[BOX32][WRAPPER] Added more 32bits wrapped function to libfreetype
-rw-r--r--src/wrapped32/generated/functions_list.txt14
-rw-r--r--src/wrapped32/generated/wrappedfreetypetypes32.h8
-rw-r--r--src/wrapped32/generated/wrapper32.c12
-rw-r--r--src/wrapped32/generated/wrapper32.h6
-rw-r--r--src/wrapped32/wrappedfreetype.c343
-rw-r--r--src/wrapped32/wrappedfreetype_private.h30
6 files changed, 397 insertions, 16 deletions
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt
index 5f7c2337..01e665cd 100644
--- a/src/wrapped32/generated/functions_list.txt
+++ b/src/wrapped32/generated/functions_list.txt
@@ -78,6 +78,7 @@
 #() iFBp_ -> iFB
 #() LFrl_ -> LFB
 #() pFrl_ -> pFB
+#() lFrll_ -> lFB
 #() iFBllll_ -> iFB
 #() vFbuuipWCCp_ -> vFB
 #() vFbWWpWpWpWp_ -> vFB
@@ -238,6 +239,7 @@
 #() fFpBp_ -> fFpB
 #() dFpBp_ -> dFpB
 #() pFrl_p -> pFBp
+#() vFBll_l -> vFBl
 #() iFuBLL_ -> iFuB
 #() iFprll_ -> iFpB
 #() iFpbup_ -> iFpB
@@ -246,6 +248,7 @@
 #() iFSBliu_ -> iFSB
 #() iFXbLipi_ -> iFXB
 #() iFrLL_BLL_ -> iFBB
+#() vFbll_rllll_ -> vFBB
 #() iFpruuipWCCp_ -> iFpB
 #() pFriiiiiiiiilt_p -> pFBp
 #() iFiBLLLLLLLLLLLLLLLLLL_ -> iFiB
@@ -325,6 +328,7 @@
 #() iFEup -> iFEup
 #() iFEpi -> iFEpi
 #() iFEpu -> iFEpu
+#() iFEpl -> iFEpl
 #() iFEpL -> iFEpL
 #() iFEpp -> iFEpp
 #() iFEpV -> iFEpV
@@ -405,6 +409,7 @@
 #() dFddp -> dFddp
 #() lFili -> lFili
 #() lFipL -> lFipL
+#() lFlll -> lFlll
 #() lFlpi -> lFlpi
 #() lFpLL -> lFpLL
 #() lFppi -> lFppi
@@ -477,6 +482,7 @@
 #() vFEipp -> vFEipp
 #() vFEipV -> vFEipV
 #() vFEpup -> vFEpup
+#() vFEpll -> vFEpll
 #() vFEppp -> vFEppp
 #() vFEXLp -> vFEXLp
 #() vFcccc -> vFcccc
@@ -1186,14 +1192,19 @@ wrappedfreetype:
   - FT_Get_Postscript_Name
   - FT_Get_X11_Font_Format
 - vFpp:
+  - FT_Matrix_Multiply
   - FT_Outline_Get_CBox
+  - FT_Outline_Transform
 - iFpi:
   - FT_Select_Charmap
   - FT_Select_Size
 - iFpu:
   - FT_Render_Glyph
+- iFpl:
+  - FT_Outline_Embolden
 - iFpp:
   - FT_Get_PS_Font_Info
+  - FT_Get_WinFNT_Header
   - FT_Request_Size
   - FT_Set_Charmap
 - uFpL:
@@ -1202,6 +1213,8 @@ wrappedfreetype:
   - FT_Get_First_Char
 - pFpi:
   - FT_Get_Sfnt_Table
+- vFpll:
+  - FT_Outline_Translate
 - iFpip:
   - FT_Get_Sfnt_Name
 - iFpui:
@@ -1212,6 +1225,7 @@ wrappedfreetype:
   - FT_Load_Char
 - iFppp:
   - FT_Get_BDF_Property
+  - FT_Outline_Get_Bitmap
 - LFpLp:
   - FT_Get_Next_Char
 - iFpupu:
diff --git a/src/wrapped32/generated/wrappedfreetypetypes32.h b/src/wrapped32/generated/wrappedfreetypetypes32.h
index 41bd1dd5..749323da 100644
--- a/src/wrapped32/generated/wrappedfreetypetypes32.h
+++ b/src/wrapped32/generated/wrappedfreetypetypes32.h
@@ -17,10 +17,12 @@ 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 (*iFpl_t)(void*, intptr_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 void (*vFpll_t)(void*, intptr_t, intptr_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);
@@ -40,21 +42,27 @@ typedef int32_t (*iFppllp_t)(void*, void*, intptr_t, intptr_t, void*);
 	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_Matrix_Multiply, vFpp_t) \
 	GO(FT_Outline_Get_CBox, vFpp_t) \
+	GO(FT_Outline_Transform, vFpp_t) \
 	GO(FT_Select_Charmap, iFpi_t) \
 	GO(FT_Select_Size, iFpi_t) \
 	GO(FT_Render_Glyph, iFpu_t) \
+	GO(FT_Outline_Embolden, iFpl_t) \
 	GO(FT_Get_PS_Font_Info, iFpp_t) \
+	GO(FT_Get_WinFNT_Header, iFpp_t) \
 	GO(FT_Request_Size, iFpp_t) \
 	GO(FT_Set_Charmap, 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_Outline_Translate, vFpll_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_Outline_Get_Bitmap, iFppp_t) \
 	GO(FT_Get_Next_Char, LFpLp_t) \
 	GO(FT_Get_Glyph_Name, iFpupu_t) \
 	GO(FT_New_Face, iFpplp_t) \
diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c
index cbae9d1a..1240e782 100644
--- a/src/wrapped32/generated/wrapper32.c
+++ b/src/wrapped32/generated/wrapper32.c
@@ -168,6 +168,7 @@ typedef void* (*XFv_t)(void);
 typedef int32_t (*iFBp__t)(struct_p_t*);
 typedef uintptr_t (*LFrl__t)(struct_l_t*);
 typedef void* (*pFrl__t)(struct_l_t*);
+typedef intptr_t (*lFrll__t)(struct_ll_t*);
 typedef int32_t (*iFBllll__t)(struct_llll_t*);
 typedef void (*vFbuuipWCCp__t)(struct_uuipWCCp_t*);
 typedef void (*vFbWWpWpWpWp__t)(struct_WWpWpWpWp_t*);
@@ -328,6 +329,7 @@ typedef int32_t (*iFXbL__t)(void*, struct_L_t*);
 typedef float (*fFpBp__t)(void*, struct_p_t*);
 typedef double (*dFpBp__t)(void*, struct_p_t*);
 typedef void* (*pFrl_p_t)(struct_l_t*, void*);
+typedef void (*vFBll_l_t)(struct_ll_t*, intptr_t);
 typedef int32_t (*iFuBLL__t)(uint32_t, struct_LL_t*);
 typedef int32_t (*iFprll__t)(void*, struct_ll_t*);
 typedef int32_t (*iFpbup__t)(void*, struct_up_t*);
@@ -336,6 +338,7 @@ typedef int32_t (*iFBll_p_t)(struct_ll_t*, void*);
 typedef int32_t (*iFSBliu__t)(void*, struct_liu_t*);
 typedef int32_t (*iFXbLipi__t)(void*, struct_Lipi_t*);
 typedef int32_t (*iFrLL_BLL__t)(struct_LL_t*, struct_LL_t*);
+typedef void (*vFbll_rllll__t)(struct_ll_t*, struct_llll_t*);
 typedef int32_t (*iFpruuipWCCp__t)(void*, struct_uuipWCCp_t*);
 typedef void* (*pFriiiiiiiiilt_p_t)(struct_iiiiiiiiilt_t*, void*);
 typedef int32_t (*iFiBLLLLLLLLLLLLLLLLLL__t)(int32_t, struct_LLLLLLLLLLLLLLLLLL_t*);
@@ -415,6 +418,7 @@ typedef int32_t (*iFEip_t)(x64emu_t*, int32_t, void*);
 typedef int32_t (*iFEup_t)(x64emu_t*, uint32_t, void*);
 typedef int32_t (*iFEpi_t)(x64emu_t*, void*, int32_t);
 typedef int32_t (*iFEpu_t)(x64emu_t*, void*, uint32_t);
+typedef int32_t (*iFEpl_t)(x64emu_t*, void*, intptr_t);
 typedef int32_t (*iFEpL_t)(x64emu_t*, void*, uintptr_t);
 typedef int32_t (*iFEpp_t)(x64emu_t*, void*, void*);
 typedef int32_t (*iFEpV_t)(x64emu_t*, void*, void*);
@@ -495,6 +499,7 @@ typedef double (*dFddd_t)(double, double, double);
 typedef double (*dFddp_t)(double, double, void*);
 typedef intptr_t (*lFili_t)(int32_t, intptr_t, int32_t);
 typedef intptr_t (*lFipL_t)(int32_t, void*, uintptr_t);
+typedef intptr_t (*lFlll_t)(intptr_t, intptr_t, intptr_t);
 typedef intptr_t (*lFlpi_t)(intptr_t, void*, int32_t);
 typedef intptr_t (*lFpLL_t)(void*, uintptr_t, uintptr_t);
 typedef intptr_t (*lFppi_t)(void*, void*, int32_t);
@@ -567,6 +572,7 @@ typedef void* (*pFppriiiiiiiiilt__t)(void*, void*, struct_iiiiiiiiilt_t*);
 typedef void (*vFEipp_t)(x64emu_t*, int32_t, void*, void*);
 typedef void (*vFEipV_t)(x64emu_t*, int32_t, void*, void*);
 typedef void (*vFEpup_t)(x64emu_t*, void*, uint32_t, void*);
+typedef void (*vFEpll_t)(x64emu_t*, void*, intptr_t, intptr_t);
 typedef void (*vFEppp_t)(x64emu_t*, void*, void*, void*);
 typedef void (*vFEXLp_t)(x64emu_t*, void*, uintptr_t, void*);
 typedef void (*vFcccc_t)(int8_t, int8_t, int8_t, int8_t);
@@ -1331,6 +1337,7 @@ void XFv_32(x64emu_t *emu, uintptr_t fcn) { XFv_t fn = (XFv_t)fcn; R_EAX = to_pt
 void iFBp__32(x64emu_t *emu, uintptr_t fcn) { iFBp__t fn = (iFBp__t)fcn; struct_p_t arg_4={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); }
 void LFrl__32(x64emu_t *emu, uintptr_t fcn) { LFrl__t fn = (LFrl__t)fcn; struct_l_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_l(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ulong(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); }
 void pFrl__32(x64emu_t *emu, uintptr_t fcn) { pFrl__t fn = (pFrl__t)fcn; struct_l_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_l(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ptrv(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); }
+void lFrll__32(x64emu_t *emu, uintptr_t fcn) { lFrll__t fn = (lFrll__t)fcn; struct_ll_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_ll(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_long(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); }
 void iFBllll__32(x64emu_t *emu, uintptr_t fcn) { iFBllll__t fn = (iFBllll__t)fcn; struct_llll_t arg_4={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_llll(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); }
 void vFbuuipWCCp__32(x64emu_t *emu, uintptr_t fcn) { vFbuuipWCCp__t fn = (vFbuuipWCCp__t)fcn; struct_uuipWCCp_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_uuipWCCp(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_uuipWCCp(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); }
 void vFbWWpWpWpWp__32(x64emu_t *emu, uintptr_t fcn) { vFbWWpWpWpWp__t fn = (vFbWWpWpWpWp__t)fcn; struct_WWpWpWpWp_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_WWpWpWpWp(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_WWpWpWpWp(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); }
@@ -1491,6 +1498,7 @@ void iFXbL__32(x64emu_t *emu, uintptr_t fcn) { iFXbL__t fn = (iFXbL__t)fcn; stru
 void fFpBp__32(x64emu_t *emu, uintptr_t fcn) { fFpBp__t fn = (fFpBp__t)fcn; struct_p_t arg_8={0}; float fl = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); fpu_do_push(emu); ST0val = fl; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); }
 void dFpBp__32(x64emu_t *emu, uintptr_t fcn) { dFpBp__t fn = (dFpBp__t)fcn; struct_p_t arg_8={0}; double db = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); fpu_do_push(emu); ST0val = db; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); }
 void pFrl_p_32(x64emu_t *emu, uintptr_t fcn) { pFrl_p_t fn = (pFrl_p_t)fcn; struct_l_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_l(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ptrv(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8))); }
+void vFBll_l_32(x64emu_t *emu, uintptr_t fcn) { vFBll_l_t fn = (vFBll_l_t)fcn; struct_ll_t arg_4={0}; fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_long(from_ptri(long_t, R_ESP + 8))); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_ll(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); }
 void iFuBLL__32(x64emu_t *emu, uintptr_t fcn) { iFuBLL__t fn = (iFuBLL__t)fcn; struct_LL_t arg_8={0}; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); }
 void iFprll__32(x64emu_t *emu, uintptr_t fcn) { iFprll__t fn = (iFprll__t)fcn; struct_ll_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_ll(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); }
 void iFpbup__32(x64emu_t *emu, uintptr_t fcn) { iFpbup__t fn = (iFpbup__t)fcn; struct_up_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_up(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_up(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); }
@@ -1499,6 +1507,7 @@ void iFBll_p_32(x64emu_t *emu, uintptr_t fcn) { iFBll_p_t fn = (iFBll_p_t)fcn; s
 void iFSBliu__32(x64emu_t *emu, uintptr_t fcn) { iFSBliu__t fn = (iFSBliu__t)fcn; struct_liu_t arg_8={0}; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_liu(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); }
 void iFXbLipi__32(x64emu_t *emu, uintptr_t fcn) { iFXbLipi__t fn = (iFXbLipi__t)fcn; struct_Lipi_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_Lipi(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_Lipi(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); }
 void iFrLL_BLL__32(x64emu_t *emu, uintptr_t fcn) { iFrLL_BLL__t fn = (iFrLL_BLL__t)fcn; struct_LL_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_LL(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_LL_t arg_8={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); }
+void vFbll_rllll__32(x64emu_t *emu, uintptr_t fcn) { vFbll_rllll__t fn = (vFbll_rllll__t)fcn; struct_ll_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_ll(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_llll_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_llll(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_ll(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); }
 void iFpruuipWCCp__32(x64emu_t *emu, uintptr_t fcn) { iFpruuipWCCp__t fn = (iFpruuipWCCp__t)fcn; struct_uuipWCCp_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_uuipWCCp(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); }
 void pFriiiiiiiiilt_p_32(x64emu_t *emu, uintptr_t fcn) { pFriiiiiiiiilt_p_t fn = (pFriiiiiiiiilt_p_t)fcn; struct_iiiiiiiiilt_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_iiiiiiiiilt(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ptrv(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8))); }
 void iFiBLLLLLLLLLLLLLLLLLL__32(x64emu_t *emu, uintptr_t fcn) { iFiBLLLLLLLLLLLLLLLLLL__t fn = (iFiBLLLLLLLLLLLLLLLLLL__t)fcn; struct_LLLLLLLLLLLLLLLLLL_t arg_8={0}; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_LLLLLLLLLLLLLLLLLL(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); }
@@ -1578,6 +1587,7 @@ void iFEip_32(x64emu_t *emu, uintptr_t fcn) { iFEip_t fn = (iFEip_t)fcn; R_EAX =
 void iFEup_32(x64emu_t *emu, uintptr_t fcn) { iFEup_t fn = (iFEup_t)fcn; R_EAX = fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); }
 void iFEpi_32(x64emu_t *emu, uintptr_t fcn) { iFEpi_t fn = (iFEpi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); }
 void iFEpu_32(x64emu_t *emu, uintptr_t fcn) { iFEpu_t fn = (iFEpu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); }
+void iFEpl_32(x64emu_t *emu, uintptr_t fcn) { iFEpl_t fn = (iFEpl_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8))); }
 void iFEpL_32(x64emu_t *emu, uintptr_t fcn) { iFEpL_t fn = (iFEpL_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); }
 void iFEpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); }
 void iFEpV_32(x64emu_t *emu, uintptr_t fcn) { iFEpV_t fn = (iFEpV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptrv(R_ESP + 8)); }
@@ -1658,6 +1668,7 @@ void dFddd_32(x64emu_t *emu, uintptr_t fcn) { dFddd_t fn = (dFddd_t)fcn; double
 void dFddp_32(x64emu_t *emu, uintptr_t fcn) { dFddp_t fn = (dFddp_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptriv(R_ESP + 20)); fpu_do_push(emu); ST0val = db; }
 void lFili_32(x64emu_t *emu, uintptr_t fcn) { lFili_t fn = (lFili_t)fcn; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12))); }
 void lFipL_32(x64emu_t *emu, uintptr_t fcn) { lFipL_t fn = (lFipL_t)fcn; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); }
+void lFlll_32(x64emu_t *emu, uintptr_t fcn) { lFlll_t fn = (lFlll_t)fcn; R_EAX = to_long(fn(from_long(from_ptri(long_t, R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)))); }
 void lFlpi_32(x64emu_t *emu, uintptr_t fcn) { lFlpi_t fn = (lFlpi_t)fcn; R_EAX = to_long(fn(from_long(from_ptri(long_t, R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); }
 void lFpLL_32(x64emu_t *emu, uintptr_t fcn) { lFpLL_t fn = (lFpLL_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); }
 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))); }
@@ -1730,6 +1741,7 @@ void pFppriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fcn) { pFppriiiiiiiiilt__t fn
 void vFEipp_32(x64emu_t *emu, uintptr_t fcn) { vFEipp_t fn = (vFEipp_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void vFEipV_32(x64emu_t *emu, uintptr_t fcn) { vFEipV_t fn = (vFEipV_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); }
 void vFEpup_32(x64emu_t *emu, uintptr_t fcn) { vFEpup_t fn = (vFEpup_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); }
+void vFEpll_32(x64emu_t *emu, uintptr_t fcn) { vFEpll_t fn = (vFEpll_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12))); }
 void vFEppp_32(x64emu_t *emu, uintptr_t fcn) { vFEppp_t fn = (vFEppp_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); }
 void vFEXLp_32(x64emu_t *emu, uintptr_t fcn) { vFEXLp_t fn = (vFEXLp_t)fcn; fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); }
 void vFcccc_32(x64emu_t *emu, uintptr_t fcn) { vFcccc_t fn = (vFcccc_t)fcn; fn(from_ptri(int8_t, R_ESP + 4), from_ptri(int8_t, R_ESP + 8), from_ptri(int8_t, R_ESP + 12), from_ptri(int8_t, R_ESP + 16)); }
diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h
index b39ab350..90c2a2a4 100644
--- a/src/wrapped32/generated/wrapper32.h
+++ b/src/wrapped32/generated/wrapper32.h
@@ -119,6 +119,7 @@ void XFv_32(x64emu_t *emu, uintptr_t fnc);
 void iFBp__32(x64emu_t *emu, uintptr_t fnc);
 void LFrl__32(x64emu_t *emu, uintptr_t fnc);
 void pFrl__32(x64emu_t *emu, uintptr_t fnc);
+void lFrll__32(x64emu_t *emu, uintptr_t fnc);
 void iFBllll__32(x64emu_t *emu, uintptr_t fnc);
 void vFbuuipWCCp__32(x64emu_t *emu, uintptr_t fnc);
 void vFbWWpWpWpWp__32(x64emu_t *emu, uintptr_t fnc);
@@ -279,6 +280,7 @@ void iFXbL__32(x64emu_t *emu, uintptr_t fnc);
 void fFpBp__32(x64emu_t *emu, uintptr_t fnc);
 void dFpBp__32(x64emu_t *emu, uintptr_t fnc);
 void pFrl_p_32(x64emu_t *emu, uintptr_t fnc);
+void vFBll_l_32(x64emu_t *emu, uintptr_t fnc);
 void iFuBLL__32(x64emu_t *emu, uintptr_t fnc);
 void iFprll__32(x64emu_t *emu, uintptr_t fnc);
 void iFpbup__32(x64emu_t *emu, uintptr_t fnc);
@@ -287,6 +289,7 @@ void iFBll_p_32(x64emu_t *emu, uintptr_t fnc);
 void iFSBliu__32(x64emu_t *emu, uintptr_t fnc);
 void iFXbLipi__32(x64emu_t *emu, uintptr_t fnc);
 void iFrLL_BLL__32(x64emu_t *emu, uintptr_t fnc);
+void vFbll_rllll__32(x64emu_t *emu, uintptr_t fnc);
 void iFpruuipWCCp__32(x64emu_t *emu, uintptr_t fnc);
 void pFriiiiiiiiilt_p_32(x64emu_t *emu, uintptr_t fnc);
 void iFiBLLLLLLLLLLLLLLLLLL__32(x64emu_t *emu, uintptr_t fnc);
@@ -366,6 +369,7 @@ void iFEip_32(x64emu_t *emu, uintptr_t fnc);
 void iFEup_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpi_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpu_32(x64emu_t *emu, uintptr_t fnc);
+void iFEpl_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpL_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpp_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpV_32(x64emu_t *emu, uintptr_t fnc);
@@ -446,6 +450,7 @@ void dFddd_32(x64emu_t *emu, uintptr_t fnc);
 void dFddp_32(x64emu_t *emu, uintptr_t fnc);
 void lFili_32(x64emu_t *emu, uintptr_t fnc);
 void lFipL_32(x64emu_t *emu, uintptr_t fnc);
+void lFlll_32(x64emu_t *emu, uintptr_t fnc);
 void lFlpi_32(x64emu_t *emu, uintptr_t fnc);
 void lFpLL_32(x64emu_t *emu, uintptr_t fnc);
 void lFppi_32(x64emu_t *emu, uintptr_t fnc);
@@ -518,6 +523,7 @@ void pFppriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fnc);
 void vFEipp_32(x64emu_t *emu, uintptr_t fnc);
 void vFEipV_32(x64emu_t *emu, uintptr_t fnc);
 void vFEpup_32(x64emu_t *emu, uintptr_t fnc);
+void vFEpll_32(x64emu_t *emu, uintptr_t fnc);
 void vFEppp_32(x64emu_t *emu, uintptr_t fnc);
 void vFEXLp_32(x64emu_t *emu, uintptr_t fnc);
 void vFcccc_32(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped32/wrappedfreetype.c b/src/wrapped32/wrappedfreetype.c
index cd6a513c..a78fafd3 100644
--- a/src/wrapped32/wrappedfreetype.c
+++ b/src/wrapped32/wrappedfreetype.c
@@ -281,7 +281,56 @@ typedef struct  FT_Open_Args_s
     FT_Parameter_t* params;
 } FT_Open_Args_t;
 
+typedef struct  FT_WinFNT_HeaderRec_s
+{
+    uint16_t        version;
+    unsigned long   file_size;
+    uint8_t         copyright[60];
+    uint16_t        file_type;
+    uint16_t        nominal_point_size;
+    uint16_t        vertical_resolution;
+    uint16_t        horizontal_resolution;
+    uint16_t        ascent;
+    uint16_t        internal_leading;
+    uint16_t        external_leading;
+    uint8_t         italic;
+    uint8_t         underline;
+    uint8_t         strike_out;
+    uint16_t        weight;
+    uint8_t         charset;
+    uint16_t        pixel_width;
+    uint16_t        pixel_height;
+    uint8_t         pitch_and_family;
+    uint16_t        avg_width;
+    uint16_t        max_width;
+    uint8_t         first_char;
+    uint8_t         last_char;
+    uint8_t         default_char;
+    uint8_t         break_char;
+    uint16_t        bytes_per_row;
+    unsigned long   device_offset;
+    unsigned long   face_name_offset;
+    unsigned long   bits_pointer;
+    unsigned long   bits_offset;
+    uint8_t         reserved;
+    unsigned long   flags;
+    uint16_t        A_space;
+    uint16_t        B_space;
+    uint16_t        C_space;
+    uint16_t        color_table_offset;
+    unsigned long   reserved1[4];
+} FT_WinFNT_HeaderRec_t;
+
+typedef struct  FT_Matrix_s
+{
+    long    xx, xy;
+    long    yx, yy;
+} FT_Matrix_t;
+
+// ===============================================
 // 32bits FreeType structures
+// ===============================================
+
 typedef union  FT_StreamDesc_32_s
 {
     long_t value;
@@ -535,6 +584,56 @@ typedef struct  FT_Open_Args_32_s
     ptr_t           params; //FT_Parameter_t*
 } FT_Open_Args_32_t;
 
+typedef struct  FT_WinFNT_HeaderRec_32_s
+{
+    uint16_t        version;
+    ulong_t         file_size;
+    uint8_t         copyright[60];
+    uint16_t        file_type;
+    uint16_t        nominal_point_size;
+    uint16_t        vertical_resolution;
+    uint16_t        horizontal_resolution;
+    uint16_t        ascent;
+    uint16_t        internal_leading;
+    uint16_t        external_leading;
+    uint8_t         italic;
+    uint8_t         underline;
+    uint8_t         strike_out;
+    uint16_t        weight;
+    uint8_t         charset;
+    uint16_t        pixel_width;
+    uint16_t        pixel_height;
+    uint8_t         pitch_and_family;
+    uint16_t        avg_width;
+    uint16_t        max_width;
+    uint8_t         first_char;
+    uint8_t         last_char;
+    uint8_t         default_char;
+    uint8_t         break_char;
+    uint16_t        bytes_per_row;
+    ulong_t         device_offset;
+    ulong_t         face_name_offset;
+    ulong_t         bits_pointer;
+    ulong_t         bits_offset;
+    uint8_t         reserved;
+    ulong_t         flags;
+    uint16_t        A_space;
+    uint16_t        B_space;
+    uint16_t        C_space;
+    uint16_t        color_table_offset;
+    ulong_t         reserved1[4];
+} FT_WinFNT_HeaderRec_32_t;
+
+typedef struct  FT_Matrix_32_s
+{
+    long_t  xx, xy;
+    long_t  yx, yy;
+} FT_Matrix_32_t;
+
+// ==================================
+// Convertions
+// ==================================
+
 void convert_FT_StreamRec_to_32(void* d, void* s)
 {
     FT_StreamRec_t* src = s;
@@ -789,7 +888,6 @@ void inplace_FT_SizeRec_enlarge(void* a)
 }
 
 
-// Convertion function
 void inplace_FT_FaceRec_shrink(void* a)
 {
     if(!a) return;
@@ -981,6 +1079,106 @@ void convert_FT_Size_RequestRec_to_64(void* d, void* s)
     dst->vertResolution = src->vertResolution;
 }
 
+void convert_FT_WinFNT_HeaderRec_to_32(void* d, void* s)
+{
+    FT_WinFNT_HeaderRec_t* src = s;
+    FT_WinFNT_HeaderRec_32_t* dst = d;
+
+    dst->version = src->version;
+    dst->file_size = to_ulong(src->file_size);
+    memcpy(dst->copyright, src->copyright, sizeof(dst->copyright));
+    dst->file_type = src->file_type;
+    dst->nominal_point_size = src->nominal_point_size;
+    dst->vertical_resolution = src->vertical_resolution;
+    dst->horizontal_resolution = src->horizontal_resolution;
+    dst->ascent = src->ascent;
+    dst->internal_leading = src->internal_leading;
+    dst->external_leading = src->external_leading;
+    dst->italic = src->italic;
+    dst->underline = src->underline;
+    dst->strike_out = src->strike_out;
+    dst->weight = src->weight;
+    dst->charset = src->charset;
+    dst->pixel_width = src->pixel_width;
+    dst->pixel_height = src->pixel_height;
+    dst->pitch_and_family = src->pitch_and_family;
+    dst->avg_width = src->avg_width;
+    dst->max_width = src->max_width;
+    dst->first_char = src->first_char;
+    dst->last_char = src->last_char;
+    dst->default_char = src->default_char;
+    dst->break_char = src->break_char;
+    dst->bytes_per_row = src->bytes_per_row;
+    dst->device_offset = to_ulong(src->device_offset);
+    dst->face_name_offset = to_ulong(src->face_name_offset);
+    dst->bits_pointer = to_ulong(src->bits_pointer);
+    dst->bits_offset = to_ulong(src->bits_offset);
+    dst->reserved = src->reserved;
+    dst->flags = to_ulong(src->flags);
+    dst->A_space = src->A_space;
+    dst->B_space = src->B_space;
+    dst->C_space = src->C_space;
+    dst->color_table_offset = src->color_table_offset;
+    dst->reserved1[0] = to_ulong(src->reserved1[0]);
+    dst->reserved1[1] = to_ulong(src->reserved1[1]);
+    dst->reserved1[2] = to_ulong(src->reserved1[2]);
+    dst->reserved1[3] = to_ulong(src->reserved1[3]);
+}
+
+void convert_FT_Matrix_to_32(void* d, void* s)
+{
+    FT_Matrix_t* src = s;
+    FT_Matrix_32_t* dst = d;
+
+    dst->xx = to_long(src->xx);
+    dst->xy = to_long(src->xy);
+    dst->yx = to_long(src->yx);
+    dst->yy = to_long(src->yy);
+}
+void convert_FT_Matrix_to_64(void* d, void* s)
+{
+    FT_Matrix_32_t* src = s;
+    FT_Matrix_t* dst = d;
+
+    dst->yy = from_long(src->yy);
+    dst->yx = from_long(src->yx);
+    dst->xy = from_long(src->xy);
+    dst->xx = from_long(src->xx);
+}
+
+void convert_FT_Bitmap_to_32(void* d, void* s)
+{
+    FT_Bitmap_t* src = s;
+    FT_Bitmap_32_t* dst = d;
+
+    dst->rows = src->rows;
+    dst->width = src->width;
+    dst->pitch = src->pitch;
+    dst->buffer = to_ptrv(src->buffer);
+    dst->num_grays = src->num_grays;
+    dst->pixel_mode = src->pixel_mode;
+    dst->palette_mode = src->palette_mode;
+    dst->palette = to_ptrv(src->palette);
+}
+void convert_FT_Bitmap_to_64(void* d, void* s)
+{
+    FT_Bitmap_32_t* src = s;
+    FT_Bitmap_t* dst = d;
+
+    dst->palette = from_ptrv(src->palette);
+    dst->palette_mode = src->palette_mode;
+    dst->pixel_mode = src->pixel_mode;
+    dst->num_grays = src->num_grays;
+    dst->buffer = from_ptrv(src->buffer);
+    dst->pitch = src->pitch;
+    dst->width = src->width;
+    dst->rows = src->rows;
+}
+
+// ==================================
+// Wrapping
+// ==================================
+
 #define ADDED_FUNCTIONS()                   \
 
 #include "generated/wrappedfreetypetypes32.h"
@@ -1570,6 +1768,7 @@ EXPORT int my32_FT_Set_Charmap(x64emu_t* emu, void* face, void* charmap)
 
 EXPORT void my32_FT_Outline_Get_CBox(x64emu_t* emu, FT_Outline_32_t* outline, FT_BBox_32_t* bbox)
 {
+    // convert outline to 64
     int n = outline->n_points;
     FT_Outline_t outline_l;
     FT_Vector_t vector[n];
@@ -1584,6 +1783,7 @@ EXPORT void my32_FT_Outline_Get_CBox(x64emu_t* emu, FT_Outline_32_t* outline, FT
     outline_l.tags = from_ptrv(outline->tags);
     outline_l.contours = from_ptrv(outline->contours);
     outline_l.flags = outline->flags;
+    //
     FT_BBox_t res = {0};
     my->FT_Outline_Get_CBox(&outline_l, &res);
     bbox->xMin = to_long(res.xMin);
@@ -1608,4 +1808,145 @@ EXPORT int my32_FT_Render_Glyph(x64emu_t* emu, FT_GlyphSlotRec_32_t* glyph, uint
     return ret;
 }
 
+EXPORT int my32_FT_Get_WinFNT_Header(x64emu_t* emu, void* face, FT_WinFNT_HeaderRec_32_t* aheader)
+{
+    FT_WinFNT_HeaderRec_t aheader_l = {0};
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Get_WinFNT_Header(face, &aheader_l);
+    inplace_FT_FaceRec_shrink(face);
+    if(!ret)
+        convert_FT_WinFNT_HeaderRec_to_32(aheader, &aheader_l);
+    return ret;
+}
+
+EXPORT void my32_FT_Matrix_Multiply(x64emu_t* emu, FT_Matrix_32_t* a, FT_Matrix_32_t* b)
+{
+    FT_Matrix_t a_l, b_l;
+    convert_FT_Matrix_to_64(&a_l, a);
+    convert_FT_Matrix_to_64(&b_l, b);
+    my->FT_Matrix_Multiply(&a_l, &b_l);
+    convert_FT_Matrix_to_32(b, &b_l);
+}
+
+EXPORT int my32_FT_Outline_Get_Bitmap(x64emu_t* emu, void* lib, FT_Outline_32_t* outline, FT_Bitmap_32_t* bitmap)
+{
+    FT_Bitmap_t bitmap_l;
+    // convert outline to 64
+    int n = outline->n_points;
+    FT_Outline_t outline_l;
+    FT_Vector_t vector[n];
+    outline_l.n_contours = outline->n_contours;
+    outline_l.n_points = outline->n_points;
+    outline_l.points = vector;
+    FT_Vector_32_t* vec = from_ptrv(outline->points);
+    for(int i=0; i<n; ++i) {
+        vector[i].x = from_long(vec[i].x);
+        vector[i].y = from_long(vec[i].y);
+    }
+    outline_l.tags = from_ptrv(outline->tags);
+    outline_l.contours = from_ptrv(outline->contours);
+    outline_l.flags = outline->flags;
+    //
+    convert_FT_Bitmap_to_64(&bitmap_l, bitmap);
+    
+    int ret = my->FT_Outline_Get_Bitmap(lib, &outline_l, &bitmap_l);
+    convert_FT_Bitmap_to_32(bitmap, &bitmap_l);
+    return ret;
+}
+
+EXPORT void my32_FT_Outline_Transform(x64emu_t* emu, FT_Outline_32_t* outline, FT_Matrix_32_t* matrix)
+{
+    FT_Matrix_t matrix_l;
+    // convert outline to 64
+    int n = outline->n_points;
+    FT_Outline_t outline_l;
+    FT_Vector_t vector[n];
+    outline_l.n_contours = outline->n_contours;
+    outline_l.n_points = outline->n_points;
+    outline_l.points = vector;
+    FT_Vector_32_t* vec = from_ptrv(outline->points);
+    for(int i=0; i<n; ++i) {
+        vector[i].x = from_long(vec[i].x);
+        vector[i].y = from_long(vec[i].y);
+    }
+    outline_l.tags = from_ptrv(outline->tags);
+    outline_l.contours = from_ptrv(outline->contours);
+    outline_l.flags = outline->flags;
+    //
+    convert_FT_Matrix_to_64(&matrix_l, matrix);
+    my->FT_Outline_Transform(&outline_l, &matrix_l);
+    // convert outline to 32
+    outline->n_contours = outline_l.n_contours;
+    outline->n_points = outline_l.n_points;
+    for(int i=0; i<n; ++i) {
+        vec[i].x = to_long(vector[i].x);
+        vec[i].y = to_long(vector[i].y);
+    }
+    outline->tags = to_ptrv(outline_l.tags);
+    outline->contours = to_ptrv(outline_l.contours);
+    outline->flags = outline_l.flags;
+}
+
+EXPORT void my32_FT_Outline_Translate(x64emu_t* emu, FT_Outline_32_t* outline, long x, long y)
+{
+    // convert outline to 64
+    int n = outline->n_points;
+    FT_Outline_t outline_l;
+    FT_Vector_t vector[n];
+    outline_l.n_contours = outline->n_contours;
+    outline_l.n_points = outline->n_points;
+    outline_l.points = vector;
+    FT_Vector_32_t* vec = from_ptrv(outline->points);
+    for(int i=0; i<n; ++i) {
+        vector[i].x = from_long(vec[i].x);
+        vector[i].y = from_long(vec[i].y);
+    }
+    outline_l.tags = from_ptrv(outline->tags);
+    outline_l.contours = from_ptrv(outline->contours);
+    outline_l.flags = outline->flags;
+    //
+    my->FT_Outline_Translate(&outline_l, x, y);
+    // convert outline to 32
+    outline->n_contours = outline_l.n_contours;
+    outline->n_points = outline_l.n_points;
+    for(int i=0; i<n; ++i) {
+        vec[i].x = to_long(vector[i].x);
+        vec[i].y = to_long(vector[i].y);
+    }
+    outline->tags = to_ptrv(outline_l.tags);
+    outline->contours = to_ptrv(outline_l.contours);
+    outline->flags = outline_l.flags;
+}
+
+EXPORT void my32_FT_Outline_Embolden(x64emu_t* emu, FT_Outline_32_t* outline, long strength)
+{
+    // convert outline to 64
+    int n = outline->n_points;
+    FT_Outline_t outline_l;
+    FT_Vector_t vector[n];
+    outline_l.n_contours = outline->n_contours;
+    outline_l.n_points = outline->n_points;
+    outline_l.points = vector;
+    FT_Vector_32_t* vec = from_ptrv(outline->points);
+    for(int i=0; i<n; ++i) {
+        vector[i].x = from_long(vec[i].x);
+        vector[i].y = from_long(vec[i].y);
+    }
+    outline_l.tags = from_ptrv(outline->tags);
+    outline_l.contours = from_ptrv(outline->contours);
+    outline_l.flags = outline->flags;
+    //
+    my->FT_Outline_Embolden(&outline_l, strength);
+    // convert outline to 32
+    outline->n_contours = outline_l.n_contours;
+    outline->n_points = outline_l.n_points;
+    for(int i=0; i<n; ++i) {
+        vec[i].x = to_long(vector[i].x);
+        vec[i].y = to_long(vector[i].y);
+    }
+    outline->tags = to_ptrv(outline_l.tags);
+    outline->contours = to_ptrv(outline_l.contours);
+    outline->flags = outline_l.flags;
+}
+
 #include "wrappedlib_init32.h"
diff --git a/src/wrapped32/wrappedfreetype_private.h b/src/wrapped32/wrappedfreetype_private.h
index 622d1771..31516899 100644
--- a/src/wrapped32/wrappedfreetype_private.h
+++ b/src/wrapped32/wrappedfreetype_private.h
@@ -82,10 +82,10 @@ GOM(FT_Get_Sfnt_Table, pFEpi)
 //GO(FT_Get_SubGlyph_Info, iFpuppppp)
 //GO(FT_Get_Track_Kerning, iFplip)
 //GO(FT_Get_Transform, vFppp)
-//GO(FT_Get_TrueType_Engine_Type, uFp)
+GO(FT_Get_TrueType_Engine_Type, uFp)
 //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?
+GOM(FT_Get_WinFNT_Header, iFEpp)
 GOM(FT_Get_X11_Font_Format, pFEp)
 //GO(FT_Glyph_Copy, iFpp)
 //GO(FT_Glyph_Get_CBox, vFpup)
@@ -99,9 +99,9 @@ GOM(FT_Get_X11_Font_Format, pFEp)
 //GO(FT_Gzip_Uncompress, 
 GOM(FT_Has_PS_Glyph_Names, iFEp)
 GO(FT_Init_FreeType, iFBp_)
-//GO(FT_Library_SetLcdFilter, iFpu)
+GO(FT_Library_SetLcdFilter, iFpu)
 //GO(FT_Library_SetLcdFilterWeights, iFpp)
-//GO(FT_Library_Version, vFpppp)
+GO(FT_Library_Version, vFpppp)
 //GO(FT_List_Add, 
 //GO(FT_List_Finalize, 
 //GO(FT_List_Find, pFpp)
@@ -113,9 +113,9 @@ GOM(FT_Load_Char, iFEpLi)
 GOM(FT_Load_Glyph, iFEpui)
 GOM(FT_Load_Sfnt_Table, iFEpLlpp)
 //GO(FT_Matrix_Invert, iFp)
-//GO(FT_Matrix_Multiply, vFpp)
-//GO(FT_MulDiv, lFlll)
-//GO(FT_MulFix, lFll)
+GOM(FT_Matrix_Multiply, vFEpp)
+GO(FT_MulDiv, lFlll)
+GO(FT_MulFix, lFll)
 GOM(FT_New_Face, iFEpplp)
 //GOM(FT_New_Library, iFEpp)
 GOM(FT_New_Memory_Face, iFEppllp)
@@ -128,10 +128,10 @@ GOM(FT_Open_Face, iFEpplp)
 //GOM(FT_Outline_Decompose, iFEppp)
 //GO(FT_Outline_Done, iFpp)
 //GO(FT_Outline_Done_Internal, 
-//GO(FT_Outline_Embolden, iFpl)
+GOM(FT_Outline_Embolden, iFEpl)
 //GO(FT_Outline_EmboldenXY, iFpll)
 //GO(FT_Outline_Get_BBox, iFpp)
-//GO(FT_Outline_Get_Bitmap, iFppp)
+GOM(FT_Outline_Get_Bitmap, iFEppp)
 GOM(FT_Outline_Get_CBox, vFEpp)
 //GO(FT_Outline_GetInsideBorder, 
 //GO(FT_Outline_Get_Orientation, uFp)
@@ -140,11 +140,11 @@ GOM(FT_Outline_Get_CBox, vFEpp)
 //GO(FT_Outline_New_Internal, 
 //GO(FT_Outline_Render, iFppp)
 //GO(FT_Outline_Reverse, vFp)
-//GO(FT_Outline_Transform, vFpp)
-//GO(FT_Outline_Translate, vFpll)
+GOM(FT_Outline_Transform, vFEpp)
+GOM(FT_Outline_Translate, vFEpll)
 //GO(FT_Palette_Select, iFpWp)
 //GO(FT_Property_Get, iFpppp)
-//GO(FT_Property_Set, iFpppp)
+GO(FT_Property_Set, iFpppp)
 //GO(FT_Reference_Face, iFp)
 //GO(FT_Reference_Library, 
 //GO(FT_Remove_Module, iFpp)
@@ -187,11 +187,11 @@ GOM(FT_Set_Pixel_Sizes, iFEpuu)
 //GO(FT_TrueTypeGX_Free, 
 //GO(FT_TrueTypeGX_Validate, 
 //GO(FT_Vector_From_Polar, vFpll)
-//GO(FT_Vector_Length, lFp)
+GO(FT_Vector_Length, lFrll_)
 //GO(FT_Vector_Polarize, vFppp)
 //GO(FT_Vector_Rotate, vFpl)
-//GO(FT_Vector_Transform, vFpp)
-//GO(FT_Vector_Unit, vFpl)
+GO(FT_Vector_Transform, vFbll_rllll_)
+GO(FT_Vector_Unit, vFBll_l)
 
 //GO(FTC_CMapCache_Lookup, uFppiu)
 //GO(FTC_CMapCache_New, iFpp)