svn commit: r211246 - user/des/phybs

Dag-Erling Smorgrav des at FreeBSD.org
Thu Aug 12 22:20:20 UTC 2010


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",


More information about the svn-src-user mailing list