[mod.sources] troff->laserjet

sources-request@panda.UUCP (01/27/86)

Mod.sources:  Volume 3, Issue 96
Submitted by: ihnp4!mnetor!clewis (Chris Lewis)


This is a troff->HP laserjet filter package that should be capable of
using Berkeley vfont files.  I say "should be", because our system
doesn't have any, and I converted some MAC fonts to look like what
the manual pages say for vfonts.  "vfontinfo" does seem to work properly.

I will be submitting the MAC->vfont converter and some publically
distributable MAC font files a little later.

This was built on a Pyramid in the System V universe.

#!/bin/sh
echo 'Start of pack.out, part 01 of 01:'
echo 'x - README'
sed 's/^X//' > README << '/'
XThis is a UNIX Troff to Laserjet converter filter.  It supports rasterized
XBerkeley vfonts.  Er, rather, I uploaded some MAC fonts, converted them to 
Xwhat I *think* are Berkeley vfonts (vfontinfo works okay on 'em), and
Xit works okay sort of.  The manual page for lroff describes the whole thing.
XThe MACfont to vfont converter plus whatever fonts I can legally distribute
Xwill be posted separately.
X
XInstallation:
X	- modify BIN in the makefile to point to where you want to put
X	  the executables.
X	- modify "lcat.c" initialization of "fontLIB" to point at either:
X		- the Berkeley vfont directory, or
X		- where you are going to place vfonts
X		  (particularly from the MAC -> vfont converter)
X	- modify lroff for your printer system.  You may have to modify
X	  your printer system so that you can get both 8 bit and ^S/^Q
X	  control, and that no other filters are used.  We modified a System V
X	  spooler to accept a "-p" to mean "plot mode", where the tty's
X	  are set differently, and it doesn't go through the reversal filter
X	  we use for normal stuff.
X	- make sure that tmac.lmm has the right path for your mm macro package.
X	- Run "make".
X	- Run "make test" to ensure everything is working reasonably.
X	  This will give the printed example of the logo.
X	- run "make install".  If it asks you for a password, then
X	  enter your super-user password.  It copies lroff, lcat to
X	  $(BIN) and tmac.lmm to /usr/lib/tmac/tmac.lmm
X
XThis thing runs on System V. I don't think that there will be many changes 
Xfor Berkeley except for acquiring one of the public domain getopt's.
/
echo 'x - lcat.c'
sed 's/^X//' > lcat.c << '/'
X/*****************************************************************
X
X    Copyright 1985. Chris Lewis
X
X    Module          : lcat.c 1.5
X    Date submitted  : 86/01/21 13:23:21
X    Author          : Chris Lewis
X    Origin          : Permission to copy and further distribute is 
X		      freely given provided this copyright notice remains 
X		      intact and that this software is not sold for profit.
X    Description     : Driver for troff WANG/CAT to HP laserjet filter.
X
X******************************************************************/
X
X#ifndef lint
Xstatic char SrcId[] = "@(#)lcat.c:1.5";
X#endif
X
X#include <stdio.h>
X#include <ctype.h>
X#include <string.h>
Xtypedef	struct	{
X	int	size;
X	char	*g_line;
X} glyph[];
X
X#include "bell.glyph.h"
X
X#define	ESC	0x80
X#define	FLASH	0x00
X#define	CONTROL	0x40
X#define	LEAD	0x60
X#define	SIZE	0x50
X
X#define	DOWN	0
X#define	UP	1
X#define	LOWER	2
X#define	UPPER	3
X#define	FORWARD	4
X#define	BACKWARD 5
X
XFILE	*diagFile = (FILE *) NULL;
X#define	DEBUGPRINTF	if (diagFile) debugprintf
X
Xchar *toprnt();
X
Xchar ptab[16] = { 7, 8, 10, 11, 12, 14, 18, 9, 6, 16, 20, 22, 24, 28, 36, 72};
Xint	points;
Xint	vertChanged = 0;
Xint	quality	= 1;
X
X
X/*	Scale factors:
X		(td/ld) * (lu / tu)
X		Where:
X			td: troff dimension in inches
X			ld: laserjet dimension in inches
X			lu: laserjet precision/inch
X			tu: troff precision/inch
X
X		td = 6.5 (width), 11 (length)
X		tu = 432
X		ld = 6.5 (width), 10 (length)
X		lu = 720
X*/
X
X#define	XSF	1.6666666	/* X Scale factor (troff to laserjet units) */
X#define	YSF	1.5151515	/* Y Scale factor (troff to laserjet units) */
X
Xlong	xpos, oldypos = -9999, ypos = -153;
X
Xchar *words[] = {
X	"down", "up", "lower", "upper", "forward", "backwards"
X	};
X
Xchar	fontName[BUFSIZ] = "newyork";
Xchar	*fontLib = "/u/clewis/lcat/fonts/";
X
X#define	CTOINT(val,sig)	((~c)&sig)
X
X#define	UNITS	432
X#define	FONT4		/* 4 Font device */
X
X#ifdef	FONT4
X#define	calcfont	font = ((mag == UPPER)<<1)|((rail == UPPER))
X#else
X#define	calcfont	font = ((mag == UPPER)<<2)|((rail == UPPER)<<1)|(tilt==DOWN)
X#endif
X
Xextern char *native[], *specnative[];
X
Xmain(argc, argv)
Xint	argc;
Xchar	**argv; {
X	register int nc, c;
X	register char *rp;
X	register int i,j;
X	register int decipoints;
X	register int units;
X	register int oldFont, font, rail, mag, tilt, half, escape, lead;
X
X	extern int getopt();
X	extern char *optarg;
X	while((c = getopt(argc, argv, "hHDdf:")) != EOF)
X		switch (c) {
X			case 'D':
X				diagFile = fopen("diagnostics", "w");
X				if (!diagFile) {
X					fprintf(stderr, "Could not open diagnostics file\n");
X					exit(1);
X				}
X				break;
X			case 'f':
X				strcpy(fontName, optarg);
X				break;
X			case 'd':
X				fontName[0] = '\0';
X				quality = 0;
X				break;
X			case 'h':
X				quality = 1;
X				break;
X			case 'H':
X				quality = 2;
X				break;
X			case '?':
X				usage();
X				exit(1);
X		}
X	
X	if (diagFile) {
X		for (i = 0; i <= 107; i++) {
X			fprintf(diagFile, "%d: native: %s, ", i, toprnt(native[i]));
X			fprintf(diagFile, "Special:%s\n", toprnt(specnative[i]));
X		}
X	}
X	while (!feof(stdin)) {
X		c = getc(stdin);
X		switch(c) {
X		case 0x00:
X			DEBUGPRINTF("NOP\n");
X			break;
X		/* Flash (print character) codes */
X		case 0x01: case 0x02: case 0x03: case 0x04: 
X		case 0x05: case 0x06: case 0x07: case 0x08: 
X		case 0x09: case 0x0a: case 0x0b: case 0x0c: 
X		case 0x0d: case 0x0e: case 0x0f: case 0x10: 
X		case 0x11: case 0x12: case 0x13: case 0x14:
X		case 0x15: case 0x16: case 0x17: case 0x18: 
X		case 0x19: case 0x1a: case 0x1b: case 0x1c: 
X		case 0x1d: case 0x1e: case 0x1f: case 0x20: 
X		case 0x21: case 0x22: case 0x23: case 0x24: 
X		case 0x25: case 0x26: case 0x27: case 0x28:
X		case 0x29: case 0x2a: case 0x2b: case 0x2c: 
X		case 0x2d: case 0x2e: case 0x2f: case 0x30: 
X		case 0x31: case 0x32: case 0x33: case 0x34: 
X		case 0x35: case 0x36: case 0x37: case 0x38: 
X		case 0x39: case 0x3a: case 0x3b: case 0x3c:
X		case 0x3d: case 0x3e: case 0x3f:
X			/* This is terribly kludgey:
X				In 432 units per inch, 4752 is 11 inches.
X				When we go beyond this, we subtract 4752
X				and ignore anything printed on this line.
X			*/
X			while (ypos >= 4752) {
X				ypos -= 4752;
X				oldypos = -9999;
X				DEBUGPRINTF("Page break\n", 0, 0);
X				putchar('\f');
X			}
X			if (ypos <= 20) {
X				DEBUGPRINTF("Ignoring: %d, %d\n", xpos, ypos);
X				break; /* ignore anything less than this
X					from the beginning of a page */
X			}
X			c = c&0x3f;
X			DEBUGPRINTF("Flash %02d %s font %d\n", c&0x3f, 
X				words[half], font);
X			DEBUGPRINTF("x,y=%ld,%ld; font=%d; rail=%s; mag=%s; tilt=%s; half=%s\n",
X				xpos,ypos,font+1,words[rail],words[mag],words[tilt],
X				words[half]);
X			/*	Find the C/A/T code */
X			if (half == UPPER) {
X				if (c > 46) {
X					fprintf(stderr, "Illegal upper flash: %d\n", c);
X					exit(1);
X				}
X				nc = c + 62;
X			} else
X				nc = c - 1;
X			/*	Move to the appropriate position	*/
X
X			if (!vertChanged && oldypos == ypos) {
X				printf("\033&a%dH",(int) (xpos*XSF));
X			} else {
X				printf("\033&a%dh%dV",(int) (xpos*XSF),
X					(int) (ypos*YSF));
X			}
X			oldypos = ypos;
X			vertChanged = 0;
X			if (font == 3 && nc == 34) {
X				prt_glyph(cX_glyph);
X				break;
X			}
X			if (points != 12 && fontName[0] != '\0' && quality) {
X				if (loadfont(fontName, points, quality)) {
X					flashrast(nc, points, font);
X					vertChanged = 1;
X					break;
X				}
X			}
X			if (oldFont != font) {
X				DEBUGPRINTF("Changing to font %d\n", font);
X				switch(font) {
X					case 3:
X					case 0:
X						/* upright, normal weight */
X						printf("\033(s0s-2B");
X						break;
X					case 1:
X						/* italics, light weight */
X						printf("\033(s1s-3B");
X						break;
X					case 2:
X						/* upright, heavy weight (bold)*/
X						printf("\033(s0s7B");
X						break;
X				}
X			}
X			oldFont = font;
X			
X			if (font < 3)
X				for (rp = native[nc]; *rp; rp++)
X					putc(*rp, stdout);
X			else
X				for (rp = specnative[nc]; *rp; rp++)
X					putc(*rp, stdout);
X			DEBUGPRINTF("Code %d is %d(%s)\n", c, nc, (font < 3) ?
X			    toprnt(native[nc]):toprnt(specnative[nc]));
X			break;
X		/* Control codes */
X		case 0x40:
X			DEBUGPRINTF("Initialize\n");
X			xpos = 0;
X			ypos = -153;
X			escape = FORWARD;
X			lead = FORWARD;
X			half = LOWER;
X			rail = LOWER;
X			mag = LOWER;
X			tilt = DOWN;
X			calcfont;
X			break;
X		case 0x41:
X			DEBUGPRINTF("Rail lower\n");
X			rail = LOWER;
X			calcfont;
X			break;
X		case 0x42:
X			DEBUGPRINTF("Rail upper\n");
X			rail = UPPER;
X			calcfont;
X			break;
X		case 0x43:
X			DEBUGPRINTF("Mag upper\n");
X			mag = UPPER;
X			calcfont;
X			break;
X		case 0x44:
X			DEBUGPRINTF("Mag lower\n");
X			mag = LOWER;
X			calcfont;
X			break;
X		case 0x45:
X			DEBUGPRINTF("half lower\n");
X			half = LOWER;
X			break;
X		case 0x46:
X			DEBUGPRINTF("half upper\n");
X			half = UPPER;
X			break;
X		case 0x47:
X			DEBUGPRINTF("Escape forward\n");
X			escape = FORWARD;
X			break;
X		case 0x48:
X			DEBUGPRINTF("Escape backward\n");
X			escape = BACKWARD;
X			break;
X		case 0x49:
X			DEBUGPRINTF("STOP\n");
X			break;
X		case 0x4a:
X			DEBUGPRINTF("Lead forward\n");
X			lead = FORWARD;
X			break;
X		case 0x4b:
X			DEBUGPRINTF("Software cut!\n");
X			break;
X		case 0x4c:
X			DEBUGPRINTF("Lead backward\n");
X			lead = BACKWARD;
X			break;
X		case 0x4d:
X			DEBUGPRINTF("UNKNOWN CONTROL CODE!\n");
X			exit(0);
X		case 0x4e:
X			DEBUGPRINTF("Tilt up\n");
X			tilt = UP;
X			calcfont;
X			break;
X		case 0x4f:
X			DEBUGPRINTF("Tilt down\n");
X			tilt = DOWN;
X			calcfont;
X			break;
X
X		/* Size changes */
X		case 0x50: case 0x51: case 0x52: case 0x53:
X		case 0x54: case 0x55: case 0x56: case 0x57:
X		case 0x58: case 0x59: case 0x5a: case 0x5b:
X		case 0x5c: case 0x5d: case 0x5e: case 0x5f:
X			DEBUGPRINTF("Size change %02x\n", c&0xf);
X			points = ptab[c&0xf];
X			break;
X		/* Lead (vertical motion) codes */
X		case 0x60: case 0x61: case 0x62: case 0x63:
X		case 0x64: case 0x65: case 0x66: case 0x67:
X		case 0x68: case 0x69: case 0x6a: case 0x6b:
X		case 0x6c: case 0x6d: case 0x6e: case 0x6f:
X		case 0x70: case 0x71: case 0x72: case 0x73:
X		case 0x74: case 0x75: case 0x76: case 0x77:
X		case 0x78: case 0x79: case 0x7a: case 0x7b:
X		case 0x7c: case 0x7d: case 0x7e: case 0x7f:
X
X			DEBUGPRINTF("Lead(vertical) %02x\n", c&0x1f);
X			units = CTOINT(c,0x1f);
X			if (lead == FORWARD) {
X				ypos += 3*units;
X			} else {
X				ypos -= 3*units;
X			}
X			break;
X		/* Escape (horizontal motion) codes */
X		case 0x80: case 0x81: case 0x82: case 0x83:
X		case 0x84: case 0x85: case 0x86: case 0x87:
X		case 0x88: case 0x89: case 0x8a: case 0x8b:
X		case 0x8c: case 0x8d: case 0x8e: case 0x8f:
X		case 0x90: case 0x91: case 0x92: case 0x93:
X		case 0x94: case 0x95: case 0x96: case 0x97:
X		case 0x98: case 0x99: case 0x9a: case 0x9b:
X		case 0x9c: case 0x9d: case 0x9e: case 0x9f:
X		case 0xa0: case 0xa1: case 0xa2: case 0xa3:
X		case 0xa4: case 0xa5: case 0xa6: case 0xa7:
X		case 0xa8: case 0xa9: case 0xaa: case 0xab:
X		case 0xac: case 0xad: case 0xae: case 0xaf:
X		case 0xb0: case 0xb1: case 0xb2: case 0xb3:
X		case 0xb4: case 0xb5: case 0xb6: case 0xb7:
X		case 0xb8: case 0xb9: case 0xba: case 0xbb:
X		case 0xbc: case 0xbd: case 0xbe: case 0xbf:
X		case 0xc0: case 0xc1: case 0xc2: case 0xc3:
X		case 0xc4: case 0xc5: case 0xc6: case 0xc7:
X		case 0xc8: case 0xc9: case 0xca: case 0xcb:
X		case 0xcc: case 0xcd: case 0xce: case 0xcf:
X		case 0xd0: case 0xd1: case 0xd2: case 0xd3:
X		case 0xd4: case 0xd5: case 0xd6: case 0xd7:
X		case 0xd8: case 0xd9: case 0xda: case 0xdb:
X		case 0xdc: case 0xdd: case 0xde: case 0xdf:
X		case 0xe0: case 0xe1: case 0xe2: case 0xe3:
X		case 0xe4: case 0xe5: case 0xe6: case 0xe7:
X		case 0xe8: case 0xe9: case 0xea: case 0xeb:
X		case 0xec: case 0xed: case 0xee: case 0xef:
X		case 0xf0: case 0xf1: case 0xf2: case 0xf3:
X		case 0xf4: case 0xf5: case 0xf6: case 0xf7:
X		case 0xf8: case 0xf9: case 0xfa: case 0xfb:
X		case 0xfc: case 0xfd: case 0xfe:
X
X			units = CTOINT(c,0x7f);
X			if (escape == FORWARD) {
X				xpos += units;
X			} else {
X				xpos -= units;
X			}
X			DEBUGPRINTF("ESC (hor): %02x\n", c&0x7f);
X			break;
X
X		case 0xff:
X			DEBUGPRINTF("Illegal: %02x\n", c);
X			break;
X		}
X	}
X	exit(0);
X}
X
Xchar *
Xtoprnt(s)
Xchar *s; {
X	static char buf[BUFSIZ];
X	register char *fromp, *top;
X	for (fromp = s, top = buf; *fromp; fromp++,top++)
X		if (isascii(*fromp) && isprint(*fromp))
X			*top = *fromp;
X		else {
X			sprintf(top, "\\%03o", *fromp);
X			top += 3;
X		}
X	*top = '\0';
X	return(buf);
X}
X
Xprt_glyph(g)
Xglyph g;	{
X	register int i, j;
X	int val;
X	printf("\033&a-%dV", cX_height * 2);
X	printf("\033*t300R");
X	for (i = 0; i < cX_height; i++) {
X		printf("\033*r1A");
X		printf("\033*b%dW", g[i].size);
X		for (j = 0; j < g[i].size; j++) {
X			if (1 != sscanf(&(g[i].g_line[j*2]), "%2x", &val)) {
X				fprintf(stderr, "Scan failure\n");
X				exit(1);
X			}
X			putc(val, stdout);
X		}
X	}
X	printf("\033*rB");
X}
X
Xusage() {
X	fprintf(stderr, "usage: lcat -f<fontName> [-d] [-D]\n");
X}
X
Xdebugprintf(fmt, a1, a2, a3, a4, a5, a6, a7)
Xchar	*fmt;
Xint	a1, a2, a3, a4, a5, a6, a7; {
X	char buf[BUFSIZ];
X	sprintf(buf, fmt, a1, a2, a3, a4, a5, a6, a7);
X	fprintf(diagFile, buf);
X}
/
echo 'x - fastfonts.c'
sed 's/^X//' > fastfonts.c << '/'
X/*****************************************************************
X
X    Copyright 1985. Chris Lewis
X
X    Module          : fastfonts.c 1.3
X    Date submitted  : 85/12/18 14:06:01
X    Author          : Chris Lewis
X    Origin          : Permission to copy and further distribute is 
X		      freely given provided this copyright notice remains 
X		      intact and that this software is not sold for profit.
X    Description     : Native Laser jet font where the index is the C/A/T
X	              codes
X
X******************************************************************/
X
X#ifndef	lint
Xstatic char SrcId[] = "@(#)fastfonts.c:1.3";
X#endif
X
X#define	UNASS	"\377"		/* unassigned in C/A/T */
X#define	UNREP	"\377"		/* unrepresentable on Laser fonts */
X/*	Regular characters, fonts 1-3	*/
X/*	Note on native and specnative arrays:
X	you can create composite characters by using HP positionning
X	and characters.  Only one proviso, because of the vertical
X	optimization, the net vertical motion MUST BE ZERO	*/
Xchar *native[108] = {
X	/* num		howto	name */
X	/*   1  */	"h",	/*h*/
X	/*   2  */	"t",	/*t*/
X	/*   3  */	"n",	/*n*/
X	/*   4  */	"m",	/*m*/
X	/*   5  */	"l",	/*l*/
X	/*   6  */	"i",	/*i*/
X	/*   7  */	"z",	/*z*/
X	/*   8  */	"s",	/*s*/
X	/*   9  */	"d",	/*d*/
X	/*  10  */	"b",	/*b*/
X	/*  11  */	"x",	/*x*/
X	/*  12  */	"f",	/*f*/
X	/*  13  */	"j",	/*j*/
X	/*  14  */	"u",	/*u*/
X	/*  15  */	"k",	/*k*/
X	/*  16  */	UNASS,	/*unassigned*/
X	/*  17  */	"p",	/*p*/
X	/*  18  */	"\366",	/*3/4 em*/
X	/*  19  */	";",	/*;*/
X	/*  20  */	UNASS,	/*unassigned*/
X	/*  21  */	"a",	/*a*/
X	/*  22  */	"\033&a-80V_\033&a-60H_\033&a+80V",	/*horizontal rule*/
X	/*  23  */	"c",	/*c*/
X	/*  24  */	"`",	/*` open*/
X	/*  25  */	"e",	/*e*/
X	/*  26  */	"'",	/*' close*/
X	/*  27  */	"o",	/*o*/
X	/*  28  */	"\367",	/*1/4*/
X	/*  29  */	"r",	/*r*/
X	/*  30  */	"\370",	/*1/2*/
X	/*  31  */	"v",	/*v*/
X	/*  32  */	"-",	/*- hyphen*/
X	/*  33  */	"w",	/*w*/
X	/*  34  */	"q",	/*q*/
X	/*  35  */	"/",	/*/*/
X	/*  36  */	".",	/*.*/
X	/*  37  */	"g",	/*g*/
X	/*  38  */	"\377",	/*3/4*/
X	/*  39  */	",",	/*,*/
X	/*  40  */	"&",	/*&*/
X	/*  41  */	"y",	/*y*/
X	/*  42  */	UNASS,	/*unassigned*/
X	/*  43  */	"%",	/*%*/
X	/*  44  */	UNASS,	/*unassigned*/
X	/*  45  */	"Q",	/*Q*/
X	/*  46  */	"T",	/*T*/
X	/*  47  */	"O",	/*O*/
X	/*  48  */	"H",	/*H*/
X	/*  49  */	"N",	/*N*/
X	/*  50  */	"M",	/*M*/
X	/*  51  */	"L",	/*L*/
X	/*  52  */	"R",	/*R*/
X	/*  53  */	"G",	/*G*/
X	/*  54  */	"I",	/*I*/
X	/*  55  */	"P",	/*P*/
X	/*  56  */	"C",	/*C*/
X	/*  57  */	"V",	/*V*/
X	/*  58  */	"E",	/*E*/
X	/*  59  */	"Z",	/*Z*/
X	/*  60  */	"D",	/*D*/
X	/*  61  */	"B",	/*B*/
X	/*  62  */	"S",	/*S*/
X	/*  63  */	"Y",	/*Y*/
X	/* from here on are actually code 1-45, upper half of font */
X	/*  64  */	"F",	/*F*/
X	/*  65  */	"X",	/*X*/
X	/*  66  */	"A",	/*A*/
X	/*  67  */	"W",	/*W*/
X	/*  68  */	"J",	/*J*/
X	/*  69  */	"U",	/*U*/
X	/*  70  */	"K",	/*K*/
X	/*  71  */	"0",	/*0*/
X	/*  72  */	"1",	/*1*/
X	/*  73  */	"2",	/*2*/
X	/*  74  */	"3",	/*3*/
X	/*  75  */	"4",	/*4*/
X	/*  76  */	"5",	/*5*/
X	/*  77  */	"6",	/*6*/
X	/*  78  */	"7",	/*7*/
X	/*  79  */	"8",	/*8*/
X	/*  80  */	"9",	/*9*/
X	/*  81  */	"*",	/***/
X	/*  82  */	"-",	/*minus*/
X	/*  83  */	"\033&a-20Hf\033&a-45Hi",	/*fi*/
X	/*  84  */	"\033&a-20Hf\033&a-45Hl",	/*fl*/
X	/*  85  */	"\033&a-20Hf\033&a-45Hf",	/*ff*/
X	/*  86  */	"\277",	/*cent sign*/
X	/*  87  */	"\033&a-30Hf\033&a-45Hf\033&a-45Hl",	/*ffl*/
X	/*  88  */	"\033&a-30Hf\033&a-45Hf\033&a-45Hi",	/*ffi*/
X	/*  89  */	"(",	/*(*/
X	/*  90  */	")",	/*)*/
X	/*  91  */	"[",	/*[*/
X	/*  92  */	"]",	/*]*/
X	/*  93  */	"\263",	/*degree*/
X	/*  94  */	"\377",	/*dagger*/
X	/*  95  */	"=",	/*=*/
X	/*  96  */	"\377",	/*registered*/
X	/*  97  */	":",	/*:*/
X	/*  98  */	"+",	/*+*/
X	/*  99  */	UNASS,	/*unassigned*/
X	/* 100  */	"!",	/*!*/
X#ifdef	BLOTBULL
X	/* 101  */	"\374",	/*bullet*/
X#else
X	/* Composite bullet */
X	/* 101  */	"\033&a-15Vo\033&a-72h+15V*",
X#endif
X	/* 102  */	"?",	/*?*/
X	/* 103  */	"\250",	/*foot mark*/
X	/* 104  */	"|",	/*|*/
X	/* 105  */	UNASS,	/*unassigned*/
X	/* 106  */	"\377",	/*copyright*/
X	/* 107  */	"\272",	/*square*/
X	/* 108  */	"$"	/*$*/
X};
X
Xchar *specnative[108] = {
X	/*  1*/		"psi",	/*psi*/
X	/*  2*/		"theta",	/*theta*/
X	/*  3*/		"nu",	/*nu*/
X	/*  4*/		"mu",	/*mu*/
X	/*  5*/		"lambda",	/*lambda*/
X	/*  6*/		"iota",	/*iota*/
X	/*  7*/		"zeta",	/*zeta*/
X	/*  8*/		"sigma",	/*sigma*/
X	/*  9*/		"delta",	/*delta*/
X	/* 10*/		"beta",	/*beta*/
X	/* 11*/		"xi",	/*xi*/
X	/* 12*/		"eta",	/*eta*/
X	/* 13*/		"phi",	/*phi*/
X	/* 14*/		"upsilon",	/*upsilon*/
X	/* 15*/		"kappa",	/*kappa*/
X	/* 16*/		UNASS,	/*unassigned*/
X	/* 17*/		"pi",	/*pi*/
X	/* 18*/		"@",	/*@*/
X	/* 19*/		"down arrow",	/*down arrow*/
X	/* 20*/		UNASS,	/*unassigned*/
X	/* 21*/		"alpha",	/*alpha*/
X	/* 22*/		"or (was star)",	/*or (was star)*/
X	/* 23*/		"chi",	/*chi*/
X	/* 24*/		"\033&a-9H'\033&a-90H'",	/*double quote*/
X	/* 25*/		"epsilon",	/*epsilon*/
X	/* 26*/		"equation equal",	/*equation equal*/
X	/* 27*/		"omicron",	/*omicron*/
X	/* 28*/		"left arrow",	/*left arrow*/
X	/* 29*/		"rho",	/*rho*/
X	/* 30*/		"up arrow",	/*up arrow*/
X	/* 31*/		"tau",	/*tau*/
X	/* 32*/		"_",	/*_ underrule*/
X	/* 33*/		"\\",	/*\*/
X	/* 34*/		"Psi",	/*Psi*/
X	/* 35*/		"bell system sign",	/*bell system sign*/
X	/* 36*/		"infinity",	/*infinity*/
X	/* 37*/		"gamma",	/*gamma*/
X	/* 38*/		" improper superset",	/* improper superset*/
X	/* 39*/		"proportional to",	/*proportional to*/
X	/* 40*/		"right hand",	/*right hand*/
X	/* 41*/		"omega",	/*omega*/
X	/* 42*/		"gradient",	/*gradient*/
X	/* 43*/		UNASS,	/*unassigned*/
X	/* 44*/		"Phi",	/*Phi*/
X	/* 45*/		"Theta",	/*Theta*/
X	/* 46*/		"Omega",	/*Omega*/
X	/* 47*/		"cup (union)",	/*cup (union)*/
X	/* 48*/		"root en",	/*root en*/
X	/* 49*/		"terminal sigma (was root em)",	/*terminal sigma (was root em)*/
X	/* 50*/		"Lambda",	/*Lambda*/
X	/* 51*/		"equation minus",	/*equation minus*/
X	/* 52*/		"Gamma",	/*Gamma*/
X	/* 53*/		"integral sign",	/*integral sign*/
X	/* 54*/		"Pi",	/*Pi*/
X	/* 55*/		"subset of",	/*subset of*/
X	/* 56*/		"superset of",	/*superset of*/
X	/* 57*/		"approximates",	/*approximates*/
X	/* 58*/		"partial derivative",	/*partial derivative*/
X	/* 59*/		"Delta",	/*Delta*/
X	/* 60*/		"square root",	/*square root*/
X	/* 61*/		"Sigma",	/*Sigma*/
X	/* 62*/		"approx =",	/*approx =*/
X	/* 63*/		UNASS,	/*unassigned*/
X	/* 64*/		">",	/*>*/
X	/* 65*/		"Xi",	/*Xi*/
X	/* 66*/		"<",	/*<*/
X	/* 67*/		"slash (longer)",	/*slash (longer)*/
X	/* 68*/		"cap (intersection)",	/*cap (intersection)*/
X	/* 69*/		"Upsilon",	/*Upsilon*/
X	/* 70*/		"not",	/*not*/
X	/* 71*/		"right ceiling (rt of \")",	/*right ceiling (rt of ")*/
X	/* 72*/		"left top (of big curly)",	/*left top (of big curly)*/
X	/* 73*/		"bold vertical",	/*bold vertical*/
X	/* 74*/		"left center of big curly bracket",	/*left center of big curly bracket*/
X	/* 75*/		"left bottom",	/*left bottom*/
X	/* 76*/		"right top",	/*right top*/
X	/* 77*/		"right center of big curly bracket",	/*right center of big curly bracket*/
X	/* 78*/		"right bot",	/*right bot*/
X	/* 79*/		"right floor (rb of \")",	/*right floor (rb of ")*/
X	/* 80*/		"left floor (left bot of big sq bract)",	/*left floor (left bot of big sq bract)*/
X	/* 81*/		"left ceiling (lt of \")",	/*left ceiling (lt of ")*/
X	/* 82*/		"multiply",	/*multiply*/
X	/* 83*/		"divide",	/*divide*/
X	/* 84*/		"plus-minus",	/*plus-minus*/
X	/* 85*/		"<=",	/*<=*/
X	/* 86*/		">=",	/*>=*/
X	/* 87*/		"identically equal",	/*identically equal*/
X	/* 88*/		"not equal",	/*not equal*/
X	/* 89*/		"{",	/*{*/
X	/* 90*/		"}",	/*}*/
X	/* 91*/		"acute accent",	/*acute accent*/
X	/* 92*/		"grave accent",	/*grave accent*/
X	/* 93*/		"^",	/*^*/
X	/* 94*/		"#",	/*#*/
X	/* 95*/		"left hand",	/*left hand*/
X	/* 96*/		"member of",	/*member of*/
X	/* 97*/		"~",	/*~*/
X	/* 98*/		"empty set",	/*empty set*/
X	/* 99*/		UNASS,	/*unassigned*/
X	/*100*/		"dbl dagger",	/*dbl dagger*/
X	/*101*/		"\033&a-30H|",	/*box rule (was parallel sign)*/
X	/*102*/		"math * ",	/*math * */
X	/*103*/		"improper subset",	/*improper subset*/
X	/*104*/		"circle",	/*circle*/
X	/*105*/		UNASS,	/*unassigned*/
X	/*106*/		"equation plus",	/*equation plus*/
X	/*107*/		"right arrow",	/*right arrow*/
X	/*108*/		"section"	/*section*/
X};
/
echo 'x - compfont.c'
sed 's/^X//' > compfont.c << '/'
X/*****************************************************************
X
X    Copyright 1985. Chris Lewis
X
X    Module          : compfont.c 1.1
X    Date submitted  : 86/01/21 14:03:23
X    Author          : Chris Lewis
X    Origin          : Permission to copy and further distribute is 
X		      freely given provided this copyright notice remains 
X		      intact and that this software is not sold for profit.
X    Description     : Convert's vi'ed glyph file to lcat.c useable
X		      raster description.
X
X******************************************************************/
X
X#ifndef lint
Xstatic char SrcId[] = "@(#)compfont.c:1.1";
X#endif
X#include <stdio.h>
X#define	tstbit(n, f)	((f) == ' ') ? (1 << n):0
Xmain(argc, argv)
Xint	argc;
Xchar	*argv[]; {
X	char	buf[BUFSIZ];
X	register int i,j, length;
X	register char *rp;
X	unsigned  char v;
X	int	cdef;
X	int	lcount = 0;
X	if (argc != 1)
X		cdef = 1;
X	if (cdef) {
X		printf("glyph %s_glyph = {\n", argv[1]);
X	} else
X		printf("\033*t300R");
X	while (gets(buf)) {
X		lcount++;
X		rp = buf + strlen(buf) - 1;
X		while(rp > buf && *rp == ' ')
X			*rp-- = '\0';
X		if (!cdef)
X			printf("\033*r1A");
X		length = (strlen(buf) + 7) / 8;
X		if (cdef)
X			printf("\t{%d, \"", length);
X		else
X			printf("\033*b%dW", length);
X		strcat(buf, "           ");
X		for (i = 0, rp = buf; i < length; i++) {
X			v = 0;
X			for (j = 7; j >= 0; j--)
X				v |= (*rp++ != ' ') ? (1 << j):0;
X			if (cdef)
X				printf("%02x", v);
X			else
X				printf("%c", v);
X		}
X		printf("\"},\n");
X	}
X	printf("\t{-1,NULL}\n");
X	printf("};\n");
X	if (cdef)
X		printf("#define	%s_height %d\n", argv[1], lcount);
X	else {
X		printf("\033*rB");
X		printf("\f");
X	}
X	exit(0);
X}
/
echo 'x - Makefile'
sed 's/^X//' > Makefile << '/'
X.SUFFIXES: .sh .sh~
X
XBIN	= /u1/cx/bin
XTMAC	= /usr/lib/tmac/tmac.lmm
X
XCFLAGS = -O -DDEBUG
XOBJ	= lcat.o fastfonts.o newfonts.o
X
Xall:	lcat lroff
X
Xlcat:	$(OBJ)
X	$(CC) -o lcat $(CFLAGS) $(OBJ)
X
Xlcat.o:    bell.glyph.h
X
Xbell.glyph.h:    bell.glyph compfont
X	compfont cX < bell.glyph > bell.glyph.h
X
Xpack:	README lcat.c fastfonts.c compfont.c Makefile lroff bell.glyph \
X	cat.5 lroff.1 lrofftest.m tmac.lmm
X	packmail README lcat.c fastfonts.c compfont.c Makefile lroff \
X		bell.glyph cat.5 lroff.1 lrofftest.m tmac.lmm
X
Xtest:	lcat lroff lrofftest.m
X	tbl lrofftest.m | lroff tmac.lmm -
X
Xinstall:	lcat lroff tmac.lmm
X	echo "cp lcat lroff $(BIN)" | su
X	echo "cp tmac.lmm $(TMAC)" | su
X
X.sh~.sh:
X	$(GET) $(GFLAGS) $<
X
X.sh~:
X	rm -f $* $*.sh
X	$(GET) $(GFLAGS) $<
X	mv $*.sh $*
X	chmod 555 $*
X
X.sh:
X	rm -f $*
X	cp $*.sh $*
X	chmod 555 $*
/
echo 'x - lroff'
sed 's/^X//' > lroff << '/'
X#!/bin/sh
X#*****************************************************************
X#
X#   Copyright 1985. Chris Lewis
X#
X#   Module          : lroff.sh 1.6
X#   Date submitted  : 86/01/21 14:47:00
X#   Author          : C. Lewis
X#   Origin          : This software may be freely distributed
X#		      as long as it is not for profit, and that
X#		      this copyright notice remains intact.
X#   Description     : shell file for laserjet troff
X#
X#*****************************************************************/
X#
Xprintcmd="lp -w -dlaser -op -ob"
Xtrap "rm -f /tmp/$$; exit 1" 1 2 3 15
Xcat > /tmp/$$ <<\EOF
X.\"	Some of these commands are specific to MM, you may have to change
X.\"	the W, and trace down who fires the cut marks ")k" in MM.
X.\"	Tuning troff for HP.  Some others are done in /usr/lib/tmac/tmac.lmm
X.\"	Minimum interword spacing (15 points)
X.ss 15
X.\"	Turn off ligatures (Ugly!).  But, they *do* work.
X.lg 0
X.\"	Clobber cut marks.
X.rm )k
X.fp 1 CW	\" constant width font 1
X.fp 2 CW	\" constant width font 2
X.fp 3 CW	\" constant width font 3
XEOF
Xfor i 
Xdo
X	case $i in
X		-h)
X			largs="$largs $i"
X			;;
X		-H)
X			largs="$largs $i"
X			;;
X		-)
X			files="$files -"
X			;;
X		-D)
X			test='-D'
X			;;
X		-f*)
X			largs="$largs $i"
X			;;
X		-*)
X			args="$args $i"
X			;;
X		*)
X			files="$files $i"
X			;;
X	esac
Xdone
Xif [ -n "$test" ]
Xthen
X	troff -t $args /tmp/$$ $files | tee troffout | lcat $largs $test | tee lroffout | $printcmd
X	rc=$?
Xelse
X	troff -t $args /tmp/$$ $files | lcat $largs | $printcmd
X	rc=$?
Xfi
Xrm -f /tmp/$$
Xexit $rc
/
echo 'x - bell.glyph'
sed 's/^X//' > bell.glyph << '/'
X                                                            ######################                                           ########################
X                                                             ######################                                         ######################
X                                                                 #################                                         #################
X                                                                      #############                                       ############# 
X                                                                      #############                                     #############
X                                                                       #############                                   #############
X                                                                      #############                                   #############
X                                                                       #############                                 #############
X                                                                       #############                               #############
X                                                                        #############                             #############
X                                                                       #############                             #############
X                                                                        #############                           #############
X                                                                        #############                         #############
X                                                                         #############                       #############
X                                                                        #############                       #############
X                                                                         #############                     #############
X                                                                         #############                   #############
X                                                                          #############                 #############
X                                                                         #############                 #############
X                                                                          #############               #############
X                                                                          #############             #############
X                                                                           #############           #############
X                                                                          #############           #############
X                                                                           #############         #############
X                                                                           #############       #############
X                                                                            #############     #############
X                                                                           #############     #############
X                                                                            #############   #############
X                                                                            ############# #############
X                                                                             #########################
X                                                                            #########################
X                                                                             #######################
X                                                                             #####################
X                                                                              ###################
X                                                                             ###################
X                                                                              #################
X                                                                              ###############
X                                                                               #############
X                                                                              #############
X                                                                             ###############
X                                                                           ################# 
X                                                                          ###################
X                                                                         ###################
X                              #############                             #####################
X                           ##################                         #######################
X                         #####################                       #########################
X                       #######################                      #########################
X                      ##########################                   ############# #############
X                    ########       ##############                #############   #############
X                    #######          #############              #############     #############
X                  #######           #############              #############     #############
X                 ########            ############# ######    ##############       #############
X                ########             ###################   ##############         #############
X               #########              #################   ##############           #############
X              ########             ################     ###############           #############
X             #########            ##############       ###############             #############
X            #########                                ###############               #############
X            #########                               ###############                 #############
X          #########                              #################                 #############
X          #########                             ################                    #############
X         #########                           #################                      #############
X         #########                          ################                         #############
X        #########                         ################                          #############
X        #########                        ################                            #############
X       ##########                      ################                              #############
X        #########                     ###############                                 #############
X       ##########                   ###############                                  #############
X        #########                  ###############                                    #############
X       ###########               ###############                                      #############
X       ############            ################                                        #############
X       ###########          #################                                         #############
X         ##########       #################                                            #############
X        ############    #################                                              #############
X         ###############################                                                #############
X          ############################                                                 ###################
X           ########################                                                     ########################
X              ################                                                          ##########################
/
echo 'x - cat.5'
sed 's/^X//' > cat.5 << '/'
X.TH CAT 5 local writeup
X.DA 4 April 1981
X.SH NAME
Xcat \- C/A/T phototypesetter code
X.SH DESCRIPTION
XThe Graphic Systems C/A/T phototypesetter is driven by sending it a
Xsequence of one-byte codes
Xwhich specify characters, fonts, sizes, and other control information.
X.PP
XThe C/A/T's basic unit of length is 1/432 of an inch (6 units to a
Xtypesetter's ``point'').
XThe quantum of horizontal motion is one unit.
XThe quantum of vertical motion is three units (1/144 of an inch, 1/2 point).
X.PP
XThe top two bits of the code classify it as one of three major
Xtypes:
Xan \fIescape\fR code (top bit 1),
Xa \fIflash\fR code (top bits 00),
Xor a control code (top bits 01).
XA code of all zeros is ignored;  a code of all ones is illegal.
X.PP
XA flash code specifies flashing one of 63 characters, as given by the
Xremaining six bits.
XSince this is not enough to specify all possible characters, or even
Xall characters in a single font \(em there are 108 per font \(em
Xvarious control codes (described later) select a font and either
Xthe Lower or Upper half of the font.
XThe Lower half is the first 63 characters of the font;  the Upper
Xhalf is the remaining 45.
XA flash code of 46 or higher in the Upper half is illegal.
X.PP
XAn escape code specifies horizontal motion.
XThe size of the motion, in horizontal quanta, is the one's-complement
Xof the low seven bits of the code.
XThe direction of the motion is set by control codes.
XHitting the right or left margin limit switch is illegal and will
Xcause the machine to stop.
XThe machine starts out, after initialization, hard against the left
Xmargin limit switch;  an initial escape of 16 units \fImust\fR
Xbe given before starting work, and the position after this motion
Xshould be the limit of all future leftward motions.
X>From this point, the distance to the right margin limit switch
Xis about 7.5 inches.
X.PP
XA code with the top three bits 011 is a \fIlead\fR code,
Xspecifying vertical motion.
XThe remaining five bits are the one's-complement of the size of
Xthe motion, in vertical quanta.
XThe direction of motion is set by control codes.
XThe amount of vertical motion is, in principle, limited only by
Xrunning off the paper in the upward direction and by the limited
Xcapacity of the output cartridge in the downward direction.
X.PP
XA code with the top four bits 0101 is a size-change code, which
Xspecifies movement of the lens turret and the doubler lens to
Xchange point size.
XThese codes are as follows:
X.PP
X.RS
X.nf
X.ta 2c
XSize	Code
X
X6	0101\|1000
X7	0101\|0000
X8	0101\|0001
X9	0101\|0111
X10	0101\|0010
X11	0101\|0011
X12	0101\|0100
X14	0101\|0101
X16	0101\|1001
X18	0101\|0110
X20	0101\|1010
X22	0101\|1011
X24	0101\|1100
X28	0101\|1101
X36	0101\|1110
X.DT
X.fi
X.RE
X.PP
XSize changes involving the doubler lens alter the horizontal position.
XChanges from single to double sizes should be followed by a forward
Xescape of 55 quanta;  changes from double to single sizes should be
Xfollowed by a reverse escape of 55 quanta.
XThe single sizes are 6, 7, 8, 9, 10, 11, 12, 14, and 18;
Xthe double sizes are 16, 20, 22, 24, 28, and 36.
X.PP
XThe control codes with the top four bits 0100 specify miscellaneous
Xcontrol codes, not all of which have valid meanings.
XThey are:
X.PP
X.RS
X.ta 6c
X.nf
Xinitialize	0100\|0000
Xstop	0100\|1001
Xupper rail	0100\|0010
Xlower rail	0100\|0001
Xupper mag	0100\|0011
Xlower mag	0100\|0100
Xtilt up	0100\|1110
Xtilt down	0100\|1111
Xupper font half	0100\|0110
Xlower font half	0100\|0101
Xescape forward	0100\|0111
Xescape backward	0100\|1000
Xlead forward	0100\|1010
Xlead backward	0100\|1100
Xsoftware cut	0100\|1011
X.fi
X.DT
X.RE
X.PP
XThe \fIinitialize\fR code causes leftward motion to the left margin limit
Xswitch,
Xand sets the following modes:
Xescape forward, lead forward, lower font half,
Xlower rail, lower mag, tilt down.
XNote that the left margin limit switch does not define a precise
Xposition, and hence reinitializing the machine
Xwill destroy precise left-margin alignment.
X.PP
XThe \fIstop\fR code stops the machine, which must be manually
Xrestarted (normally after changing output cartridges);
Xthis code should be used only at the end of a run.
X.PP
XFonts are selected by the combination of \fIrail\fR, \fImag\fR, and \fItilt\fR.
XThe tilt codes do not exist on the 4-font C/A/T;  this is the only user-visible
Xdifference between the 4-font and 8-font machines.
XThe correspondence between rail/mag/tilt and font number is as follows:
X.PP
X.RS
X.nf
X.ta 2c 4c 6c 8c
Xrail	mag	tilt	4font	8font
X
Xlower	lower	up	1	1
Xlower	lower	down	1	2
Xupper	lower	up	2	3
Xupper	lower	down	2	4
Xlower	upper	up	3	5
Xlower	upper	down	3	6
Xupper	upper	up	4	7
Xupper	upper	down	4	8
X.DT
X.fi
X.RE
X.PP
XThe \fIsoftware cut\fR code should not be issued to the hardware, but
Xis used by local spooling software to indicate places where it is
Xlegal for the spooler to break output between pages.
XThis code should be followed by an \fIinitialize\fR code.
X.PP
XA complete C/A/T file should begin with an \fIinitialize\fR code followed
Xby an \fIescape\fR-16 code,
Xand should end with 14 inches of trailer and a \fIstop\fR code.
X.SH HISTORY
XThe \fIsoftware cut\fR code is a local invention.
XThis manual page written at U of T by Henry Spencer.
X.SH BUGS
XThe documentation and the hardware disagree on the initial tilt setting;
Xthe above describes the hardware.
X.PP
XIt's not the fastest or most modern typesetter.
/
echo 'x - lroff.1'
sed 's/^X//' > lroff.1 << '/'
X.TH LCAT 5 local
X.SH NAME
Xlroff,lcat \- Laserjet Troff Simulator
X.SH SYNOPSIS
X.I lroff
X[-h | -H | -d] [-D] [-ffontname] [-t] [troff arguments]
X.SH DESCRIPTION
X.P
X.I Lroff
Xis effectively "troff" for output on HP Laserjets.
XIt works by prepending some Laserjet-specific troff commands to a file,
Xrunning it along with troff arguments through troff, invoking the 
Xtroff WANG C/A/T code to HP Laserjet converter filter "lcat", and
Xsends the output to your HP laserjet printer.
X.P
X.I Lroff
Xsets the default point size to 12, so as to use the Laserjet native fonts
Xwherever possible.
XHowever, "lcat" does support rasterized fonts.
XA Macintosh to Berkeley vfont format converter is available.
XThe filter also is capable of using the Berkeley /usr/lib/vfonts raster fonts
Xfiles.
X[This is untested, because our Pyramid does not have vfonts.
XYou may encounter scaling problems, but the characters should be printed
Xproperly]
X.P
XAn adapter to allow the use of MM macros is provided.
XTo use MM macros,
Xinstead of "nroff -mm", use "lroff -mlmm"
X.P
XOptions:
X.IP -d
XDo not use raster fonts.
X.IP -h
XUse raster fonts, only in the sizes available.
XThese will be printed at 75DPI.
X.IP -H
XUse raster fonts.
XIf a font is available in twice or four times the size, use it at 150 or
X300 DPI respectively.
X.IP -ffont
XUse
X.I font
Xas the font name.
XThe default is "newyork".
XThis will be changed to "times" sometime in the future.
X.IP -D
XTurn on debug mode, a file called "diagnostics" will be created
Xin the current directory containing debug output from lcat.
X.IP -t
XTurn on a higher level of debug mode.
XOutput of "troff" is placed in a file called "troffout".
XOutput of "lcat" is placed in a file called "lroffout".
XAlso turns on -D option.
X.I Lcat
Xtakes the same parameters (except for -t), and assumes "troff -t"
Xoutput as standard input, and produces Laserjet escape sequences
Xon standard output.
X.SH "Add Your own Logo"
X.P
X.I Lcat
Xsupports the drawing of a symbol to replace the troff 
X"Bell System" character ("\e(bs").
XThis takes place no matter what the point size is, and no scaling
Xis done.
XWhen compiling "lcat", it includes a file called "bell.glyph.h".
X"bell.glyph.h" is constructed by taking the file "bell.glyph"
Xand running a utility called "compfont" on it.
X"bell.glyph" can be constructed by using VI to draw out your logo.
XRunning "make" will compile this logo into "bell.glyph.h", and
Xinclude it into lcat.c
XIt is always printed at 300DPI.
XAn example logo is distributed with this software.
X.SH BUGS
X.P
XThere is no italic or bold support on raster'd fonts (yet).
X.P
Xlcat does not know how to scale raster fonts to sizes other than those
Xavailable (yet).
XIt will use native fonts where necessary.
X.P
XEnd-of-page detection is kludgey.
XSetting page length to other than the default 11 inches
Xwill cause page breaks in the wrong place.
XFurther, most of the troff macro packages insert "cut-marks" marking
Xwhere the page should be chopped (because the WANG C/A/T is a "roll-paper"
Xdevice).
XLroff attempts to disable this feature, but this will not work on
Xmacro packages other than MM, and even some differing versions of MM.
X.P
XThe output of lcat is *HUGE*, because it individually places each
Xcharacter using Laserjet escape codes.
XEven the rasterized characters.
XLots of motion optimization is done, but it could do much more.
XSet the Laserjet baud rate as high as you reasonably can.
XNote: the Laserjet device must be set to 8 bit. 
XOur System V laserjet lp filters are using ^S/^Q.
X.P
XNope, "lroff" isn't slow, "troff" is.
X.P
XA "normal" HP Laserjet is only capable of printing about 1/4 page or
Xless of raster at 75DPI.
XParticularly if you are using a 300 DPI glyph (as we are) this doesn't
Xleave you much room.
XA HP Laserjet "Plus" should be able to do the entire page at 75DPI
Xor 150DPI with room to spare.
XIf you overrun the Laserjet's buffer, you will get a "21" error code.
XHit "cont" button to continue, but you will have lost everything on the
Xcurrent page after the overflow.
X.P
XWidths are set "CW" by Lroff for the native fonts.
XHowever, the rasterized fonts won't be perfect with this.
XMore work needs to be done to get proper width tables in for the raster
Xfonts and the built-in Laserjet font.
X.P
XItalics and bold will work when the built-in laserjet font, provided that
Xyou have HP font cartridge 92286A installed.
X.P
XDoes not support downloadable fonts.
XIt will when we get our Plus.
X.P
XThe MAC fonts are designed towards 80DPI, but lcat assumes them to be
X75DPI, so the fonts will be slightly bigger than you'd expect.
X.SH FILES
X$(somedir)/<name>.<size>
Xcontains the raster font file (supposedly compatible with Berkeley
X"vfonts") for font name "name", and point size "size".
X.P
X/usr/lib/tmac/tmac.lmm contains some definitions that must be made
Xbefore the MM macros are read.
X.SH "SEE ALSO"
Xmacvfont(1L), lp (System V), lpr (Berkeley)
/
echo 'x - lrofftest.m'
sed 's/^X//' > lrofftest.m << '/'
X.P
XThis line should be exactly 5 inches long:
X.DS
X\l'5i\&\(ru'
X.DE
X.P
XThis is a test of the paragraphs and other things of lroff/lmm how do
Xyou like it?
XThis is some more of the test.
XBullet list:
X.BL
X.LI
X<- that was an Oreo cookie.
X.LI
XThis is 2
X.LI
XThis is 3
X.LE
X.P
XHello there.
X.P
X" is a compound character, since nroff doesn't like double quotes too much.
X"X" should look reasonable.
XMore 'test` `test'\*F
X.FS
XThis here's a footnote - slightly smaller pitch.
X.FE
XThis is more of the paragraph.
X.P
XThis is normal\f3Bold\fP\f2italic\fPnormal.
X.bd 2 3
X\f2This should be bold italics.\fP
X.DS 0 F
X.TS
Xexpand doublebox allbox;
Xl l l.
XFirst field	second	third
XXXXXX	XXXXX	XXXXX
Xtbl	is	working rather nicely.
XHowever,	the vertical	T{
Xlines may not butt perfectly.
XThis is a known problem, because troff seems to 
Xuse slightly different vertical spacing each time.
XThis will be fixed eventually
XT}
X.TE
X.DE
X.P
X.S 36 38
X\(bs
X.S P
X.P
X.S 24 26
Xthat was the logo at 300 DPI.
X.S P
X.P
XThe Logo will be printed whether or not you have raster fonts.
XThe original logo is a stylized "cX".
XIf you don't have the vfonts installed, the rest of the line will be
Xnormal characters with big spacing.
XIf the fonts are installed, you will see 75DPI big print.
/
echo 'x - tmac.lmm'
sed 's/^X//' > tmac.lmm << '/'
X.\"	Default point size
X.nr S 12
X.\"	Default page width (though this is not critical)
X.nr W 6i
X.so /usr/lib/tmac/tmac.m
X.\"	I think that this is a nicer bullet than MM uses.
X.ds BU \(bu
/
echo 'Part 01 of pack.out complete.'
exit