| March 11, 1994 | 
 |  | 
 | 	If we are just plain old nroff (and not doing UNICODE) we should | 
 | 	only Lookup characters, not Install when we don't know them. | 
 | 	If we are troff, we Install them anyway | 
 |  | 
 | March 8, 1994 | 
 |  | 
 | 	Nroff had problems with parsing quoted white space as options or | 
 | 	character code in some terminals tables. Changed by having scanf | 
 | 	include white space when necessary as suggested by Rich. | 
 |  | 
 | March 1, 1994 | 
 |  | 
 | 	Made sanity check for terminal type depending on the trace level; | 
 | 	trace level set with -tn flag at start up | 
 |  | 
 | 22 Feb, 1994 | 
 |  | 
 | 	More pointer shuffling fixes. | 
 |  | 
 | 18 Feb, 1994 | 
 |  | 
 | 	More disabling of multibyte stuff. Fixed bug in n5.c: casetm didn' | 
 | 	know about the new format in the fontables. | 
 |  | 
 | Feb 17, 1994 | 
 |  | 
 | 	Removed extra include <setlocale> from n1.c | 
 |  | 
 | 	Fixed dubious pointer shuffling in n7.c, t10.c & n8.c. Thanks Rich! | 
 |  | 
 | Feb 10, 1994 | 
 |  | 
 | 	Disabled the multybyte stuff; only plan 9 will get it. | 
 |  | 
 | Jan 24, 1994 | 
 |  | 
 | 	Fixed nasty bug discovered by td, which caused core dumps on | 
 | 	\D'l-0.002775i 0i' and apparently all numbers closer to 0 | 
 | 	than -.002775. Fixed in storeline() and storeword() (n7.c). | 
 |  | 
 | Dec 16, 1993 | 
 |  | 
 | 	nroff & troff -N were looking for the TYPESETTER variable, causing | 
 |  | 
 | 	troff: cannot open /sys/lib/troff/term/tab.202; line 1, file stdin | 
 |  | 
 | 	fixed my moving getenv("TYPESETTER") to t10.c in t_ptinit(void). | 
 |  | 
 | Dec 3, 1993: | 
 |  | 
 | 	The sequence \s+2\H'+10' came sometimes out in the wrong order | 
 | 	(x H before s), so there wasn't a difference bewteen \s+2\H'+10' | 
 | 	and \H'+10'\s+2. Now the fonts bits of the CHARHT are used to | 
 | 	register the current pontsize, so we can issue a s10 in t10.c | 
 | 	if needed. A bit sneaky. | 
 |  | 
 | 	Try to prevent double slashes in path names. Especially under | 
 | 	plan9 things started to look ugly. | 
 |  | 
 | 	Exception word list now grows dynamic. | 
 |  | 
 | Nov 30, 1993: | 
 |  | 
 | 	Allow multiple calls to .pi, requested by Rob. | 
 | 		.pi cat | 
 | 		.pi dogs | 
 | 	is now equivalent with | 
 | 		.pi cat | dogs | 
 |  | 
 |  | 
 | 	.ab now takes also optional error code: | 
 | 		.ab [n] [string] | 
 | 	If n and string, n is exit code, string is message | 
 | 	If n, n is exit code, ``User Abort, exit code n" is message | 
 | 	If !n and string, standard exit code, string is message | 
 | 	If !n and ! string, standard exit code, "User Abort" is message | 
 |  | 
 | Nov 24, 1993: | 
 |  | 
 | 	Reordered code to keep the UNASNI scripts happy. | 
 |  | 
 | 	Nroff dumped core reading terminal tables: apparenty under plan 9, | 
 | 	scanf includes the '\n'; added test for '\0' in parse in n10.c. | 
 |  | 
 | 	Relative tab settings (.ta +1C +2C) didn't work; anding the | 
 | 	previous value with TABMASK fixes this (caseta). | 
 |  | 
 | Nov 23, 1993: | 
 |  | 
 | 	Included code, originally done by bwk for plan 9, to handle | 
 | 	multi-byte characters. | 
 |  | 
 | Nov 3, 1993: | 
 |  | 
 | 	``pair internal'' two char names by shifting 16 bits. Will allow | 
 | 	the use of 16 bit characters sets (Unicode in plan9 etc.) for | 
 | 	macro's etc. | 
 |  | 
 | Oct 20, 1993: | 
 |  | 
 | 	Word & line buffers are now dynamic: No more word or line overflow | 
 | 	unless when we run out of memory. | 
 |  | 
 | Oct 11, 1993: | 
 |  | 
 | 	lost diversion warning pops up regularly with man macro's. Due | 
 | 	to a possible macro coding problem. Triggered by something like | 
 | 	troff -man: | 
 | 		.TP | 
 | 		.TP | 
 | 		foo | 
 | 		.ex | 
 |     	Minimal code: | 
 | 		.di aa | 
 | 		throw away this diversion (aa) while being defined. | 
 | 		.rm aa | 
 | 		.br | 
 | 		.di | 
 |  | 
 | 	Fixed by disallowing .rm to throw away current diversion. The | 
 | 	rn request will complain with: | 
 |  | 
 | 		cannot remove diversion aa during definition; etc. | 
 |  | 
 | Sep 29, 1993: | 
 |  | 
 | 	Some long standing fixes which never went back in the source. | 
 | 	Thanks to Janet & Rich. | 
 |  | 
 | Sep 28, 1993: | 
 |  | 
 | 	Changed getach() (n1.c), so it does't consider truncated | 
 | 	special characters as (8-bit) ascii.  STX ETX ENQ ACK and BELL | 
 | 	are still allowed for the ultimate backwards compatibility. | 
 |  | 
 | 	Some code changes, so real ANSI compilers like the SGI version | 
 | 	(acc from Sun is a poor excuse for an ANSI compiler) don't | 
 | 	barf.  Some compromises (static Tchar wbuf in n9.c) allowed so | 
 | 	the unansified stuff for non-ansi compilers (cc on Sun's) will | 
 | 	work as well. | 
 |  | 
 | Sep 9, 1993: | 
 |  | 
 | 	Be nice to Gerard. Now also word spaces in .tl and after | 
 | 	tabs/fleids etc. | 
 |  | 
 | Aug 12, 1993: | 
 |  | 
 | 	Tabs setting can now be humongous. We also allow 99 tabs to | 
 | 	accomodate tbl. As a side effect, NTM buffers are now 1K | 
 |  | 
 | Aug 11, 1993: | 
 |  | 
 | 	.R register, now contains maximum number of addessable | 
 | 	registers minus the number actually used. | 
 |  | 
 | 	Small esthetic changes in error messages; removed a statement | 
 | 	which wasn't reached anyway. | 
 |  | 
 | Aug 10, 1993: | 
 |  | 
 | 	Some more speed hacks: be smarter doing the linear table | 
 | 	lookups in alloc() and finds(). | 
 |  | 
 | 	The real name of the det diversion size macro is now gd. | 
 |  | 
 | Aug 9, 1993: | 
 |  | 
 | 	A much faster way to find the end of a string/macro, by | 
 | 	remembering that when defined. | 
 |  | 
 | Aug 6, 1993: | 
 |  | 
 | 	 Slightly more eficient way of skipping to the end of a | 
 | 	 string/macro | 
 |  | 
 | Aug 5, 1993: | 
 |  | 
 | 	Prevent character sign extension for 8-bit charnames diversions | 
 | 	etc. by unpair | 
 |  | 
 | Aug 4, 1993: | 
 |  | 
 | 	Growing the dynamical macro/strings name space and registers | 
 | 	space (See the experiment of 21 July) now with bigger | 
 | 	increments. Casts added to satisfy non-ANSI compilers. | 
 |  | 
 | Aug 3, 1993: | 
 |  | 
 | 	Should check return value in alloc (n3.c), to prevent core dump | 
 | 	when memory gets tight. | 
 |  | 
 | July 28, 1993: | 
 |  | 
 | 	New request: .sg <div> sets the dn and dl registers to the size | 
 | 	of the diversion named in the argument. Doesn't do anything | 
 | 	when the named diversion doesn't exist. The name sg is | 
 | 	temporary until we find a better one. | 
 |  | 
 | July 21, 1993: | 
 |  | 
 | 	Experiment: Macro space  & registers name allocated | 
 | 	dynamically. Note that current reallocation occurs in | 
 | 	increments of 1, to force the code to be executed a lot; a kind | 
 | 	of stress testing. Also, eight bit characters allowed in | 
 | 	macro/string names. | 
 |  | 
 | July 21, 1993: | 
 |  | 
 | 	Turn on the escape mode if the end macro is called. | 
 |  | 
 | July 20, 1993: | 
 |  | 
 | 	Tracing mode now default off | 
 |  | 
 | 	Don't print s stackdump either when a file specfied on the | 
 | 	command line argument cannot be opened | 
 |  | 
 | July 15, 1993: | 
 |  | 
 | 	Don't print useless line & current file informations when a | 
 | 	file specfied on the command line argument cannot be opened. | 
 |  | 
 | 	Sun ansi compiler doesn't default adhere to standards. Undid | 
 | 	the kludge in tdef.h | 
 |  | 
 | July 14, 1993: | 
 |  | 
 | 	Coding error made the tab type R not function properly | 
 |  | 
 | July 12, 1993: | 
 |  | 
 | 	Fixed a typo in the version stuff, noticed by Rich | 
 |  | 
 | July 9, 1993: | 
 |  | 
 | 	Added the dwb home configuration stuff, thanks RIch. Also, | 
 | 	NCHARS is big enough. Added a fflush to casetm, so .fm <file> | 
 | 	will be up to date. | 
 |  | 
 | June 25, 1993 (Rich): | 
 |  | 
 |     -t option | 
 |  | 
 | 	reinstated for the sake of compatibility. Some old | 
 | 	shells scripts and man(1) from SunOs want this, sigh | 
 |  | 
 |     Compiler and system dependencies | 
 |  | 
 | 	Some systems pull in sys/types.h via #include <time.h> and then | 
 | 	the compiler complains about two ushort typedefs. Therefore, | 
 | 	ushort is now Ushort (and uchar Uchar). | 
 |  | 
 | 	The SVID specifies a strdup, POSIX doesn't, anyway, troff | 
 | 	provides its own version, slightly different then the standard | 
 | 	one. A To prevent name clashes with that definion, renamed to | 
 | 	strdupl. | 
 |  | 
 | June 24, 1993 (Rich): | 
 |  | 
 | 	-V option added for DWB3.4 (rich) | 
 |  | 
 | May 18, 1993: | 
 |  | 
 |     Trivial fix (.cf) request for troff -a  | 
 |  | 
 | 	issuing | 
 |  | 
 | 		.cf /dev/null | 
 |  | 
 | 	with troff -a gives some spurious output: | 
 |  | 
 | 		H720 | 
 | 		H720 | 
 | 		s10 | 
 | 		f1 | 
 |  | 
 | 	fixed  by checking for ascii mode it ptesc(), ptps() and | 
 | 	ptfont() in t10.c | 
 |  | 
 |  | 
 |     Enhancement | 
 |  | 
 | 	Added a .tm request to roff. Works just like .tm, but now | 
 | 	it will do it to file. The name is coined by Carmela. Great | 
 | 	for creating indeces & toc's (we hope). | 
 |  | 
 | May 18 1993: | 
 |  | 
 |     Compatibilty change | 
 |  | 
 | 	Somebody complained that his favorite macro didn't work: | 
 | 	it had a BELL (^G) in the name.  This was a non-documented | 
 | 	feature of earlier versions of troff (although the | 
 | 	documentation actually doesn't say that you can. (They can | 
 | 	only be used for delimiters or with the tr request), so it | 
 | 	isn't that important). | 
 |  | 
 | 	But the sake of eternal backward compatibilaty I allowed | 
 | 	some control characters like, STX, ACK,  etc. also be part | 
 | 	of a macro/string name. | 
 |  | 
 | 	While at it, I made it also possible to have eight bit | 
 | 	characters be part of the name. It might be that this screws | 
 | 	up the way users think about these things. For UNICODE | 
 | 	versions, they probably want to do that as well, and that | 
 | 	won't work as easy, (because these characters are 16-bits | 
 | 	wide), so it is dubious whether we actually want this. | 
 |  | 
 | 	BTW. Now | 
 |  | 
 | 		.de \(ts\ts | 
 | 		.tm terminal sigma macro | 
 | 		.. | 
 | 		.\(ts\(ts | 
 |  | 
 | 	also works, as long the internal cookie for ts isn't more then | 
 | 	eight bits. | 
 |  | 
 | May 12, 1993: | 
 |  | 
 |     Syntax change | 
 |  | 
 | 	Some requests accept tabs as a separator, some don't and | 
 | 	this can be a nuisance.  Now a tab is also recognized as | 
 | 	an argument separator for requests, this makes | 
 |  | 
 | 		.so	/dev/null | 
 |  | 
 | 	works. | 
 |  | 
 | 	To be more precise, any motion character is allowed, so | 
 |  | 
 | 		.so\h'5i'/dev/null | 
 |  | 
 | 	will work as well, if one really wants that. | 
 |  | 
 | 	It will be a problem for users who really relied on this as in | 
 |  | 
 | 		.ds x	string | 
 | 	 | 
 | 	and expect the tab to become part of the string a, but I haven't | 
 | 	seen any use of that (obscure trick). | 
 |  | 
 | May 6, 1993: | 
 |  | 
 |     Eileen count fixed | 
 |  | 
 | 	Troff sometimes went in a loop, and exited with: ``job | 
 | 	looping; check abuse of macros'' (also known as the Eileen's | 
 | 	loop). It can be forced with the next trivial programme: | 
 |  | 
 | 		.de ff | 
 | 		.di xx | 
 | 		.. | 
 | 		.wh -1 ff | 
 | 		.bp | 
 |  | 
 | 	Basically what happens is that a page transition now will | 
 | 	happen in a diversion, which doesn't make sense. Wat really | 
 | 	happens is that eject() (in n7.c) doesn't eject the frame | 
 | 	because we are in a diversion.  This cause the loop in n1.c | 
 | 	(because now always stack->pname <= ejl). Adding check on | 
 | 	whether we are not in a diversion takes care of the problem. | 
 |  | 
 | March 30, 1993: | 
 |  | 
 |     Need request, .ne | 
 |  | 
 | 	When there is a begin of page trap set, and the first thing | 
 | 	in the file is a .ne request, the trap gets fired, but, | 
 | 	the x font R etc. cookies doen't come out, because the | 
 | 	troff thinks that the first page pseudo transition already | 
 | 	took place.  Fixed by forcing the start of the first page | 
 | 	in the casene request with the same code as in casetl (which | 
 | 	caused a similar problem quite some time ago). | 
 |  | 
 |     Change to .cf request ``Here document'' | 
 |  | 
 | 	If the argument of .cf starts with a <<, the rest of it is taken | 
 | 	as an EOF token. It will reat the rest of the input until it hits | 
 | 	the EOF token and copies it to the output. This is similar as | 
 | 	the shell's ``here document'' mechanisme and put in place to | 
 | 	improve the kludgy way picasso, picpack etc. now include | 
 | 	postscript. | 
 |  | 
 |     Using troff -TLatin1 (DWB version) and \N'...' caused core dump | 
 |  | 
 | 	In t11, in chadd, it should test on NCHARS - ALPHABET to see | 
 | 	whether we run out of table space (and we probably should beaf | 
 | 	up NCHARS for the DWB version). | 
 |  | 
 | March 16, 1993: | 
 |  | 
 |     Diversion rename bug fix | 
 |  | 
 | 	It is possible to get troff in an infinite loop by renaming a | 
 | 	diversion in progress, and calling it later with the | 
 | 	new name (as in .di xx, .rn xx yy, .yy). The effect depends on | 
 | 	whether troff already put stuff in the diversion or not. | 
 |  | 
 | 	Fix by having .rn also rename the current diversion (if | 
 | 	there is any and when appropriate).  If the diversion calls | 
 | 	itself by the new name and given the fix made on 11 nov | 
 | 	1992, this will now result in an error.  (BTW, the fix from | 
 | 	11 nov is improved: diversions nest, so we have to account | 
 | 	for that). | 
 |  | 
 | December 18, 1992: | 
 | 	Some people have complete novels as comments, so we need | 
 | 	to skip comments while checking the legality of font files. | 
 | 	thaks Rixh | 
 |  | 
 | December 16, 1992 | 
 |  | 
 | 	Some people rely on the order that -r arguments are given, | 
 | 	so that troff -rC1 -rC3 ends up setting register C to 3. | 
 | 	Because cpushback() pushes things in a LIFO order back, we | 
 | 	have to do the same to get -r args in a FIFO order. | 
 |  | 
 | Nov 17, 1992: | 
 |  | 
 | 	Giving a -rL8 option cuased the string .nr L 8 to be printed | 
 | 	on the output, using the wonderful 3b2. Some garbage was | 
 | 	left in buf[100] in main(). Fixed by setting buf[0] explicitly | 
 | 	to 0 (because some C-compilers complain about ``no automatic | 
 | 	aggregate initialization''). | 
 |  | 
 | Nov 11, 1992: | 
 |  | 
 |     Diversion bug fix | 
 |  | 
 | 	If a diversion was being read and the input is faulty so | 
 | 	the diversion was reading in itself, it caused troff to | 
 | 	loop undefinitely. This was easily fixed by a test in | 
 | 	control(a,b) in n1.c. | 
 |  | 
 | 	Something similar things might happen with macros causing | 
 | 	the ``eileenct problem'', but I didn't look for that. We | 
 | 	have to wait until it happens. | 
 |  | 
 | Oct 26, 1992: | 
 |  | 
 |     Numeric arguments: | 
 |  | 
 | 	Illegal argments are treated as missing arguments. This | 
 | 	changed the semantics of .ll, .ls, .in, .lg,  .ul, .cu .lt | 
 | 	(which acted as if the argument was 0) and .ps which was | 
 | 	simply ignored with an illegal argument. | 
 |  | 
 | 	Tidied up number parsing in atoi1(). This prevents arguments | 
 | 	like .x or 1.2.3.4 being interpret as a legal number (nonumb = 0) | 
 |  | 
 |     Numeric arguments error reporting: | 
 |  | 
 | 	Controlled by .pt, illegal numbers are now reported (default | 
 | 	trace mode is 1).  This is also true for the escapes: | 
 | 	\h'..', \v'..' \H'..', \S'..', \N'..', \D'..', \l'.., \L'.. | 
 | 	and \x'..'. | 
 |  | 
 | 	\D'c' is the only drawing request which doesn't take a pair | 
 | 	of numbers as arguments, so a special case is put here in | 
 | 	setdraw() (This code actually could use an overhaul to get | 
 | 	better parsing. As long as the \D'..' cookies are machine | 
 | 	generated it is low on the priority list). | 
 |  | 
 | 	Don't generate an error if the illegal argument to a request | 
 | 	is a \}. It is too painful to do right (although it can be | 
 | 	done, but it would clutter getch() and getcho() even more). | 
 |  | 
 |     Input line numbers (.c register) bug fixes: | 
 |  | 
 | 	In not taken branches of .if or .ie, the input line # | 
 | 	(numtab[CD].val) should be raised when necessary (in eatblk()). | 
 |  | 
 | 	For concealed newlines, we still should count the line for input. | 
 |  | 
 | 	Setfield (n9.c) sometimes pushes the rest of the line back to | 
 | 	the input (including \n), without adjusting numtab[CD].val | 
 |  | 
 | 	Because .c (and so numtab[CD].val) is the number of lines read | 
 | 	and the error might actually happen in the current line | 
 | 	(before seeing the '\n), we need to apply correction in | 
 | 	errprint when nlflg set. (This correction needs to be undone | 
 | 	when inside a macro because the nlflg is set by reading the | 
 | 	args to the macro). | 
 |  | 
 |     Line number setting (.lf) request bug fixes: | 
 |  | 
 | 	I interpret that the .c register will contain the number of | 
 | 	read lines, not including the current one. | 
 |  | 
 | 	Also, don't change the input line number when the first | 
 | 	argument of .lf is not a number. | 
 |  | 
 | 	As a net effect, the next input | 
 |  | 
 | 		.EQ | 
 | 		.EN | 
 | 		.ab | 
 |  | 
 | 	will generate the same output whether eqn has been used or not. | 
 |  | 
 |     If request bug fix: | 
 |  | 
 | 	A ``.if page .tm foo'' caused the next line being ignored; | 
 | 	This bcause when the 2nd delimiter of a string couldn't be | 
 | 	found in cmpstr, the next line was always eaten. Solution: | 
 | 	in caseif1, if the condition is false, we should check | 
 | 	nlflg before eating a block.  (Note: We might have eaten | 
 | 	\{\ as well.  We could disallow the \{\ in a string to be | 
 | 	compared to prevent that but that might break other things). | 
 |  | 
 |     Enhancement to .pt: | 
 |  | 
 | 	The .pt now pops the previous values when no argument is | 
 | 	specified. Turned out to be handy when chasing for problems. | 
 | 	Just ``bracked'' the code with .pt 7 and .pt and you get | 
 | 	a trace of only that block. The meaning of the arguments | 
 | 	is now: | 
 | 		01      trace numeric arguments (default on) | 
 | 		02	trace requests | 
 | 		04	trace macros | 
 |  | 
 |     Abort request (.ab) beautification: | 
 |  | 
 | 	Don't print the extra carriage return when .ab is called | 
 | 	without an argument. | 
 |  | 
 | Oct 12, 1992: | 
 |  | 
 | 	(Comments & spelling errors from this day on by jaap) | 
 |  | 
 | 	replaced 32767 by INT_MAX in several places to allow for very | 
 | 	long pages (on 32-but machines). | 
 |  | 
 | 	The ``.fp 1 R   \"COMMENT'' complains about ``./troff: Can't | 
 | 	open font file /usr/lib/font/devpost/h'' on some systems. It | 
 | 	sees the tab as part of the optional font file.  Apparently it | 
 | 	is system dependent whether isgraph() includes the tab | 
 | 	character.  Fixed by using getach() in getname() in n1.c | 
 | 	instead. | 
 |  | 
 | Aug 28, 1992: | 
 | 	removed call to popi from rdtty();  it was eating up the | 
 | 	rest of the macro if it was used from within one.  (thanks, jaap) | 
 |  | 
 |  | 
 | Jul 21, 1992: | 
 | 	added extra test in nextfile() to pop current input file | 
 | 	only if not in .nx command.  thanks to jaap. | 
 |  | 
 | 	added test in getword() to avoid hyphenating after \z character, | 
 | 	which prevents any hyphenation inside \X'...'.  thanks to jaap. | 
 |  | 
 | 	added, then removed, code in getword() to prevent hyphenating | 
 | 	anything shorter than 6 characters.  looks like it changed a | 
 | 	lot more than i thought. | 
 |  | 
 | Jul 12, 1992: | 
 | 	added .pt request to trace macros and requests (from jaap). | 
 | 	.pt N Print trace of macros (N=1), requests (N=2) or both (N=3) | 
 |  | 
 | Jun 5, 1992: | 
 | 	added tests to t.twrest and t.twinit to avoid 0 deref in | 
 | 	n2 and n10, for nroff -t xxxxx.  thanks to Rich Drechsler. | 
 |  | 
 | May 22, 1992: | 
 | 	added extern decls to e.g., void Tchar (*hmot)(void) in tdef.h | 
 | 	and added definition to ni.c, so pointers are defined explicitly. | 
 | 	makes it work on turbo c++ and probably others. | 
 |  | 
 | 	changed a couple of isdigit's and isgraph(getch()) to avoid | 
 | 	multiple evaluation (even though it shouldn't happen). | 
 |  | 
 | 	Made /usr/bin/nroff a shell script. | 
 |  | 
 | May 12, 1992: | 
 | 	n1.c: need p++ after strrchr to skip / in program name. | 
 | 	thanks to Rich Drechsler. | 
 |  | 
 | Apr 17, 1992: | 
 | 	casefi(), n5.c: .u register should be 0 or 1, not incremented | 
 | 	with each .fi. | 
 |  | 
 | Apr 5, 1992: | 
 | 	fiddled n7.c and added _nmwid to the environment, to add a | 
 | 	5th argument to .nm:  the maximum number of digits in any | 
 | 	line number.  default is 3, which was previously hardwired in. | 
 |  | 
 | 	added jaap's code for yet another register which actually delivers | 
 | 	a string, called .S (so it can easily go in the switch in setn() | 
 | 	in n4.c); it delivers the current tabstop and alignment modes in | 
 | 	a format suitable for a subsequent .ta \n(.S command: | 
 | 		.ds T \n(.S | 
 | 		... | 
 | 		.ta \*T | 
 |  | 
 | Mar 30, 1992: | 
 | 	added test in getword to avoid hyphenating things with motions | 
 | 	(and avoid a core dump sometimes too). | 
 |  | 
 | Mar 13, 1992: | 
 | 	\n(sb initialized wrong in setwd(). | 
 |  | 
 | 	TYPESETTER=foo troff -Tpost used foo instead of post. | 
 |  | 
 | Mar 12, 1992: | 
 | 	rearranged tests in popf so that .so is closed properly before | 
 | 	moving on to the next macro package. | 
 |  | 
 | Mar 1, 1992: | 
 | 	input mechanism rearranged to use getc() instead of stack of | 
 | 	explicit input buffers.  5-10% slowdown. | 
 |  | 
 | Jan 28, 1992: | 
 | 	fixed .tm \(mi to print something sensible.  thanks to jaap. | 
 |  | 
 | Jan 2, 1992: | 
 | 	fiddle setfp so doesn't put out font stuff if -a turned on. | 
 |  | 
 | Dec 17, 1991: | 
 | 	copy 3rd argument in .fp commands to x font ... lines when it contains | 
 | 	a /, for testing fonts locally. | 
 |  | 
 | Dec 13, 1991: | 
 | 	parameterize the font directories, etc., so can be set in makefiles. | 
 | 	added -N argument to run as nroff. | 
 |  | 
 | Nov 8, 1991: | 
 | 	add a maplow(towlower...) in n8.c to handle brain-damaged libraries. | 
 |  | 
 | Nov 2, 1991: | 
 | 	merged nroff into troff, based on Ken's plan 9 version. | 
 | 	merged nii.c into ni.c, removed tw.h, etc.  more work needed | 
 | 	to make this stuff cleaner. | 
 |  | 
 | July 27, 1991: | 
 | 	added test in setn in n4 to fix bug that permitted things like | 
 | 	\n (ab to work "properly".  thanks to jaap for finding and fixing. | 
 |  | 
 | 	added paranoid testing in t11 to make sure font files look ok. | 
 |  | 
 | May 13, 1991: | 
 | 	moved evaluation of \(xx from copy mode to non-copy mode, so that | 
 | 	weird character names wouldn't get reevaluated in argument parsing. | 
 | 	installed july 27. | 
 |  | 
 | May 6, 1991: | 
 | 	increased size of hyphenation exception buffer to 512 from 128 | 
 |  | 
 | Apr 14, 1991: | 
 | 	added an extra redundant call of ptfont in setfp, since it appears | 
 | 	that some versions of adobe transcript assume that an "x font" command | 
 | 	means to change the actual font as well.  the fix preserves the current font. | 
 | 	thanks to david brailsford and friends for spotting the problem. | 
 |  | 
 | 	fixed up tests in alpha() in n8 to defend isalpha() against too-big inputs. | 
 | 	punct() argument had wrong type too.  thanks to rich drexler and peter nelson. | 
 |  | 
 | Mar 19, 1991: | 
 | 	fixed bug that prevented .rd from working with new corebuf organization. | 
 |  | 
 | 	fixed bug that caused .ig inside diversions to give bad storage | 
 | 	allocation.  thanks to arthur david olson, whose fix was on netnews | 
 | 	3 years earlier. | 
 |  | 
 | Mar 5, 1991: | 
 | 	huge table sizes for kanji. | 
 |  | 
 | Feb ??, 1991: | 
 | 	working on dealing with large alphabets, notably kanji. | 
 | 	added "defaultwidth" to font descriptions, for characters | 
 | 	not given an explicit width. | 
 |  | 
 | Jan, 1991: | 
 | 	added tex hyphenation, using standard tex data files, but not the | 
 | 	elaborate compressed trie, which is a lot of trouble to save maybe | 
 | 	40k bytes.  this appears to run at exactly the same speed as before. | 
 |  | 
 | 	so far this stuff reads into a fixed size array; that should change. | 
 | 	it should also be possible to deal with multiple languages. | 
 |  | 
 | 	the command .ha sets the algorithm.  .ha 1 => tex, with troff rules | 
 | 	if tex doesn't hyphenate;  .ha 0 gives troff rules, and .ha resets | 
 | 	to the default, which is tex.  the hyphenation algorithm is part of | 
 | 	the environment, a nod to a future in which i handle more than one | 
 | 	language. | 
 |  | 
 | 	replaced the fixed size corebuf array for string/macro storage by | 
 | 	a dynamic structure that can grow. | 
 |  | 
 | 	this appears to slow things down by maybe 3%.  the code is about | 
 | 	the same complexity. | 
 |  | 
 | Dec 27, 1990: | 
 | 	converted to ansi c, based on some work by ken thompson, but not | 
 | 	as thoroughly as he did.  there is a shell script unansi and an awk | 
 | 	program cvt that will help you step back in time if you do not have | 
 | 	an ansi c compiler. | 
 |  | 
 | 	moved the special-name characters up to 256 instead of 128, although | 
 | 	done in terms of ALPHABET, so one can pass 8 bit characters through. | 
 | 	removed lots of 0177's and similar numbers.  input is now not filtered, | 
 | 	and if a character with the 8th bit on comes in, it will go out again. | 
 |  | 
 | 	fixed t11.c to read character names in hex or octal as well as | 
 | 	single-character ascii. | 
 |  | 
 | 	unknown characters are now carried through with width = spacewidth. | 
 | 	needs a way to set widths. | 
 |  | 
 | 	removed all signal handling from troff.  you signal, you die. | 
 |  | 
 | 	added -d option to print version number. | 
 |  | 
 | Dec 7, 1990: | 
 | 	.fp 3 V VERYLONGNAME used to truncate the name to 10 chars; fixed. | 
 |  | 
 | 	increased the limit on FBUFSZ for tables with very long fields. | 
 |  | 
 | 	changed atoi1() to use double to avoid intermediate overflow. | 
 |  | 
 | 	moved filenames like /usr/lib/font into tdef.h for easy change. | 
 | 	removed some dreggish definitions. | 
 |  | 
 | 	cleaned up non-portable error printing stuff;  fixed up some messages. | 
 |  | 
 | Dec 12, 1989: | 
 | 	Removed the .! command, an undocumented synonym for .sy. | 
 |  | 
 | Dec 4, 1989: | 
 | 	Another wart to the \X code, to try to preserve blanks in all situations. | 
 |  | 
 | Nov 17, 1989: | 
 | 	A number of small changes preparatory to getting rid of nroff. | 
 | 	The argument -Tnroff or -Tnroff-12 changes some internal values | 
 | 	so that the predicate .if n is true and certain arithmetic operations | 
 | 	are done as if nroff.  This design is not yet final. | 
 |  | 
 | Nov 7, 1989: | 
 | 	Fixed hyphenation for nov-ice, ad-vice, de-vice, ser-vice, *-vice. | 
 |  | 
 | Oct 11, 1989: | 
 | 	It is now permitted to do an explicit change to font S. | 
 | 	It is not clear what will break (though nothing seems to have). | 
 |  | 
 | Oct 10, 1989: | 
 | 	Modified flush code to always put out \nH instead of sometimes h. | 
 | 	This makes it easier to parse the output for positioning. | 
 |  | 
 | Sep 9, 1989: | 
 | 	Fixed internal representation of \D'~...' so that it | 
 | 	is immune to .tr ~ and variations.  No external change. | 
 |  | 
 | Aug 9, 1989: | 
 | 	Changed .tm so it outputs \e, \%, \-, \&, \(blank). | 
 | 	This might break indexing code. | 
 | 	Only in the new version, as are all subsequent fixes. | 
 |  | 
 | July, 1989: | 
 | 	A major internal change:  font information is read in ascii | 
 | 	instead of the weird binary format of makedev (which is now dead). | 
 | 	character names need not all appear in DESC;  new names that | 
 | 	appear when a font is used become part of the set of known names. | 
 |  | 
 | 	There are some flaky bits here (it's conceivable that some \N | 
 | 	number will collide with a real name), and it's probably 10-15% | 
 | 	slower.  Tant pis. | 
 |  | 
 | 	As a by-product, nroff no longer compiles.  I'll probably get | 
 | 	back to this, but an alternative is to bag it once and for all. | 
 |  | 
 | May 25, 1989: | 
 | 	Another bug in \l, this time when width is 0.  Not installed, | 
 | 	since it's in the new font version. | 
 |  | 
 | Apr 23, 1989: | 
 | 	Fixed bug in n9 that caused core dump with unterminated | 
 | 	\l command, like \l'1.5i | 
 |  | 
 | 	ptflush no longer called when -a is on. | 
 |  | 
 | Apr 12, 1989: | 
 | 	fixed bug in n2 that failed to suppress printing of \! | 
 | 	output when a -o was in effect. | 
 |  | 
 | Apr 5, 1989: | 
 | 	.fl and \X now cause output of size, font, hpos and vpos. | 
 | 	this is necesary for postprocessors that intend to insert | 
 | 	independent material, such as postscript. | 
 |  | 
 | Feb 1, 1989: | 
 | 	wait for .pi pipe to empty before exiting | 
 |  | 
 | Oct 2, 1988: | 
 | 	default is now -Tpost | 
 |  | 
 | Sep 19, 1988: | 
 | 	added abortive code to handle built-up characters by | 
 | 	passing something through as \D'b...'.  never used. | 
 |  | 
 | Jul 4, 1988: | 
 | 	replaced the sbrk nonsense in n3.c by calls to malloc. | 
 |  | 
 | 	\N now tests against proper font size. | 
 |  | 
 | 	installed Jaap Akkerhuis's code (mutatis mutandis) for | 
 | 	permitting up to 99 fonts, swapping them into font pos 0 | 
 | 	as needed.  fixes the long-standing problem of having | 
 | 	multiple font changes on a single output line. | 
 |  | 
 | Jul 2, 1988: | 
 | 	\X now preserves spaces even when contents are diverted. | 
 |  | 
 | 	\N code safer -- NTRTAB and NWIDCACHE enlarged. | 
 |  | 
 | Jul 14, 1987: | 
 | 	Fixed obscure bug causing incorrect indentation of .mc output. |