#ifndef H_DISCID
#define H_DISCID
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#if defined(linux)
#include <linux/cdrom.h>
#define cdte_track_address cdte_addr.lba
#define DEVICE_NAME "/dev/cdrom"
#elif defined(sun) && defined(unix) && defined(__SVR4)
#include <sys/cdio.h>
#define CD_MSF_OFFSET 150
#define CD_FRAMES 75
#define cdte_track_address cdte_addr.lba
#define DEVICE_NAME "/dev/vol/aliases/cdrom0"
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
#include <sys/cdio.h>
#define CDROM_LBA CD_LBA_FORMAT
#define CD_MSF_OFFSET 150
#define CD_FRAMES 75
#define CDROM_LEADOUT 0xAA
#define CDROMREADTOCHDR CDIOREADTOCHEADER
#define CDROMREADTOCENTRY CDIOREADTOCENTRY
#define cdrom_tochdr ioc_toc_header
#define cdth_trk0 starting_track
#define cdth_trk1 ending_track
#define cdrom_tocentry ioc_read_toc_single_entry
#define cdte_track track
#define cdte_format address_format
#define cdte_track_address entry.addr.lba
#define DEVICE_NAME "/dev/cdrom"
#elif defined(__OpenBSD__) || defined(__NetBSD__)
#include <sys/cdio.h>
#define CDROM_LBA CD_LBA_FORMAT
#define CD_MSF_OFFSET 150
#define CD_FRAMES 75
#define CDROM_LEADOUT 0xAA
#define CDROMREADTOCHDR CDIOREADTOCHEADER
#define cdrom_tochdr ioc_toc_header
#define cdth_trk0 starting_track
#define cdth_trk1 ending_track
#define cdrom_tocentry cd_toc_entry
#define cdte_track track
#define cdte_track_address addr.lba
#define DEVICE_NAME "/dev/cd0a"
#elif defined(__APPLE__)
#include <sys/types.h>
#include <IOKit/storage/IOCDTypes.h>
#include <IOKit/storage/IOCDMediaBSDClient.h>
#define CD_FRAMES 75
#define CD_MSF_OFFSET 150
#define cdrom_tochdr CDDiscInfo
#define cdth_trk0 numberOfFirstTrack
#define cdth_trk1 lastTrackNumberInLastSessionLSB
#define cdrom_tocentry CDTrackInfo
#define cdte_track_address trackStartAddress
#define DEVICE_NAME "/dev/disk1"
#else
# error "Your OS isn't supported yet."
#endif
#endif