New -pacifier behavior code "interval="

This commit is contained in:
Thomas Schmitt 2013-06-02 11:25:07 +00:00
parent 31c2cc2495
commit c23e8eeac0
7 changed files with 115 additions and 49 deletions

View File

@ -33,6 +33,10 @@
/* Option -pacifier */ /* Option -pacifier */
int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag) int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag)
{ {
#define Xorriso_pacifier_min_intvL 0.1
#define Xorriso_pacifier_max_intvL 60.0
if(strcmp(style, "xorriso")==0 || strcmp(style, "default")==0) if(strcmp(style, "xorriso")==0 || strcmp(style, "default")==0)
xorriso->pacifier_style= 0; xorriso->pacifier_style= 0;
else if(strcmp(style, "mkisofs")==0 || strcmp(style, "genisofs")==0 || else if(strcmp(style, "mkisofs")==0 || strcmp(style, "genisofs")==0 ||
@ -41,7 +45,24 @@ int Xorriso_option_pacifier(struct XorrisO *xorriso, char *style, int flag)
else if(strcmp(style, "cdrecord")==0 || strcmp(style, "cdrskin")==0 || else if(strcmp(style, "cdrecord")==0 || strcmp(style, "cdrskin")==0 ||
strcmp(style, "wodim")==0 || strcmp(style, "xorrecord")==0) strcmp(style, "wodim")==0 || strcmp(style, "xorrecord")==0)
xorriso->pacifier_style= 2; xorriso->pacifier_style= 2;
else {
else if(strncmp(style, "interval=", 9) == 0) {
sscanf(style + 9, "%lf", &(xorriso->pacifier_interval));
if(xorriso->pacifier_interval < Xorriso_pacifier_min_intvL) {
sprintf(xorriso->info_text,
"-pacifier: interval='%s' is too low. Min: %f",
style, Xorriso_pacifier_min_intvL);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
xorriso->pacifier_interval= Xorriso_pacifier_min_intvL;
} else if(xorriso->pacifier_interval > Xorriso_pacifier_max_intvL) {
sprintf(xorriso->info_text,
"-pacifier: interval='%s' is too high. Max: %f",
style, Xorriso_pacifier_max_intvL);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
xorriso->pacifier_interval= Xorriso_pacifier_max_intvL;
}
} else {
sprintf(xorriso->info_text, "-pacifier: unknown behavior code '%s'", style); sprintf(xorriso->info_text, "-pacifier: unknown behavior code '%s'", style);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
return(0); return(0);

View File

@ -3088,6 +3088,10 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
xorriso->pacifier_style==2 ? "cdrecord" : "xorriso"); xorriso->pacifier_style==2 ? "cdrecord" : "xorriso");
if(!(is_default && no_defaults)) if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2); Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (xorriso->pacifier_interval == 1.0);
sprintf(line,"-pacifier interval=%f\n", xorriso->pacifier_interval);
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (strcmp(xorriso->return_with_text,"SORRY")==0 && is_default= (strcmp(xorriso->return_with_text,"SORRY")==0 &&
xorriso->return_with_value==32); xorriso->return_with_value==32);
@ -3418,7 +3422,7 @@ int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done,
{ {
double current_time, since, interval_time, speed, speed_factor; double current_time, since, interval_time, speed, speed_factor;
char count_text[80], byte_text[80], profile_name[80], *speed_unit; char count_text[80], byte_text[80], profile_name[80], *speed_unit;
int ret, profile_number; int ret, profile_number, short_sec;
off_t amount; off_t amount;
current_time= Sfile_microtime(0); current_time= Sfile_microtime(0);
@ -3428,8 +3432,10 @@ int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done,
return(1); return(1);
xorriso->last_update_time= Sfile_microtime(0); xorriso->last_update_time= Sfile_microtime(0);
since= current_time - xorriso->start_time; since= current_time - xorriso->start_time;
if((flag&1)&&since<1.0) if((flag & 1) && since < 1.0 && xorriso->pacifier_interval >= 1.0)
since= 1.0; since= 1.0;
if((flag & 1) && since < 0.1)
since= 0.1;
byte_text[0]= 0; byte_text[0]= 0;
if(flag&4) { if(flag&4) {
strcat(byte_text, " ("); strcat(byte_text, " (");
@ -3437,24 +3443,35 @@ int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done,
byte_text+strlen(byte_text), 7, 1e5, 0); byte_text+strlen(byte_text), 7, 1e5, 0);
strcat(byte_text, ")"); strcat(byte_text, ")");
} }
short_sec= 0;
if(count<=0.0 && !(flag&2)) { if(count<=0.0 && !(flag&2)) {
if(since < 2) if(since < 2)
return(2); return(2);
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"Thank you for being patient for %.f seconds", since); "Thank you for being patient for");
} else if(todo<=0.0) { } else if(todo<=0.0) {
if(count<10000000) if(count<10000000)
sprintf(count_text, "%.f", (double) count); sprintf(count_text, "%.f", (double) count);
else else
Sfile_scale((double) count, count_text, 7, 1e5, 1); Sfile_scale((double) count, count_text, 7, 1e5, 1);
sprintf(xorriso->info_text, "%s %s%s in %.f %s", sprintf(xorriso->info_text, "%s %s%s in",
count_text, what_done, byte_text, since, count_text, what_done, byte_text);
(flag & 64) ? "s" : "seconds"); short_sec= (flag & 64);
} else { } else {
sprintf(xorriso->info_text, "%.f of %.f %s%s in %.f %s", sprintf(xorriso->info_text, "%.f of %.f %s%s in",
(double) count, (double) todo, what_done, byte_text, since, (double) count, (double) todo, what_done, byte_text);
(flag & (8 | 64)) ? "s" : "seconds"); short_sec= (flag & (8 | 64));
} }
if(xorriso->pacifier_interval < 1.0) {
sprintf(xorriso->info_text + strlen(xorriso->info_text),
" %.1f", since);
} else {
sprintf(xorriso->info_text + strlen(xorriso->info_text),
" %.f", since);
}
sprintf(xorriso->info_text + strlen(xorriso->info_text),
" %s", short_sec ? "s" : "seconds");
speed= -1.0; speed= -1.0;
if(flag & 4) if(flag & 4)
amount= xorriso->pacifier_byte_count; amount= xorriso->pacifier_byte_count;

View File

@ -1218,7 +1218,8 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
double start_time, current_time, last_time, base_time= 0.0, base_count= 0.0; double start_time, current_time, last_time, base_time= 0.0, base_count= 0.0;
double next_base_time= 0.0, next_base_count= 0.0, first_base_time= 0.0; double next_base_time= 0.0, next_base_count= 0.0, first_base_time= 0.0;
double first_base_count= 0.0, norm= 0.0, now_time, fract_offset= 0.0; double first_base_count= 0.0, norm= 0.0, now_time, fract_offset= 0.0;
double measured_speed, speed_factor= 1385000, quot; double measured_speed, speed_factor= 1385000, quot, speed_min_time;
double tdiff, now_fract;
time_t time_prediction; time_t time_prediction;
IsoImage *image= NULL; IsoImage *image= NULL;
@ -1229,9 +1230,10 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
usleep(100002); usleep(100002);
emul= flag&15; emul= flag&15;
fract_offset= 0.2 * (double) emul - ((int) (0.2 * (double) emul));
if(emul==0) if(emul==0)
emul= xorriso->pacifier_style; emul= xorriso->pacifier_style;
fract_offset= 1.0 / 3.0 * (double) emul - ((int) (1.0 / 3.0 * (double) emul));
speed_min_time= 0.2 * xorriso->pacifier_interval;
speed_unit= "D"; speed_unit= "D";
if(flag&16) { if(flag&16) {
speed_factor= 150.0*1024; speed_factor= 150.0*1024;
@ -1266,7 +1268,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
} }
current_time= Sfile_microtime(0); current_time= Sfile_microtime(0);
if(drive_status == BURN_DRIVE_WRITING && progress.sectors > 0) { if(drive_status == BURN_DRIVE_WRITING && progress.sectors > 0) {
if(current_time-last_time>0.2) if(current_time-last_time > speed_min_time)
measured_speed= (progress.sector - last_sector) * 2048.0 / measured_speed= (progress.sector - last_sector) * 2048.0 /
(current_time - last_time); (current_time - last_time);
buffer_fill= 50; buffer_fill= 50;
@ -1295,7 +1297,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
sprintf(xorriso->info_text+strlen(xorriso->info_text), " [buf %3d%%]", sprintf(xorriso->info_text+strlen(xorriso->info_text), " [buf %3d%%]",
buffer_fill); buffer_fill);
if(current_time-last_time>0.2) if(current_time-last_time > speed_min_time)
sprintf(xorriso->info_text+strlen(xorriso->info_text), " %4.1fx.", sprintf(xorriso->info_text+strlen(xorriso->info_text), " %4.1fx.",
measured_speed/speed_factor); measured_speed/speed_factor);
@ -1367,7 +1369,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
" fifo %3d%% buf %3d%%", " fifo %3d%% buf %3d%%",
(int) (100.0-100.0*((double) free_bytes)/(double) size), (int) (100.0-100.0*((double) free_bytes)/(double) size),
buffer_fill); buffer_fill);
if(current_time-last_time>0.2) if(current_time - last_time > speed_min_time)
sprintf(xorriso->info_text+strlen(xorriso->info_text), " %5.1fx%s ", sprintf(xorriso->info_text+strlen(xorriso->info_text), " %5.1fx%s ",
measured_speed/speed_factor, speed_unit); measured_speed/speed_factor, speed_unit);
} }
@ -1385,14 +1387,22 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
current_time-start_time); current_time-start_time);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
for(i= 0; i<12; i++) { /* 2 usleeps more than supposed to be needed */ for(i= 0; i < 20; i++) { /* 10 usleeps more than supposed to be needed */
Xorriso_process_msg_queues(xorriso, 0); Xorriso_process_msg_queues(xorriso, 0);
if(aborting<=0) if(aborting<=0)
aborting= Xorriso_check_burn_abort(xorriso, 0); aborting= Xorriso_check_burn_abort(xorriso, 0);
usleep(100000); usleep((unsigned long) (100000.0 * xorriso->pacifier_interval));
now_time= Sfile_microtime(0); now_time= Sfile_microtime(0);
if(((time_t) now_time) - ((time_t) current_time) >= 1 && tdiff= ((off_t)(now_time / xorriso->pacifier_interval)) -
now_time - ((time_t) now_time) >= fract_offset) (off_t)(current_time / xorriso->pacifier_interval);
now_fract= (now_time / xorriso->pacifier_interval -
(off_t)(now_time / xorriso->pacifier_interval));
if(tdiff < 1.0)
continue;
if(fract_offset <= 0.0) /* "xorriso" pacifier shall not wait for slot */
break;
if((now_fract >= fract_offset && now_fract < fract_offset + 0.3) ||
tdiff >= 2.0)
break; break;
} }
} }

View File

@ -9,7 +9,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH XORRISO 1 "Version 1.3.1, Mai 29, 2013" .TH XORRISO 1 "Version 1.3.1, Jun 02, 2013"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -4323,6 +4323,13 @@ X of Y MB written (fifo nn%) [buf mmm%]
"mkisofs" "mkisofs"
.br .br
nn% done, estimate finish Tue Jul 15 20:13:28 2008 nn% done, estimate finish Tue Jul 15 20:13:28 2008
.br
The frequency of the messages can be adjusted by
.br
"interval=number"
.br
where number gives the seconds between two messages. Permissible settings
are 0.1 to 60.0.
.TP .TP
\fB\-scdbackup_tag\fR list_path record_name \fB\-scdbackup_tag\fR list_path record_name
Set the parameter "name" for a scdbackup checksum record. Set the parameter "name" for a scdbackup checksum record.

View File

@ -3790,6 +3790,10 @@ said programs trigger comparable actions.
X of Y MB written (fifo nn%) [buf mmm%] X of Y MB written (fifo nn%) [buf mmm%]
"mkisofs" "mkisofs"
nn% done, estimate finish Tue Jul 15 20:13:28 2008 nn% done, estimate finish Tue Jul 15 20:13:28 2008
The frequency of the messages can be adjusted by
"interval=number"
where number gives the seconds between two messages. Permissible
settings are 0.1 to 60.0.
-scdbackup_tag list_path record_name -scdbackup_tag list_path record_name
Set the parameter "name" for a scdbackup checksum record. It will Set the parameter "name" for a scdbackup checksum record. It will
@ -4906,7 +4910,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -rom_toc_scan searches for sessions: Loading. (line 214) * -rom_toc_scan searches for sessions: Loading. (line 214)
* -rr_reloc_dir sets name of relocation directory: SetWrite. * -rr_reloc_dir sets name of relocation directory: SetWrite.
(line 141) (line 141)
* -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 173) * -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 177)
* -scsi_log reports SCSI commands: Scripting. (line 147) * -scsi_log reports SCSI commands: Scripting. (line 147)
* -session_log logs written sessions: Scripting. (line 138) * -session_log logs written sessions: Scripting. (line 138)
* -session_string composes session info line: Inquiry. (line 78) * -session_string composes session info line: Inquiry. (line 78)
@ -4973,7 +4977,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Backslash Interpretation, _definition: Processing. (line 52) * Backslash Interpretation, _definition: Processing. (line 52)
* Backup, enable fast incremental, -disk_dev_ino: Loading. (line 193) * Backup, enable fast incremental, -disk_dev_ino: Loading. (line 193)
* Backup, enable features, -for_backup: Loading. (line 188) * Backup, enable features, -for_backup: Loading. (line 188)
* Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 173) * Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 177)
* Blank media, _definition: Media. (line 29) * Blank media, _definition: Media. (line 29)
* Blind growing, _definition: Methods. (line 40) * Blind growing, _definition: Methods. (line 40)
* Bootability, control, -boot_image: Bootable. (line 26) * Bootability, control, -boot_image: Bootable. (line 26)
@ -5268,30 +5272,30 @@ Node: Navigate160915
Node: Verify169213 Node: Verify169213
Node: Restore178245 Node: Restore178245
Node: Emulation185332 Node: Emulation185332
Node: Scripting195456 Node: Scripting195634
Node: Frontend202613 Node: Frontend202791
Node: Examples210688 Node: Examples210866
Node: ExDevices211866 Node: ExDevices212044
Node: ExCreate212525 Node: ExCreate212703
Node: ExDialog213810 Node: ExDialog213988
Node: ExGrowing215075 Node: ExGrowing215253
Node: ExModifying215880 Node: ExModifying216058
Node: ExBootable216384 Node: ExBootable216562
Node: ExCharset216936 Node: ExCharset217114
Node: ExPseudo217757 Node: ExPseudo217935
Node: ExCdrecord218655 Node: ExCdrecord218833
Node: ExMkisofs218972 Node: ExMkisofs219150
Node: ExGrowisofs220312 Node: ExGrowisofs220490
Node: ExException221447 Node: ExException221625
Node: ExTime221901 Node: ExTime222079
Node: ExIncBackup222360 Node: ExIncBackup222538
Node: ExRestore226340 Node: ExRestore226518
Node: ExRecovery227273 Node: ExRecovery227451
Node: Files227843 Node: Files228021
Node: Seealso229142 Node: Seealso229320
Node: Bugreport229865 Node: Bugreport230043
Node: Legal230446 Node: Legal230624
Node: CommandIdx231457 Node: CommandIdx231635
Node: ConceptIdx247759 Node: ConceptIdx247937
 
End Tag Table End Tag Table

View File

@ -50,7 +50,7 @@
@c man .\" First parameter, NAME, should be all caps @c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @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 .\" other parameters are allowed: see man(7), man(1)
@c man .TH XORRISO 1 "Version 1.3.1, Mai 29, 2013" @c man .TH XORRISO 1 "Version 1.3.1, Jun 02, 2013"
@c man .\" Please adjust this date whenever revising the manpage. @c man .\" Please adjust this date whenever revising the manpage.
@c man .\" @c man .\"
@c man .\" Some roff macros, for reference: @c man .\" Some roff macros, for reference:
@ -5047,6 +5047,13 @@ X of Y MB written (fifo nn%) [buf mmm%]
"mkisofs" "mkisofs"
@* @*
nn% done, estimate finish Tue Jul 15 20:13:28 2008 nn% done, estimate finish Tue Jul 15 20:13:28 2008
@*
The frequency of the messages can be adjusted by
@*
"interval=number"
@*
where number gives the seconds between two messages. Permissible settings
are 0.1 to 60.0.
@c man .TP @c man .TP
@item -scdbackup_tag list_path record_name @item -scdbackup_tag list_path record_name
@kindex -scdbackup_tag enables scdbackup checksum tag @kindex -scdbackup_tag enables scdbackup checksum tag

View File

@ -1 +1 @@
#define Xorriso_timestamP "2013.05.30.192537" #define Xorriso_timestamP "2013.06.02.112441"