📄 more02.c
字号:
/* more02.c - version 0.2 of more * read and print 24 lines then pause for a few special commands * feature of version 0.2: reads from /dev/tty for commands */#include <stdio.h>#define PAGELEN 24#define LINELEN 512void do_more(FILE *);int see_more(FILE *);int main( int ac , char *av[] ){ FILE *fp; if ( ac == 1 ) do_more( stdin ); else while ( --ac ) if ( (fp = fopen( *++av , "r" )) != NULL ) { do_more( fp ) ; fclose( fp ); } else exit(1); return 0;}void do_more( FILE *fp )/* * read PAGELEN lines, then call see_more() for further instructions */{ char line[LINELEN]; int num_of_lines = 0; int see_more(FILE *), reply; FILE *fp_tty; fp_tty = fopen( "/dev/tty", "r" ); /* NEW: cmd stream */ if ( fp_tty == NULL ) /* if open fails */ exit(1); /* no use in running */ while ( fgets( line, LINELEN, fp ) ){ /* more input */ if ( num_of_lines == PAGELEN ) { /* full screen? */ reply = see_more(fp_tty); /* NEW: pass FILE * */ if ( reply == 0 ) /* n: done */ break; num_of_lines -= reply; /* reset count */ } if ( fputs( line, stdout ) == EOF ) /* show line */ exit(1); /* or die */ num_of_lines++; /* count it */ }}int see_more(FILE *cmd) /* NEW: accepts arg *//* * print message, wait for response, return # of lines to advance * q means no, space means yes, CR means one line */{ int c; printf("\033[7m more? \033[m"); /* reverse on a vt100 */ while( (c=getc(cmd)) != EOF ) /* NEW: reads from tty */ { if ( c == 'q' ) /* q -> N */ return 0; if ( c == ' ' ) /* ' ' => next page */ return PAGELEN; /* how many to show */ if ( c == '\n' ) /* Enter key => 1 line */ return 1; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -