holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/winddi.h
author Matt Plumtree <matt.plumtree@nokia.com>
Thu, 07 Oct 2010 13:58:22 +0100
branchbug235_bringup_0
changeset 55 09263774e342
parent 20 d2d6724aef32
permissions -rw-r--r--
Move GLES20 source into standard locations Move Khronos headers into their respective components, to be exported by each. Remove hostthreadadapter as nothing outside of the vghwapiwrapper, which now contains the code, needs it

/*
 * winddi.h
 *
 * GDI device driver interface
 *
 * This file is part of the w32api package.
 *
 * Contributors:
 *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 *
 * THIS SOFTWARE IS NOT COPYRIGHTED
 *
 * This source code is offered for use in the public domain. You may
 * use, modify or distribute it freely.
 *
 * This code is distributed in the hope that it will be useful but
 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 * DISCLAIMED. This includes but is not limited to warranties of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 */

#ifndef __WINDDI_H
#define __WINDDI_H

#if __GNUC__ >=3
#pragma GCC system_header
#endif

#ifdef __VIDEO_H
#error video.h cannot be included with winddi.h
#else

#ifdef __cplusplus
extern "C" {
#endif

#include "ntddk.h"
#include <wingdi.h>

#ifndef __DD_INCLUDED__
/* FIXME: Some DirectDraw structures not added yet */
typedef ULONG_PTR FLATPTR;
typedef struct _DD_SURFACECALLBACKS {
} DD_SURFACECALLBACKS, *PDD_SURFACECALLBACKS;
typedef struct _DD_PALETTECALLBACKS {
} DD_PALETTECALLBACKS, *PDD_PALETTECALLBACKS;
typedef struct _DD_CALLBACKS {
} DD_CALLBACKS, *PDD_CALLBACKS;
typedef struct _DD_HALINFO {
} DD_HALINFO, *PDD_HALINFO;
typedef struct _VIDEOMEMORY {
} VIDEOMEMORY, *LPVIDEOMEMORY;
typedef struct _DD_DIRECTDRAW_GLOBAL {
} DD_DIRECTDRAW_GLOBAL, *LPDD_DIRECTDRAW_GLOBAL;
typedef struct _DD_SURFACE_LOCAL {
} DD_SURFACE_LOCAL, *PDD_SURFACE_LOCAL, *LPDD_SURFACE_LOCAL;
#endif

#ifndef __DDRAWI_INCLUDED__
typedef PVOID LPVIDMEM;
#endif

#if !defined(__DD_INCLUDED__) && !defined(__DDRAWI_INCLUDED__)
typedef struct _DDSCAPS {
} DDSCAPS, *PDDSCAPS;
typedef struct _DDSCAPSEX {
} DDSCAPSEX, *PDDSCAPSEX;
typedef PVOID LPVMEMHEAP;
#endif

#if defined(_WIN32K_)
#define WIN32KAPI DECL_EXPORT
#else
#define WIN32KAPI DECL_IMPORT
#endif

#define DDI_DRIVER_VERSION_NT4            0x00020000
#define DDI_DRIVER_VERSION_SP3            0x00020003
#define DDI_DRIVER_VERSION_NT5            0x00030000
#define DDI_DRIVER_VERSION_NT5_01         0x00030100

#define GDI_DRIVER_VERSION                0x4000

#ifdef _X86_

typedef DWORD FLOATL;

#else /* !_X86_ */

typedef FLOAT FLOATL;

#endif

typedef SHORT FWORD;
typedef LONG LDECI4;
typedef ULONG IDENT;

typedef ULONG_PTR HFF;
typedef ULONG_PTR HFC;

typedef LONG PTRDIFF;
typedef PTRDIFF *PPTRDIFF;
typedef LONG FIX;
typedef FIX *PFIX;
typedef ULONG ROP4;
typedef ULONG MIX;
typedef ULONG HGLYPH;
typedef HGLYPH *PHGLYPH;

typedef LONG_PTR (DDKAPI *PFN)();

DECLARE_HANDLE(HBM);
DECLARE_HANDLE(HDEV);
DECLARE_HANDLE(HSURF);
DECLARE_HANDLE(DHSURF);
DECLARE_HANDLE(DHPDEV);
DECLARE_HANDLE(HDRVOBJ);


#define GDI_DRIVER_VERSION                0x4000

typedef struct _ENG_EVENT *PEVENT;

#define OPENGL_CMD                        4352
#define OPENGL_GETINFO                    4353
#define WNDOBJ_SETUP                      4354

#define FD_ERROR                          0xFFFFFFFF
#define DDI_ERROR                         0xFFFFFFFF

#define HFF_INVALID                       ((HFF) 0)
#define HFC_INVALID                       ((HFC) 0)
#define HGLYPH_INVALID                    ((HGLYPH) -1)

#define FP_ALTERNATEMODE                  1
#define FP_WINDINGMODE                    2

#define DN_ACCELERATION_LEVEL             1
#define DN_DEVICE_ORIGIN                  2
#define DN_SLEEP_MODE                     3
#define DN_DRAWING_BEGIN                  4

#define DCR_SOLID                         0
#define DCR_DRIVER                        1
#define DCR_HALFTONE                      2

#define GX_IDENTITY                       0
#define GX_OFFSET                         1
#define GX_SCALE                          2
#define GX_GENERAL                        3

typedef struct _POINTE {
	FLOATL  x;
	FLOATL  y;
} POINTE, *PPOINTE;

typedef union _FLOAT_LONG {
  FLOATL  e;
  LONG  l;
} FLOAT_LONG, *PFLOAT_LONG;

typedef struct _POINTFIX {
  FIX  x;
  FIX  y;
} POINTFIX, *PPOINTFIX;

typedef struct _RECTFX {
  FIX  xLeft;
  FIX  yTop;
  FIX  xRight;
  FIX  yBottom;
} RECTFX, *PRECTFX;

typedef struct _POINTQF {
  LARGE_INTEGER  x;
  LARGE_INTEGER  y;
} POINTQF, *PPOINTQF;


typedef struct _BLENDOBJ {
  BLENDFUNCTION  BlendFunction;
} BLENDOBJ,*PBLENDOBJ;

/* BRUSHOBJ.flColorType */
#define BR_DEVICE_ICM    0x01
#define BR_HOST_ICM      0x02
#define BR_CMYKCOLOR     0x04
#define BR_ORIGCOLOR     0x08

typedef struct _BRUSHOBJ {
  ULONG  iSolidColor;
  PVOID  pvRbrush;
  FLONG  flColorType;
} BRUSHOBJ;

typedef struct _CIECHROMA {
  LDECI4  x;
  LDECI4  y;
  LDECI4  Y;
} CIECHROMA;

typedef struct _RUN {
  LONG  iStart;
  LONG  iStop;
} RUN, *PRUN;

typedef struct _CLIPLINE {
  POINTFIX  ptfxA;
  POINTFIX  ptfxB;
  LONG  lStyleState;
  ULONG  c;
  RUN  arun[1];
} CLIPLINE, *PCLIPLINE;

/* CLIPOBJ.iDComplexity constants */
#define DC_TRIVIAL                        0
#define DC_RECT                           1
#define DC_COMPLEX                        3

/* CLIPOBJ.iFComplexity constants */
#define FC_RECT                           1
#define FC_RECT4                          2
#define FC_COMPLEX                        3

/* CLIPOBJ.iMode constants */
#define TC_RECTANGLES                     0
#define TC_PATHOBJ                        2

/* CLIPOBJ.fjOptions constants */
#define OC_BANK_CLIP                      1

typedef struct _CLIPOBJ {
  ULONG  iUniq;
  RECTL  rclBounds;
  BYTE  iDComplexity;
  BYTE  iFComplexity;
  BYTE  iMode;
  BYTE  fjOptions;
} CLIPOBJ;

typedef struct _COLORINFO {
  CIECHROMA  Red;
  CIECHROMA  Green;
  CIECHROMA  Blue;
  CIECHROMA  Cyan;
  CIECHROMA  Magenta;
  CIECHROMA  Yellow;
  CIECHROMA  AlignmentWhite;
  LDECI4  RedGamma;
  LDECI4  GreenGamma;
  LDECI4  BlueGamma;
  LDECI4  MagentaInCyanDye;
  LDECI4  YellowInCyanDye;
  LDECI4  CyanInMagentaDye;
  LDECI4  YellowInMagentaDye;
  LDECI4  CyanInYellowDye;
  LDECI4  MagentaInYellowDye;
} COLORINFO, *PCOLORINFO;

/* DEVHTADJDATA.DeviceFlags constants */
#define DEVHTADJF_COLOR_DEVICE            0x00000001
#define DEVHTADJF_ADDITIVE_DEVICE         0x00000002

typedef struct _DEVHTINFO {
  DWORD  HTFlags;
  DWORD  HTPatternSize;
  DWORD  DevPelsDPI;
  COLORINFO  ColorInfo;
} DEVHTINFO, *PDEVHTINFO;

typedef struct _DEVHTADJDATA {
  DWORD   DeviceFlags;
  DWORD   DeviceXDPI;
  DWORD   DeviceYDPI;
  PDEVHTINFO  pDefHTInfo;
  PDEVHTINFO  pAdjHTInfo;
} DEVHTADJDATA, *PDEVHTADJDATA;

/* DEVINFO.flGraphicsCaps flags */
#define GCAPS_BEZIERS           0x00000001
#define GCAPS_GEOMETRICWIDE     0x00000002
#define GCAPS_ALTERNATEFILL     0x00000004
#define GCAPS_WINDINGFILL       0x00000008
#define GCAPS_HALFTONE          0x00000010
#define GCAPS_COLOR_DITHER      0x00000020
#define GCAPS_HORIZSTRIKE       0x00000040
#define GCAPS_VERTSTRIKE        0x00000080
#define GCAPS_OPAQUERECT        0x00000100
#define GCAPS_VECTORFONT        0x00000200
#define GCAPS_MONO_DITHER       0x00000400
#define GCAPS_ASYNCCHANGE       0x00000800
#define GCAPS_ASYNCMOVE         0x00001000
#define GCAPS_DONTJOURNAL       0x00002000
#define GCAPS_DIRECTDRAW        0x00004000
#define GCAPS_ARBRUSHOPAQUE     0x00008000
#define GCAPS_PANNING           0x00010000
#define GCAPS_HIGHRESTEXT       0x00040000
#define GCAPS_PALMANAGED        0x00080000
#define GCAPS_DITHERONREALIZE   0x00200000
#define GCAPS_NO64BITMEMACCESS  0x00400000
#define GCAPS_FORCEDITHER       0x00800000
#define GCAPS_GRAY16            0x01000000
#define GCAPS_ICM               0x02000000
#define GCAPS_CMYKCOLOR         0x04000000
#define GCAPS_LAYERED           0x08000000
#define GCAPS_ARBRUSHTEXT       0x10000000
#define GCAPS_SCREENPRECISION   0x20000000
#define GCAPS_FONT_RASTERIZER   0x40000000
#define GCAPS_NUP               0x80000000

/* DEVINFO.iDitherFormat constants */
#define BMF_1BPP       1L
#define BMF_4BPP       2L
#define BMF_8BPP       3L
#define BMF_16BPP      4L
#define BMF_24BPP      5L
#define BMF_32BPP      6L
#define BMF_4RLE       7L
#define BMF_8RLE       8L
#define BMF_JPEG       9L
#define BMF_PNG       10L

/* DEVINFO.flGraphicsCaps2 flags */
#define GCAPS2_JPEGSRC          0x00000001
#define GCAPS2_xxxx             0x00000002
#define GCAPS2_PNGSRC           0x00000008
#define GCAPS2_CHANGEGAMMARAMP  0x00000010
#define GCAPS2_ALPHACURSOR      0x00000020
#define GCAPS2_SYNCFLUSH        0x00000040
#define GCAPS2_SYNCTIMER        0x00000080
#define GCAPS2_ICD_MULTIMON     0x00000100
#define GCAPS2_MOUSETRAILS      0x00000200
#define GCAPS2_RESERVED1        0x00000400

typedef struct _DEVINFO {
  FLONG  flGraphicsCaps;
  LOGFONTW  lfDefaultFont;
  LOGFONTW  lfAnsiVarFont;
  LOGFONTW  lfAnsiFixFont;
  ULONG  cFonts;
  ULONG  iDitherFormat;
  USHORT  cxDither;
  USHORT  cyDither;
  HPALETTE  hpalDefault;
  FLONG  flGraphicsCaps2;
} DEVINFO, *PDEVINFO;

typedef struct _DRIVEROBJ *PDRIVEROBJ;

typedef BOOL DDKAPI CALLBACK
(*FREEOBJPROC)(
  /*IN*/ PDRIVEROBJ  pDriverObj);

typedef struct _DRIVEROBJ {
  PVOID  pvObj;
  FREEOBJPROC  pFreeProc;
  HDEV  hdev;
  DHPDEV  dhpdev;
} DRIVEROBJ;

/* DRVFN.iFunc constants */
#define INDEX_DrvEnablePDEV               0L
#define INDEX_DrvCompletePDEV             1L
#define INDEX_DrvDisablePDEV              2L
#define INDEX_DrvEnableSurface            3L
#define INDEX_DrvDisableSurface           4L
#define INDEX_DrvAssertMode               5L
#define INDEX_DrvOffset                   6L
#define INDEX_DrvResetPDEV                7L
#define INDEX_DrvDisableDriver            8L
#define INDEX_DrvCreateDeviceBitmap       10L
#define INDEX_DrvDeleteDeviceBitmap       11L
#define INDEX_DrvRealizeBrush             12L
#define INDEX_DrvDitherColor              13L
#define INDEX_DrvStrokePath               14L
#define INDEX_DrvFillPath                 15L
#define INDEX_DrvStrokeAndFillPath        16L
#define INDEX_DrvPaint                    17L
#define INDEX_DrvBitBlt                   18L
#define INDEX_DrvCopyBits                 19L
#define INDEX_DrvStretchBlt               20L
#define INDEX_DrvSetPalette               22L
#define INDEX_DrvTextOut                  23L
#define INDEX_DrvEscape                   24L
#define INDEX_DrvDrawEscape               25L
#define INDEX_DrvQueryFont                26L
#define INDEX_DrvQueryFontTree            27L
#define INDEX_DrvQueryFontData            28L
#define INDEX_DrvSetPointerShape          29L
#define INDEX_DrvMovePointer              30L
#define INDEX_DrvLineTo                   31L
#define INDEX_DrvSendPage                 32L
#define INDEX_DrvStartPage                33L
#define INDEX_DrvEndDoc                   34L
#define INDEX_DrvStartDoc                 35L
#define INDEX_DrvGetGlyphMode             37L
#define INDEX_DrvSynchronize              38L
#define INDEX_DrvSaveScreenBits           40L
#define INDEX_DrvGetModes                 41L
#define INDEX_DrvFree                     42L
#define INDEX_DrvDestroyFont              43L
#define INDEX_DrvQueryFontCaps            44L
#define INDEX_DrvLoadFontFile             45L
#define INDEX_DrvUnloadFontFile           46L
#define INDEX_DrvFontManagement           47L
#define INDEX_DrvQueryTrueTypeTable       48L
#define INDEX_DrvQueryTrueTypeOutline     49L
#define INDEX_DrvGetTrueTypeFile          50L
#define INDEX_DrvQueryFontFile            51L
#define INDEX_DrvMovePanning              52L
#define INDEX_DrvQueryAdvanceWidths       53L
#define INDEX_DrvSetPixelFormat           54L
#define INDEX_DrvDescribePixelFormat      55L
#define INDEX_DrvSwapBuffers              56L
#define INDEX_DrvStartBanding             57L
#define INDEX_DrvNextBand                 58L
#define INDEX_DrvGetDirectDrawInfo        59L
#define INDEX_DrvEnableDirectDraw         60L
#define INDEX_DrvDisableDirectDraw        61L
#define INDEX_DrvQuerySpoolType           62L
#define INDEX_DrvIcmCreateColorTransform  64L
#define INDEX_DrvIcmDeleteColorTransform  65L
#define INDEX_DrvIcmCheckBitmapBits       66L
#define INDEX_DrvIcmSetDeviceGammaRamp    67L
#define INDEX_DrvGradientFill             68L
#define INDEX_DrvStretchBltROP            69L
#define INDEX_DrvPlgBlt                   70L
#define INDEX_DrvAlphaBlend               71L
#define INDEX_DrvSynthesizeFont           72L
#define INDEX_DrvGetSynthesizedFontFiles  73L
#define INDEX_DrvTransparentBlt           74L
#define INDEX_DrvQueryPerBandInfo         75L
#define INDEX_DrvQueryDeviceSupport       76L
#define INDEX_DrvReserved1                77L
#define INDEX_DrvReserved2                78L
#define INDEX_DrvReserved3                79L
#define INDEX_DrvReserved4                80L
#define INDEX_DrvReserved5                81L
#define INDEX_DrvReserved6                82L
#define INDEX_DrvReserved7                83L
#define INDEX_DrvReserved8                84L
#define INDEX_DrvDeriveSurface            85L
#define INDEX_DrvQueryGlyphAttrs          86L
#define INDEX_DrvNotify                   87L
#define INDEX_DrvSynchronizeSurface       88L
#define INDEX_DrvResetDevice              89L
#define INDEX_DrvReserved9                90L
#define INDEX_DrvReserved10               91L
#define INDEX_DrvReserved11               92L
#define INDEX_LAST                        93L

typedef struct _DRVFN {
  ULONG  iFunc;
  PFN  pfn;
} DRVFN, *PDRVFN;

/* DRVENABLEDATA.iDriverVersion constants */
#define DDI_DRIVER_VERSION_NT4            0x00020000
#define DDI_DRIVER_VERSION_SP3            0x00020003
#define DDI_DRIVER_VERSION_NT5            0x00030000
#define DDI_DRIVER_VERSION_NT5_01         0x00030100

typedef struct _DRVENABLEDATA {
  ULONG  iDriverVersion;
  ULONG  c;
  DRVFN  *pdrvfn;
} DRVENABLEDATA, *PDRVENABLEDATA;

DECLARE_HANDLE(HSEMAPHORE);

typedef struct {
  DWORD  nSize;
  HDC  hdc;
  PBYTE  pvEMF;
  PBYTE  pvCurrentRecord;
} EMFINFO, *PEMFINFO;

typedef struct _ENGSAFESEMAPHORE {
  HSEMAPHORE  hsem;
  LONG  lCount;
} ENGSAFESEMAPHORE;

typedef struct _ENG_TIME_FIELDS {
  USHORT  usYear;
  USHORT  usMonth;
  USHORT  usDay;
  USHORT  usHour;
  USHORT  usMinute;
  USHORT  usSecond;
  USHORT  usMilliseconds;
  USHORT  usWeekday;
} ENG_TIME_FIELDS, *PENG_TIME_FIELDS;

typedef struct _ENUMRECTS {
  ULONG  c;
  RECTL  arcl[1];
} ENUMRECTS;

typedef struct _FD_XFORM {
  FLOATL  eXX;
  FLOATL  eXY;
  FLOATL  eYX;
  FLOATL  eYY;
} FD_XFORM, *PFD_XFORM;

/* FD_DEVICEMETRICS.flRealizedType constants */
#define FDM_TYPE_BM_SIDE_CONST            0x00000001
#define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE     0x00000002
#define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE   0x00000004
#define FDM_TYPE_ZERO_BEARINGS            0x00000008
#define FDM_TYPE_CONST_BEARINGS           0x00000010

typedef struct _FD_DEVICEMETRICS {
  FLONG  flRealizedType;
  POINTE  pteBase;
  POINTE  pteSide;
  LONG  lD;
  FIX  fxMaxAscender;
  FIX  fxMaxDescender;
  POINTL  ptlUnderline1;
  POINTL  ptlStrikeout;
  POINTL  ptlULThickness;
  POINTL  ptlSOThickness;
  ULONG  cxMax;
  ULONG  cyMax;
  ULONG  cjGlyphMax;
  FD_XFORM  fdxQuantized;
  LONG  lNonLinearExtLeading;
  LONG  lNonLinearIntLeading;
  LONG  lNonLinearMaxCharWidth;
  LONG  lNonLinearAvgCharWidth;
  LONG  lMinA;
  LONG  lMinC;
  LONG  lMinD;
  LONG  alReserved[1];
} FD_DEVICEMETRICS, *PFD_DEVICEMETRICS;

/* FD_GLYPHATTR.iMode constants */
#define FO_ATTR_MODE_ROTATE               1

typedef struct _FD_GLYPHATTR {
  ULONG  cjThis;
  ULONG  cGlyphs;
  ULONG  iMode;
  BYTE  aGlyphAttr[1];
} FD_GLYPHATTR, *PFD_GLYPHATTR;

/* FD_GLYPHSET.flAccel */
#define GS_UNICODE_HANDLES                0x00000001
#define GS_8BIT_HANDLES                   0x00000002
#define GS_16BIT_HANDLES                  0x00000004

typedef struct _WCRUN {
  WCHAR  wcLow;
  USHORT  cGlyphs;
  HGLYPH  *phg;
} WCRUN, *PWCRUN;

typedef struct _FD_GLYPHSET {
  ULONG  cjThis;
  FLONG  flAccel;
  ULONG  cGlyphsSupported;
  ULONG  cRuns;
  WCRUN  awcrun[1];
} FD_GLYPHSET, *PFD_GLYPHSET;

typedef struct _FD_KERNINGPAIR {
  WCHAR  wcFirst;
  WCHAR  wcSecond;
  FWORD  fwdKern;
} FD_KERNINGPAIR;

typedef struct _FLOATOBJ
{
  ULONG  ul1;
  ULONG  ul2;
} FLOATOBJ, *PFLOATOBJ;

typedef struct _FLOATOBJ_XFORM {
  FLOATOBJ  eM11;
  FLOATOBJ  eM12;
  FLOATOBJ  eM21;
  FLOATOBJ  eM22;
  FLOATOBJ  eDx;
  FLOATOBJ  eDy;
} FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;

/* FONTDIFF.fsSelection */
#define FM_SEL_ITALIC                     0x0001
#define FM_SEL_UNDERSCORE                 0x0002
#define FM_SEL_NEGATIVE                   0x0004
#define FM_SEL_OUTLINED                   0x0008
#define FM_SEL_STRIKEOUT                  0x0010
#define FM_SEL_BOLD                       0x0020
#define FM_SEL_REGULAR                    0x0040

typedef struct _FONTDIFF {
  BYTE  jReserved1;
  BYTE  jReserved2;
  BYTE  jReserved3;
  BYTE  bWeight;
  USHORT  usWinWeight;
  FSHORT  fsSelection;
  FWORD  fwdAveCharWidth;
  FWORD  fwdMaxCharInc;
  POINTL  ptlCaret;
} FONTDIFF;

typedef struct _FONTSIM {
  PTRDIFF  dpBold;
  PTRDIFF  dpItalic;
  PTRDIFF  dpBoldItalic;
} FONTSIM;

/* FONTINFO.flCaps constants */
#define FO_DEVICE_FONT                    1L
#define FO_OUTLINE_CAPABLE                2L

typedef struct _FONTINFO {
  ULONG  cjThis;
  FLONG  flCaps;
  ULONG  cGlyphsSupported;
  ULONG  cjMaxGlyph1;
  ULONG  cjMaxGlyph4;
  ULONG  cjMaxGlyph8;
  ULONG  cjMaxGlyph32;
} FONTINFO, *PFONTINFO;

/* FONTOBJ.flFontType constants */
#define FO_TYPE_RASTER   RASTER_FONTTYPE
#define FO_TYPE_DEVICE   DEVICE_FONTTYPE
#define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE
#define FO_TYPE_OPENTYPE OPENTYPE_FONTTYPE

#define FO_SIM_BOLD      0x00002000
#define FO_SIM_ITALIC    0x00004000
#define FO_EM_HEIGHT     0x00008000
#define FO_GRAY16        0x00010000
#define FO_NOGRAY16      0x00020000
#define FO_NOHINTS       0x00040000
#define FO_NO_CHOICE     0x00080000
#define FO_CFF            0x00100000
#define FO_POSTSCRIPT     0x00200000
#define FO_MULTIPLEMASTER 0x00400000
#define FO_VERT_FACE      0x00800000
#define FO_DBCS_FONT      0X01000000
#define FO_NOCLEARTYPE    0x02000000
#define FO_CLEARTYPE_X    0x10000000
#define FO_CLEARTYPE_Y    0x20000000

typedef struct _FONTOBJ {
  ULONG  iUniq;
  ULONG  iFace;
  ULONG  cxMax;
  FLONG  flFontType;
  ULONG_PTR  iTTUniq;
  ULONG_PTR  iFile;
  SIZE  sizLogResPpi;
  ULONG  ulStyleSize;
  PVOID  pvConsumer;
  PVOID  pvProducer;
} FONTOBJ;

typedef struct _GAMMARAMP {
  WORD  Red[256];
  WORD  Green[256];
  WORD  Blue[256];
} GAMMARAMP, *PGAMMARAMP;

/* GDIINFO.ulPrimaryOrder constants */
#define PRIMARY_ORDER_ABC                 0
#define PRIMARY_ORDER_ACB                 1
#define PRIMARY_ORDER_BAC                 2
#define PRIMARY_ORDER_BCA                 3
#define PRIMARY_ORDER_CBA                 4
#define PRIMARY_ORDER_CAB                 5

/* GDIINFO.ulHTPatternSize constants */
#define HT_PATSIZE_2x2                    0
#define HT_PATSIZE_2x2_M                  1
#define HT_PATSIZE_4x4                    2
#define HT_PATSIZE_4x4_M                  3
#define HT_PATSIZE_6x6                    4
#define HT_PATSIZE_6x6_M                  5
#define HT_PATSIZE_8x8                    6
#define HT_PATSIZE_8x8_M                  7
#define HT_PATSIZE_10x10                  8
#define HT_PATSIZE_10x10_M                9
#define HT_PATSIZE_12x12                  10
#define HT_PATSIZE_12x12_M                11
#define HT_PATSIZE_14x14                  12
#define HT_PATSIZE_14x14_M                13
#define HT_PATSIZE_16x16                  14
#define HT_PATSIZE_16x16_M                15
#define HT_PATSIZE_SUPERCELL              16
#define HT_PATSIZE_SUPERCELL_M            17
#define HT_PATSIZE_USER                   18
#define HT_PATSIZE_MAX_INDEX              HT_PATSIZE_USER
#define HT_PATSIZE_DEFAULT                HT_PATSIZE_SUPERCELL_M
#define HT_USERPAT_CX_MIN                 4
#define HT_USERPAT_CX_MAX                 256
#define HT_USERPAT_CY_MIN                 4
#define HT_USERPAT_CY_MAX                 256

/* GDIINFO.ulHTOutputFormat constants */
#define HT_FORMAT_1BPP                    0
#define HT_FORMAT_4BPP                    2
#define HT_FORMAT_4BPP_IRGB               3
#define HT_FORMAT_8BPP                    4
#define HT_FORMAT_16BPP                   5
#define HT_FORMAT_24BPP                   6
#define HT_FORMAT_32BPP                   7

/* GDIINFO.flHTFlags */
#define HT_FLAG_SQUARE_DEVICE_PEL         0x00000001
#define HT_FLAG_HAS_BLACK_DYE             0x00000002
#define HT_FLAG_ADDITIVE_PRIMS            0x00000004
#define HT_FLAG_USE_8BPP_BITMASK          0x00000008
#define HT_FLAG_INK_HIGH_ABSORPTION       0x00000010
#define HT_FLAG_INK_ABSORPTION_INDICES    0x00000060
#define HT_FLAG_DO_DEVCLR_XFORM           0x00000080
#define HT_FLAG_OUTPUT_CMY                0x00000100
#define HT_FLAG_PRINT_DRAFT_MODE          0x00000200
#define HT_FLAG_INVERT_8BPP_BITMASK_IDX   0x00000400
#define HT_FLAG_8BPP_CMY332_MASK          0xFF000000

#define MAKE_CMYMASK_BYTE(c,m,y)          ((BYTE)(((BYTE)(c) & 0x07) << 5) \
                                          |(BYTE)(((BYTE)(m) & 0x07) << 2) \
                                          |(BYTE)((BYTE)(y) & 0x03))

#define MAKE_CMY332_MASK(c,m,y)           ((DWORD)(((DWORD)(c) & 0x07) << 29)\
                                          |(DWORD)(((DWORD)(m) & 0x07) << 26)\
                                          |(DWORD)(((DWORD)(y) & 0x03) << 24))

/* GDIINFO.flHTFlags constants */
#define HT_FLAG_INK_ABSORPTION_IDX0       0x00000000
#define HT_FLAG_INK_ABSORPTION_IDX1       0x00000020
#define HT_FLAG_INK_ABSORPTION_IDX2       0x00000040
#define HT_FLAG_INK_ABSORPTION_IDX3       0x00000060

#define HT_FLAG_HIGHEST_INK_ABSORPTION    (HT_FLAG_INK_HIGH_ABSORPTION \
                                          |HT_FLAG_INK_ABSORPTION_IDX3)
#define HT_FLAG_HIGHER_INK_ABSORPTION     (HT_FLAG_INK_HIGH_ABSORPTION \
                                          |HT_FLAG_INK_ABSORPTION_IDX2)
#define HT_FLAG_HIGH_INK_ABSORPTION       (HT_FLAG_INK_HIGH_ABSORPTION \
                                          |HT_FLAG_INK_ABSORPTION_IDX1)
#define HT_FLAG_NORMAL_INK_ABSORPTION     HT_FLAG_INK_ABSORPTION_IDX0
#define HT_FLAG_LOW_INK_ABSORPTION        HT_FLAG_INK_ABSORPTION_IDX1
#define HT_FLAG_LOWER_INK_ABSORPTION      HT_FLAG_INK_ABSORPTION_IDX2
#define HT_FLAG_LOWEST_INK_ABSORPTION     HT_FLAG_INK_ABSORPTION_IDX3

#define HT_BITMASKPALRGB                  (DWORD)'0BGR'
#define HT_SET_BITMASKPAL2RGB(pPal)       (*((LPDWORD)(pPal)) = HT_BITMASKPALRGB)
#define HT_IS_BITMASKPALRGB(pPal)         (*((LPDWORD)(pPal)) == (DWORD)0)

/* GDIINFO.ulPhysicalPixelCharacteristics constants */
#define PPC_DEFAULT                       0x0
#define PPC_UNDEFINED                     0x1
#define PPC_RGB_ORDER_VERTICAL_STRIPES    0x2
#define PPC_BGR_ORDER_VERTICAL_STRIPES    0x3
#define PPC_RGB_ORDER_HORIZONTAL_STRIPES  0x4
#define PPC_BGR_ORDER_HORIZONTAL_STRIPES  0x5

#define PPG_DEFAULT                       0
#define PPG_SRGB                          1

typedef struct _GDIINFO {
  ULONG  ulVersion;
  ULONG  ulTechnology;
  ULONG  ulHorzSize;
  ULONG  ulVertSize;
  ULONG  ulHorzRes;
  ULONG  ulVertRes;
  ULONG  cBitsPixel;
  ULONG  cPlanes;
  ULONG  ulNumColors;
  ULONG  flRaster;
  ULONG  ulLogPixelsX;
  ULONG  ulLogPixelsY;
  ULONG  flTextCaps;
  ULONG  ulDACRed;
  ULONG  ulDACGreen;
  ULONG  ulDACBlue;
  ULONG  ulAspectX;
  ULONG  ulAspectY;
  ULONG  ulAspectXY;
  LONG  xStyleStep;
  LONG  yStyleStep;
  LONG  denStyleStep;
  POINTL  ptlPhysOffset;
  SIZEL  szlPhysSize;
  ULONG  ulNumPalReg;
  COLORINFO  ciDevice;
  ULONG  ulDevicePelsDPI;
  ULONG  ulPrimaryOrder;
  ULONG  ulHTPatternSize;
  ULONG  ulHTOutputFormat;
  ULONG  flHTFlags;
  ULONG  ulVRefresh;
  ULONG  ulBltAlignment;
  ULONG  ulPanningHorzRes;
  ULONG  ulPanningVertRes;
  ULONG  xPanningAlignment;
  ULONG  yPanningAlignment;
  ULONG  cxHTPat;
  ULONG  cyHTPat;
  LPBYTE  pHTPatA;
  LPBYTE  pHTPatB;
  LPBYTE  pHTPatC;
  ULONG  flShadeBlend;
  ULONG  ulPhysicalPixelCharacteristics;
  ULONG  ulPhysicalPixelGamma;
} GDIINFO, *PGDIINFO;

/* PATHDATA.flags constants */
#define PD_BEGINSUBPATH                   0x00000001
#define PD_ENDSUBPATH                     0x00000002
#define PD_RESETSTYLE                     0x00000004
#define PD_CLOSEFIGURE                    0x00000008
#define PD_BEZIERS                        0x00000010
#define PD_ALL                            (PD_BEGINSUBPATH \
                                          |PD_ENDSUBPATH \
                                          |PD_RESETSTYLE \
                                          |PD_CLOSEFIGURE \
                                          PD_BEZIERS)

typedef struct _PATHDATA {
  FLONG  flags;
  ULONG  count;
  POINTFIX  *glypptfx;
} PATHDATA, *PPATHDATA;

/* PATHOBJ.fl constants */
#define PO_BEZIERS                        0x00000001
#define PO_ELLIPSE                        0x00000002
#define PO_ALL_INTEGERS                   0x00000004
#define PO_ENUM_AS_INTEGERS               0x00000008

typedef struct _PATHOBJ {
  FLONG  fl;
  ULONG  cCurves;
} PATHOBJ;

typedef struct _GLYPHBITS {
  POINTL  ptlOrigin;
  SIZEL  sizlBitmap;
  BYTE  aj[1];
} GLYPHBITS;

typedef union _GLYPHDEF {
  GLYPHBITS  *pgb;
  PATHOBJ  *ppo;
} GLYPHDEF;

typedef struct _GLYPHPOS {
  HGLYPH  hg;
  GLYPHDEF  *pgdf;
  POINTL  ptl;
} GLYPHPOS, *PGLYPHPOS;

typedef struct _GLYPHDATA {
  GLYPHDEF  gdf;
  HGLYPH  hg;
  FIX  fxD;
  FIX  fxA;
  FIX  fxAB;
  FIX  fxInkTop;
  FIX  fxInkBottom;
  RECTL  rclInk;
  POINTQF  ptqD;
} GLYPHDATA;

typedef struct _IFIEXTRA {
  ULONG  ulIdentifier;
  PTRDIFF  dpFontSig;
  ULONG  cig;
  PTRDIFF  dpDesignVector;
  PTRDIFF  dpAxesInfoW;
  ULONG  aulReserved[1];
} IFIEXTRA, *PIFIEXTRA;

/* IFIMETRICS constants */

#define FM_VERSION_NUMBER                 0x0

/* IFIMETRICS.fsType constants */
#define FM_TYPE_LICENSED                  0x2
#define FM_READONLY_EMBED                 0x4
#define FM_EDITABLE_EMBED                 0x8
#define FM_NO_EMBEDDING                   FM_TYPE_LICENSED

/* IFIMETRICS.flInfo constants */
#define FM_INFO_TECH_TRUETYPE             0x00000001
#define FM_INFO_TECH_BITMAP               0x00000002
#define FM_INFO_TECH_STROKE               0x00000004
#define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008
#define FM_INFO_ARB_XFORMS                0x00000010
#define FM_INFO_1BPP                      0x00000020
#define FM_INFO_4BPP                      0x00000040
#define FM_INFO_8BPP                      0x00000080
#define FM_INFO_16BPP                     0x00000100
#define FM_INFO_24BPP                     0x00000200
#define FM_INFO_32BPP                     0x00000400
#define FM_INFO_INTEGER_WIDTH             0x00000800
#define FM_INFO_CONSTANT_WIDTH            0x00001000
#define FM_INFO_NOT_CONTIGUOUS            0x00002000
#define FM_INFO_TECH_MM                   0x00004000
#define FM_INFO_RETURNS_OUTLINES          0x00008000
#define FM_INFO_RETURNS_STROKES           0x00010000
#define FM_INFO_RETURNS_BITMAPS           0x00020000
#define FM_INFO_DSIG                      0x00040000
#define FM_INFO_RIGHT_HANDED              0x00080000
#define FM_INFO_INTEGRAL_SCALING          0x00100000
#define FM_INFO_90DEGREE_ROTATIONS        0x00200000
#define FM_INFO_OPTICALLY_FIXED_PITCH     0x00400000
#define FM_INFO_DO_NOT_ENUMERATE          0x00800000
#define FM_INFO_ISOTROPIC_SCALING_ONLY    0x01000000
#define FM_INFO_ANISOTROPIC_SCALING_ONLY  0x02000000
#define FM_INFO_TECH_CFF                  0x04000000
#define FM_INFO_FAMILY_EQUIV              0x08000000
#define FM_INFO_DBCS_FIXED_PITCH          0x10000000
#define FM_INFO_NONNEGATIVE_AC            0x20000000
#define FM_INFO_IGNORE_TC_RA_ABLE         0x40000000
#define FM_INFO_TECH_TYPE1                0x80000000

#define MAXCHARSETS                       16

/* IFIMETRICS.ulPanoseCulture constants */
#define  FM_PANOSE_CULTURE_LATIN          0x0

typedef struct _IFIMETRICS {
  ULONG  cjThis;
  ULONG  cjIfiExtra;
  PTRDIFF  dpwszFamilyName;
  PTRDIFF  dpwszStyleName;
  PTRDIFF  dpwszFaceName;
  PTRDIFF  dpwszUniqueName;
  PTRDIFF  dpFontSim;
  LONG  lEmbedId;
  LONG  lItalicAngle;
  LONG  lCharBias;
  PTRDIFF  dpCharSets;
  BYTE  jWinCharSet;
  BYTE  jWinPitchAndFamily;
  USHORT  usWinWeight;
  ULONG  flInfo;
  USHORT  fsSelection;
  USHORT  fsType;
  FWORD  fwdUnitsPerEm;
  FWORD  fwdLowestPPEm;
  FWORD  fwdWinAscender;
  FWORD  fwdWinDescender;
  FWORD  fwdMacAscender;
  FWORD  fwdMacDescender;
  FWORD  fwdMacLineGap;
  FWORD  fwdTypoAscender;
  FWORD  fwdTypoDescender;
  FWORD  fwdTypoLineGap;
  FWORD  fwdAveCharWidth;
  FWORD  fwdMaxCharInc;
  FWORD  fwdCapHeight;
  FWORD  fwdXHeight;
  FWORD  fwdSubscriptXSize;
  FWORD  fwdSubscriptYSize;
  FWORD  fwdSubscriptXOffset;
  FWORD  fwdSubscriptYOffset;
  FWORD  fwdSuperscriptXSize;
  FWORD  fwdSuperscriptYSize;
  FWORD  fwdSuperscriptXOffset;
  FWORD  fwdSuperscriptYOffset;
  FWORD  fwdUnderscoreSize;
  FWORD  fwdUnderscorePosition;
  FWORD  fwdStrikeoutSize;
  FWORD  fwdStrikeoutPosition;
  BYTE  chFirstChar;
  BYTE  chLastChar;
  BYTE  chDefaultChar;
  BYTE  chBreakChar;
  WCHAR  wcFirstChar;
  WCHAR  wcLastChar;
  WCHAR  wcDefaultChar;
  WCHAR  wcBreakChar;
  POINTL  ptlBaseline;
  POINTL  ptlAspect;
  POINTL  ptlCaret;
  RECTL  rclFontBox;
  BYTE  achVendId[4];
  ULONG  cKerningPairs;
  ULONG  ulPanoseCulture;
  PANOSE  panose;
#if defined(_WIN64)
  PVOID  Align;
#endif
} IFIMETRICS, *PIFIMETRICS;

/* LINEATTRS.fl */
#define LA_GEOMETRIC                      0x00000001
#define LA_ALTERNATE                      0x00000002
#define LA_STARTGAP                       0x00000004
#define LA_STYLED                         0x00000008

/* LINEATTRS.iJoin */
#define JOIN_ROUND                        0L
#define JOIN_BEVEL                        1L
#define JOIN_MITER                        2L

/* LINEATTRS.iEndCap */
#define ENDCAP_ROUND                      0L
#define ENDCAP_SQUARE                     1L
#define ENDCAP_BUTT                       2L

typedef struct _LINEATTRS {
  FLONG  fl;
  ULONG  iJoin;
  ULONG  iEndCap;
  FLOAT_LONG  elWidth;
  FLOATL  eMiterLimit;
  ULONG  cstyle;
  PFLOAT_LONG  pstyle;
  FLOAT_LONG  elStyleState;
} LINEATTRS, *PLINEATTRS;

typedef struct _PALOBJ {
  ULONG  ulReserved;
} PALOBJ;

typedef struct _PERBANDINFO {
  BOOL  bRepeatThisBand;
  SIZEL  szlBand;
  ULONG  ulHorzRes;
  ULONG  ulVertRes;
} PERBANDINFO, *PPERBANDINFO;

/* STROBJ.flAccel constants */
#define SO_FLAG_DEFAULT_PLACEMENT        0x00000001
#define SO_HORIZONTAL                    0x00000002
#define SO_VERTICAL                      0x00000004
#define SO_REVERSED                      0x00000008
#define SO_ZERO_BEARINGS                 0x00000010
#define SO_CHAR_INC_EQUAL_BM_BASE        0x00000020
#define SO_MAXEXT_EQUAL_BM_SIDE          0x00000040
#define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080
#define SO_GLYPHINDEX_TEXTOUT            0x00000100
#define SO_ESC_NOT_ORIENT                0x00000200
#define SO_DXDY                          0x00000400
#define SO_CHARACTER_EXTRA               0x00000800
#define SO_BREAK_EXTRA                   0x00001000

typedef struct _STROBJ {
  ULONG  cGlyphs;
  FLONG  flAccel;
  ULONG  ulCharInc;
  RECTL  rclBkGround;
  GLYPHPOS  *pgp;
  LPWSTR  pwszOrg;
} STROBJ;

typedef struct _SURFACEALIGNMENT {
  union {
		struct {
			DWORD  dwStartAlignment;
			DWORD  dwPitchAlignment;
			DWORD  dwReserved1;
			DWORD  dwReserved2;
		} Linear;
		struct {
			DWORD  dwXAlignment;
			DWORD  dwYAlignment;
			DWORD  dwReserved1;
			DWORD  dwReserved2;
		} Rectangular;
  };
} SURFACEALIGNMENT, *LPSURFACEALIGNMENT;

/* SURFOBJ.iType constants */
#define STYPE_BITMAP                      0L
#define STYPE_DEVICE                      1L
#define STYPE_DEVBITMAP                   3L

/* SURFOBJ.fjBitmap constants */
#define BMF_TOPDOWN                       0x0001
#define BMF_NOZEROINIT                    0x0002
#define BMF_DONTCACHE                     0x0004
#define BMF_USERMEM                       0x0008
#define BMF_KMSECTION                     0x0010
#define BMF_NOTSYSMEM                     0x0020
#define BMF_WINDOW_BLT                    0x0040
#define BMF_UMPDMEM                       0x0080
#define BMF_RESERVED                      0xFF00

typedef struct _SURFOBJ {
  DHSURF  dhsurf;
  HSURF  hsurf;
  DHPDEV  dhpdev;
  HDEV  hdev;
  SIZEL  sizlBitmap;
  ULONG  cjBits;
  PVOID  pvBits;
  PVOID  pvScan0;
  LONG  lDelta;
  ULONG  iUniq;
  ULONG  iBitmapFormat;
  USHORT  iType;
  USHORT  fjBitmap;
} SURFOBJ;

typedef struct _TYPE1_FONT {
  HANDLE  hPFM;
  HANDLE  hPFB;
  ULONG  ulIdentifier;
} TYPE1_FONT;

typedef struct _WNDOBJ {
  CLIPOBJ  coClient;
  PVOID  pvConsumer;
  RECTL  rclClient;
  SURFOBJ  *psoOwner;
} WNDOBJ, *PWNDOBJ;

typedef struct _XFORML {
  FLOATL  eM11;
  FLOATL  eM12;
  FLOATL  eM21;
  FLOATL  eM22;
  FLOATL  eDx;
  FLOATL  eDy;
} XFORML, *PXFORML;

typedef struct _XFORMOBJ {
  ULONG  ulReserved;
} XFORMOBJ;

/* XLATEOBJ.flXlate constants */
#define XO_TRIVIAL                        0x00000001
#define XO_TABLE                          0x00000002
#define XO_TO_MONO                        0x00000004
#define XO_FROM_CMYK                      0x00000008
#define XO_DEVICE_ICM                     0x00000010
#define XO_HOST_ICM                       0x00000020

typedef struct _XLATEOBJ {
  ULONG  iUniq;
  FLONG  flXlate;
  USHORT  iSrcType;
  USHORT  iDstType;
  ULONG  cEntries;
  ULONG  *pulXlate;
} XLATEOBJ;

typedef VOID DDKAPI (CALLBACK *WNDOBJCHANGEPROC)(
  /*IN*/ WNDOBJ  *pwo,
  /*IN*/ FLONG  fl);


WIN32KAPI
HANDLE
DDKAPI
BRUSHOBJ_hGetColorTransform(
  /*IN*/ BRUSHOBJ  *pbo);

WIN32KAPI
PVOID
DDKAPI
BRUSHOBJ_pvAllocRbrush(
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ ULONG  cj);

WIN32KAPI
PVOID
DDKAPI
BRUSHOBJ_pvGetRbrush(
  /*IN*/ BRUSHOBJ  *pbo);

WIN32KAPI
ULONG
DDKAPI
BRUSHOBJ_ulGetBrushColor(
  /*IN*/ BRUSHOBJ  *pbo);

WIN32KAPI
BOOL
DDKAPI
CLIPOBJ_bEnum(
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ ULONG  cj,

  /*OUT*/ ULONG  *pv);

/* CLIPOBJ_cEnumStart.iType constants */
#define CT_RECTANGLES                     0L

/* CLIPOBJ_cEnumStart.iDirection constants */
#define CD_RIGHTDOWN                      0x00000000
#define CD_LEFTDOWN                       0x00000001
#define CD_LEFTWARDS                      0x00000001
#define CD_RIGHTUP                        0x00000002
#define CD_UPWARDS                        0x00000002
#define CD_LEFTUP                         0x00000003
#define CD_ANY                            0x00000004

WIN32KAPI
ULONG
DDKAPI
CLIPOBJ_cEnumStart(
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ BOOL  bAll,
  /*IN*/ ULONG  iType,
  /*IN*/ ULONG  iDirection,
  /*IN*/ ULONG  cLimit);

WIN32KAPI
PATHOBJ*
DDKAPI
CLIPOBJ_ppoGetPath(
  /*IN*/ CLIPOBJ  *pco);

WIN32KAPI
VOID
DDKAPI
EngAcquireSemaphore(
  /*IN*/ HSEMAPHORE  hsem);

#define FL_ZERO_MEMORY                    0x00000001
#define FL_NONPAGED_MEMORY                0x00000002

WIN32KAPI
PVOID
DDKAPI
EngAllocMem(
  /*IN*/ ULONG  Flags,
  /*IN*/ ULONG  MemSize,
  /*IN*/ ULONG  Tag);

WIN32KAPI
PVOID
DDKAPI
EngAllocPrivateUserMem(
  /*IN*/ PDD_SURFACE_LOCAL  psl,
  /*IN*/ SIZE_T  cj,
  /*IN*/ ULONG  tag);

WIN32KAPI
PVOID
DDKAPI
EngAllocUserMem(
  /*IN*/ SIZE_T  cj,
  /*IN*/ ULONG  tag);

WIN32KAPI
BOOL
DDKAPI
EngAlphaBlend(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ BLENDOBJ  *pBlendObj);

/* EngAssociateSurface.flHooks constants */
#define HOOK_BITBLT                       0x00000001
#define HOOK_STRETCHBLT                   0x00000002
#define HOOK_PLGBLT                       0x00000004
#define HOOK_TEXTOUT                      0x00000008
#define HOOK_PAINT                        0x00000010
#define HOOK_STROKEPATH                   0x00000020
#define HOOK_FILLPATH                     0x00000040
#define HOOK_STROKEANDFILLPATH            0x00000080
#define HOOK_LINETO                       0x00000100
#define HOOK_COPYBITS                     0x00000400
#define HOOK_MOVEPANNING                  0x00000800
#define HOOK_SYNCHRONIZE                  0x00001000
#define HOOK_STRETCHBLTROP                0x00002000
#define HOOK_SYNCHRONIZEACCESS            0x00004000
#define HOOK_TRANSPARENTBLT               0x00008000
#define HOOK_ALPHABLEND                   0x00010000
#define HOOK_GRADIENTFILL                 0x00020000
#define HOOK_FLAGS                        0x0003b5ff

WIN32KAPI
BOOL
DDKAPI
EngAssociateSurface(
  /*IN*/ HSURF  hsurf,
  /*IN*/ HDEV  hdev,
  /*IN*/ FLONG  flHooks);

WIN32KAPI
BOOL
DDKAPI
EngBitBlt(
  /*IN*/ SURFOBJ  *psoTrg,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclTrg,
  /*IN*/ POINTL  *pptlSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrush,
  /*IN*/ ROP4  rop4);

WIN32KAPI
BOOL
DDKAPI
EngCheckAbort(
  /*IN*/ SURFOBJ  *pso);

WIN32KAPI
VOID
DDKAPI
EngClearEvent(
  /*IN*/ PEVENT  pEvent);

WIN32KAPI
FD_GLYPHSET*
DDKAPI
EngComputeGlyphSet(
  /*IN*/ INT  nCodePage,
  /*IN*/ INT  nFirstChar,
  /*IN*/ INT  cChars);

/* EngControlSprites.fl constants */
#define ECS_TEARDOWN                      0x00000001
#define ECS_REDRAW                        0x00000002

WIN32KAPI
BOOL
DDKAPI
EngControlSprites(
  /*IN*/ WNDOBJ  *pwo,
  /*IN*/ FLONG  fl);

WIN32KAPI
BOOL
DDKAPI
EngCopyBits(

  /*OUT*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ POINTL  *pptlSrc);

WIN32KAPI
HBITMAP
DDKAPI
EngCreateBitmap(
  /*IN*/ SIZEL  sizl,
  /*IN*/ LONG  lWidth,
  /*IN*/ ULONG  iFormat,
  /*IN*/ FLONG  fl,
  /*IN*/ PVOID  pvBits);

WIN32KAPI
CLIPOBJ*
DDKAPI
EngCreateClip(
  VOID);

WIN32KAPI
HBITMAP
DDKAPI
EngCreateDeviceBitmap(
  /*IN*/ DHSURF  dhsurf,
  /*IN*/ SIZEL  sizl,
  /*IN*/ ULONG  iFormatCompat);

WIN32KAPI
HSURF
DDKAPI
EngCreateDeviceSurface(
  DHSURF  dhsurf,
  SIZEL  sizl,
  ULONG  iFormatCompat);

#if 0
WIN32KAPI
HDRVOBJ
DDKAPI
EngCreateDriverObj(
  PVOID  pvObj,
  FREEOBJPROC  pFreeObjProc,
  HDEV  hdev);
#endif

WIN32KAPI
BOOL
DDKAPI
EngCreateEvent(

  /*OUT*/ PEVENT  *ppEvent);

/* EngCreatePalette.iMode constants */
#define PAL_INDEXED                       0x00000001
#define PAL_BITFIELDS                     0x00000002
#define PAL_RGB                           0x00000004
#define PAL_BGR                           0x00000008
#define PAL_CMYK                          0x00000010

WIN32KAPI
HPALETTE
DDKAPI
EngCreatePalette(
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG  cColors,
  /*IN*/ ULONG  *pulColors,
  /*IN*/ FLONG  flRed,
  /*IN*/ FLONG  flGreen,
  /*IN*/ FLONG  flBlue);

WIN32KAPI
PATHOBJ*
DDKAPI
EngCreatePath(
  VOID);

WIN32KAPI
HSEMAPHORE
DDKAPI
EngCreateSemaphore(
  VOID);

/* EngCreateWnd.fl constants */
#define WO_RGN_CLIENT_DELTA               0x00000001
#define WO_RGN_CLIENT                     0x00000002
#define WO_RGN_SURFACE_DELTA              0x00000004
#define WO_RGN_SURFACE                    0x00000008
#define WO_RGN_UPDATE_ALL                 0x00000010
#define WO_RGN_WINDOW                     0x00000020
#define WO_DRAW_NOTIFY                    0x00000040
#define WO_SPRITE_NOTIFY                  0x00000080
#define WO_RGN_DESKTOP_COORD              0x00000100

WIN32KAPI
WNDOBJ*
DDKAPI
EngCreateWnd(
  SURFOBJ  *pso,
  HWND  hwnd,
  WNDOBJCHANGEPROC  pfn,
  FLONG  fl,
  int  iPixelFormat);

WIN32KAPI
VOID
DDKAPI
EngDebugBreak(
  VOID);

WIN32KAPI
VOID
DDKAPI
EngDebugPrint(
  /*IN*/ PCHAR StandardPrefix,
  /*IN*/ PCHAR DebugMessage,
  /*IN*/ va_list ap);

WIN32KAPI
VOID
DDKAPI
EngDeleteClip(
  /*IN*/ CLIPOBJ  *pco);

WIN32KAPI
BOOL
DDKAPI
EngDeleteDriverObj(
  /*IN*/ HDRVOBJ  hdo,
  /*IN*/ BOOL  bCallBack,
  /*IN*/ BOOL  bLocked);

WIN32KAPI
BOOL
DDKAPI
EngDeleteEvent(
  /*IN*/ PEVENT  pEvent);

WIN32KAPI
BOOL
DDKAPI
EngDeleteFile(
  /*IN*/ LPWSTR  pwszFileName);

WIN32KAPI
BOOL
DDKAPI
EngDeletePalette(
  /*IN*/ HPALETTE  hpal);

WIN32KAPI
VOID
DDKAPI
EngDeletePath(
  /*IN*/ PATHOBJ  *ppo);

WIN32KAPI
VOID
DDKAPI
EngDeleteSafeSemaphore(
  /*IN OUT*/ ENGSAFESEMAPHORE  *pssem);

WIN32KAPI
VOID
DDKAPI
EngDeleteSemaphore(
  /*IN OUT*/ HSEMAPHORE  hsem);

WIN32KAPI
BOOL
DDKAPI
EngDeleteSurface(
  /*IN*/ HSURF  hsurf);

WIN32KAPI
VOID
DDKAPI
EngDeleteWnd(
  /*IN*/ WNDOBJ  *pwo);

WIN32KAPI
DWORD
DDKAPI
EngDeviceIoControl(
  /*IN*/ HANDLE  hDevice,
  /*IN*/ DWORD  dwIoControlCode,
  /*IN*/ LPVOID  lpInBuffer,
  /*IN*/ DWORD  nInBufferSize,
  /*IN OUT*/ LPVOID  lpOutBuffer,
  /*IN*/ DWORD  nOutBufferSize,

  /*OUT*/ LPDWORD  lpBytesReturned);

WIN32KAPI
ULONG
DDKAPI
EngDitherColor(
  /*IN*/ HDEV  hdev,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG  rgb,

  /*OUT*/ ULONG  *pul);

WIN32KAPI
BOOL
DDKAPI
EngEnumForms(
  /*IN*/ HANDLE  hPrinter,
  /*IN*/ DWORD  Level,

  /*OUT*/ LPBYTE  pForm,
  /*IN*/ DWORD  cbBuf,

  /*OUT*/ LPDWORD  pcbNeeded,

  /*OUT*/ LPDWORD  pcReturned);

WIN32KAPI
BOOL
DDKAPI
EngEraseSurface(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ RECTL  *prcl,
  /*IN*/ ULONG  iColor);

WIN32KAPI
BOOL
DDKAPI
EngFillPath(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mix,
  /*IN*/ FLONG  flOptions);

WIN32KAPI
PVOID
DDKAPI
EngFindImageProcAddress(
  /*IN*/ HANDLE  hModule,
  /*IN*/ LPSTR  lpProcName);

WIN32KAPI
PVOID
DDKAPI
EngFindResource(
  /*IN*/ HANDLE  h,
  /*IN*/ int  iName,
  /*IN*/ int  iType,

  /*OUT*/ PULONG  pulSize);

WIN32KAPI
PVOID
DDKAPI
EngFntCacheAlloc(
  /*IN*/ ULONG  FastCheckSum,
  /*IN*/ ULONG  ulSize);

/* EngFntCacheFault.iFaultMode constants */
#define ENG_FNT_CACHE_READ_FAULT          0x00000001
#define ENG_FNT_CACHE_WRITE_FAULT         0x00000002

WIN32KAPI
VOID
DDKAPI
EngFntCacheFault(
  /*IN*/ ULONG  ulFastCheckSum,
  /*IN*/ ULONG  iFaultMode);

WIN32KAPI
PVOID
DDKAPI
EngFntCacheLookUp(
  /*IN*/ ULONG  FastCheckSum,

  /*OUT*/ ULONG  *pulSize);

WIN32KAPI
VOID
DDKAPI
EngFreeMem(
  /*IN*/ PVOID  Mem);

WIN32KAPI
VOID
DDKAPI
EngFreeModule(
  /*IN*/ HANDLE  h);

WIN32KAPI
VOID
DDKAPI
EngFreePrivateUserMem(
  /*IN*/ PDD_SURFACE_LOCAL  psl,
  /*IN*/ PVOID  pv);

WIN32KAPI
VOID
DDKAPI
EngFreeUserMem(
  /*IN*/ PVOID  pv);

WIN32KAPI
VOID
DDKAPI
EngGetCurrentCodePage(

  /*OUT*/ PUSHORT  OemCodePage,

  /*OUT*/ PUSHORT  AnsiCodePage);

WIN32KAPI
HANDLE
DDKAPI
EngGetCurrentProcessId(
  VOID);

WIN32KAPI
HANDLE
DDKAPI
EngGetCurrentThreadId(
  VOID);

WIN32KAPI
LPWSTR
DDKAPI
EngGetDriverName(
  /*IN*/ HDEV  hdev);

WIN32KAPI
BOOL
DDKAPI
EngGetFileChangeTime(
  /*IN*/ HANDLE  h,

  /*OUT*/ LARGE_INTEGER  *pChangeTime);

WIN32KAPI
BOOL
DDKAPI
EngGetFilePath(
  /*IN*/ HANDLE  h,

  /*OUT*/ WCHAR  (*pDest)[MAX_PATH+1]);

WIN32KAPI
BOOL
DDKAPI
EngGetForm(
  /*IN*/ HANDLE  hPrinter,
  /*IN*/ LPWSTR  pFormName,
  /*IN*/ DWORD  Level,

  /*OUT*/ LPBYTE  pForm,
  /*IN*/ DWORD  cbBuf,

  /*OUT*/ LPDWORD  pcbNeeded);

WIN32KAPI
ULONG
DDKAPI
EngGetLastError(
  VOID);

WIN32KAPI
BOOL
DDKAPI
EngGetPrinter(
  /*IN*/ HANDLE  hPrinter,
  /*IN*/ DWORD  dwLevel,

  /*OUT*/ LPBYTE  pPrinter,
  /*IN*/ DWORD  cbBuf,

  /*OUT*/ LPDWORD  pcbNeeded);

WIN32KAPI
DWORD
DDKAPI
EngGetPrinterData(
  /*IN*/ HANDLE  hPrinter,
  /*IN*/ LPWSTR  pValueName,

  /*OUT*/ LPDWORD  pType,

  /*OUT*/ LPBYTE  pData,
  /*IN*/ DWORD  nSize,

  /*OUT*/ LPDWORD  pcbNeeded);

WIN32KAPI
LPWSTR
DDKAPI
EngGetPrinterDataFileName(
  /*IN*/ HDEV  hdev);

WIN32KAPI
BOOL
DDKAPI
EngGetPrinterDriver(
  /*IN*/ HANDLE  hPrinter,
  /*IN*/ LPWSTR  pEnvironment,
  /*IN*/ DWORD  dwLevel,

  /*OUT*/ BYTE  *lpbDrvInfo,
  /*IN*/ DWORD  cbBuf,

  /*OUT*/ DWORD  *pcbNeeded);

WIN32KAPI
HANDLE
DDKAPI
EngGetProcessHandle(
  VOID);

WIN32KAPI
BOOL
DDKAPI
EngGetType1FontList(
  /*IN*/ HDEV  hdev,

  /*OUT*/ TYPE1_FONT  *pType1Buffer,
  /*IN*/ ULONG  cjType1Buffer,

  /*OUT*/ PULONG  pulLocalFonts,

  /*OUT*/ PULONG  pulRemoteFonts,

  /*OUT*/ LARGE_INTEGER  *pLastModified);

WIN32KAPI
BOOL
DDKAPI
EngGradientFill(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ TRIVERTEX  *pVertex,
  /*IN*/ ULONG  nVertex,
  /*IN*/ PVOID  pMesh,
  /*IN*/ ULONG  nMesh,
  /*IN*/ RECTL  *prclExtents,
  /*IN*/ POINTL  *pptlDitherOrg,
  /*IN*/ ULONG  ulMode);

/* EngHangNotification return values */
#define EHN_RESTORED                      0x00000000
#define EHN_ERROR                         0x00000001

WIN32KAPI
ULONG
DDKAPI
EngHangNotification(
  /*IN*/ HDEV  hDev,
  /*IN*/ PVOID  Reserved);

WIN32KAPI
BOOL
DDKAPI
EngInitializeSafeSemaphore(

  /*OUT*/ ENGSAFESEMAPHORE  *pssem);

WIN32KAPI
BOOL
DDKAPI
EngIsSemaphoreOwned(
  /*IN*/ HSEMAPHORE  hsem);

WIN32KAPI
BOOL
DDKAPI
EngIsSemaphoreOwnedByCurrentThread(
  /*IN*/ HSEMAPHORE  hsem);

WIN32KAPI
BOOL
DDKAPI
EngLineTo(
  SURFOBJ  *pso,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  LONG  x1,
  LONG  y1,
  LONG  x2,
  LONG  y2,
  RECTL  *prclBounds,
  MIX  mix);

WIN32KAPI
HANDLE
DDKAPI
EngLoadImage(
  /*IN*/ LPWSTR  pwszDriver);

WIN32KAPI
HANDLE
DDKAPI
EngLoadModule(
  /*IN*/ LPWSTR  pwsz);

WIN32KAPI
HANDLE
DDKAPI
EngLoadModuleForWrite(
  /*IN*/ LPWSTR  pwsz,
  /*IN*/ ULONG  cjSizeOfModule);

WIN32KAPI
PDD_SURFACE_LOCAL
DDKAPI
EngLockDirectDrawSurface(
  /*IN*/ HANDLE  hSurface);

WIN32KAPI
DRIVEROBJ*
DDKAPI
EngLockDriverObj(
  /*IN*/ HDRVOBJ  hdo);

WIN32KAPI
SURFOBJ*
DDKAPI
EngLockSurface(
  /*IN*/ HSURF  hsurf);

WIN32KAPI
BOOL
DDKAPI
EngLpkInstalled(
  VOID);

WIN32KAPI
PEVENT
DDKAPI
EngMapEvent(
  /*IN*/ HDEV  hDev,
  /*IN*/ HANDLE  hUserObject,
  /*IN*/ PVOID  Reserved1,
  /*IN*/ PVOID  Reserved2,
  /*IN*/ PVOID  Reserved3);

WIN32KAPI
PVOID
DDKAPI
EngMapFile(
  /*IN*/ LPWSTR  pwsz,
  /*IN*/ ULONG  cjSize,

  /*OUT*/ ULONG_PTR  *piFile);

WIN32KAPI
BOOL
DDKAPI
EngMapFontFile(
  ULONG_PTR  iFile,
  PULONG  *ppjBuf,
  ULONG  *pcjBuf);

WIN32KAPI
BOOL
DDKAPI
EngMapFontFileFD(
  /*IN*/ ULONG_PTR  iFile,

  /*OUT*/ PULONG  *ppjBuf,

  /*OUT*/ ULONG  *pcjBuf);

WIN32KAPI
PVOID
DDKAPI
EngMapModule(
  /*IN*/ HANDLE  h,

  /*OUT*/ PULONG  pSize);

WIN32KAPI
BOOL
DDKAPI
EngMarkBandingSurface(
  /*IN*/ HSURF  hsurf);

/* EngModifySurface.flSurface constants */
#define MS_NOTSYSTEMMEMORY                0x00000001
#define MS_SHAREDACCESS                   0x00000002

WIN32KAPI
BOOL
DDKAPI
EngModifySurface(
  /*IN*/ HSURF  hsurf,
  /*IN*/ HDEV  hdev,
  /*IN*/ FLONG  flHooks,
  /*IN*/ FLONG  flSurface,
  /*IN*/ DHSURF  dhsurf,
  /*IN*/ VOID  *pvScan0,
  /*IN*/ LONG  lDelta,
  /*IN*/ VOID  *pvReserved);

WIN32KAPI
VOID
DDKAPI
EngMovePointer(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LONG  x,
  /*IN*/ LONG  y,
  /*IN*/ RECTL  *prcl);

WIN32KAPI
int
DDKAPI
EngMulDiv(
  /*IN*/ int  a,
  /*IN*/ int  b,
  /*IN*/ int  c);

WIN32KAPI
VOID
DDKAPI
EngMultiByteToUnicodeN(

  /*OUT*/ LPWSTR  UnicodeString,
  /*IN*/ ULONG  MaxBytesInUnicodeString,

  /*OUT*/ PULONG  BytesInUnicodeString,
  /*IN*/ PCHAR  MultiByteString,
  /*IN*/ ULONG  BytesInMultiByteString);

WIN32KAPI
INT
DDKAPI
EngMultiByteToWideChar(
  /*IN*/ UINT  CodePage,

  /*OUT*/ LPWSTR  WideCharString,
  /*IN*/ INT  BytesInWideCharString,
  /*IN*/ LPSTR  MultiByteString,
  /*IN*/ INT  BytesInMultiByteString);

WIN32KAPI
BOOL
DDKAPI
EngPaint(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mix);

WIN32KAPI
BOOL
DDKAPI
EngPlgBlt(
  /*IN*/ SURFOBJ  *psoTrg,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMsk,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ POINTFIX  *pptfx,
  /*IN*/ RECTL  *prcl,
  /*IN*/ POINTL  *pptl,
  /*IN*/ ULONG  iMode);

WIN32KAPI
VOID
DDKAPI
EngProbeForRead(
  /*IN*/ PVOID  Address,
  /*IN*/ ULONG  Length,
  /*IN*/ ULONG  Alignment);

WIN32KAPI
VOID
DDKAPI
EngProbeForReadAndWrite(
  /*IN*/ PVOID  Address,
  /*IN*/ ULONG  Length,
  /*IN*/ ULONG  Alignment);

typedef enum _ENG_DEVICE_ATTRIBUTE {
  QDA_RESERVED = 0,
  QDA_ACCELERATION_LEVEL
} ENG_DEVICE_ATTRIBUTE;

WIN32KAPI
BOOL
DDKAPI
EngQueryDeviceAttribute(
  /*IN*/ HDEV  hdev,
  /*IN*/ ENG_DEVICE_ATTRIBUTE  devAttr,
  /*IN*/ VOID  *pvIn,
  /*IN*/ ULONG  ulInSize,

  /*OUT*/ VOID  *pvOut,

  /*OUT*/ ULONG  ulOutSize);

WIN32KAPI
LARGE_INTEGER
DDKAPI
EngQueryFileTimeStamp(
  /*IN*/ LPWSTR  pwsz);

WIN32KAPI
VOID
DDKAPI
EngQueryLocalTime(

  /*OUT*/ PENG_TIME_FIELDS  ptf);

WIN32KAPI
ULONG
DDKAPI
EngQueryPalette(
  /*IN*/ HPALETTE  hPal,

  /*OUT*/ ULONG  *piMode,
  /*IN*/ ULONG  cColors,

  /*OUT*/ ULONG  *pulColors);

WIN32KAPI
VOID
DDKAPI
EngQueryPerformanceCounter(

  /*OUT*/ LONGLONG  *pPerformanceCount);

WIN32KAPI
VOID
DDKAPI
EngQueryPerformanceFrequency(

  /*OUT*/ LONGLONG  *pFrequency);

typedef enum _ENG_SYSTEM_ATTRIBUTE {
  EngProcessorFeature = 1,
  EngNumberOfProcessors,
  EngOptimumAvailableUserMemory,
  EngOptimumAvailableSystemMemory,
} ENG_SYSTEM_ATTRIBUTE;

#define QSA_MMX                           0x00000100
#define QSA_SSE                           0x00002000
#define QSA_3DNOW                         0x00004000

WIN32KAPI
BOOL
DDKAPI
EngQuerySystemAttribute(
  /*IN*/ ENG_SYSTEM_ATTRIBUTE  CapNum,

  /*OUT*/ PDWORD  pCapability);

WIN32KAPI
LONG
DDKAPI
EngReadStateEvent(
  /*IN*/ PEVENT  pEvent);

WIN32KAPI
VOID
DDKAPI
EngReleaseSemaphore(
  /*IN*/ HSEMAPHORE  hsem);

WIN32KAPI
BOOL
DDKAPI
EngRestoreFloatingPointState(
  /*IN*/ VOID  *pBuffer);

WIN32KAPI
ULONG
DDKAPI
EngSaveFloatingPointState(

  /*OUT*/ VOID  *pBuffer,
  /*IN*/ ULONG  cjBufferSize);

WIN32KAPI
HANDLE
DDKAPI
EngSecureMem(
  /*IN*/ PVOID  Address,
  /*IN*/ ULONG  Length);

WIN32KAPI
LONG
DDKAPI
EngSetEvent(
  /*IN*/ PEVENT  pEvent);

WIN32KAPI
VOID
DDKAPI
EngSetLastError(
  /*IN*/ ULONG  iError);

WIN32KAPI
ULONG
DDKAPI
EngSetPointerShape(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ SURFOBJ  *psoColor,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ LONG  xHot,
  /*IN*/ LONG  yHot,
  /*IN*/ LONG  x,
  /*IN*/ LONG  y,
  /*IN*/ RECTL  *prcl,
  /*IN*/ FLONG  fl);

WIN32KAPI
BOOL
DDKAPI
EngSetPointerTag(
  /*IN*/ HDEV  hdev,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ SURFOBJ  *psoColor,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ FLONG  fl);

WIN32KAPI
DWORD
DDKAPI
EngSetPrinterData(
  /*IN*/ HANDLE  hPrinter,
  /*IN*/ LPWSTR  pType,
  /*IN*/ DWORD  dwType,
  /*IN*/ LPBYTE  lpbPrinterData,
  /*IN*/ DWORD  cjPrinterData);

typedef int DDKCDECLAPI (*SORTCOMP)(const void *pv1, const void *pv2);

WIN32KAPI
VOID
DDKAPI
EngSort(
  /*IN OUT*/ PBYTE  pjBuf,
  /*IN*/ ULONG  c,
  /*IN*/ ULONG  cjElem,
  /*IN*/ SORTCOMP  pfnComp);

WIN32KAPI
BOOL
DDKAPI
EngStretchBlt(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlHTOrg,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ ULONG  iMode);

WIN32KAPI
BOOL
DDKAPI
EngStretchBltROP(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlHTOrg,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ ULONG  iMode,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ DWORD  rop4);

WIN32KAPI
BOOL
DDKAPI
EngStrokeAndFillPath(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XFORMOBJ  *pxo,
  /*IN*/ BRUSHOBJ  *pboStroke,
  /*IN*/ LINEATTRS  *plineattrs,
  /*IN*/ BRUSHOBJ  *pboFill,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mixFill,
  /*IN*/ FLONG  flOptions);

WIN32KAPI
BOOL
DDKAPI
EngStrokePath(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XFORMOBJ  *pxo,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ LINEATTRS  *plineattrs,
  /*IN*/ MIX  mix);

WIN32KAPI
BOOL
DDKAPI
EngTextOut(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ STROBJ  *pstro,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ RECTL  *prclExtra,
  /*IN*/ RECTL  *prclOpaque,
  /*IN*/ BRUSHOBJ  *pboFore,
  /*IN*/ BRUSHOBJ  *pboOpaque,
  /*IN*/ POINTL  *pptlOrg,
  /*IN*/ MIX  mix);

WIN32KAPI
BOOL
DDKAPI
EngTransparentBlt(
  /*IN*/ SURFOBJ  *psoDst,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDst,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ ULONG  iTransColor,
  /*IN*/ ULONG  ulReserved);

WIN32KAPI
VOID
DDKAPI
EngUnicodeToMultiByteN(

  /*OUT*/ PCHAR  MultiByteString,
  /*IN*/ ULONG  MaxBytesInMultiByteString,

  /*OUT*/ PULONG  BytesInMultiByteString,
  /*IN*/ PWSTR  UnicodeString,
  /*IN*/ ULONG  BytesInUnicodeString);

WIN32KAPI
VOID
DDKAPI
EngUnloadImage(
  /*IN*/ HANDLE  hModule);

WIN32KAPI
BOOL
DDKAPI
EngUnlockDirectDrawSurface(
  /*IN*/ PDD_SURFACE_LOCAL  pSurface);

WIN32KAPI
BOOL
DDKAPI
EngUnlockDriverObj(
  /*IN*/ HDRVOBJ  hdo);

WIN32KAPI
VOID
DDKAPI
EngUnlockSurface(
  /*IN*/ SURFOBJ  *pso);

WIN32KAPI
BOOL
DDKAPI
EngUnmapEvent(
  /*IN*/ PEVENT  pEvent);

WIN32KAPI
BOOL
DDKAPI
EngUnmapFile(
  /*IN*/ ULONG_PTR  iFile);

WIN32KAPI
VOID
DDKAPI
EngUnmapFontFile(
  ULONG_PTR  iFile);

WIN32KAPI
VOID
DDKAPI
EngUnmapFontFileFD(
  /*IN*/ ULONG_PTR  iFile);

WIN32KAPI
VOID
DDKAPI
EngUnsecureMem(
  /*IN*/ HANDLE  hSecure);

WIN32KAPI
BOOL
DDKAPI
EngWaitForSingleObject(
  /*IN*/ PEVENT  pEvent,
  /*IN*/ PLARGE_INTEGER  pTimeOut);

WIN32KAPI
INT
DDKAPI
EngWideCharToMultiByte(
  /*IN*/ UINT  CodePage,
  /*IN*/ LPWSTR  WideCharString,
  /*IN*/ INT  BytesInWideCharString,

  /*OUT*/ LPSTR  MultiByteString,
  /*IN*/ INT  BytesInMultiByteString);

WIN32KAPI
BOOL
DDKAPI
EngWritePrinter(
  /*IN*/ HANDLE  hPrinter,
  /*IN*/ LPVOID  pBuf,
  /*IN*/ DWORD  cbBuf,

  /*OUT*/ LPDWORD  pcWritten);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_Add(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ PFLOATOBJ  pf1);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_AddFloat(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ FLOATL  f);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_AddLong(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ LONG  l);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_Div(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ PFLOATOBJ  pf1);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_DivFloat(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ FLOATL  f);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_DivLong(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ LONG  l);

WIN32KAPI
BOOL
DDKAPI
FLOATOBJ_Equal(
  /*IN*/ PFLOATOBJ  pf,
  /*IN*/ PFLOATOBJ  pf1);

WIN32KAPI
BOOL
DDKAPI
FLOATOBJ_EqualLong(
  /*IN*/ PFLOATOBJ  pf,
  /*IN*/ LONG  l);

WIN32KAPI
LONG
DDKAPI
FLOATOBJ_GetFloat(
  /*IN*/ PFLOATOBJ  pf);

WIN32KAPI
LONG
DDKAPI
FLOATOBJ_GetLong(
  /*IN*/ PFLOATOBJ  pf);

WIN32KAPI
BOOL
DDKAPI
FLOATOBJ_GreaterThan(
  /*IN*/ PFLOATOBJ  pf,
  /*IN*/ PFLOATOBJ  pf1);

WIN32KAPI
BOOL
DDKAPI
FLOATOBJ_GreaterThanLong(
  /*IN*/ PFLOATOBJ  pf,
  /*IN*/ LONG  l);

WIN32KAPI
BOOL
DDKAPI
FLOATOBJ_LessThan(
  /*IN*/ PFLOATOBJ  pf,
  /*IN*/ PFLOATOBJ  pf1);

WIN32KAPI
BOOL
DDKAPI
FLOATOBJ_LessThanLong(
  /*IN*/ PFLOATOBJ  pf,
  /*IN*/ LONG  l);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_Mul(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ PFLOATOBJ  pf1);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_MulFloat(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ FLOATL  f);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_MulLong(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ LONG  l);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_Neg(
  /*IN OUT*/ PFLOATOBJ  pf);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_SetFloat(

  /*OUT*/ PFLOATOBJ  pf,
  /*IN*/ FLOATL  f);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_SetLong(

  /*OUT*/ PFLOATOBJ  pf,
  /*IN*/ LONG  l);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_Sub(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ PFLOATOBJ  pf1);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_SubFloat(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ FLOATL  f);

WIN32KAPI
VOID
DDKAPI
FLOATOBJ_SubLong(
  /*IN OUT*/ PFLOATOBJ  pf,
  /*IN*/ LONG  l);

WIN32KAPI
ULONG
DDKAPI
FONTOBJ_cGetAllGlyphHandles(
  /*IN*/ FONTOBJ  *pfo,

  /*OUT*/ HGLYPH  *phg);

WIN32KAPI
ULONG
DDKAPI
FONTOBJ_cGetGlyphs(
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG  cGlyph,
  /*IN*/ HGLYPH  *phg,

  /*OUT*/ PVOID  *ppvGlyph);

WIN32KAPI
FD_GLYPHSET*
DDKAPI
FONTOBJ_pfdg(
  /*IN*/ FONTOBJ  *pfo);

WIN32KAPI
IFIMETRICS*
DDKAPI
FONTOBJ_pifi(
  /*IN*/ FONTOBJ  *pfo);

WIN32KAPI
PBYTE
DDKAPI
FONTOBJ_pjOpenTypeTablePointer(
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  ulTag,

  /*OUT*/ ULONG  *pcjTable);

WIN32KAPI
PFD_GLYPHATTR
DDKAPI 
FONTOBJ_pQueryGlyphAttrs(
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode);

WIN32KAPI
PVOID
DDKAPI
FONTOBJ_pvTrueTypeFontFile(
  /*IN*/ FONTOBJ  *pfo,

  /*OUT*/ ULONG  *pcjFile);

WIN32KAPI
LPWSTR
DDKAPI
FONTOBJ_pwszFontFilePaths(
  /*IN*/ FONTOBJ  *pfo,

  /*OUT*/ ULONG  *pcwc);

WIN32KAPI
XFORMOBJ*
DDKAPI
FONTOBJ_pxoGetXform(
  /*IN*/ FONTOBJ  *pfo);

WIN32KAPI
VOID
DDKAPI
FONTOBJ_vGetInfo(
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  cjSize,

  /*OUT*/ FONTINFO  *pfi);

WIN32KAPI
FLATPTR
DDKAPI
HeapVidMemAllocAligned(
  /*IN*/ LPVIDMEM  lpVidMem,
  /*IN*/ DWORD  dwWidth,
  /*IN*/ DWORD  dwHeight,
  /*IN*/ LPSURFACEALIGNMENT  lpAlignment,

  /*OUT*/ LPLONG  lpNewPitch);

WIN32KAPI
LONG
DDKAPI
HT_ComputeRGBGammaTable(
  /*IN*/ USHORT  GammaTableEntries,
  /*IN*/ USHORT  GammaTableType,
  /*IN*/ USHORT  RedGamma,
  /*IN*/ USHORT  GreenGamma,
  /*IN*/ USHORT  BlueGamma,

  /*OUT*/ LPBYTE  pGammaTable);

WIN32KAPI
LONG
DDKAPI
HT_Get8BPPFormatPalette(

  /*OUT*/ LPPALETTEENTRY  pPaletteEntry,
  /*IN*/ USHORT  RedGamma,
  /*IN*/ USHORT  GreenGamma,
  /*IN*/ USHORT  BlueGamma);

WIN32KAPI
LONG
DDKAPI
HT_Get8BPPMaskPalette(
  /*IN OUT*/ LPPALETTEENTRY  pPaletteEntry,
  /*IN*/ BOOL  Use8BPPMaskPal,
  /*IN*/ BYTE  CMYMask,
  /*IN*/ USHORT  RedGamma,
  /*IN*/ USHORT  GreenGamma,
  /*IN*/ USHORT  BlueGamma);

WIN32KAPI
LONG
DDKAPI
HTUI_DeviceColorAdjustment(
  /*IN*/ LPSTR  pDeviceName,

  /*OUT*/ PDEVHTADJDATA  pDevHTAdjData);

WIN32KAPI
ULONG
DDKAPI
PALOBJ_cGetColors(
  /*IN*/ PALOBJ  *ppalo,
  /*IN*/ ULONG  iStart,
  /*IN*/ ULONG  cColors,

  /*OUT*/ ULONG  *pulColors);

WIN32KAPI
BOOL
DDKAPI
PATHOBJ_bCloseFigure(
  /*IN*/ PATHOBJ  *ppo);

WIN32KAPI
BOOL
DDKAPI
PATHOBJ_bEnum(
  /*IN*/ PATHOBJ  *ppo,

  /*OUT*/ PATHDATA  *ppd);

WIN32KAPI
BOOL
DDKAPI
PATHOBJ_bEnumClipLines(
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ ULONG  cb,

  /*OUT*/ CLIPLINE  *pcl);

WIN32KAPI
BOOL
DDKAPI
PATHOBJ_bMoveTo(
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ POINTFIX  ptfx);

WIN32KAPI
BOOL
DDKAPI
PATHOBJ_bPolyBezierTo(
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ POINTFIX  *pptfx,
  /*IN*/ ULONG  cptfx);

WIN32KAPI
BOOL
DDKAPI
PATHOBJ_bPolyLineTo(
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ POINTFIX  *pptfx,
  /*IN*/ ULONG  cptfx);

WIN32KAPI
VOID
DDKAPI
PATHOBJ_vEnumStart(
  /*IN*/ PATHOBJ  *ppo);

WIN32KAPI
VOID
DDKAPI
PATHOBJ_vEnumStartClipLines(
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LINEATTRS  *pla);

WIN32KAPI
VOID
DDKAPI
PATHOBJ_vGetBounds(
  /*IN*/ PATHOBJ  *ppo,

  /*OUT*/ PRECTFX  prectfx);

WIN32KAPI
BOOL
DDKAPI
STROBJ_bEnum(
  /*IN*/ STROBJ  *pstro,

  /*OUT*/ ULONG  *pc,

  /*OUT*/ PGLYPHPOS  *ppgpos);

WIN32KAPI
BOOL
DDKAPI
STROBJ_bEnumPositionsOnly(
  /*IN*/ STROBJ  *pstro,

  /*OUT*/ ULONG  *pc,

  /*OUT*/ PGLYPHPOS  *ppgpos);

WIN32KAPI
BOOL
DDKAPI
STROBJ_bGetAdvanceWidths(
  /*IN*/ STROBJ  *pso,
  /*IN*/ ULONG  iFirst,
  /*IN*/ ULONG  c,

  /*OUT*/ POINTQF  *pptqD);

WIN32KAPI
DWORD
DDKAPI
STROBJ_dwGetCodePage(
  /*IN*/ STROBJ  *pstro);

WIN32KAPI
FIX
DDKAPI
STROBJ_fxBreakExtra(
  /*IN*/ STROBJ  *pstro);

WIN32KAPI
FIX
DDKAPI
STROBJ_fxCharacterExtra(
  /*IN*/ STROBJ  *pstro);

WIN32KAPI
VOID
DDKAPI
STROBJ_vEnumStart(
  /*IN*/ STROBJ  *pstro);

WIN32KAPI
VOID
DDKAPI
VidMemFree(
  /*IN*/ LPVMEMHEAP  pvmh,
  /*IN*/ FLATPTR  ptr);

WIN32KAPI
BOOL
DDKAPI
WNDOBJ_bEnum(
  /*IN*/ WNDOBJ  *pwo,
  /*IN*/ ULONG  cj,

  /*OUT*/ ULONG  *pul);

WIN32KAPI
ULONG
DDKAPI
WNDOBJ_cEnumStart(
  /*IN*/ WNDOBJ  *pwo,
  /*IN*/ ULONG  iType,
  /*IN*/ ULONG  iDirection,
  /*IN*/ ULONG  cLimit);

WIN32KAPI
VOID
DDKAPI
WNDOBJ_vSetConsumer(
  /*IN*/ WNDOBJ  *pwo,
  /*IN*/ PVOID  pvConsumer);

/* XFORMOBJ_bApplyXform.iMode constants */
#define XF_LTOL                           0L
#define XF_INV_LTOL                       1L
#define XF_LTOFX                          2L
#define XF_INV_FXTOL                      3L

WIN32KAPI
BOOL
DDKAPI
XFORMOBJ_bApplyXform(
  /*IN*/ XFORMOBJ  *pxo,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG  cPoints,
  /*IN*/ PVOID  pvIn,

  /*OUT*/ PVOID  pvOut);

WIN32KAPI
ULONG
DDKAPI
XFORMOBJ_iGetFloatObjXform(
  /*IN*/ XFORMOBJ  *pxo,

  /*OUT*/ FLOATOBJ_XFORM  *pxfo);

WIN32KAPI
ULONG
DDKAPI
XFORMOBJ_iGetXform(
  /*IN*/ XFORMOBJ  *pxo,

  /*OUT*/ XFORML  *pxform);

/* XLATEOBJ_cGetPalette.iPal constants */
#define XO_SRCPALETTE                     1
#define XO_DESTPALETTE                    2
#define XO_DESTDCPALETTE                  3
#define XO_SRCBITFIELDS                   4
#define XO_DESTBITFIELDS                  5

WIN32KAPI
ULONG
DDKAPI
XLATEOBJ_cGetPalette(
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ ULONG  iPal,
  /*IN*/ ULONG  cPal,

  /*OUT*/ ULONG  *pPal);

WIN32KAPI
HANDLE
DDKAPI
XLATEOBJ_hGetColorTransform(
  /*IN*/ XLATEOBJ  *pxlo);

WIN32KAPI
ULONG
DDKAPI
XLATEOBJ_iXlate(
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ ULONG  iColor);

WIN32KAPI
ULONG*
DDKAPI
XLATEOBJ_piVector(
  /*IN*/ XLATEOBJ  *pxlo);



/* Graphics Driver Functions */

BOOL
DDKAPI
DrvAlphaBlend(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ BLENDOBJ  *pBlendObj);

BOOL
DDKAPI
DrvAssertMode(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ BOOL  bEnable);

BOOL
DDKAPI
DrvBitBlt(
  /*IN*/ SURFOBJ  *psoTrg,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclTrg,
  /*IN*/ POINTL  *pptlSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrush,
  /*IN*/ ROP4  rop4);

VOID
DDKAPI
DrvCompletePDEV(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ HDEV  hdev);

BOOL
DDKAPI
DrvCopyBits(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ POINTL  *pptlSrc);

HBITMAP
DDKAPI
DrvCreateDeviceBitmap(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ SIZEL  sizl,
  /*IN*/ ULONG  iFormat);

VOID
DDKAPI
DrvDeleteDeviceBitmap(
  /*IN*/ DHSURF  dhsurf);

HBITMAP
DDKAPI
DrvDeriveSurface(
  DD_DIRECTDRAW_GLOBAL  *pDirectDraw,
  DD_SURFACE_LOCAL  *pSurface);

LONG
DDKAPI
DrvDescribePixelFormat(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ LONG  iPixelFormat,
  /*IN*/ ULONG  cjpfd,

  /*OUT*/ PIXELFORMATDESCRIPTOR  *ppfd);

VOID
DDKAPI
DrvDestroyFont(
  /*IN*/ FONTOBJ  *pfo);

VOID
DDKAPI
DrvDisableDriver(
  VOID);

VOID
DDKAPI
DrvDisablePDEV(
  /*IN*/ DHPDEV  dhpdev);

VOID
DDKAPI
DrvDisableSurface(
  /*IN*/ DHPDEV  dhpdev);

#define DM_DEFAULT                        0x00000001
#define DM_MONOCHROME                     0x00000002

ULONG
DDKAPI
DrvDitherColor(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG  rgb,

  /*OUT*/ ULONG  *pul);

ULONG
DDKAPI
DrvDrawEscape(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ ULONG  iEsc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ RECTL  *prcl,
  /*IN*/ ULONG  cjIn,
  /*IN*/ PVOID  pvIn);

BOOL
DDKAPI
DrvEnableDriver(
  /*IN*/ ULONG  iEngineVersion,
  /*IN*/ ULONG  cj,

  /*OUT*/ DRVENABLEDATA  *pded);

DHPDEV
DDKAPI
DrvEnablePDEV(
  /*IN*/ DEVMODEW  *pdm,
  /*IN*/ LPWSTR  pwszLogAddress,
  /*IN*/ ULONG  cPat,

  /*OUT*/ HSURF  *phsurfPatterns,
  /*IN*/ ULONG  cjCaps,

  /*OUT*/ ULONG  *pdevcaps,
  /*IN*/ ULONG  cjDevInfo,

  /*OUT*/ DEVINFO  *pdi,
  /*IN*/ HDEV  hdev,
  /*IN*/ LPWSTR  pwszDeviceName,
  /*IN*/ HANDLE  hDriver);

HSURF
DDKAPI
DrvEnableSurface(
  /*IN*/ DHPDEV  dhpdev);

/* DrvEndDoc.fl constants */
#define ED_ABORTDOC                       0x00000001

BOOL
DDKAPI
DrvEndDoc(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ FLONG  fl);

ULONG
DDKAPI
DrvEscape(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ ULONG  iEsc,
  /*IN*/ ULONG  cjIn,
  /*IN*/ PVOID  pvIn,
  /*IN*/ ULONG  cjOut,

  /*OUT*/ PVOID  pvOut);

BOOL
DDKAPI
DrvFillPath(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mix,
  /*IN*/ FLONG  flOptions);

ULONG
DDKAPI
DrvFontManagement(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG  cjIn,
  /*IN*/ PVOID  pvIn,
  /*IN*/ ULONG  cjOut,

  /*OUT*/ PVOID  pvOut);

VOID
DDKAPI
DrvFree(
  /*IN*/ PVOID  pv,
  /*IN*/ ULONG_PTR  id);

/* DrvGetGlyphMode return values */
#define FO_HGLYPHS                        0L
#define FO_GLYPHBITS                      1L
#define FO_PATHOBJ                        2L

ULONG
DDKAPI
DrvGetGlyphMode(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ FONTOBJ  *pfo);

ULONG
DDKAPI
DrvGetModes(
  /*IN*/ HANDLE  hDriver,
  /*IN*/ ULONG  cjSize,

  /*OUT*/ DEVMODEW  *pdm);

PVOID
DDKAPI
DrvGetTrueTypeFile(
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  *pcj);

BOOL
DDKAPI
DrvGradientFill(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ TRIVERTEX  *pVertex,
  /*IN*/ ULONG  nVertex,
  /*IN*/ PVOID  pMesh,
  /*IN*/ ULONG  nMesh,
  /*IN*/ RECTL  *prclExtents,
  /*IN*/ POINTL  *pptlDitherOrg,
  /*IN*/ ULONG  ulMode);

BOOL
DDKAPI
DrvIcmCheckBitmapBits(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ HANDLE  hColorTransform,
  /*IN*/ SURFOBJ  *pso,

  /*OUT*/ PBYTE  paResults);

HANDLE
DDKAPI
DrvIcmCreateColorTransform(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ LPLOGCOLORSPACEW  pLogColorSpace,
  /*IN*/ PVOID  pvSourceProfile,
  /*IN*/ ULONG  cjSourceProfile,
  /*IN*/ PVOID  pvDestProfile,
  /*IN*/ ULONG  cjDestProfile,
  /*IN*/ PVOID  pvTargetProfile,
  /*IN*/ ULONG  cjTargetProfile,
  /*IN*/ DWORD  dwReserved);

BOOL
DDKAPI
DrvIcmDeleteColorTransform(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ HANDLE  hcmXform);

/* DrvIcmSetDeviceGammaRamp.iFormat constants */
#define IGRF_RGB_256BYTES                 0x00000000
#define IGRF_RGB_256WORDS                 0x00000001

BOOL
DDKAPI
DrvIcmSetDeviceGammaRamp(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ ULONG  iFormat,
  /*IN*/ LPVOID  lpRamp);

BOOL
DDKAPI
DrvLineTo(
  SURFOBJ  *pso,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  LONG  x1,
  LONG  y1,
  LONG  x2,
  LONG  y2,
  RECTL  *prclBounds,
  MIX  mix);

ULONG_PTR
DDKAPI
DrvLoadFontFile(
  ULONG  cFiles,
  ULONG_PTR  *piFile,
  PVOID  *ppvView,
  ULONG  *pcjView,
  DESIGNVECTOR  *pdv,
  ULONG  ulLangID,
  ULONG  ulFastCheckSum);

VOID
DDKAPI
DrvMovePointer(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LONG  x,
  /*IN*/ LONG  y,
  /*IN*/ RECTL  *prcl);

BOOL
DDKAPI
DrvNextBand(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ POINTL  *pptl);

VOID
DDKAPI
DrvNotify(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ ULONG  iType,
  /*IN*/ PVOID  pvData);

BOOL
DDKAPI
DrvOffset(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LONG  x,
  /*IN*/ LONG  y,
  /*IN*/ FLONG  flReserved);

BOOL
DDKAPI
DrvPaint(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mix);

BOOL
DDKAPI
DrvPlgBlt(
  /*IN*/ SURFOBJ  *psoTrg,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMsk,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ POINTFIX  *pptfx,
  /*IN*/ RECTL  *prcl,
  /*IN*/ POINTL  *pptl,
  /*IN*/ ULONG  iMode);

/* DrvQueryAdvanceWidths.iMode constants */
#define QAW_GETWIDTHS                     0
#define QAW_GETEASYWIDTHS                 1

BOOL
DDKAPI
DrvQueryAdvanceWidths(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode,
  /*IN*/ HGLYPH  *phg,

  /*OUT*/ PVOID  pvWidths,
  /*IN*/ ULONG  cGlyphs);

/* DrvQueryDeviceSupport.iType constants */
#define QDS_CHECKJPEGFORMAT               0x00000000
#define QDS_CHECKPNGFORMAT                0x00000001

BOOL
DDKAPI
DrvQueryDeviceSupport(
  SURFOBJ  *pso,
  XLATEOBJ  *pxlo,
  XFORMOBJ  *pxo,
  ULONG  iType,
  ULONG  cjIn,
  PVOID  pvIn,
  ULONG  cjOut,
  PVOID  pvOut);

/* DrvQueryDriverInfo.dwMode constants */
#define DRVQUERY_USERMODE                 0x00000001

BOOL
DDKAPI
DrvQueryDriverInfo(
  DWORD  dwMode,
  PVOID  pBuffer,
  DWORD  cbBuf,
  PDWORD  pcbNeeded);

PIFIMETRICS
DDKAPI
DrvQueryFont(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  iFace,
  /*IN*/ ULONG_PTR  *pid);

/* DrvQueryFontCaps.pulCaps constants */
#define QC_OUTLINES                       0x00000001
#define QC_1BIT                           0x00000002
#define QC_4BIT                           0x00000004

#define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)

LONG
DDKAPI
DrvQueryFontCaps(
  /*IN*/ ULONG  culCaps,

  /*OUT*/ ULONG  *pulCaps);

/* DrvQueryFontData.iMode constants */
#define QFD_GLYPHANDBITMAP                1L
#define QFD_GLYPHANDOUTLINE               2L
#define QFD_MAXEXTENTS                    3L
#define QFD_TT_GLYPHANDBITMAP             4L
#define QFD_TT_GRAY1_BITMAP               5L
#define QFD_TT_GRAY2_BITMAP               6L
#define QFD_TT_GRAY4_BITMAP               8L
#define QFD_TT_GRAY8_BITMAP               9L

#define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP

LONG
DDKAPI
DrvQueryFontData(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode,
  /*IN*/ HGLYPH  hg,
  /*IN OUT*/ GLYPHDATA  *pgd,
  /*IN OUT*/ PVOID  pv,
  /*IN*/ ULONG  cjSize);

/* DrvQueryFontFile.ulMode constants */
#define QFF_DESCRIPTION                   0x00000001
#define QFF_NUMFACES                      0x00000002

LONG
DDKAPI
DrvQueryFontFile(
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  ulMode,
  /*IN*/ ULONG  cjBuf,
  /*IN*/ ULONG  *pulBuf);

/* DrvQueryFontTree.iMode constants */
#define QFT_UNICODE                       0L
#define QFT_LIGATURES                     1L
#define QFT_KERNPAIRS                     2L
#define QFT_GLYPHSET                      3L

PVOID
DDKAPI
DrvQueryFontTree(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  iFace,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG_PTR  *pid);

PFD_GLYPHATTR
DDKAPI
DrvQueryGlyphAttrs(
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode);

ULONG
DDKAPI
DrvQueryPerBandInfo(
  /*IN*/ SURFOBJ  *pso,
  /*IN OUT*/ PERBANDINFO  *pbi);

/* DrvQueryTrueTypeOutline.bMetricsOnly constants */
#define TTO_METRICS_ONLY                  0x00000001
#define TTO_QUBICS                        0x00000002
#define TTO_UNHINTED                      0x00000004

LONG
DDKAPI
DrvQueryTrueTypeOutline(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ HGLYPH  hglyph,
  /*IN*/ BOOL  bMetricsOnly,
  /*IN*/ GLYPHDATA  *pgldt,
  /*IN*/ ULONG  cjBuf,

  /*OUT*/ TTPOLYGONHEADER  *ppoly);

LONG
DDKAPI
DrvQueryTrueTypeTable(
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  ulFont,
  /*IN*/ ULONG  ulTag,
  /*IN*/ PTRDIFF  dpStart,
  /*IN*/ ULONG  cjBuf,

  /*OUT*/ BYTE  *pjBuf,

  /*OUT*/ PBYTE  *ppjTable,

  /*OUT*/ ULONG *pcjTable);

/* DrvRealizeBrush.iHatch constants */
#define RB_DITHERCOLOR                    0x80000000L

#define HS_DDI_MAX                        6

BOOL
DDKAPI
DrvRealizeBrush(
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ SURFOBJ  *psoTarget,
  /*IN*/ SURFOBJ  *psoPattern,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ ULONG  iHatch);

/* DrvResetDevice return values */
#define DRD_SUCCESS                       0
#define DRD_ERROR                         1

ULONG
DDKAPI
DrvResetDevice(
  /*IN*/ DHPDEV dhpdev,
  /*IN*/ PVOID Reserved);

BOOL
DDKAPI
DrvResetPDEV(
  DHPDEV  dhpdevOld,
  DHPDEV  dhpdevNew);

/* DrvSaveScreenBits.iMode constants */
#define SS_SAVE                           0x00000000
#define SS_RESTORE                        0x00000001
#define SS_FREE                           0x00000002

ULONG_PTR
DDKAPI
DrvSaveScreenBits(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG_PTR  ident,
  /*IN*/ RECTL  *prcl);

BOOL
DDKAPI
DrvSendPage(
  /*IN*/ SURFOBJ  *pso);

BOOL
DDKAPI
DrvSetPalette(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ PALOBJ  *ppalo,
  /*IN*/ FLONG  fl,
  /*IN*/ ULONG  iStart,
  /*IN*/ ULONG  cColors);

BOOL
DDKAPI
DrvSetPixelFormat(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LONG  iPixelFormat,
  /*IN*/ HWND  hwnd);

/* DrvSetPointerShape return values */
#define SPS_ERROR                         0x00000000
#define SPS_DECLINE                       0x00000001
#define SPS_ACCEPT_NOEXCLUDE              0x00000002
#define SPS_ACCEPT_EXCLUDE                0x00000003
#define SPS_ACCEPT_SYNCHRONOUS            0x00000004

/* DrvSetPointerShape.fl constants */
#define SPS_CHANGE                        0x00000001L
#define SPS_ASYNCCHANGE                   0x00000002L
#define SPS_ANIMATESTART                  0x00000004L
#define SPS_ANIMATEUPDATE                 0x00000008L
#define SPS_ALPHA                         0x00000010L
#define SPS_LENGTHMASK                    0x00000F00L
#define SPS_FREQMASK                      0x000FF000L

ULONG
DDKAPI
DrvSetPointerShape(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ SURFOBJ  *psoColor,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ LONG  xHot,
  /*IN*/ LONG  yHot,
  /*IN*/ LONG  x,
  /*IN*/ LONG  y,
  /*IN*/ RECTL  *prcl,
  /*IN*/ FLONG  fl);

BOOL
DDKAPI
DrvStartBanding(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ POINTL  *pptl);

BOOL
DDKAPI
DrvStartDoc(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LPWSTR  pwszDocName,
  /*IN*/ DWORD  dwJobId);

BOOL
DDKAPI
DrvStartPage(
  /*IN*/ SURFOBJ  *pso);

BOOL
DDKAPI
DrvStretchBlt(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlHTOrg,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ ULONG  iMode);

BOOL
DDKAPI
DrvStretchBltROP(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlHTOrg,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ ULONG  iMode,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ DWORD  rop4);

BOOL
DDKAPI
DrvStrokeAndFillPath(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XFORMOBJ  *pxo,
  /*IN*/ BRUSHOBJ  *pboStroke,
  /*IN*/ LINEATTRS  *plineattrs,
  /*IN*/ BRUSHOBJ  *pboFill,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mixFill,
  /*IN*/ FLONG  flOptions);

BOOL
DDKAPI
DrvStrokePath(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XFORMOBJ  *pxo,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ LINEATTRS  *plineattrs,
  /*IN*/ MIX  mix);

BOOL
DDKAPI
DrvSwapBuffers(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ WNDOBJ  *pwo);

VOID
DDKAPI
DrvSynchronize(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ RECTL  *prcl);

/* DrvSynchronizeSurface.fl constants */
#define DSS_TIMER_EVENT                   0x00000001
#define DSS_FLUSH_EVENT                   0x00000002

VOID
DDKAPI
DrvSynchronizeSurface(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ RECTL  *prcl,
  /*IN*/ FLONG  fl);

BOOL
DDKAPI
DrvTextOut(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ STROBJ  *pstro,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ RECTL  *prclExtra,
  /*IN*/ RECTL  *prclOpaque,
  /*IN*/ BRUSHOBJ  *pboFore,
  /*IN*/ BRUSHOBJ  *pboOpaque,
  /*IN*/ POINTL  *pptlOrg,
  /*IN*/ MIX  mix);

BOOL
DDKAPI
DrvTransparentBlt(
  /*IN*/ SURFOBJ  *psoDst,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDst,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ ULONG  iTransColor,
  /*IN*/ ULONG  ulReserved);

BOOL
DDKAPI
DrvUnloadFontFile(
  /*IN*/ ULONG_PTR  iFile);

/* WNDOBJCHANGEPROC.fl constants */
#define WOC_RGN_CLIENT_DELTA              0x00000001
#define WOC_RGN_CLIENT                    0x00000002
#define WOC_RGN_SURFACE_DELTA             0x00000004
#define WOC_RGN_SURFACE                   0x00000008
#define WOC_CHANGED                       0x00000010
#define WOC_DELETE                        0x00000020
#define WOC_DRAWN                         0x00000040
#define WOC_SPRITE_OVERLAP                0x00000080
#define WOC_SPRITE_NO_OVERLAP             0x00000100

typedef VOID DDKAPI
(CALLBACK * WNDOBJCHANGEPROC)(
  WNDOBJ  *pwo,
  FLONG  fl);


typedef BOOL DDKAPI
(*PFN_DrvAlphaBlend)(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ BLENDOBJ  *pBlendObj);

typedef BOOL DDKAPI
(*PFN_DrvAssertMode)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ BOOL  bEnable);

typedef BOOL DDKAPI
(*PFN_DrvBitBlt)(
  /*IN*/ SURFOBJ  *psoTrg,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclTrg,
  /*IN*/ POINTL  *pptlSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrush,
  /*IN*/ ROP4  rop4);

typedef VOID DDKAPI
(*PFN_DrvCompletePDEV)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ HDEV  hdev);

typedef BOOL DDKAPI
(*PFN_DrvCopyBits)(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ POINTL  *pptlSrc);

typedef HBITMAP DDKAPI
(*PFN_DrvCreateDeviceBitmap)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ SIZEL  sizl,
  /*IN*/ ULONG  iFormat);

typedef VOID DDKAPI
(*PFN_DrvDeleteDeviceBitmap)(
  /*IN*/ DHSURF  dhsurf);

typedef HBITMAP DDKAPI
(*PFN_DrvDeriveSurface)(
  DD_DIRECTDRAW_GLOBAL  *pDirectDraw,
  DD_SURFACE_LOCAL  *pSurface);

typedef LONG DDKAPI
(*PFN_DrvDescribePixelFormat)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ LONG  iPixelFormat,
  /*IN*/ ULONG  cjpfd,

  /*OUT*/ PIXELFORMATDESCRIPTOR  *ppfd);

typedef VOID DDKAPI
(*PFN_DrvDestroyFont)(
  /*IN*/ FONTOBJ  *pfo);

typedef VOID DDKAPI
(*PFN_DrvDisableDriver)(
  VOID);

typedef VOID DDKAPI
(*PFN_DrvDisablePDEV)(
  /*IN*/ DHPDEV  dhpdev);

typedef VOID DDKAPI
(*PFN_DrvDisableSurface)(
  /*IN*/ DHPDEV  dhpdev);

typedef ULONG DDKAPI
(*PFN_DrvDitherColor)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG  rgb,

  /*OUT*/ ULONG  *pul);

typedef ULONG DDKAPI
(*PFN_DrvDrawEscape)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ ULONG  iEsc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ RECTL  *prcl,
  /*IN*/ ULONG  cjIn,
  /*IN*/ PVOID  pvIn);

typedef BOOL DDKAPI
(*PFN_DrvEnableDriver)(
  /*IN*/ ULONG  iEngineVersion,
  /*IN*/ ULONG  cj,

  /*OUT*/ DRVENABLEDATA  *pded);
#if 0
typedef DHPDEV DDKAPI
(*PFN_DrvEnablePDEV)(
  /*IN*/ DEVMODEW  *pdm,
  /*IN*/ LPWSTR  pwszLogAddress,
  /*IN*/ ULONG  cPat,

  /*OUT*/ HSURF  *phsurfPatterns,
  /*IN*/ ULONG  cjCaps,

  /*OUT*/ ULONG  *pdevcaps,
  /*IN*/ ULONG  cjDevInfo,

  /*OUT*/ DEVINFO  *pdi,
  /*IN*/ HDEV  hdev,
  /*IN*/ LPWSTR  pwszDeviceName,
  /*IN*/ HANDLE  hDriver);
#endif
typedef HSURF DDKAPI
(*PFN_DrvEnableSurface)(
  /*IN*/ DHPDEV  dhpdev);

typedef BOOL DDKAPI
(*PFN_DrvEndDoc)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ FLONG  fl);

typedef ULONG DDKAPI
(*PFN_DrvEscape)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ ULONG  iEsc,
  /*IN*/ ULONG  cjIn,
  /*IN*/ PVOID  pvIn,
  /*IN*/ ULONG  cjOut,

  /*OUT*/ PVOID  pvOut);

typedef BOOL DDKAPI
(*PFN_DrvFillPath)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mix,
  /*IN*/ FLONG  flOptions);

typedef ULONG DDKAPI
(*PFN_DrvFontManagement)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG  cjIn,
  /*IN*/ PVOID  pvIn,
  /*IN*/ ULONG  cjOut,

  /*OUT*/ PVOID  pvOut);

typedef VOID DDKAPI
(*PFN_DrvFree)(
  /*IN*/ PVOID  pv,
  /*IN*/ ULONG_PTR  id);

typedef ULONG DDKAPI
(*PFN_DrvGetGlyphMode)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ FONTOBJ  *pfo);

typedef ULONG DDKAPI
(*PFN_DrvGetModes)(
  /*IN*/ HANDLE  hDriver,
  /*IN*/ ULONG  cjSize,

  /*OUT*/ DEVMODEW  *pdm);

typedef PVOID DDKAPI
(*PFN_DrvGetTrueTypeFile)(
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  *pcj);

typedef BOOL DDKAPI
(*PFN_DrvGradientFill)(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ TRIVERTEX  *pVertex,
  /*IN*/ ULONG  nVertex,
  /*IN*/ PVOID  pMesh,
  /*IN*/ ULONG  nMesh,
  /*IN*/ RECTL  *prclExtents,
  /*IN*/ POINTL  *pptlDitherOrg,
  /*IN*/ ULONG  ulMode);

typedef BOOL DDKAPI
(*PFN_DrvIcmCheckBitmapBits)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ HANDLE  hColorTransform,
  /*IN*/ SURFOBJ  *pso,

  /*OUT*/ PBYTE  paResults);

typedef HANDLE DDKAPI
(*PFN_DrvIcmCreateColorTransform)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ LPLOGCOLORSPACEW  pLogColorSpace,
  /*IN*/ PVOID  pvSourceProfile,
  /*IN*/ ULONG  cjSourceProfile,
  /*IN*/ PVOID  pvDestProfile,
  /*IN*/ ULONG  cjDestProfile,
  /*IN*/ PVOID  pvTargetProfile,
  /*IN*/ ULONG  cjTargetProfile,
  /*IN*/ DWORD  dwReserved);

typedef BOOL DDKAPI
(*PFN_DrvIcmDeleteColorTransform)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ HANDLE  hcmXform);

typedef BOOL DDKAPI
(*PFN_DrvIcmSetDeviceGammaRamp)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ ULONG  iFormat,
  /*IN*/ LPVOID  lpRamp);

typedef BOOL DDKAPI
(*PFN_DrvLineTo)(
  SURFOBJ  *pso,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  LONG  x1,
  LONG  y1,
  LONG  x2,
  LONG  y2,
  RECTL  *prclBounds,
  MIX  mix);

typedef ULONG_PTR DDKAPI
(*PFN_DrvLoadFontFile)(
  ULONG  cFiles,
  ULONG_PTR  *piFile,
  PVOID  *ppvView,
  ULONG  *pcjView,
  DESIGNVECTOR  *pdv,
  ULONG  ulLangID,
  ULONG  ulFastCheckSum);

typedef VOID DDKAPI
(*PFN_DrvMovePointer)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LONG  x,
  /*IN*/ LONG  y,
  /*IN*/ RECTL  *prcl);

typedef BOOL DDKAPI
(*PFN_DrvNextBand)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ POINTL  *pptl);

typedef VOID DDKAPI
(*PFN_DrvNotify)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ ULONG  iType,
  /*IN*/ PVOID  pvData);

typedef BOOL DDKAPI
(*PFN_DrvOffset)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LONG  x,
  /*IN*/ LONG  y,
  /*IN*/ FLONG  flReserved);

typedef BOOL DDKAPI
(*PFN_DrvPaint)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mix);

typedef BOOL DDKAPI
(*PFN_DrvPlgBlt)(
  /*IN*/ SURFOBJ  *psoTrg,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMsk,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ POINTFIX  *pptfx,
  /*IN*/ RECTL  *prcl,
  /*IN*/ POINTL  *pptl,
  /*IN*/ ULONG  iMode);

typedef BOOL DDKAPI
(*PFN_DrvQueryAdvanceWidths)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode,
  /*IN*/ HGLYPH  *phg,

  /*OUT*/ PVOID  pvWidths,
  /*IN*/ ULONG  cGlyphs);

typedef BOOL DDKAPI
(*PFN_DrvQueryDeviceSupport)(
  SURFOBJ  *pso,
  XLATEOBJ  *pxlo,
  XFORMOBJ  *pxo,
  ULONG  iType,
  ULONG  cjIn,
  PVOID  pvIn,
  ULONG  cjOut,
  PVOID  pvOut);

typedef BOOL DDKAPI
(*PFN_DrvQueryDriverInfo)(
  DWORD  dwMode,
  PVOID  pBuffer,
  DWORD  cbBuf,
  PDWORD  pcbNeeded);

typedef PIFIMETRICS DDKAPI
(*PFN_DrvQueryFont)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  iFace,
  /*IN*/ ULONG_PTR  *pid);

typedef LONG DDKAPI
(*PFN_DrvQueryFontCaps)(
  /*IN*/ ULONG  culCaps,

  /*OUT*/ ULONG  *pulCaps);

typedef LONG DDKAPI
(*PFN_DrvQueryFontData)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode,
  /*IN*/ HGLYPH  hg,
  /*IN OUT*/ GLYPHDATA  *pgd,
  /*IN OUT*/ PVOID  pv,
  /*IN*/ ULONG  cjSize);

typedef LONG DDKAPI
(*PFN_DrvQueryFontFile)(
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  ulMode,
  /*IN*/ ULONG  cjBuf,
  /*IN*/ ULONG  *pulBuf);

typedef PVOID DDKAPI
(*PFN_DrvQueryFontTree)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  iFace,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG_PTR  *pid);

typedef PFD_GLYPHATTR DDKAPI
(*PFN_DrvQueryGlyphAttrs)(
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ ULONG  iMode);

typedef ULONG DDKAPI
(*PFN_DrvQueryPerBandInfo)(
  /*IN*/ SURFOBJ  *pso,
  /*IN OUT*/ PERBANDINFO  *pbi);

typedef LONG DDKAPI
(*PFN_DrvQueryTrueTypeOutline)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ HGLYPH  hglyph,
  /*IN*/ BOOL  bMetricsOnly,
  /*IN*/ GLYPHDATA  *pgldt,
  /*IN*/ ULONG  cjBuf,
  /*OUT*/ TTPOLYGONHEADER  *ppoly);

typedef LONG DDKAPI
(*PFN_DrvQueryTrueTypeTable)(
  /*IN*/ ULONG_PTR  iFile,
  /*IN*/ ULONG  ulFont,
  /*IN*/ ULONG  ulTag,
  /*IN*/ PTRDIFF  dpStart,
  /*IN*/ ULONG  cjBuf,
  /*OUT*/ BYTE  *pjBuf,
  /*OUT*/ PBYTE  *ppjTable,
  /*OUT*/ ULONG *pcjTable);

typedef BOOL DDKAPI
(*PFN_DrvRealizeBrush)(
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ SURFOBJ  *psoTarget,
  /*IN*/ SURFOBJ  *psoPattern,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ ULONG  iHatch);

typedef ULONG DDKAPI
(*PFN_DrvResetDevice)(
  /*IN*/ DHPDEV dhpdev,
  /*IN*/ PVOID Reserved);

typedef BOOL DDKAPI
(*PFN_DrvResetPDEV)(
  DHPDEV  dhpdevOld,
  DHPDEV  dhpdevNew);

typedef ULONG_PTR DDKAPI
(*PFN_DrvSaveScreenBits)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ ULONG  iMode,
  /*IN*/ ULONG_PTR  ident,
  /*IN*/ RECTL  *prcl);

typedef BOOL DDKAPI
(*PFN_DrvSendPage)(
  /*IN*/ SURFOBJ  *pso);

typedef BOOL DDKAPI
(*PFN_DrvSetPalette)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ PALOBJ  *ppalo,
  /*IN*/ FLONG  fl,
  /*IN*/ ULONG  iStart,
  /*IN*/ ULONG  cColors);

typedef BOOL DDKAPI
(*PFN_DrvSetPixelFormat)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LONG  iPixelFormat,
  /*IN*/ HWND  hwnd);

typedef ULONG DDKAPI
(*PFN_DrvSetPointerShape)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ SURFOBJ  *psoColor,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ LONG  xHot,
  /*IN*/ LONG  yHot,
  /*IN*/ LONG  x,
  /*IN*/ LONG  y,
  /*IN*/ RECTL  *prcl,
  /*IN*/ FLONG  fl);

typedef BOOL DDKAPI
(*PFN_DrvStartBanding)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ POINTL  *pptl);

typedef BOOL DDKAPI
(*PFN_DrvStartDoc)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ LPWSTR  pwszDocName,
  /*IN*/ DWORD  dwJobId);

typedef BOOL DDKAPI
(*PFN_DrvStartPage)(
  /*IN*/ SURFOBJ  *pso);

typedef BOOL DDKAPI
(*PFN_DrvStretchBlt)(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlHTOrg,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ ULONG  iMode);

typedef BOOL DDKAPI
(*PFN_DrvStretchBltROP)(
  /*IN*/ SURFOBJ  *psoDest,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ SURFOBJ  *psoMask,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ COLORADJUSTMENT  *pca,
  /*IN*/ POINTL  *pptlHTOrg,
  /*IN*/ RECTL  *prclDest,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ POINTL  *pptlMask,
  /*IN*/ ULONG  iMode,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ DWORD  rop4);

typedef BOOL DDKAPI
(*PFN_DrvStrokeAndFillPath)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XFORMOBJ  *pxo,
  /*IN*/ BRUSHOBJ  *pboStroke,
  /*IN*/ LINEATTRS  *plineattrs,
  /*IN*/ BRUSHOBJ  *pboFill,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ MIX  mixFill,
  /*IN*/ FLONG  flOptions);

typedef BOOL DDKAPI
(*PFN_DrvStrokePath)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ PATHOBJ  *ppo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XFORMOBJ  *pxo,
  /*IN*/ BRUSHOBJ  *pbo,
  /*IN*/ POINTL  *pptlBrushOrg,
  /*IN*/ LINEATTRS  *plineattrs,
  /*IN*/ MIX  mix);

typedef BOOL DDKAPI
(*PFN_DrvSwapBuffers)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ WNDOBJ  *pwo);

typedef VOID DDKAPI
(*PFN_DrvSynchronize)(
  /*IN*/ DHPDEV  dhpdev,
  /*IN*/ RECTL  *prcl);

typedef VOID DDKAPI
(*PFN_DrvSynchronizeSurface)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ RECTL  *prcl,
  /*IN*/ FLONG  fl);

typedef BOOL DDKAPI
(*PFN_DrvTextOut)(
  /*IN*/ SURFOBJ  *pso,
  /*IN*/ STROBJ  *pstro,
  /*IN*/ FONTOBJ  *pfo,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ RECTL  *prclExtra,
  /*IN*/ RECTL  *prclOpaque,
  /*IN*/ BRUSHOBJ  *pboFore,
  /*IN*/ BRUSHOBJ  *pboOpaque,
  /*IN*/ POINTL  *pptlOrg,
  /*IN*/ MIX  mix);

typedef BOOL DDKAPI
(*PFN_DrvTransparentBlt)(
  /*IN*/ SURFOBJ  *psoDst,
  /*IN*/ SURFOBJ  *psoSrc,
  /*IN*/ CLIPOBJ  *pco,
  /*IN*/ XLATEOBJ  *pxlo,
  /*IN*/ RECTL  *prclDst,
  /*IN*/ RECTL  *prclSrc,
  /*IN*/ ULONG  iTransColor,
  /*IN*/ ULONG  ulReserved);

typedef BOOL DDKAPI
(*PFN_DrvUnloadFontFile)(
  /*IN*/ ULONG_PTR  iFile);


WIN32KAPI
VOID
DDKAPI
DrvDisableDirectDraw(
  /*IN*/ DHPDEV  dhpdev);

WIN32KAPI
BOOL
DDKAPI
DrvEnableDirectDraw(
  /*IN*/ DHPDEV  dhpdev,
  /*OUT*/ DD_CALLBACKS  *pCallBacks,
  /*OUT*/ DD_SURFACECALLBACKS  *pSurfaceCallBacks,
  /*OUT*/ DD_PALETTECALLBACKS  *pPaletteCallBacks);

WIN32KAPI
BOOL
DDKAPI
DrvGetDirectDrawInfo(
  /*IN*/ DHPDEV  dhpdev,
  /*OUT*/ DD_HALINFO  *pHalInfo,
  /*OUT*/ DWORD  *pdwNumHeaps,
  /*OUT*/ VIDEOMEMORY  *pvmList,
  /*OUT*/ DWORD  *pdwNumFourCCCodes,
  /*OUT*/ DWORD  *pdwFourCC);

#ifdef __cplusplus
}
#endif

#endif /* defined __VIDEO_H */

#endif /* __WINDDI_H */