Added some trace and debug printing.
diff --git a/dlls/winmm/lolvldrv.c b/dlls/winmm/lolvldrv.c
index b8fba4e..26e7c9b 100644
--- a/dlls/winmm/lolvldrv.c
+++ b/dlls/winmm/lolvldrv.c
@@ -221,7 +221,7 @@
TRACE("Calling message(dev=%u msg=%u usr=0x%08lx p1=0x%08lx p2=0x%08lx)\n",
mld->uDeviceID, wMsg, mld->dwDriverInstance, dwParam1, dwParam2);
ret = part->u.fnMessage32(mld->uDeviceID, wMsg, mld->dwDriverInstance, dwParam1, dwParam2);
- TRACE("=> %lu\n", ret);
+ TRACE("=> %s\n", WINMM_ErrorToString(ret));
} else {
map = llType->Map16To32A(wMsg, &mld->dwDriverInstance, &dwParam1, &dwParam2);
switch (map) {
@@ -238,7 +238,7 @@
mld->uDeviceID, wMsg, mld->dwDriverInstance, dwParam1, dwParam2);
ret = part->u.fnMessage32(mld->uDeviceID, wMsg, mld->dwDriverInstance,
dwParam1, dwParam2);
- TRACE("=> %lu\n", ret);
+ TRACE("=> %s\n", WINMM_ErrorToString(ret));
if (map == WINMM_MAP_OKMEM)
llType->UnMap16To32A(wMsg, &mld->dwDriverInstance, &dwParam1, &dwParam2, ret);
break;
@@ -268,7 +268,7 @@
ret = pFnCallMMDrvFunc16((DWORD)part->u.fnMessage16,
mld->uDeviceID, wMsg, mld->dwDriverInstance,
dwParam1, dwParam2);
- TRACE("=> %lu\n", ret);
+ TRACE("=> %s\n", WINMM_ErrorToString(ret));
if (map == WINMM_MAP_OKMEM)
llType->UnMap32ATo16(wMsg, &mld->dwDriverInstance, &dwParam1, &dwParam2, ret);
break;
@@ -283,7 +283,7 @@
ret = pFnCallMMDrvFunc16((DWORD)part->u.fnMessage16,
mld->uDeviceID, wMsg, mld->dwDriverInstance,
dwParam1, dwParam2);
- TRACE("=> %lu\n", ret);
+ TRACE("=> %s\n", WINMM_ErrorToString(ret));
}
}
return ret;
@@ -540,7 +540,7 @@
if (lpDrv->bIs32 && part->u.fnMessage32) {
ret = part->u.fnMessage32(0, DRVM_INIT, 0L, 0L, 0L);
- TRACE("DRVM_INIT => %08lx\n", ret);
+ TRACE("DRVM_INIT => %s\n", WINMM_ErrorToString(ret));
#if 0
ret = part->u.fnMessage32(0, DRVM_ENABLE, 0L, 0L, 0L);
TRACE("DRVM_ENABLE => %08lx\n", ret);
@@ -549,7 +549,7 @@
} else if (!lpDrv->bIs32 && part->u.fnMessage16 && pFnCallMMDrvFunc16) {
ret = pFnCallMMDrvFunc16((DWORD)part->u.fnMessage16,
0, DRVM_INIT, 0L, 0L, 0L);
- TRACE("DRVM_INIT => %08lx\n", ret);
+ TRACE("DRVM_INIT => %s\n", WINMM_ErrorToString(ret));
#if 0
ret = pFnCallMMDrvFunc16((DWORD)part->u.fnMessage16,
0, DRVM_ENABLE, 0L, 0L, 0L);
@@ -795,7 +795,7 @@
TRACE("DRVM_DISABLE => %08lx\n", ret);
#endif
ret = part->u.fnMessage32(0, DRVM_EXIT, 0L, 0L, 0L);
- TRACE("DRVM_EXIT => %08lx\n", ret);
+ TRACE("DRVM_EXIT => %s\n", WINMM_ErrorToString(ret));
} else if (!lpDrv->bIs32 && part->u.fnMessage16 && pFnCallMMDrvFunc16) {
#if 0
ret = pFnCallMMDrvFunc16((DWORD)part->u.fnMessage16,
@@ -804,7 +804,7 @@
#endif
ret = pFnCallMMDrvFunc16((DWORD)part->u.fnMessage16,
0, DRVM_EXIT, 0L, 0L, 0L);
- TRACE("DRVM_EXIT => %08lx\n", ret);
+ TRACE("DRVM_EXIT => %s\n", WINMM_ErrorToString(ret));
} else {
return FALSE;
}
diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h
index 1447cd1..4f42b0e 100644
--- a/dlls/winmm/winemm.h
+++ b/dlls/winmm/winemm.h
@@ -256,6 +256,7 @@
UINT MCI_SetCommandTable(void *table, UINT uDevType);
BOOL WINMM_CheckForMMSystem(void);
+const char* WINMM_ErrorToString(MMRESULT error);
UINT MIXER_Open(LPHMIXER lphMix, UINT uDeviceID, DWORD dwCallback,
DWORD dwInstance, DWORD fdwOpen, BOOL bFrom32);
diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c
index 66a6a4f..9e9365a 100644
--- a/dlls/winmm/winmm.c
+++ b/dlls/winmm/winmm.c
@@ -28,6 +28,7 @@
* 99/9 added support for loadable low level drivers
*/
+#include <stdio.h>
#include <stdarg.h>
#include <string.h>
@@ -135,6 +136,36 @@
return loaded > 0;
}
+/******************************************************************
+ * WINMM_ErrorToString
+ */
+const char* WINMM_ErrorToString(MMRESULT error)
+{
+#define ERR_TO_STR(dev) case dev: return #dev
+ static char unknown[32];
+ switch (error) {
+ ERR_TO_STR(MMSYSERR_NOERROR);
+ ERR_TO_STR(MMSYSERR_ERROR);
+ ERR_TO_STR(MMSYSERR_BADDEVICEID);
+ ERR_TO_STR(MMSYSERR_NOTENABLED);
+ ERR_TO_STR(MMSYSERR_ALLOCATED);
+ ERR_TO_STR(MMSYSERR_INVALHANDLE);
+ ERR_TO_STR(MMSYSERR_NODRIVER);
+ ERR_TO_STR(MMSYSERR_NOMEM);
+ ERR_TO_STR(MMSYSERR_NOTSUPPORTED);
+ ERR_TO_STR(MMSYSERR_BADERRNUM);
+ ERR_TO_STR(MMSYSERR_INVALFLAG);
+ ERR_TO_STR(MMSYSERR_INVALPARAM);
+ ERR_TO_STR(WAVERR_BADFORMAT);
+ ERR_TO_STR(WAVERR_STILLPLAYING);
+ ERR_TO_STR(WAVERR_UNPREPARED);
+ ERR_TO_STR(WAVERR_SYNC);
+ }
+ sprintf(unknown, "Unknown(0x%08x)", error);
+ return unknown;
+#undef ERR_TO_STR
+}
+
/**************************************************************************
* DllMain (WINMM.init)
*
@@ -2469,6 +2500,7 @@
dwRet = MMDRV_Open(wmld, (uType == MMDRV_WAVEOUT) ? WODM_OPEN : WIDM_OPEN,
(DWORD)&wod, dwFlags);
+ TRACE("dwRet = %s\n", WINMM_ErrorToString(dwRet));
if (dwRet != WAVERR_BADFORMAT ||
(dwFlags & (WAVE_MAPPED|WAVE_FORMAT_DIRECT)) != 0) break;
/* if we ask for a format which isn't supported by the physical driver,
@@ -2485,7 +2517,7 @@
}
if (lphndl != NULL) *lphndl = handle;
- TRACE("=> %ld hWave=%p\n", dwRet, handle);
+ TRACE("=> %s hWave=%p\n", WINMM_ErrorToString(dwRet), handle);
return dwRet;
}
@@ -2867,12 +2899,15 @@
if ((wmld = MMDRV_Get(hWaveOut, MMDRV_WAVEOUT, TRUE)) != NULL) {
return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
}
+ WARN("invalid handle\n");
return MMSYSERR_INVALHANDLE;
}
/* from M$ KB */
- if (uMessage < DRVM_IOCTL || (uMessage >= DRVM_IOCTL_LAST && uMessage < DRVM_MAPPER))
+ if (uMessage < DRVM_IOCTL || (uMessage >= DRVM_IOCTL_LAST && uMessage < DRVM_MAPPER)) {
+ WARN("invalid parameter\n");
return MMSYSERR_INVALPARAM;
+ }
return MMDRV_Message(wmld, uMessage, dwParam1, dwParam2, TRUE);
}