Small fixes. [rsc] --rw-rw-r-- M 775368 glenda sys 5951 Oct 3 07:24 sys/lib/dist/cmd/bargraph.c /n/sourcesdump/2005/1003/plan9/sys/lib/dist/cmd/bargraph.c:30,36 - /n/sourcesdump/2005/1004/plan9/sys/lib/dist/cmd/bargraph.c:30,36 Point ptext; vlong n, d; int last; - int lastp; + int lastp = -1; int first = 1; char backup[80]; /n/sourcesdump/2005/1003/plan9/sys/lib/dist/cmd/bargraph.c:40,46 - /n/sourcesdump/2005/1004/plan9/sys/lib/dist/cmd/bargraph.c:40,47 { int i, j; int p; - char buf[10], bar[100]; + char buf[200], bar[100], *s; + static char lastbar[100]; if(n > d || n < 0 || d <= 0) return; /n/sourcesdump/2005/1003/plan9/sys/lib/dist/cmd/bargraph.c:48,56 - /n/sourcesdump/2005/1004/plan9/sys/lib/dist/cmd/bargraph.c:49,54 i = (Dx(rbar)*n)/d; p = (n*100LL)/d; - if(lastp == p && last == i) - return; - if(textmode){ bar[0] = '|'; for(j=0; j<i; j++) /n/sourcesdump/2005/1003/plan9/sys/lib/dist/cmd/bargraph.c:59,78 - /n/sourcesdump/2005/1004/plan9/sys/lib/dist/cmd/bargraph.c:57,76 bar[j+1] = '-'; bar[61] = '|'; bar[62] = ' '; - sprint(bar+63, "%3d%%", p); - if(first) - first = 0; - else{ - for(i=0; i<strlen(bar); i++) - backup[i] = '\b'; - write(1, backup, i); - } - write(1, bar, strlen(bar)); - lastp = p; - last = i; + sprint(bar+63, "%3d%% ", p); + for(i=0; bar[i]==lastbar[i] && bar[i]; i++) + ; + memset(buf, '\b', strlen(lastbar)-i); + strcpy(buf+strlen(lastbar)-i, bar+i); + if(buf[0]) + write(1, buf, strlen(buf)); + strcpy(lastbar, bar); return; } - + + if(lastp == p && last == i) + return; + if(lastp != p){ sprint(buf, "%d%%", p); /n/sourcesdump/2005/1003/plan9/sys/lib/dist/cmd/bargraph.c:220,226 - /n/sourcesdump/2005/1004/plan9/sys/lib/dist/cmd/bargraph.c:218,224 size = seek(fd, 0, 2); v = malloc(size+1); if(v == 0){ - fprint(2, "page: can't malloc: %r\n"); + fprint(2, "%s: can't malloc: %r\n", argv0); exits("no mem"); } seek(fd, 0, 0); /n/sourcesdump/2005/1003/plan9/sys/lib/dist/cmd/bargraph.c:303,313 - /n/sourcesdump/2005/1004/plan9/sys/lib/dist/cmd/bargraph.c:301,311 if(fd == -1) fd=open("/mnt/term/dev/screen", OREAD); if(fd == -1){ - fprint(2, "page: can't open /dev/screen: %r\n"); + fprint(2, "%s: can't open /dev/screen: %r\n", argv0); exits("window read"); } if(read(fd, buf, sizeof buf) != sizeof buf){ - fprint(2, "page: can't read /dev/screen: %r\n"); + fprint(2, "%s: can't read /dev/screen: %r\n", argv0); exits("screen read"); } close(fd);