This is lpansi.c in view mode; [Download] [Up]
/********************************************************
* lpansi.c *
* Original author: Gary Day, 11/30/93 *
* Current version: 2.1 by Noel Hunter, 10/20/94 *
* *
* Basic structure based on print -- format files for *
* printing from _Pratical_C_Programming by Steve *
* Oualline, O'Reilly & Associates *
********************************************************/
#include <stdio.h>
#include <stdlib.h> /* ANSI Standard only */
#include <string.h>
#ifdef VMS
#include <unixio.h>
#include <unixlib.h>
#endif /* VMS */
int verbose = 0; /* verbose mode (default = false) */
int formfeed = 1; /* form feed mode (default = true) */
char *program_name; /* name of the program (for errors) */
/* Ansi C function prototypes */
void ansi_printer_on(void);
void ansi_printer_off(void);
int main(int argc, char *argv[]);
main(int argc, char *argv[])
{
void do_file(char *); /* print a file */
void usage(void); /* tell user how to use the program */
/* save the program name for future use */
program_name = argv[0];
/*
* loop for each option.
* Stop if we run out of arguments
* or we get an argument without a dash.
*/
while ((argc > 1) && (argv[1][0] == '-')) {
/*
* argv[1][1] is the actual option character.
*/
switch (argv[1][1]) {
/*
* -v verbose
*/
case 'v':
verbose = 1;
(void)printf("VERBOSE mode ON\n");
break;
case 'f':
formfeed = 0;
break;
default:
(void)fprintf(stderr,"Bad option %s\n", argv[1]);
usage();
}
/*
* move the argument list up one
* move the count down one
*/
argv++;
argc--;
}
/*
* At this point all the options have been processed.
* Check to see if we have no files in the list
* and if so, we need to process just standard in.
*/
if (argc == 1) {
do_file("stdin");
} else {
while (argc > 1) {
do_file(argv[1]);
argv++;
argc--;
}
}
return (0);
}
/********************************************************
* do_file -- send a file to the printer *
* *
* Parameter *
* name -- name of the file to print *
********************************************************/
void do_file(char *name)
{
int ch; /* Where we store our characters */
FILE *fp; /* File pointer */
if ( verbose == 1 ) (void)printf("Processing: %s\n", name);
ansi_printer_on();
if ( strcmp(name,"stdin") == 0 )
{
while ((ch=getc(stdin))!=EOF)
{
putc(ch,stdout);
}
}
else /* Reading from a file */
{
if ((fp=fopen(name, "r"))==NULL)
{
printf("Can't open %s\n",name);
exit(1);
}
while ((ch=getc(fp))!=EOF)
{
putc(ch,stdout);
}
fclose(fp);
}
if ( formfeed == 1 )
{
printf("\n\x0C"); /* Do a form feed at the end of the document */
}
ansi_printer_off();
if ( verbose == 1 ) (void)printf("Finished processing: %s\n", name);
}
/********************************************************
* usage -- tell the user how to use this program and *
* exit *
********************************************************/
void usage(void)
{
(void)fprintf(stderr,"Usage is %s [options] [file-list]\n",
program_name);
(void)fprintf(stderr,"Options\n");
(void)fprintf(stderr," -f form feed OFF\n");
(void)fprintf(stderr," -v verbose\n");
exit (1);
}
/********************************************************
* Send a printer on escape sequence *
*******************************************************/
void ansi_printer_on(void)
{
if ( verbose == 1 ) (void)printf("ANSI printer ON\n");
printf("\x1B[5i");
}
/********************************************************
* Send a printer off escape sequence *
*******************************************************/
void ansi_printer_off(void)
{
printf("\x1B[4i");
if ( verbose == 1 ) (void)printf("ANSI printer OFF\n");
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.