Making use of new isoburn_toc_* functions

This commit is contained in:
Thomas Schmitt 2008-05-07 17:56:23 +00:00
parent e9171b5133
commit 585445ccc8
2 changed files with 50 additions and 16 deletions

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.05.07.175508"
#define Xorriso_timestamP "2008.05.07.175640"

View File

@ -2228,6 +2228,8 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag)
}
#define Xorriso_use_isoburn_toC yes
/* @param flag bit0=short report form
bit1=report about output drive
*/
@ -2239,9 +2241,6 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
int is_inout_drive= 0, drive_role;
int num_payload= 0, num_wasted= 0, num_nondata= 0;
char profile_name[80],*respt,*devadr;
struct burn_disc *disc= NULL;
struct burn_session **sessions;
struct burn_track **tracks;
struct burn_toc_entry toc_entry;
struct burn_drive_info *dinfo;
struct burn_drive *drive;
@ -2249,6 +2248,16 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
char mem_text[80];
off_t start_byte= 0, num_free= 0;
#ifdef Xorriso_use_isoburn_toC
struct isoburn_toc_disc *disc= NULL;
struct isoburn_toc_session **sessions;
struct isoburn_toc_track **tracks;
#else
struct burn_disc *disc= NULL;
struct burn_session **sessions;
struct burn_track **tracks;
#endif /* ! Xorriso_use_isoburn_toC */
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
"on attempt to print Table Of Content", flag&2);
if(ret<=0)
@ -2308,11 +2317,16 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
if(xorriso->request_to_abort)
return(1);
#ifdef Xorriso_use_isoburn_toC
disc= isoburn_toc_drive_get_disc(drive);
#else
disc= burn_drive_get_disc(drive);
#endif
if (disc==NULL) {
Xorriso_process_msg_queues(xorriso,0);
ret= isoburn_get_min_start_byte(drive, &start_byte, 0);
nwa= start_byte / 2048;
ret= isoburn_get_min_start_byte(drive, &start_byte, 0);
nwa= start_byte / 2048;
if(ret<=0) {
Xorriso_process_msg_queues(xorriso,0);
if(flag&1)
@ -2334,17 +2348,34 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
num_payload= num_data= last_track_size= nwa;
num_sessions= 1;
} else {
#ifdef Xorriso_use_isoburn_toC
sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions);
#else
sessions= burn_disc_get_sessions(disc, &num_sessions);
#endif
for (session_no= 0; session_no<num_sessions && !(xorriso->request_to_abort);
session_no++) {
tracks = burn_session_get_tracks(sessions[session_no], &num_tracks);
#ifdef Xorriso_use_isoburn_toC
tracks= isoburn_toc_session_get_tracks(sessions[session_no], &num_tracks);
#else
tracks= burn_session_get_tracks(sessions[session_no], &num_tracks);
#endif
if (tracks==NULL)
continue;
for(track_no= 0; track_no<num_tracks && !(xorriso->request_to_abort);
track_no++) {
track_count++;
is_data= 0;
#ifdef Xorriso_use_isoburn_toC
isoburn_toc_track_get_entry(tracks[track_no], &toc_entry);
#else
burn_track_get_entry(tracks[track_no], &toc_entry);
#endif
if (toc_entry.extensions_valid & 1) {
/* DVD extension valid */
lba= toc_entry.start_lba;
@ -2362,7 +2393,13 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
if((toc_entry.control&7)>=4) /* data track */
is_data= 1;
}
#ifdef Xorriso_use_isoburn_toC
isoburn_toc_session_get_leadout_entry(sessions[session_no], &toc_entry);
#else
burn_session_get_leadout_entry(sessions[session_no], &toc_entry);
#endif
if (toc_entry.extensions_valid & 1) {
lba= toc_entry.start_lba;
burn_lba_to_msf(lba, &pmin, &psec, &pframe);
@ -2386,20 +2423,11 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
num_nondata= lba - num_data;
Sfile_scale(((double) num_data) * 2048.0, mem_text,5,1e4,1);
#ifdef NIX
sprintf(respt, "Media summary: %d session%s, %d data blocks, %s",
num_sessions, (num_sessions==1 ? "" : "s"), num_data, mem_text);
if(num_nondata>0) {
Sfile_scale(((double) num_nondata) * 2048.0, mem_text,5,1e4,1);
sprintf(respt+strlen(respt), ", %s non-data", mem_text);
}
#else
sprintf(respt, "Media summary: %d session%s, %d data blocks, %s data",
num_sessions, (num_sessions==1 ? "" : "s"), num_data, mem_text);
num_free= isoburn_disc_available_space(drive, NULL);
Sfile_scale((double) num_free, mem_text,5,1e4,1);
sprintf(respt+strlen(respt), ", %s free", mem_text);
#endif
sprintf(respt+strlen(respt), "\n");
Xorriso_result(xorriso,0);
@ -2414,7 +2442,13 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag)
}
if (disc!=NULL)
#ifdef Xorriso_use_isoburn_toC
isoburn_toc_disc_free(disc);
#else
burn_disc_free(disc);
#endif
Xorriso_process_msg_queues(xorriso,0);
return(1);
}