windows-nt/Source/XPSP1/NT/base/mvdm/wow16/write/fontdefs.h
2020-09-26 16:20:57 +08:00

379 lines
12 KiB
C

/************************************************************/
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
/************************************************************/
/* fontdefs.h -- MW definitions for fonts */
#ifdef PRDFILES
struct PRDD
{ /* printer description file descriptor */
int cfcdMac, /* count of fonts defined for this printer */
cxInch, /* pixels per inch, horizontal */
dyaMin, /* " " " " y " */
pid, /* printer identification number */
pe, /* print element */
fNoMSJ, /* microspace justification flag */
fSpecial, /* special flags */
pn, /* serial interface word */
bfcdBase, /* byte address of start of FCDs */
cttBase, /* byte address of start of CTT */
bpcdBase, /* byte address of start of PCDs */
bpcsBase, /* byte address of start of PCSs */
bprdMax; /* end of PRD file */
CHAR (**hrgbprdf)[]; /* block that contains the FCDs and WTs */
int (**hmpiftcfcd)[]; /* double entry table: consists of 2 word
entries, 1st is the font code of this font,
2nd is heap offset to FCD for this font.
There are exactly cfcdMac sets of these */
CHAR (**hrgbctt)[]; /* character translation table */
CHAR (**hprcc)[]; /* printer control sequences */
/* CHAR szFile[cchMaxFile]; /* file name for printer desc. file */
};
#define cchPRDDFile 26
#define cwPRDD (sizeof (struct PRDD) / sizeof(int))
/* prd file byte offsets */
#define bPrdData1 (typeFC)64
#define bPrdData2 (typeFC)128
#define cpsMax 10
#define dxaDefault ((unsigned) 144)
#ifdef SAND
#define wpcPica 0 /* Daisy wheel pitch codes */
#define wpcElite 1
#define wpcMicron 2
#define wpcProportional 3
#define wpPica 10 /* Pitches */
#define wpElite 12
#define wpMicron 15
#define wpProportional 10 /* Bogus */
#define psPica 12 /* point Sizes */
#define psElite 10
#define psMicron 8
#define psProportional 12 /* Bogus */
#define convWpPs 120 /* conversion between wheel pitch and
Point Size */
/* IMPORTANT-- the following font codes (20, 21, 22, 23) random numbers
we will have to be assigned permanent font codes by Apple */
#define ftcPrintFONT 20
#define ftcPrintFWID 21
#define ftcPrintPSFONT 22
#define ftcPrintPSFWID 23
#endif /* SAND */
struct FAD
{ /* Font Address Descriptor */
unsigned wtp; /* multi purpose word */
};
struct PCSD1
{ /* printer control sequence descriptor */
int bprcc; /* byte offset of start of control sequence */
CHAR bMod; /* modification byte */
CHAR cch; /* length of control sequence */
};
#define cwPCSD1 (sizeof(struct PCSD1) / sizeof(int))
struct PSD
{ /* Printer Size Descriptor */
int hps; /* size available in half points */
struct FAD fad,
fadI,
fadB,
fadIB;
struct PCSD1 pcsdBegin,
pcsdEnd;
};
struct FCD
{ /* Font Code Description */
int ctp; /* character translation table pointer (a la wtp) */
int cpsd; /* count of sizes available */
struct PSD rgpsd[cpsMax]; /* psds for each size available */
CHAR rgchFntName[32];/* font name (null terminated) */
};
#define pnfSerial 0100000
#define pnfETX 040000
#define pnfXON 020000
#define MSJ_fNone 1
#define MSJ_fChars 2
#define MSJ_fPSCorrect 4
#define SPC_fNoBSCtt 1
#ifdef GENERIC_MSDOS
#ifdef HP150
#define cPortMac 3
#define cchPort 4
#else /* not HP150 */
#define cPortMac 2
#define cchPort 4
#endif /* not HP150 */
#else /* not GENERIC_MSDOS */
#define cPortMac 5
#define cchPort 5
#endif /* GENERIC_MSDOS */
#define fntMax 6
struct PCSD
{ /* printer control sequence descriptor */
int bprcc; /* byte offset of start of control sequence */
CHAR bMod; /* modification byte */
CHAR cch; /* length of control sequence */
CHAR bMagic; /* magic number */
CHAR bMax; /* max value of parameter */
};
#endif /* PRDFILES */
#define hpsMin 8
#define hpsMax 256
#define cchFontSize 4
#define iszSizeMax 32
#define iffnEnumMax 64
#define psFontMin 4
#define psFontMax 127
/* macros used to get/put pitch and font family info in windows data structs */
#define bitPitch 0x01
#define grpbitFamily 0xf0
typedef CHAR FFID; /* font family ID */
#define iftcRoman 0
#define iftcModern 1
#define iftcScript 2
#define iftcDecorative 3
#define iftcSwiss 4
#ifdef SYSENDMARK
#define ftcSystem 0x3E
#define bitFtcChp 0x3E
#endif /* KANJI */
#define ftcNil 255
#define cchFfnMin 1
#define chGhost '\003'
#define iffnProfMax 5 /* # of fonts described in win.ini list */
#define LocalFaceSize 32
#ifndef LF_FACESIZE
/* this is gross, but so's our compiler! */
#define LF_FACESIZE LocalFaceSize
#endif
#ifdef NEWFONTENUM
#define ibFfnMax (LF_FACESIZE + sizeof(FFID) + sizeof(BYTE) + 1 /* to make it a max */)
#else
#define ibFfnMax (LF_FACESIZE + sizeof(FFID) + 1)
#endif
#define CbFfn(cch) (sizeof(struct FFN) - cchFfnMin + (cch))
/* Added 5/5/89: insure we only touch memory to which we're entitled ..pault */
#define CbFromPffn(pffn) (sizeof(FFID)+sizeof(BYTE)+CchSz((pffn)->szFfn))
/* NOTE: If this structure is changed, CbFromPffn() above must be updated! */
typedef struct FFN /* Font Family Name */
{
#ifdef NEWFONTENUM
BYTE chs; /* The charset associated with this facename
(ANSI, OEM, Symbol, etc). We've kludged the
way that FFN's are written out in documents
so see HffntbForNewDoc() ..pault */
#endif
FFID ffid;
/* really a variable length string */
CHAR szFfn[cchFfnMin];
};
/* 255 ffn's lets us map ftc's in a single byte, with one nil value */
#define iffnMax 255
#define cffnMin 1
typedef struct FFNTB /* font table */
{
unsigned int iffnMac: 15;
unsigned int fFontMenuValid: 1; /* Used for names on CHAR dropdown */
struct FFN **mpftchffn[cffnMin];
};
struct FFNTB **HffntbCreateForFn();
struct FFNTB **HffntbNewDoc();
struct FFNTB **HffntbAlloc();
struct FFN *PffnDefault();
#define HffntbGet(doc) ((**hpdocdod)[(doc)].hffntb)
/* following structures support font information caching */
#define fcidNil 0xffffffffL
typedef union FCID /* font cache identifier */
{
long lFcid;
struct
{
unsigned ftc : 8;
unsigned hps : 8;
unsigned doc : 4;
unsigned wFcid : 12;
} strFcid;
};
/* bits set in wFcid */
#define grpbitPsWidthFcid 0x007f
#define bitFixedPitchFcid 0x0080
#define bitUlineFcid 0x0100
#define bitBoldFcid 0x0200
#define bitItalicFcid 0x0400
#define bitPrintFcid 0x0800
#define psWidthMax 127
typedef struct FMI /* font metric information */
{
int *mpchdxp; /* pointer to width table */
/* NOTE - we actually point chDxpMin entries
before the start of the table, so
that the valid range begins at the
start of the actual table */
int dxpSpace; /* width of a space */
int dxpOverhang; /* overhang for italic/bold chars */
int dypAscent; /* ascent */
int dypDescent; /* descent */
int dypBaseline; /* difference from top of cell to baseline */
int dypLeading; /* accent space plus recommended leading */
#ifdef DBCS
int dypIntLeading; /* internal leading */
#if defined(JAPAN) || defined(KOREA) || defined(TAIWAN) || defined(PRC)
WORD dxpDBCS; /* Win3.1 T-HIROYN change BYTE--> WORD*/
#else
BYTE dxpDBCS; /* width of a DBCS character. */
/* WARNING - This assumes a kanji character
is fixed pitch. */
BYTE bDummy; /* To guarantee that this addition
increases the amount by 1 word. */
#endif /* JAPAN */
#endif /* DBCS */
};
#define chFmiMin 0x20
#ifdef WIN30
/* Why are we not asking for widths of all characters? We should. */
#ifdef KOREA
#define chFmiMax 0x80
#elif defined(TAIWAN)
#define chFmiMax 0x80
#elif defined(PRC)
#define chFmiMax 0x80
#else
#define chFmiMax 0x100
#endif
#else
#define chFmiMax 0x80
#endif
#define dxpNil 0xFFFF
typedef struct FCE /* font cache entry */
{
struct FCE *pfceNext; /* next entry in lru list */
struct FCE *pfcePrev; /* prev entry in lru list */
union FCID fcidRequest; /* request this entry satisfied */
union FCID fcidActual; /* what this entry really contains */
struct FFN **hffn; /* font family name */
struct FMI fmi; /* helpful metric information for this entry */
HFONT hfont; /* windows' font object */
int rgdxp[chFmiMax - chFmiMin]; /* width table proper */
};
#define ifceMax 16
struct FCE *PfceLruGet();
struct FCE *PfceFcidScan();
/* values to be passed to LoadFont() directing it's actions */
#define mdFontScreen 0 /* sets font for random screen chars */
#define mdFontChk 1 /* sets font as constrained by printer avail */
#define mdFontJam 2 /* like mdFontChk, but jams props into chp */
#define mdFontPrint 3 /* like mdFontScreen, but for the printer */
#ifdef SAND
typedef struct { /* structure of a Macintosh font. See Font Manager */
int frFontType; /* fr was prepended to each element to */
int frFirstChar; /* prevent "name collision" with the */
int frLastChar; /* elements of FONTINFO */
int frWidMax;
int frKernMax;
int frNDescent;
int frFRectMax;
int frChHeight;
int frOwTLoc;
int frAscent;
int frDescent;
int frLeading;
int frRowWords;
} FONTREC;
#define woFrOwTLoc 8 /* The word offset of the owTLoc from the beginning */
#define wdthTabFrOwTLoc 4 /* The frOwTLoc for a width table */
typedef struct {
int family;
int size;
int face;
int needBits;
int device;
POINT numer;
POINT denom;
} FMINPUT;
typedef struct {
int errNum;
HANDLE fontHandle;
CHAR bold;
CHAR italic;
CHAR ulOffset;
CHAR ulShadow;
CHAR ulThick;
CHAR shadow;
CHAR extra;
CHAR ascent;
CHAR descent;
CHAR widMax;
CHAR leading;
CHAR unused;
POINT numer;
POINT denom;
} FMOUTPUT;
#define qFMOUTPUT ((FMOUTPUT far *) 0x998)
#endif /* SAND */
#define enumFaceNames 0
#define enumFindAspectRatio 1
#define enumSizeList 2
#define enumCheckFont 3
#define enumQuickFaces 4
#ifdef JAPAN
#define enumFaceNameJapan 128 // T-HIROYN Win3.1 use FontFaceEnum JAPAN only
#endif
#ifdef NEWFONTENUM
#define psApprovedMax 48 /* don't know why we don't go up to 64 here; spose
that's for "the big boy word processors" ..pault */
#endif
/* Used in DOPRM.C and FONTENUM.C */
#define csizeApprovedMax 13