231 lines
6.7 KiB
C
231 lines
6.7 KiB
C
/*++
|
|
|
|
Copyright (c) 1996-1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dumpgly.c
|
|
|
|
Abstract:
|
|
|
|
GLYPHSETDATA dump tool
|
|
|
|
Environment:
|
|
|
|
Windows NT PostScript driver
|
|
|
|
Revision History:
|
|
|
|
11/08/96 -eigos-
|
|
Created it.
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
//
|
|
// Macros
|
|
//
|
|
|
|
#define FILENAME_SIZE 256
|
|
|
|
#define GLYPHSET_VERSION_1 0x00010000
|
|
|
|
//
|
|
// Globals
|
|
//
|
|
|
|
BYTE gcstrError1[] = "Usage: dumpgly *.gly\n";
|
|
BYTE gcstrError2[] = "Cannot open file \"%ws\".\n";
|
|
BYTE gcstrError3[] = "Invalid gly file \"%ws\".\n";
|
|
|
|
DWORD gdwOutputFlags;
|
|
|
|
|
|
PSTR gcstrCCType[] = {
|
|
"MTYPE_COMPOSE",
|
|
"MTYPE_DIRECT",
|
|
"MTYPE_PAIRED"};
|
|
|
|
|
|
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:
|
|
|
|
|
|
--*/
|
|
{
|
|
PUNI_GLYPHSETDATA pGly;
|
|
PUNI_CODEPAGEINFO pCP;
|
|
PGLYPHRUN pGlyphRun;
|
|
PMAPTABLE pMapTable;
|
|
TRANSDATA *pTrans;
|
|
HFILEMAP hGlyphSetData;
|
|
DWORD dwGlySize;
|
|
DWORD dwI, dwJ;
|
|
INT iRet;
|
|
WORD wSize, wJ;
|
|
WCHAR awchFile[FILENAME_SIZE];
|
|
BYTE pFormatCmd[256];
|
|
PBYTE pCommand;
|
|
|
|
if (argc != 2)
|
|
{
|
|
fprintf( stderr, gcstrError1);
|
|
return -1;
|
|
}
|
|
|
|
argv++;
|
|
|
|
iRet = MultiByteToWideChar(CP_ACP,
|
|
0,
|
|
*argv,
|
|
strlen(*argv),
|
|
awchFile,
|
|
FILENAME_SIZE);
|
|
|
|
*(awchFile + iRet) = (WCHAR)NULL;
|
|
|
|
hGlyphSetData = MapFileIntoMemory( awchFile,
|
|
(PVOID)&pGly,
|
|
&dwGlySize );
|
|
|
|
if (!hGlyphSetData)
|
|
{
|
|
fprintf( stderr, gcstrError2, *argv);
|
|
return -2;
|
|
}
|
|
|
|
if (pGly->dwVersion != GLYPHSET_VERSION_1)
|
|
{
|
|
fprintf( stderr, gcstrError3, *argv);
|
|
return -2;
|
|
}
|
|
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("G L Y P H S E T D A T A F I L E\n");
|
|
printf("FILE=%s\n",*argv);
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("GLYPHSETDATA\n");
|
|
printf("GLYPHSETDATA.dwSize : %d\n", pGly->dwSize);
|
|
printf(" dwVersion : %d.%d\n", (pGly->dwVersion) >>16,
|
|
0x0000ffff&pGly->dwVersion);
|
|
printf(" dwFlags : %d\n", pGly->dwFlags);
|
|
printf(" lPredefinedID : %d\n", pGly->lPredefinedID);
|
|
printf(" dwGlyphCount : %d\n", pGly->dwGlyphCount);
|
|
printf(" dwRunCount : %d\n", pGly->dwRunCount);
|
|
printf(" loRunOffset : 0x%x\n", pGly->loRunOffset);
|
|
printf(" dwCodePageCount : %d\n", pGly->dwCodePageCount);
|
|
printf(" loCodePageOffset : 0x%x\n", pGly->loCodePageOffset);
|
|
printf(" loMapTableOffset : 0x%x\n", pGly->loMapTableOffset);
|
|
printf("\n");
|
|
|
|
pCP = (PUNI_CODEPAGEINFO)((PBYTE) pGly + pGly->loCodePageOffset);
|
|
|
|
printf("\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("CODEPAGEINFO\n");
|
|
for (dwI = 0; dwI < pGly->dwCodePageCount; dwI ++)
|
|
{
|
|
printf ("UNI_CODEPAGEINFO[%d].dwCodePage = %d\n",
|
|
dwI, pCP->dwCodePage);
|
|
printf ("UNI_CODEPAGEINFO[%d].SelectSymbolSet.dwCount = %d\n",
|
|
dwI, pCP->SelectSymbolSet.dwCount);
|
|
printf ("UNI_CODEPAGEINFO[%d].SelectSymbolSet:Command(%d) = %s\n",
|
|
dwI,
|
|
pCP->SelectSymbolSet.loOffset,
|
|
(PBYTE)pCP+pCP->SelectSymbolSet.loOffset);
|
|
printf ("UNI_CODEPAGEINFO[%d].UnSelectSymbolSet.dwCount = %d\n",
|
|
dwI, pCP->UnSelectSymbolSet.dwCount);
|
|
printf ("UNI_CODEPAGEINFO[%d].UnSelectSymbolSet:Command(%d) = %s\n",
|
|
dwI,
|
|
pCP->UnSelectSymbolSet.loOffset,
|
|
(PBYTE)pCP+pCP->UnSelectSymbolSet.loOffset);
|
|
pCP++;
|
|
}
|
|
|
|
pGlyphRun = (PGLYPHRUN) ((PBYTE)pGly + pGly->loRunOffset);
|
|
|
|
printf("\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("GLYPHRUN\n");
|
|
|
|
dwJ = 1;
|
|
for (dwI = 0; dwI < pGly->dwRunCount; dwI ++)
|
|
{
|
|
printf("GLYPHRUN[%2d].wcLow = 0x%-4x\n",
|
|
dwI, pGlyphRun->wcLow);
|
|
printf("GLYPHRUN[%2d].wGlyphCount = %d\n",
|
|
dwI, pGlyphRun->wGlyphCount);
|
|
printf("Starting Glyph ID = %d\n", dwJ);
|
|
dwJ += pGlyphRun->wGlyphCount;
|
|
pGlyphRun++;
|
|
}
|
|
|
|
pMapTable = (PMAPTABLE) ((PBYTE)pGly + pGly->loMapTableOffset);
|
|
pTrans = pMapTable->Trans;
|
|
|
|
printf("\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("MAPTABLE\n");
|
|
printf("MAPTABLE.dwSize = %d\n", pMapTable->dwSize);
|
|
printf("MAPTABLE.dwGlyphNum = %d\n", pMapTable->dwGlyphNum);
|
|
|
|
for (dwI = 0; dwI < pMapTable->dwGlyphNum; dwI ++)
|
|
{
|
|
printf("MAPTABLE.pTrans[%5d].ubCodePageID = %d\n",
|
|
dwI+1, pTrans[dwI].ubCodePageID);
|
|
printf("MAPTABLE.pTrans[%5d].ubType = 0x%x\n",
|
|
dwI+1, pTrans[dwI].ubType);
|
|
switch(pTrans[dwI].ubType & MTYPE_FORMAT_MASK)
|
|
{
|
|
case MTYPE_DIRECT:
|
|
printf("MAPTABLE.pTrans[%5d].ubCode = 0x%02x\n",
|
|
dwI+1, pTrans[dwI].uCode.ubCode);
|
|
break;
|
|
case MTYPE_PAIRED:
|
|
printf("MAPTABLE.pTrans[%5d].ubPairs[0] = 0x%02x\n",
|
|
dwI+1, pTrans[dwI].uCode.ubPairs[0]);
|
|
printf("MAPTABLE.pTrans[%5d].ubPairs[1] = 0x%02x\n",
|
|
dwI+1, pTrans[dwI].uCode.ubPairs[1]);
|
|
break;
|
|
case MTYPE_COMPOSE:
|
|
printf("MAPTABLE.pTrans[%5d].sCode = 0x%02x\n",
|
|
dwI+1, pTrans[dwI].uCode.sCode);
|
|
pCommand = (PBYTE)pMapTable + pTrans[dwI].uCode.sCode;
|
|
wSize = *(WORD*)pCommand;
|
|
pCommand += 2;
|
|
printf("Size = 0x%d\n", wSize);
|
|
printf("Command = 0x");
|
|
for (wJ = 0; wJ < wSize; wJ ++)
|
|
{
|
|
printf("%02x",pCommand[wJ]);
|
|
}
|
|
printf("\n");
|
|
break;
|
|
}
|
|
}
|
|
|
|
UnmapFileFromMemory(hGlyphSetData);
|
|
|
|
return 0;
|
|
}
|
|
|