80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						||
#include <stdio.h>
 | 
						||
#include <stdlib.h>
 | 
						||
#include <time.h>
 | 
						||
#include <unistd.h>
 | 
						||
#include <string.h>
 | 
						||
 | 
						||
int main(int argc, char **argv);
 | 
						||
 | 
						||
void
 | 
						||
prettyprogress(long b, long maxb, time_t starttime)
 | 
						||
{
 | 
						||
  /* print progress indication */
 | 
						||
  time_t spent, now;
 | 
						||
  double bpsec;
 | 
						||
  time(&now);
 | 
						||
  spent = now - starttime;
 | 
						||
  printf("\r");	/* Make sure progress bar starts at beginning of line */
 | 
						||
  if(spent > 0 && (bpsec = (double)b / spent) > 0) {
 | 
						||
  	int len, i;
 | 
						||
  	long secremain, minremain, hremain;
 | 
						||
	  secremain = (maxb - b) / bpsec;
 | 
						||
	  minremain = (secremain / 60) % 60;
 | 
						||
	  hremain = secremain / 3600;
 | 
						||
  	len = printf("Remaining: %ld files. ", maxb-b);
 | 
						||
 | 
						||
#if 0
 | 
						||
  	len += printf("ETA: %d:%02d:%02d ",
 | 
						||
  		hremain, minremain, secremain % 60);
 | 
						||
#endif
 | 
						||
 | 
						||
	len += printf(" [");
 | 
						||
 | 
						||
#define WIDTH 77
 | 
						||
  	len = WIDTH - len;
 | 
						||
  	for(i = 0; i < (b * (len-1) / maxb); i++) 
 | 
						||
  		printf("=");
 | 
						||
 	printf("|");
 | 
						||
  	for(; i < len-2; i++) 
 | 
						||
  		printf("-");
 | 
						||
  	printf("][K\n");
 | 
						||
  } else printf("\n");
 | 
						||
 | 
						||
  return;
 | 
						||
}
 | 
						||
 | 
						||
int main(argc, argv)
 | 
						||
int argc;
 | 
						||
char *argv[];
 | 
						||
{
 | 
						||
	long i = 0, count = 0;
 | 
						||
	int l;
 | 
						||
	char line[2000];
 | 
						||
	time_t start;
 | 
						||
	if(argc < 2) return 1;
 | 
						||
	count = atol(argv[1]);
 | 
						||
	if(count < 0) return 1;
 | 
						||
	time(&start);
 | 
						||
	printf("\n");
 | 
						||
#define LINES 5
 | 
						||
	for(l = 1; l <= LINES+1; l++) printf("\n");
 | 
						||
	printf("[A");
 | 
						||
	while(fgets(line, sizeof(line), stdin)) {
 | 
						||
		char *nl;
 | 
						||
		i++;
 | 
						||
		for(l = 0; l <= LINES; l++)  printf("[A");
 | 
						||
		if(i <= count) prettyprogress(i, count, start);
 | 
						||
		else printf("\n");
 | 
						||
		printf("[M");
 | 
						||
		for(l = 0; l < LINES; l++)  printf("[B");
 | 
						||
		if((nl = strchr(line, '\n'))) *nl = '\0';
 | 
						||
		line[78] = '\0';
 | 
						||
		printf("\r%s\r", line);
 | 
						||
	}
 | 
						||
 | 
						||
  	printf("\nDone.[K\n");
 | 
						||
 | 
						||
	return 0;
 | 
						||
}
 |