From 52c97d4e998081fb029b4b607c2a0e4423968a5e Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Mon, 15 Mar 1999 15:14:43 +0000 Subject: [PATCH] Added new function CDAUDIO_Seek(). --- include/cdrom.h | 3 ++- misc/cdrom.c | 27 ++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/include/cdrom.h b/include/cdrom.h index 3374f2fec2d..e263dd2cb85 100644 --- a/include/cdrom.h +++ b/include/cdrom.h @@ -56,14 +56,15 @@ int CDAUDIO_Reset(WINE_CDAUDIO* wcda); int CDAUDIO_Play(WINE_CDAUDIO* wcda, DWORD start, DWORD stop); int CDAUDIO_Stop(WINE_CDAUDIO* wcda); int CDAUDIO_Pause(WINE_CDAUDIO* wcda, int pauseOn); +int CDAUDIO_Seek(WINE_CDAUDIO* wcda, DWORD at); int CDAUDIO_SetDoor(WINE_CDAUDIO* wcda, int open); UINT16 CDAUDIO_GetNumberOfTracks(WINE_CDAUDIO* wcda); BOOL CDAUDIO_GetTracksInfo(WINE_CDAUDIO* wcda); BOOL CDAUDIO_GetCDStatus(WINE_CDAUDIO* wcda); #define CDFRAMES_PERSEC 75 -#define CDFRAMES_PERMIN 4500 #define SECONDS_PERMIN 60 +#define CDFRAMES_PERMIN ((CDFRAMES_PERSEC) * (SECONDS_PERMIN)) #ifndef CDROM_DATA_TRACK #define CDROM_DATA_TRACK 0x04 diff --git a/misc/cdrom.c b/misc/cdrom.c index 1aa6ca0c3c1..d25085aec73 100644 --- a/misc/cdrom.c +++ b/misc/cdrom.c @@ -29,7 +29,7 @@ int CDAUDIO_Open(WINE_CDAUDIO* wcda) { #if defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) - wcda->unixdev = open(CDAUDIO_DEV, O_RDONLY, 0); + wcda->unixdev = open(CDAUDIO_DEV, O_RDONLY | O_NONBLOCK, 0); if (wcda->unixdev == -1) { WARN(cdaudio,"can't open '%s'!. errno=%d\n", CDAUDIO_DEV, errno); return -1; @@ -423,6 +423,31 @@ int CDAUDIO_Pause(WINE_CDAUDIO* wcda, int pauseOn) #endif } +int CDAUDIO_Seek(WINE_CDAUDIO* wcda, DWORD at) +{ +#if defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) + int ret = 0; + struct cdrom_msf0 msf; +#ifdef linux + msf.minute = at / CDFRAMES_PERMIN; + msf.second = (at % CDFRAMES_PERMIN) / CDFRAMES_PERSEC; + msf.frame = at % CDFRAMES_PERSEC; + + ret = ioctl(wcda->unixdev, CDROMSEEK, &msf); +#else + /* FIXME: the current end for play is lost + * use end of CD ROM instead + */ + FIXME(cdaudio, "Could a BSD expert implement the seek function ?\n"); + CDAUDIO_Play(wcda, at, wcda->lpdwTrackPos[wcda->nTracks] + wcda->lpdwTrackLen[wcda->nTracks]); + +#endif + return ret; +#else + return -1; +#endif +} + /************************************************************************** * CDAUDIO_SetDoor [internal] */ -- 2.11.4.GIT