You're right. I should have written MMDRV_PhysicalFeatures.
See attached patch.
ooops, I forgot to submit the fix I had for that back to wine...
This should be a better fix, whithout code duplication
A+
--
Eric Pouech
Name: mm16
ChangeLog: - move usage of 16 bit specific functions (MapSL) in 16 bit code only
License: X11
GenDate: 2003/11/30 19:56:12 UTC
ModifiedFiles: dlls/winmm/lolvldrv.c dlls/winmm/mmsystem.c dlls/winmm/winemm.h dlls/winmm/winmm.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winmm/lolvldrv.c,v
retrieving revision 1.53
diff -u -u -r1.53 lolvldrv.c
--- dlls/winmm/lolvldrv.c 9 Nov 2003 01:19:58 -0000 1.53
+++ dlls/winmm/lolvldrv.c 9 Nov 2003 10:15:24 -0000
@@ -461,25 +461,19 @@
* MMDRV_PhysicalFeatures [internal]
*/
UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD dwParam1,
- DWORD dwParam2, BOOL bFrom32)
+ DWORD dwParam2)
{
WINE_MM_DRIVER* lpDrv = &MMDrvs[mld->mmdIndex];
- TRACE("(%p, %04x, %08lx, %08lx, %d)\n", mld, uMsg, dwParam1, dwParam2, bFrom32);
+ TRACE("(%p, %04x, %08lx, %08lx)\n", mld, uMsg, dwParam1, dwParam2);
/* all those function calls are undocumented */
switch (uMsg) {
case DRV_QUERYDRVENTRY:
- if (bFrom32)
- lstrcpynA((LPSTR)dwParam1, lpDrv->drvname, LOWORD(dwParam2));
- else
- lstrcpynA((LPSTR)MapSL(dwParam1), lpDrv->drvname, LOWORD(dwParam2));
+ lstrcpynA((LPSTR)dwParam1, lpDrv->drvname, LOWORD(dwParam2));
break;
case DRV_QUERYDEVNODE:
- if (bFrom32)
- *(LPDWORD)dwParam1 = 0L; /* should be DevNode */
- else
- *(DWORD*)MapSL(dwParam1) = 0L;
+ *(LPDWORD)dwParam1 = 0L; /* should be DevNode */
break;
case DRV_QUERYNAME:
WARN("NIY QueryName\n");
@@ -496,18 +490,12 @@
case DRVM_MAPPER_PREFERRED_GET:
/* FIXME: get from registry someday */
- if (bFrom32) {
- *((LPDWORD)dwParam1) = -1; /* No preferred device */
- break;
- }
- return MMSYSERR_INVALPARAM;
+ *((LPDWORD)dwParam1) = -1; /* No preferred device */
+ break;
case DRV_QUERYDEVICEINTERFACE:
case DRV_QUERYDEVICEINTERFACESIZE:
- if (bFrom32)
- return MMDRV_Message(mld, uMsg, dwParam1, dwParam2, TRUE);
-
- return MMSYSERR_INVALPARAM;
+ return MMDRV_Message(mld, uMsg, dwParam1, dwParam2, TRUE);
case DRV_QUERYDSOUNDIFACE: /* Wine-specific: Retrieve DirectSound interface */
case DRV_QUERYDSOUNDDESC: /* Wine-specific: Retrieve DirectSound driver description*/
Index: dlls/winmm/mmsystem.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winmm/mmsystem.c,v
retrieving revision 1.101
diff -u -u -r1.101 mmsystem.c
--- dlls/winmm/mmsystem.c 9 Nov 2003 01:19:58 -0000 1.101
+++ dlls/winmm/mmsystem.c 9 Nov 2003 10:15:26 -0000
@@ -1485,7 +1485,9 @@
if ((wmld = MMDRV_Get(HWAVEOUT_32(hWaveOut), MMDRV_WAVEOUT, FALSE)) == NULL) {
if ((wmld = MMDRV_Get(HWAVEOUT_32(hWaveOut), MMDRV_WAVEOUT, TRUE)) != NULL) {
- return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, FALSE);
+ if (uMessage == DRV_QUERYDRVENTRY || uMessage == DRV_QUERYDEVNODE)
+ dwParam1 = (DWORD)MapSL(dwParam1);
+ return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
}
return MMSYSERR_INVALHANDLE;
}
@@ -1726,7 +1728,9 @@
if ((wmld = MMDRV_Get(HWAVEIN_32(hWaveIn), MMDRV_WAVEIN, FALSE)) == NULL) {
if ((wmld = MMDRV_Get(HWAVEIN_32(hWaveIn), MMDRV_WAVEIN, TRUE)) != NULL) {
- return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, FALSE);
+ if (uMessage == DRV_QUERYDRVENTRY || uMessage == DRV_QUERYDEVNODE)
+ dwParam1 = (DWORD)MapSL(dwParam1);
+ return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
}
return MMSYSERR_INVALHANDLE;
}
Index: dlls/winmm/winemm.h
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winmm/winemm.h,v
retrieving revision 1.48
diff -u -u -r1.48 winemm.h
--- dlls/winmm/winemm.h 9 Nov 2003 01:19:58 -0000 1.48
+++ dlls/winmm/winemm.h 9 Nov 2003 10:15:27 -0000
@@ -243,7 +243,7 @@
LPWINE_MLD MMDRV_Get(HANDLE hndl, UINT type, BOOL bCanBeID);
LPWINE_MLD MMDRV_GetRelated(HANDLE hndl, UINT srcType, BOOL bSrcCanBeID, UINT dstTyped);
DWORD MMDRV_Message(LPWINE_MLD mld, WORD wMsg, DWORD dwParam1, DWORD dwParam2, BOOL bFrom32);
-UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD dwParam1, DWORD dwParam2, BOOL bFrom32);
+UINT MMDRV_PhysicalFeatures(LPWINE_MLD mld, UINT uMsg, DWORD dwParam1, DWORD dwParam2);
BOOL MMDRV_Is32(unsigned int);
void MMDRV_InstallMap(unsigned int, MMDRV_MAPFUNC, MMDRV_UNMAPFUNC,
MMDRV_MAPFUNC, MMDRV_UNMAPFUNC, LPDRVCALLBACK);
Index: dlls/winmm/winmm.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winmm/winmm.c,v
retrieving revision 1.25
diff -u -u -r1.25 winmm.c
--- dlls/winmm/winmm.c 26 Nov 2003 03:39:13 -0000 1.25
+++ dlls/winmm/winmm.c 27 Nov 2003 19:32:22 -0000
@@ -1306,7 +1306,7 @@
return 0;
}
if ((wmld = MMDRV_Get(hMidiOut, MMDRV_MIDIOUT, TRUE)) != NULL) {
- return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, TRUE);
+ return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
}
return MMSYSERR_INVALHANDLE;
}
@@ -2619,7 +2619,7 @@
if ((wmld = MMDRV_Get(hWaveOut, MMDRV_WAVEOUT, FALSE)) == NULL) {
if ((wmld = MMDRV_Get(hWaveOut, MMDRV_WAVEOUT, TRUE)) != NULL) {
- return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, TRUE);
+ return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
}
return MMSYSERR_INVALHANDLE;
}
@@ -2877,7 +2877,7 @@
if ((wmld = MMDRV_Get(hWaveIn, MMDRV_WAVEIN, FALSE)) == NULL) {
if ((wmld = MMDRV_Get(hWaveIn, MMDRV_WAVEIN, TRUE)) != NULL) {
- return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2, TRUE);
+ return MMDRV_PhysicalFeatures(wmld, uMessage, dwParam1, dwParam2);
}
return MMSYSERR_INVALHANDLE;
}