summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic/knuth/errata/errorlog.tex')
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errorlog.tex2924
1 files changed, 2924 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex b/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex
new file mode 100644
index 00000000000..dc4845c1c19
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex
@@ -0,0 +1,2924 @@
+% Appendix to the Errors of TeX paper (updated)
+% Section numbers now adjusted to TeX 3.0 equivalents
+% NB: tab marks are significant in this file, they signal continuation lines
+%\magnification=\magstephalf
+%\pageno=35
+\input logmac
+* 10 Mar 1978
+L1. Rename a few external variables to make their first six letters unique.
+D2. Initialize \\{escape_char} to $-1$, not 0 [it will be set to the
+ first character input]. @240
+L3. Fix bug: The test `$\\{id}<\O{200}$' was supposed to distinguish one-letter
+ identifiers from longer (packed) ones, but negative values of
+ \\{id} also pass this test. @356
+B4. Fix bug: I wrote `{\bf while} $\alpha\land(\beta\lor\gamma)$' when I meant
+ `{\bf while} $(\alpha\land\beta)\lor\gamma$'. @259
+R5. Initialize the input routines in |INITEX| [at this time a short,
+ separate program not under user control], in case errors occur. @1337
+E6. Don't initialize \\{mem} in |INITEX|, it wastes time. @164
+B7. Change `\\{new_line}' [which denotes a lexical scanning state] to
+ `\\{next_line}' [which denotes
+ \\{carriage_return} and \\{line_feed}] in print commands.
+F8. Include additional test `$\\{mem}[p] \ne 0\; \land$' in \\{check_mem}. @168
+M9. Fix inconsistency between the \\{eq_level} conventions of \\{macro_def} and
+ \\{eq_define}. @277
+# About six hours of debugging time today.
+# |INITEX| appears to work,
+ and the test routine got through \\{start_input},
+ \\{chcode} [the \TeX78 command for assigning a \\{cat_code}],
+ \\{get_next}, and \\{back_input} the first time.
+* 11 Mar 1978
+I10. Insert space before `|(|' on terminal when opening a new file. @537
+F11. Put `$p\gets \\{link}(p)$' into the loop of \\{show_token_list},
+ so that it doesn't loop forever. @292
+L12. Shift the last item found by \\{scan_toks} into the \\{info} field.
+ [With |SAIL| all packing of fields was done by arithmetic operations,
+ not by the compiler.] @474
+B13\>12. Fix the previous bugfix: I shifted by the wrong amount. @474
+I14. Add a feature that prints a warning when the end of a file page occurs within
+ a macro definition or call. [System dependent.] @336
+# Unintended bugs in my test routine [a format intended eventually to typeset
+ {\sl The Art of Computer Programming\/}] helped check out the
+ error recovery mechanisms.
+ For example, I had `|\lft{#}|' instead of `|\lft{##}|' inside a macro,
+ and three cases of improper |{|~and~|}| nesting.
+F15. Add the forgotten case `\\{set_font}:' to \\{eq_destroy}. @275
+C16. Change |\require| to |\input|. @376
+F17. Add code for the case $\\{cur_cmd}=0$ [later known as the case
+ `$\,t\ge\\{cs_token_flag}$'] when scanning a tokenlist. @357
+# That's the first ``big'' error I've spotted so far.
+I18. Introduce a `|d|' option in the error routine, to facilitate debugging. @84
+L19. Assign a floating-point constant \\{ignore_depth} to \\{prev_depth},
+ instead of assigning the integer constant \\{flag}
+ [since \\{prev_depth} is type \\{real} in \TeX78]. @215
+I20. Improve the readability and spacing of \\{show_node_list} output. @182,187
+F21. Set the variable $v$ before using the {\bf case} construction in
+ \\{show_node_list}, because there's one case where $v$
+ didn't receive a value [as part of the field unpacking]. @182
+# About seven hours today.
+* 12 Mar 1978
+# One hour to enter yesterday's corrections and recompile.
+# At this point \TeX\ correctly located further unintended syntax errors
+ in |acphdr| [the test file].
+I22. Insert \\{debug_help} into \\{succumb}, giving a chance to look at memory
+ before the system dies. @93
+D23. Use \\{eq_destroy} wherever necessary in \\{unsave}. @283
+L24. Change `$t \gets (t-1)$ mod 8' to `$t \gets (t-1)$ land~7' in \\{id_name},
+ since |SAIL| has $-1$~mod~$8 = -1$. [At this time, \\{id_name} is a
+ routine that unpacks control sequence names, according to a scheme
+ that will become obsolete after change \#422.]
+S25. Remove the space that appears at end of paragraph.
+ (I hadn't anticipated that.) @816
+L26. Throw away unwanted \\{line_feed} after getting a \\{carriage_return}
+ in response to \\{in_chr_w} [a system routine for
+ input from the terminal]. @83
+B27. Delete spurious call to \\{flush_list} in \\{end_token_list}. @324
+# Why did I make such a silly mistake?
+F28. Fix bug in \\{get_x_token}: I forgot to say `\\{macro_call}' (which is the
+ main point of that routine)! @380
+# While tracking that bug down, I found out incidentally that kerning is okay.
+# Also \TeX\ correctly caught an error |0p| for |0pt|.
+L29. Fix bug in \\{scan_spec} ({\bf while} instead of {\bf repeat}). @404
+M30. Make the table entries for |\hfill| and |\hskip| consistent with the
+ program conventions. @1058
+L31. Disable unforeseen coercion: When \\{scan_spec} put \\{hsize} on
+ \\{save_stack}, the value changed from \\{real} to \\{integer}. @645
+I32. Use `|*|' instead of `|-1.0|' for running dimensions
+ of rules in \\{show_node_list}. @176
+D33. Clear \\{mem}[\\{head}] to null in \\{push_nest} [in \TeX82, this
+ will be done by \\{get_avail}]. @216
+# A vrule link got clobbered because I forgot to do this.
+I34. Translate ASCII control codes to special form when displaying them. @48,68
+# Ligatures work, but \\{show_node_list} showed them funny.
+F35. Remember to clear parameters off \\{save_stack} in \\{package} routine. @1086
+# About eight hours today.
+* 13 Mar 1978
+D36. Introduce a new variable \\{hang_first} [later the sign of \\{hang_after}]. @849
+E37\>36. Simplify the new code, realizing that if $\\{hang_indent}=0$ then
+ \\{hang_first} is irrelevant. @848
+# Time sharing is very slow today, so I'm mostly reading technical reports while
+ waiting\/ {\bf three hours} for compiler, editor, and loading routine.
+# I'm not counting this as debugging time!
+# (Came back in the evening.)
+P38. Spruce up the comments in the \\{line_break} routine, which appears to be
+ almost working. @813
+D39. Rethink the setting of \\{best_line}; it's 1 too high in many cases.
+ [The final line of a paragraph was handled in a treacherous way.] @874
+D40. Compute proper initialization for
+ \\{prev_depth} when beginning an |\hbox|
+ with a paragraph inside. [This refers to a special `paragraph box'
+ construction, used when an hbox of specified size becomes overfull;
+ \TeX78 doesn't have the concept of internal vertical mode.] @1083
+D41. Also initialize \\{tail} in that case. @1083
+M42. Also put the result of line-breaking into the correct list.
+T43. Fix a typo in the \\{free_node} routine (`\\{link}' not `\\{llink}');
+ by strange chance it had been harmless until today. @130
+F44. Fix bug: \\{post_line_break} forgot to set \\{adjust_tail}. @889
+D45. Update \\{act_width} properly when looking for end of word while
+ line breaking. @866
+B46. Repair the ``tricky'' part of \\{get_node}: I used the \\{info} field
+ when I meant to say \\{llink}. @127
+# Now the |\corners| macro of |acphdr| works! [See |\setcornerrules|
+ in {\sl The \TeX book}, page 417.]
+D47. Reset \\{contrib_tail} properly in \\{build_page}. @995
+T48. Fix typo (|-| for |+|) in computation of \\{page_total}. @1004
+S49. Change the page-breaking logic: \TeX\ reached \\{fire_up} with
+ $\\{best_page_break}=\\{null}$ in one case,
+ since the badness was too bad. @1005
+M50. Perform the operation \\{delete_token_ref}(\\{top_mark}) only when
+ $\\{top_mark}\ne0$. @1012
+F51. Make \\{scan_toks} omit the initial |{| of an |\output| routine. @473
+I52. Insert a comma to make memory usage statistics look better. @639
+# About seven good hours of debugging today.
+# Tomorrow will be first-output day (I hope).
+* 14 Mar 1978
+# (Came in evening after sleeping most of day, to get computer at better time.)
+# (Some day we will have personal computers and will live more normally.)
+# 8:30pm, began to enter corrections to yesterday's problems.
+I53. Issue an error message for non-character in filename or in font name. @771
+I54. Display `|...|' for omitted stuff in \\{show_context} routine. @643
+L55. Watch out for the |SAIL| syntax `$\alpha+\beta\mathbin{\rm lsh}\gamma$';
+ it doesn't shift $\alpha+\beta$ left (only $\beta$). @464
+# That error was very hard to track down; it created a spurious link field
+ and sent $\\{hash}[0]=\null$|\beta| to the scanner!
+# I could have found this bug an hour sooner if I had looked at the correct
+ stack entries for \\{name} and \\{token_type}.
+D56. Show the correct page number when tracing pages before output is shipped. @638
+F57. Remember to nullify a box after using it. @1079
+I58. Issue an error message if\/ |\box255| isn't consumed by the output routine. @1015
+# I'm having trouble with the |BAIL| debugger;
+ it makes an illegal memory reference and dies,
+ when single-stepping past the entry to recursive procedures
+ \\{hlist_out} and \\{vlist_out}. So I have to reload and be careful
+ to go thru these procedures at high speed.
+P59. Fix bug in comment (memory parameter description said $\ge$ not $\le$). @11
+B60. Fix typo in definition of rule output (said $x,y$ not $\\{x0},\\{y0}$).
+ [This part of the code went away when |DVI| files were introduced.]
+B61. Correct the embarrassing bug in shellsort, where I said `$\le\\{str}[k]$'
+ not `$\le t$'.
+ [The first \TeX\ had to sort all output by vertical position on page.]
+M62. Make \\{start_input} set up \\{job_name} in the form needed by \\{shipout};
+ it uses obsolete conventions. @532,537
+L63. Insert |(| and |)| into the |SAIL| macro definition of \\{new_string}.
+ [This macro was for pre-|DVI| output.]
+M64. Unscramble the parameters of \\{out_rule}:
+ The declaration was $(\\{x0},\\{y0},\\{x1},\\{y1})$
+ while the call was $(\\{x0},\\{x1},\\{y0},\\{y1})$.
+# 4:30am, \TeX's first page is successfully output!
+# (It was `|\titlepage\setcpage1\corners\eject\end|'.)
+* 15 Mar 1978
+# 10:30pm. Today I'm instrumenting the line-breaking routine and putting it
+ through a bunch of tests.
+# (The inserted instrumentation had bugs that won't be mentioned here.)
+C65. Don't abort the job when \\{eq_destroy} redefines a
+ \TeX\ control sequence. @275
+# The first word of a paragraph won't be hyphenated \dots\ so be it!
+T66. Fix the typo in \\{line_break} that spoils the test for
+ `letters in the same font'. @896
+# The effect of that typo was to suppress all hyphenation attempts.
+B67\>25. Replace the space at paragraph end by fillglue, not by zero. @816
+L68. Pack the hyphen character properly into its node. @582
+T69. Fix a typo (`{\tentex\char'30}' for `|+|')
+ in the computation of \\{break_width}. @838
+M70. Change the |\end| maneuver; the present code doesn't end the job,
+ since I forgot that \\{back_input} uses \\{cur_tok}. @1054
+A71. Add a parameter to \\{try_break}, since the width is different at
+ a discretionary hyphen. [This problem will be solved differently in \TeX82,
+ when discretionaries become much more general.] @840
+F72. Bypass kern nodes in pre-hyphenation. @896
+F73. Supply code for the forgotten case `$<$ |"a"|' in pre-hyphenation.
+ [This case was later generalized to a test of \\{lc_code}.] @897
+B74. Change $\\{mem}[q]$ to $\\{prev_break}(q)$ in the
+ reverse-linking loop. @878
+# (Such blunders. Am I getting feeble-minded?)
+A75. Introduce special logic for \\{eject_penalty}; I was wrong
+ to think that forced ejection was exactly like an
+ infinitely negative penalty. @851
+A76. Use $(1+b)^2-p^2$ when computing demerits with $p<0$. @859
+# 6:30am. The line-breaking algorithm appears to be working fine
+ and efficiently.
+ On small measures (about 20 characters per line), it gives overfull boxes
+ instead of spaced out ones. Surprising but satisfactory.
+* 16 Mar 1978
+# 9pm. The plan for tonight is to test page breaking and more paragraphing.
+G77. Insert `|\topskip|' glue at beginning of page. @1001
+I78. Add `|\pausing|' feature. @363
+M79. Fix discrepancy: In \\{make_accent} I called \\{vpackage}
+ with a pointer to the first list item, but \\{vpackage} itself assumes
+ that the parameter is a pointer to that pointer. [The
+ \\{vpackage} of \TeX82 will be different.] @668
+# I checked for other lapses like that. Result: 14 calls OK, 12 NG.
+M80. Create a new temporary list head location, \\{hold_head}, since there's
+ a case where \\{vpackage} is improperly called with
+ parameter \\{temp_head}. [At this time \\{vpackage} uses \\{temp_head}
+ to make a list of all insertions found.] @1014
+# 11:30pm. The machine is tied up again.
+F81. Write code to handle charnodes in vlists; I forgot that I'd decided
+ to allow them. [Later I prohibited them again!] @669
+F82. Combine the page lists before pruning off glue
+ in \\{fire_up}; otherwise the pruning doesn't go far enough. @1017
+B83\>25. Fix typo where line-breaking starts: `\\{fill_glue}' should be
+ `\\{new_glue}(\\{fill_glue})'. @816
+I84. Add |/q| to |xspool| command (cosmetic change). [This changes a system
+ command that causes \TeX\ output to be printed on the Xerox Graphics
+ Printer (XGP), the progenitor of future laser printers;
+ the |/q| option says that the queue of printing requests should be
+ displayed on the user's terminal.] @642
+E85. Don't write a form feed after the last page of output. @642
+# To fix this, I reorganized \\{ship_out}, and it became simpler.
+T86. Correct a typo (`{\tentex\char'30}' for `|+|') in the \\{vlist_node} case
+ within \\{hlist_out}. [The output routines were quite different
+ at this time, because output went directly to the XGP.] @622
+I87. Change the message `|completed page|' to `|Completed for page|'. @638
+B88\>48. Fix yet another typo in the computation of \\{page_total}: My original
+ code said $\\{stretch}(p)$ instead of $\\{stretch}(q)$ (terrible). @1004
+P89. Document the dirty trick about \\{bot_mark}'s reference count.
+ [That trick is, fortunately, no longer useful.] @1016
+A90. Rethink the algorithm for contributing an insertion: The original code
+ tests for a page break after incrementing the totals but
+ before the \\{contrib_list} is updated. [\TeX78 handles insertions
+ in a hardwired manner that will be greatly generalized in \TeX82.]
+F91. Fix \\{get_node} again:
+ After the variable memory overflows, control falls through to \\{found}
+ instead of going to the \\{overflow} call. @125
+# I spent several hours tracking down that data structure bug!
+B92. Change \\{new_line} to \\{next_line} in yet another print command (see \#7).
+A93\>75. Amend the line-breaking algorithm:
+ |\break| in paragraph doesn't work with really bad breaks. @851
+# A problem to be diagnosed tomorrow: Each time I run the test program,
+ the amount of memory in use grows by 13 cells not returned.
+# Seven hours tonight.
+* 17 Mar 1978
+G94. Introduce \\{dead_cycles} to keep |\end| active until \\{ship_out}
+ occurs. @1054
+E95. Don't call \\{line_break} with an empty list. @1096
+S96. Take proper account of the (infinite) fillglue when computing
+ the width of a paragraph line preceding a display. @1146
+M97. Add a new parameter to \\{hpack} so that \\{line_break} won't be called
+ at the wrong time.
+ [This is for the soon-to-be-obsolete feature described in \#40.]
+L98. Give a warning message if there's an |\hfill| in the middle of a paragraph;
+ fillglue upsets the line breaker,
+ because floating-point calculations don't have sufficient accuracy. @868
+# I spent an hour looking for another bug in \TeX, but the following one was in \MF:
+ The \\{xgp_height} data in fonts had been supplied wrong.
+# It took two hours to recompile 32 fonts with proto-\MF.
+R99. Make \\{show_node_list} and \\{show_token_list}
+ more robust in the presence of software bugs. @182
+D100\>97. Do not remove nodes with \\{eject_penalty},
+ when the new parameter to \\{hpack} is \\{true}.
+E101\>97. Put a fast exit into \\{hpack}; e.g., at glue nodes, test `{\bf if}
+ \\{paragraphing} $\land$ $\langle$current width is large$\rangle$'.
+# 2am. I have to go to bed ``early'' tonight.
+* 18 Mar 1978
+# 3:30pm. (Saturday)
+I102. Add a parameter to \\{check_mem} (to suppress display unless needed). @167
+G103. Introduce a user-settable parameter |\maxdepth|, and
+ pass it as a parameter to \\{vpackage}. @668
+# I realized the need for |\maxdepth| while fixing insertions (see \#90).
+G104. Introduce a user-settable parameter for \\{line_break}: The constant
+ 2.0 in my original algorithm becomes |\jpar|
+ [later |\tolerance|], to be set like |\tracing|. @828
+D105. Reclaim the \\{eject_penalty} nodes removed during line-breaking. @879
+# (Those were the 13 extra nodes reported on Thursday.)
+# The \\{init_align} procedure worked right the first time!
+# Also \\{init_row}, \\{init_col}. But then\thinspace\dots
+S106. Rethink the command codes: \\{endv} in a token list has too high a
+ code for the assumptions of \\{get_next}. @207
+A107. Add a \\{prev_cmd} variable for processing delimited macro parameters;
+ the original algorithm loses track of braces.
+ [The rules will change slightly in \TeX82, and
+ \\{rbrace_ptr} will take on a similar function.] @400
+S108. Make the \\{get_next} routine intercept |&| and |\cr| tokens. @342
+# I'd thought I could just put |&| and |\cr| into
+ \\{big_switch} [i.e., in the stomach of \TeX, not the eyes];
+ that was a great big mistake.
+R109. Make more error checks on \\{endv}; e.g., it must not occur in
+ a macro definition or call. @780
+S110\>108. No, rethink alignments again; the new program still fails! @768
+# For the first time I can glimpse the
+ hairiness of alignment in general (e.g., `|\halign{\u#\v&...|'
+ when |\u| and |\v| are defined to include |&|'s and possible
+ alignments themselves).
+# I think there's a ``simple'' solution, by considering only whether
+ an alignment is currently active [in \S342].
+# 11:30pm. Went to bed.
+* 19 Mar 1978
+# Woke up with ``better'' idea on how to handle |&| and |\cr|.
+# (Namely, to consider a special kind of\/ |\def| whose parameters don't interrupt
+ on |&|'s and |\cr|'s.)
+# But replaced this by a much better idea (to introduce \\{align_state}).
+# 11pm. Began to use computer. Performed major surgery
+ (inserting \\{align_state} and updating the associated routines
+ and documentation).
+D111. Pop the alignment stacks in \\{fin_align}. @800
+T112\>110. Fix a (newly inserted) typo in \\{show_context}. @314
+D113\>110. Set \\{align_state} false when a live |&| or |\cr| is found.
+ [Originally \\{align_state} was of type \\{boolean}.] @789
+I114. Insert |\cr| when `|}|' occurs prematurely in an alignment. @1132
+M115. Remember to record \\{glue_stretch} when packaging an unset node. @796
+# I had a mistake in |acphdr| definition of\/ |\quoteformat|; also extra spaces.
+# My first test programs, used before today, were contrived to test macro
+ expansion, line-breaking, and page layout.
+# Next I'm using a test program based on Volume 2.
+C116. Make carriage-return, space, and tab equivalent for macro matching. @348
+F117. Omit the reference count node when displaying a mark. @176
+B118. Correct a silly slip: I wrote `\\{type_displacement}' instead of
+ `\\{value_displacement}' when packing data in a penalty node. @158
+M119. Don't go to \\{build_page} after seeing |\noindent|; \TeX\ isn't
+ ready for that.
+ [In the original program, this was an instance of a bad {\bf goto}.] @1091
+# I had undesired spaces coming thru the scanner in my macro definitions
+ of\/ |\tenpoint| [see {\sl The \TeX book}, page 414].
+# 4am. \TeX\ now knows enough to typeset page 1 of Volume 2!
+# Also it did its first ``math formula'' (namely `|$X$|') without crucial error.
+# (Except that the italic correction was missing for some reason.)
+D120. Remember to decrement \\{cur_level} in \\{fin_align}. [The routines will
+ eventually become more general and use \\{unsave} here.] @800
+D121. Remember to increment \\{cur_level} in error corrections by
+ \\{handle_right_brace}. [A better procedure will be adopted later.] @1069
+T122. Fix a typo: (`|{|' instead of `|}|') in error message for $\\{mmode}+
+ \\{math_shift}$. @1065
+R123\>99. Make \\{show_noad_list} more robust and more like the new
+ \\{show_node_list}. [The routines will be combined in \TeX82.] @690
+L124. Fix a typo in \\{char_box}: should say \\{font_info_real}.
+ [In \TeX78 a single array
+ is used for both \\{real} and \\{integer}; in \TeX82 things will be
+ \\{scaled}.] @554
+B125. Fix typos in the definitions of \\{default_rule_thickness} and
+ \\{big_op_spacing}; they shouldn't start at \\{mathex}(7). @701
+B126. Reverse the \\{before} and \\{after} conventions in math nodes. @1196
+# I had them backwards; this turned
+ hyphenation on just before math, and off just after it!
+# Seven and a half hours debugging today.
+ Got through the test program a little more.
+ But \TeX\ blew up on `|$Y+1$|'; tomorrow I hope to find out why.
+* 20 Mar 1978
+# 8pm. I decided to work next on a super-hairy formula.
+C127. Change `|\ascii|' to `|\cc|' (character code). [This name will change again
+ later, to `|\char|'.] @265
+E128. Don't bother to store a penalty node at the beginning of |$$| when
+ the paragraph-so-far fits on a single line, since such a penalty
+ has already been stored. [These conventions will change later, and
+ the |\predisplaypenalty| will always be stored.] @1203
+S129. Avoid reference to \\{tail} in \\{build_page},
+ if $\\{nest_ptr}>0$. @995
+B130. Correct a silly
+ slip in \\{math_comp} (the exact opposite of what I did in \#118). @1158
+B131. Rectify my mental lapse in \\{make_fraction}; I said \\{nucleus} instead of
+ \\{thickness}. @743
+F132. Mask off the math class when scanning delimiters. @1160
+C133. Allow an optional space after |\def{...}|. [This decision
+ will be retracted later.] @473
+# My test example is so complicated it causes the semantic stacks to overflow!
+L134. Don't test for no pages output by looking at the channel status. @642
+T135. Fix typo in definition of\/ |\mathop| (\\{open_noad} not \\{op_noad}). @1156
+A136. Rewrite \\{fin_mlist}, because `|\left(...\above...\right)|' doesn't
+ parse correctly; the |\left| goes into the numerator,
+ the |\right| into the denominator. @1184
+B137. Correct the use of \\{depth_threshold} in \\{print_subsidiary_data}:
+ Simple fields get shown while others look empty. @692
+I138\>78. Return the carriage before showing the first line of a new file
+ when pausing. @538
+M139. Fix bug: The call \\{show_noad_list}(\\{mem}[|..|]) should be
+ \\{show_noad_list}(|..|), in the \\{incompleat_noad} case
+ of \\{show_activities}. @219
+# 3am. The whole messy formula has been parsed correctly into a tree.
+# The easy part is done, now comes the harder part.
+F140. Don't shift single characters down in \\{make_op}. @749
+D141. Make \\{clean_box} return a box (as its name implies), not an hlist. @720
+# Font info still isn't quite right, it has the wrong value of \\{quad}.
+A142. Retain the italic correction when doing \\{rebox};
+ can make $\\{glue_set}\ne0$ a flag for this. [A better
+ solution will be adopted later.] @715
+B143. Fix the bug that makes \\{rebox} bomb out: $\\{value}(p)$ should be
+ $\\{value}(\\{mem}[p])$. @715
+# 6am; ten hours today. \TeX\ didn't do |$\pi\over2$| correctly, but was close.
+# I found that the \\{rebox} problem (\#142) went away when I fixed the
+ \\{clean_box} problem (\#141); but I
+ will leave the extra stuff about $\\{glue_set} \ne 0$
+ in the program anyway, just for weird cases.
+E144. Omit extra levels of boxing when possible in \\{clean_box}. @721
+# (To do this, I need to face the \\{rebox} problem anyway.)
+* 21 Mar 1978
+# 10pm. The computer is rather heavily loaded tonight.
+F145. Don't forget \\{thickness} when making a square-root sign (see \#131).
+ [The rule thickness will later be derived from the character height.] @737
+L146. Define $p$ local to the \\{make_fraction} routine. @743
+# Unwittingly using the global $p$ was a disaster.
+I147. Don't show the amount of \\{glue_set} when it's zero. @186
+D148\>142. Make \\{glue_set} nonzero in the result of \\{var_delimiter}. @706
+F149. Fix bug: The \\{math_glue} function didn't return any result. @716
+T150. Fix typo in \\{char_box} ($c$ not $w$); this caused a subscripted~$P$ to come
+ out the same width as an unsubscripted~$P$. [Later changes in the rules
+ will move this computation to \S755.] @709
+P151\>144. Revise \\{clean_box} to do operations that are needed
+ often because of the \\{rebox} change. @720
+D152. Use the new \\{clean_box} to avoid a bug in |\sqrt{\raise...}|. @737
+Q153. Change the definition of\/ |\not| so that it's a relation
+ (which will butt against the following relation). [All math
+ symbols and Greek letters are defined in |INITEX| at this
+ time, not in a changeable format definition.]
+I154. Give error message `{\tt Large delimiter must be
+ in mathex font}', instead of calling \\{confusion},
+ since the error can occur.
+ [This particular error is impossible in \TeX82.] @706
+F155. Change the use of $p$ in \\{var_delimiter}; it isn't always set when I say
+ {\bf goto} \\{found}. @706
+# Another font problem now surfaced: The mathex meta-font didn't compute \TeX\ info
+ in a machine-independent way.
+ (It took two hours to correct this.)
+D156. Don't forget to set $\\{type}(b)$ in all relevant cases of
+ \\{var_delimiter}. @708
+B157. Use the correct sign convention for \\{shift_amount} in \\{hpackage}. @653
+F158. Always kern by \\{delta} when there's no superscript. @755
+M159. Declare \\{space_table} to be $[0\,.\,.\,6,0\,.\,.\,6]$
+ not $[0\,.\,.\,7,0\,.\,.\,7]$; otherwise its entries are
+ pre\-loaded into the wrong positions. [The \\{space_table} in \TeX78 is
+ $7\times7$; it will become $8\times8$ in \TeX82,
+ represented as a string called \\{math_spacing}.] @764
+C160. Use a negative value, not zero, to represent a null delimiter.
+ [Actually zero will come back again later.] @685
+C161\>127. Change |\cc| to |\char|. @265
+L162. Don't use tricky subtraction on packed data when changing $q$ to
+ an \\{ord_noad} in \\{mlist_to_hlist}; subtraction isn't always safe. @729
+B163. Fix two typos in the \\{space_table} (|*| for |0|). @764
+F164. Initialize \\{cur_size} everywhere (I forgot it in two places). @703
+A165. Reset \\{op_noad} before resetting \\{bin_noad}. @728
+F166. Treat $\\{display_style}+\\{cramped}$ the same as \\{display_style}
+ inside \\{make_op}. @749
+B167. Shift the character correctly in the non-|\displaystyle| case of
+ \\{make_op}. @749
+# Still another font problem: The italic corrections are wrong because
+ the corresponding array was declared \\{real} in proto-\MF\ (and
+ italic corrections were used in nonstandard way in |mathex|).
+B168. Use \\{depth} instead of \\{height} in \\{var_delimiter}.
+ [Later, both were used.] @714
+Q169. Skew the accents according to the font \\{slant}. [Soon retracted.] @741
+# At this point I think nearly all the math routines have been exercised.
+# Tomorrow they should work!
+# Eight hours debugging today.
+* 22 Mar 1978
+# (Wednesday, but actually Thursday:
+ I began at midnight because I was proofreading a paper.)
+# I checked out the font access tables, slowly (i.e., all the |\mathcode|
+ and special-character name entries were catalogued).
+Q170\>169. Do {\bf not\/} consider slants after all in the math accent
+ routine, since slanted math letters are put differently into fonts. @741
+B171. Don't use $q$ for two different things simultaneously
+ in \\{make_math_accent}. @738
+F172. Fix bug in \\{compact_list} (I forgot to advance the loop variable).
+ [This procedure became unnecessary in \TeX82.]
+M173. Avoid conflict between \\{var_delimiter} and \\{mlist_to_hlist}, which
+ want to use \\{temp_head} simultaneously. @713
+T174. Fix bad typo in \\{overbar} routine ($b$ for $p$). @705
+# Finally \TeX\ got to \\{after_math} after dealing with that
+ hairy formula\thinspace\dots
+T175. Fix another bad typo: $p$ for $b$ this time. @1199
+L176. Insert more parentheses (twice) because of `|lsh|' precedence
+ in |SAIL|. @1199
+M177\>36. Use the new hanging-indentation conventions when formatting displayed
+ equations. @1199
+Q178. Recompute penalties so that break is allowed after \\{punct_noad}s. @761
+F179. Center the large delimiters vertically. @749
+Q180. Round all rule sizes (up) before drawing them. @589
+Q181. Provide more space over $x$ in $\sqrt x$, and more space atop vincula.
+ @705,737
+Q182. Make large delimiters large enough to cover formula height
+ (important for subscripts, superscripts). @762
+I183. Insert |/ntn=33| on XGP prompt message so that complex math
+ won't blow the device driver. [See \#84.]
+P184\>161. Update the comment about the meaning of\/ |\char|, since it
+ can be used in math mode. @208
+# Six hours today.
+* 23 Mar 1978
+# 11pm, Maundy Thursday.
+C185\>104. Make |\tracing| and |\jpar| follow block structure. @283
+# It took me two hours to enter yesterday's corrections,
+ because the changes were so numerous.
+M186. Fix bad call on \\{begin_token_list} when marks are to be scanned. @396
+# Now the formula looks like it should, modulo problems in fonts.
+Q187. Prevent an exponent from going below baseline + xheight/4. @758
+B188. Change \\{quad} to \\{math_quad} when finishing a display
+ (several places). @1199
+A189. Don't use \\{append_to_vlist} when putting an |\eqno| box on a separate
+ line, because the page shouldn't break at glue there.
+ [Later, the \\{append} will be used but preceded by an
+ infinite penalty.] @1205
+S190. Increase the input \\{stack_size}; \TeX\ may need to back up a lot. @11
+A191. Don't assume that $p$ always points to a glue node when
+ a page is broken. @1017
+A192. Use \\{epsilon} in \\{scan_spec} (I had used a different
+ small constant). [This was a kludge to avoid the extra
+ parameter later called \\{exactly} or \\{additional}.] @645
+R193. Introduce a new procedure \\{scan_positive_length}, to prevent
+ negative or zero lengths in \\{scan_rule_spec}.
+ [This restrictive rule will be ``overruled'' later.] @463
+B194. Fix ridiculous bug in the leaders routine of \\{vlist_out}:
+ I had the initialization {\sl inside\/} the loop! @635
+L195. Eliminate confusion between the two temp variables named $h$;
+ one is \\{real} and the other is \\{integer}. @629
+F196. Include forgotten case (\\{leader_node}) in \\{hlist_out}.
+ [Type \\{leader_node} will be absorbed
+ into \\{glue_node} in \TeX82.] @622
+F197. Don't forget to compute \\{x0} in variable horizontal rules. @624
+# Seven and a half hours today.
+# \TeX\ seems to be ready to tackle my test file based on Volume 2.
+S198. Calculate \\{y00} in horizontal rules as an integer number of pixels
+ from the baseline, so that the baseline doesn't jump. @589
+* 25 Mar 1978
+# 2am Saturday. (Might as well drop Friday.)
+D199\>185. Make \\{def_code} consistent with the new |\tracing| conventions.
+ [Many tracing options are packed into a single
+ parameter called |\tracing|.] @1233
+R200\>185. Don't allow users to change nonexistent things like |\catcode1000|. @1232
+F201\>110. Reset \\{align_state} at beginning of \\{init_align}. @774
+F202. Don't forget \\{scan_left_brace} after |\noalign|. @785
+F203\>110. Set $\\{cur_cs}\gets 0$ in \\{get_next}, after |\cr|
+ causes a switch to the $\langle v_j\rangle$ template. @342
+# Ouch, that was a big bad bug, which took me three hours to find
+ (since I thought \TeX's low-level scanning mechanism was working).
+# Note to myself: I\/ {\bf knew\/} it would be cleaner to define \\{get_next}
+ so that it sets \\{cur_cs} to zero every time it begins [i.e.,
+ in \S341, where this change will in fact be made in \TeX82].
+ But I had avoided this on grounds of efficiency in the inner loop.
+ Well, now I have earned this tiny bit of efficiency.
+D204. Prohibit the first word of an unavailable node from becoming negative.
+ [The storage allocator of \TeX78 uses
+ a negative value to signify a node that is available, just as
+ `$\\{link}=\\{max_halfword}$' will signal availability in \TeX82.] @124
+# That was another bad one, it's not my night.
+# At least I'm developing more subtle diagnostic techniques.
+M205. Remember to un-negate the top \\{save_stack} entry
+ when \\{handle_right_brace} finishes an \\{insert_group}.
+ [This routine was completely revised in \TeX82.] @1100
+F206\>185. Initialize |\jpar| [i.e., |\tolerance|]. @240
+B207. Correct the display of insertion nodes by \\{show_node_list}. @188
+R208. Prevent \\{show_token_list} from generating really long strings
+ when in a loop. @292
+D209. Increase the reference count of \\{bot_mark} when
+ \\{vpackage} finds it. [This was later the job of \\{fire_up}.] @1016
+M210. Remember that the tokenlist for a mark ends with a |}|. @1101
+D211. Don't let \\{vpackage} lose the top insert. (It fails when
+ the very first item is a |\topinsert|.) @1014
+A212. And when that stupid code is corrected, make it handle
+ insertions first-in-first-out. @1018
+# Seven hours today.
+* 26 Mar 1978
+# Easter Sunday, will work till sunrise.
+I213. Add an `|i|' feature to the \\{error} recovery routine. @87
+I214. Include a prompt. @87
+C215. Ignore space after |\noalign{...}|. @1133
+# Otherwise, things are going well tonight;
+ I'm finding more bugs in my test program than in \TeX.
+# The `|i|' feature is proving to be very helpful.
+# I increased the size of \\{mem}
+ (now $\\{lo_mem_max}=3500$, $\\{mem_max}=10000$).
+# In fact I just needed to increase it again
+ (now $\\{lo_mem_max}=4500$, $\\{mem_max}=11000$).
+R216. Make |INITEX| output \\{mem_top} for consistency checking. @1307
+A217. Calculate the size of delimiters by considering the enclosed formula's
+ distance from the axis, not from the baseline. @762
+# I'm having trouble with a |SAIL| compiler bug; I must rearrange the program,
+ more or less at random, until it
+ compiles correctly. I hope the bug isn't more severe than it appears.
+D218\>210. Don't put a new group on \\{save_stack} if a null mark is expanded.
+ [\TeX82 will remove the `|}|' from the mark text.] @386
+# I had to redo the typewriter-style font since its width tables were wrong.
+# And I increased low-memory size again to 5500, then 6500.
+# Finally the entire test program was \TeX ed. Happy Easter! Six hours today.
+* 27 Mar 1978
+# Beginning at 2:30am.
+A219. Move |\vcenter| processing to the first pass of \\{mlist_to_hlist};
+ otherwise the height, depth, subscripts, etc., are way off. @733
+C220. Omit space after closing |$$|. @1200
+# Spacing is wrong in the formula $Y_1+\cdots+Y_k$; I have to rethink the use
+ of three dots.
+G221. Make conditional thin space available to user as |\|{\tentex\char'34}.
+ [Later will retract this.] @226
+Q222. Introduce |\dispaskip| and |\dispbskip| [later called
+ |\abovedisplayshortskip| and |\belowdisplayshortskip|]. @226
+# Reminder: I need to test line-breaking with embedded math formulas.
+I223. Make sure that $\\{interaction}\ne\\{error_stop_mode}$
+ in the `|Whoa|' error [\\{fatal_error}]. @93
+B224. Fix a big mistake in the \\{style_node} routine (which points to a glue spec,
+ not to glue itself); somehow this didn't cause trouble yesterday.
+ [In \TeX78, style nodes double as placeholders for math glue
+ like thin spaces.] @732
+C225. Make |\fntfam| obey group structure. [\TeX78's |\fntfam| operation
+ is a combination of \TeX82's
+ |\textfont|, |\scriptfont|, and |\scriptscriptfont|.] @1234
+# At this point the test routine for Volume 2 works perfectly.
+# But I will change the page width in order to check harder cases.
+Q226\>178. Disable automatic line breaks after punctuation in math
+ (e.g., consider $f(x,y)$). @761
+S227. Represent italic corrections as boxes, not glue, so that they won't be broken.
+ [The |\kern| command doesn't exist yet.] @1113
+# Eight hours today.
+B228. Fix a bug that just clobbered the memory: Call \\{free_avail}, not
+ \\{free_node}, in the \\{ins_node} case of \\{vpackage}.
+ [This logic will change completely in \TeX82.] @1019
+* 29 Mar 1978
+# (Wednesday) Again beginning at 2:30am.
+Q229. Put still more space above and below fraction lines in displayed
+ formulas. @746
+G230\>189. Install an infinite penalty feature, which positively suppresses breaks;
+ use it in displayed formulas whose |\eqno| doesn't fit. @1205
+F231. Call \\{build_page} after finishing a display; and don't
+ go to the |\noindent| routine because of the next remark. @1200
+S232. Put |\parskip| glue just before a paragraph, not just after
+ (since it interferes with a penalty after). @1091
+# Although the test program gives correct output, it generates 46 locations
+ of variable-size memory and 280 of one-word memory that are not freed.
+F233. Recycle the ulists and vlists in \\{fin_align}. @801
+M234\>25. Fix bug when deleting space at end of paragraph:
+ \\{delete_glue_ref}(\\{cur_node}) not
+ \\{delete_glue_ref}(\\{value}(\\{cur_node})). @816
+# There's also a more mysterious type of uncollected garbage,
+ a \\{fraction_noad} corresponding to
+ |$p\choose$|, an \\{incompleat_noad} not completed.
+# Couldn't find that one, so I recompiled with \#233 and \#234 corrected.
+# Now it gains just 10 locations of variable-size memory and 7 of the other kind.
+I235. Extend \\{search_mem} to search \\{eqtb} also. @255
+D236\>143. Fix bug in \\{rebox} when $\\{list_ptr}(b)=0$. @715
+# The seven one-word nodes were generated by this bug;
+ \\{rebox}\kern-1pt\ put them onto a linked list starting with
+ $\\{mem}[0]$, growing at the far end!
+D237. Remember to complete each \\{incompleat_noad}. @1184
+# This solved the other mystery. I had never noticed that my test output
+ was actually wrong: |$p\choose k$| came out as `$k$'.
+# After these corrections, the test routine worked\thinspace\dots\ I feel
+ that \TeX\ is now pretty well debugged
+ (except perhaps for error recovery)---it's time to celebrate!
+* 1 Apr 1978
+I238. Don't quit after file lookup fails. @530
+* 2 Apr 1978
+P239. Add \\{\TeX_font_area}, so that it's easier to change the
+ default library area associated with a device. @514
+* 3 Apr 1978
+L240. Insert parentheses again, to cope with the precedence of\/ |lsh|
+ when packing data. (See \#55 and \#176.) @1114
+# I had never tried $\\{hmode}+\\{discretionary}$ before!
+M241. Remember that \\{back_error} requires \\{cur_tok} to be set.
+ (Problem can arise during error recovery on parameter |#|$n$
+ with $n$ out of range.) @476
+* 4 Apr 1978
+I242. Add a deletion feature to the \\{error} routine. @88
+* 5 Apr 1978
+Q243. Reset \\{space_factor} after |\/| [this was later rescinded]
+ and after math in text. @1196
+* 10 Apr 1978
+G244\>104. Replace |\jpar| and |\tracing| by a new primitive |\chpar| for parameters.
+ It allows a user to change those quantities as well as the penalties for
+ hyphens, relations, binary ops, widows. @209
+* 14 May 1978
+# Beginning to typeset a real book (Volume 2, second edition), not just a test.
+Q245. Make math in text end with spacing as if it were
+ followed by punctuation. [This rule will soon be rescinded.] @760
+F246. Insert |\times| into the hash table; I left it out by mistake.
+ [It will eventually move into |plain.tex|.]
+C247. Change the names of Scandinavian accents from |\o|, |\oslash|,
+ |\Oslash| to |\a|, |\o|, |\O|. [This will also move to |plain|.]
+* 17 May 1978
+B248. Fix a silly bug that hasn't been tweaked until today:
+ `|\halign to size|' [obsolete in \TeX82] used \\{vsize}
+ instead of \\{hsize}. @645
+* 19 May 1978
+G249. Add a |\topbaseline| feature [later called |\topskip|]. @1001
+Q250\>245. Subtract the math spacing change of May 14. @760
+A251. Skip past blanks in the \\{scan_math} procedure. [This blank-skipping
+ will eventually go into \\{scan_left_brace}.] @403
+I252. Introduce a \\{missing_brace} routine [later generalized] to improve
+ error recovery in $\\{mmode}+\\{math_shift}$, when the top
+ of \\{save_stack} isn't a \\{math_shift_group}. @1065
+Q253. Adjust the math spacing between closing parentheses and
+ Ord, Op, Open, Punct. @764
+Q254. Make the underline go further under. @735
+S255\>96. Compute the proper natural width when a displayed equation follows
+ a paragraph whose fillglue has been deleted by \\{line_break}. @1146
+* 20 May 1978
+A256. Fix the spurious value of \\{prev_depth} inside alignments. @775
+S257. Consider (and defeat) the following scenario:
+ The u and v lists are built in \\{init_align} using \\{temp_head};
+ then while scanning `|\tabskip 2pt\rt{...}|' the macro |\rt| is expanded,
+ clobbering \\{temp_head}. @779
+# That bug was more subtle than usual.
+Q258. Add the parameter \\{num3}, so that the positioning of\/ |\atop|
+ can be different from that for fractions. @700
+Q259. Add new parameters \\{delim1} and \\{delim2}, so that
+ |\comb| can use fixed size delimiters, not computed as with |\left|. @748
+* 22 May 1978
+C260\>221. Change |\|{\tentex\char'34} to |\|{\tentex\char'35} and introduce
+ |\|{\tentex\char'34} as the negative of\/ |\|{\tentex\char'35}.
+ [Later obsolete.] @226
+L261. Fix the display of negative penalty nodes; \\{show_node_list} is confused
+ when a negative value has been packed into the middle of a word. @194
+# Memory overflow just occurred with $\\{lo_mem_max}=7500$ and $\\{mem_max}=16384$.
+ So I have to go to 15-bit pointers. (A problem on 32-bit machines?)
+* 23 May 1978
+Q262. Add a new parameter \\{big_op_spacing5}, for
+ extra space above and below limits of big displayed operators. @751
+F263. Initialize \\{incompleat_noad} in |$$\halign{...}$$|. @775
+# That was another heretofore-untested operation. How much of the code
+ has not yet been exercised?
+F264\>238. Close the file when doing lookup-failure recovery. @27
+I265. Improve the error recovery for `|Extra &|'. @792
+R266. The top piece must be calculated mod 128 in \\{var_delimiter},
+ to guarantee a valid subscript range. [Obsolete in \TeX82.] @546
+B267\>252. Fix a blunder in new \\{missing_brace} code. @1065
+B268\>262. Fix a blunder in new code for limits on display operators. @751
+* 26 May 1978
+Q269. Don't insert a new penalty after an explicit penalty in math mode. @767
+# The hash table overflowed; I ought to make it much bigger.
+R270\>110. Avoid possible bad memory references in alignment
+ when there is erroneous input after |\cr|. [Instead of
+ \\{extra_info}, the value of \\{cur_align} in \TeX78 is negated,
+ because we need only distinguish |\cr| from |&|.] @789
+S271. Make the dimension parameters like |\hsize| all global, so that they can
+ be set in the |\output| routine. @279
+# This led to major simplifications, also to major surgery.
+# [But it was a kludgy decision, overruled in \TeX82.]
+D272\>94. Don't forget to set the type of the new null box in the |\end| routine. @1054
+* 27 May 1978
+# The data overflowed memory again, both low and high, doing Section 3.3.2.
+R273\>184. Mask off extra bits of\/ |\char| in math mode,
+ to avoid bad memory references. @1151
+B274. Zero out the negative |\medmuskip| in script styles. @732
+* 29 May 1978
+S275. Be prepared to handle an undefined control sequence during \\{get_x_token}.
+ (Can fix this by brute force, using \\{get_token} instead of \\{get_next}.)
+ @380
+D276. Correct the superscript shift when a single character is raised. @758
+R277\>184. Mask off all but 7 bits in |\char| routine,
+ to avoid space-factor index out of range. @435
+# More memory capacity overflows.
+E278\>22. Fix \TeX's overflow stop so that I don't have to wait for loading of the
+ |BAIL| debug routines. [System dependent.] @93
+F279. Remember to adjust the page number
+ when a file page ends in mid-macro. [System dependent.] @306
+* 5 Jun 1978
+R280. Make sure that the arguments of positioning commands don't overflow
+ their field size. @610
+I281. Report the excess amount when giving an overfull box warning. @666,677
+* 7 Jun 1978
+Q282. Use $\ge$ instead of $>$ as termination criterion in \\{var_delimiter}. @714
+R283. Disallow |\eject| in math mode. [In \TeX78, |\eject| is
+ distinct from |\break|; in horizontal mode it includes
+ \TeX82's `|\vadjust{\break}|'.] @1102
+Q284. Don't put too much clearance above |\sqrt| in text style. @737
+* 9 Jun 1978
+G285\>110. Make \\{align_state} an integer variable, not \\{boolean},
+ so that |\eqalign| can be within another |\eqalign|. @309
+C286. A |\mark| should expand its input. @1101
+* 10 Jun 1978
+E287. Provide for preloading of fonts. @1320
+L288. Close the output file before switching to edit the input file with
+ the `|e|' option. @84
+E289. Return adjustments found by \\{hpack} to free storage if
+ they're not used. [Later, \\{hpack} will detach them only
+ when they're used.] @655
+Q290. Strive for consistency between \\{make_under} and \\{make_over}.
+ @735
+* 18 Jun 1978
+B291\>236. Fix a serious error in \\{rebox}
+ (`$b$' instead of `$\\{list_ptr}(b)$'). @715
+# Strange that such a bug would now surface for the first time!
+C292. Remove |\deg| from |INITEX|, since macros suffice.
+Q293. Add an extra hyphenation penalty for two hyphenated lines in a row. @859
+* 19 Jun 1978
+S294. Introduce the `\\{no_new_control_sequence}' switch. Among other things,
+ this will prevent an undefined control sequence following \\{scan_math}
+ from clobbering the save stack. @259
+* 20 Jun 1978
+L295. Change the badness test
+ `$\\{glue}\le0.0$' to `$\\{glue}\le0.0001$'. [\TeX82 will avoid such
+ problems by calculating badness without floating point arithmetic.] @99
+R296. Force \\{badness} to be at most $10^{19}$. @108
+I297. Add \\{end_template} for better error recovery in alignments. @375
+E298\>287. Make |INITEX| more like the real \TeX; my simple scheme for
+ font preloading was no good because it left thousands of `dead'
+ words in memory. @8
+E299. Economize disk space by using internal arrays in load
+ modules that aren't being reinitialized. [System dependent.]
+E300. Move the declaration of \\{mem} to the semantics module, so that the
+ object code will be more efficient. [System dependent. The code of
+ \TeX78 was divided into separately compiled modules for syntax,
+ semantics, output, extensions, and general organization.]
+* 21 Jun 1978
+# Today I'm working on the user manual.
+C301. Disallow |\input| except in vertical mode. [I will change this in
+ \TeX82, treating |\input| as a case of expansion.] @378
+I302. Add error recovery for \\{endv} and \\{par_end} occurring in math mode.
+ @1047
+G303. Generalize |\ifT| to |\if T|. @506
+* 22 Jun 1978
+F304. Preload the |\bullet| [later done by |plain.tex|].
+D305\>256. Get the correct \\{prev_depth} at the beginning of an alignment. @775
+C306. Change |\eject| so that it ejects only once. @1000
+* 14 Jul 1978
+I307. Look in standard area if a file isn't found in the user's area. @537
+I308. Echo all online inputs in the transcript file. @71
+* 19 Jul 1978
+Q309. Equalize spacing when only one of numerator/denominator is big. @745
+Q310. Prevent subscript from getting too high above baseline. @757
+R311. Avoid infinite loop when stack overflows: \\{push_input} should say
+ `{\bf if} $\\{input_ptr}\ge\\{stack_size}\;\land\;\\{interaction}=
+ \\{error_stop_mode}$'. @321
+* 22 Jul 1978
+C312. Make |\quad| meaningful outside math mode. (All fonts must
+ be generated again!) @558
+I313. Show the nesting level at the end of \\{show_activities}.
+ [But I decided not to do this in \TeX82.] @218
+C314. Put in |\>| [namely, |\mskip\medmuskip|;
+ \TeX78 already has |\|{\tentex\char'35}, for conditional |\thinmuskip|,
+ as well as the negative amounts |\<|,~|\|{\tentex\char'34}].
+ Change the name of vector accent from |\>| to |\b|. [Math spacing
+ operators will become much more general in \TeX82.] @716
+* 25 Jul 1978
+Q315\>94. Give the correct |\hsize| and |\vsize| to the null boxes created
+ at |\end|. @1054
+A316\>94. And don't ``append'' them. [Later this was changed, so
+ that it would work better with generalized output routines.] @1054
+I317\>297. Remove the control sequence |\endv|,
+ since error recovery is now better. @375
+I318. Define another mode of tracing: It says `|OK|' and stops after
+ |\showlists|. @1298
+Q319\>244. Give better defaults to parameters. [Later done by |plain.tex|.] @209
+I320. Allow more bits in the packed representation of\/ |\showboxdepth|. @238
+I321. Scan past delimiters and/or dimensions when recovering from
+ ambiguous fractions. @1183
+R322. Reduce accent numbers modulo 128 or 512, depending on the
+ mode. @1165
+I323. Include a warning, `|(\end occurred on level ...)|'. @1335
+* 28 Jul 1978
+# (I'm writing Chapter 27 of the manual: `Recovery From Errors'.)
+I324. Improve the error message in \\{scan_digit}. [This procedure will change
+ its name to \\{scan_eight_bit_int}, when the number of registers
+ increases from 10 to~256.] @433
+I325. Don't report overfull boxes if they're less than .1~point
+ over. @666,677
+I326. Give the user extra chances to define the font, if \\{read_font_info}
+ is unsuccessful. @560
+I327. Change default recovery for bad parameter number from |#1| to |##|, since
+ |#1| won't always work and since |##| is probably intended. @479
+I328. Omit the |"Negative?"| message on things like \\{scan_char_num}. @435
+I329. Improve error recovery when a large delimiter isn't in family~3.
+ [Obsolete.]
+I330. Give a more appropriate error message when the input is `|$\right|'. @1192
+# Currently \TeX\ says `|Missing $|'!
+I331. Call \\{back_input} before the error message in \\{back_error},
+ not afterwards. @327
+* 1 Aug 1978
+I332. Give an appropriate warning when there's no input file and the user
+ types `|e|'. @84
+L333. Increase the system pushdownlist size so that the manual will compile.
+ [Procedures \\{hlist_out} and \\{vlist_out} can recurse deeply.]
+# Yesterday I distributed 45 preliminary copies of the manual; today I
+ took out the ``debugging hooks'' and put \TeX\ up as a system program.
+* 2 Aug 1978
+# I'm typing Volume 2 again (currently in Section 4.2.2). Culture shock!
+G334. Introduce a |\ragged| parameter, to indicate a degree of raggedness.
+ [Previously, ragged-right setting was performed when the
+ |\tolerance|/100 was odd! Eventually a better approach,
+ with |\rightskip| and such things, will be discovered.] @886
+Q335. Omit the `widow penalty' in one-line paragraphs. @890
+* 5 Aug 1978
+G336. Generalize |\pageno| to |\count|\<digit>. @236
+D337\>285. Update \\{align_state} when recovering from `|Missing {|' and
+ `|Extra }|' errors. @1069,1127
+I338. Show ``runaway'' tokens, making it easier to pinpoint an error. @306
+* 22 Aug 1978
+G339. Add |\predisplaypenalty|. @1203
+I340. Clarify error messages; they should indicate when something has been
+ inserted, etc. @1064
+* 23 Aug 1978
+I341\>114. Substitute `|Extra }|' for the losing `|Missing \cr|' error message. @1069
+I342\>213. Go past online insertions in \\{show_context}. @311
+Q343. Exact no penalty for breaking one line before a display. @1145
+I344\>338. Check for runaways at end of file. @362
+I345. Give error message when a macro argument begins with |}|. @395
+* 24 Aug 1978
+L346\>213. Remove extra line-feed in \\{show_context} after printing insertions.
+ [System dependent.] @318
+* 25 Aug 1978
+Q347. Leave no glue at top of page, even after |\eject|. @997
+* 27 Aug 1978
+P348. Adopt Guy Steele's new version of the \TeX\ source files. [He has
+ recently made a copy and modified it by introducing
+ compile-time switches for MIT conventions as an alternative to SUAI.
+ This is the first time that \TeX\ is being ported to another site;
+ additional switches for PARC, TENEX, TOPS10, and TOPS20 will be
+ added later, using the Steele style.]
+* 1 Sep 1978
+Q349. Don't pass over leader nodes in the \\{try_break} background
+ computation. [At this time, leaders have not yet been
+ unified with glue.] @837
+Q350\>82. Prune away all penalties at the top of a page. @997
+* 4 Sep 1978
+I351\>338. Include `|\|' in error message about a runaway argument. @306
+* 8 Sep 1978
+# I just remade all the fonts, with increased ligature field size.
+B352\>350. Insert a necessary {\bf goto} statement in the first branch of
+ the new penalty routine within \\{build_page}. @997
+* 30 Sep 1978
+M353\>338. Make the token list for runaway arguments meaningful outside
+ of \\{macro_call}. (I just had a runaway argument ending with
+ `|\lcm|', which turned out to be the
+ control sequence in hashtable location 0.) @371
+R354. Avoid infinite loop when recovering from |$$| in
+ restricted horizontal mode. @1138
+L355. Fix two hyphenation bugs related to |-ages|, |-ers|.
+ [A completely new algorithm for hyphenation will go into \TeX82.]
+Q356. Add |-est| to hyphenation routine;
+ also disable |puz-zled| and |rat-tled|, etc.
+* 4 Oct 1978
+G357. Add new primitive |\vtop|. @1087
+Q358. Treat implicit kerns properly after discretionary hyphens have been
+ inserted. @914
+* 4 Nov 1978
+Q359. Forget the half quad originally required at left and right when
+ centering displayed equations without equation numbers. @1202
+* 11 Nov 1978
+R360. Don't let the postamble come out empty. [This could occur if no fonts were
+ selected.] @642
+* 15 Nov 1978
+C361. Allow optional space after digit in \\{scan_int} routine. @444
+* 17 Nov 1978
+R362. Make the \\{check_mem} procedure slightly more robust. @167
+* 20 Nov 1978
+C363. Make the |\par| in a |\def| match the |\par| that comes automatically with
+ a blank line. (Suggested by Terry Winograd.) @351
+G364. Add new parameter |\mathsurround| for spacing before and after
+ math in text. @1196
+G365. Extend |\advance| to allow increase by other than unity. [At this
+ time it applies only to the ten |\count| registers, and it is
+ called |\advcount|.] @1238
+* 25 Nov 1978
+G366. Add a new primitive: |\unskip|. @1105
+G367. Add new primitives |\uppercase| and |\lowercase|. @1288
+* 28 Nov 1978
+M368\>338. Don't let |\mark| and \\{macro_call} interfere with each other's
+ \\{scanner_status}. @306
+M369. Omit extra |}| after \\{show_node_list} shows a |\mark|,
+ since the right brace is already there. (See \#210.) @176
+G370. Add a new primitive suggested by Terry Winograd: |\xdef|. @1218
+* 29 Nov 1978
+S371. Delete a space following |\else{...}| also in the
+ false case. [\TeX78 uses braces, not |\fi|, for conditionals.]
+D372\>320. Make |\tracing| set |\showboxbreadth| as advertised. @198
+F373. Account properly for kerns in width calculations of \\{line_break}.
+ @866
+Q374\>364. Delete a \\{math_node} at the beginning of a line. @148
+A375\>339. Guarantee that |\predisplaypenalty=10000| will suppress page breaking
+ before a display. @1005
+* 6 Dec 1978
+L376. Change the file opening statement to allow lines up to 150 characters long.
+ [System dependent.]
+* 16 Jan 1979
+F377\>365. Initialize \\{negative} properly in the |\advance| routine
+ with a |\count| as argument. @440
+* 20 Jan 1979
+R378. Try to keep complex, buggy preambles of alignments from
+ crashing the program. @789
+* 17 Feb 1979
+I379\>376. Give more detailed information when warning about a
+ long line being broken. [System dependent;
+ the buffer size in \TeX78 is very limited.]
+L380. Declare $p$ local to \\{try_break}, for the ``rare'' case code.
+ [My original program included the following comment:
+ ``This case can arise only in weird circumstances due to
+ changing line lengths, and the code may in fact never be executed.''
+ Later Michael Plass will discover that variable line lengths require an
+ entirely different algorithm, using \\{last_special_line}.]
+ @847
+F381\>334. Don't omit the raggedness correction when the
+ last line of paragraph has to shrink. [Obsolete in \TeX82.]
+* 22 Feb 1979
+F382\>363. Don't forget to return from \\{get_x_token} after finding |\par|. @351
+Q383. Add a new parameter: |\lineskiplimit|. @679
+C384. Change the syntactic sugar:
+ `|\hbox par|' replaces `|\hjust to ...{overfull}|'. [This vastly improves on
+ the old idea (see \#40), but there still is no internal vertical mode.]
+C385. Introduce new names |\hbox| and |\vbox| for |\hjust| and |\vjust|. @1071
+G386. Add a new condition: |\ifpos|. [It will later be
+ generalized to |\ifnum| and |\ifdim|.] @513
+G387. Add |vu| and |\varunit|. [\TeX82 will eventually allow arbitrary
+ internal dimensions as units of measure.] @453
+G388\>312. Add an |em| unit. @455
+C389. Legalize |\hbox spread |\<negative dimension> [since \\{scan_spec}
+ no longer uses the sign as a flag]. @645
+* 10 Mar 1979
+C390\>370. Make \\{scan_toks} expand |\count| during |\xdef|. [This will
+ change later when |\the| and |\number| are introduced.] @367
+* 23 Mar 1979
+Q391. Put only 100000\thinspace pt stretch at the end of a paragraph instead of
+ 10000000000\thinspace pt.
+ [In \TeX78, ``infinite'' glue is actually finite but large; in the
+ language of \TeX82 we would say that |\parfillskip|, which is
+ not yet user-settable, is being changed to be like |\hfil| instead of
+ like |\hfill|.] @816
+Q392. Treat the last line of a paragraph more consistently with
+ the other lines (e.g., when |\hfil| appears in mid-paragraph), by
+ effectively inserting \\{inf_penalty} at the end. @816
+* 31 Mar 1979
+S393. Ensure that penalty nodes aren't wiped out, in weird cases where
+ breaks occur at penalties that normally disappear. @879
+* 27 Apr 1979
+A394. Correct the page number count when files begin with an empty page.
+ [System dependent.]
+G395. Allow the \\{math_code} table to be changeable via |\chcode|.
+ [In \TeX82, |\chcode| will split into |\mathcode| and |\catcode|.] @1232
+I396\>332. Don't accept `|e|' after an error message if not
+ inputting from a file. @84
+* 29 May 1979
+F397. Don't call \\{end_file_reading} if you haven't already invoked
+ \\{begin_file_reading}; this could happen when trying to
+ recover from an error in \\{start_input}.@537
+* 7 Jun 1979
+A398\>306. Be sure to eject two pages,
+ when |\eject| comes just at the time another break is preferable
+ (e.g., when the page has just become too full). @1005
+* 27 Jun 1979
+I399\>354. Don't say `|You can't do that in math mode|' when the user
+ says `|$$|' in restricted horizontal mode! @1138
+* 30 Jun 1979
+G400. Add |wd|, |dp|, |ht| dimension units. @455
+I401\>307. Don't try the system area for file names whose area is explicitly
+ indicated. @537
+* 1 Jul 1979
+G402. Allow letters as (ASCII) numbers [without the |`| marker introduced
+ later]. @442
+* 2 Jul 1979
+F403. Fix a |\gdef| bug: If the control sequence was never defined before
+ [this later became the \\{restore_zero} option],
+ don't remove it at group end. @282
+* 16 Jul 1979
+I404\>320. Update \\{show_noad_list} to be like \\{show_node_list}.
+ [The two routines, originally separate, will be merged in \TeX82.] @238
+* 18 Jul 1979
+G405. Extend capacity from 32 fonts to 64 fonts if desired. @134
+Q406. Add new \\{extra_space} parameter to all text fonts (requested
+ by Frances Yao). @558
+F407. Make each \\{node_noad} print properly in \\{show_noad_list}. @183
+Q408. Make |\jpar| allow any break if it is 1000000 or more.
+ [In \TeX82, a |\tolerance| of 10000 or more allows any break.] @851
+* 23 Jul 1979
+E409. Introduce new primitives |\hfil|, |\vfil|, |\hfilneg|, |\vfilneg|. @1058
+G410. Add |\ifmmode|. @501
+G411. Add |\firstmark|. @1012,1016
+C412. Allow break at leaders (horizontal mode only). @149
+* 25 Jul 1979
+I413\>213. Revise \\{error} so that online insertions work properly
+ after end-of-file errors. @336
+B414\>411. Change `{\bf if} $\\{first_mark}\ne0$' to
+ `{\bf if} $\\{first_mark}\ge0$' [because $-1$
+ is used to indicate `not yet given a value']. @1012
+* 28 Jul 1979
+C415\>370. Stop |\xdef| from expanding control sequences after |\def|'s.
+ [This decision will be rescinded later, after several more years of
+ experience with macro expansion will suggest better ways to cure
+ the problem.] @366
+I416. Change symbolic printout for control symbols. [System dependent.] @49
+L417\>308. Avoid linefeeds in the transcript file. [System dependent.]
+C418\>370. Expand |\topmark|, etc., in |\xdef|. @366
+* 4 Aug 1979
+B419\>413. Fix an error introduced recently: |\par| was suddenly
+ omitted at end of page. [System dependent.]
+* 11 Aug 1979
+P420. Change error messages that use |SAIL| characters not in
+ standard ASCII. @360
+* 28 Aug 1979
+D421\>411. Move the command `$\\{first_mark}\gets-1$' from \\{vpackage}
+ to \\{fire_up}. @1012
+S422\>403. Correct a serious |\gdef| bug:
+ Control sequences don't obey a last-in-first-out
+ discipline, so \TeX\ loses things from the hash table when deleting a
+ control sequence. @259
+# To fix this, I either need to restrict \TeX\ (so that
+ |\gdef| can be used inside a group only for control sequences already
+ defined on the outer level) or need to change the hash table algorithm.
+ Although all applications of \TeX\ known to me will agree to the
+ former restriction, I've chosen the latter alternative, because it gives me
+ a chance to improve the language: Control sequences
+ of arbitrary length will now be recognized.
+D423. Make sure that \\{unsave} cannot call \\{eq_destroy}
+ with a value from the upper part of \\{eqtb}. @282
+# I noticed this long-standing bug while fixing \#422. It had very
+ low probability of causing damage (e.g., it required a certain field
+ of a floating-point number to have a certain value), but it would have
+ been devastating on the day it first showed up!
+* 29 Aug 1979
+F424. Call \\{eq_destroy} when a control sequence is |\gdef|'ed
+ after being |\def|'ed. @283
+F425\>418. Treat the first token consistently
+ when |\topmark| and its cousins are expanded in \\{scan_toks}. @477
+# Now I've checked things pretty carefully and I think \TeX\ is ``fully debugged.''
+* 25 Jan 1980
+I426\>338. Display runaway alignment preambles. @306
+G427. Introduce active characters (one-stroke control sequences).
+ [I don't yet go
+ all the way: The meanings of `|x|' and `|\x|' have to be identical.] @344
+* 7 Feb 1980
+F428\>314. Fix a glaring omission: Op space |\>| was
+ never implemented in math mode! @716
+* 25 Feb 1980
+G429. Add a new dimension `|ex|' (for units of xheight). @455
+* 3 Mar 1980
+C430\>427. Allow the control sequence |\:| to be redefined
+ [it was the `select font' operator];
+ this allows the character |:| to be active. [Obsolete.]
+* 23 Mar 1980
+# An extend-\TeX-for-the-eighties party:
+G431. Add a new |\copy| feature. @204
+G432. Add a new |\unbox| feature. @1110
+G433. Add a new |\open| feature [later |\openout|]. @1351
+G434. Add a new |\send| feature [later |\write|]. @1352
+G435. Add a new |\leqno| feature, requested by MDS. @1204
+G436. Add a new |\ifdimen| feature [later |\ifdim|]. @513
+C437. Make |\|\<space> in vertical mode begin a paragraph. @1090
+G438. Add a new |\font| feature [replacing the silly previous convention that
+ a font must be defined when it is first selected]. @1256
+G439. Add new |\parval| and |\codeval| features [later
+ |\the|\thinspace\<whatever>\thinspace]. @413
+C440\>427. Don't let active characters gobble the following space. @344
+G441\>208. Add a new parameter to govern amount of token list dumped. [Obsolete.] @295
+G442. Add a new |\linebreak| feature [later replaced by |\break|]. @831
+* 25 Mar 1980
+# (Still working on the above, also thought of more.)
+G443. Add a new |\mskip| feature. @716
+G444. Add a new |\newname| feature (soon changed to |\let|). @1221
+G445\>430. Allow any control sequence to be redefined. @275
+I446. Send the output to the user's current file area, even when
+ input comes from elsewhere. @532
+* 27 Mar 1980
+Q447. Compute the xheight for accents in math mode from
+ family~1, not family~3. [Obsolete.]
+* 28 Mar 1980
+Q448. Increase minimum clearance between subscript and superscript. @759
+* 29 Mar 1980
+Q449\>222. When a display follows a display, the second should have the
+ `shortskip' glue. @1146
+* 4 Apr 1980
+A450\>445. Look at current token meanings when trying to recognize
+ |\tabskip| in alignment preambles. @782
+* 23 Apr 1980
+I451. Estimate the length of printed output, for the new
+ priority feature on our XGP device driver. [System dependent.]
+C452\>434. Break long |\send| lines
+ into pieces so that the file can be read in again. [System dependent.]
+* 19 May 1980
+Q453\>182. Don't make |\left| and |\right| delimiters too large; they
+ need to be only 90\% of the enclosed size. [This eventually
+ became |\delimiterfactor|.] @762
+* 21 May 1980
+G454. Add a new |\pagebreak| feature [later |\vadjust{\break}|]. @655
+* 13 Jun 1980
+# Today I'm beginning to overhaul the line-breaking routine,
+ and I'll also install miscellaneous goodies.
+G455. Allow a radical sign to be in different font positions. @737
+E456. Clear empty tokenlists off input stacks to allow deeper recursions
+ (suggested by Jim Boyce's macros for chess positions). @325
+G457. Make |\spaceskip| and |\parfillskip| changeable. @1228
+G458. Add a new parameter |\rfudge| (per request of Zippel) [later |\mag|]. @288
+G459. Add a new parameter |\loose| [later |\looseness|];
+ now parameters are allowed to take negative values. @875
+E460. Remove the variable \\{just_par}. [Obsolete; it was the \\{real} equivalent
+ of an \\{integer}].
+* 14 Jun 1980
+Q461. Install new line-breaking routines, including |\parshape|.
+ (These major changes are introduced as Michael Plass
+ and I write our article.) @813
+G462. Add a new parameter |\exhyf| [later |\exhyphenpenalty|]. @869
+* 16 Jun 1980
+S463\>444. Change conventions in \\{eqtb} so that glue is distinguishable
+ from other equivalents. @275
+A464\>444. Don't expand |\b| in |\xdef{\d\b{...}}| after |\let\d=\def|.
+ [Obsolete.]
+D465\>444. Avoid creating dead storage when doing \\{unsave} in certain regions. @275
+* 17 Jun 1980
+C466. Allow negative dimensions in rules. @138
+* 19 Jun 1980
+B467\>463. Make the new test for glue at the outer level of \\{show_eqtb}. @252
+* 27 Jun 1980
+Q468\>453. Don't let |\left| and |\right| become too small for big matrices.
+ [This eventually became |\delimitershortfall|.] @762
+* 3 Aug 1980
+Q469. Don't move extra-wide, numbered equations flush left unless
+ they begin with glue. @1202
+* 15 Sep 1980
+M470\>461. Say `$\ge\\{fz}$' instead of `$>\\{fz}$' in the pre-hyphenation
+ routine; I'd forgotten my definition of \\{fz} [a variable used to test
+ for a sequence of lowercase letters in the same font]. @897
+R471\>395. Check the range of the index in |\chcode| before saving the old value.
+ @1232
+* 18 Sep 1980
+D472\>457. Don't forget to increase the reference count to |\parfillskip|,
+ or it will mysteriously vanish. @816
+* 19 Sep 1980
+C473\>412. Make leaders break like glue in both horizontal and vertical modes.
+ @149
+Q474\>364. Make |\mathsurround| break properly at left and right end of lines.
+ @879
+* 13 Oct 1980
+I475\>461. Remove spurious overfull boxes generated when the looseness criterion
+ fails. [Obsolete.]
+A476\>461. Redesign the iteration for looseness; breakpoints were not chosen
+ optimally. @875
+E477\>461. Avoid storing a lot of breakpoints when they are dominated by
+ others. @836
+B478\>366. Don't say `\\{cur_node}' when you mean `\\{mem}[\\{cur_node}]'. @1105
+Q479\>461. Prefer the oldest break to the youngest break
+ when two break nodes have the same total demerits. @836
+L480\>461. Don't make badness too big for floating-point calculations,
+ when forced to make an overfull box. [Obsolete.]
+* 10 Dec 1980
+R481. Make it impossible to get unmatched `|}|' in a delimited macro
+ argument. @392
+G482. Add new |\topsep| and |\botsep| features. [These are \TeX78's
+ way to put space at the edge of inserts,
+ replaced in \TeX82 by the |\skip| register corresponding
+ to an |\insert| class.] @1009
+* 6 Jan 1981
+P483. Install new routines for reading the font metrics, using Ramshaw's
+ |TFM| files instead of\/ |TFX| files. @539
+I484. Abort after reporting 100 errors, if not pausing on errors. @82
+G485. Add new |\spacefactor| and |\specskip| and |\skip| primitives.
+ [At this time we write `|\specskip3=10pt|' and `|\skip3|' for what
+ will become `|\skip3=10pt|' and `|\hskip\skip3|' in \TeX82.] @1060
+G486\>366. |\unskip| is now allowed in internal vertical mode. @1105
+* 26 Jan 1981
+B487\>482. Don't say `\\{mem}[$q$]' when you mean `$q$'. (See \#143 and \#478.) @1009
+* 27 Feb 1981
+I488\>417. Put some linefeeds back into the transcript file, in order
+ to prevent overprinting in listings. [System dependent.]
+G489. Add a new |\dpenalty| feature [later |\postdisplaypenalty|]. @1205
+G490. Add the dimension |cc| for European users. @458
+C491. Make \\{scan_keyword} match uppercase letters as alternatives
+ to lowercase ones (suggested by Barbara Beeton's experiments
+ with |\uppercase|). @407
+I492. Add nonstop mode so that overnight batch processing is possible. @73
+* 2 Mar 1981
+S493\>422. Fix a still more serious |\gdef| bug: The generality
+ of\/ |\gdef| almost makes it a crime to
+ forget {\sl any\/} control sequence names, ever! (The previous bug was
+ only the tip of an iceberg.) @259
+I494. Issue warning message at the end of a file page if nesting level isn't zero.
+ [System dependent.]
+* 5 Mar 1981
+I495. Keep track of maximum memory usage, for statistical
+ reporting. [Obsolete.] @125
+Q496\>350. Prune away glue and penalties at top of page after marks, sends,
+ inserts. @1000
+G497. Allow |\mark| in horizontal mode. [Later it will
+ be |\vadjust{\mark...}|.] @655
+C498. Allow optional space before a required left brace, e.g., |\if AA {...}|.
+ [See \#251.] @403
+I499. Issue an incomplete |\if| error, to help catch a bad |\if|. @336
+* 17 Mar 1981
+I500\>494. Omit the warning message at end of a file page unless
+ the nesting level has changed on that page. [System dependent.]
+Q501\>310. Fix the spacing when there is a very tall subscript with
+ a superscript. @759
+* 20 Mar 1981
+S502\>371. Make space-eating after |\else| fully consistent between the
+ true and false cases. [Obsolete.]
+* 24 Mar 1981
+B503\>496. Change \\{glue_spec_size} to \\{ins_spec_size}
+ in \\{vpackage} [where insertions are done]. [Obsolete.]
+* 5 Apr 1981
+B504\>501. Fix a typo (`|+|' instead of `|-|') in the new subscript code;
+ this shifted certain subscripts down instead of up. @759
+* 18 Apr 1981
+G505. Make leaders with rules of specified size act like variable rules.
+ @626,635
+* 29 Apr 1981
+A506\>461. Don't consider $\\{badness}>\\{threshold}$ at a line |\break|
+ except in an emergency. @854
+* 13 Jul 1981
+C507\>402. Allow other characters as numbers. @442
+R508\>294. Avoid dead storage if a \\{no_new_control_sequence} error occurs.
+ [Obsolete.] @259
+G509. Add a new |\ifx| feature. @507
+G510. Add new features |\xleaders| and |\cleaders|. @626,635
+* 14 Jul 1981
+S511\>507. Amend the new code for constants;
+ the `|.|' in `|.5|' is thought to mean \O{056}! @442
+L512\>507. And fix an egregious blunder in that code: New commands at the
+ end of a procedure are ignored when earlier statements
+ exit via {\bf return}. @442
+* 4 Aug 1981
+P513. Accept alphabetic codes for all online error recovery options,
+ instead of insisting on control codes like line feed or form feed.
+ [The original error-recovery codes were suggested by the
+ conventions of the |SAIL| compiler.] @84
+G514. Add a new |\thebox| feature [later |\lastbox|]. @1079
+* 7 Aug 1981
+G515. Add |fil|, |fill|, and |filll| as units for glue stretching
+ or shrinking. @454
+I516. Suppress the overfull box error when shrinkage amount is negative. @664
+* 9 Aug 1981
+Q517. Let unset boxes inherit the size of their parent in alignments. @810
+* 12 Apr 1982
+F518. Make |INITEX| dump out the \\{font_dsize} array needed by
+ the new |DVI| output module. @1322
+* 1 May 1982
+S519\>151. Fix \\{clean_box} so that \\{mlist_to_hlist} cannot make
+ $\\{link}(q)=0$ and $\\{type}(q)=\\{glue_node}$. @720
+# [That was the historic final change to \TeX78. All subsequent entries
+ in this log refer to \TeX82.]
+* 15 Jul 1982
+# Finished draft of test program and began debugging about 1430
+ [2:30\thinspace pm]. Taking my time.
+BX1. Change \\{eqtb}[\\{cur_font}] to \\{eqtb}[\\{cur_font_loc}]. @232
+# Not logging changes to the exposition.
+# Compile time is about 2 minutes CPU, times 5 for time-sharing;
+ add another half minute for linking and loading.
+# Hash table and \\{get_next} seem to be working, with no changes needed!
+# Time out 1630--1815 for Jill's birthday party.
+LX2. Insert {\bf begin} \dots~{\bf end} around \\{dump_int} macro. @1305
+IX3. Print two blank spaces before date in \\{open_log_file}. @536
+AX4. Update $x$ and \\{var_used} outside the {\bf for} loop. @1311
+BX5. Change {\bf if} $=$ to {\bf if} $\ne$ as loop exit condition. @1315,1316
+# The |TRIP| test should preload more fonts.
+LX6. Insert {\bf begin} \dots~{\bf end} around statistics output. @1334
+FX7. Must \\{get_x_token} when scanning a number. @445
+IX8. Interactive \\{debug_help} needs to print a newline. @1338
+FX9. Include \\{ignore_spaces} and \\{math_accent} in \\{print_cmd_char} cases. @266
+IX10. Don't call \\{confusion} when \\{print_cmd_char} sees unknown code. @298
+# Compiler bug causes stack overflow. Retiring for the night at 2145.
+* 16 Jul 1982
+# Starting at 0700; DRF has fixed the compiler.
+RX11. Allow arbitrary integer parameters in diagnostic print routines. @237,699
+TX12. Say \\{cur_tok}, not \\{cur_val}, when you mean \\{cur_tok}. @440
+FX13. Make |\pause| effective also on first line of a file. @538
+FX14. Show context after online deletion. @88
+IX15. Bypass reference count when \\{debug_help} shows a token list. @1339
+BX16. Change `{\bf case} $p$' to `{\bf case} \\{type}($p$)'. @1000
+FX17. Fix timing of \\{print_ln} when scrolling help messages. @90
+PX18. Make \\{other_char} the default category for ASCII control codes too. @232
+AX19. Use special scanning method for font number in \\{new_font}. @1257
+# Eating lunch, 1020--1035, while the machine slowly recompiles everything.
+FX20. Don't forget to increase $k$ in the {\bf while} loop. @355
+DX21. Adjust \\{limit} properly after line changed when pausing. @363
+FX22. Remember to return a value in \\{new_spec} and \\{new_penalty}. @151,158
+# Now stepping through \\{line_break} in simple case.
+AX23. Don't prune unwanted nodes if $\\{cur_p}=\\{null}$. @877
+FX24. Print a closing parenthesis when displaying glue nodes. @189
+SX25. Use \\{last}, not \\{limit}, in \\{term_input}; else error prompt causes
+ trouble when $\\{state}=\\{token_list}$. @71,87
+DX26. Set $\\{first}\gets\\{limit}+1$ after \\{init_terminal}. @331
+DX27. Make sure \\{set_trick_count} is always performed. @317
+* 17 Jul 1982
+IX28. Add new diagnostic feature |\tracingcommands|. @299,1031
+# Debugging of system-dependent code not shown in this log.
+# Tangling \TeX\ now takes 1.75 minutes; about 75K bytes, 108K tokens.
+# Redundant semicolon sends Pascal compiler into infinite loop!
+FX29. Initialize $\\{passive}\gets\\{null}$. @864
+AX30. Fix pseudoprinting when the line is empty. @318
+EX31. Merge adjacent free areas of dynamic memory before dumping. @131
+FX32. Print the word |mode| in \\{print_mode}. @211
+IX33. Improve message and help in case of weird error. @415
+GX34. Allow optional space after |\def| and similar constructions. @473
+MX35. Declare \\{alpha} to be integer in \\{read_font_info}. @560
+AX36. Fix timing of \\{back_input} in \\{scan_dimen}. @448
+IX37. Back up after missing number error. @446
+IX38. Show the `|at|' size that is considered improper. @1259
+IX39. Streamline the dialog in \\{debug_help}. @1338
+MX40. Take output of \\{the_toks} from the advertised place. @467,1297
+TX41. Say \\{trie_fix}($q$), not \\{trie_fix}($p$). @959
+SX42. Decrease low limit of \\{error_count} to $-1$. @76
+* 18 Jul 1982
+FX43. Clear initial reference count of macro definitions. @473
+AX44. Fix timing of \\{back_input} in \\{scan_glue}. @461
+BX45. Use \\{cur_val_level}, not \\{cur_val}, when checking levels. @461
+BX46. Multiply |fil| units by $2^{16}$ for correct scaling. @454
+BX47. Don't confuse \\{glue_base} with \\{skip_base}. @1237
+AX48. Fix \\{print_scaled} so that 0.01 doesn't come out |0.1|. @103
+IX49\>X28. Show mode changes when tracing commands. @299
+LX50. Don't say {\bf if} $(n=0)\lor(\,\ldots\;\hbox{\bf div}\;n)$ in Pascal. @105
+BX51. Don't confuse \\{box_flag} with \\{box_code}. @1075
+SX52. Reset \\{offset} on \\{print_ln} even in \\{no_print} mode. @57
+SX53. Fix restarting of interrupts after \\{big_switch}. @1031
+LX54. Don't loop {\bf for} $k\gets a$ {\bf to} $b-1$ when $b=0$ if $k$ is
+ declared nonnegative.
+IX55. Put `|=|' sign into the \\{format_ident}. @1328
+SX56. Allow $r$ to be any integer in \\{get_node}. @125
+IX57. Don't put the output of \\{print_file_name} in quotes. @518
+IX58. Say `|dumped|' after dumping. @1311
+EX59. Eliminate unnecessary initialization code. @1332
+LX60. Get the file reading started right when beginning to undump. @1308
+IX61. Give forlorn message if format file can't be loaded. @1303
+FX62. Assign value to \\{cur_val} after glue arithmetic. @1239,1240
+* 19 Jul 1982
+LX63. Don't say {\bf if} $p>\\{max}\lor\\{free}[p]$ in Pascal. @169
+AX64. Fix memory-undump logic; loops are out of phase with input. @1312
+BX65. Undump \\{hyph_word}[$j$], not \\{hyph_word}[$k$]. @1325
+# At last |trip.fmt| loads without bombing out.
+PX66. Remove assignment of array to array, not allowed by IBM Pascal
+ (Susan Plass). @167
+PX67. Simplify an expression that's too big for IBM Pascal (Susan Plass). @1009
+AX68. Go to \\{contribute}, not \\{done}, after insertions. @1000
+IX69. Decrease \\{depth_threshold} if there's not enough string space. @198
+IX70. Show rules as `{\tt\char`\|}' in short displays. @175
+IX71. Don't show null glue in short displays. @175
+SX72. Set $\\{job_name}\gets0$ as part of output initialization. @528
+SX73. Don't complain of infinite shrinkage on |0pt minus 0fil|. @825,976,1009
+IX74. Use different prompt at beginning when accepting a file name. @37
+FX75. Reset \\{last_glue} on nonglue nodes. @996
+BX76. Remember to call \\{error} after printing |OK|. @1293
+LX77. Insert {\bf begin} \dots{ \bf end} around program text of section. @1025
+FX78. Define the |\shipout| primitive. @1071,1073
+AX79. Introduce \\{write_loc} analogous to \\{par_loc}. @1344,1371
+FX80. Dump and undump \\{par_loc} and \\{write_loc}. @1313,1314
+FX81. Allow \\{the} in \\{scan_the} [later \\{scan_something_internal}]. @413
+EX82. Interchange command codes $\\{the}:=:\\{number}$ [later \\{convert}]. @210
+BX83. Don't confuse \\{breadth} with \\{depth}. @236
+IX84. Add string printing feature to \\{debug_help}. @1339
+FX85. Set $\\{state}\gets\\{mid_line}$ in \\{begin_file_reading}. @328
+# Time out 2105--2200 to pick up Jenny from driving lesson.
+LX86. Keep $c\le127$ when deleting 99 tokens. @88
+SX87. Don't check for \\{str_room} error when $\\{selector}=\\{new_string}$. @1328
+* 21 Jul 1982
+IX88. Gather more statistics: String usage, font info, hyphen exceptions, stacks. @1334
+DX89\>X79. Initialize \\{write_loc} from \\{cur_val}, not from \\{cs_ptr}. @1344
+FX90. Remember to pack file name for |\open|. @1374
+SX91\>X34. Defuse |\outer| test before scanning optional space after `|}|'. @473
+SX92. Don't allow \\{prepare_mag} to cause errors after \\{jump_out}. @84
+# The first page of |DVI| output is {\sl perfect\/}! Pause to play piano.
+BX93. Don't confuse \\{dimen_base} with \\{scaled_base}. @1237
+DX94. Initialize $\\{link}(\\{page_head})\gets\\{null}$ when beginning a page. @991
+SX95. Correct \\{cur_height} more often, since \\{max_depth} might be negative. @972,973
+AX96. Calculate page dimensions properly after vertical kerns. @973
+SX97. Install new \\{page_contents} logic to handle interaction between
+ insertions and |\topskip|. @987,1008
+SX98. Allow \\{top_skip} glue to be a valid breakpoint. @1001
+FX99. Don't forget to count \\{dyn_used} in inner loop [erroneous analysis
+ retracted later]. @1034
+FX100. Set $p\gets q$ after migration step. @655
+FX101. Clear \\{prev_graf} to zero at start of paragraph. @1091
+LX102. Put parens into negated \\{leader_flag} macro. @1078
+# Time out 1720--1920 for John's birthday dinner.
+DX103. Scale \\{best_height} when adjusting \\{page_goal}. @1010
+AX104. Simplify logic of split insertions; three states become two. @981,1019,1020
+MX105. Don't omit first character when showing a macro argument. @400
+RX106. Prevent clobberage if macros have too many parameters. @390
+* 22 Jul 1982
+IX107. Tell how many |DVI| bytes were output. @642
+IX108\>X88. Adjust for singular or plural statistics. @1320,1334
+SX109\>X98. Consider \\{page_head} a glue node, to inhibit unwanted break. @988
+DX110. Introduce \\{new_skip_param} to keep reference counts updated. @679,969,1001
+DX111. Record the correct size of new insertion after it's split. @1010
+DX112. Use \\{free_node}, not \\{flush_node_list}, when recycling insertion
+ nodes. @1022
+SX113. Make online insertions work after \\{get_next} is interrupted. @87,324,343
+BX114. Print newline on interruption stop. @98
+SX115\>X34. Put space before \\{end_write_token}. @1371
+BX116. Don't confuse \\{glue_order} with \\{stretch_order}. @838
+TX117. Set $\\{max_dimen}\gets\hbox{\it'7777777777\/}$, not {\it'777777777}. @421
+MX118. Make |\global\textfont| legal. @1211
+BX119. Fetch |\the\textfont| with \\{equiv}, not \\{fam_font}. @415
+BX120. Call $\\{new_ligature}(f,l,\ldots)$ not $(f,c,\ldots)$. @1035
+RX121. Make \\{show_box} work on random garbage. @174,177
+DX122. Count reference to \\{zero_glue} from \\{cond_math_glue}. @1171
+* 23 Jul 1982
+RX123. Allow $\\{avail}=\\{null}$ when undumping. @1312
+BX124\>X110. Set $\\{width}(\\{glue_ptr}(p))$, not $\\{width}(p)$. @679
+AX125. Put \\{begin_file_reading} inside the \\{start_input} loop. @537
+BX126\>X116. Don't confuse \\{glue_stretch} with \\{stretch_order} [the previous
+ fix went only half\-way]. @838
+BX127. Negate $x$ when calculating badness of shrinkage. @667,678
+LX128\>X121. Remove dangling {\bf else} that parses wrong. @174
+IX129\>X28. Print newline before |{|, not after |}|, when tracing commands. @299
+IX130. Remove colon from overfull box messages. @663,675
+DX131\>X97. Compute \\{page_goal} properly when the first box arrives after
+ inserts. @1001
+BX132. Don't confuse \\{page_size} [now \\{page_goal}] with \\{best_size}. @1017
+AX133. Put heldover insertions at front of contribution list. @1023
+SX134\>X88. Output stats before closing |DVI| file, since the latter
+ decreases \\{font_ptr}. @1333
+TX135. Don't call a |\vbox| an |\hbox|. @674
+TX136. Fix misplaced {\bf end} caused by editing error. @675
+* 24 Jul 1982
+DX137. Don't \\{eq_destroy} any paragraph shape when \\{par_shape} is null. @275
+IX138. Omit blank before |\message| at the beginning of a line. @1280
+AX139\>X104. Don't try to split an insertion when \\{best_node} isn't the
+ split one. @1021
+LX140. Correct another case of `{\bf if} $x\land y$' misunderstood by Pascal.
+ @1021
+IX141. Provide diagnostic info about insertions via |\showlists|. @986
+IX142. Add `|inside a group|' to clarify a warning message. @1335
+IX143. Report \\{prev_depth} on a separate line in |\showlists|. @219
+SX144. Back up input to avoid unexpected clobberage of \\{cur_tok}. @1090
+# Wow what a bug: \\{new_graf} calls \\{build_page}, which invokes the
+ output routine, after which `\/{\bf goto} \\{reswitch}' is a {\sl disaster}.
+DX145. Add insertion glue to \\{page_so_far} instead of subtracting it from
+ the goal. @1009
+IX146. Put extra blank line before overfull box warning. @660
+CX147. Define break at kern consistently between horizontal and vertical lists. @973,1000
+DX148. Renumber so that math nodes are nondiscardable. @147
+TX149. Correct the \\{char_kern} macro: |#|, not $f$. @557
+FX150. Decrease $l$ after reconstituting discretionary break. @916
+EX151. Simplify the hyphen routine, knowing that $\\{link}(s)=\\{null}$. @918
+FX152. Initialize $r\gets q$ in discretionary destruction routine. @883
+* 25 Jul 1982
+AX153. Don't add interline penalty after last line of paragraph. @890
+IX154. Adjust spacing in diagnostic messages. @245
+DX155. Avoid simultaneous use of \\{temp_head} by \\{prune_page_top} and the
+ page builder. @1017
+FX156. Clear the \\{post_break} field of simple discretionaries. @916
+AX157. Split \\{offset} into independent variables \\{term_offset},
+ \\{file_offset}. @54,57,58
+# Am freezing current program as version $-0.25$; a week of TUG lectures
+ begins tomorrow.
+* 5 Aug 1982
+IX158. The `|.err|' file should be `|.log|' instead. @534
+GX159. Allow |\special| strings to contain more than 256 bytes. @585,1368
+MX160\>X99. Undo ``correction'' to a non-bug. @1034
+IX161. Suggest |\&| in help message for unexpected |&|. @1128
+GX162. Make `|E|' a standard option for exiting. @84
+GX163. Restore the use of dead cycles \`a la \TeX78. @1024,1054
+# The previous six changes were suggested during discussions with \TeX82 class.
+SX164. Fix global variable conflict between \\{open_log_file} and \\{new_font}. @1257
+CX165. Allow optional `|=|' when assign to font parameter. @1253
+FX166. Set \\{cur_val} after increasing the number of font parameters. @580
+DX167. Set \\{hash_brace} when matching `|{|'. @476
+IX168\>X88. Clarify meaning of statistics printed. @1334
+GX169. Change |DVI| format to include design size. @602,1260
+DX170. Introduce \\{def_ref} for \\{runaway} messages. @306
+MX171. Restore \\{cur_cs} before calling \\{scan_toks}. @1226
+AX172\>X157. Update \\{print_nl} to dual offset conventions. @62
+AX173\>X163. Move endgame logic inside \\{main_control}, because the output
+ routine becomes active. @1054
+* 6 Aug 1982
+CX174. Allow |INITEX| to load format files. @1337
+EX175. Conserve input stack space by deleting finished token lists. @325
+IX176\>X74. Print the opening `|**|' in the transcript file. @534
+# Now ready to try breaking new ground in |TRIP|.
+SX177. Preserve \\{align_state} from tokens deleted online. @88
+DX178. Set $t$ in all branches of \\{scan_toks}. @473
+SX179. Change `$\\{cur_cmd}\le\\{right_brace}$' to `$\\{cur_tok}\le
+ \\{right_brace_limit}$'; otherwise |\relax| gets through. @477
+CX180. Allow optional |=| when setting |\spacefactor|; disallow zero. @1243
+BX181. Change \\{vpackage}(\\{head}) to \\{vpackage}(\\{link}(\\{head})). @796
+# Shades of 1978!
+LX182. Insert missing {\bf begin} \dots{ \bf end}. @798
+* 7 Aug 1982
+LX183. Keep \\{trie_max} declared in non-|INITEX| [later rescinded]. @950
+DX184. Watch out for empty token list when copying. @466
+DX185. Free unused reference count slot when defining |\everypar|. @1226
+GX186\>X163. Introduce |\maxdeadcycles|. @1012
+# I believe the \\{line_break} routine has passed its test perfectly.
+SX187. Don't put discretionary after |-| inside a discretionary. @1039
+CX188. Change `|\minus|' to `|\minusthe|' [this feature retracted later]. @413
+BX189. Change \\{cur_p} to $r$ (three places). @875
+AX190. Increase range of \\{hc} to \\{halfword}; otherwise end-of-word mark
+ might match a vacant entry in the trie. @892
+FX191. Initialize $b$ in \\{shift_case} routine. @1288
+EX192. Don't back up if a space follows a decimal fraction. @452
+BX193. Don't confuse \\{glue_base} with \\{dimen_base}. @1145
+LX194. Guard against anomalous floating-point values in glue display. @186
+* 8 Aug 1982
+SX195. Avoid infinite loop when |\outer| leads to runaways. @339
+# I worked on that problem about two hours before fixing it.
+IX196. Move final \\{debug_help} to \\{succumb}, except in batch mode. @93
+RX197. Insert kern after spanned box, to defeat access to floating point. @808
+* 9 Aug 1982
+CX198. Include |\leftskip| and |\rightskip| in displayed equations [rescinded
+ later]. @1199
+IX199. Trace line-break computations if $\\{tracing_stats}>2$. @846,856
+DX200. Keep \\{prev_p} up to date when passing a string. @867
+# Now stepping through math stuff; a lot is working.
+DX201. Set $\\{link}(p)\gets z$ when making a fraction. @747
+CX202. Don't reset space factor when beginning |\valign|. @775
+IX203. Don't show glue setting if $\\{glue_sign}=\\{normal}$. @186
+DX204. Clear \\{glue_stretch} and \\{glue_shrink} when creating an unset box. @801
+BX205. Do \\{vpack} in hmode and vice versa when aligning. @804
+AX206. Remove fallacious call to \\{confusion} after alignment in display. @1206
+AX207. Don't test $\\{mode}=\\{vmode}$ in display, test $\\{nest_ptr}=1$. @1145
+FX208. Show an \\{inner_noad} as well as the other types. @690,696
+DX209. Renumber \\{mu_glue} and \\{cond_math_glue} so that the glue display logic
+ works. @149
+BX210. Don't confuse \\{cur_size} with \\{cur_style}. @703
+FX211. Advance $p\gets q$ during second pass over mlist. @761
+IX212. Add helpful hint about |\tracingonline=1|. @1293
+TX213. Delete spurious statement left from sloppy editing. @710
+DX214. Change the subtype when \\{mskip} becomes \\{hskip}. @732
+FX215. Don't forget to use the remainder when computing math glue. @716
+IX216\>X199. Improve paragraph diagnostics using \\{short_display}. @857
+IX217\>X199. Introduce \\{artificial_badness} for better diagnostics. @854,856
+* 11 Aug 1982
+AX218. Introduce \\{char_box} subroutine so that \\{var_delimiter} adds italic
+ correction. @709
+SX219. Save font and char in local variables of \\{make_math_accent}, since
+ it can be recursive. @738
+FX220. Call \\{error} after decrying an invalid character. @346
+* 12 Aug 1982
+IX221\>X199. Install new format for showing break nodes. @846
+# I have been testing \\{line_break} and I think it's working fine.
+BX222. Change $q$ to $p$, in order to catch empty alignments. @812,1206
+SX223. Disallow third part of discretionary in math mode. @1120
+DX224. Don't change \\{tail} if discretionary third part is empty. @1120
+IX225. Say |nonscript|, not |non_script|. @189
+SX226. Inhibit math if |\scriptfont3| is improper. @1195
+IX227\>X199. Introduce {\tt\@}|firstpass| and {\tt\@}|secondpass| comments. @863
+TX228. Change $p$ to $r$ when you mean $r$. @1204
+IX229\>X108. Say |page|, not |pages|, if there's only |1|. @642
+IX230. Insert space before |[]| on truncated |\showlists|. @182
+* 28 Aug 1982
+# Back from vacation after having looked at hardcopy listing of |TRIP| test.
+GX231. Allow |dm| as a unit [later |.5dm1| will be |.5\dimen1|]. @455
+IX232\>X108. Singularize |prevgraf 1 lines|. @219
+IX233. Omit trailing zero count registers when showing completed page numbers. @638
+LX234. Avoid clobbering $a$ by introducing a new local variable $t$. @986
+DX235\>X216. Fix diagnostic printing of discretionaries. @858
+IX236. Don't show unset stretch/shrink that's zero. @185
+CX237\>X198. Make |\halign| in displays consistent with other displays. (Namely,
+ ignore |\leftskip| and |\rightskip| in nonaligned displays;
+ respect the paragraph shape in aligned displays.) @800,1199
+IX238. Parenthesize `|If you're confused ...|'. @403
+IX239. Say `|\fraction|', not `|\xabovex|'. @697
+FX240. Remember to {\bf return} when you should. @1153
+PX241. Use absolute value to make sure {\bf div} is unambiguous. @737
+BX242\>X218. Don't confuse depth with height. @709
+BX243. Use $\\{delta}-\\{height}$, not $\\{height}-\\{delta}$. @736
+BX244. Increase \\{shift_down} to increase the clearance. @745
+IX245. Don't back up after improper use of |\the|. @428
+IX246. Don't give |0pt| as the default result when looking for \\{tok_val}. @428
+FX247. Initialize \\{second_indent} in the easy case. @848
+FX248. Package the equation number. @1204
+QX249. Don't resort to $v\gets\\{max_dimen}$ when glue doesn't stretch or
+ shrink. @1148
+IX250. Insert newline before showing current |\botmark|.
+FX251. Call \\{error} after giving error message. @784
+AX252. Change implementation of |\number|; it should \\{scan_int}, not
+ something internal. @471
+PX253. Introduce symbolic constants like \\{format_area_length}. @524
+PX254. Change \\{quit} to \\{jump_out}, since some compilers treat \\{quit}
+ as a reserved word. @81
+LX255. Add more parentheses to get proper parsing. @1260
+IX256. Say |please| in order to be friendly (or at least polite). @360
+BX257. Don't confuse \\{cur_vcmd} with \\{cur_chr}. @508
+IX258. Use |&| instead of |!| to specify a preloaded format. @1337
+TX259\>X177. Correct |s3| to |s4|. @88
+GX260. Introduce new primitive |\mathchardef|, to save space and time. @1224
+CX261. Use the |[]| convention for noads as well as nodes. @692
+TX262. Correct spelling in call to \\{primitive}: |\xatopx| should be |\xoverx|
+ [later renamed, thank goodness]. @1178
+* 30 Aug 1982
+RX263. Don't fetch \\{link}(\\{null}) in malformed list. @175
+SX264. Initialize \\{align_state} at a better time so that \\{align_peek}
+ doesn't see |&| or |\span|. @785,791
+SX265. Outlaw preamble interfering with $\\{align_state}=0$. @789
+CX266. Add level of grouping to alignment to tabskip locality. @774
+FX267. Check \\{align_state} when scanning $\langle u_j\rangle$. @783
+AX268. Move `\\{unsave}; \\{new_save_level}' from \\{main_control} into
+ \\{fin_col}. @791,1131
+SX269\>X180. Remember \\{cur_chr} when you're looking for optional `|=|'. @1243
+TX270. Change $q$ to $r$ [in code now obsolete]. @804
+IX271. Disable interrupts during \\{back_error} so that help messages aren't
+ clobbered. @327
+SX272. Introduce \\{slow_print} for printing control sequences. @60
+IX273. Initialize \\{del_code}(|"."|$)\gets0$ for error recovery. @240
+SX274. Call \\{end_file_reading} before calling \\{check_outer_validity}. @362
+IX275. Don't delete an extra `|}|' when |\par| will help find a runaway. @395
+* 31 Aug 1982
+BX276. Don't confuse \\{thin_muskip} with \\{thin_muskip_code}. @413
+FX277\>X266. Recover from error if new \\{align_group} ends abnormally. @1132
+IX278. Recover from error if |\par| occurs when $\\{align_state}<0$. @1094
+CX279. Make |\hskip\the\thinmuskip| and |\mskip\the\baselineskip| erroneous. @413
+GX280. Add |\muskip| and |\setmuskip| analogs to |skip| and |\setskip|. @413,1228
+EX281. Don't output |pop| right after |push|. @601
+# The |TRIP| test looks right; now to test for wasted memory.
+# When memory should be empty I find $\\{dyn_used}=18$, $\\{var_used}=267$.
+* 1 Sep 1982
+# Made special |MEMTEX| program, designed to track all memory allocation.
+DX282. Delete reference to \\{last_glue} when a page is packaged. @1017
+IX283. Include \\{save_stack} in the \\{search_mem} debugging routine. @285
+CX284. Disallow |\vfill| in restricted horizontal mode. @1095
+# Most of the memory locations I thought were wasted were actually in good use.
+# Total 192 hours (approx) debugging time so far since July 15.
+* 2 Sep 1982
+# Now looking at all zero counts in profile and extending |TRIP|.
+EX285. Simplify the creation of |vtop| boxes. @1087
+CX286. Set $\\{space_factor}\gets1000$ after |\hbox|. @1076
+PX287. Introduce preamble into |DVI| format. @617
+SX288. Give special \\{chr_code} to |\relax|. @265
+IX289. Don't show `|(null)|' when token list is null, just show nothing. @295
+EX290. Delete the procedure \\{write_name_string}, which is never used.
+CX291. Rename |\xabovex| to |\abovewithdelims|; do the same for
+ |\xatopx| and |\xoverx|. @1178
+QX292. Improve \\{clean_box} so that it recognizes cleanliness better. @720
+IX293. Report a |Missing delimiter| more meaningfully. @1161
+RX294. Give \\{endv_token} a \\{chr} code of 128 so that it will end a file name. @289
+RX295. Test present of math fonts {\sl after\/} parsing an mlist, not
+ before. @1138,1195
+IX296. Omit `|recent contributions|' and/or `|current page|' when they are
+ empty. @218,986
+IX297. Display what \TeX\ has deleted after improper discretionary list
+ has arisen. @1121
+IX298. Show what math character was undefined. @723
+IX299. Improve the |Incompatible magnification| error; break it into two lines. @288
+DX300. Put new cases into \\{flush_node_list}, to recycle mlist noads. @698
+* 6 Sep 1982
+FX301\>X300. Insert a necessary `{\bf goto} \\{done}' in that new material. @698
+# It took two hours to diagnose that {\bf goto} problem.
+TX302\>X295. Change `|2|' to `|3|' in help message for extension fonts. @1195
+IX303. Add a special note if material is being held over for the next output. @986
+RX304. Divide before multiplying in \\{make_left_right}, to avoid overflow. @762
+IX305. Introduce the \\{box_error} routine. @992
+FX306. Clear \\{arith_error} after overflow has been reported. @460
+BX307\>X249. Don't confuse \\{stretch} with \\{glue_stretch}. @1148
+DX308. Set $\\{glue_sign}\gets\\{normal}$ when packaging with glue ratio
+ zero. @558,664
+AX309. Test for overflow before attaching the sign. @448
+# That all worked! Now trying |min_quarterword| negative.
+LX310. Take absolute value before applying {\bf mod} in \\{new_trie_op}. @944
+LX311. Say $\\{qi}(c)$, not $c$, when testing |TFM| flags [now obsolete]. @573
+LX312. Initialize \\{token_ref_count}(\\{def_ref}) to \\{null}, not zero. @473
+LX313. Change the type of \\{vsplit} parameter $n$ from \\{quarterword} to
+ \\{eight_bits}. @977
+LX314. Initialize \\{null-delimiter} different form \\{null_character}. @685
+LX315. Insert \\{qi} twice in \\{scan_delimiter}. @1160
+FX316. Insert \\{qi} in \\{scan_math}. @1151
+FX317. Insert \\{qo} in \\{fetch}. @722,723
+FX318. Insert \\{qi} in \\{set_math_char}. @1155
+FX319. Insert \\{qi} in \\{math_ac}. @1165
+FX320. Insert \\{qo} in \\{mlist_to_hlist}. @755
+IX321. Use brackets around 8-bit characters in \\{print_ASCII}. @68
+IX322. Include \\{hyph_list} in the \\{search_mem} debugging routine. @933
+# Now compiling non-|INITEX| to try an industrial-strength version.
+LX323. Add {\bf return} to \\{final_cleanup}, because some Pascal compilers
+ insist that each label be used. @1335
+DX324. Compute \\{par_token} when undumping. @1314
+* 11 Sep 1982
+IX325. Emit newline before file name, if near end of line. @537
+CX326. Define |\ifx| for arbitrary tokens. @507
+* 12 Sep 1982
+IX327. Don't ask users to type |x| twice before exiting. @84
+GX328. Install new features |\openin|, |\read|, |\ifeof|, |\closein|; rename
+ existing |\open|, |\send|, |\close| to be |\openout|, |\write|,
+ |\closeout|. @209,313,1275
+GX329. Install new feature |\expandafter|. @368
+PX330. Change the default file area from `|<TeX>|' to `|TeXinputs:|'. @574
+* 13 Sep 1982
+GX331. Install new feature |\string|. @472
+AX332. Remove spurious space printed by \\{sprint_cs}. @263
+# All tests passed now! But when I played with the system I found another bug
+ (undetected by |TRIP|):
+FX333. Set $r\gets s$ after matching macro parameter tokens. @397
+* 16 Sep 1982
+IX334\>X199. Introduce serial numbers in line-break records, improving
+ readability and independence. @846
+IX335. Don't abort when \\{file_name_size} is exceeded. @519
+* 17 Sep 1982
+IX336. Remove unwanted period from font capacity message. @567
+* 18 Sep 1982
+GX337\>X329. Make |\expandafter| more powerful by moving it from semantics
+ to syntax [i.e., from stomach to mouth]. @368
+* 19 Sep 1982
+IX338. Improve error recovery for `|Missing number|'. @415
+* 22 Sep 1982
+QX339. Suppress italic correction between letters in math mode except in math
+ fonts. @752
+* 24 Sep 1982
+PX340. Define $\\{null}=\\{mem_bot}$, not \\{min_halfword}, because there's
+ a reference to \\{link}(\\{null}) in \\{try_break}. @115
+DX341. Initialize $\\{str_start}[0]\gets0$. @47
+IX342. Avoid blank space at beginning of line. @638
+DX343. Set type of new box in math mode to \\{ord_noad}, not \\{inner_noad}. @1076
+* 28 Sep 1982
+# Here are the first changes made to the preliminary listing of \TeX82 that was
+ published by the \TeX\ project earlier this month.
+F520. Insert the missing cases \\{letter} and \\{other_char} after
+ \\{x_token} looks ahead. @1038
+C521. Change `|\pause|' to `|\pausing|'. @236
+D522. Reset \\{overfull_rule} when determining tabskip glue. @804
+A523. Fix the logic for scanning |\ifcase| [in obsolete syntax---everything
+ is still done with braces since `|\fi|' doesn't exist yet]. @509
+* 30 Sep 1982
+I524. Change |"0.0"| to |"?.?"| (suggested by DRF). @186
+* 2 Oct 1982
+Q525. Use conditional thin spacing next to `Inner' noads. @764
+Q526. Make thick spaces conditional. @766
+* 4 Oct 1982
+P527. Increase \\{trie_size} from 7000 to 8000, because of Frank Liang's improved
+ (but longer) hyphenation patterns. @11
+* 6 Oct 1982
+F528\>X330. Change the string lengths to match the new \\{\TeX_format_default}. @520
+# Version 0 of \TeX\ is being released today!
+* 8 Oct 1982
+B529. Fix a blunder: I decreased $h$ mod a quarterword when it should have
+ been decreased mod \\{trie_op_hash_size} (HWT). @944
+* 9 Oct 1982
+P530\>X258. Fix a typo (`|!|' not `|&|') in the |WEB| documentation. @524
+F531. Remember to call \\{initialize} if a different format was preloaded
+ (Max D{\'\i}az). @1337
+# Version 0.1 incorporates the above changes.
+* 12 Oct 1982
+G532. Add the `|\immediate|' feature, by popular request. @1375
+# Version 0.2 incorporates this (somewhat extensive) change.
+* 13 Oct 1982
+P533. Introduce new |WEB| macros so that \\{glue_ratio} is more easily changed. @109
+# I began writing {\sl The \TeX book\/} today: edited the old preface and
+ searched in the library for quotations.
+* 14 Oct 1982
+B534. Change the type of \\{hd} to \\{eight_bits}; it's
+ not a \\{quarterword} (HWT). @649
+S535\>X281. Revise the optimization of\/ |DVI| commands: It's not always safe to eliminate
+ \\{pop} when the preceding byte is \\{push}, since |DVI| commands
+ have variable length! (Embarrassing oversight caught by DRF.) @601
+* 15 Oct 1982
+C536. Test `$\\{prev_depth}>\\{ignore_depth}$', not `$\ne$'. @679
+# Version 0.3 incorporates the above changes.
+* 16 Oct 1982
+P537. Omit definition of \\{align_size}; it's never used (Bill Scherlis). @11
+I538. Inhibit error messages when packaging box 255. @1017
+* 21 Oct 1982
+A539\>X145. Subtract $\\{width}(q)$ from \\{page_goal}, don't add it to
+ $\\{page_so_far}[1]$. @1009
+# Version 0.4 incorporates the above changes.
+* 22 Oct 1982
+P540. Increase the amount of lower (variable-size) memory from 12000 to 13000,
+ since the \TeX\ program listing now needs about 11500. [At this time
+ there still is a fixed boundary between upper and lower memory.] @12
+G541. Add a new parameter |\boxmaxdepth|. @1086
+# Version 0.5 incorporates the above changes.
+* 26 Oct 1982
+B542. Fix an off-by-one error caught by Gabi Kuper and HWT.
+ (I forgot `${}+1$'). @1317
+B543. Fix the spacing of displayed control sequences: \\{print_cs} should base its
+ decision on $\\{cat_code}(p-\\{single_base})$, not $\\{cat_code}(p)$. @262
+# The |TRIP| test detected this bug, but I didn't notice.
+* 27 Oct 1982
+S544. Set \\{math_type} before saying $\\{fetch}(\\{nucleus}(q))$, since
+ fetching can have a side effect. @752
+* 28 Oct 1982
+G545. Install a major change: Fonts now have identifiers instead of code letters.
+ Eliminate the `|\:|' primitive, and give corresponding new
+ features to `|\the|'. @209
+# Actually I began making these changes on October 26, but I needed two days
+ to debug them and to put Humpty Dumpty together again.
+# At this time I'm also drafting macros for typesetting {\sl The \TeX book}.
+# The above changes have been incorporated into Version 0.6.
+* 30 Oct 1982
+# After years of searching, I've finally found a definitive definition of
+ the printer's point; and (unfortunately) my previous conjecture was
+ wrong. The truth is that $\rm83\,pc=35\,cm$, exactly;
+ so I am changing \TeX\ to conform.
+C546. Revise unit definitions for the `real' printer's point. @458,617
+# Version 0.7 incorporates the above.
+* 1 Nov 1982
+# Oops! Retract error \#546, and retract \TeX\ Version 0.7;
+ the source of my information about points was flaky after all.
+ My original suppositions were correct,
+ as confirmed by NBS Circular 570.
+* 4 Nov 1982
+C547. Revise the definition of |dd|, conforming to the definitive value
+ shown me by Chuck Bigelow. @458
+R548\>545. Introduce ``frozen'' copies of
+ font identifiers, to be returned by |\the\font|, so that font
+ manipulation is more robust. @1257
+* 5 Nov 1982
+D549. Reset \\{looseness} and paragraph shape when beginning a |\vbox|. @1083
+* 6 Nov 1982
+D550. De-update \\{align_state} when braces are in constants. @442
+I551\>X294. Improve error recovery for bad alignments. @1127
+# Today I wrapped up Chapters 4 and 5.
+* 8 Nov 1982
+G552. Give more power to |\let|: the right-hand side needn't be a control
+ sequence. @1221
+I553. Amend \\{show_context} to say
+ `$(\\{base_ptr}=\\{input_ptr})\lor{}$'; otherwise undefined control
+ sequences can be invisible in unusual cases (John Hobby). @312
+A554. Compute demerits more suitably by adding a penalty squared, instead of
+ adding penalties before squaring. @859
+# Previously a slightly loose hyphenated line followed by a decent line
+ was considered worse than a decent hyphenated line followed by
+ a quite loose line.
+* 10 Nov 1982
+E555. Save a bit of buffer space by declaring \\{pool_file} only in
+ |INITEX|. @50
+* 11 Nov 1982
+I556. Introduce a new context indicator to clarify \TeX's scanning state:
+ A special type
+ called \\{backed_up} is distinguished from other kinds of \\{inserted}
+ lists; it is called `recently read' or `to be read again', while
+ others are called `inserted'. @314
+I557. Append a comment, `|treated as zero|', to the missing-number message. @446
+I558. Ignore the settings of\/ |\hfuzz| or |\vfuzz| if\/ |\hbadness| or |\vbadness|
+ is less than 100. @666,677
+* 13 Nov 1982
+# Major surgery on the program is planned for today, because of new ideas
+ suggested by correspondence with MDS and other macro writers.
+G559. Introduce a new |\tokens| register; this will be useful and easy to add,
+ since \TeX\ already can handle |\everypar| and |\output|. @1227
+C560\>X34. Change \\{get_x_token} to \\{get_token} when scanning an optional
+ space; then a construction like
+ |\def\foo{...}\foo| won't complain that |\foo| is undefined. @443
+# This change was retracted when it was being debugged, because it could
+ cause \\{endv} to abort the job. Then it was re-established again
+ when I found that \\{endv} needed to be more robust anyway.
+ [But it was eventually rescinded again.]
+G561. Make |\span| mean `expand' in a preamble. @782
+E562. Use three separate {\bf if\/} tests instead of
+ `$\land$' in the inner loop of \\{get_next}, to gain efficiency. @342
+R563. Introduce \\{get_r_token} so that assignments have uniform error
+ messages and so that frozen equivalents cannot be changed. @1215
+# I gave a few variables more mnemonic names as I made these changes.
+C564. Move conditional statements from the semantics (`stomach') part of
+ \TeX\ to the syntax (`mouth') part, by introducing `|\fi|'.
+ Also introduce |\csname| and |\endcsname|. @372,489\hbox{--}500
+# This makes macros much more predictable and logical, but it is by far
+ the most drastic change ever made to \TeX. The program began to come
+ back to life only after three days of solid hacking.
+# Several other things were cleaned up as part of this change
+ because it is now more natural to handle them differently.
+ For example, a null control sequence has now become more logical.
+# The result of all this is called Version 0.8.
+* 18 Nov 1982
+# Today I resumed writing Chapter 8. Tomorrow I'm $\,2^{14}$ days old!
+* 21 Nov 1982
+F565. Declare $c$ as a local variable for hyphenation (DRF). @912
+E566. Omit the ``first pass'' and try hyphenations immediately,
+ if\/ |\pretolerance| is negative (suggested by DRF). @863
+R567. Don't ship out incredibly huge pages; they might foul up
+ |DVI| files. @641
+* 2 Dec 1982
+G568. Add new features |\everymath| and |\everydisplay|. @1139,1145
+G569. Add a new feature |\futurelet|. @1221
+# The changes above have been incorporated into Version 0.9 of TeX.
+* 7 Dec 1982
+G570. Add a new |\endinput| primitive (suggested by FY). @362,378
+* 8 Dec 1982
+I571. Try \\{off_save}, if\/ |\par| occurs in restricted horizontal mode.
+ (This avoids embarrassment if \TeX\ says `type a command or
+ say |\end|', then when you type |\end| it says you can't!)
+ [However, I soon retracted this change.] @1094
+* 21 Dec 1982
+A572. Redefine |\relax| so that its \\{chr} field exceeds 127. (This facilitates
+ the test for end in \\{scan_file_name}.) @265
+F573\>566. Call \\{begin_diagnostic} when omitting
+ the first pass of line breaking. @863
+A574. Fix the logic of glue scanning: In |\hskip-1pt plus2pt| the minus should
+ apply only to the |1pt|. @461
+* 23 Dec 1982
+I575. Renumber the decimal codes in paragraph statistics for loose and tight
+ lines; they were ordered backwards. @817
+C576. Treat a paragraph that ends with leaders like a paragraph that
+ ends with glue. @816
+C577. Allow commas as alternates to radix points, for Europeans. @438
+C578. Change |\hangindent| to a normal dimension parameter. [It had been
+ a combination of\/ |\hangindent| and |\hangafter|, with special
+ syntax.] @247
+G579. Make |\prevgraf| accessible to users. @422,1244
+G580. Split |\clubpenalty| off from |\widowpenalty|. @890
+# I'm typing Chapter 14 while making these changes.
+* 24 Dec 1982
+S581. Use \\{back_input} instead of {\bf goto} \\{reswitch} when
+ inserting |\par|, because |\par| may have changed. @1095
+* 25 Dec 1982
+# It's 10pm after a very Merry Christmas!
+I582\>X328. Don't prompt for a new file name if\/ |\openin| doesn't find a file. @1275
+G583. Add a new |\jobname| primitive. @472
+I584. Give the user a way to delete the dollar sign, when \TeX\ decides
+ to insert one. @1047
+C585. Allow optional equals after |\parshape|, and implement |\the\parshape|.
+ @423,1248
+* 26 Dec 1982
+I586. Add an \\{if_line_field} to the condition stack entries,
+ so that more informative error messages can be given. @489
+D587\>549. Introduce a \\{normal_paragraph} procedure, since initialization is needed
+ also within |\insert|, |\vadjust|, |\valign|, |\output|. @1070
+* 27 Dec 1982
+G588. Give users access to |\pagetotal| and |\pagegoal|. (Analogous to
+ \#679 and \#585, but simpler.) @1245
+I589\>X199. Introduce |\tracingpages|, allowing users to see
+ page-optimization calculations. Also split |\tracingparagraphs| off from
+ |\tracingstats|. @987,1005,1011
+# The changes above have been incorporated into Version 0.91 of \TeX.
+* 31 Dec 1982
+P590. Break the \\{build_page} procedure into two parts, by extracting
+ the section now called \\{fire_up}. [This is necessary because
+ some Pascal compilers, notably for IBM mainframes, cannot
+ deal with large procedures.] @1012
+S591\>564. Make |\ifodd1\else| legal by introducing \\{if_code}. @489
+Q592. Improve alignments when columns don't occur: Don't append null boxes
+ for columns missing before |\cr|, and zero out the tabskip
+ glue after nonpresent columns. @802
+I593. Make the error message about overfull alignment more intelligible.
+ @801,804
+# The changes above have been incorporated into Version 0.92 of \TeX82,
+ which was the last version of 1982,
+ completed at 11:59pm on December 31.
+* 3 Jan 1983
+# Today I'm beginning to write Chapter 15, and
+ planning the |\output| routine of |plain.tex|.
+C594\>X186. Change the logic of \\{its_all_over}; use \\{max_dead_cycles}
+ here too, instead of the fixed constant~100. @1054
+F595\>X34. Don't forget to \\{pop_nest} when an insert is empty. Also disallow
+ optional space after |\insert|$\,n\,$|{...}|. @1100
+* 4 Jan 1983
+C596\>541. Use the |\boxmaxdepth| that's declared inside a |\vbox| when packaging it.
+ @1086
+C597. Rename |\groupbegin| and |\groupend| as |\begingroup| and
+ |\endgroup|. @265
+G598\>594. Make |\deadcycles| accessible to users. @1246
+Q599. Base the split insertions on natural height plus depth, not
+ on \\{delta}. @1010
+# The changes above have been incorporated into Version 0.93.
+* 6 Jan 1983
+D600. Add \\{push_math} to handle a case where I forgot
+ to clear \\{incompleat_noad}. (This long-standing bug was
+ unearthed today by Phyllis Winkler.) @1136
+G601\>588. Add |\pageshrink|, etc., too. @1245
+G602. Introduce new parameters |\floatingpenalty|, |\insertpenalties|. Also
+ adopt a new internal representation of insertion nodes,
+ so that |\floatingpenalty|, |\splittopskip| and |\splitmaxdepth|
+ can be stored with each insertion. @140,1008
+* 7 Jan 1983
+Q603. Improve the rules for entering \\{new_line}, in particular
+ when the end-of-line character is active. @343
+* 9 Jan 1983
+Q604. Distinguish between implicit and explicit kerns. @155,896
+C605. Change the name |\ignorespace| to |\ignorespaces|. @265
+C606\>560. Don't omit a blank space after |\def|, |\message|, |\mark|, etc.;
+ the previous hodge-podge of rules is impossible to learn. @473
+# The above changes appear in Version 0.94.
+* 12 Jan 1983
+# Beginning to write the chapters on math today.
+G607. Add a new feature: active characters in math mode. @1151
+* 15 Jan 1983
+A608. Fix a surprise bug: `|$1-$|' treated the |-| as binary. @729
+D609. Initialize \\{space_factor} inside discretionaries. @1117
+* 16 Jan 1983
+F610. Fix an incredibly embarrassing bug: I forgot to update \\{spotless} in the
+ \\{error} routine!
+# While fixing this, I decided to change
+ \\{spotless} to a more general \\{history} variable, as suggested
+ by IBMers who want a return code. @76,82,1335
+I611. Replace two calls of \\{confusion} by attempts at error recovery, in places
+ where `|This can't happen|' could actually happen. @1027,1372
+* 18 Jan 1983
+R612. Introduce the \\{normalize_selector} routine
+ to protect against startup anomalies
+ when the transcript file isn't open. Also make \\{open_log_file}
+ terminate in some cases. @92,535
+R613\>591. Insert |\relax|, not a blank space, to cure infinite
+ loop like |\ifeof\fi| (LL). @510
+G614. Change the old |\limitswitch| to |\limits|, |\nolimits|, and
+ |\displaylimits|. Incidentally, this fixes a bug in the former
+ positioning of integral signs. @682,749
+C615. Give a |\char| in math mode its inherited |\mathcode|. @1151
+Q616\>525. Make underline, overline, radical, vcenter, accent noads and |{...}|
+ all revert to type Ord instead of type Inner. Introduce a new primitive
+ |\mathinner|. (This fixes the spacing, which
+ got worse in some ways after change \#525.) @761
+# I'm working on Appendix G today.
+* 19 Jan 1983
+G617. Introduce a |\mathchoice| primitive. @1174
+C618. Move |\input| from the stomach to the mouth. @378
+C619\>X260. Introduce |\chardef|, analogous to |\mathchardef|. @1038,1224
+G620. Change |\unbox| to |\unhbox| and |\unvbox|; also add |\unhcopy|. @1110
+C621. Consider |\spacefactor|, |\pagetotal|, etc., as part of
+ \\{prefixed_command}, even though they are always global. @1211
+* 20 Jan 1983
+C622. Switch modes when |\hrule| occurs in horizontal mode or |\vrule|
+ in vertical. @1090,1094
+G623. Add a new |\globaldefs| feature. @1211
+* 21 Jan 1983
+E624. Optimize the code, in places where it's important (based on
+ frequency counts of \TeX\ usage
+ accumulated during the past week): Introduce \\{fast_get_avail}
+ and \\{fast_store_new_token}; reduce procedure-call overhead
+ in \\{begin_token_list}, \\{end_token_list}, \\{back_input},
+ \\{flush_node_list}; change some tests from `{\bf if} $a\land b$' to
+ `{\bf if}~$a$ {\bf then if}~$b$'. @122,371
+* 22 Jan 1983
+E625. Save space in math lists: Don't insert penalties within restricted
+ horizontal mode; simplify trivial boxes. @721,1196
+S626. Fix a surprising oversight in the \\{rebox} routine:
+ Ensure that $b$ isn't a vbox. @715
+C627\>545. Make |\nullfont| a primitive, so that \\{cur_font} always
+ has a value. (This is a dramatic improvement over \TeX78, where a
+ missing font was a fatal error called `|Whoa|'!) @552
+* 24 Jan 1983
+I628\>586. List all incomplete |\if|'s when the job ends. @1335
+* 29 Jan 1983
+C629\>552. Change initialization of \\{align_state} so that |\halign\bgroup|
+ works. @777
+* 30 Jan 1983
+D630\>625. Be sure to test `\\{is_char_node}($q$)' when checking for a trivial
+ box. @721
+# By extraordinary coincidence, this bug was caught when somebody
+ used font number~11 ($=\\{kern_node}$) in the second character
+ of a list of length~2!
+I631\>X168. Improve format for stats at end of run, as suggested by DRF. @1334
+# The changes above have been incorporated into Version 0.95.
+C632. Don't ignore the space after a control symbol (except `|\ |'). @354
+P633. Remove all trailing spaces at the right of input lines,
+ so that there's perfect compatibility with IBM systems that
+ extend short lines with spaces. @31
+* 3 Feb 1983
+I634. Assume that a \\{math_accent} was intended, after giving an error
+ message in the case $\\{mmode}+\\{accent}$. @1165
+G635. Add new primitives |\iftrue| and |\iffalse|. @488
+* 6 Feb 1983
+A636\>X304. Improve the accuracy of fixed-point arithmetic when
+ calculating sizes for |\left| and |\right|. (I had started by
+ dividing \\{delimiter_factor}, not \\{delta1}, by 500.) @762
+* 12 Feb 1983
+C637. Change the name |\delimiterlimit| to |\delimitershortfall|. @248
+C638. Make |\abovewithdelims..| equivalent to |\above|; change the
+ order of operands so that delimiters precede the dimension. @1182
+C639\>607. Remove the kludgy math codes introduced earlier;
+ make |\fam| a normal integer parameter and allow |\mathcode|
+ to equal $2^{15}$. @1233
+R640. Don't let |\spacefactor| become more than $2^{15}$. @1233,1243
+# I finished drafting Chapter 17 today.
+* 14 Feb 1983
+I641\>639. Replace octal output (\\{print_octal}) by hexadecimal (\\{print_hex})
+ so that math codes are clearer. @67
+F642\>619. Don't forget \\{char_given} in the \\{math_accent} routine. @1124
+* 17 Feb 1983
+C643\>622. Switch modes when |\halign| occurs in horizontal mode, or |\valign|
+ in vertical mode. @1090,1094
+* 18 Feb 1983
+I644. Add a new feature |\tracingrestores|. This requires a new procedure called
+ \\{show_eqtb}, whose code can be
+ interspersed with the \\{eqtb} definitions. @252
+* 25 Feb 1983
+I645\>622. Suggest using |\leaders| when the user tries a horizontal rule
+ in restricted horizontal mode. @1095
+* 27 Feb 1983
+I646. Specify the range of source lines, when giving warning messages
+ for underfull or overfull boxes in alignments. @662,675
+# Why did it take me all day to type the middle part of Chapter 18?
+* 4 Mar 1983
+G647. Introduce a new feature |\xcr| (suggested by LL). [Changed later to
+ `|\crcr|'.] @785
+I648\>631. Subtract out \TeX's own string requirements from the stats. @1334
+* 6 Mar 1983
+G649. Add new features |\everyhbox| and |\everyvbox|. @1083,1167
+* 9 Mar 1983
+R650\>X295. Avoid accessing \\{math_quad} when the symbol fonts aren't known
+ to be present. @1199
+P651\>533. Introduce \\{float} and \\{unfloat} macros to aid portability (HWT). @109
+C652. Introduce new names |\abovedisplayskip| and |\belowdisplayskip| for
+ the old |\dispskip|; also |\abovedisplayshortskip| and
+ |\belowdisplayshortskip| for the old |\dispaskip| and |\dispbskip|. @226
+* 10 Mar 1983
+C653. Unbundle |\romannumeral| from |\number| (suggested by FY). @468
+* 12 Mar 1983
+C654. Ignore leading spaces in \\{scan_keyword}. @407
+* 14 Mar 1983
+E655\>631. Use \\{write} and \\{write_ln} directly when printing stats. @1334
+* 16 Mar 1983
+Q656\>602. Refine the page-break cost function (introducing `\\{deplorable}',
+ which is not quite `\\{awful_bad}'), after suggestion by LL. @974,1005
+# The changes above have been incorporated into Version 0.96.
+* 18 Mar 1983
+G657. Add a new feature |\everyjob| suggested by FY. @1030
+* 19 Mar 1983
+I658. Don't treat left braces specially when showing macros. @294
+C659. Ignore blanks that would otherwise become undelimited arguments. @393
+* 21 Mar 1983
+F660\>X280. Make |\lastskip| handle \\{mu_glue} as well as ordinary glue. @424
+C661\>561. Expand only one level in a preamble |\span|. @782
+* 22 Mar 1983
+C662. Let a single |#| suffice in |\tokens|, |\message|, etc. (The previous rule,
+ in which |##| was always required as in macros, was a loser especially
+ in |\write| where you had to say |####|!) @477
+C663\>X328. Require the keyword `|to|' in |\read|. (This will avoid the common error
+ of an incomplete constant when no space appears
+ before the |\cs|.) Also allow terminal
+ I/O as a default when a stream number is out of range. @482,1225,1370
+* 26 Mar 1983
+C664. Replace |\ifeven|\<countnumber> by |\ifodd|\<number>, for better
+ consistency of language. @504
+S665\>564. Introduce the \\{change_if_limit}, to overcome a big surprise
+ bug relating to |\if\if aabc\fi|. @497
+# Such examples show that \\{cur_if} might not be current,
+ in my original implementation.
+* 28 Mar 1983
+G666\>X326. Tolerate non-characters as arguments to |\if| and |\ifcat|. @506
+C667. Change `|absent|' to `|void|', a better word. @487
+C668. Clear the \\{shift_amount} in |\lastbox|, since I don't
+ want to figure out what it means in all cases. @1081
+* 29 Mar 1983
+I669. Wake up the terminal before giving an error message. (This
+ means a special \\{print_err} procedure is introduced.)
+ (Suggested by DRF.) @34,73
+* 1 Apr 1983
+# Today I finished Chapter 21 (boxes) and began to draft Chapter 22 (alignments).
+G670. Allow periodic preambles in alignments. @793
+C671. Make |\leaders| line up according to the smallest
+ enclosing box. @627,636
+Q672. Allow hyphenation after whatsits (e.g., after items for an index). @896
+* 2 Apr 1983
+Q673. Call \\{build_page} when |\par| occurs in vertical mode. @1094
+C674. Clear \\{aux} in \\{init_row}, for tidyness. @786
+* 4 Apr 1983
+C675. Let digits switch families in math mode. @232
+* 7 Apr 1983
+Q676\>602. Refine the test for not splitting an insertion. @1008
+* 8 Apr 1983
+C677\>647. Rename |\xcr| as |\crcr|, at LL's request. @780
+* 9 Apr 1983
+# Took a day off and had a chance to help print a sample page on
+ a 150-year-old letterpress in Murphys, California.
+* 11 Apr 1983
+I678. Recover more sensibly after a runaway preamble. @339
+* 12 Apr 1983
+C679\>X328. Make |\read| span several input lines, if necessary to get
+ balanced braces. @482
+* 14 Apr 1983
+S680. Fix a subtle bug found by JS: \S882 can make $q$ a \\{char_node},
+ so we need to test `{\bf if} $\lnot\\{is_char_node}(q)$'.
+ [Actually I discovered much later that the real bug was
+ to omit `{\bf else}' at this point.] @881
+* 15 Apr 1983
+C681. Make |\uppercase| and |\lowercase| apply to all characters, regardless
+ of category. @1289
+# 7:30am. After working all night, I completed a draft of the manual thru
+ Chapter 22, for distribution to volunteer readers.
+# 5pm. The changes above have been incorporated into Version 0.97.
+* 17 Apr 1983
+R682. Change `\\{small_number}' to `$0\,.\,.\,65$' in the
+ hyphenation routine (DRF). @901
+I683. Flush patterns in the input when the user tries |\patterns|
+ outside of\/ |INITEX| (suggested by DRF). @1252
+# Tomorrow I fly to England, where I'll lecture and write a paper about
+ `Literate Programming' [{\sl Comp.~J. \bf27} (1984), 97--111].
+* 14 May 1983
+I684\>663. Improve the behavior of\/ |\read| from terminal
+ (suggested by Todd Allen at Yale).
+ [I'd forgotten to implement the extended stream numbers in \#663.
+ Also, the prompt is now omitted if $n<0$.] @484
+* 18 May 1983
+I685. Restrict |\write| $n$ to the transcript file only, if $n<0$. @1350
+C686\>X188. Unify the syntax for registers and internal quantities. (Remove
+ primitives called `|\insthe|' and `|\minusthe|'; rename
+ \\{scan_the} to \\{scan_something_internal}, and change its
+ interface accordingly; clean up command codes generally.) @209,413
+G687. Introduce new parameters |\hoffset|, |\voffset|. @617
+* 24 May 1983
+G688. Introduce a new parameter |\everycr| (suggested by MDS). @774,799
+# Many macro writers and preliminary-manual readers have been requesting
+ new features; I'll try to keep the language as concise and consistent
+ as possible.
+* 25 May 1983
+G689. Introduce |\countdef|, |\dimendef|, etc.\ (suggested by DRF long ago,
+ easy now in view of \#686). @1224
+G690. Introduce |\advance|, |\multiply|, |\divide| (suggested by FY). @1240
+G691. Introduce |\hyphenchar|; this requires a new command
+ \\{assign_font_int}, plus minor changes to about 15 modules. @915
+G692. Introduce |\skewchar| (easy because of \#691). @741
+G693. Introduce |\noexpand|. (I had difficulty thinking of how to
+ implement this one!) @358,369
+G694. Introduce |\meaning|. @296
+G695\>X231. Remove `|dm|' and `|vu|'; allow the more general `|.5\hsize|'. @455
+C696. Change `|\texinfo| $f$ $n$' to `|\fontdimen| $n$ $f$'. @578
+* 27 May 1983
+G697. Add a new feature |\afterassignment| (suggested by ARK). @1269
+C698\>619. Adjust the timing so that commands like `|\chardef\xx=5\xx|'
+ behave sensibly. @1224
+* 28 May 1983
+C699. Ignore `|\relax|' as if it were a space, in math mode and in a few other
+ places where |\relax| would otherwise be erroneous. @404
+Q700. Improve |\mathaccent| spacing with respect to subscripts
+ and superscripts (suggested by HWT). @742
+* 30 May 1983
+C701\>598. Terminate a job only when $\\{dead_cycles}=0$. @1054
+# The changes above constitute Version 0.98.
+* 3 Jun 1983
+# I finished the draft of Chapter 23 (output routines) today.
+G702. Allow |\mark| and |\insert| and |\vadjust| in restricted
+ horizontal mode, and also in math mode. (This is a comparatively
+ big change, triggered by the fact that |\mark| in a display
+ presently causes \TeX\ to crash with `|This can't happen|'!)
+ The global variable \\{adjust_tail} is introduced. @796,888,1085
+* 6 Jun 1983
+G703\>695. Replace (and generalize) the previous uses of\/ |ht|, |wd|, and |dp|
+ in dimensions by introducing the new control sequences
+ |\ht|, |\wd|, and |\dp|. @1247
+I704. Display sub-parts of noads with the symbols |^| and |_| instead of
+ |(| and~|[|. @696
+C705\>694. Allow |A..F| in hex constants to be \\{other_char} as well as
+ \\{letter}. @445
+* 7 Jun 1983
+E706\>654. Remove an instance of \<Scan optional space>, since it's now
+ redundant. @457
+C707. Legalize |\mkern\thinmuskip| and |\mkern5\thinmuskip|. @456
+C708. Clean up the treatment of optional spaces in numerical specifications. @455
+# A construction like |2.5\space\space\dimen0| was previously
+ valid after `|plus|' or `|minus|' only!
+# I'm obviously working on Chapter~24 today.
+C709\>545. Allow `|\font|' as a \<font identifier> for the current font. @577
+C710\>623. Don't make |\gdef| global when $\\{global_defs}<0$. @1218
+E711. Produce \\{zero_glue} as the outcome of
+ |\advance\spaceskip by-\spaceskip|. @1229
+I712. Make |\show| do something appropriate for every possible token. @1294
+G713\>559. Replace the (single) |\tokens| parameter by an array of
+ 256 token registers. @230
+C714. Allow |\indent| in math mode; also make |\valign| in math mode produce the
+ `|Missing|~|$|' error. @1046,1093
+E715. Remove redundant code: There's no need to check \\{cur_group}
+ or call \\{off_save} when starting alignments or equation numbers
+ in displays. @1130,1142
+* 8 Jun 1983
+C716. Disallow |\openout-1| and |\closeout-1|. @1350
+C717. Disallow |\lastbox| in math mode. @1080
+* 9 Jun 1983
+I718. Call \\{back_error}, not \\{error}, when |\leaders| aren't followed by
+ proper glue. @1078
+D719. Initialize for a possible paragraph, after |\noalign|
+ in a |\valign|. @785
+* 10 Jun 1983
+C720\>708. Expand the optional space after an ASCII constant. @442
+* 12 Jun 1983
+C721. Set $\\{space_factor}\gets1000$ after a rule or a
+ constructed accent. @1056,1123
+* 14 Jun 1983
+D722. Correct a serious blunder: Set $\\{disc_width}\gets0$ before testing
+ if $s$ is null (caught by JS). @869
+# This is a real bug that existed since the beginning!
+ It showed up on page~37 of the
+ Version~0 |TRIP| manual, but I didn't notice the problem.
+C723\>708. Make optional spaces after \<dimen> like those after \<number>. @448
+C724\>568. Insert \\{every_display} before calling \\{build_page}. @1145
+I725\>648. Report \TeX's capacity on overflow errors in a way that's
+ fully consistent with other statistical reports. @42
+* 17 Jun 1983
+C726. Make all |\tracing| decisions on the basis of $\ge$ versus $<$,
+ not $\ne$ versus~$=$. @581
+# Today I finished the draft of Chapter 27 (the last chapter)!
+# The changes above were released as Version 0.99 on June 19, 1983.
+* 20 Jun 1983
+C727. Set |\catcode`\%=14| in |INITEX|. @232
+C728\>587. Call \\{normal_paragraph} when |\par| occurs in vertical mode. @1094
+# Once again I'm retiring about 8am and awaking about 4pm.
+* 21 Jun 1983
+C729\>558. Don't append an overfull rule solely because of\/ |\hbadness|. @666
+R730. Don't allow the glue-ratio of shrinking to be less than~$-1$. @810,811
+* 22 Jun 1983
+B731\>653. Declare the parameter to \\{print_roman_int} to be of type \\{integer},
+ instead of \\{nonnegative_integer} (found by Debby Clark). @69
+C732\>690. Make the keyword `|by|' optional (suggested by LL). @1236
+* 24 Jun 1983
+I733. Say `|preloaded|' when announcing \\{format_ident}. @1328
+* 25 Jun 1983
+R734. Add extra boxes and
+ glue to the output of alignment. [This thwarts possible attempts
+ at trickery by which system-dependent glue set values
+ computed by |\span| could have gotten into \TeX's registers by
+ things like |\valign| and |\vsplit|. It also has the advantage
+ of perfect accuracy in alignment of vertical rules.] @809
+C735. Make leaders affect the height or width of the enclosing boxes. @656,671
+# Today I'm mainly installing a much-improved format for change files
+ in |WEB| programs (suggested by DRF).
+* 28 Jun 1983
+C736. Permit |\unskip| in vertical mode when we know that it does nothing. @1106
+* 1 Jul 1983
+E737\>700. Avoid redundant boxes when things like `|{\bf A}|' occur in math. @1186
+G738. Add a `|scaled|' feature to |\font| input. @1258
+D739\>700. Remember to correct \\{delta} when an accented box changes. @742
+* 2 Jul 1983
+R740.Introduce \\{bypass_eoln}, to remove anomalous behavior on input files
+ of length~1. (Suggested by DRF after the problem was discovered by LL). @31
+* 4 Jul 1983
+G741. Allow codes like |^^b| as well as |^^B|. @352,355
+G742. Introduce new parameters |\escapechar|, |\endlinechar|, |\defaulthyphenchar|,
+ and |\defaultskewchar|, to make \TeX\ less dependent on the
+ character set. (This affects many modules, since a lot of
+ error messages must be broken up so that they use \\{print_esc}.)
+* 7 Jul 1983
+P743. Use a system-dependent function \\{erstat} when opening or closing
+ files (suggested by DRF). @27
+* 11 Jul 1983
+# The computer is back up after more than 50 hours down time
+ (due to air conditioning failure).
+I744. Show total glue in the output of\/ |\tracingpages|. @985
+R745. Guard against insertion into an hbox. @993
+C746. Legalize the assignment \<tokenvar>=\<tokenvar>. @1227
+I747. Introduce a new parameter |\errhelp|. @1283
+F748\>623. Don't forget to check \\{global_defs} when |\tabskip| is changed. @782
+* 12 Jul 1983
+C749. Allow an |\outer| macro to appear after |\string|, |\noexpand|,
+ and |\meaning| (Todd Allen). @369,471
+C750. Make `|\the|' an expandable control sequence (i.e., move it
+ from the stomach to the throat); this cleans up
+ several annoying glitches. @367
+C751\>620. Allow |\unhbox| and |\unhcopy| in math mode if the box is void. @1110
+* 13 Jul 1983
+# I lectured for four hours at the TUG meeting today after very little sleep!
+* 16 Jul 1983
+# The following were suggested by TUG meeting discussions.
+L752. Round the value of \\{default_rule} more properly: It should be 26215. @463
+Q753\>700. Fix |\mathaccent| again; it's still not right!
+ The final height should be the maximum of
+ the height of accented letter without superscript and
+ the height of unaccented letter with superscript. @742
+G754. Add a new feature |\newlinechar|. @59
+G755. Allow boxes and rules in discretionaries (suggested by somebody
+ from Hewlett-Packard). @1121
+I756\>X28. Show all token expansions, not just macros,
+ when |\tracingcommands|. @367
+C757. Allow |\char| in a |\hyphenation| list. @935
+G758. Introduce a new feature |\aftergroup|; it can be implemented with
+ \\{save_stack}. @326
+C759. Run the running dimensions to alignment boundaries (suggested
+ by ARK). @806
+* 17 Jul 1983
+R760. Zero out \\{hyf} values at the edges, so that
+ weird pattern data cannot lead to Pascal range checks. @965
+R761\>X190. Decrease the |hc| codes for hyphenation, so that code~127 cannot
+ possibly be matched. @937,962
+C762\>672. Allow whatsits after hyphenatable words. @899
+C763\>604. Represent an italic correction as an explicit kern. @1113
+* 18 Jul 1983
+C764. Allow lowercase letters in file names. @519
+I765. Change the message `|No output file|' to: `|No pages of output|'. @642
+I766. Confirm that a quiet mode is being entered, when error
+ interaction ends with |Q|, |R|, or |S| (suggested by ARK). @86
+# Version 0.999 was finally installed today; a new program listing has
+ been printed.
+# From now on, I plan to keep all section numbers unchanged.
+# I'm done writing Appendix~H; beginning to revise Chapter~20.
+* 25 Jul 1983
+C767\>663. Allow space after `|to|' in the |\read| command (FY). @1215
+# To bed at 1pm today.
+* 27 Jul 1983
+S768\>665. Stack the current type of\/ |\if|; this precaution is necessary
+ in general (FY). @498
+# To bed at 2pm today.
+* 29 Jul 1983
+E769. Avoid putting a control sequence in the hash table
+ when it occurs after |\ifx|. (Requested by Math Reviews people.) @507
+# Finished a version of {\sl The \TeX book\/} lacking only Appendices
+ D, E, and~I, for distribution to interested readers.
+# To bed at 10:30pm, planning to arise regularly at 6am for a change.
+* 31 Jul 1983
+I770\>766. Call \\{update_terminal} when going quiet (HWT). @86
+* 1 Aug 1983
+C771. Don't put an empty line at the end of an |\input| file! (This simplifies
+ the rules and the program, and also gets around a bug that occurred
+ at the end of files with $\\{end_line_char}<0$.) @362
+# The changes above went into Version 0.9999, which was widely distributed.
+* 16 Aug 1983
+B772\>665. Rectify a ridiculous gaffe: I initialized $q$ every time the loop
+ of \\{change_if_limit} was performed! (Found by FY.) @497
+I773\>648. Distinguish `|string|' from `|strings|' when reporting statistics. @1334
+A774. Introduce \\{lx}, to correct a bug in |\xleader| computations
+ (found by FY). @627
+* 20 Aug 1983
+F775. Don't forget to apply |\/| to ligatures. @1113
+# Today I began to read all previous issues of {\sl TUGboat}, in preparation for
+ Appendix~D.
+* 27 Aug 1983
+I776. Add debugging hack number~16, to help catch subtle data structure bugs. @1339
+E777. Remove redundant setting and resetting of \\{name_in_progress}. @531
+S778\>618. Suppress |\input| during a font size spec; otherwise
+ \\{cur_name} is clobbered (found by MDS). @1258
+G779. Introduce new conditionals |\ifhbox| and |\ifvbox|. @505
+* 29 Aug 1983
+D780\>750. Test for an empty list, if emptiness will mess up the data structure.
+ (Found by Todd Allen.) @478
+E781\>624. Use \\{fast_store_new_token} in another place for efficiency. @466
+I782. Say `|has only|' instead of `|has|'. @579
+# These changes yield Version 0.99999, used only at Stanford.
+* 30 Aug 1983
+C783. Make funny blank spaces showable. @298
+* 31 Aug 1983
+C784\>754. Make |\newlinechar| affect \\{print_char}, not just \\{print}. @58
+* 4 Sep 1983
+G785. Add new features |\lastkern|, |\lastpenalty|, |\unkern|, |\unpenalty|.
+ @424,996,1105
+# OK, Appendix D is finished!!
+# The above changes have been installed in Version 0.999999.
+* 17 Sep 1983
+P786\>548. Don't bother making duplicate font identifiers; that
+ was overkill, not really needed. @1258
+# Will this be the historic last change to \TeX?
+* 18 Sep 1983
+I787. Correct a minor inconsistency, `|display|' not `|displayed|'. @211
+* 20 Sep 1983
+C788\>604. Treat the kerns inserted for accents as explicit kerns. @1125
+* 26 Sep 1983
+I789. Change `|log|' to `|transcript|' in several messages. @535,1335
+# The index was finished today; I mailed the entire {\sl \TeX book\/} to
+ Massachusetts for final proofreading before publication.
+* 1 Oct 1983
+D790. Prevent uninitialized trie positions in case of overflow
+ (found by Bernd Schulze). @944
+* 7 Oct 1983
+# Henceforth our weekly `\TeX\ lunch' meetings will be called `\MF\ lunch'.
+# DRF begins to produce {\sl The \TeX book\/} on our APS phototypesetter.
+* 14 Oct 1983
+P791\>633. Ignore spaces at the ends of lines also in |TEX.POOL| (found
+ by DRF). @52
+D792\>610. Initialize the \\{history} variable at \\{start_here} (DRF). @1332
+* 18 Oct 1983
+I793. Extend \\{runaway} to catch runaway text (suggested by FY). @306
+D794. Reset \\{cur_cs} after \\{back_input}, not after scanning the
+ `|=|' (found by FY). @1226
+* 24 Oct 1983
+I795\>638. Change the error recovery for bad delimiters, in accordance with
+ the changed syntax. (Found by Barry Smith.) @1183
+* 9 Nov 1983
+E796. Optimize the code a bit more, based on empirical frequency data gathered
+ during September and October: In \S45, use the fact that the
+ result is almost always true. In \S380, delete `{\bf while}
+ \\{true} {\bf do}' since many compilers implement that badly.
+ Rewrite \S852 to avoid calling \\{badness} in the most common case.
+ @45,380,852
+* 3 Dec 1983
+F797. Don't forget to call |error| after the message has been
+ given (noticed by Gabi Kuper). @500
+# Version 1.0 released today incorporates all of the above.
+* 9 Dec 1983
+# Dinner party with 36 guests to celebrate \TeX's coming of age.
+* 2 Feb 1984
+S798\>786. Reinstall |\font| precautions that I thought were unnecessary.
+ I overlooked many problematic possibilities, like
+ `|{\font\a=x| |\global\a}| |\the\font|'
+ and `|\font\a=x| |\font\b=x| |\let\b=\undefined| |\the\a|', etc.
+ (Found by Mike Urban.) The new remedy involves removal of the
+ \\{font_ident} array and putting the identifiers into a frozen
+ part of the hash table; so there's a sprinkling of corrections
+ in lots of modules. But basically the change is quite conservative,
+ so it shouldn't spawn any new bugs (it says here). @222,267,1257
+* 9 Feb 1984
+S799. Remove the possibility of double interrupt, in a scenario
+ found by Clint Cuzzo. @1031
+* 12 Feb 1984
+Q800. Improve spacing in a formula like |$(A,<)$|. @764
+* 13 Feb 1984
+A801. Avoid a bad {\bf goto}, as diagnosed by Clint Cuzzo and George O'Connor.
+ (Must not go directly to \\{switch}.) @346
+E802. Conserve string pool space by not storing file name in two
+ guises (suggested by DRF). @537
+* 26 Feb 1984
+I803. Make scaled output look cleaner by printing fewer decimals whenever
+ this involves no loss of accuracy. (Suggested by \MF\ development.) @103
+* 2 Mar 1984
+R804. Maintain 17-digit accuracy, not 16; now
+ constants like `|.00000762939453126pt|' will round correctly. @452
+* 16 Mar 1984
+R805. Plug a loophole that permitted recursion in \\{get_next}, by disallowing
+ deletions in \\{check_outer_validity}. @336
+* 24 Mar 1984
+I806. Open the terminal before trying to wake it up, when the program starts bad.
+ @1332
+* 27 Mar 1984
+R807. Check that $k<63$, to avoid the
+ |\patterns{xxx...xxxdxxxdxxx}| anomaly found by Jacques D\'esarm\'enien. @962
+* 11 Apr 1984
+F808. Supply code for the missing case \\{adjust_node} in \\{copy_node_list}. @206
+# Yoicks, how could serious bugs like that have escaped detection?
+* 11 Jun 1984
+D809\>627. Initialize \\{char_base}, etc., for \\{null_font}.
+ (Found by Nick Briggs.) @552
+R810. Clear the \\{buffer} array initially (Briggs). @331
+* 21 Jun 1984
+C811. Look ahead for ligature or kern after a |\chardef|'d item
+ (D\'esarm\'enien). @1038
+* 4 Jul 1984
+R812. Make the quarterword constraint explicit with a
+ new `\\{bad}' case (19). @111
+* 7 Jul 1984
+E813. Optimize \\{firm_up_the_line} slightly,
+ to be consistent with the \MF\ program. @363
+* 8 Jul 1984
+I814. Give additional diagnostics when |\tracingmacros>1|. @323
+# The changes above were incorporated in Version 1.1, released July 9, 1984.
+* 27 Jul 1984
+I815. Say `|see| |the| |transcript| |file|' after handling offline |\show|
+ commands. (Suggested by \MF.) @1298
+* 20 Oct 1984
+I816. Allow `|0|' in response to error prompts. @84
+# Those two changes led to Version 1.2.
+* 25 Nov 1984
+R817. Don't forget to check for \\{null} before looking at subfields
+ of a node. (This was ``dirty Pascal,'' with two quarterword 0's
+ read as a halfword.) @846
+R818. Ditto in another place! @939
+E819. Remove the fixed-at-compile-time
+ partition between lower and upper memory. @116,125,162
+# This major change in memory management
+ completes Version 1.3, which was published in preliminary
+ looseleaf form as `\TeX: The Program'.
+* 20 Dec 1984
+R820. Keep the \\{node_size} field from overflowing if the lower part of memory
+ is too large. @125
+# That was another bug in existence from the beginning!
+* 5 Jan 1985
+I821. Improve the missing-format-file error (DRF). @524
+* 7 Jan 1985
+I822. Update the terminal right away so that the welcoming message will
+ appear as soon as possible (DRF). @61
+* 23 Jan 1985
+I823. Convey more uncertainty in the
+ help message at times of \\{confusion}. @95
+I824\>610. Improve the \\{history} logic in the \\{warning_issued} case. @245
+* 18 Feb 1985
+P825\>810. Stick to standard Pascal: Don't
+ use \\{first} in a {\bf for} loop. [Some procedures ``threaten'' it
+ globally, according to British Standard 6192, section 6.8.3.9.]
+ (Pointed out by CET.) @331
+* 11 Apr 1985
+S826. Prevent nonexistent characters from being output by
+ unusual combinations of ligatures and hyphenation. @915
+* 15 Apr 1985
+L827\>819. Compute memory usage correctly in |INITEX|; the previous number
+ was wrong because of a |WEB| text macro without parentheses (DRF). @164
+* 16 Apr 1985
+E828. Speed up \\{flush_list} by not calling \\{free_avail} (DRF). @123
+* 17 Apr 1985
+A829\>788. Introduce a special kind of kern for accent positioning;
+ it must not disappear after a line break. @837,879,1125
+* 18 Apr 1985
+R830\>755. Prevent |\lastbox| and |\unkern| from removing discretionary replacements.
+ @1081,1105
+# That completes Version 1.4.
+* 26 Apr 1985
+C831. Don't try \\{\TeX_area} if a nonstandard file area has been specified
+ (DRF). @537
+# That was \#401 in \TeX78; I never learn!
+* 30 Apr 1985
+C832\>754. Eliminate the limitation on |\write| length; the reason for it
+ has disappeared (Nancy Tuma). @1370
+* 8 May 1985
+D833\>819. Allocate two words for the head of the \\{active} list (CET). @162
+* 11 May 1985
+I834. Change \\{wterm} to \\{wterm_ln} after a bad beginning (Bill Gropp). @1332
+E835\>806. Don't open the terminal twice (CET). @1332
+* 22 May 1985
+R836. Test for \\{batch_mode} after trying to open the transcript file,
+ not before (DRF). @92
+R837. Be prepared for string pool overflow while reading the command line!
+ (This bug was first found in \MF, when it could occur more easily.) @525
+* 7 Aug 1985
+A838. Fix a bug in |\edef\foo{\iffalse\fi\the\toks0}|: \TeX\ should stay in the
+ loop when expanding non-|\the|. (Found by Dan Brotsky.) @478
+# The above changes were incorporated in Version 1.5.
+* 27 Nov 1985
+C839\>764. Make `|plain|' a lowercase name, for consistency with the manual. @521
+I840\>669. Wake up the terminal for |\show| commands. @1294,1297
+# The above changes were incorporated in Version 2.0, which was published
+ as Volume~B of the {\sl Computers \& Typesetting\/} series.
+* 15 Dec 1986
+I841. Punctuate the Poirot help message more carefully. @1283
+* 28 Jan 1987
+R842. Make sure that \\{max_in_open} doesn't exceed 127 (DRF). @14
+D843\>680. Don't allow a |\kern| to be clobbered at the end of a pre-break list
+ when a discretionary break is taken. (A missing `{\bf else}' was the
+ source of the error, diagnosed incorrectly before.) @881
+D844. Take account of discarded nodes when computing the background width
+ after a discretionary. @840
+# That was the first really serious bug detected for more than 17 months! I found it
+ while experimenting with right-to-left extensions.
+# Version 2.1 was released on January 26, 1987.
+* 5 Feb 1987
+E845. Remove cases in \\{shorthand_def} that cannot occur (found by Pat Monardo). @1224
+* 14 Apr 1987
+R846. Improve robustness of data structure display
+ when debugging (Ronaldo Am\'a). @174,182
+* 21 Apr 1987
+E847. Make the storage allocation algorithm more elegant and efficient. @127
+* 22 Apr 1987
+A848\>742. Calculate the empty-line condition properly when \\{end_line_char} is
+ absent. @360
+# The previous three changes were found while I was teaching a class based
+ on Volume~B; they led to Version 2.2.
+* 28 Apr 1987
+E849. Avoid closing a file when \TeX\ knows that it isn't open (JS). @560
+* 3 Aug 1987
+S850. Clean up unfinished output if it's necessary to
+ \\{jump_out} (Klaus Gunterman). @642
+# That makes Version 2.3; subsequent version numbers won't be logged here.
+* 19 Aug 1987
+A851. Indent rules properly in cases like\hfil\break
+ |\hangindent=1pt$$\halign{...\cr\noalign{\hrule}}$$|. @806
+* 20 Aug 1987
+S852. Introduce \\{co_backup} because of cases like
+ |\hskip 0pt plus 1fil\ifdim| (Alan Guth). @366
+* 9 Nov 1987
+S853. Change the calculation for number of leader boxes, so that
+ it won't be too sensitive to roundoff error near exact multiples
+ (M. F. Bridgland). @626
+* 17 Nov 1987
+A854. Replace my stupid algorithm
+ for fixed-point multiplication of negatives (WGS). @572
+* 12 Dec 1987
+B855. Fix a typo in the initialization of hyphenation tables (PB). @952
+# That error was almost completely harmless, thus undetectable,
+ except if some |\lccode| is~1 and no |\patterns| are given.
+* 23 Dec 1987
+S856\>564. Be more cautious when ``relaxing'' a previously undefined |\csname|;
+ you might be inside a group (CET). @372
+* 20 Apr 1988
+S857. Make sure \\{temp_head} is well-formed whenever it can be
+ printed in a ``runaway'' message: Consider constructions like
+ |\outer\def\a0{}\a\a| (Silvio Levy). @391
+* 24 Apr 1988
+S858\>618. Avoid conflicting use of the string pool in constructions like
+ |\def\\#1{}\input a\\\z| (Robert Messer). @260
+* 10 May 1988
+R859. Amend the |\patterns| data structure when $\\{trie_min}=0$
+ (PB). @951,953
+* 25 May 1988
+R860. Guarantee that \\{trie_pointer} cannot be out of range. @923
+S861\>618. Avoid additional bugs like \#858 in constructions
+ like |\input a\romannumeral1|, etc. @464,465,470
+R862\>618. Prevent similar string pool confusion that could occur
+ during the processing of |**\input\romannumeral6|. @525
+* 19 Jun 1988
+S863\>819. Prevent a negative dividend from rounding upward,
+ causing a loop (CET). @126
+E864\>819. Adopt a smoother allocation strategy when
+ memory is nearly gone (CET). @126
+* 20 Jun 1988
+D865\>852. Initialize \\{cur_order}, now that it's being backed up
+ (Tsunetoshi Hayashi). @439
+* 6 Nov 1988
+S866\>612. Disable \\{fatal_error} in \\{prompt_input}, so that
+ \\{open_log_file} can use it safely (Tim Morgan). @71
+S867\>836. Force terminal output whenever \\{open_log_file} fails. @535
+* 14 Dec 1988
+P868\>866. Restore \\{fatal_error} in \\{prompt_input}, but don't
+ let it be unsafe for \\{open_log_file}. @92,534
+* 23 Jan 1989
+D869. Give $q$ a legal value when recovering from ``infinite shrinkage''
+ error. @976,1004
+* 17 Feb 1989
+D870\>758. Avoid spurious error message for |\aftergroup\relax\dump| by avoiding
+ inaccessible |\aftergroup| tokens (FM and Rainer Sch\"opf). @280
+* 20 Mar 1989
+R871. Don't refer to \\{link}(\\{null}) even when it ``can't happen''
+ (PB). @791
+* 7 Jun 1989
+S872. Avoid confusion from |$$\begingroup\halign{#\cr}$$| (FM). @1130
+* 20 Jun 1989
+S873. Put fraction digits into dynamic memory, not the global \\{dig} array,
+ because of constructions like |.5\ifdim.6| (FM). @452
+* 17 Jul 1989
+S874. Prevent embarrassing attempts to report errors before the string
+ mechanism has been fully initialized, for example when the
+ command line exceeds the buffer size (WGS). @31
+* 16 Aug 1989
+M875. Allow integer products to be 31 bits long (FM). @105
+* 31 Aug 1989
+C876\>441. Increase the number of tokens shown by \\{token_show}
+ (J. Lavagnino). @295
+S877. Avoid confusion from |$$\begingroup\eqno$$| (FM). @1140
+# The recent TUG meeting turned out to be an extend-\TeX-for-the-nineties
+ party! I agreed that some extensions for non-English languages
+ ought to be made while I still knew how to do them. (In other words,
+ I broke my firm commitment to keeping \TeX\ completely stable;
+ but in this case nobody objected.) The following eleven changes
+ were coded during the month of September.
+* 30 Sep 1989
+G878. Install major change allowing general 8-bit code input. @38,352
+G879. Install major change allowing multiple hyphenation tables
+ (M. Ferguson). @923
+G880. Introduce new parameters |\lefthyphenmin| and |\righthyphenmin|. @923
+G881. Introduce major new ligature capabilities including implicit
+ boundary characters. @908,1037
+G882. Install new |\inputlineno| feature suggested by MDS. @424
+G883. Install new |\holdinginserts| feature suggested by FM. @1014
+G884. Install new |\badness| feature. @424,664
+G885. Install new |\emergencystretch| feature. @863
+G886. Install new |\errorcontextlines| feature suggested by FM. @311
+S887. Recover from anomaly when hyphenation |char_warning| clobbers
+ |old_setting|. @863
+P888. Make it easier to change the format extension (Don Hosek). @520,1328
+* 16 Oct 1989
+R889. Avoid range check in null font with |bc=256| (PB). @565
+* 22 Nov 1989
+S890\>856. Prevent \\{save_stack} conflicts in
+ |{\hbox\expandafter{\csname\endcsname}}| and\kern-3pt\break
+ similar constructions (WGS). @645,1117
+S891\>858. System-dependent parts of file names must be addressed relatively,
+ not absolutely (FM and Rainer Sch\"opf). @516,517
+* 3 Dec 1989
+G892\>880. Allow different hyphenmins in the same paragraph (M. Ferguson). @1376
+S893. Distinguish |\par| from characters on |\if| tests. (MVL). @334
+S894\>378. Alignments need to be more robust against malicious
+ attacks (MVL). @782
+C895. Don't let kerns in discretionaries disappear at breaks (MVL). @869
+Q896\>881. Make the new hyphenation reconstruction procedure less cautious,
+ so that it doesn't lose hyphens found by the old method. @914
+* 11 Dec 1989
+D897\>879. Make an undumped trie dumpable again (PB). @1325
+* 18 Dec 1989
+G898\>588. Allow access to page totals in |\output| routines
+ (FM and Chris Rowley). @421
+* 22 Jan 1990
+R899\>611. Recognize more cases of unbalanced |\output| (CET). @1026
+* 29 Jan 1990
+S900\>758. Make |\aftergroup| work properly after |\eqno| (Michael Downes).
+ @1194
+* 1 Feb 1990
+S901\>878. Fix one more case of \\{end_line_char_inactive} (WGS). @360
+* 22 Feb 1990
+R902. Don't lose the last active node when total demerits are very high (FM).
+ @836,854
+* 13 Mar 1990
+D903. Doublecheck math fonts after making equation number (MVL). @1194
+D904. Don't forget to rule out charnodes before testing \\{type} (MVL).
+ @805,1202
+* 23 Mar 1990
+F905\>881. Don't change the font of punctuation preceding a hyphenated word
+ (Scott C. Allendorf). @903
+I906. Balance the parentheses shown on the terminal during normal runs. @1335
+E907. Optimize |\ifx\p\q| after |\let\p=\q| (MVL). @508
+S908. Treat migration properly in displays (MVL). @1199,1205
+# We're now up to Version 3.0; I sincerely hope all bugs have been found.
+* 11 May 1990
+F909\>881. Initialize |\nullfont| ligature parameters (Lance Carnes). @552
+* 22 July 1990
+S910\>579. Treat |\prevgraf| as zero within |\write| (Bogus\l aw Jackowski).
+ @422
+* 26 July 1990
+S911. Report `|l.1|' when first line of file overflows buffer
+ (George Russell). @538
+* 5 December 1990
+S912\>878. Translate unprintable characters in font identifiers (WGS). @63
+* 28 December 1990
+R913. Avoid range check when there are 65536 or more pages (Eberhard Mattes).
+ @642
+* 20 September 1991
+I914\>878. Improve error message for |\mathchar| out of range. @436
+S915\>878. Retain unprintable internal strings in 8-bit form (FM). @59
+S916\>881. Retain right punctuation context for ligature reconstruction
+ (problem found by Brian Hamilton Kelly). @903
+* 10 January 1992
+S917\>881. Also avoid producing a double kern at boundary (CET). @897
+S918. Disallow |\setbox| where it doesn't work (Robert Hunt). @1241,1270
+S919. Robustify |\mskip| and |\mkern| in presence of negative quad (WGS).
+ @716,717
+S920\>679. Defend against `|}{|' in |\read| (Michael Downes). @483
+E921\>798. Save string memory if font occurs repeatedly (Bogus\l aw Jackowski).
+ @1260
+S922\>784. Don't let |\newlinechar| interrupt unprintable expansion (Bernd
+ Raichle). @59,60
+* 7 February 1992
+D923\>881. Restore |cur_l| properly when boundary character doesn't exist
+ (Mattes and Raichle). @1036
+* 17 July 1992
+C924\>892. Use current language at beginning of horizontal mode (Rainer
+ Sch\"opf and CET). @1091,1200
+* 17 December 1992
+R925\>879. Avoid (harmless) range errors (Philip Taylor and CET). @934,960
+* 25 February 1993
+C926\>881. Protect kerns inserted by boundary characters (William Baxter).
+ @837,866
+S927\>917. Don't let boundary kern disappear after hyphenation. @897
+* 26 June 1993
+R928\>668. Avoid potential future bug (Peter Breitenlohner). @628,637
+* 17 December 1993
+S929\>881. Boundary character representation shouldn't depend on the font
+ memory size (Berthold Horn). @549,1323
+* 10 March 1994
+R930. Huge font parameter number may exceed array bound (CET). @549
+* 4 September 1994
+F931\>926. Math kerns are explicit (Walter Carlip). @717
+R932. Avoid overflow on huge real-to-integer conversion. @625,634
+* 19 March 1995
+R933. Avoid spurious reference counts in format files (PB). @1335
+* 23 November 1998
+R934. Make sure that TeX is certifiably Y2K-safe. @1328
+* 12 July 1999
+A935\>255. |\xleaders| often drops the final box (Hiroshi Nakashima). @627,636
+* 30 August 2001
+R789. Don't allow a million unbalanced braces followed by |\cr|
+ outside of any alignment (Ralf Roth). @789
+R790. Don't allow end-template except at end of template (Roth). @325,1131
+* 30 September 2002
+Q791. Improve rounding of glue during output (M. F. Bridgland). @625,634
+\relax
+\bye
+
+Up to a point it is better to let the snags [bugs] be there
+than to spend such time in design that there are none
+(how many decades would this course take?).
+-- A M Turing
+ Proposals for Development in the Mathematics Division
+ of an Automatic Computing Engine (ACE)
+ Report E882, Executive Committee, National Physical Laboratory (NPL)
+ 1945; reprinted in April 1972 as NPL report Com Sci 57
+ page 18
+ quoted by Carpenter and Doran in The Computer Journal 20 (1977), 273.
+
+DRF David Fuchs
+HWT Howard Trickey
+FY Frank Yellin
+LL Leslie Lamport
+JS Jim Sterken
+ARK Arthur Keller
+CET Chris Thompson
+FM Frank Mittelbach (added subsequent to publication of paper)
+PB Peter Breitenlohner (ditto)
+WGS Wayne G. Sullivan (ditto)
+MVL Marc van Leeuwen (ditto)
+MDS Michael D. Spivak (ditto)