Leaked source code of windows server 2003
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.
 
 
 
 
 
 

174 lines
5.7 KiB

/*++
Copyright (c) 1996 - 1999 Microsoft Corporation
Module Name:
download.h
Abstract:
Information required to download fonts to a printer: either an
existing softfont, or cacheing of GDI fonts (esp. TT).
Environment:
Windows NT Unidrv driver
Revision History:
12/23/96 -ganeshp-
Created
dd-mm-yy -author-
description
--*/
#ifndef _DOWNLOAD_H
#define _DOWNLOAD_H
//
// GLYPHLIST structure. This structure hold the start and end glyph ids.
//
#define INVALIDGLYPHID 0xffffffff
#define HASHTABLESIZE_1 257 //Used if NumGlyphs is < 512
#define HASHTABLESIZE_2 521 //Used if NmGlyhs is >= 512 && < 1024
#define HASHTABLESIZE_3 1031 //Used if NmGlyhs is >= 1024
//
// Hash Table entry for glyphs. The entry has basically TT Glyph Handle and
// Downloaded FontIds and DL glyph ID. The hash table is an array of these
// entries. In the case of a Hit a new entry will be added as linked list
// off that entry.
//
typedef struct _DLGLYPH //Size is 16 Bytes.
{
HGLYPH hTTGlyph; // GDI glyph handle.
WORD wDLFontId; // DL Font index. Bounded Fonts.
WORD wDLGlyphID; // Download Glyph ID of unbounded fonts.
WORD wWidth; // Width of the Glyph.
WCHAR wchUnicode; // Reserved for padding.
struct _DLGLYPH *pNext; // Next Glyph
}DLGLYPH, *PDLGLYPH;
// The Glyphs are stored in Chunks, to optimize on allocation and
// deallocations.The first chunk is the base chunk and used as Hash table.
// The subsequent chunks are allocated when a collision occurs in the hash
// table. All the non base chunks has half the number of Glyphs as that of
// base chunk (cEntries is intialized to cHashTableEntries/2). The base hash
// table is dl_map.GlyphTab.pGlyph. we should free this pointer for base chunk.
// Base hash table is allocated in BInitDLMAP() function, which initialize the
// DL_MAP.
typedef struct _GLYPHTAB
{
struct _GLYPHTAB *pGLTNext; // Next Chunk of Glyphs
PDLGLYPH pGlyph; // Pointer to Next Glyph.
INT cEntries; // Number of Entries Remaining.
// Not Used in Base Chunk.
}GLYPHTAB;
//
// The DL_MAP structure provides a mapping between the iUniq value in
// FONTOBJs and our internal information. Basically, we need to decide
// whether we have seen this font before, and if so, whether it was
// downloaded or left as a GDI font.
//
//
// NOTE: The cGlyphs field has another use. It is used to mark a bad DL_MAP.
// If it is -1, then this DL_MAP shouldn't be used. All other fields will
// be set to 0.
//
typedef struct _DL_MAP
{
ULONG iUniq; // FONTOBJ.iUniq
ULONG_PTR iTTUniq; // FONTOBJ.iTTUniq
SHORT cGlyphs; // Num of DL glyphs with current softfont
WORD cTotalGlyphs; // Total Number of glyphs with this TT font
WORD wMaxGlyphSize; // NumBytes in the bitmap for largest Glyph
WORD cHashTableEntries; // Number of entries in the HASH table.
WORD wFirstDLGId; // Start DL Glyph ID.
WORD wLastDLGId; // End ID of the List. -1 if no END id
WORD wNextDLGId; // Next DL Glyph ID to be downloaded.
WORD wBaseDLFontid; // Downloaded Base font Id.
WORD wCurrFontId; // Current Font ID to be used.
WORD wFlags; // Different Flags.
FONTMAP *pfm; // The real down load info
GLYPHTAB GlyphTab; // Glyph Hash Table.It's Linked
// list of Glyph Chunks.
} DL_MAP;
//
// DL_MAP flags.
//
#define DLM_BOUNDED 0x0001 // Soft font is bounded.
#define DLM_UNBOUNDED 0x0002 // Soft font is unbounded.
//
// The above is formed into an array of DL_MAP_CHUNK entries, and this
// group of storage is linked into a linked list of such entries. Typically,
// there will be only one, however we can cope with more.
//
#define DL_MAP_CHUNK 8
typedef struct _DML
{
struct _DML *pDMLNext; // An array of map information
INT cEntries; // Next in our chain, 0 in last
DL_MAP adlm[ DL_MAP_CHUNK ]; // Number of valid entries.
} DL_MAP_LIST;
/*
* We need to map glyph handles to byte to send to printer. We are given
* the glyph handle, but need to send the byte instead.
*/
typedef struct
{
HGLYPH hg; /* The glyph to print */
WCHAR wchUnicode;
int iByte; /* What to send to the printer */
} HGLYPH_MAP;
/*
* Random constants.
*/
#define PCL_FONT_OH 2048 /* Overhead bytes per download font */
#define PCL_PITCH_ADJ 2 /* Adjustment factor for proportional */
/*
* macros
*/
#define SWAPW(a) (USHORT)(((BYTE)((a) >> 8)) | ((BYTE)(a) << 8))
#define SWAPWINC(a) SWAPW(*(a)); a++
#define FONTDOWNLOADED(pdm) ( ((pdm)->pfm) && \
((pdm)->pfm->flFlags & \
(FM_SENT | FM_GEN_SFONT)) )
#define GLYPHDOWNLOADED(pdlg) ( ((pdlg)->hTTGlyph != HGLYPH_INVALID) )
//
// Download Mode to identity base softfont or secondary soft font downloading.
//
#define DL_BASE_SOFT_FONT 1
#define DL_SECONDARY_SOFT_FONT 2
#define MIN_GLYPHS_PER_SOFTFONT 64 // Minimum glyphs per softfont
#endif _DOWNLOAD_H //!_DOWNLOAD_H