Listing 3: lpjthin.c

/*
lpjthin.c
	
DM Brown
8 February 1991
	
This is an output filter for the HP PaintJet to be 
used in conjunction with the HP/GL2 cartridge and 
AutoCAD on the Sun.  AutoCAD is set up to create HP/GL
plot files through the HP7550 plot driver.  Each plot
made includes an IN; statement as the first HP/GL 
statement (after some apparent device init. commands).
This filter does nothing more than search the first 
MAXCOUNT bytes for the IN; command then includes a 
PW0; command to set the pen width to the absolute 
smallest it can be.  The rest of the plot file is sent
to the plotter without any changes.
	
To use this filter on the command line, use the 
following syntax:

	lpjthin < infile > outfile
		or
	cat infile | lpjthin | print

Compile with:
	
	cc lpjthin.c -o lpjthin
		
*/

#include <stdio.h>

#define BUFSIZE 4
#define MAXCOUNT 50
#define NUL '\0'
#define INITSTR "\033%-1B"
#define RESETSTR "\033%A"

static char buf[BUFSIZE];

main()
{
	int c, j, count;
	
	/* switch to HP-GL/2 mode */
	fputs(INITSTR, stdout);		

	for(count = 0; 
		(c = getchar()) != EOF && count < MAXCOUNT; 
		count++)
	{
		if (c == 'I')
		{
			for (buf[0] = c,j=1; 
				(j < 3) && 
				((buf[j] = getchar()) != EOF); j++) ;
			buf[j] = NUL;
			fputs(buf,stdout);
			if (!strcmp(buf,"IN;"))
			{
				fputs("PW0;",stdout);
				break;
			}
			else continue;
		}
		putchar(c);
	}

    while ((c = getchar()) != EOF)
        putchar(c);
	
	/* switch back to PCL mode */
	fputs(RESETSTR, stdout);	

	fflush(stdout);
	
	exit(0);
}

