Question: Extend the version of more program that was practiced in the class. In the extended version, the program would accept an optional -o flag with

Extend the version of more program that was practiced in the class. In the extended version, the program would accept an optional -o flag with a filename. If this flag is given as an argument to the program, then the output, along with being printed on the window, must be written into the file given.

more03 longfile (this command just outputs the contents of longfile on the window)

more03 longfile -o output.log (this command outputs content of longfile on the window and writes into output.log)

The command must be order independent, i.e. more03 longfile -o out.txt is same as more03 -o out.txt longfile.

You need to deploy a logic in main function to carry out order independence feature. To create and write to a file you can consult the source codes provided.

CODE TO EXTEND:

/* more01.c - version 0.1 of more * * read and print 24 lines then pause for a few special commands * */

#include

#define PAGELEN 24 #define LINELEN 512

void do_more(FILE *); int see_more();

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(), 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 */ 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 == ' ' ) /* Enter key => 1 line */ return 1; } return 0; }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!