diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 6878ce85..f8b6a16a 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -343,6 +343,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->pacifier_style= 0; m->pacifier_interval= 1.0; m->pacifier_count= 0; + m->pacifier_prev_count= 0; m->pacifier_total= 0; m->pacifier_byte_count= 0; m->pacifier_fifo= NULL; diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index f49fa3bf..5b54554e 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -2419,8 +2419,8 @@ failed_to_write:; xorriso->pacifier_count+= to_read; if(post_read_time - xorriso->last_update_time >= xorriso->pacifier_interval) - Xorriso_pacifier_callback(xorriso, "sectors examined", - xorriso->pacifier_count, xorriso->pacifier_total, "", 0); + Xorriso_pacifier_callback(xorriso, "blocks read", + xorriso->pacifier_count, xorriso->pacifier_total, "", 8 | 16); } } if(prev_quality >= 0) { @@ -2647,8 +2647,9 @@ libburn_whole_disc:; goto ex; } - Xorriso_pacifier_callback(xorriso, "sectors examined", - xorriso->pacifier_count, xorriso->pacifier_total, "", 1); + Xorriso_pacifier_callback(xorriso, "blocks read", + xorriso->pacifier_count, xorriso->pacifier_total, "", + 1 | 8 | 16 | 32); ret= 1; ex:; diff --git a/xorriso/read_run.c b/xorriso/read_run.c index f1192a14..3e2ce4fa 100644 --- a/xorriso/read_run.c +++ b/xorriso/read_run.c @@ -1863,8 +1863,8 @@ int Xorriso_extract_cut(struct XorrisO *xorriso, goto ex; if(mem_lut != xorriso->last_update_time) - Xorriso_pacifier_callback(xorriso, "sectors examined", - xorriso->pacifier_count, 0, "", 1); + Xorriso_pacifier_callback(xorriso, "blocks read", + xorriso->pacifier_count, 0, "", 1 | 8 | 16 | 32); ret= 1; ex:; Xorriso_free_meM(eff_img_path); diff --git a/xorriso/text_io.c b/xorriso/text_io.c index 973e50d5..6524b321 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -1301,11 +1301,12 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) if(xorriso->allow_restore == -1) sprintf(line,"-osirrox %s\n", mode_pt); else - sprintf(line,"-osirrox %s:%s:%s:%s:%s\n", mode_pt, + sprintf(line,"-osirrox %s:%s:%s:%s:%s:%s\n", mode_pt, xorriso->do_concat_split ? "concat_split_on" : "concat_split_off", xorriso->do_auto_chmod ? "auto_chmod_on" : "auto_chmod_off", xorriso->do_restore_sort_lba ? "sort_lba_on" : "sort_lba_off", - xorriso->drives_exclusive ? "o_excl_on" : "o_excl_off" + xorriso->drives_exclusive ? "o_excl_on" : "o_excl_off", + (xorriso->do_strict_acl & 1) ? "strict_acl_on" : "strict_acl_off" ); if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); @@ -1985,6 +1986,7 @@ int Xorriso_pacifier_reset(struct XorrisO *xorriso, int flag) xorriso->start_time= Sfile_microtime(0); xorriso->last_update_time= xorriso->start_time; xorriso->pacifier_count= 0; + xorriso->pacifier_prev_count= 0; xorriso->pacifier_total= 0; xorriso->pacifier_byte_count= 0; return(1); @@ -2005,17 +2007,22 @@ int Xorriso_pacifier_reset(struct XorrisO *xorriso, int flag) @param flag bit0= report unconditionally, no time check bit1= report count <=0 (no thank you for being patient then) bit2= report xorriso->pacifier_byte_count + bit3= report speed + bit4= with bit3: count is in blocks, else in bytes + bit5= with bit3: report total speed bit6= report with carriage return rather than line feed */ int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done, off_t count, off_t todo, char *current_object, int flag) { - double current_time, since; - char count_text[80], byte_text[80]; + double current_time, since, interval_time, speed, speed_factor; + char count_text[80], byte_text[80], profile_name[80], *speed_unit; + int ret, profile_number; current_time= Sfile_microtime(0); - if(current_time - xorriso->last_update_time < xorriso->pacifier_interval + interval_time= current_time - xorriso->last_update_time; + if(interval_time < xorriso->pacifier_interval && !(flag&1)) return(1); xorriso->last_update_time= Sfile_microtime(0); @@ -2040,11 +2047,39 @@ int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done, else Sfile_scale((double) count, count_text, 7, 1e5, 1); sprintf(xorriso->info_text, "%s %s%s in %.f %s", - count_text, what_done, byte_text, since, (flag&64) ? "s" : "seconds"); + count_text, what_done, byte_text, since, + (flag & 64) ? "s" : "seconds"); } else { - sprintf(xorriso->info_text, "%.f of %.f %s%s in %.f seconds", - (double) count, (double) todo, what_done, byte_text, since); + sprintf(xorriso->info_text, "%.f of %.f %s%s in %.f %s", + (double) count, (double) todo, what_done, byte_text, since, + (flag & (8 | 64)) ? "s" : "seconds"); } + speed= -1.0; + if((flag & 8)) { + if(flag & 32) { + if(since > 0) + speed= count / since; + } else if(count >= xorriso->pacifier_prev_count) { + speed= (count - xorriso->pacifier_prev_count) / (interval_time); + } + } + if(speed >= 0.0) { + if(flag & 16) + speed*= 2048.0; + ret= Xorriso_get_profile(xorriso, &profile_number, profile_name, 0); + speed_factor= 1385000; + speed_unit= "D"; + if(ret == 2) { + speed_factor= 150.0*1024; + speed_unit= "C"; + } else if(ret == 3) { + speed_factor= 4495625; + speed_unit= "B"; + } + sprintf(xorriso->info_text+strlen(xorriso->info_text), " %s %.1fx%s", + (flag & 32 ? "=" : ","), speed / speed_factor, speed_unit); + } + xorriso->pacifier_prev_count= count; if(current_object[0]!=0) sprintf(xorriso->info_text+strlen(xorriso->info_text), ", now at %s", current_object); diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 08413bfa..4cf56925 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -571,6 +571,7 @@ struct XorrisO { /* the global context of xorriso */ off_t pacifier_count; off_t pacifier_total; off_t pacifier_byte_count; /* auxiliary counter for data bytes */ + off_t pacifier_prev_count; /* internal counter for speed measurement */ void *pacifier_fifo; diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 86ada882..9edaa7c3 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2012.01.18.093532" +#define Xorriso_timestamP "2012.01.21.114233"