Some important stuff from the DirectDraw DDK headers.
diff --git a/include/dciddi.h b/include/dciddi.h
new file mode 100644
index 0000000..8c430f5
--- /dev/null
+++ b/include/dciddi.h
@@ -0,0 +1,41 @@
+/* DCI driver interface */
+
+#ifndef __WINE_DCIDDI_H
+#define __WINE_DCIDDI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DCI Command Escape */
+#define DCICOMMAND 3075
+#define DCI_VERSION 0x0100
+
+#define DCICREATEPRIMARYSURFACE 1
+#define DCICREATEOFFSCREENSURFACE 2
+#define DCICREATEOVERLAYSURFACE 3
+#define DCIENUMSURFACE 4
+#define DCIESCAPE 5
+
+/* DCI Errors */
+#define DCI_OK 0
+
+
+typedef int DCIRVAL; /* DCI callback return type */
+
+/*****************************************************************************
+ * Escape command structures
+ */
+typedef struct _DCICMD {
+ DWORD dwCommand;
+ DWORD dwParam1;
+ DWORD dwParam2;
+ DWORD dwVersion;
+ DWORD dwReserved;
+} DCICMD,*LPDCICMD;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_DCIDDI_H */
diff --git a/include/ddrawi.h b/include/ddrawi.h
new file mode 100644
index 0000000..870aa13
--- /dev/null
+++ b/include/ddrawi.h
@@ -0,0 +1,378 @@
+/* DirectDraw driver interface */
+/* (DirectX 7 version) */
+
+#ifndef __WINE_DDRAWI_H
+#define __WINE_DDRAWI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ddraw.h"
+#include "dciddi.h" /* the DD HAL is layered onto DCI escapes */
+
+#define DDAPI WINAPI
+
+/* the DirectDraw versions */
+#define DD_VERSION 0x0200 /* compatibility version */
+#define DD_RUNTIME_VERSION 0x0700 /* actual version */
+
+/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
+#define DD_HAL_VERSION 0x0100
+
+/* more DCICOMMAND escapes */
+#define DDCREATEDRIVEROBJECT 10
+#define DDGET32BITDRIVERNAME 11
+#define DDNEWCALLBACKFNS 12
+#define DDVERSIONINFO 13
+
+/*****************************************************************************
+ * Initialization stuff
+ */
+typedef struct {
+ char szName[260];
+ char szEntryPoint[64];
+ DWORD dwContext;
+} DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;
+
+typedef struct {
+ DWORD dwHALVersion;
+ ULONG_PTR dwReserved1;
+ ULONG_PTR dwReserved2;
+} DDVERSIONDATA,*LPDDVERSIONDATA;
+
+typedef DWORD PASCAL (*LPDD32BITDRIVERINIT)(DWORD dwContext);
+
+/* pointer to video memory */
+typedef ULONG_PTR FLATPTR;
+
+/* predeclare some structures */
+typedef struct _DDHALINFO *LPDDHALINFO;
+typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;
+typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;
+typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;
+
+/*****************************************************************************
+ * driver->ddraw callbacks
+ */
+typedef BOOL DDAPI (*LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset);
+typedef FLATPTR DDAPI (*LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight);
+typedef void DDAPI (*LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem);
+
+typedef struct {
+ DWORD dwSize;
+ LPDDHAL_SETINFO lpSetInfo;
+ LPDDHAL_VIDMEMALLOC lpVidMemAlloc;
+ LPDDHAL_VIDMEMFREE lpVidMemFree;
+} DDHALDDRAWFNS,*LPDDHALDDRAWFNS;
+
+/*****************************************************************************
+ * mode info structure
+ */
+typedef struct _DDHALMODEINFO {
+ DWORD dwWidth;
+ DWORD dwHeight;
+ LONG lPitch;
+ DWORD dwBPP;
+ WORD wFlags;
+ WORD wRefreshRate;
+ DWORD dwRBitMask;
+ DWORD dwGBitMask;
+ DWORD dwBBitMask;
+ DWORD dwAlphaBitMask;
+} DDHALMODEINFO,*LPDDHALMODEINFO;
+
+#define DDMODEINFO_PALETTIZED 0x0001
+#define DDMODEINFO_MODEX 0x0002
+#define DDMODEINFO_UNSUPPORTED 0x0004
+#define DDMODEINFO_STANDARDVGA 0x0008
+#define DDMODEINFO_MAXREFRESH 0x0010
+#define DDMODEINFO_STEREO 0x0020
+
+/*****************************************************************************
+ * video memory info structure
+ */
+typedef struct _VIDMEM {
+ DWORD dwFlags;
+ FLATPTR fpStart;
+ union {
+ FLATPTR fpEnd;
+ DWORD dwWidth;
+ } DUMMYUNIONNAME1;
+ DDSCAPS ddsCaps;
+ DDSCAPS ddsCapsAlt;
+ union {
+ FLATPTR lpHeap;
+ DWORD dwHeight;
+ } DUMMYUNIONNAME2;
+} VIDMEM,*LPVIDMEM;
+
+#define VIDMEM_ISLINEAR 0x00000001
+#define VIDMEM_ISRECTANGULAR 0x00000002
+#define VIDMEM_ISHEAP 0x00000004
+#define VIDMEM_ISNONLOCAL 0x00000008
+#define VIDMEM_ISWC 0x00000010
+#define VIDMEM_ISDISABLED 0x00000020
+
+typedef struct _VIDMEMINFO {
+ FLATPTR fpPrimary;
+ DWORD dwFlags;
+ DWORD dwDisplayWidth;
+ DWORD dwDisplayHeight;
+ LONG lDisplayPitch;
+ DDPIXELFORMAT ddpfDisplay;
+ DWORD dwOffscreenAlign;
+ DWORD dwOverlayAlign;
+ DWORD dwTextureAlign;
+ DWORD dwZBufferAlign;
+ DWORD dwAlphaAlign;
+ DWORD dwNumHeaps;
+ LPVIDMEM pvmList;
+} VIDMEMINFO,*LPVIDMEMINFO;
+
+/*****************************************************************************
+ * core capabilities structure
+ */
+typedef struct _DDCORECAPS {
+ DWORD dwSize;
+ DWORD dwCaps;
+ DWORD dwCaps2;
+ DWORD dwCKeyCaps;
+ DWORD dwFXCaps;
+ DWORD dwFXAlphaCaps;
+ DWORD dwPalCaps;
+ DWORD dwSVCaps;
+ DWORD dwAlphaBltConstBitDepths;
+ DWORD dwAlphaBltPixelBitDepths;
+ DWORD dwAlphaBltSurfaceBitDepths;
+ DWORD dwAlphaOverlayConstBitDepths;
+ DWORD dwAlphaOverlayPixelBitDepths;
+ DWORD dwAlphaOverlaySurfaceBitDepths;
+ DWORD dwZBufferBitDepths;
+ DWORD dwVidMemTotal;
+ DWORD dwVidMemFree;
+ DWORD dwMaxVisibleOverlays;
+ DWORD dwCurrVisibleOverlays;
+ DWORD dwNumFourCCCodes;
+ DWORD dwAlignBoundarySrc;
+ DWORD dwAlignSizeSrc;
+ DWORD dwAlignBoundaryDest;
+ DWORD dwAlignSizeDest;
+ DWORD dwAlignStrideAlign;
+ DWORD dwRops[DD_ROP_SPACE];
+ DDSCAPS ddsCaps;
+ DWORD dwMinOverlayStretch;
+ DWORD dwMaxOverlayStretch;
+ DWORD dwMinLiveVideoStretch;
+ DWORD dwMaxLiveVideoStretch;
+ DWORD dwMinHwCodecStretch;
+ DWORD dwMaxHwCodecStretch;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwSVBCaps;
+ DWORD dwSVBCKeyCaps;
+ DWORD dwSVBFXCaps;
+ DWORD dwSVBRops[DD_ROP_SPACE];
+ DWORD dwVSBCaps;
+ DWORD dwVSBCKeyCaps;
+ DWORD dwVSBFXCaps;
+ DWORD dwVSBRops[DD_ROP_SPACE];
+ DWORD dwSSBCaps;
+ DWORD dwSSBCKeyCaps;
+ DWORD dwSSBFXCaps;
+ DWORD dwSSBRops[DD_ROP_SPACE];
+ DWORD dwMaxVideoPorts;
+ DWORD dwCurrVideoPorts;
+ DWORD dwSVBCaps2;
+} DDCORECAPS,*LPDDCORECAPS;
+
+/*****************************************************************************
+ * ddraw->driver callbacks
+ */
+#define DDHAL_DRIVER_NOTHANDLED 0
+#define DDHAL_DRIVER_HANDLED 1
+#define DDHAL_DRIVER_NOCKEYHW 2
+
+typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA;
+typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA;
+typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA;
+typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA;
+typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA;
+typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA;
+typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA;
+typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA;
+typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA;
+typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA;
+
+typedef DWORD PASCAL (*LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA);
+typedef DWORD PASCAL (*LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA);
+typedef DWORD PASCAL (*LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA);
+typedef DWORD PASCAL (*LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA);
+typedef DWORD PASCAL (*LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA);
+typedef DWORD PASCAL (*LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA );
+typedef DWORD PASCAL (*LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA);
+typedef DWORD PASCAL (*LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA);
+typedef DWORD PASCAL (*LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA);
+typedef DWORD PASCAL (*LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA);
+
+typedef struct _DDHAL_DDCALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHAL_DESTROYDRIVER DestroyDriver;
+ LPDDHAL_CREATESURFACE CreateSurface;
+ LPDDHAL_SETCOLORKEY SetColorKey;
+ LPDDHAL_SETMODE SetMode;
+ LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank;
+ LPDDHAL_CANCREATESURFACE CanCreateSurface;
+ LPDDHAL_CREATEPALETTE CreatePalette;
+ LPDDHAL_GETSCANLINE GetScanLine;
+ /* DirectX 2 */
+ LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode;
+ LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface;
+} DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS;
+
+typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA;
+typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA;
+typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA;
+typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA;
+typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA;
+typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA;
+typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA;
+typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA;
+typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA;
+typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA;
+typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA;
+typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA;
+typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA;
+
+typedef DWORD PASCAL (*LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA);
+typedef DWORD PASCAL (*LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA);
+
+typedef struct _DDHAL_DDSURFACECALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHALSURFCB_DESTROYSURFACE DestroySurface;
+ LPDDHALSURFCB_FLIP Flip;
+ LPDDHALSURFCB_SETCLIPLIST SetClipList;
+ LPDDHALSURFCB_LOCK Lock;
+ LPDDHALSURFCB_UNLOCK Unlock;
+ LPDDHALSURFCB_BLT Blt;
+ LPDDHALSURFCB_SETCOLORKEY SetColorKey;
+ LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface;
+ LPDDHALSURFCB_GETBLTSTATUS GetBltStatus;
+ LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus;
+ LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;
+ LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition;
+ LPVOID reserved4;
+ LPDDHALSURFCB_SETPALETTE SetPalette;
+} DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS;
+
+typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA;
+typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA;
+
+typedef DWORD PASCAL (*LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA);
+typedef DWORD PASCAL (*LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA);
+
+typedef struct _DDHAL_DDPALETTECALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHALPALCB_DESTROYPALETTE DestroyPalette;
+ LPDDHALPALCB_SETENTRIES SetEntries;
+} DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS;
+
+typedef DWORD PASCAL (*LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA );
+typedef DWORD PASCAL (*LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA);
+typedef DWORD PASCAL (*LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA);
+typedef DWORD PASCAL (*LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA);
+typedef DWORD PASCAL (*LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA);
+
+typedef struct _DDHAL_DDEXEBUFCALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer;
+ LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer;
+ LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer;
+ LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer;
+ LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer;
+} DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS;
+
+/*****************************************************************************
+ * driver info structure
+ *
+ * The HAL is queried for additional callbacks via the GetDriverInfo callback.
+ */
+typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;
+typedef DWORD PASCAL (*LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);
+
+typedef struct _DDHALINFO {
+ DWORD dwSize;
+ LPDDHAL_DDCALLBACKS lpDDCallbacks;
+ LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks;
+ LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks;
+ VIDMEMINFO vmiData;
+ DDCORECAPS ddCaps;
+ DWORD dwMonitorFrequency;
+ LPDDHAL_GETDRIVERINFO GetDriverInfo;
+ DWORD dwModeIndex;
+ LPDWORD lpdwFourCC;
+ DWORD dwNumModes;
+ LPDDHALMODEINFO lpModeInfo;
+ DWORD dwFlags;
+ LPVOID lpPDevice;
+ DWORD hInstance;
+ /* DirectX 2 */
+ ULONG_PTR lpD3DGlobalDriverData;
+ ULONG_PTR lpD3DHALCallbacks;
+ LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks;
+} DDHALINFO;
+
+#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001
+#define DDHALINFO_MODEXILLEGAL 0x00000002
+#define DDHALINFO_GETDRIVERINFOSET 0x00000004
+
+/*****************************************************************************
+ * parameter structures
+ */
+typedef struct _DDHAL_DESTROYDRIVERDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ HRESULT ddRVal;
+ LPDDHAL_DESTROYDRIVER DestroyDriver;
+} DDHAL_DESTROYDRIVERDATA;
+
+typedef struct _DDHAL_SETMODEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ DWORD dwModeIndex;
+ HRESULT ddRVal;
+ LPDDHAL_SETMODE SetMode;
+ BOOL inexcl;
+ BOOL useRefreshRate;
+} DDHAL_SETMODEDATA;
+
+typedef struct _DDHAL_GETDRIVERINFODATA {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidInfo;
+ DWORD dwExpectedSize;
+ LPVOID lpvData;
+ DWORD dwActualSize;
+ HRESULT ddRVal;
+ ULONG_PTR dwContext;
+} DDHAL_GETDRIVERINFODATA;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_DDRAWI_H */