|  | #include <u.h> | 
|  | #include <libc.h> | 
|  | #include <bio.h> | 
|  | #include <ctype.h> | 
|  |  | 
|  | enum | 
|  | { | 
|  | Unbsp = 0x00A0, | 
|  | Uprivate = 0xF000, | 
|  | Uempty,	/* \& */ | 
|  | Uamp,	/* raw & */ | 
|  | Ult,		/* raw < */ | 
|  | Ugt,		/* raw > */ | 
|  | Utick,	/* raw ' */ | 
|  | Ubtick,	/* raw ` */ | 
|  | Uminus,	/* raw - */ | 
|  | Uspace,	/* raw space */ | 
|  | Upl,		/* symbol + */ | 
|  | Ueq,		/* symbol = */ | 
|  | Umi,		/* symbol - */ | 
|  | Uformatted,	/* start diverted output */ | 
|  | Uunformatted,	/* end diverted output */ | 
|  |  | 
|  | UPI = 720,	/* units per inch */ | 
|  | UPX = 10,	/* units per pixel */ | 
|  |  | 
|  | /* special input modes */ | 
|  | CopyMode = 1<<1, | 
|  | ExpandMode = 1<<2, | 
|  | ArgMode = 1<<3, | 
|  | HtmlMode = 1<<4, | 
|  |  | 
|  | MaxLine = 1024 | 
|  | }; | 
|  |  | 
|  | Rune*	L(char*); | 
|  |  | 
|  | void		addesc(Rune, int (*)(void), int); | 
|  | void		addraw(Rune*, void(*)(Rune*)); | 
|  | void		addreq(Rune*, void(*)(int, Rune**), int); | 
|  | void		af(Rune*, Rune*); | 
|  | void		as(Rune*, Rune*); | 
|  | void		br(void); | 
|  | void		closehtml(void); | 
|  | Rune*	copyarg(void); | 
|  | void		delraw(Rune*); | 
|  | void		delreq(Rune*); | 
|  | void		ds(Rune*, Rune*); | 
|  | int		dv(int); | 
|  | int		e_nop(void); | 
|  | int		e_warn(void); | 
|  | void*	emalloc(uint); | 
|  | void*	erealloc(void*, uint); | 
|  | Rune*	erunesmprint(char*, ...); | 
|  | Rune*	erunestrdup(Rune*); | 
|  | char*	esmprint(char*, ...); | 
|  | char*	estrdup(char*); | 
|  | int		eval(Rune*); | 
|  | int		evalscale(Rune*, int); | 
|  | Rune*	getname(void); | 
|  | int		getnext(void); | 
|  | Rune*	getds(Rune*); | 
|  | Rune*	_getnr(Rune*); | 
|  | int		getnr(Rune*); | 
|  | int		getnrr(Rune*); | 
|  | int		getrune(void); | 
|  | Rune*	getqarg(void); | 
|  | Rune*	getline(void); | 
|  | void		hideihtml(void); | 
|  | void		html(Rune*, Rune*); | 
|  | void		htmlinit(void); | 
|  | void		ihtml(Rune*, Rune*); | 
|  | void		inputnotify(void(*)(void)); | 
|  | void		itrap(void); | 
|  | void		itrapset(void); | 
|  | int		linefmt(Fmt*); | 
|  | void		nr(Rune*, int); | 
|  | void		_nr(Rune*, Rune*); | 
|  | void		out(Rune*); | 
|  | void		(*outcb)(Rune); | 
|  | void		outhtml(Rune*); | 
|  | void		outrune(Rune); | 
|  | void		outtrap(void); | 
|  | int		popinput(void); | 
|  | void		printds(int); | 
|  | int		pushinputfile(Rune*); | 
|  | void		pushinputstring(Rune*); | 
|  | int		pushstdin(void); | 
|  | int		queueinputfile(Rune*); | 
|  | int		queuestdin(void); | 
|  | void		r_nop(int, Rune**); | 
|  | void		r_warn(int, Rune**); | 
|  | Rune	*readline(int); | 
|  | void		reitag(void); | 
|  | void		renraw(Rune*, Rune*); | 
|  | void		renreq(Rune*, Rune*); | 
|  | void		run(void); | 
|  | void		runinput(void); | 
|  | int		runmacro(int, int, Rune**); | 
|  | void		runmacro1(Rune*); | 
|  | Rune*	rune2html(Rune); | 
|  | void		setlinenumber(Rune*, int); | 
|  | void		showihtml(void); | 
|  | void		sp(int); | 
|  | void		t1init(void); | 
|  | void		t2init(void); | 
|  | void		t3init(void); | 
|  | void		t4init(void); | 
|  | void		t5init(void); | 
|  | void		t6init(void); | 
|  | void		t7init(void); | 
|  | void		t8init(void); | 
|  | void		t9init(void); | 
|  | void		t10init(void); | 
|  | void		t11init(void); | 
|  | void		t12init(void); | 
|  | void		t13init(void); | 
|  | void		t14init(void); | 
|  | void		t15init(void); | 
|  | void		t16init(void); | 
|  | void		t17init(void); | 
|  | void		t18init(void); | 
|  | void		t19init(void); | 
|  | void		t20init(void); | 
|  | Rune	troff2rune(Rune*); | 
|  | void		unfont(void); | 
|  | void		ungetnext(Rune); | 
|  | void		ungetrune(Rune); | 
|  | void		unitag(void); | 
|  | void		warn(char*, ...); | 
|  |  | 
|  | extern	int		backslash; | 
|  | extern	int		bol; | 
|  | extern	Biobuf	bout; | 
|  | extern	int		broke; | 
|  | extern	int		dot; | 
|  | extern	int		inputmode; | 
|  | extern	int		inrequest; | 
|  | extern	int		tick; | 
|  | extern	int		utf8; | 
|  | extern	int		verbose; | 
|  | extern	int		linepos; | 
|  |  | 
|  | #define	runemalloc(n)	(Rune*)emalloc((n)*sizeof(Rune)) | 
|  | #define	runerealloc(r, n)	(Rune*)erealloc(r, (n)*sizeof(Rune)) | 
|  | #define	runemove(a, b, n)	memmove(a, b, (n)*sizeof(Rune)) | 
|  |  | 
|  | #pragma varargck type "L" void |