/*++ Copyright (c) 1997 Microsoft Corporation Module Name: unifont.c Abstract: Dump UNIDRV font module's device data structure Environment: Windows NT printer drivers Revision History: 03/31/97 -eigos- Created it. --*/ #include "precomp.h" #define KERNEL_MODE #include "unidrv2\font\font.h" // // // UNIDRV FONTPDEV // // #define UNIFONTPDEV_DumpInt(field) \ dprintf(" %-16s = %d\n", #field, fontpdev.field) #define UNIFONTPDEV_DumpHex(field) \ dprintf(" %-16s = 0x%x\n", #field, fontpdev.field) #define UNIFONTPDEV_DumpWStr(field) \ dprintf(" %-16s = %s\n", #field, fontpdev.field) #define UNIFONTPDEV_DumpRec(field) \ dprintf(" %-16s = 0x%x L 0x%x\n", \ #field, \ (ULONG) pfontpdev + offsetof(FONTPDEV, field), \ sizeof(fontpdev.field)) FLAGDEF afdPDEVflFlags[] = { { "FDV_ROTATE_FONT_ABLE", FDV_ROTATE_FONT_ABLE}, { "FDV_ALIGN_BASELINE", FDV_ALIGN_BASELINE}, { "FDV_TT_FS_ENABLED", FDV_TT_FS_ENABLED}, { "FDV_DL_INCREMENTAL", FDV_DL_INCREMENTAL}, { "FDV_TRACK_FONT_MEM", FDV_TRACK_FONT_MEM}, { "FDV_WHITE_TEXT", FDV_WHITE_TEXT}, { "FDV_DLTT", FDV_DLTT}, { "FDV_DLTT_ASTT_PREF", FDV_DLTT_ASTT_PREF}, { "FDV_DLTT_BITM_PR EF", FDV_DLTT_BITM_PREF}, { "FDV_DLTT_OEMCALLBACK", FDV_DLTT_OEMCALLBACK}, { "FDV_MD_SERIAL", FDV_MD_SERIAL}, { "FDV_GRX_ON_TXT_BAND", FDV_GRX_ON_TXT_BAND}, { "FDV_GRX_UNDER_TEXT", FDV_GRX_UNDER_TEXT}, { "FDV_BKSP_OK", FDV_BKSP_OK}, { "FDV_90DEG_ROTATION", FDV_90DEG_ROTATION}, { "FDV_ANYDEG_ROTATION", FDV_ANYDEG_ROTATION}, { "FDV_SUPPORTS_FGCOLOR", FDV_SUPPORTS_FGCOLOR}, { "FDV_SUBSTITUTE_TT", FDV_SUBSTITUTE_TT}, { "FDV_SINGLE_BYTE", FDV_SINGLE_BYTE}, { "FDV_DOUBLE_BYTE", FDV_DOUBLE_BYTE}, { 0, 0} }; FLAGDEF afdSTROflAccel[] = { { "SO_FLAG_DEFAULT_PLACEMENT", SO_FLAG_DEFAULT_PLACEMENT}, { "SO_HORIZONTAL", SO_HORIZONTAL}, { "SO_VERTICAL", SO_VERTICAL}, { "SO_REVERSED", SO_REVERSED}, { "SO_ZERO_BEARINGS", SO_ZERO_BEARINGS}, { "SO_MAXEXT_EQUAL_BM_SIDE", SO_MAXEXT_EQUAL_BM_SIDE}, { 0, 0} }; FLAGDEF afdFontAttr[] = { { "FONTATTR_BOLD", FONTATTR_BOLD}, { "FONTATTR_ITALIC", FONTATTR_ITALIC}, { "FONTATTR_UNDERLINE",FONTATTR_UNDERLINE}, { "FONTATTR_STRIKEOUT",FONTATTR_STRIKEOUT}, { "FONTATTR_SUBSTFONT",FONTATTR_SUBSTFONT}, { 0, 0} }; VOID dump_unidrv_fontpdev( PFONTPDEV pfontpdev ) { FONTPDEV fontpdev; FLAGDEF *pfd; dprintf("\nUNIDRV device data (%x):\n", pfontpdev); debugger_copy_memory(&fontpdev, pfontpdev, sizeof(fontpdev)); if (fontpdev.dwSignature != FONTPDEV_ID) { dprintf("*** invalid unidrv font device data\n"); return; } UNIFONTPDEV_DumpHex(dwSignature); UNIFONTPDEV_DumpHex(dwSize); UNIFONTPDEV_DumpHex(pPDev); UNIFONTPDEV_DumpHex(flFlags); for (pfd=afdPDEVflFlags; pfd->psz; pfd ++) { if ((FLONG)fontpdev.flFlags & pfd->fl) { dprintf(" = %s\n",pfd->psz); } } UNIFONTPDEV_DumpHex(flText); UNIFONTPDEV_DumpInt(dwFontMem); UNIFONTPDEV_DumpInt(dwFontMemUsed); UNIFONTPDEV_DumpInt(dwSelBits); UNIFONTPDEV_DumpInt(ptTextScale.x); UNIFONTPDEV_DumpInt(ptTextScale.y); UNIFONTPDEV_DumpInt(iUsedSoftFonts); UNIFONTPDEV_DumpInt(iNextSFIndex); UNIFONTPDEV_DumpInt(iFirstSFIndex); UNIFONTPDEV_DumpInt(iLastSFIndex); UNIFONTPDEV_DumpInt(iMaxSoftFonts); UNIFONTPDEV_DumpInt(iDevResFontsCt); UNIFONTPDEV_DumpInt(iSoftFontsCt); UNIFONTPDEV_DumpInt(iCurXFont); UNIFONTPDEV_DumpInt(iWhiteIndex); UNIFONTPDEV_DumpInt(iBlackIndex); UNIFONTPDEV_DumpInt(sDefCTT); UNIFONTPDEV_DumpInt(dwDefaultFont); UNIFONTPDEV_DumpHex(pso); UNIFONTPDEV_DumpHex(pPSHeader); UNIFONTPDEV_DumpHex(pvWhiteTextFirst); UNIFONTPDEV_DumpHex(pvWhiteTextLast); UNIFONTPDEV_DumpHex(pTTFile); UNIFONTPDEV_DumpHex(ptod); UNIFONTPDEV_DumpHex(pFontMap); UNIFONTPDEV_DumpHex(pFMDefault); UNIFONTPDEV_DumpHex(pvDLMap); UNIFONTPDEV_DumpRec(FontList); UNIFONTPDEV_DumpRec(FontCartInfo); UNIFONTPDEV_DumpRec(ctl); UNIFONTPDEV_DumpHex(pTTFontSubReg); UNIFONTPDEV_DumpHex(pUFObj); } DECLARE_API(fontpdev) { LONG param; if (*args == '\0') { dprintf("usage: fontpdev addr\n"); return; } sscanf(args, "%lx", ¶m); dump_unidrv_fontpdev((PFONTPDEV) param); } // // // UNIDRV FONTMAP // // #define UNIFONTMAP_DumpInt(field) \ dprintf(" %-16s = %d\n", #field, fontmap.field) #define UNIFONTMAP_DumpHex(field) \ dprintf(" %-16s = 0x%x\n", #field, fontmap.field) #define UNIFONTMAP_DumpWStr(field) \ dprintf(" %-16s = %s\n", #field, fontmap.field) #define UNIFONTMAP_DumpRec(field) \ dprintf(" %-16s = 0x%x L 0x%x\n", \ #field, \ (ULONG) pfontpdev + offsetof(FONTMAP, field), \ sizeof(fontmap.field)) FLAGDEF afdflFlags[] = { { "FM_SCALABLE", FM_SCALABLE}, { "FM_DEFAULT", FM_DEFAULT}, { "FM_EXTCART", FM_EXTCART}, { "FM_FREE_GLYDATA", FM_FREE_GLYDATA}, { "FM_FONTCMD", FM_FONTCMD}, { "FM_WIDTHRES", FM_WIDTHRES}, { "FM_IFIRES", FM_IFIRES}, { "FM_KERNRES", FM_KERNRES}, { "FM_IFIVER40", FM_IFIVER40}, { "FM_GLYVER40", FM_GLYVER40}, { "FM_FINVOC", FM_FINVOC}, { "FM_SOFTFONT", FM_SOFTFONT}, { "FM_GEN_SFONT", FM_GEN_SFONT}, { "FM_SENT", FM_SENT}, { "FM_TT_BOUND", FM_TT_BOUND}, { "FM_TO_PROP", FM_TO_PROP}, { 0, 0} }; VOID dump_unidrv_fontmap( PFONTMAP pfontmap ) { FONTMAP fontmap; FLAGDEF *pfd; dprintf("\nUNIDRV fontmap data (%x):\n", pfontmap); debugger_copy_memory(&fontmap, pfontmap, sizeof(fontmap)); if (fontmap.dwSignature != FONTMAP_ID) { dprintf("*** invalid unidrv fontmap data\n"); return; } UNIFONTMAP_DumpHex(dwSignature); UNIFONTMAP_DumpHex(dwSize); UNIFONTMAP_DumpInt(dwFontType); UNIFONTMAP_DumpHex(flFlags); for (pfd=afdflFlags; pfd->psz; pfd ++) { if ((FLONG)fontmap.flFlags & pfd->fl) { dprintf(" = %s\n",pfd->psz); } } UNIFONTMAP_DumpHex(pIFIMet); UNIFONTMAP_DumpHex(wFirstChar); UNIFONTMAP_DumpHex(wLastChar); UNIFONTMAP_DumpInt(ulDLIndex); UNIFONTMAP_DumpInt(wXRes); UNIFONTMAP_DumpInt(wYRes); UNIFONTMAP_DumpInt(syAdj); UNIFONTMAP_DumpHex(pSubFM); UNIFONTMAP_DumpHex(pfnGlyphOut); UNIFONTMAP_DumpHex(pfnSelectFont); UNIFONTMAP_DumpHex(pfnDeSelectFont); UNIFONTMAP_DumpHex(pfnDownloadFontHeader); UNIFONTMAP_DumpHex(pfnDownloadGlyph); UNIFONTMAP_DumpHex(pfnCheckCondition); UNIFONTMAP_DumpHex(pfnFreePFM); } DECLARE_API(fm) { LONG param; if (*args == '\0') { dprintf("usage: fm addr\n"); return; } sscanf(args, "%lx", ¶m); dump_unidrv_fontmap((PFONTMAP) param); } // // // UNIDRV Device font FONTMAP // // #define UNIFONTMAPDEV_DumpInt(field) \ dprintf(" %-16s = %d\n", #field, fontmapdev.field) #define UNIFONTMAPDEV_DumpHex(field) \ dprintf(" %-16s = 0x%x\n", #field, fontmapdev.field) #define UNIFONTMAPDEV_DumpWStr(field) \ dprintf(" %-16s = %s\n", #field, fontmapdev.field) VOID dump_unidrv_fontmapdev( PFONTMAP_DEV pfontmapdev ) { FONTMAP_DEV fontmapdev; dprintf("\nUNIDRV device font fontmap data (%x):\n", pfontmapdev); debugger_copy_memory(&fontmapdev, pfontmapdev, sizeof(fontmapdev)); UNIFONTMAPDEV_DumpInt(wDevFontType); UNIFONTMAPDEV_DumpInt(dwResID); UNIFONTMAPDEV_DumpInt(sCTTid); UNIFONTMAPDEV_DumpHex(fCaps); UNIFONTMAPDEV_DumpInt(sYAdjust); UNIFONTMAPDEV_DumpInt(sYMoved); UNIFONTMAPDEV_DumpHex(pETM); UNIFONTMAPDEV_DumpInt(ulCodepage); UNIFONTMAPDEV_DumpInt(ulCodepageID); UNIFONTMAPDEV_DumpHex(pUCTree); UNIFONTMAPDEV_DumpHex(pUCKernTree); UNIFONTMAPDEV_DumpHex(pvNTGlyph); UNIFONTMAPDEV_DumpHex(pvFontRes); UNIFONTMAPDEV_DumpHex(pvPredefGTT); if (fontmapdev.fCaps & FM_IFIVER40) { UNIFONTMAPDEV_DumpHex(W.psWidth); UNIFONTMAPDEV_DumpHex(cmdFontSel.pCD); UNIFONTMAPDEV_DumpHex(cmdFontDesel.pCD); } else { UNIFONTMAPDEV_DumpHex(W.pWidthTable); UNIFONTMAPDEV_DumpHex(cmdFontSel.FInv); UNIFONTMAPDEV_DumpHex(cmdFontDesel.FInv); } } DECLARE_API(devfm) { LONG param; if (*args == '\0') { dprintf("usage: devfm addr\n"); return; } sscanf(args, "%lx", ¶m); dump_unidrv_fontmapdev((PFONTMAP_DEV) param); } DECLARE_API(bmpfm) { LONG param; if (*args == '\0') { dprintf("usage: bmpfm addr\n"); return; } sscanf(args, "%lx", ¶m); } #define UNITO_DATA_DumpInt(field) \ dprintf(" %-16s = %d\n", #field, to_data.field) #define UNITO_DATA_DumpHex(field) \ dprintf(" %-16s = 0x%x\n", #field, to_data.field) #define UNITO_DATA_DumpWStr(field) \ dprintf(" %-16s = %s\n", #field, to_data.field) #define UNITO_DATA_DumpRec(field) \ dprintf(" %-16s = 0x%x L 0x%x\n", \ #field, \ (ULONG) pfontpdev + offsetof(TO_DATA, field), \ sizeof(to_data.field)) VOID dump_unidrv_to_data( TO_DATA *pto_data ) { TO_DATA to_data; FLAGDEF *pfd; dprintf("\nUNIDRV device font to_data data (%x):\n", pto_data); debugger_copy_memory(&to_data, pto_data, sizeof(to_data)); UNITO_DATA_DumpHex(pPDev); UNITO_DATA_DumpHex(pfm); UNITO_DATA_DumpHex(pfo); UNITO_DATA_DumpHex(flAccel); for (pfd=afdSTROflAccel; pfd->psz; pfd ++) { if ((FLONG)to_data.flAccel & pfd->fl) { dprintf(" = %s\n",pfd->psz); } } UNITO_DATA_DumpHex(pgp); UNITO_DATA_DumpHex(apdlGlyph); UNITO_DATA_DumpHex(phGlyph); UNITO_DATA_DumpHex(pwt); UNITO_DATA_DumpHex(pvColor); UNITO_DATA_DumpInt(cGlyphsToPrint); UNITO_DATA_DumpHex(dwCurrGlyph); UNITO_DATA_DumpInt(iFace); UNITO_DATA_DumpInt(iSubstFace); UNITO_DATA_DumpHex(dwAttrFlags); UNITO_DATA_DumpHex(flFlags); UNITO_DATA_DumpInt(ptlFirstGlyph.x); UNITO_DATA_DumpInt(ptlFirstGlyph.y); } DECLARE_API(tod) { LONG param; if (*args == '\0') { dprintf("usage: tod addr\n"); return; } sscanf(args, "%lx", ¶m); dump_unidrv_to_data((TO_DATA*) param); } #define UNIWHITETEXT_DumpInt(field) \ dprintf(" %-16s = %d\n", #field, whitetext.field) #define UNIWHITETEXT_DumpHex(field) \ dprintf(" %-16s = 0x%x\n", #field, whitetext.field) #define UNIWHITETEXT_DumpWStr(field) \ dprintf(" %-16s = %s\n", #field, whitetext.field) #define UNIWHITETEXT_DumpRec(field) \ dprintf(" %-16s = 0x%x L 0x%x\n", \ #field, \ (ULONG) pfontpdev + offsetof(whitetext, field), \ sizeof(whitetext.field)) VOID dump_unidrv_whitetext( WHITETEXT *pwhitetext ) { WHITETEXT whitetext; FLAGDEF *pfd; dprintf("\nUNIDRV device font whitetext data (%x):\n", pwhitetext); debugger_copy_memory(&whitetext, pwhitetext, sizeof(whitetext)); UNIWHITETEXT_DumpHex(next); UNIWHITETEXT_DumpInt(sCount); UNIWHITETEXT_DumpHex(pvColor); UNIWHITETEXT_DumpInt(iFontId); UNIWHITETEXT_DumpHex(dwAttrFlags); for (pfd=afdFontAttr; pfd->psz; pfd ++) { if ((FLONG)whitetext.dwAttrFlags & pfd->fl) { dprintf(" = %s\n",pfd->psz); } } UNIWHITETEXT_DumpHex(flAccel); for (pfd=afdSTROflAccel; pfd->psz; pfd ++) { if ((FLONG)whitetext.flAccel & pfd->fl) { dprintf(" = %s\n",pfd->psz); } } UNIWHITETEXT_DumpHex(pgp); } DECLARE_API(wt) { LONG param; if (*args == '\0') { dprintf("usage: tod addr\n"); return; } sscanf(args, "%lx", ¶m); dump_unidrv_whitetext((WHITETEXT*) param); }