OSDN Git Service

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