1/*
2 * prntfont.h
3 *
4 * Declarations for Windows NT printer driver font metrics
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 *   Created by Filip Navara <xnavara@volny.cz>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23#ifndef __PRNTFONT_H
24#define __PRNTFONT_H
25
26#define UNIFM_VERSION_1_0		0x10000
27#define UNI_GLYPHSETDATA_VERSION_1_0	0x10000
28
29#define UFM_SOFT	1
30#define UFM_CART        2
31#define UFM_SCALABLE    4
32
33#define DF_TYPE_HPINTELLIFONT	0
34#define DF_TYPE_TRUETYPE	1
35#define DF_TYPE_PST1		2
36#define DF_TYPE_CAPSL		3
37#define DF_TYPE_OEM1		4
38#define DF_TYPE_OEM2		5
39#define DF_NOITALIC		1
40#define DF_NOUNDER		2
41#define DF_XM_CR		4
42#define DF_NO_BOLD		8
43#define DF_NO_DOUBLE_UNDERLINE	16
44#define DF_NO_STRIKETHRU	32
45#define DF_BKSP_OK		64
46
47#define MTYPE_COMPOSE			1
48#define MTYPE_DIRECT			2
49#define MTYPE_PAIRED			4
50#define MTYPE_FORMAT_MASK		7
51#define MTYPE_SINGLE			8
52#define MTYPE_DOUBLE			16
53#define MTYPE_DOUBLEBYTECHAR_MASK	24
54#define MTYPE_REPLACE			32
55#define MTYPE_ADD			64
56#define MTYPE_DISABLE			128
57#define MTYPE_PREDEFIN_MASK		192
58
59#define CC_NOPRECNV	0x0000FFFF
60#define CC_DEFAULT	0
61#define CC_CP437	-1
62#define CC_CP850	-2
63#define CC_CP863	-3
64#define CC_BIG5		-10
65#define CC_ISC		-11
66#define CC_JIS		-12
67#define CC_JIS_ANK	-13
68#define CC_NS86		-14
69#define CC_TCA		-15
70#define CC_GB2312	-16
71#define CC_SJIS		-17
72#define CC_WANSUNG	-18
73
74#define UFF_FILE_MAGIC		'UFF1'
75#define UFF_VERSION_NUMBER	0x10001
76#define FONT_DIR_SORTED		1
77#define FONT_REC_SIG            'CERF'
78#define WINNT_INSTALLER_SIG     'IFTN'
79
80#define FONT_FL_UFM             0x0001
81#define FONT_FL_IFI             0x0002
82#define FONT_FL_SOFTFONT        0x0004
83#define FONT_FL_PERMANENT_SF    0x0008
84#define FONT_FL_DEVICEFONT      0x0010
85#define FONT_FL_GLYPHSET_GTT    0x0020
86#define FONT_FL_GLYPHSET_RLE    0x0040
87#define FONT_FL_RESERVED        0x8000
88
89#define DATA_UFM_SIG        'MFUD'
90#define DATA_IFI_SIG        'IFID'
91#define DATA_GTT_SIG        'TTGD'
92#define DATA_CTT_SIG        'TTCD'
93#define DATA_VAR_SIG        'RAVD'
94
95#define FG_CANCHANGE	128
96#define WM_FI_FILENAME	900
97
98#define GET_UNIDRVINFO(pUFM) ((PUNIDRVINFO)((ULONG_PTR)(pUFM) + (pUFM)->loUnidrvInfo))
99#define GET_IFIMETRICS(pUFM) ((IFIMETRICS*)((ULONG_PTR)(pUFM) + (pUFM)->loIFIMetrics))
100#define GET_EXTTEXTMETRIC(pUFM) ((EXTTEXTMETRIC*)((ULONG_PTR)(pUFM) + (pUFM)->loExtTextMetric))
101#define GET_WIDTHTABLE(pUFM) ((PWIDTHTABLE)((ULONG_PTR)(pUFM) + (pUFM)->loWidthTable))
102#define GET_KERNDATA(pUFM) ((PKERNDATA)((ULONG_PTR)(pUFM) + (pUFM)->loKernPair))
103#define GET_SELECT_CMD(pUni) ((PCHAR)(pUni) + (pUni)->SelectFont.loOffset)
104#define GET_UNSELECT_CMD(pUni) ((PCHAR)(pUni) + (pUni)->UnSelectFont.loOffset)
105#define GET_GLYPHRUN(pGTT) ((PGLYPHRUN)((ULONG_PTR)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loRunOffset))
106#define GET_CODEPAGEINFO(pGTT) ((PUNI_CODEPAGEINFO)((ULONG_PTR)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loCodePageOffset))
107#define GET_MAPTABLE(pGTT) ((PMAPTABLE)((ULONG_PTR)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loMapTableOffset))
108
109typedef struct _UNIFM_HDR
110{
111  DWORD  dwSize;
112  DWORD  dwVersion;
113  ULONG  ulDefaultCodepage;
114  LONG  lGlyphSetDataRCID;
115  DWORD  loUnidrvInfo;
116  DWORD  loIFIMetrics;
117  DWORD  loExtTextMetric;
118  DWORD  loWidthTable;
119  DWORD  loKernPair;
120  DWORD  dwReserved[2];
121} UNIFM_HDR, *PUNIFM_HDR;
122
123typedef struct _INVOC
124{
125  DWORD  dwCount;
126  DWORD  loOffset;
127} INVOC, *PINVOC;
128
129typedef struct _UNIDRVINFO
130{
131  DWORD  dwSize;
132  DWORD  flGenFlags;
133  WORD  wType;
134  WORD  fCaps;
135  WORD  wXRes;
136  WORD  wYRes;
137  SHORT  sYAdjust;
138  SHORT  sYMoved;
139  WORD  wPrivateData;
140  SHORT  sShift;
141  INVOC  SelectFont;
142  INVOC  UnSelectFont;
143  WORD  wReserved[4];
144} UNIDRVINFO, *PUNIDRVINFO;
145
146typedef struct _EXTTEXTMETRIC
147{
148  SHORT  emSize;
149  SHORT  emPointSize;
150  SHORT  emOrientation;
151  SHORT  emMasterHeight;
152  SHORT  emMinScale;
153  SHORT  emMaxScale;
154  SHORT  emMasterUnits;
155  SHORT  emCapHeight;
156  SHORT  emXHeight;
157  SHORT  emLowerCaseAscent;
158  SHORT  emLowerCaseDescent;
159  SHORT  emSlant;
160  SHORT  emSuperScript;
161  SHORT  emSubScript;
162  SHORT  emSuperScriptSize;
163  SHORT  emSubScriptSize;
164  SHORT  emUnderlineOffset;
165  SHORT  emUnderlineWidth;
166  SHORT  emDoubleUpperUnderlineOffset;
167  SHORT  emDoubleLowerUnderlineOffset;
168  SHORT  emDoubleUpperUnderlineWidth;
169  SHORT  emDoubleLowerUnderlineWidth;
170  SHORT  emStrikeOutOffset;
171  SHORT  emStrikeOutWidth;
172  WORD  emKernPairs;
173  WORD  emKernTracks;
174} EXTTEXTMETRIC, *PEXTTEXTMETRIC;
175
176typedef struct _WIDTHRUN
177{
178  WORD  wStartGlyph;
179  WORD  wGlyphCount;
180  DWORD  loCharWidthOffset;
181} WIDTHRUN, *PWIDTHRUN;
182
183typedef struct _WIDTHTABLE
184{
185  DWORD  dwSize;
186  DWORD  dwRunNum;
187  WIDTHRUN  WidthRun[1];
188} WIDTHTABLE, *PWIDTHTABLE;
189
190typedef struct _KERNDATA
191{
192  DWORD  dwSize;
193  DWORD  dwKernPairNum;
194  FD_KERNINGPAIR  KernPair[1];
195} KERNDATA, *PKERNDATA;
196
197typedef struct _UNI_GLYPHSETDATA
198{
199  DWORD  dwSize;
200  DWORD  dwVersion;
201  DWORD  dwFlags;
202  LONG  lPredefinedID;
203  DWORD  dwGlyphCount;
204  DWORD  dwRunCount;
205  DWORD  loRunOffset;
206  DWORD  dwCodePageCount;
207  DWORD  loCodePageOffset;
208  DWORD  loMapTableOffset;
209  DWORD  dwReserved[2];
210} UNI_GLYPHSETDATA, *PUNI_GLYPHSETDATA;
211
212typedef struct _UNI_CODEPAGEINFO
213{
214  DWORD  dwCodePage;
215  INVOC  SelectSymbolSet;
216  INVOC  UnSelectSymbolSet;
217} UNI_CODEPAGEINFO, *PUNI_CODEPAGEINFO;
218
219typedef struct _GLYPHRUN
220{
221  WCHAR  wcLow;
222  WORD  wGlyphCount;
223} GLYPHRUN, *PGLYPHRUN;
224
225typedef struct _TRANSDATA
226{
227  BYTE  ubCodePageID;
228  BYTE  ubType;
229  union
230  {
231    SHORT  sCode;
232    BYTE  ubCode;
233    BYTE  ubPairs[2];
234  } uCode;
235} TRANSDATA, *PTRANSDATA;
236
237typedef struct _MAPTABLE {
238  DWORD  dwSize;
239  DWORD  dwGlyphNum;
240  TRANSDATA  Trans[1];
241} MAPTABLE, *PMAPTABLE;
242
243typedef struct _UFF_FILEHEADER {
244  DWORD  dwSignature;
245  DWORD  dwVersion;
246  DWORD  dwSize;
247  DWORD  nFonts;
248  DWORD  nGlyphSets;
249  DWORD  nVarData;
250  DWORD  offFontDir;
251  DWORD  dwFlags;
252  DWORD  dwReserved[4];
253} UFF_FILEHEADER, *PUFF_FILEHEADER;
254
255typedef struct _UFF_FONTDIRECTORY {
256  DWORD  dwSignature;
257  WORD  wSize;
258  WORD  wFontID;
259  SHORT  sGlyphID;
260  WORD  wFlags;
261  DWORD  dwInstallerSig;
262  DWORD  offFontName;
263  DWORD  offCartridgeName;
264  DWORD  offFontData;
265  DWORD  offGlyphData;
266  DWORD  offVarData;
267} UFF_FONTDIRECTORY, *PUFF_FONTDIRECTORY;
268
269typedef struct _DATA_HEADER {
270  DWORD  dwSignature;
271  WORD  wSize;
272  WORD  wDataID;
273  DWORD  dwDataSize;
274  DWORD  dwReserved;
275} DATA_HEADER, *PDATA_HEADER;
276
277typedef struct _OEMFONTINSTPARAM {
278  DWORD  cbSize;
279  HANDLE  hPrinter;
280  HANDLE  hModule;
281  HANDLE  hHeap;
282  DWORD  dwFlags;
283  PWSTR  pFontInstallerName;
284} OEMFONTINSTPARAM, *POEMFONTINSTPARAM;
285
286#endif /* __PRNTFONT_H */
287