/*
 * 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_
#define _WINDDI_

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

#include <ddrawint.h>
#include <d3dnthal.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef DECLSPEC_IMPORT
#define DECLSPEC_IMPORT __attribute__((dllimport))
#endif

#ifndef WIN32KAPI
#define WIN32KAPI DECLSPEC_ADDRSAFE
#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 (APIENTRY *PFN)();

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

#ifndef _NTDDVDEO_
typedef struct _ENG_EVENT *PEVENT;
#endif

#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

#define LTOFX(x)        ((x) << 4)
#define FXTOL(x)        ((x) >> 4)
#define FXTOLFLOOR(x)   ((x) >> 4)
#define FXTOLCEILING(x) ((x + 0x0F) >> 4)
#define FXTOLROUND(x)   ((((x) >> 3) + 1) >> 1)

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;

struct _DRIVEROBJ;

typedef WINBOOL
(APIENTRY CALLBACK *FREEOBJPROC)(
  struct _DRIVEROBJ  *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_DrvUnknown1                 9L
#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_DrvUnknown2                 21L
#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_DrvUnknown3                 36L
#define INDEX_DrvGetGlyphMode             37L
#define INDEX_DrvSynchronize              38L
#define INDEX_DrvUnknown4                 39L
#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_DrvUnknown5                 63L
#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
#define DDI_DRIVER_VERSION_NT5_01_SP1     0x00030101

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;

#if defined(_X86_) && !defined(USERMODE_DRIVER)
typedef struct _FLOATOBJ
{
  ULONG  ul1;
  ULONG  ul2;
} FLOATOBJ, *PFLOATOBJ;
#else
typedef FLOAT FLOATOBJ, *PFLOATOBJ;
#endif

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  *pptfx;
} 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 {
  WINBOOL  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;



/* 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;

/* 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 (APIENTRY CALLBACK *WNDOBJCHANGEPROC)(
  WNDOBJ  *pwo,
  FLONG  fl);


WIN32KAPI
HANDLE
APIENTRY
BRUSHOBJ_hGetColorTransform(
  BRUSHOBJ  *pbo);

WIN32KAPI
PVOID
APIENTRY
BRUSHOBJ_pvAllocRbrush(
  BRUSHOBJ  *pbo,
  ULONG  cj);

WIN32KAPI
PVOID
APIENTRY
BRUSHOBJ_pvGetRbrush(
  BRUSHOBJ  *pbo);

WIN32KAPI
ULONG
APIENTRY
BRUSHOBJ_ulGetBrushColor(
  BRUSHOBJ  *pbo);

WIN32KAPI
WINBOOL
APIENTRY
CLIPOBJ_bEnum(
  CLIPOBJ  *pco,
  ULONG  cj,
  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
APIENTRY
CLIPOBJ_cEnumStart(
  CLIPOBJ  *pco,
  WINBOOL  bAll,
  ULONG  iType,
  ULONG  iDirection,
  ULONG  cLimit);

WIN32KAPI
PATHOBJ*
APIENTRY
CLIPOBJ_ppoGetPath(
  CLIPOBJ  *pco);

WIN32KAPI
VOID
APIENTRY
EngAcquireSemaphore(
  HSEMAPHORE  hsem);

#define FL_ZERO_MEMORY                    0x00000001
#define FL_NONPAGED_MEMORY                0x00000002

WIN32KAPI
PVOID
APIENTRY
EngAllocMem(
  ULONG  Flags,
  ULONG  MemSize,
  ULONG  Tag);

WIN32KAPI
PVOID
APIENTRY
EngAllocPrivateUserMem(
  PDD_SURFACE_LOCAL  psl,
  SIZE_T  cj,
  ULONG  tag);

WIN32KAPI
PVOID
APIENTRY
EngAllocUserMem(
  SIZE_T  cj,
  ULONG  tag);

WIN32KAPI
WINBOOL
APIENTRY
EngAlphaBlend(
  SURFOBJ  *psoDest,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDest,
  RECTL  *prclSrc,
  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
WINBOOL
APIENTRY
EngAssociateSurface(
  HSURF  hsurf,
  HDEV  hdev,
  FLONG  flHooks);

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

WIN32KAPI
WINBOOL
APIENTRY
EngCheckAbort(
  SURFOBJ  *pso);

WIN32KAPI
VOID
APIENTRY
EngClearEvent(
  PEVENT  pEvent);

WIN32KAPI
FD_GLYPHSET*
APIENTRY
EngComputeGlyphSet(
  INT  nCodePage,
  INT  nFirstChar,
  INT  cChars);

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

WIN32KAPI
WINBOOL
APIENTRY
EngControlSprites(
  WNDOBJ  *pwo,
  FLONG  fl);

WIN32KAPI
WINBOOL
APIENTRY
EngCopyBits(
  SURFOBJ  *psoDest,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDest,
  POINTL  *pptlSrc);

WIN32KAPI
HBITMAP
APIENTRY
EngCreateBitmap(
  SIZEL  sizl,
  LONG  lWidth,
  ULONG  iFormat,
  FLONG  fl,
  PVOID  pvBits);

WIN32KAPI
CLIPOBJ*
APIENTRY
EngCreateClip(
  VOID);

WIN32KAPI
HBITMAP
APIENTRY
EngCreateDeviceBitmap(
  DHSURF  dhsurf,
  SIZEL  sizl,
  ULONG  iFormatCompat);

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

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

WIN32KAPI
WINBOOL
APIENTRY
EngCreateEvent(
  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
APIENTRY
EngCreatePalette(
  ULONG  iMode,
  ULONG  cColors,
  ULONG  *pulColors,
  FLONG  flRed,
  FLONG  flGreen,
  FLONG  flBlue);

WIN32KAPI
PATHOBJ*
APIENTRY
EngCreatePath(
  VOID);

WIN32KAPI
HSEMAPHORE
APIENTRY
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*
APIENTRY
EngCreateWnd(
  SURFOBJ  *pso,
  HWND  hwnd,
  WNDOBJCHANGEPROC  pfn,
  FLONG  fl,
  int  iPixelFormat);

WIN32KAPI
VOID
APIENTRY
EngDebugBreak(
  VOID);

WIN32KAPI
VOID
APIENTRY
EngDebugPrint(
  PCHAR StandardPrefix,
  PCHAR DebugMessage,
  va_list ap);

WIN32KAPI
VOID
APIENTRY
EngDeleteClip(
  CLIPOBJ  *pco);

WIN32KAPI
WINBOOL
APIENTRY
EngDeleteDriverObj(
  HDRVOBJ  hdo,
  WINBOOL  bCallBack,
  WINBOOL  bLocked);

WIN32KAPI
WINBOOL
APIENTRY
EngDeleteEvent(
  PEVENT  pEvent);

WIN32KAPI
WINBOOL
APIENTRY
EngDeleteFile(
  LPWSTR  pwszFileName);

WIN32KAPI
WINBOOL
APIENTRY
EngDeletePalette(
  HPALETTE  hpal);

WIN32KAPI
VOID
APIENTRY
EngDeletePath(
  PATHOBJ  *ppo);

WIN32KAPI
VOID
APIENTRY
EngDeleteSafeSemaphore(
  ENGSAFESEMAPHORE  *pssem);

WIN32KAPI
VOID
APIENTRY
EngDeleteSemaphore(
  HSEMAPHORE  hsem);

WIN32KAPI
WINBOOL
APIENTRY
EngDeleteSurface(
  HSURF  hsurf);

WIN32KAPI
VOID
APIENTRY
EngDeleteWnd(
  WNDOBJ  *pwo);

WIN32KAPI
DWORD
APIENTRY
EngDeviceIoControl(
  HANDLE  hDevice,
  DWORD  dwIoControlCode,
  LPVOID  lpInBuffer,
  DWORD  nInBufferSize,
  LPVOID  lpOutBuffer,
  DWORD  nOutBufferSize,
  LPDWORD  lpBytesReturned);

WIN32KAPI
ULONG
APIENTRY
EngDitherColor(
  HDEV  hdev,
  ULONG  iMode,
  ULONG  rgb,
  ULONG  *pul);

WIN32KAPI
WINBOOL
APIENTRY
EngEnumForms(
  HANDLE  hPrinter,
  DWORD  Level,
  LPBYTE  pForm,
  DWORD  cbBuf,
  LPDWORD  pcbNeeded,
  LPDWORD  pcReturned);

WIN32KAPI
WINBOOL
APIENTRY
EngEraseSurface(
  SURFOBJ  *pso,
  RECTL  *prcl,
  ULONG  iColor);

WIN32KAPI
WINBOOL
APIENTRY
EngFillPath(
  SURFOBJ  *pso,
  PATHOBJ  *ppo,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  MIX  mix,
  FLONG  flOptions);

WIN32KAPI
PVOID
APIENTRY
EngFindImageProcAddress(
  HANDLE  hModule,
  LPSTR  lpProcName);

WIN32KAPI
PVOID
APIENTRY
EngFindResource(
  HANDLE  h,
  int  iName,
  int  iType,
  PULONG  pulSize);

WIN32KAPI
PVOID
APIENTRY
EngFntCacheAlloc(
  ULONG  FastCheckSum,
  ULONG  ulSize);

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

WIN32KAPI
VOID
APIENTRY
EngFntCacheFault(
  ULONG  ulFastCheckSum,
  ULONG  iFaultMode);

WIN32KAPI
PVOID
APIENTRY
EngFntCacheLookUp(
  ULONG  FastCheckSum,
  ULONG  *pulSize);

WIN32KAPI
VOID
APIENTRY
EngFreeMem(
  PVOID  Mem);

WIN32KAPI
VOID
APIENTRY
EngFreeModule(
  HANDLE  h);

WIN32KAPI
VOID
APIENTRY
EngFreePrivateUserMem(
  PDD_SURFACE_LOCAL  psl,
  PVOID  pv);

WIN32KAPI
VOID
APIENTRY
EngFreeUserMem(
  PVOID  pv);

WIN32KAPI
VOID
APIENTRY
EngGetCurrentCodePage(
  PUSHORT  OemCodePage,
  PUSHORT  AnsiCodePage);

WIN32KAPI
HANDLE
APIENTRY
EngGetCurrentProcessId(
  VOID);

WIN32KAPI
HANDLE
APIENTRY
EngGetCurrentThreadId(
  VOID);

WIN32KAPI
LPWSTR
APIENTRY
EngGetDriverName(
  HDEV  hdev);

WIN32KAPI
WINBOOL
APIENTRY
EngGetFileChangeTime(
  HANDLE  h,
  LARGE_INTEGER  *pChangeTime);

WIN32KAPI
WINBOOL
APIENTRY
EngGetFilePath(
  HANDLE  h,
  WCHAR  (*pDest)[MAX_PATH+1]);

WIN32KAPI
WINBOOL
APIENTRY
EngGetForm(
  HANDLE  hPrinter,
  LPWSTR  pFormName,
  DWORD  Level,
  LPBYTE  pForm,
  DWORD  cbBuf,
  LPDWORD  pcbNeeded);

WIN32KAPI
ULONG
APIENTRY
EngGetLastError(
  VOID);

WIN32KAPI
WINBOOL
APIENTRY
EngGetPrinter(
  HANDLE  hPrinter,
  DWORD  dwLevel,
  LPBYTE  pPrinter,
  DWORD  cbBuf,
  LPDWORD  pcbNeeded);

WIN32KAPI
DWORD
APIENTRY
EngGetPrinterData(
  HANDLE  hPrinter,
  LPWSTR  pValueName,
  LPDWORD  pType,
  LPBYTE  pData,
  DWORD  nSize,
  LPDWORD  pcbNeeded);

WIN32KAPI
LPWSTR
APIENTRY
EngGetPrinterDataFileName(
  HDEV  hdev);

WIN32KAPI
WINBOOL
APIENTRY
EngGetPrinterDriver(
  HANDLE  hPrinter,
  LPWSTR  pEnvironment,
  DWORD  dwLevel,
  BYTE  *lpbDrvInfo,
  DWORD  cbBuf,
  DWORD  *pcbNeeded);

WIN32KAPI
HANDLE
APIENTRY
EngGetProcessHandle(
  VOID);

WIN32KAPI
WINBOOL
APIENTRY
EngGetType1FontList(
  HDEV  hdev,
  TYPE1_FONT  *pType1Buffer,
  ULONG  cjType1Buffer,
  PULONG  pulLocalFonts,
  PULONG  pulRemoteFonts,
  LARGE_INTEGER  *pLastModified);

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

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

WIN32KAPI
ULONG
APIENTRY
EngHangNotification(
  HDEV  hDev,
  PVOID  Reserved);

WIN32KAPI
WINBOOL
APIENTRY
EngInitializeSafeSemaphore(
  ENGSAFESEMAPHORE  *pssem);

WIN32KAPI
WINBOOL
APIENTRY
EngIsSemaphoreOwned(
  HSEMAPHORE  hsem);

WIN32KAPI
WINBOOL
APIENTRY
EngIsSemaphoreOwnedByCurrentThread(
  HSEMAPHORE  hsem);

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

WIN32KAPI
HANDLE
APIENTRY
EngLoadImage(
  LPWSTR  pwszDriver);

WIN32KAPI
HANDLE
APIENTRY
EngLoadModule(
  LPWSTR  pwsz);

WIN32KAPI
HANDLE
APIENTRY
EngLoadModuleForWrite(
  LPWSTR  pwsz,
  ULONG  cjSizeOfModule);

WIN32KAPI
PDD_SURFACE_LOCAL
APIENTRY
EngLockDirectDrawSurface(
  HANDLE  hSurface);

WIN32KAPI
DRIVEROBJ*
APIENTRY
EngLockDriverObj(
  HDRVOBJ  hdo);

WIN32KAPI
SURFOBJ*
APIENTRY
EngLockSurface(
  HSURF  hsurf);

WIN32KAPI
WINBOOL
APIENTRY
EngLpkInstalled(
  VOID);

WIN32KAPI
PEVENT
APIENTRY
EngMapEvent(
  HDEV  hDev,
  HANDLE  hUserObject,
  PVOID  Reserved1,
  PVOID  Reserved2,
  PVOID  Reserved3);

WIN32KAPI
PVOID
APIENTRY
EngMapFile(
  LPWSTR  pwsz,
  ULONG  cjSize,
  ULONG_PTR  *piFile);

WIN32KAPI
WINBOOL
APIENTRY
EngMapFontFile(
  ULONG_PTR  iFile,
  PULONG  *ppjBuf,
  ULONG  *pcjBuf);

WIN32KAPI
WINBOOL
APIENTRY
EngMapFontFileFD(
  ULONG_PTR  iFile,
  PULONG  *ppjBuf,
  ULONG  *pcjBuf);

WIN32KAPI
PVOID
APIENTRY
EngMapModule(
  HANDLE  h,
  PULONG  pSize);

WIN32KAPI
WINBOOL
APIENTRY
EngMarkBandingSurface(
  HSURF  hsurf);

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

WIN32KAPI
WINBOOL
APIENTRY
EngModifySurface(
  HSURF  hsurf,
  HDEV  hdev,
  FLONG  flHooks,
  FLONG  flSurface,
  DHSURF  dhsurf,
  VOID  *pvScan0,
  LONG  lDelta,
  VOID  *pvReserved);

WIN32KAPI
VOID
APIENTRY
EngMovePointer(
  SURFOBJ  *pso,
  LONG  x,
  LONG  y,
  RECTL  *prcl);

WIN32KAPI
int
APIENTRY
EngMulDiv(
  int  a,
  int  b,
  int  c);

WIN32KAPI
VOID
APIENTRY
EngMultiByteToUnicodeN(
  LPWSTR  UnicodeString,
  ULONG  MaxBytesInUnicodeString,
  PULONG  BytesInUnicodeString,
  PCHAR  MultiByteString,
  ULONG  BytesInMultiByteString);

WIN32KAPI
INT
APIENTRY
EngMultiByteToWideChar(
  UINT  CodePage,
  LPWSTR  WideCharString,
  INT  BytesInWideCharString,
  LPSTR  MultiByteString,
  INT  BytesInMultiByteString);

WIN32KAPI
WINBOOL
APIENTRY
EngPaint(
  SURFOBJ  *pso,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  MIX  mix);

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

WIN32KAPI
VOID
APIENTRY
EngProbeForRead(
  PVOID  Address,
  ULONG  Length,
  ULONG  Alignment);

WIN32KAPI
VOID
APIENTRY
EngProbeForReadAndWrite(
  PVOID  Address,
  ULONG  Length,
  ULONG  Alignment);

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

WIN32KAPI
WINBOOL
APIENTRY
EngQueryDeviceAttribute(
  HDEV  hdev,
  ENG_DEVICE_ATTRIBUTE  devAttr,
  VOID  *pvIn,
  ULONG  ulInSize,
  VOID  *pvOut,
  ULONG  ulOutSize);

WIN32KAPI
LARGE_INTEGER
APIENTRY
EngQueryFileTimeStamp(
  LPWSTR  pwsz);

WIN32KAPI
VOID
APIENTRY
EngQueryLocalTime(
  PENG_TIME_FIELDS  ptf);

WIN32KAPI
ULONG
APIENTRY
EngQueryPalette(
  HPALETTE  hPal,
  ULONG  *piMode,
  ULONG  cColors,
  ULONG  *pulColors);

WIN32KAPI
VOID
APIENTRY
EngQueryPerformanceCounter(
  LONGLONG  *pPerformanceCount);

WIN32KAPI
VOID
APIENTRY
EngQueryPerformanceFrequency(
  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
WINBOOL
APIENTRY
EngQuerySystemAttribute(
  ENG_SYSTEM_ATTRIBUTE  CapNum,
  PDWORD  pCapability);

WIN32KAPI
LONG
APIENTRY
EngReadStateEvent(
  PEVENT  pEvent);

WIN32KAPI
VOID
APIENTRY
EngReleaseSemaphore(
  HSEMAPHORE  hsem);

WIN32KAPI
WINBOOL
APIENTRY
EngRestoreFloatingPointState(
  VOID  *pBuffer);

WIN32KAPI
ULONG
APIENTRY
EngSaveFloatingPointState(
  VOID  *pBuffer,
  ULONG  cjBufferSize);

WIN32KAPI
HANDLE
APIENTRY
EngSecureMem(
  PVOID  Address,
  ULONG  Length);

WIN32KAPI
LONG
APIENTRY
EngSetEvent(
  PEVENT  pEvent);

WIN32KAPI
VOID
APIENTRY
EngSetLastError(
  ULONG  iError);

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

WIN32KAPI
WINBOOL
APIENTRY
EngSetPointerTag(
  HDEV  hdev,
  SURFOBJ  *psoMask,
  SURFOBJ  *psoColor,
  XLATEOBJ  *pxlo,
  FLONG  fl);

WIN32KAPI
DWORD
APIENTRY
EngSetPrinterData(
  HANDLE  hPrinter,
  LPWSTR  pType,
  DWORD  dwType,
  LPBYTE  lpbPrinterData,
  DWORD  cjPrinterData);

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

WIN32KAPI
VOID
APIENTRY
EngSort(
  PBYTE  pjBuf,
  ULONG  c,
  ULONG  cjElem,
  SORTCOMP  pfnComp);

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

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

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

WIN32KAPI
WINBOOL
APIENTRY
EngStrokePath(
  SURFOBJ  *pso,
  PATHOBJ  *ppo,
  CLIPOBJ  *pco,
  XFORMOBJ  *pxo,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  LINEATTRS  *plineattrs,
  MIX  mix);

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

WIN32KAPI
WINBOOL
APIENTRY
EngTransparentBlt(
  SURFOBJ  *psoDst,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDst,
  RECTL  *prclSrc,
  ULONG  iTransColor,
  ULONG  ulReserved);

WIN32KAPI
VOID
APIENTRY
EngUnicodeToMultiByteN(
  PCHAR  MultiByteString,
  ULONG  MaxBytesInMultiByteString,
  PULONG  BytesInMultiByteString,
  PWSTR  UnicodeString,
  ULONG  BytesInUnicodeString);

WIN32KAPI
VOID
APIENTRY
EngUnloadImage(
  HANDLE  hModule);

WIN32KAPI
WINBOOL
APIENTRY
EngUnlockDirectDrawSurface(
  PDD_SURFACE_LOCAL  pSurface);

WIN32KAPI
WINBOOL
APIENTRY
EngUnlockDriverObj(
  HDRVOBJ  hdo);

WIN32KAPI
VOID
APIENTRY
EngUnlockSurface(
  SURFOBJ  *pso);

WIN32KAPI
WINBOOL
APIENTRY
EngUnmapEvent(
  PEVENT  pEvent);

WIN32KAPI
WINBOOL
APIENTRY
EngUnmapFile(
  ULONG_PTR  iFile);

WIN32KAPI
VOID
APIENTRY
EngUnmapFontFile(
  ULONG_PTR  iFile);

WIN32KAPI
VOID
APIENTRY
EngUnmapFontFileFD(
  ULONG_PTR  iFile);

WIN32KAPI
VOID
APIENTRY
EngUnsecureMem(
  HANDLE  hSecure);

WIN32KAPI
WINBOOL
APIENTRY
EngWaitForSingleObject(
  PEVENT  pEvent,
  PLARGE_INTEGER  pTimeOut);

WIN32KAPI
INT
APIENTRY
EngWideCharToMultiByte(
  UINT  CodePage,
  LPWSTR  WideCharString,
  INT  BytesInWideCharString,
  LPSTR  MultiByteString,
  INT  BytesInMultiByteString);

WIN32KAPI
WINBOOL
APIENTRY
EngWritePrinter(
  HANDLE  hPrinter,
  LPVOID  pBuf,
  DWORD  cbBuf,
  LPDWORD  pcWritten);

#if defined(_X86_) && !defined(USERMODE_DRIVER)
WIN32KAPI
VOID
APIENTRY
FLOATOBJ_Add(
  PFLOATOBJ  pf,
  PFLOATOBJ  pf1);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_AddFloat(
  PFLOATOBJ  pf,
  FLOATL  f);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_AddLong(
  PFLOATOBJ  pf,
  LONG  l);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_Div(
  PFLOATOBJ  pf,
  PFLOATOBJ  pf1);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_DivFloat(
  PFLOATOBJ  pf,
  FLOATL  f);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_DivLong(
  PFLOATOBJ  pf,
  LONG  l);

WIN32KAPI
WINBOOL
APIENTRY
FLOATOBJ_Equal(
  PFLOATOBJ  pf,
  PFLOATOBJ  pf1);

WIN32KAPI
WINBOOL
APIENTRY
FLOATOBJ_EqualLong(
  PFLOATOBJ  pf,
  LONG  l);

WIN32KAPI
LONG
APIENTRY
FLOATOBJ_GetFloat(
  PFLOATOBJ  pf);

WIN32KAPI
LONG
APIENTRY
FLOATOBJ_GetLong(
  PFLOATOBJ  pf);

WIN32KAPI
WINBOOL
APIENTRY
FLOATOBJ_GreaterThan(
  PFLOATOBJ  pf,
  PFLOATOBJ  pf1);

WIN32KAPI
WINBOOL
APIENTRY
FLOATOBJ_GreaterThanLong(
  PFLOATOBJ  pf,
  LONG  l);

WIN32KAPI
WINBOOL
APIENTRY
FLOATOBJ_LessThan(
  PFLOATOBJ  pf,
  PFLOATOBJ  pf1);

WIN32KAPI
WINBOOL
APIENTRY
FLOATOBJ_LessThanLong(
  PFLOATOBJ  pf,
  LONG  l);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_Mul(
  PFLOATOBJ  pf,
  PFLOATOBJ  pf1);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_MulFloat(
  PFLOATOBJ  pf,
  FLOATL  f);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_MulLong(
  PFLOATOBJ  pf,
  LONG  l);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_Neg(
  PFLOATOBJ  pf);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_SetFloat(
  PFLOATOBJ  pf,
  FLOATL  f);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_SetLong(
  PFLOATOBJ  pf,
  LONG  l);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_Sub(
  PFLOATOBJ  pf,
  PFLOATOBJ  pf1);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_SubFloat(
  PFLOATOBJ  pf,
  FLOATL  f);

WIN32KAPI
VOID
APIENTRY
FLOATOBJ_SubLong(
  PFLOATOBJ  pf,
  LONG  l);

#else

#define FLOATOBJ_SetFloat(pf, f)        {*(pf) = (f);}
#define FLOATOBJ_SetLong(pf, l)         {*(pf) = (FLOAT)(l);}
#define FLOATOBJ_GetFloat(pf)           (*(PULONG)(pf))
#define FLOATOBJ_GetLong(pf)            ((LONG)*(pf))
#define FLOATOBJ_Add(pf, pf1)           {*(pf) += *(pf1);}
#define FLOATOBJ_AddFloat(pf, f)        {*(pf) += (f);}
#define FLOATOBJ_AddLong(pf, l)         {*(pf) += (l);}
#define FLOATOBJ_Sub(pf, pf1)           {*(pf) -= *(pf1);}
#define FLOATOBJ_SubFloat(pf, f)        {*(pf) -= (f);}
#define FLOATOBJ_SubLong(pf, l)         {*(pf) -= (l);}
#define FLOATOBJ_Mul(pf, pf1)           {*(pf) *= *(pf1);}
#define FLOATOBJ_MulFloat(pf, f)        {*(pf) *= (f);}
#define FLOATOBJ_MulLong(pf, l)         {*(pf) *= (l);}
#define FLOATOBJ_Div(pf, pf1)           {*(pf) /= *(pf1);}
#define FLOATOBJ_DivFloat(pf, f)        {*(pf) /= (f);}
#define FLOATOBJ_DivLong(pf, l)         {*(pf) /= (l);}
#define FLOATOBJ_Neg(pf)                {*(pf) = -(*(pf));}
#define FLOATOBJ_Equal(pf, pf1)         (*(pf) == *(pf1))
#define FLOATOBJ_GreaterThan(pf, pf1)   (*(pf) > *(pf1))
#define FLOATOBJ_LessThan(pf, pf1)      (*(pf) < *(pf1))
#define FLOATOBJ_EqualLong(pf, l)       (*(pf) == (FLOAT)(l))
#define FLOATOBJ_GreaterThanLong(pf, l) (*(pf) > (FLOAT)(l))
#define FLOATOBJ_LessThanLong(pf, l)    (*(pf) < (FLOAT)(l))

#endif

WIN32KAPI
ULONG
APIENTRY
FONTOBJ_cGetAllGlyphHandles(
  FONTOBJ  *pfo,
  HGLYPH  *phg);

WIN32KAPI
ULONG
APIENTRY
FONTOBJ_cGetGlyphs(
  FONTOBJ  *pfo,
  ULONG  iMode,
  ULONG  cGlyph,
  HGLYPH  *phg,
  PVOID  *ppvGlyph);

WIN32KAPI
FD_GLYPHSET*
APIENTRY
FONTOBJ_pfdg(
  FONTOBJ  *pfo);

WIN32KAPI
IFIMETRICS*
APIENTRY
FONTOBJ_pifi(
  FONTOBJ  *pfo);

WIN32KAPI
PBYTE
APIENTRY
FONTOBJ_pjOpenTypeTablePointer(
  FONTOBJ  *pfo,
  ULONG  ulTag,
  ULONG  *pcjTable);

WIN32KAPI
PFD_GLYPHATTR
APIENTRY
FONTOBJ_pQueryGlyphAttrs(
  FONTOBJ  *pfo,
  ULONG  iMode);

WIN32KAPI
PVOID
APIENTRY
FONTOBJ_pvTrueTypeFontFile(
  FONTOBJ  *pfo,
  ULONG  *pcjFile);

WIN32KAPI
LPWSTR
APIENTRY
FONTOBJ_pwszFontFilePaths(
  FONTOBJ  *pfo,
  ULONG  *pcwc);

WIN32KAPI
XFORMOBJ*
APIENTRY
FONTOBJ_pxoGetXform(
  FONTOBJ  *pfo);

WIN32KAPI
VOID
APIENTRY
FONTOBJ_vGetInfo(
  FONTOBJ  *pfo,
  ULONG  cjSize,
  FONTINFO  *pfi);



WIN32KAPI
LONG
APIENTRY
HT_ComputeRGBGammaTable(
  USHORT  GammaTableEntries,
  USHORT  GammaTableType,
  USHORT  RedGamma,
  USHORT  GreenGamma,
  USHORT  BlueGamma,
  LPBYTE  pGammaTable);

WIN32KAPI
LONG
APIENTRY
HT_Get8BPPFormatPalette(
  LPPALETTEENTRY  pPaletteEntry,
  USHORT  RedGamma,
  USHORT  GreenGamma,
  USHORT  BlueGamma);

WIN32KAPI
LONG
APIENTRY
HT_Get8BPPMaskPalette(
  LPPALETTEENTRY  pPaletteEntry,
  WINBOOL  Use8BPPMaskPal,
  BYTE  CMYMask,
  USHORT  RedGamma,
  USHORT  GreenGamma,
  USHORT  BlueGamma);

WIN32KAPI
LONG
APIENTRY
HTUI_DeviceColorAdjustment(
  LPSTR  pDeviceName,
  PDEVHTADJDATA  pDevHTAdjData);

WIN32KAPI
ULONG
APIENTRY
PALOBJ_cGetColors(
  PALOBJ  *ppalo,
  ULONG  iStart,
  ULONG  cColors,
  ULONG  *pulColors);

WIN32KAPI
WINBOOL
APIENTRY
PATHOBJ_bCloseFigure(
  PATHOBJ  *ppo);

WIN32KAPI
WINBOOL
APIENTRY
PATHOBJ_bEnum(
  PATHOBJ  *ppo,
  PATHDATA  *ppd);

WIN32KAPI
WINBOOL
APIENTRY
PATHOBJ_bEnumClipLines(
  PATHOBJ  *ppo,
  ULONG  cb,
  CLIPLINE  *pcl);

WIN32KAPI
WINBOOL
APIENTRY
PATHOBJ_bMoveTo(
  PATHOBJ  *ppo,
  POINTFIX  ptfx);

WIN32KAPI
WINBOOL
APIENTRY
PATHOBJ_bPolyBezierTo(
  PATHOBJ  *ppo,
  POINTFIX  *pptfx,
  ULONG  cptfx);

WIN32KAPI
WINBOOL
APIENTRY
PATHOBJ_bPolyLineTo(
  PATHOBJ  *ppo,
  POINTFIX  *pptfx,
  ULONG  cptfx);

WIN32KAPI
VOID
APIENTRY
PATHOBJ_vEnumStart(
  PATHOBJ  *ppo);

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

WIN32KAPI
VOID
APIENTRY
PATHOBJ_vGetBounds(
  PATHOBJ  *ppo,
  PRECTFX  prectfx);

WIN32KAPI
WINBOOL
APIENTRY
STROBJ_bEnum(
  STROBJ  *pstro,
  ULONG  *pc,
  PGLYPHPOS  *ppgpos);

WIN32KAPI
WINBOOL
APIENTRY
STROBJ_bEnumPositionsOnly(
  STROBJ  *pstro,
  ULONG  *pc,
  PGLYPHPOS  *ppgpos);

WIN32KAPI
WINBOOL
APIENTRY
STROBJ_bGetAdvanceWidths(
  STROBJ  *pso,
  ULONG  iFirst,
  ULONG  c,
  POINTQF  *pptqD);

WIN32KAPI
DWORD
APIENTRY
STROBJ_dwGetCodePage(
  STROBJ  *pstro);

WIN32KAPI
FIX
APIENTRY
STROBJ_fxBreakExtra(
  STROBJ  *pstro);

WIN32KAPI
FIX
APIENTRY
STROBJ_fxCharacterExtra(
  STROBJ  *pstro);

WIN32KAPI
VOID
APIENTRY
STROBJ_vEnumStart(
  STROBJ  *pstro);

WIN32KAPI
WINBOOL
APIENTRY
WNDOBJ_bEnum(
  WNDOBJ  *pwo,
  ULONG  cj,
  ULONG  *pul);

WIN32KAPI
ULONG
APIENTRY
WNDOBJ_cEnumStart(
  WNDOBJ  *pwo,
  ULONG  iType,
  ULONG  iDirection,
  ULONG  cLimit);

WIN32KAPI
VOID
APIENTRY
WNDOBJ_vSetConsumer(
  WNDOBJ  *pwo,
  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
WINBOOL
APIENTRY
XFORMOBJ_bApplyXform(
  XFORMOBJ  *pxo,
  ULONG  iMode,
  ULONG  cPoints,
  PVOID  pvIn,
  PVOID  pvOut);

WIN32KAPI
ULONG
APIENTRY
XFORMOBJ_iGetFloatObjXform(
  XFORMOBJ  *pxo,
  FLOATOBJ_XFORM  *pxfo);

WIN32KAPI
ULONG
APIENTRY
XFORMOBJ_iGetXform(
  XFORMOBJ  *pxo,
  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
APIENTRY
XLATEOBJ_cGetPalette(
  XLATEOBJ  *pxlo,
  ULONG  iPal,
  ULONG  cPal,
  ULONG  *pPal);

WIN32KAPI
HANDLE
APIENTRY
XLATEOBJ_hGetColorTransform(
  XLATEOBJ  *pxlo);

WIN32KAPI
ULONG
APIENTRY
XLATEOBJ_iXlate(
  XLATEOBJ  *pxlo,
  ULONG  iColor);

WIN32KAPI
ULONG*
APIENTRY
XLATEOBJ_piVector(
  XLATEOBJ  *pxlo);



/* Graphics Driver Functions */

WINBOOL
APIENTRY
DrvAlphaBlend(
  SURFOBJ  *psoDest,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDest,
  RECTL  *prclSrc,
  BLENDOBJ  *pBlendObj);

WINBOOL
APIENTRY
DrvAssertMode(
  DHPDEV  dhpdev,
  WINBOOL  bEnable);

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

VOID
APIENTRY
DrvCompletePDEV(
  DHPDEV  dhpdev,
  HDEV  hdev);

WINBOOL
APIENTRY
DrvCopyBits(
  SURFOBJ  *psoDest,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDest,
  POINTL  *pptlSrc);

HBITMAP
APIENTRY
DrvCreateDeviceBitmap(
  DHPDEV  dhpdev,
  SIZEL  sizl,
  ULONG  iFormat);

VOID
APIENTRY
DrvDeleteDeviceBitmap(
  DHSURF  dhsurf);

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

LONG
APIENTRY
DrvDescribePixelFormat(
  DHPDEV  dhpdev,
  LONG  iPixelFormat,
  ULONG  cjpfd,
  PIXELFORMATDESCRIPTOR  *ppfd);

VOID
APIENTRY
DrvDestroyFont(
  FONTOBJ  *pfo);

VOID
APIENTRY
DrvDisableDriver(
  VOID);

VOID
APIENTRY
DrvDisablePDEV(
  DHPDEV  dhpdev);

VOID
APIENTRY
DrvDisableSurface(
  DHPDEV  dhpdev);

#define DM_DEFAULT                        0x00000001
#define DM_MONOCHROME                     0x00000002

ULONG
APIENTRY
DrvDitherColor(
  DHPDEV  dhpdev,
  ULONG  iMode,
  ULONG  rgb,
  ULONG  *pul);

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

WINBOOL
APIENTRY
DrvEnableDriver(
  ULONG  iEngineVersion,
  ULONG  cj,
  DRVENABLEDATA  *pded);

DHPDEV
APIENTRY
DrvEnablePDEV(
  DEVMODEW  *pdm,
  LPWSTR  pwszLogAddress,
  ULONG  cPat,
  HSURF  *phsurfPatterns,
  ULONG  cjCaps,
  ULONG  *pdevcaps,
  ULONG  cjDevInfo,
  DEVINFO  *pdi,
  HDEV  hdev,
  LPWSTR  pwszDeviceName,
  HANDLE  hDriver);

HSURF
APIENTRY
DrvEnableSurface(
  DHPDEV  dhpdev);

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

WINBOOL
APIENTRY
DrvEndDoc(
  SURFOBJ  *pso,
  FLONG  fl);

ULONG
APIENTRY
DrvEscape(
  SURFOBJ  *pso,
  ULONG  iEsc,
  ULONG  cjIn,
  PVOID  pvIn,
  ULONG  cjOut,
  PVOID  pvOut);

WINBOOL
APIENTRY
DrvFillPath(
  SURFOBJ  *pso,
  PATHOBJ  *ppo,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  MIX  mix,
  FLONG  flOptions);

ULONG
APIENTRY
DrvFontManagement(
  SURFOBJ  *pso,
  FONTOBJ  *pfo,
  ULONG  iMode,
  ULONG  cjIn,
  PVOID  pvIn,
  ULONG  cjOut,
  PVOID  pvOut);

VOID
APIENTRY
DrvFree(
  PVOID  pv,
  ULONG_PTR  id);

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

ULONG
APIENTRY
DrvGetGlyphMode(
  DHPDEV  dhpdev,
  FONTOBJ  *pfo);

ULONG
APIENTRY
DrvGetModes(
  HANDLE  hDriver,
  ULONG  cjSize,
  DEVMODEW  *pdm);

PVOID
APIENTRY
DrvGetTrueTypeFile(
  ULONG_PTR  iFile,
  ULONG  *pcj);

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

WINBOOL
APIENTRY
DrvIcmCheckBitmapBits(
  DHPDEV  dhpdev,
  HANDLE  hColorTransform,
  SURFOBJ  *pso,
  PBYTE  paResults);

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

WINBOOL
APIENTRY
DrvIcmDeleteColorTransform(
  DHPDEV  dhpdev,
  HANDLE  hcmXform);

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

WINBOOL
APIENTRY
DrvIcmSetDeviceGammaRamp(
  DHPDEV  dhpdev,
  ULONG  iFormat,
  LPVOID  lpRamp);

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

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

VOID
APIENTRY
DrvMovePointer(
  SURFOBJ  *pso,
  LONG  x,
  LONG  y,
  RECTL  *prcl);

WINBOOL
APIENTRY
DrvNextBand(
  SURFOBJ  *pso,
  POINTL  *pptl);

VOID
APIENTRY
DrvNotify(
  SURFOBJ  *pso,
  ULONG  iType,
  PVOID  pvData);

WINBOOL
APIENTRY
DrvOffset(
  SURFOBJ  *pso,
  LONG  x,
  LONG  y,
  FLONG  flReserved);

WINBOOL
APIENTRY
DrvPaint(
  SURFOBJ  *pso,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  MIX  mix);

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

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

WINBOOL
APIENTRY
DrvQueryAdvanceWidths(
  DHPDEV  dhpdev,
  FONTOBJ  *pfo,
  ULONG  iMode,
  HGLYPH  *phg,
  PVOID  pvWidths,
  ULONG  cGlyphs);

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

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

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

WINBOOL
APIENTRY
DrvQueryDriverInfo(
  DWORD  dwMode,
  PVOID  pBuffer,
  DWORD  cbBuf,
  PDWORD  pcbNeeded);

PIFIMETRICS
APIENTRY
DrvQueryFont(
  DHPDEV  dhpdev,
  ULONG_PTR  iFile,
  ULONG  iFace,
  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
APIENTRY
DrvQueryFontCaps(
  ULONG  culCaps,
  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
APIENTRY
DrvQueryFontData(
  DHPDEV  dhpdev,
  FONTOBJ  *pfo,
  ULONG  iMode,
  HGLYPH  hg,
  GLYPHDATA  *pgd,
  PVOID  pv,
  ULONG  cjSize);

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

LONG
APIENTRY
DrvQueryFontFile(
  ULONG_PTR  iFile,
  ULONG  ulMode,
  ULONG  cjBuf,
  ULONG  *pulBuf);

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

PVOID
APIENTRY
DrvQueryFontTree(
  DHPDEV  dhpdev,
  ULONG_PTR  iFile,
  ULONG  iFace,
  ULONG  iMode,
  ULONG_PTR  *pid);

PFD_GLYPHATTR
APIENTRY
DrvQueryGlyphAttrs(
  FONTOBJ  *pfo,
  ULONG  iMode);

ULONG
APIENTRY
DrvQueryPerBandInfo(
  SURFOBJ  *pso,
  PERBANDINFO  *pbi);

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

LONG
APIENTRY
DrvQueryTrueTypeOutline(
  DHPDEV  dhpdev,
  FONTOBJ  *pfo,
  HGLYPH  hglyph,
  WINBOOL  bMetricsOnly,
  GLYPHDATA  *pgldt,
  ULONG  cjBuf,
  TTPOLYGONHEADER  *ppoly);

LONG
APIENTRY
DrvQueryTrueTypeTable(
  ULONG_PTR  iFile,
  ULONG  ulFont,
  ULONG  ulTag,
  PTRDIFF  dpStart,
  ULONG  cjBuf,
  BYTE  *pjBuf,
  PBYTE  *ppjTable,
  ULONG *pcjTable);

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

#define HS_DDI_MAX                        6

WINBOOL
APIENTRY
DrvRealizeBrush(
  BRUSHOBJ  *pbo,
  SURFOBJ  *psoTarget,
  SURFOBJ  *psoPattern,
  SURFOBJ  *psoMask,
  XLATEOBJ  *pxlo,
  ULONG  iHatch);

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

ULONG
APIENTRY
DrvResetDevice(
  DHPDEV dhpdev,
  PVOID Reserved);

WINBOOL
APIENTRY
DrvResetPDEV(
  DHPDEV  dhpdevOld,
  DHPDEV  dhpdevNew);

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

ULONG_PTR
APIENTRY
DrvSaveScreenBits(
  SURFOBJ  *pso,
  ULONG  iMode,
  ULONG_PTR  ident,
  RECTL  *prcl);

WINBOOL
APIENTRY
DrvSendPage(
  SURFOBJ  *pso);

WINBOOL
APIENTRY
DrvSetPalette(
  DHPDEV  dhpdev,
  PALOBJ  *ppalo,
  FLONG  fl,
  ULONG  iStart,
  ULONG  cColors);

WINBOOL
APIENTRY
DrvSetPixelFormat(
  SURFOBJ  *pso,
  LONG  iPixelFormat,
  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
APIENTRY
DrvSetPointerShape(
  SURFOBJ  *pso,
  SURFOBJ  *psoMask,
  SURFOBJ  *psoColor,
  XLATEOBJ  *pxlo,
  LONG  xHot,
  LONG  yHot,
  LONG  x,
  LONG  y,
  RECTL  *prcl,
  FLONG  fl);

WINBOOL
APIENTRY
DrvStartBanding(
  SURFOBJ  *pso,
  POINTL  *pptl);

WINBOOL
APIENTRY
DrvStartDoc(
  SURFOBJ  *pso,
  LPWSTR  pwszDocName,
  DWORD  dwJobId);

WINBOOL
APIENTRY
DrvStartPage(
  SURFOBJ  *pso);

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

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

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

WINBOOL
APIENTRY
DrvStrokePath(
  SURFOBJ  *pso,
  PATHOBJ  *ppo,
  CLIPOBJ  *pco,
  XFORMOBJ  *pxo,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  LINEATTRS  *plineattrs,
  MIX  mix);

WINBOOL
APIENTRY
DrvSwapBuffers(
  SURFOBJ  *pso,
  WNDOBJ  *pwo);

VOID
APIENTRY
DrvSynchronize(
  DHPDEV  dhpdev,
  RECTL  *prcl);

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

VOID
APIENTRY
DrvSynchronizeSurface(
  SURFOBJ  *pso,
  RECTL  *prcl,
  FLONG  fl);

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

WINBOOL
APIENTRY
DrvTransparentBlt(
  SURFOBJ  *psoDst,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDst,
  RECTL  *prclSrc,
  ULONG  iTransColor,
  ULONG  ulReserved);

WINBOOL
APIENTRY
DrvUnloadFontFile(
  ULONG_PTR  iFile);

typedef WINBOOL
(APIENTRY *PFN_DrvAlphaBlend)(
  SURFOBJ  *psoDest,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDest,
  RECTL  *prclSrc,
  BLENDOBJ  *pBlendObj);

typedef WINBOOL
(APIENTRY *PFN_DrvAssertMode)(
  DHPDEV  dhpdev,
  WINBOOL  bEnable);

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

typedef VOID
(APIENTRY *PFN_DrvCompletePDEV)(
  DHPDEV  dhpdev,
  HDEV  hdev);

typedef WINBOOL
(APIENTRY *PFN_DrvCopyBits)(
  SURFOBJ  *psoDest,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDest,
  POINTL  *pptlSrc);

typedef HBITMAP
(APIENTRY *PFN_DrvCreateDeviceBitmap)(
  DHPDEV  dhpdev,
  SIZEL  sizl,
  ULONG  iFormat);

typedef VOID
(APIENTRY *PFN_DrvDeleteDeviceBitmap)(
  DHSURF  dhsurf);

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

typedef LONG
(APIENTRY *PFN_DrvDescribePixelFormat)(
  DHPDEV  dhpdev,
  LONG  iPixelFormat,
  ULONG  cjpfd,
  PIXELFORMATDESCRIPTOR  *ppfd);

typedef VOID
(APIENTRY *PFN_DrvDestroyFont)(
  FONTOBJ  *pfo);

typedef VOID
(APIENTRY *PFN_DrvDisableDriver)(
  VOID);

typedef VOID
(APIENTRY *PFN_DrvDisablePDEV)(
  DHPDEV  dhpdev);

typedef VOID
(APIENTRY *PFN_DrvDisableSurface)(
  DHPDEV  dhpdev);

typedef ULONG
(APIENTRY *PFN_DrvDitherColor)(
  DHPDEV  dhpdev,
  ULONG  iMode,
  ULONG  rgb,
  ULONG  *pul);

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

typedef WINBOOL
(APIENTRY *PFN_DrvEnableDriver)(
  ULONG  iEngineVersion,
  ULONG  cj,
  DRVENABLEDATA  *pded);

typedef DHPDEV 
(APIENTRY *PFN_DrvEnablePDEV)(
  DEVMODEW  *pdm,
  LPWSTR  pwszLogAddress,
  ULONG  cPat,
  HSURF  *phsurfPatterns,
  ULONG  cjCaps,
  GDIINFO  *pdevcaps,
  ULONG  cjDevInfo,
  DEVINFO  *pdi,
  HDEV  hdev,
  LPWSTR  pwszDeviceName,
  HANDLE  hDriver);

typedef HSURF
(APIENTRY *PFN_DrvEnableSurface)(
  DHPDEV  dhpdev);

typedef WINBOOL
(APIENTRY *PFN_DrvEndDoc)(
  SURFOBJ  *pso,
  FLONG  fl);

typedef ULONG
(APIENTRY *PFN_DrvEscape)(
  SURFOBJ  *pso,
  ULONG  iEsc,
  ULONG  cjIn,
  PVOID  pvIn,
  ULONG  cjOut,
  PVOID  pvOut);

typedef WINBOOL
(APIENTRY *PFN_DrvFillPath)(
  SURFOBJ  *pso,
  PATHOBJ  *ppo,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  MIX  mix,
  FLONG  flOptions);

typedef ULONG
(APIENTRY *PFN_DrvFontManagement)(
  SURFOBJ  *pso,
  FONTOBJ  *pfo,
  ULONG  iMode,
  ULONG  cjIn,
  PVOID  pvIn,
  ULONG  cjOut,
  PVOID  pvOut);

typedef VOID
(APIENTRY *PFN_DrvFree)(
  PVOID  pv,
  ULONG_PTR  id);

typedef ULONG
(APIENTRY *PFN_DrvGetGlyphMode)(
  DHPDEV  dhpdev,
  FONTOBJ  *pfo);

typedef ULONG
(APIENTRY *PFN_DrvGetModes)(
  HANDLE  hDriver,
  ULONG  cjSize,
  DEVMODEW  *pdm);

typedef PVOID
(APIENTRY *PFN_DrvGetTrueTypeFile)(
  ULONG_PTR  iFile,
  ULONG  *pcj);

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

typedef WINBOOL
(APIENTRY *PFN_DrvIcmCheckBitmapBits)(
  DHPDEV  dhpdev,
  HANDLE  hColorTransform,
  SURFOBJ  *pso,
  PBYTE  paResults);

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

typedef WINBOOL
(APIENTRY *PFN_DrvIcmDeleteColorTransform)(
  DHPDEV  dhpdev,
  HANDLE  hcmXform);

typedef WINBOOL
(APIENTRY *PFN_DrvIcmSetDeviceGammaRamp)(
  DHPDEV  dhpdev,
  ULONG  iFormat,
  LPVOID  lpRamp);

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

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

typedef VOID
(APIENTRY *PFN_DrvMovePointer)(
  SURFOBJ  *pso,
  LONG  x,
  LONG  y,
  RECTL  *prcl);

typedef WINBOOL
(APIENTRY *PFN_DrvNextBand)(
  SURFOBJ  *pso,
  POINTL  *pptl);

typedef VOID
(APIENTRY *PFN_DrvNotify)(
  SURFOBJ  *pso,
  ULONG  iType,
  PVOID  pvData);

typedef WINBOOL
(APIENTRY *PFN_DrvOffset)(
  SURFOBJ  *pso,
  LONG  x,
  LONG  y,
  FLONG  flReserved);

typedef WINBOOL
(APIENTRY *PFN_DrvPaint)(
  SURFOBJ  *pso,
  CLIPOBJ  *pco,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  MIX  mix);

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

typedef WINBOOL
(APIENTRY *PFN_DrvQueryAdvanceWidths)(
  DHPDEV  dhpdev,
  FONTOBJ  *pfo,
  ULONG  iMode,
  HGLYPH  *phg,
  PVOID  pvWidths,
  ULONG  cGlyphs);

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

typedef WINBOOL
(APIENTRY *PFN_DrvQueryDriverInfo)(
  DWORD  dwMode,
  PVOID  pBuffer,
  DWORD  cbBuf,
  PDWORD  pcbNeeded);

typedef PIFIMETRICS
(APIENTRY *PFN_DrvQueryFont)(
  DHPDEV  dhpdev,
  ULONG_PTR  iFile,
  ULONG  iFace,
  ULONG_PTR  *pid);

typedef LONG
(APIENTRY *PFN_DrvQueryFontCaps)(
  ULONG  culCaps,
  ULONG  *pulCaps);

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

typedef LONG
(APIENTRY *PFN_DrvQueryFontFile)(
  ULONG_PTR  iFile,
  ULONG  ulMode,
  ULONG  cjBuf,
  ULONG  *pulBuf);

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

typedef PFD_GLYPHATTR
(APIENTRY *PFN_DrvQueryGlyphAttrs)(
  FONTOBJ  *pfo,
  ULONG  iMode);

typedef ULONG
(APIENTRY *PFN_DrvQueryPerBandInfo)(
  SURFOBJ  *pso,
  PERBANDINFO  *pbi);

typedef LONG
(APIENTRY *PFN_DrvQueryTrueTypeOutline)(
  DHPDEV  dhpdev,
  FONTOBJ  *pfo,
  HGLYPH  hglyph,
  WINBOOL  bMetricsOnly,
  GLYPHDATA  *pgldt,
  ULONG  cjBuf,
  TTPOLYGONHEADER  *ppoly);

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

typedef WINBOOL
(APIENTRY *PFN_DrvRealizeBrush)(
  BRUSHOBJ  *pbo,
  SURFOBJ  *psoTarget,
  SURFOBJ  *psoPattern,
  SURFOBJ  *psoMask,
  XLATEOBJ  *pxlo,
  ULONG  iHatch);

typedef ULONG
(APIENTRY *PFN_DrvResetDevice)(
  DHPDEV dhpdev,
  PVOID Reserved);

typedef WINBOOL
(APIENTRY *PFN_DrvResetPDEV)(
  DHPDEV  dhpdevOld,
  DHPDEV  dhpdevNew);

typedef ULONG_PTR
(APIENTRY *PFN_DrvSaveScreenBits)(
  SURFOBJ  *pso,
  ULONG  iMode,
  ULONG_PTR  ident,
  RECTL  *prcl);

typedef WINBOOL
(APIENTRY *PFN_DrvSendPage)(
  SURFOBJ  *pso);

typedef WINBOOL
(APIENTRY *PFN_DrvSetPalette)(
  DHPDEV  dhpdev,
  PALOBJ  *ppalo,
  FLONG  fl,
  ULONG  iStart,
  ULONG  cColors);

typedef WINBOOL
(APIENTRY *PFN_DrvSetPixelFormat)(
  SURFOBJ  *pso,
  LONG  iPixelFormat,
  HWND  hwnd);

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

typedef WINBOOL
(APIENTRY *PFN_DrvStartBanding)(
  SURFOBJ  *pso,
  POINTL  *pptl);

typedef WINBOOL
(APIENTRY *PFN_DrvStartDoc)(
  SURFOBJ  *pso,
  LPWSTR  pwszDocName,
  DWORD  dwJobId);

typedef WINBOOL
(APIENTRY *PFN_DrvStartPage)(
  SURFOBJ  *pso);

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

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

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

typedef WINBOOL
(APIENTRY *PFN_DrvStrokePath)(
  SURFOBJ  *pso,
  PATHOBJ  *ppo,
  CLIPOBJ  *pco,
  XFORMOBJ  *pxo,
  BRUSHOBJ  *pbo,
  POINTL  *pptlBrushOrg,
  LINEATTRS  *plineattrs,
  MIX  mix);

typedef WINBOOL
(APIENTRY *PFN_DrvSwapBuffers)(
  SURFOBJ  *pso,
  WNDOBJ  *pwo);

typedef VOID
(APIENTRY *PFN_DrvSynchronize)(
  DHPDEV  dhpdev,
  RECTL  *prcl);

typedef VOID
(APIENTRY *PFN_DrvSynchronizeSurface)(
  SURFOBJ  *pso,
  RECTL  *prcl,
  FLONG  fl);

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

typedef WINBOOL
(APIENTRY *PFN_DrvTransparentBlt)(
  SURFOBJ  *psoDst,
  SURFOBJ  *psoSrc,
  CLIPOBJ  *pco,
  XLATEOBJ  *pxlo,
  RECTL  *prclDst,
  RECTL  *prclSrc,
  ULONG  iTransColor,
  ULONG  ulReserved);

typedef WINBOOL
(APIENTRY *PFN_DrvUnloadFontFile)(
  ULONG_PTR  iFile);


WIN32KAPI
VOID
APIENTRY
DrvDisableDirectDraw(
  DHPDEV  dhpdev);

typedef VOID
(APIENTRY *PFN_DrvDisableDirectDraw)(
  DHPDEV  dhpdev);

WIN32KAPI
WINBOOL
APIENTRY
DrvEnableDirectDraw(
  DHPDEV  dhpdev,
  DD_CALLBACKS  *pCallBacks,
  DD_SURFACECALLBACKS  *pSurfaceCallBacks,
  DD_PALETTECALLBACKS  *pPaletteCallBacks);

typedef WINBOOL
(APIENTRY *PFN_DrvEnableDirectDraw)(
  DHPDEV  dhpdev,
  DD_CALLBACKS  *pCallBacks,
  DD_SURFACECALLBACKS  *pSurfaceCallBacks,
  DD_PALETTECALLBACKS  *pPaletteCallBacks);

WIN32KAPI
WINBOOL
APIENTRY
DrvGetDirectDrawInfo(
  DHPDEV  dhpdev,
  DD_HALINFO  *pHalInfo,
  DWORD  *pdwNumHeaps,
  VIDEOMEMORY  *pvmList,
  DWORD  *pdwNumFourCCCodes,
  DWORD  *pdwFourCC);

typedef WINBOOL
(APIENTRY *PFN_DrvGetDirectDrawInfo)(
  DHPDEV  dhpdev,
  DD_HALINFO  *pHalInfo,
  DWORD  *pdwNumHeaps,
  VIDEOMEMORY  *pvmList,
  DWORD  *pdwNumFourCCCodes,
  DWORD  *pdwFourCC);

//DECLSPEC_DEPRECATED_DDK
WINBOOL
APIENTRY
DrvQuerySpoolType(
  DHPDEV dhpdev,
  LPWSTR pwchType);

typedef WINBOOL
(APIENTRY *PFN_DrvQuerySpoolType)(
  DHPDEV dhpdev,
  LPWSTR pwchType);


#ifdef __cplusplus
}
#endif

#endif /* defined __VIDEO_H__ */

#endif /* _WINDDI_ */
