179 lines
5.1 KiB
C
179 lines
5.1 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1996-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ntm.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Header file for NTM data.
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
Windows NT PostScript driver.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
09/16/96 -slam-
|
||
|
Created.
|
||
|
|
||
|
dd-mm-yy -author-
|
||
|
description
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#ifndef _PSNTM_H_
|
||
|
#define _PSNTM_H_
|
||
|
|
||
|
|
||
|
#ifdef KERNEL_MODE
|
||
|
|
||
|
// Declarations used when compiling for kernel mode
|
||
|
|
||
|
#define MULTIBYTETOUNICODE EngMultiByteToUnicodeN
|
||
|
#define UNICODETOMULTIBYTE EngUnicodeToMultiByteN
|
||
|
|
||
|
#else //!KERNEL_MODE
|
||
|
|
||
|
// Declarations used when compiling for user mode
|
||
|
|
||
|
LONG
|
||
|
RtlMultiByteToUnicodeN(
|
||
|
PWSTR UnicodeString,
|
||
|
ULONG MaxBytesInUnicodeString,
|
||
|
PULONG BytesInUnicodeString,
|
||
|
PCHAR MultiByteString,
|
||
|
ULONG BytesInMultiByteString
|
||
|
);
|
||
|
|
||
|
LONG
|
||
|
RtlUnicodeToMultiByteN(
|
||
|
PCHAR MultiByteString,
|
||
|
ULONG MaxBytesInMultiByteString,
|
||
|
PULONG BytesInMultiByteString,
|
||
|
PWSTR UnicodeString,
|
||
|
ULONG BytesInUnicodeString
|
||
|
);
|
||
|
|
||
|
#define MULTIBYTETOUNICODE RtlMultiByteToUnicodeN
|
||
|
#define UNICODETOMULTIBYTE RtlUnicodeToMultiByteN
|
||
|
|
||
|
#endif //!KERNEL_MODE
|
||
|
|
||
|
|
||
|
#define DWORDALIGN(a) ((a + (sizeof(DWORD) - 1)) & ~(sizeof(DWORD) - 1))
|
||
|
|
||
|
|
||
|
typedef struct _EXTTEXTMETRIC
|
||
|
{
|
||
|
SHORT etmSize;
|
||
|
SHORT etmPointSize;
|
||
|
SHORT etmOrientation;
|
||
|
SHORT etmMasterHeight;
|
||
|
SHORT etmMinScale;
|
||
|
SHORT etmMaxScale;
|
||
|
SHORT etmMasterUnits;
|
||
|
SHORT etmCapHeight;
|
||
|
SHORT etmXHeight;
|
||
|
SHORT etmLowerCaseAscent;
|
||
|
SHORT etmLowerCaseDescent;
|
||
|
SHORT etmSlant;
|
||
|
SHORT etmSuperScript;
|
||
|
SHORT etmSubScript;
|
||
|
SHORT etmSuperScriptSize;
|
||
|
SHORT etmSubScriptSize;
|
||
|
SHORT etmUnderlineOffset;
|
||
|
SHORT etmUnderlineWidth;
|
||
|
SHORT etmDoubleUpperUnderlineOffset;
|
||
|
SHORT etmDoubleLowerUnderlineOffset;
|
||
|
SHORT etmDoubleUpperUnderlineWidth;
|
||
|
SHORT etmDoubleLowerUnderlineWidth;
|
||
|
SHORT etmStrikeOutOffset;
|
||
|
SHORT etmStrikeOutWidth;
|
||
|
WORD etmNKernPairs;
|
||
|
WORD etmNKernTracks;
|
||
|
} EXTTEXTMETRIC;
|
||
|
|
||
|
#define CHARSET_UNKNOWN 0
|
||
|
#define CHARSET_STANDARD 1
|
||
|
#define CHARSET_SPECIAL 2
|
||
|
#define CHARSET_EXTENDED 3
|
||
|
|
||
|
typedef struct _NTM {
|
||
|
|
||
|
DWORD dwSize; // size of font metrics data
|
||
|
DWORD dwVersion; // NTFM version number
|
||
|
DWORD dwFlags; // flags
|
||
|
DWORD dwFontNameOffset; // offset to font name
|
||
|
DWORD dwDisplayNameOffset; // offset to display name
|
||
|
DWORD dwFontVersion; // font version number
|
||
|
DWORD dwGlyphSetNameOffset; // offset to glyphset name
|
||
|
DWORD dwGlyphCount; // number of glyphs supported
|
||
|
DWORD dwIFIMetricsOffset; // offset to the first IFIMETRICS structure
|
||
|
DWORD dwIFIMetricsOffset2; // offset to the second IFIMETRICS structure
|
||
|
DWORD dwCharWidthCount; // number of char width entries
|
||
|
DWORD dwCharWidthOffset; // offset to array char width entries
|
||
|
DWORD dwDefaultCharWidth; // default glyph width
|
||
|
DWORD dwKernPairCount; // number of FD_KERNINGPAIRs
|
||
|
DWORD dwKernPairOffset; // offset to array of FD_KERNINGPAIRs
|
||
|
DWORD dwCharDefFlagOffset; // offset to bit tbl of defined chars
|
||
|
DWORD dwCharSet; // font character set
|
||
|
DWORD dwCodePage; // font codepage
|
||
|
DWORD dwReserved[3]; // reserved
|
||
|
EXTTEXTMETRIC etm; // extended text metrics info
|
||
|
|
||
|
} NTM, *PNTM;
|
||
|
|
||
|
#define NTM_VERSION 0x00010000
|
||
|
|
||
|
// Macros to access NT font metrics structure.
|
||
|
|
||
|
#define NTM_GET_SIZE(pNTM) (pNTM->dwSize)
|
||
|
#define NTM_GET_FLAGS(pNTM) (pNTM->dwFlags)
|
||
|
|
||
|
#define NTM_GET_FONT_NAME(pNTM) ((PSTR)MK_PTR(pNTM, dwFontNameOffset))
|
||
|
#define NTM_GET_DISPLAY_NAME(pNTM) ((PWSTR)MK_PTR(pNTM, dwDisplayNameOffset))
|
||
|
#define NTM_GET_GLYPHSET_NAME(pNTM) ((PSTR)MK_PTR(pNTM, dwGlyphSetNameOffset))
|
||
|
|
||
|
#define NTM_GET_GLYPHCOUNT(pNTM) (pNTM->dwGlyphCount)
|
||
|
|
||
|
#define NTM_GET_IFIMETRICS(pNTM) ((PIFIMETRICS)(MK_PTR(pNTM, dwIFIMetricsOffset)))
|
||
|
#define NTM_GET_IFIMETRICS2(pNTM) ((PIFIMETRICS)(MK_PTR(pNTM, dwIFIMetricsOffset2)))
|
||
|
|
||
|
#define NTM_GET_CHARWIDTHCOUNT(pNTM) (pNTM->dwCharWidthCount)
|
||
|
#define NTM_GET_CHARWIDTH(pNTM) ((PWIDTHRUN)(MK_PTR(pNTM, dwCharWidthOffset)))
|
||
|
|
||
|
#define NTM_GET_DEFCHARWIDTH(pNTM) (pNTM->dwDefaultCahrWidth)
|
||
|
|
||
|
#define NTM_GET_KERNPAIRCOUNT(pNTM) (pNTM->dwKernPairCount)
|
||
|
#define NTM_GET_KERNPAIR(pNTM) (MK_PTR(pNTM, dwKernPairOffset))
|
||
|
|
||
|
#define NTM_GET_CHARDEFTBL(pNTM) (MK_PTR(pNTM, dwCharDefFlagOffset))
|
||
|
|
||
|
#define NTM_GET_CHARSET(pNTM) (pNTM->dwCharSet)
|
||
|
#define NTM_GET_CODEPAGE(pNTM) (pNTM->dwCodePage)
|
||
|
|
||
|
#define NTM_GET_ETM(pNTM) (pNTM->etm)
|
||
|
|
||
|
|
||
|
#define CH_DEF(gi) (1 << ((gi) % 8))
|
||
|
#define CH_DEF_INDEX(gi) ((gi) / 8)
|
||
|
#define NTM_CHAR_DEFINED(pNTM, gi) \
|
||
|
(((PBYTE)MK_PTR((pNTM), dwCharDefFlagOffset))[CH_DEF_INDEX(gi)] & CH_DEF(gi))
|
||
|
|
||
|
typedef struct _WIDTHRUN {
|
||
|
|
||
|
WORD wStartGlyph; // glyph handle of the first glyph
|
||
|
WORD wGlyphCount; // number of glyphs covered
|
||
|
DWORD dwCharWidth; // glyph width
|
||
|
|
||
|
} WIDTHRUN, *PWIDTHRUN;
|
||
|
|
||
|
#define WIDTHRUN_COMPLEX 0x80000000
|
||
|
|
||
|
|
||
|
#endif //!_PSNTM_H_
|