diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index ca781ef3..4b6c9a70 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.05.07.175508" +#define Xorriso_timestamP "2008.05.07.175640" diff --git a/xorriso/xorrisoburn.c b/xorriso/xorrisoburn.c index 213bf746..810b7bd4 100644 --- a/xorriso/xorrisoburn.c +++ b/xorriso/xorrisoburn.c @@ -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_norequest_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_norequest_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); }