|
|
#ifndef __FONT_H__
#define __FONT_H__
#ifdef __cplusplus
extern "C" { #endif
/*****************************************************************************
* * * FONT.H * * * * Copyright (C) Microsoft Corporation 1990 - 1994. * * All Rights reserved. * * * ****************************************************************************** * * * Module Intent * * * * Structures for font handling and export of FONTLYR.C APIs * * * ****************************************************************************** * * * Current Owner: RHobbs * * * *****************************************************************************/
/****************************************************************************
* Constants * *****************************************************************************/
#define coDEFAULT RGB(1, 1, 0)
#define coBLACK RGB( 0, 0, 0)
#define coBLUE RGB( 0, 0, 255)
#define coCYAN RGB( 0, 255, 255)
#define coGREEN RGB( 0, 255, 0)
#define coMAGENTA RGB(255, 0, 255)
#define coRED RGB(255, 0, 0)
#define coYELLOW RGB(255, 255, 0)
#define coWHITE RGB(255, 255, 255)
#define coDARKBLUE RGB( 0, 0, 128)
#define coDARKCYAN RGB( 0, 128, 128)
#define coDARKGREEN RGB( 0, 128, 0)
#define coDARKMAGENTA RGB(128, 0, 128)
#define coDARKRED RGB(128, 0, 0)
#define coDARKYELLOW RGB(128, 128, 0)
#define coDARKGREY RGB(128, 128, 128)
#define coLIGHTGRAY RGB(192, 192, 192)
#define coNIL ((DWORD)0x80000000L)
#define iFntNil ((SHORT)-1) // Protect comparisons in WIN32
#define iFntDefault 0
#define idStyleNil ((SHORT)0)
#define idStyleDefault idStyleNil // The default style is...none
#define idStyleInternalIndexOrigin 1
#define FONT_CACHE_DEFAULT_SIZE 12 // Maximum previously created fonts are remembered.
/****************************************************************************
* TypeDefs * *****************************************************************************/
#pragma warning(disable : 4200) // for zero-sized array
typedef struct kerntable_tag { short cKernPairs; short rgIndexToKernPairs[256]; KERNINGPAIR rgKernPairs[0]; } KERNTABLE, FAR *QKERNTABLE; #pragma warning(default : 4200)
// Critical structure that gets messed up in /Zp8
#pragma pack(1)
#define FONT_FILE_HEADER_SIZE 40
typedef struct { SHORT iFntNameCount; SHORT iFntEntryCount; SHORT iFntNameTabOff; // MUST be the 3rd entry for backward comp.
SHORT iFntEntryTabOff; // CF entry offset
SHORT iStyleEntryCount; SHORT iStyleEntryTabOff; SHORT iCharMapNameCount; // Number of charmap entries
SHORT iCharMapNameOff; // Offset to charmap's filename
SHORT iCharMapPtrOff; // Offset to all charmap pointers
SHORT iCharMapFlag; } FONTTABLE, FAR *QFONTTABLE;
// LOGFONTJR is the LOGFONT structure with no lfFaceName field.
// Under Windows, the first five fields of LOGFONT are int's;
// under Windows NT and the Windows Library for Macintosh, the
// first five fields of the LOGFONT structure are LONG's. This
// structure uses the NT and Mac format.
typedef struct { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; } LOGFONTJR, FAR *QLOGFONTJR;
typedef struct { BYTE red; BYTE green; BYTE blue; } RGBS, FAR *QRGBS;
#ifdef MOS
// We need converters from 16bit logfont to 32bit.
#define QvCopyLogfontFromLogfontjr( lf, lfjr) \
( (lf)->lfHeight = (int)(lfjr)->lfHeight, \ (lf)->lfWidth = (int)(lfjr)->lfWidth, \ (lf)->lfEscapement = (int)(lfjr)->lfEscapement, \ (lf)->lfOrientation = (int)(lfjr)->lfOrientation, \ (lf)->lfWeight = (int)(lfjr)->lfWeight, \ *((DWORD*)&((lf)->lfItalic)) = *((DWORD*)&((lfjr)->lfItalic)), \ *((DWORD*)&((lf)->lfOutPrecision)) = *((DWORD*)&((lfjr)->lfOutPrecision)) \ ) #define QvCopyLogfontjrFromLogfont( lfjr, lf) \
( (lfjr)->lfHeight = (short)(lf)->lfHeight, \ (lfjr)->lfWidth = (short)(lf)->lfWidth, \ (lfjr)->lfEscapement = (short)(lf)->lfEscapement, \ (lfjr)->lfOrientation = (short)(lf)->lfOrientation, \ (lfjr)->lfWeight = (short)(lf)->lfWeight, \ *((DWORD*)&((lfjr)->lfItalic)) = *((DWORD*)&((lf)->lfItalic)), \ *((DWORD*)&((lfjr)->lfOutPrecision)) = *((DWORD*)&((lf)->lfOutPrecision)) \ )
#endif // MOS
// When you change this structure, you MUST make a corresponding change
// to cfDefault in the file, OUTTEXT.C, in the compiler sources. Make sure
// that LOGFONTJR is 4-byte alignment for MIPS
typedef struct { WORD wIdFntName; // Font name id
SHORT iExpansion; // positive for expansion; negative for compression
SHORT idStyleInternal; COLORREF clrFore; COLORREF clrBack; LOGFONTJR lf; BYTE bFlags; char bSubSuper; // positive for superscript; negative for subscript
} CF, FAR *QCF, FAR *LPCF;
// Bit flags for the CF bFlags field.
#define fHIDDEN 0x0001
#define fHOTSPOT 0x0002
#define fSMALLCAPS 0x0004
#define fNOUNDERLINE 0x0008 // Used by char styles to remove underlining
#define fDOTUNDERLINE 0x0010
#define fWORDUNDERLINE 0x0020
#define fDBLUNDERLINE 0x0040
#define fOUTLINE 0x0080
#define STYLESIZE 64
typedef struct // Style Sheet Entry
{ SHORT idStyleInternal; // ID for this style sheet
SHORT idStyleBasedOnInternal; // ID for style sheet this one is based on
CF cf; // character format for this style sheet
BYTE bFlags; // TRUE if additive style; else FALSE
BYTE bUnusedPad; char lfFaceName[LF_FACESIZE+1]; // Font face name for this style
char szStyleName[STYLESIZE+1]; // Name for this style sheet
} STE, NEAR *PSTE, FAR *LPSTE;
// Bit flags for the STE bFlags field.
#define fADDITIVE 0x0001
// Critical structure that gets messed up in /Zp8
#pragma pack()
/*****************************************************************************
* Defines for Backwards Compatibility * *****************************************************************************/
#define OLD_LF_FACESIZE 20
// #define OLD_FONTTABLE_SIZE (sizeof(FONTTABLE) - (sizeof(SHORT) * 2))
/*****************************************************************************
* Prototypes * *****************************************************************************/
BOOL FAR PASCAL fCreateFntCache(QDE); VOID FAR PASCAL DestroyFntCache(QDE); VOID FAR PASCAL ClearFntCache(QDE); BOOL FAR PASCAL fSetFont(QDE, SHORT); BOOL FAR PASCAL GetCFFromHandle (QDE, int, QCF, QCH); VOID FAR PASCAL FontTableInfoFree (HANDLE);
#ifdef __cplusplus
} #endif
#endif // __FONT_H__
|