progress: Add machine readable flag.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 26 Aug 2011 21:03:47 +0000 (22:03 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 26 Aug 2011 21:03:47 +0000 (22:03 +0100)
Machine-readable progress bars look like:

0/100
1/100
2/100

fish/progress.c
fish/progress.h

index 623dd0e..ac98ca0 100644 (file)
@@ -92,6 +92,7 @@ struct progress_bar {
   struct rmsd rmsd;     /* running mean and standard deviation */
   int have_terminfo;
   int utf8_mode;
+  int machine_readable;
 };
 
 struct progress_bar *
@@ -104,14 +105,22 @@ progress_bar_init (unsigned flags)
   if (bar == NULL)
     return NULL;
 
-  bar->utf8_mode = STREQ (nl_langinfo (CODESET), "UTF-8");
+  if (flags & PROGRESS_BAR_MACHINE_READABLE) {
+    bar->machine_readable = 1;
+    bar->utf8_mode = 0;
+    bar->have_terminfo = 0;
+  } else {
+    bar->machine_readable = 0;
+
+    bar->utf8_mode = STREQ (nl_langinfo (CODESET), "UTF-8");
 
-  bar->have_terminfo = 0;
+    bar->have_terminfo = 0;
 
-  term = getenv ("TERM");
-  if (term) {
-    if (tgetent (NULL, term) == 1)
-      bar->have_terminfo = 1;
+    term = getenv ("TERM");
+    if (term) {
+      if (tgetent (NULL, term) == 1)
+        bar->have_terminfo = 1;
+    }
   }
 
   /* Call this to ensure the other fields are in a reasonable state.
@@ -257,13 +266,7 @@ progress_bar_set (struct progress_bar *bar,
   double ratio;
   const char *s_open, *s_dot, *s_dash, *s_close;
 
-  if (bar->utf8_mode) {
-    s_open = "\u27e6"; s_dot = "\u2589"; s_dash = "\u2550"; s_close = "\u27e7";
-  } else {
-    s_open = "["; s_dot = "#"; s_dash = "-"; s_close = "]";
-  }
-
-  if (bar->have_terminfo == 0) {
+  if (bar->machine_readable || bar->have_terminfo == 0) {
   dumb:
     printf ("%" PRIu64 "/%" PRIu64 "\n", position, total);
   } else {
@@ -292,6 +295,15 @@ progress_bar_set (struct progress_bar *bar,
       fputs (" 100% ", stdout);
     }
 
+    if (bar->utf8_mode) {
+      s_open = "\u27e6";
+      s_dot = "\u2589";
+      s_dash = "\u2550";
+      s_close = "\u27e7";
+    } else {
+      s_open = "["; s_dot = "#"; s_dash = "-"; s_close = "]";
+    }
+
     fputs (s_open, stdout);
 
     if (!pulse_mode) {
index ad9d23a..0e965f1 100644 (file)
@@ -27,6 +27,7 @@ struct progress_bar;
  *
  * Function returns a handle, or NULL if there was an error.
  */
+#define PROGRESS_BAR_MACHINE_READABLE 1
 extern struct progress_bar *progress_bar_init (unsigned flags);
 
 /* This should be called at the start of each command. */