Jul 14, 1987:
	Fixed obscure bug causing incorrect indentation of .mc output.

Jul 2, 1988:
	\X now preserves spaces even when contents are diverted.

	\N code safer -- NTRTAB and NWIDCACHE enlarged.

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.

Sep 19, 1988:
	added abortive code to handle built-up characters by
	passing something through as \D'b...'.  never used.

Oct 2, 1988:
	default is now -Tpost

Feb 1, 1989:
	wait for .pi pipe to empty before exiting

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.

Apr 12, 1989:
	fixed bug in n2 that failed to suppress printing of \!
	output when a -o was in effect.

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.

May 25, 1989:
	Another bug in \l, this time when width is 0.  Not installed,
	since it's in the new font version.

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.

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.

Sep 9, 1989:
	Fixed internal representation of \D'~...' so that it
	is immune to .tr ~ and variations.  No external change.

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.

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).

Nov 7, 1989:
	Fixed hyphenation for nov-ice, ad-vice, de-vice, ser-vice, *-vice.

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.

Dec 4, 1989:
	Another wart to the \X code, to try to preserve blanks in all situations.

Dec 12, 1989:
	Removed the .! command, an undocumented synonym for .sy.

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 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.

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.

Feb ??, 1991:
	working on dealing with large alphabets, notably kanji.
	added "defaultwidth" to font descriptions, for characters
	not given an explicit width.

Mar 5, 1991:
	huge table sizes for kanji.

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.

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.

May 6, 1991:
	increased size of hyphenation exception buffer to 512 from 128

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.

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.

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.

Nov 8, 1991:
	add a maplow(towlower...) in n8.c to handle brain-damaged libraries.

Dec 13, 1991:
	parameterize the font directories, etc., so can be set in makefiles.
	added -N argument to run as nroff.

Dec 17, 1991:
	copy 3rd argument in .fp commands to x font ... lines when it contains
	a /, for testing fonts locally.

Jan 2, 1992:
	fiddle setfp so doesn't put out font stuff if -a turned on.

Jan 28, 1992:
	fixed .tm \(mi to print something sensible.  thanks to jaap.

Mar 1, 1992:
	input mechanism rearranged to use getc() instead of stack of
	explicit input buffers.  5-10% slowdown.

Mar 12, 1992:
	rearranged tests in popf so that .so is closed properly before
	moving on to the next macro package.

Mar 13, 1992:
	\n(sb initialized wrong in setwd().

	TYPESETTER=foo troff -Tpost used foo instead of post.

Mar 30, 1992:
	added test in getword to avoid hyphenating things with motions
	(and avoid a core dump sometimes too).

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

Apr 17, 1992:
	casefi(), n5.c: .u register should be 0 or 1, not incremented
	with each .fi.

May 12, 1992:
	n1.c: need p++ after strrchr to skip / in program name.
	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.

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.

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)

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.

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)


Oct 12, 1992:
	(comments 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.

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.

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.

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'').

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.

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

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).

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).

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.

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 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 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).

June 24, 1993 (Rich):
	-V option added for DWB3.4 (rich)

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.

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.

July 12, 1993:

	Fixed a typo in the version stuff, noticed by Rich

July 14, 1993:

	Coding error made the tab type R not function properly

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 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 21, 1993:

	Turn on the escape mode if the end macro is called.

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 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.

Aug 3, 1993:

	Should check return value in alloc (n3.c), to prevent core dump
	when memory gets tight.

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 5, 1993:

	Prevent character sign extension for 8-bit charnames diversions
	etc. by unpair

Aug 6, 1993:

	 Slightly more eficient way of skipping to the end of a
	 string/macro

Aug 9, 1993:

	A much faster way to find the end of a string/macro, by
	remembering that when defined.

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 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 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
