OSDN Git Service

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