windows-nt/Source/XPSP1/NT/printscan/print/drivers/usermode/inc/psntm.h
2020-09-26 16:20:57 +08:00

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_