mirror of
https://github.com/reactos/wine.git
synced 2025-02-10 14:23:52 +00:00
mcicda: Fix several return codes.
This commit is contained in:
parent
70c5893212
commit
4bb42e2886
@ -147,7 +147,6 @@ static DWORD CALLBACK MCICDA_playLoop(void *ptr)
|
||||
* signaled by the next command that has MCI_NOTIFY set (or
|
||||
* MCI_NOTIFY_ABORTED for MCI_PLAY). */
|
||||
|
||||
ExitThread(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -279,6 +278,7 @@ static int MCICDA_GetError(WINE_MCICDAUDIO* wmcda)
|
||||
switch (GetLastError())
|
||||
{
|
||||
case ERROR_NOT_READY: return MCIERR_DEVICE_NOT_READY;
|
||||
case ERROR_NOT_SUPPORTED:
|
||||
case ERROR_IO_DEVICE: return MCIERR_HARDWARE;
|
||||
default:
|
||||
FIXME("Unknown mode %u\n", GetLastError());
|
||||
@ -564,12 +564,12 @@ static DWORD MCICDA_GetDevCaps(UINT wDevID, DWORD dwFlags,
|
||||
ret = MCI_RESOURCE_RETURNED;
|
||||
break;
|
||||
default:
|
||||
ERR("Unsupported %x devCaps item\n", lpParms->dwItem);
|
||||
return MCIERR_UNRECOGNIZED_COMMAND;
|
||||
WARN("Unsupported %x devCaps item\n", lpParms->dwItem);
|
||||
return MCIERR_UNSUPPORTED_FUNCTION;
|
||||
}
|
||||
} else {
|
||||
TRACE("No GetDevCaps-Item !\n");
|
||||
return MCIERR_UNRECOGNIZED_COMMAND;
|
||||
return MCIERR_MISSING_PARAMETER;
|
||||
}
|
||||
TRACE("lpParms->dwReturn=%08X;\n", lpParms->dwReturn);
|
||||
if (dwFlags & MCI_NOTIFY) {
|
||||
@ -647,7 +647,7 @@ static DWORD MCICDA_Info(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSW lpParms)
|
||||
str = buffer;
|
||||
} else {
|
||||
WARN("Don't know this info command (%u)\n", dwFlags);
|
||||
ret = MCIERR_UNRECOGNIZED_COMMAND;
|
||||
ret = MCIERR_MISSING_PARAMETER;
|
||||
}
|
||||
if (str) {
|
||||
if (lpParms->dwRetSize <= strlenW(str)) {
|
||||
@ -692,6 +692,7 @@ static DWORD MCICDA_Status(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParm
|
||||
&data, sizeof(data), &br, NULL))
|
||||
{
|
||||
return MCICDA_GetError(wmcda);
|
||||
/* alt. data.CurrentPosition.TrackNumber = 1; -- what native yields */
|
||||
}
|
||||
lpParms->dwReturn = data.CurrentPosition.TrackNumber;
|
||||
TRACE("CURRENT_TRACK=%lu\n", lpParms->dwReturn);
|
||||
@ -750,7 +751,8 @@ static DWORD MCICDA_Status(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParm
|
||||
return MCICDA_GetError(wmcda);
|
||||
break;
|
||||
case MCI_STATUS_POSITION:
|
||||
if (dwFlags & MCI_STATUS_START) {
|
||||
switch (dwFlags & (MCI_STATUS_START | MCI_TRACK)) {
|
||||
case MCI_STATUS_START:
|
||||
if (!DeviceIoControl(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
|
||||
&toc, sizeof(toc), &br, NULL)) {
|
||||
WARN("error reading TOC !\n");
|
||||
@ -758,7 +760,8 @@ static DWORD MCICDA_Status(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParm
|
||||
}
|
||||
lpParms->dwReturn = FRAME_OF_TOC(toc, toc.FirstTrack);
|
||||
TRACE("get MCI_STATUS_START !\n");
|
||||
} else if (dwFlags & MCI_TRACK) {
|
||||
break;
|
||||
case MCI_TRACK:
|
||||
if (!DeviceIoControl(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
|
||||
&toc, sizeof(toc), &br, NULL)) {
|
||||
WARN("error reading TOC !\n");
|
||||
@ -768,13 +771,17 @@ static DWORD MCICDA_Status(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParm
|
||||
return MCIERR_OUTOFRANGE;
|
||||
lpParms->dwReturn = FRAME_OF_TOC(toc, lpParms->dwTrack);
|
||||
TRACE("get MCI_TRACK #%u !\n", lpParms->dwTrack);
|
||||
} else {
|
||||
break;
|
||||
case 0:
|
||||
fmt.Format = IOCTL_CDROM_CURRENT_POSITION;
|
||||
if (!DeviceIoControl(wmcda->handle, IOCTL_CDROM_READ_Q_CHANNEL, &fmt, sizeof(fmt),
|
||||
&data, sizeof(data), &br, NULL)) {
|
||||
return MCICDA_GetError(wmcda);
|
||||
}
|
||||
lpParms->dwReturn = FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress);
|
||||
break;
|
||||
default:
|
||||
return MCIERR_FLAGS_NOT_COMPATIBLE;
|
||||
}
|
||||
lpParms->dwReturn = MCICDA_CalcTime(wmcda, wmcda->dwTimeFormat, lpParms->dwReturn, &ret);
|
||||
TRACE("MCI_STATUS_POSITION=%08lX\n", lpParms->dwReturn);
|
||||
@ -814,16 +821,15 @@ static DWORD MCICDA_Status(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParm
|
||||
else
|
||||
lpParms->dwReturn = (toc.TrackData[lpParms->dwTrack - toc.FirstTrack].Control & 0x04) ?
|
||||
MCI_CDA_TRACK_OTHER : MCI_CDA_TRACK_AUDIO;
|
||||
/* FIXME: MAKEMCIRESOURCE "audio" | "other", localised */
|
||||
}
|
||||
TRACE("MCI_CDA_STATUS_TYPE_TRACK[%d]=%ld\n", lpParms->dwTrack, lpParms->dwReturn);
|
||||
break;
|
||||
default:
|
||||
FIXME("unknown command %08X !\n", lpParms->dwItem);
|
||||
return MCIERR_UNRECOGNIZED_COMMAND;
|
||||
return MCIERR_UNSUPPORTED_FUNCTION;
|
||||
}
|
||||
} else {
|
||||
WARN("not MCI_STATUS_ITEM !\n");
|
||||
}
|
||||
} else return MCIERR_MISSING_PARAMETER;
|
||||
if ((dwFlags & MCI_NOTIFY) && HRESULT_CODE(ret)==0)
|
||||
MCICDA_Notify(lpParms->dwCallback, wmcda, MCI_NOTIFY_SUCCESSFUL);
|
||||
return ret;
|
||||
@ -908,10 +914,13 @@ static DWORD MCICDA_Play(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
|
||||
}
|
||||
if (dwFlags & MCI_TO) {
|
||||
end = MCICDA_CalcFrame(wmcda, lpParms->dwTo);
|
||||
if ( (ret=MCICDA_SkipDataTracks(wmcda, &end)) )
|
||||
return ret;
|
||||
TRACE("MCI_TO=%08X -> %u\n", lpParms->dwTo, end);
|
||||
} else {
|
||||
end = FRAME_OF_TOC(toc, toc.LastTrack + 1) - 1;
|
||||
}
|
||||
if (end < start) return MCIERR_OUTOFRANGE;
|
||||
TRACE("Playing from %u to %u\n", start, end);
|
||||
|
||||
oldcb = InterlockedExchangePointer(&wmcda->hCallback,
|
||||
@ -1141,7 +1150,7 @@ static DWORD MCICDA_Seek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
|
||||
DWORD at;
|
||||
WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID);
|
||||
CDROM_SEEK_AUDIO_MSF seek;
|
||||
DWORD br, ret;
|
||||
DWORD br, position, ret;
|
||||
CDROM_TOC toc;
|
||||
|
||||
TRACE("(%04X, %08X, %p);\n", wDevID, dwFlags, lpParms);
|
||||
@ -1149,12 +1158,16 @@ static DWORD MCICDA_Seek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
|
||||
if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID;
|
||||
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
|
||||
|
||||
position = dwFlags & (MCI_SEEK_TO_START|MCI_SEEK_TO_END|MCI_TO);
|
||||
if (!position) return MCIERR_MISSING_PARAMETER;
|
||||
if (position&(position-1)) return MCIERR_FLAGS_NOT_COMPATIBLE;
|
||||
|
||||
if (!DeviceIoControl(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
|
||||
&toc, sizeof(toc), &br, NULL)) {
|
||||
WARN("error reading TOC !\n");
|
||||
return MCICDA_GetError(wmcda);
|
||||
}
|
||||
switch (dwFlags & ~(MCI_NOTIFY|MCI_WAIT)) {
|
||||
switch (position) {
|
||||
case MCI_SEEK_TO_START:
|
||||
TRACE("Seeking to start\n");
|
||||
at = FRAME_OF_TOC(toc,toc.FirstTrack);
|
||||
@ -1174,9 +1187,7 @@ static DWORD MCICDA_Seek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
|
||||
return ret;
|
||||
break;
|
||||
default:
|
||||
TRACE("Unknown seek action %08lX\n",
|
||||
(dwFlags & ~(MCI_NOTIFY|MCI_WAIT)));
|
||||
return MCIERR_UNSUPPORTED_FUNCTION;
|
||||
return MCIERR_FLAGS_NOT_COMPATIBLE;
|
||||
}
|
||||
|
||||
if (wmcda->hThread != 0) {
|
||||
@ -1241,7 +1252,6 @@ static DWORD MCICDA_Set(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
|
||||
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
|
||||
/*
|
||||
TRACE("dwTimeFormat=%08lX\n", lpParms->dwTimeFormat);
|
||||
TRACE("dwAudio=%08lX\n", lpParms->dwAudio);
|
||||
*/
|
||||
if (dwFlags & MCI_SET_TIME_FORMAT) {
|
||||
switch (lpParms->dwTimeFormat) {
|
||||
@ -1255,14 +1265,12 @@ static DWORD MCICDA_Set(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
|
||||
TRACE("MCI_FORMAT_TMSF !\n");
|
||||
break;
|
||||
default:
|
||||
WARN("bad time format !\n");
|
||||
return MCIERR_BAD_TIME_FORMAT;
|
||||
}
|
||||
wmcda->dwTimeFormat = lpParms->dwTimeFormat;
|
||||
}
|
||||
if (dwFlags & MCI_SET_VIDEO) return MCIERR_UNSUPPORTED_FUNCTION;
|
||||
if (dwFlags & MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION;
|
||||
if (dwFlags & MCI_SET_OFF) return MCIERR_UNSUPPORTED_FUNCTION;
|
||||
if (dwFlags & MCI_SET_AUDIO) /* one xp machine ignored it */
|
||||
TRACE("SET_AUDIO %X %x\n", dwFlags, lpParms->dwAudio);
|
||||
|
||||
if (dwFlags & MCI_NOTIFY)
|
||||
MCICDA_Notify(lpParms->dwCallback, wmcda, MCI_NOTIFY_SUCCESSFUL);
|
||||
@ -1304,10 +1312,11 @@ LRESULT CALLBACK MCICDA_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
|
||||
case MCI_SEEK: return MCICDA_Seek(dwDevID, dwParam1, (LPMCI_SEEK_PARMS)dwParam2);
|
||||
/* commands that should report an error as they are not supported in
|
||||
* the native version */
|
||||
case MCI_SET_DOOR_CLOSED:
|
||||
case MCI_SET_DOOR_OPEN:
|
||||
case MCI_RECORD:
|
||||
case MCI_LOAD:
|
||||
case MCI_SAVE:
|
||||
return MCIERR_UNSUPPORTED_FUNCTION;
|
||||
case MCI_BREAK:
|
||||
case MCI_FREEZE:
|
||||
case MCI_PUT:
|
||||
case MCI_REALIZE:
|
||||
|
Loading…
x
Reference in New Issue
Block a user