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 
109 typedef 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 
123 typedef struct _INVOC
124 {
125   DWORD  dwCount;
126   DWORD  loOffset;
127 } INVOC, *PINVOC;
128 
129 typedef 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 
146 typedef 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 
176 typedef struct _WIDTHRUN
177 {
178   WORD  wStartGlyph;
179   WORD  wGlyphCount;
180   DWORD  loCharWidthOffset;
181 } WIDTHRUN, *PWIDTHRUN;
182 
183 typedef struct _WIDTHTABLE
184 {
185   DWORD  dwSize;
186   DWORD  dwRunNum;
187   WIDTHRUN  WidthRun[1];
188 } WIDTHTABLE, *PWIDTHTABLE;
189 
190 typedef struct _KERNDATA
191 {
192   DWORD  dwSize;
193   DWORD  dwKernPairNum;
194   FD_KERNINGPAIR  KernPair[1];
195 } KERNDATA, *PKERNDATA;
196 
197 typedef 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 
212 typedef struct _UNI_CODEPAGEINFO
213 {
214   DWORD  dwCodePage;
215   INVOC  SelectSymbolSet;
216   INVOC  UnSelectSymbolSet;
217 } UNI_CODEPAGEINFO, *PUNI_CODEPAGEINFO;
218 
219 typedef struct _GLYPHRUN
220 {
221   WCHAR  wcLow;
222   WORD  wGlyphCount;
223 } GLYPHRUN, *PGLYPHRUN;
224 
225 typedef 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 
237 typedef struct _MAPTABLE {
238   DWORD  dwSize;
239   DWORD  dwGlyphNum;
240   TRANSDATA  Trans[1];
241 } MAPTABLE, *PMAPTABLE;
242 
243 typedef 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 
255 typedef 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 
269 typedef struct _DATA_HEADER {
270   DWORD  dwSignature;
271   WORD  wSize;
272   WORD  wDataID;
273   DWORD  dwDataSize;
274   DWORD  dwReserved;
275 } DATA_HEADER, *PDATA_HEADER;
276 
277 typedef 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