diff --git a/include/cdio/cdda.h b/include/cdio/cdda.h index 8ef46262..fd96d07a 100644 --- a/include/cdio/cdda.h +++ b/include/cdio/cdda.h @@ -1,5 +1,5 @@ /* - $Id: cdda.h,v 1.14 2005/01/29 20:54:20 rocky Exp $ + $Id: cdda.h,v 1.15 2005/02/05 04:23:21 rocky Exp $ Copyright (C) 2004, 2005 Rocky Bernstein Copyright (C) 2001 Xiph.org @@ -32,9 +32,16 @@ #include #include +enum { + CDDA_MESSAGE_FORGETIT = 0, + CDDA_MESSAGE_PRINTIT = 1, + CDDA_MESSAGE_LOGIT = 2, + CD_FRAMESAMPLES = CDIO_CD_FRAMESIZE_RAW / 4, + MAXTRK = (CDIO_CD_MAX_TRACKS+1) +} paranoia_cdda_enums; + #define CD_FRAMESAMPLES (CDIO_CD_FRAMESIZE_RAW / 4) -#include #include /** We keep MAXTRK since this header is exposed publicly and other @@ -51,11 +58,6 @@ typedef struct TOC_s { /** For compatibility. TOC is depricated, use TOC_t instead. */ #define TOC TOC_t -/** interface types */ -#define GENERIC_SCSI 0 -#define COOKED_IOCTL 1 -#define TEST_INTERFACE 2 - #define CDDA_MESSAGE_FORGETIT 0 #define CDDA_MESSAGE_PRINTIT 1 #define CDDA_MESSAGE_LOGIT 2 @@ -70,7 +72,6 @@ struct cdrom_drive_s { char *drive_model; int drive_type; - int interface; int bigendianp; /**< Whether data returned on the CDDA is bigendian or not. 1 if big endian, 0 if little endian and -1 if we don't know. @@ -121,9 +122,25 @@ struct cdrom_drive_s { }; -/**< jitter testing. The first two bits are set to determine - the byte-distance we will jitter the data; 0 is no shifting. +/*! An enumeration for some of the CDDA_TEST_* #defines below. This isn't + really an enumeration one would really use in a program it is to + be helpful in debuggers where wants just to refer to the CDDA_TEST_ + names and get something. +*/ +enum { + CDDA_TEST_JITTER_SMALL = 1, + CDDA_TEST_JITTER_LARGE = 2, + CDDA_TEST_JITTER_MASSIVE = 3, + CDDA_TEST_FRAG_SMALL = (1<<3), + CDDA_TEST_FRAG_LARGE = (2<<3), + CDDA_TEST_FRAG_MASSIVE = (3<<3), + CDDA_TEST_UNDERRUN = 64 +} paranoia_jitter_enums; + +/** jitter testing. The first two bits are set to determine the + byte-distance we will jitter the data; 0 is no shifting. */ + #define CDDA_TEST_JITTER_SMALL 1 #define CDDA_TEST_JITTER_LARGE 2 #define CDDA_TEST_JITTER_MASSIVE 3 @@ -278,18 +295,21 @@ extern int data_bigendianp(cdrom_drive_t *d); /** transport errors: */ -#define TR_OK 0 -#define TR_EWRITE 1 /**< Error writing packet command (transport) */ -#define TR_EREAD 2 /**< Error reading packet data (transport) */ -#define TR_UNDERRUN 3 /**< Read underrun */ -#define TR_OVERRUN 4 /**< Read overrun */ -#define TR_ILLEGAL 5 /**< Illegal/rejected request */ -#define TR_MEDIUM 6 /**< Medium error */ -#define TR_BUSY 7 /**< Device busy */ -#define TR_NOTREADY 8 /**< Device not ready */ -#define TR_FAULT 9 /**< Device failure */ -#define TR_UNKNOWN 10 /**< Unspecified error */ -#define TR_STREAMING 11 /**< loss of streaming */ +typedef enum { + TR_OK = 0, + TR_EWRITE = 1 /**< Error writing packet command (transport) */, + TR_EREAD = 2 /**< Error reading packet data (transport) */, + TR_UNDERRUN = 3 /**< Read underrun */, + TR_OVERRUN = 4 /**< Read overrun */, + TR_ILLEGAL = 5 /**< Illegal/rejected request */, + TR_MEDIUM = 6 /**< Medium error */, + TR_BUSY = 7 /**< Device busy */, + TR_NOTREADY = 8 /**< Device not ready */, + TR_FAULT = 9 /**< Device failure */, + TR_UNKNOWN = 10 /**< Unspecified error */, + TR_STREAMING = 11 /**< loss of streaming */, +} transport_error_t; + #ifdef NEED_STRERROR_TR const char *strerror_tr[]={ diff --git a/include/cdio/device.h b/include/cdio/device.h index 6abb66b1..a6f39ed8 100644 --- a/include/cdio/device.h +++ b/include/cdio/device.h @@ -1,5 +1,5 @@ /* -*- c -*- - $Id: device.h,v 1.9 2005/01/29 20:54:20 rocky Exp $ + $Id: device.h,v 1.10 2005/02/05 04:23:21 rocky Exp $ Copyright (C) 2005 Rocky Bernstein @@ -116,7 +116,7 @@ extern "C" { typedef enum { DRIVER_OP_UNINIT = -3, /**< returned when a particular driver hasn't been initialized or a null - CdIo_t pointer has been passed. + pointer has been passed. */ DRIVER_OP_UNSUPPORTED = -2, /**< returned when a particular driver doesn't support a particular operation. diff --git a/include/cdio/iso9660.h b/include/cdio/iso9660.h index ccfbd2b8..2675335d 100644 --- a/include/cdio/iso9660.h +++ b/include/cdio/iso9660.h @@ -1,5 +1,5 @@ /* - $Id: iso9660.h,v 1.58 2005/01/29 20:54:20 rocky Exp $ + $Id: iso9660.h,v 1.59 2005/02/05 04:23:21 rocky Exp $ Copyright (C) 2000 Herbert Valerio Riedel Copyright (C) 2003, 2004, 2005 Rocky Bernstein @@ -45,6 +45,51 @@ #define MIN_TRACK_SIZE 4*75 #define MIN_ISO_SIZE MIN_TRACK_SIZE +/*! An enumeration for some of the ISO_* #defines below. This isn't + really an enumeration one would really use in a program it is here + to be helpful in debuggers where wants just to refer to the + ISO_*_ names and get something. + */ +enum { + ISO_PVD_SECTOR = 16, /**< Sector of Primary Volume Descriptor */ + ISO_EVD_SECTOR = 17, /**< Sector of End Volume Descriptor */ + LEN_ISONAME = 31, /**< size in bytes of the filename + portion + null byte */ + ISO_MAX_SYSTEM_ID = 32, /**< Maximum number of characters in a system + id. */ + MAX_ISONAME = 37, /**< size in bytes of the filename + portion + null byte */ + ISO_MAX_PREPARER_ID = 128, /**< Maximum number of characters in a + preparer id. */ + MAX_ISOPATHNAME = 255, + ISO_BLOCKSIZE = 2048 + +} iso_enums1; + +/*! An enumeration for some of the ISO_* #defines below. This isn't + really an enumeration one would really use in a program it is here + to be helpful in debuggers where wants just to refer to the + ISO_*_ names and get something. + */ +enum { + ISO_FILE = 0, /**<, Not really a flag... */ + ISO_EXISTENCE = 1, /**< Do not make existence known (hidden) */ + ISO_DIRECTORY = 2, /**< This file is a directory */ + ISO_ASSOCIATED = 4, /**< This file is an associated file */ + ISO_RECORD = 8, /**<, Record format in extended attr. != 0 */ + ISO_PROECTION = 16, /**< No read/execute perm. in ext. attr. */ + ISO_DRESERVED1 = 32, /**<, Reserved bit 5 */ + ISO_DRESERVED2 = 64, /**<, Reserved bit 6 */ + ISO_MULTIEXTENT = 128, /**< Not final entry of a mult. ext. file */ +} iso_flag_enums; + +enum { + ISO_VD_PRIMARY = 1, /**< Is in any ISO-9660 */ + ISO_VD_SUPPLEMENARY = 2, /**< Used by Joliet */ + ISO_VD_END = 255 +} iso_vd_enums; + + /*! An ISO filename is: "abcde.eee;1" -> '.' ';' @@ -71,22 +116,22 @@ /*! \brief Maximum number of characters in the entire ISO 9660 filename. */ #define MAX_ISOPATHNAME 255 -/*! \brief Maximum number of characters in an perparer id. */ +/*! \brief Maximum number of characters in a preparer id. */ #define ISO_MAX_PREPARER_ID 128 -/*! \brief Maximum number of characters in an publisher id. */ +/*! \brief Maximum number of characters in a publisher id. */ #define ISO_MAX_PUBLISHER_ID 128 /*! \brief Maximum number of characters in an application id. */ #define ISO_MAX_APPLICATION_ID 128 -/*! \brief Maximum number of characters in an system id. */ +/*! \brief Maximum number of characters in a system id. */ #define ISO_MAX_SYSTEM_ID 32 -/*! \brief Maximum number of characters in an volume id. */ +/*! \brief Maximum number of characters in a volume id. */ #define ISO_MAX_VOLUME_ID 32 -/*! \brief Maximum number of characters in an volume-set id. */ +/*! \brief Maximum number of characters in a volume-set id. */ #define ISO_MAX_VOLUMESET_ID 128 /**! ISO 9660 directory flags. */ @@ -101,7 +146,7 @@ #define ISO_MULTIEXTENT 128 /**< Not final entry of a mult. ext. file */ /**! Volume descriptor types */ -#define ISO_VD_PRIMARY 1 +#define ISO_VD_PRIMARY 1 /**< Is in any ISO-9660 */ #define ISO_VD_SUPPLEMENTARY 2 /**< Used by Joliet */ #define ISO_VD_END 255 @@ -111,7 +156,10 @@ /*! Sector of End Volume Descriptor */ #define ISO_EVD_SECTOR 17 -/*! String inside track identifying an ISO 9660 filesystem. */ +/*! String inside frame which identifies an ISO 9660 filesystem. This + string generally occurs one byte into a frame at the beginning of + an ISO_PVD_SECTOR. +*/ #define ISO_STANDARD_ID "CD001" @@ -122,12 +170,12 @@ extern "C" { #endif /* __cplusplus */ -enum strncpy_pad_check { +typedef enum strncpy_pad_check { ISO9660_NOCHECK = 0, ISO9660_7BIT, ISO9660_ACHARS, ISO9660_DCHARS -}; +} strncpy_pad_check_t; #ifndef EMPTY_ARRAY_SIZE #define EMPTY_ARRAY_SIZE 0 @@ -375,6 +423,42 @@ typedef struct _iso9660 iso9660_t; iso9660_t *iso9660_open_ext (const char *psz_path, iso_extension_mask_t iso_extension_mask); +/*! + Open an ISO 9660 image for reading with some tolerence for positioning + of the ISO9660 image. Here we will scan for ISO_STANDARD_ID and set + that position as the + Maybe in the future we will have + a mode. NULL is returned on error. + + @see iso9660_open +*/ + iso9660_t *iso9660_open_fuzzy (const char *psz_path /*flags, mode */, + uint16_t i_fuzz); + +/*! + Open an ISO 9660 image for reading with some tolerence for positioning + of the ISO9660 image. Here we will scan for ISO_STANDARD_ID and set + that position as the + Maybe in the future we will have + a mode. NULL is returned on error. + + @see iso9660_open +*/ + iso9660_t *iso9660_open_fuzzy_ext (const char *psz_path, + iso_extension_mask_t iso_extension_mask, + uint16_t i_fuzz + /*flags, mode */); + +/*! + Read the Super block of an ISO 9660 image but determine framesize + and datastart and a possible additional offset. Generally here we are + not reading an ISO 9660 image but a CD-Image which contains an ISO 9660 + filesystem. +*/ + bool iso9660_ifs_fuzzy_read_superblock (iso9660_t *p_iso, + iso_extension_mask_t iso_extension_mask, + uint16_t i_fuzz); + /*! Close previously opened ISO 9660 image. True is unconditionally returned. If there was an error false would diff --git a/include/cdio/sector.h b/include/cdio/sector.h index ee7fee97..ff7f8275 100644 --- a/include/cdio/sector.h +++ b/include/cdio/sector.h @@ -1,8 +1,8 @@ /* - $Id: sector.h,v 1.31 2005/01/04 04:33:36 rocky Exp $ + $Id: sector.h,v 1.32 2005/02/05 04:23:21 rocky Exp $ Copyright (C) 2000 Herbert Valerio Riedel - Copyright (C) 2003, 2004 Rocky Bernstein + Copyright (C) 2003, 2004, 2005 Rocky Bernstein This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -67,10 +67,10 @@ #include -/*! track modes (Table 350) - reference: MMC-3 draft revsion - 10g -*/ -typedef enum { + /*! track modes (Table 350) + reference: MMC-3 draft revsion - 10g + */ + typedef enum { AUDIO, /**< 2352 byte block length */ MODE1, /**< 2048 byte block length */ MODE1_RAW, /**< 2352 byte block length */ @@ -79,12 +79,12 @@ typedef enum { MODE2_FORM2, /**< 2324 byte block length */ MODE2_FORM_MIX, /**< 2336 byte block length */ MODE2_RAW /**< 2352 byte block length */ -} trackmode_t; - -/*! disc modes. The first combined from MMC-3 5.29.2.8 (Send CUESHEET) - and GNU/Linux /usr/include/linux/cdrom.h and we've added DVD. - */ -typedef enum { + } trackmode_t; + + /*! disc modes. The first combined from MMC-3 5.29.2.8 (Send CUESHEET) + and GNU/Linux /usr/include/linux/cdrom.h and we've added DVD. + */ + typedef enum { CDIO_DISC_MODE_CD_DA, /**< CD-DA */ CDIO_DISC_MODE_CD_DATA, /**< CD-ROM form 1 */ CDIO_DISC_MODE_CD_XA, /**< CD-ROM XA form2 */ @@ -99,38 +99,73 @@ typedef enum { CDIO_DISC_MODE_NO_INFO, CDIO_DISC_MODE_ERROR, CDIO_DISC_MODE_CD_I /**< CD-i. */ -} discmode_t; + } discmode_t; -/*! Information that can be obtained through a Read Subchannel - command. - */ + /*! Information that can be obtained through a Read Subchannel + command. + */ #define CDIO_SUBCHANNEL_SUBQ_DATA 0 #define CDIO_SUBCHANNEL_CURRENT_POSITION 1 #define CDIO_SUBCHANNEL_MEDIA_CATALOG 2 #define CDIO_SUBCHANNEL_TRACK_ISRC 3 - -/*! track flags - * Q Sub-channel Control Field (4.2.3.3) - */ -typedef enum { + + /*! track flags + * Q Sub-channel Control Field (4.2.3.3) + */ + typedef enum { NONE = 0x00, /* no flags set */ PRE_EMPHASIS = 0x01, /* audio track recorded with pre-emphasis */ COPY_PERMITTED = 0x02, /* digital copy permitted */ DATA = 0x04, /* data track */ FOUR_CHANNEL_AUDIO = 0x08, /* 4 audio channels */ SCMS = 0x10 /* SCMS (5.29.2.7) */ -} flag_t; - + } flag_t; + #define CDIO_PREGAP_SECTORS 150 #define CDIO_POSTGAP_SECTORS 150 - -/* - Some generally useful CD-ROM information -- mostly based on the above. - This is from linux.h - not to slight other OS's. This was the first - place I came across such useful stuff. -*/ + + /*! An enumeration for some of the CDIO_CD #defines below. This isn't + really an enumeration one would really use in a program it is to + be helpful in debuggers where wants just to refer to the CDIO_CD_ + names and get something. + */ + enum { + CDIO_CD_MINS = 74, /**< max. minutes per CD, not really + a limit */ + CDIO_CD_SECS_PER_MIN = 60, /**< seconds per minute */ + CDIO_CD_FRAMES_PER_SEC = 75, /**< frames per second */ + CDIO_CD_SYNC_SIZE = 12, /**< 12 sync bytes per raw data + frame */ + CDIO_CD_CHUNK_SIZE = 24, /**< lowest-level "data bytes + piece" */ + CDIO_CD_NUM_OF_CHUNKS = 98, /**< chunks per frame */ + CDIO_CD_FRAMESIZE_SUB = 96, /**< subchannel data "frame" size */ + CDIO_CD_HEADER_SIZE = 4, /**< header (address) bytes per raw + frame */ + CDIO_CD_SUBHEADER_SIZE = 8, /**< subheader bytes per raw XA data + frame */ + CDIO_CD_ECC_SIZE = 276, /**< bytes ECC per most raw data + frame types */ + CDIO_CD_FRAMESIZE = 2048, /**< bytes per frame, "cooked" + mode */ + CDIO_CD_FRAMESIZE_RAW = 2352, /**< bytes per frame, "raw" mode */ + CDIO_CD_FRAMESIZE_RAWER = 2646, /**< The maximum possible + returned */ + CDIO_CD_FRAMESIZE_RAW1 = 2340, + CDIO_CD_FRAMESIZE_RAW0 = 2336, + CDIO_CD_MAX_SESSIONS = 99, + CDIO_CD_MIN_SESSION_NO = 1, /**<, Smallest CD session number */ + CDIO_CD_MAX_LSN = 450150, /**< Largest LSN in a CD */ + CDIO_CD_MIN_LSN = -450150, /**< Smallest LSN in a CD */ + } cdio_cd_enums; + + /*! + Some generally useful CD-ROM information -- mostly based on the above. + This is from linux.h - not to slight other OS's. This was the first + place I came across such useful stuff. + */ #define CDIO_CD_MINS 74 /**< max. minutes per CD, not really - a limit */ + a limit */ #define CDIO_CD_SECS_PER_MIN 60 /**< seconds per minute */ #define CDIO_CD_FRAMES_PER_SEC 75 /**< frames per second */ #define CDIO_CD_SYNC_SIZE 12 /**< 12 sync bytes per raw data frame */ @@ -153,121 +188,153 @@ typedef enum { bytes */ #define CDIO_CD_FRAMESIZE_RAW1 (CDIO_CD_CD_FRAMESIZE_RAW-CDIO_CD_SYNC_SIZE) /*2340*/ #define CDIO_CD_FRAMESIZE_RAW0 (CDIO_CD_FRAMESIZE_RAW-CDIO_CD_SYNC_SIZE-CDIO_CD_HEADER_SIZE) /*2336*/ - -/*! "before data" part of raw XA (green, mode2) frame */ + + /*! "before data" part of raw XA (green, mode2) frame */ #define CDIO_CD_XA_HEADER (CDIO_CD_HEADER_SIZE+CDIO_CD_SUBHEADER_SIZE) - -/*! "after data" part of raw XA (green, mode2 form1) frame */ + + /*! "after data" part of raw XA (green, mode2 form1) frame */ #define CDIO_CD_XA_TAIL (CDIO_CD_EDC_SIZE+CDIO_CD_ECC_SIZE) - -/*! "before data" sync bytes + header of XA (green, mode2) frame */ + + /*! "before data" sync bytes + header of XA (green, mode2) frame */ #define CDIO_CD_XA_SYNC_HEADER (CDIO_CD_SYNC_SIZE+CDIO_CD_XA_HEADER) - -/*! CD-ROM address types (GNU/Linux e.g. cdrom_tocentry.cdte_format) */ + + /*! String of bytes used to identify the beginning of a Mode 1 or + Mode 2 sector. */ + extern const uint8_t CDIO_SECTOR_SYNC_HEADER[CDIO_CD_SYNC_SIZE]; + /**< + {0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0}; + */ + + /*! An enumeration for some of the CDIO_CDROM_* #defines below. This + isn't really an enumeration one would really use in a program; it + is to be helpful in debuggers where wants just to refer to the + CDIO_CDROM_* names and get something. + */ + enum { + CDIO_CDROM_LBA =0x01, /**< "logical block": first frame is #0 */ + CDIO_CDROM_MSF =0x02, /**< "minute-second-frame": binary, not + BCD here! */ + CDIO_CDROM_DATA_TRACK = 0x04, + CDIO_CDROM_CDI_TRACK = 0x10, + CDIO_CDROM_XA_TRACK = 0x20 + } cdio_cdrom_enums; + + /*! CD-ROM address types (GNU/Linux e.g. cdrom_tocentry.cdte_format) */ #define CDIO_CDROM_LBA 0x01 /**< "logical block": first frame is #0 */ #define CDIO_CDROM_MSF 0x02 /**< "minute-second-frame": binary, not BCD here! */ - -/*! CD-ROM track format types (GNU/Linux cdte_ctrl) */ + + /*! CD-ROM track format types (GNU/Linux cdte_ctrl) */ #define CDIO_CDROM_DATA_TRACK 0x04 #define CDIO_CDROM_CDI_TRACK 0x10 #define CDIO_CDROM_XA_TRACK 0x20 - + + /*! An enumeration for some of the M2*_SECTOR_SIZE #defines + below. This isn't really an enumeration one would really use in a + program it is to be helpful in debuggers where wants just to refer + to the M2*_SECTOR_SIZE names and get something. + */ + enum { + M2F2_SECTOR_SIZE = 2324, + M2SUB_SECTOR_SIZE = 2332, + M2RAW_SECTOR_SIZE = 2336 + } m2_sector_enums; + #define M2F2_SECTOR_SIZE 2324 #define M2SUB_SECTOR_SIZE 2332 #define M2RAW_SECTOR_SIZE 2336 - -/*! Largest CD session number */ + + /*! Largest CD session number */ #define CDIO_CD_MAX_SESSIONS 99 -/*! Smallest CD session number */ + /*! Smallest CD session number */ #define CDIO_CD_MIN_SESSION_NO 1 - -/*! Largest LSN in a CD */ + + /*! Largest LSN in a CD */ #define CDIO_CD_MAX_LSN 450150 -/*! Smallest LSN in a CD */ + /*! Smallest LSN in a CD */ #define CDIO_CD_MIN_LSN -450150 - - -#define CDIO_CD_FRAMES_PER_MIN \ - (CDIO_CD_FRAMES_PER_SEC*CDIO_CD_SECS_PER_MIN) - + + +#define CDIO_CD_FRAMES_PER_MIN \ + (CDIO_CD_FRAMES_PER_SEC*CDIO_CD_SECS_PER_MIN) + #define CDIO_CD_74MIN_SECTORS (UINT32_C(74)*CDIO_CD_FRAMES_PER_MIN) #define CDIO_CD_80MIN_SECTORS (UINT32_C(80)*CDIO_CD_FRAMES_PER_MIN) #define CDIO_CD_90MIN_SECTORS (UINT32_C(90)*CDIO_CD_FRAMES_PER_MIN) - -#define CDIO_CD_MAX_SECTORS \ - (UINT32_C(100)*CDIO_CD_FRAMES_PER_MIN-CDIO_PREGAP_SECTORS) - + +#define CDIO_CD_MAX_SECTORS \ + (UINT32_C(100)*CDIO_CD_FRAMES_PER_MIN-CDIO_PREGAP_SECTORS) + #define msf_t_SIZEOF 3 - -/*! - Convert an LBA into a string representation of the MSF. - \warning cdio_lba_to_msf_str returns new allocated string */ -char *cdio_lba_to_msf_str (lba_t lba); - -/*! - Convert an MSF into a string representation of the MSF. - \warning cdio_msf_to_msf_str returns new allocated string */ -char *cdio_msf_to_str (const msf_t *msf); - -/*! - Convert an LBA into the corresponding LSN. -*/ -lba_t cdio_lba_to_lsn (lba_t lba); - -/*! - Convert an LBA into the corresponding MSF. -*/ -void cdio_lba_to_msf(lba_t lba, msf_t *msf); - -/*! - Convert an LSN into the corresponding LBA. - CDIO_INVALID_LBA is returned if there is an error. -*/ -lba_t cdio_lsn_to_lba (lsn_t lsn); - -/*! - Convert an LSN into the corresponding MSF. -*/ -void cdio_lsn_to_msf (lsn_t lsn, msf_t *msf); - -/*! - Convert a MSF into the corresponding LBA. - CDIO_INVALID_LBA is returned if there is an error. -*/ -lba_t cdio_msf_to_lba (const msf_t *msf); - -/*! - Convert a MSF into the corresponding LSN. - CDIO_INVALID_LSN is returned if there is an error. -*/ -lsn_t cdio_msf_to_lsn (const msf_t *msf); - -/*! - Convert a MSF - broken out as 3 integer components into the - corresponding LBA. - CDIO_INVALID_LBA is returned if there is an error. -*/ -lba_t cdio_msf3_to_lba (unsigned int minutes, unsigned int seconds, - unsigned int frames); -/*! - Convert a string of the form MM:SS:FF into the corresponding LBA. - CDIO_INVALID_LBA is returned if there is an error. -*/ -lba_t cdio_mmssff_to_lba (const char *psz_mmssff); + /*! + Convert an LBA into a string representation of the MSF. + \warning cdio_lba_to_msf_str returns new allocated string */ + char *cdio_lba_to_msf_str (lba_t lba); -/*! - Return true if discmode is some sort of CD. -*/ -bool cdio_is_discmode_cdrom (discmode_t discmode); + /*! + Convert an MSF into a string representation of the MSF. + \warning cdio_msf_to_msf_str returns new allocated string */ + char *cdio_msf_to_str (const msf_t *msf); + + /*! + Convert an LBA into the corresponding LSN. + */ + lba_t cdio_lba_to_lsn (lba_t lba); + + /*! + Convert an LBA into the corresponding MSF. + */ + void cdio_lba_to_msf(lba_t lba, msf_t *msf); + + /*! + Convert an LSN into the corresponding LBA. + CDIO_INVALID_LBA is returned if there is an error. + */ + lba_t cdio_lsn_to_lba (lsn_t lsn); + + /*! + Convert an LSN into the corresponding MSF. + */ + void cdio_lsn_to_msf (lsn_t lsn, msf_t *msf); + + /*! + Convert a MSF into the corresponding LBA. + CDIO_INVALID_LBA is returned if there is an error. + */ + lba_t cdio_msf_to_lba (const msf_t *msf); + + /*! + Convert a MSF into the corresponding LSN. + CDIO_INVALID_LSN is returned if there is an error. + */ + lsn_t cdio_msf_to_lsn (const msf_t *msf); + + /*! + Convert a MSF - broken out as 3 integer components into the + corresponding LBA. + CDIO_INVALID_LBA is returned if there is an error. + */ + lba_t cdio_msf3_to_lba (unsigned int minutes, unsigned int seconds, + unsigned int frames); + + /*! + Convert a string of the form MM:SS:FF into the corresponding LBA. + CDIO_INVALID_LBA is returned if there is an error. + */ + lba_t cdio_mmssff_to_lba (const char *psz_mmssff); + + /*! + Return true if discmode is some sort of CD. + */ + bool cdio_is_discmode_cdrom (discmode_t discmode); + + /*! + Return true if discmode is some sort of DVD. + */ + bool cdio_is_discmode_dvd (discmode_t discmode); -/*! - Return true if discmode is some sort of DVD. -*/ -bool cdio_is_discmode_dvd (discmode_t discmode); - #ifdef __cplusplus } #endif