From 07345cf49d500b5d5d21d1709fcb6f607a1fc6ab Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 31 Jul 2016 07:38:41 +0000 Subject: [PATCH] New command -use_immed_bit, new -as cdrecord option use_immed_bit= --- libisoburn/libisoburn.ver | 1 + xorriso/base_obj.c | 2 + xorriso/drive_mgt.c | 37 ++++++++++++ xorriso/emulators.c | 6 ++ xorriso/opts_d_h.c | 3 + xorriso/opts_p_z.c | 22 ++++++++ xorriso/parse_exec.c | 9 ++- xorriso/text_io.c | 17 ++++++ xorriso/write_run.c | 25 ++++++--- xorriso/xorrecord.1 | 16 +++++- xorriso/xorrecord.info | 64 ++++++++++++--------- xorriso/xorrecord.texi | 18 +++++- xorriso/xorriso.1 | 14 ++++- xorriso/xorriso.h | 5 ++ xorriso/xorriso.info | 108 ++++++++++++++++++++---------------- xorriso/xorriso.texi | 16 +++++- xorriso/xorriso_private.h | 3 + xorriso/xorriso_timestamp.h | 2 +- xorriso/xorrisoburn.h | 2 + 19 files changed, 284 insertions(+), 86 deletions(-) diff --git a/libisoburn/libisoburn.ver b/libisoburn/libisoburn.ver index f5b27c5f..c6129795 100644 --- a/libisoburn/libisoburn.ver +++ b/libisoburn/libisoburn.ver @@ -316,6 +316,7 @@ Xorriso_option_toc_of; Xorriso_option_uid; Xorriso_option_unregister_filter; Xorriso_option_update; +Xorriso_option_use_immed_bit; Xorriso_option_use_readline; Xorriso_option_version; Xorriso_option_volid; diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 752e4e91..bb946e27 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -251,6 +251,8 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->buffer_timeout_sec= 120; m->min_buffer_percent= 90; m->max_buffer_percent= 95; + m->use_immed_bit= 0; + m->use_immed_bit_default= 0; m->stdio_sync= 0; m->stdio_sync_is_default= 1; m->keep_boot_image= 0; diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index e5ee3d54..f594d67f 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -343,6 +343,10 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); ret= 0; goto ex; } + xorriso->use_immed_bit_default= burn_drive_get_immed(dinfo[0].drive) > 0 ? + 1 : -1; + if(xorriso->use_immed_bit != 0) + burn_drive_set_immed(dinfo[0].drive, xorriso->use_immed_bit > 0); state= isoburn_disc_get_status(dinfo[0].drive); ret= isoburn_get_img_partition_offset(dinfo[0].drive, &offst); if((state == BURN_DISC_APPENDABLE || state == BURN_DISC_FULL) && ret == 1) { @@ -3412,3 +3416,36 @@ int Xorriso_scsi_dev_family(struct XorrisO *xorriso, int flag) return(1); } + +int Xorriso_use_immed_bit(struct XorrisO *xorriso, int flag) +{ + int enable= 1, ret; + struct burn_drive_info *dinfo; + struct burn_drive *drive; + + /* It is not an error if no drive is acquired. + Xorriso_drive_aquire() will apply use_immed_bit. + */ + ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, + "on attempt to control use of Immed bit", 2 | 16); + if(ret<0) + return(ret); + if(ret == 0) + return(1); + + if(xorriso->use_immed_bit == -1) { + enable= 0; + } else if(xorriso->use_immed_bit == 1) { + enable= 1; + } else if(xorriso->use_immed_bit == 0) { + /* obtain default value as determined after drive aquiration */ + if(xorriso->use_immed_bit_default == 0) + return(1); + enable= (xorriso->use_immed_bit_default > 0); + } + burn_drive_set_immed(drive, enable); + Xorriso_process_msg_queues(xorriso,0); + return(1); +} + + diff --git a/xorriso/emulators.c b/xorriso/emulators.c index 72478494..c7f892f9 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -85,6 +85,7 @@ int Xorriso_cdrskin_help(struct XorrisO *xorriso, int flag) "\t--grow_overwriteable_iso\temulate multi-session on DVD+RW, BD-RE", "\twrite_start_address=#\t\twrite to byte address on DVD+RW, BD-RE", "\tstream_recording=on|number\ttry to get full speed on DVD-RAM, BD", +"\tuse_immed_bit=on|off|default\tcontrol use of Immed bit", "\tdvd_obs=default|32k|64k\t\tbytes per DVD/BD write operation", "\tstdio_sync=on|off|end|number\twhether to fsync output to \"stdio:\"", "\t--no_rc\t\tDo not execute xorriso startup files", @@ -337,6 +338,11 @@ no_volunteer:; cpt= strchr(argpt, '=')+1; Xorriso_option_stream_recording(xorriso, cpt, 0); + } else if(strncmp(argpt, "-use_immed_bit=", 15) == 0 || + strncmp(argpt, "use_immed_bit=", 14) == 0) { + cpt= strchr(argpt, '=') + 1; + Xorriso_option_use_immed_bit(xorriso, cpt, 0); + } else if(strcmp(argpt, "-immed") == 0) { Xorriso_option_modesty_on_drive(xorriso, "75", 0); diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index b53f2366..f3aacc94 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -2135,6 +2135,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " Keep drive buffer hungry to ease concurrent burn run.", " -dvd_obs \"default\"|\"32k\"|\"64k\"", " Set number of bytes per DVD/BD write operation.", +" -use_immed_bit \"on\"|\"off\"|\"default\"", +" Control whether long running SCSI commands shall run", +" asynchronously with progress messages.", " -stdio_sync \"on\"|\"off\"|\"end\"|number", " Set number of bytes after which to force output to stdio", " pseudo drives. \"on\" is the same as 16m.", diff --git a/xorriso/opts_p_z.c b/xorriso/opts_p_z.c index d33232f2..065880a0 100644 --- a/xorriso/opts_p_z.c +++ b/xorriso/opts_p_z.c @@ -1939,6 +1939,28 @@ ex:; } +/* Command -use_immed_bit */ +int Xorriso_option_use_immed_bit(struct XorrisO *xorriso, char *mode, + int flag) +{ + int ret; + + if(strncmp(mode, "default", 7) == 0 || mode[0] == 0) { + xorriso->use_immed_bit= 0; + } else if(strcmp(mode, "on")==0) { + xorriso->use_immed_bit= 1; + } else if(strcmp(mode, "off")==0) { + xorriso->use_immed_bit= -1; + } else { + sprintf(xorriso->info_text, "-use_immed_bit: unknown mode '%s'", mode); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + return(0); + } + ret= Xorriso_use_immed_bit(xorriso, 0); + return(ret); +} + + /* Option -use_readline */ int Xorriso_option_use_readline(struct XorrisO *xorriso, char *mode, int flag) { diff --git a/xorriso/parse_exec.c b/xorriso/parse_exec.c index 7bf62b96..56bc3e22 100644 --- a/xorriso/parse_exec.c +++ b/xorriso/parse_exec.c @@ -545,7 +545,8 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv, "session_log","sh_style_result","signal_handling","sleep", "speed","split_size","status","status_history_max", "stdio_sync","stream_recording","system_id","temp_mem_limit","toc_of", - "uid","unregister_filter","use_readline","volid","volset_id", + "uid","unregister_filter","use_immed_bit","use_readline", + "volid","volset_id", "write_type","xattr","zisofs", "" }; @@ -739,7 +740,7 @@ int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso, "abstract_file", "biblio_file", "preparer_id", "application_use", "out_charset", "read_mkisofsrc", "uid", "gid", "zisofs", "speed", "stream_recording", "dvd_obs", - "modesty_on_drive", + "modesty_on_drive", "use_immed_bit", "stdio_sync", "dummy", "fs", "close", "padding", "write_type", "grow_blindly", "pacifier", "scdbackup_tag", @@ -1933,6 +1934,10 @@ if (0) { (*idx)+= 2; ret= Xorriso_option_update(xorriso, arg1, arg2, 1|8); + } else if(strcmp(cmd,"use_immed_bit")==0) { + (*idx)++; + ret= Xorriso_option_use_immed_bit(xorriso, arg1, 0); + } else if(strcmp(cmd,"use_readline")==0) { (*idx)++; ret= Xorriso_option_use_readline(xorriso, arg1, 0); diff --git a/xorriso/text_io.c b/xorriso/text_io.c index 60b14066..b477268f 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -3456,6 +3456,23 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); + is_default= (xorriso->use_immed_bit == 0); + strcpy(line, "-use_immed_bit "); + if(xorriso->use_immed_bit == 0) { + strcat(line, "default"); + if(xorriso->use_immed_bit_default > 0) + strcat(line, "/on"); + else if(xorriso->use_immed_bit_default < 0) + strcat(line, "/off"); + strcat(line, "\n"); + } else if(xorriso->use_immed_bit > 0) { + strcat(line, "on\n"); + } else if(xorriso->use_immed_bit < 0) { + strcat(line, "off\n"); + } + if(!(is_default && no_defaults)) + Xorriso_status_result(xorriso,filter,fp,flag&2); + is_default= (xorriso->stdio_sync == 0); strcpy(line, "-stdio_sync "); if(xorriso->stdio_sync == -1) diff --git a/xorriso/write_run.c b/xorriso/write_run.c index 637b7c4d..e8522b83 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -1692,7 +1692,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive, */ int Xorriso_blank_media(struct XorrisO *xorriso, int flag) { - int ret, do_deformat= 0, signal_mode; + int ret, do_deformat= 0, signal_mode, using_immed; struct burn_drive_info *dinfo; struct burn_drive *drive; enum burn_disc_status disc_state; @@ -1702,6 +1702,7 @@ int Xorriso_blank_media(struct XorrisO *xorriso, int flag) char current_profile_name[80]; time_t start_time; char mode_names[4][80]= {"all", "fast", "deformat", "deformat_quickest"}; + char progress_text[40]; ret= Xorriso_may_burn(xorriso, 0); if(ret <= 0) @@ -1760,6 +1761,7 @@ int Xorriso_blank_media(struct XorrisO *xorriso, int flag) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); return(1); } + using_immed= burn_drive_get_immed(drive); sprintf(xorriso->info_text, "Beginning to blank medium in mode '%s'.\n", mode_names[flag&3]); Xorriso_info(xorriso,0); @@ -1777,12 +1779,16 @@ int Xorriso_blank_media(struct XorrisO *xorriso, int flag) isoburn_disc_erase(drive, (flag&1)); start_time= time(0); usleep(1000000); + if(!using_immed) + sprintf(progress_text, "synchronously since"); while (burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) { Xorriso_process_msg_queues(xorriso,0); if(p.sectors>0 && p.sector>=0) /* display 1 to 99 percent */ percent = 1.0 + ((double) p.sector+1.0) / ((double) p.sectors) * 98.0; - sprintf(xorriso->info_text, "Blanking ( %.1f%% done in %d seconds )", - percent, (int) (time(0) - start_time)); + if(using_immed) + sprintf(progress_text, "%.1f%% done in", percent); + sprintf(xorriso->info_text, "Blanking ( %s %d seconds )", + progress_text, (int) (time(0) - start_time)); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0); usleep(1000000); } @@ -1818,14 +1824,14 @@ int Xorriso_blank_media(struct XorrisO *xorriso, int flag) */ int Xorriso_format_media(struct XorrisO *xorriso, off_t in_size, int flag) { - int ret, mode_flag= 0, index, status, num_formats, signal_mode; + int ret, mode_flag= 0, index, status, num_formats, signal_mode, using_immed; unsigned dummy; struct burn_drive_info *dinfo; struct burn_drive *drive; struct burn_progress p; double percent = 1.0; int current_profile; - char current_profile_name[80]; + char current_profile_name[80], progress_text[40]; off_t size= 0; time_t start_time; enum burn_disc_status disc_state; @@ -1926,6 +1932,7 @@ int Xorriso_format_media(struct XorrisO *xorriso, off_t in_size, int flag) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); return(1); } + using_immed= burn_drive_get_immed(drive); sprintf(xorriso->info_text, "Beginning to format medium.\n"); Xorriso_info(xorriso, 0); if(flag & 2) @@ -1942,12 +1949,16 @@ int Xorriso_format_media(struct XorrisO *xorriso, off_t in_size, int flag) start_time= time(0); usleep(1000000); + if(!using_immed) + sprintf(progress_text, "synchronously since"); while (burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) { Xorriso_process_msg_queues(xorriso,0); if(p.sectors>0 && p.sector>=0) /* display 1 to 99 percent */ percent = 1.0 + ((double) p.sector+1.0) / ((double) p.sectors) * 98.0; - sprintf(xorriso->info_text, "Formatting ( %.1f%% done in %d seconds )", - percent, (int) (time(0) - start_time)); + if(using_immed) + sprintf(progress_text, "%.1f%% done in", percent); + sprintf(xorriso->info_text, "Formatting ( %s %d seconds )", + progress_text, (int) (time(0) - start_time)); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0); usleep(1000000); } diff --git a/xorriso/xorrecord.1 b/xorriso/xorrecord.1 index d7c20f48..a2796c9a 100644 --- a/xorriso/xorrecord.1 +++ b/xorriso/xorrecord.1 @@ -9,7 +9,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 XORRECORD 1 "Version 1.4.5, Jul 02, 2016" +.TH XORRECORD 1 "Version 1.4.5, Jul 30, 2016" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -480,6 +480,10 @@ Equivalent to: Equivalent to: .br modesty_on_drive=75 +.br +In cdrecord, this also controls use of the Immed bit. +But xorriso uses Immed where possible and appropriate, unless it is disabled +by option use_immed_bit=off . .TP \fB\-eject\fR Eject the drive tray after alll other work is done. @@ -643,6 +647,16 @@ Default is: modesty_on_drive=off:min_percent=90:max_percent=95: timeout_sec=120:min_usec=5000:max_usec=25000 .TP +\fBuse_immed_bit="on"|"off"|"default"\fR +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. xorriso 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 \fBwrite_start_address=value\fR Set the block address on overwritable media where to start writing the track. With DVD+RW, DVD\-RAM or BD\-RE, byte_offset must be aligned to 2 kiB blocks, diff --git a/xorriso/xorrecord.info b/xorriso/xorrecord.info index fdd9b7a0..2ec18c47 100644 --- a/xorriso/xorrecord.info +++ b/xorriso/xorrecord.info @@ -450,6 +450,9 @@ minbuf=percentage -immed Equivalent to: modesty_on_drive=75 + In cdrecord, this also controls use of the Immed bit. But xorriso + uses Immed where possible and appropriate, unless it is disabled by + option use_immed_bit=off . -eject Eject the drive tray after alll other work is done. @@ -596,6 +599,15 @@ modesty_on_drive=parameter[:parameters] option, stay unchanged. Default is: modesty_on_drive=off:min_percent=90:max_percent=95: timeout_sec=120:min_usec=5000:max_usec=25000 +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. xorriso 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. + It may depend on the operating system whether -use_immed_bit is set + to "off" by default. write_start_address=value Set the block address on overwritable media where to start writing the track. With DVD+RW, DVD-RAM or BD-RE, byte_offset must be @@ -878,7 +890,7 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -dao explicitly set write type SAO/DAO: SetBurn. (line 172) * -data explicitly announce a data track: SetBurn. (line 157) * -dummy control write simulation: SetBurn. (line 106) -* -eject finally eject drive tray: SetBurn. (line 211) +* -eject finally eject drive tray: SetBurn. (line 214) * -help print sparse overview of options: Verbous. (line 30) * -immed keep drive buffer hungry: SetBurn. (line 208) * -inq inquire drive identifiers: Inquire. (line 8) @@ -906,12 +918,13 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * minbuf= keep drive buffer hungry: SetBurn. (line 205) * padsize= add bytes to end of track: SetBurn. (line 144) * speed= set write speed: SetBurn. (line 189) -* stdio_sync= control stdio buffer: NonCdrecord. (line 116) +* stdio_sync= control stdio buffer: NonCdrecord. (line 125) * stream_recording= try to get full speed on DVD-RAM, BD: NonCdrecord. (line 56) * tsize= set a fixed track size: SetBurn. (line 126) +* use_immed_bit= control use of Immed bit: NonCdrecord. (line 110) * write_start_address= set block address for write start: NonCdrecord. - (line 110) + (line 119)  File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top @@ -923,6 +936,7 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Menu: * Accessing drive, wait for stdin, -waiti: SetBurn. (line 113) +* Blank, format, Immed bit, use_immed_bit=: NonCdrecord. (line 110) * Bugs, reporting: Bugreport. (line 6) * Data track, announce, -data: SetBurn. (line 157) * Defect management, control, stream_recording=: NonCdrecord. (line 56) @@ -932,7 +946,7 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Drive, inquire identifiers, -inq: Inquire. (line 8) * Drive, Linux device type, drive_scsi_dev_family: NonCdrecord. (line 12) -* Eject, the tray, -eject: SetBurn. (line 211) +* Eject, the tray, -eject: SetBurn. (line 214) * Examples: Examples. (line 6) * Fifo, set size, fs=: SetBurn. (line 174) * Full speed, on DVD-RAM and BD, stream_recording=: NonCdrecord. @@ -964,17 +978,17 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Track size, set fixed, tsize=: SetBurn. (line 126) * Track, _definiton: Standards. (line 13) * Transaction size, set, dvd_obs=: NonCdrecord. (line 66) -* Tray, eject, -eject: SetBurn. (line 211) +* Tray, eject, -eject: SetBurn. (line 214) * Verbosity, increase, -v: Verbous. (line 16) * Verbosity, SCSI commands, -V: Verbous. (line 20) * Version, report, -version: Verbous. (line 8) * Write simulation , control, -dummy: SetBurn. (line 106) * Write start address, set, write_start_address=: NonCdrecord. - (line 110) + (line 119) * Write type, SAO/DAO, -dao: SetBurn. (line 172) * Write type, SAO/DAO, -sao: SetBurn. (line 168) * Write type, TAO, -tao: SetBurn. (line 162) -* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 116) +* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 125) * Write, drive buffer, -immed: SetBurn. (line 208) * Write, drive buffer, minbuf=: SetBurn. (line 205) * Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 73) @@ -993,23 +1007,23 @@ Node: Options5885 Node: DriveAddr6253 Node: Inquire7618 Node: SetBurn10487 -Node: Verbous20938 -Node: NonCdrecord22488 -Node: Examples29314 -Node: ExDevices29975 -Node: ExMedium30193 -Node: ExBlank30456 -Node: ExFormat30677 -Node: ExDeformat31195 -Node: ExIsoSingle31462 -Node: ExIsoMulti31746 -Node: ExIsoFly33380 -Node: ExAfio34051 -Node: Files35049 -Node: Seealso35605 -Node: Bugreport35968 -Node: Legal36559 -Node: CommandIdx37488 -Node: ConceptIdx40905 +Node: Verbous21115 +Node: NonCdrecord22665 +Node: Examples30005 +Node: ExDevices30666 +Node: ExMedium30884 +Node: ExBlank31147 +Node: ExFormat31368 +Node: ExDeformat31886 +Node: ExIsoSingle32153 +Node: ExIsoMulti32437 +Node: ExIsoFly34071 +Node: ExAfio34742 +Node: Files35740 +Node: Seealso36296 +Node: Bugreport36659 +Node: Legal37250 +Node: CommandIdx38179 +Node: ConceptIdx41669  End Tag Table diff --git a/xorriso/xorrecord.texi b/xorriso/xorrecord.texi index a89c81cd..7c5650a8 100644 --- a/xorriso/xorrecord.texi +++ b/xorriso/xorrecord.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRECORD 1 "Version 1.4.5, Jul 02, 2016" +@c man .TH XORRECORD 1 "Version 1.4.5, Jul 30, 2016" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -661,6 +661,10 @@ Equivalent to: Equivalent to: @* modesty_on_drive=75 +@* +In cdrecord, this also controls use of the Immed bit. +But xorriso uses Immed where possible and appropriate, unless it is disabled +by option use_immed_bit=off . @c man .TP @item -eject @kindex -eject finally eject drive tray @@ -861,6 +865,18 @@ Default is: modesty_on_drive=off:min_percent=90:max_percent=95: timeout_sec=120:min_usec=5000:max_usec=25000 @c man .TP +@item use_immed_bit="on"|"off"|"default" +@kindex use_immed_bit= control use of Immed bit +@cindex Blank, format, Immed bit, use_immed_bit= +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. xorriso 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. +@* +It may depend on the operating system whether -use_immed_bit is set to "off" +by default. +@c man .TP @item write_start_address=value @kindex write_start_address= set block address for write start @cindex Write start address, set, write_start_address= diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index cb6eba09..98ba6a25 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,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 XORRISO 1 "Version 1.4.5, Jul 20, 2016" +.TH XORRISO 1 "Version 1.4.5, Jul 30, 2016" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -3004,6 +3004,18 @@ Default is: \-modesty_on_drive off:min_percent=90:max_percent=95: timeout_sec=120:min_usec=5000:max_usec=25000 .TP +\fB\-use_immed_bit\fR "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. xorriso 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. Command \-status will tell by appending "/on" or "/off" if a drive +has already been acquired and \-use_immed_bit is currently set to "default". +Command \-use_immed_bit tolerates and ignores such appended text. +.TP \fB\-stdio_sync\fR "on"|"off"|"end"|number Set the number of bytes after which to force output to stdio: pseudo drives. This forcing keeps the memory from being clogged with lots of diff --git a/xorriso/xorriso.h b/xorriso/xorriso.h index b7afaab1..28d510b8 100644 --- a/xorriso/xorriso.h +++ b/xorriso/xorriso.h @@ -2133,6 +2133,11 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path, /* @since 0.1.0 */ int Xorriso_option_use_readline(struct XorrisO *xorriso, char *mode, int flag); +/* Command -use_immed_bit */ +/* @since 1.4.6 */ +int Xorriso_option_use_immed_bit(struct XorrisO *xorriso, char *mode, + int flag); + /* Command -version */ /* @since 0.1.0 */ int Xorriso_option_version(struct XorrisO *xorriso, int flag); diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 08fc76c2..9a61de4c 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -2542,6 +2542,18 @@ according to the setting of command -acl. command, stay unchanged. Default is: -modesty_on_drive off:min_percent=90:max_percent=95: timeout_sec=120:min_usec=5000:max_usec=25000 +-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. xorriso 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. + It may depend on the operating system whether -use_immed_bit is set + to "off" by default. Command -status will tell by appending "/on" + or "/off" if a drive has already been acquired and -use_immed_bit + is currently set to "default". Command -use_immed_bit tolerates + and ignores such appended text. -stdio_sync "on"|"off"|"end"|number Set the number of bytes after which to force output to stdio: pseudo drives. This forcing keeps the memory from being clogged @@ -5120,7 +5132,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -chown sets ownership in ISO image: Manip. (line 43) * -chown_r sets ownership in ISO image: Manip. (line 47) * -clone copies ISO directory tree: Insert. (line 170) -* -close controls media closing: SetWrite. (line 373) +* -close controls media closing: SetWrite. (line 385) * -close_damaged closes damaged track and session: Writing. (line 164) * -close_filter_list bans filter registration: Filter. (line 50) * -commit writes pending ISO image: Writing. (line 27) @@ -5149,7 +5161,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top (line 57) * -drive_class controls drive accessability: Loading. (line 73) * -du show directory size in ISO image: Navigate. (line 75) -* -dummy controls write simulation: SetWrite. (line 365) +* -dummy controls write simulation: SetWrite. (line 377) * -dus show directory size in ISO image: Navigate. (line 78) * -dusx show directory size on disk: Navigate. (line 85) * -dux show directory size on disk: Navigate. (line 81) @@ -5173,7 +5185,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -follow softlinks and mount points: SetInsert. (line 69) * -format formats media: Writing. (line 87) * -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 210) -* -fs sets size of fifo: SetWrite. (line 368) +* -fs sets size of fifo: SetWrite. (line 380) * -getfacl shows ACL in ISO image: Navigate. (line 60) * -getfacl_r shows ACL in ISO image: Navigate. (line 66) * -getfattr shows xattr in ISO image: Navigate. (line 69) @@ -5235,7 +5247,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -out_charset sets output character set: SetWrite. (line 263) * -overwrite enables overwriting in ISO: SetInsert. (line 131) * -pacifier controls pacifier text form: Emulation. (line 166) -* -padding sets amount or mode of image padding: SetWrite. (line 396) +* -padding sets amount or mode of image padding: SetWrite. (line 408) * -page set terminal geometry: DialogCtl. (line 18) * -paste_in copies file into disk file: Restore. (line 114) * -pathspecs sets meaning of = with -add: SetInsert. (line 115) @@ -5297,7 +5309,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -split_size enables large file splitting: SetInsert. (line 143) * -status shows current settings: Scripting. (line 44) * -status_history_max curbs -status history: Scripting. (line 52) -* -stdio_sync controls stdio buffer: SetWrite. (line 358) +* -stdio_sync controls stdio buffer: SetWrite. (line 370) * -stream_recording controls defect management: SetWrite. (line 303) * -system_id sets system id: SetWrite. (line 199) * -tell_media_space reports free space: Inquiry. (line 97) @@ -5308,12 +5320,13 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -update inserts path if different: Insert. (line 100) * -update_l inserts paths if different: Insert. (line 120) * -update_r inserts paths if different: Insert. (line 110) +* -use_immed_bit controls use of Immed bit: SetWrite. (line 358) * -use_readline enables readline for dialog: DialogCtl. (line 26) * -version prints help text: Scripting. (line 22) * -volid sets volume id: SetWrite. (line 162) * -volset_id sets volume set id: SetWrite. (line 182) * -volume_date sets volume timestamp: SetWrite. (line 205) -* -write_type chooses TAO or SAO/DAO: SetWrite. (line 389) +* -write_type chooses TAO or SAO/DAO: SetWrite. (line 401) * -x enables automatic execution order of arguments: ArgSort. (line 16) * -xattr controls handling of xattr (EA): Loading. (line 178) * -zisofs controls zisofs production: SetWrite. (line 274) @@ -5346,6 +5359,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Backup, enable features, -for_backup: Loading. (line 210) * Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 179) * Blank media, _definition: Media. (line 29) +* Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 358) * Blind growing, _definition: Methods. (line 41) * Bootability, control, -boot_image: Bootable. (line 65) * Bugs, reporting: Bugreport. (line 6) @@ -5604,24 +5618,24 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Verify, preset -check_media, -check_media_defaults: Verify. (line 40) * Write, block size, -dvd_obs: SetWrite. (line 314) * Write, bootability, -boot_image: Bootable. (line 65) -* Write, buffer syncing, -stdio_sync: SetWrite. (line 358) -* Write, close media, -close: SetWrite. (line 373) +* Write, buffer syncing, -stdio_sync: SetWrite. (line 370) +* Write, close media, -close: SetWrite. (line 385) * Write, compliance to specs, -compliance: SetWrite. (line 56) * Write, defect management, -stream_recording: SetWrite. (line 303) * Write, disable Rock Ridge, -rockridge: SetWrite. (line 51) * Write, drive buffer, -modesty_on_drive: SetWrite. (line 320) * Write, enable HFS+, -hfsplus: SetWrite. (line 14) * Write, enable Joliet, -joliet: SetWrite. (line 10) -* Write, fifo size, -fs: SetWrite. (line 368) +* Write, fifo size, -fs: SetWrite. (line 380) * Write, free space, -tell_media_space: Inquiry. (line 97) * Write, log problematic disk files, -errfile_log: Scripting. (line 116) * Write, log written sessions, -session_log: Scripting. (line 134) -* Write, padding image, -padding: SetWrite. (line 396) +* Write, padding image, -padding: SetWrite. (line 408) * Write, pending ISO image, -commit: Writing. (line 27) * Write, predict image size, -print_size: Inquiry. (line 85) * Write, set speed, -speed: SetWrite. (line 285) -* Write, simulation, -dummy: SetWrite. (line 365) -* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 389) +* Write, simulation, -dummy: SetWrite. (line 377) +* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 401) * xattr, control handling, -xattr: Loading. (line 178) * xattr, set in ISO image, -setfattr: Manip. (line 103) * xattr, set in ISO image, -setfattr_list: Manip. (line 117) @@ -5653,40 +5667,40 @@ Node: CmdFind82395 Node: Filter100698 Node: Writing105320 Node: SetWrite115476 -Node: Bootable138520 -Node: Jigdo162313 -Node: Charset166572 -Node: Exception169901 -Node: DialogCtl176030 -Node: Inquiry178632 -Node: Navigate187082 -Node: Verify195377 -Node: Restore205255 -Node: Emulation213868 -Node: Scripting224278 -Node: Frontend232061 -Node: Examples241687 -Node: ExDevices242865 -Node: ExCreate243526 -Node: ExDialog244826 -Node: ExGrowing246097 -Node: ExModifying246906 -Node: ExBootable247416 -Node: ExCharset247971 -Node: ExPseudo248867 -Node: ExCdrecord249794 -Node: ExMkisofs250114 -Node: ExGrowisofs251471 -Node: ExException252625 -Node: ExTime253083 -Node: ExIncBackup253541 -Node: ExRestore257567 -Node: ExRecovery258513 -Node: Files259085 -Node: Seealso260419 -Node: Bugreport261134 -Node: Legal261725 -Node: CommandIdx262737 -Node: ConceptIdx279852 +Node: Bootable139259 +Node: Jigdo163052 +Node: Charset167311 +Node: Exception170640 +Node: DialogCtl176769 +Node: Inquiry179371 +Node: Navigate187821 +Node: Verify196116 +Node: Restore205994 +Node: Emulation214607 +Node: Scripting225017 +Node: Frontend232800 +Node: Examples242426 +Node: ExDevices243604 +Node: ExCreate244265 +Node: ExDialog245565 +Node: ExGrowing246836 +Node: ExModifying247645 +Node: ExBootable248155 +Node: ExCharset248710 +Node: ExPseudo249606 +Node: ExCdrecord250533 +Node: ExMkisofs250853 +Node: ExGrowisofs252210 +Node: ExException253364 +Node: ExTime253822 +Node: ExIncBackup254280 +Node: ExRestore258306 +Node: ExRecovery259252 +Node: Files259824 +Node: Seealso261158 +Node: Bugreport261873 +Node: Legal262464 +Node: CommandIdx263476 +Node: ConceptIdx280664  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index e732b118..fa85c02f 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRISO 1 "Version 1.4.5, Jul 20, 2016" +@c man .TH XORRISO 1 "Version 1.4.5, Jul 30, 2016" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -3512,6 +3512,20 @@ Default is: -modesty_on_drive off:min_percent=90:max_percent=95: timeout_sec=120:min_usec=5000:max_usec=25000 @c man .TP +@item -use_immed_bit "on"|"off"|"default" +@kindex -use_immed_bit controls use of Immed bit +@cindex Blank, format, Immed bit, -use_immed_bit +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. xorriso 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. +@* +It may depend on the operating system whether -use_immed_bit is set to "off" +by default. Command -status will tell by appending "/on" or "/off" if a drive +has already been acquired and -use_immed_bit is currently set to "default". +Command -use_immed_bit tolerates and ignores such appended text. +@c man .TP @item -stdio_sync "on"|"off"|"end"|number @kindex -stdio_sync controls stdio buffer @cindex Write, buffer syncing, -stdio_sync diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 9e9d651d..32eaf46a 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -383,6 +383,9 @@ struct XorrisO { /* the global context of xorriso */ int min_buffer_percent; int max_buffer_percent; + int use_immed_bit; /* 1= on , 0= default , -1 = off */ + int use_immed_bit_default; /* 1= on , 0= yet undefined , -1 = off */ + int stdio_sync; /* stdio fsync interval: -1, 0, >=32 */ int stdio_sync_is_default; /* 1= is still default , 0= has been set */ diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 16933f30..7dc0cffb 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2016.07.21.103607" +#define Xorriso_timestamP "2016.07.31.073903" diff --git a/xorriso/xorrisoburn.h b/xorriso/xorrisoburn.h index 185f37b1..fabeca00 100644 --- a/xorriso/xorrisoburn.h +++ b/xorriso/xorrisoburn.h @@ -624,6 +624,8 @@ int Xorriso_pretend_full_disc(struct XorrisO *xorriso, int flag); int Xorriso_scsi_dev_family(struct XorrisO *xorriso, int flag); +int Xorriso_use_immed_bit(struct XorrisO *xorriso, int flag); + int Xorriso_apply_sort_file(struct XorrisO *xorriso, char *path, int flag);