1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include<stdio.h> #define PAGELEN 24 #define LINELEN 512 int ReplyMore(FILE *keyboard){ printf("\033[7m more? \033[m"); int ch; while((ch=getc(keyboard)) != EOF){ if(ch == 'q') return 0; else if(ch == ' ') return PAGELEN; else if(ch == '\n') return 1; } return 0; } void DoMore(FILE *fp){ char line[LINELEN]; int num_of_lines = 0; int reply; FILE *fp_tty = fopen("/dev/tty","r"); while(fgets(line, LINELEN, fp)){ if(num_of_lines == PAGELEN){ reply = ReplyMore(fp_tty); if(reply == 0) break; num_of_lines -= reply; } if(fputs(line, stdout) == EOF) exit(1); num_of_lines++; } } int main(int argc, char *argv[]){ FILE *fp; if(argc == 1) DoMore(stdin); else{ while(--argc){ if((fp = fopen(*++argv,"r")) != NULL){ DoMore(fp); fclose(fp); } else{ exit(1); } } } return 0; }
|