REM Enumerate fonts
INSTALL @lib$+"CALLBACK"
REM!WC
TRUETYPE_FONTTYPE = &4
MM_MAX_NUMAXES = 16
LF_FACESIZE = 32
LF_FULLFACESIZE = 64
REM Windows Structures
DIM _LOGFONT{ Height%, \
\ Width%, \
\ Escapement%, \
\ Orientation%, \
\ Weight%, \
\ Italic&, \
\ Underline&, \
\ StrikeOut&, \
\ CharSet&, \
\ OutPrecision&, \
\ ClipPrecision&, \
\ Quality&, \
\ PitchAndFamily&, \
\ FaceName&(LF_FACESIZE-1) }
DIM TEXTMETRIC{ tmHeight%, \
\ tmAscentr%, \
\ tmDescent%, \
\ tmInternalLeading%, \
\ tmExternalLeading%, \
\ tmAveCharWidth%, \
\ tmMaxCharWidth%, \
\ tmWeight%, \
\ tmOverhang%, \
\ tmDigitizedAspectX%, \
\ tmDigitizedAspectY%, \
\ tmFirstChar&, \
\ tmLastChar&, \
\ tmDefaultChar&, \
\ tmBreakChar&, \
\ tmItalic&, \
\ tmUnderlined&, \
\ tmtmStruckOut&, \
\ tmPitchAndFamily&, \
\ tmCharSet& }
DIM NEWTEXTMETRIC{ tmHeight%, \
\ tmAscentr%, \
\ tmDescent%, \
\ tmInternalLeading%, \
\ tmExternalLeading%, \
\ tmAveCharWidth%, \
\ tmMaxCharWidth%, \
\ tmWeight%, \
\ tmOverhang%, \
\ tmDigitizedAspectX%, \
\ tmDigitizedAspectY%, \
\ tmFirstChar&, \
\ tmLastChar&, \
\ tmDefaultChar&, \
\ tmBreakChar&, \
\ tmItalic&, \
\ tmUnderlined&, \
\ tmtmStruckOut&, \
\ tmPitchAndFamily&, \
\ tmCharSet&, \
\ ntmFlags%, \
\ ntmSizeEM%, \
\ ntmCellHeight%, \
\ ntmAvgWidth% }
DIM FONTSIGNATURE{ fsUsb&(15) , fsCab&(7) }
DIM NEWTEXTMETRICEX{ ntmTm{} = NEWTEXTMETRIC{}, \
\ ntmFontSig{} = FONTSIGNATURE{} }
DIM ENUMLOGFONTEX{ elfLogFont{} = _LOGFONT{}, \
\ elfFullName&(LF_FULLFACESIZE-1), \
\ elfStyle&(LF_FACESIZE-1), \
\ elfScript(LF_FACESIZE-1) }
DIM AXESLIST{ axlReserved%, \
\ axlNumAxes%, \
\ axlAxesInfo&(MM_MAX_NUMAXES-1) }
DIM ENUMTEXTMETRIC{ etmNewTextMetricEx{} = NEWTEXTMETRICEX{}, \
\ etmAxesList{} = AXESLIST{} }
DIM DESIGNVECTOR{ dvReserved%, \
\ dvNumAxes%, \
\ dvValues&(MM_MAX_NUMAXES-1) }
DIM ENUMLOGFONTEXDV{ elfEnumLogfontEx{} = ENUMLOGFONTEX{}, \
\ elfDesignVector{} = DESIGNVECTOR{} }
REM Enumerate fonts
fontcount% = 0
SYS FN_syscalls("EnumFontFamiliesEx"), @memhdc%, _LOGFONT{}, FN_callback(FNenumfonts(),4), 0, 0
ret% = FN_sysresult
END
DEF FNenumfonts(pENUMLOGFONTINDEX%, pTEXTMETRIC%, fonttype%, lparam%)
fontcount% += 1
REM Show all TRUETYPE fonts
IF fonttype% = TRUETYPE_FONTTYPE THEN
PRINT fontcount%, " ",$$(pENUMLOGFONTINDEX%+28)
ENDIF
= 1
PROC_GetFonts(^fontname$())
FOR I%=0 TO DIM(fontname$(),1)
PRINT I%+1," "fontname$(I%)
NEXT
END
DEF PROC_GetFonts(P%)
LOCAL LF_FACESIZE , _LOGFONT{}, fontcount%, ret%
LF_FACESIZE = 32
DIM _LOGFONT{ Height%, \
\ Width%, \
\ Escapement%, \
\ Orientation%, \
\ Weight%, \
\ Italic&, \
\ Underline&, \
\ StrikeOut&, \
\ CharSet&, \
\ OutPrecision&, \
\ ClipPrecision&, \
\ Quality&, \
\ PitchAndFamily&, \
\ FaceName&(LF_FACESIZE-1) }
REM Enumerate fonts
fontcount% = 0
ON ERROR LOCAL RESTORE ERROR:INSTALL @lib$+"CALLBACK"
SYS FN_syscalls("EnumFontFamiliesEx"), @memhdc%, _LOGFONT{}, FN_callback(FNenumfontscount(),4), 0, 0
ret% = FN_sysresult
DIM fontname$(fontcount%-1)
fontcount%=-1
SYS FN_syscalls("EnumFontFamiliesEx"), @memhdc%, _LOGFONT{}, FN_callback(FNenumfontsgetnames(),4), 0, 0
ret% = FN_sysresult
ENDPROC
DEF FNenumfontscount(pENUMLOGFONTINDEX%, pTEXTMETRIC%, fonttype%, lparam%)
fontcount% += 1
=1
DEF FNenumfontsgetnames(pENUMLOGFONTINDEX%, pTEXTMETRIC%, fonttype%, lparam%)
fontcount% += 1
fontname$(fontcount%) = $$(pENUMLOGFONTINDEX%+28)
= 1
PROC_GetFonts(MyFontName$())
FOR I% = 0 TO DIM(MyFontName$(),1)
PRINT I%+1, " " MyFontName$(I%)
NEXT
END
DEF PROC_GetFonts(RETURN fontname$())
LOCAL LF_FACESIZE , _LOGFONT{}, fontcount%, ret%
LF_FACESIZE = 32
DIM _LOGFONT{ Height%, \
\ Width%, \
\ Escapement%, \
\ Orientation%, \
\ Weight%, \
\ Italic&, \
\ Underline&, \
\ StrikeOut&, \
\ CharSet&, \
\ OutPrecision&, \
\ ClipPrecision&, \
\ Quality&, \
\ PitchAndFamily&, \
\ FaceName&(LF_FACESIZE-1) }
REM Enumerate fonts
fontcount% = 0
ON ERROR LOCAL RESTORE ERROR:INSTALL @lib$+"CALLBACK"
SYS FN_syscalls("EnumFontFamiliesEx"), @memhdc%, _LOGFONT{}, FN_callback(FNenumfonts(),4), 0, 0
ret% = FN_sysresult
DIM fontname$(fontcount%-1)
fontcount% = 0
SYS FN_syscalls("EnumFontFamiliesEx"), @memhdc%, _LOGFONT{}, FN_callback(FNenumfonts(),4), 1, 0
ret% = FN_sysresult
ENDPROC
DEF FNenumfonts(pENUMLOGFONTINDEX%, pTEXTMETRIC%, fonttype%, lparam%)
IF lparam% fontname$(fontcount%) = $$(pENUMLOGFONTINDEX%+26)
fontcount% += 1
= 1