sector.h: add routines for determining if discmode is DVD or CD.

cdtext*: adjust for bigendian or not. Check for double-byte characters.

cd-info.c: new option --dvd. Don't attempt to understand DVD unless this is
           given.
This commit is contained in:
rocky
2004-08-30 00:26:59 +00:00
parent ef7030e53b
commit 1703e7dc00
4 changed files with 44 additions and 7 deletions

View File

@@ -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 <hvr@gnu.org>
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
@@ -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_ */

View File

@@ -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 <rocky@panix.com>
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;

View File

@@ -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 <rocky@panix.com>
@@ -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 */
#else
uint8_t characterPosition:4; /* character position */
uint8_t block :3; /* block number 0..7 */
uint8_t bDBC :1; /* double byte character */
char text[12];
#endif
char text[CDIO_CDTEXT_MAX_TEXT_DATA];
uint8_t crc[2];
} GNUC_PACKED;

View File

@@ -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 <rocky@panix.com>
Copyright (C) 1996, 1997, 1998 Gerd Knorr <kraxel@bytesex.org>
@@ -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"},
@@ -1029,6 +1033,12 @@ main(int argc, const char *argv[])
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);