diff --git a/cdrskin/cdrskin.c b/cdrskin/cdrskin.c index e786f79..685725f 100644 --- a/cdrskin/cdrskin.c +++ b/cdrskin/cdrskin.c @@ -197,6 +197,11 @@ or /* put macros under test caveat here */ #define Cdrskin_libburn_has_multI 1 +/* could be i repaired this with getting -atip minimum speed */ +#ifdef Cdrskin_libburn_has_read_atiP +#define Cdrskin_atip_speed_is_oK 1 +#endif + #endif #ifdef Cdrskin_oldfashioned_api_usE @@ -219,7 +224,9 @@ or #endif /** Work around the fact that after loading media speed report is wrong */ +#ifndef Cdrskin_atip_speed_is_oK #define Cdrskin_atip_speed_brokeN 1 +#endif /** Work around the fact that burn_drive_get_status() always reports to do track 0 in icculus.org/burn */ @@ -2306,6 +2313,7 @@ struct CdrskiN { int do_checkdrive; int do_atip; + int msinfo_fd; /* <<< provisory */ int do_blank; int blank_fast; @@ -2425,6 +2433,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag) o->do_scanbus= 0; o->do_checkdrive= 0; o->do_atip= 0; + o->msinfo_fd= -1; /* <<< provisory */ o->do_blank= 0; o->blank_fast= 0; o->no_blank_appendable= 0; @@ -3404,12 +3413,14 @@ ex:; /** Perform -toc under control of Cdrskin_atip(). @param flag Bitfield for control purposes: bit0= do not list sessions separately (do it cdrecord style) + bit1= perform -msinfo @return <=0 error, 1 success */ int Cdrskin_toc(struct CdrskiN *skin, int flag) { - int num_sessions= 0,num_tracks= 0,lba,track_count= 0,total_tracks= 0; - int session_no, track_no; + int num_sessions= 0,num_tracks= 0,lba= 0,track_count= 0,total_tracks= 0, ret; + int session_no, track_no, nwa, offset, lout_lba; + char msg[80]; struct burn_drive *drive; struct burn_disc *disc= NULL; struct burn_session **sessions; @@ -3422,8 +3433,40 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag) if(disc==NULL) goto cannot_read; sessions= burn_disc_get_sessions(disc,&num_sessions); - if(disc==NULL) - goto cannot_read; + + /* <<< provisory -msinfo : should get an own function with no verbosity */ + if(flag&2) { + if(num_sessions<=0) { + fprintf(stderr, + "cdrskin: FATAL : No sessions found on disk (for -msinfo)\n"); + {ret= 0; goto ex;} + } + for(session_no= 0; session_no0) + offset= 6900; + else + offset= 11400; + /* >>> need an API call for mmc_get_nwa() */ + /* >>> need to check wether result is plausible */ + /* >>> need a non-cdrecord option to define offset */ + + nwa= lout_lba+offset; + if(skin->msinfo_fd>=0) { + sprintf(msg,"%d,%d\n",lba,nwa); + write(skin->msinfo_fd,msg,strlen(msg)); + } + {ret= 1; goto ex;} + } + if(flag&1) { for(session_no= 0; session_nodo_atip= 3; +#else + fprintf(stderr,"cdrskin: SORRY : Option -msinfo is not available yet.\n"); + return(0); +#endif + } else if(strcmp(argv[i],"--no_abort_handler")==0) { /* is handled in Cdrpreskin_setup() */; @@ -5277,7 +5330,7 @@ int Cdrskin_run(struct CdrskiN *skin, int *exit_value, int flag) if(skin->do_atip) { if(skin->n_drives<=0) {*exit_value= 7; goto no_drive;} - ret= Cdrskin_atip(skin,!!(skin->do_atip>1)); + ret= Cdrskin_atip(skin,(skin->do_atip>=2)|((skin->do_atip==3)<<1)); if(ret<=0) {*exit_value= 7; goto ex;} } @@ -5305,7 +5358,7 @@ no_drive:; int main(int argc, char **argv) { - int ret,exit_value= 0,lib_initialized= 0; + int ret,exit_value= 0,lib_initialized= 0,i,result_fd; struct CdrpreskiN *preskin= NULL; struct CdrskiN *skin= NULL; char *lean_id= ""; @@ -5313,6 +5366,16 @@ int main(int argc, char **argv) lean_id= ".lean"; #endif + /* For -msinfo: Redirect normal stdout to stderr */ + for(i=1; imsinfo_fd= result_fd; + Cdrskin_run(skin,&exit_value,0); ex:; diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index e7dced2..1682e5a 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2006.11.10.093843" +#define Cdrskin_timestamP "2006.11.10.172212"