241 lines
7.3 KiB
C
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));
|
|
}
|
|
}
|
|
|