|
教材里面的一个自己编写的more程序,好多地方有些疑问,希望大家给出完整详细的解答,因为自学,所以代码看不懂非常难办。谢谢。
- /* more01.c - version 0.1 of more
- * read and print 24 lines then pause for a few special commands
- */
- #include <stdio.h>
- #define PAGELEN 24
- #define LINELEN 512
- void do_more(FILE *);
- int see_more();
- int main( int ac , char *av[] )
- {[color=red]①我以前教材中只见过是这样写的main(int argc,char *argv[])是不是上面的简写比较常用[/color]
- 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(), reply;
- while ( fgets( line, LINELEN, fp ) ){ /* more input */
- if ( num_of_lines == PAGELEN ) { /* full screen? */
- reply = see_more(); /* y: ask user */
- 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()
- /*
- * 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 */
- [color=red]②上面的颜色搭配具体是什么语法,任何实现这种前景和背景颜色.[/color]
- while( (c=getchar()) != EOF ) /* get response */
- {
- 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;
- }
复制代码
谢谢帮我解答,这是more程序的第一个版本,后面还有一个版本。 |
|