337 lines
9 KiB
C
337 lines
9 KiB
C
|
// *------------------------------------------------------------------------*
|
|||
|
// * makepfm.h
|
|||
|
// *------------------------------------------------------------------------*
|
|||
|
//
|
|||
|
// Copyright 1990, 1991 -- Adobe Systems, Inc.
|
|||
|
// PostScript is a trademark of Adobe Systems, Inc.
|
|||
|
//
|
|||
|
// NOTICE: All information contained herein or attendant hereto is, and
|
|||
|
// remains, the property of Adobe Systems, Inc. Many of the intellectual
|
|||
|
// and technical concepts contained herein are proprietary to Adobe Systems,
|
|||
|
// Inc. and may be covered by U.S. and Foreign Patents or Patents Pending or
|
|||
|
// are protected as trade secrets. Any dissemination of this information or
|
|||
|
// reproduction of this material are strictly forbidden unless prior written
|
|||
|
// permission is obtained from Adobe Systems, Inc.
|
|||
|
//
|
|||
|
//---------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
typedef char *LPSZ;
|
|||
|
|
|||
|
#define OPEN FileOpen
|
|||
|
#define CLOSE _lclose
|
|||
|
#define READ_BLOCK _lread
|
|||
|
#define WRITE_BLOCK _lwrite
|
|||
|
#define STRCPY lstrcpy
|
|||
|
#define STRCAT lstrcat
|
|||
|
#define STRCMP lstrcmp
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*--------------------------------------------------------------------------*/
|
|||
|
#define DEBUG_MODE 0
|
|||
|
|
|||
|
typedef struct { /* A lookup table for converting strings to tokens */
|
|||
|
char *szKey; /* Ptr to the string */
|
|||
|
int iValue; /* The corresponding token value */
|
|||
|
} KEY;
|
|||
|
|
|||
|
#define TK_UNDEFINED 0 /* tokens for ReadFontInfo */
|
|||
|
#define TK_EOF 1
|
|||
|
#define TK_MSMENUNAME 2
|
|||
|
#define TK_VPSTYLE 3
|
|||
|
#define TK_PI 4
|
|||
|
#define TK_SERIF 5
|
|||
|
#define TK_PCLSTYLE 6
|
|||
|
#define TK_PCLSTROKEWEIGHT 7
|
|||
|
#define TK_PCLTYPEFACEID 8
|
|||
|
#define TK_INF_CAPHEIGHT 9
|
|||
|
#define LAST_FI_TOKEN 9
|
|||
|
#define TK_ANGLE 10 // added for ATM ( GetINFFontDescription )
|
|||
|
#define TK_PSNAME 11 // added for ATM ( GetINFFontDescription )
|
|||
|
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
/* EM describes the basic character cell dimension (in Adobe units) */
|
|||
|
#define EM 1000
|
|||
|
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
#define ANSI_CHARSET 0
|
|||
|
#define SYMBOL_CHARSET 2
|
|||
|
#define OEM_CHARSET 255
|
|||
|
#define PCL_PI_CHARSET 181
|
|||
|
|
|||
|
#define PS_FONTTYPE 0x0081
|
|||
|
#define PCL_FONTTYPE 0x0080
|
|||
|
|
|||
|
#define FW_NORMAL 400
|
|||
|
#define FW_BOLD 700
|
|||
|
|
|||
|
/* GDI font families. */
|
|||
|
#define WIN30
|
|||
|
#ifdef WIN30
|
|||
|
#define FF_DONTCARE (0<<4) /* Don't care or don't know. */
|
|||
|
#define FF_ROMAN (1<<4) /* Variable stroke width, serifed. Times Roman, Century Schoolbook, etc. */
|
|||
|
#define FF_SWISS (2<<4) /* Variable stroke width, sans-serifed. Helvetica, Swiss, etc. */
|
|||
|
#define FF_MODERN (3<<4) /* Const stroke width, serifed or sans-serifed. Pica, Elite, Courier, etc. */
|
|||
|
#define FF_SCRIPT (4<<4) /* Cursive, etc. */
|
|||
|
#define FF_DECORATIVE (5<<4) /* Old English, etc. */
|
|||
|
#endif
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
SHORT left;
|
|||
|
SHORT bottom;
|
|||
|
SHORT right;
|
|||
|
SHORT top;
|
|||
|
} BBOX;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
SHORT capHeight;
|
|||
|
SHORT xHeight;
|
|||
|
SHORT loAscent; /* Lower-case ascent */
|
|||
|
SHORT loDescent; /* Lower-case descent */
|
|||
|
SHORT ulOffset; /* The underline offset */
|
|||
|
SHORT ulThick; /* The underline thickness */
|
|||
|
SHORT iSlant; /* The italic angle */
|
|||
|
BBOX rcBounds; /* The font bounding box */
|
|||
|
} EMM;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
char szFont[32]; /* The PostScript font name */
|
|||
|
char szFace[32]; /* The face name of the font */
|
|||
|
BOOL fEnumerate; /* TRUE if the font should be enumerated */
|
|||
|
BOOL fItalic; /* TRUE if this is an italic font */
|
|||
|
BOOL fSymbol; /* TRUE if the font is decorative */
|
|||
|
SHORT iFamily; /* The fonts family */
|
|||
|
WORD iWeight; /* TRUE if this is a bold font */
|
|||
|
SHORT iFirstChar; /* The first character in the font */
|
|||
|
SHORT iLastChar; /* The last character in the font */
|
|||
|
SHORT rgWidths[256]; /* Character widths from 0x020 to 0x0ff */
|
|||
|
} FONT;
|
|||
|
|
|||
|
extern void PutByte(SHORT);
|
|||
|
extern void PutWord(SHORT);
|
|||
|
extern void PutLong(long);
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
WORD iKey;
|
|||
|
SHORT iKernAmount;
|
|||
|
} KX, *PKX;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
WORD cPairs; /* The number of kerning pairs */
|
|||
|
PKX rgPairs;
|
|||
|
} KP;
|
|||
|
|
|||
|
/* The info for a single kern track */
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
SHORT iDegree; /* The degree of kerning */
|
|||
|
SHORT iPtMin; /* The minimum point size */
|
|||
|
SHORT iKernMin; /* The minimum kern amount */
|
|||
|
SHORT iPtMax; /* The maximum point size */
|
|||
|
SHORT iKernMax; /* The maximum kern amount */
|
|||
|
} TRACK;
|
|||
|
|
|||
|
#define MAXTRACKS 16
|
|||
|
/* The track kerning table for a font */
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
SHORT cTracks; /* The number of kern tracks */
|
|||
|
TRACK rgTracks[MAXTRACKS]; /* The kern track information */
|
|||
|
} KT;
|
|||
|
|
|||
|
/* Character metrics */
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
BBOX rc;
|
|||
|
SHORT iWidth;
|
|||
|
} CM;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
WORD iPtSize;
|
|||
|
SHORT iFirstChar;
|
|||
|
SHORT iLastChar;
|
|||
|
SHORT iAvgWidth;
|
|||
|
SHORT iMaxWidth;
|
|||
|
SHORT iItalicAngle;
|
|||
|
SHORT iFamily;
|
|||
|
SHORT ulOffset;
|
|||
|
SHORT ulThick;
|
|||
|
SHORT iAscent;
|
|||
|
SHORT iDescent;
|
|||
|
BOOL fVariablePitch;
|
|||
|
BOOL fWasVariablePitch;
|
|||
|
char szFile[MAX_PATH + 4]; // +1 for nul term, +3 for alignment.
|
|||
|
char szFont[80];
|
|||
|
char szFace[80];
|
|||
|
SHORT iWeight;
|
|||
|
KP kp;
|
|||
|
KT kt;
|
|||
|
BBOX rcBBox;
|
|||
|
CM rgcm[256]; /* The character metrics */
|
|||
|
} AFM;
|
|||
|
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
SHORT iSize;
|
|||
|
SHORT iPointSize;
|
|||
|
SHORT iOrientation;
|
|||
|
SHORT iMasterHeight;
|
|||
|
SHORT iMinScale;
|
|||
|
SHORT iMaxScale;
|
|||
|
SHORT iMasterUnits;
|
|||
|
SHORT iCapHeight;
|
|||
|
SHORT iXHeight;
|
|||
|
SHORT iLowerCaseAscent;
|
|||
|
SHORT iLowerCaseDescent;
|
|||
|
SHORT iSlant;
|
|||
|
SHORT iSuperScript;
|
|||
|
SHORT iSubScript;
|
|||
|
SHORT iSuperScriptSize;
|
|||
|
SHORT iSubScriptSize;
|
|||
|
SHORT iUnderlineOffset;
|
|||
|
SHORT iUnderlineWidth;
|
|||
|
SHORT iDoubleUpperUnderlineOffset;
|
|||
|
SHORT iDoubleLowerUnderlineOffset;
|
|||
|
SHORT iDoubleUpperUnderlineWidth;
|
|||
|
SHORT iDoubleLowerUnderlineWidth;
|
|||
|
SHORT iStrikeOutOffset;
|
|||
|
SHORT iStrikeOutWidth;
|
|||
|
WORD nKernPairs;
|
|||
|
WORD nKernTracks;
|
|||
|
} ETM;
|
|||
|
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
WORD iVersion;
|
|||
|
DWORD iSize;
|
|||
|
CHAR szCopyright[60];
|
|||
|
WORD iType;
|
|||
|
WORD iPoints;
|
|||
|
WORD iVertRes;
|
|||
|
WORD iHorizRes;
|
|||
|
WORD iAscent;
|
|||
|
WORD iInternalLeading;
|
|||
|
WORD iExternalLeading;
|
|||
|
BYTE iItalic;
|
|||
|
BYTE iUnderline;
|
|||
|
BYTE iStrikeOut;
|
|||
|
WORD iWeight;
|
|||
|
BYTE iCharSet;
|
|||
|
WORD iPixWidth;
|
|||
|
WORD iPixHeight;
|
|||
|
BYTE iPitchAndFamily;
|
|||
|
WORD iAvgWidth;
|
|||
|
WORD iMaxWidth;
|
|||
|
BYTE iFirstChar;
|
|||
|
BYTE iLastChar;
|
|||
|
BYTE iDefaultChar;
|
|||
|
BYTE iBreakChar;
|
|||
|
WORD iWidthBytes;
|
|||
|
DWORD oDevice;
|
|||
|
DWORD oFace;
|
|||
|
DWORD oBitsPointer;
|
|||
|
DWORD oBitsOffset;
|
|||
|
} PFM;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
WORD oSizeFields;
|
|||
|
DWORD oExtMetricsOffset;
|
|||
|
DWORD oExtentTable;
|
|||
|
DWORD oOriginTable;
|
|||
|
DWORD oPairKernTable;
|
|||
|
DWORD oTrackKernTable;
|
|||
|
DWORD oDriverInfo;
|
|||
|
DWORD iReserved;
|
|||
|
} PFMEXT;
|
|||
|
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
|
|||
|
typedef enum {
|
|||
|
epsymUserDefined,
|
|||
|
epsymRoman8,
|
|||
|
epsymKana8,
|
|||
|
epsymMath8,
|
|||
|
epsymUSASCII,
|
|||
|
epsymLineDraw,
|
|||
|
epsymMathSymbols,
|
|||
|
epsymUSLegal,
|
|||
|
epsymRomanExt,
|
|||
|
epsymISO_DenNor,
|
|||
|
epsymISO_UK,
|
|||
|
epsymISO_France,
|
|||
|
epsymISO_German,
|
|||
|
epsymISO_Italy,
|
|||
|
epsymISO_SwedFin,
|
|||
|
epsymISO_Spain,
|
|||
|
epsymGENERIC7,
|
|||
|
epsymGENERIC8,
|
|||
|
epsymECMA94
|
|||
|
} SYMBOLSET;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
SYMBOLSET symbolSet; /* kind of translation table */
|
|||
|
DWORD offset; /* location of user-defined table */
|
|||
|
WORD len; /* length (in bytes) of table */
|
|||
|
BYTE firstchar, lastchar; /* table ranges from firstchar to lastchar */
|
|||
|
} TRANSTABLE;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
WORD epSize; /* size of this data structure */
|
|||
|
WORD epVersion; /* number indicating version of struct */
|
|||
|
DWORD epMemUsage; /* amt of memory font takes up in printer */
|
|||
|
DWORD epEscape; /* pointer to escape that selects the font */
|
|||
|
TRANSTABLE xtbl; /* character set translation info */
|
|||
|
} DRIVERINFO;
|
|||
|
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
|
|||
|
#define POSTSCRIPT (1)
|
|||
|
#define PCL (2)
|
|||
|
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
|
|||
|
typedef enum { PORTRAIT, LANDSCAPE } ORIENTATION;
|
|||
|
|
|||
|
#define ASCII_SET ("0U")
|
|||
|
#define ROMAN8_SET ("8U")
|
|||
|
#define WINANSI_SET ("9U")
|
|||
|
#define PI_SET ("15U")
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
ORIENTATION orientation;
|
|||
|
char symbolsetStr[4];
|
|||
|
SYMBOLSET symbolsetNum;
|
|||
|
SHORT style;
|
|||
|
SHORT strokeWeight;
|
|||
|
SHORT typefaceLen;
|
|||
|
WORD typeface;
|
|||
|
char *epEscapeSequence; /* escape sequence that selects the font */
|
|||
|
} PCLINFO;
|
|||
|
|
|||
|
/*--------------------------------------------------------------------------*/
|
|||
|
#define EOS '\0'
|
|||
|
#define FNAMEMAX (80)
|
|||
|
|
|||
|
/*--------------------------------------------------------------------------*/
|
|||
|
|
|||
|
#define BUFFLEN 80
|
|||
|
#define MANDATORY 1
|
|||
|
#define CookedReadMode "r"
|
|||
|
#define FATALEXIT (2)
|
|||
|
|
|||
|
|
|||
|
|