]> sjero.net Git - wget/commitdiff
Accept --bit option
authorSasikantha Babu <sasikanth.v19@gmail.com>
Mon, 5 Mar 2012 21:23:06 +0000 (22:23 +0100)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Mon, 5 Mar 2012 21:23:06 +0000 (22:23 +0100)
NEWS
src/ChangeLog
src/init.c
src/main.c
src/options.h
src/progress.c
src/retr.c
src/retr.h
src/utils.c

diff --git a/NEWS b/NEWS
index 5c8184b44fa38debbc76053cc7bb1e2b95e5121a..311a2f1a13fe0c6227bcb025740679c9b311b04d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,8 @@ Please send GNU Wget bug reports to <bug-wget@gnu.org>.
 ** Print some diagnostic messages to stderr not to stdout.
 
 ** Report stdout close errors.
+
+** Accept the --bit option.
 \f
 * Changes in Wget 1.13.4
 
index caebc5e4c040a33b5d0eb4c37cbaff1a11bc2a88..a156c479f5746259d37b3918d8bce8f7034114ab 100644 (file)
@@ -1,3 +1,16 @@
+2012-03-06   Sasikantha Babu   <sasikanth.v19@gmail.com>
+
+       * 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  <gscrivano@gnu.org>
 
        * main.c: Include "closeout.h"
index d2fba82cebda62d5e70f8b17e2f5a21eec481f43..c890956c1e813ecaf19a7298b1d19d44be389d47 100644 (file)
@@ -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
index 3e731e9d02924bf9dda268ad54d75f9f8193767f..a12aaf1b43e2ebde3ba36427b521acb26f6f9c7f 100644 (file)
@@ -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 <bug-wget@gnu.org>.\n")
   };
 
index 0be66814209254c403ad834c601abec1b85c9181..1f429906dcdc8378653f3b6de262d6c0753484a7 100644 (file)
@@ -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;
index 219b5beaef7a0dba92213648e03e397c9db490e5..799d6e37e53584bb58e894013e994a378e694ad7 100644 (file)
@@ -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
index 8c8cdf5b4d6016ca1d919eec87aaf5074b40b385..5f33c7a77355ce30a02424990902021d515331a1 100644 (file)
@@ -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;
 }
index 22ab9ecd8a5ec39919f67eefcb7415f64ec25253..776238b1298395d7a156b830d7acba846c47e2c5 100644 (file)
@@ -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 */
index 509088b644a6566da06cdedb7818974c0f8c6c75..244b03cdebcbd0f6c78a8c3bfd95ca24ded475f0 100644 (file)
@@ -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;
+}
+
 \f
 /* Determine the width of the terminal we're running on.  If that's
    not possible, return 0.  */