diff --git a/include/cdio/sector.h b/include/cdio/sector.h index 79c6fb39..43bcd7ce 100644 --- a/include/cdio/sector.h +++ b/include/cdio/sector.h @@ -1,5 +1,5 @@ /* - $Id: sector.h,v 1.26 2004/07/25 18:37:09 rocky Exp $ + $Id: sector.h,v 1.27 2004/08/30 00:26:59 rocky Exp $ Copyright (C) 2000 Herbert Valerio Riedel Copyright (C) 2003, 2004 Rocky Bernstein @@ -284,6 +284,18 @@ bool cdio_is_discmode_dvd (discmode_t discmode); } #endif +static inline bool discmode_is_cd(discmode_t discmode) +{ + return discmode <= CDIO_DISC_MODE_CD_MIXED; +} + +static inline bool discmode_is_dvd(discmode_t discmode) +{ + return (discmode >= CDIO_DISC_MODE_DVD_ROM) + && (discmode <= CDIO_DISC_MODE_DVD_OTHER); +} + + #endif /* _CDIO_SECTOR_H_ */ diff --git a/lib/cdtext.c b/lib/cdtext.c index 30baac73..de38313d 100644 --- a/lib/cdtext.c +++ b/lib/cdtext.c @@ -1,5 +1,5 @@ /* - $Id: cdtext.c,v 1.6 2004/07/17 08:59:44 rocky Exp $ + $Id: cdtext.c,v 1.7 2004/08/30 00:26:59 rocky Exp $ Copyright (C) 2004 Rocky Bernstein toc reading routine adapted from cuetools @@ -144,6 +144,9 @@ cdtext_set (cdtext_field_t key, const char *value, cdtext_t *cdtext) #define SET_CDTEXT_FIELD(FIELD) \ (*set_cdtext_field_fn)(user_data, i_track, i_first_track, FIELD, buffer); +/* + parse all CD-TEXT data retrieved. +*/ bool cdtext_data_init(void *user_data, track_t i_first_track, const unsigned char *wdata, @@ -162,6 +165,12 @@ cdtext_data_init(void *user_data, track_t i_first_track, pdata = (CDText_data_t *) (&wdata[4]); for( i=0; i < CDIO_CDTEXT_MAX_PACK_DATA; i++ ) { + + if ( pdata->bDBC ) { + cdio_warn("Double-byte characters not supported"); + return false; + } + if( pdata->seq != i ) break; diff --git a/lib/cdtext_private.h b/lib/cdtext_private.h index 681c7588..a549d166 100644 --- a/lib/cdtext_private.h +++ b/lib/cdtext_private.h @@ -1,5 +1,5 @@ /* - $Id: cdtext_private.h,v 1.3 2004/07/17 09:34:30 rocky Exp $ + $Id: cdtext_private.h,v 1.4 2004/08/30 00:26:59 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -43,10 +43,16 @@ struct CDText_data uint8_t type; track_t i_track; uint8_t seq; +#ifdef WORDS_BIGENDIAN + uint8_t bDBC: 1; /* double byte character */ + uint8_t block: 3; /* block number 0..7 */ uint8_t characterPosition:4; /* character position */ - uint8_t block:3; /* block number 0..7 */ - uint8_t bDBC:1; /* double byte character */ - char text[12]; +#else + uint8_t characterPosition:4; /* character position */ + uint8_t block :3; /* block number 0..7 */ + uint8_t bDBC :1; /* double byte character */ +#endif + char text[CDIO_CDTEXT_MAX_TEXT_DATA]; uint8_t crc[2]; } GNUC_PACKED; diff --git a/src/cd-info.c b/src/cd-info.c index 7108f62c..3f6c378c 100644 --- a/src/cd-info.c +++ b/src/cd-info.c @@ -1,5 +1,5 @@ /* - $Id: cd-info.c,v 1.84 2004/08/27 11:53:38 rocky Exp $ + $Id: cd-info.c,v 1.85 2004/08/30 00:26:59 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein Copyright (C) 1996, 1997, 1998 Gerd Knorr @@ -91,6 +91,7 @@ struct arguments char *cddb_cachedir; #endif int no_vcd; + int show_dvd; int no_device; int no_disc_mode; uint32_t debug_level; @@ -173,6 +174,9 @@ parse_options (int argc, const char *argv[]) {"no-disc-mode", '\0', POPT_ARG_NONE, &opts.no_disc_mode, 0, "Don't show disc-mode info"}, + {"dvd", '\0', POPT_ARG_NONE, &opts.show_dvd, 0, + "Attempt to give DVD information if a DVD is found."}, + #ifdef HAVE_VCDINFO {"no-vcd", 'v', POPT_ARG_NONE, &opts.no_vcd, 0, "Don't look up Video CD information"}, @@ -1028,6 +1032,12 @@ main(int argc, const char *argv[]) printf("Disc mode is listed as: %s\n", discmode2str[discmode]); } + + if (discmode_is_dvd && !opts.show_dvd) { + printf("No further information currently given for DVDs.\n"); + printf("Use --dvd to override.\n"); + myexit(p_cdio, EXIT_SUCCESS); + } i_first_track = cdio_get_first_track_num(p_cdio); i_tracks = cdio_get_num_tracks(p_cdio);