Make it (almost) 32 bit only.
Reflected creation of WINEOSS module.

diff --git a/multimedia/audio.c b/multimedia/audio.c
index f11dc74..2f69653 100644
--- a/multimedia/audio.c
+++ b/multimedia/audio.c
@@ -97,7 +97,7 @@
 typedef struct {
     int				unixdev;
     volatile int		state;
-    DWORD			dwFragmentSize;	/* OpenSound '/dev/dsp' give us that size */
+    DWORD			dwFragmentSize;		/* OpenSound '/dev/dsp' give us that size */
     WAVEOPENDESC		waveDesc;
     WORD			wFlags;
     PCMWAVEFORMAT		format;
@@ -115,8 +115,8 @@
 /**************************************************************************
  * 			WAVE_NotifyClient			[internal]
  */
-static DWORD WAVE_NotifyClient(UINT16 wDevID, WORD wMsg, 
-			       DWORD dwParam1, DWORD dwParam2)
+static DWORD WAVE_NotifyClient(UINT wDevID, WORD wMsg, DWORD dwParam1, 
+			       DWORD dwParam2)
 {
     TRACE("wDevID = %04X wMsg = %d dwParm1 = %04lX dwParam2 = %04lX\n",wDevID, wMsg, dwParam1, dwParam2);
     
@@ -127,13 +127,13 @@
 	if (wDevID > MAX_WAVEOUTDRV) return MCIERR_INTERNAL;
 	
 	if (WOutDev[wDevID].wFlags != DCB_NULL && 
-	    !DriverCallback16(WOutDev[wDevID].waveDesc.dwCallBack, 
-			      WOutDev[wDevID].wFlags, 
-			      WOutDev[wDevID].waveDesc.hWave, 
-			      wMsg, 
-			      WOutDev[wDevID].waveDesc.dwInstance, 
-			      dwParam1, 
-			      dwParam2)) {
+	    !DriverCallback(WOutDev[wDevID].waveDesc.dwCallback, 
+			    WOutDev[wDevID].wFlags, 
+			    WOutDev[wDevID].waveDesc.hWave, 
+			    wMsg, 
+			    WOutDev[wDevID].waveDesc.dwInstance, 
+			    dwParam1, 
+			    dwParam2)) {
 	    WARN("can't notify client !\n");
 	    return MMSYSERR_NOERROR;
 	}
@@ -145,13 +145,13 @@
 	if (wDevID > MAX_WAVEINDRV) return MCIERR_INTERNAL;
 	
 	if (WInDev[wDevID].wFlags != DCB_NULL && 
-	    !DriverCallback16(WInDev[wDevID].waveDesc.dwCallBack, 
-			      WInDev[wDevID].wFlags, 
-			      WInDev[wDevID].waveDesc.hWave, 
-			      wMsg, 
-			      WInDev[wDevID].waveDesc.dwInstance, 
-			      dwParam1, 
-			      dwParam2)) {
+	    !DriverCallback(WInDev[wDevID].waveDesc.dwCallback, 
+			    WInDev[wDevID].wFlags, 
+			    WInDev[wDevID].waveDesc.hWave, 
+			    wMsg, 
+			    WInDev[wDevID].waveDesc.dwInstance, 
+			    dwParam1, 
+			    dwParam2)) {
 	    WARN("can't notify client !\n");
 	    return MMSYSERR_NOERROR;
 	}
@@ -440,7 +440,7 @@
 /**************************************************************************
  * 			wodGetDevCaps				[internal]
  */
-static DWORD wodGetDevCaps(WORD wDevID, LPWAVEOUTCAPS16 lpCaps, DWORD dwSize)
+static DWORD wodGetDevCaps(WORD wDevID, LPWAVEOUTCAPSA lpCaps, DWORD dwSize)
 {
     int 	audio;
     int		smplrate;
@@ -552,7 +552,7 @@
     int			dsp_stereo;
     int			audio_fragment;
     int			fragment_size;
-    WAVEOUTCAPS16 	woc;
+    WAVEOUTCAPSA 	woc;
 
     TRACE("(%u, %p, %08lX);\n", wDevID, lpDesc, dwFlags);
     if (lpDesc == NULL) {
@@ -575,8 +575,12 @@
 	return WAVERR_BADFORMAT;
     }
 
-    if (dwFlags & WAVE_FORMAT_QUERY)
+    if (dwFlags & WAVE_FORMAT_QUERY) {
+	TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n", 
+	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
+	     lpDesc->lpFormat->nSamplesPerSec);
 	return MMSYSERR_NOERROR;
+    }
 
     WOutDev[wDevID].unixdev = 0;
     if (access(SOUND_DEV, 0) != 0) 
@@ -606,7 +610,7 @@
     audio_fragment = 0x000F000A;
     sample_size = WOutDev[wDevID].format.wBitsPerSample;
     sample_rate = WOutDev[wDevID].format.wf.nSamplesPerSec;
-    dsp_stereo = (WOutDev[wDevID].format.wf.nChannels > 1) ? TRUE : FALSE;
+    dsp_stereo = (WOutDev[wDevID].format.wf.nChannels > 1) ? 1 : 0;
 
     IOCTL(audio, SNDCTL_DSP_SETFRAGMENT, audio_fragment);
     /* First size and stereo then samplerate */
@@ -614,6 +618,17 @@
     IOCTL(audio, SNDCTL_DSP_STEREO, dsp_stereo);
     IOCTL(audio, SNDCTL_DSP_SPEED, sample_rate);
 
+    /* paranoid checks */
+    if (sample_size != WOutDev[wDevID].format.wBitsPerSample)
+	ERR("Can't set sample_size to %u (%d)\n", 
+	    WOutDev[wDevID].format.wBitsPerSample, sample_size);
+    if (dsp_stereo != (WOutDev[wDevID].format.wf.nChannels > 1) ? 1 : 0) 
+	ERR("Can't set stereo to %u (%d)\n", 
+	    (WOutDev[wDevID].format.wf.nChannels > 1) ? 1 : 0, dsp_stereo);
+    if (sample_rate != WOutDev[wDevID].format.wf.nSamplesPerSec)
+	ERR("Can't set sample_rate to %lu (%d)\n", 
+	    WOutDev[wDevID].format.wf.nSamplesPerSec, sample_rate);
+
     /* even if we set fragment size above, read it again, just in case */
     IOCTL(audio, SNDCTL_DSP_GETBLKSIZE, fragment_size);
 
@@ -628,9 +643,10 @@
     TRACE("fd=%d fragmentSize=%ld\n", 
 	  WOutDev[wDevID].unixdev, WOutDev[wDevID].dwFragmentSize);
 
-    TRACE("wBitsPerSample=%u, nAvgBytesPerSec=%lu, nSamplesPerSec=%lu, nChannels=%u !\n", 
+    TRACE("wBitsPerSample=%u, nAvgBytesPerSec=%lu, nSamplesPerSec=%lu, nChannels=%u nBlockAlign=%u!\n", 
 	  WOutDev[wDevID].format.wBitsPerSample, WOutDev[wDevID].format.wf.nAvgBytesPerSec, 
-	  WOutDev[wDevID].format.wf.nSamplesPerSec, WOutDev[wDevID].format.wf.nChannels);
+	  WOutDev[wDevID].format.wf.nSamplesPerSec, WOutDev[wDevID].format.wf.nChannels,
+	  WOutDev[wDevID].format.wf.nBlockAlign);
     
     if (WAVE_NotifyClient(wDevID, WOM_OPEN, 0L, 0L) != MMSYSERR_NOERROR) {
 	WARN("can't notify client !\n");
@@ -811,7 +827,7 @@
 /**************************************************************************
  * 				wodGetPosition			[internal]
  */
-static DWORD wodGetPosition(WORD wDevID, LPMMTIME16 lpTime, DWORD uSize)
+static DWORD wodGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize)
 {
     int		time;
     DWORD	val;
@@ -944,25 +960,30 @@
 }
 
 /**************************************************************************
- * 				wodMessage			[sample driver]
+ * 				OSS_wodMessage		[sample driver]
  */
-DWORD WINAPI wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
-			DWORD dwParam1, DWORD dwParam2)
+DWORD WINAPI OSS_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, 
+			    DWORD dwParam1, DWORD dwParam2)
 {
     TRACE("(%u, %04X, %08lX, %08lX, %08lX);\n",
 	  wDevID, wMsg, dwUser, dwParam1, dwParam2);
     
     switch (wMsg) {
+    case DRVM_INIT:
+    case DRVM_EXIT:
+    case DRVM_ENABLE:
+    case DRVM_DISABLE:
+	/* FIXME: Pretend this is supported */
+	return 0;
     case WODM_OPEN:	 	return wodOpen		(wDevID, (LPWAVEOPENDESC)dwParam1,	dwParam2);
     case WODM_CLOSE:	 	return wodClose		(wDevID);
     case WODM_WRITE:	 	return wodWrite		(wDevID, (LPWAVEHDR)dwParam1,		dwParam2);
     case WODM_PAUSE:	 	return wodPause		(wDevID);
-	/*    case WODM_STOP:	 	*/
-    case WODM_GETPOS:	 	return wodGetPosition	(wDevID, (LPMMTIME16)dwParam1, 		dwParam2);
+    case WODM_GETPOS:	 	return wodGetPosition	(wDevID, (LPMMTIME)dwParam1, 		dwParam2);
     case WODM_BREAKLOOP: 	return MMSYSERR_NOTSUPPORTED;
     case WODM_PREPARE:	 	return wodPrepare	(wDevID, (LPWAVEHDR)dwParam1, 		dwParam2);
     case WODM_UNPREPARE: 	return wodUnprepare	(wDevID, (LPWAVEHDR)dwParam1, 		dwParam2);
-    case WODM_GETDEVCAPS:	return wodGetDevCaps	(wDevID, (LPWAVEOUTCAPS16)dwParam1,	dwParam2);
+    case WODM_GETDEVCAPS:	return wodGetDevCaps	(wDevID, (LPWAVEOUTCAPSA)dwParam1,	dwParam2);
     case WODM_GETNUMDEVS:	return wodGetNumDevs	();
     case WODM_GETPITCH:	 	return MMSYSERR_NOTSUPPORTED;
     case WODM_SETPITCH:	 	return MMSYSERR_NOTSUPPORTED;
@@ -985,9 +1006,9 @@
 /**************************************************************************
  * 			widGetDevCaps				[internal]
  */
-static DWORD widGetDevCaps(WORD wDevID, LPWAVEINCAPS16 lpCaps, DWORD dwSize)
+static DWORD widGetDevCaps(WORD wDevID, LPWAVEINCAPSA lpCaps, DWORD dwSize)
 {
-    int 	audio,smplrate,samplesize=16,dsp_stereo=1,bytespersmpl;
+    int 	audio, smplrate, samplesize=16, dsp_stereo=1, bytespersmpl;
     
     TRACE("(%u, %p, %lu);\n", wDevID, lpCaps, dwSize);
     if (lpCaps == NULL) return MMSYSERR_NOTENABLED;
@@ -1049,7 +1070,7 @@
  */
 static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
 {
-    int 		audio,abuf_size,smplrate,samplesize,dsp_stereo;
+    int 		audio, abuf_size, smplrate, samplesize, dsp_stereo;
     LPWAVEFORMAT	lpFormat;
     
     TRACE("(%u, %p, %08lX);\n", wDevID, lpDesc, dwFlags);
@@ -1061,6 +1082,24 @@
 	TRACE("MAX_WAVINDRV reached !\n");
 	return MMSYSERR_ALLOCATED;
     }
+
+    /* only PCM format is supported so far... */
+    if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
+	lpDesc->lpFormat->nChannels == 0 ||
+	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n", 
+	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
+	     lpDesc->lpFormat->nSamplesPerSec);
+	return WAVERR_BADFORMAT;
+    }
+
+    if (dwFlags & WAVE_FORMAT_QUERY) {
+	TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n", 
+	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
+	     lpDesc->lpFormat->nSamplesPerSec);
+	return MMSYSERR_NOERROR;
+    }
+
     WInDev[wDevID].unixdev = 0;
     if (access(SOUND_DEV,0) != 0) return MMSYSERR_NOTENABLED;
     audio = open(SOUND_DEV, O_RDONLY, 0);
@@ -1087,11 +1126,7 @@
     WInDev[wDevID].dwTotalRecorded = 0;
     memcpy(&WInDev[wDevID].waveDesc, lpDesc, sizeof(WAVEOPENDESC));
     lpFormat = (LPWAVEFORMAT) lpDesc->lpFormat; 
-    if (lpFormat->wFormatTag != WAVE_FORMAT_PCM) {
-	WARN("Bad format %04X !\n",
-	     lpFormat->wFormatTag);
-	return WAVERR_BADFORMAT;
-    }
+
     memcpy(&WInDev[wDevID].format, lpFormat, sizeof(PCMWAVEFORMAT));
     WInDev[wDevID].format.wBitsPerSample = 8; /* <-------------- */
     if (WInDev[wDevID].format.wf.nChannels == 0) return WAVERR_BADFORMAT;
@@ -1306,7 +1341,7 @@
 /**************************************************************************
  * 				widGetPosition			[internal]
  */
-static DWORD widGetPosition(WORD wDevID, LPMMTIME16 lpTime, DWORD uSize)
+static DWORD widGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize)
 {
     int		time;
     
@@ -1359,23 +1394,29 @@
 }
 
 /**************************************************************************
- * 				widMessage			[sample driver]
+ * 				OSS_widMessage			[sample driver]
  */
-DWORD WINAPI widMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
-			DWORD dwParam1, DWORD dwParam2)
+DWORD WINAPI OSS_widMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
+			    DWORD dwParam1, DWORD dwParam2)
 {
     TRACE("(%u, %04X, %08lX, %08lX, %08lX);\n",
 	  wDevID, wMsg, dwUser, dwParam1, dwParam2);
 
     switch (wMsg) {
+    case DRVM_INIT:
+    case DRVM_EXIT:
+    case DRVM_ENABLE:
+    case DRVM_DISABLE:
+	/* FIXME: Pretend this is supported */
+	return 0;
     case WIDM_OPEN:		return widOpen(wDevID, (LPWAVEOPENDESC)dwParam1, dwParam2);
     case WIDM_CLOSE:		return widClose(wDevID);
     case WIDM_ADDBUFFER:	return widAddBuffer(wDevID, (LPWAVEHDR)dwParam1, dwParam2);
     case WIDM_PREPARE:		return widPrepare(wDevID, (LPWAVEHDR)dwParam1, dwParam2);
     case WIDM_UNPREPARE:	return widUnprepare(wDevID, (LPWAVEHDR)dwParam1, dwParam2);
-    case WIDM_GETDEVCAPS:	return widGetDevCaps(wDevID, (LPWAVEINCAPS16)dwParam1,dwParam2);
+    case WIDM_GETDEVCAPS:	return widGetDevCaps(wDevID, (LPWAVEINCAPSA)dwParam1, dwParam2);
     case WIDM_GETNUMDEVS:	return wodGetNumDevs();	/* same number of devices in output as in input */
-    case WIDM_GETPOS:		return widGetPosition(wDevID, (LPMMTIME16)dwParam1, dwParam2);
+    case WIDM_GETPOS:		return widGetPosition(wDevID, (LPMMTIME)dwParam1, dwParam2);
     case WIDM_RESET:		return widReset(wDevID);
     case WIDM_START:		return widStart(wDevID);
     case WIDM_STOP:		return widStop(wDevID);
@@ -1385,42 +1426,13 @@
     return MMSYSERR_NOTSUPPORTED;
 }
 
-/*======================================================================*
- *              Low level WAVE implemantation - DriverProc		*
- *======================================================================*/
-
-/**************************************************************************
- * 				WAVE_DriverProc			[sample driver]
- */
-LONG CALLBACK	WAVE_DriverProc(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
-				DWORD dwParam1, DWORD dwParam2)
-{
-    TRACE("(%08lX, %04X, %08lX, %08lX, %08lX)\n", dwDevID, hDriv, wMsg, dwParam1, dwParam2);
-    switch (wMsg) {
-    case DRV_LOAD:		return 1;
-    case DRV_FREE:		return 1;
-    case DRV_OPEN:		return 1;
-    case DRV_CLOSE:		return 1;
-    case DRV_ENABLE:		return 1;
-    case DRV_DISABLE:		return 1;
-    case DRV_QUERYCONFIGURE:	return 1;
-    case DRV_CONFIGURE:		MessageBoxA(0, "Sample MultiMedia Linux Driver !", "MMLinux Driver", MB_OK);	return 1;
-    case DRV_INSTALL:		return DRVCNF_RESTART;
-    case DRV_REMOVE:		return DRVCNF_RESTART;
-    default:
-	FIXME("is probably wrong msg=0x%04lx\n", wMsg);
-	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
-    }
-    return MMSYSERR_NOTENABLED;
-}
-
 #else /* !HAVE_OSS */
 
 /**************************************************************************
  * 				wodMessage			[sample driver]
  */
-DWORD WINAPI wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
-			DWORD dwParam1, DWORD dwParam2)
+DWORD WINAPI OSS_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
+			    DWORD dwParam1, DWORD dwParam2)
 {
     FIXME("(%u, %04X, %08lX, %08lX, %08lX):stub\n", wDevID, wMsg, dwUser, dwParam1, dwParam2);
     return MMSYSERR_NOTENABLED;
@@ -1429,19 +1441,11 @@
 /**************************************************************************
  * 				widMessage			[sample driver]
  */
-DWORD WINAPI widMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
-			DWORD dwParam1, DWORD dwParam2)
+DWORD WINAPI OSS_widMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
+			    DWORD dwParam1, DWORD dwParam2)
 {
     FIXME("(%u, %04X, %08lX, %08lX, %08lX):stub\n", wDevID, wMsg, dwUser, dwParam1, dwParam2);
     return MMSYSERR_NOTENABLED;
 }
 
-/**************************************************************************
- * 				WAVE_DriverProc			[sample driver]
- */
-LONG CALLBACK	WAVE_DriverProc(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg, 
-				DWORD dwParam1, DWORD dwParam2)
-{
-    return MMSYSERR_NOTENABLED;
-}
 #endif /* HAVE_OSS */
diff --git a/multimedia/mixer.c b/multimedia/mixer.c
index e6602e7..43b7cfc 100644
--- a/multimedia/mixer.c
+++ b/multimedia/mixer.c
@@ -505,16 +505,22 @@
 #endif /* HAVE_OSS */
 
 /**************************************************************************
- * 				mixMessage			[sample driver]
+ * 				OSS_mixMessage		[sample driver]
  */
-DWORD WINAPI mixMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
-			DWORD dwParam1, DWORD dwParam2)
+DWORD WINAPI OSS_mixMessage(UINT wDevID, UINT wMsg, DWORD dwUser, 
+			    DWORD dwParam1, DWORD dwParam2)
 {
     TRACE("(%04X, %04X, %08lX, %08lX, %08lX);\n", 
 	  wDevID, wMsg, dwUser, dwParam1, dwParam2);
     
 #ifdef HAVE_OSS
     switch(wMsg) {
+    case DRVM_INIT:
+    case DRVM_EXIT:
+    case DRVM_ENABLE:
+    case DRVM_DISABLE:
+	/* FIXME: Pretend this is supported */
+	return 0;
     case MXDM_GETDEVCAPS:	
 	return MIX_GetDevCaps(wDevID, (LPMIXERCAPSA)dwParam1, dwParam2);
     case MXDM_GETLINEINFO:
diff --git a/multimedia/mmaux.c b/multimedia/mmaux.c
index 589edbd..6e87663 100644
--- a/multimedia/mmaux.c
+++ b/multimedia/mmaux.c
@@ -1,3 +1,4 @@
+/* -*- tab-width: 8; c-basic-offset: 4 -*- */
 /*
  * Sample AUXILARY Wine Driver
  *
@@ -15,13 +16,12 @@
 #include "driver.h"
 #include "mmddk.h"
 #include "oss.h"
-
 #include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(mmaux)
-
+    
 #define MIXER_DEV "/dev/mixer"
-
+    
 static int	NumDev = 6;
 
 /*-----------------------------------------------------------------------*/
@@ -30,70 +30,70 @@
 /**************************************************************************
  * 				AUX_GetDevCaps			[internal]
  */
-static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPS16 lpCaps, DWORD dwSize)
+static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPSA lpCaps, DWORD dwSize)
 {
 #ifdef HAVE_OSS
-	int 	mixer,volume;
-	
-	TRACE("(%04X, %p, %lu);\n", wDevID, lpCaps, dwSize);
-	if (lpCaps == NULL) return MMSYSERR_NOTENABLED;
-	if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
-		WARN("mixer device not available !\n");
-		return MMSYSERR_NOTENABLED;
-	}
-	if (ioctl(mixer, SOUND_MIXER_READ_LINE, &volume) == -1) {
-		close(mixer);
-		WARN("unable read mixer !\n");
-		return MMSYSERR_NOTENABLED;
-	}
-	close(mixer);
-#ifdef EMULATE_SB16
-	lpCaps->wMid = 0x0002;
-	lpCaps->vDriverVersion = 0x0200;
-	lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME;
-	switch (wDevID) {
-	case 0:
-		lpCaps->wPid = 0x0196;
-		strcpy(lpCaps->szPname, "SB16 Aux: Wave");
-		lpCaps->wTechnology = AUXCAPS_AUXIN;
-		break;
-	case 1:
-		lpCaps->wPid = 0x0197;
-		strcpy(lpCaps->szPname, "SB16 Aux: Midi Synth");
-		lpCaps->wTechnology = AUXCAPS_AUXIN;
-		break;
-	case 2:
-		lpCaps->wPid = 0x0191;
-		strcpy(lpCaps->szPname, "SB16 Aux: CD");
-		lpCaps->wTechnology = AUXCAPS_CDAUDIO;
-		break;
-	case 3:
-		lpCaps->wPid = 0x0192;
-		strcpy(lpCaps->szPname, "SB16 Aux: Line-In");
-		lpCaps->wTechnology = AUXCAPS_AUXIN;
-		break;
-	case 4:
-		lpCaps->wPid = 0x0193;
-		strcpy(lpCaps->szPname, "SB16 Aux: Mic");
-		lpCaps->wTechnology = AUXCAPS_AUXIN;
-		break;
-	case 5:
-		lpCaps->wPid = 0x0194;
-		strcpy(lpCaps->szPname, "SB16 Aux: Master");
-		lpCaps->wTechnology = AUXCAPS_AUXIN;
-		break;
-	}
-#else
-	lpCaps->wMid = 0xAA;
-	lpCaps->wPid = 0x55;
-	lpCaps->vDriverVersion = 0x0100;
-	strcpy(lpCaps->szPname, "Generic Linux Auxiliary Driver");
-	lpCaps->wTechnology = AUXCAPS_CDAUDIO;
-	lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME;
-#endif
-	return MMSYSERR_NOERROR;
-#else
+    int 	mixer,volume;
+    
+    TRACE("(%04X, %p, %lu);\n", wDevID, lpCaps, dwSize);
+    if (lpCaps == NULL) return MMSYSERR_NOTENABLED;
+    if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
+	WARN("mixer device not available !\n");
 	return MMSYSERR_NOTENABLED;
+    }
+    if (ioctl(mixer, SOUND_MIXER_READ_LINE, &volume) == -1) {
+	close(mixer);
+	WARN("unable read mixer !\n");
+	return MMSYSERR_NOTENABLED;
+    }
+    close(mixer);
+#ifdef EMULATE_SB16
+    lpCaps->wMid = 0x0002;
+    lpCaps->vDriverVersion = 0x0200;
+    lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME;
+    switch (wDevID) {
+    case 0:
+	lpCaps->wPid = 0x0196;
+	strcpy(lpCaps->szPname, "SB16 Aux: Wave");
+	lpCaps->wTechnology = AUXCAPS_AUXIN;
+	break;
+    case 1:
+	lpCaps->wPid = 0x0197;
+	strcpy(lpCaps->szPname, "SB16 Aux: Midi Synth");
+	lpCaps->wTechnology = AUXCAPS_AUXIN;
+	break;
+    case 2:
+	lpCaps->wPid = 0x0191;
+	strcpy(lpCaps->szPname, "SB16 Aux: CD");
+	lpCaps->wTechnology = AUXCAPS_CDAUDIO;
+	break;
+    case 3:
+	lpCaps->wPid = 0x0192;
+	strcpy(lpCaps->szPname, "SB16 Aux: Line-In");
+	lpCaps->wTechnology = AUXCAPS_AUXIN;
+	break;
+    case 4:
+	lpCaps->wPid = 0x0193;
+	strcpy(lpCaps->szPname, "SB16 Aux: Mic");
+	lpCaps->wTechnology = AUXCAPS_AUXIN;
+	break;
+    case 5:
+	lpCaps->wPid = 0x0194;
+	strcpy(lpCaps->szPname, "SB16 Aux: Master");
+	lpCaps->wTechnology = AUXCAPS_AUXIN;
+	break;
+    }
+#else
+    lpCaps->wMid = 0xAA;
+    lpCaps->wPid = 0x55;
+    lpCaps->vDriverVersion = 0x0100;
+    strcpy(lpCaps->szPname, "Generic Linux Auxiliary Driver");
+    lpCaps->wTechnology = AUXCAPS_CDAUDIO;
+    lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME;
+#endif
+    return MMSYSERR_NOERROR;
+#else
+    return MMSYSERR_NOTENABLED;
 #endif
 }
 
@@ -104,55 +104,55 @@
 static DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol)
 {
 #ifdef HAVE_OSS
-	int 	mixer, volume, left, right, cmd;
-	
-	TRACE("(%04X, %p);\n", wDevID, lpdwVol);
-	if (lpdwVol == NULL) return MMSYSERR_NOTENABLED;
-	if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
-		WARN("mixer device not available !\n");
-		return MMSYSERR_NOTENABLED;
-	}
-	switch(wDevID) {
-	case 0:
-		TRACE("SOUND_MIXER_READ_PCM !\n");
-		cmd = SOUND_MIXER_READ_PCM;
-		break;
-	case 1:
-		TRACE("SOUND_MIXER_READ_SYNTH !\n");
-		cmd = SOUND_MIXER_READ_SYNTH;
-		break;
-	case 2:
-		TRACE("SOUND_MIXER_READ_CD !\n");
-		cmd = SOUND_MIXER_READ_CD;
-		break;
-	case 3:
-		TRACE("SOUND_MIXER_READ_LINE !\n");
-		cmd = SOUND_MIXER_READ_LINE;
-		break;
-	case 4:
-		TRACE("SOUND_MIXER_READ_MIC !\n");
-		cmd = SOUND_MIXER_READ_MIC;
-		break;
-	case 5:
-		TRACE("SOUND_MIXER_READ_VOLUME !\n");
-		cmd = SOUND_MIXER_READ_VOLUME;
-		break;
-	default:
-		WARN("invalid device id=%04X !\n", wDevID);
-		return MMSYSERR_NOTENABLED;
-	}
-	if (ioctl(mixer, cmd, &volume) == -1) {
-		WARN("unable read mixer !\n");
-		return MMSYSERR_NOTENABLED;
-	}
-	close(mixer);
-	left  = LOBYTE(LOWORD(volume));
-	right = HIBYTE(LOWORD(volume));
-	TRACE("left=%d right=%d !\n", left, right);
-	*lpdwVol = MAKELONG((left * 0xFFFFL) / 100, (right * 0xFFFFL) / 100);
-	return MMSYSERR_NOERROR;
-#else
+    int 	mixer, volume, left, right, cmd;
+    
+    TRACE("(%04X, %p);\n", wDevID, lpdwVol);
+    if (lpdwVol == NULL) return MMSYSERR_NOTENABLED;
+    if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
+	WARN("mixer device not available !\n");
 	return MMSYSERR_NOTENABLED;
+    }
+    switch(wDevID) {
+    case 0:
+	TRACE("SOUND_MIXER_READ_PCM !\n");
+	cmd = SOUND_MIXER_READ_PCM;
+	break;
+    case 1:
+	TRACE("SOUND_MIXER_READ_SYNTH !\n");
+	cmd = SOUND_MIXER_READ_SYNTH;
+	break;
+    case 2:
+	TRACE("SOUND_MIXER_READ_CD !\n");
+	cmd = SOUND_MIXER_READ_CD;
+	break;
+    case 3:
+	TRACE("SOUND_MIXER_READ_LINE !\n");
+	cmd = SOUND_MIXER_READ_LINE;
+	break;
+    case 4:
+	TRACE("SOUND_MIXER_READ_MIC !\n");
+	cmd = SOUND_MIXER_READ_MIC;
+	break;
+    case 5:
+	TRACE("SOUND_MIXER_READ_VOLUME !\n");
+	cmd = SOUND_MIXER_READ_VOLUME;
+	break;
+    default:
+	WARN("invalid device id=%04X !\n", wDevID);
+	return MMSYSERR_NOTENABLED;
+    }
+    if (ioctl(mixer, cmd, &volume) == -1) {
+	WARN("unable read mixer !\n");
+	return MMSYSERR_NOTENABLED;
+    }
+    close(mixer);
+    left  = LOBYTE(LOWORD(volume));
+    right = HIBYTE(LOWORD(volume));
+    TRACE("left=%d right=%d !\n", left, right);
+    *lpdwVol = MAKELONG((left * 0xFFFFL) / 100, (right * 0xFFFFL) / 100);
+    return MMSYSERR_NOERROR;
+#else
+    return MMSYSERR_NOTENABLED;
 #endif
 }
 
@@ -162,82 +162,88 @@
 static DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam)
 {
 #ifdef HAVE_OSS
-	int 		mixer;
-	int		volume, left, right;
-	int		cmd;
-
-	TRACE("(%04X, %08lX);\n", wDevID, dwParam);
-
-	left   = (LOWORD(dwParam) * 100) >> 16;
-	right  = (HIWORD(dwParam) * 100) >> 16;
-	volume = (right << 8) | left;
-
-	if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
-		WARN("mixer device not available !\n");
-		return MMSYSERR_NOTENABLED;
-	}
-
-	switch(wDevID) {
-	case 0:
-		TRACE("SOUND_MIXER_WRITE_PCM !\n");
-		cmd = SOUND_MIXER_WRITE_PCM;
-		break;
-	case 1:
-		TRACE("SOUND_MIXER_WRITE_SYNTH !\n");
-		cmd = SOUND_MIXER_WRITE_SYNTH;
-		break;
-	case 2:
-		TRACE("SOUND_MIXER_WRITE_CD !\n");
-		cmd = SOUND_MIXER_WRITE_CD;
-		break;
-	case 3:
-		TRACE("SOUND_MIXER_WRITE_LINE !\n");
-		cmd = SOUND_MIXER_WRITE_LINE;
-		break;
-	case 4:
-		TRACE("SOUND_MIXER_WRITE_MIC !\n");
-		cmd = SOUND_MIXER_WRITE_MIC;
-		break;
-	case 5:
-		TRACE("SOUND_MIXER_WRITE_VOLUME !\n");
-		cmd = SOUND_MIXER_WRITE_VOLUME;
-		break;
-	default:
-		WARN("invalid device id=%04X !\n", wDevID);
-		return MMSYSERR_NOTENABLED;
-	}
-	if (ioctl(mixer, cmd, &volume) == -1) {
-		WARN("unable set mixer !\n");
-		return MMSYSERR_NOTENABLED;
-	}
-	close(mixer);
-	return MMSYSERR_NOERROR;
-#else
+    int 		mixer;
+    int		volume, left, right;
+    int		cmd;
+    
+    TRACE("(%04X, %08lX);\n", wDevID, dwParam);
+    
+    left   = (LOWORD(dwParam) * 100) >> 16;
+    right  = (HIWORD(dwParam) * 100) >> 16;
+    volume = (right << 8) | left;
+    
+    if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
+	WARN("mixer device not available !\n");
 	return MMSYSERR_NOTENABLED;
+    }
+    
+    switch(wDevID) {
+    case 0:
+	TRACE("SOUND_MIXER_WRITE_PCM !\n");
+	cmd = SOUND_MIXER_WRITE_PCM;
+	break;
+    case 1:
+	TRACE("SOUND_MIXER_WRITE_SYNTH !\n");
+	cmd = SOUND_MIXER_WRITE_SYNTH;
+	break;
+    case 2:
+	TRACE("SOUND_MIXER_WRITE_CD !\n");
+	cmd = SOUND_MIXER_WRITE_CD;
+	break;
+    case 3:
+	TRACE("SOUND_MIXER_WRITE_LINE !\n");
+	cmd = SOUND_MIXER_WRITE_LINE;
+	break;
+    case 4:
+	TRACE("SOUND_MIXER_WRITE_MIC !\n");
+	cmd = SOUND_MIXER_WRITE_MIC;
+	break;
+    case 5:
+	TRACE("SOUND_MIXER_WRITE_VOLUME !\n");
+	cmd = SOUND_MIXER_WRITE_VOLUME;
+	break;
+    default:
+	WARN("invalid device id=%04X !\n", wDevID);
+	return MMSYSERR_NOTENABLED;
+    }
+    if (ioctl(mixer, cmd, &volume) == -1) {
+	WARN("unable set mixer !\n");
+	return MMSYSERR_NOTENABLED;
+    }
+    close(mixer);
+    return MMSYSERR_NOERROR;
+#else
+    return MMSYSERR_NOTENABLED;
 #endif
 }
 
 
 /**************************************************************************
- * 				auxMessage			[sample driver]
+ *		OSS_auxMessage				[sample driver]
  */
-DWORD WINAPI auxMessage(WORD wDevID, WORD wMsg, DWORD dwUser, 
-								DWORD dwParam1, DWORD dwParam2)
+DWORD WINAPI OSS_auxMessage(UINT wDevID, UINT wMsg, DWORD dwUser, 
+			    DWORD dwParam1, DWORD dwParam2)
 {
-	TRACE("(%04X, %04X, %08lX, %08lX, %08lX);\n", 
-			wDevID, wMsg, dwUser, dwParam1, dwParam2);
-	switch(wMsg) {
-	case AUXDM_GETDEVCAPS:
-		return AUX_GetDevCaps(wDevID,(LPAUXCAPS16)dwParam1,dwParam2);
-	case AUXDM_GETNUMDEVS:
-		TRACE("return %d;\n", NumDev);
-		return NumDev;
-	case AUXDM_GETVOLUME:
-		return AUX_GetVolume(wDevID,(LPDWORD)dwParam1);
-	case AUXDM_SETVOLUME:
-		return AUX_SetVolume(wDevID,dwParam1);
-	default:
-		WARN("unknown message !\n");
-	}
-	return MMSYSERR_NOTSUPPORTED;
+    TRACE("(%04X, %04X, %08lX, %08lX, %08lX);\n", 
+	  wDevID, wMsg, dwUser, dwParam1, dwParam2);
+    switch(wMsg) {
+    case DRVM_INIT:
+    case DRVM_EXIT:
+    case DRVM_ENABLE:
+    case DRVM_DISABLE:
+	/* FIXME: Pretend this is supported */
+	return 0;
+    case AUXDM_GETDEVCAPS:
+	return AUX_GetDevCaps(wDevID, (LPAUXCAPSA)dwParam1,dwParam2);
+    case AUXDM_GETNUMDEVS:
+	TRACE("return %d;\n", NumDev);
+	return NumDev;
+    case AUXDM_GETVOLUME:
+	return AUX_GetVolume(wDevID, (LPDWORD)dwParam1);
+    case AUXDM_SETVOLUME:
+	return AUX_SetVolume(wDevID, dwParam1);
+    default:
+	WARN("unknown message !\n");
+    }
+    return MMSYSERR_NOTSUPPORTED;
 }