/* downloadspeed.c by Michael Thorpe 2003-09-19 */ /* This is because glibc is a festering boil on the face of computerdom... */ #define _FILE_OFFSET_BITS 64 #include #include #include #include /* WARNING! Kludge alert! */ #ifndef sleep /* This is because usleep is much more efficient than sleep on my machine: */ #define sleep(x) usleep((x)*1000000) #endif int main(int argc,char **argv) { struct stat ss; int histlen,histpos,i,j,histsize; off_t *hist; char *s; if(argc==3 && argv[1][0]=='-' && argv[1][1]=='c' && !argv[1][2]) { while(1) { if(stat(argv[2],&ss)) { perror("stat"); return(1); } if(ss.st_mtime<=ss.st_atime) ss.st_mtime=ss.st_atime+1; printf("%lu\t%lu\r",(unsigned long)(ss.st_size/(ss.st_mtime-ss.st_atime)),(unsigned long)(ss.st_size)); fflush(stdout); sleep(1); } } else if(argc==3 && argv[1][0]=='-' && argv[1][1]=='h' && !argv[1][2]) { i=8; if((s=getenv("COLUMNS"))) { i=atoi(s); i=(i-3-2)/8-2; if(i>17) i=17; if(i<1) i=1; } histsize=1<<(i-1); hist=(off_t *)malloc(histsize*sizeof(off_t)); if(!hist) { perror("malloc"); return(1); } if(stat(argv[2],&ss)) { perror("stat"); return(1); } histlen=1; histpos=1; hist[0]=ss.st_size; printf("%10llu\r",ss.st_size); while(1) { fflush(stdout); sleep(1); if(stat(argv[2],&ss)) { perror("stat"); return(1); } printf("%10llu",ss.st_size); for(i=1;i<=histlen;i<<=1) { if(histpos1 && (argv[1][0] != '-' || (argv[1][1]=='-' && !argv[1][2]))) { j=0; for(i=1;i | [ [..]]}\n",stderr); return(1); } return(0); }