|
|
/******************************Module*Header*******************************\
* Module Name: fontfile.h * * (Brief description) * * Created: 25-Oct-1990 09:20:11 * Author: Bodin Dresevic [BodinD] * * Copyright (c) 1990 Microsoft Corporation * * (General description of its use) * * Dependencies: * * (#defines) * (#includes) * \**************************************************************************/
// The CVTRESDATA struct contains the info about particular resource
// The info is in the converted form (RES_ELEM points to the "raw"
// data in the font file, while CVTRESDATA points to the data obtained
// from bConvertFontRes
// header of the converted font file, it is used both for 2.0 and 3.0 files,
// the fields that are 3.0 specofic are all zero filled for 2.0 font file.
// this structure has proper DWORD allignment, so that its fields can be
// accessed in the usual fashion, pcvtfh->field_name
#define FS_ZERO_WIDTH_GLYPHS 1
typedef struct _CVTFILEHDR // cvtfh,
{ USHORT iVersion; // 2 OR 3
USHORT fsFlags; // zero width glyphs present
UCHAR chFirstChar; // First character defined in font
UCHAR chLastChar; // Last character defined in font
UCHAR chDefaultChar; // Sub. for out of range chars.
UCHAR chBreakChar; // Word Break Character
USHORT cy; // height in Fixed Height
USHORT usMaxWidth; // Maximum width; one of the corrected values
#ifdef FE_SB // _CVTFILEHDR - add fields for DBCS
USHORT usDBCSWidth; // Width of double byte character
USHORT usCharSet; // Charset of this font resource
#endif // FE_SB
PTRDIFF dpOffsetTable; // offset to the offset table, I added this field
// fields that have no analog in original headers, to be filled with the data
// that corresponds to the converted "file" only. This info is cashed for
// later use by vFill_IFIMETRICS
ULONG cjFaceName; ULONG cjIFI; ULONG cjGlyphMax; // size of the largest GLYPHDATA structure in ULONG's
} CVTFILEHDR, *PCVTFILEHDR;
// flags for the fsSelection field are the same as for the corresponding
// field of the IFIMETRICS structure of the ntifi.h interface, i.e.:
// FM_SEL_ITALIC
// FM_SEL_STRIKEOUT
// FM_SEL_UNDERSCORE
// FM_SEL_BOLD
typedef struct _FACEINFO // fai
{ RES_ELEM re; HANDLE hResData; // only used for 32 bit dlls
#ifdef FE_SB
BOOL bVertical; // if this face is @face , this field is TRUE
#endif // FE_SB
CVTFILEHDR cvtfh; // aligned and CORRECTED data from the ogiginal header
ULONG iDefFace; CP_GLYPHSET *pcp; // pointer to struc describing supported glyph set
IFIMETRICS *pifi; // pointer to ifimetrics for this face
} FACEINFO, *PFACEINFO;
// The FACEDATA struct contains the info about particular face
// (simulated faces included)
// allowed values for the FACEDATA.iSimulate field, !!! these must not change
#define FC_SIM_NONE 0L
#define FC_SIM_EMBOLDEN 1L
#define FC_SIM_ITALICIZE 2L
#define FC_SIM_BOLDITALICIZE 3L
typedef struct _BM_FONTFILE *PFONTFILE; // pff
typedef struct _BM_FONTCONTEXT *PFONTCONTEXT; // pfc
#define FF_EXCEPTION_IN_PAGE_ERROR 1
typedef struct _BM_FONTFILE // ff
{ // fields required by handle manager
ULONG ident; // identifier,conveniently chosen as 0X000000FF
// remaining fields
FLONG fl; ULONG iType; // original file is *.fnt, 16 bit dll or 32 bit dll
HFF iFile;
ULONG cRef; // # no of times this font file is selected into fnt context
ULONG cFntRes; // # of *.fnt files associated with this fontfile struct
// == # of default faces
ULONG cjDescription; // size of the desctiption string (in bytes)
// if size is zero, then there is no string
// and the facename should be used instead.
PTRDIFF dpwszDescription; // offset to the description string
// array of FACEDATA strucs, which is followed by a UNICODE description
// string.
// Full size of the FONTFILE structure is equal to
FACEINFO afai[1]; } FONTFILE;
// allowed values for FONTFILE.iType field:
// ORIGINAL FILE IS AN *.FNT FILE which contains a single
// size of the single font
#define TYPE_FNT 1L
// ORIGINAL FILE IS A win 3.0 16 bit *.DLL (*.fon FILE),
// This file is compiled out of many *.fnt files
// that correspond to different sizes of the same face, (e.g. tmsr or helv)
// This is provided to ensure binary compatibility with win 3.0 *.fon files
#define TYPE_DLL16 2L
// ORIGINAL FILE IS A win 3.0 32 bit *.DLL
// This file is compiled out of many *.fnt files using NT tools
// (coff linker and nt resource compiler)
#define TYPE_DLL32 3L
// an fnt file that is embeded in an exe and loaded using FdLoadResData
#define TYPE_EXE 4L
//
// Allowed values for the FONTFILE.iDefaultFace field
//
#define FF_FACE_NORMAL 0L
#define FF_FACE_BOLD 1L
#define FF_FACE_ITALIC 2L
#define FF_FACE_BOLDITALIC 3L
typedef struct _BM_FONTCONTEXT // fc
{ // fields required by handle manager
ULONG ident; // identifier,conveniently chosen as 0X000000FC
// remaining fields
HFF hff; // handle of the font file selected into this context
#ifdef FE_SB // FONTCONTEXT
ULONG ulRotate; // Rotation degree 0 , 900 , 1800 , 2700
#endif // FE_SB
// which resource (face) this context corresponds
FACEINFO *pfai;
// what to do
FLONG flFontType;
// For Win 3.1 compatibility raster fonts can be scaled from 1 to 5
// vertically and 1-256 horizontally. ptlScale contains the x and y
// scaling factors.
POINTL ptlScale;
// the size of the GLYPHDATA structure necessary to store the largest
// glyph bitmap with the header info. This is value is cashed at the
// time the font context is opened and used later in FdQueryGlyphBitmap
ULONG cxMax; // the width in pels of the largest bitmap
ULONG cjGlyphMax; // size of the RASTERGLYPH for the largest glyph
// true if ptlScale != (1,1)
FLONG flStretch;
// buffer of the width of the maximum bm scan, to be used by sretch routine
// We shall only use ajStrecthBuffer if the buffer of length CJ_STRETCH
// that is allocated on the stack is not big enough, which should almost
// never happen
BYTE ajStretchBuffer[1];
}FONTCONTEXT;
// set if ptlScale != (1,1)
#define FC_DO_STRETCH 1
// set if streching WIDE glyph which can not fit in CJ_STRETCH buffer
#define FC_STRETCH_WIDE 2
// exaple: if CJ_STRETCH == 256, that suffices for bitmap of width cx = 2048
// == 8 bits * 256 bytes
#define CJ_STRETCH (sizeof(DWORD) * 64)
//
// The face provided in the *.fnt file may or may not be emboldened
// or italicized, but most often (I'd say in 99.99% of the cases)
// it will be neither emboldened nor italicized.
//
// If the font provided in the *.fnt file is "normal" (neither bold nor italic)
// there will be 4 faces associated with this *.fnt:
//
// default, // neither bold nor italic
// emboldened, // simulated
// italicized // simulated
// emboldened and italicized. // simulated
//
// If the font provided in the *.fnt file is already emboldened
// there will be 2 faces associated with this *.fnt:
//
// default, // already emboldened
// italicized // will appear as emboldened and italicized font
// // where italicization will be simulated
//
// If the font provided in the *.fnt file is already italicized
// there will be 2 faces associated with this *.fnt:
//
// default, // already italicized
// emboldened // will appear as emboldened and italicized font
// // where emboldening will be simulated
//
// If the font provided in the *.fnt file is already italicized and emboldened
// only a single default face will be associated with this *.fnt. No simulated faces
// will be provided
//
// identifiers for FONTFILE and FONTCONTEXT objects
#define ID_FONTFILE 0x000000FF
#define ID_FONTCONTEXT 0x000000FC
// object types for these objects
#define TYPE_FONTCONTEXT (OBJTYPE)0x0040
#define TYPE_FONTFILE (OBJTYPE)0x0041
// basic "methods" that act on the FONTFILE object (in fontfile.c)
#define hffAlloc(cj) ((HFF)EngAllocMem(0, cj, 'dfmB'))
#define PFF(hff) ((PFONTFILE)(hff))
// basic "methods" that act on the FONTCONTEXT object (in fontfile.c)
#define hfcAlloc(cj) ((HFC)EngAllocMem(0, cj, 'dfmB'))
#define PFC(hfc) ((PFONTCONTEXT)(hfc))
#undef VFREEMEM
#define VFREEMEM(pv) EngFreeMem((PVOID)pv)
extern HSEMAPHORE ghsemBMFD; extern CP_GLYPHSET *gpcpGlyphsets;
|