9base

revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log | Files | Refs | README | LICENSE

FIXES (24982B)


      1 March 11, 1994
      2 
      3 	If we are just plain old nroff (and not doing UNICODE) we should
      4 	only Lookup characters, not Install when we don't know them.
      5 	If we are troff, we Install them anyway
      6 
      7 March 8, 1994
      8 
      9 	Nroff had problems with parsing quoted white space as options or
     10 	character code in some terminals tables. Changed by having scanf
     11 	include white space when necessary as suggested by Rich.
     12 
     13 March 1, 1994
     14 
     15 	Made sanity check for terminal type depending on the trace level;
     16 	trace level set with -tn flag at start up
     17 
     18 22 Feb, 1994
     19 
     20 	More pointer shuffling fixes.
     21 
     22 18 Feb, 1994
     23 
     24 	More disabling of multibyte stuff. Fixed bug in n5.c: casetm didn'
     25 	know about the new format in the fontables.
     26 
     27 Feb 17, 1994
     28 
     29 	Removed extra include <setlocale> from n1.c
     30 
     31 	Fixed dubious pointer shuffling in n7.c, t10.c & n8.c. Thanks Rich!
     32 
     33 Feb 10, 1994
     34 
     35 	Disabled the multybyte stuff; only plan 9 will get it.
     36 
     37 Jan 24, 1994
     38 
     39 	Fixed nasty bug discovered by td, which caused core dumps on
     40 	\D'l-0.002775i 0i' and apparently all numbers closer to 0
     41 	than -.002775. Fixed in storeline() and storeword() (n7.c).
     42 
     43 Dec 16, 1993
     44 
     45 	nroff & troff -N were looking for the TYPESETTER variable, causing
     46 
     47 	troff: cannot open /sys/lib/troff/term/tab.202; line 1, file stdin
     48 
     49 	fixed my moving getenv("TYPESETTER") to t10.c in t_ptinit(void).
     50 
     51 Dec 3, 1993:
     52 
     53 	The sequence \s+2\H'+10' came sometimes out in the wrong order
     54 	(x H before s), so there wasn't a difference bewteen \s+2\H'+10'
     55 	and \H'+10'\s+2. Now the fonts bits of the CHARHT are used to
     56 	register the current pontsize, so we can issue a s10 in t10.c
     57 	if needed. A bit sneaky.
     58 
     59 	Try to prevent double slashes in path names. Especially under
     60 	plan9 things started to look ugly.
     61 
     62 	Exception word list now grows dynamic.
     63 
     64 Nov 30, 1993:
     65 
     66 	Allow multiple calls to .pi, requested by Rob.
     67 		.pi cat
     68 		.pi dogs
     69 	is now equivalent with
     70 		.pi cat | dogs
     71 
     72 
     73 	.ab now takes also optional error code:
     74 		.ab [n] [string]
     75 	If n and string, n is exit code, string is message
     76 	If n, n is exit code, ``User Abort, exit code n" is message
     77 	If !n and string, standard exit code, string is message
     78 	If !n and ! string, standard exit code, "User Abort" is message
     79 
     80 Nov 24, 1993:
     81 
     82 	Reordered code to keep the UNASNI scripts happy.
     83 
     84 	Nroff dumped core reading terminal tables: apparenty under plan 9,
     85 	scanf includes the '\n'; added test for '\0' in parse in n10.c.
     86 
     87 	Relative tab settings (.ta +1C +2C) didn't work; anding the
     88 	previous value with TABMASK fixes this (caseta).
     89 
     90 Nov 23, 1993:
     91 
     92 	Included code, originally done by bwk for plan 9, to handle
     93 	multi-byte characters.
     94 
     95 Nov 3, 1993:
     96 
     97 	``pair internal'' two char names by shifting 16 bits. Will allow
     98 	the use of 16 bit characters sets (Unicode in plan9 etc.) for
     99 	macro's etc.
    100 
    101 Oct 20, 1993:
    102 
    103 	Word & line buffers are now dynamic: No more word or line overflow
    104 	unless when we run out of memory.
    105 
    106 Oct 11, 1993:
    107 
    108 	lost diversion warning pops up regularly with man macro's. Due
    109 	to a possible macro coding problem. Triggered by something like
    110 	troff -man:
    111 		.TP
    112 		.TP
    113 		foo
    114 		.ex
    115     	Minimal code:
    116 		.di aa
    117 		throw away this diversion (aa) while being defined.
    118 		.rm aa
    119 		.br
    120 		.di
    121 
    122 	Fixed by disallowing .rm to throw away current diversion. The
    123 	rn request will complain with:
    124 
    125 		cannot remove diversion aa during definition; etc.
    126 
    127 Sep 29, 1993:
    128 
    129 	Some long standing fixes which never went back in the source.
    130 	Thanks to Janet & Rich.
    131 
    132 Sep 28, 1993:
    133 
    134 	Changed getach() (n1.c), so it does't consider truncated
    135 	special characters as (8-bit) ascii.  STX ETX ENQ ACK and BELL
    136 	are still allowed for the ultimate backwards compatibility.
    137 
    138 	Some code changes, so real ANSI compilers like the SGI version
    139 	(acc from Sun is a poor excuse for an ANSI compiler) don't
    140 	barf.  Some compromises (static Tchar wbuf in n9.c) allowed so
    141 	the unansified stuff for non-ansi compilers (cc on Sun's) will
    142 	work as well.
    143 
    144 Sep 9, 1993:
    145 
    146 	Be nice to Gerard. Now also word spaces in .tl and after
    147 	tabs/fleids etc.
    148 
    149 Aug 12, 1993:
    150 
    151 	Tabs setting can now be humongous. We also allow 99 tabs to
    152 	accomodate tbl. As a side effect, NTM buffers are now 1K
    153 
    154 Aug 11, 1993:
    155 
    156 	.R register, now contains maximum number of addessable
    157 	registers minus the number actually used.
    158 
    159 	Small esthetic changes in error messages; removed a statement
    160 	which wasn't reached anyway.
    161 
    162 Aug 10, 1993:
    163 
    164 	Some more speed hacks: be smarter doing the linear table
    165 	lookups in alloc() and finds().
    166 
    167 	The real name of the det diversion size macro is now gd.
    168 
    169 Aug 9, 1993:
    170 
    171 	A much faster way to find the end of a string/macro, by
    172 	remembering that when defined.
    173 
    174 Aug 6, 1993:
    175 
    176 	 Slightly more eficient way of skipping to the end of a
    177 	 string/macro
    178 
    179 Aug 5, 1993:
    180 
    181 	Prevent character sign extension for 8-bit charnames diversions
    182 	etc. by unpair
    183 
    184 Aug 4, 1993:
    185 
    186 	Growing the dynamical macro/strings name space and registers
    187 	space (See the experiment of 21 July) now with bigger
    188 	increments. Casts added to satisfy non-ANSI compilers.
    189 
    190 Aug 3, 1993:
    191 
    192 	Should check return value in alloc (n3.c), to prevent core dump
    193 	when memory gets tight.
    194 
    195 July 28, 1993:
    196 
    197 	New request: .sg <div> sets the dn and dl registers to the size
    198 	of the diversion named in the argument. Doesn't do anything
    199 	when the named diversion doesn't exist. The name sg is
    200 	temporary until we find a better one.
    201 
    202 July 21, 1993:
    203 
    204 	Experiment: Macro space  & registers name allocated
    205 	dynamically. Note that current reallocation occurs in
    206 	increments of 1, to force the code to be executed a lot; a kind
    207 	of stress testing. Also, eight bit characters allowed in
    208 	macro/string names.
    209 
    210 July 21, 1993:
    211 
    212 	Turn on the escape mode if the end macro is called.
    213 
    214 July 20, 1993:
    215 
    216 	Tracing mode now default off
    217 
    218 	Don't print s stackdump either when a file specfied on the
    219 	command line argument cannot be opened
    220 
    221 July 15, 1993:
    222 
    223 	Don't print useless line & current file informations when a
    224 	file specfied on the command line argument cannot be opened.
    225 
    226 	Sun ansi compiler doesn't default adhere to standards. Undid
    227 	the kludge in tdef.h
    228 
    229 July 14, 1993:
    230 
    231 	Coding error made the tab type R not function properly
    232 
    233 July 12, 1993:
    234 
    235 	Fixed a typo in the version stuff, noticed by Rich
    236 
    237 July 9, 1993:
    238 
    239 	Added the dwb home configuration stuff, thanks RIch. Also,
    240 	NCHARS is big enough. Added a fflush to casetm, so .fm <file>
    241 	will be up to date.
    242 
    243 June 25, 1993 (Rich):
    244 
    245     -t option
    246 
    247 	reinstated for the sake of compatibility. Some old
    248 	shells scripts and man(1) from SunOs want this, sigh
    249 
    250     Compiler and system dependencies
    251 
    252 	Some systems pull in sys/types.h via #include <time.h> and then
    253 	the compiler complains about two ushort typedefs. Therefore,
    254 	ushort is now Ushort (and uchar Uchar).
    255 
    256 	The SVID specifies a strdup, POSIX doesn't, anyway, troff
    257 	provides its own version, slightly different then the standard
    258 	one. A To prevent name clashes with that definion, renamed to
    259 	strdupl.
    260 
    261 June 24, 1993 (Rich):
    262 
    263 	-V option added for DWB3.4 (rich)
    264 
    265 May 18, 1993:
    266 
    267     Trivial fix (.cf) request for troff -a 
    268 
    269 	issuing
    270 
    271 		.cf /dev/null
    272 
    273 	with troff -a gives some spurious output:
    274 
    275 		H720
    276 		H720
    277 		s10
    278 		f1
    279 
    280 	fixed  by checking for ascii mode it ptesc(), ptps() and
    281 	ptfont() in t10.c
    282 
    283 
    284     Enhancement
    285 
    286 	Added a .tm request to roff. Works just like .tm, but now
    287 	it will do it to file. The name is coined by Carmela. Great
    288 	for creating indeces & toc's (we hope).
    289 
    290 May 18 1993:
    291 
    292     Compatibilty change
    293 
    294 	Somebody complained that his favorite macro didn't work:
    295 	it had a BELL (^G) in the name.  This was a non-documented
    296 	feature of earlier versions of troff (although the
    297 	documentation actually doesn't say that you can. (They can
    298 	only be used for delimiters or with the tr request), so it
    299 	isn't that important).
    300 
    301 	But the sake of eternal backward compatibilaty I allowed
    302 	some control characters like, STX, ACK,  etc. also be part
    303 	of a macro/string name.
    304 
    305 	While at it, I made it also possible to have eight bit
    306 	characters be part of the name. It might be that this screws
    307 	up the way users think about these things. For UNICODE
    308 	versions, they probably want to do that as well, and that
    309 	won't work as easy, (because these characters are 16-bits
    310 	wide), so it is dubious whether we actually want this.
    311 
    312 	BTW. Now
    313 
    314 		.de \(ts\ts
    315 		.tm terminal sigma macro
    316 		..
    317 		.\(ts\(ts
    318 
    319 	also works, as long the internal cookie for ts isn't more then
    320 	eight bits.
    321 
    322 May 12, 1993:
    323 
    324     Syntax change
    325 
    326 	Some requests accept tabs as a separator, some don't and
    327 	this can be a nuisance.  Now a tab is also recognized as
    328 	an argument separator for requests, this makes
    329 
    330 		.so	/dev/null
    331 
    332 	works.
    333 
    334 	To be more precise, any motion character is allowed, so
    335 
    336 		.so\h'5i'/dev/null
    337 
    338 	will work as well, if one really wants that.
    339 
    340 	It will be a problem for users who really relied on this as in
    341 
    342 		.ds x	string
    343 	
    344 	and expect the tab to become part of the string a, but I haven't
    345 	seen any use of that (obscure trick).
    346 
    347 May 6, 1993:
    348 
    349     Eileen count fixed
    350 
    351 	Troff sometimes went in a loop, and exited with: ``job
    352 	looping; check abuse of macros'' (also known as the Eileen's
    353 	loop). It can be forced with the next trivial programme:
    354 
    355 		.de ff
    356 		.di xx
    357 		..
    358 		.wh -1 ff
    359 		.bp
    360 
    361 	Basically what happens is that a page transition now will
    362 	happen in a diversion, which doesn't make sense. Wat really
    363 	happens is that eject() (in n7.c) doesn't eject the frame
    364 	because we are in a diversion.  This cause the loop in n1.c
    365 	(because now always stack->pname <= ejl). Adding check on
    366 	whether we are not in a diversion takes care of the problem.
    367 
    368 March 30, 1993:
    369 
    370     Need request, .ne
    371 
    372 	When there is a begin of page trap set, and the first thing
    373 	in the file is a .ne request, the trap gets fired, but,
    374 	the x font R etc. cookies doen't come out, because the
    375 	troff thinks that the first page pseudo transition already
    376 	took place.  Fixed by forcing the start of the first page
    377 	in the casene request with the same code as in casetl (which
    378 	caused a similar problem quite some time ago).
    379 
    380     Change to .cf request ``Here document''
    381 
    382 	If the argument of .cf starts with a <<, the rest of it is taken
    383 	as an EOF token. It will reat the rest of the input until it hits
    384 	the EOF token and copies it to the output. This is similar as
    385 	the shell's ``here document'' mechanisme and put in place to
    386 	improve the kludgy way picasso, picpack etc. now include
    387 	postscript.
    388 
    389     Using troff -TLatin1 (DWB version) and \N'...' caused core dump
    390 
    391 	In t11, in chadd, it should test on NCHARS - ALPHABET to see
    392 	whether we run out of table space (and we probably should beaf
    393 	up NCHARS for the DWB version).
    394 
    395 March 16, 1993:
    396 
    397     Diversion rename bug fix
    398 
    399 	It is possible to get troff in an infinite loop by renaming a
    400 	diversion in progress, and calling it later with the
    401 	new name (as in .di xx, .rn xx yy, .yy). The effect depends on
    402 	whether troff already put stuff in the diversion or not.
    403 
    404 	Fix by having .rn also rename the current diversion (if
    405 	there is any and when appropriate).  If the diversion calls
    406 	itself by the new name and given the fix made on 11 nov
    407 	1992, this will now result in an error.  (BTW, the fix from
    408 	11 nov is improved: diversions nest, so we have to account
    409 	for that).
    410 
    411 December 18, 1992:
    412 	Some people have complete novels as comments, so we need
    413 	to skip comments while checking the legality of font files.
    414 	thaks Rixh
    415 
    416 December 16, 1992
    417 
    418 	Some people rely on the order that -r arguments are given,
    419 	so that troff -rC1 -rC3 ends up setting register C to 3.
    420 	Because cpushback() pushes things in a LIFO order back, we
    421 	have to do the same to get -r args in a FIFO order.
    422 
    423 Nov 17, 1992:
    424 
    425 	Giving a -rL8 option cuased the string .nr L 8 to be printed
    426 	on the output, using the wonderful 3b2. Some garbage was
    427 	left in buf[100] in main(). Fixed by setting buf[0] explicitly
    428 	to 0 (because some C-compilers complain about ``no automatic
    429 	aggregate initialization'').
    430 
    431 Nov 11, 1992:
    432 
    433     Diversion bug fix
    434 
    435 	If a diversion was being read and the input is faulty so
    436 	the diversion was reading in itself, it caused troff to
    437 	loop undefinitely. This was easily fixed by a test in
    438 	control(a,b) in n1.c.
    439 
    440 	Something similar things might happen with macros causing
    441 	the ``eileenct problem'', but I didn't look for that. We
    442 	have to wait until it happens.
    443 
    444 Oct 26, 1992:
    445 
    446     Numeric arguments:
    447 
    448 	Illegal argments are treated as missing arguments. This
    449 	changed the semantics of .ll, .ls, .in, .lg,  .ul, .cu .lt
    450 	(which acted as if the argument was 0) and .ps which was
    451 	simply ignored with an illegal argument.
    452 
    453 	Tidied up number parsing in atoi1(). This prevents arguments
    454 	like .x or 1.2.3.4 being interpret as a legal number (nonumb = 0)
    455 
    456     Numeric arguments error reporting:
    457 
    458 	Controlled by .pt, illegal numbers are now reported (default
    459 	trace mode is 1).  This is also true for the escapes:
    460 	\h'..', \v'..' \H'..', \S'..', \N'..', \D'..', \l'.., \L'..
    461 	and \x'..'.
    462 
    463 	\D'c' is the only drawing request which doesn't take a pair
    464 	of numbers as arguments, so a special case is put here in
    465 	setdraw() (This code actually could use an overhaul to get
    466 	better parsing. As long as the \D'..' cookies are machine
    467 	generated it is low on the priority list).
    468 
    469 	Don't generate an error if the illegal argument to a request
    470 	is a \}. It is too painful to do right (although it can be
    471 	done, but it would clutter getch() and getcho() even more).
    472 
    473     Input line numbers (.c register) bug fixes:
    474 
    475 	In not taken branches of .if or .ie, the input line #
    476 	(numtab[CD].val) should be raised when necessary (in eatblk()).
    477 
    478 	For concealed newlines, we still should count the line for input.
    479 
    480 	Setfield (n9.c) sometimes pushes the rest of the line back to
    481 	the input (including \n), without adjusting numtab[CD].val
    482 
    483 	Because .c (and so numtab[CD].val) is the number of lines read
    484 	and the error might actually happen in the current line
    485 	(before seeing the '\n), we need to apply correction in
    486 	errprint when nlflg set. (This correction needs to be undone
    487 	when inside a macro because the nlflg is set by reading the
    488 	args to the macro).
    489 
    490     Line number setting (.lf) request bug fixes:
    491 
    492 	I interpret that the .c register will contain the number of
    493 	read lines, not including the current one.
    494 
    495 	Also, don't change the input line number when the first
    496 	argument of .lf is not a number.
    497 
    498 	As a net effect, the next input
    499 
    500 		.EQ
    501 		.EN
    502 		.ab
    503 
    504 	will generate the same output whether eqn has been used or not.
    505 
    506     If request bug fix:
    507 
    508 	A ``.if page .tm foo'' caused the next line being ignored;
    509 	This bcause when the 2nd delimiter of a string couldn't be
    510 	found in cmpstr, the next line was always eaten. Solution:
    511 	in caseif1, if the condition is false, we should check
    512 	nlflg before eating a block.  (Note: We might have eaten
    513 	\{\ as well.  We could disallow the \{\ in a string to be
    514 	compared to prevent that but that might break other things).
    515 
    516     Enhancement to .pt:
    517 
    518 	The .pt now pops the previous values when no argument is
    519 	specified. Turned out to be handy when chasing for problems.
    520 	Just ``bracked'' the code with .pt 7 and .pt and you get
    521 	a trace of only that block. The meaning of the arguments
    522 	is now:
    523 		01      trace numeric arguments (default on)
    524 		02	trace requests
    525 		04	trace macros
    526 
    527     Abort request (.ab) beautification:
    528 
    529 	Don't print the extra carriage return when .ab is called
    530 	without an argument.
    531 
    532 Oct 12, 1992:
    533 
    534 	(Comments & spelling errors from this day on by jaap)
    535 
    536 	replaced 32767 by INT_MAX in several places to allow for very
    537 	long pages (on 32-but machines).
    538 
    539 	The ``.fp 1 R   \"COMMENT'' complains about ``./troff: Can't
    540 	open font file /usr/lib/font/devpost/h'' on some systems. It
    541 	sees the tab as part of the optional font file.  Apparently it
    542 	is system dependent whether isgraph() includes the tab
    543 	character.  Fixed by using getach() in getname() in n1.c
    544 	instead.
    545 
    546 Aug 28, 1992:
    547 	removed call to popi from rdtty();  it was eating up the
    548 	rest of the macro if it was used from within one.  (thanks, jaap)
    549 
    550 
    551 Jul 21, 1992:
    552 	added extra test in nextfile() to pop current input file
    553 	only if not in .nx command.  thanks to jaap.
    554 
    555 	added test in getword() to avoid hyphenating after \z character,
    556 	which prevents any hyphenation inside \X'...'.  thanks to jaap.
    557 
    558 	added, then removed, code in getword() to prevent hyphenating
    559 	anything shorter than 6 characters.  looks like it changed a
    560 	lot more than i thought.
    561 
    562 Jul 12, 1992:
    563 	added .pt request to trace macros and requests (from jaap).
    564 	.pt N Print trace of macros (N=1), requests (N=2) or both (N=3)
    565 
    566 Jun 5, 1992:
    567 	added tests to t.twrest and t.twinit to avoid 0 deref in
    568 	n2 and n10, for nroff -t xxxxx.  thanks to Rich Drechsler.
    569 
    570 May 22, 1992:
    571 	added extern decls to e.g., void Tchar (*hmot)(void) in tdef.h
    572 	and added definition to ni.c, so pointers are defined explicitly.
    573 	makes it work on turbo c++ and probably others.
    574 
    575 	changed a couple of isdigit's and isgraph(getch()) to avoid
    576 	multiple evaluation (even though it shouldn't happen).
    577 
    578 	Made /usr/bin/nroff a shell script.
    579 
    580 May 12, 1992:
    581 	n1.c: need p++ after strrchr to skip / in program name.
    582 	thanks to Rich Drechsler.
    583 
    584 Apr 17, 1992:
    585 	casefi(), n5.c: .u register should be 0 or 1, not incremented
    586 	with each .fi.
    587 
    588 Apr 5, 1992:
    589 	fiddled n7.c and added _nmwid to the environment, to add a
    590 	5th argument to .nm:  the maximum number of digits in any
    591 	line number.  default is 3, which was previously hardwired in.
    592 
    593 	added jaap's code for yet another register which actually delivers
    594 	a string, called .S (so it can easily go in the switch in setn()
    595 	in n4.c); it delivers the current tabstop and alignment modes in
    596 	a format suitable for a subsequent .ta \n(.S command:
    597 		.ds T \n(.S
    598 		...
    599 		.ta \*T
    600 
    601 Mar 30, 1992:
    602 	added test in getword to avoid hyphenating things with motions
    603 	(and avoid a core dump sometimes too).
    604 
    605 Mar 13, 1992:
    606 	\n(sb initialized wrong in setwd().
    607 
    608 	TYPESETTER=foo troff -Tpost used foo instead of post.
    609 
    610 Mar 12, 1992:
    611 	rearranged tests in popf so that .so is closed properly before
    612 	moving on to the next macro package.
    613 
    614 Mar 1, 1992:
    615 	input mechanism rearranged to use getc() instead of stack of
    616 	explicit input buffers.  5-10% slowdown.
    617 
    618 Jan 28, 1992:
    619 	fixed .tm \(mi to print something sensible.  thanks to jaap.
    620 
    621 Jan 2, 1992:
    622 	fiddle setfp so doesn't put out font stuff if -a turned on.
    623 
    624 Dec 17, 1991:
    625 	copy 3rd argument in .fp commands to x font ... lines when it contains
    626 	a /, for testing fonts locally.
    627 
    628 Dec 13, 1991:
    629 	parameterize the font directories, etc., so can be set in makefiles.
    630 	added -N argument to run as nroff.
    631 
    632 Nov 8, 1991:
    633 	add a maplow(towlower...) in n8.c to handle brain-damaged libraries.
    634 
    635 Nov 2, 1991:
    636 	merged nroff into troff, based on Ken's plan 9 version.
    637 	merged nii.c into ni.c, removed tw.h, etc.  more work needed
    638 	to make this stuff cleaner.
    639 
    640 July 27, 1991:
    641 	added test in setn in n4 to fix bug that permitted things like
    642 	\n (ab to work "properly".  thanks to jaap for finding and fixing.
    643 
    644 	added paranoid testing in t11 to make sure font files look ok.
    645 
    646 May 13, 1991:
    647 	moved evaluation of \(xx from copy mode to non-copy mode, so that
    648 	weird character names wouldn't get reevaluated in argument parsing.
    649 	installed july 27.
    650 
    651 May 6, 1991:
    652 	increased size of hyphenation exception buffer to 512 from 128
    653 
    654 Apr 14, 1991:
    655 	added an extra redundant call of ptfont in setfp, since it appears
    656 	that some versions of adobe transcript assume that an "x font" command
    657 	means to change the actual font as well.  the fix preserves the current font.
    658 	thanks to david brailsford and friends for spotting the problem.
    659 
    660 	fixed up tests in alpha() in n8 to defend isalpha() against too-big inputs.
    661 	punct() argument had wrong type too.  thanks to rich drexler and peter nelson.
    662 
    663 Mar 19, 1991:
    664 	fixed bug that prevented .rd from working with new corebuf organization.
    665 
    666 	fixed bug that caused .ig inside diversions to give bad storage
    667 	allocation.  thanks to arthur david olson, whose fix was on netnews
    668 	3 years earlier.
    669 
    670 Mar 5, 1991:
    671 	huge table sizes for kanji.
    672 
    673 Feb ??, 1991:
    674 	working on dealing with large alphabets, notably kanji.
    675 	added "defaultwidth" to font descriptions, for characters
    676 	not given an explicit width.
    677 
    678 Jan, 1991:
    679 	added tex hyphenation, using standard tex data files, but not the
    680 	elaborate compressed trie, which is a lot of trouble to save maybe
    681 	40k bytes.  this appears to run at exactly the same speed as before.
    682 
    683 	so far this stuff reads into a fixed size array; that should change.
    684 	it should also be possible to deal with multiple languages.
    685 
    686 	the command .ha sets the algorithm.  .ha 1 => tex, with troff rules
    687 	if tex doesn't hyphenate;  .ha 0 gives troff rules, and .ha resets
    688 	to the default, which is tex.  the hyphenation algorithm is part of
    689 	the environment, a nod to a future in which i handle more than one
    690 	language.
    691 
    692 	replaced the fixed size corebuf array for string/macro storage by
    693 	a dynamic structure that can grow.
    694 
    695 	this appears to slow things down by maybe 3%.  the code is about
    696 	the same complexity.
    697 
    698 Dec 27, 1990:
    699 	converted to ansi c, based on some work by ken thompson, but not
    700 	as thoroughly as he did.  there is a shell script unansi and an awk
    701 	program cvt that will help you step back in time if you do not have
    702 	an ansi c compiler.
    703 
    704 	moved the special-name characters up to 256 instead of 128, although
    705 	done in terms of ALPHABET, so one can pass 8 bit characters through.
    706 	removed lots of 0177's and similar numbers.  input is now not filtered,
    707 	and if a character with the 8th bit on comes in, it will go out again.
    708 
    709 	fixed t11.c to read character names in hex or octal as well as
    710 	single-character ascii.
    711 
    712 	unknown characters are now carried through with width = spacewidth.
    713 	needs a way to set widths.
    714 
    715 	removed all signal handling from troff.  you signal, you die.
    716 
    717 	added -d option to print version number.
    718 
    719 Dec 7, 1990:
    720 	.fp 3 V VERYLONGNAME used to truncate the name to 10 chars; fixed.
    721 
    722 	increased the limit on FBUFSZ for tables with very long fields.
    723 
    724 	changed atoi1() to use double to avoid intermediate overflow.
    725 
    726 	moved filenames like /usr/lib/font into tdef.h for easy change.
    727 	removed some dreggish definitions.
    728 
    729 	cleaned up non-portable error printing stuff;  fixed up some messages.
    730 
    731 Dec 12, 1989:
    732 	Removed the .! command, an undocumented synonym for .sy.
    733 
    734 Dec 4, 1989:
    735 	Another wart to the \X code, to try to preserve blanks in all situations.
    736 
    737 Nov 17, 1989:
    738 	A number of small changes preparatory to getting rid of nroff.
    739 	The argument -Tnroff or -Tnroff-12 changes some internal values
    740 	so that the predicate .if n is true and certain arithmetic operations
    741 	are done as if nroff.  This design is not yet final.
    742 
    743 Nov 7, 1989:
    744 	Fixed hyphenation for nov-ice, ad-vice, de-vice, ser-vice, *-vice.
    745 
    746 Oct 11, 1989:
    747 	It is now permitted to do an explicit change to font S.
    748 	It is not clear what will break (though nothing seems to have).
    749 
    750 Oct 10, 1989:
    751 	Modified flush code to always put out \nH instead of sometimes h.
    752 	This makes it easier to parse the output for positioning.
    753 
    754 Sep 9, 1989:
    755 	Fixed internal representation of \D'~...' so that it
    756 	is immune to .tr ~ and variations.  No external change.
    757 
    758 Aug 9, 1989:
    759 	Changed .tm so it outputs \e, \%, \-, \&, \(blank).
    760 	This might break indexing code.
    761 	Only in the new version, as are all subsequent fixes.
    762 
    763 July, 1989:
    764 	A major internal change:  font information is read in ascii
    765 	instead of the weird binary format of makedev (which is now dead).
    766 	character names need not all appear in DESC;  new names that
    767 	appear when a font is used become part of the set of known names.
    768 
    769 	There are some flaky bits here (it's conceivable that some \N
    770 	number will collide with a real name), and it's probably 10-15%
    771 	slower.  Tant pis.
    772 
    773 	As a by-product, nroff no longer compiles.  I'll probably get
    774 	back to this, but an alternative is to bag it once and for all.
    775 
    776 May 25, 1989:
    777 	Another bug in \l, this time when width is 0.  Not installed,
    778 	since it's in the new font version.
    779 
    780 Apr 23, 1989:
    781 	Fixed bug in n9 that caused core dump with unterminated
    782 	\l command, like \l'1.5i
    783 
    784 	ptflush no longer called when -a is on.
    785 
    786 Apr 12, 1989:
    787 	fixed bug in n2 that failed to suppress printing of \!
    788 	output when a -o was in effect.
    789 
    790 Apr 5, 1989:
    791 	.fl and \X now cause output of size, font, hpos and vpos.
    792 	this is necesary for postprocessors that intend to insert
    793 	independent material, such as postscript.
    794 
    795 Feb 1, 1989:
    796 	wait for .pi pipe to empty before exiting
    797 
    798 Oct 2, 1988:
    799 	default is now -Tpost
    800 
    801 Sep 19, 1988:
    802 	added abortive code to handle built-up characters by
    803 	passing something through as \D'b...'.  never used.
    804 
    805 Jul 4, 1988:
    806 	replaced the sbrk nonsense in n3.c by calls to malloc.
    807 
    808 	\N now tests against proper font size.
    809 
    810 	installed Jaap Akkerhuis's code (mutatis mutandis) for
    811 	permitting up to 99 fonts, swapping them into font pos 0
    812 	as needed.  fixes the long-standing problem of having
    813 	multiple font changes on a single output line.
    814 
    815 Jul 2, 1988:
    816 	\X now preserves spaces even when contents are diverted.
    817 
    818 	\N code safer -- NTRTAB and NWIDCACHE enlarged.
    819 
    820 Jul 14, 1987:
    821 	Fixed obscure bug causing incorrect indentation of .mc output.