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; }