Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Aug 2010 22:20:20 +0000 (UTC)
From:      Dag-Erling Smorgrav <des@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r211246 - user/des/phybs
Message-ID:  <201008122220.o7CMKKOs011432@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: des
Date: Thu Aug 12 22:20:20 2010
New Revision: 211246
URL: http://svn.freebsd.org/changeset/base/211246

Log:
  Show a progress bar when stdout is a tty.

Modified:
  user/des/phybs/phybs.c

Modified: user/des/phybs/phybs.c
==============================================================================
--- user/des/phybs/phybs.c	Thu Aug 12 22:16:37 2010	(r211245)
+++ user/des/phybs/phybs.c	Thu Aug 12 22:20:20 2010	(r211246)
@@ -47,6 +47,10 @@ static unsigned int total = (128 * 1024 
 static int opt_r = 0;
 static int opt_w = 1;
 
+static int tty = 0;
+static char progress[] = " [----------------]"
+    "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
+
 static void
 scan(int fd, size_t size, off_t offset, off_t step, unsigned int count)
 {
@@ -55,7 +59,7 @@ scan(int fd, size_t size, off_t offset, 
 	ssize_t rlen, wlen;
 	char *buf;
 
-	printf("%8u%8lu%8lu%8lu", count, (unsigned long)size,
+	printf("%8u%8lu%8lu%8lu  ", count, (unsigned long)size,
 	    (unsigned long)offset, (unsigned long)step);
 	fflush(stdout);
 	if ((buf = malloc(size)) == NULL)
@@ -82,12 +86,18 @@ scan(int fd, size_t size, off_t offset, 
 				errx(1, "short write: %ld < %lu",
 				    (long)wlen, (unsigned long)size);
 		}
+		if (tty && i % 256 == 0) {
+			progress[2 + (i * 16) / count] = '|';
+			fputs(progress, stdout);
+			progress[2 + (i * 16) / count] = '-';
+			fflush(stdout);
+		}
 	}
 	if (gettimeofday(&t1, NULL) == -1)
 		err(1, "gettimeofday()");
 	usec = t1.tv_sec * 1000000 + t1.tv_usec;
 	usec -= t0.tv_sec * 1000000 + t0.tv_usec;
-	printf("%12lu%8lu%8lu\n", usec / 1000,
+	printf("%10lu%8lu%8lu\n", usec / 1000,
 	    count * 1000000 / usec,
 	    count * size * 1000000 / 1024 / usec);
 	free(buf);
@@ -147,6 +157,8 @@ main(int argc, char *argv[])
 		maxsize = tmp;
 	}
 
+	tty = isatty(STDIN_FILENO);
+
 	if ((fd = open(device, opt_w ? O_RDWR : O_RDONLY)) == -1)
 		err(1, "open(%s)", device);
 	printf("%8s%8s%8s%8s%12s%8s%8s\n",



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008122220.o7CMKKOs011432>