about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-10-08 16:57:48 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-10-08 16:57:48 +0200
commit18d95a462745ec191f4daae5e3d5775b0b1caa8b (patch)
tree800ea7ab8ed417470b90838fb662fabe25f6460d
parentb6c9cc93fba9db54067acb25366c78a94829371e (diff)
downloadbox64-18d95a462745ec191f4daae5e3d5775b0b1caa8b.tar.gz
box64-18d95a462745ec191f4daae5e3d5775b0b1caa8b.zip
[BOX32][WRAPPER] Added some more 32bits wrapped functions to libfreetype
-rw-r--r--src/wrapped32/generated/functions_list.txt8
-rw-r--r--src/wrapped32/generated/wrappedfreetypetypes32.h5
-rw-r--r--src/wrapped32/generated/wrapper32.c6
-rw-r--r--src/wrapped32/generated/wrapper32.h3
-rw-r--r--src/wrapped32/wrappedfreetype.c29
-rw-r--r--src/wrapped32/wrappedfreetype_private.h8
6 files changed, 55 insertions, 4 deletions
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt
index 08c65782..798d56fa 100644
--- a/src/wrapped32/generated/functions_list.txt
+++ b/src/wrapped32/generated/functions_list.txt
@@ -281,6 +281,7 @@
 #() CFpu -> CFpu
 #() CFpp -> CFpp
 #() CFXL -> CFXL
+#() WFEp -> WFEp
 #() WFpp -> WFpp
 #() uFEp -> uFEp
 #() uFii -> uFii
@@ -1280,6 +1281,7 @@
 #() iFXLuriiiiiLi_ -> iFXLuB
 #() uFnibpL_bLpCC_ -> uFniBB
 #() iFppubppuuuuup_ -> iFppuB
+#() iFpruuipWCCp_ll -> iFpBll
 #() iFpbLL_bLL_bLL_ -> iFpBBB
 #() pFppibppuuuuup_ -> pFppiB
 #() vFXLbLLLLLLLLLL_L -> vFXLBL
@@ -1687,6 +1689,7 @@
 #() iFEpiuuu -> iFEpiuuu
 #() iEEpiLpp -> iEEpiLpp
 #() iEEpipOi -> iEEpipOi
+#() iFEpuuip -> iFEpuuip
 #() iFEpuuup -> iFEpuuup
 #() iFEplluu -> iFEplluu
 #() iFEpLlpp -> iFEpLlpp
@@ -2243,8 +2246,11 @@ wrappedfreetype:
   - FT_Activate_Size
   - FT_Done_Face
   - FT_Done_Size
+  - FT_GlyphSlot_Own_Bitmap
   - FT_Has_PS_Glyph_Names
   - FT_Reference_Face
+- WFp:
+  - FT_Get_FSType_Flags
 - uFp:
   - FT_Get_Sfnt_Name_Count
 - pFp:
@@ -2320,6 +2326,8 @@ wrappedfreetype:
 - iFpplp:
   - FT_New_Face
   - FT_Open_Face
+- iFpuuip:
+  - FT_Get_Advances
 - iFpuuup:
   - FT_Get_Kerning
 - iFplluu:
diff --git a/src/wrapped32/generated/wrappedfreetypetypes32.h b/src/wrapped32/generated/wrappedfreetypetypes32.h
index f25d037a..fc4336da 100644
--- a/src/wrapped32/generated/wrappedfreetypetypes32.h
+++ b/src/wrapped32/generated/wrappedfreetypetypes32.h
@@ -13,6 +13,7 @@
 
 typedef void (*vFp_t)(void*);
 typedef int32_t (*iFp_t)(void*);
+typedef uint16_t (*WFp_t)(void*);
 typedef uint32_t (*uFp_t)(void*);
 typedef void* (*pFp_t)(void*);
 typedef void (*vFpp_t)(void*, void*);
@@ -42,6 +43,7 @@ typedef int32_t (*iFpiup_t)(void*, int32_t, uint32_t, void*);
 typedef int32_t (*iFpuip_t)(void*, uint32_t, int32_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 (*iFpuuip_t)(void*, uint32_t, uint32_t, int32_t, void*);
 typedef int32_t (*iFpuuup_t)(void*, uint32_t, uint32_t, uint32_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*);
@@ -52,8 +54,10 @@ typedef int32_t (*iFppllp_t)(void*, void*, intptr_t, intptr_t, void*);
 	GO(FT_Activate_Size, iFp_t) \
 	GO(FT_Done_Face, iFp_t) \
 	GO(FT_Done_Size, iFp_t) \
+	GO(FT_GlyphSlot_Own_Bitmap, iFp_t) \
 	GO(FT_Has_PS_Glyph_Names, iFp_t) \
 	GO(FT_Reference_Face, iFp_t) \
+	GO(FT_Get_FSType_Flags, WFp_t) \
 	GO(FT_Get_Sfnt_Name_Count, uFp_t) \
 	GO(FT_Get_Postscript_Name, pFp_t) \
 	GO(FT_Get_X11_Font_Format, pFp_t) \
@@ -100,6 +104,7 @@ typedef int32_t (*iFppllp_t)(void*, void*, intptr_t, intptr_t, void*);
 	GO(FT_Get_Glyph_Name, iFpupu_t) \
 	GO(FT_New_Face, iFpplp_t) \
 	GO(FT_Open_Face, iFpplp_t) \
+	GO(FT_Get_Advances, iFpuuip_t) \
 	GO(FT_Get_Kerning, iFpuuup_t) \
 	GO(FT_Set_Char_Size, iFplluu_t) \
 	GO(FT_Load_Sfnt_Table, iFpLlpp_t) \
diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c
index 96413f89..14c1edeb 100644
--- a/src/wrapped32/generated/wrapper32.c
+++ b/src/wrapped32/generated/wrapper32.c
@@ -375,6 +375,7 @@ typedef uint8_t (*CFpi_t)(void*, int32_t);
 typedef uint8_t (*CFpu_t)(void*, uint32_t);
 typedef uint8_t (*CFpp_t)(void*, void*);
 typedef uint8_t (*CFXL_t)(void*, uintptr_t);
+typedef uint16_t (*WFEp_t)(x64emu_t*, void*);
 typedef uint16_t (*WFpp_t)(void*, void*);
 typedef uint32_t (*uFEp_t)(x64emu_t*, void*);
 typedef uint32_t (*uFii_t)(int32_t, int32_t);
@@ -1374,6 +1375,7 @@ typedef int32_t (*iFbp_ubpu_bpu__t)(struct_p_t*, uint32_t, struct_pu_t*, struct_
 typedef int32_t (*iFXLuriiiiiLi__t)(void*, uintptr_t, uint32_t, struct_iiiiiLi_t*);
 typedef uint32_t (*uFnibpL_bLpCC__t)(void*, int32_t, struct_pL_t*, struct_LpCC_t*);
 typedef int32_t (*iFppubppuuuuup__t)(void*, void*, uint32_t, struct_ppuuuuup_t*);
+typedef int32_t (*iFpruuipWCCp_ll_t)(void*, struct_uuipWCCp_t*, intptr_t, intptr_t);
 typedef int32_t (*iFpbLL_bLL_bLL__t)(void*, struct_LL_t*, struct_LL_t*, struct_LL_t*);
 typedef void* (*pFppibppuuuuup__t)(void*, void*, int32_t, struct_ppuuuuup_t*);
 typedef void (*vFXLbLLLLLLLLLL_L_t)(void*, uintptr_t, struct_LLLLLLLLLL_t*, uintptr_t);
@@ -1781,6 +1783,7 @@ typedef int32_t (*iEEpiipV_t)(x64emu_t*, void*, int32_t, int32_t, void*, void*);
 typedef int32_t (*iFEpiuuu_t)(x64emu_t*, void*, int32_t, uint32_t, uint32_t, uint32_t);
 typedef int32_t (*iEEpiLpp_t)(x64emu_t*, void*, int32_t, uintptr_t, void*, void*);
 typedef int32_t (*iEEpipOi_t)(x64emu_t*, void*, int32_t, void*, int32_t, int32_t);
+typedef int32_t (*iFEpuuip_t)(x64emu_t*, void*, uint32_t, uint32_t, int32_t, void*);
 typedef int32_t (*iFEpuuup_t)(x64emu_t*, void*, uint32_t, uint32_t, uint32_t, 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*);
@@ -2545,6 +2548,7 @@ void CFpi_32(x64emu_t *emu, uintptr_t fcn) { CFpi_t fn = (CFpi_t)fcn; R_EAX = (u
 void CFpu_32(x64emu_t *emu, uintptr_t fcn) { CFpu_t fn = (CFpu_t)fcn; R_EAX = (unsigned char)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); }
 void CFpp_32(x64emu_t *emu, uintptr_t fcn) { CFpp_t fn = (CFpp_t)fcn; R_EAX = (unsigned char)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); }
 void CFXL_32(x64emu_t *emu, uintptr_t fcn) { CFXL_t fn = (CFXL_t)fcn; R_EAX = (unsigned char)fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8))); }
+void WFEp_32(x64emu_t *emu, uintptr_t fcn) { WFEp_t fn = (WFEp_t)fcn; R_EAX = (unsigned short)fn(emu, from_ptriv(R_ESP + 4)); }
 void WFpp_32(x64emu_t *emu, uintptr_t fcn) { WFpp_t fn = (WFpp_t)fcn; R_EAX = (unsigned short)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); }
 void uFEp_32(x64emu_t *emu, uintptr_t fcn) { uFEp_t fn = (uFEp_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4)); }
 void uFii_32(x64emu_t *emu, uintptr_t fcn) { uFii_t fn = (uFii_t)fcn; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); }
@@ -3544,6 +3548,7 @@ void iFbp_ubpu_bpu__32(x64emu_t *emu, uintptr_t fcn) { iFbp_ubpu_bpu__t fn = (iF
 void iFXLuriiiiiLi__32(x64emu_t *emu, uintptr_t fcn) { iFXLuriiiiiLi__t fn = (iFXLuriiiiiLi__t)fcn; struct_iiiiiLi_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_iiiiiLi(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); }
 void uFnibpL_bLpCC__32(x64emu_t *emu, uintptr_t fcn) { uFnibpL_bLpCC__t fn = (uFnibpL_bLpCC__t)fcn; void *aligned_xcb = align_xcb_connection32(from_ptriv(R_ESP + 4)); struct_pL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_pL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_LpCC_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_LpCC(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = (uint32_t)fn(aligned_xcb, from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); unalign_xcb_connection32(aligned_xcb, from_ptriv(R_ESP + 4)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_pL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LpCC(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); }
 void iFppubppuuuuup__32(x64emu_t *emu, uintptr_t fcn) { iFppubppuuuuup__t fn = (iFppubppuuuuup__t)fcn; struct_ppuuuuup_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_ppuuuuup(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_ppuuuuup(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); }
+void iFpruuipWCCp_ll_32(x64emu_t *emu, uintptr_t fcn) { iFpruuipWCCp_ll_t fn = (iFpruuipWCCp_ll_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, from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16))); }
 void iFpbLL_bLL_bLL__32(x64emu_t *emu, uintptr_t fcn) { iFpbLL_bLL_bLL__t fn = (iFpbLL_bLL_bLL__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)))); struct_LL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_LL_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_LL(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); }
 void pFppibppuuuuup__32(x64emu_t *emu, uintptr_t fcn) { pFppibppuuuuup__t fn = (pFppibppuuuuup__t)fcn; struct_ppuuuuup_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_ppuuuuup(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_ppuuuuup(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); }
 void vFXLbLLLLLLLLLL_L_32(x64emu_t *emu, uintptr_t fcn) { vFXLbLLLLLLLLLL_L_t fn = (vFXLbLLLLLLLLLL_L_t)fcn; struct_LLLLLLLLLL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LLLLLLLLLL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 16))); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LLLLLLLLLL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); }
@@ -3951,6 +3956,7 @@ void iEEpiipV_32(x64emu_t *emu, uintptr_t fcn) { iEEpiipV_t fn = (iEEpiipV_t)fcn
 void iFEpiuuu_32(x64emu_t *emu, uintptr_t fcn) { iFEpiuuu_t fn = (iFEpiuuu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); }
 void iEEpiLpp_32(x64emu_t *emu, uintptr_t fcn) { iEEpiLpp_t fn = (iEEpiLpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); emu->libc_err = errno; }
 void iEEpipOi_32(x64emu_t *emu, uintptr_t fcn) { iEEpipOi_t fn = (iEEpipOi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), of_convert32(from_ptri(int32_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; }
+void iFEpuuip_32(x64emu_t *emu, uintptr_t fcn) { iFEpuuip_t fn = (iFEpuuip_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); }
 void iFEpuuup_32(x64emu_t *emu, uintptr_t fcn) { iFEpuuup_t fn = (iFEpuuup_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, 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), from_long(from_ptri(long_t, R_ESP + 8)), from_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), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); }
diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h
index 40fe80a0..9145e0b7 100644
--- a/src/wrapped32/generated/wrapper32.h
+++ b/src/wrapped32/generated/wrapper32.h
@@ -322,6 +322,7 @@ void CFpi_32(x64emu_t *emu, uintptr_t fnc);
 void CFpu_32(x64emu_t *emu, uintptr_t fnc);
 void CFpp_32(x64emu_t *emu, uintptr_t fnc);
 void CFXL_32(x64emu_t *emu, uintptr_t fnc);
+void WFEp_32(x64emu_t *emu, uintptr_t fnc);
 void WFpp_32(x64emu_t *emu, uintptr_t fnc);
 void uFEp_32(x64emu_t *emu, uintptr_t fnc);
 void uFii_32(x64emu_t *emu, uintptr_t fnc);
@@ -1321,6 +1322,7 @@ void iFbp_ubpu_bpu__32(x64emu_t *emu, uintptr_t fnc);
 void iFXLuriiiiiLi__32(x64emu_t *emu, uintptr_t fnc);
 void uFnibpL_bLpCC__32(x64emu_t *emu, uintptr_t fnc);
 void iFppubppuuuuup__32(x64emu_t *emu, uintptr_t fnc);
+void iFpruuipWCCp_ll_32(x64emu_t *emu, uintptr_t fnc);
 void iFpbLL_bLL_bLL__32(x64emu_t *emu, uintptr_t fnc);
 void pFppibppuuuuup__32(x64emu_t *emu, uintptr_t fnc);
 void vFXLbLLLLLLLLLL_L_32(x64emu_t *emu, uintptr_t fnc);
@@ -1728,6 +1730,7 @@ void iEEpiipV_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpiuuu_32(x64emu_t *emu, uintptr_t fnc);
 void iEEpiLpp_32(x64emu_t *emu, uintptr_t fnc);
 void iEEpipOi_32(x64emu_t *emu, uintptr_t fnc);
+void iFEpuuip_32(x64emu_t *emu, uintptr_t fnc);
 void iFEpuuup_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);
diff --git a/src/wrapped32/wrappedfreetype.c b/src/wrapped32/wrappedfreetype.c
index f1b0d2d6..f60d411a 100644
--- a/src/wrapped32/wrappedfreetype.c
+++ b/src/wrapped32/wrappedfreetype.c
@@ -2607,6 +2607,26 @@ EXPORT uint32_t my32_FT_Get_Name_Index(x64emu_t* emu, void* face, void* name)
     return ret;
 }
 
+EXPORT uint16_t my32_FT_Get_FSType_Flags(x64emu_t* emu, void* face)
+{
+    inplace_FT_FaceRec_enlarge(face);
+    uint16_t ret = my->FT_Get_FSType_Flags(face);
+    inplace_FT_FaceRec_shrink(face);
+    return ret;
+}
+
+EXPORT int my32_FT_Get_Advances(x64emu_t* emu, void* face, uint32_t start, uint32_t count, int flags, long_t* padvances)
+{
+    signed long advances_l[count];
+    memset(advances_l, 0, sizeof(advances_l));
+    inplace_FT_FaceRec_enlarge(face);
+    int ret = my->FT_Get_Advances(face, start, count, flags, advances_l);
+    inplace_FT_FaceRec_shrink(face);
+    for(int i=0; i<count; ++i)
+        padvances[i] = to_long(advances_l[i]);
+    return ret;
+}
+
 EXPORT void my32_FT_Outline_Get_CBox(x64emu_t* emu, FT_Outline_32_t* outline, FT_BBox_32_t* bbox)
 {
     FT_Outline_t outline_l = {0};
@@ -2790,6 +2810,15 @@ EXPORT int my32_FT_Get_Glyph(x64emu_t* emu, FT_GlyphSlotRec_32_t* slot, ptr_t* g
     return ret;
 }
 
+EXPORT int my32_FT_GlyphSlot_Own_Bitmap(x64emu_t* emu, FT_GlyphSlotRec_32_t* slot)
+{
+    FT_GlyphSlotRec_t slot_l = {0};
+    convert_FT_GlyphSlot_to_64(&slot_l, slot);
+    int ret = my->FT_GlyphSlot_Own_Bitmap(&slot_l);
+    convert_FT_GlyphSlot_to_32(slot, &slot_l);  //usefull?
+    return ret;
+}
+
 EXPORT int my32_FT_Glyph_Copy(x64emu_t* emu, void* src, void** dst)
 {
     inplace_FT_Glyph_enlarge(src);
diff --git a/src/wrapped32/wrappedfreetype_private.h b/src/wrapped32/wrappedfreetype_private.h
index 0a9e8438..176c4a12 100644
--- a/src/wrapped32/wrappedfreetype_private.h
+++ b/src/wrapped32/wrappedfreetype_private.h
@@ -14,7 +14,7 @@ GOM(FT_Activate_Size, iFEp)
 GO(FT_Bitmap_Convert, iFpruuipWCCp_buuipWCCp_i)
 //GO(FT_Bitmap_Copy, iFppp)
 GO(FT_Bitmap_Done, iFpruuipWCCp_)
-//GO(FT_Bitmap_Embolden, iFppll)
+GO(FT_Bitmap_Embolden, iFpruuipWCCp_ll)
 GO(FT_Bitmap_Init, vFbuuipWCCp_)
 GO(FT_Bitmap_New, vFbuuipWCCp_)
 //GO(FT_CeilFix, 
@@ -38,7 +38,7 @@ GOM(FT_Face_GetCharVariantIndex, uFEpLL)
 //GO(FT_Face_SetUnpatentedHinting, 
 GO(FT_FloorFix, lFl)
 GOM(FT_Get_Advance, iFEpiup)
-//GO(FT_Get_Advances, iFpuuip)
+GOM(FT_Get_Advances, iFEpuuip)
 //GO(FT_Get_BDF_Charset_ID, 
 GOM(FT_Get_BDF_Property, iFEppp)
 GOM(FT_Get_Char_Index, uFEpL)
@@ -54,7 +54,7 @@ GOM(FT_Get_Char_Index, uFEpL)
 //GO(FT_Get_CMap_Language_ID, 
 GOM(FT_Get_First_Char, LFEpp)
 //GO(FT_Get_Font_Format, pFp)
-//GO(FT_Get_FSType_Flags, WFp)
+GOM(FT_Get_FSType_Flags, WFEp)
 //GO(FT_Get_Gasp, 
 GOM(FT_Get_Glyph, iFEpp)
 GOM(FT_Get_Glyph_Name, iFEpupu)
@@ -91,7 +91,7 @@ GOM(FT_Glyph_Copy, iFEpBp_)
 GOM(FT_Glyph_Get_CBox, vFEpuBLLLL_)
 //GO(FT_GlyphSlot_Embolden, vFp)
 //GO(FT_GlyphSlot_Oblique, vFp)
-//GO(FT_GlyphSlot_Own_Bitmap, iFp)
+GOM(FT_GlyphSlot_Own_Bitmap, iFEp)
 //GO(FT_Glyph_Stroke, iFppC)
 //GO(FT_Glyph_StrokeBorder, iFppCC)
 //GO(FT_Glyph_To_Bitmap, iFpupC)