Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

339 lines
9.7 KiB

/* FONT DEFINITIONS
Written by Ed Mills, 1984
Edited by McGregor, 1/10/85
*/
/* this flag, defined in kernel.h tells us whether or not we should
** be loading fonts above the line. if it is returned by GetCurPID,
** then we need to use the fonts-above-the-line scheme
*/
#define EMSF_LIB_CODE 0x0004 /* Library code segs above the line */
/* Include file to define types and constants needed by the font manager
and font routines. */
#define SMART_FONT_VERSION 0x0200
#define FONT_MAN_VERSION 0x0100
/* The name of the font resource file. */
#define FONTRESOURCEFILE TEXT("FONTS.FON")
/* The error code we pass to FatalExit when we die. */
#define FONTFATALEXITCODE -2
/* Define the number of rows to add when we grow the physical font table and
physical font instance table. */
#define PFT_GROW_SIZE 2
#define PFI_GROW_SIZE 5
#define RT_GROW_SIZE 1
/* PF_Inst_Tab locking mechanism. Always lock PFI before PFT before RT */
#if 0
//-protect-#define WAIT_FOR_PFI_READ() \
{ \
while(PFI_Write_LockedOut) Yield(); \
PFI_Read_LockedOut++; \
}
#define RELEASE_PFI_READ() ((PFI_Read_LockedOut>0)? --PFI_Read_LockedOut:0)
//-protect-#define WAIT_FOR_PFI_WRITE() \
{ \
while(PFI_Read_LockedOut || PFI_Write_LockedOut) Yield(); \
PFI_Write_LockedOut++; \
}
#define RELEASE_PFI_WRITE() ((PFI_Write_LockedOut>0)? --PFI_Write_LockedOut:0)
/* PFont_Table locking mechanism. */
//-protect-#define WAIT_FOR_PFT_READ() \
{ \
while(PFT_Write_LockedOut) Yield(); \
PFT_Read_LockedOut++; \
}
#define RELEASE_PFT_READ() ((PFT_Read_LockedOut>0)? --PFT_Read_LockedOut:0)
//-protect-#define WAIT_FOR_PFT_WRITE() \
{ \
while(PFT_Read_LockedOut || PFT_Write_LockedOut) Yield(); \
PFT_Write_LockedOut++; \
}
#define RELEASE_PFT_WRITE() ((PFT_Write_LockedOut>0)? --PFT_Write_LockedOut:0)
/* Res_Table locking mechanism. */
//-protect-#define WAIT_FOR_RT_READ() \
{ \
while(RT_Write_LockedOut) Yield(); \
RT_Read_LockedOut++; \
}
#define RELEASE_RT_READ() ((RT_Read_LockedOut>0)? --RT_Read_LockedOut:0)
//-protect-#define WAIT_FOR_RT_WRITE() \
{ \
while(RT_Read_LockedOut || RT_Write_LockedOut) Yield(); \
RT_Write_LockedOut++; \
}
#define RELEASE_RT_WRITE() ((RT_Write_LockedOut>0)? --RT_Write_LockedOut:0)
#else
#define WAIT_FOR_PFI_READ()
#define RELEASE_PFI_READ()
#define WAIT_FOR_PFI_WRITE()
#define RELEASE_PFI_WRITE()
#define WAIT_FOR_PFT_READ()
#define RELEASE_PFT_READ()
#define WAIT_FOR_PFT_WRITE()
#define RELEASE_PFT_WRITE()
#define WAIT_FOR_RT_READ()
#define RELEASE_RT_READ()
#define WAIT_FOR_RT_WRITE()
#define RELEASE_RT_WRITE()
#endif
#ifndef ALLOCATE
extern
#endif
WORD Num_PF_Instances
/* The number of physical font instances in
the instance table. */
#ifdef ALLOCATE
= 0
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD Num_Phys_Fonts
/* The number of physical font entries in
physical font table. */
#ifdef ALLOCATE
= 0
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD Num_Resources
/* The number of Resources loaded in the
resource table. */
#ifdef ALLOCATE
= 0
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD Size_PF_Inst_Tab
/* The current size of physical font instance
table. */
#ifdef ALLOCATE
= PFI_GROW_SIZE
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD Size_PFont_Tab
/* The current size of the physical font table. */
#ifdef ALLOCATE
= PFT_GROW_SIZE
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD Size_Res_Tab
/* The current size of the resource table. */
#ifdef ALLOCATE
= RT_GROW_SIZE
#endif
;
#if 0
#ifndef ALLOCATE
extern
#endif
WORD PFI_Read_LockedOut
/* True if the PF_Inst_Tab is in read use. */
#ifdef ALLOCATE
= 0
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD PFI_Write_LockedOut
/* True if the PF_Inst_Tab is in write use. */
#ifdef ALLOCATE
= 0
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD PFT_Read_LockedOut
/* True if the PFont_Table is in read use. */
#ifdef ALLOCATE
= 0
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD PFT_Write_LockedOut
/* True if the PFont_Table is in write use. */
#ifdef ALLOCATE
= 0
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD RT_Read_LockedOut
/* True if the Res_Table is in read use. */
#ifdef ALLOCATE
= 0
#endif
;
#ifndef ALLOCATE
extern
#endif
WORD RT_Write_LockedOut
/* True if the Res_Table is in write use. */
#ifdef ALLOCATE
= 0
#endif
;
#endif
#ifndef ALLOCATE
extern
#endif
LOCALHANDLE PF_Inst_Tab;
/* Handle to the instance table. */
#ifndef ALLOCATE
extern
#endif
GLOBALHANDLE PFont_Table;
/* Handle to the font table. */
#ifndef ALLOCATE
extern
#endif
LOCALHANDLE Res_Table; /* Handle to the resource table. */
/* The begining of a font file. */
typedef struct {
SHORT Version;
DWORD Size;
CHAR Copyright[60]; //This must be ANSI for compatibility
} Font_Header_Type;
/* PFont_Tab_Type */
/* For an exact description of the fields in this structure see 'Font
Files' in section 6.4 of the Windows Adaptation Guide. */
typedef struct {
HANDLE ResHandle; /* resource module handle */
WORD ResIndex; /* resource file index word */
GLOBALHANDLE PF_Handle; /* font as formatted for STRBLT */
GLOBALHANDLE PID_Handle; /* handle to creator's Process ID */
WORD AboveLineCopy; /* ack */
ATOM FN_Index; /* face name atom */
ATOM DN_Index; /* device name atom */
SHORT Use_Count; /* PFI's using this font */
SHORT Type; /* font type (i.e. raster, vector) */
SHORT Points; /* point size */
SHORT VertRes; /* vertical digitization */
SHORT HorizRes; /* horizontal digitization */
SHORT Ascent; /* baseline offset from top */
SHORT InternalLeading; /* Internal leading included in font */
SHORT ExternalLeading; /* Prefered extra space between lines */
BYTE Italic; /* flag for italic */
BYTE Underline; /* flag for underlining */
BYTE StrikeOut; /* flag for strikeout */
SHORT Weight; /* weight of font */
BYTE CharSet; /* character set */
SHORT PixWidth; /* font bitmap width */
SHORT PixHeight; /* font bitmap height */
BYTE PitchAndFamily; /* fixed or variable pitch and family */
SHORT AvgWidth; /* average character width */
SHORT MaxWidth; /* maximum character width */
BYTE FirstChar; /* first valid character */
BYTE LastChar; /* last valid character */
BYTE DefaultChar; /* displayed for invalid chars */
BYTE BreakChar; /* defines wordbreaks */
} PFont_Tab_Type;
/* PF_Inst_Type */
typedef struct {
DWORD PDeviceObjCount; /* PDevice object count. */
SHORT WndExtX;
SHORT WndExtY;
SHORT VprtExtX;
SHORT VprtExtY;
DWORD LogFontObjCount; /* LogFont object count. */
GLOBALHANDLE ProcID_Handle; /* creator's Process ID */
GLOBALHANDLE PFont_Handle; /* physical font */
LOCALHANDLE FTrans_Handle; /* font xform */
WORD PFont_Index; /* index in PFont_Table */
} PF_Inst_Type;
#define DEVICE_FONT (((WORD)0xFFFF) / sizeof(PFont_Tab_Type)) /* Realized by the device. */
#define MAX_PFT_INDEX (DEVICE_FONT-2)
#define BAD_PFT_INDEX (DEVICE_FONT-1) /* Map_Font failed. */
/* Res_Tab_Type */
typedef struct {
HANDLE ResHandle; /* resource module handle */
SHORT Use_Count; /* PFT's using this resource */
SHORT Add_Count; /* How many times it's been added. */
WORD First; /* PFT index of first and last */
WORD Last; /* entry for fonts from this resource. */
} Res_Tab_Type;
/* font file header (Adaptation Guide section 6.4) */
typedef struct {
WORD dfVersion; /* not in FONTINFO */
DWORD dfSize; /* not in FONTINFO */
BYTE dfCopyright[60]; /* not in FONTINFO */
WORD dfType;
WORD dfPoints;
WORD dfVertRes;
WORD dfHorizRes;
WORD dfAscent;
WORD dfInternalLeading;
WORD dfExternalLeading;
BYTE dfItalic;
BYTE dfUnderline;
BYTE dfStrikeOut;
WORD dfWeight;
BYTE dfCharSet;
WORD dfPixWidth;
WORD dfPixHeight;
BYTE dfPitchAndFamily;
WORD dfAvgWidth;
WORD dfMaxWidth;
BYTE dfFirstChar;
BYTE dfLastChar;
BYTE dfDefaultCHar;
BYTE dfBreakChar;
WORD dfWidthBytes;
DWORD dfDevice; /* See Adaptation Guide 6.3.10 and 6.4 */
DWORD dfFace; /* See Adaptation Guide 6.3.10 and 6.4 */
DWORD dfBitsPointer; /* See Adaptation Guide 6.3.10 and 6.4 */
} FFH;
typedef FFH *PFFH;
typedef FFH FAR *LPFFH;
#define FONT_FIXED sizeof(FFH)