diff options
author | waker <wakeroid@gmail.com> | 2010-11-01 18:39:58 +0100 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2010-11-01 18:39:58 +0100 |
commit | e0e7250cf34b03edb61195f0e3d28aeb85922372 (patch) | |
tree | 14cdb820cbd14fabe7cf68b73f340cb03d748604 /include/cdio/cd_types.h | |
parent | 86c756deeb6effd9b29968a3649f8387c0b6d62a (diff) |
0.4.3-portable-build1
Diffstat (limited to 'include/cdio/cd_types.h')
-rw-r--r-- | include/cdio/cd_types.h | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/include/cdio/cd_types.h b/include/cdio/cd_types.h new file mode 100644 index 00000000..bc1f16c0 --- /dev/null +++ b/include/cdio/cd_types.h @@ -0,0 +1,175 @@ +/* + $Id: cd_types.h,v 1.18 2008/03/25 15:59:08 karl Exp $ + + Copyright (C) 2003, 2006, 2008 Rocky Bernstein <rocky@cpan.org> + Copyright (C) 1996,1997,1998 Gerd Knorr <kraxel@bytesex.org> + and Heiko Eißfeldt <heiko@hexco.de> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/** \file cd_types.h + * \brief Header for routines which automatically determine the Compact Disc + * format and possibly filesystem on the CD. + * + */ + +#ifndef __CDIO_CD_TYPES_H__ +#define __CDIO_CD_TYPES_H__ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * Filesystem types we understand. The highest-numbered fs type should + * be less than CDIO_FS_MASK defined below. + */ + typedef enum { + CDIO_FS_AUDIO = 1, /**< audio only - not really a + filesystem */ + CDIO_FS_HIGH_SIERRA = 2, /**< High-Sierra Filesystem */ + CDIO_FS_ISO_9660 = 3, /**< ISO 9660 filesystem */ + CDIO_FS_INTERACTIVE = 4, + CDIO_FS_HFS = 5, /**< file system used on the Macintosh + system in MacOS 6 through MacOS 9 + and deprecated in OSX. */ + CDIO_FS_UFS = 6, /**< Generic Unix file system derived + from the Berkeley fast file + system. */ + + /**< + * EXT2 was the GNU/Linux native filesystem for early kernels. Newer + * GNU/Linux OS's may use EXT3 which is EXT2 with a journal. + */ + CDIO_FS_EXT2 = 7, + + CDIO_FS_ISO_HFS = 8, /**< both HFS & ISO-9660 filesystem */ + CDIO_FS_ISO_9660_INTERACTIVE = 9, /**< both CD-RTOS and ISO filesystem */ + + + /**< + * The 3DO is, technically, a set of specifications created by the 3DO + * company. These specs are for making a 3DO Interactive Multiplayer + * which uses a CD-player. Panasonic in the early 90's was the first + * company to manufacture and market a 3DO player. + */ + CDIO_FS_3DO = 10, + + + /**< + Microsoft X-BOX CD. + */ + CDIO_FS_XISO = 11, + CDIO_FS_UDFX = 12, + CDIO_FS_UDF = 13, + CDIO_FS_ISO_UDF = 14 + } cdio_fs_t; + + +/** + * Macro to extract just the FS type portion defined above +*/ +#define CDIO_FSTYPE(fs) (fs & CDIO_FS_MASK) + +/** + * Bit masks for the classes of CD-images. These are generally + * higher-level than the fs-type information above and may be determined + * based of the fs type information. This + */ + typedef enum { + CDIO_FS_MASK = 0x000f, /**< Note: this should be 2**n-1 and + and greater than the highest + CDIO_FS number above */ + CDIO_FS_ANAL_XA = 0x00010, /**< eXtended Architecture format */ + CDIO_FS_ANAL_MULTISESSION = 0x00020, /**< CD has multisesion */ + CDIO_FS_ANAL_PHOTO_CD = 0x00040, /**< Is a Kodak Photo CD */ + CDIO_FS_ANAL_HIDDEN_TRACK = 0x00080, /**< Hidden track at the + beginning of the CD */ + CDIO_FS_ANAL_CDTV = 0x00100, + CDIO_FS_ANAL_BOOTABLE = 0x00200, /**< CD is bootable */ + CDIO_FS_ANAL_VIDEOCD = 0x00400, /**< VCD 1.1 */ + CDIO_FS_ANAL_ROCKRIDGE = 0x00800, /**< Has Rock Ridge Extensions to + ISO 9660, */ + CDIO_FS_ANAL_JOLIET = 0x01000, /**< Microsoft Joliet extensions + to ISO 9660, */ + CDIO_FS_ANAL_SVCD = 0x02000, /**< Super VCD or Choiji Video CD */ + CDIO_FS_ANAL_CVD = 0x04000, /**< Choiji Video CD */ + CDIO_FS_ANAL_XISO = 0x08000, /**< XBOX CD */ + CDIO_FS_ANAL_ISO9660_ANY = 0x10000, /**< Any sort fo ISO9660 FS */ + CDIO_FS_ANAL_VCD_ANY = (CDIO_FS_ANAL_VIDEOCD|CDIO_FS_ANAL_SVCD| + CDIO_FS_ANAL_CVD), + CDIO_FS_MATCH_ALL = ~CDIO_FS_MASK /**< bitmask which can + be used by + cdio_get_devices to + specify matching any + sort of CD. */ + } cdio_fs_cap_t; + + +#define CDIO_FS_UNKNOWN CDIO_FS_MASK + +/** + * + */ +#define CDIO_FS_MATCH_ALL (cdio_fs_anal_t) (~CDIO_FS_MASK) + + +/*! + \brief The type used to return analysis information from + cdio_guess_cd_type. + + These fields make sense only for when an ISO-9660 filesystem is used. + */ +typedef struct +{ + unsigned int joliet_level; /**< If has Joliet extensions, this is the + associated level number (i.e. 1, 2, or 3). */ + char iso_label[33]; /**< This is 32 + 1 for null byte at the end in + formatting the string */ + unsigned int isofs_size; + uint8_t UDFVerMinor; /**< For UDF filesystems only */ + uint8_t UDFVerMajor; /**< For UDF filesystems only */ +} cdio_iso_analysis_t; + +/** + * Try to determine what kind of CD-image and/or filesystem we + * have at track track_num. Return information about the CD image + * is returned in iso_analysis and the return value. + */ +cdio_fs_anal_t cdio_guess_cd_type(const CdIo_t *cdio, int start_session, + track_t track_num, + /*out*/ cdio_iso_analysis_t *iso_analysis); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +/** The below variables are trickery to force the above enum symbol + values to be recorded in debug symbol tables. They are used to + allow one to refer to the enumeration value names in the typedefs + above in a debugger and debugger expressions. +*/ +extern cdio_fs_cap_t debug_cdio_fs_cap; +extern cdio_fs_t debug_cdio_fs; + +#endif /* __CDIO_CD_TYPES_H__ */ + +/* + * Local variables: + * c-file-style: "gnu" + * tab-width: 8 + * indent-tabs-mode: nil + * End: + */ |