* Updated d3d headers to make it possible to include both d3d and d3d9 at the same...
[reactos.git] / reactos / include / ddk / ddrawi.h
index 8d617a1..66c569e 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#ifndef __WINE_DDRAWI_H
-#define __WINE_DDRAWI_H
+#ifndef __DDRAWI_INCLUDED__
+#define __DDRAWI_INCLUDED__
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#include <ddraw.h>
+#define OBJECT_ISROOT           0x80000000
 
-typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */
-typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */
-typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */
+#include <ddraw.h>
+#include <dvp.h>
+#include <ddkernel.h>
+#include <dmemmgr.h>
 
 #define DDAPI WINAPI
 
+#define VALID_ALIGNMENT(align) \
+          (!((align==0)||(align%2)!= 0 ))
+
 /* the DirectDraw versions */
 #define DD_VERSION             0x0200 /* compatibility version */
-#define DD_RUNTIME_VERSION     0x0700 /* actual version */
+#define DD_RUNTIME_VERSION     0x0902 /* actual version */
 
 /* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
 #define DD_HAL_VERSION 0x0100
 
 /* more DCICOMMAND escapes */
+#ifndef DCICOMMAND
+#define DCICOMMAND 3075
+#endif
+
 #define DDCREATEDRIVEROBJECT   10
 #define DDGET32BITDRIVERNAME   11
 #define DDNEWCALLBACKFNS       12
 #define DDVERSIONINFO          13
 
+
+
+#define DDUNSUPPORTEDMODE  ((DWORD) -1)
+
+#include "dciddi.h"
+
+#ifndef CCHDEVICENAME
+#define CCHDEVICENAME 32
+#endif
 #define MAX_DRIVER_NAME                CCHDEVICENAME
 
+#define DDHAL_DRIVER_DLLNAME    "DDRAW16.DLL"
+#define DDHAL_APP_DLLNAME   "DDRAW.DLL"
+
+
+
+/* GUID */
+#ifdef _WIN32
+DEFINE_GUID(GUID_MiscellaneousCallbacks, 0xefd60cc0, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
+DEFINE_GUID(GUID_VideoPortCallbacks,     0xefd60cc1, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
+DEFINE_GUID(GUID_ColorControlCallbacks,  0xefd60cc2, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
+DEFINE_GUID(GUID_VideoPortCaps,          0xefd60cc3, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
+DEFINE_GUID(GUID_D3DCallbacks2,          0x0ba584e1, 0x70b6, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
+DEFINE_GUID(GUID_D3DCallbacks3,          0xddf41230, 0xec0a, 0x11d0, 0xa9, 0xb6, 0x00, 0xaa, 0x00, 0xc0, 0x99, 0x3e);
+DEFINE_GUID(GUID_NonLocalVidMemCaps,     0x86c4fa80, 0x8d84, 0x11d0, 0x94, 0xe8, 0x00, 0xc0, 0x4f, 0xc3, 0x41, 0x37);
+DEFINE_GUID(GUID_KernelCallbacks,        0x80863800, 0x6B06, 0x11D0, 0x9B, 0x06, 0x0, 0xA0, 0xC9, 0x03, 0xA3, 0xB8);
+DEFINE_GUID(GUID_KernelCaps,             0xFFAA7540, 0x7AA8, 0x11D0, 0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8);
+DEFINE_GUID(GUID_D3DExtendedCaps,        0x7de41f80, 0x9d93, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);
+DEFINE_GUID(GUID_ZPixelFormats,          0x93869880, 0x36cf, 0x11d1, 0x9b, 0x1b, 0x0, 0xaa, 0x0, 0xbb, 0xb8, 0xae);
+DEFINE_GUID(GUID_DDMoreSurfaceCaps,      0x3b8a0466, 0xf269, 0x11d1, 0x88, 0x0b, 0x0, 0xc0, 0x4f, 0xd9, 0x30, 0xc5);
+DEFINE_GUID(GUID_DDStereoMode,           0xf828169c, 0xa8e8, 0x11d2, 0xa1, 0xf2, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6);
+DEFINE_GUID(GUID_OptSurfaceKmodeInfo,    0xe05c8472, 0x51d4, 0x11d1, 0x8c, 0xce, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
+DEFINE_GUID(GUID_OptSurfaceUmodeInfo,    0x9d792804, 0x5fa8, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
+DEFINE_GUID(GUID_UserModeDriverInfo,     0xf0b0e8e2, 0x5f97, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
+DEFINE_GUID(GUID_UserModeDriverPassword, 0x97f861b6, 0x60a1, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
+DEFINE_GUID(GUID_D3DParseUnknownCommandCallback,  0x2e04ffa0, 0x98e4, 0x11d1, 0x8c, 0xe1, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
+DEFINE_GUID(GUID_MotionCompCallbacks,           0xb1122b40, 0x5dA5, 0x11d1, 0x8f, 0xcF, 0x00, 0xc0, 0x4f, 0xc2, 0x9b, 0x4e);
+DEFINE_GUID(GUID_Miscellaneous2Callbacks,   0x406B2F00, 0x3E5A, 0x11D1, 0xB6, 0x40, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x6A);
+#endif
+
+#ifndef _WIN32
+#undef  E_NOTIMPL
+#undef  E_OUTOFMEMORY
+#undef  E_INVALIDARG
+#undef  E_FAIL
+#define E_NOTIMPL      0x80004001L
+#define E_OUTOFMEMORY  0x8007000EL
+#define E_INVALIDARG   0x80070057L
+#define E_FAIL         0x80004005L
+#endif
+
+
 /*****************************************************************************
  * Initialization stuff
  */
@@ -66,16 +124,25 @@ typedef struct {
 
 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;
+
+#ifndef DDRAWI_DIRECTDRAW_DEFINED
 typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;
 typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;
+#define DDRAWI_DIRECTDRAW_DEFINED
+#endif
+
 typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT;
+
+#ifndef DDRAWI_DDRAWSURFACE_DEFINED
 typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL;
+#define DDRAWI_DDRAWSURFACE_DEFINED
+#endif
+
 typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL;
 typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE;
 typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE;
@@ -120,6 +187,9 @@ typedef struct _DDHALMODEINFO {
     DWORD      dwAlphaBitMask;
 } DDHALMODEINFO,*LPDDHALMODEINFO;
 
+
+
+
 #define DDMODEINFO_PALETTIZED  0x0001
 #define DDMODEINFO_MODEX       0x0002
 #define DDMODEINFO_UNSUPPORTED 0x0004
@@ -136,21 +206,25 @@ typedef struct _VIDMEM {
     union {
        FLATPTR         fpEnd;
        DWORD           dwWidth;
-    } DUMMYUNIONNAME1;
+    };
     DDSCAPS    ddsCaps;
     DDSCAPS    ddsCapsAlt;
     union {
        LPVMEMHEAP      lpHeap;
        DWORD           dwHeight;
-    } DUMMYUNIONNAME2;
-} VIDMEM,*LPVIDMEM;
+    };
+} VIDMEM;
 
+
+
+#ifndef __DD_INCLUDED__
 #define VIDMEM_ISLINEAR                0x00000001
 #define VIDMEM_ISRECTANGULAR   0x00000002
 #define VIDMEM_ISHEAP          0x00000004
 #define VIDMEM_ISNONLOCAL      0x00000008
 #define VIDMEM_ISWC            0x00000010
 #define VIDMEM_ISDISABLED      0x00000020
+#endif
 
 typedef struct _VIDMEMINFO {
     FLATPTR            fpPrimary;
@@ -168,6 +242,8 @@ typedef struct _VIDMEMINFO {
     LPVIDMEM           pvmList;
 } VIDMEMINFO,*LPVIDMEMINFO;
 
+
+
 typedef struct _HEAPALIAS {
     FLATPTR    fpVidMem;
     LPVOID     lpAlias;
@@ -250,22 +326,23 @@ typedef struct _DDNONLOCALVIDMEMCAPS {
     DWORD      dwNLVBRops[DD_ROP_SPACE];
 } DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS;
 
-typedef struct _DDSCAPSEX {
-    DWORD      dwCaps2;
-    DWORD      dwCaps3;
-    DWORD      dwCaps4;
-} DDSCAPSEX,*LPDDSCAPSEX;
+
 
 #define DDSCAPS_EXECUTEBUFFER  DDSCAPS_RESERVED2
 #define DDSCAPS2_VERTEXBUFFER  DDSCAPS2_RESERVED1
 #define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2
 
+
+
+
 /*****************************************************************************
  * ddraw->driver callbacks
  */
+#ifndef __DD_INCLUDED__
 #define DDHAL_DRIVER_NOTHANDLED        0
 #define DDHAL_DRIVER_HANDLED   1
 #define DDHAL_DRIVER_NOCKEYHW  2
+#endif
 
 typedef struct _DDHAL_DESTROYDRIVERDATA                *LPDDHAL_DESTROYDRIVERDATA;
 typedef struct _DDHAL_CREATESURFACEDATA                *LPDDHAL_CREATESURFACEDATA;
@@ -289,6 +366,8 @@ 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;
@@ -305,6 +384,8 @@ typedef struct _DDHAL_DDCALLBACKS {
     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;
@@ -352,6 +433,8 @@ typedef struct _DDHAL_DDSURFACECALLBACKS {
     LPDDHALSURFCB_SETPALETTE           SetPalette;
 } DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS;
 
+
+
 typedef struct _DDHAL_DESTROYPALETTEDATA       *LPDDHAL_DESTROYPALETTEDATA;
 typedef struct _DDHAL_SETENTRIESDATA           *LPDDHAL_SETENTRIESDATA;
 
@@ -415,8 +498,132 @@ typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS {
     LPDDHAL_DESTROYDDLOCAL             DestroyDDLocal;
 } DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS;
 
+
+typedef struct _DDHAL_CANCREATEVPORTDATA       *LPDDHAL_CANCREATEVPORTDATA;
+typedef struct _DDHAL_CREATEVPORTDATA          *LPDDHAL_CREATEVPORTDATA;
+typedef struct _DDHAL_FLIPVPORTDATA            *LPDDHAL_FLIPVPORTDATA;
+typedef struct _DDHAL_GETVPORTCONNECTDATA      *LPDDHAL_GETVPORTCONNECTDATA;
+typedef struct _DDHAL_GETVPORTBANDWIDTHDATA    *LPDDHAL_GETVPORTBANDWIDTHDATA;
+typedef struct _DDHAL_GETVPORTINPUTFORMATDATA  *LPDDHAL_GETVPORTINPUTFORMATDATA;
+typedef struct _DDHAL_GETVPORTOUTPUTFORMATDATA *LPDDHAL_GETVPORTOUTPUTFORMATDATA;
+typedef struct _DDHAL_GETVPORTFIELDDATA        *LPDDHAL_GETVPORTFIELDDATA;
+typedef struct _DDHAL_GETVPORTLINEDATA         *LPDDHAL_GETVPORTLINEDATA;
+typedef struct _DDHAL_DESTROYVPORTDATA         *LPDDHAL_DESTROYVPORTDATA;
+typedef struct _DDHAL_GETVPORTFLIPSTATUSDATA   *LPDDHAL_GETVPORTFLIPSTATUSDATA;
+typedef struct _DDHAL_UPDATEVPORTDATA          *LPDDHAL_UPDATEVPORTDATA;
+typedef struct _DDHAL_WAITFORVPORTSYNCDATA     *LPDDHAL_WAITFORVPORTSYNCDATA;
+typedef struct _DDHAL_GETVPORTSIGNALDATA       *LPDDHAL_GETVPORTSIGNALDATA;
+typedef struct _DDHAL_VPORTCOLORDATA           *LPDDHAL_VPORTCOLORDATA;
+
+typedef DWORD (PASCAL *LPDDHALVPORTCB_CANCREATEVIDEOPORT)(LPDDHAL_CANCREATEVPORTDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_CREATEVIDEOPORT)(LPDDHAL_CREATEVPORTDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_FLIP)(LPDDHAL_FLIPVPORTDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_GETBANDWIDTH)(LPDDHAL_GETVPORTBANDWIDTHDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_GETINPUTFORMATS)(LPDDHAL_GETVPORTINPUTFORMATDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_GETOUTPUTFORMATS)(LPDDHAL_GETVPORTOUTPUTFORMATDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_GETFIELD)(LPDDHAL_GETVPORTFIELDDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_GETLINE)(LPDDHAL_GETVPORTLINEDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_GETVPORTCONNECT)(LPDDHAL_GETVPORTCONNECTDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_DESTROYVPORT)(LPDDHAL_DESTROYVPORTDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_GETFLIPSTATUS)(LPDDHAL_GETVPORTFLIPSTATUSDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_UPDATE)(LPDDHAL_UPDATEVPORTDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_WAITFORSYNC)(LPDDHAL_WAITFORVPORTSYNCDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_GETSIGNALSTATUS)(LPDDHAL_GETVPORTSIGNALDATA);
+typedef DWORD (PASCAL *LPDDHALVPORTCB_COLORCONTROL)(LPDDHAL_VPORTCOLORDATA);
+
+typedef struct _DDHAL_DDVIDEOPORTCALLBACKS
+{
+    DWORD                             dwSize;
+    DWORD                             dwFlags;
+    LPDDHALVPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort;
+    LPDDHALVPORTCB_CREATEVIDEOPORT    CreateVideoPort;
+    LPDDHALVPORTCB_FLIP               FlipVideoPort;
+    LPDDHALVPORTCB_GETBANDWIDTH       GetVideoPortBandwidth;
+    LPDDHALVPORTCB_GETINPUTFORMATS    GetVideoPortInputFormats;
+    LPDDHALVPORTCB_GETOUTPUTFORMATS   GetVideoPortOutputFormats;
+    LPVOID                            lpReserved1;
+    LPDDHALVPORTCB_GETFIELD           GetVideoPortField;
+    LPDDHALVPORTCB_GETLINE            GetVideoPortLine;
+    LPDDHALVPORTCB_GETVPORTCONNECT    GetVideoPortConnectInfo;
+    LPDDHALVPORTCB_DESTROYVPORT       DestroyVideoPort;
+    LPDDHALVPORTCB_GETFLIPSTATUS      GetVideoPortFlipStatus;
+    LPDDHALVPORTCB_UPDATE             UpdateVideoPort;
+    LPDDHALVPORTCB_WAITFORSYNC        WaitForVideoPortSync;
+    LPDDHALVPORTCB_GETSIGNALSTATUS    GetVideoSignalStatus;
+    LPDDHALVPORTCB_COLORCONTROL       ColorControl;
+} DDHAL_DDVIDEOPORTCALLBACKS;
+
+
+typedef struct _DDHAL_COLORCONTROLDATA *LPDDHAL_COLORCONTROLDATA;
+
+typedef DWORD (PASCAL *LPDDHALCOLORCB_COLORCONTROL)(LPDDHAL_COLORCONTROLDATA);
+
+
+typedef struct _DDHAL_DDCOLORCONTROLCALLBACKS
+{
+    DWORD                               dwSize;
+    DWORD                               dwFlags;
+    LPDDHALCOLORCB_COLORCONTROL         ColorControl;
+} DDHAL_DDCOLORCONTROLCALLBACKS;
+
+typedef struct _DDHAL_SYNCSURFACEDATA   *LPDDHAL_SYNCSURFACEDATA;
+typedef struct _DDHAL_SYNCVIDEOPORTDATA *LPDDHAL_SYNCVIDEOPORTDATA;
+
+typedef DWORD (PASCAL *LPDDHALKERNELCB_SYNCSURFACE)(LPDDHAL_SYNCSURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALKERNELCB_SYNCVIDEOPORT)(LPDDHAL_SYNCVIDEOPORTDATA);
+
+typedef struct _DDHAL_DDKERNELCALLBACKS
+{
+    DWORD                          dwSize;
+    DWORD                          dwFlags;
+    LPDDHALKERNELCB_SYNCSURFACE    SyncSurfaceData;
+    LPDDHALKERNELCB_SYNCVIDEOPORT  SyncVideoPortData;
+} DDHAL_DDKERNELCALLBACKS, *LPDDHAL_DDKERNELCALLBACKS;
+
+typedef struct _DDHAL_GETMOCOMPGUIDSDATA  *LPDDHAL_GETMOCOMPGUIDSDATA;
+typedef struct _DDHAL_GETMOCOMPFORMATSDATA  *LPDDHAL_GETMOCOMPFORMATSDATA;
+typedef struct _DDHAL_CREATEMOCOMPDATA  *LPDDHAL_CREATEMOCOMPDATA;
+typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA  *LPDDHAL_GETMOCOMPCOMPBUFFDATA;
+typedef struct _DDHAL_GETINTERNALMOCOMPDATA  *LPDDHAL_GETINTERNALMOCOMPDATA;
+typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA  *LPDDHAL_BEGINMOCOMPFRAMEDATA;
+typedef struct _DDHAL_ENDMOCOMPFRAMEDATA  *LPDDHAL_ENDMOCOMPFRAMEDATA;
+typedef struct _DDHAL_RENDERMOCOMPDATA  *LPDDHAL_RENDERMOCOMPDATA;
+typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA  *LPDDHAL_QUERYMOCOMPSTATUSDATA;
+typedef struct _DDHAL_DESTROYMOCOMPDATA  *LPDDHAL_DESTROYMOCOMPDATA;
+
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETGUIDS)( LPDDHAL_GETMOCOMPGUIDSDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETFORMATS)( LPDDHAL_GETMOCOMPFORMATSDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_CREATE)( LPDDHAL_CREATEMOCOMPDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETCOMPBUFFINFO)( LPDDHAL_GETMOCOMPCOMPBUFFDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETINTERNALINFO)( LPDDHAL_GETINTERNALMOCOMPDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_BEGINFRAME)( LPDDHAL_BEGINMOCOMPFRAMEDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_ENDFRAME)( LPDDHAL_ENDMOCOMPFRAMEDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_RENDER)( LPDDHAL_RENDERMOCOMPDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_QUERYSTATUS)( LPDDHAL_QUERYMOCOMPSTATUSDATA);
+typedef DWORD (PASCAL *LPDDHALMOCOMPCB_DESTROY)( LPDDHAL_DESTROYMOCOMPDATA);
+
+typedef struct _DDHAL_DDMOTIONCOMPCALLBACKS
+{
+    DWORD                            dwSize;
+    DWORD                            dwFlags;
+    LPDDHALMOCOMPCB_GETGUIDS         GetMoCompGuids;
+    LPDDHALMOCOMPCB_GETFORMATS       GetMoCompFormats;
+    LPDDHALMOCOMPCB_CREATE           CreateMoComp;
+    LPDDHALMOCOMPCB_GETCOMPBUFFINFO  GetMoCompBuffInfo;
+    LPDDHALMOCOMPCB_GETINTERNALINFO  GetInternalMoCompInfo;
+    LPDDHALMOCOMPCB_BEGINFRAME       BeginMoCompFrame;
+    LPDDHALMOCOMPCB_ENDFRAME         EndMoCompFrame;
+    LPDDHALMOCOMPCB_RENDER           RenderMoComp;
+    LPDDHALMOCOMPCB_QUERYSTATUS      QueryMoCompStatus;
+    LPDDHALMOCOMPCB_DESTROY          DestroyMoComp;
+} DDHAL_DDMOTIONCOMPCALLBACKS, *LPDDHAL_DDMOTIONCOMPCALLBACKS;
+
+
+
 typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE);
 
+
+
 /*****************************************************************************
  * driver info structure
  *
@@ -425,6 +632,19 @@ typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE);
 typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;
 typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);
 
+
+typedef struct _DDHAL_GETDRIVERINFODATA {
+    DWORD     dwSize;
+    DWORD     dwFlags;
+    GUID      guidInfo;
+    DWORD     dwExpectedSize;
+    LPVOID    lpvData;
+    DWORD     dwActualSize;
+    HRESULT   ddRVal;
+    ULONG_PTR dwContext;
+
+} DDHAL_GETDRIVERINFODATA;
+
 typedef struct _DDHALINFO {
     DWORD                      dwSize;
     LPDDHAL_DDCALLBACKS                lpDDCallbacks;
@@ -447,25 +667,141 @@ typedef struct _DDHALINFO {
     LPDDHAL_DDEXEBUFCALLBACKS  lpDDExeBufCallbacks;
 } DDHALINFO;
 
-#define DDHALINFO_ISPRIMARYDISPLAY     0x00000001
-#define DDHALINFO_MODEXILLEGAL         0x00000002
-#define DDHALINFO_GETDRIVERINFOSET     0x00000004
+
+
+#define DDPALETTECALLBACKSSIZE  sizeof( DDHAL_DDPALETTECALLBACKS )
+#define DDSURFACECALLBACKSSIZE sizeof( DDHAL_DDSURFACECALLBACKS )
+#define DDMISCELLANEOUSCALLBACKSSIZE sizeof(DDHAL_DDMISCELLANEOUSCALLBACKS)
+#define DDMISCELLANEOUS2CALLBACKSSIZE sizeof(DDHAL_DDMISCELLANEOUS2CALLBACKS)
+#define DDEXEBUFCALLBACKSSIZE sizeof( DDHAL_DDEXEBUFCALLBACKS )
+#define DDVIDEOPORTCALLBACKSSIZE sizeof( DDHAL_DDVIDEOPORTCALLBACKS )
+#define DDCOLORCONTROLCALLBACKSSIZE sizeof( DDHAL_DDCOLORCONTROLCALLBACKS )
+#define DDKERNELCALLBACKSSIZE sizeof(DDHAL_DDKERNELCALLBACKS)
+#define DDMOTIONCOMPCALLBACKSSIZE sizeof( DDHAL_DDMOTIONCOMPCALLBACKS )
+
+#define MAX_PALETTE_SIZE    256
+
+#define MAX_AUTOFLIP_BUFFERS    10
+#define DDSCAPS2_INDEXBUFFER    DDSCAPS2_RESERVED3
+#define DDSCAPS3_VIDEO          DDSCAPS3_RESERVED2
+#define D3DFMT_INTERNAL_D32     71
+#define D3DFMT_INTERNAL_S1D15   72
+#define D3DFMT_INTERNAL_D15S1   73
+#define D3DFMT_INTERNAL_S8D24   74
+#define D3DFMT_INTERNAL_D24S8   75
+#define D3DFMT_INTERNAL_X8D24   76
+#define D3DFMT_INTERNAL_D24X8   77
+#define DDHAL_PLEASEALLOC_BLOCKSIZE       0x00000002l
+#define DDHAL_PLEASEALLOC_LINEARSIZE        0x00000003l
+
+#define DDHAL_CB32_DESTROYDRIVER    0x00000001l
+#define DDHAL_CB32_CREATESURFACE    0x00000002l
+#define DDHAL_CB32_SETCOLORKEY      0x00000004l
+#define DDHAL_CB32_SETMODE      0x00000008l
+#define DDHAL_CB32_WAITFORVERTICALBLANK 0x00000010l
+#define DDHAL_CB32_CANCREATESURFACE 0x00000020l
+#define DDHAL_CB32_CREATEPALETTE    0x00000040l
+#define DDHAL_CB32_GETSCANLINE      0x00000080l
+#define DDHAL_CB32_SETEXCLUSIVEMODE     0x00000100l
+#define DDHAL_CB32_FLIPTOGDISURFACE     0x00000200l
+#define DDHAL_PALCB32_DESTROYPALETTE    0x00000001l
+#define DDHAL_PALCB32_SETENTRIES    0x00000002l
+#ifndef __DD_INCLUDED__
+#define DDHALINFO_ISPRIMARYDISPLAY             0x00000001
+#define DDHALINFO_MODEXILLEGAL                 0x00000002
+#define DDHALINFO_GETDRIVERINFOSET             0x00000004
+#define DDHALINFO_GETDRIVERINFO2            0x00000008
+#endif
+#define DDRAWI_VPORTSTART                   0x0001
+#define DDRAWI_VPORTSTOP                    0x0002
+#define DDRAWI_VPORTUPDATE                  0x0003
+#define DDRAWI_VPORTGETCOLOR                0x0001
+#define DDRAWI_VPORTSETCOLOR                0x0002
+#define DDHAL_SURFCB32_DESTROYSURFACE       0x00000001
+#define DDHAL_SURFCB32_FLIP                 0x00000002
+#define DDHAL_SURFCB32_SETCLIPLIST          0x00000004
+#define DDHAL_SURFCB32_LOCK                 0x00000008
+#define DDHAL_SURFCB32_UNLOCK               0x00000010
+#define DDHAL_SURFCB32_BLT                  0x00000020
+#define DDHAL_SURFCB32_SETCOLORKEY          0x00000040
+#define DDHAL_SURFCB32_ADDATTACHEDSURFACE   0x00000080
+#define DDHAL_SURFCB32_GETBLTSTATUS         0x00000100
+#define DDHAL_SURFCB32_GETFLIPSTATUS        0x00000200
+#define DDHAL_SURFCB32_UPDATEOVERLAY        0x00000400
+#define DDHAL_SURFCB32_SETOVERLAYPOSITION   0x00000800
+#define DDHAL_SURFCB32_RESERVED4            0x00001000
+#define DDHAL_SURFCB32_SETPALETTE           0x00002000
+#define DDHAL_MISCCB32_GETAVAILDRIVERMEMORY 0x00000001
+#define DDHAL_MISCCB32_UPDATENONLOCALHEAP   0x00000002
+#define DDHAL_MISCCB32_GETHEAPALIGNMENT     0x00000004
+#define DDHAL_MISCCB32_GETSYSMEMBLTSTATUS   0x00000008
+#define DDHAL_MISC2CB32_ALPHABLT            0x00000001
+#define DDHAL_MISC2CB32_CREATESURFACEEX     0x00000002
+#define DDHAL_MISC2CB32_GETDRIVERSTATE      0x00000004
+#define DDHAL_MISC2CB32_DESTROYDDLOCAL      0x00000008
+#ifndef __DD_INCLUDED__
+#define DDHAL_EXEBUFCB32_CANCREATEEXEBUF    0x00000001
+#define DDHAL_EXEBUFCB32_CREATEEXEBUF       0x00000002
+#define DDHAL_EXEBUFCB32_DESTROYEXEBUF      0x00000004
+#define DDHAL_EXEBUFCB32_LOCKEXEBUF         0x00000008
+#define DDHAL_EXEBUFCB32_UNLOCKEXEBUF       0x00000010
+#endif
+#define DDHAL_VPORT32_CANCREATEVIDEOPORT    0x00000001
+#define DDHAL_VPORT32_CREATEVIDEOPORT       0x00000002
+#define DDHAL_VPORT32_FLIP                  0x00000004
+#define DDHAL_VPORT32_GETBANDWIDTH          0x00000008
+#define DDHAL_VPORT32_GETINPUTFORMATS       0x00000010
+#define DDHAL_VPORT32_GETOUTPUTFORMATS      0x00000020
+#define DDHAL_VPORT32_GETFIELD              0x00000080
+#define DDHAL_VPORT32_GETLINE               0x00000100
+#define DDHAL_VPORT32_GETCONNECT            0x00000200
+#define DDHAL_VPORT32_DESTROY               0x00000400
+#define DDHAL_VPORT32_GETFLIPSTATUS         0x00000800
+#define DDHAL_VPORT32_UPDATE                0x00001000
+#define DDHAL_VPORT32_WAITFORSYNC           0x00002000
+#define DDHAL_VPORT32_GETSIGNALSTATUS       0x00004000
+#define DDHAL_VPORT32_COLORCONTROL          0x00008000
+#define DDHAL_COLOR_COLORCONTROL            0x00000001
+#ifndef __DD_INCLUDED__
+#define DDHAL_KERNEL_SYNCSURFACEDATA        0x00000001
+#define DDHAL_KERNEL_SYNCVIDEOPORTDATA      0x00000002
+#endif
+#define DDHAL_MOCOMP32_GETGUIDS             0x00000001
+#define DDHAL_MOCOMP32_GETFORMATS           0x00000002
+#define DDHAL_MOCOMP32_CREATE               0x00000004
+#define DDHAL_MOCOMP32_GETCOMPBUFFINFO      0x00000008
+#define DDHAL_MOCOMP32_GETINTERNALINFO      0x00000010
+#define DDHAL_MOCOMP32_BEGINFRAME           0x00000020
+#define DDHAL_MOCOMP32_ENDFRAME             0x00000040
+#define DDHAL_MOCOMP32_RENDER               0x00000080
+#define DDHAL_MOCOMP32_QUERYSTATUS          0x00000100
+#define DDHAL_MOCOMP32_DESTROY              0x00000200
+
 
 /* where the high-level ddraw implementation stores the callbacks */
 typedef struct _DDHAL_CALLBACKS {
-    DDHAL_DDCALLBACKS          cbDDCallbacks;
-    DDHAL_DDSURFACECALLBACKS   cbDDSurfaceCallbacks;
-    DDHAL_DDPALETTECALLBACKS   cbDDPaletteCallbacks;
-    DDHAL_DDCALLBACKS          HALDD;
-    DDHAL_DDSURFACECALLBACKS   HALDDSurface;
-    DDHAL_DDPALETTECALLBACKS   HALDDPalette;
-    DDHAL_DDCALLBACKS          HELDD;
-    DDHAL_DDSURFACECALLBACKS   HELDDSurface;
-    DDHAL_DDPALETTECALLBACKS   HELDDPalette;
-    DDHAL_DDEXEBUFCALLBACKS    cbDDExeBufCallbacks;
-    DDHAL_DDEXEBUFCALLBACKS    HALDDExeBuf;
-    DDHAL_DDEXEBUFCALLBACKS    HELDDExeBuf;
-    /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */
+    DDHAL_DDCALLBACKS                cbDDCallbacks;
+    DDHAL_DDSURFACECALLBACKS     cbDDSurfaceCallbacks;
+    DDHAL_DDPALETTECALLBACKS     cbDDPaletteCallbacks;
+    DDHAL_DDCALLBACKS                HALDD;
+    DDHAL_DDSURFACECALLBACKS     HALDDSurface;
+    DDHAL_DDPALETTECALLBACKS     HALDDPalette;
+    DDHAL_DDCALLBACKS                HELDD;
+    DDHAL_DDSURFACECALLBACKS     HELDDSurface;
+    DDHAL_DDPALETTECALLBACKS     HELDDPalette;
+    DDHAL_DDEXEBUFCALLBACKS          cbDDExeBufCallbacks;
+    DDHAL_DDEXEBUFCALLBACKS          HALDDExeBuf;
+    DDHAL_DDEXEBUFCALLBACKS          HELDDExeBuf;
+       DDHAL_DDVIDEOPORTCALLBACKS    cbDDVideoPortCallbacks;
+    DDHAL_DDVIDEOPORTCALLBACKS    HALDDVideoPort;
+    DDHAL_DDCOLORCONTROLCALLBACKS cbDDColorControlCallbacks;
+    DDHAL_DDCOLORCONTROLCALLBACKS HALDDColorControl;
+    DDHAL_DDMISCELLANEOUSCALLBACKS cbDDMiscellaneousCallbacks;
+    DDHAL_DDMISCELLANEOUSCALLBACKS HALDDMiscellaneous;
+    DDHAL_DDKERNELCALLBACKS        cbDDKernelCallbacks;
+    DDHAL_DDKERNELCALLBACKS        HALDDKernel;
+    DDHAL_DDMOTIONCOMPCALLBACKS    cbDDMotionCompCallbacks;
+    DDHAL_DDMOTIONCOMPCALLBACKS    HALDDMotionComp;
 } DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS;
 
 /*****************************************************************************
@@ -602,27 +938,252 @@ typedef struct _DDHAL_SETENTRIESDATA {
     LPDDHALPALCB_SETENTRIES    SetEntries;
 } DDHAL_SETENTRIESDATA;
 
-typedef struct _DDHAL_GETDRIVERINFODATA {
-    DWORD      dwSize;
-    DWORD      dwFlags;
-    GUID       guidInfo;
-    DWORD      dwExpectedSize;
-    LPVOID     lpvData;
-    DWORD      dwActualSize;
-    HRESULT    ddRVal;
-    ULONG_PTR  dwContext;
-} DDHAL_GETDRIVERINFODATA;
+
+typedef struct _DDHAL_CANCREATEVPORTDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL            lpDD;
+    LPDDVIDEOPORTDESC                  lpDDVideoPortDesc;
+    HRESULT                            ddRVal;
+    LPDDHALVPORTCB_CANCREATEVIDEOPORT  CanCreateVideoPort;
+} DDHAL_CANCREATEVPORTDATA;
+
+typedef struct _DDHAL_CREATEVPORTDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL         lpDD;
+    LPDDVIDEOPORTDESC               lpDDVideoPortDesc;
+    LPDDRAWI_DDVIDEOPORT_LCL        lpVideoPort;
+    HRESULT                         ddRVal;
+    LPDDHALVPORTCB_CREATEVIDEOPORT  CreateVideoPort;
+} DDHAL_CREATEVPORTDATA;
+
+typedef struct _DDHAL_GETVPORTBANDWIDTHDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL      lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL     lpVideoPort;
+    LPDDPIXELFORMAT              lpddpfFormat;
+    DWORD                        dwWidth;
+    DWORD                        dwHeight;
+    DWORD                        dwFlags;
+    LPDDVIDEOPORTBANDWIDTH       lpBandwidth;
+    HRESULT                      ddRVal;
+    LPDDHALVPORTCB_GETBANDWIDTH  GetVideoPortBandwidth;
+} DDHAL_GETVPORTBANDWIDTHDATA;
+
+typedef struct _DDHAL_GETVPORTINPUTFORMATDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL         lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL        lpVideoPort;
+    DWORD                           dwFlags;
+    LPDDPIXELFORMAT                 lpddpfFormat;
+    DWORD                           dwNumFormats;
+    HRESULT                         ddRVal;
+    LPDDHALVPORTCB_GETINPUTFORMATS  GetVideoPortInputFormats;
+} DDHAL_GETVPORTINPUTFORMATDATA;
+
+typedef struct _DDHAL_GETVPORTFIELDDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL  lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort;
+    BOOL                     bField;
+    HRESULT                  ddRVal;
+    LPDDHALVPORTCB_GETFIELD  GetVideoPortField;
+} DDHAL_GETVPORTFIELDDATA;
+
+typedef struct _DDHAL_GETVPORTOUTPUTFORMATDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL          lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL         lpVideoPort;
+    DWORD                            dwFlags;
+    LPDDPIXELFORMAT                  lpddpfInputFormat;
+    LPDDPIXELFORMAT                  lpddpfOutputFormats;
+    DWORD                            dwNumFormats;
+    HRESULT                          ddRVal;
+    LPDDHALVPORTCB_GETOUTPUTFORMATS  GetVideoPortOutputFormats;
+} DDHAL_GETVPORTOUTPUTFORMATDATA;
+
+typedef struct _DDHAL_GETVPORTLINEDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL  lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort;
+    DWORD                    dwLine;
+    HRESULT                  ddRVal;
+    LPDDHALVPORTCB_GETLINE   GetVideoPortLine;
+} DDHAL_GETVPORTLINEDATA;
+
+typedef struct _DDHAL_DESTROYVPORTDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL      lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL     lpVideoPort;
+    HRESULT                      ddRVal;
+    LPDDHALVPORTCB_DESTROYVPORT  DestroyVideoPort;
+} DDHAL_DESTROYVPORTDATA;
+
+typedef struct _DDHAL_GETVPORTFLIPSTATUSDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL       lpDD;
+    FLATPTR                       fpSurface;
+    HRESULT                       ddRVal;
+    LPDDHALVPORTCB_GETFLIPSTATUS  GetVideoPortFlipStatus;
+} DDHAL_GETVPORTFLIPSTATUSDATA;
+
+typedef struct _DDHAL_UPDATEVPORTDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL   lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL  lpVideoPort;
+    LPDDRAWI_DDRAWSURFACE_INT *lplpDDSurface;
+    LPDDRAWI_DDRAWSURFACE_INT *lplpDDVBISurface;
+    LPDDVIDEOPORTINFO         lpVideoInfo;
+    DWORD                     dwFlags;
+    DWORD                     dwNumAutoflip;
+    DWORD                     dwNumVBIAutoflip;
+    HRESULT                   ddRVal;
+    LPDDHALVPORTCB_UPDATE     UpdateVideoPort;
+} DDHAL_UPDATEVPORTDATA;
+
+typedef struct _DDHAL_WAITFORVPORTSYNCDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL    lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL   lpVideoPort;
+    DWORD                      dwFlags;
+    DWORD                      dwLine;
+    DWORD                      dwTimeOut;
+    HRESULT                    ddRVal;
+    LPDDHALVPORTCB_WAITFORSYNC WaitForVideoPortSync;
+} DDHAL_WAITFORVPORTSYNCDATA;
+
+typedef struct _DDHAL_GETVPORTSIGNALDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL         lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL        lpVideoPort;
+    DWORD                           dwStatus;
+    HRESULT                         ddRVal;
+    LPDDHALVPORTCB_GETSIGNALSTATUS  GetVideoSignalStatus;
+} DDHAL_GETVPORTSIGNALDATA;
+
+typedef struct _DDHAL_VPORTCOLORDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL     lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL    lpVideoPort;
+    DWORD                       dwFlags;
+    LPDDCOLORCONTROL            lpColorData;
+    HRESULT                     ddRVal;
+    LPDDHALVPORTCB_COLORCONTROL ColorControl;
+} DDHAL_VPORTCOLORDATA;
+
+typedef struct _DDHAL_FLIPVPORTDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL   lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL  lpVideoPort;
+    LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr;
+    LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg;
+    HRESULT                   ddRVal;
+    LPDDHALVPORTCB_FLIP       FlipVideoPort;
+} DDHAL_FLIPVPORTDATA;
+
+typedef struct _DDHAL_GETVPORTCONNECTDATA
+{
+    LPDDRAWI_DIRECTDRAW_LCL          lpDD;
+    DWORD                            dwPortId;
+    LPDDVIDEOPORTCONNECT             lpConnect;
+    DWORD                            dwNumEntries;
+    HRESULT                          ddRVal;
+    LPDDHALVPORTCB_GETVPORTCONNECT   GetVideoPortConnectInfo;
+} DDHAL_GETVPORTCONNECTDATA;
+
+typedef struct _DDHAL_SYNCSURFACEDATA
+{
+    DWORD                     dwSize;
+    LPDDRAWI_DIRECTDRAW_LCL   lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
+    DWORD                     dwSurfaceOffset;
+    ULONG_PTR                 fpLockPtr;
+    LONG                      lPitch;
+    DWORD                     dwOverlayOffset;
+    DWORD                     dwOverlaySrcWidth;
+    DWORD                     dwOverlaySrcHeight;
+    DWORD                     dwOverlayDestWidth;
+    DWORD                     dwOverlayDestHeight;
+    ULONG_PTR                 dwDriverReserved1;
+    ULONG_PTR                 dwDriverReserved2;
+    ULONG_PTR                 dwDriverReserved3;
+    HRESULT                   ddRVal;
+} DDHAL_SYNCSURFACEDATA;
+
+typedef struct _DDHAL_SYNCVIDEOPORTDATA
+{
+    DWORD                    dwSize;
+    LPDDRAWI_DIRECTDRAW_LCL  lpDD;
+    LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort;
+    DWORD                    dwOriginOffset;
+    DWORD                    dwHeight;
+    DWORD                    dwVBIHeight;
+    ULONG_PTR                dwDriverReserved1;
+    ULONG_PTR                dwDriverReserved2;
+    ULONG_PTR                dwDriverReserved3;
+    HRESULT                  ddRVal;
+} DDHAL_SYNCVIDEOPORTDATA;
+
+typedef struct _DDHAL_DESTROYDDLOCALDATA
+{
+    DWORD                    dwFlags;
+    LPDDRAWI_DIRECTDRAW_LCL  pDDLcl;
+    HRESULT                  ddRVal;
+} DDHAL_DESTROYDDLOCALDATA;
+
+typedef struct _DDHAL_CREATESURFACEEXDATA {
+    DWORD                      dwFlags;
+    LPDDRAWI_DIRECTDRAW_LCL    lpDDLcl;
+    LPDDRAWI_DDRAWSURFACE_LCL  lpDDSLcl;
+    HRESULT                    ddRVal;
+} DDHAL_CREATESURFACEEXDATA;
+
+typedef struct _DDHAL_GETHEAPALIGNMENTDATA
+{
+    ULONG_PTR                dwInstance;
+    DWORD                    dwHeap;
+    HRESULT                  ddRVal;
+    LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment;
+    HEAPALIGNMENT            Alignment;
+} DDHAL_GETHEAPALIGNMENTDATA;
+
+
+typedef struct _DDMORESURFACECAPS
+{
+    DWORD     dwSize;
+    DDSCAPSEX ddsCapsMore;
+    struct    tagExtendedHeapRestrictions
+    {
+      DDSCAPSEX ddsCapsEx;
+      DDSCAPSEX ddsCapsExAlt;
+    } ddsExtendedHeapRestrictions[1];
+} DDMORESURFACECAPS, * LPDDMORESURFACECAPS;
+
+typedef struct _DDSTEREOMODE
+{
+    DWORD dwSize;
+    DWORD dwHeight;
+    DWORD dwWidth;
+    DWORD dwBpp;
+    DWORD dwRefreshRate;
+    BOOL bSupported;
+
+} DDSTEREOMODE, * LPDDSTEREOMODE;
 
 /*****************************************************************************
  * high-level ddraw implementation structures
  */
-typedef DWORD IUnknown; /* FIXME: implement proper definition */
 typedef struct _IUNKNOWN_LIST {
     struct _IUNKNOWN_LIST *    lpLink;
     LPGUID                     lpGuid;
+
+#ifndef _NO_COM
     IUnknown *                 lpIUnknown;
+#else
+       LPVOID              lpIUnknown;
+#endif /* _NO_COM */
 } IUNKNOWN_LIST,*LPIUNKNOWN_LIST;
 
+
 typedef struct _PROCESS_LIST {
     struct _PROCESS_LIST *     lpLink;
     DWORD                      dwProcessId;
@@ -667,6 +1228,7 @@ typedef struct _DDRAWI_DIRECTDRAW_INT {
     DWORD                      dwIntRefCnt;
 } DDRAWI_DIRECTDRAW_INT;
 
+
 typedef struct _DDRAWI_DIRECTDRAW_LCL {
     DWORD                      lpDDMore;
     LPDDRAWI_DIRECTDRAW_GBL    lpGbl;
@@ -674,7 +1236,11 @@ typedef struct _DDRAWI_DIRECTDRAW_LCL {
     DWORD                      dwLocalFlags;
     DWORD                      dwLocalRefCnt;
     DWORD                      dwProcessId;
+#ifndef _NO_COM
     IUnknown *                 pUnkOuter;
+#else
+    PVOID                      pUnkOuter;
+#endif
     DWORD                      dwObsolete1;
     ULONG_PTR                  hWnd;
     ULONG_PTR                  hDC;
@@ -684,7 +1250,11 @@ typedef struct _DDRAWI_DIRECTDRAW_LCL {
     DWORD                      dwPreferredMode;
     /* DirectX 2 */
     HINSTANCE                  hD3DInstance;
+#ifndef _NO_COM
     IUnknown *                 pD3DIUnknown;
+#else
+           PVOID                       pD3DIUnknown;
+#endif
     LPDDHAL_CALLBACKS          lpDDCB;
     ULONG_PTR                  hDDVxd;
     /* DirectX 5.0 */
@@ -700,6 +1270,7 @@ typedef struct _DDRAWI_DIRECTDRAW_LCL {
     LPDDGAMMACALIBRATORPROC    lpGammaCalibrator;
 } DDRAWI_DIRECTDRAW_LCL;
 
+
 #define DDRAWILCL_HASEXCLUSIVEMODE     0x00000001
 #define DDRAWILCL_ISFULLSCREEN         0x00000002
 #define DDRAWILCL_SETCOOPCALLED                0x00000004
@@ -715,11 +1286,14 @@ typedef struct _DDRAWI_DIRECTDRAW_LCL {
 #define DDRAWILCL_CURSORCLIPPED                0x00001000
 #define DDRAWILCL_EXPLICITMONITOR      0x00002000
 #define DDRAWILCL_MULTITHREADED                0x00004000
-#define DDRAWILCL_FPUSETUP             0x00008000
+#define DDRAWILCL_FPUSETUP                 0x00008000
 #define DDRAWILCL_POWEREDDOWN          0x00010000
 #define DDRAWILCL_DIRECTDRAW7          0x00020000
 #define DDRAWILCL_ATTEMPTEDD3DCONTEXT  0x00040000
 #define DDRAWILCL_FPUPRESERVE          0x00080000
+#define DDRAWILCL_DX8DRIVER         0x00100000
+#define DDRAWILCL_DIRECTDRAW8       0x00200000
+
 
 typedef struct _DDRAWI_DIRECTDRAW_GBL {
     DWORD                      dwRefCnt;
@@ -798,15 +1372,37 @@ typedef struct _DDRAWI_DIRECTDRAW_GBL {
     DDSCAPSEX                  ddsCapsMore;
 } DDRAWI_DIRECTDRAW_GBL;
 
-#define DDRAWI_VIRTUALDESKTOP  0x00000008
-#define DDRAWI_MODEX           0x00000010
-#define DDRAWI_DISPLAYDRV      0x00000020
-#define DDRAWI_FULLSCREEN      0x00000040
-#define DDRAWI_MODECHANGED     0x00000080
-#define DDRAWI_NOHARDWARE      0x00000100
-#define DDRAWI_PALETTEINIT     0x00000200
-#define DDRAWI_NOEMULATION     0x00000400
-/* more... */
+#define DDRAWI_xxxxxxxxx1              0x00000001
+#define DDRAWI_xxxxxxxxx2              0x00000002
+#define DDRAWI_VIRTUALDESKTOP          0x00000008
+#define DDRAWI_MODEX                   0x00000010
+#define DDRAWI_DISPLAYDRV              0x00000020
+#define DDRAWI_FULLSCREEN              0x00000040
+#define DDRAWI_MODECHANGED             0x00000080
+#define DDRAWI_NOHARDWARE              0x00000100
+#define DDRAWI_PALETTEINIT             0x00000200
+#define DDRAWI_NOEMULATION             0x00000400
+#define DDRAWI_HASCKEYDESTOVERLAY      0x00000800
+#define DDRAWI_HASCKEYSRCOVERLAY       0x00001000
+#define DDRAWI_HASGDIPALETTE           0x00002000
+#define DDRAWI_EMULATIONINITIALIZED    0x00004000
+#define DDRAWI_HASGDIPALETTE_EXCLUSIVE 0x00008000
+#define DDRAWI_MODEXILLEGAL            0x00010000
+#define DDRAWI_FLIPPEDTOGDI            0x00020000
+#define DDRAWI_NEEDSWIN16FORVRAMLOCK   0x00040000
+#define DDRAWI_PDEVICEVRAMBITCLEARED   0x00080000
+#define DDRAWI_STANDARDVGA             0x00100000
+#define DDRAWI_EXTENDEDALIGNMENT       0x00200000
+#define DDRAWI_CHANGINGMODE            0x00400000
+#define DDRAWI_GDIDRV                  0x00800000
+#define DDRAWI_ATTACHEDTODESKTOP       0x01000000
+#define DDRAWI_UMODELOADED             0x02000000
+#define DDRAWI_DDRAWDATANOTFETCHED     0x04000000
+#define DDRAWI_SECONDARYDRIVERLOADED   0x08000000
+#define DDRAWI_TESTINGMODES            0x10000000
+#define DDRAWI_DRIVERINFO2             0x20000000
+#define DDRAWI_BADPDEV                 0x40000000
+
 
 /* surfaces */
 typedef struct _DDRAWI_DDRAWSURFACE_INT {
@@ -821,54 +1417,58 @@ typedef struct _DDRAWI_DDRAWSURFACE_GBL {
     DWORD                      dwGlobalFlags;
     union {
        LPACCESSRECTLIST        lpRectList;
-       DWORD                   dwBlockSizeY;
-    } DUMMYUNIONNAME1;
+       DWORD                       dwBlockSizeY;
+       LONG                lSlicePitch;
+    };
     union {
        LPVMEMHEAP              lpVidMemHeap;
        DWORD                   dwBlockSizeX;
-    } DUMMYUNIONNAME2;
+    };
     union {
        LPDDRAWI_DIRECTDRAW_GBL lpDD;
        LPVOID                  lpDDHandle;
-    } DUMMYUNIONNAME3;
+    };
     FLATPTR                    fpVidMem;
     union {
        LONG                    lPitch;
        DWORD                   dwLinearSize;
-    } DUMMYUNIONNAME4;
+    };
     WORD                       wHeight;
     WORD                       wWidth;
     DWORD                      dwUsageCount;
-    ULONG_PTR                  dwReserved1; /* for display driver use */
-    /* optional (defaults to primary surface pixelformat) */
+    ULONG_PTR                  dwReserved1;
     DDPIXELFORMAT              ddpfSurface;
 } DDRAWI_DDRAWSURFACE_GBL;
 
-#define DDRAWISURFGBL_MEMFREE                  0x00000001
-#define DDRAWISURFGBL_SYSMEMREQUESTED          0x00000002
-#define DDRAWISURFGBL_ISGDISURFACE             0x00000004
-#define DDRAWISURFGBL_SOFTWAREAUTOFLIP         0x00000008
-#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK  0x00000010
-#define DDRAWISURFGBL_LOCKVRAMSTYLE            0x00000020
-#define DDRAWISURFGBL_LOCKBROKEN               0x00000040
-#define DDRAWISURFGBL_IMPLICITHANDLE           0x00000080
-#define DDRAWISURFGBL_ISCLIENTMEM              0x00000100
-#define DDRAWISURFGBL_HARDWAREOPSOURCE         0x00000200
-#define DDRAWISURFGBL_HARDWAREOPDEST           0x00000400
-#define DDRAWISURFGBL_HARDWAREOPSTARTED                0x00000600
-#define DDRAWISURFGBL_VPORTINTERLEAVED         0x00000800
-#define DDRAWISURFGBL_VPORTDATA                        0x00001000
-#define DDRAWISURFGBL_LATEALLOCATELINEAR       0x00002000
-#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER      0x00004000
-#define DDRAWISURFGBL_FASTLOCKHELD             0x00008000
-#define DDRAWISURFGBL_READONLYLOCKHELD         0x00010000
+#define DDRAWISURFGBL_MEMFREE                    0x00000001L
+#define DDRAWISURFGBL_SYSMEMREQUESTED            0x00000002L
+#define DDRAWISURFGBL_ISGDISURFACE               0x00000004L
+#define DDRAWISURFGBL_SOFTWAREAUTOFLIP           0x00000008L
+#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK    0x00000010L
+#define DDRAWISURFGBL_LOCKVRAMSTYLE              0x00000020L
+#define DDRAWISURFGBL_LOCKBROKEN                 0x00000040L
+#define DDRAWISURFGBL_IMPLICITHANDLE             0x00000080L
+#define DDRAWISURFGBL_ISCLIENTMEM                0x00000100L
+#define DDRAWISURFGBL_HARDWAREOPSOURCE           0x00000200L
+#define DDRAWISURFGBL_HARDWAREOPDEST             0x00000400L
+#define DDRAWISURFGBL_HARDWAREOPSTARTED (DDRAWISURFGBL_HARDWAREOPSOURCE|DDRAWISURFGBL_HARDWAREOPDEST)
+#define DDRAWISURFGBL_VPORTINTERLEAVED           0x00000800L
+#define DDRAWISURFGBL_VPORTDATA                  0x00001000L
+#define DDRAWISURFGBL_LATEALLOCATELINEAR         0x00002000L
+#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER        0x00004000L
+#define DDRAWISURFGBL_FASTLOCKHELD               0x00008000L
+#define DDRAWISURFGBL_READONLYLOCKHELD           0x00010000L
+#define DDRAWISURFGBL_DX8SURFACE                 0x00080000L
+#define DDRAWISURFGBL_DDHELDONTFREE              0x00100000L
+#define DDRAWISURFGBL_NOTIFYWHENUNLOCKED         0x00200000L
+#define DDRAWISURFGBL_RESERVED0                  0x80000000L // Reserved flag
 
 typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {
     DWORD                      dwSize;
     union {
        DWORD                   dwPhysicalPageTable;
        FLATPTR                 fpPhysicalVidMem;
-    } DUMMYUNIONNAME1;
+    };
     LPDWORD                    pPageTable;
     DWORD                      cPages;
     ULONG_PTR                  dwSavedDCContext;
@@ -894,6 +1494,24 @@ typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {
 #define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \
     (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1))
 
+#define SURFACE_PHYSICALVIDMEM( psurf_gbl ) \
+                  ( GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl )->fpPhysicalVidMem )
+
+
+typedef struct  _DISPLAYMODEINFO
+{
+    WORD       wWidth;
+    WORD       wHeight;
+    BYTE       wBPP;
+    BYTE       wMonitorsAttachedToDesktop;
+    WORD       wRefreshRate;
+} DISPLAYMODEINFO, *LPDISPLAYMODEINFO;
+
+#define EQUAL_DISPLAYMODE ( A, B ) (0 == memcmp(&(A), &(B), sizeof (DISPLAYMODEINFO)))
+
+
+
+
 typedef struct _DDRAWI_DDRAWSURFACE_MORE {
     DWORD                      dwSize;
     IUNKNOWN_LIST *            lpIUnknowns;
@@ -919,6 +1537,9 @@ typedef struct _DDRAWI_DDRAWSURFACE_MORE {
     LPDWORD                    lpGammaRamp;
     LPDWORD                    lpOriginalGammaRamp;
     LPVOID                     lpDDrawReserved6;
+       #ifndef WIN95
+    DISPLAYMODEINFO dmiDDrawReserved7;
+    #endif
     DWORD                      dwSurfaceHandle;
     DWORD                      qwDDrawReserved8[2];
     LPVOID                     lpDDrawReserved9;
@@ -929,6 +1550,8 @@ typedef struct _DDRAWI_DDRAWSURFACE_MORE {
     LPVOID                     lpVB;
 } DDRAWI_DDRAWSURFACE_MORE;
 
+
+
 typedef struct _DDRAWI_DDRAWSURFACE_LCL {
     LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore;
     LPDDRAWI_DDRAWSURFACE_GBL  lpGbl;
@@ -939,15 +1562,22 @@ typedef struct _DDRAWI_DDRAWSURFACE_LCL {
     DWORD                      dwProcessId;
     DWORD                      dwFlags;
     DDSCAPS                    ddsCaps;
+       union
+    {
     LPDDRAWI_DDRAWPALETTE_INT  lpDDPalette;
-    LPDDRAWI_DDRAWCLIPPER_LCL  lpDDClipper;
+       LPDDRAWI_DDRAWPALETTE_INT   lp16DDPalette;
+       };
+       union
+    {
+    LPDDRAWI_DDRAWCLIPPER_LCL   lpDDClipper;
+    LPDDRAWI_DDRAWCLIPPER_INT   lp16DDClipper;
+    };
     DWORD                      dwModeCreatedIn;
     DWORD                      dwBackBufferCount;
     DDCOLORKEY                 ddckCKDestBlt;
     DDCOLORKEY                 ddckCKSrcBlt;
     ULONG_PTR                  hDC;
-    ULONG_PTR                  dwReserved1; /* for display driver use */
-    /* overlays only */
+    ULONG_PTR                  dwReserved1;
     DDCOLORKEY                 ddckCKSrcOverlay;
     DDCOLORKEY                 ddckCKDestOverlay;
     LPDDRAWI_DDRAWSURFACE_INT  lpSurfaceOverlaying;
@@ -960,24 +1590,40 @@ typedef struct _DDRAWI_DDRAWSURFACE_LCL {
     LONG                       lOverlayY;
 } DDRAWI_DDRAWSURFACE_LCL;
 
-#define DDRAWISURF_ATTACHED            0x00000001
-#define DDRAWISURF_IMPLICITCREATE      0x00000002
-#define DDRAWISURF_ISFREE              0x00000004
-#define DDRAWISURF_ATTACHED_FROM       0x00000008
-#define DDRAWISURF_IMPLICITROOT                0x00000010
-#define DDRAWISURF_PARTOFPRIMARYCHAIN  0x00000020
-#define DDRAWISURF_DATAISALIASED       0x00000040
-#define DDRAWISURF_HASDC               0x00000080
-#define DDRAWISURF_HASCKEYDESTOVERLAY  0x00000100
-#define DDRAWISURF_HASCKEYDESTBLT      0x00000200
-#define DDRAWISURF_HASCKEYSRCOVERLAY   0x00000400
-#define DDRAWISURF_HASCKEYSRCBLT       0x00000800
-#define DDRAWISURF_LOCKEXCLUDEDCURSOR  0x00001000
-#define DDRAWISURF_HASPIXELFORMAT      0x00002000
-#define DDRAWISURF_HASOVERLAYDATA      0x00004000
-#define DDRAWISURF_SETGAMMA            0x00008000
-/* more... */
-#define DDRAWISURF_INVALID             0x10000000
+#define DDRAWISURF_ATTACHED            0x00000001L
+#define DDRAWISURF_IMPLICITCREATE      0x00000002L
+#define DDRAWISURF_ISFREE      0x00000004L
+#define DDRAWISURF_ATTACHED_FROM       0x00000008L
+#define DDRAWISURF_IMPLICITROOT                0x00000010L
+#define DDRAWISURF_PARTOFPRIMARYCHAIN  0x00000020L
+#define DDRAWISURF_DATAISALIASED       0x00000040L
+#define DDRAWISURF_HASDC       0x00000080L
+#define DDRAWISURF_HASCKEYDESTOVERLAY  0x00000100L
+#define DDRAWISURF_HASCKEYDESTBLT      0x00000200L
+#define DDRAWISURF_HASCKEYSRCOVERLAY   0x00000400L
+#define DDRAWISURF_HASCKEYSRCBLT       0x00000800L
+#define DDRAWISURF_LOCKEXCLUDEDCURSOR  0x00001000L
+#define DDRAWISURF_HASPIXELFORMAT      0x00002000L
+#define DDRAWISURF_HASOVERLAYDATA      0x00004000L
+#define DDRAWISURF_SETGAMMA            0x00008000L
+#define DDRAWISURF_SW_CKEYDESTOVERLAY  0x00010000L
+#define DDRAWISURF_SW_CKEYDESTBLT      0x00020000L
+#define DDRAWISURF_SW_CKEYSRCOVERLAY   0x00040000L
+#define DDRAWISURF_SW_CKEYSRCBLT       0x00080000L
+#define DDRAWISURF_HW_CKEYDESTOVERLAY  0x00100000L
+#define DDRAWISURF_HW_CKEYDESTBLT      0x00200000L
+#define DDRAWISURF_HW_CKEYSRCOVERLAY   0x00400000L
+#define DDRAWISURF_HW_CKEYSRCBLT       0x00800000L
+#define DDRAWISURF_INMASTERSPRITELIST  0x01000000L
+#define DDRAWISURF_HELCB       0x02000000L
+#define DDRAWISURF_FRONTBUFFER 0x04000000L
+#define DDRAWISURF_BACKBUFFER  0x08000000L
+#define DDRAWISURF_INVALID     0x10000000L
+#define DDRAWISURF_DCIBUSY     0x20000000L
+#define DDRAWISURF_GETDCNULL   0x40000000L
+#define DDRAWISURF_STEREOSURFACELEFT   0x20000000L
+#define DDRAWISURF_DRIVERMANAGED       0x40000000L
+#define DDRAWISURF_DCILOCK     0x80000000L
 
 /* palettes */
 typedef struct _DDRAWI_DDRAWPALETTE_INT {
@@ -994,15 +1640,12 @@ typedef struct _DDRAWI_DDRAWPALETTE_GBL {
     DWORD                      dwProcessId;
     LPPALETTEENTRY             lpColorTable;
     union {
-       ULONG_PTR               dwReserved1; /* for display driver use */
+       ULONG_PTR               dwReserved1;
        HPALETTE                hHELGDIPalette;
-    } DUMMYUNIONNAME1;
-    /* DirectX 5.0 */
+    };
     DWORD                      dwDriverReserved;
     DWORD                      dwContentsStamp;
-    /* DirectX 6.0 */
     DWORD                      dwSaveStamp;
-    /* DirectX 7.0 */
     DWORD                      dwHandle;
 } DDRAWI_DDRAWPALETTE_GBL;
 
@@ -1021,12 +1664,86 @@ typedef struct _DDRAWI_DDRAWPALETTE_GBL {
 #define DDRAWIPAL_STORED_8INDEX        0x00001000
 #define DDRAWIPAL_ALPHA                0x00002000
 
+#define D3DFORMAT_OP_TEXTURE         0x00000001L
+#define D3DFORMAT_OP_VOLUMETEXTURE   0x00000002L
+#define D3DFORMAT_OP_CUBETEXTURE     0x00000004L
+#define D3DFORMAT_OP_OFFSCREEN_RENDERTARGET  0x00000008L
+#define D3DFORMAT_OP_SAME_FORMAT_RENDERTARGET 0x00000010L
+#define D3DFORMAT_OP_ZSTENCIL        0x00000040L
+#define D3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH 0x00000080L
+#define D3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET 0x00000100L
+#define D3DFORMAT_OP_DISPLAYMODE     0x00000400L
+#define D3DFORMAT_OP_3DACCELERATION  0x00000800L
+#define D3DFORMAT_OP_PIXELSIZE       0x00001000L
+#define D3DFORMAT_OP_CONVERT_TO_ARGB 0x00002000L
+#define D3DFORMAT_OP_OFFSCREENPLAIN  0x00004000L
+#define D3DFORMAT_OP_SRGBREAD        0x00008000L
+#define D3DFORMAT_OP_BUMPMAP         0x00010000L
+#define D3DFORMAT_OP_NOFILTER        0x00040000L
+#define DDPF_D3DFORMAT               0x00200000l
+#define DDPF_NOVEL_TEXTURE_FORMAT    0x00100000l
+#define D3DFORMAT_MEMBEROFGROUP_ARGB 0x00080000L
+#define D3DFORMAT_OP_SRGBWRITE       0x00100000L
+#define D3DFORMAT_OP_NOALPHABLEND    0x00200000L
+#define D3DFORMAT_OP_AUTOGENMIPMAP   0x00400000L
+#define D3DFORMAT_OP_VERTEXTEXTURE   0x00800000L
+#define D3DFORMAT_OP_NOTEXCOORDWRAPNORMIP 0x01000000L
+#define DELETED_OK                   0
+#define DELETED_LASTONE              1
+#define DELETED_NOTFOUND             2
+#define DDCALLBACKSSIZE_V1           ( offsetof( DDHAL_DDCALLBACKS, SetExclusiveMode ) )
+#define DDCALLBACKSSIZE               sizeof( DDHAL_DDCALLBACKS )
+#define DDRAWICLIP_WATCHWINDOW        0x00000001
+#define DDRAWICLIP_ISINITIALIZED      0x00000002
+#define DDRAWICLIP_INMASTERSPRITELIST 0x00000004
+#define PFINDEX_UNINITIALIZED         (0UL)
+#define PFINDEX_UNSUPPORTED           (~0UL)
+#ifndef __DD_INCLUDED__
+#define ROP_HAS_SOURCE                0x00000001
+#define ROP_HAS_PATTERN               0x00000002
+#define ROP_HAS_SOURCEPATTERN         ROP_HAS_PATTERN | ROP_HAS_SOURCE
+#endif
+#define DDRAWIVPORT_ON                0x00000001
+#define DDRAWIVPORT_SOFTWARE_AUTOFLIP 0x00000002
+#define DDRAWIVPORT_COLORKEYANDINTERP 0x00000004
+#define DDRAWIVPORT_NOKERNELHANDLES   0x00000008
+#define DDRAWIVPORT_SOFTWARE_BOB      0x00000010
+#define DDRAWIVPORT_VBION             0x00000020
+#define DDRAWIVPORT_VIDEOON           0x00000040
+#define DDRAWI_GETCOLOR               0x0001
+#define DDRAWI_SETCOLOR               0x0002
+#define DDMCQUERY_READ                0x00000001
+#define DDWAITVB_I_TESTVB             0x80000006
+
+
+#define DDBLT_ANYALPHA \
+        (DDBLT_ALPHASRCSURFACEOVERRIDE | DDBLT_ALPHASRCCONSTOVERRIDE | \
+        DDBLT_ALPHASRC | DDBLT_ALPHADESTSURFACEOVERRIDE | \
+        DDBLT_ALPHADESTCONSTOVERRIDE | DDBLT_ALPHADEST)
+
+#define DDHAL_ALIGNVALIDCAPS  (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_EXECUTEBUFFER | \
+                               DDSCAPS_OVERLAY | DDSCAPS_TEXTURE | \
+                               DDSCAPS_ZBUFFER | DDSCAPS_ALPHA | DDSCAPS_FLIP )
+
+
+#define DDHALINFOSIZE_V2 sizeof(DDHALINFO)
+
+#define DDOVER_ANYALPHA \
+           (DDOVER_ALPHASRCSURFACEOVERRIDE | DDOVER_ALPHASRCCONSTOVERRIDE | \
+            DDOVER_ALPHASRC | DDOVER_ALPHADESTSURFACEOVERRIDE | \
+            DDOVER_ALPHADESTCONSTOVERRIDE | DDOVER_ALPHADEST)
+
+
 typedef struct _DDRAWI_DDRAWPALETTE_LCL {
     DWORD                      lpPalMore;
     LPDDRAWI_DDRAWPALETTE_GBL  lpGbl;
     ULONG_PTR                  dwUnused0;
     DWORD                      dwLocalRefCnt;
+#ifndef _NO_COM
     IUnknown *                 pUnkOuter;
+#else
+    PVOID               pUnkOuter;
+#endif
     LPDDRAWI_DIRECTDRAW_LCL    lpDD_lcl;
     ULONG_PTR                  dwReserved1;
     /* DirectX 6.0 */
@@ -1035,48 +1752,25 @@ typedef struct _DDRAWI_DDRAWPALETTE_LCL {
     ULONG_PTR                  dwDDRAWReserved3;
 } DDRAWI_DDRAWPALETTE_LCL;
 
-typedef struct _DDHAL_GETMOCOMPGUIDSDATA FAR *LPDDHAL_GETMOCOMPGUIDSDATA;
-typedef struct _DDHAL_GETMOCOMPFORMATSDATA FAR *LPDDHAL_GETMOCOMPFORMATSDATA;
-typedef struct _DDHAL_CREATEMOCOMPDATA FAR *LPDDHAL_CREATEMOCOMPDATA;
-typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA FAR *LPDDHAL_GETMOCOMPCOMPBUFFDATA;
-typedef struct _DDHAL_GETINTERNALMOCOMPDATA FAR *LPDDHAL_GETINTERNALMOCOMPDATA;
-typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA FAR *LPDDHAL_BEGINMOCOMPFRAMEDATA;
-typedef struct _DDHAL_ENDMOCOMPFRAMEDATA FAR *LPDDHAL_ENDMOCOMPFRAMEDATA;
-typedef struct _DDHAL_RENDERMOCOMPDATA FAR *LPDDHAL_RENDERMOCOMPDATA;
-typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA FAR *LPDDHAL_QUERYMOCOMPSTATUSDATA;
-typedef struct _DDHAL_DESTROYMOCOMPDATA FAR *LPDDHAL_DESTROYMOCOMPDATA;
-typedef struct _DDHAL_COLORCONTROLDATA FAR *LPDDHAL_COLORCONTROLDATA;
-
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETGUIDS)( LPDDHAL_GETMOCOMPGUIDSDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETFORMATS)( LPDDHAL_GETMOCOMPFORMATSDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_CREATE)( LPDDHAL_CREATEMOCOMPDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETCOMPBUFFINFO)( LPDDHAL_GETMOCOMPCOMPBUFFDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETINTERNALINFO)( LPDDHAL_GETINTERNALMOCOMPDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_BEGINFRAME)( LPDDHAL_BEGINMOCOMPFRAMEDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_ENDFRAME)( LPDDHAL_ENDMOCOMPFRAMEDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_RENDER)( LPDDHAL_RENDERMOCOMPDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_QUERYSTATUS)( LPDDHAL_QUERYMOCOMPSTATUSDATA);
-typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_DESTROY)( LPDDHAL_DESTROYMOCOMPDATA);
-typedef DWORD (FAR PASCAL *LPDDHALCOLORCB_COLORCONTROL)(LPDDHAL_COLORCONTROLDATA);
 
 typedef struct _DDMCCOMPBUFFERINFO
 {
-    DWORD                       dwSize;             // [in]   size of the struct
-    DWORD                       dwNumCompBuffers;   // [out]  number of buffers required for compressed data
-    DWORD                       dwWidthToCreate;    // [out]    Width of surface to create
-    DWORD                       dwHeightToCreate;   // [out]    Height of surface to create
-    DWORD                       dwBytesToAllocate;  // [out]    Total number of bytes used by each surface
-    DDSCAPS2                    ddCompCaps;         // [out]    caps to create surfaces to store compressed data
-    DDPIXELFORMAT               ddPixelFormat;      // [out]  format to create surfaces to store compressed data
+    DWORD                       dwSize;
+    DWORD                       dwNumCompBuffers;
+    DWORD                       dwWidthToCreate;
+    DWORD                       dwHeightToCreate;
+    DWORD                       dwBytesToAllocate;
+    DDSCAPS2                    ddCompCaps;
+    DDPIXELFORMAT               ddPixelFormat;
 } DDMCCOMPBUFFERINFO, *LPDDMCCOMPBUFFERINFO;
 
 typedef struct _DDMCBUFFERINFO
 {
-    DWORD                       dwSize;         // [in]    size of the struct
-    LPDDRAWI_DDRAWSURFACE_LCL   lpCompSurface;  // [in]    pointer to buffer containing compressed data
-    DWORD                       dwDataOffset;   // [in]    offset of relevant data from the beginning of buffer
-    DWORD                       dwDataSize;     // [in]    size of relevant data
-    LPVOID                      lpPrivate;      // Reserved for DirectDraw;
+    DWORD                       dwSize;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpCompSurface;
+    DWORD                       dwDataOffset;
+    DWORD                       dwDataSize;
+    LPVOID                      lpPrivate;
 } DDMCBUFFERINFO, *LPDDMCBUFFERINFO;
 
 typedef struct _DDHAL_GETDRIVERSTATEDATA {
@@ -1099,27 +1793,29 @@ typedef struct _DDHAL_ADDATTACHEDSURFACEDATA
     LPDDHALSURFCB_ADDATTACHEDSURFACE    AddAttachedSurface;
 } DDHAL_ADDATTACHEDSURFACEDATA;
 
+
+
 typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA
 {
     LPDDRAWI_DIRECTDRAW_LCL     lpDD;
     LPDDRAWI_DDMOTIONCOMP_LCL   lpMoComp;
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDestSurface;        // [in]  destination buffer in which to decoding this frame
-    DWORD                       dwInputDataSize;      // [in]  size of other misc input data to begin frame
-    LPVOID                      lpInputData;          // [in]  pointer to misc input data
-    DWORD                       dwOutputDataSize;     // [in]  size of other misc output data to begin frame
-    LPVOID                      lpOutputData;         // [in]  pointer to output misc data (allocated by client)
-    HRESULT                     ddRVal;               // [out]
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDestSurface;
+       DWORD                       dwInputDataSize;
+    LPVOID                      lpInputData;
+    DWORD                       dwOutputDataSize;
+    LPVOID                      lpOutputData;
+    HRESULT                     ddRVal;
     LPDDHALMOCOMPCB_BEGINFRAME  BeginMoCompFrame;
 } DDHAL_BEGINMOCOMPFRAMEDATA;
 
 typedef struct _DDHAL_COLORCONTROLDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;       // driver struct
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSurface;    // surface
-    LPDDCOLORCONTROL            lpColorData;    // color control information
-    DWORD                       dwFlags;    // DDRAWI_GETCOLOR/DDRAWI_SETCOLOR
-    HRESULT                     ddRVal;     // return value
-    LPDDHALCOLORCB_COLORCONTROL ColorControl;   // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSurface;
+    LPDDCOLORCONTROL            lpColorData;
+    DWORD                       dwFlags;
+    HRESULT                     ddRVal;
+    LPDDHALCOLORCB_COLORCONTROL ColorControl;
 } DDHAL_COLORCONTROLDATA;
 
 typedef struct _DDHAL_CREATEMOCOMPDATA
@@ -1156,66 +1852,66 @@ typedef struct _DDHAL_ENDMOCOMPFRAMEDATA
 
 typedef struct _DDHAL_FLIPTOGDISURFACEDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;         // driver struct
-    DWORD                       dwToGDI;          // TRUE if flipping to the GDI surface, FALSE if flipping away
-    DWORD                       dwReserved;       // reserved for future use
-    HRESULT            ddRVal;       // return value
-    LPDDHAL_FLIPTOGDISURFACE    FlipToGDISurface; // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    DWORD                       dwToGDI;
+    DWORD                       dwReserved;
+    HRESULT            ddRVal;
+    LPDDHAL_FLIPTOGDISURFACE    FlipToGDISurface;
 } DDHAL_FLIPTOGDISURFACEDATA;
 
 typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL lpDD;        // driver struct
-    DDSCAPS                 DDSCaps;     // caps for type of surface memory
-    DWORD                   dwTotal;     // total memory for this kind of surface
-    DWORD                   dwFree;      // free memory for this kind of surface
-    HRESULT                 ddRVal;      // return value
-    LPDDHAL_GETAVAILDRIVERMEMORY   GetAvailDriverMemory; // PRIVATE: ptr to callback
-    DDSCAPSEX               ddsCapsEx;       // Added in V6. Driver should check DDVERSION info
-                                                 // to see if this field is present.
+    LPDDRAWI_DIRECTDRAW_GBL lpDD;
+    DDSCAPS                 DDSCaps;
+    DWORD                   dwTotal;
+    DWORD                   dwFree;
+    HRESULT                 ddRVal;
+    LPDDHAL_GETAVAILDRIVERMEMORY   GetAvailDriverMemory;
+    DDSCAPSEX               ddsCapsEx;
+
 } DDHAL_GETAVAILDRIVERMEMORYDATA;
 
 typedef struct _DDHAL_GETBLTSTATUSDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;       // driver struct
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSurface;    // surface struct
-    DWORD                       dwFlags;    // flags
-    HRESULT                     ddRVal;     // return value
-    LPDDHALSURFCB_GETBLTSTATUS  GetBltStatus;   // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSurface;
+    DWORD                       dwFlags;
+    HRESULT                     ddRVal;
+    LPDDHALSURFCB_GETBLTSTATUS  GetBltStatus;
 } DDHAL_GETBLTSTATUSDATA;
 
 typedef struct _DDHAL_GETFLIPSTATUSDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;       // driver struct
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSurface;    // surface struct
-    DWORD                       dwFlags;    // flags
-    HRESULT                     ddRVal;     // return value
-    LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus;  // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSurface;
+    DWORD                       dwFlags;
+    HRESULT                     ddRVal;
+    LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus;
 } DDHAL_GETFLIPSTATUSDATA;
 
 typedef struct _DDHAL_GETINTERNALMOCOMPDATA
 {
     LPDDRAWI_DIRECTDRAW_LCL     lpDD;
     LPGUID                      lpGuid;
-    DWORD                       dwWidth;            // [in]   width of uncompressed data
-    DWORD                       dwHeight;           // [in]   height of uncompressed data
-    DDPIXELFORMAT               ddPixelFormat;      // [in]   pixel-format of uncompressed data
-    DWORD                       dwScratchMemAlloc;  // [out]  amount of scratch memory will the hal allocate for its private use
-    HRESULT                     ddRVal;             // [out]
+    DWORD                       dwWidth;
+    DWORD                       dwHeight;
+    DDPIXELFORMAT               ddPixelFormat;
+    DWORD                       dwScratchMemAlloc;
+    HRESULT                     ddRVal;
     LPDDHALMOCOMPCB_GETINTERNALINFO  GetInternalMoCompInfo;
 } DDHAL_GETINTERNALMOCOMPDATA;
 
 typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA
 {
-    LPDDRAWI_DIRECTDRAW_LCL     lpDD;
-    LPGUID                      lpGuid;
-    DWORD                       dwWidth;            // [in]   width of uncompressed data
-    DWORD                       dwHeight;           // [in]   height of uncompressed data
-    DDPIXELFORMAT               ddPixelFormat;      // [in]   pixel-format of uncompressed data
-    DWORD                       dwNumTypesCompBuffs;// [in/out] number of memory types required for comp buffers
-    LPDDMCCOMPBUFFERINFO        lpCompBuffInfo;     // [in]   driver supplied info regarding comp buffers (allocated by client)
-    HRESULT                     ddRVal;             // [out]
-    LPDDHALMOCOMPCB_GETCOMPBUFFINFO  GetMoCompBuffInfo;
+    LPDDRAWI_DIRECTDRAW_LCL         lpDD;
+    LPGUID                          lpGuid;
+    DWORD                           dwWidth;
+    DWORD                            dwHeight;
+    DDPIXELFORMAT                    ddPixelFormat;
+    DWORD                           dwNumTypesCompBuffs;
+    LPDDMCCOMPBUFFERINFO            lpCompBuffInfo;
+    HRESULT                         ddRVal;
+    LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo;
 } DDHAL_GETMOCOMPCOMPBUFFDATA;
 
 typedef struct _DDHAL_GETMOCOMPGUIDSDATA
@@ -1239,19 +1935,19 @@ typedef struct _DDHAL_GETMOCOMPFORMATSDATA
 
 typedef struct _DDHAL_GETSCANLINEDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;       // driver struct
-    DWORD                       dwScanLine; // returned scan line
-    HRESULT                     ddRVal;     // return value
-    LPDDHAL_GETSCANLINE         GetScanLine;    // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    DWORD                       dwScanLine;
+    HRESULT                     ddRVal;
+    LPDDHAL_GETSCANLINE         GetScanLine;
 } DDHAL_GETSCANLINEDATA;
 
 typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA
 {
     LPDDRAWI_DIRECTDRAW_LCL     lpDD;
     LPDDRAWI_DDMOTIONCOMP_LCL   lpMoComp;
-    LPDDRAWI_DDRAWSURFACE_LCL   lpSurface;      // [in]  Surface being queried
-    DWORD                       dwFlags;        // [in]  DDMCQUERY_XXX falgs
-    HRESULT                     ddRVal;         // [out]
+    LPDDRAWI_DDRAWSURFACE_LCL   lpSurface;
+    DWORD                       dwFlags;
+    HRESULT                     ddRVal;
     LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus;
 } DDHAL_QUERYMOCOMPSTATUSDATA;
 
@@ -1259,74 +1955,254 @@ typedef struct _DDHAL_RENDERMOCOMPDATA
 {
     LPDDRAWI_DIRECTDRAW_LCL     lpDD;
     LPDDRAWI_DDMOTIONCOMP_LCL   lpMoComp;
-    DWORD                       dwNumBuffers;   // [in]  Number of entries in the lpMacroBlockInfo array
-    LPDDMCBUFFERINFO            lpBufferInfo;   // [in]  Surfaces containing macro block info
-    DWORD                       dwFunction;     // [in]  Function
+    DWORD                       dwNumBuffers;
+    LPDDMCBUFFERINFO            lpBufferInfo;
+    DWORD                       dwFunction;
     LPVOID                      lpInputData;
     DWORD                       dwInputDataSize;
     LPVOID                      lpOutputData;
     DWORD                       dwOutputDataSize;
-    HRESULT                     ddRVal;         // [out]
+    HRESULT                     ddRVal;
     LPDDHALMOCOMPCB_RENDER      RenderMoComp;
 } DDHAL_RENDERMOCOMPDATA;
 
 typedef struct _DDHAL_SETCOLORKEYDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;       // driver struct
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSurface;    // surface struct
-    DWORD                       dwFlags;    // flags
-    DDCOLORKEY                  ckNew;      // new color key
-    HRESULT                     ddRVal;     // return value
-    LPDDHALSURFCB_SETCOLORKEY   SetColorKey;    // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSurface;
+    DWORD                       dwFlags;
+    DDCOLORKEY                  ckNew;
+    HRESULT                     ddRVal;
+    LPDDHALSURFCB_SETCOLORKEY   SetColorKey;
 } DDHAL_SETCOLORKEYDATA;
 
 typedef struct _DDHAL_SETOVERLAYPOSITIONDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;       // driver struct
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSrcSurface; // src surface
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDDDestSurface;// dest surface
-    LONG                        lXPos;      // x position
-    LONG                        lYPos;      // y position
-    HRESULT                     ddRVal;     // return value
-    LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSrcSurface;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDDDestSurface;
+    LONG                        lXPos;
+    LONG                        lYPos;
+    HRESULT                     ddRVal;
+    LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition;
 } DDHAL_SETOVERLAYPOSITIONDATA;
 
 typedef struct _DDHAL_UPDATEOVERLAYDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;       // driver struct
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDDDestSurface;// dest surface
-    RECTL                       rDest;      // dest rect
-    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSrcSurface; // src surface
-    RECTL                       rSrc;       // src rect
-    DWORD                       dwFlags;    // flags
-    DDOVERLAYFX                 overlayFX;  // overlay FX
-    HRESULT                     ddRVal;     // return value
-    LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;  // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDDDestSurface;
+    RECTL                       rDest;
+    LPDDRAWI_DDRAWSURFACE_LCL   lpDDSrcSurface;
+    RECTL                       rSrc;
+    DWORD                       dwFlags;
+    DDOVERLAYFX                 overlayFX;
+    HRESULT                     ddRVal;
+    LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;
 } DDHAL_UPDATEOVERLAYDATA;
 
 typedef struct _DDHAL_WAITFORVERTICALBLANKDATA
 {
-    LPDDRAWI_DIRECTDRAW_GBL     lpDD;       // driver struct
-    DWORD                       dwFlags;    // flags
-    DWORD                       bIsInVB;    // is in vertical blank
-    ULONG_PTR                   hEvent;     // event
-    HRESULT                     ddRVal;     // return value
-    LPDDHAL_WAITFORVERTICALBLANK    WaitForVerticalBlank; // PRIVATE: ptr to callback
+    LPDDRAWI_DIRECTDRAW_GBL     lpDD;
+    DWORD                       dwFlags;
+    DWORD                       bIsInVB;
+    ULONG_PTR                   hEvent;
+    HRESULT                     ddRVal;
+    LPDDHAL_WAITFORVERTICALBLANK    WaitForVerticalBlank;
 } DDHAL_WAITFORVERTICALBLANKDATA;
 
-typedef struct _DD_D3DBUFCALLBACKS
+typedef struct _DDHAL_DRVSETCOLORKEYDATA
 {
-    DWORD dwSize;
-    DWORD dwFlags;
-    LPDDHAL_CANCREATESURFACE        CanCreateD3DBuffer;
-       LPDDHAL_CREATESURFACE           CreateD3DBuffer;
-    LPDDHALSURFCB_DESTROYSURFACE   DestroyD3DBuffer;
-       LPDDHALSURFCB_LOCK             LockD3DBuffer;
-    LPDDHALSURFCB_UNLOCK           UnlockD3DBuffer;
-} DD_D3DBUFCALLBACKS, *PDD_D3DBUFCALLBACKS;
+    LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
+    DWORD                dwFlags;
+    DDCOLORKEY           ckNew;
+    HRESULT              ddRVal;
+    LPDDHAL_SETCOLORKEY  SetColorKey;
+} DDHAL_DRVSETCOLORKEYDATA;
+
+typedef struct _DDMONITORINFO
+{
+    WORD    Manufacturer;
+    WORD    Product;
+    DWORD   SerialNumber;
+    GUID    DeviceIdentifier;
+    int     Mode640x480;
+    int     Mode800x600;
+    int     Mode1024x768;
+    int     Mode1280x1024;
+    int     Mode1600x1200;
+    int     ModeReserved1;
+    int     ModeReserved2;
+    int     ModeReserved3;
+} DDMONITORINFO, FAR *LPDDMONITORINFO;
+
+typedef struct _DDRAWI_DDRAWCLIPPER_INT
+{
+    LPVOID                   lpVtbl;
+    LPDDRAWI_DDRAWCLIPPER_LCL lpLcl;
+    LPDDRAWI_DDRAWCLIPPER_INT  lpLink;
+    DWORD                   dwIntRefCnt;
+} DDRAWI_DDRAWCLIPPER_INT;
+
+typedef struct _DDHAL_UPDATENONLOCALHEAPDATA
+{
+    LPDDRAWI_DIRECTDRAW_GBL lpDD;
+    DWORD           dwHeap;
+    FLATPTR         fpGARTLin;
+    FLATPTR         fpGARTDev;
+    ULONG_PTR       ulPolicyMaxBytes;
+    HRESULT         ddRVal;
+    LPDDHAL_UPDATENONLOCALHEAP   UpdateNonLocalHeap;
+} DDHAL_UPDATENONLOCALHEAPDATA;
+
+typedef struct _DDHAL_SETCLIPLISTDATA
+{
+    LPDDRAWI_DIRECTDRAW_GBL    lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL  lpDDSurface;
+    HRESULT                    ddRVal;
+    LPDDHALSURFCB_SETCLIPLIST  SetClipList;
+} DDHAL_SETCLIPLISTDATA;
+
+typedef struct _DDRAWI_DDMOTIONCOMP_LCL
+{
+    LPDDRAWI_DIRECTDRAW_LCL   lpDD;
+    GUID                      guid;
+    DWORD                     dwUncompWidth;
+    DWORD                     dwUncompHeight;
+    DDPIXELFORMAT             ddUncompPixelFormat;
+    DWORD                     dwInternalFlags;
+    DWORD                     dwRefCnt;
+    DWORD                     dwProcessId;
+    HANDLE                    hMoComp;
+    DWORD                     dwDriverReserved1;
+    DWORD                     dwDriverReserved2;
+    DWORD                     dwDriverReserved3;
+    LPVOID                    lpDriverReserved1;
+    LPVOID                    lpDriverReserved2;
+    LPVOID                 lpDriverReserved3;
+} DDRAWI_DDMOTIONCOMP_LCL;
+
+typedef struct _DDRAWI_DDMOTIONCOMP_INT
+{
+    LPVOID                    lpVtbl;
+    LPDDRAWI_DDMOTIONCOMP_LCL lpLcl;
+    LPDDRAWI_DDMOTIONCOMP_INT lpLink;
+    DWORD                     dwIntRefCnt;
+} DDRAWI_DDMOTIONCOMP_INT;
+
+
+typedef struct _DDRAWI_DDVIDEOPORT_LCL
+{
+    LPDDRAWI_DIRECTDRAW_LCL   lpDD;
+    DDVIDEOPORTDESC           ddvpDesc;
+    DDVIDEOPORTINFO           ddvpInfo;
+    LPDDRAWI_DDRAWSURFACE_INT lpSurface;
+    LPDDRAWI_DDRAWSURFACE_INT lpVBISurface;
+    LPDDRAWI_DDRAWSURFACE_INT *lpFlipInts;
+    DWORD                     dwNumAutoflip;
+    DWORD                     dwProcessID;
+    DWORD                     dwStateFlags;
+    DWORD                     dwFlags;
+    DWORD                     dwRefCnt;
+    FLATPTR                   fpLastFlip;
+    ULONG_PTR                 dwReserved1;
+    ULONG_PTR                 dwReserved2;
+    HANDLE                    hDDVideoPort;
+    DWORD                     dwNumVBIAutoflip;
+    LPDDVIDEOPORTDESC         lpVBIDesc;
+    LPDDVIDEOPORTDESC         lpVideoDesc;
+    LPDDVIDEOPORTINFO         lpVBIInfo;
+    LPDDVIDEOPORTINFO         lpVideoInfo;
+    DWORD                     dwVBIProcessID;
+    LPDDRAWI_DDVIDEOPORT_INT  lpVPNotify;
+} DDRAWI_DDVIDEOPORT_LCL;
+
+
+typedef struct _DDRAWI_DDVIDEOPORT_INT
+{
+    LPVOID                      lpVtbl;
+    LPDDRAWI_DDVIDEOPORT_LCL    lpLcl;
+    LPDDRAWI_DDVIDEOPORT_INT    lpLink;
+    DWORD                       dwIntRefCnt;
+    DWORD                       dwFlags;
+} DDRAWI_DDVIDEOPORT_INT;
+
+
+typedef struct _DDRAWI_DDRAWCLIPPER_LCL
+{
+    DWORD                     lpClipMore;
+    LPDDRAWI_DDRAWCLIPPER_GBL lpGbl;
+    LPDDRAWI_DIRECTDRAW_LCL   lpDD_lcl;
+    DWORD                     dwLocalRefCnt;
+#ifndef _NO_COM
+    IUnknown                  *pUnkOuter;
+#else
+    PVOID                     *pUnkOuter;
+#endif
+    LPDDRAWI_DIRECTDRAW_INT   lpDD_int;
+    ULONG_PTR                 dwReserved1;
+#ifndef _NO_COM
+    IUnknown *                pAddrefedThisOwner;
+#else
+       PVOID                     pAddrefedThisOwner;
+#endif
+} DDRAWI_DDRAWCLIPPER_LCL;
+
+
+
+typedef struct _DDRAWI_DDRAWCLIPPER_GBL
+{
+    DWORD                     dwRefCnt;
+    DWORD                     dwFlags;
+    LPDDRAWI_DIRECTDRAW_GBL   lpDD;
+    DWORD                     dwProcessId;
+    ULONG_PTR                 dwReserved1;
+    ULONG_PTR                 hWnd;
+    LPRGNDATA                 lpStaticClipList;
+} DDRAWI_DDRAWCLIPPER_GBL;
+
+typedef BOOL    (PASCAL *LPDDHEL_INIT)(LPDDRAWI_DIRECTDRAW_GBL,BOOL);
+
+extern HRESULT DDAPI
+       LateAllocateSurfaceMem(
+                              LPDIRECTDRAWSURFACE lpSurface,
+                              DWORD dwPleaseAllocType,
+                              DWORD dwWidthInBytesOrSize,
+                              DWORD dwHeight);
+
+       LPDIRECTDRAWSURFACE GetNextMipMap(
+                           LPDIRECTDRAWSURFACE lpLevel);
+
+
+
+typedef struct IDirectDrawClipperVtbl DIRECTDRAWCLIPPERCALLBACKS;
+typedef struct IDirectDrawPaletteVtbl DIRECTDRAWPALETTECALLBACKS;
+typedef struct IDirectDrawSurfaceVtbl DIRECTDRAWSURFACECALLBACKS;
+typedef struct IDirectDrawSurface2Vtbl DIRECTDRAWSURFACE2CALLBACKS;
+typedef struct IDirectDrawSurface3Vtbl DIRECTDRAWSURFACE3CALLBACKS;
+typedef struct IDirectDrawSurface4Vtbl DIRECTDRAWSURFACE4CALLBACKS;
+typedef struct IDirectDrawSurface7Vtbl DIRECTDRAWSURFACE7CALLBACKS;
+typedef struct IDirectDrawColorControlVtbl DIRECTDRAWCOLORCONTROLCALLBACKS;
+typedef struct IDirectDrawVtbl DIRECTDRAWCALLBACKS;
+typedef struct IDirectDraw2Vtbl DIRECTDRAW2CALLBACKS;
+typedef struct IDirectDraw4Vtbl DIRECTDRAW4CALLBACKS;
+typedef struct IDirectDraw7Vtbl DIRECTDRAW7CALLBACKS;
+typedef struct IDirectDrawKernelVtbl DIRECTDRAWKERNELCALLBACKS;
+typedef struct IDirectDrawSurfaceKernelVtbl DIRECTDRAWSURFACEKERNELCALLBACKS;
+typedef struct IDirectDrawGammaControlVtbl DIRECTDRAWGAMMACONTROLCALLBACKS;
+
+
+typedef DIRECTDRAWCLIPPERCALLBACKS  *LPDIRECTDRAWCLIPPERCALLBACKS;
+typedef DIRECTDRAWPALETTECALLBACKS  *LPDIRECTDRAWPALETTECALLBACKS;
+typedef DIRECTDRAWSURFACECALLBACKS  *LPDIRECTDRAWSURFACECALLBACKS;
+typedef DIRECTDRAWCALLBACKS  *LPDIRECTDRAWCALLBACKS;
+
+
+HRESULT CALLBACK
+        D3DParseUnknownCommand (LPVOID lpvCommands,
+                                LPVOID *lplpvReturnedCommand);
 
 #ifdef __cplusplus
-} /* extern "C" */
+ /* extern "C" */
 #endif
 
-#endif /* __WINE_DDRAWI_H */
+#endif /* __DDRAWI_INCLUDED__ */