1 /*
2  * winddi.h
3  *
4  * GDI device driver interface
5  *
6  * This file is part of the w32api package.
7  *
8  * Contributors:
9  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
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 _WINDDI_
24 #define _WINDDI_
25 
26 #ifdef __VIDEO_H__
27 #error video.h cannot be included with winddi.h
28 #else
29 
30 #include <ddrawint.h>
31 #include <d3dnthal.h>
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 #ifndef DECLSPEC_IMPORT
38 #ifndef __WIDL__
39 #define DECLSPEC_IMPORT __declspec(dllimport)
40 #else
41 #define DECLSPEC_IMPORT
42 #endif
43 #endif
44 
45 #ifndef WIN32KAPI
46 #define WIN32KAPI DECLSPEC_ADDRSAFE
47 #endif
48 
49 #define DDI_DRIVER_VERSION_NT4            0x00020000
50 #define DDI_DRIVER_VERSION_SP3            0x00020003
51 #define DDI_DRIVER_VERSION_NT5            0x00030000
52 #define DDI_DRIVER_VERSION_NT5_01         0x00030100
53 
54 #define GDI_DRIVER_VERSION                0x4000
55 
56 #ifdef _X86_
57 
58 typedef DWORD FLOATL;
59 
60 #else /* !_X86_ */
61 
62 typedef FLOAT FLOATL;
63 
64 #endif
65 
66 typedef SHORT FWORD;
67 typedef LONG LDECI4;
68 typedef ULONG IDENT;
69 
70 typedef ULONG_PTR HFF;
71 typedef ULONG_PTR HFC;
72 
73 typedef LONG PTRDIFF;
74 typedef PTRDIFF *PPTRDIFF;
75 typedef LONG FIX;
76 typedef FIX *PFIX;
77 typedef ULONG ROP4;
78 typedef ULONG MIX;
79 typedef ULONG HGLYPH;
80 typedef HGLYPH *PHGLYPH;
81 
82 typedef LONG_PTR (APIENTRY *PFN)();
83 
84 DECLARE_HANDLE(HBM);
85 DECLARE_HANDLE(HDEV);
86 DECLARE_HANDLE(HSURF);
87 DECLARE_HANDLE(DHSURF);
88 DECLARE_HANDLE(DHPDEV);
89 DECLARE_HANDLE(HDRVOBJ);
90 
91 #ifndef _NTDDVDEO_
92 typedef struct _ENG_EVENT *PEVENT;
93 #endif
94 
95 #define OPENGL_CMD                        4352
96 #define OPENGL_GETINFO                    4353
97 #define WNDOBJ_SETUP                      4354
98 
99 #define FD_ERROR                          0xFFFFFFFF
100 #define DDI_ERROR                         0xFFFFFFFF
101 
102 #define HFF_INVALID                       ((HFF) 0)
103 #define HFC_INVALID                       ((HFC) 0)
104 #define HGLYPH_INVALID                    ((HGLYPH) -1)
105 
106 #define FP_ALTERNATEMODE                  1
107 #define FP_WINDINGMODE                    2
108 
109 #define DN_ACCELERATION_LEVEL             1
110 #define DN_DEVICE_ORIGIN                  2
111 #define DN_SLEEP_MODE                     3
112 #define DN_DRAWING_BEGIN                  4
113 
114 #define DCR_SOLID                         0
115 #define DCR_DRIVER                        1
116 #define DCR_HALFTONE                      2
117 
118 #define GX_IDENTITY                       0
119 #define GX_OFFSET                         1
120 #define GX_SCALE                          2
121 #define GX_GENERAL                        3
122 
123 #define LTOFX(x)        ((x) << 4)
124 #define FXTOL(x)        ((x) >> 4)
125 #define FXTOLFLOOR(x)   ((x) >> 4)
126 #define FXTOLCEILING(x) ((x + 0x0F) >> 4)
127 #define FXTOLROUND(x)   ((((x) >> 3) + 1) >> 1)
128 
129 typedef struct _POINTE {
130 	FLOATL  x;
131 	FLOATL  y;
132 } POINTE, *PPOINTE;
133 
134 typedef union _FLOAT_LONG {
135   FLOATL  e;
136   LONG  l;
137 } FLOAT_LONG, *PFLOAT_LONG;
138 
139 typedef struct _POINTFIX {
140   FIX  x;
141   FIX  y;
142 } POINTFIX, *PPOINTFIX;
143 
144 typedef struct _RECTFX {
145   FIX  xLeft;
146   FIX  yTop;
147   FIX  xRight;
148   FIX  yBottom;
149 } RECTFX, *PRECTFX;
150 
151 typedef struct _POINTQF {
152   LARGE_INTEGER  x;
153   LARGE_INTEGER  y;
154 } POINTQF, *PPOINTQF;
155 
156 
157 typedef struct _BLENDOBJ {
158   BLENDFUNCTION  BlendFunction;
159 } BLENDOBJ,*PBLENDOBJ;
160 
161 /* BRUSHOBJ.flColorType */
162 #define BR_DEVICE_ICM    0x01
163 #define BR_HOST_ICM      0x02
164 #define BR_CMYKCOLOR     0x04
165 #define BR_ORIGCOLOR     0x08
166 
167 typedef struct _BRUSHOBJ {
168   ULONG  iSolidColor;
169   PVOID  pvRbrush;
170   FLONG  flColorType;
171 } BRUSHOBJ;
172 
173 typedef struct _CIECHROMA {
174   LDECI4  x;
175   LDECI4  y;
176   LDECI4  Y;
177 } CIECHROMA;
178 
179 typedef struct _RUN {
180   LONG  iStart;
181   LONG  iStop;
182 } RUN, *PRUN;
183 
184 typedef struct _CLIPLINE {
185   POINTFIX  ptfxA;
186   POINTFIX  ptfxB;
187   LONG  lStyleState;
188   ULONG  c;
189   RUN  arun[1];
190 } CLIPLINE, *PCLIPLINE;
191 
192 /* CLIPOBJ.iDComplexity constants */
193 #define DC_TRIVIAL                        0
194 #define DC_RECT                           1
195 #define DC_COMPLEX                        3
196 
197 /* CLIPOBJ.iFComplexity constants */
198 #define FC_RECT                           1
199 #define FC_RECT4                          2
200 #define FC_COMPLEX                        3
201 
202 /* CLIPOBJ.iMode constants */
203 #define TC_RECTANGLES                     0
204 #define TC_PATHOBJ                        2
205 
206 /* CLIPOBJ.fjOptions constants */
207 #define OC_BANK_CLIP                      1
208 
209 typedef struct _CLIPOBJ {
210   ULONG  iUniq;
211   RECTL  rclBounds;
212   BYTE  iDComplexity;
213   BYTE  iFComplexity;
214   BYTE  iMode;
215   BYTE  fjOptions;
216 } CLIPOBJ;
217 
218 typedef struct _COLORINFO {
219   CIECHROMA  Red;
220   CIECHROMA  Green;
221   CIECHROMA  Blue;
222   CIECHROMA  Cyan;
223   CIECHROMA  Magenta;
224   CIECHROMA  Yellow;
225   CIECHROMA  AlignmentWhite;
226   LDECI4  RedGamma;
227   LDECI4  GreenGamma;
228   LDECI4  BlueGamma;
229   LDECI4  MagentaInCyanDye;
230   LDECI4  YellowInCyanDye;
231   LDECI4  CyanInMagentaDye;
232   LDECI4  YellowInMagentaDye;
233   LDECI4  CyanInYellowDye;
234   LDECI4  MagentaInYellowDye;
235 } COLORINFO, *PCOLORINFO;
236 
237 /* DEVHTADJDATA.DeviceFlags constants */
238 #define DEVHTADJF_COLOR_DEVICE            0x00000001
239 #define DEVHTADJF_ADDITIVE_DEVICE         0x00000002
240 
241 typedef struct _DEVHTINFO {
242   DWORD  HTFlags;
243   DWORD  HTPatternSize;
244   DWORD  DevPelsDPI;
245   COLORINFO  ColorInfo;
246 } DEVHTINFO, *PDEVHTINFO;
247 
248 typedef struct _DEVHTADJDATA {
249   DWORD   DeviceFlags;
250   DWORD   DeviceXDPI;
251   DWORD   DeviceYDPI;
252   PDEVHTINFO  pDefHTInfo;
253   PDEVHTINFO  pAdjHTInfo;
254 } DEVHTADJDATA, *PDEVHTADJDATA;
255 
256 /* DEVINFO.flGraphicsCaps flags */
257 #define GCAPS_BEZIERS           0x00000001
258 #define GCAPS_GEOMETRICWIDE     0x00000002
259 #define GCAPS_ALTERNATEFILL     0x00000004
260 #define GCAPS_WINDINGFILL       0x00000008
261 #define GCAPS_HALFTONE          0x00000010
262 #define GCAPS_COLOR_DITHER      0x00000020
263 #define GCAPS_HORIZSTRIKE       0x00000040
264 #define GCAPS_VERTSTRIKE        0x00000080
265 #define GCAPS_OPAQUERECT        0x00000100
266 #define GCAPS_VECTORFONT        0x00000200
267 #define GCAPS_MONO_DITHER       0x00000400
268 #define GCAPS_ASYNCCHANGE       0x00000800
269 #define GCAPS_ASYNCMOVE         0x00001000
270 #define GCAPS_DONTJOURNAL       0x00002000
271 #define GCAPS_DIRECTDRAW        0x00004000
272 #define GCAPS_ARBRUSHOPAQUE     0x00008000
273 #define GCAPS_PANNING           0x00010000
274 #define GCAPS_HIGHRESTEXT       0x00040000
275 #define GCAPS_PALMANAGED        0x00080000
276 #define GCAPS_DITHERONREALIZE   0x00200000
277 #define GCAPS_NO64BITMEMACCESS  0x00400000
278 #define GCAPS_FORCEDITHER       0x00800000
279 #define GCAPS_GRAY16            0x01000000
280 #define GCAPS_ICM               0x02000000
281 #define GCAPS_CMYKCOLOR         0x04000000
282 #define GCAPS_LAYERED           0x08000000
283 #define GCAPS_ARBRUSHTEXT       0x10000000
284 #define GCAPS_SCREENPRECISION   0x20000000
285 #define GCAPS_FONT_RASTERIZER   0x40000000
286 #define GCAPS_NUP               0x80000000
287 
288 /* DEVINFO.iDitherFormat constants */
289 #define BMF_1BPP       __MSABI_LONG(1)
290 #define BMF_4BPP       __MSABI_LONG(2)
291 #define BMF_8BPP       __MSABI_LONG(3)
292 #define BMF_16BPP      __MSABI_LONG(4)
293 #define BMF_24BPP      __MSABI_LONG(5)
294 #define BMF_32BPP      __MSABI_LONG(6)
295 #define BMF_4RLE       __MSABI_LONG(7)
296 #define BMF_8RLE       __MSABI_LONG(8)
297 #define BMF_JPEG       __MSABI_LONG(9)
298 #define BMF_PNG       __MSABI_LONG(10)
299 
300 /* DEVINFO.flGraphicsCaps2 flags */
301 #define GCAPS2_JPEGSRC          0x00000001
302 #define GCAPS2_xxxx             0x00000002
303 #define GCAPS2_PNGSRC           0x00000008
304 #define GCAPS2_CHANGEGAMMARAMP  0x00000010
305 #define GCAPS2_ALPHACURSOR      0x00000020
306 #define GCAPS2_SYNCFLUSH        0x00000040
307 #define GCAPS2_SYNCTIMER        0x00000080
308 #define GCAPS2_ICD_MULTIMON     0x00000100
309 #define GCAPS2_MOUSETRAILS      0x00000200
310 #define GCAPS2_RESERVED1        0x00000400
311 
312 typedef struct _DEVINFO {
313   FLONG  flGraphicsCaps;
314   LOGFONTW  lfDefaultFont;
315   LOGFONTW  lfAnsiVarFont;
316   LOGFONTW  lfAnsiFixFont;
317   ULONG  cFonts;
318   ULONG  iDitherFormat;
319   USHORT  cxDither;
320   USHORT  cyDither;
321   HPALETTE  hpalDefault;
322   FLONG  flGraphicsCaps2;
323 } DEVINFO, *PDEVINFO;
324 
325 struct _DRIVEROBJ;
326 
327 typedef WINBOOL
328 (APIENTRY CALLBACK *FREEOBJPROC)(
329   struct _DRIVEROBJ  *pDriverObj);
330 
331 typedef struct _DRIVEROBJ {
332   PVOID  pvObj;
333   FREEOBJPROC  pFreeProc;
334   HDEV  hdev;
335   DHPDEV  dhpdev;
336 } DRIVEROBJ;
337 
338 /* DRVFN.iFunc constants */
339 #define INDEX_DrvEnablePDEV               __MSABI_LONG(0)
340 #define INDEX_DrvCompletePDEV             __MSABI_LONG(1)
341 #define INDEX_DrvDisablePDEV              __MSABI_LONG(2)
342 #define INDEX_DrvEnableSurface            __MSABI_LONG(3)
343 #define INDEX_DrvDisableSurface           __MSABI_LONG(4)
344 #define INDEX_DrvAssertMode               __MSABI_LONG(5)
345 #define INDEX_DrvOffset                   __MSABI_LONG(6)
346 #define INDEX_DrvResetPDEV                __MSABI_LONG(7)
347 #define INDEX_DrvDisableDriver            __MSABI_LONG(8)
348 #define INDEX_DrvUnknown1                 __MSABI_LONG(9)
349 #define INDEX_DrvCreateDeviceBitmap       __MSABI_LONG(10)
350 #define INDEX_DrvDeleteDeviceBitmap       __MSABI_LONG(11)
351 #define INDEX_DrvRealizeBrush             __MSABI_LONG(12)
352 #define INDEX_DrvDitherColor              __MSABI_LONG(13)
353 #define INDEX_DrvStrokePath               __MSABI_LONG(14)
354 #define INDEX_DrvFillPath                 __MSABI_LONG(15)
355 #define INDEX_DrvStrokeAndFillPath        __MSABI_LONG(16)
356 #define INDEX_DrvPaint                    __MSABI_LONG(17)
357 #define INDEX_DrvBitBlt                   __MSABI_LONG(18)
358 #define INDEX_DrvCopyBits                 __MSABI_LONG(19)
359 #define INDEX_DrvStretchBlt               __MSABI_LONG(20)
360 #define INDEX_DrvUnknown2                 __MSABI_LONG(21)
361 #define INDEX_DrvSetPalette               __MSABI_LONG(22)
362 #define INDEX_DrvTextOut                  __MSABI_LONG(23)
363 #define INDEX_DrvEscape                   __MSABI_LONG(24)
364 #define INDEX_DrvDrawEscape               __MSABI_LONG(25)
365 #define INDEX_DrvQueryFont                __MSABI_LONG(26)
366 #define INDEX_DrvQueryFontTree            __MSABI_LONG(27)
367 #define INDEX_DrvQueryFontData            __MSABI_LONG(28)
368 #define INDEX_DrvSetPointerShape          __MSABI_LONG(29)
369 #define INDEX_DrvMovePointer              __MSABI_LONG(30)
370 #define INDEX_DrvLineTo                   __MSABI_LONG(31)
371 #define INDEX_DrvSendPage                 __MSABI_LONG(32)
372 #define INDEX_DrvStartPage                __MSABI_LONG(33)
373 #define INDEX_DrvEndDoc                   __MSABI_LONG(34)
374 #define INDEX_DrvStartDoc                 __MSABI_LONG(35)
375 #define INDEX_DrvUnknown3                 __MSABI_LONG(36)
376 #define INDEX_DrvGetGlyphMode             __MSABI_LONG(37)
377 #define INDEX_DrvSynchronize              __MSABI_LONG(38)
378 #define INDEX_DrvUnknown4                 __MSABI_LONG(39)
379 #define INDEX_DrvSaveScreenBits           __MSABI_LONG(40)
380 #define INDEX_DrvGetModes                 __MSABI_LONG(41)
381 #define INDEX_DrvFree                     __MSABI_LONG(42)
382 #define INDEX_DrvDestroyFont              __MSABI_LONG(43)
383 #define INDEX_DrvQueryFontCaps            __MSABI_LONG(44)
384 #define INDEX_DrvLoadFontFile             __MSABI_LONG(45)
385 #define INDEX_DrvUnloadFontFile           __MSABI_LONG(46)
386 #define INDEX_DrvFontManagement           __MSABI_LONG(47)
387 #define INDEX_DrvQueryTrueTypeTable       __MSABI_LONG(48)
388 #define INDEX_DrvQueryTrueTypeOutline     __MSABI_LONG(49)
389 #define INDEX_DrvGetTrueTypeFile          __MSABI_LONG(50)
390 #define INDEX_DrvQueryFontFile            __MSABI_LONG(51)
391 #define INDEX_DrvMovePanning              __MSABI_LONG(52)
392 #define INDEX_DrvQueryAdvanceWidths       __MSABI_LONG(53)
393 #define INDEX_DrvSetPixelFormat           __MSABI_LONG(54)
394 #define INDEX_DrvDescribePixelFormat      __MSABI_LONG(55)
395 #define INDEX_DrvSwapBuffers              __MSABI_LONG(56)
396 #define INDEX_DrvStartBanding             __MSABI_LONG(57)
397 #define INDEX_DrvNextBand                 __MSABI_LONG(58)
398 #define INDEX_DrvGetDirectDrawInfo        __MSABI_LONG(59)
399 #define INDEX_DrvEnableDirectDraw         __MSABI_LONG(60)
400 #define INDEX_DrvDisableDirectDraw        __MSABI_LONG(61)
401 #define INDEX_DrvQuerySpoolType           __MSABI_LONG(62)
402 #define INDEX_DrvUnknown5                 __MSABI_LONG(63)
403 #define INDEX_DrvIcmCreateColorTransform  __MSABI_LONG(64)
404 #define INDEX_DrvIcmDeleteColorTransform  __MSABI_LONG(65)
405 #define INDEX_DrvIcmCheckBitmapBits       __MSABI_LONG(66)
406 #define INDEX_DrvIcmSetDeviceGammaRamp    __MSABI_LONG(67)
407 #define INDEX_DrvGradientFill             __MSABI_LONG(68)
408 #define INDEX_DrvStretchBltROP            __MSABI_LONG(69)
409 #define INDEX_DrvPlgBlt                   __MSABI_LONG(70)
410 #define INDEX_DrvAlphaBlend               __MSABI_LONG(71)
411 #define INDEX_DrvSynthesizeFont           __MSABI_LONG(72)
412 #define INDEX_DrvGetSynthesizedFontFiles  __MSABI_LONG(73)
413 #define INDEX_DrvTransparentBlt           __MSABI_LONG(74)
414 #define INDEX_DrvQueryPerBandInfo         __MSABI_LONG(75)
415 #define INDEX_DrvQueryDeviceSupport       __MSABI_LONG(76)
416 #define INDEX_DrvReserved1                __MSABI_LONG(77)
417 #define INDEX_DrvReserved2                __MSABI_LONG(78)
418 #define INDEX_DrvReserved3                __MSABI_LONG(79)
419 #define INDEX_DrvReserved4                __MSABI_LONG(80)
420 #define INDEX_DrvReserved5                __MSABI_LONG(81)
421 #define INDEX_DrvReserved6                __MSABI_LONG(82)
422 #define INDEX_DrvReserved7                __MSABI_LONG(83)
423 #define INDEX_DrvReserved8                __MSABI_LONG(84)
424 #define INDEX_DrvDeriveSurface            __MSABI_LONG(85)
425 #define INDEX_DrvQueryGlyphAttrs          __MSABI_LONG(86)
426 #define INDEX_DrvNotify                   __MSABI_LONG(87)
427 #define INDEX_DrvSynchronizeSurface       __MSABI_LONG(88)
428 #define INDEX_DrvResetDevice              __MSABI_LONG(89)
429 #define INDEX_DrvReserved9                __MSABI_LONG(90)
430 #define INDEX_DrvReserved10               __MSABI_LONG(91)
431 #define INDEX_DrvReserved11               __MSABI_LONG(92)
432 #define INDEX_LAST                        __MSABI_LONG(93)
433 
434 typedef struct _DRVFN {
435   ULONG  iFunc;
436   PFN  pfn;
437 } DRVFN, *PDRVFN;
438 
439 /* DRVENABLEDATA.iDriverVersion constants */
440 #define DDI_DRIVER_VERSION_NT4            0x00020000
441 #define DDI_DRIVER_VERSION_SP3            0x00020003
442 #define DDI_DRIVER_VERSION_NT5            0x00030000
443 #define DDI_DRIVER_VERSION_NT5_01         0x00030100
444 #define DDI_DRIVER_VERSION_NT5_01_SP1     0x00030101
445 
446 typedef struct _DRVENABLEDATA {
447   ULONG  iDriverVersion;
448   ULONG  c;
449   DRVFN  *pdrvfn;
450 } DRVENABLEDATA, *PDRVENABLEDATA;
451 
452 DECLARE_HANDLE(HSEMAPHORE);
453 
454 typedef struct {
455   DWORD  nSize;
456   HDC  hdc;
457   PBYTE  pvEMF;
458   PBYTE  pvCurrentRecord;
459 } EMFINFO, *PEMFINFO;
460 
461 typedef struct _ENGSAFESEMAPHORE {
462   HSEMAPHORE  hsem;
463   LONG  lCount;
464 } ENGSAFESEMAPHORE;
465 
466 typedef struct _ENG_TIME_FIELDS {
467   USHORT  usYear;
468   USHORT  usMonth;
469   USHORT  usDay;
470   USHORT  usHour;
471   USHORT  usMinute;
472   USHORT  usSecond;
473   USHORT  usMilliseconds;
474   USHORT  usWeekday;
475 } ENG_TIME_FIELDS, *PENG_TIME_FIELDS;
476 
477 typedef struct _ENUMRECTS {
478   ULONG  c;
479   RECTL  arcl[1];
480 } ENUMRECTS;
481 
482 typedef struct _FD_XFORM {
483   FLOATL  eXX;
484   FLOATL  eXY;
485   FLOATL  eYX;
486   FLOATL  eYY;
487 } FD_XFORM, *PFD_XFORM;
488 
489 /* FD_DEVICEMETRICS.flRealizedType constants */
490 #define FDM_TYPE_BM_SIDE_CONST            0x00000001
491 #define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE     0x00000002
492 #define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE   0x00000004
493 #define FDM_TYPE_ZERO_BEARINGS            0x00000008
494 #define FDM_TYPE_CONST_BEARINGS           0x00000010
495 
496 typedef struct _FD_DEVICEMETRICS {
497   FLONG  flRealizedType;
498   POINTE  pteBase;
499   POINTE  pteSide;
500   LONG  lD;
501   FIX  fxMaxAscender;
502   FIX  fxMaxDescender;
503   POINTL  ptlUnderline1;
504   POINTL  ptlStrikeout;
505   POINTL  ptlULThickness;
506   POINTL  ptlSOThickness;
507   ULONG  cxMax;
508   ULONG  cyMax;
509   ULONG  cjGlyphMax;
510   FD_XFORM  fdxQuantized;
511   LONG  lNonLinearExtLeading;
512   LONG  lNonLinearIntLeading;
513   LONG  lNonLinearMaxCharWidth;
514   LONG  lNonLinearAvgCharWidth;
515   LONG  lMinA;
516   LONG  lMinC;
517   LONG  lMinD;
518   LONG  alReserved[1];
519 } FD_DEVICEMETRICS, *PFD_DEVICEMETRICS;
520 
521 /* FD_GLYPHATTR.iMode constants */
522 #define FO_ATTR_MODE_ROTATE               1
523 
524 typedef struct _FD_GLYPHATTR {
525   ULONG  cjThis;
526   ULONG  cGlyphs;
527   ULONG  iMode;
528   BYTE  aGlyphAttr[1];
529 } FD_GLYPHATTR, *PFD_GLYPHATTR;
530 
531 /* FD_GLYPHSET.flAccel */
532 #define GS_UNICODE_HANDLES                0x00000001
533 #define GS_8BIT_HANDLES                   0x00000002
534 #define GS_16BIT_HANDLES                  0x00000004
535 
536 typedef struct _WCRUN {
537   WCHAR  wcLow;
538   USHORT  cGlyphs;
539   HGLYPH  *phg;
540 } WCRUN, *PWCRUN;
541 
542 typedef struct _FD_GLYPHSET {
543   ULONG  cjThis;
544   FLONG  flAccel;
545   ULONG  cGlyphsSupported;
546   ULONG  cRuns;
547   WCRUN  awcrun[1];
548 } FD_GLYPHSET, *PFD_GLYPHSET;
549 
550 typedef struct _FD_KERNINGPAIR {
551   WCHAR  wcFirst;
552   WCHAR  wcSecond;
553   FWORD  fwdKern;
554 } FD_KERNINGPAIR;
555 
556 #if defined(_X86_) && !defined(USERMODE_DRIVER)
557 typedef struct _FLOATOBJ
558 {
559   ULONG  ul1;
560   ULONG  ul2;
561 } FLOATOBJ, *PFLOATOBJ;
562 #else
563 typedef FLOAT FLOATOBJ, *PFLOATOBJ;
564 #endif
565 
566 typedef struct _FLOATOBJ_XFORM {
567   FLOATOBJ  eM11;
568   FLOATOBJ  eM12;
569   FLOATOBJ  eM21;
570   FLOATOBJ  eM22;
571   FLOATOBJ  eDx;
572   FLOATOBJ  eDy;
573 } FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
574 
575 /* FONTDIFF.fsSelection */
576 #define FM_SEL_ITALIC                     0x0001
577 #define FM_SEL_UNDERSCORE                 0x0002
578 #define FM_SEL_NEGATIVE                   0x0004
579 #define FM_SEL_OUTLINED                   0x0008
580 #define FM_SEL_STRIKEOUT                  0x0010
581 #define FM_SEL_BOLD                       0x0020
582 #define FM_SEL_REGULAR                    0x0040
583 
584 typedef struct _FONTDIFF {
585   BYTE  jReserved1;
586   BYTE  jReserved2;
587   BYTE  jReserved3;
588   BYTE  bWeight;
589   USHORT  usWinWeight;
590   FSHORT  fsSelection;
591   FWORD  fwdAveCharWidth;
592   FWORD  fwdMaxCharInc;
593   POINTL  ptlCaret;
594 } FONTDIFF;
595 
596 typedef struct _FONTSIM {
597   PTRDIFF  dpBold;
598   PTRDIFF  dpItalic;
599   PTRDIFF  dpBoldItalic;
600 } FONTSIM;
601 
602 /* FONTINFO.flCaps constants */
603 #define FO_DEVICE_FONT                    __MSABI_LONG(1)
604 #define FO_OUTLINE_CAPABLE                __MSABI_LONG(2)
605 
606 typedef struct _FONTINFO {
607   ULONG  cjThis;
608   FLONG  flCaps;
609   ULONG  cGlyphsSupported;
610   ULONG  cjMaxGlyph1;
611   ULONG  cjMaxGlyph4;
612   ULONG  cjMaxGlyph8;
613   ULONG  cjMaxGlyph32;
614 } FONTINFO, *PFONTINFO;
615 
616 /* FONTOBJ.flFontType constants */
617 #define FO_TYPE_RASTER   RASTER_FONTTYPE
618 #define FO_TYPE_DEVICE   DEVICE_FONTTYPE
619 #define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE
620 #define FO_TYPE_OPENTYPE OPENTYPE_FONTTYPE
621 
622 #define FO_SIM_BOLD      0x00002000
623 #define FO_SIM_ITALIC    0x00004000
624 #define FO_EM_HEIGHT     0x00008000
625 #define FO_GRAY16        0x00010000
626 #define FO_NOGRAY16      0x00020000
627 #define FO_NOHINTS       0x00040000
628 #define FO_NO_CHOICE     0x00080000
629 #define FO_CFF            0x00100000
630 #define FO_POSTSCRIPT     0x00200000
631 #define FO_MULTIPLEMASTER 0x00400000
632 #define FO_VERT_FACE      0x00800000
633 #define FO_DBCS_FONT      0X01000000
634 #define FO_NOCLEARTYPE    0x02000000
635 #define FO_CLEARTYPE_X    0x10000000
636 #define FO_CLEARTYPE_Y    0x20000000
637 
638 typedef struct _FONTOBJ {
639   ULONG  iUniq;
640   ULONG  iFace;
641   ULONG  cxMax;
642   FLONG  flFontType;
643   ULONG_PTR  iTTUniq;
644   ULONG_PTR  iFile;
645   SIZE  sizLogResPpi;
646   ULONG  ulStyleSize;
647   PVOID  pvConsumer;
648   PVOID  pvProducer;
649 } FONTOBJ;
650 
651 typedef struct _GAMMARAMP {
652   WORD  Red[256];
653   WORD  Green[256];
654   WORD  Blue[256];
655 } GAMMARAMP, *PGAMMARAMP;
656 
657 /* GDIINFO.ulPrimaryOrder constants */
658 #define PRIMARY_ORDER_ABC                 0
659 #define PRIMARY_ORDER_ACB                 1
660 #define PRIMARY_ORDER_BAC                 2
661 #define PRIMARY_ORDER_BCA                 3
662 #define PRIMARY_ORDER_CBA                 4
663 #define PRIMARY_ORDER_CAB                 5
664 
665 /* GDIINFO.ulHTPatternSize constants */
666 #define HT_PATSIZE_2x2                    0
667 #define HT_PATSIZE_2x2_M                  1
668 #define HT_PATSIZE_4x4                    2
669 #define HT_PATSIZE_4x4_M                  3
670 #define HT_PATSIZE_6x6                    4
671 #define HT_PATSIZE_6x6_M                  5
672 #define HT_PATSIZE_8x8                    6
673 #define HT_PATSIZE_8x8_M                  7
674 #define HT_PATSIZE_10x10                  8
675 #define HT_PATSIZE_10x10_M                9
676 #define HT_PATSIZE_12x12                  10
677 #define HT_PATSIZE_12x12_M                11
678 #define HT_PATSIZE_14x14                  12
679 #define HT_PATSIZE_14x14_M                13
680 #define HT_PATSIZE_16x16                  14
681 #define HT_PATSIZE_16x16_M                15
682 #define HT_PATSIZE_SUPERCELL              16
683 #define HT_PATSIZE_SUPERCELL_M            17
684 #define HT_PATSIZE_USER                   18
685 #define HT_PATSIZE_MAX_INDEX              HT_PATSIZE_USER
686 #define HT_PATSIZE_DEFAULT                HT_PATSIZE_SUPERCELL_M
687 #define HT_USERPAT_CX_MIN                 4
688 #define HT_USERPAT_CX_MAX                 256
689 #define HT_USERPAT_CY_MIN                 4
690 #define HT_USERPAT_CY_MAX                 256
691 
692 /* GDIINFO.ulHTOutputFormat constants */
693 #define HT_FORMAT_1BPP                    0
694 #define HT_FORMAT_4BPP                    2
695 #define HT_FORMAT_4BPP_IRGB               3
696 #define HT_FORMAT_8BPP                    4
697 #define HT_FORMAT_16BPP                   5
698 #define HT_FORMAT_24BPP                   6
699 #define HT_FORMAT_32BPP                   7
700 
701 /* GDIINFO.flHTFlags */
702 #define HT_FLAG_SQUARE_DEVICE_PEL         0x00000001
703 #define HT_FLAG_HAS_BLACK_DYE             0x00000002
704 #define HT_FLAG_ADDITIVE_PRIMS            0x00000004
705 #define HT_FLAG_USE_8BPP_BITMASK          0x00000008
706 #define HT_FLAG_INK_HIGH_ABSORPTION       0x00000010
707 #define HT_FLAG_INK_ABSORPTION_INDICES    0x00000060
708 #define HT_FLAG_DO_DEVCLR_XFORM           0x00000080
709 #define HT_FLAG_OUTPUT_CMY                0x00000100
710 #define HT_FLAG_PRINT_DRAFT_MODE          0x00000200
711 #define HT_FLAG_INVERT_8BPP_BITMASK_IDX   0x00000400
712 #define HT_FLAG_8BPP_CMY332_MASK          0xFF000000
713 
714 #define MAKE_CMYMASK_BYTE(c,m,y)          ((BYTE)(((BYTE)(c) & 0x07) << 5) \
715                                           |(BYTE)(((BYTE)(m) & 0x07) << 2) \
716                                           |(BYTE)((BYTE)(y) & 0x03))
717 
718 #define MAKE_CMY332_MASK(c,m,y)           ((DWORD)(((DWORD)(c) & 0x07) << 29)\
719                                           |(DWORD)(((DWORD)(m) & 0x07) << 26)\
720                                           |(DWORD)(((DWORD)(y) & 0x03) << 24))
721 
722 /* GDIINFO.flHTFlags constants */
723 #define HT_FLAG_INK_ABSORPTION_IDX0       0x00000000
724 #define HT_FLAG_INK_ABSORPTION_IDX1       0x00000020
725 #define HT_FLAG_INK_ABSORPTION_IDX2       0x00000040
726 #define HT_FLAG_INK_ABSORPTION_IDX3       0x00000060
727 
728 #define HT_FLAG_HIGHEST_INK_ABSORPTION    (HT_FLAG_INK_HIGH_ABSORPTION \
729                                           |HT_FLAG_INK_ABSORPTION_IDX3)
730 #define HT_FLAG_HIGHER_INK_ABSORPTION     (HT_FLAG_INK_HIGH_ABSORPTION \
731                                           |HT_FLAG_INK_ABSORPTION_IDX2)
732 #define HT_FLAG_HIGH_INK_ABSORPTION       (HT_FLAG_INK_HIGH_ABSORPTION \
733                                           |HT_FLAG_INK_ABSORPTION_IDX1)
734 #define HT_FLAG_NORMAL_INK_ABSORPTION     HT_FLAG_INK_ABSORPTION_IDX0
735 #define HT_FLAG_LOW_INK_ABSORPTION        HT_FLAG_INK_ABSORPTION_IDX1
736 #define HT_FLAG_LOWER_INK_ABSORPTION      HT_FLAG_INK_ABSORPTION_IDX2
737 #define HT_FLAG_LOWEST_INK_ABSORPTION     HT_FLAG_INK_ABSORPTION_IDX3
738 
739 #define HT_BITMASKPALRGB                  (DWORD)'0BGR'
740 #define HT_SET_BITMASKPAL2RGB(pPal)       (*((LPDWORD)(pPal)) = HT_BITMASKPALRGB)
741 #define HT_IS_BITMASKPALRGB(pPal)         (*((LPDWORD)(pPal)) == (DWORD)0)
742 
743 /* GDIINFO.ulPhysicalPixelCharacteristics constants */
744 #define PPC_DEFAULT                       0x0
745 #define PPC_UNDEFINED                     0x1
746 #define PPC_RGB_ORDER_VERTICAL_STRIPES    0x2
747 #define PPC_BGR_ORDER_VERTICAL_STRIPES    0x3
748 #define PPC_RGB_ORDER_HORIZONTAL_STRIPES  0x4
749 #define PPC_BGR_ORDER_HORIZONTAL_STRIPES  0x5
750 
751 #define PPG_DEFAULT                       0
752 #define PPG_SRGB                          1
753 
754 typedef struct _GDIINFO {
755   ULONG  ulVersion;
756   ULONG  ulTechnology;
757   ULONG  ulHorzSize;
758   ULONG  ulVertSize;
759   ULONG  ulHorzRes;
760   ULONG  ulVertRes;
761   ULONG  cBitsPixel;
762   ULONG  cPlanes;
763   ULONG  ulNumColors;
764   ULONG  flRaster;
765   ULONG  ulLogPixelsX;
766   ULONG  ulLogPixelsY;
767   ULONG  flTextCaps;
768   ULONG  ulDACRed;
769   ULONG  ulDACGreen;
770   ULONG  ulDACBlue;
771   ULONG  ulAspectX;
772   ULONG  ulAspectY;
773   ULONG  ulAspectXY;
774   LONG  xStyleStep;
775   LONG  yStyleStep;
776   LONG  denStyleStep;
777   POINTL  ptlPhysOffset;
778   SIZEL  szlPhysSize;
779   ULONG  ulNumPalReg;
780   COLORINFO  ciDevice;
781   ULONG  ulDevicePelsDPI;
782   ULONG  ulPrimaryOrder;
783   ULONG  ulHTPatternSize;
784   ULONG  ulHTOutputFormat;
785   ULONG  flHTFlags;
786   ULONG  ulVRefresh;
787   ULONG  ulBltAlignment;
788   ULONG  ulPanningHorzRes;
789   ULONG  ulPanningVertRes;
790   ULONG  xPanningAlignment;
791   ULONG  yPanningAlignment;
792   ULONG  cxHTPat;
793   ULONG  cyHTPat;
794   LPBYTE  pHTPatA;
795   LPBYTE  pHTPatB;
796   LPBYTE  pHTPatC;
797   ULONG  flShadeBlend;
798   ULONG  ulPhysicalPixelCharacteristics;
799   ULONG  ulPhysicalPixelGamma;
800 } GDIINFO, *PGDIINFO;
801 
802 /* PATHDATA.flags constants */
803 #define PD_BEGINSUBPATH                   0x00000001
804 #define PD_ENDSUBPATH                     0x00000002
805 #define PD_RESETSTYLE                     0x00000004
806 #define PD_CLOSEFIGURE                    0x00000008
807 #define PD_BEZIERS                        0x00000010
808 #define PD_ALL                            (PD_BEGINSUBPATH \
809                                           |PD_ENDSUBPATH \
810                                           |PD_RESETSTYLE \
811                                           |PD_CLOSEFIGURE \
812                                           PD_BEZIERS)
813 
814 typedef struct _PATHDATA {
815   FLONG  flags;
816   ULONG  count;
817   POINTFIX  *pptfx;
818 } PATHDATA, *PPATHDATA;
819 
820 /* PATHOBJ.fl constants */
821 #define PO_BEZIERS                        0x00000001
822 #define PO_ELLIPSE                        0x00000002
823 #define PO_ALL_INTEGERS                   0x00000004
824 #define PO_ENUM_AS_INTEGERS               0x00000008
825 
826 typedef struct _PATHOBJ {
827   FLONG  fl;
828   ULONG  cCurves;
829 } PATHOBJ;
830 
831 typedef struct _GLYPHBITS {
832   POINTL  ptlOrigin;
833   SIZEL  sizlBitmap;
834   BYTE  aj[1];
835 } GLYPHBITS;
836 
837 typedef union _GLYPHDEF {
838   GLYPHBITS  *pgb;
839   PATHOBJ  *ppo;
840 } GLYPHDEF;
841 
842 typedef struct _GLYPHPOS {
843   HGLYPH  hg;
844   GLYPHDEF  *pgdf;
845   POINTL  ptl;
846 } GLYPHPOS, *PGLYPHPOS;
847 
848 typedef struct _GLYPHDATA {
849   GLYPHDEF  gdf;
850   HGLYPH  hg;
851   FIX  fxD;
852   FIX  fxA;
853   FIX  fxAB;
854   FIX  fxInkTop;
855   FIX  fxInkBottom;
856   RECTL  rclInk;
857   POINTQF  ptqD;
858 } GLYPHDATA;
859 
860 typedef struct _IFIEXTRA {
861   ULONG  ulIdentifier;
862   PTRDIFF  dpFontSig;
863   ULONG  cig;
864   PTRDIFF  dpDesignVector;
865   PTRDIFF  dpAxesInfoW;
866   ULONG  aulReserved[1];
867 } IFIEXTRA, *PIFIEXTRA;
868 
869 /* IFIMETRICS constants */
870 
871 #define FM_VERSION_NUMBER                 0x0
872 
873 /* IFIMETRICS.fsType constants */
874 #define FM_TYPE_LICENSED                  0x2
875 #define FM_READONLY_EMBED                 0x4
876 #define FM_EDITABLE_EMBED                 0x8
877 #define FM_NO_EMBEDDING                   FM_TYPE_LICENSED
878 
879 /* IFIMETRICS.flInfo constants */
880 #define FM_INFO_TECH_TRUETYPE             0x00000001
881 #define FM_INFO_TECH_BITMAP               0x00000002
882 #define FM_INFO_TECH_STROKE               0x00000004
883 #define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008
884 #define FM_INFO_ARB_XFORMS                0x00000010
885 #define FM_INFO_1BPP                      0x00000020
886 #define FM_INFO_4BPP                      0x00000040
887 #define FM_INFO_8BPP                      0x00000080
888 #define FM_INFO_16BPP                     0x00000100
889 #define FM_INFO_24BPP                     0x00000200
890 #define FM_INFO_32BPP                     0x00000400
891 #define FM_INFO_INTEGER_WIDTH             0x00000800
892 #define FM_INFO_CONSTANT_WIDTH            0x00001000
893 #define FM_INFO_NOT_CONTIGUOUS            0x00002000
894 #define FM_INFO_TECH_MM                   0x00004000
895 #define FM_INFO_RETURNS_OUTLINES          0x00008000
896 #define FM_INFO_RETURNS_STROKES           0x00010000
897 #define FM_INFO_RETURNS_BITMAPS           0x00020000
898 #define FM_INFO_DSIG                      0x00040000
899 #define FM_INFO_RIGHT_HANDED              0x00080000
900 #define FM_INFO_INTEGRAL_SCALING          0x00100000
901 #define FM_INFO_90DEGREE_ROTATIONS        0x00200000
902 #define FM_INFO_OPTICALLY_FIXED_PITCH     0x00400000
903 #define FM_INFO_DO_NOT_ENUMERATE          0x00800000
904 #define FM_INFO_ISOTROPIC_SCALING_ONLY    0x01000000
905 #define FM_INFO_ANISOTROPIC_SCALING_ONLY  0x02000000
906 #define FM_INFO_TECH_CFF                  0x04000000
907 #define FM_INFO_FAMILY_EQUIV              0x08000000
908 #define FM_INFO_DBCS_FIXED_PITCH          0x10000000
909 #define FM_INFO_NONNEGATIVE_AC            0x20000000
910 #define FM_INFO_IGNORE_TC_RA_ABLE         0x40000000
911 #define FM_INFO_TECH_TYPE1                0x80000000
912 
913 #define MAXCHARSETS                       16
914 
915 /* IFIMETRICS.ulPanoseCulture constants */
916 #define  FM_PANOSE_CULTURE_LATIN          0x0
917 
918 typedef struct _IFIMETRICS {
919   ULONG  cjThis;
920   ULONG  cjIfiExtra;
921   PTRDIFF  dpwszFamilyName;
922   PTRDIFF  dpwszStyleName;
923   PTRDIFF  dpwszFaceName;
924   PTRDIFF  dpwszUniqueName;
925   PTRDIFF  dpFontSim;
926   LONG  lEmbedId;
927   LONG  lItalicAngle;
928   LONG  lCharBias;
929   PTRDIFF  dpCharSets;
930   BYTE  jWinCharSet;
931   BYTE  jWinPitchAndFamily;
932   USHORT  usWinWeight;
933   ULONG  flInfo;
934   USHORT  fsSelection;
935   USHORT  fsType;
936   FWORD  fwdUnitsPerEm;
937   FWORD  fwdLowestPPEm;
938   FWORD  fwdWinAscender;
939   FWORD  fwdWinDescender;
940   FWORD  fwdMacAscender;
941   FWORD  fwdMacDescender;
942   FWORD  fwdMacLineGap;
943   FWORD  fwdTypoAscender;
944   FWORD  fwdTypoDescender;
945   FWORD  fwdTypoLineGap;
946   FWORD  fwdAveCharWidth;
947   FWORD  fwdMaxCharInc;
948   FWORD  fwdCapHeight;
949   FWORD  fwdXHeight;
950   FWORD  fwdSubscriptXSize;
951   FWORD  fwdSubscriptYSize;
952   FWORD  fwdSubscriptXOffset;
953   FWORD  fwdSubscriptYOffset;
954   FWORD  fwdSuperscriptXSize;
955   FWORD  fwdSuperscriptYSize;
956   FWORD  fwdSuperscriptXOffset;
957   FWORD  fwdSuperscriptYOffset;
958   FWORD  fwdUnderscoreSize;
959   FWORD  fwdUnderscorePosition;
960   FWORD  fwdStrikeoutSize;
961   FWORD  fwdStrikeoutPosition;
962   BYTE  chFirstChar;
963   BYTE  chLastChar;
964   BYTE  chDefaultChar;
965   BYTE  chBreakChar;
966   WCHAR  wcFirstChar;
967   WCHAR  wcLastChar;
968   WCHAR  wcDefaultChar;
969   WCHAR  wcBreakChar;
970   POINTL  ptlBaseline;
971   POINTL  ptlAspect;
972   POINTL  ptlCaret;
973   RECTL  rclFontBox;
974   BYTE  achVendId[4];
975   ULONG  cKerningPairs;
976   ULONG  ulPanoseCulture;
977   PANOSE  panose;
978 #if defined(_WIN64)
979   PVOID  Align;
980 #endif
981 } IFIMETRICS, *PIFIMETRICS;
982 
983 /* LINEATTRS.fl */
984 #define LA_GEOMETRIC                      0x00000001
985 #define LA_ALTERNATE                      0x00000002
986 #define LA_STARTGAP                       0x00000004
987 #define LA_STYLED                         0x00000008
988 
989 /* LINEATTRS.iJoin */
990 #define JOIN_ROUND                        __MSABI_LONG(0)
991 #define JOIN_BEVEL                        __MSABI_LONG(1)
992 #define JOIN_MITER                        __MSABI_LONG(2)
993 
994 /* LINEATTRS.iEndCap */
995 #define ENDCAP_ROUND                      __MSABI_LONG(0)
996 #define ENDCAP_SQUARE                     __MSABI_LONG(1)
997 #define ENDCAP_BUTT                       __MSABI_LONG(2)
998 
999 typedef struct _LINEATTRS {
1000   FLONG  fl;
1001   ULONG  iJoin;
1002   ULONG  iEndCap;
1003   FLOAT_LONG  elWidth;
1004   FLOATL  eMiterLimit;
1005   ULONG  cstyle;
1006   PFLOAT_LONG  pstyle;
1007   FLOAT_LONG  elStyleState;
1008 } LINEATTRS, *PLINEATTRS;
1009 
1010 typedef struct _PALOBJ {
1011   ULONG  ulReserved;
1012 } PALOBJ;
1013 
1014 typedef struct _PERBANDINFO {
1015   WINBOOL  bRepeatThisBand;
1016   SIZEL  szlBand;
1017   ULONG  ulHorzRes;
1018   ULONG  ulVertRes;
1019 } PERBANDINFO, *PPERBANDINFO;
1020 
1021 /* STROBJ.flAccel constants */
1022 #define SO_FLAG_DEFAULT_PLACEMENT        0x00000001
1023 #define SO_HORIZONTAL                    0x00000002
1024 #define SO_VERTICAL                      0x00000004
1025 #define SO_REVERSED                      0x00000008
1026 #define SO_ZERO_BEARINGS                 0x00000010
1027 #define SO_CHAR_INC_EQUAL_BM_BASE        0x00000020
1028 #define SO_MAXEXT_EQUAL_BM_SIDE          0x00000040
1029 #define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080
1030 #define SO_GLYPHINDEX_TEXTOUT            0x00000100
1031 #define SO_ESC_NOT_ORIENT                0x00000200
1032 #define SO_DXDY                          0x00000400
1033 #define SO_CHARACTER_EXTRA               0x00000800
1034 #define SO_BREAK_EXTRA                   0x00001000
1035 
1036 typedef struct _STROBJ {
1037   ULONG  cGlyphs;
1038   FLONG  flAccel;
1039   ULONG  ulCharInc;
1040   RECTL  rclBkGround;
1041   GLYPHPOS  *pgp;
1042   LPWSTR  pwszOrg;
1043 } STROBJ;
1044 
1045 
1046 
1047 /* SURFOBJ.iType constants */
1048 #define STYPE_BITMAP                      __MSABI_LONG(0)
1049 #define STYPE_DEVICE                      __MSABI_LONG(1)
1050 #define STYPE_DEVBITMAP                   __MSABI_LONG(3)
1051 
1052 /* SURFOBJ.fjBitmap constants */
1053 #define BMF_TOPDOWN                       0x0001
1054 #define BMF_NOZEROINIT                    0x0002
1055 #define BMF_DONTCACHE                     0x0004
1056 #define BMF_USERMEM                       0x0008
1057 #define BMF_KMSECTION                     0x0010
1058 #define BMF_NOTSYSMEM                     0x0020
1059 #define BMF_WINDOW_BLT                    0x0040
1060 #define BMF_UMPDMEM                       0x0080
1061 #define BMF_RESERVED                      0xFF00
1062 
1063 typedef struct _SURFOBJ {
1064   DHSURF  dhsurf;
1065   HSURF  hsurf;
1066   DHPDEV  dhpdev;
1067   HDEV  hdev;
1068   SIZEL  sizlBitmap;
1069   ULONG  cjBits;
1070   PVOID  pvBits;
1071   PVOID  pvScan0;
1072   LONG  lDelta;
1073   ULONG  iUniq;
1074   ULONG  iBitmapFormat;
1075   USHORT  iType;
1076   USHORT  fjBitmap;
1077 } SURFOBJ;
1078 
1079 typedef struct _TYPE1_FONT {
1080   HANDLE  hPFM;
1081   HANDLE  hPFB;
1082   ULONG  ulIdentifier;
1083 } TYPE1_FONT;
1084 
1085 typedef struct _WNDOBJ {
1086   CLIPOBJ  coClient;
1087   PVOID  pvConsumer;
1088   RECTL  rclClient;
1089   SURFOBJ  *psoOwner;
1090 } WNDOBJ, *PWNDOBJ;
1091 
1092 typedef struct _XFORML {
1093   FLOATL  eM11;
1094   FLOATL  eM12;
1095   FLOATL  eM21;
1096   FLOATL  eM22;
1097   FLOATL  eDx;
1098   FLOATL  eDy;
1099 } XFORML, *PXFORML;
1100 
1101 typedef struct _XFORMOBJ {
1102   ULONG  ulReserved;
1103 } XFORMOBJ;
1104 
1105 /* XLATEOBJ.flXlate constants */
1106 #define XO_TRIVIAL                        0x00000001
1107 #define XO_TABLE                          0x00000002
1108 #define XO_TO_MONO                        0x00000004
1109 #define XO_FROM_CMYK                      0x00000008
1110 #define XO_DEVICE_ICM                     0x00000010
1111 #define XO_HOST_ICM                       0x00000020
1112 
1113 typedef struct _XLATEOBJ {
1114   ULONG  iUniq;
1115   FLONG  flXlate;
1116   USHORT  iSrcType;
1117   USHORT  iDstType;
1118   ULONG  cEntries;
1119   ULONG  *pulXlate;
1120 } XLATEOBJ;
1121 
1122 /* WNDOBJCHANGEPROC.fl constants */
1123 #define WOC_RGN_CLIENT_DELTA              0x00000001
1124 #define WOC_RGN_CLIENT                    0x00000002
1125 #define WOC_RGN_SURFACE_DELTA             0x00000004
1126 #define WOC_RGN_SURFACE                   0x00000008
1127 #define WOC_CHANGED                       0x00000010
1128 #define WOC_DELETE                        0x00000020
1129 #define WOC_DRAWN                         0x00000040
1130 #define WOC_SPRITE_OVERLAP                0x00000080
1131 #define WOC_SPRITE_NO_OVERLAP             0x00000100
1132 
1133 typedef VOID (APIENTRY CALLBACK *WNDOBJCHANGEPROC)(
1134   WNDOBJ  *pwo,
1135   FLONG  fl);
1136 
1137 
1138 WIN32KAPI
1139 HANDLE
1140 APIENTRY
1141 BRUSHOBJ_hGetColorTransform(
1142   BRUSHOBJ  *pbo);
1143 
1144 WIN32KAPI
1145 PVOID
1146 APIENTRY
1147 BRUSHOBJ_pvAllocRbrush(
1148   BRUSHOBJ  *pbo,
1149   ULONG  cj);
1150 
1151 WIN32KAPI
1152 PVOID
1153 APIENTRY
1154 BRUSHOBJ_pvGetRbrush(
1155   BRUSHOBJ  *pbo);
1156 
1157 WIN32KAPI
1158 ULONG
1159 APIENTRY
1160 BRUSHOBJ_ulGetBrushColor(
1161   BRUSHOBJ  *pbo);
1162 
1163 WIN32KAPI
1164 WINBOOL
1165 APIENTRY
1166 CLIPOBJ_bEnum(
1167   CLIPOBJ  *pco,
1168   ULONG  cj,
1169   ULONG  *pv);
1170 
1171 /* CLIPOBJ_cEnumStart.iType constants */
1172 #define CT_RECTANGLES                     __MSABI_LONG(0)
1173 
1174 /* CLIPOBJ_cEnumStart.iDirection constants */
1175 #define CD_RIGHTDOWN                      0x00000000
1176 #define CD_LEFTDOWN                       0x00000001
1177 #define CD_LEFTWARDS                      0x00000001
1178 #define CD_RIGHTUP                        0x00000002
1179 #define CD_UPWARDS                        0x00000002
1180 #define CD_LEFTUP                         0x00000003
1181 #define CD_ANY                            0x00000004
1182 
1183 WIN32KAPI
1184 ULONG
1185 APIENTRY
1186 CLIPOBJ_cEnumStart(
1187   CLIPOBJ  *pco,
1188   WINBOOL  bAll,
1189   ULONG  iType,
1190   ULONG  iDirection,
1191   ULONG  cLimit);
1192 
1193 WIN32KAPI
1194 PATHOBJ*
1195 APIENTRY
1196 CLIPOBJ_ppoGetPath(
1197   CLIPOBJ  *pco);
1198 
1199 WIN32KAPI
1200 VOID
1201 APIENTRY
1202 EngAcquireSemaphore(
1203   HSEMAPHORE  hsem);
1204 
1205 #define FL_ZERO_MEMORY                    0x00000001
1206 #define FL_NONPAGED_MEMORY                0x00000002
1207 
1208 WIN32KAPI
1209 PVOID
1210 APIENTRY
1211 EngAllocMem(
1212   ULONG  Flags,
1213   ULONG  MemSize,
1214   ULONG  Tag);
1215 
1216 WIN32KAPI
1217 PVOID
1218 APIENTRY
1219 EngAllocPrivateUserMem(
1220   PDD_SURFACE_LOCAL  psl,
1221   SIZE_T  cj,
1222   ULONG  tag);
1223 
1224 WIN32KAPI
1225 PVOID
1226 APIENTRY
1227 EngAllocUserMem(
1228   SIZE_T  cj,
1229   ULONG  tag);
1230 
1231 WIN32KAPI
1232 WINBOOL
1233 APIENTRY
1234 EngAlphaBlend(
1235   SURFOBJ  *psoDest,
1236   SURFOBJ  *psoSrc,
1237   CLIPOBJ  *pco,
1238   XLATEOBJ  *pxlo,
1239   RECTL  *prclDest,
1240   RECTL  *prclSrc,
1241   BLENDOBJ  *pBlendObj);
1242 
1243 /* EngAssociateSurface.flHooks constants */
1244 #define HOOK_BITBLT                       0x00000001
1245 #define HOOK_STRETCHBLT                   0x00000002
1246 #define HOOK_PLGBLT                       0x00000004
1247 #define HOOK_TEXTOUT                      0x00000008
1248 #define HOOK_PAINT                        0x00000010
1249 #define HOOK_STROKEPATH                   0x00000020
1250 #define HOOK_FILLPATH                     0x00000040
1251 #define HOOK_STROKEANDFILLPATH            0x00000080
1252 #define HOOK_LINETO                       0x00000100
1253 #define HOOK_COPYBITS                     0x00000400
1254 #define HOOK_MOVEPANNING                  0x00000800
1255 #define HOOK_SYNCHRONIZE                  0x00001000
1256 #define HOOK_STRETCHBLTROP                0x00002000
1257 #define HOOK_SYNCHRONIZEACCESS            0x00004000
1258 #define HOOK_TRANSPARENTBLT               0x00008000
1259 #define HOOK_ALPHABLEND                   0x00010000
1260 #define HOOK_GRADIENTFILL                 0x00020000
1261 #define HOOK_FLAGS                        0x0003b5ff
1262 
1263 WIN32KAPI
1264 WINBOOL
1265 APIENTRY
1266 EngAssociateSurface(
1267   HSURF  hsurf,
1268   HDEV  hdev,
1269   FLONG  flHooks);
1270 
1271 WIN32KAPI
1272 WINBOOL
1273 APIENTRY
1274 EngBitBlt(
1275   SURFOBJ  *psoTrg,
1276   SURFOBJ  *psoSrc,
1277   SURFOBJ  *psoMask,
1278   CLIPOBJ  *pco,
1279   XLATEOBJ  *pxlo,
1280   RECTL  *prclTrg,
1281   POINTL  *pptlSrc,
1282   POINTL  *pptlMask,
1283   BRUSHOBJ  *pbo,
1284   POINTL  *pptlBrush,
1285   ROP4  rop4);
1286 
1287 WIN32KAPI
1288 WINBOOL
1289 APIENTRY
1290 EngCheckAbort(
1291   SURFOBJ  *pso);
1292 
1293 WIN32KAPI
1294 VOID
1295 APIENTRY
1296 EngClearEvent(
1297   PEVENT  pEvent);
1298 
1299 WIN32KAPI
1300 FD_GLYPHSET*
1301 APIENTRY
1302 EngComputeGlyphSet(
1303   INT  nCodePage,
1304   INT  nFirstChar,
1305   INT  cChars);
1306 
1307 /* EngControlSprites.fl constants */
1308 #define ECS_TEARDOWN                      0x00000001
1309 #define ECS_REDRAW                        0x00000002
1310 
1311 WIN32KAPI
1312 WINBOOL
1313 APIENTRY
1314 EngControlSprites(
1315   WNDOBJ  *pwo,
1316   FLONG  fl);
1317 
1318 WIN32KAPI
1319 WINBOOL
1320 APIENTRY
1321 EngCopyBits(
1322   SURFOBJ  *psoDest,
1323   SURFOBJ  *psoSrc,
1324   CLIPOBJ  *pco,
1325   XLATEOBJ  *pxlo,
1326   RECTL  *prclDest,
1327   POINTL  *pptlSrc);
1328 
1329 WIN32KAPI
1330 HBITMAP
1331 APIENTRY
1332 EngCreateBitmap(
1333   SIZEL  sizl,
1334   LONG  lWidth,
1335   ULONG  iFormat,
1336   FLONG  fl,
1337   PVOID  pvBits);
1338 
1339 WIN32KAPI
1340 CLIPOBJ*
1341 APIENTRY
1342 EngCreateClip(
1343   VOID);
1344 
1345 WIN32KAPI
1346 HBITMAP
1347 APIENTRY
1348 EngCreateDeviceBitmap(
1349   DHSURF  dhsurf,
1350   SIZEL  sizl,
1351   ULONG  iFormatCompat);
1352 
1353 WIN32KAPI
1354 HSURF
1355 APIENTRY
1356 EngCreateDeviceSurface(
1357   DHSURF  dhsurf,
1358   SIZEL  sizl,
1359   ULONG  iFormatCompat);
1360 
1361 #if 0
1362 WIN32KAPI
1363 HDRVOBJ
1364 APIENTRY
1365 EngCreateDriverObj(
1366   PVOID  pvObj,
1367   FREEOBJPROC  pFreeObjProc,
1368   HDEV  hdev);
1369 #endif
1370 
1371 WIN32KAPI
1372 WINBOOL
1373 APIENTRY
1374 EngCreateEvent(
1375   PEVENT  *ppEvent);
1376 
1377 /* EngCreatePalette.iMode constants */
1378 #define PAL_INDEXED                       0x00000001
1379 #define PAL_BITFIELDS                     0x00000002
1380 #define PAL_RGB                           0x00000004
1381 #define PAL_BGR                           0x00000008
1382 #define PAL_CMYK                          0x00000010
1383 
1384 WIN32KAPI
1385 HPALETTE
1386 APIENTRY
1387 EngCreatePalette(
1388   ULONG  iMode,
1389   ULONG  cColors,
1390   ULONG  *pulColors,
1391   FLONG  flRed,
1392   FLONG  flGreen,
1393   FLONG  flBlue);
1394 
1395 WIN32KAPI
1396 PATHOBJ*
1397 APIENTRY
1398 EngCreatePath(
1399   VOID);
1400 
1401 WIN32KAPI
1402 HSEMAPHORE
1403 APIENTRY
1404 EngCreateSemaphore(
1405   VOID);
1406 
1407 /* EngCreateWnd.fl constants */
1408 #define WO_RGN_CLIENT_DELTA               0x00000001
1409 #define WO_RGN_CLIENT                     0x00000002
1410 #define WO_RGN_SURFACE_DELTA              0x00000004
1411 #define WO_RGN_SURFACE                    0x00000008
1412 #define WO_RGN_UPDATE_ALL                 0x00000010
1413 #define WO_RGN_WINDOW                     0x00000020
1414 #define WO_DRAW_NOTIFY                    0x00000040
1415 #define WO_SPRITE_NOTIFY                  0x00000080
1416 #define WO_RGN_DESKTOP_COORD              0x00000100
1417 
1418 WIN32KAPI
1419 WNDOBJ*
1420 APIENTRY
1421 EngCreateWnd(
1422   SURFOBJ  *pso,
1423   HWND  hwnd,
1424   WNDOBJCHANGEPROC  pfn,
1425   FLONG  fl,
1426   int  iPixelFormat);
1427 
1428 WIN32KAPI
1429 VOID
1430 APIENTRY
1431 EngDebugBreak(
1432   VOID);
1433 
1434 WIN32KAPI
1435 VOID
1436 APIENTRY
1437 EngDebugPrint(
1438   PCHAR StandardPrefix,
1439   PCHAR DebugMessage,
1440   va_list ap);
1441 
1442 WIN32KAPI
1443 VOID
1444 APIENTRY
1445 EngDeleteClip(
1446   CLIPOBJ  *pco);
1447 
1448 WIN32KAPI
1449 WINBOOL
1450 APIENTRY
1451 EngDeleteDriverObj(
1452   HDRVOBJ  hdo,
1453   WINBOOL  bCallBack,
1454   WINBOOL  bLocked);
1455 
1456 WIN32KAPI
1457 WINBOOL
1458 APIENTRY
1459 EngDeleteEvent(
1460   PEVENT  pEvent);
1461 
1462 WIN32KAPI
1463 WINBOOL
1464 APIENTRY
1465 EngDeleteFile(
1466   LPWSTR  pwszFileName);
1467 
1468 WIN32KAPI
1469 WINBOOL
1470 APIENTRY
1471 EngDeletePalette(
1472   HPALETTE  hpal);
1473 
1474 WIN32KAPI
1475 VOID
1476 APIENTRY
1477 EngDeletePath(
1478   PATHOBJ  *ppo);
1479 
1480 WIN32KAPI
1481 VOID
1482 APIENTRY
1483 EngDeleteSafeSemaphore(
1484   ENGSAFESEMAPHORE  *pssem);
1485 
1486 WIN32KAPI
1487 VOID
1488 APIENTRY
1489 EngDeleteSemaphore(
1490   HSEMAPHORE  hsem);
1491 
1492 WIN32KAPI
1493 WINBOOL
1494 APIENTRY
1495 EngDeleteSurface(
1496   HSURF  hsurf);
1497 
1498 WIN32KAPI
1499 VOID
1500 APIENTRY
1501 EngDeleteWnd(
1502   WNDOBJ  *pwo);
1503 
1504 WIN32KAPI
1505 DWORD
1506 APIENTRY
1507 EngDeviceIoControl(
1508   HANDLE  hDevice,
1509   DWORD  dwIoControlCode,
1510   LPVOID  lpInBuffer,
1511   DWORD  nInBufferSize,
1512   LPVOID  lpOutBuffer,
1513   DWORD  nOutBufferSize,
1514   LPDWORD  lpBytesReturned);
1515 
1516 WIN32KAPI
1517 ULONG
1518 APIENTRY
1519 EngDitherColor(
1520   HDEV  hdev,
1521   ULONG  iMode,
1522   ULONG  rgb,
1523   ULONG  *pul);
1524 
1525 WIN32KAPI
1526 WINBOOL
1527 APIENTRY
1528 EngEnumForms(
1529   HANDLE  hPrinter,
1530   DWORD  Level,
1531   LPBYTE  pForm,
1532   DWORD  cbBuf,
1533   LPDWORD  pcbNeeded,
1534   LPDWORD  pcReturned);
1535 
1536 WIN32KAPI
1537 WINBOOL
1538 APIENTRY
1539 EngEraseSurface(
1540   SURFOBJ  *pso,
1541   RECTL  *prcl,
1542   ULONG  iColor);
1543 
1544 WIN32KAPI
1545 WINBOOL
1546 APIENTRY
1547 EngFillPath(
1548   SURFOBJ  *pso,
1549   PATHOBJ  *ppo,
1550   CLIPOBJ  *pco,
1551   BRUSHOBJ  *pbo,
1552   POINTL  *pptlBrushOrg,
1553   MIX  mix,
1554   FLONG  flOptions);
1555 
1556 WIN32KAPI
1557 PVOID
1558 APIENTRY
1559 EngFindImageProcAddress(
1560   HANDLE  hModule,
1561   LPSTR  lpProcName);
1562 
1563 WIN32KAPI
1564 PVOID
1565 APIENTRY
1566 EngFindResource(
1567   HANDLE  h,
1568   int  iName,
1569   int  iType,
1570   PULONG  pulSize);
1571 
1572 WIN32KAPI
1573 PVOID
1574 APIENTRY
1575 EngFntCacheAlloc(
1576   ULONG  FastCheckSum,
1577   ULONG  ulSize);
1578 
1579 /* EngFntCacheFault.iFaultMode constants */
1580 #define ENG_FNT_CACHE_READ_FAULT          0x00000001
1581 #define ENG_FNT_CACHE_WRITE_FAULT         0x00000002
1582 
1583 WIN32KAPI
1584 VOID
1585 APIENTRY
1586 EngFntCacheFault(
1587   ULONG  ulFastCheckSum,
1588   ULONG  iFaultMode);
1589 
1590 WIN32KAPI
1591 PVOID
1592 APIENTRY
1593 EngFntCacheLookUp(
1594   ULONG  FastCheckSum,
1595   ULONG  *pulSize);
1596 
1597 WIN32KAPI
1598 VOID
1599 APIENTRY
1600 EngFreeMem(
1601   PVOID  Mem);
1602 
1603 WIN32KAPI
1604 VOID
1605 APIENTRY
1606 EngFreeModule(
1607   HANDLE  h);
1608 
1609 WIN32KAPI
1610 VOID
1611 APIENTRY
1612 EngFreePrivateUserMem(
1613   PDD_SURFACE_LOCAL  psl,
1614   PVOID  pv);
1615 
1616 WIN32KAPI
1617 VOID
1618 APIENTRY
1619 EngFreeUserMem(
1620   PVOID  pv);
1621 
1622 WIN32KAPI
1623 VOID
1624 APIENTRY
1625 EngGetCurrentCodePage(
1626   PUSHORT  OemCodePage,
1627   PUSHORT  AnsiCodePage);
1628 
1629 WIN32KAPI
1630 HANDLE
1631 APIENTRY
1632 EngGetCurrentProcessId(
1633   VOID);
1634 
1635 WIN32KAPI
1636 HANDLE
1637 APIENTRY
1638 EngGetCurrentThreadId(
1639   VOID);
1640 
1641 WIN32KAPI
1642 LPWSTR
1643 APIENTRY
1644 EngGetDriverName(
1645   HDEV  hdev);
1646 
1647 WIN32KAPI
1648 WINBOOL
1649 APIENTRY
1650 EngGetFileChangeTime(
1651   HANDLE  h,
1652   LARGE_INTEGER  *pChangeTime);
1653 
1654 WIN32KAPI
1655 WINBOOL
1656 APIENTRY
1657 EngGetFilePath(
1658   HANDLE  h,
1659   WCHAR  (*pDest)[MAX_PATH+1]);
1660 
1661 WIN32KAPI
1662 WINBOOL
1663 APIENTRY
1664 EngGetForm(
1665   HANDLE  hPrinter,
1666   LPWSTR  pFormName,
1667   DWORD  Level,
1668   LPBYTE  pForm,
1669   DWORD  cbBuf,
1670   LPDWORD  pcbNeeded);
1671 
1672 WIN32KAPI
1673 ULONG
1674 APIENTRY
1675 EngGetLastError(
1676   VOID);
1677 
1678 WIN32KAPI
1679 WINBOOL
1680 APIENTRY
1681 EngGetPrinter(
1682   HANDLE  hPrinter,
1683   DWORD  dwLevel,
1684   LPBYTE  pPrinter,
1685   DWORD  cbBuf,
1686   LPDWORD  pcbNeeded);
1687 
1688 WIN32KAPI
1689 DWORD
1690 APIENTRY
1691 EngGetPrinterData(
1692   HANDLE  hPrinter,
1693   LPWSTR  pValueName,
1694   LPDWORD  pType,
1695   LPBYTE  pData,
1696   DWORD  nSize,
1697   LPDWORD  pcbNeeded);
1698 
1699 WIN32KAPI
1700 LPWSTR
1701 APIENTRY
1702 EngGetPrinterDataFileName(
1703   HDEV  hdev);
1704 
1705 WIN32KAPI
1706 WINBOOL
1707 APIENTRY
1708 EngGetPrinterDriver(
1709   HANDLE  hPrinter,
1710   LPWSTR  pEnvironment,
1711   DWORD  dwLevel,
1712   BYTE  *lpbDrvInfo,
1713   DWORD  cbBuf,
1714   DWORD  *pcbNeeded);
1715 
1716 WIN32KAPI
1717 HANDLE
1718 APIENTRY
1719 EngGetProcessHandle(
1720   VOID);
1721 
1722 WIN32KAPI
1723 WINBOOL
1724 APIENTRY
1725 EngGetType1FontList(
1726   HDEV  hdev,
1727   TYPE1_FONT  *pType1Buffer,
1728   ULONG  cjType1Buffer,
1729   PULONG  pulLocalFonts,
1730   PULONG  pulRemoteFonts,
1731   LARGE_INTEGER  *pLastModified);
1732 
1733 WIN32KAPI
1734 WINBOOL
1735 APIENTRY
1736 EngGradientFill(
1737   SURFOBJ  *psoDest,
1738   CLIPOBJ  *pco,
1739   XLATEOBJ  *pxlo,
1740   TRIVERTEX  *pVertex,
1741   ULONG  nVertex,
1742   PVOID  pMesh,
1743   ULONG  nMesh,
1744   RECTL  *prclExtents,
1745   POINTL  *pptlDitherOrg,
1746   ULONG  ulMode);
1747 
1748 /* EngHangNotification return values */
1749 #define EHN_RESTORED                      0x00000000
1750 #define EHN_ERROR                         0x00000001
1751 
1752 WIN32KAPI
1753 ULONG
1754 APIENTRY
1755 EngHangNotification(
1756   HDEV  hDev,
1757   PVOID  Reserved);
1758 
1759 WIN32KAPI
1760 WINBOOL
1761 APIENTRY
1762 EngInitializeSafeSemaphore(
1763   ENGSAFESEMAPHORE  *pssem);
1764 
1765 WIN32KAPI
1766 WINBOOL
1767 APIENTRY
1768 EngIsSemaphoreOwned(
1769   HSEMAPHORE  hsem);
1770 
1771 WIN32KAPI
1772 WINBOOL
1773 APIENTRY
1774 EngIsSemaphoreOwnedByCurrentThread(
1775   HSEMAPHORE  hsem);
1776 
1777 WIN32KAPI
1778 WINBOOL
1779 APIENTRY
1780 EngLineTo(
1781   SURFOBJ  *pso,
1782   CLIPOBJ  *pco,
1783   BRUSHOBJ  *pbo,
1784   LONG  x1,
1785   LONG  y1,
1786   LONG  x2,
1787   LONG  y2,
1788   RECTL  *prclBounds,
1789   MIX  mix);
1790 
1791 WIN32KAPI
1792 HANDLE
1793 APIENTRY
1794 EngLoadImage(
1795   LPWSTR  pwszDriver);
1796 
1797 WIN32KAPI
1798 HANDLE
1799 APIENTRY
1800 EngLoadModule(
1801   LPWSTR  pwsz);
1802 
1803 WIN32KAPI
1804 HANDLE
1805 APIENTRY
1806 EngLoadModuleForWrite(
1807   LPWSTR  pwsz,
1808   ULONG  cjSizeOfModule);
1809 
1810 WIN32KAPI
1811 PDD_SURFACE_LOCAL
1812 APIENTRY
1813 EngLockDirectDrawSurface(
1814   HANDLE  hSurface);
1815 
1816 WIN32KAPI
1817 DRIVEROBJ*
1818 APIENTRY
1819 EngLockDriverObj(
1820   HDRVOBJ  hdo);
1821 
1822 WIN32KAPI
1823 SURFOBJ*
1824 APIENTRY
1825 EngLockSurface(
1826   HSURF  hsurf);
1827 
1828 WIN32KAPI
1829 WINBOOL
1830 APIENTRY
1831 EngLpkInstalled(
1832   VOID);
1833 
1834 WIN32KAPI
1835 PEVENT
1836 APIENTRY
1837 EngMapEvent(
1838   HDEV  hDev,
1839   HANDLE  hUserObject,
1840   PVOID  Reserved1,
1841   PVOID  Reserved2,
1842   PVOID  Reserved3);
1843 
1844 WIN32KAPI
1845 PVOID
1846 APIENTRY
1847 EngMapFile(
1848   LPWSTR  pwsz,
1849   ULONG  cjSize,
1850   ULONG_PTR  *piFile);
1851 
1852 WIN32KAPI
1853 WINBOOL
1854 APIENTRY
1855 EngMapFontFile(
1856   ULONG_PTR  iFile,
1857   PULONG  *ppjBuf,
1858   ULONG  *pcjBuf);
1859 
1860 WIN32KAPI
1861 WINBOOL
1862 APIENTRY
1863 EngMapFontFileFD(
1864   ULONG_PTR  iFile,
1865   PULONG  *ppjBuf,
1866   ULONG  *pcjBuf);
1867 
1868 WIN32KAPI
1869 PVOID
1870 APIENTRY
1871 EngMapModule(
1872   HANDLE  h,
1873   PULONG  pSize);
1874 
1875 WIN32KAPI
1876 WINBOOL
1877 APIENTRY
1878 EngMarkBandingSurface(
1879   HSURF  hsurf);
1880 
1881 /* EngModifySurface.flSurface constants */
1882 #define MS_NOTSYSTEMMEMORY                0x00000001
1883 #define MS_SHAREDACCESS                   0x00000002
1884 
1885 WIN32KAPI
1886 WINBOOL
1887 APIENTRY
1888 EngModifySurface(
1889   HSURF  hsurf,
1890   HDEV  hdev,
1891   FLONG  flHooks,
1892   FLONG  flSurface,
1893   DHSURF  dhsurf,
1894   VOID  *pvScan0,
1895   LONG  lDelta,
1896   VOID  *pvReserved);
1897 
1898 WIN32KAPI
1899 VOID
1900 APIENTRY
1901 EngMovePointer(
1902   SURFOBJ  *pso,
1903   LONG  x,
1904   LONG  y,
1905   RECTL  *prcl);
1906 
1907 WIN32KAPI
1908 int
1909 APIENTRY
1910 EngMulDiv(
1911   int  a,
1912   int  b,
1913   int  c);
1914 
1915 WIN32KAPI
1916 VOID
1917 APIENTRY
1918 EngMultiByteToUnicodeN(
1919   LPWSTR  UnicodeString,
1920   ULONG  MaxBytesInUnicodeString,
1921   PULONG  BytesInUnicodeString,
1922   PCHAR  MultiByteString,
1923   ULONG  BytesInMultiByteString);
1924 
1925 WIN32KAPI
1926 INT
1927 APIENTRY
1928 EngMultiByteToWideChar(
1929   UINT  CodePage,
1930   LPWSTR  WideCharString,
1931   INT  BytesInWideCharString,
1932   LPSTR  MultiByteString,
1933   INT  BytesInMultiByteString);
1934 
1935 WIN32KAPI
1936 WINBOOL
1937 APIENTRY
1938 EngPaint(
1939   SURFOBJ  *pso,
1940   CLIPOBJ  *pco,
1941   BRUSHOBJ  *pbo,
1942   POINTL  *pptlBrushOrg,
1943   MIX  mix);
1944 
1945 WIN32KAPI
1946 WINBOOL
1947 APIENTRY
1948 EngPlgBlt(
1949   SURFOBJ  *psoTrg,
1950   SURFOBJ  *psoSrc,
1951   SURFOBJ  *psoMsk,
1952   CLIPOBJ  *pco,
1953   XLATEOBJ  *pxlo,
1954   COLORADJUSTMENT  *pca,
1955   POINTL  *pptlBrushOrg,
1956   POINTFIX  *pptfx,
1957   RECTL  *prcl,
1958   POINTL  *pptl,
1959   ULONG  iMode);
1960 
1961 WIN32KAPI
1962 VOID
1963 APIENTRY
1964 EngProbeForRead(
1965   PVOID  Address,
1966   ULONG  Length,
1967   ULONG  Alignment);
1968 
1969 WIN32KAPI
1970 VOID
1971 APIENTRY
1972 EngProbeForReadAndWrite(
1973   PVOID  Address,
1974   ULONG  Length,
1975   ULONG  Alignment);
1976 
1977 typedef enum _ENG_DEVICE_ATTRIBUTE {
1978   QDA_RESERVED = 0,
1979   QDA_ACCELERATION_LEVEL
1980 } ENG_DEVICE_ATTRIBUTE;
1981 
1982 WIN32KAPI
1983 WINBOOL
1984 APIENTRY
1985 EngQueryDeviceAttribute(
1986   HDEV  hdev,
1987   ENG_DEVICE_ATTRIBUTE  devAttr,
1988   VOID  *pvIn,
1989   ULONG  ulInSize,
1990   VOID  *pvOut,
1991   ULONG  ulOutSize);
1992 
1993 WIN32KAPI
1994 LARGE_INTEGER
1995 APIENTRY
1996 EngQueryFileTimeStamp(
1997   LPWSTR  pwsz);
1998 
1999 WIN32KAPI
2000 VOID
2001 APIENTRY
2002 EngQueryLocalTime(
2003   PENG_TIME_FIELDS  ptf);
2004 
2005 WIN32KAPI
2006 ULONG
2007 APIENTRY
2008 EngQueryPalette(
2009   HPALETTE  hPal,
2010   ULONG  *piMode,
2011   ULONG  cColors,
2012   ULONG  *pulColors);
2013 
2014 WIN32KAPI
2015 VOID
2016 APIENTRY
2017 EngQueryPerformanceCounter(
2018   LONGLONG  *pPerformanceCount);
2019 
2020 WIN32KAPI
2021 VOID
2022 APIENTRY
2023 EngQueryPerformanceFrequency(
2024   LONGLONG  *pFrequency);
2025 
2026 typedef enum _ENG_SYSTEM_ATTRIBUTE {
2027   EngProcessorFeature = 1,
2028   EngNumberOfProcessors,
2029   EngOptimumAvailableUserMemory,
2030   EngOptimumAvailableSystemMemory,
2031 } ENG_SYSTEM_ATTRIBUTE;
2032 
2033 #define QSA_MMX                           0x00000100
2034 #define QSA_SSE                           0x00002000
2035 #define QSA_3DNOW                         0x00004000
2036 
2037 WIN32KAPI
2038 WINBOOL
2039 APIENTRY
2040 EngQuerySystemAttribute(
2041   ENG_SYSTEM_ATTRIBUTE  CapNum,
2042   PDWORD  pCapability);
2043 
2044 WIN32KAPI
2045 LONG
2046 APIENTRY
2047 EngReadStateEvent(
2048   PEVENT  pEvent);
2049 
2050 WIN32KAPI
2051 VOID
2052 APIENTRY
2053 EngReleaseSemaphore(
2054   HSEMAPHORE  hsem);
2055 
2056 WIN32KAPI
2057 WINBOOL
2058 APIENTRY
2059 EngRestoreFloatingPointState(
2060   VOID  *pBuffer);
2061 
2062 WIN32KAPI
2063 ULONG
2064 APIENTRY
2065 EngSaveFloatingPointState(
2066   VOID  *pBuffer,
2067   ULONG  cjBufferSize);
2068 
2069 WIN32KAPI
2070 HANDLE
2071 APIENTRY
2072 EngSecureMem(
2073   PVOID  Address,
2074   ULONG  Length);
2075 
2076 WIN32KAPI
2077 LONG
2078 APIENTRY
2079 EngSetEvent(
2080   PEVENT  pEvent);
2081 
2082 WIN32KAPI
2083 VOID
2084 APIENTRY
2085 EngSetLastError(
2086   ULONG  iError);
2087 
2088 WIN32KAPI
2089 ULONG
2090 APIENTRY
2091 EngSetPointerShape(
2092   SURFOBJ  *pso,
2093   SURFOBJ  *psoMask,
2094   SURFOBJ  *psoColor,
2095   XLATEOBJ  *pxlo,
2096   LONG  xHot,
2097   LONG  yHot,
2098   LONG  x,
2099   LONG  y,
2100   RECTL  *prcl,
2101   FLONG  fl);
2102 
2103 WIN32KAPI
2104 WINBOOL
2105 APIENTRY
2106 EngSetPointerTag(
2107   HDEV  hdev,
2108   SURFOBJ  *psoMask,
2109   SURFOBJ  *psoColor,
2110   XLATEOBJ  *pxlo,
2111   FLONG  fl);
2112 
2113 WIN32KAPI
2114 DWORD
2115 APIENTRY
2116 EngSetPrinterData(
2117   HANDLE  hPrinter,
2118   LPWSTR  pType,
2119   DWORD  dwType,
2120   LPBYTE  lpbPrinterData,
2121   DWORD  cjPrinterData);
2122 
2123 typedef int (CDECL *SORTCOMP)(const void *pv1, const void *pv2);
2124 
2125 WIN32KAPI
2126 VOID
2127 APIENTRY
2128 EngSort(
2129   PBYTE  pjBuf,
2130   ULONG  c,
2131   ULONG  cjElem,
2132   SORTCOMP  pfnComp);
2133 
2134 WIN32KAPI
2135 WINBOOL
2136 APIENTRY
2137 EngStretchBlt(
2138   SURFOBJ  *psoDest,
2139   SURFOBJ  *psoSrc,
2140   SURFOBJ  *psoMask,
2141   CLIPOBJ  *pco,
2142   XLATEOBJ  *pxlo,
2143   COLORADJUSTMENT  *pca,
2144   POINTL  *pptlHTOrg,
2145   RECTL  *prclDest,
2146   RECTL  *prclSrc,
2147   POINTL  *pptlMask,
2148   ULONG  iMode);
2149 
2150 WIN32KAPI
2151 WINBOOL
2152 APIENTRY
2153 EngStretchBltROP(
2154   SURFOBJ  *psoDest,
2155   SURFOBJ  *psoSrc,
2156   SURFOBJ  *psoMask,
2157   CLIPOBJ  *pco,
2158   XLATEOBJ  *pxlo,
2159   COLORADJUSTMENT  *pca,
2160   POINTL  *pptlHTOrg,
2161   RECTL  *prclDest,
2162   RECTL  *prclSrc,
2163   POINTL  *pptlMask,
2164   ULONG  iMode,
2165   BRUSHOBJ  *pbo,
2166   DWORD  rop4);
2167 
2168 WIN32KAPI
2169 WINBOOL
2170 APIENTRY
2171 EngStrokeAndFillPath(
2172   SURFOBJ  *pso,
2173   PATHOBJ  *ppo,
2174   CLIPOBJ  *pco,
2175   XFORMOBJ  *pxo,
2176   BRUSHOBJ  *pboStroke,
2177   LINEATTRS  *plineattrs,
2178   BRUSHOBJ  *pboFill,
2179   POINTL  *pptlBrushOrg,
2180   MIX  mixFill,
2181   FLONG  flOptions);
2182 
2183 WIN32KAPI
2184 WINBOOL
2185 APIENTRY
2186 EngStrokePath(
2187   SURFOBJ  *pso,
2188   PATHOBJ  *ppo,
2189   CLIPOBJ  *pco,
2190   XFORMOBJ  *pxo,
2191   BRUSHOBJ  *pbo,
2192   POINTL  *pptlBrushOrg,
2193   LINEATTRS  *plineattrs,
2194   MIX  mix);
2195 
2196 WIN32KAPI
2197 WINBOOL
2198 APIENTRY
2199 EngTextOut(
2200   SURFOBJ  *pso,
2201   STROBJ  *pstro,
2202   FONTOBJ  *pfo,
2203   CLIPOBJ  *pco,
2204   RECTL  *prclExtra,
2205   RECTL  *prclOpaque,
2206   BRUSHOBJ  *pboFore,
2207   BRUSHOBJ  *pboOpaque,
2208   POINTL  *pptlOrg,
2209   MIX  mix);
2210 
2211 WIN32KAPI
2212 WINBOOL
2213 APIENTRY
2214 EngTransparentBlt(
2215   SURFOBJ  *psoDst,
2216   SURFOBJ  *psoSrc,
2217   CLIPOBJ  *pco,
2218   XLATEOBJ  *pxlo,
2219   RECTL  *prclDst,
2220   RECTL  *prclSrc,
2221   ULONG  iTransColor,
2222   ULONG  ulReserved);
2223 
2224 WIN32KAPI
2225 VOID
2226 APIENTRY
2227 EngUnicodeToMultiByteN(
2228   PCHAR  MultiByteString,
2229   ULONG  MaxBytesInMultiByteString,
2230   PULONG  BytesInMultiByteString,
2231   PWSTR  UnicodeString,
2232   ULONG  BytesInUnicodeString);
2233 
2234 WIN32KAPI
2235 VOID
2236 APIENTRY
2237 EngUnloadImage(
2238   HANDLE  hModule);
2239 
2240 WIN32KAPI
2241 WINBOOL
2242 APIENTRY
2243 EngUnlockDirectDrawSurface(
2244   PDD_SURFACE_LOCAL  pSurface);
2245 
2246 WIN32KAPI
2247 WINBOOL
2248 APIENTRY
2249 EngUnlockDriverObj(
2250   HDRVOBJ  hdo);
2251 
2252 WIN32KAPI
2253 VOID
2254 APIENTRY
2255 EngUnlockSurface(
2256   SURFOBJ  *pso);
2257 
2258 WIN32KAPI
2259 WINBOOL
2260 APIENTRY
2261 EngUnmapEvent(
2262   PEVENT  pEvent);
2263 
2264 WIN32KAPI
2265 WINBOOL
2266 APIENTRY
2267 EngUnmapFile(
2268   ULONG_PTR  iFile);
2269 
2270 WIN32KAPI
2271 VOID
2272 APIENTRY
2273 EngUnmapFontFile(
2274   ULONG_PTR  iFile);
2275 
2276 WIN32KAPI
2277 VOID
2278 APIENTRY
2279 EngUnmapFontFileFD(
2280   ULONG_PTR  iFile);
2281 
2282 WIN32KAPI
2283 VOID
2284 APIENTRY
2285 EngUnsecureMem(
2286   HANDLE  hSecure);
2287 
2288 WIN32KAPI
2289 WINBOOL
2290 APIENTRY
2291 EngWaitForSingleObject(
2292   PEVENT  pEvent,
2293   PLARGE_INTEGER  pTimeOut);
2294 
2295 WIN32KAPI
2296 INT
2297 APIENTRY
2298 EngWideCharToMultiByte(
2299   UINT  CodePage,
2300   LPWSTR  WideCharString,
2301   INT  BytesInWideCharString,
2302   LPSTR  MultiByteString,
2303   INT  BytesInMultiByteString);
2304 
2305 WIN32KAPI
2306 WINBOOL
2307 APIENTRY
2308 EngWritePrinter(
2309   HANDLE  hPrinter,
2310   LPVOID  pBuf,
2311   DWORD  cbBuf,
2312   LPDWORD  pcWritten);
2313 
2314 #if defined(_X86_) && !defined(USERMODE_DRIVER)
2315 WIN32KAPI
2316 VOID
2317 APIENTRY
2318 FLOATOBJ_Add(
2319   PFLOATOBJ  pf,
2320   PFLOATOBJ  pf1);
2321 
2322 WIN32KAPI
2323 VOID
2324 APIENTRY
2325 FLOATOBJ_AddFloat(
2326   PFLOATOBJ  pf,
2327   FLOATL  f);
2328 
2329 WIN32KAPI
2330 VOID
2331 APIENTRY
2332 FLOATOBJ_AddLong(
2333   PFLOATOBJ  pf,
2334   LONG  l);
2335 
2336 WIN32KAPI
2337 VOID
2338 APIENTRY
2339 FLOATOBJ_Div(
2340   PFLOATOBJ  pf,
2341   PFLOATOBJ  pf1);
2342 
2343 WIN32KAPI
2344 VOID
2345 APIENTRY
2346 FLOATOBJ_DivFloat(
2347   PFLOATOBJ  pf,
2348   FLOATL  f);
2349 
2350 WIN32KAPI
2351 VOID
2352 APIENTRY
2353 FLOATOBJ_DivLong(
2354   PFLOATOBJ  pf,
2355   LONG  l);
2356 
2357 WIN32KAPI
2358 WINBOOL
2359 APIENTRY
2360 FLOATOBJ_Equal(
2361   PFLOATOBJ  pf,
2362   PFLOATOBJ  pf1);
2363 
2364 WIN32KAPI
2365 WINBOOL
2366 APIENTRY
2367 FLOATOBJ_EqualLong(
2368   PFLOATOBJ  pf,
2369   LONG  l);
2370 
2371 WIN32KAPI
2372 LONG
2373 APIENTRY
2374 FLOATOBJ_GetFloat(
2375   PFLOATOBJ  pf);
2376 
2377 WIN32KAPI
2378 LONG
2379 APIENTRY
2380 FLOATOBJ_GetLong(
2381   PFLOATOBJ  pf);
2382 
2383 WIN32KAPI
2384 WINBOOL
2385 APIENTRY
2386 FLOATOBJ_GreaterThan(
2387   PFLOATOBJ  pf,
2388   PFLOATOBJ  pf1);
2389 
2390 WIN32KAPI
2391 WINBOOL
2392 APIENTRY
2393 FLOATOBJ_GreaterThanLong(
2394   PFLOATOBJ  pf,
2395   LONG  l);
2396 
2397 WIN32KAPI
2398 WINBOOL
2399 APIENTRY
2400 FLOATOBJ_LessThan(
2401   PFLOATOBJ  pf,
2402   PFLOATOBJ  pf1);
2403 
2404 WIN32KAPI
2405 WINBOOL
2406 APIENTRY
2407 FLOATOBJ_LessThanLong(
2408   PFLOATOBJ  pf,
2409   LONG  l);
2410 
2411 WIN32KAPI
2412 VOID
2413 APIENTRY
2414 FLOATOBJ_Mul(
2415   PFLOATOBJ  pf,
2416   PFLOATOBJ  pf1);
2417 
2418 WIN32KAPI
2419 VOID
2420 APIENTRY
2421 FLOATOBJ_MulFloat(
2422   PFLOATOBJ  pf,
2423   FLOATL  f);
2424 
2425 WIN32KAPI
2426 VOID
2427 APIENTRY
2428 FLOATOBJ_MulLong(
2429   PFLOATOBJ  pf,
2430   LONG  l);
2431 
2432 WIN32KAPI
2433 VOID
2434 APIENTRY
2435 FLOATOBJ_Neg(
2436   PFLOATOBJ  pf);
2437 
2438 WIN32KAPI
2439 VOID
2440 APIENTRY
2441 FLOATOBJ_SetFloat(
2442   PFLOATOBJ  pf,
2443   FLOATL  f);
2444 
2445 WIN32KAPI
2446 VOID
2447 APIENTRY
2448 FLOATOBJ_SetLong(
2449   PFLOATOBJ  pf,
2450   LONG  l);
2451 
2452 WIN32KAPI
2453 VOID
2454 APIENTRY
2455 FLOATOBJ_Sub(
2456   PFLOATOBJ  pf,
2457   PFLOATOBJ  pf1);
2458 
2459 WIN32KAPI
2460 VOID
2461 APIENTRY
2462 FLOATOBJ_SubFloat(
2463   PFLOATOBJ  pf,
2464   FLOATL  f);
2465 
2466 WIN32KAPI
2467 VOID
2468 APIENTRY
2469 FLOATOBJ_SubLong(
2470   PFLOATOBJ  pf,
2471   LONG  l);
2472 
2473 #else
2474 
2475 #define FLOATOBJ_SetFloat(pf, f)        {*(pf) = (f);}
2476 #define FLOATOBJ_SetLong(pf, l)         {*(pf) = (FLOAT)(l);}
2477 #define FLOATOBJ_GetFloat(pf)           (*(PULONG)(pf))
2478 #define FLOATOBJ_GetLong(pf)            ((LONG)*(pf))
2479 #define FLOATOBJ_Add(pf, pf1)           {*(pf) += *(pf1);}
2480 #define FLOATOBJ_AddFloat(pf, f)        {*(pf) += (f);}
2481 #define FLOATOBJ_AddLong(pf, l)         {*(pf) += (l);}
2482 #define FLOATOBJ_Sub(pf, pf1)           {*(pf) -= *(pf1);}
2483 #define FLOATOBJ_SubFloat(pf, f)        {*(pf) -= (f);}
2484 #define FLOATOBJ_SubLong(pf, l)         {*(pf) -= (l);}
2485 #define FLOATOBJ_Mul(pf, pf1)           {*(pf) *= *(pf1);}
2486 #define FLOATOBJ_MulFloat(pf, f)        {*(pf) *= (f);}
2487 #define FLOATOBJ_MulLong(pf, l)         {*(pf) *= (l);}
2488 #define FLOATOBJ_Div(pf, pf1)           {*(pf) /= *(pf1);}
2489 #define FLOATOBJ_DivFloat(pf, f)        {*(pf) /= (f);}
2490 #define FLOATOBJ_DivLong(pf, l)         {*(pf) /= (l);}
2491 #define FLOATOBJ_Neg(pf)                {*(pf) = -(*(pf));}
2492 #define FLOATOBJ_Equal(pf, pf1)         (*(pf) == *(pf1))
2493 #define FLOATOBJ_GreaterThan(pf, pf1)   (*(pf) > *(pf1))
2494 #define FLOATOBJ_LessThan(pf, pf1)      (*(pf) < *(pf1))
2495 #define FLOATOBJ_EqualLong(pf, l)       (*(pf) == (FLOAT)(l))
2496 #define FLOATOBJ_GreaterThanLong(pf, l) (*(pf) > (FLOAT)(l))
2497 #define FLOATOBJ_LessThanLong(pf, l)    (*(pf) < (FLOAT)(l))
2498 
2499 #endif
2500 
2501 WIN32KAPI
2502 ULONG
2503 APIENTRY
2504 FONTOBJ_cGetAllGlyphHandles(
2505   FONTOBJ  *pfo,
2506   HGLYPH  *phg);
2507 
2508 WIN32KAPI
2509 ULONG
2510 APIENTRY
2511 FONTOBJ_cGetGlyphs(
2512   FONTOBJ  *pfo,
2513   ULONG  iMode,
2514   ULONG  cGlyph,
2515   HGLYPH  *phg,
2516   PVOID  *ppvGlyph);
2517 
2518 WIN32KAPI
2519 FD_GLYPHSET*
2520 APIENTRY
2521 FONTOBJ_pfdg(
2522   FONTOBJ  *pfo);
2523 
2524 WIN32KAPI
2525 IFIMETRICS*
2526 APIENTRY
2527 FONTOBJ_pifi(
2528   FONTOBJ  *pfo);
2529 
2530 WIN32KAPI
2531 PBYTE
2532 APIENTRY
2533 FONTOBJ_pjOpenTypeTablePointer(
2534   FONTOBJ  *pfo,
2535   ULONG  ulTag,
2536   ULONG  *pcjTable);
2537 
2538 WIN32KAPI
2539 PFD_GLYPHATTR
2540 APIENTRY
2541 FONTOBJ_pQueryGlyphAttrs(
2542   FONTOBJ  *pfo,
2543   ULONG  iMode);
2544 
2545 WIN32KAPI
2546 PVOID
2547 APIENTRY
2548 FONTOBJ_pvTrueTypeFontFile(
2549   FONTOBJ  *pfo,
2550   ULONG  *pcjFile);
2551 
2552 WIN32KAPI
2553 LPWSTR
2554 APIENTRY
2555 FONTOBJ_pwszFontFilePaths(
2556   FONTOBJ  *pfo,
2557   ULONG  *pcwc);
2558 
2559 WIN32KAPI
2560 XFORMOBJ*
2561 APIENTRY
2562 FONTOBJ_pxoGetXform(
2563   FONTOBJ  *pfo);
2564 
2565 WIN32KAPI
2566 VOID
2567 APIENTRY
2568 FONTOBJ_vGetInfo(
2569   FONTOBJ  *pfo,
2570   ULONG  cjSize,
2571   FONTINFO  *pfi);
2572 
2573 
2574 
2575 WIN32KAPI
2576 LONG
2577 APIENTRY
2578 HT_ComputeRGBGammaTable(
2579   USHORT  GammaTableEntries,
2580   USHORT  GammaTableType,
2581   USHORT  RedGamma,
2582   USHORT  GreenGamma,
2583   USHORT  BlueGamma,
2584   LPBYTE  pGammaTable);
2585 
2586 WIN32KAPI
2587 LONG
2588 APIENTRY
2589 HT_Get8BPPFormatPalette(
2590   LPPALETTEENTRY  pPaletteEntry,
2591   USHORT  RedGamma,
2592   USHORT  GreenGamma,
2593   USHORT  BlueGamma);
2594 
2595 WIN32KAPI
2596 LONG
2597 APIENTRY
2598 HT_Get8BPPMaskPalette(
2599   LPPALETTEENTRY  pPaletteEntry,
2600   WINBOOL  Use8BPPMaskPal,
2601   BYTE  CMYMask,
2602   USHORT  RedGamma,
2603   USHORT  GreenGamma,
2604   USHORT  BlueGamma);
2605 
2606 WIN32KAPI
2607 LONG
2608 APIENTRY
2609 HTUI_DeviceColorAdjustment(
2610   LPSTR  pDeviceName,
2611   PDEVHTADJDATA  pDevHTAdjData);
2612 
2613 WIN32KAPI
2614 ULONG
2615 APIENTRY
2616 PALOBJ_cGetColors(
2617   PALOBJ  *ppalo,
2618   ULONG  iStart,
2619   ULONG  cColors,
2620   ULONG  *pulColors);
2621 
2622 WIN32KAPI
2623 WINBOOL
2624 APIENTRY
2625 PATHOBJ_bCloseFigure(
2626   PATHOBJ  *ppo);
2627 
2628 WIN32KAPI
2629 WINBOOL
2630 APIENTRY
2631 PATHOBJ_bEnum(
2632   PATHOBJ  *ppo,
2633   PATHDATA  *ppd);
2634 
2635 WIN32KAPI
2636 WINBOOL
2637 APIENTRY
2638 PATHOBJ_bEnumClipLines(
2639   PATHOBJ  *ppo,
2640   ULONG  cb,
2641   CLIPLINE  *pcl);
2642 
2643 WIN32KAPI
2644 WINBOOL
2645 APIENTRY
2646 PATHOBJ_bMoveTo(
2647   PATHOBJ  *ppo,
2648   POINTFIX  ptfx);
2649 
2650 WIN32KAPI
2651 WINBOOL
2652 APIENTRY
2653 PATHOBJ_bPolyBezierTo(
2654   PATHOBJ  *ppo,
2655   POINTFIX  *pptfx,
2656   ULONG  cptfx);
2657 
2658 WIN32KAPI
2659 WINBOOL
2660 APIENTRY
2661 PATHOBJ_bPolyLineTo(
2662   PATHOBJ  *ppo,
2663   POINTFIX  *pptfx,
2664   ULONG  cptfx);
2665 
2666 WIN32KAPI
2667 VOID
2668 APIENTRY
2669 PATHOBJ_vEnumStart(
2670   PATHOBJ  *ppo);
2671 
2672 WIN32KAPI
2673 VOID
2674 APIENTRY
2675 PATHOBJ_vEnumStartClipLines(
2676   PATHOBJ  *ppo,
2677   CLIPOBJ  *pco,
2678   SURFOBJ  *pso,
2679   LINEATTRS  *pla);
2680 
2681 WIN32KAPI
2682 VOID
2683 APIENTRY
2684 PATHOBJ_vGetBounds(
2685   PATHOBJ  *ppo,
2686   PRECTFX  prectfx);
2687 
2688 WIN32KAPI
2689 WINBOOL
2690 APIENTRY
2691 STROBJ_bEnum(
2692   STROBJ  *pstro,
2693   ULONG  *pc,
2694   PGLYPHPOS  *ppgpos);
2695 
2696 WIN32KAPI
2697 WINBOOL
2698 APIENTRY
2699 STROBJ_bEnumPositionsOnly(
2700   STROBJ  *pstro,
2701   ULONG  *pc,
2702   PGLYPHPOS  *ppgpos);
2703 
2704 WIN32KAPI
2705 WINBOOL
2706 APIENTRY
2707 STROBJ_bGetAdvanceWidths(
2708   STROBJ  *pso,
2709   ULONG  iFirst,
2710   ULONG  c,
2711   POINTQF  *pptqD);
2712 
2713 WIN32KAPI
2714 DWORD
2715 APIENTRY
2716 STROBJ_dwGetCodePage(
2717   STROBJ  *pstro);
2718 
2719 WIN32KAPI
2720 FIX
2721 APIENTRY
2722 STROBJ_fxBreakExtra(
2723   STROBJ  *pstro);
2724 
2725 WIN32KAPI
2726 FIX
2727 APIENTRY
2728 STROBJ_fxCharacterExtra(
2729   STROBJ  *pstro);
2730 
2731 WIN32KAPI
2732 VOID
2733 APIENTRY
2734 STROBJ_vEnumStart(
2735   STROBJ  *pstro);
2736 
2737 WIN32KAPI
2738 WINBOOL
2739 APIENTRY
2740 WNDOBJ_bEnum(
2741   WNDOBJ  *pwo,
2742   ULONG  cj,
2743   ULONG  *pul);
2744 
2745 WIN32KAPI
2746 ULONG
2747 APIENTRY
2748 WNDOBJ_cEnumStart(
2749   WNDOBJ  *pwo,
2750   ULONG  iType,
2751   ULONG  iDirection,
2752   ULONG  cLimit);
2753 
2754 WIN32KAPI
2755 VOID
2756 APIENTRY
2757 WNDOBJ_vSetConsumer(
2758   WNDOBJ  *pwo,
2759   PVOID  pvConsumer);
2760 
2761 /* XFORMOBJ_bApplyXform.iMode constants */
2762 #define XF_LTOL                           __MSABI_LONG(0)
2763 #define XF_INV_LTOL                       __MSABI_LONG(1)
2764 #define XF_LTOFX                          __MSABI_LONG(2)
2765 #define XF_INV_FXTOL                      __MSABI_LONG(3)
2766 
2767 WIN32KAPI
2768 WINBOOL
2769 APIENTRY
2770 XFORMOBJ_bApplyXform(
2771   XFORMOBJ  *pxo,
2772   ULONG  iMode,
2773   ULONG  cPoints,
2774   PVOID  pvIn,
2775   PVOID  pvOut);
2776 
2777 WIN32KAPI
2778 ULONG
2779 APIENTRY
2780 XFORMOBJ_iGetFloatObjXform(
2781   XFORMOBJ  *pxo,
2782   FLOATOBJ_XFORM  *pxfo);
2783 
2784 WIN32KAPI
2785 ULONG
2786 APIENTRY
2787 XFORMOBJ_iGetXform(
2788   XFORMOBJ  *pxo,
2789   XFORML  *pxform);
2790 
2791 /* XLATEOBJ_cGetPalette.iPal constants */
2792 #define XO_SRCPALETTE                     1
2793 #define XO_DESTPALETTE                    2
2794 #define XO_DESTDCPALETTE                  3
2795 #define XO_SRCBITFIELDS                   4
2796 #define XO_DESTBITFIELDS                  5
2797 
2798 WIN32KAPI
2799 ULONG
2800 APIENTRY
2801 XLATEOBJ_cGetPalette(
2802   XLATEOBJ  *pxlo,
2803   ULONG  iPal,
2804   ULONG  cPal,
2805   ULONG  *pPal);
2806 
2807 WIN32KAPI
2808 HANDLE
2809 APIENTRY
2810 XLATEOBJ_hGetColorTransform(
2811   XLATEOBJ  *pxlo);
2812 
2813 WIN32KAPI
2814 ULONG
2815 APIENTRY
2816 XLATEOBJ_iXlate(
2817   XLATEOBJ  *pxlo,
2818   ULONG  iColor);
2819 
2820 WIN32KAPI
2821 ULONG*
2822 APIENTRY
2823 XLATEOBJ_piVector(
2824   XLATEOBJ  *pxlo);
2825 
2826 
2827 
2828 /* Graphics Driver Functions */
2829 
2830 WINBOOL
2831 APIENTRY
2832 DrvAlphaBlend(
2833   SURFOBJ  *psoDest,
2834   SURFOBJ  *psoSrc,
2835   CLIPOBJ  *pco,
2836   XLATEOBJ  *pxlo,
2837   RECTL  *prclDest,
2838   RECTL  *prclSrc,
2839   BLENDOBJ  *pBlendObj);
2840 
2841 WINBOOL
2842 APIENTRY
2843 DrvAssertMode(
2844   DHPDEV  dhpdev,
2845   WINBOOL  bEnable);
2846 
2847 WINBOOL
2848 APIENTRY
2849 DrvBitBlt(
2850   SURFOBJ  *psoTrg,
2851   SURFOBJ  *psoSrc,
2852   SURFOBJ  *psoMask,
2853   CLIPOBJ  *pco,
2854   XLATEOBJ  *pxlo,
2855   RECTL  *prclTrg,
2856   POINTL  *pptlSrc,
2857   POINTL  *pptlMask,
2858   BRUSHOBJ  *pbo,
2859   POINTL  *pptlBrush,
2860   ROP4  rop4);
2861 
2862 VOID
2863 APIENTRY
2864 DrvCompletePDEV(
2865   DHPDEV  dhpdev,
2866   HDEV  hdev);
2867 
2868 WINBOOL
2869 APIENTRY
2870 DrvCopyBits(
2871   SURFOBJ  *psoDest,
2872   SURFOBJ  *psoSrc,
2873   CLIPOBJ  *pco,
2874   XLATEOBJ  *pxlo,
2875   RECTL  *prclDest,
2876   POINTL  *pptlSrc);
2877 
2878 HBITMAP
2879 APIENTRY
2880 DrvCreateDeviceBitmap(
2881   DHPDEV  dhpdev,
2882   SIZEL  sizl,
2883   ULONG  iFormat);
2884 
2885 VOID
2886 APIENTRY
2887 DrvDeleteDeviceBitmap(
2888   DHSURF  dhsurf);
2889 
2890 HBITMAP
2891 APIENTRY
2892 DrvDeriveSurface(
2893   DD_DIRECTDRAW_GLOBAL  *pDirectDraw,
2894   DD_SURFACE_LOCAL  *pSurface);
2895 
2896 LONG
2897 APIENTRY
2898 DrvDescribePixelFormat(
2899   DHPDEV  dhpdev,
2900   LONG  iPixelFormat,
2901   ULONG  cjpfd,
2902   PIXELFORMATDESCRIPTOR  *ppfd);
2903 
2904 VOID
2905 APIENTRY
2906 DrvDestroyFont(
2907   FONTOBJ  *pfo);
2908 
2909 VOID
2910 APIENTRY
2911 DrvDisableDriver(
2912   VOID);
2913 
2914 VOID
2915 APIENTRY
2916 DrvDisablePDEV(
2917   DHPDEV  dhpdev);
2918 
2919 VOID
2920 APIENTRY
2921 DrvDisableSurface(
2922   DHPDEV  dhpdev);
2923 
2924 #define DM_DEFAULT                        0x00000001
2925 #define DM_MONOCHROME                     0x00000002
2926 
2927 ULONG
2928 APIENTRY
2929 DrvDitherColor(
2930   DHPDEV  dhpdev,
2931   ULONG  iMode,
2932   ULONG  rgb,
2933   ULONG  *pul);
2934 
2935 ULONG
2936 APIENTRY
2937 DrvDrawEscape(
2938   SURFOBJ  *pso,
2939   ULONG  iEsc,
2940   CLIPOBJ  *pco,
2941   RECTL  *prcl,
2942   ULONG  cjIn,
2943   PVOID  pvIn);
2944 
2945 WINBOOL
2946 APIENTRY
2947 DrvEnableDriver(
2948   ULONG  iEngineVersion,
2949   ULONG  cj,
2950   DRVENABLEDATA  *pded);
2951 
2952 DHPDEV
2953 APIENTRY
2954 DrvEnablePDEV(
2955   DEVMODEW  *pdm,
2956   LPWSTR  pwszLogAddress,
2957   ULONG  cPat,
2958   HSURF  *phsurfPatterns,
2959   ULONG  cjCaps,
2960   ULONG  *pdevcaps,
2961   ULONG  cjDevInfo,
2962   DEVINFO  *pdi,
2963   HDEV  hdev,
2964   LPWSTR  pwszDeviceName,
2965   HANDLE  hDriver);
2966 
2967 HSURF
2968 APIENTRY
2969 DrvEnableSurface(
2970   DHPDEV  dhpdev);
2971 
2972 /* DrvEndDoc.fl constants */
2973 #define ED_ABORTDOC                       0x00000001
2974 
2975 WINBOOL
2976 APIENTRY
2977 DrvEndDoc(
2978   SURFOBJ  *pso,
2979   FLONG  fl);
2980 
2981 ULONG
2982 APIENTRY
2983 DrvEscape(
2984   SURFOBJ  *pso,
2985   ULONG  iEsc,
2986   ULONG  cjIn,
2987   PVOID  pvIn,
2988   ULONG  cjOut,
2989   PVOID  pvOut);
2990 
2991 WINBOOL
2992 APIENTRY
2993 DrvFillPath(
2994   SURFOBJ  *pso,
2995   PATHOBJ  *ppo,
2996   CLIPOBJ  *pco,
2997   BRUSHOBJ  *pbo,
2998   POINTL  *pptlBrushOrg,
2999   MIX  mix,
3000   FLONG  flOptions);
3001 
3002 ULONG
3003 APIENTRY
3004 DrvFontManagement(
3005   SURFOBJ  *pso,
3006   FONTOBJ  *pfo,
3007   ULONG  iMode,
3008   ULONG  cjIn,
3009   PVOID  pvIn,
3010   ULONG  cjOut,
3011   PVOID  pvOut);
3012 
3013 VOID
3014 APIENTRY
3015 DrvFree(
3016   PVOID  pv,
3017   ULONG_PTR  id);
3018 
3019 /* DrvGetGlyphMode return values */
3020 #define FO_HGLYPHS                        __MSABI_LONG(0)
3021 #define FO_GLYPHBITS                      __MSABI_LONG(1)
3022 #define FO_PATHOBJ                        __MSABI_LONG(2)
3023 
3024 ULONG
3025 APIENTRY
3026 DrvGetGlyphMode(
3027   DHPDEV  dhpdev,
3028   FONTOBJ  *pfo);
3029 
3030 ULONG
3031 APIENTRY
3032 DrvGetModes(
3033   HANDLE  hDriver,
3034   ULONG  cjSize,
3035   DEVMODEW  *pdm);
3036 
3037 PVOID
3038 APIENTRY
3039 DrvGetTrueTypeFile(
3040   ULONG_PTR  iFile,
3041   ULONG  *pcj);
3042 
3043 WINBOOL
3044 APIENTRY
3045 DrvGradientFill(
3046   SURFOBJ  *psoDest,
3047   CLIPOBJ  *pco,
3048   XLATEOBJ  *pxlo,
3049   TRIVERTEX  *pVertex,
3050   ULONG  nVertex,
3051   PVOID  pMesh,
3052   ULONG  nMesh,
3053   RECTL  *prclExtents,
3054   POINTL  *pptlDitherOrg,
3055   ULONG  ulMode);
3056 
3057 WINBOOL
3058 APIENTRY
3059 DrvIcmCheckBitmapBits(
3060   DHPDEV  dhpdev,
3061   HANDLE  hColorTransform,
3062   SURFOBJ  *pso,
3063   PBYTE  paResults);
3064 
3065 HANDLE
3066 APIENTRY
3067 DrvIcmCreateColorTransform(
3068   DHPDEV  dhpdev,
3069   LPLOGCOLORSPACEW  pLogColorSpace,
3070   PVOID  pvSourceProfile,
3071   ULONG  cjSourceProfile,
3072   PVOID  pvDestProfile,
3073   ULONG  cjDestProfile,
3074   PVOID  pvTargetProfile,
3075   ULONG  cjTargetProfile,
3076   DWORD  dwReserved);
3077 
3078 WINBOOL
3079 APIENTRY
3080 DrvIcmDeleteColorTransform(
3081   DHPDEV  dhpdev,
3082   HANDLE  hcmXform);
3083 
3084 /* DrvIcmSetDeviceGammaRamp.iFormat constants */
3085 #define IGRF_RGB_256BYTES                 0x00000000
3086 #define IGRF_RGB_256WORDS                 0x00000001
3087 
3088 WINBOOL
3089 APIENTRY
3090 DrvIcmSetDeviceGammaRamp(
3091   DHPDEV  dhpdev,
3092   ULONG  iFormat,
3093   LPVOID  lpRamp);
3094 
3095 WINBOOL
3096 APIENTRY
3097 DrvLineTo(
3098   SURFOBJ  *pso,
3099   CLIPOBJ  *pco,
3100   BRUSHOBJ  *pbo,
3101   LONG  x1,
3102   LONG  y1,
3103   LONG  x2,
3104   LONG  y2,
3105   RECTL  *prclBounds,
3106   MIX  mix);
3107 
3108 ULONG_PTR
3109 APIENTRY
3110 DrvLoadFontFile(
3111   ULONG  cFiles,
3112   ULONG_PTR  *piFile,
3113   PVOID  *ppvView,
3114   ULONG  *pcjView,
3115   DESIGNVECTOR  *pdv,
3116   ULONG  ulLangID,
3117   ULONG  ulFastCheckSum);
3118 
3119 VOID
3120 APIENTRY
3121 DrvMovePointer(
3122   SURFOBJ  *pso,
3123   LONG  x,
3124   LONG  y,
3125   RECTL  *prcl);
3126 
3127 WINBOOL
3128 APIENTRY
3129 DrvNextBand(
3130   SURFOBJ  *pso,
3131   POINTL  *pptl);
3132 
3133 VOID
3134 APIENTRY
3135 DrvNotify(
3136   SURFOBJ  *pso,
3137   ULONG  iType,
3138   PVOID  pvData);
3139 
3140 WINBOOL
3141 APIENTRY
3142 DrvOffset(
3143   SURFOBJ  *pso,
3144   LONG  x,
3145   LONG  y,
3146   FLONG  flReserved);
3147 
3148 WINBOOL
3149 APIENTRY
3150 DrvPaint(
3151   SURFOBJ  *pso,
3152   CLIPOBJ  *pco,
3153   BRUSHOBJ  *pbo,
3154   POINTL  *pptlBrushOrg,
3155   MIX  mix);
3156 
3157 WINBOOL
3158 APIENTRY
3159 DrvPlgBlt(
3160   SURFOBJ  *psoTrg,
3161   SURFOBJ  *psoSrc,
3162   SURFOBJ  *psoMsk,
3163   CLIPOBJ  *pco,
3164   XLATEOBJ  *pxlo,
3165   COLORADJUSTMENT  *pca,
3166   POINTL  *pptlBrushOrg,
3167   POINTFIX  *pptfx,
3168   RECTL  *prcl,
3169   POINTL  *pptl,
3170   ULONG  iMode);
3171 
3172 /* DrvQueryAdvanceWidths.iMode constants */
3173 #define QAW_GETWIDTHS                     0
3174 #define QAW_GETEASYWIDTHS                 1
3175 
3176 WINBOOL
3177 APIENTRY
3178 DrvQueryAdvanceWidths(
3179   DHPDEV  dhpdev,
3180   FONTOBJ  *pfo,
3181   ULONG  iMode,
3182   HGLYPH  *phg,
3183   PVOID  pvWidths,
3184   ULONG  cGlyphs);
3185 
3186 /* DrvQueryDeviceSupport.iType constants */
3187 #define QDS_CHECKJPEGFORMAT               0x00000000
3188 #define QDS_CHECKPNGFORMAT                0x00000001
3189 
3190 WINBOOL
3191 APIENTRY
3192 DrvQueryDeviceSupport(
3193   SURFOBJ  *pso,
3194   XLATEOBJ  *pxlo,
3195   XFORMOBJ  *pxo,
3196   ULONG  iType,
3197   ULONG  cjIn,
3198   PVOID  pvIn,
3199   ULONG  cjOut,
3200   PVOID  pvOut);
3201 
3202 /* DrvQueryDriverInfo.dwMode constants */
3203 #define DRVQUERY_USERMODE                 0x00000001
3204 
3205 WINBOOL
3206 APIENTRY
3207 DrvQueryDriverInfo(
3208   DWORD  dwMode,
3209   PVOID  pBuffer,
3210   DWORD  cbBuf,
3211   PDWORD  pcbNeeded);
3212 
3213 PIFIMETRICS
3214 APIENTRY
3215 DrvQueryFont(
3216   DHPDEV  dhpdev,
3217   ULONG_PTR  iFile,
3218   ULONG  iFace,
3219   ULONG_PTR  *pid);
3220 
3221 /* DrvQueryFontCaps.pulCaps constants */
3222 #define QC_OUTLINES                       0x00000001
3223 #define QC_1BIT                           0x00000002
3224 #define QC_4BIT                           0x00000004
3225 
3226 #define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)
3227 
3228 LONG
3229 APIENTRY
3230 DrvQueryFontCaps(
3231   ULONG  culCaps,
3232   ULONG  *pulCaps);
3233 
3234 /* DrvQueryFontData.iMode constants */
3235 #define QFD_GLYPHANDBITMAP                __MSABI_LONG(1)
3236 #define QFD_GLYPHANDOUTLINE               __MSABI_LONG(2)
3237 #define QFD_MAXEXTENTS                    __MSABI_LONG(3)
3238 #define QFD_TT_GLYPHANDBITMAP             __MSABI_LONG(4)
3239 #define QFD_TT_GRAY1_BITMAP               __MSABI_LONG(5)
3240 #define QFD_TT_GRAY2_BITMAP               __MSABI_LONG(6)
3241 #define QFD_TT_GRAY4_BITMAP               __MSABI_LONG(8)
3242 #define QFD_TT_GRAY8_BITMAP               __MSABI_LONG(9)
3243 
3244 #define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP
3245 
3246 LONG
3247 APIENTRY
3248 DrvQueryFontData(
3249   DHPDEV  dhpdev,
3250   FONTOBJ  *pfo,
3251   ULONG  iMode,
3252   HGLYPH  hg,
3253   GLYPHDATA  *pgd,
3254   PVOID  pv,
3255   ULONG  cjSize);
3256 
3257 /* DrvQueryFontFile.ulMode constants */
3258 #define QFF_DESCRIPTION                   0x00000001
3259 #define QFF_NUMFACES                      0x00000002
3260 
3261 LONG
3262 APIENTRY
3263 DrvQueryFontFile(
3264   ULONG_PTR  iFile,
3265   ULONG  ulMode,
3266   ULONG  cjBuf,
3267   ULONG  *pulBuf);
3268 
3269 /* DrvQueryFontTree.iMode constants */
3270 #define QFT_UNICODE                       __MSABI_LONG(0)
3271 #define QFT_LIGATURES                     __MSABI_LONG(1)
3272 #define QFT_KERNPAIRS                     __MSABI_LONG(2)
3273 #define QFT_GLYPHSET                      __MSABI_LONG(3)
3274 
3275 PVOID
3276 APIENTRY
3277 DrvQueryFontTree(
3278   DHPDEV  dhpdev,
3279   ULONG_PTR  iFile,
3280   ULONG  iFace,
3281   ULONG  iMode,
3282   ULONG_PTR  *pid);
3283 
3284 PFD_GLYPHATTR
3285 APIENTRY
3286 DrvQueryGlyphAttrs(
3287   FONTOBJ  *pfo,
3288   ULONG  iMode);
3289 
3290 ULONG
3291 APIENTRY
3292 DrvQueryPerBandInfo(
3293   SURFOBJ  *pso,
3294   PERBANDINFO  *pbi);
3295 
3296 /* DrvQueryTrueTypeOutline.bMetricsOnly constants */
3297 #define TTO_METRICS_ONLY                  0x00000001
3298 #define TTO_QUBICS                        0x00000002
3299 #define TTO_UNHINTED                      0x00000004
3300 
3301 LONG
3302 APIENTRY
3303 DrvQueryTrueTypeOutline(
3304   DHPDEV  dhpdev,
3305   FONTOBJ  *pfo,
3306   HGLYPH  hglyph,
3307   WINBOOL  bMetricsOnly,
3308   GLYPHDATA  *pgldt,
3309   ULONG  cjBuf,
3310   TTPOLYGONHEADER  *ppoly);
3311 
3312 LONG
3313 APIENTRY
3314 DrvQueryTrueTypeTable(
3315   ULONG_PTR  iFile,
3316   ULONG  ulFont,
3317   ULONG  ulTag,
3318   PTRDIFF  dpStart,
3319   ULONG  cjBuf,
3320   BYTE  *pjBuf,
3321   PBYTE  *ppjTable,
3322   ULONG *pcjTable);
3323 
3324 /* DrvRealizeBrush.iHatch constants */
3325 #define RB_DITHERCOLOR                    __MSABI_LONG(0x80000000)
3326 
3327 #define HS_DDI_MAX                        6
3328 
3329 WINBOOL
3330 APIENTRY
3331 DrvRealizeBrush(
3332   BRUSHOBJ  *pbo,
3333   SURFOBJ  *psoTarget,
3334   SURFOBJ  *psoPattern,
3335   SURFOBJ  *psoMask,
3336   XLATEOBJ  *pxlo,
3337   ULONG  iHatch);
3338 
3339 /* DrvResetDevice return values */
3340 #define DRD_SUCCESS                       0
3341 #define DRD_ERROR                         1
3342 
3343 ULONG
3344 APIENTRY
3345 DrvResetDevice(
3346   DHPDEV dhpdev,
3347   PVOID Reserved);
3348 
3349 WINBOOL
3350 APIENTRY
3351 DrvResetPDEV(
3352   DHPDEV  dhpdevOld,
3353   DHPDEV  dhpdevNew);
3354 
3355 /* DrvSaveScreenBits.iMode constants */
3356 #define SS_SAVE                           0x00000000
3357 #define SS_RESTORE                        0x00000001
3358 #define SS_FREE                           0x00000002
3359 
3360 ULONG_PTR
3361 APIENTRY
3362 DrvSaveScreenBits(
3363   SURFOBJ  *pso,
3364   ULONG  iMode,
3365   ULONG_PTR  ident,
3366   RECTL  *prcl);
3367 
3368 WINBOOL
3369 APIENTRY
3370 DrvSendPage(
3371   SURFOBJ  *pso);
3372 
3373 WINBOOL
3374 APIENTRY
3375 DrvSetPalette(
3376   DHPDEV  dhpdev,
3377   PALOBJ  *ppalo,
3378   FLONG  fl,
3379   ULONG  iStart,
3380   ULONG  cColors);
3381 
3382 WINBOOL
3383 APIENTRY
3384 DrvSetPixelFormat(
3385   SURFOBJ  *pso,
3386   LONG  iPixelFormat,
3387   HWND  hwnd);
3388 
3389 /* DrvSetPointerShape return values */
3390 #define SPS_ERROR                         0x00000000
3391 #define SPS_DECLINE                       0x00000001
3392 #define SPS_ACCEPT_NOEXCLUDE              0x00000002
3393 #define SPS_ACCEPT_EXCLUDE                0x00000003
3394 #define SPS_ACCEPT_SYNCHRONOUS            0x00000004
3395 
3396 /* DrvSetPointerShape.fl constants */
3397 #define SPS_CHANGE                        __MSABI_LONG(0x00000001)
3398 #define SPS_ASYNCCHANGE                   __MSABI_LONG(0x00000002)
3399 #define SPS_ANIMATESTART                  __MSABI_LONG(0x00000004)
3400 #define SPS_ANIMATEUPDATE                 __MSABI_LONG(0x00000008)
3401 #define SPS_ALPHA                         __MSABI_LONG(0x00000010)
3402 #define SPS_LENGTHMASK                    __MSABI_LONG(0x00000F00)
3403 #define SPS_FREQMASK                      __MSABI_LONG(0x000FF000)
3404 
3405 ULONG
3406 APIENTRY
3407 DrvSetPointerShape(
3408   SURFOBJ  *pso,
3409   SURFOBJ  *psoMask,
3410   SURFOBJ  *psoColor,
3411   XLATEOBJ  *pxlo,
3412   LONG  xHot,
3413   LONG  yHot,
3414   LONG  x,
3415   LONG  y,
3416   RECTL  *prcl,
3417   FLONG  fl);
3418 
3419 WINBOOL
3420 APIENTRY
3421 DrvStartBanding(
3422   SURFOBJ  *pso,
3423   POINTL  *pptl);
3424 
3425 WINBOOL
3426 APIENTRY
3427 DrvStartDoc(
3428   SURFOBJ  *pso,
3429   LPWSTR  pwszDocName,
3430   DWORD  dwJobId);
3431 
3432 WINBOOL
3433 APIENTRY
3434 DrvStartPage(
3435   SURFOBJ  *pso);
3436 
3437 WINBOOL
3438 APIENTRY
3439 DrvStretchBlt(
3440   SURFOBJ  *psoDest,
3441   SURFOBJ  *psoSrc,
3442   SURFOBJ  *psoMask,
3443   CLIPOBJ  *pco,
3444   XLATEOBJ  *pxlo,
3445   COLORADJUSTMENT  *pca,
3446   POINTL  *pptlHTOrg,
3447   RECTL  *prclDest,
3448   RECTL  *prclSrc,
3449   POINTL  *pptlMask,
3450   ULONG  iMode);
3451 
3452 WINBOOL
3453 APIENTRY
3454 DrvStretchBltROP(
3455   SURFOBJ  *psoDest,
3456   SURFOBJ  *psoSrc,
3457   SURFOBJ  *psoMask,
3458   CLIPOBJ  *pco,
3459   XLATEOBJ  *pxlo,
3460   COLORADJUSTMENT  *pca,
3461   POINTL  *pptlHTOrg,
3462   RECTL  *prclDest,
3463   RECTL  *prclSrc,
3464   POINTL  *pptlMask,
3465   ULONG  iMode,
3466   BRUSHOBJ  *pbo,
3467   DWORD  rop4);
3468 
3469 WINBOOL
3470 APIENTRY
3471 DrvStrokeAndFillPath(
3472   SURFOBJ  *pso,
3473   PATHOBJ  *ppo,
3474   CLIPOBJ  *pco,
3475   XFORMOBJ  *pxo,
3476   BRUSHOBJ  *pboStroke,
3477   LINEATTRS  *plineattrs,
3478   BRUSHOBJ  *pboFill,
3479   POINTL  *pptlBrushOrg,
3480   MIX  mixFill,
3481   FLONG  flOptions);
3482 
3483 WINBOOL
3484 APIENTRY
3485 DrvStrokePath(
3486   SURFOBJ  *pso,
3487   PATHOBJ  *ppo,
3488   CLIPOBJ  *pco,
3489   XFORMOBJ  *pxo,
3490   BRUSHOBJ  *pbo,
3491   POINTL  *pptlBrushOrg,
3492   LINEATTRS  *plineattrs,
3493   MIX  mix);
3494 
3495 WINBOOL
3496 APIENTRY
3497 DrvSwapBuffers(
3498   SURFOBJ  *pso,
3499   WNDOBJ  *pwo);
3500 
3501 VOID
3502 APIENTRY
3503 DrvSynchronize(
3504   DHPDEV  dhpdev,
3505   RECTL  *prcl);
3506 
3507 /* DrvSynchronizeSurface.fl constants */
3508 #define DSS_TIMER_EVENT                   0x00000001
3509 #define DSS_FLUSH_EVENT                   0x00000002
3510 
3511 VOID
3512 APIENTRY
3513 DrvSynchronizeSurface(
3514   SURFOBJ  *pso,
3515   RECTL  *prcl,
3516   FLONG  fl);
3517 
3518 WINBOOL
3519 APIENTRY
3520 DrvTextOut(
3521   SURFOBJ  *pso,
3522   STROBJ  *pstro,
3523   FONTOBJ  *pfo,
3524   CLIPOBJ  *pco,
3525   RECTL  *prclExtra,
3526   RECTL  *prclOpaque,
3527   BRUSHOBJ  *pboFore,
3528   BRUSHOBJ  *pboOpaque,
3529   POINTL  *pptlOrg,
3530   MIX  mix);
3531 
3532 WINBOOL
3533 APIENTRY
3534 DrvTransparentBlt(
3535   SURFOBJ  *psoDst,
3536   SURFOBJ  *psoSrc,
3537   CLIPOBJ  *pco,
3538   XLATEOBJ  *pxlo,
3539   RECTL  *prclDst,
3540   RECTL  *prclSrc,
3541   ULONG  iTransColor,
3542   ULONG  ulReserved);
3543 
3544 WINBOOL
3545 APIENTRY
3546 DrvUnloadFontFile(
3547   ULONG_PTR  iFile);
3548 
3549 typedef WINBOOL
3550 (APIENTRY *PFN_DrvAlphaBlend)(
3551   SURFOBJ  *psoDest,
3552   SURFOBJ  *psoSrc,
3553   CLIPOBJ  *pco,
3554   XLATEOBJ  *pxlo,
3555   RECTL  *prclDest,
3556   RECTL  *prclSrc,
3557   BLENDOBJ  *pBlendObj);
3558 
3559 typedef WINBOOL
3560 (APIENTRY *PFN_DrvAssertMode)(
3561   DHPDEV  dhpdev,
3562   WINBOOL  bEnable);
3563 
3564 typedef WINBOOL
3565 (APIENTRY *PFN_DrvBitBlt)(
3566   SURFOBJ  *psoTrg,
3567   SURFOBJ  *psoSrc,
3568   SURFOBJ  *psoMask,
3569   CLIPOBJ  *pco,
3570   XLATEOBJ  *pxlo,
3571   RECTL  *prclTrg,
3572   POINTL  *pptlSrc,
3573   POINTL  *pptlMask,
3574   BRUSHOBJ  *pbo,
3575   POINTL  *pptlBrush,
3576   ROP4  rop4);
3577 
3578 typedef VOID
3579 (APIENTRY *PFN_DrvCompletePDEV)(
3580   DHPDEV  dhpdev,
3581   HDEV  hdev);
3582 
3583 typedef WINBOOL
3584 (APIENTRY *PFN_DrvCopyBits)(
3585   SURFOBJ  *psoDest,
3586   SURFOBJ  *psoSrc,
3587   CLIPOBJ  *pco,
3588   XLATEOBJ  *pxlo,
3589   RECTL  *prclDest,
3590   POINTL  *pptlSrc);
3591 
3592 typedef HBITMAP
3593 (APIENTRY *PFN_DrvCreateDeviceBitmap)(
3594   DHPDEV  dhpdev,
3595   SIZEL  sizl,
3596   ULONG  iFormat);
3597 
3598 typedef VOID
3599 (APIENTRY *PFN_DrvDeleteDeviceBitmap)(
3600   DHSURF  dhsurf);
3601 
3602 typedef HBITMAP
3603 (APIENTRY *PFN_DrvDeriveSurface)(
3604   DD_DIRECTDRAW_GLOBAL  *pDirectDraw,
3605   DD_SURFACE_LOCAL  *pSurface);
3606 
3607 typedef LONG
3608 (APIENTRY *PFN_DrvDescribePixelFormat)(
3609   DHPDEV  dhpdev,
3610   LONG  iPixelFormat,
3611   ULONG  cjpfd,
3612   PIXELFORMATDESCRIPTOR  *ppfd);
3613 
3614 typedef VOID
3615 (APIENTRY *PFN_DrvDestroyFont)(
3616   FONTOBJ  *pfo);
3617 
3618 typedef VOID
3619 (APIENTRY *PFN_DrvDisableDriver)(
3620   VOID);
3621 
3622 typedef VOID
3623 (APIENTRY *PFN_DrvDisablePDEV)(
3624   DHPDEV  dhpdev);
3625 
3626 typedef VOID
3627 (APIENTRY *PFN_DrvDisableSurface)(
3628   DHPDEV  dhpdev);
3629 
3630 typedef ULONG
3631 (APIENTRY *PFN_DrvDitherColor)(
3632   DHPDEV  dhpdev,
3633   ULONG  iMode,
3634   ULONG  rgb,
3635   ULONG  *pul);
3636 
3637 typedef ULONG
3638 (APIENTRY *PFN_DrvDrawEscape)(
3639   SURFOBJ  *pso,
3640   ULONG  iEsc,
3641   CLIPOBJ  *pco,
3642   RECTL  *prcl,
3643   ULONG  cjIn,
3644   PVOID  pvIn);
3645 
3646 typedef WINBOOL
3647 (APIENTRY *PFN_DrvEnableDriver)(
3648   ULONG  iEngineVersion,
3649   ULONG  cj,
3650   DRVENABLEDATA  *pded);
3651 
3652 typedef DHPDEV
3653 (APIENTRY *PFN_DrvEnablePDEV)(
3654   DEVMODEW  *pdm,
3655   LPWSTR  pwszLogAddress,
3656   ULONG  cPat,
3657   HSURF  *phsurfPatterns,
3658   ULONG  cjCaps,
3659   GDIINFO  *pdevcaps,
3660   ULONG  cjDevInfo,
3661   DEVINFO  *pdi,
3662   HDEV  hdev,
3663   LPWSTR  pwszDeviceName,
3664   HANDLE  hDriver);
3665 
3666 typedef HSURF
3667 (APIENTRY *PFN_DrvEnableSurface)(
3668   DHPDEV  dhpdev);
3669 
3670 typedef WINBOOL
3671 (APIENTRY *PFN_DrvEndDoc)(
3672   SURFOBJ  *pso,
3673   FLONG  fl);
3674 
3675 typedef ULONG
3676 (APIENTRY *PFN_DrvEscape)(
3677   SURFOBJ  *pso,
3678   ULONG  iEsc,
3679   ULONG  cjIn,
3680   PVOID  pvIn,
3681   ULONG  cjOut,
3682   PVOID  pvOut);
3683 
3684 typedef WINBOOL
3685 (APIENTRY *PFN_DrvFillPath)(
3686   SURFOBJ  *pso,
3687   PATHOBJ  *ppo,
3688   CLIPOBJ  *pco,
3689   BRUSHOBJ  *pbo,
3690   POINTL  *pptlBrushOrg,
3691   MIX  mix,
3692   FLONG  flOptions);
3693 
3694 typedef ULONG
3695 (APIENTRY *PFN_DrvFontManagement)(
3696   SURFOBJ  *pso,
3697   FONTOBJ  *pfo,
3698   ULONG  iMode,
3699   ULONG  cjIn,
3700   PVOID  pvIn,
3701   ULONG  cjOut,
3702   PVOID  pvOut);
3703 
3704 typedef VOID
3705 (APIENTRY *PFN_DrvFree)(
3706   PVOID  pv,
3707   ULONG_PTR  id);
3708 
3709 typedef ULONG
3710 (APIENTRY *PFN_DrvGetGlyphMode)(
3711   DHPDEV  dhpdev,
3712   FONTOBJ  *pfo);
3713 
3714 typedef ULONG
3715 (APIENTRY *PFN_DrvGetModes)(
3716   HANDLE  hDriver,
3717   ULONG  cjSize,
3718   DEVMODEW  *pdm);
3719 
3720 typedef PVOID
3721 (APIENTRY *PFN_DrvGetTrueTypeFile)(
3722   ULONG_PTR  iFile,
3723   ULONG  *pcj);
3724 
3725 typedef WINBOOL
3726 (APIENTRY *PFN_DrvGradientFill)(
3727   SURFOBJ  *psoDest,
3728   CLIPOBJ  *pco,
3729   XLATEOBJ  *pxlo,
3730   TRIVERTEX  *pVertex,
3731   ULONG  nVertex,
3732   PVOID  pMesh,
3733   ULONG  nMesh,
3734   RECTL  *prclExtents,
3735   POINTL  *pptlDitherOrg,
3736   ULONG  ulMode);
3737 
3738 typedef WINBOOL
3739 (APIENTRY *PFN_DrvIcmCheckBitmapBits)(
3740   DHPDEV  dhpdev,
3741   HANDLE  hColorTransform,
3742   SURFOBJ  *pso,
3743   PBYTE  paResults);
3744 
3745 typedef HANDLE
3746 (APIENTRY *PFN_DrvIcmCreateColorTransform)(
3747   DHPDEV  dhpdev,
3748   LPLOGCOLORSPACEW  pLogColorSpace,
3749   PVOID  pvSourceProfile,
3750   ULONG  cjSourceProfile,
3751   PVOID  pvDestProfile,
3752   ULONG  cjDestProfile,
3753   PVOID  pvTargetProfile,
3754   ULONG  cjTargetProfile,
3755   DWORD  dwReserved);
3756 
3757 typedef WINBOOL
3758 (APIENTRY *PFN_DrvIcmDeleteColorTransform)(
3759   DHPDEV  dhpdev,
3760   HANDLE  hcmXform);
3761 
3762 typedef WINBOOL
3763 (APIENTRY *PFN_DrvIcmSetDeviceGammaRamp)(
3764   DHPDEV  dhpdev,
3765   ULONG  iFormat,
3766   LPVOID  lpRamp);
3767 
3768 typedef WINBOOL
3769 (APIENTRY *PFN_DrvLineTo)(
3770   SURFOBJ  *pso,
3771   CLIPOBJ  *pco,
3772   BRUSHOBJ  *pbo,
3773   LONG  x1,
3774   LONG  y1,
3775   LONG  x2,
3776   LONG  y2,
3777   RECTL  *prclBounds,
3778   MIX  mix);
3779 
3780 typedef ULONG_PTR
3781 (APIENTRY *PFN_DrvLoadFontFile)(
3782   ULONG  cFiles,
3783   ULONG_PTR  *piFile,
3784   PVOID  *ppvView,
3785   ULONG  *pcjView,
3786   DESIGNVECTOR  *pdv,
3787   ULONG  ulLangID,
3788   ULONG  ulFastCheckSum);
3789 
3790 typedef VOID
3791 (APIENTRY *PFN_DrvMovePointer)(
3792   SURFOBJ  *pso,
3793   LONG  x,
3794   LONG  y,
3795   RECTL  *prcl);
3796 
3797 typedef WINBOOL
3798 (APIENTRY *PFN_DrvNextBand)(
3799   SURFOBJ  *pso,
3800   POINTL  *pptl);
3801 
3802 typedef VOID
3803 (APIENTRY *PFN_DrvNotify)(
3804   SURFOBJ  *pso,
3805   ULONG  iType,
3806   PVOID  pvData);
3807 
3808 typedef WINBOOL
3809 (APIENTRY *PFN_DrvOffset)(
3810   SURFOBJ  *pso,
3811   LONG  x,
3812   LONG  y,
3813   FLONG  flReserved);
3814 
3815 typedef WINBOOL
3816 (APIENTRY *PFN_DrvPaint)(
3817   SURFOBJ  *pso,
3818   CLIPOBJ  *pco,
3819   BRUSHOBJ  *pbo,
3820   POINTL  *pptlBrushOrg,
3821   MIX  mix);
3822 
3823 typedef WINBOOL
3824 (APIENTRY *PFN_DrvPlgBlt)(
3825   SURFOBJ  *psoTrg,
3826   SURFOBJ  *psoSrc,
3827   SURFOBJ  *psoMsk,
3828   CLIPOBJ  *pco,
3829   XLATEOBJ  *pxlo,
3830   COLORADJUSTMENT  *pca,
3831   POINTL  *pptlBrushOrg,
3832   POINTFIX  *pptfx,
3833   RECTL  *prcl,
3834   POINTL  *pptl,
3835   ULONG  iMode);
3836 
3837 typedef WINBOOL
3838 (APIENTRY *PFN_DrvQueryAdvanceWidths)(
3839   DHPDEV  dhpdev,
3840   FONTOBJ  *pfo,
3841   ULONG  iMode,
3842   HGLYPH  *phg,
3843   PVOID  pvWidths,
3844   ULONG  cGlyphs);
3845 
3846 typedef WINBOOL
3847 (APIENTRY *PFN_DrvQueryDeviceSupport)(
3848   SURFOBJ  *pso,
3849   XLATEOBJ  *pxlo,
3850   XFORMOBJ  *pxo,
3851   ULONG  iType,
3852   ULONG  cjIn,
3853   PVOID  pvIn,
3854   ULONG  cjOut,
3855   PVOID  pvOut);
3856 
3857 typedef WINBOOL
3858 (APIENTRY *PFN_DrvQueryDriverInfo)(
3859   DWORD  dwMode,
3860   PVOID  pBuffer,
3861   DWORD  cbBuf,
3862   PDWORD  pcbNeeded);
3863 
3864 typedef PIFIMETRICS
3865 (APIENTRY *PFN_DrvQueryFont)(
3866   DHPDEV  dhpdev,
3867   ULONG_PTR  iFile,
3868   ULONG  iFace,
3869   ULONG_PTR  *pid);
3870 
3871 typedef LONG
3872 (APIENTRY *PFN_DrvQueryFontCaps)(
3873   ULONG  culCaps,
3874   ULONG  *pulCaps);
3875 
3876 typedef LONG
3877 (APIENTRY *PFN_DrvQueryFontData)(
3878   DHPDEV  dhpdev,
3879   FONTOBJ  *pfo,
3880   ULONG  iMode,
3881   HGLYPH  hg,
3882   GLYPHDATA  *pgd,
3883   PVOID  pv,
3884   ULONG  cjSize);
3885 
3886 typedef LONG
3887 (APIENTRY *PFN_DrvQueryFontFile)(
3888   ULONG_PTR  iFile,
3889   ULONG  ulMode,
3890   ULONG  cjBuf,
3891   ULONG  *pulBuf);
3892 
3893 typedef PVOID
3894 (APIENTRY *PFN_DrvQueryFontTree)(
3895   DHPDEV  dhpdev,
3896   ULONG_PTR  iFile,
3897   ULONG  iFace,
3898   ULONG  iMode,
3899   ULONG_PTR  *pid);
3900 
3901 typedef PFD_GLYPHATTR
3902 (APIENTRY *PFN_DrvQueryGlyphAttrs)(
3903   FONTOBJ  *pfo,
3904   ULONG  iMode);
3905 
3906 typedef ULONG
3907 (APIENTRY *PFN_DrvQueryPerBandInfo)(
3908   SURFOBJ  *pso,
3909   PERBANDINFO  *pbi);
3910 
3911 typedef LONG
3912 (APIENTRY *PFN_DrvQueryTrueTypeOutline)(
3913   DHPDEV  dhpdev,
3914   FONTOBJ  *pfo,
3915   HGLYPH  hglyph,
3916   WINBOOL  bMetricsOnly,
3917   GLYPHDATA  *pgldt,
3918   ULONG  cjBuf,
3919   TTPOLYGONHEADER  *ppoly);
3920 
3921 typedef LONG
3922 (APIENTRY *PFN_DrvQueryTrueTypeTable)(
3923   ULONG_PTR  iFile,
3924   ULONG  ulFont,
3925   ULONG  ulTag,
3926   PTRDIFF  dpStart,
3927   ULONG  cjBuf,
3928   BYTE  *pjBuf,
3929   PBYTE  *ppjTable,
3930   ULONG *pcjTable);
3931 
3932 typedef WINBOOL
3933 (APIENTRY *PFN_DrvRealizeBrush)(
3934   BRUSHOBJ  *pbo,
3935   SURFOBJ  *psoTarget,
3936   SURFOBJ  *psoPattern,
3937   SURFOBJ  *psoMask,
3938   XLATEOBJ  *pxlo,
3939   ULONG  iHatch);
3940 
3941 typedef ULONG
3942 (APIENTRY *PFN_DrvResetDevice)(
3943   DHPDEV dhpdev,
3944   PVOID Reserved);
3945 
3946 typedef WINBOOL
3947 (APIENTRY *PFN_DrvResetPDEV)(
3948   DHPDEV  dhpdevOld,
3949   DHPDEV  dhpdevNew);
3950 
3951 typedef ULONG_PTR
3952 (APIENTRY *PFN_DrvSaveScreenBits)(
3953   SURFOBJ  *pso,
3954   ULONG  iMode,
3955   ULONG_PTR  ident,
3956   RECTL  *prcl);
3957 
3958 typedef WINBOOL
3959 (APIENTRY *PFN_DrvSendPage)(
3960   SURFOBJ  *pso);
3961 
3962 typedef WINBOOL
3963 (APIENTRY *PFN_DrvSetPalette)(
3964   DHPDEV  dhpdev,
3965   PALOBJ  *ppalo,
3966   FLONG  fl,
3967   ULONG  iStart,
3968   ULONG  cColors);
3969 
3970 typedef WINBOOL
3971 (APIENTRY *PFN_DrvSetPixelFormat)(
3972   SURFOBJ  *pso,
3973   LONG  iPixelFormat,
3974   HWND  hwnd);
3975 
3976 typedef ULONG
3977 (APIENTRY *PFN_DrvSetPointerShape)(
3978   SURFOBJ  *pso,
3979   SURFOBJ  *psoMask,
3980   SURFOBJ  *psoColor,
3981   XLATEOBJ  *pxlo,
3982   LONG  xHot,
3983   LONG  yHot,
3984   LONG  x,
3985   LONG  y,
3986   RECTL  *prcl,
3987   FLONG  fl);
3988 
3989 typedef WINBOOL
3990 (APIENTRY *PFN_DrvStartBanding)(
3991   SURFOBJ  *pso,
3992   POINTL  *pptl);
3993 
3994 typedef WINBOOL
3995 (APIENTRY *PFN_DrvStartDoc)(
3996   SURFOBJ  *pso,
3997   LPWSTR  pwszDocName,
3998   DWORD  dwJobId);
3999 
4000 typedef WINBOOL
4001 (APIENTRY *PFN_DrvStartPage)(
4002   SURFOBJ  *pso);
4003 
4004 typedef WINBOOL
4005 (APIENTRY *PFN_DrvStretchBlt)(
4006   SURFOBJ  *psoDest,
4007   SURFOBJ  *psoSrc,
4008   SURFOBJ  *psoMask,
4009   CLIPOBJ  *pco,
4010   XLATEOBJ  *pxlo,
4011   COLORADJUSTMENT  *pca,
4012   POINTL  *pptlHTOrg,
4013   RECTL  *prclDest,
4014   RECTL  *prclSrc,
4015   POINTL  *pptlMask,
4016   ULONG  iMode);
4017 
4018 typedef WINBOOL
4019 (APIENTRY *PFN_DrvStretchBltROP)(
4020   SURFOBJ  *psoDest,
4021   SURFOBJ  *psoSrc,
4022   SURFOBJ  *psoMask,
4023   CLIPOBJ  *pco,
4024   XLATEOBJ  *pxlo,
4025   COLORADJUSTMENT  *pca,
4026   POINTL  *pptlHTOrg,
4027   RECTL  *prclDest,
4028   RECTL  *prclSrc,
4029   POINTL  *pptlMask,
4030   ULONG  iMode,
4031   BRUSHOBJ  *pbo,
4032   DWORD  rop4);
4033 
4034 typedef WINBOOL
4035 (APIENTRY *PFN_DrvStrokeAndFillPath)(
4036   SURFOBJ  *pso,
4037   PATHOBJ  *ppo,
4038   CLIPOBJ  *pco,
4039   XFORMOBJ  *pxo,
4040   BRUSHOBJ  *pboStroke,
4041   LINEATTRS  *plineattrs,
4042   BRUSHOBJ  *pboFill,
4043   POINTL  *pptlBrushOrg,
4044   MIX  mixFill,
4045   FLONG  flOptions);
4046 
4047 typedef WINBOOL
4048 (APIENTRY *PFN_DrvStrokePath)(
4049   SURFOBJ  *pso,
4050   PATHOBJ  *ppo,
4051   CLIPOBJ  *pco,
4052   XFORMOBJ  *pxo,
4053   BRUSHOBJ  *pbo,
4054   POINTL  *pptlBrushOrg,
4055   LINEATTRS  *plineattrs,
4056   MIX  mix);
4057 
4058 typedef WINBOOL
4059 (APIENTRY *PFN_DrvSwapBuffers)(
4060   SURFOBJ  *pso,
4061   WNDOBJ  *pwo);
4062 
4063 typedef VOID
4064 (APIENTRY *PFN_DrvSynchronize)(
4065   DHPDEV  dhpdev,
4066   RECTL  *prcl);
4067 
4068 typedef VOID
4069 (APIENTRY *PFN_DrvSynchronizeSurface)(
4070   SURFOBJ  *pso,
4071   RECTL  *prcl,
4072   FLONG  fl);
4073 
4074 typedef WINBOOL
4075 (APIENTRY *PFN_DrvTextOut)(
4076   SURFOBJ  *pso,
4077   STROBJ  *pstro,
4078   FONTOBJ  *pfo,
4079   CLIPOBJ  *pco,
4080   RECTL  *prclExtra,
4081   RECTL  *prclOpaque,
4082   BRUSHOBJ  *pboFore,
4083   BRUSHOBJ  *pboOpaque,
4084   POINTL  *pptlOrg,
4085   MIX  mix);
4086 
4087 typedef WINBOOL
4088 (APIENTRY *PFN_DrvTransparentBlt)(
4089   SURFOBJ  *psoDst,
4090   SURFOBJ  *psoSrc,
4091   CLIPOBJ  *pco,
4092   XLATEOBJ  *pxlo,
4093   RECTL  *prclDst,
4094   RECTL  *prclSrc,
4095   ULONG  iTransColor,
4096   ULONG  ulReserved);
4097 
4098 typedef WINBOOL
4099 (APIENTRY *PFN_DrvUnloadFontFile)(
4100   ULONG_PTR  iFile);
4101 
4102 
4103 WIN32KAPI
4104 VOID
4105 APIENTRY
4106 DrvDisableDirectDraw(
4107   DHPDEV  dhpdev);
4108 
4109 typedef VOID
4110 (APIENTRY *PFN_DrvDisableDirectDraw)(
4111   DHPDEV  dhpdev);
4112 
4113 WIN32KAPI
4114 WINBOOL
4115 APIENTRY
4116 DrvEnableDirectDraw(
4117   DHPDEV  dhpdev,
4118   DD_CALLBACKS  *pCallBacks,
4119   DD_SURFACECALLBACKS  *pSurfaceCallBacks,
4120   DD_PALETTECALLBACKS  *pPaletteCallBacks);
4121 
4122 typedef WINBOOL
4123 (APIENTRY *PFN_DrvEnableDirectDraw)(
4124   DHPDEV  dhpdev,
4125   DD_CALLBACKS  *pCallBacks,
4126   DD_SURFACECALLBACKS  *pSurfaceCallBacks,
4127   DD_PALETTECALLBACKS  *pPaletteCallBacks);
4128 
4129 WIN32KAPI
4130 WINBOOL
4131 APIENTRY
4132 DrvGetDirectDrawInfo(
4133   DHPDEV  dhpdev,
4134   DD_HALINFO  *pHalInfo,
4135   DWORD  *pdwNumHeaps,
4136   VIDEOMEMORY  *pvmList,
4137   DWORD  *pdwNumFourCCCodes,
4138   DWORD  *pdwFourCC);
4139 
4140 typedef WINBOOL
4141 (APIENTRY *PFN_DrvGetDirectDrawInfo)(
4142   DHPDEV  dhpdev,
4143   DD_HALINFO  *pHalInfo,
4144   DWORD  *pdwNumHeaps,
4145   VIDEOMEMORY  *pvmList,
4146   DWORD  *pdwNumFourCCCodes,
4147   DWORD  *pdwFourCC);
4148 
4149 //DECLSPEC_DEPRECATED_DDK
4150 WINBOOL
4151 APIENTRY
4152 DrvQuerySpoolType(
4153   DHPDEV dhpdev,
4154   LPWSTR pwchType);
4155 
4156 typedef WINBOOL
4157 (APIENTRY *PFN_DrvQuerySpoolType)(
4158   DHPDEV dhpdev,
4159   LPWSTR pwchType);
4160 
4161 
4162 #ifdef __cplusplus
4163 }
4164 #endif
4165 
4166 #endif /* defined __VIDEO_H__ */
4167 
4168 #endif /* _WINDDI_ */
4169