* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-//#include <config.h>
+#include "config.h"
#include <stdarg.h>
-//#include <stdio.h>
-//#include <string.h>
+#include <stdio.h>
+#include <string.h>
#define WIN32_NO_STATUS
-#define _INC_WINDOWS
-#define COM_NO_WINDOWS_H
-#include <windef.h>
-//#include "winbase.h"
-//#include "wingdi.h"
-#include <winuser.h>
-#include <wownt32.h>
-#include <mmddk.h>
-#include <winioctl.h>
-#include <ntddcdrm.h>
-//#include "winternl.h"
-#include <wine/debug.h>
-#include <wine/unicode.h>
-#include <dsound.h>
+#include "windef.h"
+#include "winbase.h"
+#include "wingdi.h"
+#include "winuser.h"
+#include "wownt32.h"
+#include "mmddk.h"
+#include "winioctl.h"
+#include "ntddcdrm.h"
+#include "wine/winternl.h"
+#include "wine/debug.h"
+#include "wine/unicode.h"
+#include "dsound.h"
WINE_DEFAULT_DEBUG_CHANNEL(mcicda);
mciDriverNotify(HWND_32(LOWORD(hWndCallBack)), wDevID, wStatus);
}
+/**************************************************************************
+ * MCICDA_ReadTOC [internal]
+ */
+static BOOL MCICDA_ReadTOC(WINE_MCICDAUDIO* wmcda, CDROM_TOC *toc, DWORD *br)
+{
+ if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0, toc, sizeof(*toc), br, NULL)) {
+ WARN("error reading TOC !\n");
+ return FALSE;
+ }
+ return TRUE;
+}
+
/**************************************************************************
* MCICDA_GetStatus [internal]
*/
TRACE("CURRENT_TRACK=%lu\n", lpParms->dwReturn);
break;
case MCI_STATUS_LENGTH:
- if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
- &toc, sizeof(toc), &br, NULL)) {
- WARN("error reading TOC !\n");
+ if (!MCICDA_ReadTOC(wmcda, &toc, &br))
return MCICDA_GetError(wmcda);
- }
+
if (dwFlags & MCI_TRACK) {
TRACE("MCI_TRACK #%u LENGTH=??? !\n", lpParms->dwTrack);
if (lpParms->dwTrack < toc.FirstTrack || lpParms->dwTrack > toc.LastTrack)
ret = MCI_RESOURCE_RETURNED;
break;
case MCI_STATUS_NUMBER_OF_TRACKS:
- if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
- &toc, sizeof(toc), &br, NULL)) {
- WARN("error reading TOC !\n");
+ if (!MCICDA_ReadTOC(wmcda, &toc, &br))
return MCICDA_GetError(wmcda);
- }
+
lpParms->dwReturn = toc.LastTrack - toc.FirstTrack + 1;
TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu\n", lpParms->dwReturn);
if (lpParms->dwReturn == (WORD)-1)
case MCI_STATUS_POSITION:
switch (dwFlags & (MCI_STATUS_START | MCI_TRACK)) {
case MCI_STATUS_START:
- if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
- &toc, sizeof(toc), &br, NULL)) {
- WARN("error reading TOC !\n");
+ if (!MCICDA_ReadTOC(wmcda, &toc, &br))
return MCICDA_GetError(wmcda);
- }
+
lpParms->dwReturn = FRAME_OF_TOC(toc, toc.FirstTrack);
TRACE("get MCI_STATUS_START !\n");
break;
case MCI_TRACK:
- if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
- &toc, sizeof(toc), &br, NULL)) {
- WARN("error reading TOC !\n");
+ if (!MCICDA_ReadTOC(wmcda, &toc, &br))
return MCICDA_GetError(wmcda);
- }
+
if (lpParms->dwTrack < toc.FirstTrack || lpParms->dwTrack > toc.LastTrack)
return MCIERR_OUTOFRANGE;
lpParms->dwReturn = FRAME_OF_TOC(toc, lpParms->dwTrack);
if (!(dwFlags & MCI_TRACK))
ret = MCIERR_MISSING_PARAMETER;
else {
- if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
- &toc, sizeof(toc), &br, NULL)) {
- WARN("error reading TOC !\n");
+ if (!MCICDA_ReadTOC(wmcda, &toc, &br))
return MCICDA_GetError(wmcda);
- }
+
if (lpParms->dwTrack < toc.FirstTrack || lpParms->dwTrack > toc.LastTrack)
ret = MCIERR_OUTOFRANGE;
else
int i;
DWORD br;
CDROM_TOC toc;
- if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
- &toc, sizeof(toc), &br, NULL)) {
- WARN("error reading TOC !\n");
+ if (!MCICDA_ReadTOC(wmcda, &toc, &br))
return MCICDA_GetError(wmcda);
- }
+
if (*frame < FRAME_OF_TOC(toc,toc.FirstTrack) ||
*frame >= FRAME_OF_TOC(toc,toc.LastTrack+1)) /* lead-out */
return MCIERR_OUTOFRANGE;
if (wmcda == NULL)
return MCIERR_INVALID_DEVICE_ID;
- if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
- &toc, sizeof(toc), &br, NULL)) {
- WARN("error reading TOC !\n");
+ if (!MCICDA_ReadTOC(wmcda, &toc, &br))
return MCICDA_GetError(wmcda);
- }
if (dwFlags & MCI_FROM) {
start = MCICDA_CalcFrame(wmcda, lpParms->dwFrom);
* then only checks the position flags, then stops and seeks. */
MCICDA_Stop(wDevID, MCI_WAIT, 0);
- if (!device_io(wmcda->handle, IOCTL_CDROM_READ_TOC, NULL, 0,
- &toc, sizeof(toc), &br, NULL)) {
- WARN("error reading TOC !\n");
+ if (!MCICDA_ReadTOC(wmcda, &toc, &br))
return MCICDA_GetError(wmcda);
- }
+
switch (position) {
case MCI_SEEK_TO_START:
TRACE("Seeking to start\n");