00001
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <time.h>
00005 #include <unistd.h>
00006 #include <string.h>
00007
00008 _PROTOTYPE(int main, (int argc, char **argv));
00009
00010 void
00011 prettyprogress(long b, long maxb, time_t starttime)
00012 {
00013
00014 time_t spent, now;
00015 double bpsec;
00016 time(&now);
00017 spent = now - starttime;
00018 printf("\r");
00019 if(spent > 0 && (bpsec = (double)b / spent) > 0) {
00020 int len, i;
00021 long secremain, minremain, hremain;
00022 secremain = (maxb - b) / bpsec;
00023 minremain = (secremain / 60) % 60;
00024 hremain = secremain / 3600;
00025 len = printf("Remaining: %ld files. ", maxb-b);
00026
00027 #if 0
00028 len += printf("ETA: %d:%02d:%02d ",
00029 hremain, minremain, secremain % 60);
00030 #endif
00031
00032 len += printf(" [");
00033
00034 #define WIDTH 77
00035 len = WIDTH - len;
00036 for(i = 0; i < (b * (len-1) / maxb); i++)
00037 printf("=");
00038 printf("|");
00039 for(; i < len-2; i++)
00040 printf("-");
00041 printf("][K\n");
00042 } else printf("\n");
00043
00044 return;
00045 }
00046
00047 int main(argc, argv)
00048 int argc;
00049 char *argv[];
00050 {
00051 long i = 0, count = 0;
00052 int l;
00053 char line[2000];
00054 time_t start;
00055 if(argc < 2) return 1;
00056 count = atol(argv[1]);
00057 if(count < 0) return 1;
00058 time(&start);
00059 printf("\n");
00060 #define LINES 5
00061 for(l = 1; l <= LINES+1; l++) printf("\n");
00062 printf("[A");
00063 while(fgets(line, sizeof(line), stdin)) {
00064 char *nl;
00065 i++;
00066 for(l = 0; l <= LINES; l++) printf("[A");
00067 if(i <= count) prettyprogress(i, count, start);
00068 else printf("\n");
00069 printf("[M");
00070 for(l = 0; l < LINES; l++) printf("[B");
00071 if((nl = strchr(line, '\n'))) *nl = '\0';
00072 line[78] = '\0';
00073 printf("\r%s\r", line);
00074 }
00075
00076 printf("\nDone.[K\n");
00077
00078 return 0;
00079 }