/* -*- tab-width: 8; c-basic-offset: 4 -*- */
/*
 * Header file for CD-ROM support
 *
 * Copyright 1994 Martin Ayotte
 * Copyright 1999 Eric Pouech
 * Copyright 2000 Andreas Mohr
 */

#ifndef __WINE_CDROM_H__
#define __WINE_CDROM_H__

#include <stdlib.h>
#include <unistd.h>
#include "windef.h"
#include "wine/windef16.h"

#ifdef HAVE_LINUX_CDROM_H
# include <linux/cdrom.h>
#endif
#ifdef HAVE_LINUX_UCDROM_H
# include <linux/ucdrom.h>
#endif
#ifdef HAVE_SYS_CDIO_H
# include <sys/cdio.h>
#endif

typedef struct {
    const char			*devname;
#if defined(linux)
    struct cdrom_subchnl	sc;
#elif defined(__FreeBSD__) || defined(__NetBSD__)
    struct cd_sub_channel_info	sc;
#endif
    /* those data reflect the cdaudio structure and
     * don't change while playing
     */
    UINT16			nTracks;
    UINT16			nFirstTrack;
    UINT16			nLastTrack;
    LPDWORD			lpdwTrackLen;
    LPDWORD			lpdwTrackPos;
    LPBYTE			lpbTrackFlags;
    DWORD			dwFirstFrame;
    DWORD			dwLastFrame;
    /* those data change while playing */
    int				cdaMode;
    UINT16			nCurTrack;
    DWORD			dwCurFrame;
} WINE_CDAUDIO;

#define	WINE_CDA_DONTKNOW		0x00
#define	WINE_CDA_NOTREADY		0x01
#define	WINE_CDA_OPEN			0x02
#define	WINE_CDA_PLAY			0x03
#define	WINE_CDA_STOP			0x04
#define	WINE_CDA_PAUSE			0x05

int	CDROM_Open(WINE_CDAUDIO* wcda, int drive);
int	CDROM_OpenDev(WINE_CDAUDIO* wcda);
int	CDROM_GetMediaType(WINE_CDAUDIO* wcda, int parentdev);
int	CDROM_CloseDev(int dev);
int	CDROM_Close(WINE_CDAUDIO* wcda);
int	CDROM_Reset(WINE_CDAUDIO* wcda, int parentdev);
int	CDROM_Audio_Play(WINE_CDAUDIO* wcda, DWORD start, DWORD stop, int parentdev);
int	CDROM_Audio_Stop(WINE_CDAUDIO* wcda, int parentdev);
int	CDROM_Audio_Pause(WINE_CDAUDIO* wcda, int pauseOn, int parentdev);
int	CDROM_Audio_Seek(WINE_CDAUDIO* wcda, DWORD at, int parentdev);
int	CDROM_SetDoor(WINE_CDAUDIO* wcda, int open, int parentdev);
UINT16 	CDROM_Audio_GetNumberOfTracks(WINE_CDAUDIO* wcda, int parentdev);
BOOL 	CDROM_Audio_GetTracksInfo(WINE_CDAUDIO* wcda, int parentdev);
BOOL	CDROM_Audio_GetCDStatus(WINE_CDAUDIO* wcda, int parentdev);
WORD	CDROM_Data_FindBestVoldesc(int fd);
DWORD	CDROM_Audio_GetSerial(WINE_CDAUDIO* wcda);
DWORD	CDROM_Data_GetSerial(WINE_CDAUDIO* wcda, int parentdev);
DWORD	CDROM_GetSerial(int drive);
DWORD	CDROM_GetLabel(int drive, char *label);

#define CDFRAMES_PERSEC 		75
#define SECONDS_PERMIN	 		60
#define CDFRAMES_PERMIN 		((CDFRAMES_PERSEC) * (SECONDS_PERMIN))

#ifndef CDROM_DATA_TRACK
#define CDROM_DATA_TRACK 0x04
#endif

#define CDROM_MSF_MINUTE(msf)           ((BYTE)(msf))
#define CDROM_MSF_SECOND(msf)           ((BYTE)(((WORD)(msf)) >> 8))
#define CDROM_MSF_FRAME(msf)            ((BYTE)((msf)>>16))

#define CDROM_MAKE_MSF(m, s, f)         ((DWORD)(((BYTE)(m) | \
                                                  ((WORD)(s)<<8)) | \
                                                 (((DWORD)(BYTE)(f))<<16)))

/* values borrowed from Linux 2.2.x cdrom.h */
#define CDS_NO_INFO			0
#define CDS_AUDIO			100
#define CDS_DATA_1                      101
#define CDS_DATA_2                      102
#define CDS_XA_2_1                      103
#define CDS_XA_2_2                      104
#define CDS_MIXED                       105

#endif

