13b04b890Sslatteng #include "tdef.h"
23b04b890Sslatteng 
33b04b890Sslatteng /* You may want to change these names */
425bdb26eSslatteng /* these SHOULD be defined in the makefile */
53b04b890Sslatteng 
678cf08cbSslatteng #ifndef FONTDIR
778cf08cbSslatteng #	define FONTDIR "/usr/lib/font"
878cf08cbSslatteng #endif
925bdb26eSslatteng #ifndef MACROLIB
10*49d48dedSslatteng 			/* MACROLIB is the prefix of the macro filenames */
11*49d48dedSslatteng #	define MACROLIB "/usr/lib/tmac/tmac."
1225bdb26eSslatteng #endif
1378cf08cbSslatteng 
143b04b890Sslatteng #ifndef NROFF
1578cf08cbSslatteng char	termtab[NS] = FONTDIR;		/* rest added in ptinit() */
1678cf08cbSslatteng char	fontfile[NS] = FONTDIR;		/* rest added in casefp() */
17*49d48dedSslatteng char	devname[20]	 = "va";	/* default typesetter */
183b04b890Sslatteng #endif
193b04b890Sslatteng char	obuf[OBUFSZ];	/* characters collected here for actual typesetter output */
203b04b890Sslatteng char	*obufp = obuf;
213b04b890Sslatteng int	r[NN] = {	/* read-only number registers at beginning */
223b04b890Sslatteng 	PAIR('%', 0),
233b04b890Sslatteng 	PAIR('n', 'l'),
243b04b890Sslatteng 	PAIR('y', 'r'),
253b04b890Sslatteng 	PAIR('h', 'p'),
263b04b890Sslatteng 	PAIR('c', 't'),
273b04b890Sslatteng 	PAIR('d', 'n'),
283b04b890Sslatteng 	PAIR('m', 'o'),
293b04b890Sslatteng 	PAIR('d', 'y'),
303b04b890Sslatteng 	PAIR('d', 'w'),
313b04b890Sslatteng 	PAIR('l', 'n'),
323b04b890Sslatteng 	PAIR('d', 'l'),
333b04b890Sslatteng 	PAIR('s', 't'),
343b04b890Sslatteng 	PAIR('s', 'b'),
353b04b890Sslatteng 	PAIR('c', '.'),
363b04b890Sslatteng 	PAIR('$', '$'),
373b04b890Sslatteng };
383b04b890Sslatteng 
393b04b890Sslatteng 
403b04b890Sslatteng int	pto = 10000;
413b04b890Sslatteng int	pfrom = 1;
423b04b890Sslatteng int	print = 1;
4325bdb26eSslatteng char	nextf[NS] = MACROLIB;
44*49d48dedSslatteng int	nfi;
453b04b890Sslatteng #ifdef NROFF
463b04b890Sslatteng char	termtab[NS] = "/usr/lib/term/tab37";
473b04b890Sslatteng #endif
483b04b890Sslatteng #ifndef NROFF
493b04b890Sslatteng int	oldbits = -1;
503b04b890Sslatteng #endif
513b04b890Sslatteng int	init = 1;
523b04b890Sslatteng int	fc = IMP;	/* field character */
533b04b890Sslatteng int	eschar = '\\';
543b04b890Sslatteng #ifdef	NROFF
553b04b890Sslatteng int	pl = 11*INCH;
563b04b890Sslatteng int	po = PO;
573b04b890Sslatteng #else
583b04b890Sslatteng int	pl;
593b04b890Sslatteng int	po;
603b04b890Sslatteng #endif
613b04b890Sslatteng int	dfact = 1;
623b04b890Sslatteng int	dfactd = 1;
633b04b890Sslatteng int	res = 1;
643b04b890Sslatteng int	ascii = ASCII;
653b04b890Sslatteng int	ptid = PTID;
663b04b890Sslatteng int	lg = LG;
673b04b890Sslatteng int	pnlist[NPN] = {
683b04b890Sslatteng 	-1};
693b04b890Sslatteng 
703b04b890Sslatteng 
713b04b890Sslatteng int	*pnp = pnlist;
723b04b890Sslatteng int	npn = 1;
733b04b890Sslatteng int	npnflg = 1;
743b04b890Sslatteng int	xflg = 1;
753b04b890Sslatteng int	dpn = -1;
763b04b890Sslatteng int	totout = 1;
773b04b890Sslatteng int	ulfont = FT + 1;
783b04b890Sslatteng int	ulbit = 1 << 9;
793b04b890Sslatteng int	tabch = TAB;
803b04b890Sslatteng int	ldrch = LEADER;
813b04b890Sslatteng int	xxx;
823b04b890Sslatteng extern caseds(), caseas(), casesp(), caseft(), caseps(), casevs(),
833b04b890Sslatteng casenr(), caseif(), casepo(), casetl(), casetm(), casebp(), casech(),
843b04b890Sslatteng casepn(), tbreak(), caseti(), casene(), casenf(), casece(), casefi(),
85ca957863Sslatteng casein(), casell(), casens(), casemk(), casert(), caseam(), casest(),
863b04b890Sslatteng casede(), casedi(), caseda(), casewh(), casedt(), caseit(), caserm(),
873b04b890Sslatteng casern(), casead(), casers(), casena(), casepl(), caseta(), casetr(),
883b04b890Sslatteng caseul(), caselt(), casenx(), caseso(), caseig(), casetc(), casefc(),
893b04b890Sslatteng caseec(), caseeo(), caselc(), caseev(), caserd(), caseab(), casefl(),
903b04b890Sslatteng done(), casess(), casefp(), casecs(), casebd(), caselg(), casehc(),
913b04b890Sslatteng casehy(), casenh(), casenm(), casenn(), casesv(), caseos(), casels(),
923b04b890Sslatteng casecc(), casec2(), caseem(), caseaf(), casehw(), casemc(), casepm(),
933b04b890Sslatteng casecu(), casepi(), caserr(), caseuf(), caseie(), caseel(), casepc(),
943b04b890Sslatteng caseht(), casecf(), casesy();
953b04b890Sslatteng 
963b04b890Sslatteng struct contab {
973b04b890Sslatteng 	int	rq;
983b04b890Sslatteng 	/*
993b04b890Sslatteng 	union {
1003b04b890Sslatteng  */
1013b04b890Sslatteng 	int	(*f)();
1023b04b890Sslatteng 	/*
1033b04b890Sslatteng 		unsigned mx;
1043b04b890Sslatteng 	}x;
1053b04b890Sslatteng  */
1063b04b890Sslatteng } contab[NM] = {
1073b04b890Sslatteng 	PAIR('d', 's'), caseds,
1083b04b890Sslatteng 	PAIR('a', 's'), caseas,
1093b04b890Sslatteng 	PAIR('s', 'p'), casesp,
1103b04b890Sslatteng 	PAIR('f', 't'), caseft,
1113b04b890Sslatteng 	PAIR('p', 's'), caseps,
1123b04b890Sslatteng 	PAIR('v', 's'), casevs,
1133b04b890Sslatteng 	PAIR('n', 'r'), casenr,
1143b04b890Sslatteng 	PAIR('i', 'f'), caseif,
1153b04b890Sslatteng 	PAIR('i', 'e'), caseie,
1163b04b890Sslatteng 	PAIR('e', 'l'), caseel,
1173b04b890Sslatteng 	PAIR('p', 'o'), casepo,
1183b04b890Sslatteng 	PAIR('t', 'l'), casetl,
1193b04b890Sslatteng 	PAIR('t', 'm'), casetm,
1203b04b890Sslatteng 	PAIR('b', 'p'), casebp,
1213b04b890Sslatteng 	PAIR('c', 'h'), casech,
1223b04b890Sslatteng 	PAIR('p', 'n'), casepn,
1233b04b890Sslatteng 	PAIR('b', 'r'), tbreak,
1243b04b890Sslatteng 	PAIR('t', 'i'), caseti,
1253b04b890Sslatteng 	PAIR('n', 'e'), casene,
1263b04b890Sslatteng 	PAIR('n', 'f'), casenf,
1273b04b890Sslatteng 	PAIR('c', 'e'), casece,
1283b04b890Sslatteng 	PAIR('f', 'i'), casefi,
1293b04b890Sslatteng 	PAIR('i', 'n'), casein,
1303b04b890Sslatteng 	PAIR('l', 'l'), casell,
1313b04b890Sslatteng 	PAIR('n', 's'), casens,
1323b04b890Sslatteng 	PAIR('m', 'k'), casemk,
1333b04b890Sslatteng 	PAIR('r', 't'), casert,
1343b04b890Sslatteng 	PAIR('a', 'm'), caseam,
135ca957863Sslatteng 	PAIR('s', 't'), casest,
1363b04b890Sslatteng 	PAIR('d', 'e'), casede,
1373b04b890Sslatteng 	PAIR('d', 'i'), casedi,
1383b04b890Sslatteng 	PAIR('d', 'a'), caseda,
1393b04b890Sslatteng 	PAIR('w', 'h'), casewh,
1403b04b890Sslatteng 	PAIR('d', 't'), casedt,
1413b04b890Sslatteng 	PAIR('i', 't'), caseit,
1423b04b890Sslatteng 	PAIR('r', 'm'), caserm,
1433b04b890Sslatteng 	PAIR('r', 'r'), caserr,
1443b04b890Sslatteng 	PAIR('r', 'n'), casern,
1453b04b890Sslatteng 	PAIR('a', 'd'), casead,
1463b04b890Sslatteng 	PAIR('r', 's'), casers,
1473b04b890Sslatteng 	PAIR('n', 'a'), casena,
1483b04b890Sslatteng 	PAIR('p', 'l'), casepl,
1493b04b890Sslatteng 	PAIR('t', 'a'), caseta,
1503b04b890Sslatteng 	PAIR('t', 'r'), casetr,
1513b04b890Sslatteng 	PAIR('u', 'l'), caseul,
1523b04b890Sslatteng 	PAIR('c', 'u'), casecu,
1533b04b890Sslatteng 	PAIR('l', 't'), caselt,
1543b04b890Sslatteng 	PAIR('n', 'x'), casenx,
1553b04b890Sslatteng 	PAIR('s', 'o'), caseso,
1563b04b890Sslatteng 	PAIR('i', 'g'), caseig,
1573b04b890Sslatteng 	PAIR('t', 'c'), casetc,
1583b04b890Sslatteng 	PAIR('f', 'c'), casefc,
1593b04b890Sslatteng 	PAIR('e', 'c'), caseec,
1603b04b890Sslatteng 	PAIR('e', 'o'), caseeo,
1613b04b890Sslatteng 	PAIR('l', 'c'), caselc,
1623b04b890Sslatteng 	PAIR('e', 'v'), caseev,
1633b04b890Sslatteng 	PAIR('r', 'd'), caserd,
1643b04b890Sslatteng 	PAIR('a', 'b'), caseab,
1653b04b890Sslatteng 	PAIR('f', 'l'), casefl,
1663b04b890Sslatteng 	PAIR('e', 'x'), done,
1673b04b890Sslatteng 	PAIR('s', 's'), casess,
1683b04b890Sslatteng 	PAIR('f', 'p'), casefp,
1693b04b890Sslatteng 	PAIR('c', 's'), casecs,
1703b04b890Sslatteng 	PAIR('b', 'd'), casebd,
1713b04b890Sslatteng 	PAIR('l', 'g'), caselg,
1723b04b890Sslatteng 	PAIR('h', 'c'), casehc,
1733b04b890Sslatteng 	PAIR('h', 'y'), casehy,
1743b04b890Sslatteng 	PAIR('n', 'h'), casenh,
1753b04b890Sslatteng 	PAIR('n', 'm'), casenm,
1763b04b890Sslatteng 	PAIR('n', 'n'), casenn,
1773b04b890Sslatteng 	PAIR('s', 'v'), casesv,
1783b04b890Sslatteng 	PAIR('o', 's'), caseos,
1793b04b890Sslatteng 	PAIR('l', 's'), casels,
1803b04b890Sslatteng 	PAIR('c', 'c'), casecc,
1813b04b890Sslatteng 	PAIR('c', '2'), casec2,
1823b04b890Sslatteng 	PAIR('e', 'm'), caseem,
1833b04b890Sslatteng 	PAIR('a', 'f'), caseaf,
1843b04b890Sslatteng 	PAIR('h', 'w'), casehw,
1853b04b890Sslatteng 	PAIR('m', 'c'), casemc,
1863b04b890Sslatteng 	PAIR('p', 'm'), casepm,
1873b04b890Sslatteng 	PAIR('p', 'i'), casepi,
1883b04b890Sslatteng 	PAIR('u', 'f'), caseuf,
1893b04b890Sslatteng 	PAIR('p', 'c'), casepc,
1903b04b890Sslatteng 	PAIR('h', 't'), caseht,
1913b04b890Sslatteng 	PAIR('c', 'f'), casecf,
1923b04b890Sslatteng 	PAIR('s', 'y'), casesy,
1933b04b890Sslatteng 	PAIR('!', 0), casesy,	/* synonym for .sy */
1943b04b890Sslatteng };
1953b04b890Sslatteng 
1963b04b890Sslatteng 
1973b04b890Sslatteng tchar oline[LNSIZE+1];
1983b04b890Sslatteng 
1993b04b890Sslatteng /*
2003b04b890Sslatteng troff environment block
2013b04b890Sslatteng */
2023b04b890Sslatteng 
2033b04b890Sslatteng int	block	 = 0;
2043b04b890Sslatteng #ifdef	NROFF
2053b04b890Sslatteng /* these are initialized statically in nroff (so far)
2063b04b890Sslatteng 	/* and dynamically in ptinit() in troff beacuse INCH
2073b04b890Sslatteng 	/* is a variable
2083b04b890Sslatteng 	*/
2093b04b890Sslatteng int	ics	 = ICS;	/* space for insertion character */
2103b04b890Sslatteng int	sps	 = SPS;
2113b04b890Sslatteng int	spacesz	 = SS;
2123b04b890Sslatteng int	lss	 = VS;
2133b04b890Sslatteng int	lss1	 = VS;
2143b04b890Sslatteng int	ll	 = LL;
2153b04b890Sslatteng int	ll1	 = LL;
2163b04b890Sslatteng int	lt	 = LL;
2173b04b890Sslatteng int	lt1	 = LL;
2183b04b890Sslatteng #else
2193b04b890Sslatteng int	ics	 = 0;
2203b04b890Sslatteng int	sps	 = 0;
2213b04b890Sslatteng int	spacesz	 = 0;
2223b04b890Sslatteng int	lss	 = 0;
2233b04b890Sslatteng int	lss1	 = 0;
2243b04b890Sslatteng int	ll	 = 0;
2253b04b890Sslatteng int	ll1	 = 0;
2263b04b890Sslatteng int	lt	 = 0;
2273b04b890Sslatteng int	lt1	 = 0;
2283b04b890Sslatteng #endif
2293b04b890Sslatteng tchar	ic	 = 0;	/* insertion character (= margin character) */
2303b04b890Sslatteng int	icf	 = 0;
2313b04b890Sslatteng tchar	chbits	 = 0;	/* size+font bits for current character */
2323b04b890Sslatteng tchar	spbits	 = 0;	/* ditto for special font */
2333b04b890Sslatteng tchar	nmbits	 = 0;
2343b04b890Sslatteng int	apts	 = PS;	/* actual point size -- as requested by user */
2353b04b890Sslatteng int	apts1	 = PS;	/* need not match an existent size */
2363b04b890Sslatteng int	pts	 = PS;	/* hence, this is the size that really exists */
2373b04b890Sslatteng int	pts1	 = PS;
2383b04b890Sslatteng int	font	 = FT;
2393b04b890Sslatteng int	font1	 = FT;
240ca957863Sslatteng int	stip	 = ST;
241ca957863Sslatteng int	stip1	 = ST;
2423b04b890Sslatteng int	ls	 = 1;
2433b04b890Sslatteng int	ls1	 = 1;
2443b04b890Sslatteng int	ad	 = 1;
2453b04b890Sslatteng int	nms	 = 1;
2463b04b890Sslatteng int	ndf	 = 1;
2473b04b890Sslatteng int	fi	 = 1;
2483b04b890Sslatteng int	cc	 = '.';
2493b04b890Sslatteng int	c2	 = '\'';
2503b04b890Sslatteng int	ohc	 = OHC;
2513b04b890Sslatteng int	tdelim	 = IMP;
2523b04b890Sslatteng int	hyf	 = 1;
2533b04b890Sslatteng int	hyoff	 = 0;
2543b04b890Sslatteng int	un1	 = -1;
2553b04b890Sslatteng int	tabc	 = 0;
2563b04b890Sslatteng int	dotc	 = '.';
2573b04b890Sslatteng int	adsp	 = 0;
2583b04b890Sslatteng int	adrem	 = 0;
2593b04b890Sslatteng int	lastl	 = 0;
2603b04b890Sslatteng int	nel	 = 0;
2613b04b890Sslatteng int	admod	 = 0;
2623b04b890Sslatteng tchar	*wordp	 = 0;
2633b04b890Sslatteng int	spflg	 = 0;	/* probably to indicate space after punctuation needed */
2643b04b890Sslatteng tchar	*linep	 = 0;
2653b04b890Sslatteng tchar	*wdend	 = 0;
2663b04b890Sslatteng tchar	*wdstart	 = 0;
2673b04b890Sslatteng int	wne	 = 0;
2683b04b890Sslatteng int	ne	 = 0;
2693b04b890Sslatteng int	nc	 = 0;
2703b04b890Sslatteng int	nb	 = 0;
2713b04b890Sslatteng int	lnmod	 = 0;
2723b04b890Sslatteng int	nwd	 = 0;
2733b04b890Sslatteng int	nn	 = 0;
2743b04b890Sslatteng int	ni	 = 0;
2753b04b890Sslatteng int	ul	 = 0;
2763b04b890Sslatteng int	cu	 = 0;
2773b04b890Sslatteng int	ce	 = 0;
2783b04b890Sslatteng int	in	 = 0;
2793b04b890Sslatteng int	in1	 = 0;
2803b04b890Sslatteng int	un	 = 0;
2813b04b890Sslatteng int	wch	 = 0;
2823b04b890Sslatteng int	pendt	 = 0;
2833b04b890Sslatteng tchar	*pendw	 = 0;
2843b04b890Sslatteng int	pendnf	 = 0;
2853b04b890Sslatteng int	spread	 = 0;
2863b04b890Sslatteng int	it	 = 0;
2873b04b890Sslatteng int	itmac	 = 0;
2883b04b890Sslatteng int	lnsize	 = LNSIZE;
2893b04b890Sslatteng tchar	*hyptr[NHYP]	 = {
2903b04b890Sslatteng 	0};
2913b04b890Sslatteng 
2923b04b890Sslatteng 
2933b04b890Sslatteng int	tabtab[NTAB]	 = {
2943b04b890Sslatteng 	0};
2953b04b890Sslatteng 
2963b04b890Sslatteng 
2973b04b890Sslatteng tchar	line[LNSIZE]	 = {
2983b04b890Sslatteng 	0};
2993b04b890Sslatteng 
3003b04b890Sslatteng 
3013b04b890Sslatteng tchar	word[WDSIZE]	 = {
3023b04b890Sslatteng 	0};
3033b04b890Sslatteng 
3043b04b890Sslatteng 
3053b04b890Sslatteng char	blockxxx[EVSPARE]	 = {
3063b04b890Sslatteng 	0};
3073b04b890Sslatteng 
3083b04b890Sslatteng 
309