]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/tput.c
ndb/dnsquery, ndb/csquery: handle long lines
[plan9front.git] / sys / src / cmd / tput.c
1 #include <u.h>
2 #include <libc.h>
3
4 int dopipe;
5 int buflen = 8192;
6 uvlong bc, sec;
7
8 void
9 usage(void)
10 {
11         fprint(2, "usage: %s [-b buflen] [-p]\n", argv0);
12         exits("usage");
13 }
14
15 void
16 main(int argc, char **argv)
17 {
18         double speed;
19         int rc, cpid;
20         char *buf;
21         
22         ARGBEGIN {
23         case 'b':
24                 buflen = atoi(EARGF(usage()));
25                 break;
26         case 'p':
27                 dopipe = 1;
28                 break;
29         default:
30                 usage();
31         } ARGEND
32
33         if(argc != 0)
34                 usage();
35         
36         bc = 0;
37         sec = 0;
38         buf = sbrk(buflen);
39         if(buf == (void*)-1)
40                 sysfatal("out of memory");
41         cpid = rfork(RFPROC | RFMEM);
42         if(cpid == 0) {
43                 while(1) {
44                         sleep(1000);
45                         speed = bc / ++sec;
46                         if(speed >= 1073741824) fprint(2, "%.2f GB/s\n", speed / 1073741824);
47                         else if(speed >= 1048576) fprint(2, "%.2f MB/s\n", speed / 1048576);
48                         else if(speed >= 1024) fprint(2, "%.2f KB/s\n", speed / 1024);
49                         else fprint(2, "%.2f B/s\n", speed);
50                 }
51         }
52         while(1) {
53                 rc = read(0, buf, buflen);
54                 if(rc <= 0) break;
55                 if(dopipe) write(1, buf, rc);
56                 bc += rc;
57         }
58         postnote(PNPROC, cpid, "kill");
59         if(rc < 0) sysfatal("%r");
60         exits(0);
61 }