Index: stream/stream_cddb.c =================================================================== --- stream/stream_cddb.c (revision 28306) +++ stream/stream_cddb.c (working copy) @@ -52,6 +52,10 @@ #include #include #include "mpbswap.h" +#elif defined(__OS2__) +#define INCL_DOS +#define INCL_DOSDEVIOCTL +#include #endif #include "cdd.h" @@ -94,6 +98,87 @@ } CloseHandle(drive); +#elif defined(__OS2__) +#pragma pack(push, 1) + UCHAR auchParamDisk[4] = {'C', 'D', '0', '1'}; + + struct { + BYTE bFirstTrack; + BYTE bLastTrack; + BYTE bLeadOutF; + BYTE bLeadOutS; + BYTE bLeadOutM; + BYTE bLeadOutReserved; + } sDataDisk; + + struct { + UCHAR auchSign[4]; + BYTE bTrack; + } sParamTrack = {{'C', 'D', '0', '1'},}; + + struct { + BYTE bStartF; + BYTE bStartS; + BYTE bStartM; + BYTE bStartReserved; + BYTE bControlInfo; + } sDataTrack; +#pragma pack(pop) + + HFILE hcd; + ULONG ulAction; + ULONG ulParamLen; + ULONG ulDataLen; + ULONG rc; + + rc = DosOpen(dev, &hcd, &ulAction, 0, FILE_NORMAL, + OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW, + OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE | OPEN_FLAGS_DASD, + NULL); + if (rc) { + mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC); + + return -1; + } + + rc = DosDevIOCtl(hcd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIODISK, + auchParamDisk, sizeof(auchParamDisk), &ulParamLen, + &sDataDisk, sizeof(sDataDisk), &ulDataLen); + + if (!rc) { + first = sDataDisk.bFirstTrack - 1; + last = sDataDisk.bLastTrack; + + for (i = first; i <= last; i++) { + if (i == last) { + sDataTrack.bStartM = sDataDisk.bLeadOutM; + sDataTrack.bStartS = sDataDisk.bLeadOutS; + sDataTrack.bStartF = sDataDisk.bLeadOutF; + } + else { + sParamTrack.bTrack = i + 1; + + rc = DosDevIOCtl(hcd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIOTRACK, + &sParamTrack, sizeof(sParamTrack), &ulParamLen, + &sDataTrack, sizeof(sDataTrack), &ulDataLen); + + if (rc) + break; + } + + cdtoc[i].min = sDataTrack.bStartM; + cdtoc[i].sec = sDataTrack.bStartS; + cdtoc[i].frame = sDataTrack.bStartF; + } + } + + DosClose(hcd); + + if (rc) { + mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC); + + return -1; + } #else int drive; drive = open(dev, O_RDONLY | O_NONBLOCK); @@ -326,7 +411,7 @@ sprintf( file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id); file_fd = open(file_name, O_RDONLY -#if defined(__MINGW32__) || defined(__CYGWIN__) +#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__OS2__) | O_BINARY #endif );