2025-04-27 07:49:33 -04:00

181 lines
4.9 KiB
C

/*++
Copyright (c) 1996-1997 Microsoft Corporation
Module Name:
ntfdump.c
Abstract:
UFM dump tool
Environment:
Windows NT PostScript driver
Revision History:
12/20/96 -eigos-
Created it.
--*/
#include "precomp.h"
//
// Macros
//
#define FILENAME_SIZE 256
//
// Globals
//
BYTE gcstrError1[] = "Usage: ntfdump *.ufm\n";
BYTE gcstrError2[] = "Cannot open file \"%ws\".\n";
//
// Internal prototype
//
BOOL Bntfdump(IN PNTF_FILEHEADER);
int __cdecl
main(
IN int argc,
IN char **argv)
/*++
Routine Description:
main
Arguments:
argc - Number of parameters in the following
argv - The parameters, starting with our name
Return Value:
Return error code
Note:
--*/
{
HFILEMAP hUFMData;
DWORD dwUFMSize;
WORD wSize;
WCHAR awchFile[FILENAME_SIZE];
PNTF_FILEHEADER pNTF;
//RIP(("Start ntfdump.exe\n"));
if (argc != 2)
{
fprintf( stderr, gcstrError1);
return -1;
}
argv++;
MultiByteToWideChar(CP_ACP,
0,
*argv,
strlen(*argv)+1,
awchFile,
FILENAME_SIZE);
hUFMData = MapFileIntoMemory( awchFile,
(PVOID)&pNTF,
&dwUFMSize );
if (!hUFMData)
{
fprintf( stderr, gcstrError2, *argv);
return -2;
}
Bntfdump(pNTF);
UnmapFileFromMemory(hUFMData);
return 0;
}
BOOL
Bntfdump(
IN PNTF_FILEHEADER pNTF)
{
PNTF_FONTMTXENTRY pFM;
PNTF_GLYPHSETENTRY pGL;
PGLYPHSETDATA pGlyph;
DWORD dwFMCount, dwGLCount, dwI;
pFM = (PNTF_FONTMTXENTRY)((PBYTE)pNTF + pNTF->dwFontMtxOffset);
pGL = (PNTF_GLYPHSETENTRY)((PBYTE)pNTF + pNTF->dwGlyphSetOffset);
dwFMCount = pNTF->dwFontMtxCount;
dwGLCount = pNTF->dwGlyphSetCount;
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" NTF DUMP\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" NTF_FILEHEADER\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("dwSignature = 0x%x\n", pNTF->dwSignature);
printf("dwDriverType = 0x%x\n", pNTF->dwDriverType);
printf("dwVersion = 0x%x\n", pNTF->dwVersion);
printf("dwGlyphSetCount = %d\n", pNTF->dwGlyphSetCount);
printf("dwGlyphSetOffset = 0x%x\n", pNTF->dwGlyphSetOffset);
printf("dwFontMtxCount = %d\n", pNTF->dwFontMtxOffset);
printf("dwFontMtxOffset = 0x%x\n", pNTF->dwFontMtxOffset);
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" NTF_FONTMTXENTRY\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
for (dwI = 0; dwI < dwFMCount; dwI ++, pFM++)
{
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("dwFontNameOffset = 0x%x\n", pFM->dwFontNameOffset);
printf("dwHashValue = 0x%x\n", pFM->dwHashValue);
printf("dwDataSize = 0x%x\n", pFM->dwDataSize);
printf("dwDataOffset = 0x%x\n", pFM->dwDataOffset);
printf("dwVersion = 0x%x\n", pFM->dwVersion);
}
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" NTF_GLYPHSETENTRY\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
for (dwI = 0; dwI < dwGLCount; dwI ++, pGL++)
{
pGlyph = (PGLYPHSETDATA)((PBYTE) pNTF + pGL->dwDataOffset);
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("dwNameOffset = 0x%x\n", pGL->dwNameOffset);
printf("dwHashValue = 0x%x\n", pGL->dwHashValue);
printf("dwDataSize = 0x%x\n", pGL->dwDataSize);
printf("dwDataOffset = 0x%x\n", pGL->dwDataOffset);
printf("dwFlags = 0x%x\n", pGL->dwFlags);
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("dwSize = 0x%x\n", pGlyph->dwSize);
printf("dwVersion = 0x%x\n", pGlyph->dwVersion);
printf("dwFlags = 0x%x\n", pGlyph->dwFlags);
printf("dwGlyphSetNameOffset = 0x%x\n", pGlyph->dwGlyphSetNameOffset);
printf("dwGlyphCount = 0x%x\n", pGlyph->dwGlyphCount);
printf("dwRunCount = 0x%x\n", pGlyph->dwRunCount);
printf("dwRunOffset = 0x%x\n", pGlyph->dwRunOffset);
printf("dwCodePageCount = 0x%x\n", pGlyph->dwCodePageCount);
printf("dwCodePageOffset = 0x%x\n", pGlyph->dwCodePageOffset);
printf("dwMappingTableOffset = 0x%x\n", pGlyph->dwMappingTableOffset);
}
return TRUE;
}