diff --git a/include/cdrom.h b/include/cdrom.h index e263dd2cb85bcfd838c58cb8f71737b36eb5cbdb..660325ce5d8c69a8b74ce57d7987bcf98a8e8778 100644 --- a/include/cdrom.h +++ b/include/cdrom.h @@ -30,17 +30,21 @@ typedef struct { #elif defined(__FreeBSD__) || defined(__NetBSD__) struct cd_sub_channel_info sc; #endif - int cdaMode; - UINT16 nCurTrack; - DWORD dwCurFrame; + /* those data reflect the cdaudio structure and + * don't change while playing + */ UINT16 nTracks; UINT16 nFirstTrack; UINT16 nLastTrack; - DWORD dwTotalLen; LPDWORD lpdwTrackLen; LPDWORD lpdwTrackPos; LPBYTE lpbTrackFlags; - DWORD dwFirstOffset; + DWORD dwFirstFrame; + DWORD dwLastFrame; + /* those data change while playing */ + int cdaMode; + UINT16 nCurTrack; + DWORD dwCurFrame; } WINE_CDAUDIO; #define WINE_CDA_DONTKNOW 0x00 diff --git a/misc/cdrom.c b/misc/cdrom.c index 633bc7a7c7e4d18fefe74b89415e6db6423984ea..098737c56cb85fe3dd1371ec0db2ce28ac3cb452 100644 --- a/misc/cdrom.c +++ b/misc/cdrom.c @@ -39,8 +39,8 @@ int CDAUDIO_Open(WINE_CDAUDIO* wcda) wcda->cdaMode = WINE_CDA_OPEN; /* to force reading tracks info */ wcda->nCurTrack = 0; wcda->nTracks = 0; - wcda->dwTotalLen = 0; - wcda->dwFirstOffset = 0; + wcda->dwFirstFrame = 0; + wcda->dwLastFrame = 0; wcda->lpdwTrackLen = NULL; wcda->lpdwTrackPos = NULL; wcda->lpbTrackFlags = NULL; @@ -152,7 +152,7 @@ BOOL CDAUDIO_GetTracksInfo(WINE_CDAUDIO* wcda) #endif else #ifdef linux - entry.cdte_track = i + 1; + entry.cdte_track = i + 1; #else entry.starting_track = i + 1; #endif @@ -187,7 +187,7 @@ BOOL CDAUDIO_GetTracksInfo(WINE_CDAUDIO* wcda) #endif if (i == 0) { last_start = start; - wcda->dwFirstOffset = start; + wcda->dwFirstFrame = start; TRACE("dwFirstOffset=%u\n", start); } else { length = start - last_start; @@ -207,7 +207,7 @@ BOOL CDAUDIO_GetTracksInfo(WINE_CDAUDIO* wcda) #endif TRACE("track #%u flags=%02x\n", i + 1, wcda->lpbTrackFlags[i]); } - wcda->dwTotalLen = total_length; + wcda->dwLastFrame = last_start; TRACE("total_len=%u\n", total_length); return TRUE; #else @@ -425,6 +425,9 @@ int CDAUDIO_Pause(WINE_CDAUDIO* wcda, int pauseOn) #endif } +/************************************************************************** + * CDAUDIO_Seek [internal] + */ int CDAUDIO_Seek(WINE_CDAUDIO* wcda, DWORD at) { #if defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) @@ -435,7 +438,7 @@ int CDAUDIO_Seek(WINE_CDAUDIO* wcda, DWORD at) msf.second = (at % CDFRAMES_PERMIN) / CDFRAMES_PERSEC; msf.frame = at % CDFRAMES_PERSEC; - ret = ioctl(wcda->unixdev, CDROMSEEK, &msf); + ret = ioctl(wcda->unixdev, CDROMSEEK, &msf); #else /* FIXME: the current end for play is lost * use end of CD ROM instead diff --git a/msdos/int2f.c b/msdos/int2f.c index 2b77bf9b23dbe032d27b796b63bbdf9601bb8559..517185f511c7897e1e7ac290cc23d2f328e411bc 100644 --- a/msdos/int2f.c +++ b/msdos/int2f.c @@ -620,7 +620,7 @@ static void MSCDEX_Handler(CONTEXT86* context) break; case 8: /* Volume size */ - PTR_AT(io_stru, 1, DWORD) = wcda.dwTotalLen; + PTR_AT(io_stru, 1, DWORD) = wcda.dwLastFrame; TRACE(" ----> VOLUME SIZE <%ld>\n", PTR_AT(io_stru, 1, DWORD)); break; @@ -633,7 +633,7 @@ static void MSCDEX_Handler(CONTEXT86* context) case 10: /* audio disk info */ io_stru[1] = wcda.nFirstTrack; /* starting track of the disc */ io_stru[2] = wcda.nLastTrack; /* ending track */ - MSCDEX_StoreMSF(wcda.dwTotalLen, io_stru + 3); + MSCDEX_StoreMSF(wcda.dwLastFrame, io_stru + 3); TRACE(" ----> AUDIO DISK INFO <%d-%d/%08lx>\n", io_stru[1], io_stru[2], PTR_AT(io_stru, 3, DWORD));