#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>

#undef MB_CUR_MAX
#define MB_CUR_MAX 3

#define	NROFF	(!TROFF)

/* Site dependent definitions */

#ifndef TMACDIR
#define TMACDIR		"lib/tmac/tmac."
#endif
#ifndef FONTDIR
#define FONTDIR		"lib/font"
#endif
#ifndef NTERMDIR
#define NTERMDIR	"lib/term/tab."
#endif
#ifndef TDEVNAME
#define TDEVNAME	"post"
#endif
#ifndef NDEVNAME
#define NDEVNAME	"37"
#endif
#ifndef TEXHYPHENS
#define	TEXHYPHENS	"/usr/lib/tex/macros/hyphen.tex"
#endif
#ifndef ALTHYPHENS
#define	ALTHYPHENS	"lib/tmac/hyphen.tex"	/* another place to look */
#endif

typedef	unsigned char	Uchar;
typedef unsigned short	Ushort;

typedef	/*unsigned*/ long	Tchar;

typedef	struct	Blockp	Blockp;
typedef	struct	Diver	Diver;
typedef	struct	Stack	Stack;
typedef	struct	Divsiz	Divsiz;
typedef	struct	Contab	Contab;
typedef	struct	Numtab	Numtab;
typedef	struct	Numerr	Numerr;
typedef	struct	Env	Env;
typedef	struct	Term	Term;
typedef struct	Chwid	Chwid;
typedef struct	Font	Font;
typedef	struct	Spnames	Spnames;
typedef	struct	Wcache	Wcache;
typedef	struct	Tbuf	Tbuf;

/* this simulates printf into a buffer that gets flushed sporadically */
/* the BSD goo is because SunOS sprintf doesn't return anything useful */

#ifdef BSD4_2
#define	OUT		(obufp += strlen(sprintf(obufp,
#define	PUT		))) > obuf+BUFSIZ ? flusho() : 1
#else
#define	OUT		(obufp += sprintf(obufp,
#define	PUT		)) > obuf+BUFSIZ ? flusho() : 1
#endif

#define	oputs(a)	OUT "%s", a PUT
#define	oput(c)		( *obufp++ = (c), obufp > obuf+BUFSIZ ? flusho() : 1 )

#undef	sprintf	/* Snow Leopard */

extern	char	errbuf[];
#define	ERROR	sprintf(errbuf,
#define	WARN	), errprint()
#define	FATAL	), errprint(), exit(1)

/* starting values for typesetting parameters: */

#define	PS	10	/* default point size */
#define	FT	1	/* default font position */
#define ULFONT	2	/* default underline font */
#define	BDFONT	3	/* default emboldening font */
#define	BIFONT	4	/* default bold italic font */
#define	LL	(unsigned) 65*INCH/10	/* line length; 39picas=6.5in */
#define	VS	((12*INCH)/72)	/* initial vert space */


#define	EMPTS(pts)	(((long)Inch*(pts) + 36) / 72)
#define	EM	(TROFF? EMPTS(pts): t.Em)
#define	INCH	(TROFF? Inch: 240)
#define	HOR	(TROFF? Hor: t.Adj)
#define	VERT	(TROFF? Vert: t.Vert)
#define	PO	(TROFF? Inch: 0)
#define	SPS	(TROFF? EMPTS(pts)/3: INCH/10)
#define	SS	(TROFF? 12: INCH/10)
#define	ICS	(TROFF? EMPTS(pts): 2*INCH/10)
#define	DTAB	(TROFF? (INCH/2): 0)

/* These "characters" are used to encode various internal functions
/* Some make use of the fact that most ascii characters between
/* 0 and 040 don't have any graphic or other function.
/* The few that do have a purpose (e.g., \n, \b, \t, ...
/* are avoided by the ad hoc choices here.
/* See ifilt[] in n1.c for others -- 1, 2, 3, 5, 6, 7, 010, 011, 012 
*/

#define	LEADER	001
#define	IMP	004	/* impossible char; glues things together */
#define	TAB	011
#define	RPT	014	/* next character is to be repeated many times */
#define	CHARHT	015	/* size field sets character height */
#define	SLANT	016	/* size field sets amount of slant */
#define	DRAWFCN	017	/* next several chars describe arb drawing fcns */
#	define	DRAWLINE	'l'	/* line: 'l' dx dy char */
#	define	DRAWCIRCLE	'c'	/* circle: 'c' r */
#	define	DRAWELLIPSE	'e'	/* ellipse: 'e' rx ry */
#	define	DRAWARC		'a'	/* arc: 'a' dx dy dx dy */
#	define	DRAWSPLINE	'~'	/* quadratic B spline: '~' dx dy dx dy ... */
					/* other splines go thru too */
/* NOTE:  the use of ~ is a botch since it's often used in .tr commands */
/* better to use a letter like s, but change it in the postprocessors too */
/* for now, this is taken care of in n9.c and t10.c */
#	define	DRAWBUILD	'b'	/* built-up character (e.g., { */

#define	LEFT	020	/* \{ */
#define	RIGHT	021	/* \} */
#define	FILLER	022	/* \& and similar purposes */
#define	XON	023	/* \X'...' starts here */
#define	OHC	024	/* optional hyphenation character \% */
#define	CONT	025	/* \c character */
#define	PRESC	026	/* printable escape */
#define	UNPAD	027	/* unpaddable blank */
#define	XPAR	030	/* transparent mode indicator */
#define	FLSS	031	/* next Tchar contains vertical space */
			/* used when recalling diverted text */
#define	WORDSP	032	/* paddable word space */
#define	ESC	033	/* current escape character */
#define	XOFF	034	/* \X'...' ends here */
			/* matches XON, but they will probably never nest */
			/* so could drop this when another control is needed */
#define	HX	035	/* next character is value of \x'...' */
#define MOTCH	036	/* this "character" is really motion; used by cbits() */

#define	HYPHEN	c_hyphen
#define	EMDASH	c_emdash	/* \(em */
#define	RULE	c_rule		/* \(ru */
#define	MINUS	c_minus		/* minus sign on current font */
#define	LIG_FI	c_fi		/* \(ff */
#define	LIG_FL	c_fl		/* \(fl */
#define	LIG_FF	c_ff		/* \(ff */
#define	LIG_FFI	c_ffi		/* \(Fi */
#define	LIG_FFL	c_ffl		/* \(Fl */
#define	ACUTE	c_acute		/* acute accent \(aa */
#define	GRAVE	c_grave		/* grave accent \(ga */
#define	UNDERLINE c_under	/* \(ul */
#define	ROOTEN	c_rooten	/* root en \(rn */
#define	BOXRULE	c_boxrule	/* box rule \(br */
#define	LEFTHAND c_lefthand	/* left hand for word overflow */
#define	DAGGER	 c_dagger	/* dagger for end of sentence/footnote */

#define	HYPHALG	1	/* hyphenation algorithm: 0=>good old troff, 1=>tex */


/* array sizes, and similar limits: */

#define MAXFONTS 99	/* Maximum number of fonts in fontab */
#define	NM	91	/* requests + macros */
#define	NN	NNAMES	/* number registers */
#define	NNAMES	15	/* predefined reg names */
#define	NIF	15	/* if-else nesting */
#define	NS	128	/* name buffer */
#define	NTM	1024	/* tm buffer */
#define	NEV	3	/* environments */
#define	EVLSZ	10	/* size of ev stack */

#define	STACKSIZE (12*1024)	/* stack for macros and strings in progress */
#define	NHYP	10	/* max hyphens per word */
#define	NHEX	512	/* byte size of exception word list */
#define	NTAB	100	/* tab stops */
#define	NSO	5	/* "so" depth */
#define	NMF	5	/* number of -m flags */
#define	WDSIZE	500	/* word buffer click size */
#define	LNSIZE	4000	/* line buffer click size */
#define	OLNSIZE	5000	/* output line buffer click; bigger for 'w', etc. */
#define	NDI	5	/* number of diversions */

#define	ALPHABET alphabet	/* number of characters in basic alphabet. */
			/* 128 for parochial USA 7-bit ascii, */
			/* 256 for "European" mode with e.g., Latin-1 */

	/* NCHARS must be greater than 
		ALPHABET (ascii stuff) + total number of distinct char names
		from all fonts that will be run in this job (including
		unnamed ones and \N's)
	*/

#define	NCHARS	(8*1024)	/* maximum size of troff character set*/


	/* However for nroff you want only :
	1. number of special codes in charset of DESC, which ends up being the
		value of nchtab and which must be less than 512.
	2. ALPHABET, which apparently is the size of the portion of the tables reserved
		for special control symbols
	Apparently the max N of \N is irrelevant; */
	/* to allow \N of up to 254 with up to 338 special characters
		you need NCHARS of 338 + ALPHABET = 466 */

#define	NROFFCHARS	1024	/* maximum size of nroff character set */

#define	NTRTAB		NCHARS	/* number of items in trtab[] */
#define NWIDCACHE	NCHARS	/* number of items in widcache[] */

#define	NTRAP	20	/* number of traps */
#define	NPN	20	/* numbers in "-o" */
#define	FBUFSZ	512	/* field buf size words */
#define	IBUFSZ	4096	/* bytes */
#define	NC	1024	/* cbuf size words */
#define	NOV	10	/* number of overstrike chars */
#define	NPP	10	/* pads per field */

/*
	Internal character representation:
	Internally, every character is carried around as
	a 32 bit cookie, called a "Tchar" (typedef long).
	Bits are numbered 31..0 from left to right.
	If bit 15 is 1, the character is motion, with
		if bit 16 it's vertical motion
		if bit 17 it's negative motion
	If bit 15 is 0, the character is a real character.
		if bit 31	zero motion
		bits 30..24	size
		bits 23..16	font
*/

/* in the following, "L" should really be a Tchar, but ... */
/* numerology leaves room for 16 bit chars */

#define	MOT	(01uL << 16)	/* motion character indicator */
#define	VMOT	(01uL << 30)	/* vertical motion bit */
#define	NMOT	(01uL << 29)	/* negative motion indicator */
/* #define	MOTV	(MOT|VMOT|NMOT)	/* motion flags */
/* #define	MAXMOT	(~MOTV)		/* maximum motion permitted */
#define	MAXMOT	0xFFFF

#define	ismot(n)	((n) & MOT)
#define	isvmot(n)	(((n) & (MOT|VMOT)) == (MOT|VMOT))	/* must have tested MOT previously */
#define	isnmot(n)	(((n) & (MOT|NMOT)) == (MOT|NMOT))	/* ditto */
#define	absmot(n)	((n) & 0xFFFF)

#define	ZBIT	(01uL << 31)	/* zero width char */
#define	iszbit(n)	((n) &  ZBIT)

#define	FSHIFT	17
#define	SSHIFT	(FSHIFT+7)
#define	SMASK		(0177uL << SSHIFT)	/* 128 distinct sizes */
#define	FMASK		(0177uL << FSHIFT)	/* 128 distinct fonts */
#define	SFMASK		(SMASK|FMASK)	/* size and font in a Tchar */
#define	sbits(n)	(((n) >> SSHIFT) & 0177)
#define	fbits(n)	(((n) >> FSHIFT) & 0177)
#define	sfbits(n)	(((n) & SFMASK) >> FSHIFT)
#define	cbits(n)	((n) & 0x1FFFF)		/* isolate character bits,  */
						/* but don't include motions */
extern	int	realcbits(Tchar);

#define	setsbits(n,s)	n = (n & ~SMASK) | (Tchar)(s) << SSHIFT
#define	setfbits(n,f)	n = (n & ~FMASK) | (Tchar)(f) << FSHIFT
#define	setsfbits(n,sf)	n = (n & ~SFMASK) | (Tchar)(sf) << FSHIFT
#define	setcbits(n,c)	n = (n & ~0xFFFFuL | (c))	/* set character bits */

#define	BYTEMASK 0377
#define	BYTE	 8

#define	SHORTMASK 0XFFFF
#define	SHORT	 16

#define	TABMASK	 ((unsigned) INT_MAX >> 1)
#define	RTAB	((TABMASK << 1) & ~TABMASK)
#define	CTAB	(RTAB << 1)

#define	TABBIT	02		/* bits in gchtab */
#define	LDRBIT	04
#define	FCBIT	010

#define	PAIR(A,B)	(A|(B<<SHORT))


extern	int	Inch, Hor, Vert, Unitwidth;

struct	Spnames
{
	int	*n;
	char	*v;
};

extern	Spnames	spnames[];

/*
	String and macro definitions are stored conceptually in a giant array
	indexed by type Offset.  In olden times, this array was real, and thus
	both huge and limited in size, leading to the "Out of temp file space"
	error.  In this version, the array is represented by a list of blocks,
	pointed to by blist[].bp.  Each block is of size BLK Tchars, and BLK
	MUST be a power of 2 for the macros below to work.
	
	The blocks associated with a particular string or macro are chained
	together in the array blist[].  Each blist[i].nextoff contains the
	Offset associated with the next block in the giant array, or -1 if
	this is the last block in the chain.  If .nextoff is 0, the block is
	free.
	
	To find the right index in blist for an Offset, divide by BLK.
*/

#define	NBLIST	2048	/* starting number of blocks in all definitions */

#define	BLK	128	/* number of Tchars in a block; must be 2^N with defns below */

#define	rbf0(o)		(blist[bindex(o)].bp[boffset(o)])
#define	bindex(o)	((o) / BLK)
#define	boffset(o)	((o) & (BLK-1))
#define	pastend(o)	(((o) & (BLK-1)) == 0)
/* #define	incoff(o)	( (++o & (BLK-1)) ? o : blist[bindex(o-1)].nextoff ) */
#define	incoff(o)	( (((o)+1) & (BLK-1)) ? o+1 : blist[bindex(o)].nextoff )

#define	skipline(f)	while (getc(f) != '\n')
#define is(s)		(strcmp(cmd, s) == 0)
#define	eq(s1, s2)	(strcmp(s1, s2) == 0)


typedef	unsigned long	Offset;		/* an offset in macro/string storage */

struct Blockp {		/* info about a block: */
	Tchar	*bp;		/* the data */
	Offset	nextoff;	/* offset of next block in a chain */
};

extern	Blockp	*blist;

#define	RD_OFFSET	(1 * BLK)	/* .rd command uses block 1 */

struct Diver {		/* diversion */
	Offset	op;
	int	dnl;
	int	dimac;
	int	ditrap;
	int	ditf;
	int	alss;
	int	blss;
	int	nls;
	int	mkline;
	int	maxl;
	int	hnl;
	int	curd;
};

struct Stack {		/* stack frame */
	int	nargs;
	Stack	*pframe;
	Offset	pip;
	int	pnchar;
	Tchar	prchar;
	int	ppendt;
	Tchar	pch;
	Tchar	*lastpbp;
	int	mname;
};

extern	Stack	s;

struct Divsiz {
	int dix;
	int diy;
};

struct Contab {		/* command or macro */
	unsigned int	rq;
	Contab	*link;
	void	(*f)(void);
	Offset	mx;
	Offset	emx;
	Divsiz	*divsiz;
};

#define	C(a,b)	{a, 0, b, 0, 0}		/* how to initialize a contab entry */

extern	Contab	contab[NM];

struct Numtab {	/* number registers */
	unsigned int	r;		/* name */
	int	val;
	short	fmt;
	short	inc;
	Numtab	*link;
};

extern	Numtab	numtab[NN];

#define	PN	0
#define	NL	1
#define	YR	2
#define	HP	3
#define	CT	4
#define	DN	5
#define	MO	6
#define	DY	7
#define	DW	8
#define	LN	9
#define	DL	10
#define	ST	11
#define	SB	12
#define	CD	13
#define	PID	14

struct	Wcache {	/* width cache, indexed by character */
	short	fontpts;
	short	width;
};

struct	Tbuf {		/* growable Tchar buffer */
	Tchar *_bufp;
	unsigned int _size;
};

/* the infamous environment block */

#define	ics	envp->_ics
#define	sps	envp->_sps
#define	spacesz	envp->_spacesz
#define	lss	envp->_lss
#define	lss1	envp->_lss1
#define	ll	envp->_ll
#define	ll1	envp->_ll1
#define	lt	envp->_lt
#define	lt1	envp->_lt1
#define	ic	envp->_ic
#define	icf	envp->_icf
#define	chbits	envp->_chbits
#define	spbits	envp->_spbits
#define	nmbits	envp->_nmbits
#define	apts	envp->_apts
#define	apts1	envp->_apts1
#define	pts	envp->_pts
#define	pts1	envp->_pts1
#define	font	envp->_font
#define	font1	envp->_font1
#define	ls	envp->_ls
#define	ls1	envp->_ls1
#define	ad	envp->_ad
#define	nms	envp->_nms
#define	ndf	envp->_ndf
#define	nmwid	envp->_nmwid
#define	fi	envp->_fi
#define	cc	envp->_cc
#define	c2	envp->_c2
#define	ohc	envp->_ohc
#define	tdelim	envp->_tdelim
#define	hyf	envp->_hyf
#define	hyoff	envp->_hyoff
#define	hyphalg	envp->_hyphalg
#define	un1	envp->_un1
#define	tabc	envp->_tabc
#define	dotc	envp->_dotc
#define	adsp	envp->_adsp
#define	adrem	envp->_adrem
#define	lastl	envp->_lastl
#define	nel	envp->_nel
#define	admod	envp->_admod
#define	wordp	envp->_wordp
#define	spflg	envp->_spflg
#define	linep	envp->_linep
#define	wdend	envp->_wdend
#define	wdstart	envp->_wdstart
#define	wne	envp->_wne
#define	ne	envp->_ne
#define	nc	envp->_nc
#define	nb	envp->_nb
#define	lnmod	envp->_lnmod
#define	nwd	envp->_nwd
#define	nn	envp->_nn
#define	ni	envp->_ni
#define	ul	envp->_ul
#define	cu	envp->_cu
#define	ce	envp->_ce
#define	in	envp->_in
#define	in1	envp->_in1
#define	un	envp->_un
#define	wch	envp->_wch
#define	pendt	envp->_pendt
#define	pendw	envp->_pendw
#define	pendnf	envp->_pendnf
#define	spread	envp->_spread
#define	it	envp->_it
#define	itmac	envp->_itmac
#define	hyptr	envp->_hyptr
#define	tabtab	envp->_tabtab
#define	line	envp->_line._bufp
#define	lnsize	envp->_line._size
#define	word	envp->_word._bufp
#define wdsize	envp->_word._size

#define oline	_oline._bufp
#define olnsize	_oline._size

/*
 * Note:
 * If this structure changes in ni.c, you must change
 * this as well, and vice versa.
 */

struct Env {
	int	_ics;
	int	_sps;
	int	_spacesz;
	int	_lss;
	int	_lss1;
	int	_ll;
	int	_ll1;
	int	_lt;
	int	_lt1;
	Tchar	_ic;
	int	_icf;
	Tchar	_chbits;
	Tchar	_spbits;
	Tchar	_nmbits;
	int	_apts;
	int	_apts1;
	int	_pts;
	int	_pts1;
	int	_font;
	int	_font1;
	int	_ls;
	int	_ls1;
	int	_ad;
	int	_nms;
	int	_ndf;
	int	_nmwid;
	int	_fi;
	int	_cc;
	int	_c2;
	int	_ohc;
	int	_tdelim;
	int	_hyf;
	int	_hyoff;
	int	_hyphalg;
	int	_un1;
	int	_tabc;
	int	_dotc;
	int	_adsp;
	int	_adrem;
	int	_lastl;
	int	_nel;
	int	_admod;
	Tchar	*_wordp;
	int	_spflg;
	Tchar	*_linep;
	Tchar	*_wdend;
	Tchar	*_wdstart;
	int	_wne;
	int	_ne;
	int	_nc;
	int	_nb;
	int	_lnmod;
	int	_nwd;
	int	_nn;
	int	_ni;
	int	_ul;
	int	_cu;
	int	_ce;
	int	_in;
	int	_in1;
	int	_un;
	int	_wch;
	int	_pendt;
	Tchar	*_pendw;
	int	_pendnf;
	int	_spread;
	int	_it;
	int	_itmac;
	Tchar	*_hyptr[NHYP];
	long	_tabtab[NTAB];
	Tbuf	_line;
	Tbuf	_word;
};

extern	Env	env[];
extern	Env	*envp;

enum {	MBchar = 'U', Troffchar = 'C', Number = 'N', Install = 'i', Lookup = 'l' };
	/* U => utf, for instance;  C => \(xx, N => \N'...' */



struct Chwid {	/* data on one character */
	Ushort	num;		/* character number:
					0 -> not on this font
					>= ALPHABET -> its number among all Cxy's */
	Ushort	code;		/* char code for actual device.  used for \N */
	char	*str;		/* code string for nroff */
	Uchar	wid;		/* width */
	Uchar	kern;		/* ascender/descender */
};

struct Font {	/* characteristics of a font */
	int	name;		/* int name, e.g., BI (2 chars) */
	char	longname[64];	/* long name of this font (e.g., "Bembo" */
	char	*truename;	/* path name of table if not in standard place */
	int	nchars;		/* number of width entries for this font */
	char	specfont;	/* 1 == special font */
	int	spacewidth;	/* width of space on this font */
	int	defaultwidth;	/* default width of characters on this font */
	Chwid	*wp;		/* widths, etc., of the real characters */
	char	ligfont;	/* 1 == ligatures exist on this font */
};

/* ligatures, ORed into ligfont */

#define	LFF	01
#define	LFI	02
#define	LFL	04
#define	LFFI	010
#define	LFFL	020

/* tracing modes */
#define TRNARGS	01		/* trace legality of numeric arguments */
#define TRREQ	02		/* trace requests */
#define TRMAC	04		/* trace macros */
#define RQERR	01		/* processing request/macro */

/* typewriter driving table structure */


extern	Term	t;
struct Term {
	int	bset;		/* these bits have to be on */
	int	breset;		/* these bits have to be off */
	int	Hor;		/* #units in minimum horiz motion */
	int	Vert;		/* #units in minimum vert motion */
	int	Newline;	/* #units in single line space */
	int	Char;		/* #units in character width */
	int	Em;		/* ditto */
	int	Halfline;	/* half line units */
	int	Adj;		/* minimum units for horizontal adjustment */
	char	*twinit;	/* initialize terminal */
	char	*twrest;	/* reinitialize terminal */
	char	*twnl;		/* terminal sequence for newline */
	char	*hlr;		/* half-line reverse */
	char	*hlf;		/* half-line forward */
	char	*flr;		/* full-line reverse */
	char	*bdon;		/* turn bold mode on */
	char	*bdoff;		/* turn bold mode off */
	char	*iton;		/* turn italic mode on */
	char	*itoff;		/* turn italic mode off */
	char	*ploton;	/* turn plot mode on */
	char	*plotoff;	/* turn plot mode off */
	char	*up;		/* sequence to move up in plot mode */
	char	*down;		/* ditto */
	char	*right;		/* ditto */
	char	*left;		/* ditto */

	Font	tfont;		/* widths and other info, as in a troff font */
};

extern	Term	t;

/*
 * for error reporting; keep track of escapes/requests with numeric arguments
 */
struct Numerr {
	char	type;	/* request or escape? */
	char	esc;	/* was escape sequence named esc */
	char	escarg;	/* argument of esc's like \D'l' */
	unsigned int	req;	/* was request or macro named req */
};
