hi, I will take a deeper look after your copyright assignment process is completed. As a suggestion for the futur: it will be better if you ask on the mailing list before start working on a task next time (unless it is a bug). Not all new feature requests can be accepted into wget.
Cheers, Giuseppe Sasikanth <[email protected]> writes: > Modified the calc_rate function to calculate bandwidth in powers of ten > (SI-prefix format) > for --bits option. > > Please review the changes > > Thanks > Sasi > > ---------- Forwarded message ---------- > From: Sasikanth <[email protected]> > Date: Wed, Jan 18, 2012 at 5:43 PM > Subject: Re: [Bug-wget] [PATCH] [wget-bug #33210], Add an option to output > bandwidth in bits > To: Hrvoje Niksic <[email protected]> > Cc: [email protected] > > On Sun, Jan 15, 2012 at 8:51 PM, Hrvoje Niksic <[email protected]> wrote: > > Sasikanth <[email protected]> writes: > > > No one asked. i had just thought it will be good to display all the > output > > in either bits or bytes to avoid confusion to the user (I had > > confused). > > I understand that, but I have never seen a downloading agent output data > length in bits, so displaying the data in bits would likely cause much > more confusion and/or be less useful. (Data throughput in bits, on the > other hand, is quite common.) With the original implementation of > --bits I expect that someone would soon ask for > --bits-for-bandwidth-only. > > > Anyhow thanks I will modify the patch. > > Thanks. > > Note that the patch has another problem: while Wget's "K", "M", and "G" > refer to (what is now known as) kibibytes, mebibytes, and gibibytes, > bandwidth is measured in kilobits, megabits, and gigabits per second. > Bandwidth units all refer to powers of ten, not to powers of two, so it > is incorrect for calc_rate to simply increase the byte multipliers by 8. > > Hrvoje > > > Modified the calc_rate function to calculate bandwidth in powers of ten > (SI-prefix format) > for --bits option. > > Please review the changes > > Thanks > Sasi > > > diff -ur orig/wget-1.13.4/src/init.c wget-1.13.4/src/init.c > --- orig/wget-1.13.4/src/init.c 2011-08-19 15:36:20.000000000 +0530 > +++ wget-1.13.4/src/init.c 2012-01-18 14:42:56.240973950 +0530 > @@ -126,6 +126,7 @@ > { "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 -ur orig/wget-1.13.4/src/main.c wget-1.13.4/src/main.c > --- orig/wget-1.13.4/src/main.c 2011-09-06 19:20:11.000000000 +0530 > +++ wget-1.13.4/src/main.c 2012-01-18 14:42:56.241973599 +0530 > @@ -166,6 +166,7 @@ > { "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 }, > @@ -704,6 +705,11 @@ > -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 <[email protected]>.\n") > }; > > diff -ur orig/wget-1.13.4/src/options.h wget-1.13.4/src/options.h > --- orig/wget-1.13.4/src/options.h 2011-08-06 15:54:32.000000000 +0530 > +++ wget-1.13.4/src/options.h 2012-01-18 14:42:56.247982676 +0530 > @@ -255,6 +255,7 @@ > > 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 -ur orig/wget-1.13.4/src/progress.c wget-1.13.4/src/progress.c > --- orig/wget-1.13.4/src/progress.c 2011-01-01 17:42:35.000000000 +0530 > +++ wget-1.13.4/src/progress.c 2012-01-18 14:42:56.249098685 +0530 > @@ -861,7 +861,7 @@ > 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 @@ > "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 @@ > *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 @@ > 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 -ur orig/wget-1.13.4/src/retr.c wget-1.13.4/src/retr.c > --- orig/wget-1.13.4/src/retr.c 2011-08-30 19:17:33.000000000 +0530 > +++ wget-1.13.4/src/retr.c 2012-01-18 17:27:18.383987006 +0530 > @@ -578,6 +578,7 @@ > { > 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); > @@ -585,7 +586,7 @@ > 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; > } > @@ -602,6 +603,13 @@ > 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); > @@ -613,16 +621,17 @@ > 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 -ur orig/wget-1.13.4/src/utils.c wget-1.13.4/src/utils.c > --- orig/wget-1.13.4/src/utils.c 2011-08-29 13:31:24.000000000 +0530 > +++ wget-1.13.4/src/utils.c 2012-01-18 14:42:56.253098685 +0530 > @@ -1826,6 +1826,17 @@ > 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. */
