diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 909e160c..64662d03 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.05.07.214343" +#define Xorriso_timestamP "2008.05.07.214442" diff --git a/xorriso/xorrisoburn.c b/xorriso/xorrisoburn.c index 810b7bd4..b7826ca5 100644 --- a/xorriso/xorrisoburn.c +++ b/xorriso/xorrisoburn.c @@ -2230,13 +2230,17 @@ int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag) #define Xorriso_use_isoburn_toC yes +/* +*/ +#define Xorriso_new_toc_formaT yes + /* @param flag bit0=short report form bit1=report about output drive */ int Xorriso_toc(struct XorrisO *xorriso, int flag) { int num_sessions= 0, num_tracks= 0, lba= 0, nwa= -1, pmin, psec, pframe, ret; - int track_count= 0, session_no, track_no, profile_no= -1; + int track_count= 0, session_no, track_no, profile_no= -1, track_size; int last_track_start= 0, last_track_size= -1, num_data= 0, is_data= 0; int is_inout_drive= 0, drive_role; int num_payload= 0, num_wasted= 0, num_nondata= 0; @@ -2258,6 +2262,12 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) struct burn_track **tracks; #endif /* ! Xorriso_use_isoburn_toC */ +#ifdef Xorriso_new_toc_formaT + int image_blocks; + char volume_id[33]; + struct burn_toc_entry next_toc_entry; +#endif + ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, "on attempt to print Table Of Content", flag&2); if(ret<=0) @@ -2323,6 +2333,15 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) disc= burn_drive_get_disc(drive); #endif +#ifdef Xorriso_new_toc_formaT + + sprintf(respt, "TOC layout : %3s , %9s , %10s , %s\n", + "Idx", "Start LBA", "Size", "Volume Id"); + if(!(flag&1)) + Xorriso_result(xorriso,0); +#endif + + if (disc==NULL) { Xorriso_process_msg_queues(xorriso,0); ret= isoburn_get_min_start_byte(drive, &start_byte, 0); @@ -2335,14 +2354,32 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); return(0); } + /* fabricate TOC */ + +#ifdef Xorriso_new_toc_formaT + + ret= isoburn_read_iso_head(drive, 0, &image_blocks, volume_id, 1); + if(ret>0) { + sprintf(respt, "ISO session : %3d , %9d , %9ds , %s\n", + 1, 0, image_blocks, volume_id); + } else { + sprintf(respt, "Other session: %3d , %9d , %9ds , \n", + 1, 0, nwa); + } + +#else /* Xorriso_new_toc_formaT */ + sprintf(respt, "Media content: session %2d ", 1); - sprintf(respt+strlen(respt), "track %2d %s lba: %9d\n", 1, "data ", 0); + sprintf(respt+strlen(respt), "track %2d %s lba: %8d\n", 1, "data ", 0); if(!(flag&1)) Xorriso_result(xorriso,0); last_track_start= lba; sprintf(respt, "Media content: session %2d ", 1); sprintf(respt+strlen(respt), "leadout lba: %9d\n", nwa); + +#endif /* ! Xorriso_new_toc_formaT */ + if(!(flag&1)) Xorriso_result(xorriso,0); num_payload= num_data= last_track_size= nwa; @@ -2379,12 +2416,58 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) if (toc_entry.extensions_valid & 1) { /* DVD extension valid */ lba= toc_entry.start_lba; + track_size= toc_entry.track_blocks; } else { - lba= burn_msf_to_lba(toc_entry.pmin, toc_entry.psec, toc_entry.pframe); + lba= burn_msf_to_lba(toc_entry.pmin, toc_entry.psec, + toc_entry.pframe); + if(track_no==num_tracks-1) { + +#ifdef Xorriso_use_isoburn_toC + isoburn_toc_session_get_leadout_entry(sessions[session_no], + &next_toc_entry); +#else + burn_session_get_leadout_entry(sessions[session_no], + &next_toc_entry); +#endif + + } else { + +#ifdef Xorriso_use_isoburn_toC + isoburn_toc_track_get_entry(tracks[track_no+1], &next_toc_entry); +#else + burn_track_get_entry(tracks[track_no+1], &next_toc_entry); +#endif + + } + track_size= burn_msf_to_lba(next_toc_entry.pmin, next_toc_entry.psec, + next_toc_entry.pframe) - lba; } + +#ifdef Xorriso_new_toc_formaT + + ret= isoburn_read_iso_head(drive, lba, &image_blocks, volume_id, 1); + if(ret>0 && track_no==num_tracks-1) { + sprintf(respt, "ISO session : %3d , %9d , %9ds , %s\n", + session_no+1, lba, image_blocks , volume_id); + } else if(ret>0 && track_no==num_tracks-1) { + sprintf(respt, "ISO track : %3d , %9d , %9ds , %s\n", + track_count, lba, image_blocks , volume_id); + } else if(track_no==num_tracks-1) { + sprintf(respt, "Other session: %3d , %9d , %9ds , \n", + session_no+1, lba, track_size); + } else { + sprintf(respt, "Other track : %3d , %9d , %9ds , \n", + track_count, lba, track_size); + } + +#else /* Xorriso_new_toc_formaT */ + sprintf(respt, "Media content: session %2d ", session_no+1); sprintf(respt+strlen(respt), "track %2d %s lba: %9d\n", track_count, ((toc_entry.control&7)<4?"audio":"data "), lba); + +#endif /* ! Xorriso_new_toc_formaT */ + if(!(flag&1)) Xorriso_result(xorriso,0); if(track_no>0) @@ -2407,10 +2490,14 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) lba= burn_msf_to_lba(pmin, psec, pframe); lba= burn_msf_to_lba(toc_entry.pmin, toc_entry.psec, toc_entry.pframe); } + +#ifndef Xorriso_new_toc_formaT sprintf(respt, "Media content: session %2d ", session_no+1); sprintf(respt+strlen(respt), "leadout lba: %9d\n", lba); if(!(flag&1)) Xorriso_result(xorriso,0); +#endif /* ! Xorriso_new_toc_formaT */ + last_track_size= lba - last_track_start; num_payload+= last_track_size; if(is_data)