Fixed return values for some messages in DriverProc (MCI_GETDEVCAPS &
MCI_STATUS) for mciSendString.
diff --git a/multimedia/mcianim.c b/multimedia/mcianim.c
index 898fdf6..74d2c31 100644
--- a/multimedia/mcianim.c
+++ b/multimedia/mcianim.c
@@ -47,7 +47,7 @@
wma->wDevID = modp->wDeviceID;
mciSetDriverData(wma->wDevID, (DWORD)wma);
- modp->wCustomCommandTable = -1;
+ modp->wCustomCommandTable = MCI_NO_COMMAND_TABLE;
modp->wType = MCI_DEVTYPE_SEQUENCER;
return modp->wDeviceID;
}
@@ -165,7 +165,8 @@
LPMCI_GETDEVCAPS_PARMS lpParms)
{
WINE_MCIANIM* wma = ANIM_mciGetOpenDrv(wDevID);
-
+ DWORD ret;
+
TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
@@ -173,47 +174,61 @@
if (dwFlags & MCI_GETDEVCAPS_ITEM) {
TRACE("MCI_GETDEVCAPS_ITEM dwItem=%08lX;\n", lpParms->dwItem);
+
switch(lpParms->dwItem) {
case MCI_GETDEVCAPS_CAN_RECORD:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_AUDIO:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_VIDEO:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_DEVICE_TYPE:
- lpParms->dwReturn = MCI_DEVTYPE_ANIMATION;
+ lpParms->dwReturn = MAKEMCIRESOURCE(MCI_DEVTYPE_ANIMATION, MCI_DEVTYPE_ANIMATION);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_USES_FILES:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_COMPOUND_DEVICE:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_EJECT:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_PLAY:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_SAVE:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
default:
+ FIXME("Unknown capability (%08lx) !\n", lpParms->dwItem);
return MCIERR_UNRECOGNIZED_COMMAND;
}
+ } else {
+ WARN("No GETDEVCAPS_ITEM !\n");
+ return MCIERR_UNRECOGNIZED_COMMAND;
}
TRACE("lpParms->dwReturn=%08lX;\n", lpParms->dwReturn);
- return 0;
+ return ret;
}
/**************************************************************************
* ANIM_CalcTime [internal]
*/
-static DWORD ANIM_CalcTime(WINE_MCIANIM* wma, DWORD dwFormatType, DWORD dwFrame)
+static DWORD ANIM_CalcTime(WINE_MCIANIM* wma, DWORD dwFormatType, DWORD dwFrame, LPDWORD lpRet)
{
DWORD dwTime = 0;
UINT16 wTrack;
@@ -226,6 +241,7 @@
switch (dwFormatType) {
case MCI_FORMAT_MILLISECONDS:
dwTime = dwFrame / ANIMFRAMES_PERSEC * 1000;
+ *lpRet = 0;
TRACE("MILLISECONDS %lu\n", dwTime);
break;
case MCI_FORMAT_MSF:
@@ -234,8 +250,8 @@
wFrames = dwFrame - ANIMFRAMES_PERMIN * wMinutes -
ANIMFRAMES_PERSEC * wSeconds;
dwTime = MCI_MAKE_MSF(wMinutes, wSeconds, wFrames);
- TRACE("MSF %02u:%02u:%02u -> dwTime=%lu\n",
- wMinutes, wSeconds, wFrames, dwTime);
+ TRACE("MSF %02u:%02u:%02u -> dwTime=%lu\n",wMinutes, wSeconds, wFrames, dwTime);
+ *lpRet = MCI_COLONIZED3_RETURN;
break;
default:
/* unknown format ! force TMSF ! ... */
@@ -252,8 +268,8 @@
wFrames = dwFrame - ANIMFRAMES_PERMIN * wMinutes -
ANIMFRAMES_PERSEC * wSeconds;
dwTime = MCI_MAKE_TMSF(wTrack, wMinutes, wSeconds, wFrames);
- TRACE("%02u-%02u:%02u:%02u\n",
- wTrack, wMinutes, wSeconds, wFrames);
+ *lpRet = MCI_COLONIZED4_RETURN;
+ TRACE("%02u-%02u:%02u:%02u\n", wTrack, wMinutes, wSeconds, wFrames);
break;
}
return dwTime;
@@ -302,47 +318,40 @@
return dwFrame;
}
-
/**************************************************************************
* ANIM_mciInfo [internal]
*/
static DWORD ANIM_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS16 lpParms)
{
WINE_MCIANIM* wma = ANIM_mciGetOpenDrv(wDevID);
- DWORD ret = 0;
LPSTR str = 0;
TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);
- if (lpParms == NULL || lpParms->lpstrReturn == NULL) {
- ret = MCIERR_NULL_PARAMETER_BLOCK;
- } else if (wma == NULL) {
- ret = MCIERR_INVALID_DEVICE_ID;
- } else {
- TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
-
- switch(dwFlags) {
- case MCI_INFO_PRODUCT:
- str = "Wine's animation";
- break;
- case MCI_INFO_FILE:
- str = wma->openParms.lpstrElementName;
- break;
- case MCI_ANIM_INFO_TEXT:
- str = "Animation Window";
- break;
- default:
- WARN("Don't know this info command (%lu)\n", dwFlags);
- ret = MCIERR_UNRECOGNIZED_COMMAND;
- }
- }
- if (str) {
- ret = MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str);
- } else {
- lpParms->lpstrReturn[0] = 0;
- }
+ if (lpParms == NULL || lpParms->lpstrReturn == NULL)
+ return MCIERR_NULL_PARAMETER_BLOCK;
+
+ if (wma == NULL)
+ return MCIERR_INVALID_DEVICE_ID;
- return ret;
+ TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
+
+ switch(dwFlags) {
+ case MCI_INFO_PRODUCT:
+ str = "Wine's animation";
+ break;
+ case MCI_INFO_FILE:
+ str = wma->openParms.lpstrElementName;
+ break;
+ case MCI_ANIM_INFO_TEXT:
+ str = "Animation Window";
+ break;
+ default:
+ WARN("Don't know this info command (%lu)\n", dwFlags);
+ return MCIERR_UNRECOGNIZED_COMMAND;
+ }
+
+ return MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str);
}
/**************************************************************************
@@ -351,15 +360,16 @@
static DWORD ANIM_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
{
WINE_MCIANIM* wma = ANIM_mciGetOpenDrv(wDevID);
-
+ DWORD ret;
+
TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_INTERNAL;
if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
if (dwFlags & MCI_NOTIFY) {
- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",
- lpParms->dwCallback);
+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
+
mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
@@ -368,35 +378,33 @@
case MCI_STATUS_CURRENT_TRACK:
lpParms->dwReturn = wma->nCurTrack;
TRACE("CURRENT_TRACK=%lu!\n", lpParms->dwReturn);
- return 0;
+ break;
case MCI_STATUS_LENGTH:
if (dwFlags & MCI_TRACK) {
- TRACE("MCI_TRACK #%lu LENGTH=??? !\n",
- lpParms->dwTrack);
+ TRACE("MCI_TRACK #%lu LENGTH=??? !\n", lpParms->dwTrack);
if (lpParms->dwTrack > wma->nTracks)
return MCIERR_OUTOFRANGE;
lpParms->dwReturn = wma->lpdwTrackLen[lpParms->dwTrack];
}
else
lpParms->dwReturn = wma->dwTotalLen;
- lpParms->dwReturn = ANIM_CalcTime(wma, wma->dwTimeFormat, lpParms->dwReturn);
+ lpParms->dwReturn = ANIM_CalcTime(wma, wma->dwTimeFormat, lpParms->dwReturn, &ret);
TRACE("LENGTH=%lu !\n", lpParms->dwReturn);
- return 0;
+ break;
case MCI_STATUS_MODE:
- lpParms->dwReturn = wma->mode;
- TRACE("MCI_STATUS_MODE=%08lX !\n",
- lpParms->dwReturn);
- return 0;
+ TRACE("MCI_STATUS_MODE=%04X !\n", wma->mode);
+ lpParms->dwReturn = MAKEMCIRESOURCE(wma->mode, wma->mode);
+ ret = MCI_RESOURCE_RETURNED;
+ break;
case MCI_STATUS_MEDIA_PRESENT:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
TRACE("MCI_STATUS_MEDIA_PRESENT !\n");
- return 0;
+ break;
case MCI_STATUS_NUMBER_OF_TRACKS:
lpParms->dwReturn = 1;
- TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu !\n",
- lpParms->dwReturn);
- if (lpParms->dwReturn == (WORD)-1) return MCIERR_INTERNAL;
- return 0;
+ TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu !\n", lpParms->dwReturn);
+ break;
case MCI_STATUS_POSITION:
lpParms->dwReturn = wma->dwCurFrame;
if (dwFlags & MCI_STATUS_START) {
@@ -409,25 +417,29 @@
lpParms->dwReturn = wma->lpdwTrackPos[lpParms->dwTrack - 1];
TRACE("get MCI_TRACK #%lu !\n", lpParms->dwTrack);
}
- lpParms->dwReturn = ANIM_CalcTime(wma, wma->dwTimeFormat, lpParms->dwReturn);
- TRACE("MCI_STATUS_POSITION=%08lX !\n",
- lpParms->dwReturn);
- return 0;
+ lpParms->dwReturn = ANIM_CalcTime(wma, wma->dwTimeFormat, lpParms->dwReturn, &ret);
+ TRACE("MCI_STATUS_POSITION=%08lX !\n", lpParms->dwReturn);
+ break;
case MCI_STATUS_READY:
TRACE("MCI_STATUS_READY !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
return 0;
case MCI_STATUS_TIME_FORMAT:
TRACE("MCI_STATUS_TIME_FORMAT !\n");
- lpParms->dwReturn = MCI_FORMAT_MILLISECONDS;
+ lpParms->dwReturn = MAKEMCIRESOURCE(MCI_FORMAT_MILLISECONDS, MCI_FORMAT_MILLISECONDS);
+ TRACE("MCI_STATUS_TIME_FORMAT => %u\n", LOWORD(lpParms->dwReturn));
+ ret = MCI_RESOURCE_RETURNED;
return 0;
default:
- WARN("Unknown command %08lX !\n", lpParms->dwItem);
+ FIXME("Unknown command %08lX !\n", lpParms->dwItem);
return MCIERR_UNRECOGNIZED_COMMAND;
}
+ } else {
+ WARN("No MCI_STATUS_ITEM !\n");
+ return MCIERR_UNRECOGNIZED_COMMAND;
}
- WARN("Not MCI_STATUS_ITEM !\n");
- return 0;
+ return ret;
}
@@ -478,8 +490,8 @@
wma->mode = MCI_MODE_STOP;
if (dwFlags & MCI_NOTIFY) {
- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",
- lpParms->dwCallback);
+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
+
mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
@@ -497,8 +509,8 @@
if (lpParms == NULL) return MCIERR_INTERNAL;
wma->mode = MCI_MODE_PAUSE;
if (dwFlags & MCI_NOTIFY) {
- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",
- lpParms->dwCallback);
+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
+
mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
@@ -516,8 +528,8 @@
if (lpParms == NULL) return MCIERR_INTERNAL;
wma->mode = MCI_MODE_STOP;
if (dwFlags & MCI_NOTIFY) {
- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",
- lpParms->dwCallback);
+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
+
mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
@@ -537,7 +549,7 @@
if (lpParms == NULL) return MCIERR_INTERNAL;
wma->mode = MCI_MODE_SEEK;
- switch(dwFlags) {
+ switch (dwFlags) {
case MCI_SEEK_TO_START:
PlayParms.dwFrom = 0;
break;
@@ -552,8 +564,8 @@
if (dwRet != 0) return dwRet;
dwRet = ANIM_mciStop(wDevID, MCI_WAIT, (LPMCI_GENERIC_PARMS)&PlayParms);
if (dwFlags & MCI_NOTIFY) {
- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",
- lpParms->dwCallback);
+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
+
mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
@@ -569,6 +581,7 @@
WINE_MCIANIM* wma = ANIM_mciGetOpenDrv(wDevID);
TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);
+
if (lpParms == NULL) return MCIERR_INTERNAL;
if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
/*
@@ -596,8 +609,7 @@
if (dwFlags & MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION;
if (dwFlags & MCI_SET_OFF) return MCIERR_UNSUPPORTED_FUNCTION;
if (dwFlags & MCI_NOTIFY) {
- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",
- lpParms->dwCallback);
+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
@@ -610,7 +622,7 @@
LONG CALLBACK MCIANIM_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,
DWORD dwParam1, DWORD dwParam2)
{
- switch(wMsg) {
+ switch (wMsg) {
case DRV_LOAD: return 1;
case DRV_FREE: return 1;
case DRV_OPEN: return ANIM_drvOpen((LPSTR)dwParam1, (LPMCI_OPEN_DRIVER_PARMSA)dwParam2);
@@ -649,14 +661,14 @@
case MCI_CUT:
case MCI_DELETE:
case MCI_PASTE:
- WARN("Unsupported command=%s\n", MCI_CommandToString(wMsg));
+ FIXME("Unsupported message=%s\n", MCI_MessageToString(wMsg));
break;
case MCI_OPEN:
case MCI_CLOSE:
- FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
+ ERR("Shouldn't receive a MCI_OPEN or CLOSE message\n");
break;
default:
- TRACE("Sending msg=%s to default driver proc\n", MCI_CommandToString(wMsg));
+ TRACE("Sending msg=%s to default driver proc\n", MCI_MessageToString(wMsg));
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
return MCIERR_UNRECOGNIZED_COMMAND;
diff --git a/multimedia/mciavi.c b/multimedia/mciavi.c
index b1cd56b..3aa7d0e 100644
--- a/multimedia/mciavi.c
+++ b/multimedia/mciavi.c
@@ -44,7 +44,7 @@
wma->wDevID = modp->wDeviceID;
mciSetDriverData(wma->wDevID, (DWORD)wma);
- modp->wCustomCommandTable = -1;
+ modp->wCustomCommandTable = MCI_NO_COMMAND_TABLE;
modp->wType = MCI_DEVTYPE_SEQUENCER;
return modp->wDeviceID;
}
@@ -354,7 +354,8 @@
static DWORD AVI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSA lpParms)
{
WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
-
+ DWORD ret = 0;
+
TRACE("(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
@@ -376,12 +377,14 @@
TRACE("MCI_STATUS_LENGTH => %lu\n", lpParms->dwReturn);
break;
case MCI_STATUS_MODE:
- lpParms->dwReturn = wma->wStatus;
- TRACE("MCI_STATUS_MODE => %lu\n", lpParms->dwReturn);
+ lpParms->dwReturn = MAKEMCIRESOURCE(wma->wStatus, wma->wStatus);
+ ret = MCI_RESOURCE_RETURNED;
+ TRACE("MCI_STATUS_MODE => %u\n", LOWORD(lpParms->dwReturn));
break;
case MCI_STATUS_MEDIA_PRESENT:
TRACE("MCI_STATUS_MEDIA_PRESENT => TRUE\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_STATUS_NUMBER_OF_TRACKS:
lpParms->dwReturn = 3;
@@ -394,15 +397,18 @@
(dwFlags & MCI_STATUS_START) ? "start" : "current", lpParms->dwReturn);
break;
case MCI_STATUS_READY:
- lpParms->dwReturn = (wma->wStatus != MCI_MODE_NOT_READY);
- TRACE("MCI_STATUS_READY = %lu\n", lpParms->dwReturn);
+ lpParms->dwReturn = (wma->wStatus == MCI_MODE_NOT_READY) ?
+ MAKEMCIRESOURCE(FALSE, MCI_FALSE) : MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
+ TRACE("MCI_STATUS_READY = %u\n", LOWORD(lpParms->dwReturn));
break;
case MCI_STATUS_TIME_FORMAT:
- lpParms->dwReturn = wma->dwTimeFormat;
- TRACE("MCI_STATUS_TIME_FORMAT => %lu\n", lpParms->dwReturn);
+ lpParms->dwReturn = MAKEMCIRESOURCE(wma->dwTimeFormat, wma->dwTimeFormat);
+ TRACE("MCI_STATUS_TIME_FORMAT => %u\n", LOWORD(lpParms->dwReturn));
+ ret = MCI_RESOURCE_RETURNED;
break;
default:
- WARN("Unknowm command %08lX !\n", lpParms->dwItem);
+ FIXME("Unknowm command %08lX !\n", lpParms->dwItem);
return MCIERR_UNRECOGNIZED_COMMAND;
}
} else {
@@ -415,7 +421,7 @@
wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
- return 0;
+ return ret;
}
/***************************************************************************
@@ -424,7 +430,8 @@
static DWORD AVI_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms)
{
WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
-
+ DWORD ret;
+
TRACE("(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
@@ -434,49 +441,58 @@
switch (lpParms->dwItem) {
case MCI_GETDEVCAPS_DEVICE_TYPE:
TRACE("MCI_GETDEVCAPS_DEVICE_TYPE !\n");
- lpParms->dwReturn = MCI_DEVTYPE_DIGITAL_VIDEO;
+ lpParms->dwReturn = MAKEMCIRESOURCE(MCI_DEVTYPE_DIGITAL_VIDEO, MCI_DEVTYPE_DIGITAL_VIDEO);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_AUDIO:
TRACE("MCI_GETDEVCAPS_HAS_AUDIO !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_VIDEO:
TRACE("MCI_GETDEVCAPS_HAS_VIDEO !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_USES_FILES:
TRACE("MCI_GETDEVCAPS_USES_FILES !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_COMPOUND_DEVICE:
TRACE("MCI_GETDEVCAPS_COMPOUND_DEVICE !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_EJECT:
TRACE("MCI_GETDEVCAPS_CAN_EJECT !\n");
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_PLAY:
TRACE("MCI_GETDEVCAPS_CAN_PLAY !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_RECORD:
TRACE("MCI_GETDEVCAPS_CAN_RECORD !\n");
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_SAVE:
TRACE("MCI_GETDEVCAPS_CAN_SAVE !\n");
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
default:
- TRACE("Unknown capability (%08lx) !\n", lpParms->dwItem);
+ FIXME("Unknown capability (%08lx) !\n", lpParms->dwItem);
return MCIERR_UNRECOGNIZED_COMMAND;
}
} else {
- TRACE("No GetDevCaps-Item !\n");
+ WARN("No GetDevCaps-Item !\n");
return MCIERR_UNRECOGNIZED_COMMAND;
}
- return 0;
+ return ret;
}
/***************************************************************************
@@ -484,45 +500,36 @@
*/
static DWORD AVI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_INFO_PARMSA lpParms)
{
- DWORD ret = 0;
LPSTR str = 0;
WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
TRACE("(%04X, %08lX, %p) : stub;\n", wDevID, dwFlags, lpParms);
- if (lpParms == NULL || lpParms->lpstrReturn == NULL) {
- ret = MCIERR_NULL_PARAMETER_BLOCK;
- } else if (wma == NULL) {
- ret = MCIERR_INVALID_DEVICE_ID;
- } else {
- TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
-
- switch (dwFlags) {
- case MCI_INFO_PRODUCT:
- str = "Wine's AVI player";
- break;
- case MCI_INFO_FILE:
- str = "";
- break;
-#if 0
- /* FIXME: the following manifest constants are not defined in <WINE>/include/mmsystem.h */
- case MCI_INFO_COPYRIGHT:
- break;
- case MCI_INFO_NAME:
- break;
-#endif
- default:
- WARN("Don't know this info command (%lu)\n", dwFlags);
- ret = MCIERR_UNRECOGNIZED_COMMAND;
- }
- }
- if (str) {
- ret = MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str);
- } else {
- lpParms->lpstrReturn[0] = 0;
- }
+ if (lpParms == NULL || lpParms->lpstrReturn == NULL)
+ return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
- return ret;
+ switch (dwFlags) {
+ case MCI_INFO_PRODUCT:
+ str = "Wine's AVI player";
+ break;
+ case MCI_INFO_FILE:
+ str = "";
+ break;
+#if 0
+ /* FIXME: the following manifest constants are not defined in <WINE>/include/mmsystem.h */
+ case MCI_INFO_COPYRIGHT:
+ break;
+ case MCI_INFO_NAME:
+ break;
+#endif
+ default:
+ WARN("Don't know this info command (%lu)\n", dwFlags);
+ return MCIERR_UNRECOGNIZED_COMMAND;
+ }
+ return MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str);
}
/***************************************************************************
@@ -1018,14 +1025,14 @@
case MCI_SPIN:
case MCI_ESCAPE:
- WARN("Unsupported command=%s\n", MCI_CommandToString(wMsg));
+ WARN("Unsupported command=%s\n", MCI_MessageToString(wMsg));
break;
case MCI_OPEN:
case MCI_CLOSE:
FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
break;
default:
- TRACE("Sending msg=%s to default driver proc\n", MCI_CommandToString(wMsg));
+ TRACE("Sending msg=%s to default driver proc\n", MCI_MessageToString(wMsg));
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
return MCIERR_UNRECOGNIZED_COMMAND;
diff --git a/multimedia/mcicda.c b/multimedia/mcicda.c
index cbe38c7..40f1fe5 100644
--- a/multimedia/mcicda.c
+++ b/multimedia/mcicda.c
@@ -40,7 +40,7 @@
wmcda->wDevID = modp->wDeviceID;
mciSetDriverData(wmcda->wDevID, (DWORD)wmcda);
- modp->wCustomCommandTable = -1;
+ modp->wCustomCommandTable = MCI_NO_COMMAND_TABLE;
modp->wType = MCI_DEVTYPE_SEQUENCER;
return modp->wDeviceID;
}
@@ -152,7 +152,7 @@
/**************************************************************************
* CDAUDIO_CalcTime [internal]
*/
-static DWORD CDAUDIO_CalcTime(WINE_MCICDAUDIO* wmcda, DWORD dwFrame)
+static DWORD CDAUDIO_CalcTime(WINE_MCICDAUDIO* wmcda, DWORD dwFrame, LPDWORD lpRet)
{
DWORD dwTime = 0;
UINT16 wTrack;
@@ -166,6 +166,7 @@
case MCI_FORMAT_MILLISECONDS:
dwTime = (dwFrame * 1000) / CDFRAMES_PERSEC;
TRACE("MILLISECONDS %lu\n", dwTime);
+ *lpRet = 0;
break;
case MCI_FORMAT_MSF:
wMinutes = dwFrame / CDFRAMES_PERMIN;
@@ -174,6 +175,7 @@
dwTime = MCI_MAKE_MSF(wMinutes, wSeconds, wFrames);
TRACE("MSF %02u:%02u:%02u -> dwTime=%lu\n",
wMinutes, wSeconds, wFrames, dwTime);
+ *lpRet = MCI_COLONIZED3_RETURN;
break;
case MCI_FORMAT_TMSF:
default:
@@ -189,6 +191,7 @@
wFrames = dwFrame - CDFRAMES_PERMIN * wMinutes - CDFRAMES_PERSEC * wSeconds;
dwTime = MCI_MAKE_TMSF(wTrack, wMinutes, wSeconds, wFrames);
TRACE("%02u-%02u:%02u:%02u\n", wTrack, wMinutes, wSeconds, wFrames);
+ *lpRet = MCI_COLONIZED4_RETURN;
break;
}
return dwTime;
@@ -281,6 +284,8 @@
static DWORD CDAUDIO_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags,
LPMCI_GETDEVCAPS_PARMS lpParms)
{
+ DWORD ret = 0;
+
TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
@@ -288,40 +293,53 @@
if (dwFlags & MCI_GETDEVCAPS_ITEM) {
TRACE("MCI_GETDEVCAPS_ITEM dwItem=%08lX;\n", lpParms->dwItem);
- switch(lpParms->dwItem) {
+ switch (lpParms->dwItem) {
case MCI_GETDEVCAPS_CAN_RECORD:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_AUDIO:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_VIDEO:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_DEVICE_TYPE:
- lpParms->dwReturn = MCI_DEVTYPE_CD_AUDIO;
+ lpParms->dwReturn = MAKEMCIRESOURCE(MCI_DEVTYPE_CD_AUDIO, MCI_DEVTYPE_CD_AUDIO);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_USES_FILES:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_COMPOUND_DEVICE:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_EJECT:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_PLAY:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_SAVE:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
default:
+ ERR("Unsupported %lx devCaps item\n", lpParms->dwItem);
return MCIERR_UNRECOGNIZED_COMMAND;
}
+ } else {
+ TRACE("No GetDevCaps-Item !\n");
+ return MCIERR_UNRECOGNIZED_COMMAND;
}
TRACE("lpParms->dwReturn=%08lX;\n", lpParms->dwReturn);
- return 0;
+ return ret;
}
/**************************************************************************
@@ -329,35 +347,26 @@
*/
static DWORD CDAUDIO_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS16 lpParms)
{
- DWORD ret = 0;
LPSTR str = 0;
WINE_MCICDAUDIO* wmcda = CDAUDIO_mciGetOpenDrv(wDevID);
TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);
- if (lpParms == NULL || lpParms->lpstrReturn == NULL) {
- ret = MCIERR_NULL_PARAMETER_BLOCK;
- } else if (wmcda == NULL) {
- ret = MCIERR_INVALID_DEVICE_ID;
- } else {
- TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
-
- switch(dwFlags) {
- case MCI_INFO_PRODUCT:
- str = "Wine's audio CD";
- break;
- default:
- WARN("Don't know this info command (%lu)\n", dwFlags);
- ret = MCIERR_UNRECOGNIZED_COMMAND;
- }
- }
- if (str) {
- ret = MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str);
- } else {
- lpParms->lpstrReturn[0] = 0;
- }
+ if (lpParms == NULL || lpParms->lpstrReturn == NULL)
+ return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
- return ret;
+ switch(dwFlags) {
+ case MCI_INFO_PRODUCT:
+ str = "Wine's audio CD";
+ break;
+ default:
+ WARN("Don't know this info command (%lu)\n", dwFlags);
+ return MCIERR_UNRECOGNIZED_COMMAND;
+ }
+ return MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str);
}
/**************************************************************************
@@ -370,105 +379,112 @@
TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);
- if (lpParms == NULL) {
- ret = MCIERR_NULL_PARAMETER_BLOCK;
- } else if (wmcda == NULL) {
- ret = MCIERR_INVALID_DEVICE_ID;
- } else {
- if (dwFlags & MCI_NOTIFY) {
- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
- }
- if (dwFlags & MCI_STATUS_ITEM) {
- switch (lpParms->dwItem) {
- case MCI_STATUS_CURRENT_TRACK:
- if (!CDAUDIO_GetCDStatus(&wmcda->wcda)) {
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ if (dwFlags & MCI_NOTIFY) {
+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
+ mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
+ wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ }
+ if (dwFlags & MCI_STATUS_ITEM) {
+ switch (lpParms->dwItem) {
+ case MCI_STATUS_CURRENT_TRACK:
+ if (!CDAUDIO_GetCDStatus(&wmcda->wcda)) {
+ return CDAUDIO_mciGetError(wmcda);
+ }
+ lpParms->dwReturn = wmcda->wcda.nCurTrack;
+ TRACE("CURRENT_TRACK=%lu!\n", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_LENGTH:
+ if (wmcda->wcda.nTracks == 0) {
+ if (!CDAUDIO_GetTracksInfo(&wmcda->wcda)) {
+ WARN("error reading TracksInfo !\n");
return CDAUDIO_mciGetError(wmcda);
}
- lpParms->dwReturn = wmcda->wcda.nCurTrack;
- TRACE("CURRENT_TRACK=%lu!\n", lpParms->dwReturn);
- return 0;
- case MCI_STATUS_LENGTH:
- if (wmcda->wcda.nTracks == 0) {
- if (!CDAUDIO_GetTracksInfo(&wmcda->wcda)) {
- WARN("error reading TracksInfo !\n");
- return CDAUDIO_mciGetError(wmcda);
- }
- }
- if (dwFlags & MCI_TRACK) {
- TRACE("MCI_TRACK #%lu LENGTH=??? !\n", lpParms->dwTrack);
- if (lpParms->dwTrack > wmcda->wcda.nTracks || lpParms->dwTrack == 0)
- return MCIERR_OUTOFRANGE;
- lpParms->dwReturn = wmcda->wcda.lpdwTrackLen[lpParms->dwTrack - 1];
- } else {
- lpParms->dwReturn = wmcda->wcda.dwTotalLen;
- }
- lpParms->dwReturn = CDAUDIO_CalcTime(wmcda, lpParms->dwReturn);
- TRACE("LENGTH=%lu !\n", lpParms->dwReturn);
- return 0;
- case MCI_STATUS_MODE:
- if (!CDAUDIO_GetCDStatus(&wmcda->wcda))
- return CDAUDIO_mciGetError(wmcda);
- lpParms->dwReturn = CDAUDIO_mciMode(wmcda->wcda.cdaMode);
- if (!lpParms->dwReturn) lpParms->dwReturn = wmcda->mciMode;
- TRACE("MCI_STATUS_MODE=%08lX !\n", lpParms->dwReturn);
- return 0;
- case MCI_STATUS_MEDIA_PRESENT:
- if (!CDAUDIO_GetCDStatus(&wmcda->wcda))
- return CDAUDIO_mciGetError(wmcda);
- lpParms->dwReturn = (wmcda->wcda.nTracks > 0) ? TRUE : FALSE;
- TRACE("MCI_STATUS_MEDIA_PRESENT =%s!\n", lpParms->dwReturn ? "Y" : "N");
- return 0;
- case MCI_STATUS_NUMBER_OF_TRACKS:
- lpParms->dwReturn = CDAUDIO_GetNumberOfTracks(&wmcda->wcda);
- TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu !\n", lpParms->dwReturn);
- if (lpParms->dwReturn == (WORD)-1)
- return CDAUDIO_mciGetError(wmcda);
- return 0;
- case MCI_STATUS_POSITION:
- if (!CDAUDIO_GetCDStatus(&wmcda->wcda))
- return CDAUDIO_mciGetError(wmcda);
- lpParms->dwReturn = wmcda->wcda.dwCurFrame;
- if (dwFlags & MCI_STATUS_START) {
- lpParms->dwReturn = wmcda->wcda.dwFirstOffset;
- TRACE("get MCI_STATUS_START !\n");
- }
- if (dwFlags & MCI_TRACK) {
- if (lpParms->dwTrack > wmcda->wcda.nTracks || lpParms->dwTrack == 0)
- return MCIERR_OUTOFRANGE;
- lpParms->dwReturn = wmcda->wcda.lpdwTrackPos[lpParms->dwTrack - 1];
- TRACE("get MCI_TRACK #%lu !\n", lpParms->dwTrack);
- }
- lpParms->dwReturn = CDAUDIO_CalcTime(wmcda, lpParms->dwReturn);
- TRACE("MCI_STATUS_POSITION=%08lX !\n", lpParms->dwReturn);
- return 0;
- case MCI_STATUS_READY:
- TRACE("MCI_STATUS_READY !\n");
- lpParms->dwReturn = (wmcda->wcda.cdaMode != WINE_CDA_DONTKNOW && wmcda->wcda.cdaMode != WINE_CDA_NOTREADY);
- TRACE("MCI_STATUS_READY=%ld!\n", lpParms->dwReturn);
- return 0;
- case MCI_STATUS_TIME_FORMAT:
- lpParms->dwReturn = wmcda->dwTimeFormat;
- TRACE("MCI_STATUS_TIME_FORMAT =%08lx!\n", lpParms->dwReturn);
- return 0;
- case MCI_CDA_STATUS_TYPE_TRACK:
- if (!(dwFlags & MCI_TRACK))
- return MCIERR_MISSING_PARAMETER;
+ }
+ if (dwFlags & MCI_TRACK) {
+ TRACE("MCI_TRACK #%lu LENGTH=??? !\n", lpParms->dwTrack);
if (lpParms->dwTrack > wmcda->wcda.nTracks || lpParms->dwTrack == 0)
return MCIERR_OUTOFRANGE;
+ lpParms->dwReturn = wmcda->wcda.lpdwTrackLen[lpParms->dwTrack - 1];
+ } else {
+ lpParms->dwReturn = wmcda->wcda.dwTotalLen;
+ }
+ lpParms->dwReturn = CDAUDIO_CalcTime(wmcda, lpParms->dwReturn, &ret);
+ TRACE("LENGTH=%lu !\n", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_MODE:
+ if (!CDAUDIO_GetCDStatus(&wmcda->wcda))
+ return CDAUDIO_mciGetError(wmcda);
+ lpParms->dwReturn = CDAUDIO_mciMode(wmcda->wcda.cdaMode);
+ if (!lpParms->dwReturn) lpParms->dwReturn = wmcda->mciMode;
+ TRACE("MCI_STATUS_MODE=%08lX !\n", lpParms->dwReturn);
+ lpParms->dwReturn = MAKEMCIRESOURCE(lpParms->dwReturn, lpParms->dwReturn);
+ ret = MCI_RESOURCE_RETURNED;
+ break;
+ case MCI_STATUS_MEDIA_PRESENT:
+ if (!CDAUDIO_GetCDStatus(&wmcda->wcda))
+ return CDAUDIO_mciGetError(wmcda);
+ lpParms->dwReturn = (wmcda->wcda.nTracks == 0) ?
+ MAKEMCIRESOURCE(FALSE, MCI_FALSE) : MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ TRACE("MCI_STATUS_MEDIA_PRESENT =%s!\n", LOWORD(lpParms->dwReturn) ? "Y" : "N");
+ ret = MCI_RESOURCE_RETURNED;
+ break;
+ case MCI_STATUS_NUMBER_OF_TRACKS:
+ lpParms->dwReturn = CDAUDIO_GetNumberOfTracks(&wmcda->wcda);
+ TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu !\n", lpParms->dwReturn);
+ if (lpParms->dwReturn == (WORD)-1)
+ return CDAUDIO_mciGetError(wmcda);
+ break;
+ case MCI_STATUS_POSITION:
+ if (!CDAUDIO_GetCDStatus(&wmcda->wcda))
+ return CDAUDIO_mciGetError(wmcda);
+ lpParms->dwReturn = wmcda->wcda.dwCurFrame;
+ if (dwFlags & MCI_STATUS_START) {
+ lpParms->dwReturn = wmcda->wcda.dwFirstOffset;
+ TRACE("get MCI_STATUS_START !\n");
+ }
+ if (dwFlags & MCI_TRACK) {
+ if (lpParms->dwTrack > wmcda->wcda.nTracks || lpParms->dwTrack == 0)
+ return MCIERR_OUTOFRANGE;
+ lpParms->dwReturn = wmcda->wcda.lpdwTrackPos[lpParms->dwTrack - 1];
+ TRACE("get MCI_TRACK #%lu !\n", lpParms->dwTrack);
+ }
+ lpParms->dwReturn = CDAUDIO_CalcTime(wmcda, lpParms->dwReturn, &ret);
+ TRACE("MCI_STATUS_POSITION=%08lX !\n", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_READY:
+ TRACE("MCI_STATUS_READY !\n");
+ lpParms->dwReturn = (wmcda->wcda.cdaMode == WINE_CDA_DONTKNOW ||
+ wmcda->wcda.cdaMode == WINE_CDA_NOTREADY) ?
+ MAKEMCIRESOURCE(FALSE, MCI_FALSE) : MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ TRACE("MCI_STATUS_READY=%u!\n", LOWORD(lpParms->dwReturn));
+ ret = MCI_RESOURCE_RETURNED;
+ break;
+ case MCI_STATUS_TIME_FORMAT:
+ lpParms->dwReturn = MAKEMCIRESOURCE(wmcda->dwTimeFormat, wmcda->dwTimeFormat);
+ TRACE("MCI_STATUS_TIME_FORMAT=%08x!\n", LOWORD(lpParms->dwReturn));
+ ret = MCI_RESOURCE_RETURNED;
+ break;
+ case MCI_CDA_STATUS_TYPE_TRACK:
+ if (!(dwFlags & MCI_TRACK))
+ ret = MCIERR_MISSING_PARAMETER;
+ else if (lpParms->dwTrack > wmcda->wcda.nTracks || lpParms->dwTrack == 0)
+ ret = MCIERR_OUTOFRANGE;
+ else
lpParms->dwReturn = (wmcda->wcda.lpbTrackFlags[lpParms->dwTrack - 1] &
CDROM_DATA_TRACK) ? MCI_CDA_TRACK_OTHER : MCI_CDA_TRACK_AUDIO;
- TRACE("MCI_CDA_STATUS_TYPE_TRACK[%ld]=%08lx\n", lpParms->dwTrack, lpParms->dwReturn);
- return 0;
- default:
- WARN("unknown command %08lX !\n", lpParms->dwItem);
- return MCIERR_UNRECOGNIZED_COMMAND;
- }
+ TRACE("MCI_CDA_STATUS_TYPE_TRACK[%ld]=%08lx\n", lpParms->dwTrack, lpParms->dwReturn);
+ break;
+ default:
+ FIXME("unknown command %08lX !\n", lpParms->dwItem);
+ return MCIERR_UNRECOGNIZED_COMMAND;
}
+ } else {
+ WARN("not MCI_STATUS_ITEM !\n");
}
- WARN("not MCI_STATUS_ITEM !\n");
- return 0;
+ return ret;
}
/**************************************************************************
@@ -730,6 +746,7 @@
/* FIXME: I wonder if those two next items are really called ? */
case MCI_SET_DOOR_OPEN: return CDAUDIO_mciSetDoor(dwDevID, TRUE);
case MCI_SET_DOOR_CLOSED: return CDAUDIO_mciSetDoor(dwDevID, FALSE);
+ /* commands that should be supported */
case MCI_LOAD:
case MCI_SAVE:
case MCI_FREEZE:
@@ -738,7 +755,6 @@
case MCI_UNFREEZE:
case MCI_UPDATE:
case MCI_WHERE:
- case MCI_WINDOW:
case MCI_STEP:
case MCI_SPIN:
case MCI_ESCAPE:
@@ -746,14 +762,18 @@
case MCI_CUT:
case MCI_DELETE:
case MCI_PASTE:
- WARN("Unsupported command=%s\n", MCI_CommandToString(wMsg));
+ FIXME("Unsupported yet command=%s\n", MCI_MessageToString(wMsg));
+ break;
+ /* commands that should report an error */
+ case MCI_WINDOW:
+ FIXME("Unsupported command=%s\n", MCI_MessageToString(wMsg));
break;
case MCI_OPEN:
case MCI_CLOSE:
- FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
+ ERR("Shouldn't receive a MCI_OPEN or CLOSE message\n");
break;
default:
- TRACE("Sending msg=%s to default driver proc\n", MCI_CommandToString(wMsg));
+ TRACE("Sending msg=%s to default driver proc\n", MCI_MessageToString(wMsg));
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
return MCIERR_UNRECOGNIZED_COMMAND;
diff --git a/multimedia/mcimidi.c b/multimedia/mcimidi.c
index 5a5c129..540e377 100644
--- a/multimedia/mcimidi.c
+++ b/multimedia/mcimidi.c
@@ -34,7 +34,7 @@
WORD wEventLength; /* current length (event) pointed by dwIndex */
WORD wStatus : 1, /* 1 : playing, 0 : done */
wTrackNr : 7,
- wLastCommand : 8;
+ wLastCommand : 8; /* last MIDI command on track */
} MCI_MIDITRACK;
typedef struct tagWINE_MCIMIDI {
@@ -44,7 +44,7 @@
WORD wNotifyDeviceID; /* MCI device ID with a pending notification */
HANDLE16 hCallback; /* Callback handle for pending notification */
HMMIO hFile; /* mmio file handle open as Element */
- MCI_OPEN_PARMSA openParms;
+ LPCSTR lpstrElementName; /* Name of file */
HLOCAL16 hMidiHdr;
WORD dwStatus; /* one from MCI_MODE_xxxx */
DWORD dwMciTimeFormat; /* One of the supported MCI_FORMAT_xxxx */
@@ -80,7 +80,7 @@
wmm->wDevID = modp->wDeviceID;
mciSetDriverData(wmm->wDevID, (DWORD)wmm);
- modp->wCustomCommandTable = -1;
+ modp->wCustomCommandTable = MCI_NO_COMMAND_TABLE;
modp->wType = MCI_DEVTYPE_SEQUENCER;
return modp->wDeviceID;
}
@@ -619,7 +619,8 @@
}
TRACE("hFile=%u\n", wmm->hFile);
- memcpy(&wmm->openParms, lpParms, sizeof(MCI_OPEN_PARMSA));
+ /* FIXME: should I get a strdup() of it instead? */
+ wmm->lpstrElementName = lpParms->lpstrElementName;
wmm->wNotifyDeviceID = dwDeviceID;
wmm->dwStatus = MCI_MODE_NOT_READY; /* while loading file contents */
@@ -775,7 +776,7 @@
if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID;
if (wmm->hFile == 0) {
- WARN("Can't play: no file '%s' !\n", wmm->openParms.lpstrElementName);
+ WARN("Can't play: no file '%s' !\n", wmm->lpstrElementName);
return MCIERR_FILE_NOT_FOUND;
}
@@ -1063,8 +1064,7 @@
if (wmm == 0) return MCIERR_INVALID_DEVICE_ID;
if (wmm->hFile == 0) {
- WARN("Can't find file='%08lx' !\n",
- (DWORD)wmm->openParms.lpstrElementName);
+ WARN("Can't find file='%s' !\n", wmm->lpstrElementName);
return MCIERR_FILE_NOT_FOUND;
}
start = 1; end = 99999;
@@ -1246,7 +1246,8 @@
static DWORD MIDI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
-
+ DWORD ret = 0;
+
TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
@@ -1272,12 +1273,14 @@
TRACE("MCI_STATUS_LENGTH => %lu\n", lpParms->dwReturn);
break;
case MCI_STATUS_MODE:
- lpParms->dwReturn = wmm->dwStatus;
- TRACE("MCI_STATUS_MODE => %lu\n", lpParms->dwReturn);
+ TRACE("MCI_STATUS_MODE => %u\n", wmm->dwStatus);
+ lpParms->dwReturn = MAKEMCIRESOURCE(wmm->dwStatus, wmm->dwStatus);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_STATUS_MEDIA_PRESENT:
TRACE("MCI_STATUS_MEDIA_PRESENT => TRUE\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_STATUS_NUMBER_OF_TRACKS:
lpParms->dwReturn = (wmm->wFormat == 2) ? wmm->nTracks : 1;
@@ -1291,12 +1294,15 @@
(dwFlags & MCI_STATUS_START) ? "start" : "current", lpParms->dwReturn);
break;
case MCI_STATUS_READY:
- lpParms->dwReturn = (wmm->dwStatus != MCI_MODE_NOT_READY);
- TRACE("MCI_STATUS_READY = %lu\n", lpParms->dwReturn);
+ lpParms->dwReturn = (wmm->dwStatus == MCI_MODE_NOT_READY) ?
+ MAKEMCIRESOURCE(FALSE, MCI_FALSE) : MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
+ TRACE("MCI_STATUS_READY = %u\n", LOWORD(lpParms->dwReturn));
break;
case MCI_STATUS_TIME_FORMAT:
- lpParms->dwReturn = wmm->dwMciTimeFormat;
- TRACE("MCI_STATUS_TIME_FORMAT => %lu\n", lpParms->dwReturn);
+ lpParms->dwReturn = MAKEMCIRESOURCE(wmm->dwMciTimeFormat, wmm->dwMciTimeFormat);
+ TRACE("MCI_STATUS_TIME_FORMAT => %u\n", LOWORD(lpParms->dwReturn));
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_SEQ_STATUS_DIVTYPE:
TRACE("MCI_SEQ_STATUS_DIVTYPE !\n");
@@ -1311,6 +1317,8 @@
} else {
lpParms->dwReturn = MCI_SEQ_DIV_PPQN;
}
+ lpParms->dwReturn = MAKEMCIRESOURCE(lpParms->dwReturn,lpParms->dwReturn);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_SEQ_STATUS_MASTER:
TRACE("MCI_SEQ_STATUS_MASTER !\n");
@@ -1333,7 +1341,7 @@
lpParms->dwReturn = wmm->dwTempo;
break;
default:
- WARN("Unknowm command %08lX !\n", lpParms->dwItem);
+ FIXME("Unknowm command %08lX !\n", lpParms->dwItem);
return MCIERR_UNRECOGNIZED_COMMAND;
}
} else {
@@ -1345,7 +1353,7 @@
mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
- return 0;
+ return ret;
}
/**************************************************************************
@@ -1355,7 +1363,8 @@
LPMCI_GETDEVCAPS_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
-
+ DWORD ret;
+
TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
@@ -1365,49 +1374,58 @@
switch (lpParms->dwItem) {
case MCI_GETDEVCAPS_DEVICE_TYPE:
TRACE("MCI_GETDEVCAPS_DEVICE_TYPE !\n");
- lpParms->dwReturn = MCI_DEVTYPE_SEQUENCER;
+ lpParms->dwReturn = MAKEMCIRESOURCE(MCI_DEVTYPE_SEQUENCER, MCI_DEVTYPE_SEQUENCER);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_AUDIO:
TRACE("MCI_GETDEVCAPS_HAS_AUDIO !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_VIDEO:
TRACE("MCI_GETDEVCAPS_HAS_VIDEO !\n");
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_USES_FILES:
TRACE("MCI_GETDEVCAPS_USES_FILES !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_COMPOUND_DEVICE:
TRACE("MCI_GETDEVCAPS_COMPOUND_DEVICE !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_EJECT:
TRACE("MCI_GETDEVCAPS_CAN_EJECT !\n");
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_PLAY:
TRACE("MCI_GETDEVCAPS_CAN_PLAY !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_RECORD:
TRACE("MCI_GETDEVCAPS_CAN_RECORD !\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_SAVE:
TRACE("MCI_GETDEVCAPS_CAN_SAVE !\n");
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
default:
- TRACE("Unknown capability (%08lx) !\n", lpParms->dwItem);
+ FIXME("Unknown capability (%08lx) !\n", lpParms->dwItem);
return MCIERR_UNRECOGNIZED_COMMAND;
}
} else {
- TRACE("No GetDevCaps-Item !\n");
+ WARN("No GetDevCaps-Item !\n");
return MCIERR_UNRECOGNIZED_COMMAND;
}
- return 0;
+ return ret;
}
/**************************************************************************
@@ -1415,45 +1433,36 @@
*/
static DWORD MIDI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms)
{
- DWORD ret = 0;
- LPSTR str = 0;
+ LPCSTR str = 0;
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);
- if (lpParms == NULL || lpParms->lpstrReturn == NULL) {
- ret = MCIERR_NULL_PARAMETER_BLOCK;
- } else if (wmm == NULL) {
- ret = MCIERR_INVALID_DEVICE_ID;
- } else {
- TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
-
- switch (dwFlags) {
- case MCI_INFO_PRODUCT:
- str = "Wine's MIDI sequencer";
- break;
- case MCI_INFO_FILE:
- str = wmm->openParms.lpstrElementName;
- break;
-#if 0
- /* FIXME: the following manifest constants are not defined in <WINE>/include/mmsystem.h */
- case MCI_INFO_COPYRIGHT:
- break;
- case MCI_INFO_NAME:
- break;
-#endif
- default:
- WARN("Don't know this info command (%lu)\n", dwFlags);
- ret = MCIERR_UNRECOGNIZED_COMMAND;
- }
- }
- if (str) {
- ret = MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str);
- } else {
- lpParms->lpstrReturn[0] = 0;
- }
+ if (lpParms == NULL || lpParms->lpstrReturn == NULL)
+ return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);
- return ret;
+ switch (dwFlags) {
+ case MCI_INFO_PRODUCT:
+ str = "Wine's MIDI sequencer";
+ break;
+ case MCI_INFO_FILE:
+ str = wmm->lpstrElementName;
+ break;
+#if 0
+ /* FIXME: the following manifest constants are not defined in <WINE>/include/mmsystem.h */
+ case MCI_INFO_COPYRIGHT:
+ break;
+ case MCI_INFO_NAME:
+ break;
+#endif
+ default:
+ WARN("Don't know this info command (%lu)\n", dwFlags);
+ return MCIERR_UNRECOGNIZED_COMMAND;
+ }
+ return MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, str);
}
/**************************************************************************
@@ -1546,6 +1555,7 @@
case MCI_INFO:
case MCI_SEEK:
#endif
+ /* commands that should be supported */
case MCI_LOAD:
case MCI_SAVE:
case MCI_FREEZE:
@@ -1554,7 +1564,6 @@
case MCI_UNFREEZE:
case MCI_UPDATE:
case MCI_WHERE:
- case MCI_WINDOW:
case MCI_STEP:
case MCI_SPIN:
case MCI_ESCAPE:
@@ -1562,14 +1571,18 @@
case MCI_CUT:
case MCI_DELETE:
case MCI_PASTE:
- WARN("Unsupported command=%s\n", MCI_CommandToString(wMsg));
+ WARN("Unsupported command=%s\n", MCI_MessageToString(wMsg));
+ break;
+ /* commands that should report an error */
+ case MCI_WINDOW:
+ FIXME("Unsupported command=%s\n", MCI_MessageToString(wMsg));
break;
case MCI_OPEN:
case MCI_CLOSE:
FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
break;
default:
- TRACE("Sending msg=%s to default driver proc\n", MCI_CommandToString(wMsg));
+ TRACE("Sending msg=%s to default driver proc\n", MCI_MessageToString(wMsg));
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
return MCIERR_UNRECOGNIZED_COMMAND;
diff --git a/multimedia/mciwave.c b/multimedia/mciwave.c
index d732e26..408aa8e 100644
--- a/multimedia/mciwave.c
+++ b/multimedia/mciwave.c
@@ -60,7 +60,7 @@
wmw->wDevID = modp->wDeviceID;
mciSetDriverData(wmw->wDevID, (DWORD)wmw);
- modp->wCustomCommandTable = -1;
+ modp->wCustomCommandTable = MCI_NO_COMMAND_TABLE;
modp->wType = MCI_DEVTYPE_WAVEFORM_AUDIO;
return modp->wDeviceID;
}
@@ -94,7 +94,10 @@
return wmw;
}
-static DWORD WAVE_ConvertByteToTimeFormat(WINE_MCIWAVE* wmw, DWORD val)
+/**************************************************************************
+ * WAVE_ConvertByteToTimeFormat [internal]
+ */
+static DWORD WAVE_ConvertByteToTimeFormat(WINE_MCIWAVE* wmw, DWORD val, LPDWORD lpRet)
{
DWORD ret = 0;
@@ -112,9 +115,13 @@
WARN("Bad time format %lu!\n", wmw->dwMciTimeFormat);
}
TRACE("val=%lu=0x%08lx [tf=%lu] => ret=%lu\n", val, val, wmw->dwMciTimeFormat, ret);
+ *lpRet = 0;
return ret;
}
+/**************************************************************************
+ * WAVE_ConvertTimeFormatToByte [internal]
+ */
static DWORD WAVE_ConvertTimeFormatToByte(WINE_MCIWAVE* wmw, DWORD val)
{
DWORD ret = 0;
@@ -136,6 +143,9 @@
return ret;
}
+/**************************************************************************
+ * WAVE_mciReadFmt [internal]
+ */
static DWORD WAVE_mciReadFmt(WINE_MCIWAVE* wmw, MMCKINFO* pckMainRIFF)
{
MMCKINFO mmckInfo;
@@ -741,7 +751,8 @@
static DWORD WAVE_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
{
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
-
+ DWORD ret;
+
TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID;
@@ -754,16 +765,18 @@
break;
case MCI_STATUS_LENGTH:
/* only one track in file is currently handled, so don't take care of MCI_TRACK flag */
- lpParms->dwReturn = WAVE_ConvertByteToTimeFormat(wmw, wmw->dwLength);
+ lpParms->dwReturn = WAVE_ConvertByteToTimeFormat(wmw, wmw->dwLength, &ret);
TRACE("MCI_STATUS_LENGTH => %lu\n", lpParms->dwReturn);
break;
case MCI_STATUS_MODE:
- lpParms->dwReturn = wmw->dwStatus;
- TRACE("MCI_STATUS_MODE => %lu\n", lpParms->dwReturn);
+ TRACE("MCI_STATUS_MODE => %u\n", wmw->dwStatus);
+ lpParms->dwReturn = MAKEMCIRESOURCE(wmw->dwStatus, wmw->dwStatus);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_STATUS_MEDIA_PRESENT:
TRACE("MCI_STATUS_MEDIA_PRESENT => TRUE!\n");
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_STATUS_NUMBER_OF_TRACKS:
/* only one track in file is currently handled, so don't take care of MCI_TRACK flag */
@@ -773,17 +786,21 @@
case MCI_STATUS_POSITION:
/* only one track in file is currently handled, so don't take care of MCI_TRACK flag */
lpParms->dwReturn = WAVE_ConvertByteToTimeFormat(wmw,
- (dwFlags & MCI_STATUS_START) ? 0 : wmw->dwPosition);
+ (dwFlags & MCI_STATUS_START) ? 0 : wmw->dwPosition,
+ &ret);
TRACE("MCI_STATUS_POSITION %s => %lu\n",
(dwFlags & MCI_STATUS_START) ? "start" : "current", lpParms->dwReturn);
break;
case MCI_STATUS_READY:
- lpParms->dwReturn = (wmw->dwStatus != MCI_MODE_NOT_READY);
- TRACE("MCI_STATUS_READY => %lu!\n", lpParms->dwReturn);
+ lpParms->dwReturn = (wmw->dwStatus == MCI_MODE_NOT_READY) ?
+ MAKEMCIRESOURCE(FALSE, MCI_FALSE) : MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ TRACE("MCI_STATUS_READY => %u!\n", LOWORD(lpParms->dwReturn));
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_STATUS_TIME_FORMAT:
- lpParms->dwReturn = wmw->dwMciTimeFormat;
+ lpParms->dwReturn = MAKEMCIRESOURCE(wmw->dwMciTimeFormat, wmw->dwMciTimeFormat);
TRACE("MCI_STATUS_TIME_FORMAT => %lu\n", lpParms->dwReturn);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_WAVE_INPUT:
TRACE("MCI_WAVE_INPUT !\n");
@@ -831,7 +848,7 @@
mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
- return 0;
+ return ret;
}
/**************************************************************************
@@ -841,7 +858,8 @@
LPMCI_GETDEVCAPS_PARMS lpParms)
{
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
-
+ DWORD ret = 0;
+
TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
@@ -850,31 +868,40 @@
if (dwFlags & MCI_GETDEVCAPS_ITEM) {
switch(lpParms->dwItem) {
case MCI_GETDEVCAPS_DEVICE_TYPE:
- lpParms->dwReturn = MCI_DEVTYPE_WAVEFORM_AUDIO;
+ lpParms->dwReturn = MAKEMCIRESOURCE(MCI_DEVTYPE_WAVEFORM_AUDIO, MCI_DEVTYPE_WAVEFORM_AUDIO);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_AUDIO:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_HAS_VIDEO:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_USES_FILES:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_COMPOUND_DEVICE:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_RECORD:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_EJECT:
- lpParms->dwReturn = FALSE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_PLAY:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_SAVE:
- lpParms->dwReturn = TRUE;
+ lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ ret = MCI_RESOURCE_RETURNED;
break;
case MCI_WAVE_GETDEVCAPS_INPUTS:
lpParms->dwReturn = 1;
@@ -883,11 +910,14 @@
lpParms->dwReturn = 1;
break;
default:
- TRACE("Unknown capability (%08lx) !\n", lpParms->dwItem);
+ FIXME("Unknown capability (%08lx) !\n", lpParms->dwItem);
return MCIERR_UNRECOGNIZED_COMMAND;
}
+ } else {
+ WARN("No GetDevCaps-Item !\n");
+ return MCIERR_UNRECOGNIZED_COMMAND;
}
- return 0;
+ return ret;
}
/**************************************************************************
@@ -972,6 +1002,7 @@
case MCI_GETDEVCAPS: return WAVE_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS) dwParam2);
case MCI_INFO: return WAVE_mciInfo (dwDevID, dwParam1, (LPMCI_INFO_PARMS16) dwParam2);
case MCI_SEEK: return WAVE_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2);
+ /* commands that should be supported */
case MCI_LOAD:
case MCI_SAVE:
case MCI_FREEZE:
@@ -980,7 +1011,6 @@
case MCI_UNFREEZE:
case MCI_UPDATE:
case MCI_WHERE:
- case MCI_WINDOW:
case MCI_STEP:
case MCI_SPIN:
case MCI_ESCAPE:
@@ -988,14 +1018,17 @@
case MCI_CUT:
case MCI_DELETE:
case MCI_PASTE:
- WARN("Unsupported command=%s\n", MCI_CommandToString(wMsg));
+ FIXME("Unsupported yet command=%s\n", MCI_MessageToString(wMsg));
+ break;
+ case MCI_WINDOW:
+ TRACE("Unsupported command=%s\n", MCI_MessageToString(wMsg));
break;
case MCI_OPEN:
case MCI_CLOSE:
- FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
+ ERR("Shouldn't receive a MCI_OPEN or CLOSE message\n");
break;
default:
- FIXME("is probably wrong msg=%s\n", MCI_CommandToString(wMsg));
+ FIXME("is probably wrong msg=%s\n", MCI_MessageToString(wMsg));
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
return MCIERR_UNRECOGNIZED_COMMAND;