Tighten code by putting more generic routines in cdio_generic:

to get first track number and number of tracks
  to get discmode

everybody now has gen.i_tracks and gen.i_first_track.

test/* format of output changed yet again.
This commit is contained in:
rocky
2004-07-29 02:16:20 +00:00
parent e606f025a0
commit 0d8a3e2a82
22 changed files with 285 additions and 302 deletions

View File

@@ -1,5 +1,5 @@
/*
$Id: cdrdao.c,v 1.23 2004/07/26 02:54:37 rocky Exp $
$Id: cdrdao.c,v 1.24 2004/07/29 02:16:20 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
toc reading routine adapted from cuetools
@@ -25,7 +25,7 @@
(*.cue).
*/
static const char _rcsid[] = "$Id: cdrdao.c,v 1.23 2004/07/26 02:54:37 rocky Exp $";
static const char _rcsid[] = "$Id: cdrdao.c,v 1.24 2004/07/29 02:16:20 rocky Exp $";
#include "image.h"
#include "cdio_assert.h"
@@ -81,8 +81,6 @@ typedef struct {
exactly 13 bytes */
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
add 1 for leadout. */
track_t i_tracks; /* number of tracks in image */
track_t i_first_track; /* track number of first track */
cdtext_t cdtext; /* CD-TEXT */
discmode_t disc_mode;
} _img_private_t;
@@ -108,7 +106,7 @@ _init_cdrdao (_img_private_t *env)
get into infinite recursion calling passing right here.
*/
env->gen.init = true;
env->i_first_track = 1;
env->gen.i_first_track = 1;
env->psz_mcn = NULL;
env->disc_mode = CDIO_DISC_MODE_NO_INFO;
@@ -123,10 +121,10 @@ _init_cdrdao (_img_private_t *env)
return false;
/* Fake out leadout track and sector count for last track*/
cdio_lsn_to_msf (lead_lsn, &env->tocent[env->i_tracks].start_msf);
env->tocent[env->i_tracks].start_lba = cdio_lsn_to_lba(lead_lsn);
env->tocent[env->i_tracks-env->i_first_track].sec_count =
cdio_lsn_to_lba(lead_lsn - env->tocent[env->i_tracks-1].start_lba);
cdio_lsn_to_msf (lead_lsn, &env->tocent[env->gen.i_tracks].start_msf);
env->tocent[env->gen.i_tracks].start_lba = cdio_lsn_to_lba(lead_lsn);
env->tocent[env->gen.i_tracks-env->gen.i_first_track].sec_count =
cdio_lsn_to_lba(lead_lsn - env->tocent[env->gen.i_tracks-1].start_lba);
return true;
}
@@ -151,7 +149,7 @@ _lseek_cdrdao (void *user_data, off_t offset, int whence)
unsigned int i;
env->pos.lba = 0;
for (i=0; i<env->i_tracks; i++) {
for (i=0; i<env->gen.i_tracks; i++) {
track_info_t *this_track=&(env->tocent[i]);
env->pos.index = i;
if ( (this_track->sec_count*this_track->datasize) >= offset) {
@@ -168,7 +166,7 @@ _lseek_cdrdao (void *user_data, off_t offset, int whence)
env->pos.lba += this_track->sec_count;
}
if (i==env->i_tracks) {
if (i==env->gen.i_tracks) {
cdio_warn ("seeking outside range of disk image");
return -1;
} else {
@@ -273,7 +271,7 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
char psz_line[MAXLINE]; /* text of current line read in file fp. */
unsigned int i_line=0; /* line number in file of psz_line. */
int i = -1; /* Position in tocent. Same as
cd->i_tracks - 1 */
cd->gen.i_tracks - 1 */
char *psz_keyword, *psz_field;
cdio_log_level_t log_level = (NULL == cd) ? CDIO_LOG_INFO : CDIO_LOG_WARN;
cdtext_field_t cdtext_key;
@@ -806,7 +804,7 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
}
}
if (NULL != cd) cd->i_tracks = i+1;
if (NULL != cd) cd->gen.i_tracks = i+1;
fclose (fp);
return true;
@@ -1019,10 +1017,10 @@ _get_track_format_cdrdao(void *user_data, track_t i_track)
if (!env->gen.init) _init_cdrdao(env);
if (i_track > env->i_tracks || i_track == 0)
if (i_track > env->gen.i_tracks || i_track == 0)
return TRACK_FORMAT_ERROR;
return env->tocent[i_track-env->i_first_track].track_format;
return env->tocent[i_track-env->gen.i_first_track].track_format;
}
/*!
@@ -1040,10 +1038,10 @@ _get_track_green_cdrdao(void *user_data, track_t i_track)
if (!env->gen.init) _init_cdrdao(env);
if (i_track > env->i_tracks || i_track == 0)
if (i_track > env->gen.i_tracks || i_track == 0)
return false;
return env->tocent[i_track-env->i_first_track].track_green;
return env->tocent[i_track-env->gen.i_first_track].track_green;
}
/*!
@@ -1059,9 +1057,10 @@ _get_lba_track_cdrdao(void *user_data, track_t i_track)
_img_private_t *env = user_data;
_init_cdrdao (env);
if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = env->i_tracks+1;
if (i_track == CDIO_CDROM_LEADOUT_TRACK)
i_track = env->gen.i_tracks+1;
if (i_track <= env->i_tracks+1 && i_track != 0) {
if (i_track <= env->gen.i_tracks+1 && i_track != 0) {
return env->tocent[i_track-1].start_lba;
} else
return CDIO_INVALID_LBA;