home *** CD-ROM | disk | FTP | other *** search
- /* *************************************************************** */
- /* This module contains the functions called by the list.c program */
- /* program. If this were a program to be used for some specific */
- /* purpose, it would probablly not be wise to break it up into two */
- /* separately compiled modules. It is only done here for purposes */
- /* of illustration. It is a useful program. */
- /* *************************************************************** */
-
- #define MAXLINES 54 /* maximum number of lines per page */
- #include "stdio.h" /* standard I/O header file */
- #include "string.h" /* prototypes for strings */
-
- void open_file(int no,char *name);
- void open_print_file(void);
- void print_a_line(void);
- void header(void);
- void top_of_page(void);
-
- extern FILE *file_point; /* pointer to the file to be read */
- extern FILE *print_file_point; /* pointer to the printer */
- extern char oneline[]; /* input string buffer area */
- char filename[15]; /* filename from header or prompt */
- int line_number = 0; /* line number initialized to one */
- int page_number = 1; /* page number initialized to one */
- int lines_this_page = 0; /* lines on this page so far */
-
-
- /* ***************************************************** open_file */
- /* This function opens the input file named on the command line, */
- /* if there was one defined. Otherwise, it requests a file name to */
- /* open and opens the requested file. */
- /* *************************************************************** */
- void open_file(int no,char *name)
- {
-
- strcpy(filename,name); /* copy name for printing header */
- file_point = NULL; /* if no name was given in command */
- if (no == 2) { /* 2nd field in command is filename */
- file_point = fopen(name,"r"); /* open requested file */
- if (file_point == NULL) /* NULL if file doesn't exist */
- printf("Filename on command line doesn't exist!\n");
- }
-
- do {
- if (file_point == NULL) { /* no filename yet */
- printf("Enter filename -> ");
- scanf("%s",filename);
- file_point = fopen(filename,"r"); /* open file */
- if (file_point == NULL) /* NULL if file no exist */
- printf("Filename doesn't exist, try again.\n");
- }
- } while (file_point == NULL); /* continue until good filename */
- }
-
-
- /* *********************************************** open_print_file */
- /* This function opens the printer file to the standard printer. */
- /* *************************************************************** */
- void open_print_file(void)
- {
- print_file_point = fopen("PRN","w"); /* open printer file */
- }
-
-
- /* ************************************************** print_a_line */
- /* This routine prints a line of text and checks to see if there */
- /* is room for another line on the page. If not, it starts a new */
- /* page with a new header. This routine calls several other local */
- /* routines. */
- /* *************************************************************** */
- void print_a_line(void)
- {
- int index;
-
- header();
- printf("%5d %s",line_number,oneline);
-
- /* This prints a line of less than 72 chars */
- if (strlen(oneline) < 72)
- fprintf(print_file_point,"%5d %s",line_number,oneline);
-
- /* This prints a line of 72 to 143 chars */
- else if (strlen(oneline) < 144) {
- fprintf(print_file_point,"%5d ",line_number);
- for (index = 0;index < 72;index++)
- fprintf(print_file_point,"%c",oneline[index]);
- fprintf(print_file_point,"<\n ");
- for (index = 72;index < strlen(oneline);index++)
- fprintf(print_file_point,"%c",oneline[index]);
- lines_this_page++;
- }
-
- /* This prints a line of 144 to 235 chars */
- else if (strlen(oneline) < 235) {
- fprintf(print_file_point,"%5d ",line_number);
- for (index = 0;index < 72;index++)
- fprintf(print_file_point,"%c",oneline[index]);
- fprintf(print_file_point,"<\n ");
- for (index = 72;index < 144;index++)
- fprintf(print_file_point,"%c",oneline[index]);
- fprintf(print_file_point,"<\n ");
- for (index = 144;index < strlen(oneline);index++)
- fprintf(print_file_point,"%c",oneline[index]);
- lines_this_page += 2;
- }
- /* the following line outputs a newline if there is none
- at the end of the last line */
- if (oneline[strlen(oneline)-1] != '\n')
- fprintf(print_file_point,"%c",'\n');
- line_number++;
- lines_this_page++;
- }
-
-
- /* ******************************************************** header */
- /* This routine checks to see if a header needs to be printed. It */
- /* also checks for the end of a page. and spaces the paper up. */
- /* *************************************************************** */
- void header(void)
- {
- int index;
-
- /* first see if we are at the bottom of the page */
- if (lines_this_page > MAXLINES) { /* space paper up for bottom */
- for (index = lines_this_page;index < 61;index++)
- fprintf(print_file_point,"\n");
- lines_this_page = 0;
- }
-
- /* put a monitor header out only at the very beginning */
- if (line_number == 0) { /* display monitor header */
- printf(" Source file %s\n",filename);
- line_number = 1;
- }
-
- /* check to see if we are at the top of the page either */
- /* through starting a file, or following a bottom of page */
- if (lines_this_page == 0) { /* top of every printer page */
- fprintf(print_file_point,"\n\n\n ");
- fprintf(print_file_point," Source file - %s ",filename);
- fprintf(print_file_point," Page %d\n\n", page_number);
- page_number++;
- }
- }
-
-
- /* *************************************************** top_of_page */
- /* This function spaces the paper to the top of the next page so */
- /* that another call to this function will start correctly. This */
- /* is used only at the end of a complete printout. */
- /* *************************************************************** */
- void top_of_page(void)
- {
- int index;
-
- for (index = lines_this_page;index < 61;index++)
- fprintf(print_file_point,"\n");
- }
-