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; }