diff --git a/NEWS b/NEWS index 5c8184b4..311a2f1a 100644 --- a/NEWS +++ b/NEWS @@ -20,6 +20,8 @@ Please send GNU Wget bug reports to . ** Print some diagnostic messages to stderr not to stdout. ** Report stdout close errors. + +** Accept the --bit option. * Changes in Wget 1.13.4 diff --git a/src/ChangeLog b/src/ChangeLog index caebc5e4..a156c479 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2012-03-06 Sasikantha Babu + + * utils.c (convert_to_bits): Added new function convert_to_bits to + convert bytes to bits. + * retr.c (calc_rate): Modified the function to handle --bits + option and download rate calculated as bits per sec (SI-prefix) + for --bits otherwise bytes (IEC-prefix). + (retr_rate): Rates will display in bits per sec for --bits. + * options.h (struct opt): Added --bit option bool variable bits_fmt. + * main.c (print_help) : Added help for --bit. + * init.c: Defined command for --bit option. + * retr.h: Added function prototype. + 2012-02-26 Giuseppe Scrivano * main.c: Include "closeout.h" diff --git a/src/init.c b/src/init.c index d2fba82c..c890956c 100644 --- a/src/init.c +++ b/src/init.c @@ -127,6 +127,7 @@ static const struct { { "backups", &opt.backups, cmd_number }, { "base", &opt.base_href, cmd_string }, { "bindaddress", &opt.bind_address, cmd_string }, + { "bits", &opt.bits_fmt, cmd_boolean}, #ifdef HAVE_SSL { "cacertificate", &opt.ca_cert, cmd_file }, #endif diff --git a/src/main.c b/src/main.c index 3e731e9d..a12aaf1b 100644 --- a/src/main.c +++ b/src/main.c @@ -167,6 +167,7 @@ static struct cmdline_option option_data[] = { "backups", 0, OPT_BOOLEAN, "backups", -1 }, { "base", 'B', OPT_VALUE, "base", -1 }, { "bind-address", 0, OPT_VALUE, "bindaddress", -1 }, + { "bits", 0, OPT_BOOLEAN, "bits", -1 }, { IF_SSL ("ca-certificate"), 0, OPT_VALUE, "cacertificate", -1 }, { IF_SSL ("ca-directory"), 0, OPT_VALUE, "cadirectory", -1 }, { "cache", 0, OPT_BOOLEAN, "cache", -1 }, @@ -746,6 +747,11 @@ Recursive accept/reject:\n"), -np, --no-parent don't ascend to the parent directory.\n"), "\n", + N_("\ +Output format:\n"), + N_("\ + --bits Output bandwidth in bits.\n"), + "\n", N_("Mail bug reports and suggestions to .\n") }; diff --git a/src/options.h b/src/options.h index 0be66814..1f429906 100644 --- a/src/options.h +++ b/src/options.h @@ -266,6 +266,7 @@ struct options bool show_all_dns_entries; /* Show all the DNS entries when resolving a name. */ + bool bits_fmt; /*Output bandwidth in bits format*/ }; extern struct options opt; diff --git a/src/progress.c b/src/progress.c index 219b5bea..799d6e37 100644 --- a/src/progress.c +++ b/src/progress.c @@ -861,7 +861,7 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) struct bar_progress_hist *hist = &bp->hist; /* The progress bar should look like this: - xx% [=======> ] nn,nnn 12.34K/s eta 36m 51s + xx% [=======> ] nn,nnn 12.34KB/s eta 36m 51s Calculate the geometry. The idea is to assign as much room as possible to the progress bar. The other idea is to never let @@ -873,7 +873,7 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) "xx% " or "100%" - percentage - 4 chars "[]" - progress bar decorations - 2 chars " nnn,nnn,nnn" - downloaded bytes - 12 chars or very rarely more - " 12.5K/s" - download rate - 8 chars + " 12.5KB/s" - download rate - 9 chars " eta 36m 51s" - ETA - 14 chars "=====>..." - progress bar - the rest @@ -977,10 +977,11 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) *p++ = ' '; } - /* " 12.52K/s" */ + /* " 12.52Kb/s or 12.52KB/s" */ if (hist->total_time > 0 && hist->total_bytes) { - static const char *short_units[] = { "B/s", "K/s", "M/s", "G/s" }; + static const char *short_units[] = { "B/s", "KB/s", "MB/s", "GB/s" }; + static const char *short_units_bits[] = { "b/s", "Kb/s", "Mb/s", "Gb/s" }; int units = 0; /* Calculate the download speed using the history ring and recent data that hasn't made it to the ring yet. */ @@ -988,7 +989,7 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) double dltime = hist->total_time + (dl_total_time - bp->recent_start); double dlspeed = calc_rate (dlquant, dltime, &units); sprintf (p, " %4.*f%s", dlspeed >= 99.95 ? 0 : dlspeed >= 9.995 ? 1 : 2, - dlspeed, short_units[units]); + dlspeed, !opt.bits_fmt?short_units[units]:short_units_bits[units]); move_to_end (p); } else diff --git a/src/retr.c b/src/retr.c index 8c8cdf5b..5f33c7a7 100644 --- a/src/retr.c +++ b/src/retr.c @@ -620,6 +620,7 @@ retr_rate (wgint bytes, double secs) { static char res[20]; static const char *rate_names[] = {"B/s", "KB/s", "MB/s", "GB/s" }; + static const char *rate_names_bits[] = {"b/s", "Kb/s", "Mb/s", "Gb/s" }; int units; double dlrate = calc_rate (bytes, secs, &units); @@ -627,7 +628,7 @@ retr_rate (wgint bytes, double secs) e.g. "1022", "247", "12.5", "2.38". */ sprintf (res, "%.*f %s", dlrate >= 99.95 ? 0 : dlrate >= 9.995 ? 1 : 2, - dlrate, rate_names[units]); + dlrate, !opt.bits_fmt? rate_names[units]: rate_names_bits[units]); return res; } @@ -644,6 +645,11 @@ double calc_rate (wgint bytes, double secs, int *units) { double dlrate; + double bibyte = 1000.0; + + if (!opt.bits_fmt) + bibyte = 1024.0; + assert (secs >= 0); assert (bytes >= 0); @@ -655,16 +661,17 @@ calc_rate (wgint bytes, double secs, int *units) 0 and the timer's resolution, assume half the resolution. */ secs = ptimer_resolution () / 2.0; - dlrate = bytes / secs; - if (dlrate < 1024.0) + dlrate = convert_to_bits (bytes) / secs; + if (dlrate < bibyte) *units = 0; - else if (dlrate < 1024.0 * 1024.0) - *units = 1, dlrate /= 1024.0; - else if (dlrate < 1024.0 * 1024.0 * 1024.0) - *units = 2, dlrate /= (1024.0 * 1024.0); + else if (dlrate < (bibyte * bibyte)) + *units = 1, dlrate /= bibyte; + else if (dlrate < (bibyte * bibyte * bibyte)) + *units = 2, dlrate /= (bibyte * bibyte); + else /* Maybe someone will need this, one day. */ - *units = 3, dlrate /= (1024.0 * 1024.0 * 1024.0); + *units = 3, dlrate /= (bibyte * bibyte * bibyte); return dlrate; } diff --git a/src/retr.h b/src/retr.h index 22ab9ecd..776238b1 100644 --- a/src/retr.h +++ b/src/retr.h @@ -75,4 +75,6 @@ void set_local_file (const char **, const char *); bool input_file_url (const char *); +wgint convert_to_bits (wgint num); + #endif /* RETR_H */ diff --git a/src/utils.c b/src/utils.c index 509088b6..244b03cd 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1825,6 +1825,17 @@ number_to_static_string (wgint number) ringpos = (ringpos + 1) % RING_SIZE; return buf; } + +/* Converts the byte to bits format if --bits option is enabled + */ +wgint +convert_to_bits (wgint num) +{ + if (opt.bits_fmt) + return num * 8; + return num; +} + /* Determine the width of the terminal we're running on. If that's not possible, return 0. */