login

<     >

2020-04-02 23:57:49 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

add option -w to set bar width

diff --git a/mpb.c b/mpb.c
index c657b83..487e93d 100644
--- a/mpb.c
+++ b/mpb.c
@@ -2,7 +2,8 @@
 #include <stdlib.h>
 #include <limits.h>
 
-static unsigned width;
+#define DEFAULT_WIDTH   32
+
 static char spinchars[] = "|/-\\";
 static unsigned spinindex = 0;
 static char line[4096 + 1];
@@ -10,7 +11,7 @@ static unsigned lastfill = UINT_MAX;
 static unsigned lastpercent = 101;
 
 void
-print_progress(unsigned percent, int showbar, int showspinner, int showline)
+print_progress(unsigned width, unsigned percent, int showbar, int showspinner, int showline)
 {
     unsigned i, fill;
     fill = percent * width / 100;
@@ -56,6 +57,7 @@ main(int argc, char *argv[])
     int opt_showbar;
     int opt_showline = 0;
     int opt_showspinner = 0;
+    unsigned opt_width = DEFAULT_WIDTH;
     unsigned long total = 0;
     for (i = 1; i < argc; i++) {
         arg = argv[i];
@@ -68,6 +70,13 @@ main(int argc, char *argv[])
                 case 's':
                     opt_showspinner = 1;
                     break;
+                case 'w':
+                    opt_width = (unsigned) strtol(arg+1, &arg, 10);
+                    if (opt_width)
+                        arg--;
+                    else
+                        opt_width = DEFAULT_WIDTH;
+                    break;
                 default:
                     fprintf(stderr, "%s: error: unknown option '-%c'\n", argv[0], *arg);
                     return 1;
@@ -80,17 +89,16 @@ main(int argc, char *argv[])
     if (argtotal != NULL)
         total = (unsigned) atol(argtotal);
     opt_showbar = total > 0;
-    width = 32;
-    print_progress(0, opt_showbar, opt_showspinner, 0);
+    print_progress(opt_width, 0, opt_showbar, opt_showspinner, 0);
     count = 0;
     while (scanf("%4096s", line) != EOF) {
         if (count < total)
             count++;
         if (opt_showbar)
             percent = count * 100 / total;
-        print_progress(percent, opt_showbar, opt_showspinner, opt_showline);
+        print_progress(opt_width, percent, opt_showbar, opt_showspinner, opt_showline);
     }
-    print_progress(100, opt_showbar, opt_showspinner, 0);
+    print_progress(opt_width, 100, opt_showbar, opt_showspinner, 0);
     puts("\x1B[B\x1B[2K\x1B[A");
     return 0;
 }