[net.sources] nroff tables for imagewriter

sl@van-bc.UUCP (Stuart Lynne) (01/13/87)

Here is the nroff table for proportional print on the Apple Imagewriter.
Also assorted other utilities to use with it to actually make it all work.

Warning - not tested on Berkely Unix. 

I received about thirty requests after my announcement last week so thought
is was easiest to simply post. (I wouldn't take even odds on being able to
reply to more than half of the people who responded, without a lot of playing
around with my mailer!)

Bug reports welcome  ---  caveat emptor.

--
Stuart Lynne	ihnp4!alberta!ubc-vi!van-bc!sl 	      Vancouver,BC,604-937-7532

------------- cut here ------------ cut here -------------- cut here ---------
#/bin/sh
#This is a shar file.  To use:
#  1. Remove everything before the /bin/sh line
#  2. Execute with /bin/sh (not csh) to extract the files:
#         README
#         iw.c
#         tabiw.c
#         tabiwp.c
#         iw.1ml
#         iwlp.1ml
#         tabiw.5l
#         man.diff
#         mm.diff
#         iwlp
file="${0}"
echo extracting README 1>&2
cat >README << 'EnD of README'
The iw package includes:

	iw.c - simple filter for imagewriter
	iwlp - interface for sysV lp 
	tabiw.c - nroff table for non-proportional print
	tabiwp.c - nroff table for proportional printing

make iw should suffice for most systems (I'm running a Unisoft 5.0
on an antique Callan Unistar).

You will need the tabgen software posted to mod.sources recently by
Bruce Townsend (utcs!bnr-vpa!bruce).

If you call nroff with man or mm you may want to ask 
your system administrator to modify the mm and man
scripts to allow iw, and iwp to be used with the
-T command. The following changes
	
	iwlp|iwp|iw|2631|2631-c|2631-e)       v=3;     c=c ;;

and
	iwlp|iwp|iw) g="|col -p -x | iw" ;;

need to be made in man and mm.

man example
		man -Tiwp iw  
	produces
		cat local/man1/iw.1 | nroff -Tiw -rd2 -rm0 -ry87 -can |
		col -p -x | iw

mm example
		mm -Tiwp test
	produces
	nroff -cm -Tiwp test | col -p -x | iw

To install:

	cp tabiw tabiwp /usr/lib/term
	ln /usr/lib/term/tablp /usr/lib/term/tabiwlp

The link to tablp allows the use of the standard lp table but piped
through the iw printer filter.


Stuart Lynne	ihnp4!alberta!ubc-vi!van-bc!sl 	      Vancouver,BC,604-937-7532
EnD of README
echo extracting iw.c 1>&2
cat >iw.c << 'EnD of iw.c'
/* iw.c

	Copyright (c) 1987 by Stuart Lynne

	Permission is hereby granted to use, distribute, modify or copy
	except for profit, providing this copyright notice and disclaimer
	is included.

	Version 1.0 - January 11, 1987
		Cleaned up from initial hacking.

	Bug reports and comments to:

		sl@van-bc.uucp
		ihpn4!alberta!ubc-vision!van-bc!sl

	

	iw is a filter for nroff output to be sent to the ImageWriter
	printer.

	It can be used as a filter for output from nroff as driven by three
	different tables with two different schema's for underline / boldface:

			Boldface	Underline  	Tab's	
	tablp 	 	C^hC		_^hC		^I
	tabiw 		<esc>!C<esc>"	<esc>XC<esc>Y	^I
	tabiwp		<esc>!C<esc>"	<esc>XC<esc>Y	<esc>'~<esc>$


	tabiwp uses the ~ in the custom font as a 1 dot width space char.

	Make
		make iw

	Usage:
		... | iw | ....
		iw < file.in > file.out
		nroff -Tiwp file | col -x -p | iw | ...
		nroff -Tlp file | col -x -p | iw | ....
*/

#include	<stdio.h>
#include	<ctype.h>

#define	FALSE	0
#define TRUE	1

#define	FIRSTCOL	0

main () 
{
	int	nextch = 0;		/* next character in input stream */
	int	lastch = 0;		/* last character (next to be printed) */
	
	int	boldface = FALSE;	/* do we want boldface ? Used with C^HC */
	int	sentboldface = FALSE;	/* have we sent boldface escape sequence */
	int	underline = FALSE;	/* do we want underline? Used with _^HC */
	int	sentunderline = FALSE;	/* have we sent an underline escape sequence */
	int	overstrike = FALSE;	/* is this an overstrike? Used with X^HY */
	int	seenunderline = FALSE;	/* have we seen an underline escape sequence */

	int	count;			/* counter for ignoring multiple backspaces */

	int	column = FIRSTCOL;	/* current column, for tabbing */
	int	newcolumn = FIRSTCOL;	/* where we should go, for tabbing */

	int	haveesc = FALSE;	/* flag for watching for escape seq. */


	/* create a special character for nroff to use, a single dot width
	   space. This allows proportional spacing to work. See tabiwp.c for
	   usage.
	*/

	putchar( '\033' );		/* escape - allows creation of */
	putchar( '-' );			/* 	custom char's */
	putchar( '\033' );		/* escape I sets to 8 bit size */
	putchar( 'I' );
	putchar( '~' );			/* use ~ to signal this char */
	putchar( 'A' );			/* width code */
	putchar( '\000' );		/* space is no bits set */
	putchar( '\004' );		/* end of character definition data */
	
	do {
		/* are we counting spaces for a tab. Unfortunately the
		   imagewriter and nroff disagree slightly on tab counting
		   if escape char's are in line (nroff ignores, printer 
		   doesn't).

		   We either get a char or provide a space.

		*/
		if ( column < newcolumn )
			nextch = ' ';
		else {
			newcolumn = FIRSTCOL;
			nextch = getchar();
		}

		/* are we in an escape sequence we care about (ignore the rest)
		   <esc>X and <esc>Y are underline start and stop, set underline
		   flag and go to beginning of loop.
 		*/
		if ( haveesc ) { 
			switch ( nextch ) {
			case 'X':
				seenunderline = TRUE;
				lastch = 0;
				continue;
			case 'Y':
				seenunderline = FALSE;
				lastch = 0;
				continue;
			}
			haveesc = FALSE;
		}
		else 
		/* check if next character is backspace for special handling 
		*/
		    if ( nextch == '\b' ) {
			nextch = getchar();
			
			/* nroff use's _^hX to underline a char for tablp
			*/
			if ( lastch == '_' ) {
				underline = TRUE;
				lastch = nextch;
				nextch = 0;
				continue;
			}
			/* nroff use's X^hX to boldface a char for tablp
			*/
			else if ( nextch == lastch ) {
				boldface = TRUE;
				continue;
			}
			/* nroff sometimes uses XXXXX^h^h^h^h^hYYYYYY
			   type of sequence. Imagewriter can't handle
		           so we ignore.
			   I think it is from combination of bold/italic.
			*/
			else if ( nextch == '\b' ) {
				if ( lastch )
					putchar( lastch );
				while (( nextch = getchar()) == '\b' ) {
					count++;
					column--;
				}
				lastch = 0;
				/*nextch = 0;*/
				count += 2;
			}
			/* ok, ok, we'll let a simple overstrike get through
			*/
			else
				overstrike = TRUE;
		}
		/* check for some special control chars
		*/	
		else switch ( nextch ) {

		case '\n':
			newcolumn = column = FIRSTCOL;
			break;

		case '\t':
			newcolumn = (column | 0x7) + 1;
			nextch = 0;
			break;

		case '\033':
			haveesc = TRUE;
			break;
			
		default :
			column++;
			break;
		}

		/* now we have check for various combinations of control
		   chars and are ready to print the char. First check to see
		   if we need to turn underline or boldface on or off.

		   Unfortunately the imagewriter auto underline also underlines
 		   spaces, which would be alright except that nroff assumes 
		   that spaces are not underlined. And consequently does not
		   turn off underlining at the end of a line. So even though
		   we use underline sequence direct from tabiw(p) we intercept
		   and regen around whitespace.
		*/

		if ( seenunderline && isalpha(lastch) )
				underline = TRUE;

		if ( (underline && !sentunderline) ) {
			printf( "\033X" );
			sentunderline = TRUE;
		}
		else if ( !underline && sentunderline ) {
			printf( "\033Y");
			sentunderline = FALSE;
		} 
		if ( boldface && !sentboldface ) {
			printf( "\033\!" );
			sentboldface = TRUE;
		}
		else if ( !boldface && sentboldface ) {
			printf( "\033\"" );
			sentboldface = FALSE;
		}

		/* to be able to properly handle _ or _____ we must
		   do a one char lookahead. So we save char until next
		   time around the loop. Always print previous char.
	
		   Also sometimes must simply throw away due to imagewriter
		   being unable to backup more than one position.
		*/
		if ( lastch )
			if ( count )
				count--;
			else 
				putchar( lastch );

		lastch = nextch;

		/* finally check for overstrike and perform if neccessary
		*/	
		if ( overstrike ) {
			printf( "\b%c", nextch );	
			lastch = 0;
		}

		/* turn off flags for next go around */	
		boldface = overstrike = underline = FALSE;

	}
	/* termination condition */
	while ( nextch != EOF);
}
	

EnD of iw.c
echo extracting tabiw.c 1>&2
cat >tabiw.c << 'EnD of tabiw.c'
/* tabiw.c

	non-proportional nroff table for Imagewriter II (I) printer

	copyright (c) 1987 Stuart Lynne

*/

/*
	This file defines an nroff table using the imagewriter's
	built in fonts.

	To construct tabiwp you must have the table generation software.
	This has been tested with Bruce Townsend's version.

*/



#ifndef	INCH
#define	INCH	240
#endif

struct t {
	int bset;
	int breset;
	int Hor;
	int Vert;
	int Newline;
	int Char;
	int Em;
	int Halfline;
	int Adj;
	char *twinit;
	char *twrest;
	char *twnl;
	char *hlr;
	char *hlf;
	char *flr;
	char *bdon;
	char *bdoff;
	char *iton;
	char *itoff;
	char *ploton;
	char *plotoff;
	char *up;
	char *down;
	char *right;
	char *left;
	char *codetab[256-32];
	char *zzz;
	} t = {
/*bset    */		00,
/*breset  */		054,
/*Hor     */		4,
/*Vert    */		5,
/*Newline */		40,
/*Char    */		24,
/*Em      */		24,
/*Halfline*/		20,
/*Adj     */		24,
/*twinit  */		"", /* we could put stuff here, but leave it for 
				lp filter instead  sl */
/*twrest  */		"",
/*twnl    */		"\033\"\r\n",	/* turn boldface off, newline */
/*hlr     */		"",
/*hlf     */		"",
/*flr     */		"",
/*bdon    */		"\033!",	/* turn boldface on */
/*bdoff   */		"\033\"",	/* turn boldface off */
/*iton    */		"\033X",	/* turn underline on */
/*itoff   */		"\033Y",	/* turn underline off */
/*ploton  */		"",
/*plotoff */		"",
/*up      */		"",
/*down    */		"",
/*right   */		"",
/*left    */		"",
/* space */         	"\001 ",
/* ! */             	"\001!",
/* " */             	"\001\"",
/* # */             	"\001#",
/* $ */             	"\001$",
/* % */             	"\001%",
/* & */             	"\001&",
/* ' close */       	"\001'",
/* ( */             	"\001(",
/* ) */             	"\001)",
/* * */             	"\001*",
/* + */             	"\001+",
/* , */             	"\001,",
/* - hyphen */      	"\001-",
/* . */             	"\001.",
/* / */             	"\001/",
/* 0 */             	"\2010",
/* 1 */             	"\2011",
/* 2 */             	"\2012",
/* 3 */             	"\2013",
/* 4 */             	"\2014",
/* 5 */             	"\2015",
/* 6 */             	"\2016",
/* 7 */             	"\2017",
/* 8 */             	"\2018",
/* 9 */             	"\2019",
/* : */             	"\001:",
/* ; */             	"\001;",
/* < */             	"\001<",
/* = */             	"\001=",
/* > */             	"\001>",
/* ? */             	"\001?",
/* @ */             	"\001@",
/* A */             	"\201A",
/* B */             	"\201B",
/* C */             	"\201C",
/* D */             	"\201D",
/* E */             	"\201E",
/* F */             	"\201F",
/* G */             	"\201G",
/* H */             	"\201H",
/* I */             	"\201I",
/* J */             	"\201J",
/* K */             	"\201K",
/* L */             	"\201L",
/* M */             	"\201M",
/* N */             	"\201N",
/* O */             	"\201O",
/* P */             	"\201P",
/* Q */             	"\201Q",
/* R */             	"\201R",
/* S */             	"\201S",
/* T */             	"\201T",
/* U */             	"\201U",
/* V */             	"\201V",
/* W */             	"\201W",
/* X */             	"\201X",
/* Y */             	"\201Y",
/* Z */             	"\201Z",
/* [ */             	"\001[",
/* \ */             	"\001\\",
/* ] */             	"\001]",
/* ^ */             	"\001^",
/* _ dash */        	"\001_",
/* ` open */        	"\001`",
/* a */             	"\201a",
/* b */             	"\201b",
/* c */             	"\201c",
/* d */             	"\201d",
/* e */             	"\201e",
/* f */             	"\201f",
/* g */             	"\201g",
/* h */             	"\201h",
/* i */             	"\201i",
/* j */             	"\201j",
/* k */             	"\201k",
/* l */             	"\201l",
/* m */             	"\201m",
/* n */             	"\201n",
/* o */             	"\201o",
/* p */             	"\201p",
/* q */             	"\201q",
/* r */             	"\201r",
/* s */             	"\201s",
/* t */             	"\201t",
/* u */             	"\201u",
/* v */             	"\201v",
/* w */             	"\201w",
/* x */             	"\201x",
/* y */             	"\201y",
/* z */             	"\201z",
/* { */             	"\001{",
/* | */             	"\001|",
/* } */             	"\001}",
/* ~ */             	"\001~",
/* narrow sp */     	"\000\0",
/* hyphen */        	"\001-",
/* bullet */        	"\000\0",
/* square */        	"\000\0",
/* 3/4 em */        	"\001-",
/* rule */          	"\001_",
/* 1/4 */           	"\0031/4",
/* 1/2 */           	"\0031/2",
/* 3/4 */           	"\0033/4",
/* minus */         	"\001-",
/* fi */            	"\202fi",
/* fl */            	"\202fl",
/* ff */            	"\202ff",
/* ffi */           	"\203ffi",
/* ffl */           	"\203ffl",
/* degree */        	"\000\0",
/* dagger */        	"\000\0",
/* section */       	"\000\0",
/* foot mark */     	"\000\0",
/* acute accent */  	"\000\0",
/* grave accent */  	"\000\0",
/* underrule */     	"\001_",
/* slash (longer) */	"\001/",
/* half narrow space */	"\000\0",
/* unpaddable space */	"\001 ",
/* alpha */         	"\000\0",
/* beta */          	"\000\0",
/* gamma */         	"\000\0",
/* delta */         	"\000\0",
/* epsilon */       	"\000\0",
/* zeta */          	"\000\0",
/* eta */           	"\000\0",
/* theta */         	"\000\0",
/* iota */          	"\000\0",
/* kappa */         	"\000\0",
/* lambda */        	"\000\0",
/* mu */            	"\000\0",
/* nu */            	"\000\0",
/* xi */            	"\000\0",
/* omicron */       	"\000\0",
/* pi */            	"\000\0",
/* rho */           	"\000\0",
/* sigma */         	"\000\0",
/* tau */           	"\000\0",
/* upsilon */       	"\000\0",
/* phi */           	"\000\0",
/* chi */           	"\000\0",
/* psi */           	"\000\0",
/* omega */         	"\000\0",
/* Gamma */         	"\000\0",
/* Delta */         	"\000\0",
/* Theta */         	"\000\0",
/* Lambda */        	"\000\0",
/* Xi */            	"\000\0",
/* Pi */            	"\000\0",
/* Sigma */         	"\000\0",
/* Tau */           	"\000\0",
/* Upsilon */       	"\000\0",
/* Phi */           	"\000\0",
/* Psi */           	"\000\0",
/* Omega */         	"\000\0",
/* square root */   	"\000\0",
/* terminal sigma */	"\000\0",
/* root en */       	"\000\0",
/* >= */            	"\000\0",
/* <= */            	"\000\0",
/* identically equal */	"\000\0",
/* equation minus */	"\000\0",
/* approx = */      	"\000\0",
/* approximates */  	"\000\0",
/* not equal */     	"\000\0",
/* right arrow */   	"\000\0",
/* left arrow */    	"\000\0",
/* up arrow */      	"\000\0",
/* down arrow */    	"\000\0",
/* eqn equals */    	"\000\0",
/* multiply */      	"\000\0",
/* divide */        	"\000\0",
/* plus-minus */    	"\000\0",
/* cup (union) */   	"\000\0",
/* cap (intersection) */	"\000\0",
/* subset of */     	"\000\0",
/* superset of */   	"\000\0",
/* improper subset */	"\000\0",
/*  improper superset */	"\000\0",
/* infinity */      	"\000\0",
/* pt deriv */      	"\000\0",
/* gradient */      	"\000\0",
/* not */           	"\000\0",
/* integral */      	"\000\0",
/* proportional to */	"\000\0",
/* empty set */     	"\000\0",
/* member of */     	"\001+",
/* equation plus */ 	"\000\0",
/* registration mk */	"\000\0",
/* copyright mk */  	"\001|",
/* box rule */      	"\000\0",
/* cent sign */     	"\000\0",
/* dbl dagger */    	"\000\0",
/* right hand */    	"\000\0",
/* left hand */     	"\001*",
/* math *  */       	"\000\0",
/* bell system sign */	"\001|",
/* or (was star) */ 	"\000\0",
/* circle */        	"\001|",
/* left top of big curly */	"\001|",
/* left bottom of big curly */	"\001|",
/* right top of big curly */	"\001|",
/* right bottom of big curly */	"\001|",
/* left center of big curly */	"\001|",
/* right center of big curly */	"\001|",
/* bold vertical rule */	"\001|",
/* left bottom of big bracket */	"\001|",
/* right bottom of big bracket */	"\001|",
/* left top of big bracket */	"\001|",
/* right top of big bracket */	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\033E\033D\001",
};
EnD of tabiw.c
echo extracting tabiwp.c 1>&2
cat >tabiwp.c << 'EnD of tabiwp.c'
/* tabiwp.c

	proportional nroff table for Imagewriter II (I) printer

	copyright (c) 1987 Stuart Lynne

*/

/*
	This file defines an nroff table using the imagewriter's
	built in proportional font.

	To construct tabiwp you must have the table generation software.
	This has been tested with Bruce Townsend's version.

	Because of the limitations of this table and nroff, post processing
	support is required. See the filter iw(1ml).

	Specifically this table assumes that iw is called after nroff:

		nroff .... | col ... | iw | ...
	
	The iw filter defines a special char in the alternate font. A one
	dot width space for nroff to do proportional spacing with.

	Nroff uses this in a round about way. By dropping into plot mode
	and emitting the move right sequence. In our case simply the 
	one dot width space.

*/



#include	<termio.h>	/* Req'd only for bset, breset */

#define INCH 240

struct {
	int bset;
	int breset;
	int Hor;
	int Vert;
	int Newline;
	int Char;
	int Em;
	int Halfline;
	int Adj;
	char *twinit;
	char *twrest;
	char *twnl;
	char *hlr;
	char *hlf;
	char *flr;
	char *bdon;
	char *bdoff;
	char *iton;
	char *itoff;
	char *ploton;
	char *plotoff;
	char *up;
	char *down;
	char *right;
	char *left;
	char *codetab[256-32];
	char *zzz;
	} t = {
/*bset    */		0,
/*breset  */		ONLCR | OCRNL | ONLRET,
/*Hor     */		INCH / 120, /* 24, */ /*INCH / 60,*/
/*Vert    */		40, /*INCH / 48,*/
/*Newline */		INCH / 6,
/*Char    */		INCH / 120,
/*Em      */		INCH / 120 * 7, /* seem to want size of sp */
/*Halfline*/		INCH / 12,
/*Adj     */		INCH / 120,
/*twinit  */		"", 
/*twrest  */		"",
/*twnl    */		"\033\"\r\n",	/* turn boldface off, newline */
/*hlr     */		"",
/*hlf     */		"",
/*flr     */		"",
/*bdon    */		"\033!",	/* turn boldface on */
/*bdoff   */		"\033\"",	/* turn boldface off */
/*iton    */		"\033X",	/* turn underline on */ 
/*itoff   */		"\033Y", 	/* turn underline off */
/*ploton  */		"\033'",	/* turn alternate font on */
/*plotoff */		"\033$",	/* turn alternate font off */
/*up      */		"",
/*down    */		"",
/*right   */		"~", /* requires support from iw - vis-a-vis special char */
/*left    */		"",
/* space */         	"\007 ", 
/* space   */		/*"\001\033'~\033$", */
/* ! */             	"\007!",
/* " */             	"\012\"",
/* # */             	"\016#",
/* $ */             	"\014$",
/* % */             	"\020%",
/* & */             	"\015&",
/* ' close */       	"\007'",
/* ( */             	"\007(",
/* ) */             	"\007)",
/* * */             	"\014*",
/* + */             	"\014+",
/* , */             	"\007,",
/* - hyphen */      	"\014-",
/* . */             	"\007.",
/* / */             	"\014/",
/* 0 */             	"\2140",
/* 1 */             	"\2141",
/* 2 */             	"\2142",
/* 3 */             	"\2143",
/* 4 */             	"\2144",
/* 5 */             	"\2145",
/* 6 */             	"\2146",
/* 7 */             	"\2147",
/* 8 */             	"\2148",
/* 9 */             	"\2149",
/* : */             	"\007:",
/* ; */             	"\007;",
/* < */             	"\014<",
/* = */             	"\014=",
/* > */             	"\014>",
/* ? */             	"\014?",
/* @ */             	"\016@",
/* A */             	"\220A",
/* B */             	"\217B",
/* C */             	"\216C",
/* D */             	"\217D",
/* E */             	"\217E",
/* F */             	"\217F",
/* G */             	"\216G",
/* H */             	"\217H",
/* I */             	"\211I",
/* J */             	"\215J",
/* K */             	"\214K",
/* L */             	"\215L",
/* M */             	"\221M",
/* N */             	"\220N",
/* O */             	"\217O",
/* P */             	"\215P",
/* Q */             	"\220Q",
/* R */             	"\217R",
/* S */             	"\214S",
/* T */             	"\216T",
/* U */             	"\217U",
/* V */             	"\220V",
/* W */             	"\221W",
/* X */             	"\213X",
/* Y */             	"\216Y",
/* Z */             	"\213Z",
/* [ */             	"\014[",
/* \ */             	"\014\\",
/* ] */             	"\014]",
/* ^ */             	"\014^",
/* _ dash */        	"\021_",
/* ` open */        	"\007`",
/* a */             	"\214a",
/* b */             	"\214b",
/* c */             	"\212c",
/* d */             	"\214d",
/* e */             	"\214e",
/* f */             	"\212f",
/* g */             	"\214g",
/* h */             	"\214h",
/* i */             	"\210i",
/* j */             	"\207j",
/* k */             	"\212k",
/* l */             	"\210l",
/* m */             	"\220m",
/* n */             	"\214n",
/* o */             	"\214o",
/* p */             	"\214p",
/* q */             	"\214q",
/* r */             	"\212r",
/* s */             	"\214s",
/* t */             	"\212t",
/* u */             	"\214u",
/* v */             	"\214v",
/* w */             	"\220w",
/* x */             	"\214x",
/* y */             	"\214y",
/* z */             	"\212z",
/* { */             	"\012{",
/* | */             	"\007|",
/* } */             	"\012}",
/* ~ */             	"\015~",
/* narrow sp */     	"\007 ",
/* hyphen */        	"\014-",
/* bullet */        	"\000\0",
/* square */        	"\000\0",
/* 3/4 em */        	"\014-",
/* rule */          	"\021_",
/* 1/4 */           	"\0401/4",
/* 1/2 */           	"\0401/2",
/* 3/4 */           	"\0403/4",
/* minus */         	"\014-",
/* fi */            	"\222fi",
/* fl */            	"\222fl",
/* ff */            	"\224ff",
/* ffi */           	"\232ffi",
/* ffl */           	"\203ffl",
/* degree */        	"\000\0",
/* dagger */        	"\000\0",
/* section */       	"\000\0",
/* foot mark */     	"\000\0",
/* acute accent */  	"\000\0",
/* grave accent */  	"\000\0",
/* underrule */     	"\021_",
/* slash (longer) */	"\014/",
/* half narrow space */	"\000\0",
/* unpaddable space */	"\007 ",
/* alpha */         	"\000\0",
/* beta */          	"\000\0",
/* gamma */         	"\000\0",
/* epsilon */       	"\000\0",
/* zeta */          	"\000\0",
/* eta */           	"\000\0",
/* theta */         	"\000\0",
/* iota */          	"\000\0",
/* kappa */         	"\000\0",
/* lambda */        	"\000\0",
/* mu */            	"\000\0",
/* nu */            	"\000\0",
/* xi */            	"\000\0",
/* omicron */       	"\000\0",
/* pi */            	"\000\0",
/* rho */           	"\000\0",
/* sigma */         	"\000\0",
/* tau */           	"\000\0",
/* upsilon */       	"\000\0",
/* phi */           	"\000\0",
/* chi */           	"\000\0",
/* psi */           	"\000\0",
/* omega */         	"\000\0",
/* Gamma */         	"\000\0",
/* Delta */         	"\000\0",
/* Theta */         	"\000\0",
/* Lambda */        	"\000\0",
/* Xi */            	"\000\0",
/* Pi */            	"\000\0",
/* Sigma */         	"\000\0",
/* Tau */           	"\000\0",
/* Upsilon */       	"\000\0",
/* Phi */           	"\000\0",
/* Psi */           	"\000\0",
/* Omega */         	"\000\0",
/* square root */   	"\000\0",
/* terminal sigma */	"\000\0",
/* root en */       	"\000\0",
/* >= */            	"\000\0",
/* <= */            	"\000\0",
/* identically equal */	"\000\0",
/* equation minus */	"\000\0",
/* approx = */      	"\000\0",
/* approximates */  	"\000\0",
/* not equal */     	"\000\0",
/* right arrow */   	"\000\0",
/* left arrow */    	"\000\0",
/* up arrow */      	"\000\0",
/* down arrow */    	"\000\0",
/* eqn equals */    	"\000\0",
/* multiply */      	"\000\0",
/* divide */        	"\000\0",
/* plus-minus */    	"\000\0",
/* cup (union) */   	"\000\0",
/* cap (intersection) */	"\000\0",
/* subset of */     	"\000\0",
/* superset of */   	"\000\0",
/* improper subset */	"\000\0",
/*  improper superset */	"\000\0",
/* infinity */      	"\000\0",
/* pt deriv */      	"\000\0",
/* gradient */      	"\000\0",
/* not */           	"\000\0",
/* integral */      	"\000\0",
/* proportional to */	"\000\0",
/* empty set */     	"\000\0",
/* member of */     	"\000\0",
/* equation plus */ 	"\014+",
/* registration mk */	"\000\0",
/* copyright mk */  	"\000\0",
/* box rule */      	"\007|",
/* cent sign */     	"\000\0",
/* dbl dagger */    	"\000\0",
/* right hand */    	"\000\0",
/* left hand */     	"\000\0",
/* math *  */       	"\014*",
/* bell system sign */	"\000\0",
/* or (was star) */ 	"\007|",
/* circle */        	"\000\0",
/* left top of big curly */	"\007|",
/* left bottom of big curly */	"\007|",
/* right top of big curly */	"\007|",
/* right bottom of big curly */	"\007|",
/* left center of big curly */	"\007|",
/* right center of big curly */	"\007|",
/* bold vertical rule */	"\007|",
/* left bottom of big bracket */	"\007|",
/* right bottom of big bracket */	"\007|",
/* left top of big bracket */	"\007|",
/* right top of big bracket */	"\007|",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
/* ??? */           	"\000\0",
};
EnD of tabiwp.c
echo extracting iw.1ml 1>&2
cat >iw.1ml << 'EnD of iw.1ml'
.TH IW 1ML
.ad b
.SH NAME
iw - filter program for nroff to Apple ImageWriter (I & II) Printers
.SH SYNOPSIS
.B iw
< file.in > file.out
.br
.... | 
.B iw
| ....
.SH DESCRIPTION
.PP
Iw is a simple filter which fixes various problems with the output from 
nroff. 
It should be used (automatically if man and mm are correctly modified),
when the -Tiw, -Tiwp or -Tiwlp option is specified. 
.br
	man -Tiw elm | ....
.br
	mm -Tiw elm.guide | ....
.br
	nroff -cm -Tiw elm.guide | col -x -p | iw | ...
.PP
For tabiwlp, the nroff default boldface mechanism (X^HX) 
is intercepted and converted
to the Imagewriter boldface escape sequence (<esc>! and <esc>").
.PP
Also for tabiwlp, the nroff default underline mechanism (_^HX) 
is intercepted and converted
to the Imagewriter underline escape sequence (<esc>X and <esc>Y).
.PP
Multiple backspace char's (abcd^H^H^H^Hefgh), are intercepted and ignored
(abce is result not abcd). The imagewriter is not able to backspace and
overstrike more than one character position.
.PP
For tabiw and tabiwp where the Imagewriter underline escape 
sequence is generated by nroff 
it is intercepted and re-generated to ignore whitespace.
.PP
Any tabs are converted to white space due to a discrepency between nroff and
the Imagewriter.
.PP
.SH FILES
.br
/usr/local/bin/iw
.br
/usr/lib/term/tabiw
.br
/usr/lib/term/tabiwp
.br
/usr/lib/term/tabiwlp
.br
/usr/bin/man
.br
/usr/bin/mm
.br
.
.SH AUTHOR
Stuart Lynne
.SH SEE\ ALSO
iwlp(1ml), tabiw(5l), lp(1), lpadmin(1m), nroff(1), man(1), mm(1)
.SH BUGS
EnD of iw.1ml
echo extracting iwlp.1ml 1>&2
cat >iwlp.1ml << 'EnD of iwlp.1ml'
.TH IWLP 1ML
.ad b
.SH NAME
iwlp - lp interface program for Apple ImageWriter (I & II) Printer
.br
iw - filter for ImageWriter printer
.br
tabiw, tabiwp - nroff driving tables for Imagewriter printer
.SH SYNOPSIS
.B iwlp
.br
.B iwlp
requestID username banner copies options file1 .. filen
.SH DESCRIPTION
.I iwlp
is primarily used as an interface program by the System V Line
Printer Spooler. 

Place iwlp into the /usr/spool/lp/model directory. Use the
/usr/lib/lpadmin command to install.

The following options are supported when used from the lp command.

.SS COMMAND LINE OPTIONS
.TP 8
.BI \-c
compressed print
.TP
.B \-u
ultra compressed print
.TP
.B \-s
semi compressed print
.TP
.B \-x
expanded print
.TP
.B \-e
elite 12 cps (default)
.TP
.B \-E
elite proportional
.TP
.B \-p
pica 10 cps
.TP
.B \-P
pica proportional
.TP
.B \-d
draft mode quality
.TP
.B \-s
standard quality (default)
.TP
.B \-n
near letter quality
.TP
.B \-6
six lines per inch (default)
.TP
.B \-8
eight lines per inch
.TP
.B \-0
slash zero's
.TP
.B \-z
do not add half an inch offset (default if proportional print selected).
.TP
.B \-h
add half an inch offset (default if proportional print not selected).
.TP
.B \-t
no title or cover page
.P
This program is implemented as a shell script with an accompaning filter 
program to convert backspace bold and underline sequences to Imagewriter
specific escape sequences.
.br
Additional support for the Imagewriter is contained in the iw print filter
and tabiwp nroff table. 

.SH EXAMPLE
.br
	/usr/lib/lpadmin -piw -miwlp -v/dev/lp 
.br
	man -Tiwp elm.guide | lp -diw -t"IW Test" -oP 
.br
.SH FILES
.B /usr/spool/lp/model/iwlp
.SP
.SH AUTHOR
Stuart Lynne
.SH SEE ALSO
lp(1), lpadmin(1m), iw(1ml), tabiw()
.SH BUGS
EnD of iwlp.1ml
echo extracting tabiw.5l 1>&2
cat >tabiw.5l << 'EnD of tabiw.5l'
.TH TABIW 5ML
.ad b
.SH NAME
tabiw
.br
tabiwp
.br
tabiwlp
.br
.SH SYNOPSIS
.B tabiw
nroff -Tiw .....
.br
.B tabiwp
nroff -Tiwp .....
.br
.SH DESCRIPTION

.B tabiw,
.B tabiwp,
.B tabiwlp
are used by nroff to generate the proper escape sequences for the 
Imagewriter printer. 
Tabiwp is for proportional print mode (ie. Pica Proportional).
.P
Tabiw supports the normal Imagewriter non-proportional character
sets (ie. Pica 10 cps, Elite 12 cps). 
Underlining and boldface are done with the standard Imagewriter
escape sequences.
.P
Tabiwp supports the Imagewriter proportional character set.
.P
Tabiwlp is a link to tablp. This is used as a signal to man and mm
shell scripts to use the iw printer filter with tablp.
.P
Use the -T flag to tell nroff you wish to use these versions.
.P
To allow choice of character sets to be made when printing the
nroff driving tables do not contain information to set up the 
printer to the correct font. This can be easily done with the
iwlp line printer spooler filter.
.P
The proportional mode is not correctly mapped to nroffs internal 
scale. Pica proportional is 83% the size of normal nroff output.
Elite proportional is 75% the size of normal nroff output.
.P
To correct for this a document might place the following commands
at the front of the input file:
.nf
.br
.B 	Pica
.br
	.po .9i
	.ll 7.25i

.B 	Elite
	.po 1i
	.ll 8i
.fi
.SH EXAMPLE
.br
	nroff -Tiwp -cm elm.guide | col -x -p | iw | lp -diw -oP
.br
	man -Tiwp elm.guide | lp -diw -oP
.br
.SH FILES
 /usr/lib/term/tabiw
.br
/usr/lib/term/tabiwp 
.br
.SH AUTHOR
Stuart Lynne
.SH SEE ALSO
iwlp(1ml), iw(1ml), nroff(1), man(1), mm(1) 
.SH BUGS
The sizing of the proportional fonts is not correctly set for nroff, 
requiring a short preamble to source files resetting the line width
and page offset.
EnD of tabiw.5l
echo extracting man.diff 1>&2
cat >man.diff << 'EnD of man.diff'
8c8
< PATH=/bin:/usr/bin:/usr/local/bin;	y=0;	tbl="tbl";	u="-can";
---
> PATH=/bin:/usr/bin:/usr/lbin;	y=0;	tbl="tbl";	u="-can";
65c65
< 		iwlp|iwp|iw|2631|2631-c|2631-e)	v=3;	c=c ;;
---
> 		2631|2631-c|2631-e)	v=3;	c=c ;;
78d77
< 			iwlp|iwp|iw)	g="|col -p -x | iw" ;;
EnD of man.diff
echo extracting mm.diff 1>&2
cat >mm.diff << 'EnD of mm.diff'
30c30
< 	iwlp|iwp|iw|2631|2631-c|2631-e)	v=3;	c=c ;;
---
> 	2631|2631-c|2631-e)	v=3;	c=c ;;
44d43
< 		iwlp|iwp|iw)	g="|col -p -x | iw" ;;
77d75
< #echo "$f $e nroff $u $w -T$TERM $a $d $g";	z=0;	exit
EnD of mm.diff
echo extracting iwlp 1>&2
cat >iwlp << 'EnD of iwlp'
#
#	$Header: iw,v 1.0 86/06/17 14:50:23 rgb Exp $
#	$Locker:  $
#
# lp interface for Apple Imagewriter printers I/II
#
#	SCCS @(#)iw	1.0

version="1.2"

x1="iwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiw"
x2="wiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwiwi"

# parse arg's first
#
copies=$4
siz=-e
qual=-S
lines=-6
slashzero=0
pageoffset=1
coverpage=1
for i in $5
do
	case "$i" in
	-c | c) # compressed print
		siz=-c;
		;;
	-u | u) # ultra compressed print
		siz=-u;
		;;
	-s | s) # semi condesened print
		siz=-s;
		;;
	-x | x) # expanded print
		siz=-x;
		;;
	-e | e) # elite 12 cps
		siz=-e		
		;;
	-E | E) # elite proportional
		siz=-E
		pageoffset=0
		;;
	-p | p) # pica 10 cps
		siz=-p
		;;
	-P | P) # pica proportional
		siz=-P
		pageoffset=0
		;;
	-D | D | -d | d) # draft 
		qual=-D
		;;
	-S | S | -s | s) # standard
		qual=-S
		;;
	-N | N | -n | n) # near letter quality
		qual=-N
		;;
	-6 | 6) # six lines per inch
		lines=-6
		;;
	-8 | 8) # eight lines per inch
		lines=-8
		;;
	-0 | 0) # slash zero's
		slashzero=1
		;;
	-z | z | -Z | Z) # do not add half inch offset
		pageoffset=0
		;;
	-h | h | -H | H) # do add half inch offset
		pageoffset=1
		;;
	-t | t | -T | T) # do not print cover page
		coverpage=0
		;;

	esac
done

# reset printer
echo "\033c\c"

# print cover page?
#
if [ X$coverpage = X1 ]
then
#echo "\014\c"
echo "\033L010\c"		#  offset left margin by 10
echo "\n$x1\n$x2\n$x1\n$x2\n"
banner "$2"
echo "\n"
user=`grep "^$2:" /etc/passwd | line | cut -d: -f5`
if [ -n "$user" ]
then
	echo "User: $user\n"
else
	echo "\n"
fi
echo "Request id: $1    Printer: `basename $0`  Interface: IW1 "$version"\n"
date
echo "\n"
if [ -n "$3" ]
then
	banner $3
fi
echo "\014\c"
echo "\033L000\c"		#  offset left margin by 0
fi
if [ X$siz = X-x ]
then
	echo "\033n\c"	# expanded		9 cpi		72 cli
elif [ X$siz = X-c ]
then
	echo "\033q\c"	# condensed 		15 cpi		120 cli
elif [ X$siz = X-s ]
then
	echo "\033e\c"	# semi condensed 	13.4 cpi	107 cli
elif [ X$siz = X-u ]
then
	echo "\033Q\c"	# ultra condensed 	17 cpi 		136 cli
elif [ X$siz = X-p ]
then
	echo "\033N\c"	# pica 			10 cpi
elif [ X$siz = X-P ]
then
	echo "\033p\c"	# pica proportional
elif [ X$siz = X-e ]
then
	echo "\033E\c"	# elite			12 cpi
elif [ X$siz = X-E ]
then
	echo "\033P\c"	# elite proportional
fi
if [ X$qual = X-D ]
then
	echo "\033a1\c"	# draft mode
elif [ X$qual = X-S ]
then
	echo "\033a0\c"	# standard quality
elif [ X$qual = X-N ]	
then
	echo "\033a2\c"	# near letter quality
fi
if [ X$lines = X-6 ]
then
	echo "\033A\c"
elif [ X$lines = X-8 ]
then
	echo "\033B\c"
fi
if [ X$slashzeros = X1 ]
then
	echo "\033D\001\000\c"
	#echo "\033D\000\001\c"
fi
if [ X$pageoffset = X1 ]
then
echo "\033L005\c"		#  offset left margin by 5
fi
#
#
shift; shift; shift; shift; shift
files="$*"
i=1
while [ $i -le $copies ];
do
	for file in $files;
	do
		cat "$file" 2>&1
		echo "\014\c"
	done
	i=`expr $i + 1`
done
#echo "\033c\c"	# reset to power on defaults 
exit 0
EnD of iwlp
chmod +x iwlp
-- 
Stuart Lynne	ihnp4!alberta!ubc-vi!van-bc!sl 	      Vancouver,BC,604-937-7532
Todays feature: The Problem of the Green Capsule, John Dickson Carr, 1939
Gideon Fell solves the "Psychologist's Murder Case". Five eye-witnesses, a film
and still no one could identify the murder.