1 |
|
---|
2 | #include <stdio.h>
|
---|
3 | #include <stdlib.h>
|
---|
4 | #include <time.h>
|
---|
5 | #include <unistd.h>
|
---|
6 | #include <string.h>
|
---|
7 |
|
---|
8 | _PROTOTYPE(int main, (int argc, char **argv));
|
---|
9 |
|
---|
10 | void
|
---|
11 | prettyprogress(long b, long maxb, time_t starttime)
|
---|
12 | {
|
---|
13 | /* print progress indication */
|
---|
14 | time_t spent, now;
|
---|
15 | double bpsec;
|
---|
16 | time(&now);
|
---|
17 | spent = now - starttime;
|
---|
18 | printf("\r"); /* Make sure progress bar starts at beginning of line */
|
---|
19 | if(spent > 0 && (bpsec = (double)b / spent) > 0) {
|
---|
20 | int len, i;
|
---|
21 | long secremain, minremain, hremain;
|
---|
22 | secremain = (maxb - b) / bpsec;
|
---|
23 | minremain = (secremain / 60) % 60;
|
---|
24 | hremain = secremain / 3600;
|
---|
25 | len = printf("Remaining: %ld files. ", maxb-b);
|
---|
26 |
|
---|
27 | #if 0
|
---|
28 | len += printf("ETA: %d:%02d:%02d ",
|
---|
29 | hremain, minremain, secremain % 60);
|
---|
30 | #endif
|
---|
31 |
|
---|
32 | len += printf(" [");
|
---|
33 |
|
---|
34 | #define WIDTH 77
|
---|
35 | len = WIDTH - len;
|
---|
36 | for(i = 0; i < (b * (len-1) / maxb); i++)
|
---|
37 | printf("=");
|
---|
38 | printf("|");
|
---|
39 | for(; i < len-2; i++)
|
---|
40 | printf("-");
|
---|
41 | printf("][K\n");
|
---|
42 | } else printf("\n");
|
---|
43 |
|
---|
44 | return;
|
---|
45 | }
|
---|
46 |
|
---|
47 | int main(argc, argv)
|
---|
48 | int argc;
|
---|
49 | char *argv[];
|
---|
50 | {
|
---|
51 | long i = 0, count = 0;
|
---|
52 | int l;
|
---|
53 | char line[2000];
|
---|
54 | time_t start;
|
---|
55 | if(argc < 2) return 1;
|
---|
56 | count = atol(argv[1]);
|
---|
57 | if(count < 0) return 1;
|
---|
58 | time(&start);
|
---|
59 | printf("\n");
|
---|
60 | #define LINES 5
|
---|
61 | for(l = 1; l <= LINES+1; l++) printf("\n");
|
---|
62 | printf("[A");
|
---|
63 | while(fgets(line, sizeof(line), stdin)) {
|
---|
64 | char *nl;
|
---|
65 | i++;
|
---|
66 | for(l = 0; l <= LINES; l++) printf("[A");
|
---|
67 | if(i <= count) prettyprogress(i, count, start);
|
---|
68 | else printf("\n");
|
---|
69 | printf("[M");
|
---|
70 | for(l = 0; l < LINES; l++) printf("[B");
|
---|
71 | if((nl = strchr(line, '\n'))) *nl = '\0';
|
---|
72 | line[78] = '\0';
|
---|
73 | printf("\r%s\r", line);
|
---|
74 | }
|
---|
75 |
|
---|
76 | printf("\nDone.[K\n");
|
---|
77 |
|
---|
78 | return 0;
|
---|
79 | }
|
---|