1 
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <time.h>
5 #include <unistd.h>
6 #include <string.h>
7 
8 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("]\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("");
63 	while(fgets(line, sizeof(line), stdin)) {
64 		char *nl;
65 		i++;
66 		for(l = 0; l <= LINES; l++)  printf("");
67 		if(i <= count) prettyprogress(i, count, start);
68 		else printf("\n");
69 		printf("");
70 		for(l = 0; l < LINES; l++)  printf("");
71 		if((nl = strchr(line, '\n'))) *nl = '\0';
72 		line[78] = '\0';
73 		printf("\r%s\r", line);
74 	}
75 
76   	printf("\nDone.\n");
77 
78 	return 0;
79 }
80