- removed (now obsolete) driver.h file (it's content is now in mmsystem.h)
- upgraded vfw.h content

diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c
index fa79bda..d017fe9 100644
--- a/dlls/avifil32/avifile.c
+++ b/dlls/avifil32/avifile.c
@@ -8,7 +8,6 @@
 #include "winbase.h"
 #include "vfw.h"
 #include "wine/winestring.h"
-#include "driver.h"
 #include "mmsystem.h"
 #include "winerror.h"
 #include "debugtools.h"
diff --git a/dlls/comctl32/animate.c b/dlls/comctl32/animate.c
index c6bbeb5..df05d79 100644
--- a/dlls/comctl32/animate.c
+++ b/dlls/comctl32/animate.c
@@ -19,7 +19,6 @@
 
 #include "winbase.h"
 #include "commctrl.h"
-#include "driver.h"
 #include "animate.h"
 #include "mmsystem.h"
 #include "services.h"
diff --git a/dlls/msacm/driver.c b/dlls/msacm/driver.c
index 1a60d8e..f02c902 100644
--- a/dlls/msacm/driver.c
+++ b/dlls/msacm/driver.c
@@ -13,7 +13,6 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "debugtools.h"
-#include "driver.h"
 #include "heap.h"
 #include "mmsystem.h"
 #include "msacm.h"
diff --git a/dlls/msacm/internal.c b/dlls/msacm/internal.c
index c1db520..0e8b405 100644
--- a/dlls/msacm/internal.c
+++ b/dlls/msacm/internal.c
@@ -14,7 +14,6 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "winerror.h"
-#include "driver.h"
 #include "heap.h"
 #include "mmsystem.h"
 #include "msacm.h"
diff --git a/dlls/msvideo/drawdib.c b/dlls/msvideo/drawdib.c
index e7c9517..1777f77 100644
--- a/dlls/msvideo/drawdib.c
+++ b/dlls/msvideo/drawdib.c
@@ -11,7 +11,6 @@
 #include "winuser.h"
 #include "winbase.h"
 #include "debugtools.h"
-#include "driver.h"
 #include "vfw.h"
 #include "windef.h"
 
diff --git a/dlls/msvideo/msvideo_main.c b/dlls/msvideo/msvideo_main.c
index 71e1cb1..cb45dab 100644
--- a/dlls/msvideo/msvideo_main.c
+++ b/dlls/msvideo/msvideo_main.c
@@ -16,7 +16,6 @@
 #include "winuser.h"
 #include "vfw.h"
 #include "wine/winestring.h"
-#include "driver.h"
 #include "debugtools.h"
 #include "ldt.h"
 #include "heap.h"
diff --git a/dlls/winmm/joystick.c b/dlls/winmm/joystick.c
index e119c72..ed89597 100644
--- a/dlls/winmm/joystick.c
+++ b/dlls/winmm/joystick.c
@@ -18,7 +18,6 @@
 #include "winbase.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "driver.h"
 #include "winemm.h"
 #include "debugtools.h"
 
diff --git a/dlls/winmm/joystick/joystick.c b/dlls/winmm/joystick/joystick.c
index 256fdc7..9ef0abb 100644
--- a/dlls/winmm/joystick/joystick.c
+++ b/dlls/winmm/joystick/joystick.c
@@ -40,7 +40,6 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "mmddk.h"
-#include "driver.h"
 #include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(joystick);
diff --git a/dlls/winmm/lolvldrv.c b/dlls/winmm/lolvldrv.c
index 0d19c9c..c29ee36 100644
--- a/dlls/winmm/lolvldrv.c
+++ b/dlls/winmm/lolvldrv.c
@@ -11,7 +11,6 @@
 #include "heap.h"
 #include "user.h"	/* should be removed asap; used in MMDRV_(Get|Alloc|Free) */
 #include "selectors.h"
-#include "driver.h"
 #include "winver.h"
 #include "module.h"
 #include "winemm.h"
@@ -2365,7 +2364,6 @@
     if (MMDRV_Install("msacm.drv", 	   num, TRUE )) num++;
     if (MMDRV_Install("midimap.drv",	   num, TRUE )) num++;
 
-
     /* be sure that size of MMDrvs matches the max number of loadable drivers !! 
      * if not just increase size of MMDrvs */
     assert(num <= sizeof(MMDrvs)/sizeof(MMDrvs[0]));
diff --git a/dlls/winmm/mci.c b/dlls/winmm/mci.c
index 632c4e8..59bea9c 100644
--- a/dlls/winmm/mci.c
+++ b/dlls/winmm/mci.c
@@ -14,7 +14,6 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "heap.h"
-#include "driver.h"
 #include "winemm.h"
 #include "selectors.h"
 #include "digitalv.h"
diff --git a/dlls/winmm/mcianim/mcianim.c b/dlls/winmm/mcianim/mcianim.c
index de9468f..5700c8b 100644
--- a/dlls/winmm/mcianim/mcianim.c
+++ b/dlls/winmm/mcianim/mcianim.c
@@ -8,7 +8,6 @@
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "debugtools.h"
 
diff --git a/dlls/winmm/mciavi/mciavi.c b/dlls/winmm/mciavi/mciavi.c
index fdbeeab..cb486b0 100644
--- a/dlls/winmm/mciavi/mciavi.c
+++ b/dlls/winmm/mciavi/mciavi.c
@@ -12,7 +12,6 @@
 #include "winuser.h"
 #include "mmddk.h"
 #include "user.h"
-#include "driver.h"
 #include "digitalv.h"
 #include "debugtools.h"
 
diff --git a/dlls/winmm/mcicda/mcicda.c b/dlls/winmm/mcicda/mcicda.c
index 691c59f..c356645 100644
--- a/dlls/winmm/mcicda/mcicda.c
+++ b/dlls/winmm/mcicda/mcicda.c
@@ -12,7 +12,6 @@
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "cdrom.h"
 #include "debugtools.h"
diff --git a/dlls/winmm/mciseq/mcimidi.c b/dlls/winmm/mciseq/mcimidi.c
index deebb4e..c504d34 100644
--- a/dlls/winmm/mciseq/mcimidi.c
+++ b/dlls/winmm/mciseq/mcimidi.c
@@ -21,7 +21,6 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "mmddk.h"
-#include "driver.h"
 #include "heap.h"
 #include "debugtools.h"
 
diff --git a/dlls/winmm/mciwave/mciwave.c b/dlls/winmm/mciwave/mciwave.c
index c777786..9263b12 100644
--- a/dlls/winmm/mciwave/mciwave.c
+++ b/dlls/winmm/mciwave/mciwave.c
@@ -13,7 +13,6 @@
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "heap.h"
 #include "debugtools.h"
diff --git a/dlls/winmm/midimap/midimap.c b/dlls/winmm/midimap/midimap.c
index ec51e7a..0ba927c 100644
--- a/dlls/winmm/midimap/midimap.c
+++ b/dlls/winmm/midimap/midimap.c
@@ -8,7 +8,6 @@
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "debugtools.h"
 
diff --git a/dlls/winmm/mmsystem.c b/dlls/winmm/mmsystem.c
index e13bc8f..99c0673 100644
--- a/dlls/winmm/mmsystem.c
+++ b/dlls/winmm/mmsystem.c
@@ -22,15 +22,14 @@
 
 #include "winbase.h"
 #include "wine/winbase16.h"
-#include "wownt32.h"
 #include "heap.h"
-#include "driver.h"
 #include "winemm.h"
 #include "syslevel.h"
 #include "callback.h"
 #include "selectors.h"
 #include "module.h"
 #include "debugtools.h"
+#include "ntddk.h"
 
 DEFAULT_DEBUG_CHANNEL(mmsys)
 
@@ -59,7 +58,8 @@
     LPWINE_MM_IDATA	iData = MULTIMEDIA_GetIDataNoCheck();
 
     if (!iData) {
-	ERR("IData not found. Suicide !!!\n");
+	ERR("IData not found for pid=%08lx. Suicide !!!\n", GetCurrentProcessId());
+	DbgBreakPoint();
 	ExitProcess(0);
     }
     return iData;
@@ -81,6 +81,7 @@
     iData->lpNextIData = lpFirstIData;
     lpFirstIData = iData;
     InitializeCriticalSection(&iData->cs);
+    TRACE("Created IData (%p) for pid %08lx\n", iData, iData->dwThisProcess);
     return TRUE;
 }
 
@@ -156,8 +157,8 @@
     switch (fdwReason) {
     case DLL_PROCESS_ATTACH:
 	/* need to load WinMM in order to:
-	 * - correctly initiates shared variables (MULTIMEDIA_Init())
-	 * - correctly creates the per process WINE_MM_IDATA chunk
+	 * - initiate correctly shared variables (MULTIMEDIA_Init())
+	 * - create correctly the per process WINE_MM_IDATA chunk
 	 */
 	hndl = LoadLibraryA("WINMM.DLL");
 	
@@ -562,7 +563,7 @@
 				      !((DWORD)pszSound >> 16)) || !pszSound)) {
 	pszSoundA = HEAP_strdupWtoA(GetProcessHeap(), 0,pszSound);
 	bSound = PlaySoundA(pszSoundA, hmod, fdwSound);
-	HeapFree(GetProcessHeap(), 0,pszSoundA);
+	HeapFree(GetProcessHeap(), 0, pszSoundA);
     } else  
 	bSound = PlaySoundA((LPCSTR)pszSound, hmod, fdwSound);
     
@@ -3335,7 +3336,7 @@
 	*lphMidiStrm = hMidiOut;
 
     /* FIXME: is lpuDevice initialized upon entering midiStreamOpen ? */
-    FIXME("*lpuDeviceID=%u\n", *lpuDeviceID);
+    FIXME("*lpuDeviceID=%x\n", *lpuDeviceID);
     lpwm->mld.uDeviceID = *lpuDeviceID = 0;
 
     ret = MMDRV_Open(&lpwm->mld, MODM_OPEN, (DWORD)&lpwm->mod, fdwOpen);
diff --git a/dlls/winmm/wavemap/wavemap.c b/dlls/winmm/wavemap/wavemap.c
index fd038e7..9938a93 100644
--- a/dlls/winmm/wavemap/wavemap.c
+++ b/dlls/winmm/wavemap/wavemap.c
@@ -14,7 +14,6 @@
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "msacm.h"
 #include "debugtools.h"
diff --git a/dlls/winmm/wineoss/audio.c b/dlls/winmm/wineoss/audio.c
index cc5f952..ce80b69 100644
--- a/dlls/winmm/wineoss/audio.c
+++ b/dlls/winmm/wineoss/audio.c
@@ -32,7 +32,6 @@
 #include "wingdi.h"
 #include "winerror.h"
 #include "wine/winuser16.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "dsound.h"
 #include "dsdriver.h"
diff --git a/dlls/winmm/wineoss/midi.c b/dlls/winmm/wineoss/midi.c
index 3fe5b78..9fdbeeb 100644
--- a/dlls/winmm/wineoss/midi.c
+++ b/dlls/winmm/wineoss/midi.c
@@ -23,7 +23,6 @@
 #include "winuser.h"
 #include "mmddk.h"
 #include "oss.h"
-#include "driver.h"
 #include "debugtools.h"
 #include "heap.h"
 #include "ldt.h"
diff --git a/dlls/winmm/wineoss/mixer.c b/dlls/winmm/wineoss/mixer.c
index 063ac09..0c6a0ec 100644
--- a/dlls/winmm/wineoss/mixer.c
+++ b/dlls/winmm/wineoss/mixer.c
@@ -17,7 +17,6 @@
 #include <sys/ioctl.h>
 #include "windef.h"
 #include "user.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "oss.h"
 #include "debugtools.h"
diff --git a/dlls/winmm/wineoss/mmaux.c b/dlls/winmm/wineoss/mmaux.c
index 718c4c5..b62f094 100644
--- a/dlls/winmm/wineoss/mmaux.c
+++ b/dlls/winmm/wineoss/mmaux.c
@@ -15,7 +15,6 @@
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include "windef.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "oss.h"
 #include "debugtools.h"
diff --git a/dlls/winmm/wineoss/oss.c b/dlls/winmm/wineoss/oss.c
index e015889..225df59 100644
--- a/dlls/winmm/wineoss/oss.c
+++ b/dlls/winmm/wineoss/oss.c
@@ -8,7 +8,6 @@
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "driver.h"
 #include "mmddk.h"
 #include "oss.h"
 
diff --git a/include/driver.h b/include/driver.h
deleted file mode 100644
index deb20bc..0000000
--- a/include/driver.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Drivers definitions
- */
-
-#ifndef __WINE_DRIVER_H
-#define __WINE_DRIVER_H
-
-#include "windef.h"
-
-#define DRV_LOAD                0x0001
-#define DRV_ENABLE              0x0002
-#define DRV_OPEN                0x0003
-#define DRV_CLOSE               0x0004
-#define DRV_DISABLE             0x0005
-#define DRV_FREE                0x0006
-#define DRV_CONFIGURE           0x0007
-#define DRV_QUERYCONFIGURE      0x0008
-#define DRV_INSTALL             0x0009
-#define DRV_REMOVE              0x000A
-#define DRV_EXITSESSION         0x000B
-#define DRV_EXITAPPLICATION     0x000C
-#define DRV_POWER               0x000F
-
-#define DRV_RESERVED            0x0800
-#define DRV_USER                0x4000
-
-#define DRVCNF_CANCEL           0x0000
-#define DRVCNF_OK               0x0001
-#define DRVCNF_RESTART 		0x0002
-
-#define DRVEA_NORMALEXIT  	0x0001
-#define DRVEA_ABNORMALEXIT 	0x0002
-
-#define DRV_SUCCESS		0x0001
-#define DRV_FAILURE		0x0000
-
-#define GND_FIRSTINSTANCEONLY 	0x00000001
-
-#define GND_FORWARD  		0x00000000
-#define GND_REVERSE    		0x00000002
-
-typedef struct {
-    DWORD   			dwDCISize;
-    LPCSTR  			lpszDCISectionName;
-    LPCSTR  			lpszDCIAliasName;
-} DRVCONFIGINFO16, *LPDRVCONFIGINFO16;
-
-typedef struct {
-    DWORD   			dwDCISize;
-    LPCWSTR  			lpszDCISectionName;
-    LPCWSTR  			lpszDCIAliasName;
-} DRVCONFIGINFO, *LPDRVCONFIGINFO;
-
-
-/* GetDriverInfo16 references this structure, so this a struct defined
- * in the Win16 API.
- * GetDriverInfo has been deprecated in Win32.
- */
-typedef struct
-{
-    UINT16       		length;
-    HDRVR16      		hDriver;
-    HINSTANCE16  		hModule;
-    CHAR         		szAliasName[128];
-} DRIVERINFOSTRUCT16, *LPDRIVERINFOSTRUCT16;
-
-LRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, 
-                               LPARAM dwParam1, LPARAM dwParam2);
-LRESULT WINAPI DefDriverProc(DWORD dwDriverIdentifier, HDRVR hdrvr,
-                               UINT Msg, LPARAM lParam1, LPARAM lParam2);
-HDRVR16 WINAPI OpenDriver16(LPCSTR szDriverName, LPCSTR szSectionName,
-                            LPARAM lParam2);
-HDRVR WINAPI OpenDriverA(LPCSTR szDriverName, LPCSTR szSectionName,
-                             LPARAM lParam2);
-HDRVR WINAPI OpenDriverW(LPCWSTR szDriverName, LPCWSTR szSectionName,
-                             LPARAM lParam2);
-#define OpenDriver WINELIB_NAME_AW(OpenDriver)
-LRESULT WINAPI CloseDriver16(HDRVR16 hDriver, LPARAM lParam1, LPARAM lParam2);
-LRESULT WINAPI CloseDriver(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);
-LRESULT WINAPI SendDriverMessage16( HDRVR16 hDriver, UINT16 message,
-                                    LPARAM lParam1, LPARAM lParam2 );
-LRESULT WINAPI SendDriverMessage( HDRVR hDriver, UINT message,
-                                    LPARAM lParam1, LPARAM lParam2 );
-HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDriver);
-HMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver);
-
-/* only win31 version for those exist */
-HDRVR16 WINAPI GetNextDriver16(HDRVR16, DWORD);
-BOOL16 WINAPI GetDriverInfo16(HDRVR16, DRIVERINFOSTRUCT16 *);
-
-DWORD WINAPI GetDriverFlags( HDRVR hDriver );
-#ifdef __WINE__
-/* this call (GetDriverFlags) is not documented, nor the flags returned.
- * here are Wine only definitions
- */
-#define WINE_GDF_EXIST	0x80000000
-#define WINE_GDF_16BIT	0x10000000
-#endif
-
-#endif  /* __WINE_DRIVER_H */
diff --git a/include/mmsystem.h b/include/mmsystem.h
index 2f5829d..723df7d 100644
--- a/include/mmsystem.h
+++ b/include/mmsystem.h
@@ -151,6 +151,96 @@
 #define CALLBACK_FUNCTION   	0x00030000l    	/* dwCallback is a FARPROC */
 #define CALLBACK_EVENT		0x00050000l	/* dwCallback is an EVENT Handler */
 
+#define DRV_LOAD                0x0001
+#define DRV_ENABLE              0x0002
+#define DRV_OPEN                0x0003
+#define DRV_CLOSE               0x0004
+#define DRV_DISABLE             0x0005
+#define DRV_FREE                0x0006
+#define DRV_CONFIGURE           0x0007
+#define DRV_QUERYCONFIGURE      0x0008
+#define DRV_INSTALL             0x0009
+#define DRV_REMOVE              0x000A
+#define DRV_EXITSESSION         0x000B
+#define DRV_EXITAPPLICATION     0x000C
+#define DRV_POWER               0x000F
+
+#define DRV_RESERVED            0x0800
+#define DRV_USER                0x4000
+
+#define DRVCNF_CANCEL           0x0000
+#define DRVCNF_OK               0x0001
+#define DRVCNF_RESTART 		0x0002
+
+#define DRVEA_NORMALEXIT  	0x0001
+#define DRVEA_ABNORMALEXIT 	0x0002
+
+#define DRV_SUCCESS		0x0001
+#define DRV_FAILURE		0x0000
+
+#define GND_FIRSTINSTANCEONLY 	0x00000001
+
+#define GND_FORWARD  		0x00000000
+#define GND_REVERSE    		0x00000002
+
+typedef struct {
+    DWORD   			dwDCISize;
+    LPCSTR  			lpszDCISectionName;
+    LPCSTR  			lpszDCIAliasName;
+} DRVCONFIGINFO16, *LPDRVCONFIGINFO16;
+
+typedef struct {
+    DWORD   			dwDCISize;
+    LPCWSTR  			lpszDCISectionName;
+    LPCWSTR  			lpszDCIAliasName;
+} DRVCONFIGINFO, *LPDRVCONFIGINFO;
+
+
+/* GetDriverInfo16 references this structure, so this a struct defined
+ * in the Win16 API.
+ * GetDriverInfo has been deprecated in Win32.
+ */
+typedef struct
+{
+    UINT16       		length;
+    HDRVR16      		hDriver;
+    HINSTANCE16  		hModule;
+    CHAR         		szAliasName[128];
+} DRIVERINFOSTRUCT16, *LPDRIVERINFOSTRUCT16;
+
+LRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, 
+                               LPARAM dwParam1, LPARAM dwParam2);
+LRESULT WINAPI DefDriverProc(DWORD dwDriverIdentifier, HDRVR hdrvr,
+			     UINT Msg, LPARAM lParam1, LPARAM lParam2);
+HDRVR16 WINAPI OpenDriver16(LPCSTR szDriverName, LPCSTR szSectionName,
+                            LPARAM lParam2);
+HDRVR 	WINAPI OpenDriverA(LPCSTR szDriverName, LPCSTR szSectionName,
+			   LPARAM lParam2);
+HDRVR 	WINAPI OpenDriverW(LPCWSTR szDriverName, LPCWSTR szSectionName,
+			   LPARAM lParam2);
+#define OpenDriver WINELIB_NAME_AW(OpenDriver)
+LRESULT WINAPI CloseDriver16(HDRVR16 hDriver, LPARAM lParam1, LPARAM lParam2);
+LRESULT WINAPI CloseDriver(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);
+LRESULT WINAPI SendDriverMessage16(HDRVR16 hDriver, UINT16 message,
+				   LPARAM lParam1, LPARAM lParam2);
+LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message,
+				 LPARAM lParam1, LPARAM lParam2);
+HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDriver);
+HMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver);
+
+/* only win31 version for those exist */
+HDRVR16 WINAPI GetNextDriver16(HDRVR16, DWORD);
+BOOL16	WINAPI GetDriverInfo16(HDRVR16, DRIVERINFOSTRUCT16 *);
+
+DWORD	WINAPI GetDriverFlags(HDRVR hDriver);
+#ifdef __WINE__
+/* this call (GetDriverFlags) is not documented, nor the flags returned.
+ * here are Wine only definitions
+ */
+#define WINE_GDF_EXIST	0x80000000
+#define WINE_GDF_16BIT	0x10000000
+#endif
+
 typedef void CALLBACK (*LPDRVCALLBACK16) (HDRVR16 h, UINT16 uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
 typedef void CALLBACK (*LPDRVCALLBACK) (HDRVR h, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
 
diff --git a/include/msacm.h b/include/msacm.h
index 5f55bcb..37a2777 100644
--- a/include/msacm.h
+++ b/include/msacm.h
@@ -6,7 +6,6 @@
 #define __WINE_MSACM_H
 
 #include "windef.h"
-#include "driver.h"
 #include "mmsystem.h"
 #include "mmreg.h"
 
diff --git a/include/vfw.h b/include/vfw.h
index 9ef93d1..466f82f 100644
--- a/include/vfw.h
+++ b/include/vfw.h
@@ -10,13 +10,19 @@
 #define VFWAPI	WINAPI
 #define VFWAPIV	WINAPIV
 
+#ifdef __cplusplus
+extern "C" {
+#endif  /* __cplusplus */
+
 typedef HANDLE16 HDRAWDIB16;
 typedef HANDLE HDRAWDIB;
 
 HWND        VFWAPIV MCIWndCreateA(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCSTR szFile);
 HWND        VFWAPIV MCIWndCreateW(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCWSTR szFile);
 #define     MCIWndCreate WINELIB_NAME_AW(MCIWndCreate)
-DWORD       VFWAPI VideoForWindowsVersion(void);
+DWORD       VFWAPI  VideoForWindowsVersion(void);
+LONG 	    VFWAPI  InitVFW(void);
+LONG	    VFWAPI  TermVFW(void);
 
 #ifndef mmioFOURCC
 #define mmioFOURCC( ch0, ch1, ch2, ch3 )				\
@@ -46,12 +52,12 @@
 /* HIC struct (same layout as Win95 one) */
 typedef struct tagWINE_HIC {
 	DWORD		magic;		/* 00: 'Smag' */
-	HANDLE	curthread;	/* 04: */
+	HANDLE		curthread;	/* 04: */
 	DWORD		type;		/* 08: */
 	DWORD		handler;	/* 0C: */
 	HDRVR		hdrv;		/* 10: */
 	DWORD		private;	/* 14:(handled by SendDriverMessage)*/
-	FARPROC	driverproc;	/* 18:(handled by SendDriverMessage)*/
+	FARPROC		driverproc;	/* 18:(handled by SendDriverMessage)*/
 	DWORD		x1;		/* 1c: name? */
 	WORD		x2;		/* 20: */
 	DWORD		x3;		/* 22: */
@@ -201,7 +207,7 @@
 );
 
 #define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) 		\
-	ICSendMessage(						\
+	ICSendMessage(							\
 	    hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(LPVOID)(lpbiInput),	\
 	    (DWORD)(LPVOID)(lpbiOutput)					\
 	)
@@ -214,7 +220,7 @@
 	(DWORD)(LPVOID)(lpbiOutput)					\
     )
 
-#define ICCompressGetSize(hic, lpbiInput, lpbiOutput) 		\
+#define ICCompressGetSize(hic, lpbiInput, lpbiOutput) 			\
     ICSendMessage(							\
     	hic, ICM_COMPRESS_GET_SIZE, (DWORD)(LPVOID)(lpbiInput), 	\
 	(DWORD)(LPVOID)(lpbiOutput)					\
@@ -226,7 +232,6 @@
 	(DWORD)(LPVOID)(lpbiOutput)				\
     )
 
-
 #define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)
 
 /* ICCOMPRESSFRAMES.dwFlags */
@@ -250,6 +255,20 @@
     LONG CALLBACK (*PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len);
 } ICCOMPRESSFRAMES;
 
+typedef struct {
+    DWORD		dwFlags;
+    LPARAM		lParam;
+   /* messages for Status callback */
+#define ICSTATUS_START	    0
+#define ICSTATUS_STATUS	    1
+#define ICSTATUS_END	    2
+#define ICSTATUS_ERROR	    3
+#define ICSTATUS_YIELD	    4
+    /* FIXME: some X11 libs define Status as int... */
+    /* LONG CALLBACK (*zStatus)(LPARAM lParam, UINT message, LONG l); */
+    LONG CALLBACK (*zStatus)(LPARAM lParam, UINT message, LONG l);
+} ICSETSTATUSPROC;
+
 /* Values for wMode of ICOpen() */
 #define	ICMODE_COMPRESS		1
 #define	ICMODE_DECOMPRESS	2
@@ -331,7 +350,7 @@
 /* Decompression stuff */
 #define ICDECOMPRESS_HURRYUP		0x80000000	/* don't draw just buffer (hurry up!) */
 #define ICDECOMPRESS_UPDATE		0x40000000	/* don't draw just update screen */
-#define ICDECOMPRESS_PREROL		0x20000000	/* this frame is before real start */
+#define ICDECOMPRESS_PREROLL		0x20000000	/* this frame is before real start */
 #define ICDECOMPRESS_NULLFRAME		0x10000000	/* repeat last frame */
 #define ICDECOMPRESS_NOTKEYFRAME	0x08000000	/* this frame is not a key frame */
 
@@ -352,15 +371,15 @@
     LPVOID		lpDst;
 
     /* changed for ICM_DECOMPRESSEX */
-    INT		xDst;       /* destination rectangle */
-    INT		yDst;
-    INT		dxDst;
-    INT		dyDst;
+    INT			xDst;       /* destination rectangle */
+    INT			yDst;
+    INT			dxDst;
+    INT			dyDst;
 
-    INT		xSrc;       /* source rectangle */
-    INT		ySrc;
-    INT		dxSrc;
-    INT		dySrc;
+    INT			xSrc;       /* source rectangle */
+    INT			ySrc;
+    INT			dxSrc;
+    INT			dySrc;
 } ICDECOMPRESSEX;
 
 #include "pshpack1.h"
@@ -372,15 +391,15 @@
     LPBITMAPINFOHEADER	lpbiDst;
     LPVOID		lpDst;
 
-    INT16  	xDst;       /* destination rectangle */
-    INT16	yDst;
-    INT16  	dxDst;
-    INT16  	dyDst;
+    INT16  		xDst;       /* destination rectangle */
+    INT16		yDst;
+    INT16  		dxDst;
+    INT16  		dyDst;
 
-    INT16	xSrc;       /* source rectangle */
-    INT16  	ySrc;
-	INT16	dxSrc;
-    INT16  	dySrc;
+    INT16		xSrc;       /* source rectangle */
+    INT16  		ySrc;
+    INT16		dxSrc;
+    INT16  		dySrc;
 } ICDECOMPRESSEX16;
 
 #include "poppack.h"
@@ -422,22 +441,159 @@
 
 #define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0)
 
+LRESULT	VFWAPI	ICSendMessage(HIC hic, UINT msg, DWORD dw1, DWORD dw2);
+LRESULT VFWAPI	ICSendMessage16(HIC16 hic, UINT16 msg, DWORD dw1, DWORD dw2);
+
+static LRESULT VFWAPI inline ICDecompressEx(HIC hic, DWORD dwFlags, 
+					    LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc,
+					    int xSrc, int ySrc, int dxSrc, int dySrc,
+					    LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst,
+					    int xDst, int yDst, int dxDst, int dyDst)
+{
+    ICDECOMPRESSEX ic;
+
+    ic.dwFlags = dwFlags;
+    ic.lpbiSrc = lpbiSrc;
+    ic.lpSrc = lpSrc;
+    ic.xSrc = xSrc;
+    ic.ySrc = ySrc;
+    ic.dxSrc = dxSrc;
+    ic.dySrc = dySrc;
+    ic.lpbiDst = lpbiDst;
+    ic.lpDst = lpDst;
+    ic.xDst = xDst;
+    ic.yDst = yDst;
+    ic.dxDst = dxDst;
+    ic.dyDst = dyDst;
+    return ICSendMessage(hic, ICM_DECOMPRESSEX, (DWORD)&ic, sizeof(ic));
+}
+
+static LRESULT VFWAPI inline ICDecompressExBegin(HIC hic, DWORD dwFlags,
+						 LPBITMAPINFOHEADER lpbiSrc,
+						 LPVOID lpSrc,
+						 int xSrc, int ySrc, int dxSrc, int dySrc,
+						 LPBITMAPINFOHEADER lpbiDst,
+						 LPVOID lpDst,
+						 int xDst,
+						 int yDst,
+						 int dxDst,
+						 int dyDst)
+{
+    ICDECOMPRESSEX ic;
+
+    ic.dwFlags = dwFlags;
+    ic.lpbiSrc = lpbiSrc;
+    ic.lpSrc = lpSrc;
+    ic.xSrc = xSrc;
+    ic.ySrc = ySrc;
+    ic.dxSrc = dxSrc;
+    ic.dySrc = dySrc;
+    ic.lpbiDst = lpbiDst;
+    ic.lpDst = lpDst;
+    ic.xDst = xDst;
+    ic.yDst = yDst;
+    ic.dxDst = dxDst;
+    ic.dyDst = dyDst;
+    return ICSendMessage(hic, ICM_DECOMPRESSEX_BEGIN, (DWORD)&ic, sizeof(ic));
+}
+static LRESULT VFWAPI inline ICDecompressExQuery(HIC hic, DWORD dwFlags,
+						 LPBITMAPINFOHEADER lpbiSrc,
+						 LPVOID lpSrc,
+						 int xSrc, int ySrc, int dxSrc, int dySrc,
+						 LPBITMAPINFOHEADER lpbiDst,
+						 LPVOID lpDst,
+						 int xDst,
+						 int yDst,
+						 int dxDst,
+						 int dyDst)
+{
+    ICDECOMPRESSEX ic;
+
+    ic.dwFlags = dwFlags;
+    ic.lpbiSrc = lpbiSrc;
+    ic.lpSrc = lpSrc;
+    ic.xSrc = xSrc;
+    ic.ySrc = ySrc;
+    ic.dxSrc = dxSrc;
+    ic.dySrc = dySrc;
+    ic.lpbiDst = lpbiDst;
+    ic.lpDst = lpDst;
+    ic.xDst = xDst;
+    ic.yDst = yDst;
+    ic.dxDst = dxDst;
+    ic.dyDst = dyDst;
+    return ICSendMessage(hic, ICM_DECOMPRESSEX_QUERY, (DWORD)&ic, sizeof(ic));
+}
+
+#define ICDecompressExEnd(hic) \
+    ICSendMessage(hic, ICM_DECOMPRESSEX_END, 0, 0)
 
 #define ICDRAW_QUERY        0x00000001L   /* test for support */
 #define ICDRAW_FULLSCREEN   0x00000002L   /* draw to full screen */
 #define ICDRAW_HDC          0x00000004L   /* draw to a HDC/HWND */
+#define ICDRAW_ANIMATE	    0x00000008L	  /* expect palette animation */
+#define ICDRAW_CONTINUE	    0x00000010L	  /* draw is a continuation of previous draw */
+#define ICDRAW_MEMORYDC	    0x00000020L	  /* DC is offscreen, by the way */
+#define ICDRAW_UPDATING	    0x00000040L	  /* We're updating, as opposed to playing */
+#define ICDRAW_RENDER       0x00000080L   /* used to render data not draw it */
+#define ICDRAW_BUFFER       0x00000100L   /* buffer data offscreen, we will need to update it */
+
+#define ICDecompressOpen(fccType, fccHandler, lpbiIn, lpbiOut) \
+    ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS)
+
+#define ICDrawOpen(fccType, fccHandler, lpbiIn) \
+    ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW)
+
+HANDLE VFWAPI ICImageCompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn, 
+			      LPVOID lpBits, LPBITMAPINFO lpbiOut, LONG lQuality,
+			      LONG* plSize);
+
+HANDLE VFWAPI ICImageDecompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,
+				LPVOID lpBits, LPBITMAPINFO lpbiOut);
 
 BOOL	VFWAPI	ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo);
+BOOL    VFWAPI  ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags);
+BOOL    VFWAPI  ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags);
 LRESULT	VFWAPI	ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb);
 HIC	VFWAPI	ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode);
-HIC16 VFWAPI ICOpen16(DWORD fccType, DWORD fccHangler, UINT16 wMode);
+HIC16   VFWAPI	ICOpen16(DWORD fccType, DWORD fccHangler, UINT16 wMode);
 HIC	VFWAPI	ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler);
 
-LRESULT VFWAPI ICClose(HIC hic);
-LRESULT	VFWAPI	ICSendMessage(HIC hic, UINT msg, DWORD dw1, DWORD dw2);
-LRESULT VFWAPI ICSendMessage16(HIC16 hic, UINT16 msg, DWORD dw1, DWORD dw2);
-HIC	VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
-HIC16 VFWAPI ICLocate16(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
+LRESULT VFWAPI	ICClose(HIC hic);
+HIC	VFWAPI	ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
+HIC16	VFWAPI	ICLocate16(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
+HIC	VFWAPI	ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy);
+
+/* Values for wFlags of ICInstall() */
+#define ICINSTALL_UNICODE       0x8000
+#define ICINSTALL_FUNCTION      0x0001
+#define ICINSTALL_DRIVER        0x0002
+#define ICINSTALL_HDRV          0x0004
+#define ICINSTALL_DRIVERW       0x8002
+
+#define ICGetState(hic, pv, cb) \
+    ICSendMessage(hic, ICM_GETSTATE, (DWORD)(LPVOID)(pv), (DWORD)(cb))
+#define ICSetState(hic, pv, cb) \
+    ICSendMessage(hic, ICM_SETSTATE, (DWORD)(LPVOID)(pv), (DWORD)(cb))
+#define ICGetStateSize(hic) \
+    ICGetState(hic, NULL, 0)
+
+static DWORD inline ICGetDefaultQuality(HIC hic)
+{
+   DWORD dwICValue;
+   ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD));
+   return dwICValue;
+}
+
+static DWORD inline ICGetDefaultKeyFrameRate(HIC hic)
+{
+   DWORD dwICValue;
+   ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD));
+   return dwICValue;
+}
+
+#define ICDrawWindow(hic, prc) \
+    ICSendMessage(hic, ICM_DRAW_WINDOW, (DWORD)(LPVOID)(prc), sizeof(RECT))
 
 /* As passed to ICM_DRAW_SUGGESTFORMAT */
 typedef struct {
@@ -462,6 +618,13 @@
 	HIC16 hicDecompressor;
 } ICDRAWSUGGEST16;
 
+typedef struct {
+    DWORD               dwFlags;
+    int                 iStart;
+    int                 iLen;
+    LPPALETTEENTRY      lppe;
+} ICPALETTE;
+
 DWORD	VFWAPIV	ICDrawBegin(
         HIC			hic,
         DWORD			dwFlags,/* flags */
@@ -487,7 +650,7 @@
         HPALETTE16		hpal,	/* palette to draw with */
         HWND16			hwnd,	/* window to draw to */
         HDC16			hdc,	/* HDC to draw to */
-		INT16			xDst,	/* destination rectangle */
+	INT16			xDst,	/* destination rectangle */
         INT16			yDst,
         INT16			dxDst,
         INT16			dyDst,
@@ -557,7 +720,126 @@
 
 DWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime);
 
+static LRESULT VFWAPI inline ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn,
+						 LPBITMAPINFOHEADER lpbiOut,
+						 int dxSrc, int dySrc, 
+						 int dxDst, int dyDst,
+						 HIC hicDecomp)
+{
+    ICDRAWSUGGEST ic;
+
+    ic.lpbiIn = lpbiIn;
+    ic.lpbiSuggest = lpbiOut;
+    ic.dxSrc = dxSrc;
+    ic.dySrc = dySrc;
+    ic.dxDst = dxDst;
+    ic.dyDst = dyDst;
+    ic.hicDecompressor = hicDecomp;
+    return ICSendMessage(hic, ICM_DRAW_SUGGESTFORMAT, (DWORD)&ic, sizeof(ic));
+}
+
+#define ICDrawQuery(hic, lpbiInput) \
+    ICSendMessage(hic, ICM_DRAW_QUERY, (DWORD)(LPVOID)(lpbiInput), 0L)
+
+#define ICDrawChangePalette(hic, lpbiInput) \
+    ICSendMessage(hic, ICM_DRAW_CHANGEPALETTE, (DWORD)(LPVOID)(lpbiInput), 0L)
+
+#define ICGetBuffersWanted(hic, lpdwBuffers) \
+    ICSendMessage(hic, ICM_GETBUFFERSWANTED, (DWORD)(LPVOID)(lpdwBuffers), 0)
+
+#define ICDrawEnd(hic) \
+    ICSendMessage(hic, ICM_DRAW_END, 0, 0)
+
+#define ICDrawStart(hic) \
+    ICSendMessage(hic, ICM_DRAW_START, 0, 0)
+
+#define ICDrawStartPlay(hic, lFrom, lTo) \
+    ICSendMessage(hic, ICM_DRAW_START_PLAY, (DWORD)(lFrom), (DWORD)(lTo))
+
+#define ICDrawStop(hic) \
+    ICSendMessage(hic, ICM_DRAW_STOP, 0, 0)
+
+#define ICDrawStopPlay(hic) \
+    ICSendMessage(hic, ICM_DRAW_STOP_PLAY, 0, 0)
+
+#define ICDrawGetTime(hic, lplTime) \
+    ICSendMessage(hic, ICM_DRAW_GETTIME, (DWORD)(LPVOID)(lplTime), 0)
+
+#define ICDrawSetTime(hic, lTime) \
+    ICSendMessage(hic, ICM_DRAW_SETTIME, (DWORD)lTime, 0)
+
+#define ICDrawRealize(hic, hdc, fBackground) \
+    ICSendMessage(hic, ICM_DRAW_REALIZE, (DWORD)(UINT)(HDC)(hdc), (DWORD)(BOOL)(fBackground))
+
+#define ICDrawFlush(hic) \
+    ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0)
+
+#define ICDrawRenderBuffer(hic) \
+    ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0)
+
+static LRESULT VFWAPI inline ICSetStatusProc(HIC hic, DWORD dwFlags, LRESULT lParam,
+					     LONG (CALLBACK *fpfnStatus)(LPARAM, UINT, LONG))
+{
+    ICSETSTATUSPROC ic;
+
+    ic.dwFlags = dwFlags;
+    ic.lParam = lParam;
+    /* FIXME: see comment in ICSETSTATUSPROC definition */
+    ic.zStatus = fpfnStatus;
+
+    return ICSendMessage(hic, ICM_SET_STATUS_PROC, (DWORD)&ic, sizeof(ic));
+}
+
+typedef struct {
+    LONG		cbSize;
+    DWORD		dwFlags;
+    HIC			hic;
+    DWORD               fccType;
+    DWORD               fccHandler;
+    LPBITMAPINFO	lpbiIn;
+    LPBITMAPINFO	lpbiOut;
+    LPVOID		lpBitsOut;
+    LPVOID		lpBitsPrev;
+    LONG		lFrame;
+    LONG		lKey;
+    LONG		lDataRate;
+    LONG		lQ;
+    LONG		lKeyCount;
+    LPVOID		lpState;
+    LONG		cbState;
+} COMPVARS, *PCOMPVARS;
+
+#define ICMF_COMPVARS_VALID	0x00000001
+
+BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData,
+			       PCOMPVARS pc, LPSTR lpszTitle);
+
+#define ICMF_CHOOSE_KEYFRAME		0x0001
+#define ICMF_CHOOSE_DATARATE		0x0002
+#define ICMF_CHOOSE_PREVIEW		0x0004
+#define ICMF_CHOOSE_ALLCOMPRESSORS	0x0008
+
+BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn);
+void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc);
+
+LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits,
+				 BOOL *pfKey, LONG *plSize);
+void VFWAPI ICCompressorFree(PCOMPVARS pc);
+
 /********************* AVIFILE function declarations *************************/
+#define formtypeAVI             mmioFOURCC('A', 'V', 'I', ' ')
+#define listtypeAVIHEADER       mmioFOURCC('h', 'd', 'r', 'l')
+#define ckidAVIMAINHDR          mmioFOURCC('a', 'v', 'i', 'h')
+#define listtypeSTREAMHEADER    mmioFOURCC('s', 't', 'r', 'l')
+#define ckidSTREAMHEADER        mmioFOURCC('s', 't', 'r', 'h')
+#define ckidSTREAMFORMAT        mmioFOURCC('s', 't', 'r', 'f')
+#define ckidSTREAMHANDLERDATA   mmioFOURCC('s', 't', 'r', 'd')
+#define ckidSTREAMNAME		mmioFOURCC('s', 't', 'r', 'n')
+
+#define listtypeAVIMOVIE        mmioFOURCC('m', 'o', 'v', 'i')
+#define listtypeAVIRECORD       mmioFOURCC('r', 'e', 'c', ' ')
+
+#define ckidAVINEWINDEX         mmioFOURCC('i', 'd', 'x', '1')
 
 #define streamtypeVIDEO         mmioFOURCC('v', 'i', 'd', 's')
 #define streamtypeAUDIO         mmioFOURCC('a', 'u', 'd', 's')
@@ -621,6 +903,7 @@
 
 /* AVIINDEXENTRY.dwFlags */
 #define AVIIF_LIST	0x00000001	/* chunk is a 'LIST' */
+#define AVIIF_TWOCC	0x00000002
 #define AVIIF_KEYFRAME	0x00000010	/* this frame is a key frame. */
 
 #define AVIIF_NOTIME	0x00000100	/* this frame doesn't take any time */
@@ -826,7 +1109,16 @@
 LONG WINAPI AVIStreamStart(PAVISTREAM iface);
 HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
 HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size);
+HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi, LPCSTR szFile,
+				      DWORD fccType, LONG lParam,
+				      UINT mode, CLSID *pclsidHandler);
+HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM *ppavi, LPCWSTR szFile,
+				      DWORD fccType, LONG lParam,
+				      UINT mode, CLSID *pclsidHandler);
+#define AVIStreamOpenFromFile WINELIB_NAME_AW(AVIStreamOpenFromFile)
 
+#define AVIStreamFormatSize(pavi, lPos, plSize) \
+    AVIStreamReadFormat(pavi, lPos, NULL, plSize) 
 
 /*****************************************************************************
  * IAVIFile interface
@@ -930,48 +1222,56 @@
 HDRAWDIB VFWAPI DrawDibOpen( void );
 UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground);
 
-BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd,
-						 HDC hdc,
-						 INT dxDst,
-						 INT dyDst,
-						 LPBITMAPINFOHEADER lpbi,
-						 INT dxSrc,
-						 INT dySrc,
-						 UINT wFlags);
+BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd, HDC hdc, INT dxDst, INT dyDst,
+			 LPBITMAPINFOHEADER lpbi, INT dxSrc, INT dySrc, UINT wFlags);
 
-BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd,
-						HDC hdc,
-						INT xDst,
-						INT yDst,
-						INT dxDst,
-						INT dyDst,
-						LPBITMAPINFOHEADER lpbi,
-						LPVOID lpBits,
-						INT xSrc,
-						INT ySrc,
-						INT dxSrc,
-						INT dySrc,
-						UINT wFlags);
+BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst,
+			LPBITMAPINFOHEADER lpbi, LPVOID lpBits,	
+			INT xSrc, INT ySrc, INT dxSrc, INT dySrc, UINT wFlags);
 
 /* DrawDibDraw flags */
 
-#define DDF_UPDATE				0x0002
+#define DDF_UPDATE			0x0002
 #define DDF_SAME_HDC			0x0004
 #define DDF_SAME_DRAW			0x0008
 #define DDF_DONTDRAW			0x0010
-#define DDF_ANIMATE				0x0020
-#define DDF_BUFFER				0x0040
+#define DDF_ANIMATE			0x0020
+#define DDF_BUFFER			0x0040
 #define DDF_JUSTDRAWIT			0x0080
 #define DDF_FULLSCREEN			0x0100
 #define DDF_BACKGROUNDPAL		0x0200
 #define DDF_NOTKEYFRAME			0x0400
-#define DDF_HURRYUP				0x0800
+#define DDF_HURRYUP			0x0800
 #define DDF_HALFTONE			0x1000
 
+#define DDF_PREROLL         		DDF_DONTDRAW
+#define DDF_SAME_DIB        		DDF_SAME_DRAW
+#define DDF_SAME_SIZE       		DDF_SAME_DRAW
+
 BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal);
 HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd);
+BOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe);
+LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags);
+
+BOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate);
+BOOL VFWAPI DrawDibStop(HDRAWDIB hdd);
+#define DrawDibUpdate(hdd, hdc, x, y) \
+        DrawDibDraw(hdd, hdc, x, y, 0, 0, NULL, NULL, 0, 0, 0, 0, DDF_UPDATE)
 
 BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd);
 BOOL VFWAPI DrawDibClose(HDRAWDIB hdd);
 
+/* display profiling */
+#define PD_CAN_DRAW_DIB         0x0001
+#define PD_CAN_STRETCHDIB       0x0002
+#define PD_STRETCHDIB_1_1_OK    0x0004
+#define PD_STRETCHDIB_1_2_OK    0x0008
+#define PD_STRETCHDIB_1_N_OK    0x0010
+
+DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi);
+
+#ifdef __cplusplus
+}
+#endif  /* __cplusplus */
+
 #endif /* __WINE_VFW_H */
diff --git a/programs/avitools/icinfo.c b/programs/avitools/icinfo.c
index 7ecdc1a..742c89b 100644
--- a/programs/avitools/icinfo.c
+++ b/programs/avitools/icinfo.c
@@ -1,7 +1,6 @@
 #include <stdio.h>
 #include <string.h>
 #include "windows.h"
-#include "driver.h"
 #include "mmsystem.h"
 #include "vfw.h"
 
diff --git a/windows/driver.c b/windows/driver.c
index c176354..859b6f5 100644
--- a/windows/driver.c
+++ b/windows/driver.c
@@ -14,7 +14,6 @@
 #include "wine/winbase16.h"
 #include "wingdi.h"
 #include "winuser.h"
-#include "driver.h"
 #include "ldt.h"
 #include "module.h"
 #include "mmddk.h"
@@ -637,7 +636,7 @@
  *
  * Creates unique ID for 16 bit drivers.
  */
-static	HDRVR16	DRIVER_CreateDrvr16()
+static	HDRVR16	DRIVER_CreateDrvr16(void)
 {
     static	WORD	DRIVER_hDrvr16Counter = 0;