diff --git a/cdrskin/cdrskin.1 b/cdrskin/cdrskin.1 index 3f052b0..94bbdd8 100644 --- a/cdrskin/cdrskin.1 +++ b/cdrskin/cdrskin.1 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH CDRSKIN 1 "Version 1.4.5, Jul 03, 2016" +.TH CDRSKIN 1 "Version 1.4.5, Jul 30, 2016" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -618,7 +618,8 @@ modesty_on_drive=1:min_percent=75:max_percent=95 The name of this cdrecord option stems from the "Immed" bit which can make some long running drive commands asynchronous and thus eases the load on some wiring hardware types. Regardless of option -immed, cdrskin uses asynchronous -commands where possible and appropriate. +commands where possible and appropriate. To really disable asynchronous command +execution, use option use_immed_bit=off . .TP .BI index= list Set a comma separated list of index start address numbers for the next track. @@ -1632,6 +1633,16 @@ This setting affects only CD SAO write runs. .br The first track automatically gets a pre-gap of at least 150 sectors. Its size can only be enlarged by this call. +.TP +.BI use_immed_bit= on|off|default +Control whether several long lasting SCSI commands shall be executed with the +Immed bit, which makes the commands end early while the drive operation is +still going on. cdrskin then inquires progress indication until the drive +reports to be ready again. If this feature is turned off, then blanking and +formatting will show no progress indication. +.br +It may depend on the operating system whether use_immed_bit= is set to "off" +by default. .TP .BI --xa1-ignore Silently interpret option -xa1 as -data. This may be necessary if a frontend diff --git a/cdrskin/cdrskin.c b/cdrskin/cdrskin.c index 5e68965..c0b3d64 100644 --- a/cdrskin/cdrskin.c +++ b/cdrskin/cdrskin.c @@ -2949,6 +2949,8 @@ set_dev:; printf( " print CD-TEXT file in Sony format and exit.\n"); printf(" --two_channel indicate that audio tracks have 2 channels\n"); + printf( + " use_immed_bit=on|off|default real control over SCSI Immed bit\n"); printf( " write_start_address= write to given byte address (DVD+RW)\n"); printf( @@ -3387,6 +3389,7 @@ struct CdrskiN { int stdio_sync; /* stdio fsync interval: -1, 0, >=32 */ int single_track; int prodvd_cli_compatible; + int use_immed; /* 1= yes, 0= libburn default, -1= no */ int do_devices; /* 1= --devices , 2= --device_links */ @@ -3659,6 +3662,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag) o->stdio_sync= 0; o->single_track= 0; o->prodvd_cli_compatible= 0; + o->use_immed= 0; o->do_devices= 0; o->do_scanbus= 0; o->do_load= 0; @@ -4169,6 +4173,8 @@ aborted:; goto ex; } } + if(skin->use_immed != 0) + burn_drive_set_immed(drive, skin->use_immed > 0); skin->drive_is_grabbed= 1; s= burn_disc_get_status(drive); @@ -6163,12 +6169,12 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag) struct burn_progress p; struct burn_drive *drive; int ret,loop_counter= 0,hint_force= 0,do_format= 0, profile_number= -1; - int wrote_well= 1, format_flag= 0, status, num_formats; + int wrote_well= 1, format_flag= 0, status, num_formats, using_immed= 1; off_t size; unsigned dummy; double start_time; char *verb= "blank", *presperf="blanking", *fmt_text= "..."; - char profile_name[80]; + char profile_name[80], progress_text[40]; static char fmtp[][40]= { "...", "format_overwrite", "deformat_sequential", "(-format)", "format_defectmgt", "format_by_index", @@ -6379,6 +6385,7 @@ unsupported_format_type:; if(Cdrskin__is_aborting(0)) {ret= 0; goto ex;} + using_immed= burn_drive_get_immed(drive); skin->drive_is_busy= 1; if(do_format==0 || do_format==2) { burn_disc_erase(drive,skin->blank_fast); @@ -6401,6 +6408,8 @@ unsupported_format_type:; loop_counter= 0; start_time= Sfile_microtime(0); + if(!using_immed) + sprintf(progress_text, "synchronous"); while(burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) { if(loop_counter>0) if(skin->verbosity>=Cdrskin_verbose_progresS) { @@ -6408,10 +6417,14 @@ unsupported_format_type:; if(p.sectors>0) /* i want a display of 1 to 99 percent */ percent= 1.0+((double) p.sector+1.0)/((double) p.sectors)*98.0; + if(using_immed) + sprintf(progress_text, "done %.1f%%", percent); fprintf(stderr, - "%scdrskin: %s ( done %.1f%% , %lu seconds elapsed ) %s", + "%scdrskin: %s ( %s , %lu seconds elapsed ) %s", skin->pacifier_with_newline ? "" : "\r", - presperf,percent,(unsigned long) (Sfile_microtime(0)-start_time), + presperf, + progress_text, + (unsigned long) (Sfile_microtime(0)-start_time), skin->pacifier_with_newline ? "\n" : ""); } sleep(1); @@ -9212,6 +9225,18 @@ track_too_large:; } else if(strcmp(argv[i],"--two_channel")==0) { skin->track_modemods&= ~BURN_4CH; + } else if(strncmp(argv[i], "use_immed_bit=", 14) == 0) { + if(strcmp(argv[i] + 14, "on") == 0) { + skin->use_immed= 1; + } else if(strcmp(argv[i] + 14, "off") == 0) { + skin->use_immed= -1; + } else if(strcmp(argv[i] + 14, "default") == 0) { + skin->use_immed= 0; + } else { + fprintf(stderr, "cdrskin: FATAL : use_immed_bits= must be \"on\", \"off\", or \"default\"\n"); + return(0); + } + } else if(strcmp(argv[i],"-V")==0 || strcmp(argpt, "-Verbose")==0) { /* is handled in Cdrpreskin_setup() */; } else if(strcmp(argv[i],"-v")==0 || strcmp(argpt,"-verbose")==0) { diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index cb214db..841c6ec 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2016.07.30.140328" +#define Cdrskin_timestamP "2016.07.30.140859"