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

241 lines
7.3 KiB
C

/*++
Copyright (c) 1996-1997 Microsoft Corporation
Module Name:
dumpUFF.c
Abstract:
UFF 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: dumpuff *.uff\n";
BYTE gcstrError2[] = "Cannot open file \"%ws\".\n";
BYTE *gcstrdwFlags1[] = {
"FONT_DIR_SORTED"
};
BYTE *gcstrdwFlags2[] = {
"FONT_FL_UFM",
"FONT_FL_IFI",
"FONT_FL_SOFTFONT",
"FONT_FL_PERMANENT_SF",
"FONT_FL_DEVICEFONT",
"FONT_FL_GLYPHET_GTT",
"FONT_FL_GLYPHSET_RLE",
"FONT_FL_RESERVED"
};
//
// Internal prototype
//
BOOL BDumpUFF(IN PUFF_FILEHEADER);
VOID DumpData(IN PBYTE pData);
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 hUFFData;
DWORD dwUFFSize;
WORD wSize;
WCHAR awchFile[FILENAME_SIZE];
PUFF_FILEHEADER pUFF;
//RIP(("Start dumpUFF.exe\n"));
if (argc != 2)
{
fprintf( stderr, gcstrError1);
return -1;
}
argv++;
MultiByteToWideChar(CP_ACP,
0,
*argv,
strlen(*argv)+1,
awchFile,
FILENAME_SIZE);
hUFFData = MapFileIntoMemory( awchFile,
(PVOID)&pUFF,
&dwUFFSize );
if (!hUFFData)
{
fprintf( stderr, gcstrError2, *argv);
return -2;
}
printf("%ws\n", awchFile);
BDumpUFF(pUFF);
UnmapFileFromMemory(hUFFData);
return 0;
}
BOOL
BDumpUFF(
IN PUFF_FILEHEADER pUFF)
{
PUFF_FONTDIRECTORY pFontDir;
DWORD dwI, dwJ;
#if 0
printf("%x%x%x%x\n", *(PDWORD)pUFF,
*((PDWORD)pUFF+1),
*((PDWORD)pUFF+2),
*((PDWORD)pUFF+3));
#endif
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" UFF File\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("UFF.dwSignature = 0x%x\n", pUFF->dwSignature);
printf(" = %c%c%c%c\n",
(0x00FF & pUFF->dwSignature),
(0xFF00 & pUFF->dwSignature) >> 8,
(0xFF0000 & pUFF->dwSignature) >> 16,
(0xFF000000 & pUFF->dwSignature) >> 24);
printf("UFF.dwVersion = %d\n", pUFF->dwVersion);
printf("UFF.dwSize = %d\n", pUFF->dwSize);
printf("UFF.nFonts = %d\n", pUFF->nFonts);
printf("UFF.nGlyphSets = %d\n", pUFF->nGlyphSets);
printf("UFF.nVarData = %d\n", pUFF->nVarData);
printf("UFF.offFontDir = 0x%x\n", pUFF->offFontDir);
printf("UFF.dwFlags = 0x%x\n", pUFF->dwFlags);
for( dwI = 0; dwI < 32; dwI ++ )
{
if (pUFF->dwFlags & (0x00000001 << dwI))
printf(" %s\n", gcstrdwFlags1[dwI]);
}
pFontDir = (PUFF_FONTDIRECTORY)((PBYTE)pUFF + pUFF->offFontDir);
for (dwI = 0; dwI < pUFF->nFonts; dwI ++, pFontDir ++)
{
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("UFF_FONTREC.dwSignature = 0x%x\n", pFontDir->dwSignature);
printf(" = %c%c%c%c\n",
(0x00FF & pFontDir->dwSignature),
(0xFF00 & pFontDir->dwSignature) >> 8,
(0xFF0000 & pFontDir->dwSignature) >> 16,
(0xFF000000 & pFontDir->dwSignature) >> 24);
printf("UFF_FONTREC.wSize = %d\n", pFontDir->wSize);
printf("UFF_FONTREC.wFontID = %d\n", pFontDir->wFontID);
printf("UFF_FONTREC.sGlyphID = %d\n", pFontDir->sGlyphID);
printf("UFF_FONTREC.wFlags = %d\n", pFontDir->wFlags);
for( dwJ = 0; dwJ < 32; dwJ ++ )
{
if (pUFF->dwFlags & (0x00000001 << dwJ))
printf(" %s\n", gcstrdwFlags2[dwJ]);
}
printf("UFF_FONTREC.dwInstallerSig = %d\n", pFontDir->dwInstallerSig);
printf(" = %c%c%c%c\n",
(0x00FF & pFontDir->dwInstallerSig),
(0xFF00 & pFontDir->dwInstallerSig) >> 8,
(0xFF0000 & pFontDir->dwInstallerSig) >> 16,
(0xFF000000 & pFontDir->dwInstallerSig) >> 24);
printf("UFF.offFontName = 0x%x\n", pFontDir->offFontName);
printf(" = %ws\n", (PBYTE)pUFF+pFontDir->offFontName);
printf("UFF.offCartridgeName = 0x%x\n", pFontDir->offCartridgeName);
printf(" = %ws\n", (PBYTE)pUFF+pFontDir->offCartridgeName);
printf("UFF.offFontData = 0x%x\n", pFontDir->offFontData);
printf("UFF.offGlyphData = 0x%x\n", pFontDir->offGlyphData);
printf("UFF.offVarData = 0x%x\n", pFontDir->offVarData);
if (pFontDir->offFontData)
{
printf("FontData+++++++++++++++++++++++++++++++++++++++++++++++++\n");
DumpData((PBYTE)pUFF + pFontDir->offFontData);
}
if (pFontDir->offGlyphData)
{
printf("GlyphData++++++++++++++++++++++++++++++++++++++++++++++++\n");
DumpData((PBYTE)pUFF + pFontDir->offGlyphData);
}
if (pFontDir->offVarData)
{
printf("VarData+++++++++++++++++++++++++++++++++++++++++++++++++++\n");
DumpData((PBYTE)pUFF + pFontDir->offVarData);
}
}
return TRUE;
}
VOID
DumpData(
IN PBYTE pData)
{
PDATA_HEADER pDataHeader = (PDATA_HEADER)pData;
DWORD dwI;
printf("dwSignature = 0x%x\n", pDataHeader->dwSignature);
printf(" = %c%c%c%c\n",
(0x00FF & pDataHeader->dwSignature),
(0xFF00 & pDataHeader->dwSignature) >> 8,
(0xFF0000 & pDataHeader->dwSignature) >> 16,
(0xFF000000 & pDataHeader->dwSignature) >> 24);
printf("wSize = %d\n", pDataHeader->wSize);
printf("wDataID = %d(0x%x)\n", pDataHeader->wDataID, pDataHeader->wDataID);
printf("dwDataSize = %d\n", pDataHeader->dwDataSize);
pData += sizeof(DATA_HEADER);
for (dwI = 0; dwI < 16; dwI ++, pData += 16)
{
printf(" %08x %08x %08x %08x\n", *(PDWORD)pData, *(PDWORD)(pData+4), *(PDWORD)(pData+8), *(PDWORD)(pData+12));
}
}