summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic')
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.eight610
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.eleven317
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.five1108
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.four1052
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.nine226
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.one751
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.seven821
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.six528
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.ten1289
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.tex1554
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.three1898
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errata.two491
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/errorlog.tex2924
-rw-r--r--Master/texmf-dist/source/generic/knuth/errata/logmac.tex107
-rw-r--r--Master/texmf-dist/source/generic/knuth/tex/glue.web421
-rw-r--r--Master/texmf-dist/source/generic/knuth/web/webman.tex1672
16 files changed, 15769 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.eight b/Master/texmf-dist/source/generic/knuth/errata/errata.eight
new file mode 100644
index 00000000000..f7ceafd9f69
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.eight
@@ -0,0 +1,610 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting, 1992}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\tenpoint
+\noindent This is a list of all corrections made to {\sl Computers \&
+Typesetting\/} between 15 March 1992 and the publication of the final
+printed versions of those books.
+Corrections made to the softcover version of {\sl The \TeX book\/} are
+the same as corrections to Volume~A\null. Corrections to the softcover
+version of {\sl The \slMF\kern1ptbook\/} are the same as corrections
+to Volume~C\null. Changes to Volume~B refer to the fourth printing
+(1991), which differs markedly from earlier printings because it includes
+all the revisions for \TeX3.0. Changes to Volume~D refer to the third
+printing (1991), which differs markedly from earlier printings because
+it includes all the revisions for \MF\kern1pt2.0. Changes to the mini-indexes
+and master indexes of Volumes B and~D are not shown here unless they are
+not obviously derivable from what has been shown.
+\looseness=-1
+
+ % volume A
+
+\bugonpage A23, line 14 (9/1/92)
+
+\tenpoint\noindent
+a command and you type `|tex|' or `|run| |tex|' or something like that.)
+
+\bugonpage A53, line 23 (7/7/92)
+
+\tenpoint\noindent
+{\sl scientiarum imperialis petropolitan\ae\/}
+became {\sl Akademi\t\i a Nauk SSSR, Doklady}.
+
+\bugonpage A146, line 2 from the bottom (2/25/93)
+
+|$\bigl|\|| |\||x|\||-|\||y|\|| \bigr|\||$|\hskip1.25in
+ $\bigl\vert\vert x\vert-\vert y\vert\bigr\vert$
+
+\bugonpage A149, lines 3--5 (2/25/93)
+
+\noindent
+example, we used |\bigl| and |\bigr| to produce $\bigl\vert\vert x\vert-
+\vert y\vert\bigr\vert$ in one of the previous illustrations; |\left| and
+|\right| don't make things any bigger than necessary, so
+`|$\left|\||\left|\||x\right|\||-\left|\||y\right|\||\right|\||$|'
+yields only `$\left\vert
+ \left\vert x\right\vert -\left\vert y\right\vert \right\vert$'.\cutpar
+
+\bugonpage A158, line 18 from the bottom (2/25/93)
+
+\ninepoint
+are four possibilities for each of these fields.
+A field can be
+
+\bugonpage A282, line 9 from the bottom (7/8/92)
+
+\ninepoint\noindent
+category~4) are intercepted by the alignment
+process, en route to \TeX's stomach, so\cutpar
+
+\bugonpage A293, new paragraph after line 15 (4/9/92)
+
+\ninepoint
+\textindent{$\bull$}|\unhbox|\<8-bit number>, |\unhcopy|\<8-bit number>.\enskip
+The specified box register must be void. Nothing happens.
+
+\bugonpage A309, line 23 (7/7/92)
+
+\ninepoint\noindent
+|petropolitan\ae\/} became {\sl Akademi\t\i a Nauk SSSR, Doklady}.|
+
+\bugonpage A320, line 11 (1/26/93)
+
+\ninepoint
+\ansno17.12:
+|$\bigl(x+f(x)\bigr) \big/ \bigl(x-f(x)\bigr)$|. \ Notice especially the\cutpar
+
+\bugonpage A349, second line from the bottom (7/8/92)
+
+\ninepoint\noindent
+expand to a ^\<number> en route to \TeX's
+``stomach''; |\multiply| wouldn't work, because\cutpar
+
+\bugonpage A358, bottom line (2/3/93)
+
+\ninepoint\noindent
+it is easy to define ^|\ldots| and ^|\cdots| macros that
+give the proper spacing in most\cutpar
+
+\bugonpage A370, lines 28 and 29 (9/1/92)
+
+\def\Russiantt#1{{\tt\hbox to.5em{\hss\eighttt\char#1\hss}}}
+\ninepoint\noindent
+example, if \TeX\ is implemented for
+a purely ^{Cyrillic} ^^{Russian} keyboard, the letter `\Russiantt5' should be
+assigned to code \oct{160} and `\Russiantt{`T}' to code \oct{164}, so that
+`\Russiantt5\Russiantt{`T}' still means `|pt|'; or else control\cutpar
+
+\bugonpage A377, lines 17--24 (5/4/92)
+
+\ninepoint
+\begintt
+\def\sanswitch{\let\n@xt\endsanity \ifx\next\endsanity
+ \else\ifcat\noexpand\next\stoken\aftergroup\space\let\n@xt=\eat
+ \else\ifcat\noexpand\next\bgroup\aftergroup{\let\n@xt=\eat
+ \else\ifcat\noexpand\next\egroup\aftergroup}\let\n@xt=\eat
+ \else\let\n@xt=\copytok\fi\fi\fi\fi \n@xt}
+\def\eat{\afterassignment\sanitize \let\next= }
+\long\def\copytok#1{\ifcat\noexpand#1\relax\aftergroup\noexpand\fi
+ \ifcat\noexpand#1\noexpand~\aftergroup\noexpand\fi
+\endtt
+
+\bugonpage A455, line 25 (2/26/93)
+
+\ninepoint\noindent
+rent language'' is set equal to |\language|. Whenever a
+character is added to the cur-\cutpar
+
+\bugonpage A459, second line of entry for ampersand (3/22/92)
+
+\eightpoint\indent\qquad
+{\it231--248}, $\underline{282}$, {\it339}, 344, 385--386, 428.
+
+\bugonpage A461, right column (2/19/93)
+
+\eightpoint
+\newbox\astbox \setbox\astbox=\hbox to0pt{\hss\lower1pt\hbox{*}}
+\def\prim#1{\par\indent\copy\astbox{\tt\char`\\#1}}
+\prim{chardef}, 44, 121, 155, 210, 214, 215, 271,\par
+\indent\qquad $\underline{277}$, 336, {\it343}, {\it345}, {\it356}, 452.\par
+\indent\<chardef token>, $\underline{271}$, 283, 286, 289.
+
+\bugonpage A467, left column (2/25/93)
+
+\eightpoint
+Greek, 127--128, 137, 156, 164, 319,\par
+\indent\qquad 358, 430, 434.
+
+\bugonpage A470, left column (2/25/93)
+
+\eightpoint
+margins, {\sl see\/} |\hoffset|, |\hsize|, |\narrower|.
+
+\bugonpage A471, left column (2/19/93)
+
+\eightpoint
+\prim{mathchardef}, 155, 199, 214, 215, 271,\par
+\indent\qquad 277, 289, 336, {\it358}, {\it394}.\par
+\indent\<mathchardef token>, $\underline{271}$, 289.
+
+\bugonpage A474, right column (3/22/92)
+
+\eightpoint
+pound sterling, 54, {\it339}, 428.
+
+\bugonpage A477, right column (3/22/92)
+
+\eightpoint
+sterling, 54, {\it339}, 428.
+
+\bugonpage A480, left column (4/9/92)
+
+\eightpoint
+\prim{unhbox}, 120, 283, $\underline{285}$, 293, {\it354}, {\it356},
+ {\it399}.\par
+\prim{unhcopy}, 120, 283, $\underline{285}$, 293, {\it353}.
+
+\bugonpage A481, left column (2/25/93)
+
+\eightpoint
+whatsits, 95, 110, 157, 226--229, 455.
+
+\bugonpage A483, lines 15--21 (2/25/93)
+
+{\tt P.O. Box 869\par
+Santa Barbara, CA 93102-0869 USA.\par
+|}|}
+\smallskip\noindent
+Don't delay, write today! That number again is
+
+\smallskip
+{\obeylines
+\TeX\ Users Group
+P.O. Box 869
+Santa Barbara, CA 93102-0869 USA.
+}
+
+ % volume B
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage B2, line 10 from the bottom (2/27/93)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]3.1415\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
+
+\bugonpage B89, line 12 (2/27/93)
+
+\tenpoint
+\noindent\hskip10pt
+In horizontal mode, the \\{prev\_graf} field is used for initial language data.
+
+\bugonpage B89, line 20 (2/27/93)
+
+\ninepoint
+\noindent\hskip20pt
+\\{pg\_field}, \\{ml\_field}: \\{integer}; \ \\{aux\_field}: \\{memory\_word};
+\par
+\noindent [Also delete the definitions of \\{lhmin} and \\{rhmin}, lines
+32 and 33.]
+
+\bugonpage B90, line 13 (2/27/93)
+
+\ninepoint
+\noindent\hskip10pt
+$\\{prev\_depth}\gets\\{ignore\_depth}$; \ $\\{mode\_line}\gets0$; \
+$\\{prev\_graf}\gets0$;
+
+\bugonpage B91, top three lines (2/27/93)
+
+\ninepoint
+\noindent\hskip20pt
+{\bf if\/} $m=\\{hmode}$ {\bf then if\/} $\\{nest}[p].\\{pg\_field}\ne
+ \oct{40600000}$ {\bf then}\par\noindent\hskip40pt
+{\bf begin} \\{print}({\tt\char`\"\](language\char`\"}); \
+ \\{print\_int}(\\{nest}[$p$].\\{pg\_field} {\bf mod} \oct{200000});\par
+\noindent\hskip40pt
+ \\{print}({\tt\char`\":hyphenmin\char`\"}); \
+ \\{print\_int}(\\{nest}[$p$].\\{pg\_field} {\bf div} \oct{20000000}); \
+ \\{print\_char}({\tt\char`\",\char`\"});\par\noindent\hskip40pt
+\\{print\_int}((\\{nest}[$p$].\\{pg\_field} {\bf div} \oct{200000})
+ {\bf mod} \oct{100}); \ \\{print\_char}({\tt\char`\")\char`\"});
+
+\bugonpage B344, lines 21 and 22 (2/27/93)
+
+\tenpoint\noindent\hskip10pt
+This code assumes that a \\{glue\_node} and a \\{penalty\_node} occupy the
+same number of \\{mem}~words.
+
+\bugonpage B344, line 30 (2/27/93)
+
+\ninepoint\noindent\hskip10pt
+$\\{link}(\\{tail})\gets\\{new\_param\_glue}(\\{par\_fill\_skip\_code})$; \
+ $\\{init\_cur\_lang}\gets\\{prev\_graf}$ {\bf mod} \oct{200000};\par
+\noindent\hskip10pt
+$\\{init\_l\_hyf}\gets\\{prev\_graf}$ {\bf div} \oct{20000000}; \
+$\\{init\_r\_hyf}\gets(\\{prev\_graf}$ {\bf div} \oct{200000}) {\bf mod}
+ \oct{100}; \
+\\{pop\_nest};
+
+\bugonpage B353, line 4 (2/27/93)
+
+\tenpoint\noindent\hskip10pt
+Kern nodes do not disappear at a line break unless they are \\{explicit}.
+
+\bugonpage B353, lines 15 and 16 (2/27/93)
+
+\ninepoint\noindent\hskip20pt
+\\{math\_node}: $\\{break\_width}[1]\gets\\{break\_width}[1]-\\{width}(s)$;\par
+\noindent\hskip20pt
+\\{kern\_node}: {\bf if\/} $\\{subtype}(s)\ne\\{explicit}$
+ {\bf then goto} \\{done}\par\noindent\hskip30pt
+{\bf else} $\\{break\_width}[1]\gets\\{break\_width}[1]-\\{width}(s)$;
+
+\bugonpage B354, lines 6 and 7 (2/27/93)
+
+\tenpoint\noindent
+will be the background
+plus $l_1$, so the length from \\{cur\_p} to \\{cur\_p} should be
+$\gamma+l_0+l_1-l$.
+If the post-break text of the discretionary is empty, a break may also
+discard~$q$; in that unusual case we subtract the length of~$q$ and any
+other nodes that will be discarded after the discretionary break.
+
+\bugonpage B354, line 18 (2/27/93)
+
+\ninepoint\noindent\hskip20pt
+{\bf begin} $\langle\,$Add the width of node $s$ to \\{break\_width}{\sevenrm
+ \kern.5em842}$\,\rangle$;
+
+\bugonpage B354, line 22 (2/27/93)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{post\_break}(\\{cur\_p})=\\{null}$ {\bf then}
+ $s\gets\\{link}(v)$;\quad$\{\,$nodes may be discardable after the break$\,\}$
+
+\bugonpage B355, top line (2/27/93)
+
+\ninepoint\noindent
+{\tenbf842.\quad}$\langle\,$Add the width of node $s$ to
+ \\{break\_width}{\sevenrm\kern.5em842}$\,\rangle\equiv$
+
+\bugonpage B355, lines 9--14 (2/27/93)
+
+\ninepoint\noindent\hskip20pt
+$\\{hlist\_node},\\{vlist\_node},\\{rule\_node},\\{kern\_node}$:
+ $\\{break\_width}[1]\gets\\{break\_width}[1]+\\{width}(s)$;\par
+\noindent\hskip20pt
+{\bf othercases} \\{confusion}({\tt\char`\"disc2\char`\"})\par
+\noindent\hskip20pt
+{\bf endcases}
+
+\bugonpage B364, line 10 (2/27/93)
+
+\tenpoint\noindent
+a glue node, penalty node, explicit kern node, or math node.
+
+\bugonpage B366, line 11 from the bottom (2/27/93)
+
+\ninepoint\noindent
+\\{kern\_node}: {\bf if\/} $\\{subtype}(\\{cur\_p})=\\{explicit}$
+ {\bf then} \\{kern\_break}\par\noindent\hskip10pt
+{\bf else} $\\{act\_width}\gets\\{act\_width}+\\{width}(\\{cur\_p})$;
+
+\bugonpage B367, line 21 (2/27/93)
+
+\ninepoint\noindent\hskip20pt
+{\bf else if\/} \\{precedes\_break}(\\{prev\_p}) {\bf then}
+ $\\{try\_break}(0,\\{unhyphenated})$\par\noindent\hskip20pt
+{\bf else if\/} $(\\{type}(\\{prev\_p})=\\{kern\_node})\land
+ (\\{subtype}(\\{prev\_p})\ne\\{explicit})$ {\bf then}
+ $\\{try\_break}(0,\\{unhyphenated})$;
+
+\bugonpage B372, lines 12 and 13 (2/27/93)
+
+\ninepoint\noindent\hskip20pt
+{\bf if\/} $\\{type}(q)=\\{kern\_node}$ {\bf then}\par\noindent\hskip30pt
+{\bf if\/} $\\{subtype}(q)\ne\\{explicit}$ {\bf then goto} \\{done1};
+
+\bugonpage B376, line 3 from the bottom (2/27/93)
+
+\ninepoint\noindent\hskip10pt
+$\\{cur\_lang}\gets\\{init\_cur\_lang}$; \
+$\\{l\_hyf}\gets\\{init\_l\_hyf}$; \
+$\\{r\_hyf}\gets\\{init\_r\_hyf}$;
+
+\bugonpage B377, lines 11 and 12 (2/27/93)
+
+\ninepoint\noindent
+$\\{cur\_lang},\\{init\_cur\_lang}$: \\{ASCII\_code};\quad
+ $\{\,$current hyphenation table of interest$\,\}$\par\noindent
+$\\{l\_hyf},\\{r\_hyf},\\{init\_l\_hyf},\\{init\_r\_hyf}$: \\{integer};\quad
+ $\{\,$limits on fragment sizes$\,\}$
+
+\bugonpage B378, line 5 from the bottom, overriding earlier change (2/27/93)
+
+\ninepoint\noindent\hskip30pt
+{\bf else if} $(\\{type}(s)=\\{kern\_node})\land(\\{subtype}(s)=\\{normal})$
+ {\bf then}\par\noindent\hskip50pt
+{\bf begin} $\\{hb}\gets s$; \ $\\{hyf\_bchar}\gets\\{font\_bchar}[\\{hf}]$; \
+ {\bf end}\par\noindent\hskip40pt
+{\bf else goto} \\{done3};
+
+
+\bugonpage B394, lines 12 and 13 (2/27/93)
+
+\ninepoint\noindent\hskip10pt
+{\bf var} $n$: $0\to64$;\quad$\{\,$length of current word; not always
+ a \\{small\_number}$\,\}$\par\noindent\hskip20pt
+$j$: $0\to64$;\quad$\{\,$an index into \\{hc}$\,\}$
+
+\bugonpage B404, line 21 (2/27/93)
+
+\ninepoint\noindent\hskip10pt
+{\bf var} $k,l$: $0\to64$;\quad$\{\,$indices into \\{hc} and \\{hyf};
+ not always in \\{small\_number} range$\,\}$
+
+\bugonpage B460, lines 21 and 22 (2/27/93)
+
+\ninepoint\noindent\hskip10pt
+\\{push\_nest}; \ $\\{mode}\gets\\{hmode}$; \ $\\{space\_factor}\gets1000$; \
+ \\{set\_cur\_lang}; \ $\\{clang}\gets\\{cur\_lang}$;\par\noindent\hskip10pt
+$\\{prev\_graf}\gets(\\{norm\_min}(\\{left\_hyphen\_min})\ast\oct{100}+
+ \\{norm\_min}(\\{right\_hyphen\_min}))\ast\oct{200000}+\\{cur\_lang}$;
+
+\bugonpage B492, line 6 from the bottom (2/27/93)
+
+\ninepoint\noindent\hskip10pt
+\\{unsave}; \ $\\{prev\_graf}\gets\\{prev\_graf}+3$;\par\noindent\hskip10pt
+\\{push\_nest}; \ $\\{mode}\gets\\{hmode}$; \ $\\{space\_factor}\gets1000$; \
+ \\{set\_cur\_lang}; \ $\\{clang}\gets\\{cur\_lang}$;\par\noindent\hskip10pt
+$\\{prev\_graf}\gets(\\{norm\_min}(\\{left\_hyphen\_min})\ast\oct{100}+
+ \\{norm\_min}(\\{right\_hyphen\_min}))\ast\oct{200000}+\\{cur\_lang}$;
+
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+
+\bugonpage C151, line 11 from the bottom (6/26/93)
+
+\ninepoint\indent
+\qquad scaled $1.42(1+\max(-\\{pen\_lft},\\{pen\_rt},\\{pen\_top},
+ -\\{pen\_bot}))$
+
+\bugonpage C262, line 15 (6/26/93)
+
+\ninepoint\noindent
+|string base_name, base_version; base_name="plain"; base_version="2.71";|
+
+\bugonpage C262, line 29 (6/26/93)
+
+\ninepoint\noindent
+|def |^|gobble|| primary g = enddef; def |^|killtext|| text t = enddef;|
+
+\bugonpage C271, bottom line (6/26/93)
+
+\ninepoint\noindent
+| culldraw p enddef;|
+
+\bugonpage C272, three new lines for top of page (6/26/93)
+
+{\ninepoint\parindent=0pt
+|def |^|culldraw|| expr p = addto pic_ doublepath p.t_ withpen currentpen;|\par
+| cull pic_ dropping(-infinity,0) withweight default_wt_;|\par
+| addto_currentpicture also pic_; pic_:=nullpicture; killtext enddef;|\par
+}
+
+\bugonpage C272, replacement for former line 5 (6/26/93)
+
+\ninepoint\noindent
+| (cut_ scaled (1+max(-pen_lft,pen_rt,pen_top,-pen_bot))|
+
+\bugonpage C296, line 24 (2/3/93)
+
+\ninepoint\noindent
+the definition of |rp| is changed to `|]..tension 4..|',
+and if `|scaled|~|5pt|' is inserted\cutpar
+
+\bugonpage C299, line 3 (5/15/92)
+
+\ninepoint\noindent
+a Bernshte{\u\i}n polynomial of order $n-1$.)
+
+\bugonpage C347, left column (5/15/92)
+
+\eightpoint
+Bernshte{\u\i}n, Serge{\u\i} \thinspace Natanovich, 14.
+
+\bugonpage C348, left column (6/26/93)
+
+\eightpoint
+|culldraw|, {\it271}, $\underline{272}$.
+
+\bugonpage C350, left column (6/26/93)
+
+\eightpoint
+exponential, {\sl see\/} |mexp|.
+
+\bugonpage C352, left column (6/26/93)
+
+\eightpoint
+|killtext|, $\underline{262}$, {\it 272}.
+
+\bugonpage C352, right column (6/26/93)
+
+\eightpoint
+logarithm, {\sl see\/} |mlog|.
+
+\bugonpage C361, lines 14 and 15 (2/25/93)
+
+P.O. Box 869\par
+Santa Barbara, CA 93102-0869 USA.
+
+
+ % Volume D
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage Dxiv, line 13 (4/19/96)
+
+\noindent preprocessor converts these into numeric constants that are
+256 or more. This\cutpar
+
+\bugonpage Dxiv, line $-1$ (4/19/96)
+
+\ninepoint\noindent This file contains one line per string, starting with
+string number 256, then number 257,\cutpar
+
+\bugonpage Dxv, lines 10 and 11 (4/19/96)
+
+\ninepoint\noindent
+In this case, occurrences of |""| in the |WEB| program will be replaced by
+256; occurrences of |"This longer string"| will be replaced by 257.
+The symbol |@$| stands for the numeric\cutpar
+
+\hsize=35pc
+\bugonpage D2, line $-17$ (8/7/98)
+
+\def\RQ/{{\char'23}} % right quote in a string
+\ninepoint\noindent
+{\bf define} $\\{banner}\equiv\hbox{\tt\RQ/This\]is\]METAFONT,\]%
+ Version\]2.7182\RQ/}$\quad$\{\,$printed when \MF\ starts$\,\}$
+
+\bugonpage D50, line 26 (8/7/98)
+
+\ninepoint\noindent
+\quad{\bf if\/} $b>0$ {\bf then}
+
+\bugonpage D138, line 14 from the bottom (3/6/95)
+
+\tenpoint
+\textindent{$2'$)} Let $Z_k^{(j+1)}={1\over2}(Z_k^{(j)}+Z_{k+1}^{(j)})$, for
+$1\le k\le n-j$, for $1\le j<n$.
+
+\bugonpage D190, D191, D194, D195 (6/26/93)
+
+\noindent[Several changes to the code in sections 415, 416, 424, and 425
+were made to \MF\ version 2.71 in July~1991, too numerous to mention here.
+They are documented in file {\tt mf84.bug} as bug number 560. We also
+delete lines 4 and~5 of page D194.]
+
+\bugonpage D216, line 10 from the bottom (7/15/92)
+
+\tenpoint\noindent
+will be offset by $w_1$ or $w_2$, unless its slope drops to zero
+en route to the eighth octant; in the latter\cutpar
+
+\bugonpage D289, lines 9 and 10 (6/26/93)
+
+\ninepoint\noindent\hskip20pt
+$p\gets\\{dep\_list}(p)$; \ $r\gets\\{inf\_val}$;\par\noindent\hskip20pt
+{\bf repeat if\/} $\\{value}(\\{info}(p))\ge\\{value}(r)$ {\bf then}
+
+\bugonpage D296, lines 8 and 9 from the bottom (9/13/98)
+
+\ninepoint\noindent[Delete these spurious lines.]
+
+\bugonpage D297, mini-index (6/6/98)
+
+\eightpoint the meaning of {\it loc\/} should be `macro'
+
+\bugonpage D310, line 7 (8/7/98)
+
+\ninepoint\noindent
+\quad{\bf if\/} $(\\{loc}=k+1)\land(\\{length}(\\{buffer}[k])=1)$
+ {\bf then} $\\{cur\_mod}:=\\{buffer}[k]$
+
+\bugonpage D363, lines 10 and 11 (3/1/95)
+
+\ninepoint\noindent
+\quad {\bf begin if\/} $(\\{max\_c}[\\{dependent}]$ {\bf div}
+ $\oct{10000}\ge\\{max\_c}[\\{proto\_dependent}])$ {\bf then}
+ $t\gets\\{dependent}$
+
+\bugonpage D512, line 13 (11/23/98)
+
+\ninepoint\noindent
+\quad \\{print\_int}(\\{round\_unscaled}(\\{internal}[\\{year}])); \
+ \\{print\_char}(|"."|);
+
+\bugonpage D518, insert new material between lines 7 and 8 (3/20/95)
+
+\ninepoint\noindent
+\quad {\bf while} $\\{input\_ptr}>0$ {\bf do}\par\noindent
+\qquad {\bf if\/} \\{token\_state} {\bf then} \\{end\_token\_list}
+ {\bf else} \\{end\_file\_reading};\par\noindent
+\quad {\bf while} $\\{loop\_ptr}\ne\\{null}$ {\bf do} \\{stop\_iteration};
+
+\bugonpage D518, line 18 (3/20/95)
+
+\ninepoint\noindent
+\qquad $\\{loop\_ptr}\gets\\{cond\_ptr}$; \
+ $\\{cond\_ptr}\gets\\{link}(\\{cond\_ptr})$; \
+ $\\{free\_node}(\\{loop\_ptr},\\{if\_node\_size})$;
+
+\bugonpage D546, left column (4/11/96)
+
+\eightpoint
+Stern, Moritz Abraham: \ 526.
+
+ % volume E
+\hsize=29pc
+\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}}
+
+
+ \bye
+
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.eleven b/Master/texmf-dist/source/generic/knuth/errata/errata.eleven
new file mode 100644
index 00000000000..64d9f8ab457
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.eleven
@@ -0,0 +1,317 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\def\curl{\mathop{\rm curl}}
+\def\cycle{{\rm cycle}}\indent
+\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}}
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting, 2001}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\tenpoint
+\noindent This is a list of all substantial corrections made to {\sl Computers
+\& Typesetting\/} between the first ``Millennium edition'' of 2000 and the
+second such edition, which appeared late in 2001.
+(More precisely, it lists errors to the 16th, 7th, 6th, 4th, and 5th
+printings of Volumes A, B, C, D, and E, respectively, that were corrected
+in the 17th, 8th, 7th, 5th, and 6th printings.)
+Changes to the mini-indexes
+and master indexes of Volumes B, D, and~E are not shown here unless they are
+not obviously derivable from what has been shown.
+\looseness=-1
+
+ % volume A
+
+\bugonpage A16, line 7 from the bottom (06/30/01)
+
+\font\magnifiedfiverm=cmr5 at 10pt
+\tenpoint\indent
+Ten-point type is different from%
+ \magnifiedfiverm\ magnif{}ied f{}ive-point type.
+
+\bugonpage A17, line 7 (06/30/01)
+
+\ninepoint\indent
+fications that grow in geometric ratios---something like equal-tempered
+tuning\cutpar
+
+\bugonpage A51, lines 18--20 (06/30/01)
+
+\tenpoint\kern-6pt\noindent
+$$\openup1pt\halign{\indent#\hfil\cr
+|ff| yields ff\thinspace;$\!$\quad |fi| yields fi\thinspace;$\!$\quad
+|fl| yields fl\thinspace;$\!$\quad
+|ffi| yields ffi\thinspace;$\!$\quad |ffl| yields ffl\thinspace;\cr
+|``| yields``\thinspace;\qquad |''| yields ''\thinspace;\qquad
+|!||`| yields !`\thinspace;\qquad |?||`| yields ?`\thinspace;\cr
+|--| yields --\thinspace;\qquad |---| yields ---\thinspace.\cr}$$
+
+\bugonpage A52, line 7 from the bottom (06/30/01)
+
+\tenpoint\kern-6pt\noindent
+$$\halign{\indent\hbox to 50pt{#\hfil}&\hbox to 35pt{#\hfil}&#\hfil\cr
+|\ae,\AE|&\ae,\thinspace\AE&(Latin ligature and Scandinavian letter AE)\cr}$$
+
+\bugonpage A71, line 15 (06/30/01)
+
+\tenpoint\indent
+One of the interesting things that can happen when glue stretches and\cutpar
+
+\bugonpage A180, line 20 (06/30/01)
+
+\ninepoint\indent
+Challenge number 5:\enspace
+$\qquad\tenmath k=1.38065\times10^{-16}\rm\,erg\,K^{-1}$.
+
+\bugonpage A254, line 12 from the bottom becomes two lines (04/09/01)
+
+\ninepoint\noindent
+\begintt
+\output={\unvbox255
+ \ifnum\outputpenalty<10000 \penalty\outputpenalty\fi}
+\endtt
+
+\bugonpage A292, lines 13--16 (06/30/01)
+
+\def\s{\hskip0pt plus1pt}
+\ninepoint\textindent{$\bull$}|\mathchoice|\s
+$\langle$filler$\rangle$\s|{|\s$\langle$math mode material$\rangle$\s|}|\s
+$\langle$filler$\rangle$\s|{|\s$\langle$math mode material$\rangle$\s|}|\break
+$\langle$filler$\rangle$|{|$\langle$math mode material$\rangle$|}|
+$\langle$filler$\rangle$|{|$\langle$math mode material$\rangle$|}|.
+Four math lists, which are defined as in the
+second alternative of a \<math field>, are
+recorded in a ``choice item'' that is appended to the current list.
+
+\bugonpage A306, line 7 (06/30/01)
+
+\ninepoint\noindent
+instead of a shelf{\kern0pt}ful.
+In fact, the latter idea---to
+insert an italic correction---is prefer-\cutpar
+
+\bugonpage A323, line 12 from the bottom (06/30/01)
+
+\ninepoint\noindent
+\hbox to\parindent{\bf\hss18.31.\enspace}%
+|$k=1.38065\times10^{-16}\rm\,erg\,K^{-1}$|.
+
+\bugonpage A451, line 15 (01/30/01)
+
+\tenpoint\noindent
+{\sl Connecticut Yankee\/} come out with only nine or
+ten bad hyphens:
+
+\bugonpage A451, line 23 (01/30/01)
+
+\tenpoint\noindent\begintt
+ mo-er-der-mohren-mut-ter-mar-mor-mon-u-menten-macher.
+\endtt
+
+\bugonpage A454, lines 23--30 (06/30/01)
+
+\begingroup
+\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000
+\doublehyphendemerits=-100000 \finalhyphendemerits=-100000
+\ddanger If a suitable starting letter is found, let it be in font~$f$.
+Hyphenation is abandoned unless the |\hyphenchar| of~$f$ is a number
+between 0 and~255, inclusive.
+If this test is passed, \TeX\ continues to scan forward
+until coming to something that's not one of the following three
+``admissible items'': (1)~a character in font~$f$ whose |\lccode|
+is nonzero; (2)~a ligature formed entirely from characters of type~(1);
+(3)~an implicit kern. The first inadmissible item terminates this part of
+the process; the trial word consists of all the letters found in admissible
+items. Notice that all of these letters are in font~$f$.
+\par\endgroup
+
+\bugonpage A461, right column (07/08/01)
+
+\eightpoint\noindent
+\llap{*}|\char|, {\it 43--45}, 76, 86, 155, 283, $\underline{286}$,
+
+\bugonpage A466, left column (07/09/01)
+
+\eightpoint\noindent
+\llap{*}|\floatingpenalty|, $\underline{123}$--$\underline{124}$,
+ 272, 281, {\it 363}.
+
+\bugonpage A473, left column (06/30/01)
+
+\eightpoint\noindent
+orphans, {\sl see\/} widow words.
+
+ % volume B
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\hsize=35pc
+
+\bugonpage B8, line 2 (05/04/01)
+
+\tenpoint\noindent
+statements will be meaningful. We insert the label
+`\\{exit}' just before the `{\bf end}' of a procedure in\cutpar
+
+\bugonpage B30, line $-4$ (05/04/01)
+
+\ninepoint\noindent
+\quad{\bf begin} \\{update\_terminal};\quad$\{\,$now the user sees
+ the prompt for sure$\,\}$
+
+\bugonpage B84, lines 22 and 27 (05/04/01)
+
+\ninepoint\noindent
+\quad$\\{ignore}=9$\quad$\{\,$characters to ignore ( |^^@| )$\,\}$\par
+\noindent
+\quad$\\{active\_char}=13$\quad$\{\,$characters that invoke
+ macros ( |~| )$\,\}$
+
+\bugonpage B280, lines 23 and 24 (04/08/01)
+
+\tenpoint\noindent
+or unset nodes; in particular, each mlist item appears in the
+variable-size part of \\{mem}, so the \\{type} field is always present.
+
+\bugonpage B382, line 6 (01/01/01)
+
+\tenpoint\noindent
+between `fl' and `y', then $m=2$, $t=2$, and $y_1$ will
+be a ligature node for `fl' followed by an\cutpar
+
+\bugonpage B386, line 11 (04/08/01)
+
+\ninepoint\noindent
+\quad$\\{qi}(2),\\{qi}(6)$: {\bf begin} $\\{cur\_r}\gets\\{rem\_byte}(q)$;%
+ \quad$\{\,$\||=:|, \||=:>|$\,\}$
+
+\bugonpage B475, line 12 (07/01/01)
+
+\ninepoint\noindent
+\qquad{\bf end};\quad$\{\,$now we are in vertical mode,
+ working on the list that will contain the display$\,\}$
+
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}}
+\def\tension{\mathop{\rm tension}}
+\def\controls{\mathop{\rm controls}}
+\def\and{\,{\rm and}\,}
+
+\bugonpage C204, line 3 from the bottom (07/08/01)
+
+\ninepoint\noindent
+slightly. If $\\{autorounding}>1$,
+you get even more changes: Paths are perturbed slightly\cutpar
+
+\bugonpage C238, lines 9 and 8 from the bottom (07/08/01)
+
+\ninepoint\noindent
+tance is ${\rm length}(z_4-z_1)$. But there's a slicker solution:
+Just calculate
+$$\hbox{abs ypart$((z_1-z_2)\mathbin{\rm rotated}-{\rm angle}(z_3-z_2))$.}$$
+
+\bugonpage C313, bottom line (06/30/01)
+
+\rightline{\eightss--- LA ROCHEFOUCAULD, {\eightssi Maximes\/}\enspace(1665)}
+
+\bugonpage C352, left column (06/30/01)
+
+\eightpoint\noindent
+La Rochefoucauld, Fran\c cois VI, 313.
+
+\bugonpage C357, right column (07/08/01)
+
+\eightpoint\noindent
+\llap{*}|true|, 55, {\it64\/}--{\it65}, 170, 210.
+
+ % Volume D
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\hsize=35pc
+
+\bugonpage D8, line 2 (05/04/01)
+
+\tenpoint\noindent
+statements will be meaningful. We insert the label
+`\\{exit}' just before the `{\bf end}' of a procedure in\cutpar
+
+\bugonpage D28, line $-8$ (05/04/01)
+
+\ninepoint\noindent
+\quad{\bf begin} \\{update\_terminal};\quad$\{\,$now the user sees
+ the prompt for sure$\,\}$
+
+\bugonpage D101, line 21 (07/08/01)
+
+\ninepoint\noindent
+\quad{\bf define} $\\{subscr\_head\_loc}(\hbox{\tt\#})\equiv\hbox{\tt\#}+1$
+\quad$\{\,$where \\{value}, \\{subscr\_head}, and \\{attr\_head} are$\,\}$
+
+\bugonpage D180, lines 22 and 23 (01/26/01)
+
+\tenpoint\noindent
+$(y,-x)$ will appear in node~$p$. Similarly, a fourth-octant
+transformation will have been applied after the transition, so
+we will have $\\{x\_coord}(q)=\hbox{$-x$}$ and $\\{y\_coord}(q)=y$.
+
+\bugonpage D196, lines 7 and 8 (01/26/01)
+
+\tenpoint\noindent
+where $x'(t)\ge0$ we have $\\{right\_type}=%
+\\{first\_octant}$ or $\\{right\_type}=\\{eighth\_octant}$; in regions where
+$x'(t)\le0$,
+we have $\\{right\_type}=\\{fifth\_octant}$ or $\\{right\_type}=\\{fourth%
+\_octant}$.
+
+\bugonpage D511, line 17 (07/03/01)
+
+\tenpoint\noindent
+from appearing again.
+
+ % volume E
+\hsize=29pc
+
+\newbox\shorthyf \setbox\shorthyf=\hbox{-\kern-.05em}
+\mathchardef\period=`\.
+{\catcode`\-=\active \global\def-{\copy\shorthyf\mkern3.9mu}
+ \catcode`\.=\active \global\def.{\period\mkern3mu}}
+\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000
+ #1\unkern}} % `..' and `--'
+
+\bugonpage E9, line 9 (07/03/01)
+
+\tenpoint\indent
+|[92] [123] [124]) ) )|
+
+ \bye
+
+
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.five b/Master/texmf-dist/source/generic/knuth/errata/errata.five
new file mode 100644
index 00000000000..4e2982f109a
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.five
@@ -0,0 +1,1108 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting, 1989}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\tenpoint
+\noindent This is a list of all corrections made to {\sl Computers \&
+Typesetting}, Volumes \hbox{A--E}, between 20 February 1989 and
+30 September 1989 (when \TeX\ Version 3.0 and \MF\ Version 2.0 were
+fully defined). Corrections made to
+the softcover version of {\sl The \TeX book\/} are the same as corrections to
+Volume~A\null. Corrections to the softcover version of {\sl The
+\slMF\kern1ptbook\/} are the same as corrections to Volume~C\null.
+Some of these corrections have already been made in reprintings
+of the books. Several minor changes
+to Volumes A~and~C are not shown here because they simply
+make room for the more substantive changes needed to describe the new
+features of \TeX\ Version 3.0 and \MF\ Version 2.0. Hundreds of
+changes will soon be made to Volumes B~and~D because of the upgrades
+to \TeX\ and \MF\/; it will unfortunately be impossible to document all of those
+changes. Therefore, readers who need up-to-date information on the \TeX\ and
+\MF\ programs should refer to the |WEB| source files until new
+printings of Volumes B~and~D are issued.
+
+ % volume A
+
+\buginvol A, in general (9/23/89)
+
+\ninepoint\noindent
+[Change `127' to `255' and `128' to `256' in contexts referring to character
+codes. This happens on pages 37(twice), 39, 41, 43, 44(twice), 48, 93, 154,
+277, 305(twice), 308(twice), 313, and 343. Also change `7-bit' to `8-bit' on
+pages 214 and 277.]
+
+\bugonpage A23, line 16 (9/23/89)
+
+|This is TeX, Version 3.0 (preloaded format=plain 89.7.15)|
+
+\bugonpage A34, new copy for bottom of page (9/23/89)
+
+\ddanger If you use \TeX\ format packages designed by others, your
+error messages may involve many inscrutable two-line levels of macro
+context. By setting ^|\errorcontextlines||=0| at the beginning of your file,
+you can reduce the amount of information that is reported;
+\TeX\ will show only the top and bottom pairs of context lines
+together with up to |\errorcontextlines| additional two-line items. \ (If
+anything has thereby been omitted, you'll also see `|...|'.) \ Chances
+are good that you can spot the source of an error even when most of a
+large context has been suppressed; if not, you can say
+`|I\errorcontextlines=100\oops|' and try again. \ (That will usually
+give you an undefined control sequence error and plenty of context.) \
+Plain \TeX\ sets |\errorcontextlines=5|.
+
+\bugonpage A45, lines 9--15 (9/23/89)
+
+\ninepoint\noindent
+|^^| has an internal code between 64 and 127, \TeX\
+subtracts 64 from the code; if the code is between 0 and 63, \TeX\
+adds~64. Hence code 127 can be typed |^^?|, and
+the dangerous bend sign can be obtained by saying
+|{\manual^^?}|. However, you must change the category code of character
+127 before using it, since this character ordinarily has category~15
+(^{invalid}); say, e.g., |\catcode`\^^?=12|.
+^^{double hat} ^^{hat hat}
+The |^^| notation is different from |\char|, because |^^| combinations are
+like single characters; for example, it would not be permissible to say
+|\catcode`\char127|, but |^^| symbols can even be used as letters within
+control words.
+
+\bugonpage A45, new copy before line 20 (9/23/89)
+
+\danger There's also a special convention in which |^^| is
+followed by {\sl two\/} ``lowercase hexadecimal digits,'' |0|--|9| or |a|--|f|.
+With this convention, all 256 characters are obtainable in a uniform
+way, from |^^00| to |^^ff|. Character 127 is |^^7f|.
+
+\noindent
+[Also remove one of the two dangerous bend signs on line 20.]
+
+\bugonpage A45, bottom paragraph and footnote (9/23/89)
+
+\ddanger People who install \TeX\ systems for use with non-American alphabets
+can make \TeX\ conform to any desired standard. For example, suppose
+you have a ^{Norwegian keyboard} containing the letter {\tt\ae}, which
+^^{Scandinavian letters} ^^{foreign languages}
+comes in as code~241 (say). Your local format package should define
+|\catcode`|{\tt\ae}|=11|; then you could have control sequences like
+|\s|{\tt\ae}|rtrykk|. Your \TeX\ input files could be made readable by
+American installations of \TeX\ that don't have your keyboard, by
+substituting |^^f1| for character~241. \ (For example, the stated control
+sequence would appear as |\s^^f1rtrykk| in the file; your American
+friends should also be provided with the format that you used, with its
+|\catcode`^^f1=11|.) \ Of course you should also arrange your fonts
+so that \TeX's character 241 will print as {\ae}; and you should
+change \TeX's hyphenation algorithm so that it will do correct
+Norwegian hyphenation. The main point is that such changes are not
+extremely difficult; nothing in the design of \TeX\ limits it to the
+American alphabet. Fine printing is obtained by fine tuning to the
+language or languages being used.
+^^{keyboards, non-ASCII}
+
+\ddanger European languages can also be accommodated effectively with
+only a limited character set.
+For example, let's consider Norwegian again, but suppose that\parfillskip=0pt
+
+\noindent [Now continue with the text on line 11 of page 46.]
+
+\bugonpage A47, lines 9--21 (9/23/89)
+
+\ddanger If \TeX\ sees a superscript character (category 7) in any state,
+and if that character is followed by another identical character, and if
+those two equal characters are followed by a character of code
+$c<128$, then they
+are deleted and 64 is added~to or subtracted from the code~$c$.
+\ (Thus, |^^A| is
+replaced by a single character whose code is~1, etc., as explained earlier.) \
+However, if the two superscript characters are immediately followed by two
+of the lowercase hexadecimal digits |0123456789abcdef|, the
+four-character sequence is replaced by a single character having the
+specified hexadecimal code.
+The replacement is carried out also if such a trio or quartet of
+characters is encountered during steps (b) or~(c) of the control-sequence-name
+scanning procedure described above. After the replacement is made, \TeX\
+begins again as if the new character had been present all the time.
+If a superscript character is not the first of such a trio or quartet, it is
+handled by the following rule.
+
+\ddanger If \TeX\ sees a character of categories 1, 2, 3, 4, 6, 8, 11, 12,
+or~13,
+or a character of category~7 that is not the first of a special
+sequence as just
+described, it converts the character to a token by attaching the category
+code, and goes into state~$M$. This is the normal case; almost every
+nonblank character is handled by this rule.
+
+\bugonpage A48, line 15 (9/23/89)
+
+\ninepoint\noindent
+the input line
+`| $x^2$~ \TeX ^^62^^6|'\thinspace?
+
+\bugonpage A54, third line from the bottom (9/23/89)
+
+\ninepoint\noindent
+For example, a well-designed \TeX\ font for ^{French}
+might well treat accents as lig-\cutpar
+
+\bugonpage A76, lines 3--5 from the bottom (9/23/89)
+
+\ninepoint\noindent
+\TeX\ does not assign any value to
+|\sfcode'042|.
+
+\bugonpage A107, new copy for top of page (9/23/89)
+
+\ddanger If you want to avoid overfull boxes at all costs without
+trying to fix them manually, you might be tempted to set
+|tolerance=10000|; this allows arbitrarily bad lines to be acceptable
+in tough situations. But infinite tolerance is a bad idea, because
+\TeX\ doesn't distinguish between terribly bad and preposterously
+horrible lines. Indeed, a tolerance of 10000 encourages \TeX\ to
+concentrate all the badness in one place, making one truly unsightly
+line instead of two moderately bad ones, because a single
+``write-off'' produces fewest total demerits according to the rules.
+There's a much better way to get the desired effect: \TeX\ has a
+parameter called ^|\emergencystretch| that is added to the assumed
+stretchability of every line when badness and demerits are computed,
+in cases where overfull boxes are otherwise unavoidable. If
+|\emergencystretch| is positive, \TeX\ will make a third pass over a
+paragraph before choosing the line breaks, when the first passes did
+not find a way to satisfy the ^|\pretolerance| and ^|\tolerance|.
+The effect of\/ |\emergencystretch| is to scale down the badnesses so
+that large infinities are distinguishable from smaller ones. By
+setting |\emergencystretch| high enough (based on |\hsize|) you can be
+sure that the |\tolerance| is never exceeded; hence overfull boxes
+will never occur unless the line-breaking task is truly impossible.
+
+\bugonpage A116, lines 11--15 (6/7/89)
+
+\danger If you have two or more |\topinsert| or |\pageinsert| commands in
+quick succession, \TeX\ may need to carry them over to several subsequent
+pages; but they will retain their relative order when they are
+carried over. For example, suppose you have pages that are nine inches
+tall, and suppose you have already specified 4~inches of text for some
+page, say page~25. Then suppose you make seven topinserts in a row, of%
+{\parfillskip=0pt\endgraf}\endgroup
+
+\bugonpage A125, lines 13--29 (9/23/89)
+
+\ddanger \looseness=-1
+When the best page break is finally chosen, \TeX\ removes everything after
+the chosen breakpoint from the bottom of the ``current page,'' and puts it
+all back at the top of the ``recent contributions.'' The
+chosen breakpoint itself is placed at the very top of the recent contributions.
+If it is a penalty item, the value of the penalty is recorded in
+^|\outputpenalty| and the penalty in the contribution list is changed
+to $10000$; otherwise |\outputpenalty| is set to 10000.
+The insertions that remain on the current page are of three kinds: For
+each class~$n$ there are unsplit insertions, followed possibly by
+a single split insertion, followed possibly by others. If
+^|\holdinginserts|$\null>0$, all insertions remain in place (so that
+they might be contributed again); otherwise they are all removed from
+the current page list as follows: The unsplit insertions
+are appended to |\box|$\,n$, with no interline glue between them. \
+(^{Struts} should be used, as in the |\vfootnote| macro of
+Appendix~B\null.) \
+If a split insertion is present, it is effectively |\vsplit| to the size
+that was computed previously in Step~4; the top part is treated as an
+unsplit insertion, and the remainder (if any) is converted to an insertion
+as if it had not been split. This remainder, followed by any other floating
+insertions of the same class, is held
+over in a separate place. \ (They will show up on the ``current page'' if
+^|\showlists| is used while an ^|\output| routine is active; the total
+number of such insertions appears in ^|\insertpenalties| during an
+|\output| routine.) %\
+Finally, the remaining items before the best break on the current page are put
+together in a |\vbox|\parfillskip=0pt
+
+\bugonpage A131, line 12 (9/22/89)
+
+\ninepoint\noindent
+work fine; but sometimes you want to have uniformity
+between different members of a\cutpar
+
+\bugonpage A155, lines 3--5 (9/23/89)
+
+\ninepoint\noindent
+when it encounters a character that
+is given explicitly as ^|\char|\<number>.
+
+\bugonpage A214, lines 19--24 (9/23/89)
+
+\ninepoint
+\textindent\bull |\the|\<special register>, where \<special register> is
+one of the integer quantities ^|\prevgraf|, ^|\deadcycles|, ^|\insertpenalties|,
+^|\inputlineno|, ^|\badness|,
+or ^|\parshape| (denoting only the number of lines of\/ |\parshape|); or
+one of the dimensions ^|\pagetotal|, ^|\pagegoal|, ^|\pagestretch|,
+^|\pagefilstretch|, ^|\pagefillstretch|, ^|\pagefilllstretch|, ^|\pageshrink|,
+^|\pagedepth|. In horizontal modes you can also refer to a special integer,
+|\the\spacefactor|; in vertical modes there's a special dimension,
+|\the\prevdepth|.
+
+\bugonpage A229, new copy after line 11 (9/23/89)
+
+\ddanger \TeX\ will report the badness of glue setting in a box if
+you ask for the numeric quantity
+^|\badness| after making a box. For example, you might say
+\begintt
+\setbox0=\line{\trialtexta}
+\ifnum\badness>250 \setbox0=\line{\trialtextb}\fi
+\endtt
+The badness is between 0 and 10000
+unless the box is overfull, when |\badness=1000000|.
+
+\bugonpage A271, lines 17--20 (9/23/89)
+
+\ninepoint
+\beginsyntax
+ \alt<countdef token>\alt^|\count|<8-bit number>\alt<codename><8-bit number>
+ \alt<chardef token>\alt<mathchardef token>\alt^|\parshape|\alt^|\inputlineno|
+ \alt^|\hyphenchar|<font>\alt^|\skewchar|<font>\alt^|\badness|
+\endsyntax
+
+\bugonpage A272, lines 3--4 (9/23/89)
+
+\ninepoint\noindent
+value is between 0~and $2^8-1=255$; a ^\<4-bit number> is similar.
+
+\bugonpage A273, insert after lines 11, 20, 21, 21, 38 (9/23/89)
+
+\ninepoint
+\begindisplay
+|\holdinginserts|\quad(positive if insertions remain dormant in output box)\cr
+|\language|\quad(the current set of hyphenation rules)\cr
+|\lefthyphenmin|\quad(smallest fragment at beginning of hyphenated word)\cr
+|\righthyphenmin|\quad(smallest fragment at end of hyphenated word)\cr
+|\errorcontextlines|\quad(maximum extra context shown when errors occur)\cr
+\enddisplay
+
+\bugonpage A274, insert after line 4 (9/23/89)
+
+\ninepoint\indent
+|\emergencystretch|\quad(reduces badnesses on final pass of line-breaking)
+
+\bugonpage A275, line 13 (9/23/89)
+
+\ninepoint\noindent
+That makes a total of 103 parameters of all five kinds.
+
+\bugonpage A283, line 14 (9/23/89)
+
+\ninepoint
+\beginsyntax
+ \alt^|\noboundary|\alt^|\unhbox|\alt^|\unhcopy|\alt^|\valign|\alt^|\vrule|
+\endsyntax
+
+\bugonpage A286, lines 3--12 from the bottom (9/23/89)
+
+\ninepoint
+\textindent{$\bull$}%
+\<letter>, \<otherchar>, \kern-1pt^|\char|\<8-bit number>, \<chardef token>,
+\kern-1pt^|\noboundary|.\enskip
+The most common commands of all are the character commands that tell
+\TeX\ to append a character to the current horizontal
+list, using the current font.
+If two or more commands of this type occur in succession, \TeX\ processes
+them all as a unit, converting to ligatures and/or
+inserting kerns as directed by the font information. \ (Ligatures and
+kerns may be influenced by invisible ``boundary'' characters at the left
+and right, unless |\noboundary| appears.) \ Each character
+command adjusts ^|\spacefactor|, using
+the ^|\sfcode| table as described in Chapter~12.
+In unrestricted horizontal mode, a
+`|\discretionary{}{}{}|' item is appended after a character whose code is
+the ^|\hyphenchar| of its font, or after a ligature formed from a sequence
+that ends with such a character.
+
+\bugonpage A287, insert after line 19 (9/23/89)
+
+\ninepoint
+\textindent{$\bull$}%
+|\setlanguage|\<number>.\enskip See the conclusion of Appendix H.
+
+\bugonpage A289, lines 9--14 from the bottom (9/23/89)
+
+\ninepoint\noindent
+$2^{15}-1$. This is done by replacing the character number by its
+^|\mathcode| value. If the
+|\mathcode| value turns out to be $32768=\null$\hex{8000}, however,
+ the \<character>
+is replaced by an ^{active character} token having the original character
+code (0 to~255); \TeX\ forgets the original \<character> and expands this
+active character according to the rules of Chapter~20.
+
+\bugonpage A290, insert before 13th line from bottom (9/23/89)
+
+\ninepoint
+\textindent{$\bull$}%
+|\noboundary|. This command is redundant and therefore has no
+effect; boundary ligatures are automatically disabled in math modes.
+
+\bugonpage A296, line 16 from the bottom (9/22/89)
+
+\noindent[There should be a `|^|' just above the `|3|' in the line below.
+This was mistakenly dropped by the printer some time during 1985; it was
+correct in the first two printings and it has always been correct inside the
+computer!]
+
+\bugonpage A309, lines 3--5 (9/23/89)
+
+\ninepoint\noindent
+\hbox to\parindent{\bf\hss8.4.\enspace}\ignorespaces
+|$|$_{3}$ |x|$_{11}$ |^|$_7$ |2|$_{12}$ |$|$_{3}$ |~|$_{13}$ \]$_{10}$
+\cstok{TeX} |b|$_{12}$ |v|$_{12}$ \]$_{10}$. The final space comes from the
+\<return> placed at the end of the line. Code |^^6| yields |v| only
+when not followed by |0|--|9| or |a|--|f|.
+The initial space is ignored, because state~$N$
+governs the beginning of the line.
+
+\bugonpage A314, line 27 (9/23/89)
+
+\ninepoint\noindent
+The English word `eighteen' might deserve similar treatment.
+\TeX's hyphenation algorithm will not make such spelling changes automatically.
+
+\bugonpage A318, line 19 (3/3/89)
+
+\ninepoint
+|\def\clearnotenumber{\notenumber=0\relax}|
+
+\bugonpage A330, line 3 (8/25/89)
+
+\ninepoint\noindent
+\hbox to\parindent{\bf\hss20.10.\enspace}\ignorespaces
+|\def\overpaid{{\count0=\balance|
+
+\bugonpage A336, lines 4--8 from the bottom (9/23/89)
+
+\ninepoint\noindent
+badness rating of a
+box is at most 10000, except that the |\badness| of
+an overfull box is 1000000. |INITEX| initializes |\tolerance| to
+10000, thereby making all line breaks feasible. Penalties of 10000 or more
+prohibit breaks; penalties of $-10000$ or less make breaks mandatory. The
+cost of a page break is 100000, if the badness is 10000 and if the
+associated penalties are less than 10000 in magnitude (see Chapter~15).
+
+\bugonpage A337, lines 2--16 (9/23/89)
+
+\ninepoint\noindent
+ifies characters whose codes differ by~64
+from the codes of |?|, |@|, |A|; this convention applies only to
+characters with ASCII codes less than~128. There are 256 possible characters,
+hence 256 entries in each of the |\catcode|, |\mathcode|,
+|\lccode|, |\uccode|, |\sfcode|, and |\delcode| tables. All
+|\lccode|, |\uccode|, and |\char| values
+must be less than~256. A font has at most 256 characters. There are
+256~|\box| registers, 256~|\count| registers, 256~|\dimen| registers,
+256~|\skip| registers, 256~|\muskip| registers, 256~|\toks| registers,
+256~hyphenation tables.
+The ``at size'' of a font must be less than~$2048\pt$, i.e.,~$2^{11}\pt$.
+Math delimiters are encoded by multiplying the math~code of the ``small
+character'' by~$2^{12}$. The magnitude of
+a~\<dimen> value must be less than~$16384\pt$, i.e.,~$2^{14}\pt$;
+similarly, the \<factor> in a~\<fil dimen> must be less than~$2^{14}$.
+A~|\mathchar| or |\spacefactor| or |\sfcode| value must be less than~$2^{15}$;
+a~|\mathcode| or |\mag| value must be less than or equal to~$2^{15}$,
+and $2^{15}$ denotes an ``active'' math character. There
+are $2^{16}\rm\,sp$ per~pt. A~|\delcode| value
+must be less than~$2^{24}$; a~|\delimiter|, less than $2^{27}$.
+The |\end| command sometimes contributes
+a penalty of $-2^{30}$ to the current page. A~\<dimen> must be less than
+$2^{30}\rm\,sp$ in absolute value; a~\<number> must be
+less than $2^{31}$ in absolute value.
+
+\bugonpage A348, line 12 from the bottom (9/23/89)
+
+\ninepoint\noindent
+^|\showboxbreadth||=5 |^|\showboxdepth||=3 |^|\errorcontextlines||=5|
+
+\bugonpage A364, insert before line 18 from the bottom (9/23/89)
+
+\ninepoint\noindent
+^|\lefthyphenmin||=2 |^|\righthyphenmin||=3 % disallow x- or -xx breaks|
+
+\bugonpage A364, line 5 from the bottom (9/23/89)
+
+\ninepoint\noindent
+|\def|^|\fmtname||{plain}\def\fmtversion{3.0} % identifies the current format|
+
+\bugonpage A369, insert before line 5 from the bottom (9/23/89)
+
+\ninepoint
+Modern keyboards allow 256 codes to be input, not just 128; so \TeX\
+represents characters internally as numbers in the range 0--255 (i.e.,
+\oct{000}--\oct{377}, or \hex{00}--\hex{FF}). Implementations of \TeX\
+differ in which characters they will accept in input files and which
+they will transmit to output files; these subsets can be specified
+independently. A completely permissive version of \TeX\ allows full
+256-character input and output; other versions might ignore all
+but the visible characters of ASCII; still other versions might
+distinguish the tab character (code \oct{011}) from a space on input,
+but might output each tab as a sequence of three characters |^^I|.
+
+\bugonpage A370, lines 3--7 (9/23/89)
+
+\ninepoint\noindent
+close as possible to the ASCII conventions.
+\ (b)~Make sure that codes \oct{041}--\oct{046}, \oct{060}--\oct{071},
+\oct{141}--\oct{146}, and \oct{160}--\oct{171} are present and that
+each unrepresentable
+internal code $<\null$\oct{200} leads to a representable code when \oct{100} is
+added or subtracted; then all 256 codes can be input and output.
+\ (c)~Cooperate with everyone else who shares
+the same constraints, so that you all adopt the same policy.
+\ (See Appendix~J for information about the \TeX\ Users Group.)
+
+\bugonpage A370, bottom line (9/23/89)
+
+\ninepoint\noindent
+doesn't matter if these symbols have their plain
+\TeX\ meanings or not. \ (6)~There is a special convention for
+representing characters 0--255 in the hexadecimal forms
+|^^00|--|^^ff|, explained in Chapter~8. This convention is always
+acceptable as input, when |^| is any character of catcode~7. Text
+output is produced with this convention only when representing
+characters of code $\ge128$ that a \TeX\ installer has chosen not to
+output directly.
+
+\bugonpage A385, line 8 (5/14/89)
+
+\ninepoint
+|\def\beginbox{\setbox0=\hbox\bgroup}|
+
+\bugonpage A400, line 18 from the bottom (9/23/89)
+
+\ninepoint\noindent
+page prematurely if you want to pass a signal. \ (Set
+^|\holdinginserts| positive to pass a signal when the contents of\/
+|\box255| will be sent back through the page builder again, if any
+insertions are present.)
+
+\bugonpage A419, lines 4--6 (9/23/89)
+
+\ninepoint\noindent
+shortened or lengthened anyway;
+book preparation with \TeX, as with type, encourages interaction between
+humans and machines.) \
+The lines of the quotations are set ^{flush right} by using
+^|\obeylines| together with a stretchable ^|\leftskip|:
+
+\bugonpage A444, lines 21--26 (9/23/89)
+
+\ninepoint\noindent
+following one, using the specified family and the current size, then
+insert the ligature character and continue as specified by the font;
+two characters may collapse into one, or a new character may appear.
+Otherwise if the font information
+shows a kern between the current symbol and the next, insert a kern item
+after the current Ord atom and move to the next item after that.
+Otherwise (i.e., if no ligature or kern is specified between the present
+text symbol and the following character), go to Rule~17.
+
+\bugonpage A453, lines 12--14 from the bottom (9/23/89)
+
+\begingroup
+\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000
+\doublehyphendemerits=-100000 \finalhyphendemerits=-100000
+\ninepoint\noindent
+Exception: The character
+`|.|'~is treated as if it were a \<letter> of code~0
+when it appears in a pattern. Code~0 (which obviously cannot match a nonzero
+|\lccode|) is used by \TeX\ to represent the
+left or right edge of a word when it is being hyphenated.
+
+\endgroup
+
+\bugonpage A454, lines 7--15 from the bottom (9/23/89)
+
+\begingroup
+\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000
+\doublehyphendemerits=-100000 \finalhyphendemerits=-100000
+\ddanger If a trial word $l_1\ldots l_n$ has been found by this process,
+hyphenation will still be abandoned unless $n\ge\lambda+\rho$, where
+$\lambda=\max(1,\hbox{|\lefthyphenmin|})$ and
+$\rho=\max(1,\hbox{|\righthyphenmin|})$.
+\ (Plain \TeX\ takes $\lambda=2$ and $\rho=3$.) \ Furthermore, the items
+immediately following the trial word must consist of zero or more
+characters, ligatures, and implicit kerns, followed immediately by
+either glue or an explicit kern or a penalty item or a whatsit or an
+item of vertical mode material from ^|\mark|, ^|\insert|, or ^|\vadjust|.
+Thus, a box or rule or math formula or discretionary following too closely
+upon the trial word will inhibit hyphenation. (Since \TeX\ inserts
+empty discretionaries after ^{explicit hyphens}, these rules imply that
+already-hyphenated compound words will not be further hyphenated by
+the algorithm.)
+
+\endgroup
+
+\bugonpage A455, new copy after line 13 (9/23/89)
+
+\begingroup
+\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000
+\doublehyphendemerits=-100000 \finalhyphendemerits=-100000
+\ddanger \looseness=-1
+So far we have assumed that \TeX\ knows only one style of
+hyphenation at a time; but in fact \TeX\ can remember up to 256
+distinct sets of rules, if you have enough memory in your computer. An
+integer parameter called ^|\language| selects the rules actually used;
+every ^|\hyphenation| and ^|\patterns| specification appends new rules
+to those previously given for the current value of\/ |\language|.
+\ (If\/ |\language| is negative or greater than 255, \TeX\ acts as if
+|\language|$\null=0$.) \ All |\patterns| for all languages must be
+given before a paragraph is typeset, if |INITEX| is used for
+typesetting.
+
+\ddanger \TeX\ is able to work with several languages in the same
+paragraph, because it operates as follows. At the beginning of a
+paragraph the ``current language'' is defined to be~0. Whenever a
+character is added to the current paragraph (i.e., in unrestricted
+horizontal mode), the current language is compared to |\language|; if
+they differ, the current language is reset and a whatsit node
+specifying the new current language is inserted before the character.
+Thus, if you say `|\def\french{\language1...}|' and `|mix| |{\french
+franc/ais}| |with| |English|', \TeX\ will put whatsits before the |f|
+and the~|w|; hence it will use language~1 rules when hyphenating
+|franc/ais|, after which it will revert to language~0. You can insert
+the whatsit yourself (even in restricted horizontal mode) by saying
+^|\setlanguage|\<number>; this changes the current language but it
+does not change |\language|.
+
+\endgroup
+
+\bugonpage A459, right column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\badness|, 214, {\it229}, 271.
+
+\bugonpage A461, right column (9/23/89)
+
+\eightpoint
+caron, {\sl see\/} h\'a\v cek.
+
+\bugonpage A464, line 10 (5/15/89)
+
+\eightpoint
+displays, 87, 103, {\it139--145}, {\it166--167},
+
+\bugonpage A464, right column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\emergencystretch|, $\underline{107}$, 274.
+
+\bugonpage A465, left column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\errorcontextlines|, $\underline{34}$, 273, {\it348}.
+
+\bugonpage A466, entry for `fractions' (9/23/89)
+
+\eightpoint[Add page 332 to this entry.]
+
+\bugonpage A466, entry for `French'' (9/23/89)
+
+\eightpoint[Add page 455 to this entry.]
+
+\bugonpage A467, entry for `hexadecimal' (9/23/89)
+
+\eightpoint[Add pages 45, 47--48 to this entry.]
+
+\bugonpage A467, right column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\holdinginserts|, $\underline{125}$, 273, 400.
+
+\bugonpage A467, bottom line (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\hyphenation|, 277, {\it419}, $\underline{452}$--$\underline{453}$, 455.
+
+\bugonpage A468, right column (9/23/89)
+
+\eightpoint
+infinite badness, 97, 107, 111, 229, 317.
+
+\bugonpage A468, right column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\inputlineno|, 214, 271.
+
+\bugonpage A469, entry for kerns (9/23/89)
+
+\eightpoint[Add pages 286 and 444 to this entry.]
+
+\bugonpage A469, left column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\language| (hyphenation method), 273, $\underline{455}$.
+
+\bugonpage A469, right column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\lefthyphenmin|, 273, {\it364}, $\underline{454}$.
+
+\bugonpage A470, entry for ligatures (9/23/89)
+
+\eightpoint[Add pages 286 and 444 to this entry.]
+
+\bugonpage A472, left column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\noboundary|, 283, $\underline{286}$, 290.
+
+\bugonpage A473, right column (9/23/89)
+
+\eightpoint
+overfull boxes, 27--30, 94, 229, 238,\par
+\indent\qquad 302--303, 307, 400.\par
+\indent\quad avoiding, 107.
+
+\bugonpage A474, left column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\patterns|, 277, $\underline{453}$, 455.
+
+\bugonpage A476, left column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\righthyphenmin|, 273, {\it364}, $\underline{454}$.
+
+\bugonpage A476, right column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\setlanguage|, 287, $\underline{455}$.
+
+\bugonpage A476, right column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\showboxbreadth|, 273, $\underline{302}$, 303, {\it348}.\par
+\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\showboxdepth|, 79, 273, $\underline{302}$, 303, {\it348}.
+
+\bugonpage A479, left column (9/23/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\tolerance|, {\it29--30}, 91, 94, $\underline{96}$, 107, 272,\par
+\indent\qquad{\it317}, {\it333}, {\it342}, {\it348}, {\it364}, {\it451}.
+
+\bugonpage A481, right column, last six entries (9/23/89)
+
+\def\frac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}%
+\eightpoint
+\frac1/2, 67, 332.\par
+1/2, in unslashed form, 141, 186.\par
+\<4-bit number>, $\underline{271}$.\par
+\<8-bit number>, $\underline{271}$, 276--278.\par
+\<15-bit number>, $\underline{271}$, 277, 289, 291.\par
+\<27-bit number>, $\underline{271}$, 289, 291.\par
+
+\bugonpage A483, lines 15 and 21 (9/23/89)
+
+\noindent[Delete these two lines, as TUG's address is no longer c/o AMS.]
+
+ % volume B
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage Bvii, top two lines (4/21/89)
+
+{\hsize=29pc
+\tenpoint\noindent
+{\it {\sltt WEB} documentation for four utility programs that are
+often used in conjunction with \TeX: {\sltt POOLtype}, {\sltt TFtoPL},
+{\sltt PLtoTF}, and {\sltt DVItype}.}
+\par}
+
+\bugonpage B2, line 32 (6/20/89)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]2.991\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
+
+\bugonpage B118, lines 2--4 (3/2/89)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin if\/} $\\{cur\_level}>\\{level\_one}$ {\bf then}\par
+\noindent\hskip20pt{\bf begin} \\{check\_full\_save\_stack}; \
+ $\\{save\_type}(\\{save\_ptr})\gets\\{insert\_token}$;\par
+\noindent\hskip20pt$\\{save\_level}(\\{save\_ptr})\gets\\{level\_zero}$; \
+ $\\{save\_index}(\\{save\_ptr})\gets t$; \ \\{incr}(\\{save\_ptr});\par
+\noindent\hskip20pt{\bf end};
+
+\bugonpage B182, line 13 becomes two lines (6/20/89)
+
+\ninepoint\noindent
+$k,\\{kk}$: \\{small\_number};\quad
+ $\{\,$number of digits in a decimal fraction$\,\}$\par\noindent
+$p,q$: \\{pointer};\quad
+ $\{\,$top of decimal digit stack$\,\}$
+
+\bugonpage B182, line 15 from the bottom (6/20/89)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} $k\gets0$; $p\gets\\{null}$; \\{get\_token};\quad
+ $\{\,$\\{point\_token} is being re-scanned$\,\}$
+
+\bugonpage B182, line 11 from the bottom (6/20/89)
+
+\ninepoint\noindent\hskip30pt
+{\bf begin} $q\gets\\{get\_avail}$; $\\{link}(q)\gets p$;
+ $\\{info}(q)\gets\\{cur\_tok}-\\{zero\_token}$;
+ $p\gets q$; $\\{incr}(k)$;
+
+\bugonpage B182, line 8 from the bottom (6/20/89)
+
+\ninepoint\noindent
+\\{done1}: {\bf for} $\\{kk}\gets k$ {\bf downto} 1 {\bf do}\par
+\noindent\hskip20pt
+{\bf begin} $\\{dig}[kk-1]\gets\\{info}(p)$; $q\gets p$; $p\gets\\{link}(p)$;
+ $\\{free\_avail}(q)$;\par
+\noindent\hskip20pt{\bf end};\par
+\noindent\hskip10pt$f\gets\\{round\_decimals}(k)$;
+
+\bugonpage B332, lines 11 and 12 from the bottom (4/8/89)
+
+\ninepoint
+\noindent\hskip10pt
+{\bf begin if\/} $\\{cur\_align}=\\{null}$ {\bf then}
+ \\{confusion}({\tt\char'23endv\char'23});\par\noindent\hskip10pt
+$q\gets\\{link}(\\{cur\_align})$; \ {\bf if\/} $q=\\{null}$ {\bf then}
+ \\{confusion}({\tt\char'23endv\char'23});
+
+\bugonpage B466, line 5 becomes three lines (6/7/89)
+
+\ninepoint
+\noindent
+$\\{mmode}+\\{halign}$: {\bf if\/} \\{privileged} {\bf then}\par\noindent
+\hskip20pt{\bf if\/} $\\{cur\_group}=\\{math\_shift\_group}$
+ {\bf then} \\{init\_align}\par\noindent\hskip20pt
+{\bf else} \\{off\_save};
+
+\bugonpage B518, line 25 (8/31/89)
+
+\ninepoint\noindent\hskip10pt
+$\\{undump}(\\{lo\_mem\_stat\_max}+1)(\\{lo\_mem\_max})(\\{rover})$; \
+$p\gets\\{mem\_bot}$; \ $q\gets\\{rover}$;
+
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+
+\buginvol C, in general (9/23/89)
+
+\ninepoint\noindent
+[Change `127' to `255' and `128' to `256' in contexts referring to character
+codes. This happens on pages 188(thrice) and 251.]
+
+\bugonpage C91, lines 12 and 13 (8/31/89)
+
+\begintt
+\mode=cheapo; input newface
+\endtt
+and the same file should also produce a high-resolution font if we start with
+
+\bugonpage C204, line 4 (8/18/89)
+
+\ninepoint\noindent
+so that
+\\{currenttransform} multiplies all $y$~coordinates by
+\\{aspect\_ratio}, when paths are\cutpar
+
+\bugonpage C212, lines 24--27 (9/30/89)
+
+\ninepoint
+\begindisplay
+{\it boundarychar}\quad&the right boundary character for ligatures and kerns\cr
+\enddisplay
+All of these quantities are numeric. They are initially zero at the
+start of a job, except for {\it year\/}, {\it month\/},
+ {\it day\/}, and {\it time\/}, which
+are initialized to the time the run began; furthermore, {\it boundarychar\/} is
+initially~$-1$. A {\it granularity\/} of zero is equivalent to
+ $\hbox{\it granularity\/}=1$.
+A preloaded base file like plain \MF\ will usually give nonzero values to
+several other internal quantities on this list.
+
+\bugonpage C259, lines 16 and 17 from the bottom (5/14/89)
+
+\tenpoint
+\noindent
+|screenchars|; \ |screenstrokes|; \ |imagerules|; \ |gfcorners|; \
+|nodisplays|;\hfil\break
+|notransforms|; \ |input| \<filename>.
+
+\bugonpage C282, the three lines following the chart (9/30/89)
+
+\tenpoint\noindent
+\MF\ can also be configured to accept any or all of the character codes
+128--255.
+However, \MF\ programs that make use of anything in addition to the 95
+standard ASCII characters cannot be expected to run on other systems, so
+the use of extended character sets is discouraged.
+
+\bugonpage C316, bottom 14 lines and top 30 of page C317 (9/30/89)
+
+\ninepoint
+Ligature information and kerning information is specified in short
+``^{ligtable programs}'' of a particularly simple form. Here's an example
+that illustrates most of the features (although it is not a serious
+example of typographic practice):
+\beginlines
+^|ligtable|| "f": "f" =: oct"013", "i" |\||=: oct"020", skipto 1;|
+|ligtable "o": "b": "p": "e" kern .5u#, "o" kern .5u#, "x" kern-.5u#,|
+| 1:: "!" kern u#;|
+\endlines
+This sequence of instructions can be paraphrased as follows:
+\smallskip
+\hangindent 3pc
+Dear \TeX, when you're typesetting an~`f' with this font, and when the
+following character also belongs to this font, look at it closely because
+you might need to do something special: If that following character is
+another~`f', replace the two f's by character code |oct"013"|
+[namely `\char'13'\kern.5pt];
+if it's an `i', retain the `f' but replace the `i' by character code
+|oct"020"| [a dotless `\char'20'\kern.5pt];
+otherwise skip down to label `|1::|' for further instructions.
+When you're typesetting an `o' or~`b' or~`p', if the next input to \TeX\ is
+`e' or~`o', add a half unit
+of space between the letters; if it's an `x', subtract a half unit; if it's an
+exclamation point, add a full unit. The last instruction applies also
+to exclamation points following~`f' (because of the label `|1::|').
+\smallskip\noindent
+When a character code appears in front of a colon, the colon ``labels''
+the starting place for that character's ligature and kerning program,
+which continues to the end of the ligtable statement. A double colon denotes
+a ``local label''; a |skipto| instruction advances to the next matching local
+label, which must appear before 128 ligtable steps intervene. The special
+label \|\||:| can be used to initiate ligtable instructions for an invisible
+``left boundary character'' that is implicitly present just before every
+word; an invisible ``right boundary character'' equal to {\it boundarychar\/} is
+also implicitly present just after every word, if {\it boundarychar\/}
+ lies between
+0 and~255.
+
+The general syntax for ligtable programs is pretty easy to guess from
+these examples, but we ought to exhibit it for completeness:
+\beginsyntax \chardef\\=`\|
+<ligtable command>\is[ligtable]<ligtable program><optional skip>
+<ligtable program>\is<ligtable step>\alt<ligtable program>[,]<ligtable step>
+<optional skip>\is[,] [skipto]<code>\alt<empty>
+<ligtable step>\is<code><ligature op><code>
+ \alt<code>[kern]<numeric expression>
+ \alt<label><ligtable step>
+<ligature op>\is[=:]\alt[\\=:]\alt[\\=:>]\alt[=:\\]\alt[=:\\>]%
+ \alt[\\=:\\]\alt[\\=:\\>]\alt[\\=:\\>>]
+<label>\is<code>[:]\alt<code>[::]\alt[\\\\:]
+<code>\is<numeric expression>\alt<string expression>
+\endsyntax
+A \<code> should have a numeric value between 0 and 255, inclusive,
+after having been rounded to the nearest integer; or it should be a
+string of length~1, in which case it denotes the corresponding
+^{ASCII} code (Appendix~C\null). For example, |"A"| and |64.61| both
+specify the code value 65. Vertical bars to the left or right of `|=:|'
+tell \TeX\ to retain the original left and/or right character that invoked a
+ligature. Additional `|>|' signs tell \TeX\ to advance its focus of attention
+instead of doing any further ligtable operations at the current
+character position.
+
+\bugonpage C338, lines 21 and 22 (9/30/89)
+
+\ninepoint\noindent
+and 127--255 have to be specified with the `|#|' option,
+on non-fancy installations of \TeX,
+and so does code 35 (which is the ASCII code of `|#|' itself).
+
+\bugonpage C346, left column, after line 14 (9/30/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+\||=:|, {\it316}, $\underline{317}$.\par
+\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+\||=:>|, $\underline{317}$.\par
+\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|=:|\|, $\underline{317}$.\par
+\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|=:|\||>|, $\underline{317}$.\par
+\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+\||=:|\|, $\underline{317}$.\par
+\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+\||=:|\||>|, $\underline{317}$.\par
+\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+\||=:|\||>>|, $\underline{317}$.\par
+
+\bugonpage C346, left column, after line 31 (9/30/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|::| (local label), $\underline{317}$.\par
+\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+\|\||:| (left boundary label), $\underline{317}$.\par
+
+\bugonpage C347, left column (9/30/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|boundarychar|, 212, 317.
+
+\bugonpage C352, left column (9/30/89)
+
+\eightpoint[Change `\<ligature replacement>' to `\<ligature op>'.]
+
+\bugonpage C354, left column (9/30/89)
+
+\eightpoint
+\<optional skip>, 217.
+
+\bugonpage C356, left column (9/30/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|skipto|, {\it316}, $\underline{317}$.
+
+ % Volume D
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage Dvi, bottom two lines, and top lines of page vii (4/21/89)
+
+{\hsize=29pc \tenpoint
+\textindent\bull ``\MF\/ware'' by Donald~E. Knuth, Tomas~G. Rokicki, and
+Ar\-thur~L. Samuel, Stanford Computer Science Report 1255 (Stanford,
+California, April 1989), 207~pp. \ {\it The {\sltt WEB} programs for
+four utility programs that are often used in conjunction with
+\slMF\kern1pt: {\sltt GFtype}, {\sltt GFtoPK}, {\sltt GFtoDVI},
+and {\sltt MFT}.}
+\par}
+
+\bugonpage D63, line 9 (8/31/89)
+
+\tenpoint\noindent
+\\{mem}, so we
+allow pointers to assume any \\{halfword} value. The minimum memory
+index represents\cutpar
+
+\bugonpage D63, line 28 (8/31/89)
+
+\tenpoint\centerline{$\\{null}=\\{mem\_min}<\\{lo\_mem\_max}<
+\\{hi\_mem\_min}<\\{mem\_top}\le\\{mem\_end}\le\\{mem\_max}$.}
+
+\bugonpage D67, in the July 1987 printing (4/7/89)
+
+\ninepoint\noindent
+[Delete line 7, which has a redundant `{\bf if\/} $r=p$ {\bf then}';
+ move line 8 to the left 10 points for alignment; and restore the following
+ line (which was deleted by mistake after line 8):
+
+ \noindent\hskip10pt
+ $\\{node\_size}(p)\gets q-p$\quad$\{\,$reset the size in case it grew$\,\}$
+
+ \noindent
+ These corrections are needed only in the reprinting made July, 1987.]
+
+\bugonpage D228, in the July 1987 printing (4/7/89)
+
+\ninepoint\noindent
+[Delete lines 14--15, which were inserted erroneously from a previous errata
+list; and restore the following lines (which were deleted by mistake):
+
+\noindent\hskip20pt
+{\bf begin} \\{double}(\\{max\_coef}); \
+\\{double}(\\{x0}); \
+\\{double}(\\{x1}); \
+\\{double}(\\{x2});\par\noindent\hskip20pt
+\\{double}(\\{y0}); \
+\\{double}(\\{y1}); \
+\\{double}(\\{y2});\par\noindent\hskip20pt
+{\bf end}
+
+\noindent
+These corrections are needed only in the reprinting made July, 1987.]
+
+\bugonpage D248, in the July 1987 printing (4/7/89)
+
+\ninepoint\noindent
+[Delete line 16, which begins with `$d\gets\\{take\_fraction}$';
+and restore the following line (which was deleted by mistake after line 22):
+
+\noindent\hskip10pt
+{\bf if\/} $d<\\{alpha}$ {\bf then} $d\gets\\{alpha}$
+
+\noindent
+These corrections are needed only in the reprinting made July, 1987.]
+
+\bugonpage D389, line 10 (6/20/89)
+
+\ninepoint\noindent\hskip20pt
+\\{help1}({\tt\char'23
+The\]expression\]above\]should\]have\]been\]a\]number\]>=3/4.\char'23});
+
+\bugonpage D504, line 25 (8/31/89)
+
+\ninepoint\noindent\hskip10pt
+$\\{undump}(\\{lo\_mem\_stat\_max}+1)(\\{lo\_mem\_max})(\\{rover})$; \
+$p\gets\\{mem\_min}$; \ $q\gets\\{rover}$;
+
+\bugonpage D510, in the July 1987 printing (4/7/89)
+
+\ninepoint\noindent
+[Move the 7th-to-last line, which begins with `\\{internal}[\\{fontmaking}]',
+one line down, and indent it to the right by 10 more points.
+This correction is needed only in the reprinting made July, 1987.]
+
+ % volume E
+\hsize=29pc
+\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}}
+
+\bugonpage Exiii, bottom four lines (5/5/89)
+
+{\hsize=29pc \tenpoint
+\textindent\bull ``Metamarks: Preliminary studies for a Pandora's Box of
+shapes'' by Neenie Billawala,
+Stanford Computer Science Report 1256 (Stanford,
+California, May 1989), 132~pp. \ {\it Lavishly illustrated studies in
+parameter variation, leading to the design of a new family of
+typefaces called Pandora.}
+\par}
+
+\bugonpage E401, bottom line (5/16/89)
+
+\ninepoint\noindent
+{\bf \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}%
+math\_fit}$(-.3\\{cap\_height}\0*\\{slant}-.5u\0,\\{ic}\0)$;\par\noindent
+{\bf penlabels}$(1,2,3,4,5,6,7,8)$; {\bf endchar\/};
+\smallskip\noindent
+[some points and labels are missing at the tip of the tail on page 400]
+ \bye
+ Now here are some that I will make soon!
+
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.four b/Master/texmf-dist/source/generic/knuth/errata/errata.four
new file mode 100644
index 00000000000..11d0435e749
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.four
@@ -0,0 +1,1052 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting, 1987--1988}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\noindent This is a list of all corrections made to {\sl Computers \&
+Typesetting}, Volumes A--E\null, between
+16 June 1987 and 20 February 1989. Corrections made to
+the softcover version of {\sl The \TeX book} are the same as corrections to
+Volume~A\null. Corrections to the softcover version of {\sl The
+\slMF\kern1ptbook\/} are the same as corrections to Volume~C\null.
+Some of these corrections have already been made in reprintings
+of the books. Some of these corrections affect the indexes and
+mini-indexes of Volumes B~and~D in ways not shown here. Corrections
+made up to 15 June 1987 appear in other files.
+ % volume A
+
+\bugonpage A159, line 22 (2/15/88)
+
+\ninepoint\noindent
+`|\nolimits|' if the normal |\displaylimits|
+convention has been overridden; a Rad\cutpar
+
+\bugonpage A213, lines 34--35 (12/23/87)
+
+\ninepoint\noindent
+text will be a single control sequence token, defined to be like |\relax| if
+its meaning is currently undefined.
+
+\bugonpage A299, line 30 (7/6/88)
+
+\ninepoint\indent\tt
+Fatal format file error; I'm stymied.
+
+\bugonpage A326, line 12 (12/12/87)
+
+\ninepoint\noindent
+its natural width. The |\hbox| version also invokes |\everymath|.
+
+\bugonpage A359, line 2 (11/6/88)
+
+\ninepoint\noindent
+|\mathchardef\ldotp="613A\mathchardef\cdotp="6201\mathchardef\colon="603A|
+
+\bugonpage A359, lines 35--38 (5/24/88)
+
+\ninepoint\noindent
+|\def\updownarrow{\delimiter"326C33F } \def\arrowvert{\delimiter"033C000 }|%
+ \par\noindent
+|\def\Updownarrow{\delimiter"326D377 } \def\Arrowvert{\delimiter"033D000 } |%
+ \par\noindent
+|\def\vert{\delimiter"026A30C } \def\Vert{\delimiter"026B30D } |%
+ \par\noindent
+|\def\backslash{\delimiter"026E30F } \def\bracevert{\delimiter"033E000 }|
+
+\bugonpage A364, line 35 (11/6/88)
+
+\ninepoint\noindent
+|\def\fmtname{plain}\def\fmtversion{2.94} % identifies the current format|
+
+\bugonpage A379, line 15 (10/12/87)
+
+\ninepoint
+|\def\deleterightmost#1{\edef#1{\expandafter\xyzzy#1\xyzzy}}|
+
+\bugonpage A383, lines 7--15 from the bottom (1/4/89)
+
+\begintt
+ 209 strings out of 1685
+ 1659 string characters out of 17636
+ 27618 words of memory out of 52821
+ 1172 multiletter control sequences out of 2500
+\endtt
+Consequently there was plenty of room for more macros: $52821-27618=
+25203$ unused cells of main memory, $2500-1172=1328$ of name memory,
+$1685-209=1476$ of string memory, and $17636-1659=15977$ of character memory.
+But a fairly large \TeX\ was being used, and only the macros of
+Appendices B and~E were loaded; in other circumstances it might have
+been necessary to conserve space.
+
+\bugonpage A454, lines 23--29 (8/13/87)
+
+\begingroup
+\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000
+\doublehyphendemerits=-100000 \finalhyphendemerits=-100000
+\ddanger If a suitable starting letter is found, let it be in font~$f$.
+Hyphenation is abandoned unless the |\hyphenchar| of~$f$ is between
+0 and~255, and unless a character of that number exists in the font.
+If this test is passed, \TeX\ continues to scan forward
+until coming to something that's not one of the following three
+``admissible items'': (1)~a character in font~$f$ whose |\lccode|
+is nonzero; (2)~a ligature formed entirely from characters of type~(1);
+(3)~an implicit kern. The first inadmissible item terminates this part of
+the process; the trial word consists of all the letters found in admissible
+items. Notice that all of these letters are in font~$f$.
+
+\endgroup % end the special hyphenation conventions
+
+\bugonpage A458, left column, line 19 (2/15/88)
+
+\eightpoint\indent
+|\|\| ( $\Vert$ ), {\it146--147}, {\it171}, $\underline{361}$, 435, 438.
+
+\bugonpage A462, left column, line 7 (10/9/87)
+
+\eightpoint\indent\qquad 152, 178, $\underline{360}$.
+
+\bugonpage A463, left column (4/17/88)
+
+\eightpoint\indent
+\hbox to0pt{\hss\lower1pt\hbox{*}}|\day|, 273, 349, {\it406}.
+
+\bugonpage A464, left column, under Displays (12/8/88)
+
+\eightpoint\indent\quad
+non-centered, 186, 326, 375--376, 420--421.
+
+\bugonpage A465, entry for {\tt\char`\\everymath} (12/12/87)
+
+\eightpoint\indent[Include also a reference to page 326.]
+
+\bugonpage A465, right column (7/6/88)
+
+\eightpoint\indent{\tt Fatal format file error}, 299.
+
+\bugonpage A473, entry for `page builder' (8/13/87)
+
+\eightpoint\indent\quad when exercised, 122, 280--283, 286--287.
+
+\bugonpage A474, left column (12/27/88)
+
+\eightpoint\indent
+\hbox to0pt{\hss\lower1pt\hbox{*}}|\parshape|, 101--102, 214, 271, 277, 283,
+
+\bugonpage A480, right column (2/15/88)
+
+\eightpoint\indent|\vdots| ( $\vdots$ ), {\it177}, $\underline{359}$.
+
+\bugonpage A481, right column (7/3/87)
+
+\eightpoint|\z@|, $\underline{347}$, 348.\par
+|\z@skip|, $\underline{347}$, 348.
+ % volume B
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage B2, line 32 (2/20/89)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]2.97\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
+
+\bugonpage B38, lines 7--9 from the bottom (11/6/88)
+
+\tenpoint\noindent[Delete this paragraph; it is being moved to page B214.]
+
+\bugonpage B38, line 5 from the bottom (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{term\_and\_log}$
+
+\bugonpage B39, line 5 (12/14/88)
+
+\ninepoint\noindent\kern50pt
+{\bf if\/} \\{log\_opened} {\bf then} \\{error};
+
+\bugonpage B52, line 5 (8/13/87)
+
+\tenpoint\noindent
+cannot be done, i.e., if $\\{hi\_mem\_min}=\\{lo\_mem\_max}+1$,
+we have to quit.
+
+\bugonpage B54, lines 34--35 (7/9/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin if\/} $\\{hi\_mem\_min}-\\{lo\_mem\_max}\ge1998$
+ {\bf then} $t\gets\\{lo\_mem\_max}+1000$\par\noindent\kern10pt
+{\bf else} $t\gets\\{lo\_mem\_max}+1+(\\{hi\_mem\_min}-\\{lo\_mem\_max})
+\,\mathbin{\bf div}\,2$;\quad\kern-4pt
+$\{\,\\{lo\_mem\_max}+2\le t<\\{hi\_mem\_min}\,\}$
+
+\bugonpage B108, new line after line 8 (5/24/88)
+
+\ninepoint\noindent\kern20pt
+$d$: \\{integer};\quad
+$\{\,$number of characters in incomplete current string$\,\}$
+
+\bugonpage B108, lines 31--33 (5/24/88)
+
+\ninepoint\noindent\kern10pt
+$\\{str\_room}(l)$; $d\gets\\{cur\_length}$;\par\noindent\kern10pt
+{\bf while} $\\{pool\_ptr}>\\{str\_start}[\\{str\_ptr}]$ {\bf do}
+ \par\noindent\kern20pt
+{\bf begin} \\{decr}(\\{pool\_ptr});
+ $\\{str\_pool}[\\{pool\_ptr}+l]\gets\\{str\_pool}[\\{pool\_ptr}]$;
+ \par\noindent\kern20pt
+{\bf end};\quad$\{\,$move current string up to make room for another$\,\}$
+\par\noindent\kern10pt
+{\bf for} $k\gets j$ {\bf to} $j+l-1$ {\bf do} $\\{append\_char}(\\{buffer}[k])$;
+\par\noindent\kern10pt
+$\\{text}(p)\gets\\{make\_string}$; $\\{pool\_ptr}\gets\\{pool\_ptr}+d$;
+
+\bugonpage B115, line 12 (4/28/88)
+
+\ninepoint\noindent\hskip10pt
+$\\{group\_code}=0\to\\{max\_group\_code}$;\quad
+ $\{\,$\\{save\_level} for a level boundary$\,\}$
+
+\bugonpage B141, line 19 (4/28/88)
+
+\ninepoint\noindent
+\\{par\_token}: \\{halfword};\quad
+ $\{\,$token representing `|\par|'$\,\}$
+
+\bugonpage B150, line 24 (4/28/88)
+
+\tenpoint\noindent{\bf 358.\quad}%
+The present point in the program is reached only when the \\{expand}
+routine has inserted\cutpar
+
+\bugonpage B151, mini-index (4/28/88)
+
+\eightpoint\noindent
+Delete the entry for `\\{no\_expand}'; replace it by:
+
+\indent\\{expand}: {\bf procedure}, \S366.
+
+\bugonpage B154, lines 25, 29, 34 respectively (9/20/87)
+
+\ninepoint\noindent\hskip20pt
+$\\{cvl\_backup},\\{radix\_backup},\\{co\_backup}$: \\{small\_number};\quad
+ $\{\,$to save \\{cur\_val\_level}, etc.$\,\}$\par\noindent\hskip10pt
+$\\{co\_backup}\gets\\{cur\_order}$;
+ $\\{backup\_backup}\gets\\{link}(\\{backup\_head})$;\par\noindent\hskip10pt
+$\\{cur\_order}\gets\\{co\_backup}$;
+ $\\{link}(\\{backup\_head})\gets\\{backup\_backup}$;
+
+\bugonpage B155, new entry for mini-index (9/20/87)
+
+\eightpoint\indent
+\\{cur\_order}: \\{glue\_ord}, \S447.
+
+\bugonpage B156, line 28 (12/23/87)
+
+\ninepoint\noindent\hskip20pt
+{\bf begin }$\\{eq\_define}(\\{cur\_cs},\\{relax},256)$;
+
+\bugonpage B157, mini-index (12/23/87)
+
+\eightpoint\noindent
+Delete the entries for `\\{eqtb}' and `\\{frozen\_relax}'; replace them
+by the following:
+
+\indent\\{eq\_define}: {\bf procedure}, \S227.\par
+$\\{relax}=0$, \S207.\par
+
+\bugonpage B162, lines 12--14 (4/30/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf repeat} $\\{link}(\\{temp\_head})\gets\\{null}$;\par\noindent\hskip20pt
+{\bf if\/} $(\\{info}(r)>\\{match\_token}+127)\lor
+ (\\{info}(r)<\\{match\_token})$ {\bf then}
+ $s\gets\\{null}$\par\noindent\hskip20pt
+{\bf else begin} $\\{match\_chr}\gets\\{info}(r)-\\{match\_token}$; \
+ $s\gets\\{link}(r)$; \ $r\gets s$; \ $p\gets\\{temp\_head}$; \
+ $m\gets 0$;
+
+\bugonpage B177, bottom line before mini-index (7/13/88)
+
+\ninepoint\noindent\hskip10pt
+$\\{cur\_val}\gets0$; \
+ $\\{cur\_val\_level}\gets\\{int\_val}$; \
+ $\\{radix}\gets0$; \
+ $\\{cur\_order}\gets0$;
+
+\bugonpage B181, line 31 (4/28/88)
+
+\ninepoint\noindent
+[Change `$x$ units per sp' to `$x$ sp per unit'! This change also
+should be made on line~1 of page B183 and line $-8$ of page B590.]
+
+\bugonpage B188, line 8 (5/25/88)
+
+\ninepoint\noindent
+{\bf function} $\\{str\_toks}(b:\\{pool\_pointer})$: \\{pointer};\quad
+ $\{\,$changes the string \\{str\_pool}$[b\to\\{pool\_ptr}]$ to a token list$\,\}$
+
+\bugonpage B188, line 13 (5/25/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin} \\{str\_room}(1); $p\gets\\{temp\_head}$;
+ $\\{link}(p)\gets\\{null}$; $k\gets b$;
+
+\bugonpage B188, line 20 (5/25/88)
+
+\ninepoint\noindent\kern10pt
+$\\{pool\_ptr}\gets b$; $\\{str\_toks}\gets p$;
+
+\bugonpage B188, new line after line 28 (5/25/88)
+
+\ninepoint\noindent\kern20pt
+$b$: \\{pool\_pointer};\quad$\{\,$base of temporary string$\,\}$
+
+\bugonpage B188, line 31 (5/25/88)
+
+\ninepoint\noindent\kern10pt
+{\bf else begin} $\\{old\_setting}\gets\\{selector}$;
+ $\\{selector}\gets\\{new\_string}$; $b\gets\\{pool\_ptr}$;
+
+\bugonpage B188, line 41 (5/25/88)
+
+\ninepoint\noindent\kern20pt
+$\\{selector}\gets\\{old\_setting}$; $\\{the\_toks}\gets\\{str\_toks}(b)$;
+
+\bugonpage B190, lines 16--18 (5/25/88)
+
+\ninepoint\noindent\kern20pt
+$b$: \\{pool\_pointer};\quad$\{\,$base of temporary string$\,\}$\par
+\noindent\kern10pt
+{\bf begin} $c\gets\\{cur\_chr}$;
+ $\langle\,$Scan the argument for command $c${\eightrm\kern.5em471}$\,\rangle$;
+\par\noindent\kern10pt
+$\\{old\_setting}\gets\\{selector}$;
+$\\{selector}\gets\\{new\_string}$; $b\gets\\{pool\_ptr}$;
+$\langle\,$Print the result of command~$c${\eightrm\kern.5em472}$\,\rangle$;
+\par\noindent\kern10pt
+$\\{selector}\gets\\{old\_setting}$;
+$\\{link}(\\{garbage})\gets\\{str\_toks}(b)$;
+$\\{ins\_list}(\\{link}(\\{temp\_head}))$;
+
+\bugonpage B210, line 36 (5/25/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin if} $(\\{pool\_ptr}+\\{name\_length}>\\{pool\_size})
+ \lor(\\{str\_ptr}=\\{max\_strings})\lor(\\{cur\_length}>0)$ {\bf then}
+
+\bugonpage B211, new line of code before the mini-index (12/14/88)
+
+\ninepoint\noindent
+\\{log\_opened}: \\{boolean};\quad$\{\,$has the transcript file been opened?$\,\}$
+
+\bugonpage B212, line 5 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+$\\{job\_name}\gets0$; \ $\\{name\_in\_progress}\gets\\{false}$; \
+$\\{log\_opened}\gets\\{false}$;
+
+\bugonpage B213, line 24 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+$\\{log\_name}\gets\\{a\_make\_name\_string}(\\{log\_file})$; \
+$\\{selector}\gets\\{log\_only}$; \
+$\\{log\_opened}\gets\\{true}$;
+
+\bugonpage B214, lines 2 and 3 (12/14/88)
+
+\tenpoint\noindent
+messages or even to \\{show\_context}.
+The \\{prompt\_file\_name} routine can result in a \\{fatal\_error},
+but the \\{error}
+routine will not be invoked because \\{log\_opened} will be false.
+\par\noindent\hskip10pt
+The normal idea of \\{batch\_mode} is that nothing at all should be written
+on the terminal. However, in the unusual case that
+no log file could be opened, we make an exception and allow
+an explanatory message to be seen.
+
+\bugonpage B214, lines 7--11 reduce to a single line (12/14/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} $\\{selector}\gets\\{term\_only}$;
+
+\bugonpage B224, second-last line (4/28/87)
+
+\ninepoint\noindent
+\\{done}: {\bf if} \\{file\_opened} {\bf then} \\{b\_close}(\\{tfm\_file});\par
+\noindent\hskip10pt $\\{read\_font\_info}\gets g$;
+
+\bugonpage B229, lines 6--8 (11/17/87)
+
+\tenpoint\noindent
+than $2^{27}$.
+If $z<2^{23}$, the individual multiplications $b\cdot z$,
+$c\cdot z$, $d\cdot z$ cannot overflow; otherwise we will divide $z$ by 2,
+4, 8, or 16, to obtain a multiplier less than $2^{23}$, and we can
+compensate for this later. If $z$ has thereby been replaced by
+$z^\prime=z/2^e$, let $\beta=2^{4-e}$; we shall compute
+
+\bugonpage B229, lines 11--12 (11/17/87)
+
+\tenpoint\noindent
+if $a=0$, or the same quantity minus $\alpha=2^{4+e}z^\prime$ if $a=255$.
+This calculation must be done exactly, in order to guarantee portability
+of \TeX\ between computers.
+
+\bugonpage B230, lines 2--5 (11/17/87)
+
+\ninepoint
+\noindent\hskip10pt{\bf begin} $\\{alpha}\gets16$;\par
+\noindent\hskip10pt{\bf while} $z\ge\oct{40000000}$ {\bf do}\par
+\noindent\hskip20pt{\bf begin} $z\gets z\ {\bf div}\ 2$; \
+ $\\{alpha}\gets\\{alpha}+\\{alpha}$; \ {\bf end};\par
+\noindent\hskip10pt$\\{beta}\gets256\ {\bf div}\ \\{alpha}$; \
+ $\\{alpha}\gets\\{alpha}\ast z$;\par
+
+\bugonpage B245, new entry for mini-index (8/7/87)
+
+\eightpoint\indent
+\\{cur\_s}: \\{integer}, \S616.
+
+\bugonpage B254, line 29 (8/7/87)
+
+\ninepoint\noindent
+\\{cur\_s}: \\{integer};\quad
+$\{\,$current depth of output box nesting, initially $-1\,\}$
+
+\bugonpage B254, line 31 (8/7/87)
+
+\ninepoint\noindent
+[Remove the statement `$\\{cur\_s}\gets-1$;' and put it on page B244 at the
+end of line 31.]
+
+\bugonpage B259, line 13 (11/9/87)
+
+\ninepoint\noindent\hskip20pt
+{\bf begin }$\\{rule\_wd}\gets\\{rule\_wd}+10$;\quad
+$\{\,$compensate for floating-point rounding$\,\}$\par\noindent\hskip20pt
+$\\{edge}\gets\\{cur\_h}+\\{rule\_wd}$; $\\{lx}\gets0$;
+$\langle\,$Let \\{cur\_h} be the position of the first box, and set
+
+\bugonpage B259, line 17 (11/9/87)
+
+\ninepoint\noindent\hskip20pt
+$\\{cur\_h}\gets\\{edge}-10$; {\bf goto} \\{next\_p};
+
+\bugonpage B263, line 21 (11/9/87)
+
+\ninepoint\noindent\hskip20pt
+{\bf begin }$\\{rule\_ht}\gets\\{rule\_ht}+10$;\quad
+$\{\,$compensate for floating-point rounding$\,\}$\par\noindent\hskip20pt
+$\\{edge}\gets\\{cur\_v}+\\{rule\_ht}$; $\\{lx}\gets0$;
+$\langle\,$Let \\{cur\_v} be the position of the first box, and set
+
+\bugonpage B263, line 25 (11/9/87)
+
+\ninepoint\noindent\hskip20pt
+$\\{cur\_v}\gets\\{edge}-10$; {\bf goto} \\{next\_p};
+
+\bugonpage B266, line 8 (8/7/87)
+
+\ninepoint\noindent\hskip10pt
+\\{dvi\_out}(\\{eop}); \\{incr}(\\{total\_pages}); $\\{cur\_s}\gets-1$;
+
+\bugonpage B266, new code between lines 31 and 32 (8/7/87)
+
+\ninepoint
+\noindent\hskip10pt{\bf while} $\\{cur\_s}>-1$ {\bf do}\par
+\noindent\hskip20pt{\bf begin if} $\\{cur\_s}>0$ {\bf then}
+ \\{dvi\_out}(\\{pop})\par
+\noindent\hskip20pt{\bf else begin} \\{dvi\_out}(\\{eop});
+ \\{incr}(\\{total\_pages})\par
+\noindent\hskip30pt{\bf end};\par
+\noindent\hskip20pt\\{decr}(\\{cur\_s});\par
+\noindent\hskip20pt{\bf end};\par
+
+\bugonpage B285, line 21 (4/28/88)
+
+\noindent\tenpoint
+is subsidiary to the \\{nucleus} field of some noad; the dot is replaced by
+`|_|' or `|^|' or `|/|' or `|\|' if $p$ is\cutpar
+
+\bugonpage B338, second-last line (8/19/87)
+
+\ninepoint\noindent\kern10pt
+$q\gets\\{link}(\\{head})$; $s\gets\\{head}$;
+
+\bugonpage B339, line 4 (8/19/87)
+
+\ninepoint\noindent\kern20pt
+$s\gets q$; $q\gets\\{link}(q)$;
+
+\bugonpage B339, new code to insert after line 10 (8/19/87)
+
+\ninepoint
+\noindent\kern10pt{\bf if} $o\ne0$ {\bf then}\par
+\noindent\kern20pt{\bf begin} $r\gets\\{link}(q)$; $\\{link}(q)\gets\\{null}$;
+ $q\gets\\{hpack}(q,\\{natural})$;\par
+\noindent\kern20pt$\\{shift\_amount}(q)\gets o$; $\\{link}(q)\gets r$;
+ $\\{link}(s)\gets q$;\par
+\noindent\kern20pt{\bf end};\par
+\noindent[These new lines also imply changes to the index that aren't
+ shown in this errata list.]
+
+\bugonpage B387, line 2 (5/24/88)
+
+\tenpoint\noindent
+is quite short. In the following code we set \\{hc}$[\\{hn}+2]$ to the
+impossible value 128, in order to\cutpar
+
+\bugonpage B387, line 8 (5/24/88)
+
+\ninepoint\noindent\kern10pt
+$\\{hc}[0]\gets127$; $\\{hc}[\\{hn}+1]\gets127$;
+ $\\{hc}[\\{hn}+2]\gets128$;\quad$\{\,$insert delimiters$\,\}$
+
+\bugonpage B390, lines 17--18 (5/24/88)
+
+\ninepoint\noindent\kern10pt
+$\langle\,$Enter as many hyphenation exceptions as are listed, until coming
+ to a right brace; then {\bf return\eightrm\kern.5em961}$\,\rangle$;
+
+\smallskip[The same change applies to lines 20--21, and
+to page~582.]
+
+\bugonpage B396, new line after line 34 (5/24/88)
+
+\ninepoint\noindent\kern10pt
+$\\{trie\_link}(\\{trie\_size})\gets0$;
+$\\{trie\_back}(0)\gets\\{trie\_size}$;\quad
+$\{\,$wrap around$\,\}$
+
+\bugonpage B396, bottom line (12/12/87)
+
+\ninepoint\noindent\hskip10pt
+$\\{trie\_link}(0)\gets0$; $\\{trie\_char}(0)\gets0$;
+ $\\{trie\_op}(0)\gets\\{min\_quarterword}$;
+
+\bugonpage B397, lines 15--17 (5/24/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin} $c\gets\\{trie\_c}[p]$;\par\noindent\kern10pt
+{\bf if} $c<\\{trie\_min}$ {\bf then} $\\{trie\_min}\gets c$;\par\noindent\kern10pt
+{\bf if} $\\{trie\_min}=0$ {\bf then} $z\gets\\{trie\_link}(\\{trie\_size})$\par
+\noindent\kern10pt
+{\bf else} $z\gets\\{trie\_link}(\\{trie\_min}-1)$;\quad
+$\{\,$get the first conceivably good hole$\,\}$
+
+\bugonpage B400, lines 3--4 (5/24/88)
+
+\ninepoint\noindent
+$\langle\,$Enter all of the patterns into a linked trie, until coming
+ to a right brace{\eightrm\kern.5em961}$\,\rangle\equiv$
+
+\smallskip[The same change applies to page B399, lines 29--30, and
+to page~582.]
+
+\bugonpage B402, line 10 (5/24/88)
+
+\ninepoint\noindent\kern10pt
+$r\gets\\{trie\_size}$;\quad
+$\{\,$finally, we will zero out the holes$\,\}$
+
+\bugonpage B406, line 9 from the bottom (1/23/89)
+
+\ninepoint\noindent\kern30pt
+$\\{shrink\_order}(r)\gets\\{normal}$; \ $\\{delete\_glue\_ref}(q)$; \
+$\\{glue\_ptr}(p)\gets r$; \ $q\gets r$;
+
+\bugonpage B417, line 10 (1/23/89)
+
+\ninepoint\noindent\kern10pt
+$q\gets\\{new\_skip\_param}(\\{top\_skip\_code})$; \quad
+$\{\,$now $\\{temp\_ptr}=\\{glue\_ptr}(q)\,\}$
+
+\bugonpage B418, line 14 (1/23/89)
+
+\ninepoint\noindent\kern30pt
+$\\{shrink\_order}(r)\gets\\{normal}$; \ $\\{delete\_glue\_ref}(q)$; \
+$\\{glue\_ptr}(p)\gets r$; \ $q\gets r$;
+
+\bugonpage B507, line 13 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{selector}+2$;
+
+\bugonpage B527, line 21 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then}
+
+\bugonpage B528, line 5 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then}
+
+\bugonpage B547, right column (9/20/87)
+
+\eightpoint
+\leftline{\\{co\_backup}:\quad $\underline{366}$.}
+
+\bugonpage B548, right column (9/20/87)
+
+\eightpoint
+\leftline{\\{cur\_order}:\quad 366, $\underline{447}$, 448, 454, 462.}
+
+\bugonpage B548, right column (8/7/87)
+
+\eightpoint
+\leftline{\\{cur\_s}:\quad 593, $\underline{616}$, 619, 629, 640, 642.}
+
+\bugonpage B551, both columns (12/23/87)
+
+\eightpoint[Remove `372' from \\{eqtb} and put it into \\{eq\_define}.]
+
+\bugonpage B552, left column (4/28/88)
+
+\eightpoint[Insert `358' into \\{expand}.]
+
+\bugonpage B554, left column (12/23/87)
+
+\eightpoint[Remove `372' from \\{frozen\_relax}.]
+
+\bugonpage B559, new entry (12/14/88)
+
+\eightpoint\noindent
+\\{log\_opened}, 92--93, $\underline{527}$, 528, 534--535, 1265, 1333--1334.
+
+\bugonpage B559, right column (8/13/87)
+
+\eightpoint[Delete the entry for \\{low\_mem\_max}.]
+
+\bugonpage B562, left column (4/28/88)
+
+\eightpoint[Remove `358' from \\{no\_expand}.]
+
+\bugonpage B565, left column (8/7/87)
+
+\eightpoint
+\leftline{\\{pop}:\quad 584--585, $\underline{586}$, 590, 601, 608, 642.}
+
+\bugonpage B567, left column (12/23/87)
+
+\eightpoint[Insert `372' into \\{relax}.]
+
+\bugonpage B568, left column (4/28/88)
+
+\eightpoint[Move `269' from \\{save\_index} to \\{save\_level}.]
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+
+\bugonpage C26, bottom line (7/18/87)
+
+\tenpoint\noindent
+What angle corresponds to the direction North-Northwest?
+
+\bugonpage C107, line 13 (10/7/87)
+
+{\bf pickup penrazor} xscaled \\{heavyline}
+ rotated (angle$(z_{32}-z_{31})+90$);
+
+\bugonpage C164, line 10 (4/27/88)
+
+\ninepoint\indent
+\quad $y_{\$c}=\\{top}\,y_{\$l}$; \ $y_{\$d}=y_{\$r}$; \
+ $x_{\$c}=x_{\$l}-\\{left\_jut}$; \ $x_{\$d}=x_{\$r}+\\{right\_jut}$;
+
+\bugonpage C175, line 23 (1/11/88)
+
+\ninepoint\noindent
+expand into a sequence of tokens. \
+(The language {\eightrm{SIMULA67}} demonstrated that it is\cutpar
+
+\bugonpage C241, line 11 (5/25/88)
+
+\ninepoint\indent
+{\bf numeric} $\\{ht}\0,\\{dp}\0$; \
+ $\\{ht}\0=\\{body\_height}\0$; \
+ $.5[\\{ht}\0,-\\{dp}\0]=\\{axis}\0$;
+
+\bugonpage C248, line 21 becomes two lines (1/24/89)
+
+\ninepoint\noindent
+which might not
+be numerically stable in the presence of rounding errors.)
+Another case, not really desirable, is $\\{left\_jut}=\\{right\_jut}=0$.
+
+\bugonpage C262, line 15 (12/23/88)
+
+\ninepoint\noindent
+|string base_name, base_version; base_name="plain"; base_version="1.7";|
+
+\bugonpage C271, line 12 (1/4/89)
+
+\ninepoint\noindent
+the user and \MF's primitive picture commands.
+First, some important program\cutpar
+
+\bugonpage C271, line 4 from the bottom (12/23/88)
+
+\ninepoint\noindent
+|def |^|cutdraw|| expr p = % caution: you may need autorounding=0|
+
+\bugonpage C272, lines 5 and 6 (12/23/88)
+
+\ninepoint\noindent
+| (cut_ scaled (1+max(pen_lft,pen_rt,pen_top,pen_bot))|\par\noindent
+| rotated theta shifted z)t_;|
+
+\bugonpage C273, lines 20 and 22 (9/26/88)
+
+\ninepoint\noindent
+| (z_+(0,pen_top))t_=round((z+(0,pen_top))t_); z_ enddef;|\par\noindent
+| (z_+(0,pen_bot))t_=round((z+(0,pen_bot))t_); z_ enddef;|
+
+\bugonpage C290, line 6 from the bottom (12/23/88)
+
+\ninepoint\noindent
+(2)~A throwaway variable,
+`\\{whatever}', nullifies an unwanted equation at the beginning\cutpar
+
+\bugonpage C331, just below the illustration (7/18/87)
+
+\ninepoint\noindent
+Such a pattern is, of course, rather unlikely to occur in a |gf| file,
+but |GFtoDVI| would\cutpar
+
+\bugonpage C337, line 11 (4/28/88)
+
+\ninepoint
+An online ``menu'' of the available test routines will be typed at your
+terminal\cutpar
+
+\bugonpage C346, entry for {\tt autorounding} (12/23/88)
+
+\eightpoint\indent\hskip20pt
+212, {\it262}, {\it264}, 271--272.
+
+\bugonpage C350, left column (7/6/88)
+
+\eightpoint\indent
+|Fatal| |base| |file| |error|, 226.
+
+\bugonpage C356, left column (1/11/88)
+
+\eightpoint
+SIMULA67 language, 175.
+
+\bugonpage C358, right column (2/15/88)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|yoffset|, 212, $\underline{220}$, 315, 324.
+ % Volume D
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage D2, line 27 (12/14/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]METAFONT,\]Version\]1.7\char'23}\quad
+$\{\,$printed when \MF\ starts$\,\}$
+
+\bugonpage D36, lines 3--5 (11/6/88)
+
+\tenpoint\noindent[Delete this paragraph; it is being moved to page D349.]
+
+\bugonpage D36, line 7 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{term\_and\_log}$
+
+\bugonpage D36, line 16 (12/14/88)
+
+\ninepoint\noindent\kern50pt
+{\bf if\/} \\{log\_opened} {\bf then} \\{error};
+
+\bugonpage D66, lines 34--35 (7/9/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin if\/} $\\{hi\_mem\_min}-\\{lo\_mem\_max}\ge1998$
+ {\bf then} $t\gets\\{lo\_mem\_max}+1000$\par\noindent\kern10pt
+{\bf else} $t\gets\\{lo\_mem\_max}+1+(\\{hi\_mem\_min}-\\{lo\_mem\_max})
+\,\mathbin{\bf div}\,2$;\quad\kern-4pt
+$\{\,\\{lo\_mem\_max}+2\le t<\\{hi\_mem\_min}\,\}$
+
+\bugonpage D347, new line of code after line 5 (12/14/88)
+
+\ninepoint\noindent
+\\{log\_opened}: \\{boolean};\quad$\{\,$has the transcript file been opened?$\,\}$
+
+\bugonpage D347, line 11 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+$\\{job\_name}\gets0$; \
+$\\{log\_opened}\gets\\{false}$;
+
+\bugonpage D348, line 4 from the bottom (12/14/88)
+
+\ninepoint\noindent\kern10pt
+$\\{log\_name}\gets\\{a\_make\_name\_string}(\\{log\_file})$; \
+$\\{selector}\gets\\{log\_only}$; \
+$\\{log\_opened}\gets\\{true}$;
+
+\bugonpage D349, lines 6 and 7 (12/14/88)
+
+\tenpoint\noindent
+print error messages or even to \\{show\_context}.
+The \\{prompt\_file\_name} routine can result in a \\{fatal\_error},
+but the \\{error}
+routine will not be invoked because \\{log\_opened} will be false.
+\par\noindent\hskip10pt
+The normal idea of \\{batch\_mode} is that nothing at all should be written
+on the terminal. However, in the unusual case that
+no log file could be opened, we make an exception and allow
+an explanatory message to be seen.
+
+\bugonpage D349, lines 11--15 reduce to a single line (12/14/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} $\\{selector}\gets\\{term\_only}$;
+
+\bugonpage D420, bottom line (5/25/88)
+
+\ninepoint\noindent\kern30pt
+{\bf if\/} \\{txx} {\bf mod} $\\{unity}=0$ {\bf then}
+
+\bugonpage D441, delete line 2 and change line 12 as follows (5/25/88)
+
+\ninepoint\noindent
+\\{done}: {\bf if} $\\{eq\_type}(x)\ne\\{tag\_token}$ {\bf then}
+ $\\{clear\_symbol}(x,\\{false})$;\par\noindent\kern10pt
+{\bf if} $\\{equiv}(x)=\\{null}$ {\bf then} $\\{new\_root}(x)$;
+\par\noindent\kern10pt
+$\\{scan\_declared\_variable}\gets h$;
+
+\bugonpage D444, line 8 from the bottom (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{selector}+2$;
+
+\bugonpage D510, line 14 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then}
+
+\bugonpage D511, line 11 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then}
+
+\bugonpage D530, new entry (12/14/88)
+
+\eightpoint\noindent
+\\{log\_opened}, 87--88, $\underline{782}$, 783, 788--789, 1023, 1205, 1208.
+
+\bugonpage D545, left column (10/31/87)
+
+\eightpoint
+\leftline{{\bf zscaled} primitive:\quad $\underline{893}$.}
+\leftline{Zabala Salelles, Ignacio Andres:\quad 812.}
+
+ % volume E
+\hsize=29pc
+\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}}
+
+\bugonpage E32, second-last line (9/20/87)
+
+\tenpoint\noindent
+after which comes `\\{math\_axis}\0; {\bf generate} |mathsy|' (which we
+won't bother to\cutpar
+
+\bugonpage E111, line 29 (10/16/88)
+
+\ninepoint\noindent
+$\\{lft}\,x_{11}={\rm hround}\,u$; \
+ $x_{1l}-x_{11}=x_{2l}-x_{12}=x_{22}-x_{2r}={\rm hround}\,1.6\\{cap\_jut}$;
+
+\bugonpage E285, bottom line (12/1/87)
+
+\rightline{\eightssi Due to Technical Developments\/\enspace\eightss(1968)}
+
+\bugonpage E333, lines 9--11 (1/9/89)
+
+\ninepoint\noindent
+$\\{lft}\,x_{1l}={\rm hround}(2.5u-.5\\{mfudged.stem})$; \
+ $x_{1l}=x_{1'l}=x_{2l}=x_{2'l}$;\par\noindent
+$\\{lft}\,x_{3l}={\rm hround}(.5w-.5\\{mfudged.stem})$; \
+ $x_5-x_3=x_3-x_1$;\par
+\line{{\bf if\/} not \\{monospace}:
+ $r:={\rm hround}(x_5+x_1)+r-w$; {\bf fi}\hfill
+ \% change width for better fit}
+
+\bugonpage E353, lines 38--39 (8/12/87)
+
+\ninepoint
+\leftline{\kern10pt{\bf else}: {\bf fill} \\{diag\_end}$(6r,5r,1,1,5l,6l)
+ \dashto.9[z_{5l},z_{6l}]$}
+\line{\kern30pt$.\,.\,\{z_5-z_6\}\,.1[z_{5r},z_{6r}]\dashto\rm cycle$;\hfil
+ \% middle stem}
+
+\bugonpage E387, line 13 (8/12/87)
+
+\ninepoint
+\line{\kern10pt{\bf pickup} \\{tiny}.\\{nib}; \ \\{bulb}$(3,4,5)$;\hfil\% bulb}
+
+\bugonpage E413, lines 37--38 (8/12/87)
+
+\ninepoint
+\leftline{\kern10pt{\bf else}: {\bf fill} \\{diag\_end}$(6r,5r,1,1,5l,6l)
+ \dashto.9[z_{5l},z_{6l}]$}
+\line{\kern30pt$.\,.\,\{z_5-z_6\}\,.1[z_{5r},z_{6r}]\dashto\rm cycle$;\hfil
+ \% middle stem}
+
+\bugonpage E459, line 24 (8/7/87)
+
+\ninepoint\noindent[Delete the `$=$' sign between `\\{lft}' and `$x_5$'.]
+
+\bugonpage E471, line 5 (12/11/88)
+
+\ninepoint\noindent
+$x_2=\\{good}.x\,.5w$; \ $\\{center\_on}(x_2)$;
+
+\bugonpage E471, insert two lines below the rule at bottom of page (12/11/88)
+
+\ninepoint
+\line{{\bf def\/}
+\\{center\_on}({\bf expr} $x) =\null$
+{\bf if\/} not \\{monospace}:\hfill \% change width for symmetric fit}
+\leftline{\kern10pt
+ $r:=r+2x-w$; \ $w:=2x$; \ {\bf fi} {\bf enddef};}
+
+\bugonpage E477, line 20 (12/11/87)
+
+\ninepoint\noindent
+$x_4=x_8=\\{good}.x\,.5w$; \ $\\{center\_on}(x_4)$; \
+$x_2=w-x_6=\\{good}.x(x_4+a)$;
+
+\bugonpage E483, third line of elementary division operator (12/11/88)
+
+\ninepoint\noindent
+$x_3-.5\\{dot\_size}={\rm hround}(.5w-.5\\{dot\_size})$; \
+$\\{center\_on}(x_3)$;
+
+\bugonpage E485, line 4 (8/7/87)
+
+\ninepoint\noindent[Delete the `$=$' sign between `\\{lft}' and `$x_5$'.]
+
+\bugonpage E487, line 17 (8/4/88)
+
+\ninepoint\line{%
+{\bf fill} \\{fullcircle} scaled$\,(\\{bold}+3.8\\{dw}+\\{eps})\,$%
+ shifted$\,(.5[z_4,z_8])$;\hfill\% dot}
+\smallskip\noindent[Also remove page 487 from the index entry for
+\\{dot\_size}, and add it to the entries for \\{bold} and \\{dw}.]
+
+\bugonpage E515, lines 5 and 12 (12/11/88)
+
+\ninepoint\noindent
+$.5[x_1,x_2]=x_3=\\{good}.x\,.5w$; \
+$\\{center\_on}(x_3)$; \ $\\{lft}\,x_1={\rm hround}(.5w-u*{\rm sqrt}48)$;
+
+\bugonpage E515, line 21 (1/23/89)
+
+\ninepoint\noindent
+{\bf labels}$(5,6)$; \ \\{zero\_width}; \ {\bf endchar\/};
+\smallskip\noindent[Also put labels `{\tt5}' and `{\tt6}' on the
+upper right figure, page E514.]
+
+\bugonpage E521, lines 4 and 14 (12/12/88)
+
+\ninepoint\noindent
+$x_1=x_2=\\{good}.x\,.5w$; \
+$\\{center\_on}(x_1)$; \ $\\{lft}\,x_3={\rm hround}\,u$; \ $x_4=w-x_3$;
+
+\bugonpage E537, line 6 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_2=x_3=x_4$; \
+$x_1-.5\\{stem}={\rm hround}(.5w-.5\\{stem})$; \
+$\\{center\_on}(x_1)$;
+
+\bugonpage E537, line 19 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_2=x_3$; \
+$x_1-.5\\{stem}={\rm hround}(.5w-.5\\{stem})$; \
+$\\{center\_on}(x_1)$;
+
+\bugonpage E539, line 4 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_4=x_{30}=x_{33}=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$;
+
+\bugonpage E539, line 21 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_4=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$;
+
+\bugonpage E541, line 4 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_5=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$;
+
+\bugonpage E541, line 17 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_{10}=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$;
+
+\bugonpage E550, new line after line 23 (8/15/87)
+
+\ninepoint\noindent\kern10pt
+{\bf forsuffixes} $\hbox{\$}=\\{notch\_cut},\\{cap\_notch\_cut}$:
+ {\bf if\/} $\hbox{\$}<3$: $\hbox{\$}:=3$; {\bf fi endfor}
+\smallskip\noindent
+[To make room for this, combine lines 38 and 39 into a single line.]
+
+\bugonpage E550, line 29 (7/9/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}%
+define\_whole\_vertical\_blacker\_pixels}$(\\{vair},\\{bar},\\{slab},
+ \\{cap\_bar},\\{cap\_band})$;
+
+\bugonpage E572, new entry at bottom (12/11/88)
+
+\eightpoint\noindent
+\\{center\_on}, $\underline{471}$, 477, 483, 515, 521, 537--541.
+ \bye
+ Now here are some that I will make soon!
+
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.nine b/Master/texmf-dist/source/generic/knuth/errata/errata.nine
new file mode 100644
index 00000000000..3715cd813fc
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.nine
@@ -0,0 +1,226 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting A, 1996}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\tenpoint
+\noindent This is a list of all corrections made to {\sl Computers \&
+Typesetting}, Volume~A (also known as {\sl The \TeX book}),
+between 1992 and the publication of the final printed
+version of that book in September 1996.
+\looseness=-1
+
+ % volume A
+
+\bugonpage A31, line 8 (3/6/95)
+
+\tenpoint\noindent
+\TeX\ begins its error messages with `|!|', and it shows what it was
+reading at the\cutpar
+
+\bugonpage A46, line 8 (1/22/95)
+
+\ninepoint\noindent
+out for
+the occasional times when the adjacent characters |aa|, |ae|, and |o/|
+should not be\cutpar
+
+\bugonpage A282, lines 11 and 12 (4/18/96)
+
+\ninepoint\noindent
+unadorned \<box> command, except that the new box
+being appended to the vertical list is also shifted left or right by the
+specified amount.
+
+\bugonpage A285, lines 15--17 from the bottom (4/18/96)
+
+\ninepoint
+\textindent{$\bull$}|\raise|\<dimen>\<box>, |\lower|\<dimen>\<box>.\enskip
+This acts just like an unadorned \<box> command, except that the new box
+being appended to the horizontal list is also shifted up or down by the
+specified amount.
+
+\bugonpage A290, lines 4--6 from the bottom (4/18/96)
+
+\ninepoint
+\textindent{$\bull$}|\raise|\<dimen>\<box>, |\lower|\<dimen>\<box>.\enskip
+This acts just like an unadorned \<box> command, except that the new box
+being put into the nucleus is also shifted up or down by the specified amount.
+
+\bugonpage A331, bottom two lines (6/25/93)
+
+\ninepoint\noindent
+if you know that the
+enclosing box is sufficiently small; and |\leaders\vrule\vfill| works fine in
+vertical mode.
+
+\bugonpage A354, lines 19--22 (3/5/95)
+
+\ninepoint\noindent
+|\def\sett@b{\ifx\next\+\def\nxt{\afterassignment\s@tt@b\let\nxt}%|\par
+\noindent
+| \else\let\nxt=\s@tcols\fi|\par\noindent
+| \let\next=\relax \nxt} % turn off \outerness|\par\noindent
+|\def\s@tt@b{\let\nxt=\relax \us@false\m@ketabbox}|
+
+\bugonpage A356, lines 13--20 from the bottom (3/5/95)
+
+\ninepoint
+{\parindent=0pt
+|\def\oalign#1{\leavevmode\vtop{\baselineskip0pt \lineskip.25ex|\par
+| \ialign{##\crcr#1\crcr}}} \def\o@lign{\lineskiplimit=0pt \oalign}|\par
+|\def\ooalign{\lineskiplimit=-\maxdimen \oalign} % chars over each other|\par
+|\def\sh@ft#1{\dimen0=.00#1ex \multiply\dimen0 by\fontdimen1\font|\par
+| \kern-.0156\dimen0} % compensate for slant in lowered accents|\par
+|\def|^|\d||#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}}}|\par
+|\def|^|\b||#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}%|\par
+| \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}}|\par
+}
+
+\bugonpage A357, lines 7--12 (8/1/95)
+
+\ninepoint\noindent
+|\def|^|\rightarrowfill||{$\m@th \smash- \mkern-7mu|\par\noindent
+| \cleaders\hbox{$\mkern-2mu \smash- \mkern-2mu$}\hfill|\par\noindent
+| \mkern-7mu \mathord\rightarrow$}|\par\noindent
+|\def|^|\leftarrowfill|%
+ |{$\m@th \mathord\leftarrow \mkern-7mu|\par\noindent
+| \cleaders\hbox{$\mkern-2mu \smash- \mkern-2mu$}\hfill|\par\noindent
+| \mkern-7mu \smash-$}|
+
+\bugonpage A357, lines 16--20 (6/25/93)
+
+\ninepoint
+{\parindent=0pt
+| \setbox0=\hbox{$\braceld$}%|\par
+| \bracelu\leaders\vrule height\ht0 depth0pt\hfill\bracerd|\par
+| \braceld\leaders\vrule height\ht0 depth0pt\hfill\braceru$}|\par
+|\def|^|\downbracefill||{$\m@th|\par
+| \setbox0=\hbox{$\braceld$}%|\par
+| \braceld\leaders\vrule height\ht0 depth0pt\hfill\braceru|\par
+| \bracelu\leaders\vrule height\ht0 depth0pt\hfill\bracerd$}|\par
+\smallskip[Also delete lines 21 and 22, as the usage is no longer restricted.]
+}
+
+\bugonpage A359, line 25 (3/5/95)
+
+\ninepoint\noindent
+|\def|^|\skew||#1#2#3{{\muskip0=#1mu \mkern.5\muskip0|\par\noindent
+| #2{\mkern-.5\muskip0{#3}\mkern.5\muskip0}\mkern-.5\muskip0}{}}|
+
+\bugonpage A360, line 5 from the bottom (3/5/95)
+
+\ninepoint\noindent
+|\def\@vereq#1#2{\lower.5pt\vbox{\lineskiplimit\maxdimen \lineskip-.5pt|
+
+\bugonpage A361, lines 19 and 20 (3/5/95)
+
+\ninepoint\noindent
+|\def|^|\bmod||{\nonscript\mskip-\medmuskip \mkern5mu|\par\noindent
+| |^|\mathbin||{\rm mod} \penalty900 \mkern5mu \nonscript\mskip-\medmuskip}|
+
+\bugonpage A362, lines 14--18 (3/5/95)
+
+\ninepoint\noindent
+| |^|\everycr||{\noalign{\ifdt@p \global\dt@pfalse|%
+ | \ifdim\prevdepth>-1000pt|\par\noindent
+| \vskip-\lineskiplimit \vskip\normallineskiplimit \fi|\par\noindent
+| \else \penalty|^|\interdisplaylinepenalty|| \fi}}}|\par\noindent
+|\def\@lign{\tabskip=0pt\everycr={}} % restore inside \displ@y|\par\noindent
+|\def|^|\displaylines||#1{\displ@y \tabskip=0pt|
+
+\bugonpage A363, lines 8--9 from the bottom (12/8/89)
+
+{\ninepoint\parindent=0pt
+| \if@mid \dimen@=\ht0 \advance\dimen@ by\dp\z@ |%
+ |\advance\dimen@ by12\p@|\parbreak%
+| \advance\dimen@ by\pagetotal \advance\dimen@ by-\pageshrink|
+\par}
+
+\bugonpage A364, line 5 from the bottom (4/11/96)
+
+\ninepoint\noindent
+|\def\fmtname{plain}|\par\noindent
+|\def\fmtversion{3.141592} % identifies the current format|
+
+\bugonpage A374, line 3 (3/7/95)
+
+\ninepoint\indent
+|\begingroup\aftergroup\def\aftergroup\asts\aftergroup{|
+
+\bugonpage A410, line 23 (4/18/96)
+
+\ninepoint\noindent
+| Tema con variazione \(su un tema differente)|
+\smallskip\eightpoint\noindent
+(This implies a corresponding correction to page 411.)
+
+\bugonpage A451, line $16$ (8/8/93)
+
+\ninepoint\noindent
+But when plain \TeX\ is tried on the name of a famous ^{Welsh} village,
+
+\bugonpage A462, right column (3/5/95)
+
+\def\cong{\mathrel{\mathpalette\OvOreq\sim}} % congruence sign, index version
+\def\OvOreq#1#2{\lower.5pt\vbox{\baselineskip0pt\lineskip-.0pt
+ \ialign{$#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
+\eightpoint
+|\cong| ( $\cong$ ), 151, $\underline{360}$, 436.
+
+\bugonpage A463, right column (6/25/93)
+
+\eightpoint
+direct sum, {\sl see\/} |\oplus|.
+
+\bugonpage A464, left column (6/25/93)
+
+\eightpoint
+|\downbracefill| (\hbox to 4em{\downbracefill}), 225--226, $\underline{357}$.
+
+\bugonpage A483, lines 15--21 (4/29/97)
+
+\tenpoint
+\begintt
+email: {\tt TUG@tug.org}
+internet: {\tt http://www.tug.org/}
+}
+\endtt
+Don't delay, subscribe today! That address again is
+
+\smallskip
+{\obeylines
+\TeX\ Users Group
+email: {\tt TUG\char`\@ tug.org}
+internet: {\tt http://www.tug.org/}
+}
+
+\bye
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.one b/Master/texmf-dist/source/generic/knuth/errata/errata.one
new file mode 100644
index 00000000000..471971958c3
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.one
@@ -0,0 +1,751 @@
+% Bugs (sigh) in The TeXbook
+
+\input manmac
+\proofmodefalse
+\raggedbottom
+\output{\onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\rhead{Bugs in {\sl The \TeX book}, first printing}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule\line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule\nobreak\medskip}
+
+\noindent This is a list of all corrections made to {\sl The \TeX book\/}
+between the first and second printings. If your copy says `{\sl\kern-1pt Second
+printing (October 1984)\/}' on the copyright page, you've already got
+all of these things corrected. Otherwise, you're a lucky owner of the
+rare first edition; read on.
+
+\bugonpage 29, lines 31--32 (8/25/84)
+
+The underfull box that \TeX\ produces in the 1.5-inch case is really bad;
+with such narrow limits, an occasional wide space is unavoidable. But try
+
+\bugonpage 54, lines 5--6 (4/20/84)
+
+{\parfillskip=0pt
+\ddanger Appendix B shows that plain \TeX\ handles most of the accents
+by using \TeX's ^|\accent| primitive. For example, |\'#1| is equivalent
+to |{\accent19 #1}|, where\par}
+
+\bugonpage 63, seven lines below the first illustration (2/27/84)
+
+\line{points, a width of 5.5555 points, and a depth of zero;
+the letter `g' has a height}
+
+\bugonpage 72, line 35 (2/28/84)
+
+\ninepoint\noindent
+from |0pt|, but |0.00001filll| is infinitely greater than |16383.99999fill|.
+
+\bugonpage 79, line 12 (2/28/84)
+
+\ninepoint\indent
+|\hbox(6.25+1.94444)x312.0, glue set 0.5783, shifted 36.0 []|
+
+\bugonpage 98, line 24 (4/13/84)
+
+\ninepoint
+\line{and |\finalhyphendemerits=5000|. Demerits are in units of
+ ``badness squared,'' so the}
+
+\bugonpage 101, lines 29--30 (3/13/84)
+
+{\parfillskip=0pt
+\danger It's possible to control the length of lines in a much more general
+way, if simple changes to |\leftskip| and |\rightskip| aren't
+flexible enough for your\par}
+
+\bugonpage 113, bottom two lines (3/13/84)
+
+{\parfillskip=0pt
+\ddanger Notice that the first ``|%| line'' of our example says |t=10.0|;
+this is a consequence of another parameter, called ^|\topskip|. Glue
+disappears at a page break, but\par}
+
+\bugonpage 124, eighth-last line (8/25/84)
+
+\ninepoint
+{\parfillskip=0pt\noindent
+discarded, |\box100| will
+be void after the |\vsplit|. And if\/ |\box100| was void before the\par}
+
+\bugonpage 131, display in exercise 16.8 (3/16/84)
+
+\indent
+|If$ x = y$, then $x$ is equal to $y.$|
+
+\bugonpage 170, table in middle of the page (2/12/84)
+
+\ninepoint
+$$\baselineskip0pt\lineskip0pt
+\halign to\hsize
+ {\strut\hbox to\parindent{\it#\hfil}& % for the legend "Left atom"
+ #\hfil\quad& % for the row labels
+ #\hfil\tabskip 0pt plus 10pt& % for the rule at the left
+ \hbox to 25pt{\tt\hss#\hss}& % for column 1
+ \hbox to 25pt{\tt\hss#\hss}& % for column 2
+ \hbox to 25pt{\tt\hss#\hss}& % for column 3
+ \hbox to 25pt{\tt\hss#\hss}& % for column 4
+ \hbox to 25pt{\tt\hss#\hss}& % for column 5
+ \hbox to 25pt{\tt\hss#\hss}& % for column 6
+ \hbox to 25pt{\tt\hss#\hss}& % for column 7
+ \hbox to 25pt{\tt\hss#\hss}& % for column 8
+ #\hfil\tabskip0pt\cr % for the rule at the right
+\noalign{\vskip-6pt} % it just happens that there's extra white space
+&&&&\multispan7\hss\it Right atom\hss\cr
+\noalign{\vskip3pt}
+&&&\rm Ord&\rm Op&\rm Bin&\rm Rel&\rm Open&\rm Close&\rm Punct&\rm Inner\cr
+\noalign{\vskip2pt}
+\omit&&\multispan{10}\leaders\hrule\hfil\cr
+\omit\vbox to 2pt{}&&\vrule&&&&&&&&&\vrule\cr
+&Ord&\vrule&0&1&(2)&(3)&0&0&0&(1)&\vrule\cr
+&Op&\vrule&1&1&*&(3)&0&0&0&(1)&\vrule\cr
+&Bin&\vrule&(2)&(2)&*&*&(2)&*&*&(2)&\vrule\cr
+Left&Rel&\vrule&(3)&(3)&*&0&(3)&0&0&(3)&\vrule\cr
+atom&Open&\vrule&0&0&*&0&0&0&0&0&\vrule\cr
+&Close&\vrule&0&1&(2)&(3)&0&0&0&(1)&\vrule\cr
+&Punct&\vrule&(1)&(1)&*&(1)&(1)&(1)&(1)&(1)&\vrule\cr
+&Inner&\vrule&(1)&1&(2)&(3)&(1)&0&(1)&(1)&\vrule\cr
+\omit\vbox to 2pt{}&&\vrule&&&&&&&&&\vrule\cr
+\omit&&\multispan{10}\leaders\hrule\hfil\cr}$$
+
+\bugonpage 173, line 11 (1/2/84)
+
+\indent|Clearly $a_i<b_i$ for~$i=1, 2, \ldots, n$.|
+
+\bugonpage 176, bottom two lines (7/20/84)
+
+\def\chapno{ 18} \exno=23 % for exercise 18.24!
+\dangerexercise Typeset the display \ \lower12pt\null
+$\tenpoint\smash{\displaystyle
+\left\lgroup\matrix{a&b&c\cr d&e&f\cr}\right\rgroup
+ \left\lgroup\matrix{u&x\cr v&y\cr w&z\cr}\right\rgroup
+}$, \
+using ^|\lgroup| and ^|\rgroup|.
+
+\bugonpage 189, line 18 (2/13/84)
+
+\ninepoint\noindent
+{\parfillskip=0pt
+when there is an overlap.] \ If $e=0$ and if there is an |\leqno|,
+the equation number is\par}
+
+\bugonpage 204, line 31 (2/13/84)
+
+\ninepoint\noindent
+of\/ |\a| is delimited by a left brace.
+
+\bugonpage 212, line 23 (7/8/84)
+
+\ninepoint\noindent
+it equals~2.) \
+Similarly, ^|\tracingmacros||=2| will trace |\output|, |\everypar|, etc.
+
+\bugonpage 216, first five lines (8/25/84)
+
+\ddanger Expanded definitions that are made with |\edef| or |\xdef| continue
+to expand tokens until only unexpandable tokens remain, except that
+token lists produced by `^|\the|' are not expanded further. Furthermore
+a token following `^|\noexpand|' will not be expanded, since its ability
+to expand has been nullified. These two operations can be used to control
+^^{expansion, avoiding} what gets expanded and what doesn't.
+
+\bugonpage 219, simplification of line 18 (2/15/84)
+
+\ninepoint\indent
+| \advance\count0 by\count2 \hexdigit}}|
+
+\bugonpage 223, lines 3--4 (3/13/84)
+
+{\parfillskip=0pt
+\ddanger Chapters 24 to 26 present summaries of all \TeX's operations
+in all modes, and when those summaries mention a `\<box>' they mean one
+of the seven\par}
+
+\bugonpage 242, line 29 (1/2/84)
+
+\ninepoint\noindent
+{\parfillskip=0pt
+a relation, the solution is to insert `|{}|' ^^{lbrace rbrace}
+at the beginning of the right-hand formula; \TeX
+\par}
+
+\bugonpage 245, line 24 (2/15/84)
+
+\ninepoint\noindent
+of a box that spans columns $i$ through~$j$,
+hence the glue in such a box might shrink.
+
+\bugonpage 248, the fourth dangerous bend (2/15/84)
+
+{\parfillskip=0pt
+\ddanger You have to be careful with the use of |&| and ^|\span| and ^|\cr|,
+because these tokens are intercepted by \TeX's scanner even when it is
+not expanding macros.\par}
+
+\bugonpage 249, lines 20--26 (2/15/84)
+
+\ninepoint\noindent
+line (see Chapter~9).
+If you don't want a~|\cr| at the end of a certain line,
+just type `|%|' and the corresponding |\cr|
+will be ``commented out.'' ^^{percent} \ (This special mode doesn't
+work with ^|\+| lines, since |\+| is a macro whose argument is delimited
+by the token `|\cr|', not simply by a token that has the same meaning
+as~|\cr|. ^^{delimited arguments} But you can redefine |\+| to overcome
+this hurdle, if you want to. For example, define a macro |\alternateplus|
+that is just like |\+| except that its argument is delimited by the active
+character |^^M|; then include the command `|\let\+=\alternateplus|' as
+part of\/ |\obeylines|.)
+
+\bugonpage 253, lines 28--32 (4/25/84)
+
+\ninepoint\noindent
+vertical list at what it thinks is the best place, and at such times
+it enters internal vertical mode and begins to read the commands in the
+current |\output| routine. When the output routine begins, ^|\box255|
+contains the page that \TeX\ has completed; the output routine is supposed to
+do something with this vbox. When the output routine ends, the list of
+items that it has constructed in internal vertical mode is placed just%
+{\parfillskip=0pt\par}
+
+\bugonpage 254, lines 1--13 (3/13/84)
+
+\ddanger \TeX's primitive command |\shipout|\<box> is what actually
+causes output. It sends the contents of the box to the |dvi| file,
+which is \TeX's main output file; after \TeX\ has finished,
+the ^|dvi| file will contain a compact device-independent encoding of
+instructions that specify exactly what should be printed. When a
+box is shipped out, \TeX\ displays the values of\/ |\count0| through
+|\count9| on your terminal, ^^|\count0| as explained in Chapter~15; these
+ten counters are also recorded in the |dvi| file, where they can be used
+to identify the page. All of the ^|\openout|, ^|\closeout|, and ^|\write|
+commands that appear inside of the \<box> are performed in their natural
+order as that box is being shipped out. Since a |\write| command
+expands macros, as explained in Chapter~21, \TeX's scanning mechanism
+might detect syntax errors while a |\shipout| is in progress. If
+^|\tracingoutput| is nonzero at the time of a |\shipout|, the contents
+of the \<box> being shipped are written into your log file in symbolic
+form. You can say |\shipout| anywhere, not only in an output routine.
+
+\bugonpage 255, line 33 (4/25/84)
+
+\ninepoint\indent
+|\nointerlineskip|
+
+
+\bugonpage 256, starting with line $-17$ (11/1/83)
+
+\ninepoint
+\textindent{6)} Finally, the ^|\dosupereject| macro is designed to clear
+out any insertions that have been held over, whether they are illustrations
+or footnotes or both: ^^|\insertpenalties| ^^|\supereject|
+\begintt
+\ifnum\insertpenalties>0
+ \line{} \kern-\topskip \nobreak
+ \vfill\supereject\fi
+\endtt
+The mysterious negative ^|\kern| here cancels out the natural space of the
+^|\topskip| glue that goes above the empty |\line|; that empty line box
+prevents the ^|\vfill| from disappearing into a page break. The vertical
+list that results from |\dosupereject| is placed on \TeX's list of things
+to put out next, just after the straggling insertions have been
+reconsidered as explained in Chapter~15. Hence another super-eject will
+occur, and the process will continue until no insertions remain.
+
+\bugonpage 262, line 14 (2/12/84)
+
+\ninepoint\indent
+|\def\endindex{\mark{}\break\endgroup}|
+
+\bugonpage 262, lines 34 and 35 (2/12/84)
+
+\ninepoint\noindent
+if\/ |\next| is `|\endindex|',
+the next commands executed will be `|\vfill|\allowbreak
+|\mark{}|\allowbreak|\break|\allowbreak|\endgroup|';
+otherwise the line will be treated as a main entry.
+
+\bugonpage 269, line 23 becomes two lines (8/25/84)
+
+\ninepoint\noindent
+tokens like |+|$_{12}$;
+(3)~keywords like \[pt]; (4)~control sequence names like |\dimen|;
+or (5)~the special symbols |{|, |}|, |$|.
+
+\bugonpage 274, line 24 (2/15/84)
+
+\ninepoint\indent
+|\lineskip|\quad(interline glue if\/ |\baselineskip| isn't feasible)
+
+\bugonpage 289, slight clarification on lines 39--41 (3/10/84)
+
+\ninepoint
+A \<math character> defines a 15-bit number either by specifying it
+directly with ^|\mathchar| or in a previous ^|\mathchardef|, or by
+specifying a 27-bit |\delimiter| value; in the latter case, the least
+significant 12~bits are discarded.
+
+
+\bugonpage 307, a slightly more explicit answer (11/3/83)
+
+\ninepoint\noindent
+\hbox to\parindent{\bf\hss6.3.\enspace}%
+It represents the heavy bar that shows up in
+your output. \ (This bar wouldn't be present if\/ ^|\overfullrule| had been
+set to |0pt|, nor is it present in an underfull box.)
+
+\bugonpage 313, first four lines (3/13/84)
+
+{\ninepoint\parfillskip=0pt
+\ansno12.17:
+ You get `A' at the extreme left and `puzzle.\null' at the extreme right,
+because the space between words has the only stretchability that is finite;
+the infinite stretchability cancels out. \ (In this case, \TeX's rule
+about ^{infinite glue} differs from what you would get in the limit if the
+value of $1\,{\rm fil}$ were finite but getting larger and larger.
+The true\par}
+
+\bugonpage 315, first three lines (3/13/84)
+
+\ninepoint
+\ansno14.14:
+ Just say |\parfillskip|\stretch|=|\stretch|\parindent|. Of course,
+\TeX\ will not be able to find appropriate line breaks unless each
+paragraph is sufficiently long or sufficiently lucky; but with an
+appropriate text, your output will be immaculately
+symmetrical.{\parfillskip=\parindent\par}
+
+\bugonpage 324, line 16 (2/15/84)
+
+\ninepoint\noindent
+\hbox to\parindent{\bf\hss18.41.\enspace}%
+|$$\{\underbrace{\overbrace{\mathstrut a,\ldots,a}|
+
+\bugonpage 324, first line of answer 18.44 (4/11/84)
+
+\ninepoint
+\ansno18.44:
+ |$$\mathop{{\sum}'}_{x\in A}f(x)\mathrel{\mathop=^{\rm def}}|
+
+\bugonpage 333, beginning of the final paragraph (12/19/83)
+
+\ninepoint
+{\sl Note:\/} The stated preamble solves the problem and demonstrates
+that \TeX's line-breaking capability can be used within tables. But this
+particular table is not really a good example of the use of\/ |\halign|,
+because \TeX\ could typeset it directly, using ^|\everypar| in an
+appropriate manner to set up the hanging indentation, and using |\par|
+instead of\/ |\cr|. For example, one could say
+
+\bugonpage 341, the bottom line was left out! (2/9/84)
+
+\line{Footline\quad\dotfill\quad Page 1009}
+
+\bugonpage 345, top three lines (1/26/84)
+
+\ninepoint{\noindent\parfillskip=0pt
+A mathcode is relevant only when the corresponding category code is
+11 or~12; therefore many of these codes will rarely be looked at. For
+example, the math code for |^^M| specifies the character |\oplus|,
+but it's hard to imagine a user who would want |^^M|\par}
+
+\bugonpage 345, line 31 (2/29/84)
+
+\ninepoint\noindent
+|\delcode`\<="26830A \delcode`\\="26E30F \delcode`\>="26930B|
+
+\bugonpage 347, lines 1 and 2 (3/16/84)
+
+\ninepoint\noindent
+|\count18=3 % this counter allocates math families 4, 5, 6, ...|\hfil\break
+|\count19=255 % this counter allocates insertions 254, 253, 252, ...|
+
+\bugonpage 350, line 9 from the bottom (3/16/84)
+
+\ninepoint\noindent
+font, whose information does not have to be loaded again.
+
+\bugonpage 354, line 5 (6/7/84)
+
+\ninepoint\noindent
+|\def\ialign{\everycr={}\tabskip=0pt \halign} % initialized \halign|
+
+\bugonpage 355, lines 19--21 (7/3/84)
+
+\ninepoint\noindent
+subdivision in a document; to use it, you say
+`|\beginsection|\<section title>' followed by a blank line (or~|\par|).
+The macro first emits glue and penalties, designed to start a new page
+if the present page is nearly full; then it makes a ^|\bigskip| and
+puts the section{\parfillskip=0pt\par}
+
+\bugonpage 355, lines 27--29 (7/3/84)
+
+\ninepoint\noindent
+|\outer\def\beginsection#1\par{\vskip0pt plus.3\vsize\penalty-250|
+\par\noindent
+| \vskip0pt plus-.3\vsize\bigskip\vskip\parskip|
+\par\noindent
+| \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent}|
+
+\bugonpage 355, line 37 (4/24/84)
+
+\ninepoint\noindent
+|\outer\def\proclaim #1. #2\par{\medbreak|
+
+\bugonpage 356, seven lines from the bottom (4/11/84)
+
+\ninepoint\noindent
+|\def|^|\TeX||{T\kern-.1667em \lower.5ex\hbox{E}\kern-.125em X}|
+
+\bugonpage 359, starting with line 2 (11/16/83)
+
+\ninepoint
+\beginlines
+|\mathchardef\ldotp="602E\mathchardef\cdotp="6201\mathchardef\colon="603A|
+|\def\ldots{\mathinner{\ldotp\ldotp\ldotp}}|
+|\def\cdots{\mathinner{\cdotp\cdotp\cdotp}}|
+|\def\vdots{\vbox{\baselineskip=4pt \lineskiplimit=0pt|
+| \kern6pt \hbox{.}\hbox{.}\hbox{.}}}|
+|\def\ddots{\mathinner{\mskip1mu\raise7pt\vbox{\kern7pt\hbox{.}}\mskip2mu|
+| \raise4pt\hbox{.}\mskip2mu\raise1pt\hbox{.}\mskip1mu}}|
+\endlines
+
+\bugonpage 359, starting with line 19 (11/3/83)
+
+{\ninepoint\parindent=0pt
+|\def|^|\overbrace|%
+ |#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3pt}|\parbreak%
+| \downbracefill\crcr\noalign{\kern3pt\nointerlineskip}|\parbreak%
+| $\hfil\displaystyle{#1}\hfil$\crcr}}}|^|\limits||}|
+
+|\def|^|\underbrace||#1{\mathop{\vtop{\ialign{##\crcr|\parbreak%
+| $\hfil\displaystyle{#1}\hfil$\crcr|%
+ |\noalign{\kern3pt\nointerlineskip}|\parbreak%
+| \upbracefill\crcr\noalign{\kern3pt}}}}\limits}|
+}
+
+\bugonpage 359, seventh line from the bottom (2/29/84)
+
+\ninepoint\noindent
+|\def\backslash{\delimiter"026E30F } \def\bracevert{\delimiter"000033E }|
+
+\bugonpage 361, line 3 (8/17/84)
+
+\ninepoint\noindent
+
+|\def\buildrel#1\over#2{\mathrel{\mathop{\null#2}\limits^{#1}}}|
+
+\bugonpage 363, line 10 (4/26/84)
+
+\ninepoint\noindent
+| \ifhmode\edef\@sf{\spacefactor=\the\spacefactor}\/\fi|
+
+\bugonpage 364, starting with line 10 (11/1/83)
+
+{\ninepoint\parindent=0pt
+|\def\dosupereject{\ifnum\insertpenalties>0 % something is being held over|%
+\parbreak
+| \line{}\kern-\topskip\nobreak\vfill\supereject\fi}|
+}
+
+\bugonpage 364, line 28 (7/8/84)
+
+\ninepoint\noindent
+| \tracingmacros=2 \tracingparagraphs=1 \tracingrestores=1 |
+
+\bugonpage 370, line 7 (3/16/84)
+
+\ninepoint\noindent
+information about the \TeX\ Users Group.)
+
+\bugonpage 374, line 23 (7/8/84)
+
+\ninepoint
+\line{log file when |\tracingmacros=2| and
+ |\tracingcommands=2|. One of the important ways}
+
+\bugonpage 379, line 1 (1/12/84)
+
+\ninepoint\noindent
+A particular item can be selected by its position number from the left:
+
+\bugonpage 381, line 6 (2/12/84)
+
+\ninepoint\indent
+|\newcount\lineno % the number of file lines listed|
+
+\bugonpage 381, lines 24 and 25 (12/15/83)
+
+\ninepoint
+{\parfillskip=0pt
+Instead of listing a file verbatim, you might want to define a |\verbatim|
+macro such that `|\verbatim{$this$|{\tt\ is }|{\it!}}|' yields
+`|$this$|{\tt\ is }|{\it!}|'. It's somewhat\par}
+
+\bugonpage 385, lines 22 and 23 (1/12/84)
+
+\ninepoint\noindent
+macro, a parameter, or a token list
+variable; (b)~when \TeX\ must determine whether the token
+|&|~or ^|\span| ^^{ampersand}
+or ^|\cr| or~^|\crcr| is the end of an entry within an ^{alignment}.
+
+\bugonpage 387, two paragraphs in right column (1/18/84)
+
+\setbox0=\vbox{
+\eightpoint
+\tolerance=9999
+\hbadness=2300
+\finalhyphendemerits=3000000
+\doublehyphendemerits=1000000
+\parskip=1pt
+\parindent=1.5em
+\frenchspacing
+\hsize=166.8125pt
+\def\\#1{\raise.5pt\hbox{$\scriptscriptstyle
+ \ifx#1`\langle\!\langle\else\rangle\!\rangle\fi$}% Spanish quote marks
+ \ifx#1`\nobreak\hskip0pt \fi} % allow hyphenation
+\item{A.} Exactamente. Pero los profesores son tan conservadores
+que temer\'\i an espantar al tipo de estudiante \\`apisonadora\\'
+que hace lo que le proponen para casa, obe\-dien\-te\-mente y de forma
+mec\'anica. Adem\'as, no creo que les gustase el trabajo adicional
+de calificar respuestas a preguntas abiertas.
+
+\item{}La forma tradicional es dejar la parte creativa para los cursos
+altos. Durante diecisiete a\~nos o m\'as se ense\~na al es\-tu\-diante a
+aprobar, luego de golpe, cerca de la graduaci\'on, se le pide que haga
+algo original.
+
+}\rightline{\box0}
+
+\bugonpage 395, lines 21 and 22 (1/12/84)
+
+\ninepoint\noindent
+{\parfillskip=0pt
+Notice that the macros need to do their own checking for ligatures, and
+they also take appropriate actions when a paragraph begins with an opening
+quote. Since |\kern|\par}
+
+\bugonpage 399, line 1 (1/10/84)
+
+\ninepoint
+{\parfillskip=0pt
+Inside the output routine, |\box\footins| will now be a vbox of hboxes, and
+\par}
+
+\bugonpage 399, line 9 (2/28/84)
+
+\ninepoint\indent
+|.\hbox(7.6359+0.0)x269.62617 []|
+
+\bugonpage 407, line 4 (6/10/84)
+
+\ninepoint\noindent
+|\beginlinemode| and |\beginparmode| are defined to initiate these
+modes; and another%
+{\parfillskip=0pt\par}
+
+\bugonpage 408, line 15 (12/14/83)
+
+\noindent
+| P. O. Box 1009, Haga Alto, CA 94321 USA}|
+
+\smallskip\noindent\ninepoint
+[Also change the ZIP code in the return address on the envelope
+illustrated at the bottom of page 405.]
+
+\bugonpage 409, line 5 (2/18/84)
+
+\ninepoint\noindent
+|\font\twelveit=cmti10 at 12pt % (a cheap substitute for cmti12)|
+
+\bugonpage 417, last six lines (8/25/84)
+
+\ninepoint\noindent
+^|\parskip|
+of |0pt| |plus|~|.8pt| between adjacent entries, and since there is room for
+more than 50 lines per column; therefore the |manmac| balancing routine tries
+to make both the top and bottom baselines agree at the end of the index.
+In applications where the glue is not so flexible it would be more
+appropriate to let the right-hand column be a little short; the best
+way to do this is probably to replace the command `|\unvbox3|' by
+`|\dimen2=|^|\dp||3| |\unvbox3| |\kern-\dimen2| ^|\vfil|'.
+
+\bugonpage 422, lines 24--26 (2/9/84)
+
+\ninepoint\noindent
+(The last two lines use |\d@nger| and |\dd@nger|, which are non-|\outer|
+equivalents of\/ |\danger| and |\ddanger|; such duplication is necessary
+because control sequences of type ^|\outer| cannot appear within a |\def|.)
+
+\bugonpage 428, in the table of sixteen basic fonts (12/19/83)
+
+\ninepoint\noindent
+[The special fonts called |cmi10| and |cmi7| and |cmi5| should really be
+called |cmmi10| and |cmmi7| and |cmmi5|.]
+
+\bugonpage 433, last eight lines (8/17/84)
+
+\noindent
+explained in Appendix~G\null. If you want to increase
+the number of parameters past the number that actually appear in a font's
+metric information file, you can assign new values immediately after that font
+has been loaded. For example, if some font |\ff| with seven parameters
+has just entered \TeX's memory, the command |\fontdimen13\ff=5pt| will set
+parameter number~13 to $5\pt$; the intervening parameters, numbers 8--12,
+will be set to zero. You can even give more than seven parameters to
+^|\nullfont|, provided that you assign the values before any actual fonts
+have been loaded.
+
+\bugonpage 445, line 6 (11/11/83)
+
+\ninepoint
+\line{if $(a-{1\over2}\theta)-
+\bigl(h(z)-v\bigr)<\varphi$, increase~$v$ by the difference. Finally
+construct a vbox of}
+
+\bugonpage 449, line 12 (1/18/84)
+
+\line{immediately clear why the `n' should
+be attached to the `e' in one case but not}
+
+\bugonpage 459, left column, line 2 (1/18/84)
+
+\eightpoint
+al-Khw\^arizm\^\i, abu Ja`far Mu\d{h}ammad
+
+\bugonpage 460, index entry for Beethoven (8/16/84)
+
+\eightpoint
+Change `von' to `van'.
+
+\bugonpage 461, third line in left column (8/25/84)
+
+\eightpoint The entry for |\box255| should not be indented.
+
+\bugonpage 461, index entry for boxed material (8/2/84)
+
+\eightpoint Add `{\it 420}'.
+
+\bugonpage 462, index entry for {\tt\char`\\colon} (11/16/83)
+
+\eightpoint Add page \underbar{359} to this list.
+
+\bugonpage 462, right column, third-last line (5/21/84)
+
+\eightpoint\indent
+[Change `crochets' to `crotchets'; then move this entry down two lines.]
+
+\bugonpage 463, right column, line 16 (5/20/84)
+
+\eightpoint\indent
+design size, 16--17, 213.
+
+\bugonpage 464, index entry for {\tt\char`\\dump} (1/10/84)
+
+\eightpoint Add page {\it 344\/} to this list.
+
+\bugonpage 464, right column, line 5 (1/5/84)
+
+\eightpoint
+Dvo\v r\'ak, Anton\'\i n Leopold, 409.
+
+\bugonpage 464, index entry for {\tt\char`\\end} (8/25/84)
+
+\eightpoint Page number 264 should be underlined.
+
+\bugonpage 465, index entry for {\tt\char`\\everydisplay} (8/25/84)
+
+\eightpoint Add page {\it 326\/} to this list.
+
+\bugonpage 465, index entry for {\tt\char`\\filbreak} (7/3/84)
+
+\eightpoint Delete the reference to page number 355.
+
+\bugonpage 466, index entry for {\tt\char`\\footnote} (4/26/84)
+
+\eightpoint Page number 363 should be underlined.
+
+\bugonpage 467, index entry for {\tt\char`\\hidewidth} (7/3/84)
+
+\eightpoint Page number 354 should be underlined.
+
+\bugonpage 468, index entry for insertions (8/25/84)
+
+\eightpoint Add pages 115--117, 122--125 to this list.
+
+\bugonpage 469, index entry for {\tt\char`\\kern} (11/1/83)
+
+\eightpoint Add page {\it 256\/} to this list.
+
+\bugonpage 470, index entry for {\tt\char`\\limits} (11/3/83)
+
+\eightpoint Add page {\it 359\/} to this list.
+
+\bugonpage 472, right column, lines 10--11 (7/9/84)
+
+{\eightpoint
+\indent
+|\normalbaselines|\kern1pt,
+ {\it 325}, 349, $\underline{351}$, {\it 414--415}.\par
+\baselineskip=9.9pt
+\indent
+|\normalbaselineskip|\kern1pt,
+ $\underline{349}$, {\it 414--415}.\par
+}
+
+\bugonpage 472, index entry for {\tt\char`\\null} (7/3/84)
+
+\eightpoint Page number 351 should be underlined.
+
+\bugonpage 472, right column, line 28 (1/3/84)
+
+\eightpoint\indent
+\hbox to0pt{\hss\lower1pt\hbox{*}}|\nullfont|, 14, 153, 271, 433.
+
+\bugonpage 476, a new index entry (8/25/84)
+
+\eightpoint\indent
+shifted output, {\sl see\/} |\hoffset|, |\voffset|.
+
+\bugonpage 476, index entry for shriek (8/25/84)
+
+\eightpoint It should not be capitalized.
+
+\bugonpage 478, index entry for \'Swierczkowski (9/15/84)
+
+\eightpoint
+The middle name should be `S\l awomir'.
+
+\bugonpage 479, last seven lines in the left column (8/23/84)
+
+\eightpoint
+{\baselineskip=9.9pt
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\tracingmacros|, $\underline{205}$, $\underline{212}$, 273, {\it329}.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\tracingonline|, 121, 212, 273, $\underline{303}$.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\tracingoutput|, $\underline{254}$, 273, {\it301--302}.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\tracingpages|, {\it112--114}, 124, 273, $\underline{303}$.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\tracingparagraphs|, {\it98--99}, 273, $\underline{303}$.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\tracingrestores|, 273, $\underline{301}$, $\underline{303}$.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\tracingstats|, 273, $\underline{300}$, $\underline{303}$, {\it383}.
+}
+
+\bugonpage 479, index entry for underlined text (8/2/84)
+
+\eightpoint Add `{\sl see also\/} |\underbar|'.
+
+\bugonpage 480, index entry for {\tt\char`\\vbox} (11/1/83)
+
+\eightpoint Delete page 256 from this list.
+
+\bye
+
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.seven b/Master/texmf-dist/source/generic/knuth/errata/errata.seven
new file mode 100644
index 00000000000..0866189da51
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.seven
@@ -0,0 +1,821 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting, 1991}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\tenpoint
+\noindent This is a list of all corrections made to {\sl Computers \&
+Typesetting}, Volumes A,~B, C, and D\null, between 1 January 1991 and
+15 March 1992.
+Corrections made to the softcover version of {\sl The \TeX book\/} are
+the same as corrections to Volume~A\null. Corrections to the softcover
+version of {\sl The \slMF\kern1ptbook\/} are the same as corrections
+to Volume~C\null. Some of the corrections below have already been made in
+reprintings of the books. Changes to Volume~B refer to the fourth printing
+(1991), which differs markedly from earlier printings because it includes
+all the revisions for \TeX3.0. Changes to Volume~D refer to the third
+printing (1991), which differs markedly from earlier printings because
+it includes all the revisions for \MF\kern1pt2.0. Changes to the mini-indexes
+and master indexes of Volumes B and~D are not shown here unless they are
+not obviously derivable from what has been shown.
+Dozens of changes, too many to list
+here, have been made to Volume~E because of recent upgrades to the
+Computer Modern font source files.
+Those changes, which affect only the digitization at
+low resolution and the appearance of lowercase delta and
+some characters in the math symbols
+fonts (but not the {\tt TFM} files), are documented at
+the end of file {\tt cm85.bug}.
+\looseness=-1
+
+ % volume A
+
+\bugonpage A96, lines 9--11 (9/18/91)
+
+\ninepoint
+Some ^{German} words traditionally change their spelling
+when they are split between lines. For example, `backen' becomes `bak-ken'
+and `Bettuch' becomes `Bett-tuch'. How can you instruct \TeX\ to produce
+such effects?
+
+\bugonpage A178, line 17 (11/19/91)
+
+\ninepoint
+If you say `|\phantom{|\<subformula>|}|' in any formula, plain
+\TeX\ will do its\cutpar
+
+\bugonpage A286, bottom two lines and continuing into A287 (11/21/91)
+
+\ninepoint\noindent
+stands for zero or more \<assignment>
+commands other than |\setbox|.
+If the assignments are not followed by a \<character>, where
+\<character> stands for any of the commands just discussed in the previous
+paragraph, \TeX\ treats |\accent| as if it were |\char|, except that
+the space factor is set to 1000. Otherwise the character that follows
+the assignment is accented by the character that corresponds to the
+\<8-bit number>. \ (The purpose of the intervening assignments is to
+allow the accenter and accentee to be in different fonts.) \ If the
+accent must be moved up or down, it is put into an hbox that is
+raised or lowered. Then the accent is effectively superposed on the
+character by means of kerns, in such a way that the width of the accent
+does not influence the width of the resulting horizontal list.
+Finally, \TeX\ sets |\spacefactor=1000|.
+
+\bugonpage A291, lines 6--8 (11/21/91)
+
+\ninepoint\noindent
+`|}|' may be followed by
+optional \<assignment> commands other than |\setbox|,
+after which `|$$|'~must conclude
+the display. \TeX\ will insert the |\abovedisplayskip| and
+|\belowdisplayskip| glue before and after the result of the alignment.
+
+\bugonpage A293, line 14 (9/18/91)
+
+\ninepoint\noindent
+explained in Appendix~G\null. \TeX\
+scans \<one optional space> after completing a displayed formula; this is
+usually the implicit space at the end of a line in the input file.
+
+\bugonpage A311, bottom four lines (9/18/91)
+
+\ninepoint
+\ansno12.7: 1000, except: 999 after |O|, |B|, |S|, |D|, and |J|; 1250 after the
+comma; 3000 after the exclamation point, the right-quote marks, and the
+periods. If a period had come just after the |B| (i.e., if the text had
+said `|B. Sally|'), the space factor after that period would have
+been~1000, not~3000.
+
+\bugonpage A314, lines 16--18 from the bottom (1/10/92)
+
+\ninepoint
+\ansno14.8: |ba\ck/en| and |Be\ttt/uch|, where the macros |\ck/| and |\ttt/|
+are defined by
+\begintt
+\def\ck/{\discretionary{k-}{k}{ck}}
+\def\ttt/{tt\discretionary{-}{t}{}}
+\endtt
+
+\bugonpage A354, line 8 (9/18/91)
+
+\ninepoint\noindent
+|\def\multispan#1{\omit\mscount=#1\relax\loop\ifnum\mscount>1 \sp@n\repeat}|%
+\kern-10pt\null
+
+\bugonpage A356, line 11 from the bottom (9/23/91)
+
+\ninepoint\noindent
+| \else{\ooalign{\unhbox0\crcr\hidewidth\char'30\hidewidth}}\fi}|
+
+\bugonpage A358, line 8 from the bottom (9/18/91)
+
+\ninepoint\noindent
+|\mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}|
+
+\bugonpage A359, line 13 (11/4/91)
+
+\ninepoint\noindent
+|\def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr|
+
+\bugonpage A359, line 16 (11/4/91)
+
+\ninepoint\noindent
+|\def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr|
+
+\bugonpage A359, line 19 (11/4/91)
+
+\ninepoint\noindent
+|\def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3pt}|
+
+\bugonpage A359, line 22 (11/4/91)
+
+\ninepoint\noindent
+|\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr|
+
+\bugonpage A359, lines 7--14 from the bottom (1/11/92)
+
+\ninepoint\noindent
+|\def\lgroup{\delimiter"462833A } \def\rgroup{\delimiter"562933B }|%
+\par\noindent
+|\def\lmoustache{\delimiter"437A340 } \def\rmoustache{\delimiter"537B341 }|%
+ \kern-2pt\null\par\noindent
+|\def\uparrow{\delimiter"3222378 } \def\Uparrow{\delimiter"322A37E }|%
+\par\noindent
+|\def\downarrow{\delimiter"3223379 } \def\Downarrow{\delimiter"322B37F }|%
+\par\noindent
+|\def\updownarrow{\delimiter"326C33F } \def\arrowvert{\delimiter"026A33C }|%
+\par\noindent
+|\def\Updownarrow{\delimiter"326D377 } \def\Arrowvert{\delimiter"026B33D } |%
+\par\noindent
+|\def\vert{\delimiter"026A30C } \def\Vert{\delimiter"026B30D } |%
+\par\noindent
+|\def\backslash{\delimiter"026E30F } \def\bracevert{\delimiter"077C33E }|
+
+\bugonpage A360, line 13 (11/19/91)
+
+\ninepoint\noindent
+|\phantom|, |\smash|, |\root|, and other
+operations. (Actually |\phantom| and |\smash| are not perfect: They
+assume that the current style is uncramped.)
+
+\bugonpage A360, line 2 from the bottom (11/4/91)
+
+\ninepoint\noindent
+|\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}|
+
+\bugonpage A361, top line (11/4/91)
+
+\ninepoint\noindent
+|\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt|
+
+\bugonpage A364, line 5 from the bottom (11/4/91)
+
+\ninepoint\noindent
+|\def|^|\fmtname||{plain}\def\fmtversion{3.141}|
+
+\bugonpage A377, the bottom 17 lines (9/18/91)
+
+\eightpoint\noindent\hangindent\parindent\hangafter-3
+story: Macro |\stest| decides whether or not
+a given token list register begins with
+a \<space token> as defined in Chapter~24. If so, the macro
+decides whether the token is explicit and/or funny and/or active.
+\begintt
+\newif\ifspace \newif\iffunny \newif\ifexplicit \newif\ifactive
+\def\stest#1{\funnyfalse \expandafter\s\the#1! \stest}
+\def\s{\global\explicitfalse \global\activefalse \futurelet\next\ss}
+\def\ss{\ifcat\noexpand\next\stoken\let\nxt\sx\else\let\nxt\ns\fi\nxt}
+\def\sx{\spacetrue\ifx\next\stoken\let\nxt\sss\else\let\nxt=\ssss\fi\nxt}
+\long\def\sss#1 #2\stest{\def\next{#1}%
+ \ifx\next\empty \global\explicittrue \else\testactive#1\s\fi}
+\long\def\ssss#1#2\stest{\funnytrue{\escapechar=\if*#1`?\else`*\fi\relax
+ \if#1\string#1\uccode`#1=`~ % we assume that ~ is an active character
+ \uppercase{\ifcat\noexpand#1}\noexpand~\global\activetrue
+ \else\global\explicittrue\fi
+ \else\testactive#1\s\fi}}
+\long\def\ns#1\stest{\spacefalse}
+\long\def\testactive#1#2\s{\expandafter\tact\string#1\s\tact}
+\long\def\tact#1#2\tact{\def\next{#2}\ifx\next\xs\global\activetrue
+ \else\ifx\next\empty \global\activetrue\fi\fi} \def\xs{\s}
+\endtt
+
+\bugonpage A444, lines 15--26 (3/26/91)
+
+\ninepoint
+\textindent{\bf14.}If the current item is an Ord atom,
+go directly to Rule~17 unless
+all of the following are true: The nucleus is a symbol; the subscript
+and superscript are both empty; the very next item in the math list is an
+atom of type Ord, Op, Bin, Rel, Open, Close, or Punct; and the nucleus of the
+next item is a symbol whose family is the same as the family in the present
+Ord atom. In such cases the present symbol is marked as a text symbol.
+If the font information shows a ligature between this symbol and the
+following one, using the specified family and the current size, then
+insert the ligature character and continue as specified by the font;
+in this process, two characters may collapse into a single Ord
+text symbol, and/or new Ord text characters may appear. If the font information
+shows a kern between the current symbol and the next, insert a kern item
+following the current atom.
+As soon as an Ord atom has been fully processed for ligatures and kerns,
+go to Rule~17.
+
+\bugonpage A446, lines 5 and 6 from the bottom (1/13/92)
+
+\ninepoint\noindent
+are used to change the current style just as
+in the first pass, so that both passes have the same value of~$C$ when
+they work on any particular atom.
+
+\bugonpage A447, in the parameter usage table (1/13/92)
+
+\ninepoint\noindent[Delete the entry for `$\sigma_2$'; the entry for
+`$\sigma_{17}$' moves down to the bottom of the left column.]
+
+\bugonpage A447, line 2 after the parameter usage table (1/13/92)
+
+\ninepoint\noindent
+to parameters in arbitrary families:
+Rule~17 uses |\fontdimen| parameter~2 (space) to de-\cutpar
+
+\bugonpage A467, entry for {\tt\char`\\hss} (9/18/91)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt\char`\\hss}, 71--72, {\it82--83}, 233, 283, 285, 290, 442.
+
+\bugonpage A467, new subentry under hyphenation (9/18/91)
+
+\eightpoint\indent\quad
+suppressing, 93, 414, 424, 454.
+
+\bugonpage A476, right column (11/21/91)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt\char`\\setbox}, 66--67, 77, 81, $\underline{120}$, 276, 279, 286,\par
+\indent\qquad 291, {\it386--392}.
+
+ % volume B
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage B2, line 10 from the bottom (1/11/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]3.141\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
+
+\bugonpage B18, lines 21 and 22 (10/12/91)
+
+\tenpoint\noindent
+must have an \\{xchr} equivalent in the local
+character set. (This restriction applies only to preloaded strings,
+not to those generated dynamically by the user.)
+
+\bugonpage B26, new line before fourth line from bottom (1/24/92)
+
+\ninepoint\noindent\hskip20pt
+\\{nl}: \\{integer};\quad$\{\,$new-line character to restore$\,\}$
+
+\bugonpage B26, bottom line and top 3 lines of B27 (1/24/92)
+
+\ninepoint\noindent\hskip30pt
+{\bf else begin if\/} $\\{selector}>\\{pseudo}$ {\bf then}\par
+\noindent\hskip50pt
+{\bf begin} \\{print\_char}($s$); \ {\bf return};\quad
+ $\{\,$internal strings are not expanded$\,\}$\par\noindent\hskip50pt
+{\bf end};\par\noindent\hskip40pt
+{\bf if\/} ($\langle\,$Character $s$ is the current new-line
+ character{\sevenrm\kern.5em244}$\,\rangle$) {\bf then}\par\noindent\hskip50pt
+{\bf if\/} $\\{selector}<\\{pseudo}$ {\bf then}\par\noindent\hskip60pt
+{\bf begin} \\{print\_ln}; \ {\bf return}; \
+{\bf end};\par\noindent\hskip40pt
+$\\{nl}\gets\\{new\_line\_char}$; \ $\\{new\_line\_char}\gets-1$;\quad
+ $\{\,$temporarily disable new-line character$\,\}$\par\noindent\hskip40pt
+$j\gets\\{str\_start}[s]$;\par\noindent\hskip40pt
+{\bf while} $j<\\{str\_start}[s+1]$ {\bf do}\par\noindent\hskip50pt
+{\bf begin} $\\{print\_char}(\\{so}(\\{str\_pool}[j]))$; \ $\\{incr}(j)$; \
+{\bf end};\par\noindent\hskip40pt
+$\\{new\_line\_char}\gets\\{nl}$; \ {\bf return};\par\noindent\hskip40pt
+{\bf end};
+
+\bugonpage B27, lines 9 and 10 (9/19/91)
+
+\tenpoint\noindent
+{\bf 60.\quad}%
+Control sequence names, file names, and strings constructed with
+{\tt\char`\\string} might contain \\{ASCII\_code} values that can't
+be printed using \\{print\_char}. Therefore we use
+\\{slow\_print} for them:
+
+\bugonpage B27, lines 13--26 (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf var} $j$: \\{pool\_pointer};\quad$\{\,$current character code
+ position$\,\}$\par\noindent\hskip10pt
+{\bf begin if\/} $(s\ge\\{str\_ptr})\lor(s<256)$ {\bf then} \\{print}(s)
+\par\noindent\hskip10pt {\bf else begin} $j\gets\\{str\_start}[s]$;\par
+\noindent\hskip20pt{\bf while} $j<\\{str\_start}[s+1]$ {\bf do}\par
+\noindent\hskip30pt{\bf begin} $\\{print}(\\{so}(\\{str\_pool}[j]))$; \
+ $\\{incr}(j)$;\par\noindent\hskip30pt
+{\bf end};\par\noindent\hskip20pt
+{\bf end};\par\noindent\hskip10pt
+{\bf end};
+
+\bugonpage B28, line 8 (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+{\bf else begin} \\{slow\_print}(\\{format\_ident}); \ \\{print\_ln};
+
+\bugonpage B33, line 3 (1/11/92)
+
+\tenpoint\noindent
+recursively. A similar interlock is provided by \\{set\_box\_allowed}.
+
+\bugonpage B33, new line to come after line 14 (1/11/92)
+
+\ninepoint\noindent
+\\{set\_box\_allowed}: \\{boolean};\quad
+ $\{\,$is it safe to do a |\setbox| assignment?$\,\}$
+
+\bugonpage B33, new line to come after line 20 (1/11/92)
+
+\ninepoint\noindent\hskip10pt
+$\\{set\_box\_allowed}\gets\\{true}$;
+
+\bugonpage B36, line 12 (9/19/91)
+
+\ninepoint\noindent\hskip30pt
+{\bf begin} \\{print\_nl}({\tt\char`\"You\]want\]to\]edit\]file\]\char`\"});
+ \ \\{slow\_print}(\\{input\_stack}[\\{base\_ptr}].\\{name\_field});
+
+\bugonpage B46, lines 9 and 10 (5/24/91)
+
+\tenpoint\noindent
+arithmetic; see {\sl TUGboat \bf3},1 (March 1982), 10--27. (But the
+routines cited there must be modified to allow negative glue ratios.)
+
+\bugonpage B47, lines 2 and 3 (5/24/91)
+
+\tenpoint\noindent
+structures on a \\{memory\_word}, which contains either a (signed) integer,
+possibly scaled, or a (signed) \\{glue\_ratio}, or a small number of
+fields that are one half or one quarter of the size used\cutpar
+
+\bugonpage B177, lines 10 and 11 (9/19/91)
+
+\ninepoint\noindent\hskip20pt
+{\bf begin} \\{print\_err}({\tt\char`\"Bad\]mathchar\char`\"});\par
+\noindent\hskip20pt
+\\{help2}({\tt\char`\"A\]mathchar\]number\]must\]be\]between\]0\]%
+ and\]32767.\char`\"})
+
+\bugonpage B196, new lines after line 11 (1/13/92)
+
+\ninepoint\noindent\hskip20pt
+{\bf if\/} $\\{align\_state}<1000000$ {\bf then}\quad
+ $\{\,$unmatched `|}|' aborts the line$\,\}$\par\noindent\hskip30pt
+{\bf begin repeat} \\{get\_token}; \ {\bf until} $\\{cur\_tok}=0$;\par
+\noindent\hskip30pt$\\{align\_state}\gets1000000$; \ {\bf goto} \\{done};\par
+\noindent\hskip30pt{\bf end};
+
+\bugonpage B208, line 21 (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} \\{slow\_print}($a$); \ \\{slow\_print}($n$); \
+ \\{slow\_print}($e$);
+
+\bugonpage B214, line 14 (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} \\{wlog}(\\{banner}); \\{slow\_print}(\\{format\_ident}); \
+ \\{print}({\tt\char`\"\]\]\char`\"}); \
+ \\{print\_int}(\\{day}); \
+ \\{print\_char}({\tt\char`\"\]\char`\"});
+
+\bugonpage B214, line 2 from the bottom (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+\\{print\_char}({\tt\char`\"(\char`\"}); \
+\\{incr}(\\{open\_parens}); \
+\\{slow\_print}(\\{name}); \
+\\{update\_terminal}; \
+$\\{state}\gets\\{new\_line}$;
+
+\bugonpage B234, line 22 (9/19/91)
+
+\ninepoint\noindent\hskip20pt
+\\{print}({\tt\char`\"\]in\]font\]\char`\"}); \
+\\{slow\_print}(\\{font\_name}[$f$]); \
+\\{print\_char}({\tt\char`\"!\char`\"}); \
+\\{end\_diagnostic}(\\{false});
+
+\bugonpage B267, lines 7 and 8 (9/19/91)
+
+\ninepoint\noindent\hskip20pt
+\\{print\_nl}({\tt\char`\"Output\]written\]on\]\char`\"}); \
+\\{slow\_print}(\\{output\_file\_name});\par\noindent\hskip20pt
+\\{print}({\tt\char`\"\](\char`\"}); \
+\\{print\_int}(\\{total\_pages}); \
+\\{print}({\tt\char`\"\]page\char`\"});
+
+\bugonpage B296, new lines after line 8 of section 716 (1/11/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $f<0$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} \\{decr}($n$); \ $f\gets f+\oct{200000}$;\par\noindent\hskip20pt
+{\bf end};
+
+\bugonpage B297, new lines after line 7 of section 717 (1/11/92)
+
+\ninepoint\noindent\hskip20pt
+{\bf if\/} $f<0$ {\bf then}\par\noindent\hskip30pt
+{\bf begin} \\{decr}($n$); \ $f\gets f+\oct{200000}$;\par\noindent\hskip30pt
+{\bf end};
+
+\bugonpage B348, bottom two lines (1/3/92)
+
+\tenpoint\noindent\hskip10pt
+Up to three passes might be made through the paragraph in an attempt to find at
+least one set of feasible breakpoints. On the first pass, we have
+$\\{threshold}=\\{pretolerance}$ and $\\{second\_pass}=$\cutpar
+
+\bugonpage B364, line 20 (1/3/92)
+
+\tenpoint\noindent
+{\bf 863.\quad}
+The `{\bf loop}' in the following code is performed at most
+thrice per call of \\{line\_break}, since\cutpar
+
+\bugonpage B377, insert new line after line 12 (9/19/91)
+
+\ninepoint\noindent
+\\{hyf\_bchar}:\enspace\\{halfword};\quad
+ $\{\,$boundary character after $c_n\,\}$
+
+\bugonpage B378, line 12 from the bottom (9/19/91)
+
+\ninepoint\noindent\hskip30pt
+$\\{hyf\_bchar}\gets\\{character}(s)$; \
+$c\gets\\{qo}(\\{hyf\_bchar})$;
+
+\bugonpage B378, line 9 from the bottom (1/10/92)
+
+\ninepoint\noindent\hskip30pt
+$\\{hb}\gets s$; \ \\{incr}(\\{hn}); \ $\\{hu}[\\{hn}]\gets c$; \
+$\\{hc}[\\{hn}]\gets\\{lc\_code}(c)$; \
+$\\{hyf\_bchar}\gets\\{non\_char}$;
+
+\bugonpage B378, line 5 from the bottom (9/19/91)
+
+\ninepoint\noindent\hskip30pt
+{\bf else if} $(\\{type}(s)=\\{kern\_node})\land(\\{subtype}(s)=\\{normal})$
+ {\bf then} $\\{hb}\gets s$\par\noindent\hskip40pt
+ {\bf else goto} \\{done3};
+
+\bugonpage B379, line 6 (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+$j\gets\\{hn}$; \ $q\gets\\{lig\_ptr}(s)$; \
+{\bf if\/} $q>\\{null}$ {\bf then} $\\{hyf\_bchar}\gets\\{character}(q)$;
+
+\bugonpage B379, new line between lines 14 and 15 (1/10/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{odd}(\\{subtype}(s))$ {\bf then}
+$\\{hyf\_bchar}\gets\\{font\_bchar}[\\{hf}]$ {\bf else}
+$\\{hyf\_bchar}\gets\\{non\_char}$;
+
+\bugonpage B379, line 19 (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{hn}<\\{l\_hyf}+\\{r\_hyf}$ {\bf then goto} \\{done1}; \
+\quad$\{\,$\\{l\_hyf} and \\{r\_hyf} are always $\ge1\,\}$
+
+\bugonpage B380, lines 9--11 from the bottom reduce to a single line (1/10/92)
+
+\ninepoint\noindent\hskip10pt
+$q\gets\\{link}(\\{hb})$; \ $\\{link}(\\{hb})\gets\\{null}$; \
+$r\gets\\{link}(\\{ha})$; \ $\\{link}(\\{ha})\gets\\{null}$; \
+$\\{bchar}\gets\\{hyf\_bchar}$;
+
+\bugonpage B436, lines 9 and 10 (3/15/92)
+
+\tenpoint
+$$\\{cur\_r}=\cases{\\{character}(\\{lig\_stack}),&if $\\{lig\_stack}>
+ \\{null}$;\cr
+ \\{font\_bchar}[\\{cur\_font}],&otherwise;\cr}$$
+except when $\\{character}(\\{lig\_stack})=\\{font\_false\_bchar}
+ [\\{cur\_font}]$. Several additional global variables are needed.
+
+\bugonpage B438, line 13 from the bottom (3/15/92)
+
+\ninepoint\noindent\hskip10pt
+$\\{cur\_q}\gets\\{tail}$; \ $\\{cur\_l}\gets\\{character}(\\{lig\_stack})$;
+
+\bugonpage B507, line 6 of section 1241 (1/11/92)
+
+\ninepoint\noindent\hskip10pt
+\\{scan\_optional\_equals};\par\noindent\hskip10pt
+{\bf if\/} \\{set\_box\_allowed} {\bf then}
+$\\{scan\_box}(\\{box\_flag}+n)$\par\noindent\hskip10pt
+{\bf else begin} \\{print\_err}({\tt\char`\"Improper\]\char`\"});
+\ \\{print\_esc}({\tt\char`\"setbox\char`\"});\par\noindent\hskip20pt
+\\{help2}({\tt\char`\"Sorry,\]\char`\\setbox\]is\]not\]allowed\]after\]%
+\char`\\halign\]in\]a\]display,\char`\"})\par\noindent\hskip20pt
+({\tt\char`\"or\]between\]\char`\\accent\]%
+and\]an\]accented\]character.\char`\"});
+\ \\{error};\par\noindent\hskip20pt
+{\bf end};
+
+\bugonpage B511, new line inserted after line 3 (1/24/92)
+
+\ninepoint\noindent\hskip20pt
+\\{flushable\_string}: \\{str\_number};\quad
+ $\{\,$string not yet referenced$\,\}$
+
+\bugonpage B512, new line inserted after line 3 of section 1260 (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+$\\{flushable\_string}\gets\\{str\_ptr}-1$;
+
+\bugonpage B512, the former line 6 of section 1260 (1/24/92)
+
+\ninepoint\noindent\hskip30pt
+{\bf begin if\/} $\\{cur\_name}=\\{flushable\_string}$ {\bf then}
+\par\noindent\hskip40pt{\bf begin} \\{flush\_string}; \
+ $\\{cur\_name}\gets\\{font\_name}[f]$; \ {\bf end};
+\par\noindent\hskip30pt{\bf if\/} $s>0$ {\bf then}
+
+\bugonpage B512, line 10 from the bottom (9/19/91)
+
+\ninepoint\noindent
+\\{set\_font}:\enspace{\bf begin}
+\\{print}({\tt\char`\"select\]font\]\char`\"}); \
+\\{slow\_print}(\\{font\_name}[\\{chr\_code}]);
+
+\bugonpage B514, line 9 (1/11/92)
+
+\ninepoint\noindent\hskip20pt
+$\\{set\_box\_allowed}\gets\\{false}$; \
+\\{prefixed\_command}; \
+$\\{set\_box\_allowed}\gets\\{true}$;
+
+\bugonpage B515, line 19 (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+\\{slow\_print}($s$); \ \\{update\_terminal};
+
+\bugonpage B516, line 2 (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} \\{print\_err}({\tt\char`\"\char`\"}); \
+ \\{slow\_print}($s$);
+
+\bugonpage B531, lines 19 and 20 (9/19/91)
+
+\ninepoint\noindent\hskip10pt
+\\{print\_nl}({\tt\char`\"Beginning\]to\]dump\]on\]file\]\char`\"}; \
+\\{slow\_print}(\\{w\_make\_name\_string}(\\{fmt\_file})); \
+\\{flush\_string};\par\noindent\hskip10pt
+\\{print\_nl}({\tt\char`\"\char`\"}); \
+\\{slow\_print}(\\{format\_ident})
+
+\bugonpage B533, line 29 (9/19/91)
+
+\ninepoint\noindent\hskip30pt
+{\bf begin} \\{print\_nl}({\tt\char`\"Transcript\]written\]on\]\char`\"}); \
+\\{slow\_print}(\\{log\_name}); \
+\\{print\_char}({\tt\char`\".\char`\"});
+
+\bugonpage B538, line 13 (9/19/91)
+
+\ninepoint\noindent
+10:\enspace\\{slow\_print}($n$);
+
+\bugonpage B577, left column (12/23/91)
+
+\eightpoint\noindent[Add 798 to the index entries for `system dependencies'.]
+
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+
+\bugonpage C262, line 15 (3/26/91)
+
+\ninepoint\noindent
+|string base_name, base_version; base_name="plain"; base_version="2.7";|
+
+\bugonpage C271, line 17 from the bottom (3/26/91)
+
+\ninepoint\noindent
+| currentpen_path shifted (z.t_) withpen penspeck enddef;|
+
+\bugonpage C347, Bront''e entry (1/29/91)
+
+\eightpoint\noindent
+[The accent was clobbered; her name should, of course, be Bront\"e.
+Fix the entries for D\"urer, M\"obius, and Stravinsky in the same way.]
+
+\bugonpage C348, left column (1/11/92)
+
+\eightpoint\indent
+compound statement, $\underline{155}$, 217.
+
+\bugonpage C353, right column (1/11/92)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt numeric}, 55, $\underline{56}$, {\it65}, 88.
+
+\bugonpage C354, miscellaneous entries in both columns (1/11/92)
+
+\eightpoint
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt openwindow}, $\underline{191}$--$\underline{193}$, 220, {\it277},
+ {\it312--313}.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt or}, {\it65}, $\underline{170}$, 210, 237, 288--289.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt pair}, 55, $\underline{56}$, 65.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt path}, 55, $\underline{56}$, 171.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt pen}, 55, $\underline{56}$, {\it65}, 170.
+\par\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt picture}, 55, $\underline{56}$, {\it114}.
+
+\bugonpage C356, right column (1/11/92)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt string}, 55, $\underline{56}$, 69.
+
+\bugonpage C357, right column (1/11/92)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt transform}, 55, $\underline{56}$, 57, 141--143, {\it160}, 266.
+
+ % Volume D
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage D2, last line of section 2 (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]METAFONT,\]Version\]2.71\char'23}\quad
+$\{\,$printed when \MF\ starts$\,\}$
+
+\bugonpage D102, line 15 from the bottom (11/1/91)
+
+\tenpoint\noindent
+Then
+$\\{eq\_type}(h(x))=\\{tag\_token}$ and $\\{equiv}(h(x))=p$,
+where $p$~is a two-word value
+node with\cutpar
+
+\bugonpage D188, lines 16 and 17 (1/24/92)
+
+\tenpoint\noindent
+errors. Our subroutines also obey the identity $t[a,b]+t[b,a]=a+b$.
+
+\bugonpage D190, new copy before bottom four lines (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{x\_coord}(r)<\\{x\_coord}(\\{pp})$ {\bf then}
+ $\\{x\_coord}(r)\gets\\{x\_coord}(\\{pp})$\par\noindent\hskip10pt
+{\bf else if\/} $\\{x\_coord}(r)>\\{dest\_x}$ {\bf then}
+ $\\{x\_coord}(r)\gets\\{dest\_x}$;\par\noindent\hskip10pt
+{\bf if\/} $\\{left\_x}(r)>\\{x\_coord}(r)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{left\_x}(r)\gets\\{x\_coord}(r)$; \
+{\bf if\/} $\\{right\_x}(\\{pp})>\\{x\_coord}(r)$ {\bf then}
+$\\{right\_x}(\\{pp})\gets\\{x\_coord}(r)$; \ {\bf end};\par\noindent\hskip10pt
+{\bf if\/} $\\{right\_x}(r)<\\{x\_coord}(r)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{right\_x}(r)\gets\\{x\_coord}(r)$; \
+{\bf if\/} $\\{left\_x}(\\{qq})<\\{x\_coord}(r)$ {\bf then}
+$\\{left\_x}(\\{qq})\gets\\{x\_coord}(r)$; \ {\bf end};
+
+\bugonpage D191, new copy before bottom two lines of section 416 (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{x\_coord}(s)<\\{x\_coord}(r)$ {\bf then}
+ $\\{x\_coord}(s)\gets\\{x\_coord}(r)$\par\noindent\hskip10pt
+{\bf else if\/} $\\{x\_coord}(s)>\\{dest\_x}$ {\bf then}
+ $\\{x\_coord}(s)\gets\\{dest\_x}$;\par\noindent\hskip10pt
+{\bf if\/} $\\{left\_x}(s)>\\{x\_coord}(s)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{left\_x}(s)\gets\\{x\_coord}(s)$; \
+{\bf if\/} $\\{right\_x}(r)>\\{x\_coord}(s)$ {\bf then}
+$\\{right\_x}(r)\gets\\{x\_coord}(s)$; \ {\bf end};\par\noindent\hskip10pt
+{\bf if\/} $\\{right\_x}(s)<\\{x\_coord}(s)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{right\_x}(s)\gets\\{x\_coord}(s)$; \
+{\bf if\/} $\\{left\_x}(\\{qq})<\\{x\_coord}(s)$ {\bf then}
+$\\{left\_x}(\\{qq})\gets\\{x\_coord}(s)$; \ {\bf end};
+
+\bugonpage D194, lines 4 and 5 (1/24/92)
+
+\tenpoint\noindent[Delete those two lines; I no longer believe that the
+assertion has been proved (although it might be true).]
+
+\bugonpage D194, lines 7--13 of section 424 (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{y\_coord}(r)<\\{y\_coord}(p)$ {\bf then}
+ $\\{y\_coord}(r)\gets\\{y\_coord}(p)$\par\noindent\hskip10pt
+{\bf else if\/} $\\{y\_coord}(r)>\\{dest\_y}$ {\bf then}
+ $\\{y\_coord}(r)\gets\\{dest\_y}$;\par\noindent\hskip10pt
+{\bf if\/} $\\{x\_coord}(p)+\\{y\_coord}(r)>\\{dest\_x}+\\{dest\_y}$
+{\bf then} $\\{y\_coord}(r)\gets\\{dest\_x}+\\{dest\_y}-\\{x\_coord}(p)$;\par
+\noindent\hskip10pt
+{\bf if\/} $\\{left\_y}(r)>\\{y\_coord}(r)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{left\_y}(r)\gets\\{y\_coord}(r)$; \
+{\bf if\/} $\\{right\_y}(p)>\\{y\_coord}(r)$ {\bf then}
+$\\{right\_y}(p)\gets\\{y\_coord}(r)$; \ {\bf end};\par\noindent\hskip10pt
+{\bf if\/} $\\{right\_y}(r)<\\{y\_coord}(r)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{right\_y}(r)\gets\\{y\_coord}(r)$; \
+{\bf if\/} $\\{left\_y}(q)<\\{y\_coord}(r)$ {\bf then}
+$\\{left\_y}(q)\gets\\{y\_coord}(r)$; \ {\bf end};
+
+\bugonpage D194, lines 8--11 from the bottom (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{right\_y}(r)<\\{y\_coord}(r)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{right\_y}(r)\gets\\{y\_coord}(r)$; \
+{\bf if\/} $\\{left\_y}(q)<\\{y\_coord}(r)$ {\bf then}
+$\\{left\_y}(q)\gets\\{y\_coord}(r)$; \ {\bf end};
+
+\bugonpage D195, lines 3--9 of section 425 (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{y\_coord}(s)<\\{y\_coord}(r)$ {\bf then}
+ $\\{y\_coord}(s)\gets\\{y\_coord}(r)$\par\noindent\hskip10pt
+{\bf else if\/} $\\{y\_coord}(s)>\\{dest\_y}$ {\bf then}
+ $\\{y\_coord}(s)\gets\\{dest\_y}$;\par\noindent\hskip10pt
+{\bf if\/} $\\{x\_coord}(r)+\\{y\_coord}(s)>\\{dest\_x}+\\{dest\_y}$
+{\bf then} $\\{y\_coord}(s)\gets\\{dest\_x}+\\{dest\_y}-\\{x\_coord}(r)$;\par
+\noindent\hskip10pt
+{\bf if\/} $\\{left\_y}(s)>\\{y\_coord}(s)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{left\_y}(s)\gets\\{y\_coord}(s)$; \
+{\bf if\/} $\\{right\_y}(r)>\\{y\_coord}(s)$ {\bf then}
+$\\{right\_y}(r)\gets\\{y\_coord}(s)$; \ {\bf end};\par\noindent\hskip10pt
+{\bf if\/} $\\{right\_y}(s)<\\{y\_coord}(s)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{right\_y}(s)\gets\\{y\_coord}(s)$; \
+{\bf if\/} $\\{left\_y}(q)<\\{y\_coord}(s)$ {\bf then}
+$\\{left\_y}(q)\gets\\{y\_coord}(s)$; \ {\bf end};
+
+\bugonpage D195, lines 3--7 from the bottom if section 425 (1/24/92)
+
+\ninepoint\noindent\hskip10pt
+{\bf if\/} $\\{right\_y}(s)<\\{y\_coord}(s)$ {\bf then}\par\noindent\hskip20pt
+{\bf begin} $\\{right\_y}(s)\gets\\{y\_coord}(s)$; \
+{\bf if\/} $\\{left\_y}(q)<\\{y\_coord}(s)$ {\bf then}
+$\\{left\_y}(q)\gets\\{y\_coord}(s)$; \ {\bf end};
+
+\bugonpage D289, lines 9 and 10 (11/1/91)
+
+\ninepoint\noindent\hskip20pt
+$p\gets\\{dep\_list}(p)$; \ $r\gets\\{inf\_val}$;\par\noindent\hskip20pt
+{\bf repeat if\/} $\\{value}(\\{info}(p))\ge\\{value}(r)$ {\bf then}\par
+
+\bugonpage D486, line 18 (11/1/91)
+
+\tenpoint\noindent
+The \\{label\_loc}
+and \\{label\_char} arrays have been set up to record all the
+starting addresses; we have\cutpar
+
+ % volume E
+\hsize=29pc
+\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}}
+
+
+ \bye
+
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.six b/Master/texmf-dist/source/generic/knuth/errata/errata.six
new file mode 100644
index 00000000000..ad7444d8600
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.six
@@ -0,0 +1,528 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting, 1990}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\tenpoint
+\noindent This is a list of all corrections made to {\sl Computers \&
+Typesetting}, Volumes A,~C, and E\null, between 30 September 1989 (when
+the revisions for \TeX\ Version 3.0 and \MF\ Version 2.0 were made) and
+December 31, 1990.
+Corrections made to the softcover version of {\sl The \TeX book\/} are
+the same as corrections to Volume~A\null. Corrections to the softcover
+version of {\sl The \slMF\kern1ptbook\/} are the same as corrections
+to Volume~C\null. Some of the corrections below have already been made in
+reprintings of the books. Hundreds of changes, too many to list here,
+have been made to Volumes B~and~D because of the upgrades to \TeX\ and
+\MF\null. Readers who need up-to-date information on the \TeX\ and
+\MF\ programs should refer to the |WEB| source files until new
+printings of Volumes B~and~D are issued. \looseness=-1
+
+ % volume A
+
+\bugonpage A99, line 4 from the bottom (2/22/90)
+
+\ninepoint\indent
+to be chosen because there was no feasible
+way to keep total demerits small.
+
+\bugonpage A124, lines 18--21 (9/5/90)
+
+\ninepoint\noindent
+Floating insertions can be accommodated
+as a special case of split insertions, by making each floating topinsert
+start with a small penalty, and by having
+zero as the associated |\floatingpenalty|; non-floating insertions
+like footnotes are accommodated by associating larger penalties with
+split insertions (see Appendix~B).
+
+\bugonpage A137, lines 2 and 3 from the bottom (11/9/90)
+
+{\eightssi
+\rightline{and you shouldn't even be reading this manual,}
+\rightline{which is undoubtedly all English to you.}
+}
+
+\bugonpage A141, line 15 from the bottom (10/18/90)
+
+\tenpoint\noindent
+Thus if you type `|$1\over2$|' (in a text) you get $1\over2$, namely style
+$S$ over style~$S'$;\cutpar
+
+\bugonpage A156, line 2 (11/18/89)
+
+\ninepoint
+Commands like |\mathchardef\alpha="010B| are used in
+Appendix~B to define\cutpar
+
+\bugonpage A165, lines 2--3 (8/13/90)
+
+\ninepoint
+ Type the formula $\bf\bar x^{\rm T}Mx={\rm0}\iff x=0$,
+using as few keystrokes as possible.
+\ (The first `0' is roman, the second is bold. The superscript `T' is roman.)
+
+\bugonpage A171, lines 24--26 (3/13/90)
+
+\ninepoint\noindent
+formula produces a result exactly equivalent to
+`|\left(|\<subformula>|\right)|', when the \<subformula> doesn't end
+with Punct, except that the {delimiters} are forced to
+be of the |\big| size regardless of the height and depth of the subformula.
+
+\bugonpage A193, lines 16--18 (12/2/89)
+
+\ninepoint\noindent
+line if you insert
+`^|\noalign||{|^|\break||}|'
+after the |\cr| for that line. You can prohibit {\sl all\/} breaks
+in an |\eqalignno| if you set ^|\interdisplaylinepenalty||=10000|; or you
+can enclose the whole works in a ^|\vbox|:
+
+\bugonpage A233, bottom 9 lines, and top three on next page (12/2/89)
+
+\danger The |\+| macro in Appendix~B works
+by putting the \<text> for each column that's followed by~|&|
+into an hbox as follows:
+\begindisplay
+|\hbox to |\<column width>|{|\<text>|\hss}|
+\enddisplay
+The ^|\hss| means that the text is normally flush left, and that it can
+extend to the right of its box. Since |\hfill| is ``more infinite'' than
+|\hss| in its ability to stretch, it has the effect of right-justifying or
+centering as stated above. Note that |\hfill| doesn't shrink, but |\hss|
+does; if the text doesn't fit in its column, it will stick out at the right.
+You could cancel the shrinkability of |\hss| by adding ^|\hfilneg|; then
+an oversize text would produce an overfull box.
+You could also center some text by putting `|\hss|' before it and just
+`|&|' after it; in that case the text would be allowed to extend to the
+left and right of its column.
+ The last column of a |\+|~line (i.e., the column entry that is
+followed by |\cr|) is treated differently: The
+\<text> is simply put into an hbox with its natural~width.\looseness=-1
+
+\bugonpage A254, line 5 from the bottom (10/5/89)
+
+\ninepoint\noindent
+|\vsize| hasn't changed, and if all insertions have been
+held in place, the same page break\cutpar
+
+\bugonpage A286, lines 30--32 (3/13/90)
+
+\ninepoint\noindent
+reading and expanding this \cstok{par}
+token, \TeX\ will see the \<vertical command> token again. \ (The current
+meaning of the control sequence ^|\par| will be used; \cstok{par} might no
+longer stand for \TeX's |\par| primitive.)
+
+\bugonpage A290, lines 12--13 (3/24/90)
+
+\ninepoint\noindent
+simply a single Ord atom without subscripts or superscripts,
+or an Acc whose nucleus is an Ord, the
+enclosing braces are effectively removed.
+
+\bugonpage A317, line 17 (5/17/90)
+
+\ninepoint
+|\pretolerance=9999 \tolerance=9999 \parindent=0pt|
+
+\bugonpage A321, lines 16--17 (8/13/90)
+
+\ninepoint\noindent
+\hbox to\parindent{\bf\hss18.6.\enspace}\ignorespaces
+|$\bf\bar x^{\rm T}Mx={\rm0}\iff x=0$|. \ (If you typed a space between
+|\rm| and~|0|, you wasted a keystroke; but don't feel guilty about it.)
+
+\bugonpage A340, nonblank line 11 (3/13/90)
+
+\tenpoint\noindent
+|\topglue 1in % This makes an inch of blank space (1in=2.54cm).|
+
+\bugonpage A342, line 6 (3/13/90)
+
+\tenpoint\noindent
+|\topglue| but not |\hglue|. It does not
+illustrate |\raggedright| setting of para-\cutpar
+
+\bugonpage A346, lines 20--21 (12/3/89)
+
+\ninepoint\noindent
+streams used by ^|\read| and ^|\write|, to math
+^{families} used by ^|\fam|, to sets of hyphenation rules used by
+^|\language|, and to insertions (which require
+^|\box|, ^|\count|, ^|\dimen|, and ^|\skip| registers all having the
+same number).
+
+\bugonpage A346, line 20 from the bottom (12/3/89)
+
+\ninepoint\noindent
+manent value. These macros use registers
+|\count10| through |\count20| to hold the\cutpar
+
+\bugonpage A346, lines 8--13 from the bottom (12/3/89)
+
+\ninepoint\noindent
+number was allocated. The inside story of how allocation is actually performed
+should be irrelevant when the allocation macros are used at a higher level;
+you mustn't assume that |plain.tex| really does allocation in any
+particular way.
+\beginlines
+|\count10=22 % this counter allocates \count registers 23, 24, 25, ...|
+\endgroup
+
+\bugonpage A347, lines 2--5 (12/3/89)
+
+\ninepoint{\parindent=0pt
+|\count19=0 % this counter allocates language codes 1, 2, 3, ...|\parbreak
+|\count20=255 % this counter allocates insertions 254, 253, 252, ...|\parbreak
+|\countdef\insc@unt=20 % nickname for the insertion counter|\parbreak
+|\countdef\allocationnumber=21 % the most recent allocation|\parbreak
+|\countdef|^|\m@ne||=22 \m@ne=-1 % a handy constant|\par}
+
+\bugonpage A347, new line after former line 17 (12/3/89)
+
+\ninepoint\noindent
+|\outer\def|^|\newlanguage||{\alloc@9\language\chardef\@cclvi}|
+
+\bugonpage A352, new line before line 6 from the bottom (3/13/90)
+
+\ninepoint\noindent
+|\def\topglue{\nointerlineskip \vglue-\topskip \vglue} % for top of page|
+
+\bugonpage A355, line 8 from the bottom (12/3/89)
+
+\ninepoint\noindent
+| \noindent{\bf#1.\enspace}{\sl#2\par}%|
+
+\bugonpage A363, lines 8--9 from the bottom (12/8/89)
+
+{\ninepoint\parindent=0pt
+| \if@mid \dimen@=\ht0 \advance\dimen@ by\dp\z@ |%
+ |\advance\dimen@ by12\p@|\parbreak%
+| \advance\dimen@ by\pagetotal \advance\dimen@ by-\pageshrink|
+\par}
+
+\bugonpage A375, line 27 (10/30/89)
+
+\ninepoint\noindent
+depending on whether or not |\t|~contains
+an asterisk. \ (Do you see why?) \ And here's\cutpar
+
+\bugonpage A393, lines 3--5 from the bottom (12/3/89)
+
+\ninepoint
+|\hskip-.17em plus-3em minus.11em|\par
+|\vadjust{}\penalty10000|\par
+|\leaders\copy\dbox\hskip3.3\wd\dbox plus1fil minus.3\wd\dbox|
+
+\bugonpage A444, line 4 (3/13/90)
+
+\ninepoint\noindent
+Shift box~$x$ down by ${1\over2}\bigl(h(x)-d(x)\bigr)
+-a$, where $a=\sigma_{22}$, so that the operator character\cutpar
+
+\bugonpage A450, line 8 (12/3/89)
+
+\def\\#1{$_{\kern\scriptspace#1}$}
+\ninepoint\indent
+{\qquad\tt\\0h\\0e\\0n\\5a\\0t\\0 \\1n\\0a\\0 \\0n\\2a\\0t\\0
+ \\1t\\0i\\0o\\0 \\2i\\0o\\0 \\0o\\2n\\0}
+
+\bugonpage A450, line 14 (12/3/89)
+
+\ninepoint
+{\tt.\\0h\\0y$_3$p\\0h\\0e\\2n\\5a\\4t\\2i\\0o\\2n\\0.}
+
+\bugonpage A450, lines 19 and 20 (12/3/89)
+
+\ninepoint\vskip-10pt
+\begindisplay
+\tt\\0o\\2n\\0
+\\0o\\0n\\1c\\0
+\\1c\\0a\\0
+\\1n\\0a\\0
+\\0n\\2a\\0t\\0
+\\1t\\0i\\0o\\0
+\\2i\\0o\\0
+\\0o\\2n\\0
+\enddisplay
+and this yields `{\tt\\0c\\0o\\2n\\1c\\0a\\0t\\0e\\1n\\2a\\1t\\2i\\0o\\2n\\0}',
+i.e., `|con-cate-na-tion|'.
+
+\bugonpage A455, last lines before the quotes (11/30/89)
+
+\ninepoint\noindent
+sit yourself (even in restricted horizontal mode) by saying
+^|\setlanguage|\<number>;\break
+ this changes the current language but it
+does not change |\language|. Each what-\break
+sit records the current
+|\lefthyphenmin| and |\righthyphenmin|.
+
+\bugonpage A467, right column (12/3/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\hfilneg|, 72, 100, 233, 283, 285, 290, 397.
+
+\bugonpage A468, right column (12/2/89)
+
+\eightpoint
+|\interdisplaylinepenalty|, {\it193}, 349, 362.
+
+\bugonpage A469, left column (12/3/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\language| (hyphenation method), 273, 346, $\underline{455}$.
+
+\bugonpage A469, right column (10/30/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\lefthyphenmin|, 273, {\it364}, $\underline{454}$, 455.
+
+\bugonpage A472, left column (12/3/89)
+
+\eightpoint
+|\newlanguage|, 346, $\underline{347}$.
+
+\bugonpage A476, left column (10/30/89)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+|\righthyphenmin|, 273, {\it364}, $\underline{454}$, 455.
+
+\bugonpage A479, new entry (3/13/90)
+
+\eightpoint
+|\topglue|, {\it340}, $\underline{352}$.
+
+\bugonpage A480, right column (3/13/90)
+
+\eightpoint
+|\vglue|, $\underline{352}$, {\it408}.
+
+\bugonpage A483, the Providence lines (10/8/89)
+
+\noindent[Change the first one to
+\begintt
+Providence RI 02940\kern.05em-9506, USA.
+\endtt
+Then the second one will be
+\begindisplay
+Providence RI 02940\kern.05em-9506, USA.
+\enddisplay
+The second line will also appear on page C361.]
+
+ % volume B
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+
+\bugonpage C11, replacement for second quotation at bottom of page (9/27/90)
+
+\begingroup
+ \eightpoint \let\tt=\ninett
+ \baselineskip 10pt
+ \parfillskip \z@
+ \interlinepenalty 10000
+ \leftskip \z@ plus 40pc minus \parindent
+ \let\rm=\eightss \let\sl=\eightssi
+ \everypar{\sl}
+ \def\par{\ifhmode\/\endgraf\fi}\obeylines
+To anyone who has lived in a modern American city (except Boston)
+at least one of the underlying ideas of ^{Descartes}' analytic geometry
+will seem ridiculously evident. Yet, as remarked,
+it took mathematicians all of two thousand years
+to arrive at this simple thing.
+\author ERIC TEMPLE ^{BELL}, {\sl Mathematics: Queen and Servant of %
+ Science\/} (1951) % p123
+
+\endgroup
+
+\bugonpage C220, top line (3/13/90)
+
+\ninepoint\noindent
+modes you get into by hitting
+`|S|', `|R|', or `|Q|', respectively, in response to error messages\cutpar
+
+\bugonpage C252, line 16 (3/13/90)
+
+\ninepoint\indent
+| for i:=1 upto n_windows: display blankpicture inwindow i; endfor|
+
+\bugonpage C262, lines 19--21 (11/9/90)
+
+\ninepoint\noindent
+for commonly occurring idioms.
+For example, `{\bf stop} |"hello"|' displays `|hello|' on the terminal and waits
+until \<return> is typed.
+\beginlines
+|def |^|upto|| = step 1 until enddef; def |^|downto|| = step -1 until enddef;|
+\endgroup
+
+\bugonpage C264, lines 4--6 from the bottom (3/24/90)
+
+\ninepoint\noindent
+|vardef |^|counterclockwise|| primary c =|\par\noindent
+| if turningcheck>0:|\par\noindent
+| interim |^|autorounding||:=0;|\par\noindent
+| if |^|turningnumber|| c <= 0: reverse fi fi c enddef;|
+
+\bugonpage C306, line 6 (3/13/90)
+
+\ninepoint\noindent
+| ligtable "'": "'" =: oct"042", % close quotes|
+
+\bugonpage C309, second line from bottom (11/18/89)
+
+\ninepoint\noindent
+| define_whole_vertical_blacker_pixels(vair,slab,| $\cdots$ |);|
+
+\bugonpage C315, line 9 from the bottom (1/2/90)
+
+\ninepoint\noindent
+units of printer's points):
+
+\bugonpage C329, line 25 (12/29/90)
+
+\ninepoint\noindent
+which can be used to specify a nonstandard file area
+or directory name for the gray\cutpar
+
+\bugonpage C337, line 4 from the bottom (1/7/90)
+
+\ninepoint\noindent
+|\def\startfont{\font\testfont=\fontname \spaceskip=0pt|
+
+\bugonpage C347, left column (9/27/90)
+
+\eightpoint\noindent
+Bell, Eric Temple, 11.
+
+\bugonpage C349, left column (9/27/90)
+
+\eightpoint\noindent
+Descartes, Ren\'e, 6, 11, 19.
+
+\bugonpage C356, right column (9/27/90)
+
+\eightpoint\noindent
+[remove the entry for Rex Stout.]
+
+\bugonpage C358, right column (9/27/90)
+
+\eightpoint\noindent
+[remove the entry for Nero Wolfe.]
+
+ % Volume D
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+ % volume E
+\hsize=29pc
+\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}}
+
+\bugonpage Exiii, replacement for last four lines (4/30/90)
+
+\textindent{\bull}``AMS Euler---A new typeface for mathematics''
+ by Donald~E. Knuth
+and Hermann Zapf, {\sl Scholarly Publishing\/ \bf21} (1989), 131--157.
+\ {\it The story of a design project that helps bridge the gulf between
+mathematics and art.}
+
+\smallskip
+\textindent{\bull}``Meta-Marks:
+ Preliminary studies for a Pandora's Box of shapes''
+by Neenie Billawala, Stanford Computer Science report 1259 (Stanford,
+California, July 1989), 132~pp.
+\ {\it Lavishly illus\-trated studies in parameter variation,
+leading to the design of a new typeface called Pandora.}
+
+
+
+\bugonpage E325, line 13 (3/13/90)
+
+\ninepoint\noindent
+{\bf if} \\{serifs}: $x_{3r}=\max(x_{1r},{\rm hround}(x_1+.5\\{dot\_diam}
+ -.2\\{jut})-.5\\{tiny})$\par\noindent
+{\bf else}: $x_3=x_1-.5$ {\bf fi};
+
+\bugonpage E483, line 4 (3/13/90)
+
+\ninepoint
+\rightline{\% Character codes \oct{000}--\oct{100} and \oct{133}--\oct{177}
+ are generated.}
+
+\bugonpage E544, line 5 (3/13/90)
+
+\ninepoint\noindent
+\hskip 3em\vdots\hskip2em\raise2pt\hbox{(the rest of the
+ program for `$\gamma$' in |greekl| comes here)}
+
+\bugonpage E557, line 9 (3/13/90)
+
+\ninepoint
+\rightline{\sl`Nevermore---Ah nevermore.'\thinspace''}
+
+\bugonpage E558, line 21 (3/13/90)
+
+\eightpoint\noindent
+|Clasp a rare and radiant maiden whom the angels name Lenore."|
+
+\bugonpage E570, lines 27--28 look better with proper skewchars (3/13/90)
+
+\begingroup
+\tenpoint\bf
+\textfont0=\tenbf \scriptfont0=\sevenbf
+\font\boldi=cmmib10 \font\boldsy=cmbsy10
+\skewchar\boldi='177 \skewchar\boldsy='60
+\textfont1=\boldi
+\textfont2=\boldsy
+\noindent Here's some bold 10-point math:
+${\hat A}^\Gamma_0
++{\check B}^\Delta_1
+-{\tilde C}^\Theta_2
+\times{\acute D}^\Lambda_3
+/{\grave E}^\Xi_4
+\oplus{\dot F}^\Pi_5
+\ominus{\ddot G}^\Sigma_6
+\otimes{\breve H}^\Phi_7
+\oslash{\bar I}^\Psi_8
+\odot{\vec J}^{\,\Omega}_9$.
+\endgroup
+
+ \bye
+
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.ten b/Master/texmf-dist/source/generic/knuth/errata/errata.ten
new file mode 100644
index 00000000000..9efa2a3e503
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.ten
@@ -0,0 +1,1289 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\def\curl{\mathop{\rm curl}}
+\def\cycle{{\rm cycle}}\indent
+\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}}
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting, 2000}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\tenpoint
+\noindent This is a list of all substantial corrections made to {\sl Computers
+\& Typesetting\/} from the mid-1990s until the first ``Millennium edition'' was
+published at the end of the year 2000.
+Corrections made to the softcover version of {\sl The \TeX book\/} are
+the same as corrections to Volume~A\null. Corrections to the softcover
+version of {\sl The \slMF\kern1ptbook\/} are the same as corrections
+to Volume~C\null. Changes to the mini-indexes
+and master indexes of Volumes B, D, and~E are not shown here unless they are
+not obviously derivable from what has been shown.
+\looseness=-1
+
+ % volume A
+
+\bugonpage A3, line 14 {(in certain printings only)} (9/6/00)
+
+\tenpoint\noindent
+that
+looks like {\tt\char'15} or {\tt\char'23}.
+
+\bugonpage A8, lines 14 and 15 (9/6/00)
+
+\tenpoint\noindent
+that is not to be ignored. Notice that |\|\] is a control
+sequence of the second kind, namely a control symbol, since there is a
+single nonletter (\]) following\cutpar
+
+\bugonpage A43, line $-17$ (8/4/98)
+
+\tenpoint\noindent
+into your manuscript, if the |b|-key on your keyboard is broken. \
+(An optional\cutpar
+
+\bugonpage A88, lines 14, 16, 18, and 21 (8/12/00)
+
+\tenpoint\noindent
+[Insert two blank spaces between `{\tt blank space}' and `{\tt\char`\}}']
+
+\bugonpage A96, lines 9 and 10 (8/6/98)
+
+\ninepoint\indent
+Before 1998, some ^{German} words changed their spelling
+when split between lines. For example, `backen' became `bak-ken'
+and `Bettuch' sometimes became `Bett-\cutpar
+
+\bugonpage A107, line 2 (8/5/98)
+
+\ninepoint
+\line{\indent\spaceskip=.4em minus.35em
+ually, you might be tempted to set
+|\tolerance=10000|; this allows arbitrarily bad}
+
+\bugonpage A115, line $-19$ (8/5/98)
+
+\ninepoint\noindent
+If there's no room for such an insertion on this page, \TeX\
+will insert it at the top of\cutpar
+
+\bugonpage A119, line 15 (8/5/98)
+
+\ninepoint\noindent
+of\/ |\dimen3|, assuming that |\dimen3| is positive.
+
+\bugonpage A182, middle line of the displayed commutative diagram (12/3/99)
+
+\ninepoint
+\def\mapright#1{\smash{
+ \mathop{\longrightarrow}\limits^{#1}}}
+$$\matrix{
+ 0&\mapright{}&{\cal O}_C&\mapright\pi&
+ \pi_*{\cal O}_D&\mapright\delta&
+ R^1f_*{\cal O}_V(-D)&\mapright{}&0\cr}$$
+
+\bugonpage A233, line $-2$ (8/5/98)
+
+\ninepoint\noindent
+could avoid this by adding |\hskip| |0pt| |minus-1fil|; then
+an oversize text would\cutpar
+
+\bugonpage A277, line 1 (8/5/98)
+
+\ninepoint\indent
+\<code assignment>\is\<codename>\<8-bit number>\<equals>\<number>
+
+\bugonpage A277, line $-11$ (8/5/98)
+
+\ninepoint\noindent
+[Move this line, which defines \<at clause>, up to the top of the page.]
+
+\bugonpage A289, line 24 (2/3/97)
+
+\ninepoint\indent
+\<math field>\is\<filler>\<math symbol>\alt\<filler>|{|\<math mode material>|}|
+
+\bugonpage A309, line 3 (8/12/97)
+
+\ninepoint
+\ansno8.4:
+|$|$_{3}$ |x|$_{11}$ |^|$_7$ |2|$_{12}$ |$|$_{3}$ |~|$_{13}$ \]$_{10}$
+\cstok{TeX} |b|$_{11}$ |v|$_{11}$ \]$_{10}$. The final space comes from
+the\cutpar
+
+\bugonpage A313, line 24 (9/19/00)
+
+\ninepoint\noindent
+stands for `|\par\vfill...|', so the next three commands are
+
+\bugonpage A313, line 27 (9/19/00)
+
+\ninepoint\indent
+|{vertical mode: \par}|
+
+\bugonpage A318, lines 12 and 13 (8/5/98)
+
+\ninepoint\noindent\hbox to\parindent{\hfil\bf15.8.\enspace}%
+|\advance\dimen2 by\ifnum\dimen2<0 -\fi.5\dimen3|\parbreak
+|\divide\dimen2 by\dimen3 \multiply\dimen2 by\dimen3|
+
+\bugonpage A325, line 22 (12/3/99)
+
+\ninepoint
+| 0&\mapright{}&{\cal O}_C&\mapright\pi&|
+
+\bugonpage A337, line 3 from the bottom (9/6/00)
+
+\rightline{\eightss DONALD E. KNUTH, {\eightssi The \TeX book\/} (1984)}
+
+\bugonpage A348, lines 14--16 (8/6/98)
+
+\ninepoint\noindent
+| \def\@if#1{true}{\let#1=\iftrue}%|\par\noindent
+| \expandafter\expandafter\expandafter|\par\noindent
+| \def\@if#1{false}{\let#1=\iffalse}%|\par\noindent
+
+\bugonpage A356, line 21 (8/6/98)
+
+\ninepoint\noindent
+|\def\AA{\leavevmode\setbox0=\hbox{!}\dimen@=\ht0 \advance\dimen@ by-1ex|
+
+\bugonpage A356, lines 9--21 from the bottom (8/6/98)
+
+\ninepoint
+{\parindent=0pt
+|\def\S{\mathhexbox278} \def\P{\mathhexbox27B} \def\Orb{\mathhexbox20D}|\par
+\smallskip
+|\def\oalign#1{\leavevmode\vtop{\baselineskip0pt \lineskip.25ex|\par
+| \ialign{##\crcr#1\crcr}}} \def\o@lign{\lineskiplimit=0pt \oalign}|\par
+|\def\ooalign{\lineskiplimit=-\maxdimen \oalign} % chars over each other|\par
+|{\catcode`p=12 \catcode`t=12 \gdef\\#1pt{#1}} \let\getf@ctor=\\|\par
+|\def\sh@ft#1{\dimen@=#1 \kern\expandafter\getf@ctor\the\fontdimen1\font|\par
+| \dimen@} % kern by #1 times the current slant|\par
+|\def\d#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-1ex}.\hidewidth}}}|\par
+|\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}%|\par
+| \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}}|\par
+|\def\c#1{{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent'30 #1%|\par
+| \else\ooalign{\unhbox0\crcr\hidewidth\char'30\hidewidth}\fi}}|\par
+|\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\Orb}}}|\par
+}
+
+\bugonpage A364, line 9 (8/9/98)
+
+\ninepoint\noindent
+|\def\makefootline{\baselineskip=24pt \lineskiplimit=0pt|\par\noindent
+| \line{\the\footline}}|
+
+
+\bugonpage A364, line 4 from the bottom (8/6/98)
+
+\ninepoint\noindent
+|\def\fmtversion{3.1415926} % identifies the current format|
+
+\bugonpage A447, bottom line (6/3/98)
+
+\rightline{\eightss--- JOHN SMITH, {\eightssi The Printer's Grammar\/}\enspace
+ (1755)}
+
+\bugonpage A450, lines 11--13 (4/12/98)
+
+\def\\#1{$_{\kern\scriptspace#1}$}%
+\tenpoint\noindent
+between `|e|' and `|n|' there are five relevant values
+in this case (2~from {\tt\\0h\\0e\\2n\\0},
+0~from {\tt\\0h\\0e\\0n\\0a\\4},
+0~from {\tt\\0h\\0e\\0n\\5a\\0t\\0},
+1~from {\tt\\1n\\0a\\0},
+and 0~from {\tt\\0n\\2a\\0t\\0}); the maximum of these is~2.
+The result of all the maximizations is
+
+\bugonpage A453, line 6 (8/5/98)
+
+\ninepoint\noindent
+tion dictionary, except that plain \TeX\ blocks hyphens after the
+very first letter or be-\cutpar
+
+\bugonpage A458, left column (9/6/00)
+
+\eightpoint
+\leavevmode{\tt\rlap<\char`\_}, 45, 135, 368--369; {\sl see also\/} |\le|.\par
+\leavevmode{\tt\rlap/=}, 45, 135, 368--369; {\sl see also\/} |\ne|.\par
+\leavevmode{\tt\rlap>\char`\_}, 45, 135, 368--369; {\sl see also\/} |\ge|.
+
+\bugonpage A458, right column (7/5/99)
+
+\eightpoint
+{\tt\char'13} and {\tt\char'14}, 135, 343, 368--369, 429;\par
+al-Khw\^arizm\^\i, abu `Abd All\^ah Mu\d{h}ammad ibn M\^us\^a, 53.
+
+\bugonpage A464, right column (8/6/98)
+
+\eightpoint
+\newbox\astbox \setbox\astbox=\hbox to0pt{\hss\lower1pt\hbox{*}}
+\def\prim#1{\par\indent\copy\astbox{\tt\char`\\#1}}
+\prim{edef}, {\it215--216}, 275, {\it328}, {\it373--374}.
+
+\bugonpage A466, right column (8/8/98)
+
+\eightpoint
+|\getfactor|, {\it356}, $\underline{375}$, {\it398}.
+
+\bugonpage A467, right column (8/5/98)
+
+\eightpoint
+\prim{hfilneg}, 72, 100, 283, 285, 290, 397.
+
+\bugonpage A469, left column (8/5/98)
+
+\eightpoint
+italic type, 13--14, 100, 127, 165, 409, 428, 430.
+
+\bugonpage A469--A477, passim (5/13/98)
+
+\eightpoint\noindent
+Add page 272 to the index entries for |\lastskip|, |\pagedepth|,
+|\pagefilllstretch|,\hfil\break |\pagefillstretch|, |\pagefilstretch|,
+|\pagegoal|, |\pageshrink|, |\pagestretch|, |\pagetotal|,\hfil\break
+|\parshape|, |\prevdepth|, and |\spacefactor|.\par
+\smallskip\noindent Also change `369' to `370' in the index entries for
+|\lbrack|, |\lq|, |\rbrack|, |\rq|, |\sb|, and |\sp|.\par
+\smallskip\noindent Also change `Luckombe, Philip' to `Smith, John'.\par
+
+\bugonpage A472, right column (8/6/98)
+
+\eightpoint
+\prim{noexpand}, $\underline{209}$, $\underline{213}$, 215, 216,
+ {\it377}, {\it424}.
+
+\bugonpage A473, left column (8/6/98)
+
+\eightpoint
+|\Orb| ( \Orb\ ), $\underline{356}$.
+
+ % volume B
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage Bix, line 16 (1/16/00)
+
+\tenpoint\textindent{\bull}``Word hy-phen-a-tion by com-put-er''
+by Franklin Mark Liang, Stan-\cutpar
+
+\bugonpage Bxiv, line 13 (4/19/96)
+
+\tenpoint\noindent preprocessor converts these into numeric constants that are
+256 or more. This\cutpar
+
+\bugonpage Bxiv, line $-1$ (4/19/96)
+
+\ninepoint\noindent This file contains one line per string, starting with
+string number 256, then number 257,\cutpar
+
+\bugonpage Bxv, lines 10 and 11 (4/19/96)
+
+\ninepoint\noindent
+In this case, occurrences of |""| in the |WEB| program will be replaced by
+256; occurrences of |"This longer string"| will be replaced by 257.
+The symbol |@$| stands for the numeric\cutpar
+
+\hsize=35pc
+\bugonpage B2, line $-10$ (3/8/95)
+
+\def\RQ/{{\char'23}} % right quote in a string
+\ninepoint\noindent\quad
+{\bf define} $\\{banner}\equiv\hbox{\tt\RQ/This\]is\]TeX,\]%
+ Version\]3.14159\RQ/}$\quad$\{\,$printed when \TeX\ starts$\,\}$
+
+\bugonpage B169, line 13 (9/22/95)
+
+\tenpoint\noindent
+something in a ``muskip'' register, or to one of the
+three parameters \hbox{\tt\char`\\thinmuskip},
+\hbox{\tt\char`\\medmuskip},\cutpar
+
+\bugonpage B221, line 9 (3/4/95)
+
+\ninepoint\noindent
+\quad{\bf define} $\\{non\_address}=0$\quad
+$\{\,$a spurious \\{bchar\_label}$\,\}$
+
+\bugonpage B221, line 17 (3/4/95)
+
+\ninepoint\noindent
+\\{font\_params}: {\bf array}[\\{internal\_font\_number}] {\bf of}
+ \\{font\_index};\quad$\{\,$how many font parameters are present$\,\}$
+
+\bugonpage B256, insert new line 12 before the bottom (3/7/95)
+
+\ninepoint\noindent\qquad
+\\{glue\_temp}: \\{real};\quad $\{\,$glue value before rounding$\,\}$
+
+\bugonpage B258, line 11 before the bottom becomes four lines (3/7/95)
+
+\ninepoint\noindent
+{\tenbf 625.}\quad{\bf define} $\\{billion}\equiv
+ \\{float\_constant}(1000000000)$\par\noindent
+{\bf define} $\\{vet\_glue}(\hbox{\tt\char`\#})\equiv
+ \\{glue\_temp}\gets\hbox{\tt\char`\#}$;\par\noindent
+\qquad{\bf if\/} $\\{glue\_temp}>\\{billion}$
+ {\bf then} $\\{glue\_temp}\gets\\{billion}$\par\noindent
+\qquad{\bf else if\/} $\\{glue\_temp}<-\\{billion}$
+ {\bf then} $\\{glue\_temp}\gets-\\{billion}$\smallskip\noindent
+$\langle\,$Move right or output leaders{\sevenrm\kern.5em625}$\,\rangle\equiv$
+
+\bugonpage B258, lines 3--6 from the bottom (3/7/95)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin} $\\{vet\_glue}(\\{float}(\\{glue\_set}
+ (\\{this\_box}))*\\{stretch}(g))$;\par\noindent
+\qquad\qquad$\\{rule\_wd}\gets\\{rule\_wd}+
+ \\{round}(\\{glue\_temp})$;\par\noindent
+\qquad\qquad{\bf end};\par\noindent
+\qquad\quad{\bf end}\par\noindent
+\qquad{\bf else if\/} $\\{shrink\_order}(g)=\\{g\_order}$
+ {\bf then}\par\noindent
+\qquad\quad{\bf begin} $\\{vet\_glue}(\\{float}(\\{glue\_set}
+ (\\{this\_box}))*\\{shrink}(g))$;\par\noindent
+\qquad\quad$\\{rule\_wd}\gets\\{rule\_wd}-\\{round}(\\{glue\_temp})$;
+
+\bugonpage B260, line 13 from the bottom (6/26/93)
+
+\ninepoint
+\noindent\hskip10pt
+$\\{doing\_leaders}\gets\\{outer\_doing\_leaders}$; \
+$\\{dvi\_v}\gets\\{save\_v}$; \
+$\\{dvi\_h}\gets\\{save\_h}$; \
+$\\{cur\_v}\gets\\{base\_line}$;
+
+\bugonpage B261, insert new line after line 7 (3/7/95)
+
+\ninepoint\noindent\qquad
+\\{glue\_temp}: \\{real};\quad $\{\,$glue value before rounding$\,\}$
+
+\bugonpage B262, lines 3--6 from the bottom (3/7/95)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin} $\\{vet\_glue}(\\{float}(\\{glue\_set}
+ (\\{this\_box}))*\\{stretch}(g))$;\par\noindent
+\qquad\qquad$\\{rule\_ht}\gets\\{rule\_ht}+
+ \\{round}(\\{glue\_temp})$;\par\noindent
+\qquad\qquad{\bf end};\par\noindent
+\qquad\quad{\bf end}\par\noindent
+\qquad{\bf else if\/} $\\{shrink\_order}(g)=\\{g\_order}$
+ {\bf then}\par\noindent
+\qquad\quad{\bf begin} $\\{vet\_glue}(\\{float}(\\{glue\_set}
+ (\\{this\_box}))*\\{shrink}(g))$;\par\noindent
+\qquad\quad$\\{rule\_ht}\gets\\{rule\_ht}-\\{round}(\\{glue\_temp})$;
+
+\bugonpage B264, line 22 (6/26/93)
+
+\ninepoint
+\noindent\hskip10pt
+$\\{doing\_leaders}\gets\\{outer\_doing\_leaders}$; \
+$\\{dvi\_v}\gets\\{save\_v}$; \
+$\\{dvi\_h}\gets\\{save\_h}$; \
+$\\{cur\_h}\gets\\{left\_edge}$;
+
+\bugonpage B297, line 11 (3/7/95)
+
+\ninepoint\noindent
+\qquad $\\{width}(p)\gets\\{mu\_mult}(\\{width}(p))$; \
+ $\\{subtype}(p)\gets\\{explicit}$;
+
+\bugonpage B309, line 7 (9/22/95)
+
+\ninepoint\noindent
+\qquad {\bf if} $\\{cur\_style}<\\{text\_style}$ {\bf then}
+ \quad$\{\,$display style$\,\}$
+
+\bugonpage B356, line $-5$ (3/4/95)
+
+\tenpoint\noindent
+$\\{hang\_after}=1$, and $\\{hang\_indent}=0$.
+Note that if $\\{hang\_indent}=0$, the value of $\\{hang\_after}$ is\cutpar
+
+\bugonpage B388, bottom line (3/4/95)
+
+\ninepoint\noindent
+\quad {\bf if\/} $\\{bchar\_label}[\\{hf}]\ne\\{non\_address}$ {\bf then}\quad
+ $\{\,$put left boundary at beginning of new line$\,\}$
+
+\bugonpage B406, line 10 (5/1/98)
+
+\ninepoint\noindent
+\qquad$q\gets p$;\quad$\{\,$now node $q$ represents $p_1\ldots p_{l-1}\,\}$
+
+\bugonpage B503, line 12 (3/4/95)
+
+\tenpoint\noindent
+of the following procedure. (Exception: The tabskip
+glue isn't trapped while preambles are being scanned.)
+
+\bugonpage B529, line 12 (3/4/95)
+
+\ninepoint\noindent\quad
+\\{undump}(0)($\\{fmem\_ptr}-1$)(\\{bchar\_label}[$k$]);\par\noindent\quad
+\\{undump}(\\{min\_quarterword})(\\{non\_char})(\\{font\_bchar}[$k$]);
+
+\bugonpage B531, line 2 (11/23/98)
+
+\tenpoint\noindent
+from appearing again.
+
+\bugonpage B531, line 14 (11/23/98)
+
+\ninepoint\noindent
+\quad \\{print\_int}(\\{year}); \ \\{print\_char}(|"."|); \
+ \\{print\_int}(\\{month}); \ \\{print\_char}(|"."|); \
+ \\{print\_int}(\\{day});
+
+\bugonpage B534, insert new material between lines $-16$ and $-15$ (3/20/95)
+
+\ninepoint\noindent
+\quad {\bf while} $\\{input\_ptr}>0$ {\bf do}\par\noindent
+\qquad {\bf if\/} $\\{state}=\\{token\_list}$ {\bf then} \\{end\_token\_list}
+ {\bf else} \\{end\_file\_reading};
+
+\bugonpage B534, line $-2$ (3/20/95)
+
+\ninepoint\noindent
+\qquad $\\{temp\_ptr}\gets\\{cond\_ptr}$; \
+ $\\{cond\_ptr}\gets\\{link}(\\{cond\_ptr})$; \
+ $\\{free\_node}(\\{temp\_ptr},\\{if\_node\_size})$;
+
+\bugonpage B535, line 9 (3/20/95)
+
+\ninepoint\noindent
+\qquad {\bf begin init for} $c\gets\\{top\_mark\_code}$ {\bf to}
+ \\{split\_bot\_mark\_code} {\bf do}\par\noindent
+\qquad\qquad {\bf if\/} $\\{cur\_mark}[c]\ne\\{null}$ {\bf then}
+ $\\{delete\_token\_ref}(\\{cur\_mark}[c])$;\par\noindent
+\qquad\quad \\{store\_fmt\_file}; \ {\bf return}; \ {\bf tini}
+
+\bugonpage B581, Zabala entry (8/19/00)
+
+\eightpoint\noindent
+Zabala Salelles, Ignacio Andr\'es:\quad 2.
+
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+
+\bugonpage C17, lines 12 and 13 (9/6/00)
+
+\tenpoint
+{\bf draw} $z_4\{\curl0\}\to z_2\{z_3-z_4\}\to\{\curl0\}\,z_3$;\par
+{\bf draw} $z_4\{\curl2\}\to z_2\{z_3-z_4\}\to\{\curl2\}\,z_3$
+
+\bugonpage C23, line $-7$ (8/5/98)
+
+\ninepoint\indent
+$x_1=ss=w-x_5$;\quad$y_3-y_1=\\{ygap}$
+
+\bugonpage C69, line 17 (9/6/00)
+
+\ninepoint\noindent
+|"abra"|, while
+$p_1$ is `$(0,0)\to(3,3)$' and $p_2$ is `$(0,0)\to(3,3)\to\cycle$'.
+
+\bugonpage C94, line $-11$ (3/4/95)
+
+\ninepoint\noindent
+put
+are assumed to have square pixels. But if, for
+example, the {\bf mode\_def} sets\cutpar
+
+\bugonpage C107, line 15 (3/4/95)
+
+\ninepoint
+{\bf labels}$(1a,1b,2a,2b,3a,3b,4a,4b,\,${\bf range} 1 {\bf thru} 36);
+ \ {\bf endchar\/};
+
+\bugonpage C123, lines 21 and 22 (12/19/95)
+
+\chardef\circc=34 % rotated quartercircle
+\def\chapno{ 14} \exno=2 % for exercise 14.3!
+\dangerexercise
+Use a {\sl rotated\/} quarter-circle to produce `{\manual\circc}\kern1pt'
+in font position `{\tt c}'.
+
+\bugonpage C129, lines 6--17 (8/5/98)
+
+\ninepoint
+\beginsyntax
+<path primary>\is<pair primary>\alt<path variable>
+ \alt[(]<path expression>[)]
+ \alt[reverse]<path primary>
+ \alt[subpath]<pair expression>[of]<path primary>
+<path secondary>\is<pair secondary>\alt<path primary>
+ \alt<path secondary><transformer>
+<path tertiary>\is<pair tertiary>\alt<path secondary>
+<path expression>\is<pair expression>\alt<path tertiary>
+ \alt<path subexpression><direction specifier>
+ \alt<path subexpression><path join>[cycle]
+<path subexpression>\is<path expression>
+ \alt<path subexpression><path join><path tertiary>
+\endsyntax
+
+\bugonpage C134, line 8 (3/4/95)
+
+\ninepoint\noindent
+of~$p$; if $t\le 0$, precontrol~$t$ of~$p$ is~$z_0$.
+In particular, if $t$ is an integer, postcontrol~$t$ of~$p$\cutpar
+
+\bugonpage C139, illustration (8/5/98)
+
+\eightpoint\noindent
+[Remove the labels {\tt 2r}, {\tt 2}, and {\tt 2l} below their dots.]
+
+\bugonpage C143, top two lines (3/4/95)
+
+\danger In order to have some transform variables to work with, it's necessary
+to `^{hide}' some declarations and commands before giving the next |expr|s:
+
+\bugonpage C147, lines 14, 16, and 19 (9/6/00)
+
+\noindent
+[Change `{\bf savepen}' to `{\it savepen}'.]
+
+\bugonpage C147, line 2 from the bottom (9/6/00)
+
+\ninepoint\noindent
+{\manual lmnj}'s {\bf penrazor} stands for
+`{\bf makepen} $\bigl((-.5,0)\dashto(.5,0)\dashto \cycle\bigr)$',
+and {\bf pensquare}\cutpar
+
+\bugonpage C171, line 19 (8/5/98)
+
+\ninepoint\noindent
+(\<path tertiary>) and
+(\<pair tertiary>). A pair expression is not considered to\cutpar
+
+\bugonpage C172, line 14 (8/5/98)
+
+\tenpoint\noindent
+been evaluated and changed to numeric tokens before being
+substituted for~$s$.\cutpar
+
+\bugonpage C175, line 23 (1/11/88)
+
+\ninepoint\noindent
+expand into a sequence of tokens. \
+(The language {\eightrm{SIMULA67}} demonstrated that it is\cutpar
+
+\bugonpage C206, minor changes to lines $-19$ to $-5$ (3/4/95)
+
+\vbox to70mm{\ninepoint
+\beginlines \advance\hsize.71pt
+|Path at line 15, before subdivision into octants:|
+|(1.53745,9.05345)..controls (1.53745,4.00511) and (5.75409,-0.00049)|
+| ..(10.85147,-0.00049)..controls (16.2217,-0.00049) and (20.46255,4.51297)|%
+ \kern.5em\null
+| ..(20.46255,9.94655)..controls (20.46255,14.99713) and (16.23842,19.00049)|
+ \kern-.71pt
+| ..(11.13652,19.00049)..controls (5.77066,19.00049) and (1.53745,14.48491)|%
+ \kern.5em\null
+| ..cycle|
+\smallskip
+|Cycle spec at line 15, after subdivision:|
+|(1.53745,9.05345) % beginning in octant `SSE'|
+| ..controls (1.53745,6.58786) and (2.54324,4.371)|
+| ..(4.16621,2.74803) % segment 0|
+|% entering octant `ESE'|
+| ..controls (5.8663,1.04794) and (8.24362,-0.00049)|
+| ..(10.85147,-0.00049) % segment 0|
+|% entering octant `ENE'|
+\endlines
+$\ldots$ and so on; there are lots more numbers! What does this all mean?
+Well, the first segment of the curve, from $(1.53745,9.05345)$ to
+$(10.85147,-0.00049)$,
+has been\cutpar}
+
+\bugonpage C207, minor changes to lines 1--23 (3/4/95)
+
+\ninepoint
+\begingroup\let\HRULE=\hrule \def\hrule{\HRULE width\hsize}
+\beginlines
+|Cycle spec at line 15, after subdivision and autorounding:|
+|(2,9.05348) % beginning in octant `SSE'|
+| ..controls (2,6.50526) and (3.02194,4.22272)|
+| ..(4.6577,2.58696) % segment 0|
+|% entering octant `ESE'|
+| ..controls (6.2624,0.98225) and (8.45786,0)|
+| ..(10.85873,0) % segment 0|
+|% entering octant `ENE'|
+\endlines
+Point $(1.53745,9.05345)$, where there was a vertical tangent, has been
+rounded to $(2,9.05348)$; point $(10.85147,-.00049)$, where there was
+\vadjust{\goodbreak}%
+a horizontal tangent, has been rounded to $(10.85873,0)$; the intermediate
+control points have been adjusted accordingly. \ (Rounding of $x$~coordinates
+has been done separately from $y$~coordinates.) \ Finally, with
+$\\{autorounding}=2$, additional adjustments are made so that the
+$45^\circ$ transition point will occur at what \MF\ thinks is a good spot:
+\beginlines
+|Cycle spec at line 15, after subdivision and double autorounding:|
+|(2,9.05348) % beginning in octant `SSE'|
+| ..controls (2,6.6761) and (3.07103,4.42897)|
+| ..(4.78537,2.71463) % segment 0|
+|% entering octant `ESE'|
+| ..controls (6.46927,1.03073) and (8.62749,0)|
+| ..(10.85873,0) % segment 0|
+|% entering octant `ENE'|
+\endlines
+(Notice that $4.78537+2.71463=7.50000$; when the slope
+is~$-1$ at a transition point\cutpar
+\endgroup
+
+\bugonpage C210, line $-7$ (8/5/98)
+
+\ninepoint\indent\qquad\alt\<numeric token primary>
+
+\bugonpage C210, line $-2$ (8/5/98)
+
+\ninepoint\indent\<numeric token primary>\is\<numeric token>\thinspace
+{\tt/}\thinspace\<numeric token>
+
+\bugonpage C211, line 16 (8/5/98)
+
+\ninepoint\indent\qquad\alt\<numeric token primary not followed by
+{\tt+} or {\tt-} or a numeric token>
+
+\bugonpage C213, lines 17--27 (8/5/98)
+
+\ninepoint
+\beginsyntax
+<path primary>\is<pair primary>\alt<path variable>\alt<path argument>
+ \alt[(]<path expression>[)]
+ \alt[begingroup]<statement list><path expression>[endgroup]
+ \alt[makepath]<pen primary>\alt[makepath]<future pen primary>
+ \alt[reverse]<path primary>
+ \alt[subpath]<pair expression>[of]<path primary>
+<path secondary>\is<pair secondary>\alt<path primary>
+ \alt<path secondary><transformer>
+<path tertiary>\is<pair tertiary>\alt<path secondary>
+<path subexpression>\is<path expression>
+ \alt<path subexpression><path join><path tertiary>
+\endsyntax
+
+\bugonpage C213, line $-4$ (8/5/98)
+
+\ninepoint\indent
+\<path expression>\is\<pair expression>\alt\<path tertiary>
+\endsyntax
+
+\bugonpage C234, line 6 (9/6/00)
+
+\ninepoint\noindent
+line~$z_1\to z_5$ that bisects $z_4\to z_2$, so it starts out in a
+south-by-southwesterly direction;\cutpar
+
+\bugonpage C246, line 5 of answer 14.15 (8/5/98)
+
+\ninepoint\indent
+\qquad/ length(postcontrol $t$ of $p$ $-$ point $t$ of $p$) {\bf enddef\/};
+
+\bugonpage C246, line 10 of answer 14.15 (8/5/98)
+
+\ninepoint\indent
+\qquad/ length(precontrol $t$ of $p$ $-$ point $t$ of $p$) {\bf enddef\/};
+
+\bugonpage C252, line $-6$ (8/5/98)
+
+\ninepoint\noindent
+$h+o$ and $\\{bot}\,y_4=-o$, so nothing needs to be done there.
+We should, however, say
+
+\bugonpage C257, large display on line 5 (3/4/95)
+
+\def\bb{$\,\left\{\vcenter\bgroup\halign\bgroup\hfil##\hfil\cr}
+\def\ee{\crcr\egroup\egroup\right\}\,$}
+\tenpoint\noindent
+\bb|boolean|\cr|numeric|\cr|pair|\cr|path|\cr
+|pen|\cr|picture|\cr|string|\cr|transform|\ee\<expression>; \
+\bb\<boolean>\cr\<numeric>\cr\<pair>\cr\<string>\cr\<transform>\ee
+ \bb|<|\cr|<=|\cr|=|\cr|<>|\cr|>=|\cr|>|\ee
+ \bb\<boolean>\cr\<numeric>\cr\<pair>\cr\<string>\cr\<transform>\ee;
+
+\bugonpage C261, line $-15$ (8/5/98)
+
+\tenpoint\textindent\bull {\it Hacks:\/} \ |gobble|, |gobbled|, |killtext|; \
+|capsule_def|; \ |numtok|.
+
+\bugonpage C286, line 15 (8/5/98)
+
+\ninepoint\noindent
+isn't entirely expanded by {\bf expandafter\/}; only \MF's first
+step in loop expansion\cutpar
+
+\bugonpage C299, line 2 (12/6/99)
+
+\ninepoint\noindent
+\begindisplay
+$\displaystyle t[u_1,\ldots,u_n]\;=\;\sum_{k=1}^n{n-1\choose k-1}
+ (1-t)^{n-k}t^{k-1}u_k,$
+\enddisplay
+
+\bugonpage C299, swap lines 11 and 12 (8/5/98)
+
+\ninepoint\begintt
+def lbrack = hide(delimiters []) lookahead [ enddef;
+let [[[ = [; let ]]] = ]; let [ = lbrack;
+\endtt
+
+\bugonpage C306, line 1 (11/4/98)
+
+\ninepoint\noindent
+| ligtable oct"013": "i" =: oct"016", "l" =: oct"017", % ffi and ffl|
+
+\bugonpage C311, line 2 (8/5/98)
+
+\ninepoint\noindent
+$\\{fine}:=4-\\{eps}$, and $\\{breadth\_}[1]:=4-\\{eps}$.
+\ (A small amount~\\{eps} has been subtracted\cutpar
+
+\bugonpage C323, line $-3$ (8/5/98)
+
+\ninepoint\noindent
+statement occurs,
+the special string `|"title "|\thinspace\&\thinspace\<title>'
+is output. \ (This is how the\cutpar
+
+\bugonpage C332, lines 22--24 (8/5/98)
+
+\ninepoint
+\item{}be replicated so that the final
+proofs will be \\{rep} times bigger than usual, and the pattern will be clipped
+slightly at the edges so that discrete pixels can be seen plainly.
+
+
+\bugonpage C341, line 23 (10/10/96)
+
+\ninepoint
+\noindent|\def\:{\setbox0=\hbox{\noboundary\char\n\noboundary}%|
+
+\bugonpage C346, left column (9/6/00)
+
+\eightpoint
+|...| (bounded join), 18--19, 127, 248, $\underline{262}$.\par
+|...| (truncation of displayed context), 44.
+
+\bugonpage C346, and throughout the index (3/7/95)
+
+\eightpoint\noindent
+(Many index entries for rules of syntax in chapters 25--26
+should have been underlined)
+
+\bugonpage C350, left column (4/24/00)
+
+\eightpoint\noindent
+Evetts, Leonard Charles, 153.
+
+\bugonpage C351, right column (9/22/97)
+
+\eightpoint\noindent
+\llap{\lower1pt\hbox{*}}%
+|intersectiontimes|, $\underline{136}$, {\it178}, 213, {\it265}, {\it294},
+{\it298}.
+
+\bugonpage C353, right column (8/5/98)
+
+\eightpoint\noindent
+\<numeric token atom>, {\it delete this entry}.\par\noindent
+\<numeric token primary>, 72, $\underline{210}$.
+
+\bugonpage C354, left column (7/26/98)
+
+\eightpoint\noindent
+Orwell, George (= Blair, Eric Arthur), 85.
+
+\bugonpage C355, right column (3/7/95)
+
+\eightpoint\noindent
+|rt|, {\it23}, {\it77}, 80, {\it103}, 147, 151, $\underline{273}$.
+
+\bugonpage C361, lines 14--15 (4/29/97)
+
+\tenpoint
+\begintt
+email: {\tt TUG@tug.org}
+internet: {\tt http://www.tug.org/}
+}
+\endtt
+
+\bugonpage C361, bottom five lines (4/29/97)
+
+\begingroup \def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X}
+\baselineskip10pt
+\rightline{\eightssi Don't delay, subscribe today! That address again is}
+\rightline{\eightssi \TeX\ Users Group}
+\rightline{\eightssi email: \eighttt TUG\char`\@ tug.org}
+\rightline{\eightssi internet: \eighttt http://www.tug.org/}
+\smallskip
+\rightline{\eightss DONALD E. KNUTH, {\eightssi The \TeX book\/} (1996)}
+\endgroup
+
+ % Volume D
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage Dix, line ix (8/19/00)
+
+\tenpoint
+\textindent{\bull}``Interfacing with graphic objects'' by
+Ignacio Andr\'es Zabala Salelles,\cutpar
+
+\hsize=35pc
+
+\bugonpage D71, line 11 of section 178 (9/13/00)
+
+\ninepoint
+\noindent\quad\qquad\qquad$\{$ previous \\{mem\_end}, \\{lo\_mem\_max},
+ and \\{hi\_mem\_min} $\}$
+
+\bugonpage D132, line 6 of section 291 (9/13/00)
+
+\tenpoint\noindent
+$$=v_n+w_n\theta_0-u_n\bigl(v_1+w_1\theta_0-u_1(v_2+\cdots
+-u_{n-2}(v_{n-1}+w_{n-1}\theta_0-u_{n-1}\theta_0)\ldots{})\bigr),$$
+
+\bugonpage D213, line 7 (9/14/00)
+
+\tenpoint\noindent
+$(-y+\epsilon,
+x+y+\epsilon\delta)$. We should therefore round as if our skewed coordinates
+were $(x+\epsilon+\epsilon\delta,y-\epsilon)$\cutpar
+
+\bugonpage D349, line 4 of section 784 (9/14/00)
+
+\ninepoint\noindent
+{\bf procedure} \\{pack\_job\_name}($s\;$: \\{str\_number});\quad
+ $\{$ $s={}$|".log"|, |".gf"|, |".tfm"|, or \\{base\_extension} $\}$
+
+\bugonpage D451, line 11 (9/14/00)
+
+\tenpoint\noindent
+{\bf 1040}.\qquad The value of \\{cur\_mod} controls the \\{verbosity} in
+the \\{print\_exp} routine: If it's \\{show\_code},\cutpar
+
+\bugonpage D464, bottom line (9/14/00)
+
+\ninepoint\noindent
+\\{long\_help\_seen}: \\{boolean};\quad$\{$ has the long {\bf errmessage}
+ help been used? $\}$
+
+\bugonpage D551, Zabala entry (8/19/00)
+
+\eightpoint\noindent
+Zabala Salelles, Ignacio Andr\'es:\quad 812.
+
+ % volume E
+\hsize=29pc
+\bugonpage Exiii, lines 3 and 4 from the bottom (7/17/98)
+
+\textindent{\bull}``Metamarks:
+Preliminary studies for a Pandora's Box of shapes''
+by Neenie Billawala, Stanford Computer Science report 1256 (Stanford,
+California,\cutpar
+
+\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}}
+\def\ddashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu
+ \hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}}
+
+\bugonpage E87, bottom line (6/4/98)
+
+\rightline{\eightss--- JOHN SMITH, {\eightssi The Printer's Grammar\/}\enspace
+ (1755)} % p129
+
+\bugonpage E95, line 16 (8/8/98)
+
+\ninepoint\noindent
+\quad$\dashto z_{1r}\dashto z_{1l}\dashto{}$%
+ {\bf subpath} $(t,0)$ {\bf of\/} $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E95, line 11 from the bottom (8/8/98)
+
+\ninepoint\noindent
+\quad$\dashto z_{1r}\dashto z_{1l}\dashto{}$%
+ {\bf subpath} $(t,0)$ {\bf of\/} $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E95, line 8 from the bottom (3/6/95)
+
+\ninepoint\noindent
+{\bf cmchar} |"Extensible vertical arrow--extension module"|;
+
+\bugonpage E97, line 8 from the bottom (3/6/95)
+
+\ninepoint\noindent
+{\bf cmchar} |"Extensible double vertical arrow--extension module"|;
+
+\bugonpage E113, line 9 (3/6/95)
+
+\ninepoint\noindent
+$x_5=.5[x_4,x_6]$; \ $x_4-x_6=1.2u$; \ $\\{lft}\,x_{5r}=\hbox{hround}
+ (.5w-.5\\{curve})$;
+
+\bugonpage E113, line 10 from the bottom (3/6/95)
+
+\ninepoint\noindent
+$x_5=.5[x_4,x_6]$; \ $x_4-x_6=4.8u$; \ $\\{lft}\,x_{5r}=\hbox{hround}
+ (.5w-.5\\{max\_size})$;
+
+\bugonpage E115, line 9 (3/6/95)
+
+\ninepoint\noindent
+$x_5=.5[x_4,x_6]$; \ $x_4-x_6=1.2u$; \ $\\{lft}\,x_{5r}=\hbox{hround}
+ (.5w-.5\\{curve})$;
+
+\bugonpage E115, line 12 from the bottom (3/6/95)
+
+\ninepoint\noindent
+$x_5=.5[x_4,x_6]$; \ $x_4-x_6=4.8u$; \ $\\{lft}\,x_{5r}=\hbox{hround}
+ (.5w-.5\\{max\_size})$;
+
+\bugonpage E147, lines 11--14 from the bottom (7/7/97)
+
+\ninepoint\noindent
+$\\{pos}_3(.8[\\{hair},\\{stem}],0)$; \ $\\{pos}_4(\\{vair},-90)$; \
+ $\\{pos}_5(\\{hair},-180)$;\par\noindent
+$\\{pos}_6(\\{vair},-270)$; \ ${pos}_7(\\{stem},-360)$; \
+ $\\{pos}_8(\\{vair},-450)$; \ ${pos}_9(\\{hair},-540)$;\par\noindent
+$x_0=x_1=x_9$; \ $\\{lft}\,x_{0l}=\hbox{hround}(1.5u-.5\\{hair})$; \
+ $x_2=x_4=x_6=x_8=.5w-.25u$;\par\noindent
+$\\{rt}\,x_{3r}=\hbox{hround}(w-1.75u)$; \ $\\{rt}\,x_{7r}=\hbox{hround}(w-u)$;
+
+\bugonpage E147, line 8 from the bottom (7/7/97)
+
+\ninepoint\noindent
+$y_5=.5[y_4,y_6]$; \ $\\{top}\,y_{6r}-\\{bot}\,y_{4r}=\\{vstem}+\\{eps}$; \
+$\\{bot}\,y_8=-\\{oo}$; \ $y_7=y_9=.55[y_6,y_8]$;
+
+\bugonpage E165, line 6 (2/8/97)
+
+\ninepoint\noindent
+$y_1+.5\\{hair}=h$; \ $x_1=x_2+.75u$; \
+ $\\{pos}_1(\\{hair}+\\{dw},\hbox{angle}(2(x_1-x_2),y_1-y_2)+90)$;
+
+\bugonpage E165, line 10 (2/8/97)
+
+\ninepoint\noindent
+$x_3=.5[x_2,x_4]$; \ $x_7-.25u=.5[x_6,x_8]$; \
+ $\\{rt}\,x_{8r}=\hbox{hround}(w-.5u)$;
+
+\bugonpage E187, line 9 (3/6/95)
+
+\ninepoint\noindent
+$\\{lft}\, x_{1l}=\\{lft}\, x_{2l}=\hbox{hround}(.5w-.5\\{shaved\_stem})$; \
+ $\\{top}\, y_1=h$; \ $\\{bot}\, y_2=0$;
+
+\bugonpage E189, line 8 (3/6/95)
+
+\ninepoint\noindent
+$\\{lft}\, x_{1l}=\\{lft}\, x_{2l}=\hbox{hround}(.5w-.5\\{shaved\_stem})$; \
+ $\\{top}\, y_1=h$; \ $\\{bot}\, y_2=0$;
+
+\bugonpage E233, line 21 (3/6/95)
+
+\ninepoint\noindent
+{\bf path} $p$; \
+$\{\{${\bf interim} $\\{superness}:=\\{more\_super}$; \
+ $p=\\{pulled\_super\_arc}_l(3,4)(\\{pull})\}\}$;
+
+\bugonpage E237, line 5 (8/6/98)
+
+\ninepoint\noindent
+$\\{lft}\,x_1={\rm hround}\,.5u$; \ $x_2=w-x_1$; \
+ $y_1=y_2=\\{good}.y\,.7[\\{x\_height},\\{asc\_height}]$;
+
+\bugonpage E239, line 7 from the bottom (3/6/95)
+
+\ninepoint\noindent
+$\\{lft}\,x_{6r}=\hbox{hround}\, u$; \
+$x_7=3u$; \ $x_8=w-3.5u$; \ $\\{rt}\,x_{9l}=\hbox{hround}(w-u)$;
+
+\bugonpage E253, line 2 from the bottom (8/9/98)
+
+\ninepoint
+\line{\quad$.\,.\,z_{3e}\{\\{down}\}\,.\,.\,\{z_{5l}-z_{4l}\}z_{4e}
+ \dashto z_{5e}\dashto z_{6e}$;\hfil \% stroke}
+
+\bugonpage E263, line 21 (5/10/98)
+
+\ninepoint\noindent
+{\bf path} $p$; \
+$\{\{${\bf interim} $\\{superness}:=\\{more\_super}$; \
+ $p=\\{pulled\_super\_arc}_l(3,4)(\\{pull})\}\}$;
+
+\bugonpage E289, line 2 from the bottom (8/9/98)
+
+\ninepoint
+\line{\quad$.\,.\,z_{3e}\{\\{down}\}\,.\,.\,\{z_{5l}-z_{4l}\}z_{4e}
+ \dashto z_{5e}\dashto z_{6e}$;\hfil \% stroke}
+
+\bugonpage E291, line 18 (3/6/95)
+
+\def\frac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
+\ninepoint\noindent
+$x_4=\frac1/3[x_5,x_{3l}]$; \ $z_4=z_5+\\{whatever}*(15u,.1h)$;
+
+\bugonpage E297, line 17 (5/10/98)
+
+\ninepoint\noindent
+{\bf path} $p$; \
+$\{\{${\bf interim} $\\{superness}:=\\{more\_super}$; \
+ $p=\\{pulled\_super\_arc}_l(3,4)(\\{pull})\}\}$;
+
+\bugonpage E303, line 17 (5/10/98)
+
+\ninepoint\noindent
+{\bf path} $p$; \
+$\{\{${\bf interim} $\\{superness}:=\\{more\_super}$; \
+ $p=\\{pulled\_super\_arc}_l(3,4)(\\{pull})\}\}$;
+
+\bugonpage E309, line 7 from the bottom (5/8/98)
+
+\ninepoint\noindent
+\quad$y_{@0}=y_{@2l}-\\{bracket}-\\{eps}$;
+
+\bugonpage E313, line 7 from the bottom (5/8/98)
+
+\ninepoint\noindent
+\quad$y_{@0}=y_{@2l}+\\{bracket}+\\{eps}$;
+
+\bugonpage E319, line 8 (5/11/98)
+
+\ninepoint\noindent
+$\\{loop\_top}=$ {\bf if\/} \\{serifs}:
+ Vround .77$[\\{vair},\\{fudged.stem}]$ {\bf else}: \\{vair} {\bf fi};
+
+\bugonpage E373, lines 5 and 6 from the bottom (7/13/97)
+
+\ninepoint\noindent
+\quad$\\{top}\,y_{1r}=\hbox{vround}\, .95h+\\{oo}$; \
+$\\{top}\,y_{2r}=h+\\{oo}$; \ $y_3=.5h$;\par\noindent
+\quad$\\{bot}\,y_{4r}=-\\{oo}$; \
+$\\{bot}\,y_{5r}=\hbox{vround}\,.08h-\\{oo}$; \
+$y_{5l}:=\\{good}.y\, y_{5l}$; \ $x_{5l}:=\\{good}.x\,x_{5l}$;
+
+\bugonpage E381, lines 11 and 12 from the bottom (7/13/97)
+
+\ninepoint\noindent
+\quad$\\{top}\,y_{1r}=\hbox{vround}\, .93h+\\{oo}$; \
+$\\{top}\,y_{2r}=h+\\{oo}$; \ $y_3=.5h$;\par\noindent
+\quad$\\{bot}\,y_{4r}=-\\{oo}$; \
+$\\{bot}\,y_{5r}=\hbox{vround}\,.07h-\\{oo}$;
+
+\bugonpage E389, bottom two lines (8/7/98)
+
+\ninepoint\noindent
+\quad {\bf numeric} $\\{aa\_},\\{bb\_},\\{cc\_}$;
+ \ $\\{bb\_}=b/y$; \ $\\{cc\_}=c/y$;
+ \ $\\{aa\_}=a*a-\\{bb\_}*\\{bb\_}$;\par\noindent
+\quad $(a*(\\{cc\_}\mathbin{++}\hbox{sqrt}\,\\{aa\_})-\\{bb\_}*\\{cc\_})/\\{aa\_}$
+ {\bf enddef\/};
+
+\bugonpage E423, line 17 (8/8/98)
+
+\ninepoint\noindent\quad
+$x_{13}=x_{11}-.5$; \ $\\{top}\,y_{14r}=\min(\frac10/7\\{x\_height}+
+ .5\\{bulb\_diam},h)+1$; \ $\\{top}\,y_{11}=\\{x\_height}$;
+
+\bugonpage E427, line 21 (8/8/98)
+
+\ninepoint\noindent\quad
+$x_{23}=x_{21}-.5$; \ $\\{top}\,y_{24r}=\min(\frac10/7\\{x\_height}+
+ .5\\{bulb\_diam},h)+1$; \ $\\{top}\,y_{21}=\\{x\_height}$;
+
+\bugonpage E431, lines 18 and 19 (8/8/98)
+
+\ninepoint\noindent
+{\bf filldraw} $z_0\dashto(x_0,y_{2l})\dashto z_{1l}\{\\{right}\}\,.\,.\,
+ \{\\{left}\}z_{1r}$\par
+\noindent\quad$\dashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3r}\,.\,.\,\{2(x_0-x_3),y_0-y_3\}z_{5r})$
+
+\bugonpage E431, line 2 from the bottom (8/8/98)
+
+\ninepoint\line{\quad
+$\dashto z_{1l}\{\\{right}\}\,.\,.\,\{\\{left}\}z_{1r}\dashto
+ (x_0,y_{2r})\dashto{}$cycle;\hfill\% arrowhead and stem}
+
+\bugonpage E433, lines 13 and 14 (8/8/98)
+
+\ninepoint\noindent
+{\bf filldraw} $z_0\dashto(x_0,y_{2l})\dashto z_{1l}\{\\{left}\}\,.\,.\,
+ \{\\{right}\}z_{1r}$\par
+\noindent\quad$\dashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3l}\,.\,.\,\{2(x_0-x_3),y_0-y_3\}z_{5r})$
+
+\bugonpage E433, line 2 from the bottom (8/8/98)
+
+\ninepoint\line{\quad
+$\dashto z_{1l}\{\\{left}\}\,.\,.\,\{\\{right}\}z_{1r}\dashto
+ (x_0,y_{2r})\dashto{}$cycle;\hfill\% arrowhead and stem}
+
+\bugonpage E463, line 15 (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1r}\,.\,.\,z_{1l}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E463, line 3 from the bottom (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1r}\,.\,.\,z_{1l}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E465, line 16 (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E465, line 3 from the bottom (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E467, line 18 (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E467, line 3 from the bottom (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{11l}\,.\,.\,z_{12r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{13l}\{z_{19}-z_{13}\}\,.\,.\,z_{15r})$
+
+\bugonpage E483, lines 12--14 from the bottom (3/6/95)
+
+\ninepoint\noindent
+{\bf beginarithchar}(oct$\,$|"004"|); \
+{\bf pickup} \\{fine}.\\{nib}; \
+{\bf pickup} \\{rule}.\\{nib};\par
+\line{{\bf numeric} \\{del};
+ \ $\\{del}=\\{dot\_size}-\\{currentbreadth}$;\hfill
+ \% $\\{currentbreadth}=\\{fine}$}
+\noindent
+$x_3-.5\\{del}=\\{good}.x(.5w-.5\\{del})$;
+ \ $\\{center\_on}(x_3)$;\par\noindent
+$y_3+.5del=\\{good}.y(\\{math\_axis}+\\{math\_spread}[.5\\{x\_height}
+ ,.6\\{x\_height}]+.5\\{del})$;
+
+\bugonpage E485, bottom line (6/4/98)
+
+\rightline{\eightss--- JOHN SMITH, {\eightssi The Printer's Grammar\/}\enspace
+ (1755)} % p80
+
+\bugonpage E489, line 4 (8/8/98)
+
+\ninepoint\noindent
+$\\{lft}\,x_6={\rm hround}\,u$; \ $x_2=w-x_6$; \ $\\{top}\,y_8=h$; \
+ $y_8-y_4=x_2-x_6$;
+
+\bugonpage E489, line 10 (8/8/98)
+
+\ninepoint\noindent
+$\\{lft}\,x_6={\rm hround}\,u$; \ $x_2=w-x_6$; \ $\\{top}\,y_8=h$; \
+ $y_8-y_4=x_2-x_6$; \ \\{circle\_points};
+
+\bugonpage E491, line 3 from the bottom (3/6/95)
+
+\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units
+\ninepoint\noindent
+\quad $\\{spread}:=2\hbox{ceiling}(\\{spread}\SH*\\{hppp}/2)+\\{eps}$;
+ \ {\bf enddef\/};
+
+\bugonpage E507, line 15 (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1r}\,.\,.\,z_{1l}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3r}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E507, line 3 from the bottom (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{11r}\,.\,.\,z_{11l}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{13l}\{z_{19}-z_{13}\}\,.\,.\,z_{15r})$
+
+\bugonpage E509, line 17 (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E509, lines 3 and 4 from the bottom (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E511, line 17 (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E511, lines 3 and 4 from the bottom (8/8/98)
+
+\ninepoint\noindent\quad
+$\ddashto z_{1l}\,.\,.\,z_{1r}\ddashto{}${\bf subpath} $(t,0)$ {\bf of\/}
+ $(z_{3l}\{z_9-z_3\}\,.\,.\,z_{5r})$
+
+\bugonpage E541, bottom line (2/27/97)
+
+{\bf labels}\kern.05em$(1,2,3,5,6,7,8,9,10,11,12,13,14,15)$; \ {\bf endchar};
+
+\bugonpage E568, the example of {\tt cmtex8} (4/18/96)
+
+\eightpoint\indent
+(The word `{\tt logician}' should not be hyphenated.)
+
+\bugonpage E574, left column (3/6/95)
+
+\eightpoint\indent
+\\{currentbreadth}, 483, $\underline{545}$, 546.
+
+\bugonpage E575, right column (9/10/98)
+
+Holmes, Kris Ann, vi, vii.
+
+\bugonpage E576, right column (6/4/98)
+
+\eightpoint\noindent Delete the entry for Luckombe
+
+\bugonpage E579, left column (6/4/98)
+
+\eightpoint Smith, John, 87, 485.
+
+ \bye
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.tex b/Master/texmf-dist/source/generic/knuth/errata/errata.tex
new file mode 100644
index 00000000000..6842a82cc6e
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.tex
@@ -0,0 +1,1554 @@
+% Bugs (sigh) in Computers \& Typesetting --- the most recent errata
+
+\input manmac
+\def\.#1{\hbox{\tt#1}}
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\today{\number\day\
+ \ifcase\month\or
+ Jan\or Feb\or Mar\or Apr\or May\or Jun\or
+ Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi
+ \ \number\year}
+
+\def\cutpar{{\parfillskip=0pt\endgraf}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting as of \today}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\tenpoint
+\noindent This is a list of all substantial corrections made to {\sl Computers
+\& Typesetting\/} since the publication of the second ``Millennium Edition''
+at the close of the year 2001. (More precisely, it lists errors corrected
+since the 16th printing of Volume~A, the 7th printing
+of Volume~B, the 6th printing of Volume~C, the 4th printing of Volume~D,
+and the 5th printing of Volume~E.)
+Corrections made to the softcover version of {\sl The \TeX book\/},
+beginning with its 32nd printing, are
+the same as corrections to Volume~A\null. Corrections to the softcover
+version of {\sl The \slMF\kern1ptbook}, beginning with its 11th printing,
+are the same as corrections to Volume~C\null. Changes to the mini-indexes
+and master indexes of Volumes B, D, and~E are not shown here unless they are
+not obviously derivable from what has been shown. Some (or all) of these
+errors have been corrected in the most recent printings.
+\looseness=-1
+
+ % volume A
+
+\bugonpage A7, line 4 from the bottom (01/15/04)
+
+\noindent
+since control sequences of the second kind always have exactly one
+symbol after\cutpar
+
+\bugonpage A123, line 7 from the bottom (02/27/08)
+
+\ninepoint\noindent
+that it won't make the natural height-plus-depth
+of\/ |\box|$\,n$ surpass |\dimen|$\,n$, when it~is\cutpar
+
+\bugonpage A124, lines 12 and 13 (02/27/08)
+
+\ninepoint\noindent
+means that \TeX\ has tried to split an |\insert254| to height $180.2\pt$;
+the natural height-plus-depth of the best such split is $175.3\pt$,
+and the penalty for breaking there is~100.)
+
+\bugonpage A206, lines 12--17 (05/21/07)
+
+\ninepoint\noindent
+or alignment template
+is also considered to be |\outer| in this sense; for example, a
+file shouldn't end in the middle of a definition. If you are designing a
+format for others to use, you can help them detect errors before too much
+harm is done, by using |\outer| with all control sequences that should
+appear only at ``quiet times'' within a document. For example, Appendix~B
+defines |\proclaim| to be |\outer|, since a user shouldn't be stating a
+theorem as part of a definition or argument or preamble.
+
+
+\bugonpage A216, line 3 from the bottom (12/20/07)
+
+\ninepoint\indent|\openin|\<number>|=|\<file name>
+
+\bugonpage A290, lines 25--26 (02/24/08)
+
+\ninepoint\textindent{$\bull$}
+\<leaders>\<box or rule>\<horizontal skip>.\enskip
+Here \<horizontal skip> refers to one of the first five glue-appending
+commands just mentioned; the formal syntax for \<leaders>\cutpar
+
+\bugonpage A292, line 15 (12/02/02)
+
+\ninepoint\noindent
+are defined as in the
+second alternative of a \<math field>, are
+recorded in a ``choice\cutpar
+
+\bugonpage A308, lines 25 and 26 (06/17/02)
+
+\ninepoint
+\begintt
+\def\appendroman#1#2#3{\expandafter\def\expandafter#1\expandafter
+ {\csname\expandafter\gobble\string#2\romannumeral#3\endcsname}}
+\endtt
+
+\bugonpage A311, line 14 (12/02/02)
+
+\ninepoint\indent
+|\def\\{\if\space\next\ % assume that \next is unexpandable|
+
+\bugonpage A311, line 17 (12/29/07)
+
+\ninepoint\indent
+| \leavevmode\copy0\kern-\wd0\makelightbox}|
+
+\bugonpage A318, lines 24 and 25 (10/01/03)
+
+\ninepoint\noindent
+\hbox to\parindent{\bf\hss15.13.\enspace}%
+Yes, in severe circumstances. (1)~Previous footnotes might
+ have left no room for any more footnotes on the page.
+(2)~If |\vadjust{\eject}| occurs on the same line\cutpar
+
+\bugonpage A364, lines 12--15 from the bottom (02/29/08)
+
+\ninepoint\noindent
+|\def\loggingall{\tracingcommands=2 \tracingstats=2|\par\noindent
+| \tracingpages=1 \tracingoutput=1 \tracinglostchars=1 |\par\noindent
+| \tracingmacros=2 \tracingparagraphs=1 \tracingrestores=1 |\par\noindent
+| \showboxbreadth=\maxdimen \showboxdepth=\maxdimen}|\par
+\noindent
+|\def\tracingall{\tracingonline=1 \loggingall}|
+
+\bugonpage A364, line 5 from the bottom (02/29/08)
+
+\ninepoint\noindent
+|\def\fmtversion{3.141592653} % identifies the current format|
+
+\bugonpage A399, line 18, through what used to be page A400, line 14 (02/26/08)
+
+\ninepoint
+Finally, the reformatting of\/ |\box\footins| can be achieved easily with
+an elegant technique suggested by David Kastrup, using the following
+\TeX\ code within the |\output| routine:
+\begindisplay
+|\def\makefootnoteparagraph{\unvbox\footins|\cr
+| \baselineskip=\footnotebaselineskip \removehboxes}|\cr
+|\def\removehboxes{\unskip\setbox0=\lastbox|\cr
+| \ifhbox0{\removehboxes}\unhbox0 \else\noindent \fi}|\cr
+\enddisplay
+The key idea here is |\removehboxes|, a macro that has the magical ability to
+take a vertical box such as `|\vbox{\box1\box2\box3\removehboxes}|' and
+transform it into
+`|\vbox{\noindent\unhbox1\unhbox2\unhbox3}|'\kern-1pt,
+if\/ |\box1|, \kern-2pt|\box2|, and
+|\box3| are hboxes. Notice how |\removehboxes| introduces braces so that
+\TeX's {save stack} will hold all of the hboxes before they are unboxed. Each
+level of recursion in this routine uses one cell of input stack space and
+three cells of save stack space; thus, it is generally safe to do more than
+100 footnotes without exceeding \TeX's capacity.
+
+In our application there is no interline glue within |\box\footins|,
+so the |\unskip| command could be deleted from |\removehboxes|.
+
+Incidentally, the |\unskip| and |\lastbox| operations have running
+times of the approximate form
+$a+mb$, where $m$~is the number of items {efficiency} on the
+list preceding the glue or box that is removed. Hence |\removehboxes| has a
+running time of order $n^2$ when it removes $n$~boxes.
+But the constant~$b$ is so small that
+for practical purposes it's possible to think of\/ |\unskip| and
+|\lastbox| as almost instantaneous.
+
+\bugonpage A416, lines 18--22 (06/08/07)
+
+\ninepoint\noindent\beginlines
+|\def\leftheadline{\hbox to \pagewidth{\spaceskip=0pt|
+| \vbox to 10pt{}% strut to position the baseline|
+| \llap{\tenbf\folio\kern1pc}% folio to left of text|
+| \tenit\rhead\hfil}} % running head flush left|
+|\def\rightheadline{\hbox to \pagewidth{\spaceskip=0pt\vbox to 10pt{}%|
+\endlines
+
+\bugonpage A450, lines 14--16 from the bottom (12/19/02)
+
+\begingroup\def\\#1{$_{\kern\scriptspace#1}$}
+\indent\qquad{\tt s\\1tic
+ \\1exp x\\3p pi\\3a \\2i\\1a i\\2al \\2id \\1do \\1ci \\2io ou\\2 \\2us}
+\medskip\noindent
+(where subscripts that aren't shown are zero), and this yields
+$$\centerline{%
+\tt.\\0s\\0u\\1p\\0e\\0r\\1c\\0a\\0l\\1i\\0f\\0r\\0a\\0g\\1i\\0l\\4i%
+\\0s\\1t\\2i\\0c\\1e\\0x\\3p\\2i\\3a\\0l\\2i\\1d\\0o\\1c\\2i\\0o\\2u\\2s\\0.}$$
+\endgroup
+
+\bugonpage A458, left column (01/11/07)
+
+\eightpoint\noindent
+|\\|, 38, {\it356}, {\it378}, {\it418}.
+
+\bugonpage A459, left column (03/17/06)
+
+\eightpoint\noindent
+angle brackets ( $\langle\,\rangle$ ), 59, {\it146--147}, 150,~156,\par
+\noindent\qquad $\underline{268}$, 420, 437;
+ {\sl see also\/} |\langle|, |\rangle|.
+
+\bugonpage A461, left column (02/24/08)
+
+\eightpoint\noindent
+|\boxit|, 223, 331.
+
+\bugonpage A468, right column (02/26/08)
+
+\eightpoint\noindent
+interline glue, 78--79, $\underline{80}$, 104, 105, 125, 221,\par
+\noindent\qquad 245, 263, 281--282, 335, 352, 399, 409.
+
+\bugonpage A469, left column (02/26/08)
+
+\eightpoint\noindent
+Kastrup, David Friedrich, 399.
+
+\bugonpage A470, left column (01/21/03)
+
+\eightpoint\noindent
+|\loggingall|, $\underline{364}$.
+
+\bugonpage A477, right column (06/08/07)
+
+\eightpoint\noindent
+\llap{*}|\spaceskip|, 76, 274, {\it317}, {\it356}, {\it416}, 429.
+
+\bugonpage A479, right column (09/11/07)
+
+\eightpoint\noindent
+|\undefined|, 350, 384.
+
+\bugonpage A483, line 5 from the bottom (11/18/03)
+
+\eightpoint
+\rightline{\eightss--- HIERONYMUS HORNSCHUCH, %
+ {\eightrm'}$O\mkern-1mu\rho\mkern1mu\vartheta o\mkern1mu %
+ \tau\upsilon\pi o\gamma\mkern-1mu %
+ \rho\alpha\phi\acute\iota\alpha\varsigma$\enspace(1608)}
+
+ % volume B
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage Bvii, bottom two lines (12/20/02)
+
+\eightpoint\noindent
+all of those changes.
+I~now believe that the final bug was discovered and removed on
+27~February 2008.
+The finder's fee has converged to \$327.68.
+
+\hsize=35pc
+
+\bugonpage B2, line 10 from the bottom (02/29/08)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]3.1415926\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
+
+\bugonpage B3, new paragraph to follow line 9 (12/20/02)
+
+\tenpoint\noindent\quad
+Incidentally, Pascal's standard \\{round} function can be problematical,
+because it disagrees with the IEEE floating-point standard.
+Many implementors have
+therefore chosen to substitute their own home-grown rounding procedure.
+
+\bugonpage B21, lines 33 and 34 (09/11/07)
+
+\def\Oct#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
+\tenpoint\noindent
+$[\Oct{41}\to\Oct{46},\Oct{60}%
+\to\Oct{71},\Oct{136},\Oct{141}\to\Oct{146},\Oct{160}\to\Oct{171}]$ must be printable.
+Thus, at least 81 printable characters are needed.
+
+\bugonpage B114, line 25 (09/11/07)
+
+\def\#{\hbox{\tt\char`\#}} % parameter sign
+\ninepoint\noindent
+{\bf define} $\\{save\_index}(\#)\equiv\\{save\_stack}[\#].\\{hh}.\\{rh}$\quad
+ $\{\,$\\{eqtb} location or token or \\{save\_stack} location$\,\}$
+
+\bugonpage B139, line 20 (12/19/02)
+
+\ninepoint\noindent
+\quad{\bf begin while} $(\\{state}=\\{token\_list}) \land
+ (\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par
+\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$
+
+\bugonpage B144, line 14 (09/11/07)
+
+\ninepoint\noindent
+\quad\\{cat}: $0\to\\{max\_char\_code}$;\quad$\{\,$\\{cat\_code}(\\{cur\_char}), usually$\,\}$
+
+\bugonpage B153, lines 2 and 3 (09/11/07)
+
+\tenpoint\noindent
+In fact, these three procedures account for almost every use of \\{get\_next}.
+
+\bugonpage B161, line 19 (12/19/02)
+
+\ninepoint\noindent
+\quad{\bf while} $(\\{state}=\\{token\_list}) \land
+ (\\{loc}=\\{null}) \land (\\{token\_type}\ne\\{v\_template})$ {\bf do}\par
+\noindent\qquad\\{end\_token\_list};\quad$\{\,$conserve stack space$\,\}$
+
+\bugonpage B163, line 29 (12/19/02)
+
+\ninepoint\noindent
+\quad$\\{long\_state}\gets\\{call}$;
+$\\{cur\_tok}\gets\\{par\_token}$;
+$\\{ins\_error}$;
+{\bf goto} \\{continue};
+
+\bugonpage B172, lines 2--6 from the bottom (09/11/07)
+
+\ninepoint\noindent
+{\bf else if\/} $m=\\{vmode}$ {\bf then} \\{scanned\_result}(\\{prev\_depth})(\\{dimen\_val})\par\noindent
+\quad{\bf else} \\{scanned\_result}(\\{space\_factor})(\\{int\_val})
+
+\bugonpage B178, line 4 (09/11/07)
+
+\ninepoint\noindent
+\quad$\\{cur\_val}\gets0$;
+$\\{cur\_val\_level}\gets\\{int\_val}$;
+$\\{radix}\gets0$;
+$\\{cur\_order}\gets\\{normal}$;
+
+\bugonpage B184, line 9 from the bottom (04/18/07)
+
+\tenpoint\noindent
+and denominator sum to 32768 or less.
+According to the definitions here, $\rm2660\,dd\approx1000.33297\,mm$;\kern-6.6pt\cutpar
+
+\bugonpage B206, line 14 (10/30/02)
+
+\tenpoint\noindent
+used input files like \.{webmac.tex}.
+
+\bugonpage B206, new paragraph to follow line 22 (12/20/02)
+
+\tenpoint\noindent\quad
+The following procedures don't allow spaces to be part of
+file names; but some users seem to like names that are spaced-out.
+System-dependent changes to allow such things should probably
+be made with reluctance, and only when an entire file name that
+includes spaces is ``quoted'' somehow.
+
+\bugonpage B227, new line to precede line 23 (09/11/07)
+
+\ninepoint\noindent
+{\bf if} $(\\{nw}=0)\lor(\\{nh}=0)\lor(\\{nd}=0)\lor(\\{ni}=0)$
+ {\bf then} \\{abort};
+
+\bugonpage B256, line 25 (12/20/02)
+
+\ninepoint\noindent
+\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent
+\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded
+ equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent
+\quad{\bf begin} $\\{cur\_g}\gets0$;
+ $\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent
+\quad$\\{this\_box}\gets\\{temp\_ptr}$;
+ $\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$;
+ $\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$;
+
+\bugonpage B258, line 5 from the bottom (12/20/02)
+
+\ninepoint\noindent
+\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$;
+ $\\{rule\_wd}\gets\\{width}(g)-\\{cur\_g}$;
+
+\bugonpage B258, bottom line (12/20/02)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$;
+ $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
+\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
+
+\bugonpage B259, line 4 (12/20/02)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$;
+ $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
+\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
+
+\bugonpage B259, new line to precede old line 7 (12/20/02)
+
+\ninepoint\noindent
+\quad$\\{rule\_wd}\gets\\{rule\_wd}+\\{cur\_g}$;
+
+\bugonpage B260, line 21 (12/19/02)
+
+\ninepoint\noindent
+\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$;
+
+\bugonpage B261, line 9 (12/20/02)
+
+\ninepoint\noindent
+\qquad\\{cur\_glue}: \\{real};\quad$\{\,$glue seen so far$\,\}$\par\noindent
+\qquad\\{cur\_g}: \\{scaled};\quad$\{\,$rounded
+ equivalent of \\{cur\_glue} times the glue ratio$\,\}$\par\noindent
+\quad{\bf begin} $\\{cur\_g}\gets0$;
+ $\\{cur\_glue}\gets\\{float\_constant}(0)$;\par\noindent
+\quad$\\{this\_box}\gets\\{temp\_ptr}$;
+ $\\{g\_order}\gets\\{glue\_order}(\\{this\_box})$;
+ $\\{g\_sign}\gets\\{glue\_sign}(\\{this\_box})$;
+
+\bugonpage B262, line 10 from the bottom (12/20/02)
+
+\ninepoint\noindent
+\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$;
+ $\\{rule\_ht}\gets\\{width}(g)-\\{cur\_g}$;
+
+\bugonpage B262, line 6 from the bottom (12/20/02)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}+\\{stretch}(g)$;
+ $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
+\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
+
+\bugonpage B262, line 2 from the bottom (12/20/02)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin} $\\{cur\_glue}\gets\\{cur\_glue}-\\{shrink}(g)$;
+ $\\{vet\_glue}(\\{float}(\\{glue\_set}(\\{this\_box}))*\\{cur\_glue})$;\par
+\noindent\qquad\qquad$\\{cur\_g}\gets\\{round}(\\{glue\_temp})$;
+
+\bugonpage B263, new line to precede old line 2 (12/20/02)
+
+\ninepoint\noindent
+\quad$\\{rule\_ht}\gets\\{rule\_ht}+\\{cur\_g}$;
+
+\bugonpage B264, line 10 (12/19/02)
+
+\ninepoint\noindent
+\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$;
+
+\bugonpage B266, line 29 (09/11/07)
+
+\tenpoint\noindent
+$\\{total\_pages}\ge65536$, the \.{DVI} file will lie. And if
+$\\{max\_push}\ge65536$, the user deserves whatever chaos might ensue.
+
+\bugonpage B279, line 19 (09/11/07)
+
+\ninepoint\noindent
+\qquad\\{p}: \\{pointer};\quad$\{\,$a new glue node$\,\}$
+
+\bugonpage B288, lines 18--20 (09/11/07)
+
+\ninepoint\noindent
+\\{left\_noad}: {\bf begin} \\{print\_esc}(\.{"left"});
+ \\{print\_delimiter}(\\{delimiter}($p$));\par\noindent
+\quad{\bf end};\par\noindent
+\\{right\_noad}: {\bf begin} \\{print\_esc}(\.{"right"});
+ \\{print\_delimiter}(\\{delimiter}($p$));
+
+\bugonpage B290, line 12 (09/11/07)
+
+\ninepoint\noindent
+\quad{\bf begin if\/} $s=\\{text\_size}$ {\bf then}
+ \\{print\_esc}(\.{"textfont"});
+
+\bugonpage B299, line 9 (12/20/02)
+
+\ninepoint\noindent
+\qquad\qquad\quad{\bf if\/} $\\{type}(r)=\\{kern\_node}$ {\bf then}
+ \quad$\{\,$unneeded italic correction$\,\}$
+
+\bugonpage B332, line 6 (12/19/02)
+
+\tenpoint\noindent
+is being scanned, or when no alignment preamble is active.
+
+\bugonpage B332, line 8 (12/19/02)
+
+\ninepoint\noindent
+\quad{\bf begin if\/} $(\\{scanner\_status}=\\{aligning}) \lor
+ (\\{cur\_align}=\\{null})$ {\bf then}
+
+\bugonpage B336, line 11 from the bottom (10/13/03)
+
+\tenpoint\noindent
+$j-i+\\{min\_quarterword}$ in their
+\\{link} fields. The values of $w_{ii}$ were initialized to
+\\{null\_flag},\cutpar
+
+\bugonpage B342, lines 5 and 6 (09/11/07)
+
+\tenpoint
+In restricted horizontal mode, the \\{clang} part of \\{aux} is undefined;
+an over-cautious Pascal runtime system may complain about this.
+
+\bugonpage B416, line 22 (02/29/08)
+
+\ninepoint\noindent
+\qquad\qquad{\bf if\/} $\\{count}(t)=1000$ {\bf then} $t\gets\\{height}(r)$
+\par\noindent
+\qquad\qquad{\bf else} $t\gets\\{x\_over\_n}(\\{height}(r),1000)*\\{count}(t)$;
+\par\noindent
+\qquad\qquad\\{print\_scaled}$(t)$
+
+\bugonpage B438, lines 1--3 (09/11/07)
+
+\tenpoint\noindent
+{\bf1035.\quad}If \\{link}(\\{cur\_q}) is nonnull when \\{wrapup} is invoked,
+\\{cur\_q} points to
+the list of characters that were consumed while building the ligature
+character~\\{cur\_l}.
+
+\bugonpage B438, lines 19 and 20 (09/11/07)
+
+\ninepoint\noindent
+\qquad\qquad\qquad{\bf begin if\/} $\\{link}(\\{cur\_q})>\\{null}$ {\bf then}
+\par\noindent
+\qquad\qquad\qquad\quad{\bf if\/} $\\{character}(\\{tail})=\\{qi}(
+ \\{hyphen\_char}[\\{main\_f}])$ {\bf then} $\\{ins\_disc}\gets\\{true}$;
+
+\bugonpage B438, line 4 from the bottom (09/11/07)
+
+\ninepoint\noindent
+\quad$\\{link}(\\{tail})\gets\\{lig\_stack}$;
+$\\{tail}\gets\\{lig\_stack}$\quad$\{\,$\\{main\_loop\_lookahead} is next$\,\}$
+
+\bugonpage B439, line 3 (09/11/07)
+
+\ninepoint\noindent
+\quad{\bf if\/} $\\{main\_p}>\\{null}$ {\bf then}
+ \\{tail\_append}(\\{main\_p});\quad$\{\,$append a single character$\,\}$
+
+\bugonpage B440, new line to follow line 9 (09/11/07)
+
+\ninepoint\noindent
+\quad{\bf if\/} $\\{cur\_r}=\\{non\_char}$ {\bf then goto}
+ \\{main\_loop\_wrapup};
+
+\bugonpage B455, lines 3 and 4 (09/11/07)
+
+\ninepoint\noindent
+\quad{\bf if\/} $((\\{cur\_cmd}=\\{hskip})\land(\\{abs}(\\{mode})\ne\\{vmode}))
+ \lor ((\\{cur\_cmd}=\\{vskip})\land(\\{abs}(\\{mode})=\\{vmode}))$ {\bf then}
+
+\bugonpage B472, new paragraph to follow line 10 (12/20/02)
+
+\tenpoint\noindent\quad
+A devious user might force an \\{endv} command to occur just about anywhere;
+we must defeat such hacks.
+
+\bugonpage B472, replacement for what used to be line 13 (12/20/02)
+
+\ninepoint\noindent
+\quad{\bf begin} $\\{base\_ptr}\gets\\{input\_ptr}$;
+ $\\{input\_stack}[\\{base\_ptr}]\gets\\{cur\_input}$;\par\noindent
+\quad{\bf while} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne
+ \\{v\_template}) \land{}$\par\noindent
+\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}=
+ \\{null}) \land {}$\par\noindent
+\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}=
+ \\{token\_list})$ {\bf do} \\{decr}(\\{base\_ptr});\par\noindent
+\quad{\bf if\/} $(\\{input\_stack}[\\{base\_ptr}].\\{index\_field}\ne
+ \\{v\_template}) \lor {}$\par\noindent
+\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{loc\_field}\ne
+ \\{null}) \lor {}$\par\noindent
+\quad\qquad $(\\{input\_stack}[\\{base\_ptr}].\\{state\_field}\ne
+ \\{token\_list})$ {\bf then}\par\noindent
+\qquad\\{fatal\_error}(\hbox{\tt\char'23(interwoven\]alignment\]preambles\]%
+ are\]not\]allowed)\char'23});\par\noindent
+\quad{\bf if\/} $\\{cur\_group}=\\{align\_group}$ {\bf then}
+
+\bugonpage B505, line 19 (09/11/07)
+
+\ninepoint\noindent
+\qquad(\.{"since\]the\]result\]is\]out\]of\]range."});\par\noindent
+\qquad{\bf if\/} $p\ge\\{glue\_val}$ {\bf then}
+ \\{delete\_glue\_ref}(\\{cur\_val});\par\noindent
+\qquad\\{error}; {\bf return};
+
+\bugonpage B506, line 1 (10/13/03)
+
+\tenpoint\noindent
+{\bf 1237.\quad}Here we use the fact that the consecutive codes
+$\\{int\_val}\to\\{mu\_val}$ and
+$\\{assign\_int}\to$\cutpar
+
+\bugonpage B520, line 8 (06/25/04)
+
+\tenpoint\noindent
+says,
+for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
+month, and day\cutpar
+
+\bugonpage B535, new line to follow line 11 (09/11/07)
+
+\ninepoint\noindent
+\qquad{\bf if\/} $\\{last\_glue}\ne\\{max\_halfword}$ {\bf then}
+ \\{delete\_glue\_ref}(\\{last\_glue});
+
+\bugonpage B578, new entry (06/04/06)
+
+\eightpoint\noindent
+Trabb Pardo, Luis Isidoro, 2.
+
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}}
+\def\tension{\mathop{\rm tension}}
+\def\controls{\mathop{\rm controls}}
+\def\and{\,{\rm and}\,}
+
+\bugonpage Cxi, line 4 (05/20/07)
+
+\line{\hbox to\parindent{\bf\hbox to 1em{\hss27}\hss}%
+ \rm Recovery from Errors\leaders\hbox to 20pt{\kern13pt.\hss}\hfil
+ \hbox to 2em{\hss223}}
+
+\bugonpage C11, line 11 (10/11/01)
+
+\noindent
+the area below the bar to the area above it equal to
+$(\sqrt5+1)/2\approx1.61803$, the\cutpar
+
+\bugonpage C29, illustration for exercise 4.11 (09/09/01)
+
+\noindent
+[points 2 and 5 should not be labeled twice]
+
+\bugonpage C129, line 16 (02/21/08)
+
+\ninepoint\beginsyntax
+<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
+\endsyntax
+
+\bugonpage C130, lines 13--15 from the bottom (09/13/03)
+
+\ninepoint\noindent
+point but not after it, the
+nonempty one is duplicated in a similar way. A~basic path join
+`$\to\controls u\and v\to$' specifies explicit control points that
+override any direction specifiers that may immediately surround it.
+
+\bugonpage C137, lines 5--7 from the bottom (02/21/08)
+
+\danger Let's conclude this chapter by applying what we've learned about
+paths to a real-life example. The {\sl Journal of Algorithms\/} was
+published for many years by Academic Press, and its cover page carried the
+following logo, which was designed\cutpar
+\enddanger
+
+\bugonpage C137, bottom two lines (02/21/08)
+
+\ninepoint\noindent
+A \MF\ program to produce this logo made it possible for the editors
+of the journal to use it on letterheads in their correspondence.
+Here is one way to do that job,\cutpar
+% actually the MS now says "to write that program," and the
+% correction therefore extends to page C138
+
+\bugonpage C156, line 15 from the bottom (09/09/01)
+
+\ninepoint\noindent
+be the values they had upon entry to the group.)
+
+\bugonpage C159, lines 12--15 (12/01/06)
+
+\begintt
+def --- = ..tension infinity.. enddef;
+\endtt
+it makes `$z_1\ddashto z_2$' become
+`$z_1\to\tension\\{infinity}\to z_2$'.
+The {replacement text} can be any sequence of tokens not including
+`{\bf enddef}\kern1pt'; or it can include entire subdefinitions like
+`{\bf def}~$\ldots$~{\bf enddef}\kern1pt', according to certain rules
+that we shall explain later.
+
+\bugonpage C171, line 16 from the bottom (06/18/02)
+
+\tenpoint
+\<loop>\is\<loop header>|:|\<loop text> {\tt endfor}
+
+\bugonpage C179, line 7 from the bottom (09/09/01)
+
+\ninepoint\noindent
+next time \MF\ gets to the end of an input line, it will stop reading
+from the\cutpar
+
+\bugonpage C180, lines 14--16 (04/25/03)
+
+\ninepoint\noindent
+digits should be a
+file name that works in essentially the same way on all installations of
+\MF\kern-.03em\null. Uppercase letters are considered to be distinct from their
+lowercase counterparts, on many systems.
+
+\bugonpage C180, new line to be inserted 4 from the bottom (06/25/04)
+
+\ninepoint\item\bull
+When \MF\ is reading the symbolic tokens to be saved by {\bf save}.
+
+\bugonpage C203, line 12 from the bottom (04/25/03)
+
+\ninepoint\hbox to 237pt{point~3 at the right of the triangle
+might digitize into a}
+
+\bugonpage C213, line 26 (02/21/08)
+
+\ninepoint\beginsyntax
+<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
+\endsyntax
+
+\bugonpage C226, line 23 (02/21/08)
+
+\ninepoint\noindent following nineteen things will be mentioned:
+
+\bugonpage C226, new line to be second from the bottom (02/21/08)
+
+\ninepoint\indent|independent variables|\qquad(distinct numeric variables)
+
+\bugonpage C246, line 12 (02/21/08)
+
+\ninepoint\noindent
+is performed whenever \MF\ uses the last two alternatives
+in the definition\cutpar
+
+\bugonpage C250, lines 13 and 14 (02/19/08)
+
+\ninepoint\noindent\hbox to\parindent{\bf\hss19.3.\enspace}%
+Yes, if and only if $n-{1\over2}$ is a nonnegative even integer.
+\ (Because ambiguous values are rounded upwards.)
+
+\bugonpage C250, line 12 from the bottom (04/25/03)
+
+\ninepoint\noindent
+following \<boolean primary>.)
+
+\bugonpage C286, line 25 (09/09/01)
+
+\ninepoint\noindent
+problem; it would simply have put |ENDFOR| into the
+replacement text of |asts|, because\cutpar
+
+\bugonpage C289, line 7 (09/09/01)
+
+\vskip-6pt\ninepoint\begintt
+if if pair x: x>(0,0) else: false fi: A else: B fi.
+\endtt
+
+\bugonpage C292, line 10 from the bottom (09/09/01)
+
+\ninepoint\noindent
+be known by saying `{\bf if\/} known $p-q$: $p=q$ {\bf else}:~{\bf false}
+{\bf fi}'; transforms could be handled\cutpar
+
+\bugonpage C293, line 5 from the bottom (04/25/03)
+
+\ninepoint\noindent
+given angle~$\phi$. We can consider
+the common angle~$\theta$ of $z_{1r}-z_{1l}$ and $z_{0r}-z_{0l}$ to be\cutpar
+
+\bugonpage C315, line 15 from the bottom (04/25/03)
+
+\ninepoint\noindent
+`b' was shipped out.) \ The second letter,~`o', is placed
+in a second little box adjacent\cutpar
+
+\bugonpage C325, bottom line (02/29/08)
+
+\rightline{\eightss--- CAROLUS LINN\AE US,
+ {\eightssi Philosophia Botanica\/}\enspace(1751)}
+
+\bugonpage C332, line 4 from the bottom (04/25/03)
+
+\ninepoint\noindent
+(The proofsheet resolution will be 50 pixels per inch, because {\it cheapo\/}
+has 200 pixels per\cutpar
+
+\bugonpage C346, left column (06/18/02)
+
+\eightpoint\noindent
+\llap{*}|:|, 169, 171, 317--319.
+
+\bugonpage C346, right column (07/09/01)
+
+\eightpoint\noindent
+\llap{*}|angle|, {\it29}, {\it67}, $\underline{72}$, {\it107},
+{\it135}, 211, {\it238}.
+
+\bugonpage C351, right column (02/21/08)
+
+\eightpoint\noindent
+independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226.
+
+\bugonpage C352, right column (02/29/08)
+
+\eightpoint\noindent
+Linn\'e, Carl von (= Linn\ae us, Carolus), 325.
+
+\bugonpage C355, right column (02/29/08)
+
+\eightpoint\noindent
+\llap{*}|save|, $\underline{155}$--$\underline{156}$, {\it160}, 173,
+ {\it178}, 180, 218,\par
+\noindent\qquad{\it236}, {\it244}, {\it296}, 299.
+
+ % Volume D
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\bugonpage Dvii, bottom two lines (02/29/08)
+
+\eightpoint\noindent
+corporates all of those changes.
+I~now believe that the final bug was discovered on 27~December 2004,
+and removed in version 2.718281.
+The finder's fee has converged to \$327.68.
+
+\hsize=35pc
+\parindent=1em
+
+\bugonpage D2, line $-17$ (02/27/08)
+
+\ninepoint\noindent
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]METAFONT,\]Version\]2.718281\char'23}\quad
+$\{\,$printed when \MF\ starts$\,\}$
+
+\bugonpage D2, lines 4 and 5 from the bottom (12/23/02)
+
+\tenpoint\noindent
+types; there are no `{\bf var}' parameters, except in the case of files
+or in the system-dependent \\{paint\_row} procedure;
+there are no tag fields on variant records; there are no \\{real} variables;
+no procedures are declared local to other procedures.)
+
+\bugonpage D16, new paragraph to follow line 26 (06/25/04)
+
+The first line is special also because it may be read before \MF\ has
+input a base file. In such cases, normal error messages cannot yet
+be given. The following code uses concepts that will be explained later.
+(If the Pascal compiler does not support non-local {\bf goto}, the
+statement `{\bf goto} \\{final\_end}' should be replaced by something that
+quietly terminates the program.)
+
+\bugonpage D22, line 26 (09/11/07)
+
+\noindent
+ASCII codes $[\Oct{60}\to\Oct{71},%
+\Oct{136},\Oct{141}\to\Oct{146}]$
+must be printable.
+
+\bugonpage D31, line 29 (06/25/04)
+
+\noindent
+This is the only nontrivial {\bf goto} statement in the
+whole program. It is used when there is no\cutpar
+
+\bugonpage D42, replacement for lines 8--13 (12/23/02)
+
+\tenpoint\noindent\quad
+Notice that if 64-bit integer arithmetic were available,
+we could simply compute $(2^{29}*p+\nobreak q)\allowbreak\,
+\hbox{\bf div}\,(2*q)$.
+But when we are restricted to Pascal's 32-bit arithmetic we
+must either resort to multiple-precision maneuvering
+or use a simple but slow iteration. The multiple-precision technique
+would be about three times faster than the code adopted here, but it
+would be comparatively long and tricky, involving about sixteen
+additional multiplications and divisions.
+
+\bugonpage D43, line 20 (12/23/02)
+
+\tenpoint\noindent
+language or 64-bit substitute is advisable.
+
+\bugonpage D44, lines 24--26 (12/23/02)
+
+\tenpoint\noindent\quad
+Once again it is a good idea to use 64-bit arithmetic if
+possible; otherwise \\{take\_scaled} will use more than 2\% of the running time
+when the Computer Modern fonts are being generated.
+
+\bugonpage D58, line 16 from the bottom (06/25/04)
+
+\ninepoint\noindent
+\hskip5em{\bf if\/} $\\{j\_random}=0$ {\bf then} \\{new\_randoms}
+ {\bf else} \\{decr}(\\{j\_random})
+
+\bugonpage D63, line 21 (06/25/04)
+
+Locations of \\{mem} between \\{mem\_min} and \\{mem\_top} may be dumped as
+part
+of preloaded base\cutpar
+
+\bugonpage D75, line 13 (06/25/04)
+
+\ninepoint\noindent
+\quad{\bf define} $\\{fi\_or\_else}=2$\quad$\{\,$delimiters for conditionals
+ {\bf elseif\/}, {\bf else}, {\bf fi})$\,\}$
+
+\bugonpage D76, line 5 (06/25/04)
+
+\ninepoint\noindent
+\quad{\bf define} $\\{type\_name}=30$\quad$\{\,$declare a type
+ ({\bf numeric}, {\bf pair}, etc.)$\,\}$
+
+\bugonpage D77, line 16 (06/25/04)
+
+\ninepoint\noindent
+\quad{\bf define} $\\{lig\_kern\_token}=76$\quad$\{\,$the operators
+ `{\bf kern}' and `\.{=:}' and `\.{=:\char'174}', etc.$\,\}$
+
+\bugonpage D98, bottom two lines (06/25/04)
+
+\noindent
+They consist of zero or more parameter tokens followed
+by a code for the type of macro.
+
+\bugonpage D101, line 3 (06/25/04)
+
+\noindent
+\MF\ user assigns a type to a variable like \.{x20a.b} by saying, for
+example, `\.{boolean} \.{x[]a.b}'.
+
+\bugonpage D102, lines 10--16 (06/25/04)
+
+\noindent
+variable that is relevant
+when no attributes are attached to the parent. The \\{attr\_head} node
+has the fields of either
+a value node, a subscript node, or an attribute node, depending on what
+the parent would be if it were not structured; but the subscript and
+attribute fields are ignored, so it effectively contains only the data of
+a value node. The \\{link} field in this special node points to an attribute
+node whose \\{attr\_loc} field is zero; the latter node represents a collective
+subscript `\.{[]}' attached to the parent, and its \\{link} field points to
+the first non-special attribute node (or to \\{end\_attr} if there are none).
+
+\bugonpage D102, lines 7 and 8 from the bottom (06/25/04)
+
+\noindent
+$\\{subscr\_head}(\\{q1})=\\{qq1}$;
+\\{qq} is a three-word ``attribute-as-value'' node with
+$\\{type}(\\{qq})=\break\\{numeric\_type}$
+(assuming that \.{x5} is numeric, because \\{qq} represents `\.{x[]}'
+with no further\break
+ attributes), $\\{name\_type}(\\{qq})=\\{structured\_root}$,
+$\\{attr\_loc}(\\{qq})=0$, $\\{parent}(\\{qq})=p$,\cutpar
+
+\bugonpage D103, line 6 (06/25/04)
+
+\noindent
+The value of variable \.{x20b}
+appears in node~$\\{qqq2}=\\{link}(\\{qqq1})$, as you can well imagine.
+Similarly, the value of `\.{x.a}' appears in node $\\{q2}=\\{link}(\\{q1})$,
+where $\\{attr\_loc}(\\{q2})=h(a)$ and $\\{parent}(\\{q2})=p$.
+
+\bugonpage D114, line 12 (06/25/04)
+
+\noindent
+\qquad Such save stack entries are generated by \&{save} commands.
+
+\bugonpage D120, line 3 (06/25/04)
+
+\ninepoint\noindent
+[delete the line `The code here \dots', since the
+ code {\it doesn't\/} use the stated fact]
+
+\bugonpage D126, line 10 (06/25/04)
+
+\tenpoint\noindent
+If $\theta_0$ is supposed to have a given value $E_0$, we simply
+define $C_0=1$, $D_0=0$, and $R_0=E_0$.\cutpar
+
+\bugonpage D138, line 11 from the bottom (10/26/06)
+
+\tenpoint\noindent
+for the bisected interval are $z'_0=z_0$
+and $z''_0=z_0+(Z'_1+Z'_2+\cdots+Z'_n)/2^{l+1}$.
+
+\bugonpage D142, line 3 (06/25/04)
+
+\tenpoint\noindent
+out to hold if and only if $x_0\le x_1$ and $x_2\le x_3$, and either
+$x_1\le x_2$ or $(x_1-x_2)^2\le(x_1-x_0)(x_3-x_2)$.\cutpar
+
+\bugonpage D142, line 8 (10/26/06)
+
+\tenpoint\noindent\quad
+For example, if we start with $(x_1-x_0,x_2-x_1,x_3-x_2)=
+(X_1,X_2,X_3)=(7,-16,39)$, the\cutpar
+
+\bugonpage D142, lines 21--23 (06/25/04)
+
+\tenpoint\noindent
+monotonic
+cubic, then $B(x_0,x_1,x_2,x_3;{1\over2})$ is always between
+$.06[x_0,x_3]$ and $.94[x_0,x_3]$; and it is impossible for $\bar x$
+to be within~$\epsilon$ of such a number. Contradiction!
+(The constant .06 is actually $(2-\sqrt3\,)/4$; the worst case
+occurs for polynomials like $B(0,2-\sqrt3,1-\sqrt3,3;t)$.)
+
+\bugonpage D177, line 18 (06/25/04)
+
+\ninepoint\noindent
+$\\{cur\_x},\\{cur\_y}$: \\{scaled};\quad$\{\,$outputs of \\{skew},
+ \\{unskew}, and a few other routines$\,\}$
+
+\bugonpage D182, lines 27--29 (06/25/04)
+
+\noindent
+{\bf399.\quad}If
+ the segment numbers on the cycle are $t_1$, $t_2$, \dots, $t_m$,
+and if $m\le\\{max\_quarterword}$,
+we have $t_{k-1}\le t_k$ except for at most one value of~$k$. If there are
+no exceptions, $f$ will point to $t_1$; otherwise it will point to the
+exceptional~$t_k$.
+
+\bugonpage D184, line 18 (12/21/02)
+
+\ninepoint\noindent
+\qquad\\{chopped}: \\{integer};\quad
+$\{\,$positive if data truncated, negative if data dangerously large$\,\}$
+
+\bugonpage D184, line 25 (12/21/02)
+
+\ninepoint\noindent
+\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>0)\land(\\{chopped}=0)$
+ {\bf then} \\{xy\_round};
+
+\bugonpage D184, line 27 (12/21/02)
+
+\ninepoint\noindent
+\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>\\{unity})\land
+ (\\{chopped}=0)$ {\bf then} \\{diag\_round};
+
+\bugonpage D184, line 32 (12/21/02)
+
+\ninepoint\noindent
+\qquad{\bf if\/} $(\\{internal}[\\{autorounding}]\le0)\lor(\\{chopped}\ne0)$
+ {\bf then} \\{print\_spec}({\tt\char`",\]after\]subdivision\char`"})
+
+\bugonpage D185, lines 15--19 (12/21/02)
+
+\ninepoint\noindent
+\quad{\bf define} \\{procrustes}({\tt\char`#})${}\equiv{}${\bf if\/}
+ $\\{abs}(\.\#)\ge\\{dmax}$ {\bf then}\par\noindent
+\qquad\qquad\quad{\bf if\/} $\\{abs}(\.\#)>\\{max\_allowed}$ {\bf then}\par
+\noindent\qquad\qquad\qquad{\bf begin} $\\{chopped}\gets1$;\par\noindent
+\qquad\qquad\qquad{\bf if\/} $\.\#>0$ {\bf then} $\.\#\gets\\{max\_allowed}$
+ {\bf else} $\.\#\gets-\\{max\_allowed}$;\par\noindent
+\qquad\qquad\qquad{\bf end}\par\noindent
+\qquad\qquad\quad{\bf else if\/} $\\{chopped}=0$ {\bf then}
+ $\\{chopped}\gets-1$
+
+\bugonpage D185, old line 22 (12/21/02)
+
+\ninepoint\noindent
+\quad$p\gets\\{cur\_spec}$; $k\gets1$; $\\{chopped}\gets0$;
+ $\\{dmax}\gets\\{half}(\\{max\_allowed})$;
+
+\bugonpage D185, old line 28 (12/21/02)
+
+\ninepoint\noindent
+\quad{\bf if\/} $\\{chopped}>0$ {\bf then}
+
+\bugonpage D196, lines 3--8 (06/25/04)
+
+The first job is to fix things so that $x(t)$ plus the horizontal
+pen offset is an integer multiple of the
+current ``granularity'' when the derivative $x'(t)$ crosses through zero.
+The given cyclic path contains regions where $x'(t)\ge0$ and regions
+where $x'(t)\le0$. The \\{quadrant\_subdivide} routine is called into action
+before any of the path coordinates have been skewed, but some of them
+may have been negated. In regions where $x'(t)\ge0$ we have $\\{right\_type}=%
+\\{first\_octant}$ or $\\{right\_type}=\\{eighth\_octant}$; in regions where
+$x'(t)\le0$,
+we have $\\{right\_type}=\\{fifth\_octant}$ or $\\{right\_type}=\\{fourth%
+\_octant}$.
+
+\bugonpage D196, lines 15 and 16 (06/25/04)
+
+\noindent
+current pen might be unsymmetric in such a way that $x$ coordinates
+should round dif-\break ferently in different parts of the curve.
+These considerations imply that round$(x_0)$\cutpar
+
+\bugonpage D200, line 4 (06/25/04)
+
+\noindent
+and that there are similar ways to address other important offsets.\par
+\smallskip\ninepoint
+[Also delete the definitions of \\{north\_south\_edge}, etc.,
+on lines 11--15; those definitions are never used.]
+
+\bugonpage D212, line 18 (06/25/04)
+
+\noindent
+at $(x_0,y_0)$ and ends at $(x_1,y_1)$, it's possible to
+prove (by induction on the length of the truncated\cutpar
+
+\bugonpage D216, bottom line (06/25/04)
+
+\noindent
+we list it twice (with coordinates
+interchanged, so as to make the second octant look like\cutpar
+
+\bugonpage D217, lines 2--10 (06/25/04)
+
+\noindent
+$$\tabskip\centering
+\halign to\hsize{$\hfil#\;\mapsto\;{}$\tabskip=0pt&
+$#\hfil$&\quad in the #\hfil\tabskip\centering\cr
+w_2\;w_2\;w_2&(-5,6)\;(-5,6)\;(-5,6)\cr
+\noalign{\vskip\belowdisplayskip
+\vbox{\noindent\strut as the list of transformed and skewed offsets to use
+when curves that travel in the second octant. Similarly, we will have\strut}
+\vskip\abovedisplayskip}
+w_2\;w_2\;w_2&(7,-6)\;(7,-6)\;(7,-6)&third;\cr
+w_2\;w_2\;w_3\;w_3&(-7,1)\;(-7,1)\;(-3,2)\;(-3,2)&fourth;\cr
+w_3\;w_3\;w_3&(3,-2)\;(3,-2)\;(3,-2)&fifth;\cr
+w_3\;w_3\;w_0\;w_0&(-3,1)\;(-3,1)\;(1,0)\;(1,0)&sixth;\cr
+w_0\;w_0\;w_0&(1,0)\;(1,0)\;(1,0)&seventh;\cr
+w_0\;w_0\;w_0&(-1,1)\;(-1,1)\;(-1,1)&eighth.\cr}$$
+
+\bugonpage D218, lines 2 and 3 (06/25/04)
+
+\noindent
+count followed by pointers to the eight offset lists, followed
+by an indication of the pen's range of values.
+
+\bugonpage D218, line 15 (06/25/04)
+
+The \\{link} field of a pen header node should be \\{null} if and only if
+the pen is a single point.
+
+\bugonpage D227, line 11 (06/25/04)
+
+\noindent
+\\{endpoint}. The cubics all have
+monotone-nondecreasing $x(t)$ and $y(t)$.
+
+\bugonpage D228, lines 4--7 from the bottom (06/25/04)
+
+\noindent
+In odd-numbered octants, the numerator and denominator of this fraction
+will be nonnegative; in even-numbered octants they will both be nonpositive.
+Furthermore we always have $0=s_0\le s_1\le\cdots\le s_n=\infty$. The goal of
+\\{offset\_prep} is to find an offset index~$k$ to associate with
+each cubic, such that the slope $s(t)$ of the cubic satisfies
+
+\bugonpage D231, line 7 (06/25/04)
+
+\ninepoint\noindent
+\quad{\bf if\/} $\\{abs}(\\{du})\ge\\{abs}(\\{dv})$ {\bf then}\quad $\{\,
+ s_{k-1}\le1$ or $s_k\le1\,\}$
+
+\bugonpage D231, line 16 (06/25/04)
+
+\noindent
+and return towards $s_{k-1}$ or $s_k$,
+respectively, yielding another solution of $(*)$.
+
+\bugonpage D246, line 4 from the bottom (06/25/04)
+
+\noindent
+dinate fields. Hence, for example,
+the point $\bigl($$\\{x\_coord}(p)-\\{left\_v}(q),\\{y\_coord}(p)+%
+\\{right\_u}(p)$$\bigr)$
+also\cutpar
+
+\bugonpage D248, line 24 (06/25/04)
+
+\ninepoint\noindent
+\qquad{\bf else begin} $\\{beta}\gets\\{minor\_axis}$;
+ $\\{gamma}\gets\\{major\_axis}$;
+ $\\{theta}\gets0$;
+
+\bugonpage D256, line 2 from the bottom (06/25/04)
+
+\noindent
+we have $2^lu_{\min}=2^lu_0+U_{\min}$, etc.; the condition for overlap
+reduces to
+
+\bugonpage D261, line 5 (06/25/04)
+
+\ninepoint\noindent
+\\{tol}: \\{integer};\quad$\{\,$bound on the uncertainty in the overlap test$\,\}$
+
+\bugonpage D262, lines 26 and 27 (06/25/04)
+
+\ninepoint\noindent
+\qquad\quad$\\{uv}\gets\\{uv}+\\{int\_packets}$;\quad$\{\,$switch
+ from \\{l\_packets} to \\{r\_packets}$\,\}$\par\noindent
+\qquad\quad$\\{decr}(\\{cur\_tt})$;
+ $\\{xy}\gets\\{xy}-\\{int\_packets}$;\quad$\{\,$switch
+ from \\{r\_packets} to \\{l\_packets}$\,\}$
+
+\bugonpage D262, line 11 from the bottom (06/25/04)
+
+\ninepoint\noindent
+\qquad$\\{xy}\gets\\{xy}+\\{int\_packets}$;\quad$\{\,$switch
+ from \\{l\_packets} to \\{r\_packets}$\,\}$
+
+\bugonpage D274, line 15 from the bottom (06/25/04)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin if\/} $\\{serial\_no}>\\{el\_gordo}-\\{s\_scale}$
+ {\bf then}\par\noindent
+\qquad\qquad\quad$\\{overflow}(\.{"independent\]variables"},
+ \\{serial\_no}\mathbin{\hbox{\bf div}}\\{s\_scale})$;\par\noindent
+\qquad\qquad$\\{type}(\#)\gets\\{independent}$;
+ $\\{serial\_no}\gets\\{serial\_no}+\\{s\_scale}$;
+ $\\{value}(\#)\gets\\{serial\_no}$;
+
+\bugonpage D309, line 21 (06/25/04)
+
+\noindent
+{\bf670.\quad}We go to \\{restart} instead of to \\{switch},
+because we might enter \\{token\_state} after the error\cutpar
+
+\bugonpage D314, line 6 from the bottom (06/25/04)
+
+\noindent
+\\{macro\_def} or \\{iteration}).
+
+\bugonpage D330, line 1 (06/25/04)
+
+\noindent
+{\bf728.\quad}A {\bf suffix} or {\bf text} parameter will have been scanned as
+a token list pointed to by \\{cur\_exp},\cutpar
+
+\bugonpage D354, lines 15 and 16 from the bottom (06/25/04)
+
+\noindent\hangindent 3em
+$\\{cur\_type}=\\{unknown\_boolean}$ means that \\{cur\_exp} points to a
+capsule node that is in
+a ring of equivalent booleans whose value has not yet been defined.
+
+\bugonpage D354, lines 11 and 12 from the bottom (06/25/04)
+
+\noindent\hangindent 3em
+$\\{cur\_type}=\\{unknown\_string}$ means that \\{cur\_exp} points to a
+capsule node that is in
+a ring of equivalent strings whose value has not yet been defined.
+
+\bugonpage D354, lines 7 and 8 from the bottom (06/25/04)
+
+\noindent\hangindent 3em
+$\\{cur\_type}=\\{unknown\_pen}$ means that \\{cur\_exp} points to a
+capsule node that is in
+a ring of equivalent pens whose value has not yet been defined.
+
+\bugonpage D355, lines 1 and 2 (06/25/04)
+
+\noindent\hangindent 3em
+$\\{cur\_type}=\\{unknown\_path}$ means that \\{cur\_exp} points to a
+capsule node that is in
+a ring of equivalent paths whose value has not yet been defined.
+
+\bugonpage D355, lines 5 and 6 (06/25/04)
+
+\noindent\hangindent 3em
+$\\{cur\_type}=\\{unknown\_picture}$ means that \\{cur\_exp} points to a
+capsule node that is in
+a ring of equivalent pictures whose value has not yet been defined.
+
+\bugonpage D355, lines 21 and 22 (06/25/04)
+
+\noindent
+$\\{cur\_type}=\\{token\_list}$ means that \\{cur\_exp} points to a linked list
+of tokens.
+
+\bugonpage D356, lines 2--3 (06/25/04)
+
+\noindent
+nodes have $\\{name\_type}=\\{capsule}$,
+and their \\{type} field is one of the possibilities for \\{cur\_type}
+listed above.
+Also $\\{link}\le\\{void}$ in capsules that aren't part of a token list.
+
+\bugonpage D368, line 13 (06/25/04)
+
+\ninepoint\noindent
+\qquad\\{my\_var\_flag}: $0\to\\{max\_command\_code}$;\quad$\{\,$initial
+ value of \\{var\_flag}$\,\}$
+
+\bugonpage D378, line 9 from the bottom (06/25/04)
+
+\ninepoint\noindent
+\qquad\quad{\bf begin} $\\{cur\_type}\gets\\{known}$;
+ $\\{cur\_exp}\gets0$;
+ $\\{free\_node}(q,\\{dep\_node\_size})$;
+
+\bugonpage D380, line 12 (06/25/04)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin} $\\{type}(r)\gets\\{known}$;
+ $\\{value}(r)\gets0$;
+ $\\{free\_node}(p,\\{dep\_node\_size})$;
+
+\bugonpage D390, lines 2 and 3 (06/25/04)
+
+\noindent
+by a previous operation. We must maintain
+the value of $\\{right\_type}(q)$ in cases such as\break
+`|..\\{curl2\}z\{0,0\}..|'.
+
+\bugonpage D437, line 1 (06/25/04)
+
+\noindent
+{\bf996.\quad}And \\{do\_assignment} is similar to \\{do\_equation}:
+
+\bugonpage D439, line 10 (06/25/04)
+
+\ninepoint\noindent
+\qquad{\bf begin} $\\{nonlinear\_eq}(v,\\{cur\_exp},\\{false})$;
+ $\\{cur\_type}\gets t$;
+ {\bf goto} \\{done};
+
+\bugonpage D443, line 11 (06/25/04)
+
+\ninepoint\noindent
+\\{done}: {\bf if\/} $\\{eq\_type}(x)\mathbin{\hbox{\bf mod}}\\{outer\_tag}
+ \ne\\{tag\_token}$ {\bf then}
+ $\\{clear\_symbol}(x,\\{false})$;
+
+\bugonpage D452, line 9 (06/25/04)
+
+\noindent
+though they don't necessarily correspond to primitive tokens.
+
+\bugonpage D476, line 12 from the bottom (06/25/04)
+
+\ninepoint\noindent
+\quad{\bf if\/} $\\{nl}-\\{skip\_table}[c]>128$ {\bf then}
+
+\bugonpage D483, line 7 (06/25/04)
+
+\ninepoint\noindent
+\quad$\\{max\_tfm\_dimen}\gets16\ast\\{internal}[\\{design\_size}]-1
+ -\\{internal}[\\{design\_size}]\mathbin{\hbox{\bf div}}\Oct{10000000}$;
+
+\bugonpage D483, lines 15--17 (06/25/04)
+
+\ninepoint\noindent
+\qquad{\bf if\/} $x>0$ {\bf then}
+ $x\gets\\{max\_tfm\_dimen}$ {\bf else}
+ $x\gets-\\{max\_tfm\_dimen}$;\par\noindent
+\qquad{\bf end};\par\noindent
+\quad$x\gets\\{make\_scaled}(x\ast16,\\{internal}[\\{design\_size}])$;
+
+\bugonpage D496, line 2 (06/25/04)
+
+\noindent
+a pointer to
+an edge structure. Its mission is to describe the positive pixels
+in \.{GF} form,\cutpar
+
+\bugonpage D500, line 16 (06/25/04)
+
+\ninepoint\noindent
+\quad$\\{selector}\gets\\{old\_setting}$;
+ $\\{gf\_out}(\\{cur\_length})$;
+ $\\{gf\_string}(0,\\{make\_string})$;
+ $\\{decr}(\\{str\_ptr})$;
+
+\bugonpage D506, lines 8--10 (06/25/04)
+
+\noindent
+\MF\ it says,
+for example, `\.{(preloaded base=plain 1984.2.29)}', showing the year,
+month, and day that the base file was created. We have $\\{base\_ident}=0$
+before \MF's tables are loaded.
+
+\bugonpage D514, line 14 from the bottom (06/25/04)
+
+\noindent
+\.{CMMF}, should also be provided for commonly used bases such as \.{cmbase}.
+
+ % volume E
+\hsize=29pc
+
+\newbox\shorthyf \setbox\shorthyf=\hbox{-\kern-.05em}
+\mathchardef\period=`\.
+{\catcode`\-=\active \global\def-{\copy\shorthyf\mkern3.9mu}
+ \catcode`\.=\active \global\def.{\period\mkern3mu}}
+\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000
+ #1\unkern}} % `..' and `--'
+
+\bugonpage E1, line 3 (01/06/06)
+
+\tenpoint\noindent
+Zillions of alphabets can be generated by the programs in this book.
+All\cutpar
+
+\bugonpage E6, lines 16--19 (12/29/04)
+
+\textindent\bull
+ {\it square\_dots\/} tells whether dots should be square, not rounded;\smallskip
+\textindent\bull
+ {\it hefty\/} tells whether weight-reducing strategies should be used;\smallskip
+\textindent\bull\hangindent\parindent
+ {\it monospace\/} tells whether the characters should all be forced to
+ have the same width;
+
+\bugonpage E7, line 11 (12/21/02)
+
+\ninepoint\indent
+\\{hair}, \\{vair}, \\{stem}, \\{curve}, \\{ess}, \\{flare}, \\{dot\_size},
+ \\{bar}, \\{slab},
+
+\bugonpage E7, line 14 (12/21/02)
+
+\ninepoint\indent
+\\{crisp}, \\{tiny}, \\{fine};
+\medskip\noindent
+and \\{thin\_join} should not be less than \\{fine}.
+
+\bugonpage E19, line 19 (11/07/01)
+
+\tenpoint
+\line{\\{cap\_notch\_cut}\hskip 0pt plus1.5fil46/36\hfil31/36\hfil25/36\hfil
+24/36\hfil22/36\hskip0pt plus3fil25/36}
+
+\bugonpage E41, line 8 (12/21/02)
+
+\ninepoint\noindent\mathchardef\AM="2026 % ampersand
+\quad$\\{extra\_endchar}\gets\\{extra\_endchar}\AM
+ \.{\char`"charcode:=charcode+code\_offset;"}$;
+
+\bugonpage E53, line 7 (12/21/02)
+
+\def\frac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
+\ninepoint\noindent
+{\bf numeric} \\{mid\_thickness};
+ $\\{mid\_thickness}={\rm Vround}$ \frac1/3[$\\{vair},\\{stem}$];
+
+\bugonpage E125, line 6 from the bottom (07/10/05)
+
+\ninepoint\noindent
+$\\{top}\,y_1=\\{top}\,y_6=h$; $z_2=.5[z_3,z_1]+\\{bend}$;
+
+\bugonpage E125, line 3 from the bottom (07/10/05)
+
+\ninepoint\noindent
+{\bf draw} $z_1-\\{flourish\_change}\{\\{up}\}+(0,.15\\{asc\_height})
+ \{\\{up}\}$\par
+\line{\quad$\8{...}\{\\{right}\}(z_1+(2u,0))\8{---}z_6\8{...}\{\\{down}\}z_7$;
+ \hfil\% upper bar}
+
+\bugonpage E146, also pages 164 and 540 (02/08/03)
+
+\eightpoint\noindent
+[The labels on the new illustrations of beta, omega, and spadesuit
+are too large, and the resolution of the shapes is too small.]
+
+\bugonpage E147, line 11 from the bottom (04/23/04)
+
+\ninepoint\noindent
+$x_0=x_1=x_9$; $\\{lft}\,x_{0r}={\rm hround}(1.5u-.5\\{hair})$;
+$x_2=x_4=x_6=x_8=.5w-.25u$;
+
+\bugonpage E147, line 8 from the bottom (04/23/04)
+
+\ninepoint\noindent
+$y_5=.5[y_4,y_6]$; $\\{top}\,y_{6r}-\\{bot}\,y_{4r}=\\{vstem}+\\{eps}$;
+ $\\{bot}\,y_{8r}=-\\{oo}$; $y_7=y_9=.55[y_6,y_8]$;
+
+\bugonpage E149, line 8 from the bottom (04/23/04)
+
+\ninepoint\noindent
+$y_5+.1\\{x\_height}=y_7=.5[y_6,y_8]$; $\\{bot}\,y_{6r}=-\\{oo}$;
+
+\bugonpage E157, line 11 (02/29/08)
+
+\ninepoint\noindent
+\line{{\bf filldraw} $z_{1l}\8{--}z_{2l}\8{...}(x_3,y_{2l})\8{...}z\8{--}
+ z_{1r}\8{--}\rm cycle$;\hfil\% stem}
+
+\bugonpage E161, line 7 from the bottom (04/23/04)
+
+\ninepoint\noindent
+$\\{top}\,y_{1r}=\\{x\_height}+\\{oo}$; $y_2=y_4=.5[y_1,y_3]$;
+ $\\{bot}\,y_{3r}=-\\{oo}$;
+
+\bugonpage E209, line 3 (12/29/04)
+
+\ninepoint
+\rightline{\% This lowercase italic alphabet was prepared by D. E. Knuth
+ in December, 1979,}
+
+\bugonpage E377, lines 3 and 4 from the bottom (12/22/02)
+
+\ninepoint\noindent
+\qquad {\bf path} \\{p\_}; $\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...}
+ \\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]\8{...}z_{@2}$\par\noindent
+\qquad\quad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}%
+ {\rm cycle}$;\par\noindent
+\qquad{\bf if\/} $(y_{\$\$}>y_\$) \ne ({\rm ypart}\,\hbox{\bf precontrol}\,1
+ \,\hbox{\bf of\/}\,\\{p\_} > {\rm ypart}\,\hbox{\bf postcontrol}\,1\,
+ \,\hbox{\bf of\/}\,\\{p\_})$:\par\noindent
+\qquad\quad$\\{p\_}=z_{\$\$l}\{z_{@1}-z_{\$\$l}\}\8{...}
+ \\{darkness}[z_{@1},.5[z_{@2},z_{\$\$l}]]$\par\noindent
+\qquad\qquad$\8{---}z_{\$l}\8{--}z_{\$r}\8{--}z_{@0}\8{--}z_{\$\$r}\8{--}%
+ {\rm cycle}$;\ {\bf fi}\par\noindent
+\line{\qquad {\bf filldraw} \\{p\_};\hfil \% arm and beak}
+
+\bugonpage E489, bottom line (06/25/04)
+
+\ninepoint\noindent
+{\bf labels}$(1,2,3,4,5,6)$; {\bf endchar};\hfil\break
+[Labels `\.5' and `\.6' should also be added to
+ the lower illustration on page E488.]
+
+\bugonpage E545, line 11 from the bottom (12/29/04)
+
+The most important general routine in |cmbase| is probably the {\it pos}\cutpar
+
+\bugonpage E551, line 3 from the bottom (12/29/04)
+
+\noindent quantities needed in the |calu|
+programs are also established at this time.
+
+
+\bugonpage E577, right column (12/23/02)
+
+\eightpoint\noindent
+\\{p\_}\kern1pt, 305, 377.\par\noindent
+{\bf padded}, 103--111, 117--121, $\underline{549}$.
+
+\bugonpage E578, left column (12/23/02)
+
+\eightpoint\noindent
+{\bf postcontrol}, 347, 377.\par\noindent
+{\bf precontrol}, 347, 377.
+
+ \bye
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.three b/Master/texmf-dist/source/generic/knuth/errata/errata.three
new file mode 100644
index 00000000000..5f00f73b22e
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.three
@@ -0,0 +1,1898 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\input manmac
+\font\sltt=cmsltt10
+\font\niness=cmss9
+\font\ninessi=cmssi9
+\proofmodefalse
+\raggedbottom
+\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\cutpar{{\parfillskip=0pt\par}}
+
+\def\rhead{Bugs in {\tensl Computers \& Typesetting}}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
+ \hrule width\hsize
+ \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
+ \nobreak\medskip}
+\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\newcount\nn
+\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
+\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}
+
+\noindent This is a list of all corrections made to {\sl Computers \&
+Typesetting}, Volumes A--E\null, between the date of publication
+(May, 1986) and 15~June 1987.
+It also includes corrections made to
+the softcover version of {\sl The \TeX book}, beginning with the
+sixth printing (January 1986); these are the same as corrections to
+Volume~A\null. Corrections to the softcover version of {\sl The
+\slMF\kern1ptbook\/} are the same as corrections to Volume~C\null.
+ % volume A
+\bugonpage A7, fourth line from the bottom (6/28/86)
+
+\tenpoint\line{%
+since control sequences of the second kind always have exactly one
+symbol after}
+
+\bugonpage A35, second-last line (1/31/87)
+
+\rightline{\eightssi He may run who reads.}
+\smallskip
+\rightline{\eightss--- HABAKKUK 2\thinspace:\thinspace2 (c.~600 B.C.)}
+\smallskip
+\rightline{\eightssi He that runs may read.}
+
+\bugonpage A43, lines 8--9 (8/23/86)
+
+\tenpoint\noindent
+of Appendix B\null, which defines |%| to be a special kind of symbol so that you
+can use it for comments, defines the control sequence |\%| to mean
+a percent sign.
+
+\bugonpage A45, lines 10--13 (8/23/86)
+
+\ninepoint\noindent
+\TeX\ adds~64. Hence
+code 127 can be typed |^^?|, and
+the dangerous bend sign can be obtained by saying
+|{\manual^^?}|. However, you must change the category code of character
+127 before using it, since this character ordinarily has category~15
+(^{invalid}); say, e.g., |\catcode`\^^?=12|.
+The |^^| notation is different from |\char|, because |^^|\cutpar
+
+\bugonpage A76, line 7 (8/23/86)
+
+\ninepoint
+\noindent
+and extra space; for example, these quantities are
+$3.33333\pt$, $1.66666\pt$, $1.11111\pt$,\cutpar
+
+\bugonpage A83, bottom line (5/19/87)
+
+\tenpoint\noindent[This line should be flush right.]
+
+\bugonpage A111, 7th-last line, right-hand column (2/15/87)
+
+\ninepoint
+if $b=10000$ and $-10000<p<10000$ and $q<10000$;
+
+\bugonpage A117, second-last line (6/10/87)
+
+\eightpoint
+marks; sometimes also |$\|\||$| ($\Vert$).
+You can say, e.g., `|\footnote\dag{...}|'.
+
+\bugonpage A124, lines 6--11 (2/26/87)
+
+\begingroup \def\n{\thinspace$n$}
+\ninepoint\noindent
+of insertion; an additional `|\penalty-10000|' item is assumed
+to be present at the end of the vertical list, to ensure that a legal
+breakpoint exists.) \ Let $u$ be the natural height plus depth of that
+least-cost box, and let $r$ be the penalty associated with the optimum
+breakpoint. Decrease $g$ by~$uf$, and increase $q$ by~$r$. \ (If
+|\tracingpages||=1|, the log file should now get a cryptic message that says
+`|% split|\n\ |to| $v$|,|$u$ |p=|$r$'. For~example,
+\begintt
+% split254 to 180.2,175.3 p=100
+\endtt
+\endgroup
+
+\bugonpage A158, lines 6--8 (2/20/87)
+
+\ninepoint\noindent the
+second atom, which has subscript~$i$; the superscripts are empty except for the
+last atom, whose superscript is~$\overline{n+1}$. This superscript is
+itself a math list consisting of one atom, whose nucleus is~$n+1$; and that
+nucleus is a math list consisting of three atoms.
+
+\bugonpage A171, line 20 (1/26/86)
+
+\ninepoint\line{%
+will be surrounded by more space than there would be
+if that subformula were enclosed}
+
+\bugonpage A176, line 1 (8/23/86)
+
+\ninepoint
+You can insert `|\noalign||{|$\langle$vertical mode
+material$\rangle$|}|' just after any \kern-1pt|\cr| within\cutpar
+
+\bugonpage A248, line 17 (6/17/86)
+
+\ninepoint
+`|&|' or `|\span|' or `|\cr|', it needs some way to decide which
+alignment is involved.\cutpar
+
+\bugonpage A249, line 20 (6/17/86)
+
+\ninepoint\noindent
+line (see Chapter~8).
+If you don't want a~|\cr| at the end of a certain line,
+just type\cutpar
+
+\bugonpage A276, line 19 (1/27/86)
+
+\ninepoint\vskip-3pt
+\beginsyntax
+ \alt^|\font|<control sequence><equals><file name><at clause>
+ \alt<global assignment>
+\endsyntax
+[The bottom line of p.~276 will now move to the top of p.~277.]
+
+\bugonpage A277, lines 31--32 (1/27/86)
+
+\ninepoint
+\beginsyntax
+<font assignment>\is^|\fontdimen|<number><font><equals><dimen>
+\endsyntax
+
+\bugonpage A286, sixth-last line (4/28/87)
+
+\ninepoint\noindent
+|\sfcode| table as described in Chapter~12; characters numbered 128
+to~255 set the\cutpar
+
+\bugonpage A287, line 19 (2/15/87)
+
+\ninepoint
+\textindent{$\bull$}|\-|.\enskip
+This ``discretionary hyphen'' command is defined in Appendix H.
+
+\bugonpage A292, lines 9--10 (2/15/87)
+
+\ninepoint
+\textindent{$\bull$}|\-|.\enskip
+This command is usually equivalent to `|\discretionary{-}{}{}|'; the `|-|' is
+therefore interpreted as a ^{hyphen}, not as a minus sign.
+\ (See Appendix~H.)
+
+\bugonpage A308, lines 25--26 (6/1/87)
+
+\ninepoint\indent
+|\def\appendroman#1#2#3{\edef#1{\csname|\parbreak
+| \expandafter\gobble\string#2\romannumeral#3\endcsname}}|
+
+\bugonpage A312, lines 10--14 (8/23/86)
+
+\ninepoint
+\ansno12.11: The interline glue will be zero, and the natural height is
+$1+1-3+2=1\pt$ (because the depth of\/ |\box2| isn't included in the natural
+height); so the glue will ultimately become |\vskip-1pt| when it's set.
+Thus, |\box3| is $3\pt$ high, $2\pt$ deep, $4\pt$ wide. Its reference
+point coincides with that of\/ |\box2|; to get to the reference point
+of\/ |\box1| you go up $2\pt$ and right $3\pt$.
+
+\bugonpage A312, line 21 (8/23/86)
+
+\ninepoint\noindent
+up $4\pt$ to get to the upper left corner of
+|\box4|; then down $-1.6\pt$, i.e., up $1.6\pt$, to\cutpar
+
+\bugonpage A319, line 20 (31/3/87)
+
+\ninepoint\noindent
+make ordinary periods act like |\cdot| symbols: Just define
+|\mathcode`.| to be |"0201|,\cutpar
+
+\bugonpage A328, lines 18--19 (5/14/87)
+
+\ninepoint\noindent
+not performed
+while the expansion is taking place, and the control sequences following
+|\def| are expanded; so the result is an infinite string
+\begintt
+A\def A\def A\def A\def A\def A\def A\def A\def A...
+\endtt
+
+\bugonpage A329, lines 14--15 (8/23/86)
+
+\ninepoint
+\ansno20.5: The |##| feature is indispensable when the replacement text of
+a definition contains other definitions. For example, consider
+
+\bugonpage A356, lines 6--7 (1/30/87)
+
+\ninepoint\noindent
+| \spaceskip=.3333em \xspaceskip=.5em\relax}|\hfil\break
+|\def\ttraggedright{\tt\rightskip=0pt plus2em\relax}|
+
+\bugonpage A356, line 33 (6/1/87)
+
+\ninepoint\noindent
+| \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}|
+
+\bugonpage A357, tenth-last line (10/13/86)
+
+\ninepoint\noindent
+|\let\sp=^ \let\sb=_ {\catcode`\_=\active \global\let_=\_}|
+
+\bugonpage A357, third-last and second-last lines (2/17/87)
+
+\ninepoint\noindent
+|\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t|%
+\hfil\break\strut
+| \else\let\nxt\egroup\fi\fi \nxt}|
+
+\bugonpage A364, fifth-last line (1/30/87)
+
+\ninepoint\noindent
+|\def\fmtname{plain}\def\fmtversion{2.3} % identifies the current format|
+
+\bugonpage A368, bottom line (2/26/86)
+
+\ninepoint
+\line{that includes the symbols
+{\tentex\char'30},~{\tentex\char1}, {\tentex\char'32}, {\tentex\char'34},
+and~{\tentex\char'35}, and he finds that this makes it much more}
+
+\bugonpage A396, line 13 (8/23/86)
+
+\ninepoint
+| \hyphenpenalty=10000 \exhyphenpenalty=10000|
+
+\bugonpage A414, line 10 (3/4/86)
+
+\ninepoint\noindent
+|\font\titlefont=cmssdc10 at 40pt % titles in chapter openings|
+
+\bugonpage A427, line 7 (2/23/86)
+
+\ninepoint\noindent
+the author's book
+{\sl Computer Modern Typefaces}.)
+
+\bugonpage A428, lines 18--20 (6/15/87)
+
+\tenpoint\noindent
+The first eight of these all have essentially the same layout;
+but |cmr5| needs no ligatures, and many of the symbols of |cmti10|
+have different shapes.
+For example, the ^{ampersand} becomes an `^{E.T.}', and the
+^{dollar} changes to ^{pound} ^{sterling}:
+
+\bugonpage A434, lines 25--28 (8/17/86)
+
+\tenpoint\noindent
+from |\nu|~($\nu$). Similarly,
+|\varsigma|~($\varsigma$) should not be confused with |\zeta|~($\zeta$).
+It turns out that |\varsigma| and |\upsilon| are almost never used in
+math formulas; they are included in plain \TeX\ primarily because they are
+sometimes needed in short Greek citations (cf.~Appendix~J).
+
+\bugonpage A447, line 32 (6/1/87)
+
+\ninepoint\noindent
+ters
+also affect mathematical typesetting:
+dimension parameters
+ \hbox{|\delimitershortfall|}\cutpar
+
+\bugonpage A455, new paragraph to follow line 9 (2/15/87)
+
+\begingroup
+\hyphenpenalty=-1000 \pretolerance=-1 \tolerance=1000
+\doublehyphendemerits=-100000 \finalhyphendemerits=-100000
+\ddanger The control sequence ^|\-| is equivalent to
+|\discretionary{\char|$\,h$|}{}{}|, where $h$ is the
+^|\hyphenchar| of the current font, provided that $h$ lies
+between 0 and~255. Otherwise |\-| is equivalent to |\discretionary{}{}{}|.
+
+\endgroup % end the special hyphenation conventions
+
+\bugonpage A457, left column, fifth-last line (2/17/87)
+
+\eightpoint\indent\qquad 155, 201, {\it 305}, 324, $\underline{357}$, 394--395;
+
+\bugonpage A458, left column, line 6 (2/15/87)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt\char`\\-} (discretionary hyphen), 95, 283, 287,\par
+\indent\qquad 292, $\underline{455}$.
+
+\bugonpage A458, left column, near the bottom (5/19/87)
+
+\eightpoint {\tt!} (exclamation point), 51,
+{\it 72}, 73, 75, {\it 169}.
+\nobreak\medskip\noindent[This saves a line that otherwise would make
+the index too long on page 481!]
+
+\bugonpage A458, right column, line 10 (11/27/86)
+
+\eightpoint {\tt\char`\~}
+(tilde), 38, 51, 343, $\underline{353}$; {\sl see also\/} ties.
+
+\bugonpage A458, right column (6/14/87)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt\char`\\accent} (general accent), 9, 54, 86, 283, $\underline{286}$.
+
+\bugonpage A461, entry for boxes (3/16/87)
+
+\eightpoint boxes, 63--67, 77--83, 221--229.
+
+\bugonpage A461, entry for {\tt\char`\\centering} (1/28/86)
+
+\eightpoint {\tt\char`\\centering}, $\underline{347}$, 348, 362.
+
+\bugonpage A462, entry for \<code assignment> (1/27/86)
+
+\eightpoint \<code assignment>, $\underline{277}$.
+
+\bugonpage A464, left column, line 3 (2/15/87)
+
+\eightpoint
+discretionary hyphens, 28, 95--96, 453, $\underline{455}$.
+
+\bugonpage A465, right column, line 8 (5/3/87)
+
+\eightpoint
+expansion of expandable tokens, 212--216, 238,
+
+\bugonpage A466, entry for {\tt\char`\\font}, second line (1/27/86)
+
+\eightpoint \indent\qquad 271, $\underline{276}$.
+
+\bugonpage A466, new entry (2/3/87)
+
+\eightpoint \indent\<fontdef token>, $\underline{271}$.
+
+\bugonpage A467, entry for {\tt\char`\\hideskip} (1/28/86)
+
+\eightpoint {\tt\char`\\hideskip}, $\underline{347}$, 348, 354.
+
+\bugonpage A468, left column line 2 (2/15/87)
+
+\eightpoint\indent\qquad 351, 395, {\it 414}, 454, 455.
+
+\bugonpage A470, entry for {\tt manfnt} (1/15/86)
+
+\eightpoint {\tt manfnt}, 44, 408, 414.
+
+\bugonpage A471, entry for {\tt\char`\\medbreak} (10/13/86)
+
+\eightpoint {\tt\char`\\medbreak}, 111, 113, $\underline{353}$,
+ {\it355}, {\it419}, {\it422}.
+
+\bugonpage A471, entry for {\tt\char`\\moveright} (2/27/87)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt\char`\\moveright}, 80--81, {\it 221}, $\underline{282}$.
+
+\bugonpage A471, entry for Mozart, second line (3/19/86)
+
+\eightpoint \indent\qquad Gottlieb (= Theophilus = Amadeus), 409.
+
+\bugonpage A472, the entry for {\tt\char`\\not} (2/12/87)
+
+\eightpoint\noindent
+[The overprinting here is intentional, since {\tt\char`\\not} is a
+character of width zero. More than a dozen people have reported this
+as an error, but it is not!]
+
+\bugonpage A477, entry for {\tt\char`\\span} (5/3/87)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt\char`\\span}, 215, 238, $\underline{243}$, {\it244}, $\underline{245}$,
+248, 249,\par
+\indent\qquad 282, {\it330}, 385.
+
+\bugonpage A479, entry for ties, second line (11/27/86)
+
+\eightpoint \indent\qquad {\it173}, 353, {\it404}.
+
+\bugonpage A480, changes to various entries (6/14/87)
+
+\eightpoint
+\newbox\astbox \setbox\astbox=\hbox to0pt{\hss\lower1pt\hbox{*}}
+\def\prim#1{\par\indent\copy\astbox{\tt\char`\\#1}}
+\prim{underline}, {\it130--131}, 141, 291, $\underline{443}$.
+\prim{unhbox}, 120, 283, $\underline{285}$, {\it354}, {\it356}, {\it361},
+ {\it399}.
+\prim{unhcopy}, 120, 283, $\underline{285}$, {\it353}.
+\prim{unkern}, $\underline{280}$.
+\prim{unpenalty}, $\underline{280}$.
+\prim{unskip}, 222--223, $\underline{280}$, 286, {\it313}, {\it392},
+ {\it418--419}.
+\prim{unvbox}, 120, 254, $\underline{282}$, 286, {\it354}, {\it361},
+ {\it363}, {\it364}, {\it392}, {\it399}, {\it417}.
+\prim{unvcopy}, 120, $\underline{282}$, 286, {\it361}.
+\prim{vadjust}, 95, 105, 109, 110, 117, 259, $\underline{281}$, 393, 454.
+\prim{valign}, 249, 283, $\underline{285}$--$\underline{286}$, 302,
+ {\it335}, {\it397}.
+\prim{vcenter}, 150--151, 159, 170, 193, 222, 242,
+\prim{vfil}, 71, $\underline{72}$, 111, 256, 281, 286, 417.
+\prim{vfill}, 24, 25, 71, $\underline{72}$, 256--257, 281, 286.
+\prim{vfilneg}, $\underline{72}$, 111, 281, 286.\par
+|\voidb@x|, $\underline{347}$, 348.
+
+\bugonpage A481, left column (6/14/87)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt\char`\\vss}, 71, $\underline{72}$, {\it 255}, 281, 286.
+
+ % volume B
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\buginvol B, in general (7/28/86)
+
+\tenpoint\noindent
+[A number of entries were mistakenly omitted from the mini-indexes
+on the right-hand pages. Here is a combined list of all the missing
+items; you can mount it inside the back cover, say, as a secondary mini-index
+when the first one fails\dots\ ]
+
+\nobreak\medskip
+\setbox0=\vbox{\eightpoint \hsize=11pc \catcode`\_=\active \let_=\_
+ \rightskip=0pt plus 100pt minus 10pt
+ \pretolerance 10000
+ \hyphenpenalty 10000 \exhyphenpenalty 10000
+ \noindent\vbox to1pt{}\par % 1pt = \topskip - \ninept
+ \def\&#1{\hbox{\bf#1\/}} % boldface type for reserved words
+ \obeylines
+ \def\makeref #1 #2 #3#4
+ {\nn=#2 \hangindent=1em \noindent\\{#1}%
+ \if#3:: \else\unhcopy\eqbox \fi#4, \S\number\nn.\par}
+ \makeref active_base 222 =$1$
+ \makeref aux 213 =macro
+ \makeref begin_name 515 :\&{procedure}
+ \makeref big_switch 1030 =$60$
+ \makeref choice_node 689 =$15$
+ \makeref cur_boundary 271 :$0\to \\{save\_size}$
+ \makeref cur_c 724 :\\{quarterword}
+ \makeref cur_group 271 :\\{group\_code}
+ \makeref cur_i 724 :\\{four\_quarters}
+ \makeref cur_level 271 :\\{quarterword}
+ \makeref do_extension 1348 :\&{procedure}
+ \makeref dvi_buf 595 :\&{array}
+ \makeref dvi_gone 595 :\\{integer}
+ \makeref dvi_limit 595 :\\{dvi\_index}
+ \makeref dvi_offset 595 :\\{integer}
+ \makeref dvi_ptr 595 :\\{dvi\_index}
+ \makeref end_graf 1096 :\&{procedure}
+ \makeref error 82 :\&{procedure}
+ \makeref error_stop_mode 73 =$3$
+ \makeref font_base 12 =$0$
+ \makeref font_info 549 :\&{array}
+ \makeref get_token 365 :\&{procedure}
+ \makeref glue_base 222 =$2626$
+ \makeref half_buf 595 :\\{dvi\_index}
+ \makeref handle_right_brace 1068 :\&{procedure}
+ \makeref hash_base 222 =$258$
+ \makeref head 213 =macro
+ \makeref hyf_distance 921 :\&{array}
+ \makeref hyf_next 921 :\&{array}
+ \makeref hyf_num 921 :\&{array}
+ \makeref index 302 =macro
+ \makeref inf 448 :\\{boolean}
+ \makeref init_col 788 :\&{procedure}
+ \makeref init_span 787 :\&{procedure}
+ \makeref input_ln 31 :\&{function}
+ \makeref interaction 73 :$0\to 3$
+ \makeref limit 302 =macro
+ \makeref line_width 830 :\\{scaled}
+ \makeref macro_call 389 :\&{procedure}
+ \makeref main_control 1030 :\&{procedure}
+ \makeref mem 116 :\&{array}
+ \makeref mem_bot 12 =$0$
+ \makeref mem_end 118 :\\{pointer}
+ \makeref mem_top 12 =macro
+ \makeref mlist_to_hlist 726 :\&{procedure}
+ \makeref mode 213 =macro
+ \makeref mode_line 213 =macro
+ \makeref more_name 516 :\&{function}
+ \makeref mu 448 :\\{boolean}
+ \makeref name 302 =macro
+ \makeref nest 213 :\&{array}
+ \makeref off_save 1064 :\&{procedure}
+ \makeref open_log_file 534 :\&{procedure}
+ \makeref output_active 989 :\\{boolean}
+ \makeref p 498 :\\{pointer}
+ \makeref param_stack 308 :\&{array}
+ \makeref pool_file 50 :\\{alpha\_file}
+ \makeref pool_ptr 39 :\\{pool\_pointer}
+ \makeref prefixed_command 1211 :\&{procedure}
+ \makeref prev_depth 213 =macro
+ \makeref prev_graf 213 =macro
+ \makeref prev_prev_r 830 :\\{pointer}
+ \makeref print_err 73 =macro
+ \makeref r 960 :\\{trie\_pointer}
+ \makeref reconstitute 906 :\&{function}
+ \makeref resume_after_display 1200 :\&{procedure}
+ \makeref save_ptr 271 :$0\to \\{save\_size}$
+ \makeref save_stack 271 :\&{array}
+ \makeref scan_dimen 448 :\&{procedure}
+ \makeref scan_math 1151 :\&{procedure}
+ \makeref short_display 174 :\&{procedure}
+ \makeref show_node_list 182 :\&{procedure}
+ \makeref start 302 =macro
+ \makeref state 302 =macro
+ \makeref str_pool 39 :\&{packed}\ \&{array}
+ \makeref str_ptr 39 :\\{str\_number}
+ \makeref str_start 39 :\&{array}
+ \makeref tail 213 =macro
+ \makeref trap_zero_glue 1229 :\&{procedure}
+ \makeref trie 921 :\&{array}
+ \makeref trie_char 921 =macro
+ \makeref trie_link 921 =macro
+ \makeref trie_op 921 =macro
+ \makeref vlist_out 629 :\&{procedure}
+ \makeref write_loc 1345 :\\{pointer}
+ }
+\hbox{\nsize=\ht0 \advance\nsize-\topskip
+ \divide\nsize by 3 \divide\nsize by\ninept
+ \multiply\nsize by\ninept \advance\nsize\topskip
+ \vsplit0 to\nsize \kern1pc
+ \msize=\ht0 \advance\msize-\topskip
+ \divide\msize by 2 \divide\msize by\ninept
+ \multiply\msize by\ninept \advance\msize\topskip
+ \vbox to\nsize{\vsplit0 to\msize\vss}\kern1pc
+ \vbox to\nsize{\box0\vss}}
+
+\buginvol B, in general (4/6/87)
+
+\tenpoint\noindent[The percent signs in all the comments (for example,
+on pages 7 and 50) are in the wrong font! Change `{\tt\%}' to `\%'.]
+
+\bugonpage Bvi, bottom line, and top line of next page (10/12/86)
+
+{\hsize=29pc
+\tenpoint\noindent
+puter Science Report 1097 (Stanford, California, April 1986), 146~pp.
+\ {\it The {\sltt WEB} programs for four utility programs that are
+often used with \TeX: {\sltt POOLtype}, {\sltt TFtoPL},
+{\sltt PLtoTF}, and {\sltt DVItype}.}
+\par}
+
+\bugonpage B2, line 32 (4/22/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]2.2\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
+
+\bugonpage B7, new line after line 25 (1/28/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf if} $\\{max\_in\_open}\ge128$ {\bf then} $\\{bad}\gets6$;
+
+\bugonpage B13, first three lines (4/7/87)
+
+\tenpoint\noindent
+The `\\{name}' parameter, which is of type `{\bf packed array
+$[\langle\\{any}\rangle]$ of \\{char}}', stands for the name of
+the external file that is being opened for input or output.
+Blank spaces that might appear in \\{name} are ignored.
+
+\bugonpage B14, line 30 (4/7/87)
+
+\tenpoint\noindent
+{\bf 31.\quad}%
+The \\{input\_ln} function brings the next line of input from the specified
+file into available\cutpar
+
+\bugonpage B18, line 30 (5/22/86)
+
+\ninepoint\noindent
+\\{str\_ptr}: \\{str\_number};\quad
+$\{\,$number of the current string being created$\,\}$
+
+\bugonpage B21, first line of mini-index, right column (6/14/87)
+
+\eightpoint
+\indent\\{pool\_name}\unhcopy\eqbox|"string"|, \S11.
+
+\bugonpage B34, lines 5--6 (6/14/87)
+
+\tenpoint\noindent
+to delete a token, and/or if some fatal error
+occurs while \TeX\ is trying to fix a non-fatal one. But such recursion
+is never more than two levels deep.
+
+\bugonpage B55, lines 12--13 (4/21/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf if} $r=p$ {\bf then if} $\\{rlink}(p)\ne p$ {\bf then}
+ $\langle\,$Allocate entire node $p$ and {\bf goto} \\{found}%
+ {\sevenrm\kern.5em129}$\,\rangle$;
+
+\bugonpage B57, lines 25--28 (6/14/87)
+
+\tenpoint\noindent
+The first of these has $\\{font}=\\{font\_base}$, and its \\{link}
+points to the second;
+the second identifies the font and the character dimensions.
+The saving feature about oriental characters is that most of them have
+the same box dimensions. The \\{character} field of the first \\{char\_node}
+is a ``\\{charext}'' that distinguishes between graphic symbols whose
+dimensions are identical for typesetting purposes. (See the \MF\ manual.)
+Such an extension of \TeX\ would not be difficult; further details are
+left to the reader.
+
+\bugonpage B58, second line of section 136 (7/23/86)
+
+\tenpoint\noindent
+the values corresponding to `|\hbox{}|'. The \\{subtype} field is set to
+\\{min\_quarterword}, since that's\cutpar
+
+\bugonpage B66, lines 2--8 (4/21/87)
+
+\tenpoint\noindent
+location is
+more efficient than dynamic allocation when we can get away with it. For
+example, locations \\{mem\_bot} to $\\{mem\_bot}+3$ are always used to store the
+specification for glue that is `\hbox{\tt 0pt plus 0pt minus 0pt}'. The
+following macro definitions accomplish the static allocation by giving
+symbolic names to the fixed positions. Static variable-size nodes appear
+in locations \\{mem\_bot} through \\{lo\_mem\_stat\_max}, and static
+single-word nodes appear in locations \\{hi\_mem\_stat\_min} through
+\\{mem\_top}, inclusive. It is harmless to let \\{lig\_trick} and
+\\{garbage} share the same location of \\{mem}.
+
+\bugonpage B67, line 23 (4/13/87)
+
+\ninepoint\noindent\hskip30pt
+$\{\,$previous \\{mem\_end}, \\{lo\_mem\_max}, and \\{hi\_mem\_min}$\,\}$
+
+\bugonpage B71, line 17 (4/15/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin while} $p>\\{mem\_min}$ {\bf do}
+
+\smallskip\eightpoint\noindent[Now \\{null} can be removed from the mini-index.]
+
+\bugonpage B74, line 24 (4/15/87)
+
+\ninepoint\noindent
+{\bf procedure} \\{show\_node\_list}($p\;{:}\;\\{integer}$);\quad
+$\{\,$prints a node list symbolically$\,\}$
+
+\bugonpage B74, line 33 (4/15/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf while} $p>\\{mem\_min}$ {\bf do}
+
+\bugonpage B84, line 12 (2/15/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{relax}=0$\quad$\{\,$do nothing ( {\tt\char`\\relax} )$\,\}$
+
+\bugonpage B86, third line of section 210 (8/23/86)
+
+\tenpoint\noindent
+that their special nature is easily discernible.
+The ``expandable'' commands come first.
+
+\bugonpage B88, line 23 (5/22/86)
+
+\ninepoint\noindent
+{\bf procedure\/}\ $\\{print\_mode}(m:\\{integer})$;\quad
+$\{\,$prints the mode represented by $m\,\}$
+
+\bugonpage B93, lines 3--4 (8/17/86)
+
+{\tenpoint\parindent=1em
+In the first region we have 128 equivalents for ``active characters'' that
+act as control sequences, followed by 128 equivalents for single-character
+control sequences.
+\par}
+
+\bugonpage B130, ninth-last line (5/7/87)
+
+\tenpoint\noindent
+This variable has six possible values:
+
+\bugonpage B151, line 9 (4/22/87)
+
+\ninepoint\noindent\hskip20pt
+{\bf begin if} $(\\{end\_line\_char}<0)\lor(\\{end\_line\_char}>127)$
+ {\bf then} \\{incr}(\\{limit});\par\noindent\hskip20pt
+{\bf if} $\\{limit}=\\{start}$ {\bf then}\quad
+ $\{\,$previous line was empty$\,\}$
+
+\bugonpage B160, lines 17--20 (7/28/86)
+
+\tenpoint\noindent
+{\bf 389.\quad}%
+After parameter scanning is complete, the parameters are moved to the
+\\{param\_stack}. Then the macro body is fed to the scanner; in other words,
+\\{macro\_call} places the defined text of the control sequence at the
+top of\/ \TeX's input stack, so that \\{get\_next} will proceed to read it
+next.
+
+\bugonpage B200, top line (5/5/87)
+
+\tenpoint\noindent{\bf 495.\quad}%
+ When we begin to process a new {\tt\char`\\if}, we set
+$\\{if\_limit}\gets\\{if\_code}$; then
+if\/ {\tt\char`\\or} or {\tt\char`\\else} or {\tt\char`\\fi}\cutpar
+
+\bugonpage B217, lines 15--16 (6/14/87)
+
+\tenpoint\noindent
+|DVI| format.
+
+\bugonpage B224, lines 4--7 of section 560 (10/22/86)
+
+\tenpoint\noindent
+name and area strings \\{nom} and \\{aire}, and the
+``at'' size~$s$. If $s$~is negative, it's the negative of a scale factor
+to be applied to the design size; $s=-1000$ is the normal case.
+Otherwise $s$ will be substituted for the design size; in this
+case, $s$ must be positive and less than $2048\rm\,pt$
+(i.e., it must be less than $2^{27}$ when considered as an integer).
+
+\bugonpage B224, second-last line (4/28/87)
+
+\ninepoint\noindent
+\\{done}: {\bf if} \\{file\_opened} {\bf then} \\{b\_close}(\\{tfm\_file});\par
+\noindent\hskip10pt $\\{read\_font\_info}\gets g$;
+
+\bugonpage B255, mini-index at the bottom (4/15/87)
+
+\eightpoint
+$\\{mag}=\rm macro$, \S236.
+
+\bugonpage B257, lines 11--13 (6/14/87)
+
+\ninepoint
+\noindent\hskip20pt{\bf if} $c\ge\\{qi}(128)$ {\bf then}
+ \\{dvi\_out}(\\{set1});\par
+\noindent\hskip20pt\\{dvi\_out}(\\{qo}($c$));
+
+\bugonpage B260, lines 7--8 (4/15/87)
+
+\tenpoint\noindent\hskip10pt
+In the case of \\{c\_leaders} (centered leaders), we want to increase \\{cur\_h}
+by half of the excess space not occupied by the leaders; and in the
+case of \\{x\_leaders} (expanded leaders) we increase\cutpar
+
+\bugonpage B267, mini-index at the bottom (4/15/87)
+
+\eightpoint
+\\{cur\_s}: \\{integer}, \S616.
+$\\{mag}=\rm macro$, \S236.
+$\\{pop}=142$, \S586.
+
+\bugonpage B271, line 10 (8/23/86)
+
+\tenpoint\noindent
+which will be ignored in the calculations
+because it is a highly negative number.
+
+\bugonpage B285, lines 23 and 24 (5/4/87)
+
+\tenpoint\noindent
+the current string would be `{\tt.\char`\^.\char`\_/}'
+if $p$ points to the \\{ord\_noad} for $x$ in the (ridiculous) formula
+`{\tt\char`\\sqrt\char`\{a\char`\^\char`\{\char`\\mathinner\char`\{%
+b\char`\_\char`\{c\char`\\over x+y\char`\}\char`\}\char`\}\char`\}\char`\$}'.
+
+\bugonpage B296, lines 3--5 (5/8/87)
+
+\tenpoint\noindent
+box~$b$ and
+changes it so that the new box is centered in a box of width~$w$.
+The centering is done by putting {\tt\char`\\hss} glue at the left and right
+of the list inside $b$, then packaging the new box; thus, the
+actual box might not really be centered, if it already contains
+infinite glue.
+
+\bugonpage B346, line 19 (5/19/87)
+
+\ninepoint\noindent
+\\{pass\_number}: \\{halfword};\quad
+$\{\,$the number of passive nodes allocated on this pass$\,\}$
+
+\bugonpage B350, lines 36 and 37 (1/28/87)
+
+\ninepoint\noindent
+$v$: \\{pointer};\quad
+$\{\,$points to a glue specification or a node ahead of \\{cur\_p}$\,\}$
+\par\noindent
+$t$: \\{integer};\quad
+$\{\,$node count, if \\{cur\_p} is a discretionary node$\,\}$
+
+\bugonpage B353, lines 8--22 (1/28/87)
+
+\ninepoint
+\noindent\hskip10pt$s\gets\\{cur\_p}$;\par
+\noindent\hskip10pt{\bf if} $\\{break\_type}>\\{unhyphenated}$ {\bf then}
+ {\bf if} $\\{cur\_p}\ne\\{null}$ {\bf then}\par
+\noindent\hskip30pt$\langle\,$Compute the discretionary
+ \\{break\_width} values{\sevenrm\kern.5em840}$\,\rangle$;\par
+\noindent\hskip10pt{\bf while} $s\ne\\{null}$ {\bf do}\par
+\noindent\hskip30pt\vdots\hskip30pt [as before, but indented one less notch]\par
+\noindent\hskip10pt{\bf end};
+
+\bugonpage B354, line 6 (1/28/87)
+
+\tenpoint\noindent
+will be the background plus $l_1$, so the length from \\{cur\_p} to \\{cur\_p}
+should be $\gamma+l_0+l_1-l$,
+minus the length of nodes that will be discarded after the discretionary break.
+
+\bugonpage B354, lines 12--18 (1/28/87)
+
+\ninepoint
+\noindent\hskip10pt{\bf begin} $t\gets\\{replace\_count}(\\{cur\_p})$;\kern5pt
+ $v\gets\\{cur\_p}$;\kern5pt $s\gets\\{post\_break}(\\{cur\_p})$;\par
+\noindent\hskip10pt{\bf while} $t>0$ {\bf do}\par
+\noindent\hskip20pt{\bf begin} $\\{decr}(t)$;\kern5pt
+ $v\gets\\{link}(v)$;\kern5pt
+ $\langle\,$Subtract the width of node $v$ from \\{break\_width}%
+ {\sevenrm\kern.5em841}$\,\rangle$;\par
+\noindent\hskip20pt{\bf end};\par
+\noindent\hskip10pt{\bf while} $s\ne\\{null}$ {\bf do}\par
+\noindent\hskip20pt{\bf begin} $\langle\,$Add the width of
+ node $s$ to \\{break\_width} and increase $t$, unless it's
+ discardable{\sevenrm\kern.5em842}$\,\rangle$;\par
+
+\bugonpage B354, new line after line 21 (1/28/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf if} $t=0$ {\bf then} $s\gets\\{link}(v)$;\quad
+ $\{\,$more nodes may also be discardable after the break$\,\}$
+
+\bugonpage B354, lines 26--34 (1/28/87)
+
+\ninepoint\noindent
+[Change `$s$' to `$v$' throughout this section (8 times).]
+
+\bugonpage B354, line 9 from the bottom (1/28/87)
+
+\tenpoint\noindent{\bf 842.\quad}%
+\ninepoint$\langle\,$Add the width of
+ node $s$ to \\{break\_width} and increase $t$, unless it's
+ discardable{\sevenrm\kern.5em842}$\,\rangle\equiv$
+
+\bugonpage B355, lines 1--3 (1/28/87)
+
+\ninepoint
+\noindent\hskip20pt$\\{hlist\_node},\\{vlist\_node},\\{rule\_node}$:
+ $\\{break\_width}[1]\gets\\{break\_width}[1]+\\{width}(s)$;\par
+\noindent\hskip20pt\\{kern\_node}: {\bf if} $(t=0)\land
+ (\\{subtype}(s)\ne\\{acc\_kern})$ {\bf then}
+ $t\gets-1$\quad$\{\,$discardable$\,\}$\par
+\noindent\hskip30pt{\bf else} $\\{break\_width}[1]\gets
+ \\{break\_width}[1]+\\{width}(s)$;\par
+\noindent\hskip20pt{\bf othercases}
+ \\{confusion}({\tt\char'42 disc2\char'42})\par
+\noindent\hskip20pt{\bf endcases};\par
+\noindent\hskip10pt$\\{incr}(t)$
+
+\bugonpage B355, patches to mini-index at bottom (1/28/87)
+
+\eightpoint
+$\\{acc\_kern}=2$, \S155.\par
+$\\{incr}=\rm macro$, \S16.\par
+$t$: \\{integer}, \S830.\par
+$v$: \\{pointer}, \S830.
+
+\bugonpage B372, lines 12--14 (1/28/87)
+
+\ninepoint
+\noindent\hskip40pt$\langle\,$Change discretionary to compulsory
+ and set $\\{disc\_break}\gets\\{true}${\sevenrm\kern.5em882}$\,\rangle$\par
+\noindent\hskip30pt{\bf else if\/} $(\\{type}(q)=\\{math\_node})\lor
+ (\\{type}(q)=\\{kern\_node})$ {\bf then} $\\{width}(q)\gets0$;
+
+\bugonpage B380, fifth-last line (5/7/87)
+
+\begingroup\tenpoint\noindent\def\!{\kern-1pt}\def\.#1{\hbox{\tt#1}}
+\.b and \.c, the two patterns with and without hyphenation are
+$\.a\,\.b\,\.-\,\.{c\!d}\,\.{e\!f}$ and $\.a\,\.{b\!c}\,\.{d\!e}\,\.f$.
+Thus the\cutpar\endgroup
+
+\bugonpage B386, lines 2--4 (5/21/87)
+
+\tenpoint\noindent
+hyphenation,
+\TeX\ first looks to see if it is in the user's exception dictionary. If not,
+hyphens are inserted based on patterns that appear within the given word,
+using an algorithm due to Frank~M. Liang.
+
+\bugonpage B397, line 28 (5/21/87)
+
+\tenpoint\noindent
+$h=z-c$. It follows that location \\{trie\_max} will
+never be occupied in \\{trie}, and we will have\cutpar
+
+\bugonpage B415, the mini-index (4/6/87)
+
+\eightpoint\noindent[Delete the spurious entry for `$c$'.]
+
+\bugonpage B419, mini-index entry for \\{c} (4/6/87)
+
+\eightpoint $c$: \\{integer}, \S994.
+
+\bugonpage B422, line 24 (8/23/86)
+
+\ninepoint\noindent
+\hskip20pt\\{prev\_p}: \\{pointer};\quad
+$\{\,$predecessor of $p\,\}$
+
+\bugonpage B435, line 16 (10/12/86)
+
+\ninepoint\noindent
+\hskip20pt$\\{width}(p)\gets\\{font\_info}[k].\\{sc}$;\quad
+$\{\,$that's \\{space}$(f)\,\}$\par\noindent
+\hskip20pt$\\{stretch}(p)\gets\\{font\_info}[k+1].\\{sc}$;\quad
+$\{\,$and \\{space\_stretch}$(f)\,\}$\par\noindent
+\hskip20pt$\\{shrink}(p)\gets\\{font\_info}[k+2].\\{sc}$;\quad
+$\{\,$and \\{space\_shrink}$(f)\,\}$\par
+\smallskip\eightpoint\noindent
+[And the mini-index gets three new entries:
+$\\{space}=macro$, \S558.
+$\\{space\_shrink}=macro$, \S558.
+$\\{space\_stretch}=macro$, \S558.]
+
+\bugonpage B495, lines 18 and 19 (2/15/87)
+
+\ninepoint\noindent
+[delete these lines, since the cases cannot occur]
+
+\bugonpage B510, line 8 (12/15/86)
+
+\ninepoint\noindent\hskip30pt
+({\tt"Pretend\]that\]you're\]Hercule\]Poirot:\]Examine\]all\]clues,"})
+
+\bugonpage B527, new line to follow line 13 (6/17/86)
+
+{\tenpoint\parindent=1em
+This program doesn't bother to close the input files that may still be open.
+\par}
+
+\bugonpage B534, fourth-last line (5/4/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{write\_stream}(\hbox{\tt\char`\#})\equiv\\{info}(
+ \hbox{\tt\char`\#}+1)$\quad $\{\,$stream number (0 to 17)$\,\}$
+
+\bugonpage B544, left column (1/28/87)
+
+\eightpoint
+\leftline{\\{acc\_kern}:\quad$\underline{155}$, 191, 837, 842, 879, 1125.}
+
+\bugonpage B546, entry for \\{c} (4/6/87)
+
+\eightpoint\noindent[Add a reference to section $\underline{994}$.]
+
+\bugonpage B547, left column (4/7/87)
+
+\eightpoint
+\leftline{\\{char}:\quad 19, 26--27, 520, 534.}
+
+\bugonpage B547, left column (6/14/87)
+
+\eightpoint
+\leftline{Chinese characters:\quad 134, 585.}
+
+\bugonpage B553, entry for \\{font\_base} (6/14/87)
+
+\eightpoint\noindent[Insert a reference to section 134.]
+
+\bugonpage B555, right column, new entry (10/25/86)
+
+\eightpoint
+\leftline{{\tt Huge page...},\quad 641.}
+
+\bugonpage B556, entry for \\{incr} (1/28/87)
+
+\eightpoint\noindent[Add a reference to section 842.]
+
+\bugonpage B557, entry for \\{is\_char\_node} (1/28/87)
+
+\eightpoint\noindent[Delete the reference to section 881.]
+
+\bugonpage B557, right column (6/14/87)
+
+\eightpoint
+\leftline{Japanese characters:\quad 134, 585.}
+
+\bugonpage B560, right column (1/28/87)
+
+\eightpoint
+\leftline{\\{max\_in\_open}:\quad$\underline{11}$, 14, 304, 328.}
+
+\bugonpage B561, left column, line 10 (4/15/87)
+
+\eightpoint
+\leftline{\qquad 169--172, 174, 178, 182, 1249, 1312, 1334.}
+
+\bugonpage B561, left column (5/1/87)
+
+\eightpoint
+\leftline{{\tt Missing font identifier}:\quad 577.}
+
+\bugonpage B563, left column, line 2 (4/15/87)
+
+\eightpoint
+\leftline{\qquad 136, 145, 149--154, 164, 168--169, 175--176, 182,}
+
+\bugonpage B563, right column (6/14/87)
+
+\eightpoint
+\leftline{oriental characters:\quad 134, 585.}
+
+\bugonpage B569, right column, in appropriate places (10/12/86)
+
+\eightpoint
+\leftline{\\{space}:\quad 547, $\underline{558}$, 752, 755, 1042.}
+\leftline{\\{space\_shrink}:\quad 547, $\underline{558}$, 1042.}
+\leftline{\\{space\_stretch}:\quad 547, $\underline{558}$, 1042.}
+
+\bugonpage B570, third-last line (1/28/87)
+
+\eightpoint\noindent\qquad
+ 786, 795, 809, 819--820, 822, 837, 842--844, 866,
+
+\bugonpage B571, right column (10/25/86)
+
+\eightpoint
+\leftline{{\tt The following...deleted},\quad 641, 992, 1121.}
+
+\bugonpage B571, right column (4/7/87)
+
+\eightpoint
+\leftline{\\{text\_char}:\quad $\underline{19}$, 20, 25, 47.}
+
+\bugonpage B573, right column (5/1/87)
+
+\eightpoint\noindent
+[Delete the entry for `{\tt Undefined font code}'.]
+
+\bugonpage B576, line 2 (1/28/87)
+
+\ninepoint\noindent
+$\langle\,$Add the width of
+ node $s$ to \\{break\_width} and increase $t$, unless it's
+ discardable{\sevenrm\kern.5em842}$\,\rangle$\par
+\noindent\qquad {\eightpoint Used in section 840.}
+
+\bugonpage B591, line 6 from the bottom (1/28/87)
+
+\ninepoint\noindent
+ $\langle\,$Subtract the width of node $v$ from \\{break\_width}%
+ {\sevenrm\kern.5em841}$\,\rangle$\quad
+ {\eightpoint Used in section 840.}
+
+ % volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+
+\bugonpage C14, top two lines (3/16/87)
+
+\danger The recursive midpoint rule for curve-drawing was discovered in 1959
+by Paul de Casteljau, who showed that the curve could be described
+algebraically by the remarkably simple formula
+
+\bugonpage C54, sixth-last to fourth-last lines (10/13/86)
+
+\ninepoint Jonathan H. Quick (a student) used `|a.plus1|' as the name
+of a variable at the beginning of his program; later he said `|let|
+|plus=+|'. How could he refer to the variable `|a.plus1|' after that?
+
+\bugonpage C76, line 14 (10/13/86)
+
+\tenpoint
+\newdimen\longesteq
+\setbox0=\hbox{\indent$z_{12}-z_{11}=z_{14}-z_{13}$\quad}
+\longesteq=\wd0
+\noindent\hbox to \longesteq{\indent
+ $x_4=w-.01\\{in}$\hfil}%
+Point 4 should be one-hundredth of an inch inside\cutpar
+
+\bugonpage C103, line 12 (10/12/86)
+
+\tenpoint
+$\\{ht}\0=\\{body\_height}\0$; \ $.5[\\{ht}\0,-\\{dp}\0]=\\{axis}\0$;
+
+\bugonpage C105, line 13 (10/13/86)
+
+\ninepoint
+The vertical line just to the right of the italic left parenthesis
+shows the italic\cutpar
+
+\bugonpage C113, lines 20--27 (8/23/86)
+
+{\catcode`\@=\active
+\def@#1@{\begingroup\def\_{\kern.04em
+ \vbox{\hrule width.3em height .6pt}\kern.08em}%
+ \ifmmode\mathop{\bf#1}\else\hbox{\bf#1\/}\fi\endgroup}
+\danger The command `@erase@ @fill@ $c$' is an abbreviation for
+`@cullit@; @unfill@~$c$; @cullit@'; this zeros out the pixel values inside
+the cyclic path~$c$, and sets other pixel values to~1 if they were positive
+before erasing took place. \ (It works because the initial @cullit@ makes
+all the values 0 or~1, then the @unfill@ changes the values inside~$c$
+to 0 or negative. The final @cullit@ gets rid of the negative values,
+so that they won't detract from future filling and drawing.) \ You can
+also use `@draw@', `@filldraw@', or `@drawdot@' with `@erase@'; for example,
+`@erase@ @draw@~$p$' is an abbreviation for `@cullit@; @undraw@~$p$;
+@cullit@', which uses the currently-picked-up pen as if it were an
+eraser applied to path~$p$.
+
+}
+
+\bugonpage C124, line 9 (6/17/86)
+
+\eightpoint
+\noindent\hskip1.8in
+$\\{branch}_2=\\{flex}((30,570),(10,590),(-1,616))$
+
+\bugonpage C130, 3rd-last line (9/25/86)
+
+\ninepoint\noindent
+{\sl Geometry\/ \bf 1} (1986), 123--140]: Given a sequence
+
+\bugonpage C144, sixth line of the program (8/23/86)
+
+\ninepoint\noindent\hbox to\parindent{\hfil\sevenrm6\ \ \ }%
+$y_2=.1h$; \ $\\{top}\,y_3=.4h$;
+
+\bugonpage C148, the line before the illustration (11/27/86)
+
+\ninepoint\noindent
+are polygons with 32 and 40 sides, respectively:
+
+\smallskip\noindent
+[New illustrations are needed here, since \MF\ version 1.3 improves
+the accuracy of pen polygons.]
+
+\bugonpage C149, 7th line after the illustration (10/24/86)
+
+\ninepoint
+\line{$(200,y+100\pm\alpha)$, where
+$\alpha=\sqrt5/4\approx0.559$. If we digitize these outlines and fill the}
+
+\bugonpage C178, second-last line (8/23/86)
+
+\ninepoint\noindent
+(If $t_3=t_1$~transum~$t_2$, then
+$z$~transformed~$t_3=z$~transformed~$t_1+z$~transformed~$t_2$,\cutpar
+
+\bugonpage C198, fifth-last and fourth-last lines (10/13/86)
+
+\ninepoint\vskip-3pt
+\begindisplay
+$\\{top}\,y_2={\rm round}(\\{top}\,\beta)$.
+\enddisplay
+Such operations occur frequently in practice, so plain \MF\ provides
+convenient\cutpar
+
+\bugonpage C212, lines 9--11 from the bottom (8/23/86)
+
+\ninepoint
+\qquad
+ \alt\[point]\<numeric expression>\[of]\<path primary>\continuerule
+ \alt\[precontrol]\<numeric expression>\[of]\<path primary>\continuerule
+ \alt\[postcontrol]\<numeric expression>\[of]\<path primary>
+
+\bugonpage C233, lines 13--14 (2/15/87)
+
+\ninepoint\noindent
+one column of white
+pixels, if the character is $2a$ pixels wide, because the right edge of
+black pixels is specified here to have the $x$~coordinate $2a-1$.
+
+\bugonpage C247, lines 23--25 (11/27/86)
+
+\ninepoint
+\ansno 16.2:
+ `{\bf pencircle} scaled 1.06060' is the diamond but
+`{\bf pencircle} scaled 1.06061' is~the square. \ (This assumes that
+$\\{fillin}=0$. If, for example, $\\{fillin}=.1$, the change doesn't
+occur until the diameter is 1.20204.) \ The next change is at diameter
+1.5, which\cutpar
+
+\bugonpage C262, lines 1--4 (7/28/86)
+
+\ninepoint
+When we come to macros whose use has not yet been explained---for
+example, somehow |softjoin| and |stop| never made it
+into Chapters 1 through~27---we shall consider them from a user's
+viewpoint. But most of the comments that follow are addressed to a
+potential base-file designer.
+
+\bugonpage C266, line 16 (8/17/86)
+
+\ninepoint\noindent
+variables; they have the side effect of changing the variable's value.
+
+\bugonpage C276, line 26 (6/23/86)
+
+\ninepoint
+\noindent
+| if charic<>0: r((w+charic*hppp,h.o_),(w+charic*hppp,.5h.o_)); fi|
+
+\bugonpage C286, lines 24--26 (10/13/86)
+
+\ninepoint\noindent
+but \MF\ won't let you. And even if this had worked, it wouldn't have
+solved the problem; it would simply have put |ENDFOR| into the
+replacement text of |ast|, because expansion is inhibited when the
+replacement text is being read.
+
+\bugonpage C290, line 1 (8/23/86)
+
+\ninepoint \noindent{\it 2.\enspace Fortuitous loops.\enspace}%
+The `^{max}' and `^{min}' macros in Appendix~B make use of the fact\cutpar
+
+\bugonpage C298, third-last line (8/23/86)
+
+\ninepoint
+$t[\,u_1,\ldots,u_n]\;=\;t\bigl[t[u_1,\ldots,u_{n-1}],t[u_2,\ldots,u_n]\,\bigr]$
+
+\bugonpage C304, 14th-last line (2/15/87)
+
+\ninepoint\noindent
+[replace this `|\smallskip|' by a |\smallskip| between lines!]
+
+\bugonpage C307, fifth-last line (12/7/86)
+
+\ninepoint
+{\def\_{\kern.04em
+ \vbox{\hrule width.3em height .6pt}\kern.08em}%
+\bf adjust\_fit}(\<left sidebearing adjustment>,\thinspace
+ \<right sidebearing adjustment>);
+
+\bugonpage C312, line 34 (10/12/86)
+
+\ninepoint\noindent
+|params[2] = "sans_params"; fontname[2] = "cmssbx10";|
+
+\bugonpage C316, lines 19--21 (8/17/86)
+
+\ninepoint\noindent
+example,
+`|(some| |charht| |values| |had| |to| |be| |adjusted| |by| |as| |much|
+|as| |0.12pt)|' means that~you had too many different nonzero heights, but
+\MF\ found a way to reduce the number to at most~15 by changing some of
+them; none of them had to be\cutpar
+
+\bugonpage C319, line 3 (8/23/86)
+
+\ninepoint\noindent
+specified by saying, e.g.,
+
+\bugonpage C321, line 6 (7/28/86)
+
+\ninepoint\noindent
+| special "identifier " & font_identifier_;|
+
+\bugonpage C334, line 2 (6/23/86)
+
+\ninepoint\noindent
+| currentpicture := currentpicture shifted-(1,1); pix := currentpicture;|
+
+\bugonpage C339, tenth-last line (2/4/87)
+
+\ninepoint\noindent
+| Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave|
+
+\bugonpage C343, second-last line (8/23/86)
+
+\rightline{\eightssi
+the precise needs of a precise but limited intellectual goal.}
+
+\bugonpage C346, 2nd line of entry for `{\tt;}' (1/12/87)
+
+\eightpoint
+\qquad 217, 223--224, 263, 312.
+
+\bugonpage C348, line 6 (6/17/86)
+
+\eightpoint
+concatenation, of paths, {\eightit 70--71}, {\eightit 123}, 127,
+
+\bugonpage C348, just before `debugging' (3/16/87)
+
+\eightpoint
+de Casteljau, Paul de Faget, 14.
+
+\bugonpage C348, right column (3/16/87)
+
+\eightpoint\noindent
+[The entry for `|define_whole_vertical_blacker_pixels|' should be moved up
+before the entry for `|define_whole_vertical_pixels|'.]
+
+\bugonpage C352, left column (6/1/87)
+
+\eightpoint\indent\hbox to0pt{\hss\lower1pt\hbox{*}}%
+{\tt kern}, {\it 97}, {\it 316}, $\underline{317}$.
+
+\bugonpage C352, right column (3/8/87)
+
+\eightpoint\noindent
+[The entry for `|lowres|' belongs before the entry for `|lowres_fix|'.]
+
+\bugonpage C353, left column (3/8/87)
+
+\eightpoint\noindent
+[The entries for `|mode|' and `\<mode command>' belong before the entry
+for `|mode_def|'.]
+
+\bugonpage C353, entry for {\tt mode\char`\_def} (8/17/86)
+
+\eightpoint
+{\tt mode\char`\_def}, 94, 189, $\underline{\smash{\hbox{\it 270}}}$,
+{\it 278--279}.
+
+\bugonpage C355, right column (4/15/86)
+
+\eightpoint\noindent
+[The entry for `{\tt rulepen}' belongs before the entry for `rules'.]
+
+\bugonpage C355, right column (8/5/86)
+
+\eightpoint
+{\tt screenstrokes}, 191, $\underline{277}$.
+
+\bugonpage C355, 2nd line of entry for `semicolons' (1/12/87)
+
+\eightpoint
+\qquad 217, 223--224, 263, 312.
+
+\bugonpage C356, full names for the Stanfords (4/10/86)
+
+\eightpoint
+Stanford, Amasa Leland, 340.
+
+Stanford, Jane Elizabeth Lathrop, 340.
+
+ % Volume D
+\hsize=35pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+
+\buginvol D, in general (7/28/86)
+
+\tenpoint\noindent
+[A number of entries were mistakenly omitted from the mini-indexes
+on the right-hand pages. Here is a combined list of all the missing
+items; you can mount it inside the back cover, say, as a secondary mini-index
+when the first one fails\dots\ ]
+
+\nobreak\medskip
+\setbox0=\vbox{\eightpoint \hsize=11pc \catcode`\_=\active \let_=\_
+ \rightskip=0pt plus 100pt minus 10pt
+ \pretolerance 10000
+ \hyphenpenalty 10000 \exhyphenpenalty 10000
+ \noindent\vbox to1pt{}\par % 1pt = \topskip - \ninept
+ \def\&#1{\hbox{\bf#1\/}} % boldface type for reserved words
+ \obeylines
+ \def\makeref #1 #2 #3#4
+ {\nn=#2 \hangindent=1em \noindent\\{#1}%
+ \if#3:: \else\unhcopy\eqbox \fi#4, \S\number\nn.\par}
+ \makeref add_or_subtract 930 :\&{procedure}
+ \makeref after 427 :\&{array}
+ \makeref arg_list 720 :\\{pointer}
+ \makeref b 580 :\\{pixel\_color}
+ \makeref bad_exp 824 :\&{procedure}
+ \makeref before 427 :\&{array}
+ \makeref begin_name 770 :\&{procedure}
+ \makeref bilin1 968 :\&{procedure}
+ \makeref binary_mac 863 :\&{procedure}
+ \makeref blank_rectangle 567 :\&{procedure}
+ \makeref boc_c 1162 :\\{integer}
+ \makeref boc_p 1162 :\\{integer}
+ \makeref cf 298 :\\{fraction}
+ \makeref clockwise 453 :\\{boolean}
+ \makeref ct 298 :\\{fraction}
+ \makeref cubic_intersection 556 :\&{procedure}
+ \makeref cur_pen 403 :\\{pointer}
+ \makeref cur_rounding_ptr 427 :$0\to \\{max\_wiggle}$
+ \makeref cur_spec 403 :\\{pointer}
+ \makeref cur_x 389 :\\{scaled}
+ \makeref cur_y 389 :\\{scaled}
+ \makeref dely 557 :\\{integer}
+ \makeref dep_finish 935 :\&{procedure}
+ \makeref dep_list 587 =macro
+ \makeref dimen_head 1125 :\&{array}
+ \makeref dx 495 :\\{integer}
+ \makeref dy 495 :\\{integer}
+ \makeref d1 464 :$0\to 1$
+ \makeref end_name 772 :\&{procedure}
+ \makeref eqtb 201 :\&{array}
+ \makeref error_stop_mode 68 =$3$
+ \makeref firm_up_the_line 682 :\&{procedure}
+ \makeref get_next 667 :\&{procedure}
+ \makeref gf_buf 1152 :\&{array}
+ \makeref gf_offset 1152 :\\{integer}
+ \makeref gf_ptr 1152 :\\{gf\_index}
+ \makeref halfword 156 =$\\{min\_halfword}\to \\{max\_halfword}$
+ \makeref hash 201 :\&{array}
+ \makeref index 629 =macro
+ \makeref input_ln 30 :\&{function}
+ \makeref interaction 68 :$0\to 3$
+ \makeref j 357 :$0\to \\{move\_size}$
+ \makeref known_pair 872 :\&{procedure}
+ \makeref limit 629 =macro
+ \makeref m_spread 357 :\\{integer}
+ \makeref materialize_pen 865 :\&{procedure}
+ \makeref max_allowed 403 :\\{scaled}
+ \makeref max_c 813 :\&{array}
+ \makeref max_link 813 :\&{array}
+ \makeref max_tfm_dimen 1130 :\\{scaled}
+ \makeref mem_top 12 =macro
+ \makeref mem 159 :\&{array}
+ \makeref memory_word 156 =\&{record}
+ \makeref more_name 771 :\&{function}
+ \makeref m1 464 :\\{integer}
+ \makeref n 580 :\\{screen\_col}
+ \makeref n_sin_cos 145 :\&{procedure}
+ \makeref name 629 =macro
+ \makeref negate_dep_list 904 :\&{procedure}
+ \makeref new_knot 871 :\&{function}
+ \makeref node_to_round 427 :\&{array}
+ \makeref n1 464 :\\{integer}
+ \makeref octant_dir 395 :\&{array}
+ \makeref o1 453 :\\{small\_number}
+ \makeref o2 453 :\\{small\_number}
+ \makeref paint_row 568 :\&{procedure}
+ \makeref param 1096 :\&{array}
+ \makeref param_stack 633 :\&{array}
+ \makeref path_length 916 :\&{function}
+ \makeref perturbation 1119 :\\{scaled}
+ \makeref phi 542 :\\{angle}
+ \makeref pool_ptr 38 :\\{pool\_pointer}
+ \makeref post_head 843 :\\{pointer}
+ \makeref pre_head 843 :\\{pointer}
+ \makeref print_err 68 =macro
+ \makeref print_macro_name 722 :\&{procedure}
+ \makeref quarterword 156 =$0\to 255$
+ \makeref recycle_value 809 :\&{procedure}
+ \makeref row_transition 579 :\\{trans\_spec}
+ \makeref scan_text_arg 730 :\&{procedure}
+ \makeref scroll_mode 68 =$2$
+ \makeref set_controls 299 :\&{procedure}
+ \makeref sf 298 :\\{fraction}
+ \makeref show_context 635 :\&{procedure}
+ \makeref sorted 325 =macro
+ \makeref st 298 :\\{fraction}
+ \makeref start 629 =macro
+ \makeref start_sym 1077 :\\{halfword}
+ \makeref str_pool 38 :\&{packed}\ \&{array}
+ \makeref str_ptr 38 :\\{str\_number}
+ \makeref str_start 38 :\&{array}
+ \makeref take_part 910 :\&{procedure}
+ \makeref tfm_changed 1130 :\\{integer}
+ \makeref tol 557 :\\{integer}
+ \makeref tt 843 :\\{small\_number}
+ \makeref tx 954 :\\{scaled}
+ \makeref txx 954 :\\{scaled}
+ \makeref txy 954 :\\{scaled}
+ \makeref ty 954 :\\{scaled}
+ \makeref tyx 954 :\\{scaled}
+ \makeref tyy 954 :\\{scaled}
+ \makeref unsorted 325 =macro
+ \makeref uv 557 :$0\to \\{bistack\_size}$
+ \makeref xy 557 :$0\to \\{bistack\_size}$
+ \makeref x1 542 :\\{scaled}
+ \makeref x2 542 :\\{scaled}
+ \makeref x3 542 :\\{scaled}
+ \makeref y1 542 :\\{scaled}
+ \makeref y2 542 :\\{scaled}
+ \makeref y3 542 :\\{scaled}
+ }
+\hbox{\nsize=\ht0 \advance\nsize-\topskip
+ \divide\nsize by 3 \divide\nsize by\ninept
+ \multiply\nsize by\ninept \advance\nsize\topskip
+ \vsplit0 to\nsize \kern1pc
+ \msize=\ht0 \advance\msize-\topskip
+ \divide\msize by 2 \divide\msize by\ninept
+ \multiply\msize by\ninept \advance\msize\topskip
+ \vbox to\nsize{\vsplit0 to\msize\vss}\kern1pc
+ \vbox to\nsize{\box0\vss}}
+
+\buginvol D, in general (4/6/87)
+
+\tenpoint\noindent[The percent signs in all the comments (for example,
+on pages 7 and 42) are in the wrong font! Change `{\tt\%}' to `\%'.]
+
+\bugonpage Dvii, line 9 (9/25/86)
+
+{\tenpoint\noindent\hsize=29pc
+{\sl Discrete and Computational Geometry\/ \bf1} (1986), 123--140.
+\ \it Develops the theory\cutpar}
+
+\bugonpage D2, line 27 (6/17/86)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]METAFONT,\]Version\]1.3\char'23}\quad
+$\{\,$printed when \MF\ starts$\,\}$
+
+\bugonpage D18, line 30 (5/22/86)
+
+\ninepoint\noindent
+\\{str\_ptr}: \\{str\_number};\quad
+$\{\,$number of the current string being created$\,\}$
+
+\bugonpage D23, second line of mini-index, right column (6/14/87)
+
+\eightpoint
+\indent\\{pool\_name}\unhcopy\eqbox|"string"|, \S11.
+
+\bugonpage D30, lines 33--34 (6/14/87)
+
+\tenpoint\noindent
+to delete a token, and/or if some fatal error
+occurs while \MF\ is trying to fix a non-fatal one. But such recursion
+is never more than two levels deep.
+
+\bugonpage D63, lines 13--14 (5/5/87)
+
+\ninepoint\noindent
+[These two lines can be eliminated, since the variable \\{temp\_ptr}
+is no longer used! If you delete them, also remove \S158 from the
+list of sections where global variables are declared (pages D7 and D552),
+and remove \\{temp\_ptr} from the index on page D540.]
+
+\bugonpage D66, line 6 (5/22/86)
+
+\ninepoint\noindent
+{\bf function\/}\ $\\{get\_node}(s:\\{integer})$: \\{pointer};\quad
+$\{\,$variable-size node allocation$\,\}$
+
+\bugonpage D66, lines 31--32 (3/16/86)
+
+\tenpoint\noindent
+controlled
+growth helps to keep the \\{mem} usage consecutive when \MF\ is
+implemented on ``virtual memory'' systems.
+
+\bugonpage D67, lines 7--8 (4/21/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf if} $r=p$ {\bf then if} $\\{rlink}(p)\ne p$ {\bf then}
+ $\langle\,$Allocate entire node $p$ and {\bf goto} \\{found}%
+ {\sevenrm\kern.5em171}$\,\rangle$;
+
+\bugonpage D86, second line of section 198 (2/27/87)
+
+\noindent
+Individual class numbers have no semantic
+or syntactic significance, except in a few instances\cutpar
+
+\bugonpage D101, line 2 (3/16/86)
+
+\tenpoint\line{%
+like `{\tt x}', or they can
+combine the structural properties of arrays and records, like `{\tt x20a.b}'.
+A}
+
+\bugonpage D102, line 24 (3/16/86)
+
+\tenpoint\line{\kern10pt
+In other words, variables have a hierarchical structure that includes
+enough threads running}
+
+\bugonpage D127, line 10 (5/5/87)
+
+\ninepoint\noindent
+[Variable $r$ can be eliminated, since it is not
+used in this procedure! If you delete it, also remove $\underline{280}$
+from the corresponding index entry on page D536.]
+
+\bugonpage D129, line 15 (5/5/87)
+
+\ninepoint\noindent
+[This line can be eliminated, since \\{sine} and \\{cosine} are not
+used in this procedure! If you delete them, also remove $\underline{284}$
+from the corresponding index entries on pages D538 and D521.]
+
+\bugonpage D142, line 23 (4/24/87)
+
+\tenpoint\noindent
+$(7-\sqrt{28}\,)/12$; the worst case
+occurs for polynomials like $B(0,28-4\sqrt{28},14-5\sqrt{28},42;t)$.)
+
+\bugonpage D178, third-last line (7/30/86)
+
+\tenpoint\line{\quad
+The following code maintains the invariant relations
+$0\le \\{x0}<\max(\\{x1},\\{x1}+\\{x2})$, $\vert\\{x1}\vert<2^{30}$,}
+
+\bugonpage D228, line 13 (7/30/86)
+
+\ninepoint\noindent\kern10pt
+{\bf while} $\\{max\_coef}<\\{fraction\_half}$ {\bf do}
+
+\smallskip\eightpoint\noindent
+The mini-index at the bottom of the next page should also receive the following
+new entry:
+\smallskip\indent
+$\\{fraction\_half}={\rm macro}$, \S105.
+
+\bugonpage D228, 10th-last line (5/5/87)
+
+\ninepoint\noindent\hskip20pt
+{\bf begin} $\\{right\_type}(p)\gets k$;
+\smallskip
+\noindent[Also eliminate `$q,$' seven lines above this, and delete
+$\underline{497}$ from the index entry for \\{q} on page D536.]
+
+\bugonpage D248, lines 16--21 (11/27/86)
+
+\ninepoint\noindent\kern10pt
+$\\{alpha}\gets\\{abs}(u)$;\kern5pt
+ $\\{beta}\gets\\{abs}(v)$;\par\noindent\kern10pt
+{\bf if} $\\{alpha}<\\{beta}$ {\bf then}\par\noindent\kern20pt
+{\bf begin} $\\{alpha}\gets\\{abs}(v)$;\kern5pt
+ $\\{beta}\gets\\{abs}(u)$;\kern5pt
+{\bf end};\quad$\{\,$now $\alpha=\max(\vert u\vert,\vert v\vert)$,
+ $\beta=\min(\vert u\vert,\vert v\vert)\,\}$\par\noindent\kern10pt
+{\bf if} $\\{internal}[\\{fillin}]\ne0$ {\bf then}\par\noindent\kern20pt
+$d\gets d-\\{take\_fraction}(\\{internal}[\\{fillin}],
+ \\{make\_fraction}(\\{beta}+\\{beta},\\{delta}))$;\par\noindent\kern10pt
+$d\gets\\{take\_fraction}((d+4)\;{\bf div}\;8,\\{delta})$;\kern5pt
+$\\{alpha}\gets\\{alpha}\;{\bf div}\;\\{half\_unit}$;
+
+\bugonpage D263, line 20 (3/16/86)
+
+\tenpoint\noindent
+instead of \\{false}, the other routines will simply log the fact
+that they have been called; they won't\cutpar
+
+\bugonpage D268, line 2 (4/28/87)
+
+\tenpoint\noindent
+Given the number~$k$ of an open window, the pixels of positive
+weight in \\{cur\_edges} will be shown\cutpar
+
+\bugonpage D301, line 6 of section 652 (5/5/87)
+
+\ninepoint\noindent
+[This line can be eliminated, since variable $s$ is not
+used in this procedure! If you delete it, also remove $\underline{652}$
+from the corresponding index entry on page D537; remove 652 from
+the index entries for \\{param\_size} and \\{param\_start} on page D534;
+and remove \\{param\_size} from the mini-index on page D301.]
+
+\bugonpage D376, lines 17 and 18 (11/14/86)
+
+\tenpoint\noindent
+[these two mysterious lines should be deleted]
+
+\bugonpage D380, line 11 (5/5/87)
+
+\ninepoint\noindent
+[Variables $q$ and $r$ can be eliminated, since they are not
+used in this procedure! If you delete them, also remove $\underline{862}$
+from the corresponding index entries on page D536.]
+
+\bugonpage D429, line 14 (5/5/87)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} $p\gets\\{cur\_exp}$;
+\smallskip
+\noindent[Also eliminate line 12, and delete $\underline{985}$ from the
+index entry for \\{vv} on page D543.]
+
+\bugonpage D455, line 5 (5/5/87)
+
+\ninepoint\noindent
+[This line can be eliminated, since variable $t$ is not
+used in this procedure! If you delete it, also remove $\underline{1059}$
+from the corresponding index entry on page D540; remove 1059 from
+the index entries for \\{small\_number} and \\{with\_option} on pages D539
+and D544; and remove \\{with\_option} from the mini-index on page D455.]
+
+\bugonpage D463, line 10 (12/15/86)
+
+\ninepoint\noindent\hskip30pt
+({\tt"Pretend\]that\]you're\]Miss\]Marple:\]Examine\]all\]clues,"})
+
+\bugonpage D465, lines 17--18 (6/14/87)
+
+\tenpoint\noindent
+[Delete these two lines.]
+
+\bugonpage D474, 5th-last line (3/16/86)
+
+\tenpoint\noindent
+depths, or italic corrections) are sorted;
+then the list of sorted values is perturbed, if necessary.
+
+\bugonpage D481, line 12 (6/17/86)
+
+\ninepoint\noindent\hskip10pt
+\\{print\_nl}({\tt\char`\"Font\]metrics\]written\]on\]\char`\"});\kern5pt
+\\{print}(\\{metric\_file\_name});\kern5pt
+\\{print\_char}({\tt\char`\".\char`\"});
+
+\noindent\hskip10pt\\{b\_close}(\\{tfm\_file})
+
+\smallskip\eightpoint\noindent
+The mini-index at the bottom of this page should also receive the following
+new entry:
+\smallskip\indent
+\\{print\_char}: {\bf procedure}, \S58.
+
+\bugonpage D510, new line to follow line 5 (6/17/86)
+
+{\tenpoint\parindent=1em
+This program doesn't bother to close the input files that may still be open.
+\par}
+
+\bugonpage D510, just before the fifth-last line (8/5/86)
+
+\ninepoint\noindent\hskip30pt$\\{internal}[\\{fontmaking}]\gets0$;\quad
+$\{\,$avoid loop in case of fatal error$\,\}$
+
+\bugonpage D520, right column (6/14/87)
+
+\eightpoint
+\leftline{Chinese characters:\quad 1147.}
+
+\bugonpage D526, left column, lines 1--2 (7/30/86)
+
+\eightpoint
+\leftline{\indent\\{fraction\_half}:\quad
+ $\underline{105}$, 111, 152, 288, 408, 496, 543,}
+\leftline{\indent\qquad 1098, 1128, 1141.}
+
+\bugonpage D526, left column, lines 6--7 (7/30/86)
+
+\eightpoint
+\leftline{\indent\qquad 478, 497, 499, 503, 530, 540, 547, 549, 599, 603,}
+\leftline{\indent\qquad 612, 615, 815--816, 917, 1169--1170.}
+
+\bugonpage D528, right column (6/14/87)
+
+\eightpoint
+\leftline{Japanese characters:\quad 1147.}
+
+\bugonpage D530, right column, line 45 (7/30/86)
+
+\eightpoint
+\leftline{\indent\\{max}:\quad$\underline{539}$, 543.}
+
+\bugonpage D533, right column (6/14/87)
+
+\eightpoint
+\leftline{oriental characters:\quad 1147.}
+
+\bugonpage D535, right column, line 27 (6/17/86)
+
+\eightpoint
+\leftline{\indent\qquad 1134, 1163--1165, 1182, 1194, 1200, 1205, 1213.}
+
+\bugonpage D547, bottom two lines (11/27/86)
+
+\ninepoint\noindent
+[These lines, and the top two on the next page, should move down
+so that they appear in alphabetical order just before `Compute
+test coefficients'.]
+ % volume E
+\hsize=29pc
+\def\dashto{\mathrel{\hbox{-\kern-.05em}\mkern3.9mu\hbox{-\kern-.05em}}}
+
+\bugonpage Exiii, lines 1--2 (7/28/86)
+
+\tenpoint\noindent
+February 11--13, 1984), 49.
+\ {\it An example meta-character of the Devanagari alphabet, worked out
+``online'' with the help of Matthew Carter.}
+
+\bugonpage Exiii, line 6 (7/28/86)
+
+\tenpoint\noindent
+{\it and western alphabets work also for Devanagari and Tamil.}
+
+\bugonpage E12, lines 15 and 19 (7/23/86)
+
+\tenpoint\noindent[change `17.32' to `17.28' in both places]
+
+\bugonpage E12, third-last line (12/18/86)
+
+\tenpoint\noindent[change `41' to `40']
+
+\bugonpage E13, lines 3, 4, and 20 (12/18/86)
+
+\tenpoint\noindent[change `40' to `41', `48' to `47', `17' to `7']
+
+\bugonpage E18, line 20 (7/23/86)
+
+\tenpoint\noindent[change `17.32' to `17.28']
+
+\bugonpage E18, line 29 (12/9/86)
+
+\tenpoint\noindent[change `236' to `212' in the {\tt cmss9} column]
+
+\bugonpage E170, top illustration (11/2/86)
+
+\tenpoint\noindent[There should be no ``dish'' or depression in the
+vicinity of point {\tt 3r}; the top edge of the character should be
+straight. This error appears also in the other uses of `\\{no\_dish\_serif}'
+throughout the book, since the illustrations were made before
+`\\{no\_dish\_serif}' was added to the program. See page
+E180~(twice at the top), E370~(twice), E374~(twice), E376~(twice), E378~(top),
+E390~(bottom), E398~(top), E402~(top), E406~(top), E453~(twice).]
+
+\bugonpage E179, new line to be inserted after line 6 (10/13/86)
+
+\ninepoint\noindent
+{\bf if} $\\{shaved\_stem}<\\{crisp}.\\{breadth}$:
+ $\\{shaved\_stem}:=\\{crisp}.\\{breadth}$; {\bf fi}
+
+\bugonpage E219, line 29 (6/2/87)
+
+\ninepoint\line{\\{top} $y_1=h$; \ $x_1=x_2$; \
+ {\bf filldraw stroke} $z_{1e}\dashto z_{2'e}$;\hfil\% stem}
+
+\bugonpage E279, seventh line from the bottom (7/20/86)
+
+\rightline{\eightssi that delicious but restrained humor which
+ her readers found so irresistible.}
+
+\bugonpage E301, new line to be inserted after line 28 (5/15/87)
+
+\ninepoint\noindent
+\quad{\bf if} $\\{lower\_side}>1.2\\{upper\_side}$:
+ $\\{upper\_side}:=\\{lower\_side}$; {\bf fi}
+
+\bugonpage E554, bottom half of page (12/18/86)
+
+\ninepoint\noindent[The letters will change slightly because of the
+corrections to {\tt cmr17} noted on pages 12 and 13.]
+
+\bugonpage E561, line 3 (12/9/86)
+
+\ninepoint\noindent[The numerals should be `\thinspace
+{\niness 0123456789}\thinspace' (i.e., 2/3 point less tall)
+because of the correction made to page 18.]
+
+\bugonpage E562, line 9 (12/9/86)
+
+\ninepoint\noindent[The numerals should be `\thinspace
+{\ninessi 0123456789\/}\thinspace' (i.e., 2/3 point less tall)
+because of the correction made to page 18.]
+
+\bugonpage E572, entry for {\it breadth} (10/13/86)
+
+\eightpoint
+{\it breadth}, 59, 75, 79, 91, 93, 179, 225, 233,
+
+\bugonpage E573, entry for {\tt cmcsc10} (8/17/86)
+
+\eightpoint
+{\tt cmcsc10}, $\underline{30}$--$\underline{31}$, 567.
+
+\bugonpage E576, tenth-last line (5/15/87)
+
+\eightpoint
+{\bf lowres\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em
+ fix}, 550.
+ \bye
+ Now here are some that I will make soon!
+
diff --git a/Master/texmf-dist/source/generic/knuth/errata/errata.two b/Master/texmf-dist/source/generic/knuth/errata/errata.two
new file mode 100644
index 00000000000..74dde877267
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/errata.two
@@ -0,0 +1,491 @@
+% More bugs (sigh) in The TeXbook
+
+\input manmac
+\proofmodefalse
+\raggedbottom
+\output{\onepageout{\unvbox255\kern-\dimen@ \vfil}}
+
+\def\rhead{Bugs in {\tensl The \TeX book}, second printing}
+\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
+ \hrule\line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule\nobreak\medskip}
+
+\noindent This is a list of all corrections made to {\sl The \TeX book\/}
+since the second printing. If your copy doesn't say `{\sl\kern-1pt Second
+printing (October 1984)\/}' on the copyright page, you should also look at
+the previous bug list. In fact, the most important corrections to the
+first printing were discovered first, so they've already been~made.
+
+\bugonpage 23, line 16 (10/13/84)
+
+\tenpoint\indent
+|This is TeX, Version 1.0 (preloaded format=plain 83.7.15)|
+
+\bugonpage 33, line 32 (10/21/84)
+
+The bottom line shows how far \TeX\ has gotten until now in the
+|story|{\parfillskip=0pt\par}
+
+\bugonpage 41, lines 7 and 8 (10/8/85)
+
+\ddanger The twin operations ^|\uppercase||{|\<token list>|}| and
+^|\lowercase||{|\<token list>|}| go through a given token list and convert
+all of the character tokens to their\parfillskip=0pt\enddanger
+
+\bugonpage 57, line 17 (1/6/86)
+
+|dd|\quad didot point ($\rm1157\,dd=1238\,pt$)
+
+\bugonpage 61, lines 17--19 (12/18/85)
+
+\ninepoint\noindent
+|depth|, |em|, |ex|,
+|fil|, |height|, |in|, |l|, |minus|, |mm|, |mu|, |pc|, |plus|,
+|pt|, |scaled|, |sp|, |spread|, |to|, |true|, |width|. ^^{reserved words}
+\ (See Appendix~I for references to the contexts in which each of these is
+recognized as a keyword.)
+
+\bugonpage 67, append a new exercise (1/19/85)
+
+\exno=5 \def\chapno{11}
+\gdef\frac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
+
+\ddangerexercise Construct a |\frac| macro such that `|\frac1/2|' yields
+`\frac1/2'.
+
+\bugonpage 130, line 15 (4/17/85)
+
+\beginmathdemo
+|$y'''_3+g'^2$|&y'''_3+g'{}^2\cr
+\endmathdemo
+
+\bugonpage 170, line 5 (5/28/85)
+
+\ninepoint
+\line{tall, unslanted
+letter; and so on. But two of the examples involve corrections that were}
+
+\bugonpage 194, lines 13--15 should be centered better (10/22/84)
+
+\ninepoint
+$$\displaylines{\hfill x\equiv x;\hfill\llap{(1)}\cr
+ \hfill\hbox{if}\quad x\equiv y\quad\hbox{then}\quad
+ y\equiv x;\hfill\llap{(2)}\cr
+ \hfill\hbox{if}\quad x\equiv y\quad\hbox{and}\quad
+ y\equiv z\quad\hbox{then}\quad
+ x\equiv z.\hfill\llap{(3)}\cr}$$
+
+\bugonpage 215, lines 9 and 10 from the bottom (12/23/84)
+
+\ninepoint\noindent
+general format
+is the same as for |\def| and |\gdef|, but \TeX\ blindly expands the tokens
+of the replacement text according to the expansion rules above. For
+example, consider
+
+\bugonpage 233, lines 15--19 (1/19/85)
+
+\medskip
+\settabs\+\indent&10\frac1/2 lbs.\qquad&\it Servings\qquad&\cr
+\+&\negthinspace\it Weight&\it Servings&
+ {\it Approximate Cooking Time\/}*\cr
+\smallskip
+\+&8 lbs.&6&1 hour and 50 to 55 minutes\cr
+\+&9 lbs.&7 to 8&About 2 hours\cr
+\+&9\frac1/2 lbs.&8 to 9&2 hours and 10 to 15 minutes\cr
+\+&10\frac1/2 lbs.&9 to 10&2 hours and 15 to 20 minutes\cr
+
+\bugonpage 236, lines 18--21 (1/19/85)
+
+\ninepoint
+$$\vbox{\openup2pt
+\halign{\hfil\bf#&\quad\hfil\it#\hfil&\quad\hfil#\hfil&
+ \quad\hfil#\hfil&\quad#\hfil\cr
+Squab&Poussin&2&\frac3/4 to 1&Broil, Grill, Roast\cr
+Broiler&Poulet Nouveau&2 to 3&1\frac1/2 to 2\frac1/2&Broil, Grill, Roast\cr
+Fryer&Poulet Reine&3 to 5&2 to 3&Fry, Saut\'e, Roast\cr
+Roaster&Poularde&5\frac1/2 to 9&Over 3&Roast, Poach, Fricassee\cr}}$$
+[This change should also be made at the bottom of page 237.]
+
+\bugonpage 236, fifth-last line (1/19/85)
+
+\ninepoint
+| Squab&Poussin&2&\frac3/4 to 1&Broil, Grill, Roast\cr|
+
+\bugonpage 237, line 25 (10/10/84)
+
+\ninepoint\noindent
+saying `^|\tabskip||=|\<glue>'. For example,
+let's do the poultry table again, but with the{\parfillskip=0pt\par}
+
+\bugonpage 265, bottom line (11/6/85)
+
+[insert a comma after `{\eightss LEONTIEF}'.]
+
+\bugonpage 271, line 8 (11/12/85)
+
+\ninepoint
+\beginsyntax
+<fil unit>\is[fil]\alt<fil unit>[l]
+\endsyntax
+
+\bugonpage 280, lines 7 and 8 (1/8/85)
+
+\ninepoint\noindent
+\<4-bit number>.\enskip
+The specified output stream is opened or closed, for use in |\write|
+commands, as explained in Chapter~21.
+
+\bugonpage 300, lines 5--10 [changed for version 1.3] (11/25/84)
+
+\ninepoint\noindent
+what part of \TeX's memory has become overloaded;
+one of the following fourteen things will be mentioned:
+\begindisplay
+|number of strings|\qquad(names of control sequences and files)\cr
+|pool size|\qquad(the characters in such names)\cr
+|main memory size|\qquad(boxes, glue, breakpoints, token lists,
+ characters, etc.)\cr
+\enddisplay
+
+\bugonpage 300, lines 23--29 [changed for version 1.3] (11/25/84)
+
+\danger If you have a job that doesn't overflow \TeX's capacity, yet
+you want to see just how closely you have approached the limits,
+just set ^|\tracingstats| to a positive value before the end of your
+job. The log file will then conclude with a report on your actual
+usage of the first eleven things named above (i.e., the number of strings,
+\dots, the save size), in that order. ^^{stack positions}
+Furthermore, if you set |\tracingstats| equal to 2~or~more, \TeX\
+will show its current memory usage whenever it
+does a ^|\shipout| command. Such statistics are broken into two
+parts; `|490&5950|' means, for example, that 490 words are being used
+for ``large'' things like boxes, glue, and
+breakpoints, while 5950 words are being used for ``small'' things like
+tokens and characters.
+
+\bugonpage 302, line 14 (10/8/85)
+
+\begintt
+.\tenrm || (ligature ---)
+\endtt
+
+\bugonpage 305, line 26 (12/24/84)
+
+\ninepoint\noindent
+sentable as |^^M|. Asking \TeX\ to |\show\^^M|
+\looseness-1
+produces the response `|>| |\^^M=macro:->\|\]|.|'.
+
+\bugonpage 306, line 10 (7/1/85)
+
+\ninepoint\noindent
+no ``^{explicit kerns},'' and an italic correction is an
+explicit kern.) \ But the italic correction may be too much (especially in an
+italic font); |shelf{|^|\kern||0pt}ful| is often best.
+
+\bugonpage 308, line 25 (3/25/85)
+
+\ninepoint\indent
+|\def\appendroman#1#2#3{\edef#1{\def\noexpand#1{\csname|
+
+\bugonpage 311, insert a new answer (1/19/85)
+
+\ninepoint
+\ansno11.6:
+ |\def\frac#1/#2{\leavevmode\kern.1em|\parbreak
+|\raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em|\parbreak
+|/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}|
+
+\smallskip\noindent[This causes answer 12.8 to move to page 312;
+answer 12.16 also moves to page 313.]
+
+\bugonpage 320, lines 17--20 (8/10/85)
+
+\ninepoint
+\ansno17.16:
+ |\def\sqr#1#2{{\vcenter{\vbox{\hrule height.#2pt|\parbreak
+ | \hbox{\vrule width.#2pt height#1pt \kern#1pt|\parbreak
+ | \vrule width.#2pt}|\parbreak
+ | \hrule height.#2pt}}}}|
+
+\bugonpage 327, lines 26--33 (10/22/84)
+
+\ninepoint
+\ansno19.16:
+ |$$\displaylines{\hfill x\equiv x;\hfill\llap{(1)}\cr|\parbreak
+ | \hfill\hbox{if}\quad x\equiv y\quad\hbox{then}\quad|\parbreak
+ | y\equiv x;\hfill\llap{(2)}\cr|\parbreak
+ | \hfill\hbox{if}\quad x\equiv y\quad\hbox{and}\quad|\parbreak
+ | y\equiv z\quad\hbox{then}\quad|\parbreak
+ | x\equiv z.\hfill\llap{(3)}\cr}$$|\par\medskip\noindent
+There's also a trickier solution, which begins with
+\begintt
+$$\displaylines{x\equiv x;\hfil\llap{(1)}\hfilneg\cr
+\endtt
+
+\bugonpage 330, line 29 (11/15/85)
+
+\ninepoint\indent
+|\edef\next#1#2{\def#1{\b#2\d}} \next\a\c|
+
+\bugonpage 332, lines 17--24 (1/19/85)
+
+\ninepoint
+\begintt
+\settabs\+\indent&10\frac1/2 lbs.\qquad&\it Servings\qquad&\cr
+\+&\negthinspace\it Weight&\it Servings&
+ {\it Approximate Cooking Time\/}*\cr
+\smallskip
+\+&8 lbs.&6&1 hour and 50 to 55 minutes\cr
+\+&9 lbs.&7 to 8&About 2 hours\cr
+\+&9\frac1/2 lbs.&8 to 9&2 hours and 10 to 15 minutes\cr
+\+&10\frac1/2 lbs.&9 to 10&2 hours and 15 to 20 minutes\cr
+\endtt
+
+\bugonpage 332, lines 33--35 (1/19/85)
+
+\ninepoint\noindent
+proofs. \ (You weren't supposed to think of this,
+but it has to be mentioned.) \ See exercise 11.\fracexno\ for the `|\frac|'
+macro; it's better to say `\frac1/2' than `$1\over2$', in a cookbook.\par
+Another way to treat this table would be to display it in a vbox, instead
+of including a first column whose sole purpose is to specify indentation.
+
+\bugonpage 337, line 28 (11/12/85)
+
+\ninepoint\noindent |\nextnumber|. Quick should put `|\relax|'
+at the end of his macro. \ (The {keywords} |l|,{\parfillskip=0pt\par}
+
+\bugonpage 357, lines 35 and 36 (1/8/85)
+
+\ninepoint\noindent
+|\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}|
+
+\bugonpage 357, last two lines (4/17/85)
+
+\ninepoint\noindent
+|\def\pr@m@s{\ifx'\next\let\next\pr@@@s|%
+ | \else\ifx^\next\let\next\pr@@@t|\par\noindent
+| \else\let\next\egroup\fi\fi \next}|\par\noindent
+|\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}|
+
+\bugonpage 358, lines 8--12 (1/23/85)
+
+\ninepoint\noindent
+|\def\hbar{{\mathchar'26\mkern-9muh}}|\hfil\break\null
+|\def\surd{{\mathchar"1270}}|\hfil\break\null
+|\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr|\hfil\break\null
+| \not\mathrel{\mkern14mu}\crcr \noalign{\nointerlineskip}|\hfil\break\null
+| \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}}|
+
+\bugonpage 359, lines 7--8 (1/22/85)
+
+\ninepoint\noindent
+|\def\ddots{\mathinner{\mkern1mu\raise7pt\vbox{\kern7pt\hbox{.}}\mkern2mu|%
+\hfil\break\null
+| \raise4pt\hbox{.}\mkern2mu\raise1pt\hbox{.}\mkern1mu}}|
+
+\bugonpage 360, line 22 (1/22/85)
+
+\ninepoint\noindent
+| \mkern5mu \raise.6\dimen@\copy\rootbox \mkern-10mu \box0}|
+
+\bugonpage 361, line 3 (3/27/85)
+
+\ninepoint\noindent
+|\def\buildrel#1\over#2{\mathrel{\mathop{\kern0pt #2}\limits^{#1}}}|
+
+\bugonpage 361, lines 19--20 (1/22/85)
+
+\ninepoint\noindent
+|\def\bmod{\mskip-\medmuskip \mkern5mu|\hfil\break\null
+| \mathbin{\rm mod} \penalty900 \mkern5mu \mskip-\medmuskip}|
+
+\bugonpage 361, line 27 (5/1/85)
+
+\ninepoint\noindent
+|\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th|
+
+\bugonpage 361, bottom line (5/1/85)
+
+\ninepoint\noindent
+| \null\;\vbox{\kern\ht1\box2}\endgroup}|
+
+\bugonpage 362, line 9 (5/1/85)
+
+\ninepoint\noindent
+|\def\eqalign#1{\null\,\vcenter{\openup1\jot \m@th|
+
+\bugonpage 362, lines 17--29 (8/10/85)
+
+{\parindent=0pt\ninepoint
+|\def\@lign{\tabskip=0pt\everycr={}} % restore inside \displ@y|\par
+|\def|^|\displaylines||#1{\displ@y|\parbreak%
+| \halign{\hbox to\displaywidth{|%
+ |$\hfil\@lign\displaystyle##\hfil$}\crcr|\parbreak%
+| #1\crcr}}|
+\smallbreak
+|\def|^|\eqalignno||#1{\displ@y \tabskip=|^|\centering|\parbreak%
+| \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip=0pt|\parbreak%
+| &$\@lign\displaystyle{{}##}$\hfil\tabskip=\centering|\parbreak%
+| &\llap{$\@lign##$}\tabskip=0pt\crcr|\parbreak%
+| #1\crcr}}|\par
+|\def|^|\leqalignno||#1{\displ@y \tabskip=\centering|\parbreak%
+| \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip=0pt|\parbreak%
+| &$\@lign\displaystyle{{}##}$\hfil\tabskip=\centering|\parbreak%
+| &\kern-\displaywidth\rlap{$\@lign##$}\tabskip=\displaywidth\crcr|\parbreak%
+| #1\crcr}}|
+\par}
+
+\bugonpage 363, line 9 (5/12/85)
+
+\ninepoint\noindent
+|\def\footnote#1{\let\@sf=\empty % parameter #2 (the text) is read later|
+
+\bugonpage 364, line 3 (3/23/85)
+
+\ninepoint\noindent
+|\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%|
+
+\bugonpage 364, fifth-last line (9/15/85)
+
+\ninepoint\noindent
+|\def\fmtname{plain}\def\fmtversion{2.0} % identifies the current format|
+
+\bugonpage 399, eighth-last line (2/11/85)
+
+\ninepoint\noindent
+| \baselineskip=\footnotebaselineskip\noindent\unhbox0\par}|
+
+\bugonpage 401, line 5 (1/29/85)
+
+\ninepoint\noindent
+{|\fontdimen| parameters to qualify as a math symbol font).
+(2)~Set all the font identifiers\parfillskip=0pt\par}
+
+\bugonpage 414, line 10 (12/17/84)
+
+\ninepoint\noindent
+|\font\titlefont=cmssdc40 % titles in chapter openings|
+
+%\bugonpage 420, line 9 (10/3/85)
+%
+%\ninepoint\noindent
+%|\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em|
+% that change comes under `font data', explained away below
+
+\bugonpage 444, bottom line (1/10/85)
+
+\ninepoint\noindent
+depth $d(z)+v$, consisting
+of box~$x$ followed by an appropriate kern followed by box~$z$.
+
+\bugonpage 461, entry for character codes (11/6/85)
+
+\eightpoint
+Add `{\sl see also\/} category codes'.
+
+\bugonpage 463, entries for {\tt dd}, Didot, and didot (1/6/86)
+
+\eightpoint
+Remove the circumflex accents.
+
+\bugonpage 466, left column (1/19/85)
+
+\eightpoint
+fractions, 67, 139--143, 152, 170, 179,\par
+\qquad 186, 444--445.\par
+\quad huge, 196.\par
+\quad slashed form, 67, 139--140, 233, 236.
+
+\bugonpage 467, index entry for {\tt\char`\\hsize} (6/14/85)
+
+\eightpoint
+Add a reference to page {\it 60}.
+
+\bugonpage 469, index entry for {\tt\char`\\kern} (7/1/85)
+
+\eightpoint
+Add a reference to page {\it 306}.
+
+\bugonpage 469, index entry for kerns (7/1/85)
+
+\eightpoint
+Add a reference to page 306.
+
+\bugonpage 469, new entry (11/12/85)
+
+\eightpoint
+|l| after |fil|, $\underline{271}$, 337.
+
+\bugonpage 469, second line on the right (9/13/85)
+
+\eightpoint
+%\def\LaTeX{L\kern-.25em\raise.7ex\hbox{a}\kern-.05em\TeX} % old style
+{L\kern -.36em\raise.6ex\hbox{\sixrm A}\kern-.15em\TeX}, 137.
+
+\bugonpage 470, index entries for {\tt\char`\\longleftarrow}
+ thru {\tt\char`\\Longrightarrow} (10/5/84)
+
+\eightpoint
+The references to page 358 should be underlined (seven times).
+
+\bugonpage 475, index entry for punctuation in formulas (4/29/85)
+
+\eightpoint
+Add a reference to page 161.
+
+\bugonpage 476, index entry for {\tt\char`\\scriptspace} (8/10/85)
+
+\eightpoint
+Change `445' to `445--446'.
+
+\bugonpage 478, first and last lines (10/11/84)
+
+\noindent Delete the last line in the right-hand column
+(since it appears on page 479), and add the following line
+at the top of the left-hand column (since it was dropped by mistake
+from the second printing):
+
+\smallskip
+\eightpoint styles of math formatting, 140--141, 441--447.
+
+\bugonpage 478, new entry after tabbing (5/28/85)
+
+\eightpoint
+tables, {\sl see\/} alignments, tabbing.
+
+\bugonpage 478, tabskip entries (3/25/85)
+
+\eightpoint\noindent Instead of `237--239' and `237--238' it should say
+`$\underline{237}$--$\underline{239}$' twice.
+
+\bugonpage 481, the entry for {\tt\char`\\widetilde} (9/23/85)
+
+\eightpoint
+Page 359 should be underlined.
+
+\bugonpage 483, lines 16--17 (1/19/85)
+
+|P.O. Box 9506|\parbreak
+|Providence RI 02940-9506, USA.|
+
+\bugonpage 483, lines 22--23 (1/19/85)
+
+P.O. Box 9506\par
+Providence RI 02940-9506, USA.
+
+\bigskip
+\hrule
+\bigskip\noindent\tenrm
+Note: The next printing will use the ``real'' Computer Modern fonts
+instead of the ``almost'' Computer Modern fonts. Therefore many of
+the line breaks will be slightly different. Also, the font-related
+numerical data on pages 27, 29, 66, 75, 76, 79, 88, 98, 99, 112, 113, 310,
+314, 396, 399, 409, 420, and 459 will be different. However, these
+differences need not be listed here, because the old book was correct with
+respect to the old fonts.
+
+\bye
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)
diff --git a/Master/texmf-dist/source/generic/knuth/errata/logmac.tex b/Master/texmf-dist/source/generic/knuth/errata/logmac.tex
new file mode 100644
index 00000000000..8719efc497d
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/errata/logmac.tex
@@ -0,0 +1,107 @@
+% macros for the appendix to "Errors of TeX" paper
+\input manmac
+\voffset=-.3in
+\catcode`\^=7 % disable the indexing stuff
+\font\sltt=cmsltt9
+\font\logosl=logosl9
+\ninepoint
+\vsize=48pc \pageheight=\vsize
+\hsize=33.5pc
+
+\def\\{\bgroup\catcode`_=\active\identifier}
+{\catcode`_=\active \global\let_=\_}
+\def\identifier#1{\hbox{\it#1\/\kern.05em}\egroup} % italic type for identifiers
+
+\newdimen\codesize \setbox0=\hbox{\enspace M} \codesize=\wd0
+\setbox0=\hbox{\thinspace\S1111\kern\codesize} \rightskip=\wd0
+\newdimen\itemnosize \setbox0=\hbox{\bf999} \itemnosize=\wd0
+\setbox0=\hbox{$999\mapsto{}$\kern\itemnosize\enspace} \parindent=\wd0
+\newdimen\datemar \setbox0=\hbox{\bf 15 Mar 1977}
+\datemar=\hsize \advance\datemar-\wd0 \divide\datemar2
+\newdimen\hangamount \hangamount=\parindent \advance\hangamount 1em
+\everypar{\global\hangindent=\hangamount}
+\parfillskip=-\rightskip
+\finalhyphendemerits=0
+\interlinepenalty=100
+\smallskipamount=3pt plus 2pt
+\def\smallbreak{\fin\penalty-50\smallskip}
+
+\newbox\predec % for predecessor "mapsto" info
+\newbox\code % for the code letter
+\newbox\texsec % for TeX section numbers
+\newbox\cbox % the symbol used on commentlines
+\newbox\dbox % empty box used after datelines
+\setbox\dbox=\hbox to\datemar{}
+\setbox\cbox=\hbox to\itemnosize{\hfil$\bullet$}
+
+\newif\ifnothing \newif\ifnobreak
+\def\fin{\ifnothing\nothingfalse\else\endgroup
+ \unskip\nobreak\hfil\penalty500\enspace\null\nobreak\hfil\box\texsec
+ \box\code\endgraf\ifnobreak\nobreakfalse\nobreak\fi\fi}
+
+\catcode`\ =12 % tabs are ordinary characters
+\catcode`@=\active % @ signs denote a TeX section reference
+{\obeylines \gdef@#1
+ {\global\setbox\texsec=\hbox{\S$#1$}\lookahead}}
+\chardef\@=`\@
+{\catcode`X=\active \gdef X{\X}}
+\def\X{{\eightbf X}}
+\def\lightX{\hbox{\eightrm X}}
+\def\>#1\relax{\global\setbox\predec=\hbox{\let\X=\lightX
+ $#1\mapsto{}$}} % previous bug ref
+
+\def\checkvalid#1{\expandafter\ifx\csname#1!\endcsname\okay\else\invalidcode\fi}
+\def\okay{\okay}
+\def\makevalid#1{\expandafter\let\csname#1!\endcsname=\okay}
+\makevalid A % algorithm
+\makevalid B % blunder
+\makevalid C % cleanup
+\makevalid D % data structure
+\makevalid E % efficiency
+\makevalid F % forgotten case
+\makevalid G % generalization
+\makevalid I % interaction
+\makevalid L % language
+\makevalid M % mismatch
+\makevalid P % program organization
+\makevalid Q % quality
+\makevalid R % robustness
+\makevalid S % surprise
+\makevalid T % typo
+
+\def\lookahead{\futurelet\next\looky} % we'll do this at end of every line
+\def\looky{\if\next \let\cont\continuationline % tab mark
+ \else\if\next*\let\cont\dateline % asterisk
+ \else\if\next##\let\cont\commentline % sharp sign
+ \else\if\next\relax\let\cont\endit % \relax (gets us out)
+ \else\let\cont\dataline\fi\fi\fi\fi\cont} % otherwise should be a code letter
+\def\continuationline { } % insert space if a tab mark starts the next line
+\def\dateline* {\smallbreak\begingroup\bf\hfill\nobreaktrue
+ \global\setbox\code=\copy\dbox}
+\def\dataline#1{\fin\checkvalid#1%
+ \global\setbox\code=\hbox to\codesize{\enspace
+ \hskip0pt plus 3fil\rm#1\hskip0pt plus1fil}%
+ \begingroup\rm\catcode`X=\active\itemnumber}
+\def\itemnumber#1.{\catcode`X=11\setbox0=\hbox to\itemnosize{\bf\hss#1\relax}%
+ \setbox2=\hbox{\bf#1\relax}\ifdim\wd2>\wd0 \setbox0=\box2 \fi
+ \textindent{\hfil\box\predec\box0}}
+\def\commentline{\fin\afterassignment\begincomment\let\next}
+\def\begincomment{\begingroup\let\tt=\sltt
+ \let\MF=\slMF\sl\textindent{\hfil\copy\cbox}}
+
+\def\leftheadline{\hbox to \hsize{%
+ \vbox to 10pt{}% strut to position the baseline
+ {\tenrm\folio\kern1pc}% folio to left of text
+ \hfil\eightrm D. \ E. \ KNUTH\hfil% running head
+ }}
+\def\rightheadline{\hbox to \hsize{%
+ \vbox to 10pt{}% strut to position the baseline
+ \hfil\eightrm THE \ ERRORS \ OF \ \TeX\hfil% running head
+ {\kern1pc\tenrm\folio}% folio to right of text
+ }}
+
+\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\slMF{{\logosl META}\-{\logosl FONT}}
+
+\def\endit{\fin\catcode`\^^M=5\let\par=\endgraf}
+\let\par=\lookahead \obeylines \nothingtrue
diff --git a/Master/texmf-dist/source/generic/knuth/tex/glue.web b/Master/texmf-dist/source/generic/knuth/tex/glue.web
new file mode 100644
index 00000000000..38a6d667c88
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/tex/glue.web
@@ -0,0 +1,421 @@
+% This program by D. E. Knuth is not copyrighted and can be used freely.
+% It was written on 18 Dec 1981 and revised on 24 May 1991.
+
+% Here is TeX material that gets inserted after \input webmac
+\def\PASCAL{Pascal}
+\font\eightrm=cmr8
+
+\def\title{GLUE}
+\def\topofcontents{\null
+ \def\titlepage{F} % include headline on the contents page
+ \def\rheader{\mainfont\hfil \contentspagenumber}
+ \vfill
+ \centerline{\titlefont Fixed-Point Glue Setting}
+ \vfill}
+\def\botofcontents{\vfill
+ \centerline{\hsize 6in\baselineskip9pt
+ \vbox{\eightrm\baselineskip9pt\noindent
+ The preparation of this report
+ was supported in part by the National Science
+ Foundation under grants IST-7921977 and MCS-7723728;
+ by Office of Naval Research grant N00014-81-K-0330;
+ and by the IBM Corporation. `\TeX' is a
+ trademark of the American Mathematical Society.}}}
+
+@* Introduction.
+If \TeX\ is being implemented on a microcomputer that does 32-bit
+addition and subtraction, but with multiplication and division restricted to
+multipliers and divisors that are either powers of~2 or positive
+integers less than~$2^{15}$, it can still do the computations associated
+with the setting of glue in a suitable way. This program illustrates one
+solution to the problem.
+
+Another purpose of this program is to provide the first ``short'' example
+of the use of \.{WEB}.
+
+@ The program itself is written in standard \PASCAL. It begins with a
+normal program header, most of which will be filled in with other parts of this
+``web'' as we are ready to introduce them.
+@^program header@>
+
+@p program GLUE(@!input,@!output);
+ type @<Types in the outer block@>@;
+ var @<Globals in the outer block@>@;
+ procedure initialize; {this procedure gets things started}
+ var @<Local variables for initialization@>@;
+ begin @<Set initial values@>;
+ end;
+
+@ Here are two macros for common programming idioms.
+
+@d incr(#) == #:=#+1 {increase a variable by unity}
+@d decr(#) == #:=#-1 {decrease a variable by unity}
+
+@* The problem and a solution.
+We are concerned here with the ``setting of glue'' that occurs when a
+\TeX\ box is being packaged. Let $x_1$, \dots,~$x_n$ be integers whose sum
+$s=x_1+\cdots+x_n$ is positive, and let $t$ be another positive integer.
+These $x_i$ represent scaled amounts of glue in units of sp (scaled
+points), where one sp is $2^{-16}$ of a printer's point. The other
+quantity $t$ represents the total by which the glue should stretch or
+shrink. Following the conventions of \TeX82, we will assume that the
+integers we deal with are less than $2^{31}$ in absolute value.
+
+After the glue has been set, the actual amounts of incremental glue space
+(in~sp) will be the integers $f(x_1)$, \dots,~$f(x_n)$, where $f$ is a
+function that we wish to compute. We want $f(x)$ to be nearly proportional
+to~$x$, and we also want the sum $f(x_1)+\cdots+f(x_n)$ to be nearly
+equal to~$t$. If we were using floating-point arithmetic, we would simply
+compute $f(x)\equiv(t/s)\cdot x$ and hope for the best; but the goal here
+is to compute a suitable~$f$ using only the fixed-point arithmetic operations
+of a typical ``16-bit microcomputer.''
+
+The solution adopted here is to determine integers $a$, $b$, $c$ such that
+$$f(x)=\bigl\lfloor 2^{-b}c\lfloor 2^{-a}x\rfloor\bigr\rfloor$$
+if $x$ is nonnegative. Thus, we take $x$ and shift it right by $a$~bits,
+then multiply by~$c$ (which is $2^{15}$ or less), and shift the product
+right by $b$~bits. The quantities $a$, $b$, and~$c$ are to be chosen
+so that this calculation doesn't cause overflow and so that $f(x_1)+\cdots
++f(x_n)$ is reasonably close to~$t$.
+
+The following method is used to calculate $a$ and~$b$:
+Suppose $$y=\max_{1\le i\le n}\vert x_i\vert\,.$$
+Let $d$ and $e$ be the smallest integers such that $t<2^ds$ and $y<2^e$.
+Since $s$ and~$t$ are less than~$2^{31}$, we have $-30\le d\le31$ and
+$1\le e\le31$. An error message is given if $d+e\ge31$; in such a case
+some $x_m$ has $\vert x_m\vert\ge 2^{e-1}$ and we are trying to change
+$\vert x_m\vert$ to $\vert(t/s)x_m\vert\ge2^{d+e-2}\ge2^{30}$~sp, which
+\TeX\ does not permit. (Consider, for example, the ``worst case'' situation
+$x_1=2^{30}+1$, $x_2=-2^{30}$, $t=2^{31}-1$; surely we need not bother
+trying to accommodate such anomalous combinations of values.) On the other
+hand if $d+e\le31$, we set $a=e-16$ and $b=31-d-e$. Notice that this choice
+of~$a$ guarantees that $\lfloor2^{-a}\vert x_i\vert\rfloor<2^{16}$. We will
+choose~$c$ to be at most~$2^{15}$, so that the product will be less
+than~$2^{31}$.
+
+The computation of $c$ is the tricky part.
+@^hairy mathematics@>
+The ``ideal'' value for $c$ would be $\rho=2^{a+b}t/s$, since $f(x)$ should
+be approximately $(t/s)\cdot x$. Furthermore it is better to have $c$ slightly
+larger than~$\rho$, instead of slightly smaller, since the other operations
+in $f(x)$ have a downward bias. Therefore we shall compute $c=\lceil\rho\rceil$.
+Since $2^{a+b}t/s<2^{a+b+d}=2^{15}$, we have $c\le2^{15}$ as desired.
+
+We want to compute $c=\lceil\rho\rceil$ exactly in all cases. There is no
+difficulty if $s<2^{15}$, since $c$ can be computed directly using the
+formula $c=\bigl\lfloor(2^{a+b}t+s-1)/s\bigr\rfloor$; overflow will not
+occur since $2^{a+b}t<2^{15}s<2^{30}$.
+
+Otherwise let $s=s_12^l+s_2$, where $2^{14}\le s_1<2^{15}$ and $0\le s_2<2^l$.
+We will essentially carry out a long division. Let $t$ be ``normalized''
+so that $2^{30}\le2^ht<2^{31}$ for some~$h$. Then we form the quotient and
+remainder of $2^ht$ divided by~$s_1$,
+$$ 2^ht=qs_1+r_0, \qquad 0\le r_0<s_1.$$
+It follows that $2^{h+l}t-qs=2^lr_0-qs_2=r$, say. If $0\ge r>-s$ we have
+$q=\lceil2^{h+l}t/s\rceil$; otherwise we can replace $(q,r)$ by
+$(q\pm1,r\mp s)$ repeatedly until $r$ is in the correct range. It is not
+difficult to prove that $q$ needs to be increased at most once and decreased
+at most seven times, since $2^lr_0-qs_2<2^ls_1\le s$ and since
+$qs_2/s\le(2^ht/s_1)(s_2/2^ls_1)<2^{31}/s_1^2\le8$. Finally, we have
+$a+b-h-l=-1$ or~$-2$, since $2^{28+l}\le2^{14}s=2^{a+b+d-1}s\le2^{a+b}t<
+2^{a+b+d}s=2^{15}s<2^{30+l}$ and $2^{30}\le2^ht<2^{31}$. Hence
+$c=\lceil2^{a+b-h-l}q\rceil=\lceil{1\over2}q\rceil$ or~$\lceil{1\over4}q\rceil$.
+
+An error analysis shows that these values of $a$, $b$, and $c$ work
+satisfactorily, except in unusual cases where we wouldn't expect them to.
+@^error analysis@>
+When $x\ge0$ we have
+$$\eqalign{f(x)&=2^{-b}(2^{a+b}t/s+\theta_0)(2^{-a}x-\theta_1)-\theta_2\cr
+&=(t/s)x+\theta_02^{-a-b}x-\theta_12^at/s-2^{-b}\theta_0\theta_1-\theta_2\cr}$$
+where $0\le\theta_0,\theta_1,\theta_2<1$. Now $0\le\theta_02^{-a-b}x
+<2^{e-a-b}=2^{d+e-15}$ and $0\le\theta_12^at/s<2^{a+d}=2^{d+e-16}$, and
+the other two terms are negligible. Therefore $f(x_1)+\cdots+f(x_n)$ differs
+from~$t$ by at most about $2^{d+e-15}n$. Since $2^{d+e}$ is larger than
+$(t/s)y$, which is the largest stretching or shrinking of glue after expansion,
+the error is at worst about $n/32000$ times as much as this, so it is quite
+reasonable. For example, even if fill glue is being used to stretch
+20 inches, the error will still be less than $1\over1600$ of an inch.
+
+@ To sum up: Given the positive integers $s$, $t$, and $y$ as above, we
+set $$a\gets\lfloor\lg y\rfloor-15,\qquad b\gets29-\lfloor\lg y\rfloor-
+\lfloor\lg t/s\rfloor,\qquad\hbox{and}\qquad c\gets\lceil2^{a+b}t/s\rceil.$$
+The implementation below shows how to do the job in \PASCAL\ without using
+large numbers.
+
+@ \TeX\ wants to have the glue-setting information in a 32-bit data type
+called |glue_ratio|. The \PASCAL\ implementation of \TeX82 has |glue_ratio
+=real|, but alternative definitions of |glue_ratio| are explicitly allowed.
+
+For our purposes we shall let |glue_ratio| be a record that is packed with
+three fields: The |a_part| will hold the positive integer |a+16|, the
+|b_part| will hold the nonnegative integer~|b|, and the |c_part| will hold
+the nonnegative integer~|c|. When the formulas above tell us to take
+|b>30|, we might as well set |c:=0| instead, because |f(x)| will be
+zero in all cases when |b>30|. Note that we have only about 25 bits of
+information in all, so it should fit in 32 bits with ease.
+
+@<Types...@>=
+@!glue_ratio=packed record
+ @!a_part: 1..31; {the quantity |e=a+16| in our derivation}
+ @!b_part: 0..30; {the quantity |b| in our derivation}
+ @!c_part: 0..@'100000; {the quantity |c| in our derivation}
+ end;
+@!scaled = integer; {this data type is used for quantities in sp units}
+
+@ The real problem is to define the procedures that \TeX\ needs to
+deal with such |glue_ratio| values:
+(a)~Given scaled numbers |s|, |t|, and~|y| as above, to compute the
+corresponding |glue_ratio|.
+(b)~Given a nonnegative scaled number~|x| and a |glue_ratio|~|g|, to
+compute the scaled number~|f(x)|.
+(c)~Given a |glue_ratio|~|g|, to print out a decimal equivalent of
+|g| for diagnostic purposes.
+
+The procedures below can be incorporated into \TeX82 via a change file
+without great difficulty. A few modifications will be needed, because
+\TeX's |glue_ratio| values can be negative in unusual cases---when the
+amount of stretchability or shrinkability is less than zero. Negative
+values in the |c_part| will handle such problems, if proper care is
+taken. The error message below should either become a warning message
+or a call to \TeX's |print_err| routine; in the latter case, an
+@^error message@>
+appropriate help message should be given, stating that glue cannot
+stretch to more than 18~feet long, but that it's OK to proceed with
+fingers crossed.
+
+@*Glue multiplication.
+The easiest procedure of the three just mentioned is the one that is
+needed most often, namely, the computation of~|f(x)|.
+
+\PASCAL\ doesn't have built-in binary shift commands or built-in exponentiation,
+although many computers do have this capability. Therefore our arithmetic
+routines use an array called `|two_to_the|', containing powers of~two.
+Divisions by powers of two are never done in the programs below when the
+dividend is negative, so the operations can safely be replaced by right
+shifts on machines for which this is most appropriate. (Contrary to popular
+opinion, the operation `|x div 2|' is not the same as shifting |x|
+right one binary place, on a machine with two's complement arithmetic,
+when |x| is a negative odd integer. But division
+{\it is\/} equivalent to shifting when |x| is nonnegative.)
+
+@<Globals...@>=
+@!two_to_the: array[0..30] of integer; {$|two_to_the|[k]=2^k$}
+
+@ @<Local variables for init...@>=
+@!k:1..30; {an index for initializing |two_to_the|}
+
+@ @<Set init...@>=
+two_to_the[0]:=1;
+for k:=1 to 30 do two_to_the[k]:=two_to_the[k-1]+two_to_the[k-1];
+
+@ We will use the abbreviations |ga|, |gb|, and |gc| as convenient
+alternatives to \PASCAL's \&{with} statement. The glue-multiplication
+function |f|, which replaces several occurrences of the `|float|' macro
+in \TeX82, is now easy to state:
+
+@d ga==g.a_part
+@d gb==g.b_part
+@d gc==g.c_part
+
+@p function glue_mult(@!x:scaled;@!g:glue_ratio):integer;
+ {returns |f(x)| as above, assuming that |x>=0|}
+begin if ga>16 then x:=x div two_to_the[ga-16] {right shift by |a| places}
+else x:=x*two_to_the[16-ga]; {left shift by |-a| places}
+glue_mult:=(x*gc) div two_to_the[gb]; {right shift by |b| places}
+end; {note that |b| may be as large as 30}
+
+@*Glue setting.
+The |glue_fix| procedure computes |a|, |b|, and |c| by the method
+explained above. \TeX\ does not normally compute the quantity~|y|, but
+it could be made to do so without great difficulty.
+
+This procedure replaces several occurrences of the `|unfloat|' macro in
+\TeX82. It would be written as a function that returns a |glue_ratio|,
+if \PASCAL\ would allow functions to produce records as values.
+
+@p procedure glue_fix(@!s,@!t,@!y:scaled; var@!g:glue_ratio);
+var @!a,@!b,@!c:integer; {components of the desired ratio}
+@!k,@!h:integer; {$30-\lfloor\lg s\rfloor$, $30-\lfloor\lg t\rfloor$}
+@!s0:integer; {original (unnormalized) value of |s|}
+@!q,@!r,@!s1:integer; {quotient, remainder, divisor}
+@!w:integer; {$2^l$, where $l=16-k$}
+begin @<Normalize |s|, |t|, and |y|, computing |a|, |k|, and |h|@>;
+if t<s then b:=15-a-k+h@+else b:=14-a-k+h;
+if (b<0) or (b>30) then
+ begin if b<0 then write_ln('! Excessive glue.'); {error message}
+@^error message@>
+ b:=0; c:=0; {make |f(x)| identically zero}
+ end
+else begin if k>=16 then {easy case, $s_0<2^{15}$}
+ c:=(t div two_to_the[h-a-b]+s0-1) div s0 {here |1<=h-a-b<=k-14<=16|}
+ else @<Compute |c| by long division@>;
+ end;
+ga:=a+16; gb:=b; gc:=c;
+end;
+
+@ @<Normalize |s|, |t|, and |y|, computing |a|, |k|, and |h|@>=
+begin a:=15; k:=0; h:=0; s0:=s;
+while y<@'10000000000 do {|y| is known to be positive}
+ begin decr(a); y:=y+y;
+ end;
+while s<@'10000000000 do {|s| is known to be positive}
+ begin incr(k); s:=s+s;
+ end;
+while t<@'10000000000 do {|t| is known to be positive}
+ begin incr(h); t:=t+t;
+ end;
+end {now $2^{30}\le t=2^ht_0<2^{31}$ and $2^{30}\le s=2^ks_0<2^{31}$,
+ hence $d=k-h$ if $t/s<1$}
+
+@ @<Compute |c| by long division@>=
+begin w:=two_to_the[16-k];
+s1:=s0 div w;
+q:=t div s1;
+r:=((t mod s1)*w)-((s0 mod w)*q);
+if r>0 then
+ begin incr(q); r:=r-s0;
+ end
+else while r<=-s0 do
+ begin decr(q); r:=r+s0;
+ end;
+if a+b+k-h=15 then c:=(q+1) div 2 @+else c:=(q+3) div 4;
+end
+
+@*Glue-set printing.
+The last of the three procedures we need is |print_gr|, which displays a
+|glue_ratio| in symbolic decimal form. Before constructing such a procedure,
+we shall consider some simpler routines, copying them from an early
+draft of the program \TeX82.
+
+@d unity==@'200000 {$2^{16}$, represents 1.0000}
+
+@<Glob...@>=
+@!dig:array[0..15] of 0..9; {for storing digits}
+
+@ An array of digits is printed out by |print_digs|.
+
+@p procedure print_digs(@!k:integer); {prints |dig[k-1]| \dots |dig[0]|}
+begin while k>0 do
+ begin decr(k); write(chr(ord('0')+dig[k]));
+ end;
+end;
+
+@ A nonnegative integer is printed out by |print_int|.
+
+@p procedure print_int(@!n:integer); {prints an integer in decimal form}
+var @!k:0..12; {index to current digit; we assume that $0\le n<10^{12}$}
+begin k:=0;
+repeat dig[k]:=n mod 10; n:=n div 10; incr(k);
+until n=0;
+print_digs(k);
+end;
+
+@ And here is a procedure to print a nonnegative |scaled| number.
+
+@p procedure print_scaled(s:scaled);
+ {prints a scaled real, truncated to four digits}
+var k:0..3; {index to current digit of the fraction part}
+begin print_int(s div unity); {print the integer part}
+s:=((s mod unity)*10000) div unity;
+for k:=0 to 3 do
+ begin dig[k]:=s mod 10; s:=s div 10;
+ end;
+write('.'); print_digs(4);
+end;
+
+@ Now we're ready to print a |glue_ratio|. Since the effective multiplier
+is $2^{-a-b}c$, we will display the scaled integer $2^{16-a-b}c$, taking
+care to print something special if this quantity is terribly large.
+
+@p procedure print_gr(@!g:glue_ratio); {prints a glue multiplier}
+var @!j:-29..31; {the amount to shift |c|}
+begin j:=32-ga-gb;
+while j>15 do
+ begin write('2x'); decr(j); {indicate multiples of 2 for BIG cases}
+ end;
+if j<0 then print_scaled(gc div two_to_the[-j]) {shift right}
+else print_scaled(gc*two_to_the[j]); {shift left}
+end;
+
+@* The driver program.
+In order to test these routines, we will assume that the |input| file
+contains a sequence of test cases, where each test case consists of the
+integer numbers $t$, $x_1$, \dots,~$x_n$, 0. The final test case should
+be followed by an additional zero.
+
+@<Glob...@>=
+@!x:array[1..1000] of scaled; {the $x_i$}
+@!t:scaled; {the desired total}
+@!m:integer; {the test case number}
+
+@ Each case will be processed by the following routine, which assumes
+that |t| has already been read.
+
+@p procedure test; {processes the next data set, given |t| and~|m|}
+var @!n: 0..1000; {the number of items}
+k:0..1000; {runs through the items}
+y:scaled; {$\max_{1\le i\le n}\vert x_i\vert$}
+@!g:glue_ratio; {the computed glue multiplier}
+@!s:scaled; {the sum $x_1+\cdots+x_n$}
+@!ts:scaled; {the sum $f(x_1)+\cdots+f(x_n)$}
+begin write_ln('Test data set number ',m:1,':');
+@<Read $x_1,\ldots,x_n$@>;
+@<Compute |s| and |y|@>;
+if s<=0 then write_ln('Invalid data (nonpositive sum); this set rejected.')
+else begin @<Compute |g| and print it@>;
+ @<Print the values of $x_i$, $f(x_i)$, and the totals@>;
+ end;
+end;
+
+@ @<Read $x_1,\ldots,x_n$@>=
+begin n:=0;
+repeat incr(n); read(x[n]);
+until x[n]=0;
+decr(n);
+end
+
+@ @<Compute |s| and |y|@>=
+begin s:=0; y:=0;
+for k:=1 to n do
+ begin s:=s+x[k];
+ if y<abs(x[k]) then y:=abs(x[k]);
+ end;
+end
+
+@ @<Compute |g| and print it@>=
+begin glue_fix(s,t,y,g); {set |g|, perhaps print an error message}
+write(' Glue ratio is '); print_gr(g);
+write_ln(' (',ga-16:1,',',gb:1,',',gc:1,')');
+end
+
+@ @<Print the values of $x_i$, $f(x_i)$, and the totals@>=
+begin ts:=0;
+for k:=1 to n do
+ begin write(x[k]:20);
+ if x[k]>=0 then y:=glue_mult(x[k],g)
+ else y:=-glue_mult(-x[k],g);
+ write_ln(y:15);
+ ts:=ts+y;
+ end;
+write_ln(' Totals',s:13,ts:15,' (versus ',t:1,')');
+end
+
+@ Here is the main program.
+@^main program@>
+
+@p begin initialize;
+m:=1;
+read(t);
+while t>0 do
+ begin test;
+ incr(m); read(t);
+ end;
+end.
+
+@*Index. Here are the section numbers where various identifiers are used in the
+program, and where various topics are discussed.
+
+
+
+
+
diff --git a/Master/texmf-dist/source/generic/knuth/web/webman.tex b/Master/texmf-dist/source/generic/knuth/web/webman.tex
new file mode 100644
index 00000000000..61e12a28789
--- /dev/null
+++ b/Master/texmf-dist/source/generic/knuth/web/webman.tex
@@ -0,0 +1,1672 @@
+% WEB user manual -- last updated by D E Knuth on 4 Dec 89
+\input webmac
+\parskip 0pt plus 1pt
+\def\RA{\char'31 } % right arrow
+\def\hang{\hangindent 4em\ignorespaces}
+\font\ninerm=cmr9
+\font\ninett=cmtt9
+\font\eighttt=cmtt8
+\let\mc=\ninerm % medium caps for names like SAIL
+\def\PASCAL{Pascal}
+\font\quoterm=cmssq8
+\font\quoteit=cmssqi8
+\def\pb{\.{|...|}}
+\def\lpile{\def\cr{\hfill\endline}\matrix} % I only use \lpile by itself
+
+\outer\def\section #1.{\penalty-50\vskip 12pt plus 3pt minus 3pt
+ \noindent{\bf #1.}\quad\ignorespaces}
+
+\def\lheader{\mainfont\the\pageno\hfill\sc\runninghead\hfill}
+\def\rheader{\hfill\sc\runninghead\hfill\mainfont\the\pageno}
+\def\runninghead{{\tentt WEB} USER MANUAL}
+
+% This verbatim mode assumes that no ? appears in the text being copied.
+\def\verbatim{\begingroup
+ \def\do##1{\catcode`##1=12 } \dospecials
+ \parskip 0pt \parindent 0pt
+ \catcode`\ =13 \catcode`\^^M=13
+ \tt \catcode`\?=0 \verbatimdefs \verbatimgobble}
+{\catcode`\^^M=13{\catcode`\ =13\gdef\verbatimdefs{\def^^M{\ \par}\let =\ }} %
+ \gdef\verbatimgobble#1^^M{}}
+ \centerline{\titlefont The {\ttitlefont WEB} System
+ of Structured Documentation}
+
+\vskip 15pt plus 3pt minus 3pt
+\noindent This memo describes how to write programs in the
+\.{WEB} language; and it also includes the full \.{WEB} documentation for
+\.{WEAVE} and \.{TANGLE}, the programs that read \.{WEB} input and produce
+\TeX\ and \PASCAL\ output, respectively. The philosophy behind \.{WEB} is
+that an experienced system programmer, who wants to provide the best
+possible documentation of software products, needs two things
+simultaneously: a language like \TeX\ for formatting, and a language like
+\PASCAL\ for programming. Neither type of language can provide the best
+documentation by itself. But when both are appropriately combined, we
+obtain a system that is much more useful than either language separately.
+
+The structure of a software program may be thought of as a ``web'' that is
+made up of many interconnected pieces. To document such a program, we want
+to explain each individual part of the web and how it relates to its
+neighbors. The typographic tools provided by \TeX\ give us an opportunity
+to explain the local structure of each part by making that structure
+visible, and the programming tools provided by \PASCAL\ make it possible
+for us to specify the algorithms formally and unambiguously. By combining
+the two, we can develop a style of programming that maximizes our ability
+to perceive the structure of a complex piece of software, and at the same
+time the documented programs can be mechanically translated into a working
+software system that matches the documentation.
+
+Since \.{WEB} is an experimental system developed for internal use within
+the \TeX\ project at Stanford, this report is rather terse, and it assumes
+that the reader is an experienced programmer who is highly motivated to
+read a detailed description of \.{WEB}'s rules. Furthermore, even if a
+less terse manual were to be written, the reader would have to be warned
+in advance that \.{WEB} is not for beginners and it never will be: The
+user of \.{WEB} must be familiar with both \TeX\ and \PASCAL. When one
+writes a \.{WEB} description of a software system, it is possible to make
+mistakes by breaking the rules of \.{WEB} and/or the rules of \TeX\ and/or
+the rules of \PASCAL. In practice, all three types of errors will occur,
+and you will get different error messages from the different language
+processors. In compensation for the sophisticated expertise needed to cope
+with such a variety of languages, however, experience has shown that
+reliable software can be created quite rapidly by working entirely in
+\.{WEB} from the beginning; and the documentation of such programs seems
+to be better than the documentation obtained by any other known method.
+Thus, \.{WEB} users need to be highly qualified, but they can get some
+satisfaction and perhaps even a special feeling of accomplishment when
+they have successfully created a software system with this method.
+
+To use \.{WEB}, you prepare a file called \.{COB.WEB} (say), and then you
+apply a system program called \.{WEAVE} to this file, obtaining an output
+file called \.{COB.TEX}. When \TeX\ processes \.{COB.TEX}, your output
+will be a ``pretty printed'' version of \.{COB.WEB} that takes appropriate
+care of typographic details like page layout and the use of indentation,
+italics, boldface, etc.; this output will contain extensive cross-index
+information that is gathered automatically. You can also submit the same
+file \.{COB.WEB} to another system program called \.{TANGLE}, which will
+produce a file \.{COB.PAS} that contains the \PASCAL\ code of your \.{COB}
+program. The \PASCAL\ compiler will convert \.{COB.PAS} into
+machine-language instructions corresponding to the algorithms that were so
+nicely formatted by \.{WEAVE} and \TeX. Finally, you can (and should)
+delete the files \.{COB.TEX} and \.{COB.PAS}, because \.{COB.WEB} contains
+the definitive source code. Examples of the behavior of \.{WEAVE} and
+\.{TANGLE} are appended to this manual.
+
+Besides providing a documentation tool, \.{WEB} enhances the \PASCAL\
+language by providing a rudimentary macro capability together with the
+ability to permute pieces of the program text, so that a large system can
+be understood entirely in terms of small modules and their local
+interrelationships. The \.{TANGLE} program is so named because it takes a
+given web and moves the modules from their web structure into the order
+required by \PASCAL; the advantage of programming in \.{WEB} is that the
+algorithms can be expressed in ``untangled'' form, with each module
+explained separately. The \.{WEAVE} program is so named because it takes
+a given web and intertwines the \TeX\ and \PASCAL\ portions contained in
+each module, then it knits the whole fabric into a structured document.
+(Get it? Wow.) Perhaps there is some deep connection here with the fact
+that the German word for ``weave'' is ``{\it web\/}'', and the
+corresponding Latin imperative is ``{\it texe\/}''!
+
+It is impossible to list all of the related work that has influenced the
+design of \.{WEB}, but the key contributions should be mentioned
+here.\quad (1)~Myrtle Kellington, as executive editor for ACM
+publications, developed excellent typographic standards for the
+typesetting of Algol programs during the 1960s, based on the original
+designs of Peter Naur; the subtlety and quality of this influential work
+can be appreciated only by people who have seen what happens when other
+printers try to typeset Algol without the advice of ACM's copy
+editors.\quad(2)~Bill McKeeman introduced a program intended to automate
+some of this task [Algorithm 268, ``Algol~60 reference language editor,''
+{\sl CACM \bf8} (1965), 667--668]; and a considerable flowering of such
+programs has occurred in recent years [see especially Derek Oppen,
+``Prettyprinting,'' {\sl ACM TOPLAS \bf2} (1980), 465--483; G.~A. Rose and
+J. Welsh, ``Formatted programming languages,'' {\sl SOFTWARE Practice
+\char`\&\ Exper.\ \bf11} (1981), 651--669].\quad(3)~The top-down style of
+exposition encouraged by \.{WEB} was of course chiefly influenced by Edsger
+Dijkstra's essays on structured programming in the late 1960s. The less
+well known work of Pierre-Arnoul de Marneffe [``Holon programming: A
+survey,'' Univ.\ de Liege, Service Informatique, Liege, Belgium, 1973; 135
+pp.\null] also had a significant influence on the author as \.{WEB} was
+being formulated.\quad(4)~Edwin Towster has proposed a similar style of
+documentation in which the programmer is supposed to specify the relevant
+data structure environment in the name of each submodule [``A convention
+for explicit declaration of environments and top-down refinement of
+data,'' {\sl IEEE Trans.\ on Software Eng.\ \bf SE--5} (1979), 374--386];
+this requirement seems to make the documentation a bit too verbose,
+although experience with \.{WEB} has shown that any unusual control
+structure or data structure should definitely be incorporated into the
+module names on psychological grounds.\quad(5)~Discussions with Luis
+Trabb~Pardo in the spring of 1979 were extremely helpful for setting up a
+prototype version of \.{WEB} that was called \.{DOC}.\quad (6)~Ignacio
+Zabala's extensive experience with \.{DOC}, in which he created a full
+implementation of \TeX\ in \PASCAL\ that was successfully transported to
+many different computers, was of immense value while \.{WEB} was taking
+its present form.\quad(7)~David~R. Fuchs made several crucial suggestions
+about how to make \.{WEB} more portable; he and Arthur~L. Samuel
+coordinated the initial installations of \.{WEB} on dozens of computer
+systems, making changes to the code so that it would be acceptable to
+a wide variety of \PASCAL\ compilers.\quad(8)~The name \.{WEB} itself
+was chosen in honor of my wife's mother, Wilda Ernestine Bates.
+
+The appendices to this report contain complete \.{WEB} programs for the
+\.{WEAVE} and \.{TANGLE} processors. A study of these examples, together
+with an attempt to write \.{WEB} programs by yourself, is the best way
+to understand why \.{WEB} has come to be like it is.
+ \section General rules.
+A \.{WEB} file is a long string of text that has been divided into
+individual lines. The exact line boundaries are not terribly crucial, and
+a programmer can pretty much chop up the \.{WEB} file in whatever way seems
+to look best as the file is being edited; but string constants and control
+texts must end on the same line on which they begin, since this convention
+helps to keep errors from propagating. The end of a line means
+the same thing as a blank space.
+
+Two kinds of material go into \.{WEB} files: \TeX\ text and \PASCAL\ text.
+A programmer writing in \.{WEB} should be thinking both of the
+documentation and of the \PASCAL\ program that he or she is creating;
+i.e., the programmer should be instinctively aware of the different
+actions that \.{WEAVE} and \.{TANGLE} will perform on the \.{WEB} file.
+\TeX\ text is essentially copied without change by \.{WEAVE}, and it is
+entirely deleted by \.{TANGLE}, since the \TeX\ text is ``pure
+documentation.'' \PASCAL\ text, on the other hand, is formatted by
+\.{WEAVE} and it is shuffled around by \.{TANGLE}, according to rules that
+will become clear later. For now the important point to keep in mind is
+that there are two kinds of text. Writing \.{WEB} programs is something
+like writing \TeX\ documents, but with an additional ``\PASCAL\ mode''
+that is added to \TeX's horizontal mode, vertical mode, and math mode.
+
+A \.{WEB} file is built up from units called {\sl modules\/} that are more
+or less self-contained. Each module has three parts:
+
+\yskip\item{1)} A \TeX\ part, containing explanatory material about what
+is going on in the module.
+
+\item{2)} A definition part, containing macro definitions that serve as
+abbreviations for \PASCAL\ constructions that would be less comprehensible
+if written out in full each time.
+
+\item{3)} A \PASCAL\ part, containing a piece of the program that
+\.{TANGLE} will produce. This \PASCAL\ code should ideally be about a
+dozen lines long, so that it is easily comprehensible as a unit and so
+that its structure is readily perceived.
+
+\yskip\noindent The three parts of each module must appear in this order;
+i.e., the \TeX\ commentary must come first, then the definitions, and
+finally the \PASCAL\ code. Any of the parts may be empty.
+
+\eject % page break inserted Dec 88
+
+A module begins with the pair of symbols `\.{@\ }' or `\.{@*}', where
+`\.{\ }' denotes a blank space. A module ends
+at the beginning of the next module (i.e., at the next
+`\.{@\ }' or `\.{@*}'), or at the end of the file, whichever comes first.
+The \.{WEB} file may also contain material that is not part of any module
+at all, namely the text (if any) that occurs before the first module.
+Such text is said to be ``in limbo''; it is ignored by \.{TANGLE}
+and copied essentially verbatim by \.{WEAVE}, so its function is to
+provide any additional formatting instructions that may be desired in the
+\TeX\ output. Indeed, it is customary to begin a \.{WEB} file with
+\TeX\ code in limbo that loads special fonts, defines special macros,
+changes the page sizes, and/or produces a title page.
+
+Modules are numbered consecutively, starting with 1; these numbers appear
+at the beginning of each module of the \TeX\ documentation, and they appear
+as bracketed comments at the beginning of the code generated by that
+module in the \PASCAL\ program.
+
+Fortunately, you never mention these numbers yourself when you are writing
+in \.{WEB}. You just say `\.{@\ }' or `\.{@*}' at the beginning of each
+new module, and the numbers are supplied automatically by \.{WEAVE} and
+\.{TANGLE}. As far as you are concerned, a module has a
+{\sl name\/} instead of a number; such a name is specified by writing
+`\.{@<}' followed by \TeX\ text followed by `\.{@>}'. When \.{WEAVE}
+outputs a module name, it replaces the `\.{@<}' and `\.{@>}' by
+angle brackets and inserts the module number in small type. Thus, when you
+read the output of \.{WEAVE} it is easy to locate any module that is
+referred to in another module.
+
+For expository purposes, a module name should be a good description of the
+contents of that module; i.e., it should stand for the abstraction
+represented by the module. Then the module can be ``plugged into'' one or
+more other modules in such a way
+that unimportant details of its inner workings
+are suppressed. A module name therefore ought to be long enough to convey
+the necessary meaning. Unfortunately, however, it is laborious to type
+such long names over and over again, and it is also difficult to specify a
+long name twice in exactly the same way so that \.{WEAVE} and \.{TANGLE}
+will be able to match the names to the modules. To ameliorate this difficulty,
+\.{WEAVE} and \.{TANGLE} let you abbreviate a module name
+after its first appearance in the \.{WEB} file; you can type simply
+`\.{@<$\alpha$...@>}', where $\alpha$ is any string that is a prefix of
+exactly one module name appearing in the file. For example, `\.{@<Clear
+the arrays@>}' can be abbreviated to `\.{@<Clear...@>}' if no other module
+name begins with the five letters `\.{Clear}'. Module names must otherwise
+match character for character, except that consecutive blank spaces and/or
+tab marks are treated as equivalent to single spaces, and such spaces are
+deleted at the beginning and end of the name. Thus, `\.{@< Clear { }the
+arrays @>}' will also match the name in the previous example.
+
+We have said that a module begins with `\.{@\ }' or `\.{@*}', but we
+didn't say how it gets divided up into a \TeX\ part, a definition part,
+and a \PASCAL\ part. The definition part begins with the first appearance
+of `\.{@d}' or `\.{@f}' in the module, and the \PASCAL\ part begins with
+the first appearance of `\.{@p}' or `\.{@<}'. The latter option `\.{@<}'
+stands for the beginning of a module name, which is the name of the module
+itself. An equals sign (\.=) must follow the `\.{@>}' at the end of this
+module name; you are saying, in effect, that the module name stands for
+the \PASCAL\ text that follows, so you say `$\langle\,$module
+name$\,\rangle=\null$\PASCAL\ text'. Alternatively, if the \PASCAL\ part
+begins with `\.{@p}' instead of a module name, the current module is said
+to be {\sl unnamed}. Note that module names cannot appear in the
+definition part of a module, because the first `\.{@<}' in a module
+signals the beginning of its \PASCAL\ part. But any number of module names
+might appear in the \PASCAL\ part, once it has started.
+
+The general idea of \.{TANGLE} is to make a \PASCAL\ program out of these
+modules in the following way: First all the \PASCAL\ parts of unnamed
+modules are copied down, in order; this constitutes the initial
+approximation $T_0$ to the text of the program. (There should be at least
+one unnamed module, otherwise there will be no program.) Then all module
+names that appear in the initial text $T_0$ are replaced by the \PASCAL\
+parts of the corresponding modules, and this substitution process
+continues until no module names remain. Then all defined macros are
+replaced by their equivalents, according to certain rules that are
+explained later. The resulting \PASCAL\ code is ``sanitized'' so that it
+will be acceptable to an average garden-variety \PASCAL\ compiler; i.e.,
+lowercase letters are converted to uppercase, long identifiers are
+chopped, and the lines of the output file are constrained to be at most 72
+characters long. All comments will have been removed from this \PASCAL\
+program except for the meta-comments delimited by `\.{@\{}' and
+`\.{@\}}', as explained below, and except for the module-number comments
+that point to the source location where each piece of the program text
+originated in the \.{WEB} file.
+
+If the same name has been given to more than one module, the \PASCAL\ text
+for that name is obtained by putting together all of the \PASCAL\ parts in
+the corresponding modules. This feature is useful, for example, in a
+module named `Global variables in the outer block', since one can then
+declare global variables in whatever modules those variables are
+introduced. When several modules have the same name, \.{WEAVE} assigns the
+first module number as the number corresponding to that name, and it
+inserts a note at the bottom of that module telling the reader to `See
+also sections so-and-so'; this footnote gives the numbers of all the other
+modules having the same name as the present one. The \PASCAL\ text
+corresponding to a module is usually formatted by \.{WEAVE} so that the
+output has an equivalence sign in place of the equals sign in the \.{WEB}
+file; i.e., the output says `$\langle\,$module
+name$\,\rangle\equiv\null$\PASCAL\ text'. However, in the case of the second
+and subsequent appearances of a module with the same name, this `$\equiv$'
+sign is replaced by `$\mathrel+\equiv$', as an indication that the \PASCAL\
+text that follows is being appended to the \PASCAL\ text of another
+module.
+
+The general idea of \.{WEAVE} is to make a \.{TEX} file from the \.{WEB}
+file in the following way: The first line of the \.{TEX} file will be
+`\.{\\input webmac}'; this will cause \TeX\ to read in the macros that
+define \.{WEB}'s documentation conventions. The next lines of the file
+will be copied from whatever \TeX\ text is in limbo before the first
+module. Then comes the output for each module in turn, possibly
+interspersed with end-of-page marks. Finally, \.{WEAVE} will generate a
+cross-reference index that lists each module number in which each \PASCAL\
+identifier appears, and it will also generate an alphabetized list
+of the module names, as well as a table of contents that
+shows the page and module numbers for each ``starred'' module.
+
+What is a ``starred'' module, you ask? A module that begins with `\.{@*}'
+instead of `\.{@\ }' is slightly special in that it denotes a new major
+group of modules. The `\.{@*}' should be followed by the title of this
+group, followed by a period. Such modules will always start on a new page
+in the \TeX\ output, and the group title will appear as a running headline
+on all subsequent pages until the next starred module. The title will also
+appear in the table of contents, and in boldface type at the beginning of
+its module. Caution: Do not use \TeX\ control sequences in such titles,
+unless you know that the \.{webmac} macros will do the right thing with
+them. The reason is that these titles are converted to uppercase when
+they appear as running heads, and they are converted to boldface when they
+appear at the beginning of their modules, and they are also written out to
+a table-of-contents file used for temporary storage while \TeX\ is
+working; whatever control sequences you use must be meaningful in all
+three of these modes.
+
+The \TeX\ output produced by \.{WEAVE} for each module consists of
+the following: First comes the module number (e.g., `\.{\\M123.}'
+at the beginning of module 123, except that `\.{\\N}' appears in place of
+`\.{\\M}' at the beginning of a starred module). Then comes the
+\TeX\ part of the module, copied almost verbatim except as noted
+below. Then comes the definition part and the \PASCAL\ part, formatted
+so that there will be a little extra space between them if both are
+nonempty. The definition and \PASCAL\ parts are obtained by inserting
+a bunch of funny looking \TeX\ macros into the \PASCAL\ program; these
+macros handle typographic details about fonts and proper math spacing,
+as well as line breaks and indentation.
+
+When you are typing \TeX\ text, you will probably want to make frequent
+reference to variables and other quantities in your \PASCAL\ code, and you
+will want those variables to have the same typographic treatment
+when they appear in your text as when they appear in your
+program. Therefore the \.{WEB} language allows you to get the effect of
+\PASCAL\ editing within \TeX\ text, if you place `\.|' marks before and
+after the \PASCAL\ material. For example, suppose you want to say something
+like this:
+$$\hbox{The characters are placed into \\{buffer}, which is a
+\&{packed} \&{array} $[1\to\|n]$ \&{of} \\{char}.}$$
+The \TeX\ text would look like this in your \.{WEB} file:
+$$\.{The characters are placed into |buffer|, which is a |packed
+array [1..n] of char|.}$$
+And \.{WEAVE} translates this into something you are glad you didn't have
+to type:
+$$\lpile{\.{The characters are placed into \\\\\{buffer\},}\cr
+ \.{which is a \\\&\{packed\}{ }\\\&\{array\}{ }\$
+ [1\\to\\|n]\${ }\\\&\{of\}{ }\\\\\{char\}.}\cr}$$
+Incidentally, the cross-reference index that \.{WEAVE} would make, in
+the presence of a comment like this, would include
+the current module number as one of the index entries for \\{buffer}
+\vadjust{\eject}% page break inserted Dec 88
+and \\{char}, even though \\{buffer} and \\{char}
+might not appear in the \PASCAL\ part of
+this module. Thus, the index covers references to identifiers in
+the explanatory comments as well as in the program itself; you will
+soon learn to appreciate this feature. However, the identifiers
+\&{packed} and \&{array} and \|n\ and \&{of\/} would not be indexed,
+because \.{WEAVE} does not make index entries for reserved words or
+single-letter identifiers. Such identifiers are felt to be so ubiquitous
+that it would be pointless to mention every place where they occur.
+
+Speaking of identifiers, the author of \.{WEB} thinks that
+\\{IdentifiersSeveralWordsLong} look terribly ugly when they mix
+uppercase and lowercase letters. He recommends that
+\\{identifiers\_several\_words\_long} be written with underline characters
+to get a much better effect. The actual identifiers sent to the \PASCAL\
+compiler by \.{TANGLE} will have such underlines removed, and \.{TANGLE}
+will check to make sure that two different identifiers do not become
+identical when this happens. (In fact, \.{TANGLE} even checks that
+the first seven characters of identifiers are unique, when lowercase
+letters have been converted to uppercase; the number seven in this
+constraint is more strict than \PASCAL's eight, and it can
+be changed if desired.) The \.{WEAVE} processor will properly
+alphabetize identifiers that have embedded underlines
+when it makes the index.
+
+Although a module begins with \TeX\ text and ends with \PASCAL\ text, we
+have noted that the dividing line isn't sharp, since \PASCAL\ text can be
+included in \TeX\ text if it is enclosed in `\pb'. Conversely, \TeX\ text
+also appears frequently within \PASCAL\ text, because everything in
+comments (i.e., between left and right braces) is treated as \TeX\ text.
+Furthermore, a module name consists of \TeX\ text; thus, a \.{WEB} file
+typically involves constructions like `\.{if} \.x \.= \.0 \.{then}
+\.{@<Empty} \.{the} \.{|buffer|} \.{array@>}' where we go back and forth
+between \PASCAL\ and \TeX\ conventions in a natural way.
+ \section Macros.
+A \.{WEB} programmer can define three kinds of macros to make the programs
+shorter and more readable:
+
+\yskip\hang`\.{@d} \\{identifier} \.= \\{constant}' defines a {\sl numeric\/}
+macro, allowing \.{TANGLE} to do rudimentary arithmetic.
+
+\yskip\hang`\.{@d} \\{identifier} \.{==} \PASCAL\ text' defines a {\sl
+simple\/} macro, where the identifier will be replaced by the \PASCAL\ text
+when \.{TANGLE} produces its output.
+
+\yskip\hang`\.{@d} \\{identifier}\.{(\#) ==} \PASCAL\ text' defines a
+{\sl parametric\/} macro, where the identifier will be replaced by the \PASCAL\
+text and where occurrences of \.{\#} in that \PASCAL\ text will be
+replaced by an argument.
+
+\yskip\noindent In all three cases, the identifier must have length greater
+than one; it must not be a single letter.
+
+Numeric macros are subject to the following restrictions:\quad
+(1)~The identifier must
+be making its first appearance in the \.{WEB} file;
+a numeric macro must be defined before it is used.\quad
+(2)~The right-hand side of the numeric definition must be made entirely from
+integer constants, numeric macros, preprocessed strings (see below), and
+plus~signs or minus signs. No other operations or symbols are allowed,
+not even parentheses, except that \PASCAL-like comments (enclosed in
+braces) can appear. Indeed, comments are recommended, since it is usually
+wise to give a brief explanation of the significance of each identifier as
+it is defined.\quad
+(3)~The numeric value must be less than $2^{15}=32768$ in absolute value.
+(For larger values, you can use `\.{==}' in place of~`\.=', thus making use
+of a simple macro instead of a numeric one. Note, however, that simple
+macros sometimes have a different effect. For example, consider the three
+definitions `\.{@d n1=2 @d n2=2+n1 @d n3==2+n1}'; then `\.{x-n2}' will
+expand into `\.{x-4}', while `\.{x-n3}' will expand into `\.{x-2+2}' which
+is quite different! It is wise to include parentheses in non-numeric
+macros, e.g., `\.{@d n3==(2+n1)}', to avoid such errors.)
+
+When constants are connected by plus signs or minus
+signs in a \PASCAL\ program, \.{TANGLE} does the arithmetic before putting
+the constant into the output file. Therefore it is permissible to say, for
+example, `\&{array} $[0\,.\,.\,\\{size}-1]$' if \\{size} has been declared
+as a macro; note that \PASCAL\ doesn't allow this kind of compile-time
+arithmetic if \\{size} is a \&{constant} quantity in the program. Another
+use of \.{TANGLE}'s arithmetic is to make \&{case} statement labels such
+as `$\\{flag}+1$' legitimate. Of course, it is improper to change \.{2+2}
+into \.4 without looking at the surrounding context; many counterexamples
+exist, such as the phrases `\.{-2+2}', `\.{x/2+2}', and `\.{2+2E5}'. The
+program for \.{TANGLE}, in the appendix, gives precise details about this
+conversion, which \.{TANGLE} does only when it is safe.
+
+The right-hand sides of simple and parametric macros
+are required to have balanced parentheses, and the \PASCAL\ texts of
+modules must have balanced parentheses too. Therefore when the argument
+to a para\-metric macro appears in parentheses, both parentheses
+will belong to the same \PASCAL\ text.
+
+The appendices to this report contain hundreds of typical examples of the
+usefulness of \.{WEB} macros, so it is not necessary to dwell on the
+subject here. However, the reader should know that \.{WEB}'s apparently
+primitive macro capabilities can actually do a lot of rather surprising
+things. Here is a construction that sheds further light on what is
+possible: After making the definitions
+$$\catcode`\#=12
+\lpile{\.{@d two\_cases(#)==case j of 1:#(1); 2:#(2); end}\cr
+\.{@d reset\_file(#)==reset(input\_file@\&#)}\cr}$$
+one can write `\.{two\_cases(reset\_file)}' and the resulting \PASCAL\
+output will be
+$$\.{case j of 1:reset(input\_file1); 2:reset(input\_file2); end}$$
+(but in uppercase letters and with \.\_'s removed).
+The `\.{@\&}' operation used here joins together two adjacent tokens
+into a single token, as explained later; otherwise the \PASCAL\ file would
+contain a space between \.{input\_file} and the digit that followed it.
+This trick can be used to provide the effect of an array of files, if you
+are unfortunate enough to have a \PASCAL\ compiler that doesn't allow such
+arrays. Incidentally, the cross-reference index made by \.{WEAVE} from
+this example would contain the identifier \\{input\_file} but it would not
+contain \\{input\_file1} or \\{input\_file2}. Furthermore, \.{TANGLE}
+would not catch the error that \.{INPUTFILE1} and \.{INPUTFILE2} both
+begin with the same nine letters; one should be more careful when using
+`\.{@\&}'! But such aspects of the construction in this trick are
+peripheral to our main point, which is that a parametric macro name without
+arguments can be used as an argument to another parametric macro.
+
+Although \.{WEB}'s macros are allowed to have at most one parameter, the
+following example shows that this is not as much of a restriction as it
+may seem at first. Let \\{amac} and \\{bmac} be any parametric macros, and
+suppose that we want to get the effect of
+$$\catcode`\#=12
+\.{@d cmac(#1,#2) == amac(#1) bmac(#2)}$$
+which \.{WEB} doesn't permit. The solution is to make the definitions
+$$\catcode`\#=12
+\lpile{\.{@d cmac(#) == amac(#) dmac}\cr
+\.{@d dmac(#) == bmac(#)}\cr}$$
+and then to say `\.{cmac(x)(y)}'.
+
+There is one restriction in the generality of \.{WEB}'s parametric
+macros, however: the argument to a para\-metric macro must not come from
+the expansion of a macro that has not already been ``started.'' For
+example, here is one of the things \.{WEB} cannot handle:
+$$\catcode`\#=12
+\lpile{\.{@d arg == (p)}\cr
+\.{@d identity(#) == #}\cr
+\.{@p identity arg}\cr}$$
+In this case \.{TANGLE} will complain that the \.{identity} macro is not
+followed by an argument in parentheses.
+
+The \.{WEB} language has another feature that is somewhat similar to a
+numeric macro. A {\sl preprocessed string\/} is a string that is like
+a \PASCAL\ string but delimited by double-quote marks (\.") instead of
+single-quotes. Double-quote marks inside of such strings are indicated by
+giving two double-quotes in a row. If a preprocessed string is
+of length one (e.g., \.{"A"} or \.{""""}), it will be treated by \.{TANGLE}
+as equivalent to the corresponding ASCII-code integer (e.g., \.{65} or
+\.{34}). And if a preprocessed string is not of length one, it will be
+converted into an integer equal to 256 or more. A {\sl string pool\/}
+containing all such strings will be written out by the \.{TANGLE}
+processor; this string pool file consists of string 256, then string 257,
+etc., where each string is followed by an end-of-line and prefixed by two
+decimal digits that define its length. Thus, for example, the empty string
+\.{""} would be represented in the string pool file by a line containing
+the two characters `\.{00}', while the string \.{"""String"""} would be
+represented by `\.{08"String"}'. A given string appears at most once in
+the string pool; the use of such a pool makes it easier to cope with
+\PASCAL's restrictions on string manipulation. The string pool ends with
+`\.{*nnnnnnnnn}', where \.{nnnnnnnnn} is a decimal number
+called the {\sl string pool check sum}. If any string changes, the check
+sum almost surely changes too; thus, the `\.{@\$}' feature
+described below makes it possible for a program to assure itself that it
+is reading its own string pool.
+
+Here is a simple example that combines numeric macros with preprocessed
+strings of length one:
+$$\lpile{\.{@d upper\_case\_Y = "Y"}\cr
+\.{@d case\_difference = -"y"+upper\_case\_Y}\cr}$$
+The result is to define
+$\\{upper\_case\_Y}=89$, $\\{case\_difference}=-32$.
+ \section Control codes.
+We have seen several magic uses of `\.{@}' signs in \.{WEB} files, and it
+is time to make a systematic study of
+these special features. A \.{WEB} {\sl control code\/}
+is a two-character combination of which the first is `\.@'.
+
+Here is a complete list of the legal control codes. The letters $L$, $T$,
+$P$, $M$, $C$, and/or $S$ following each code indicate whether or not that
+code is allowable in limbo, in \TeX\ text, in \PASCAL\ text, in module
+names, in comments, and/or in strings. A bar over such a letter means
+that the control code terminates the present part of the \.{WEB} file; for
+example, $\overline L$ means that this control code ends the limbo material
+before the first module.
+
+\def\@#1[#2] {\yskip\hangindent 2em\noindent\.{@#1\unskip
+ \spacefactor1000{ }}$[#2]$\quad}
+\def\oP{\overline P}
+\def\oT{\overline T\mskip1mu}
+
+\@@ [C,L,M,P,S,T] A double \.@ denotes the single character `\.@'. This is
+the only control code that is legal in limbo, in comments, and in strings.
+
+\@\ [\overline L,\oP,\oT] This denotes the beginning of a new
+(unstarred) module. A tab mark or end-of-line (carriage return)
+is equivalent to a space when it follows an \.@ sign.
+
+\@* [\overline L,\oP,\oT] This denotes the beginning of a new starred
+module, i.e., a module that begins a new major group. The title of the new
+group should appear after the \.{@*}, followed by a period. As explained
+above, \TeX\ control sequences should be avoided in such titles unless
+they are quite simple. When \.{WEAVE} and \.{TANGLE} read a \.{@*}, they
+print an asterisk on the terminal
+followed by the current module number, so that the user
+can see some indication of progress. The very first module should be starred.
+
+\@d [\oP,\oT] Macro definitions begin with \.{@d} (or \.{@D}), followed by
+the \PASCAL\ text for one of the three kinds of macros, as explained
+earlier.
+
+\@f [\oP,\oT] Format definitions begin with \.{@f} (or \.{@F}); they cause
+\.{WEAVE} to treat identifiers in a special way when they appear in
+\PASCAL\ text. The general form of a format definition is `\.{@f} \|l \.{==}
+\|r', followed by an optional comment enclosed in braces, where \|l and \|r
+are identifiers; \.{WEAVE} will subsequently treat identifier \|l as it
+currently treats \|r. This feature allows a \.{WEB} programmer to invent
+new reserved words and/or to unreserve some of \PASCAL's reserved
+identifiers. The definition part of each module consists of any number of
+macro definitions (beginning with \.{@d}) and format definitions (beginning
+with \.{@f}), intermixed in any order.
+
+\@p [\oP,\oT] The \PASCAL\ part of an unnamed module begins with \.{@p}
+(or \.{@P}). This causes \.{TANGLE} to append the following \PASCAL\ code
+to the initial program text $T_0$ as explained above. The \.{WEAVE}
+processor does not cause a `\.{@p}' to appear explicitly in the \TeX\
+output, so if you are creating a \.{WEB} file based on a \TeX-printed
+\.{WEB} documentation you have to remember to insert \.{@p} in the
+appropriate places of the unnamed modules.
+
+\@< [P,\oT] A module name begins with \.{@<} followed by \TeX\ text followed
+by \.{@>}; the \TeX\ text should not contain any \.{WEB} control codes
+except \.{@@}, unless these control codes appear in \PASCAL\ text that
+is delimited by \pb. The module name may be abbreviated, after its first
+appearance in a \.{WEB} file, by giving any unique prefix followed by \.{...},
+where the three dots immediately precede the closing \.{@>}. No module name
+should be a prefix of another. Module names may not appear in \PASCAL\
+text that is enclosed in \pb, nor may they appear in the definition part
+of a module (since the appearance of a module name ends the definition
+part and begins the \PASCAL\ part).
+
+\@\' [P,T] This denotes an octal constant, to be formed from the
+succeeding digits. For example, if the \.{WEB} file contains `\.{@\'100}',
+the \.{TANGLE} processor will treat this an equivalent to `\.{64}';
+the constant will be formatted as ``\O{100}'' in the \TeX\ output
+produced via \.{WEAVE}. You should use octal notation only for positive
+constants; don't try to get, e.g., $-1$ by saying `\.{@\'777777777777}'.
+
+\@" [P,T] A hexadecimal constant; `\.{@"D0D0}' tangles to \.{53456} and
+weaves to `\H{D0D0}'.
+
+\@\$ [P] This denotes the string pool check sum.
+
+\@\{ [P] The beginning of a ``meta comment,'' i.e., a comment
+that is supposed to appear in the \PASCAL\ code, is indicated by
+\.{@\{} in the \.{WEB} file. Such delimiters can be used as
+isolated symbols in macros or modules, but they should be properly nested
+in the final \PASCAL\ program. The \.{TANGLE} processor will convert
+`\.{@\{}' into `\.\{' in the \PASCAL\ output file, unless
+the output is already part of a meta-comment; in the latter case
+`\.{@\{}' is converted into `\.[', since \PASCAL\ does not allow
+nested comments. Incidentally, module numbers are automatically inserted
+as meta-comments into the \PASCAL\ program, in order to help correlate the
+outputs of \.{WEAVE} and \.{TANGLE} (see Appendix~C\null). Meta-comments
+can be used to put conditional text into a \PASCAL\ program; this helps to
+overcome one of the limitations of \.{WEB}, since the simple macro
+processing routines of \.{TANGLE} do not include the dynamic evaluation of
+boolean expressions.
+
+\@\} [P] The end of a ``meta comment'' is indicated by `\.{@\}}'; this is
+converted either into `\.\}' or `\.{]}' in the \PASCAL\ output, according
+to the conventions explained for \.{@\{} above.
+
+\@\& [P] The \.{@\&} operation causes whatever is on its left to be
+adjacent to whatever is on its right, in the \PASCAL\ output. No spaces or
+line breaks will separate these two items. However, the thing on the left
+should not be a semicolon, since a line break might occur after a semicolon.
+
+\@\^ [P,T] The ``control text'' that follows, up to the next
+`\.{@>}', will be entered into the index together with the identifiers of
+the \PASCAL\ program; this text will appear in roman type. For example, to
+put the phrase ``system dependencies'' into the index, you can type
+`\.{@\^system dependencies@>}' in each module
+that you want to index as system dependent. A control text, like a string,
+must end on the same line of the \.{WEB} file as it began. Furthermore,
+no \.{WEB} control codes are allowed in a control text, not even
+\.{@@}. (If you need an \.{@} sign you can get around this restriction by
+typing `\.{\\AT!}'.)
+
+\@. [P,T] The ``control text'' that follows will be entered into the index
+in \.{typewriter} \.{type}; see the rules for `\.{@\^}', which is analogous.
+
+\@: [P,T] The ``control text'' that follows will be entered into the index
+in a format controlled by the \TeX\ macro `\.{\\9}', which the user
+should define as desired; see the rules for `\.{@\^}', which is analogous.
+
+\@t [P] The ``control text'' that follows, up to the next `\.{@>}', will
+be put into a \TeX\ \.{\\hbox} and formatted along with the neighboring
+\PASCAL\ program. This text is ignored by \.{TANGLE}, but it can be used
+for various purposes within \.{WEAVE}. For example, you can make comments
+that mix \PASCAL\ and classical mathematics, as in `$\\{size}<2^{15}$', by
+typing `\.{|size < @t\$2\^\{15\}\$@>|}'. A control text must end on the
+same line of the \.{WEB} file as it began, and it may not contain any
+\.{WEB} control codes.
+
+\@= [P] The ``control text'' that follows, up to the next `\.{@>}', will
+be passed verbatim to the \PASCAL\ program.
+
+\@\\ [P] Force end-of-line here in the \PASCAL\ program file.
+
+\@! [P,T] The module number in an index entry will be underlined if `\.{@!}'
+immediately precedes the identifier or control text being indexed. This
+convention is used to distinguish the modules where an identifier is
+defined, or where it is explained in some special way, from the modules
+where it is used. A~reserved word or an identifier of length one will not
+be indexed except for underlined entries. An `\.{@!}' is implicitly inserted
+by \.{WEAVE} just after the reserved words \&{function}, \&{procedure},
+\&{program}, and \&{var}, and just after \.{@d} and \.{@f}. But you should
+insert your own `\.{@!}' before the definitions of types, constants,
+variables, parameters, and components of records and enumerated types that
+are not covered by this implicit convention, if you want to improve the
+quality of the index that you get.
+
+\@? [P,T] This cancels an implicit (or explicit) `\.{@!}', so that the next
+index entry will not be underlined.
+
+\@, [P] This control code inserts a thin space in \.{WEAVE}'s output; it is
+ignored by \.{TANGLE}. Sometimes you need this extra space if you are using
+macros in an unusual way, e.g., if two identifiers are adjacent.
+
+\@/ [P] This control code causes a line break to occur within a \PASCAL\
+program formatted by \.{WEAVE}; it is ignored by \.{TANGLE}. Line breaks
+are chosen automatically by \TeX\ according to a scheme that works 99\%\
+of the time, but sometimes you will prefer to force a line break so that
+the program is segmented according to logical rather than visual criteria.
+Caution: `\.{@/}' should be used only after statements or clauses, not in
+the middle of an expression; use \.{@|} in the middle of expressions, in
+order to keep \.{WEAVE}'s parser happy.
+
+\@| [P] This control code specifies an optional line break in the midst of
+an expression. For example, if you have a long condition between \&{if} and
+\&{then}, or a long expression on the right-hand side of an assignment
+statement, you can use `\.{@|}' to specify breakpoints more logical than
+the ones that \TeX\ might choose on visual grounds.
+
+\@\# [P] This control code forces a line break, like \.{@/} does,
+and it also causes a little extra white space to appear between the lines at
+this break. You might use it, for example, between procedure definitions or
+between groups of macro definitions that are logically separate but within
+the same module.
+
+\@+ [P] This control code cancels a line break that might otherwise be
+inserted by \.{WEAVE}, e.g., before the word `\&{else}', if you want to
+put a short if-then-else construction on a single line. It is ignored by
+\.{TANGLE}.
+
+\@; [P] This control code is treated like a semicolon, for formatting
+purposes, except that it is invisible. You can use it, for example, after
+a module name when the \PASCAL\ text represented by that module name ends
+with a semicolon.
+
+\yskip\noindent
+The last six control codes (namely `\.{@,}', `\.{@/}', `\.{@|}',
+`\.{@\#}', `\.{@+}', and `\.{@;}') have no effect on the \PASCAL\
+program output by \.{TANGLE}; they merely help to improve the readability
+of the \TeX-formatted \PASCAL\ that is output by \.{WEAVE}, in unusual
+circumstances. \.{WEAVE}'s built-in formatting method is fairly good, but
+it is incapable of handling all possible cases, because it must deal with
+fragments of text involving macros and module names; these fragments do
+not necessarily obey \PASCAL's syntax. Although \.{WEB} allows you to
+override the automatic formatting, your best strategy is not to worry
+about such things until you have seen what \.{WEAVE} produces automatically,
+since you will probably need to make only a few corrections when you are
+touching up your documentation.
+
+Because of the rules by which every module is broken into three parts,
+the control codes `\.{@d}', `\.{@f}', and `\.{@p}' are not allowed to occur
+once the \PASCAL\ part of a module has begun.
+ \section Additional features and caveats.
+
+1. The character pairs `\.{(*}', `\.{*)}', `\.{(.}', and `\.{.)}' are
+converted automatically in \PASCAL\ text as though they were
+`\.{@\{}', `\.{@\}}', `\.[', and `\.]', respectively, except
+of course in strings. Furthermore in certain installations of \.{WEB} that
+{\def\\#1#2{`{\tentex\char'#1#2}'}%
+have an extended character set, the characters \\32, \\34, \\35, \\30,
+\\36, \\04, \\37, \\05, and \\06}
+can be typed as abbreviations for
+`\.{<>}', `\.{<=}', `\.{>=}', `\.{:=}', `\.{==}', `\.{and}', `\.{or}',
+`\.{not}', and `\.{in}', respectively. However, the latter abbreviations
+are not used in the standard versions of \.{WEAVE.WEB} and \.{TANGLE.WEB}
+that are distributed to people who are installing \.{WEB} on other
+computers, and the programs are designed to produce only standard ASCII
+characters as output if the input consists entirely of ASCII characters.
+
+2. If you have an extended character set, all of the characters listed
+in Appendix C of {\sl The \TeX book\/} can be used in strings. But you should
+stick to standard ASCII characters if you want to write programs that will
+be useful to all the poor souls out there who don't have extended
+character sets.
+
+3. The \TeX\ file output by \.{WEAVE} is broken into lines having at most
+80 characters each. The algorithm that does this line breaking is unaware
+of \TeX's convention about comments following `\.\%' signs on a line. When
+\TeX\ text is being copied, the existing line breaks are copied as well,
+so there is no problem with `\.\%' signs unless the original \.{WEB} file
+contains a line more than eighty characters long or a line with \PASCAL\
+text in \pb\ that expands to more than eighty characters long. Such lines
+should not have `\.\%' signs.
+
+4. \PASCAL\ text is translated by a ``bottom up'' procedure that
+identifies each token as a ``part of speech'' and combines parts of speech
+into larger and larger phrases as much as possible according to a special
+grammar that is explained in the documentation of \.{WEAVE}. It is easy to
+learn the translation scheme for simple constructions like single
+identifiers and short expressions, just by looking at a few examples of
+what \.{WEAVE} does, but the general mechanism is somewhat complex because
+it must handle much more than \PASCAL\ itself. Furthermore the output
+contains embedded codes that cause \TeX\ to indent and break lines as
+necessary, depending on the fonts used and the desired page width. For
+best results it is wise to adhere to the following restrictions:
+
+\yskip\itemitem{a)}Comments in \PASCAL\ text should appear only after
+statements or clauses; i.e., after semicolons, after reserved words like
+\&{then} and \&{do}, or before reserved words like \&{end} and \&{else}.
+Otherwise \.{WEAVE}'s parsing method may well get mixed up.
+
+\itemitem{b)}Don't enclose long \PASCAL\ texts in \pb, since the
+indentation and line breaking codes are omitted when the \pb\ text is
+translated from \PASCAL\ to \TeX. Stick to simple expressions or
+statements.
+
+\yskip
+5. Comments and module names are not permitted in \pb\ text. After a `\.|'
+signals the change from \TeX\ text to \PASCAL\ text, the next `\.|' that is
+not part of a string or control text ends the \PASCAL\ text.
+
+6. A comment must have properly nested occurrences of left and right
+braces, otherwise \.{WEAVE} and \.{TANGLE} will not know where the comment
+ends. However, the character pairs `\.{\\\{}' and `\.{\\\}}' do not count
+as left and right braces in comments, and the character pair `\.{\\|}'
+does not count as a delimiter that begins \PASCAL\ text. (The actual rule
+is that a character after `\.\\' is ignored; hence in `\.{\\\\\{}' the
+left brace {\sl does\/} count.) At present, \.{TANGLE} and \.{WEAVE} treat
+comments in slightly different ways, and it is necessary to satisfy both
+conventions: \.{TANGLE} ignores `\.|' characters entirely, while \.{WEAVE}
+uses them to switch between \TeX\ text and \PASCAL\ text. Therefore, a
+comment that includes a brace in a string in \pb---e.g., `\.{\{{ }look at
+this |"\{"| \}}'---will be handled correctly by \.{WEAVE}, but \.{TANGLE}
+will think there is an unmatched left brace. In order to satisfy both
+processors, one can write `\.{\{{ }look at this \\leftbrace\\{ }\}}', after
+setting up`\.{\\def\\leftbrace\{|"\{"|\}}'.
+
+7. Reserved words of \PASCAL\ must appear entirely in lowercase letters
+in the \.{WEB} file; otherwise their special nature will not be recognized
+by \.{WEAVE}. You could, for example, have a macro named \\{END} and it
+would not be confused with \PASCAL's \&{end}.
+
+However, you may not want to capitalize macro names just to distinguish them
+from other identifiers. Here is a way to unreserve \PASCAL's reserved word
+`\&{type}' and to substitute another word `\&{mtype}' in the \.{WEB} file.
+$$\vbox{\halign{\tt #\hfil\cr
+@d type(\char'43) == mem[\char'43].t\cr
+@d mtype == t \char'100\char'46{} y \char'100\char'46{} p
+ \char'100\char'46{} e\cr
+@f mtype == type\cr
+@f type == true\cr}}$$
+In the output of \.{TANGLE}, the macro \.{mtype} now produces `\.{TYPE}'
+and the macro \.{type(x)} now produces `\.{MEM[X].T}'. In the output of
+\.{WEAVE}, these same inputs produce \&{mtype} and \\{type}(\|x),
+respectively.
+
+8. The \.{@f} feature allows you to define one identifier to act like
+another, and these format definitions are carried out sequentially, as the
+example above indicates. However, a given identifier has only one printed format
+throughout the entire document (and this format will even be used before
+the \.{@f} that defines it). The reason is that \.{WEAVE} operates in two
+passes; it processes \.{@f}'s and cross-references on the first pass and
+it does the output on the second.
+
+9. You may want some \.{@f} formatting that doesn't correspond to any
+existing reserved word. In that case, \.{WEAVE} could be extended in a
+fairly obvious way to include new ``reserved words'' in its vocabulary.
+The identifier `\&{xclause}' has in fact been included already as a
+reserved word, so that it can be used to format the `\&{loop}' macro,
+where `\&{loop}' is defined to be equivalent to `\&{while \\{true} do}'.
+
+10. Sometimes it is desirable to insert spacing into \PASCAL\ code that is
+more general than the thin space provided by `\.{@,}'. The \.{@t} feature
+can be used for this purpose; e.g., `\.{@t\\hskip 1in@>}' will
+leave one inch of blank space. Furthermore, `\.{@t\\4@>}' can be
+used to backspace by one unit of indentation, since the control sequence
+\.{\\4} is defined in \.{webmac} to be such a backspace. (This
+control sequence is used, for example, at the beginning of lines that
+contain labeled statements, so that the label will stick out a little at
+the left.)
+
+11. \.{WEAVE} and \.{TANGLE} are designed to work with two input files,
+called \\{web\_file} and \\{change\_file}, where \\{change\_file} contains
+data that overrides selected portions of \\{web\_file}. The resulting merged
+text is actually what has been called the \.{WEB} file elsewhere in this
+report.
+
+Here's how it works: The change file consists of zero or more ``changes,''
+where a change has the form `\.{@x}$\langle$old lines$\rangle$\.{@y}$\langle$%
+new lines$\rangle$\.{@z}'. The special control codes \.{@x}, \.{@y}, \.{@z},
+which are allowed only in change files, must appear at the beginning of a line;
+the remainder of such a line is ignored.
+The $\langle$old lines$\rangle$ represent material that exactly matches
+consecutive lines of the \\{web\_file}; the $\langle$new lines$\rangle$
+represent zero or more lines that are supposed to replace the old. Whenever
+the first ``old line'' of a change is found to match a line in the
+\\{web\_file}, all the other lines in that change must match too.
+
+Between changes, before the first change, and after the last change,
+the change file can have any number of lines that do not begin with
+`\.{@x}', `\.{@y}', or~`\.{@z}'. Such lines are bypassed and not used for
+matching purposes.
+
+This dual-input feature is useful when working with a master \.{WEB} file
+that has been received from elsewhere (e.g., \.{TANGLE.WEB} or
+\.{WEAVE.WEB} or \.{TEX.WEB}), when changes are desirable to customize the
+program for your local computer system. You will be able to debug your
+system-dependent changes without clobbering the master web file; and once
+your changes are working, you will be able to incorporate them readily
+into new releases of the master web file that you might receive from time
+to time.
+ \section Appendices.
+The basic ideas of \.{WEB} can be understood most easily by looking at
+examples of ``real'' programs. Appendix~A shows the \.{WEB} input that
+generated modules 55--59 of the \.{WEAVE} program; Appendix~B shows the
+corresponding \TeX\ code output by \.{WEAVE}; and Appendix~C shows excerpts
+from the corresponding \PASCAL\ code output by \.{TANGLE}.
+
+The complete webs for \.{WEAVE} and \.{TANGLE} appear as the bulk of this
+report, in Appendices D and~E. The reader should first compare Appendix~A
+to the corresponding portion of Appendix~D; then the same material should
+be compared to Appendices B and~C. Finally, if time permits, the reader may
+enjoy studying the complete programs in Appendices D and~E, since \.{WEAVE}
+and \.{TANGLE} contain several interesting aspects, and since an attempt
+has been made in these appendices to evolve a style of programming that
+makes good use of the \.{WEB} language.
+
+Finally, Appendix F is the `\.{webmac}' file that sets \TeX\ up to accept
+the output of \.{WEAVE}; Appendix~G discusses how to use some of its macros
+to vary the output formats; and Appendix~H discusses what needs to be done
+when \.{WEAVE} and \.{TANGLE} are installed in a new operating environment.
+ \section Performance statistics.
+The programs in Appendices D and E will optionally keep statistics on
+how much memory they require. Here is what they once printed out when
+processing themselves:
+
+\def\pstat#1#2#3
+#4{\yskip\noindent\.{#1} applied to \.{#2} (cpu time #3 sec)\par
+\halign{\quad\tt##\hfil\cr#4}}
+
+\pstat{TANGLE}{TANGLE}{15}
+{Memory usage statistics:\cr
+456 names, 215 replacement texts;\cr
+3396+3361 bytes, 6685+7329+5805 tokens.\cr}
+
+\pstat{TANGLE}{WEAVE}{30}
+{Memory usage statistics:\cr
+692 names, 339 replacement texts;\cr
+4576+4294 bytes, 10184+9875+9150 tokens.\cr}
+
+\pstat{WEAVE}{TANGLE}{45}
+{Memory usage statistics: 478 names, 2045 cross references, 4159+3729 bytes;\cr
+parsing required 684 scraps, 1300 texts, 3766 tokens, 119 levels;\cr
+sorting required 34 levels.\cr}
+
+\pstat{WEAVE}{WEAVE}{65}
+{Memory usage statistics: 737 names, 3306 cross references, 4896+4962 bytes;\cr
+parsing required 684 scraps, 1300 texts, 3766 tokens, 119 levels;\cr
+sorting required 73 levels.\cr}
+
+\yskip\noindent The cpu time for \PASCAL\ to process \.{TANGLE.PAS} was
+approximately 13 seconds, and \.{WEAVE.PAS} took approximately 26 seconds;
+thus the tangling time was slightly more than the compiling time. The cpu
+time for \TeX\ to process \.{TANGLE.TEX} was approximately 500 seconds,
+and \.{WEAVE.TEX} took approximately 750 seconds (i.e., about 7
+seconds per printed page, where these pages are substantially larger than
+the pages in a normal book). All cpu times quoted are for a DECsystem-10.
+
+\def\K{{\mc K}}
+The file \.{TANGLE.WEB} is about 125\K\ characters long; \.{TANGLE}
+reduces it to a file \.{TANGLE.PAS} whose size is about 42\K\ characters,
+while \.{WEAVE} expands it to a file \.{TANGLE.TEX} of about 185\K\null.
+The corresponding file sizes for \.{WEAVE.WEB}, \.{WEAVE.PAS}, and
+\.{WEAVE.TEX} are 180\K, 89\K, and 265\K.
+
+The much larger file \.{TEX.WEB} led to the following numbers:
+
+\pstat{TANGLE}{TEX}{110}
+{Memory usage statistics:\cr
+3750 names, 1768 replacement texts;\cr
+41895+41053 bytes, 42378+45074+41091 tokens.\cr}
+
+\pstat{WEAVE}{TEX}{270}
+{Memory usage statistics: 3412 names, 19699 cross references,
+ 37900+40232 bytes;\cr
+parsing required 685 scraps, 1303 texts, 3784 tokens, 104 levels;\cr
+sorting required 52 levels.\cr}
+
+\yskip\noindent
+\PASCAL\ did \.{TEX.PAS} in about 75 seconds; \TeX\ did \.{TEX.TEX}
+in about 3600.
+ % Here is a quotation that could not really be omitted
+
+\vfill
+
+{\baselineskip9pt
+\halign to\hsize{\hfil\quoteit#\tabskip 0pt plus 100pt&
+ \hfil\quoteit#\tabskip 0pt\cr
+O, what a tangled web we weave&
+ O, what a tangled WEB we weave\cr
+When first we practise to deceive!&
+ When \TeX\ we practise to conceive!\cr
+\noalign{\vskip 2pt}
+\quoterm ---SIR WALTER SCOTT, {\quoteit Marmion} 6:17 (1808)&
+ \quoterm ---RICHARD PALAIS (1982)\cr
+}}
+\eject
+ \def\runninghead{APPENDIX A --- {\tentt WEB} FILE FORMAT}
+\section Appendix A.
+This excerpt from \.{WEAVE.WEB} produced modules 55--59 in Appendix~D.
+Note that some of the lines are indented to show the program structure.
+The indentation is ignored by \.{WEAVE} and \.{TANGLE}, but users find
+that \.{WEB} files are quite readable if they have some such indentation.
+
+\vskip 6pt
+\begingroup \def\tt{\eighttt} \baselineskip9pt
+% Note to myself: I had to remove SAIL characters from the file here!
+% Also tabs replaced by double-space. The changes were made in WEAVE source.
+\verbatim
+@* Searching for identifiers.
+The hash table described above is updated by the |id_lookup| procedure,
+which finds a given identifier and returns a pointer to its index in
+|byte_start|. The identifier is supposed to match character by character
+and it is also supposed to have a given |ilk| code; the same name may be
+present more than once if it is supposed to appear in the index with
+different typesetting conventions.
+If the identifier was not already present, it is inserted into the table.
+
+Because of the way \.{WEAVE}'s scanning mechanism works, it is most convenient
+to let |id_lookup| search for an identifier that is present in the |buffer|
+array. Two other global variables specify its position in the buffer: the
+first character is |buffer[id_first]|, and the last is |buffer[id_loc-1]|.
+
+@<Glob...@>=
+@!id_first:0..long_buf_size; {where the current identifier begins in the buffer}
+@!id_loc:0..long_buf_size; {just after the current identifier in the buffer}
+@#
+@!hash:array [0..hash_size] of sixteen_bits; {heads of hash lists}
+
+@ Initially all the hash lists are empty.
+
+@<Local variables for init...@>=
+@!h:0..hash_size; {index into hash-head array}
+
+@ @<Set init...@>=
+for h:=0 to hash_size-1 do hash[h]:=0;
+
+@ Here now is the main procedure for finding identifiers (and index
+entries). The parameter |t| is set to the desired |ilk| code. The
+identifier must either have |ilk=t|, or we must have
+|t=normal| and the identifier must be a reserved word.
+
+@p function id_lookup(@!t:eight_bits):name_pointer; {finds current identifier}
+label found;
+var i:0..long_buf_size; {index into |buffer|}
+@!h:0..hash_size; {hash code}
+@!k:0..max_bytes; {index into |byte_mem|}
+@!w:0..ww-1; {row of |byte_mem|}
+@!l:0..long_buf_size; {length of the given identifier}
+@!p:name_pointer; {where the identifier is being sought}
+begin l:=id_loc-id_first; {compute the length}
+@<Compute the hash code |h|@>;
+@<Compute the name location |p|@>;
+if p=name_ptr then @<Enter a new name into the table at position |p|@>;
+id_lookup:=p;
+end;
+
+@ A simple hash code is used: If the sequence of
+ASCII codes is $c_1c_2\ldots c_m$, its hash value will be
+$$(2^{n-1}c_1+2^{n-2}c_2+\cdots+c_n)\,\bmod\,|hash_size|.$$
+
+@<Compute the hash...@>=
+h:=buffer[id_first]; i:=id_first+1;
+while i<id_loc do
+ begin h:=(h+h+buffer[i]) mod hash_size; incr(i);
+ end
+?endgroup % end of verbatim mode
+\endgroup
+\vfill\eject
+ \def\runninghead{APPENDIX B --- TRANSLATION BY {\tentt WEAVE}}
+\section Appendix B.
+This excerpt from \.{WEAVE.TEX} corresponds to Appendix A.
+
+% I've inserted \vfill's here at the blank lines, to squeeze this on one page!
+\begingroup \def\tt{\eighttt} \baselineskip9pt
+\verbatim
+?vfill?verbatimgobble
+\N55. Searching for identifiers.
+The hash table described above is updated by the \\{id\_lookup} procedure,
+which finds a given identifier and returns a pointer to its index in
+\\{byte\_start}. The identifier is supposed to match character by character
+and it is also supposed to have a given \\{ilk} code; the same name may be
+present more than once if it is supposed to appear in the index with
+different typesetting conventions.
+If the identifier was not already present, it is inserted into the table.
+?vfill?verbatimgobble
+Because of the way \.{WEAVE}'s scanning mechanism works, it is most convenient
+to let \\{id\_lookup} search for an identifier that is present in the %
+\\{buffer}
+array. Two other global variables specify its position in the buffer: the
+first character is $\\{buffer}[\\{id\_first}]$, and the last is $\\{buffer}[%
+\\{id\_loc}-1]$.
+?vfill?verbatimgobble
+\Y\P$\4\X9:Globals in the outer block\X\mathrel{+}\S$\6
+\4\\{id\_first}: \37$0\to\\{long\_buf\_size}$;\C{where the current identifier
+begins in the buffer}\6
+\4\\{id\_loc}: \37$0\to\\{long\_buf\_size}$;\C{just after the current
+identifier in the buffer}\7
+\4\\{hash}: \37\&{array} $[0\to\\{hash\_size}]$ \1\&{of}\5
+\\{sixteen\_bits};\C{heads of hash lists}\2\par
+\fi
+?vfill?verbatimgobble
+\M56. Initially all the hash lists are empty.
+?vfill?verbatimgobble
+\Y\P$\4\X16:Local variables for initialization\X\mathrel{+}\S$\6
+\4\|h: \37$0\to\\{hash\_size}$;\C{index into hash-head array}\par
+\fi
+?vfill?verbatimgobble
+\M57. \P$\X10:Set initial values\X\mathrel{+}\S$\6
+\&{for} $\|h\K0\mathrel{\&{to}}\\{hash\_size}-1$ \1\&{do}\5
+$\\{hash}[\|h]\K0$;\2\par
+\fi
+?vfill?verbatimgobble
+\M58. Here now is the main procedure for finding identifiers (and index
+entries). The parameter \|t is set to the desired \\{ilk} code. The
+identifier must either have $\\{ilk}=\|t$, or we must have
+$\|t=\\{normal}$ and the identifier must be a reserved word.
+?vfill?verbatimgobble
+\Y\P\4\&{function}\1\ \37$\\{id\_lookup}(\|t:\\{eight\_bits})$: \37\\{name%
+\_pointer};\C{finds current identifier}\6
+\4\&{label} \37\\{found};\6
+\4\&{var} \37\|i: \37$0\to\\{long\_buf\_size}$;\C{index into \\{buffer}}\6
+\|h: \37$0\to\\{hash\_size}$;\C{hash code}\6
+\|k: \37$0\to\\{max\_bytes}$;\C{index into \\{byte\_mem}}\6
+\|w: \37$0\to\\{ww}-1$;\C{row of \\{byte\_mem}}\6
+\|l: \37$0\to\\{long\_buf\_size}$;\C{length of the given identifier}\6
+\|p: \37\\{name\_pointer};\C{where the identifier is being sought}\2\6
+\&{begin} \37$\|l\K\\{id\_loc}-\\{id\_first}$;\C{compute the length}\6
+\X59:Compute the hash code \|h\X;\6
+\X60:Compute the name location \|p\X;\6
+\&{if} $\|p=\\{name\_ptr}$ \1\&{then}\5
+\X62:Enter a new name into the table at position \|p\X;\2\6
+$\\{id\_lookup}\K\|p$;\6
+\&{end};\par
+\fi
+?vfill?verbatimgobble
+\M59. A simple hash code is used: If the sequence of
+ASCII codes is $c_1c_2\ldots c_m$, its hash value will be
+$$(2^{n-1}c_1+2^{n-2}c_2+\cdots+c_n)\,\bmod\,\\{hash\_size}.$$
+?vfill?verbatimgobble
+\Y\P$\4\X59:Compute the hash code \|h\X\S$\6
+$\|h\K\\{buffer}[\\{id\_first}]$;\5
+$\|i\K\\{id\_first}+1$;\6
+\&{while} $\|i<\\{id\_loc}$ \1\&{do}\6
+\&{begin} \37$\|h\K(\|h+\|h+\\{buffer}[\|i])\mathbin{\&{mod}}\\{hash\_size}$;\5
+$\\{incr}(\|i)$;\6
+\&{end}\2\par
+\U section~58.\fi
+?endgroup
+\endgroup
+\eject
+ \def\runninghead{APPENDIX C --- TRANSLATION BY {\tentt TANGLE}}
+\section Appendix C.
+The \.{TANGLE} processor converts \.{WEAVE.WEB} into a syntactically
+correct (but not very pretty) \PASCAL\ program \.{WEAVE.PAS}.
+The first three and last two lines of output are shown here, together with the
+lines of code generated by modules 55--62 and the environments of
+those lines. There are 1559 lines in all; the notation
+`\.. \\. \\.' stands for portions that are not shown.
+
+Note that, for example, the code corresponding to
+module 55 begins with `\.{\{55:\}}' and ends with `\.{\{:55\}}';
+the code from modules 59--62 has been tangled into the code from module 58.
+
+\vskip6pt
+\verbatim
+{2:}{4:}{$C-,A+,D-}{[$C+,D+]}{:4}
+PROGRAM WEAVE(WEBFILE,CHANGEFILE,TEXFILE);LABEL 9999;CONST{8:}
+MAXBYTES=45000;MAXNAMES=5000;MAXMODULES=2000;HASHSIZE=353;BUFSIZE=100;
+ . . .
+TOKPTR:0..MAXTOKS;{MAXTOKPTR,MAXTXTPTR:0..MAXTOKS;}{:53}{55:}
+IDFIRST:0..LONGBUFSIZE;IDLOC:0..LONGBUFSIZE;
+HASH:ARRAY[0..HASHSIZE]OF SIXTEENBITS;{:55}{63:}CURNAME:NAMEPOINTER;
+ . . .
+PROCEDURE INITIALIZE;VAR{16:}I:0..127;{:16}{40:}WI:0..1;{:40}{56:}
+H:0..HASHSIZE;{:56}{247:}C:ASCIICODE;{:247}BEGIN{10:}HISTORY:=0;{:10}
+ . . .
+TOKPTR:=1;TEXTPTR:=1;TOKSTART[0]:=1;TOKSTART[1]:=1;{MAXTOKPTR:=1;
+MAXTXTPTR:=1;}{:54}{57:}FOR H:=0 TO HASHSIZE-1 DO HASH[H]:=0;{:57}{94:}
+SCANNINGHEX:=FALSE;{:94}{102:}MODTEXT[0]:=32;{:102}{124:}OUTPTR:=1;
+ . . .
+IF R=0 THEN XREF[P]:=XREFPTR ELSE XMEM[R].XLINKFIELD:=XREFPTR;END;{:51}
+{58:}FUNCTION IDLOOKUP(T:EIGHTBITS):NAMEPOINTER;LABEL 31;
+VAR I:0..LONGBUFSIZE;H:0..HASHSIZE;K:0..MAXBYTES;W:0..1;
+L:0..LONGBUFSIZE;P:NAMEPOINTER;BEGIN L:=IDLOC-IDFIRST;{59:}
+H:=BUFFER[IDFIRST];I:=IDFIRST+1;
+WHILE I<IDLOC DO BEGIN H:=(H+H+BUFFER[I])MOD HASHSIZE;I:=I+1;END{:59};
+{60:}P:=HASH[H];
+WHILE P<>0 DO BEGIN IF(BYTESTART[P+2]-BYTESTART[P]=L)AND((ILK[P]=T)OR((T
+=0)AND(ILK[P]>3)))THEN{61:}BEGIN I:=IDFIRST;K:=BYTESTART[P];W:=P MOD 2;
+WHILE(I<IDLOC)AND(BUFFER[I]=BYTEMEM[W,K])DO BEGIN I:=I+1;K:=K+1;END;
+IF I=IDLOC THEN GOTO 31;END{:61};P:=LINK[P];END;P:=NAMEPTR;
+LINK[P]:=HASH[H];HASH[H]:=P;31:{:60};IF P=NAMEPTR THEN{62:}
+BEGIN W:=NAMEPTR MOD 2;
+IF BYTEPTR[W]+L>MAXBYTES THEN BEGIN WRITELN(TERMOUT);
+WRITE(TERMOUT,'! Sorry, ','byte memory',' capacity exceeded');ERROR;
+HISTORY:=3;JUMPOUT;END;
+IF NAMEPTR+2>MAXNAMES THEN BEGIN WRITELN(TERMOUT);
+WRITE(TERMOUT,'! Sorry, ','name',' capacity exceeded');ERROR;HISTORY:=3;
+JUMPOUT;END;I:=IDFIRST;K:=BYTEPTR[W];
+WHILE I<IDLOC DO BEGIN BYTEMEM[W,K]:=BUFFER[I];K:=K+1;I:=I+1;END;
+BYTEPTR[W]:=K;BYTESTART[NAMEPTR+2]:=K;NAMEPTR:=NAMEPTR+1;ILK[P]:=T;
+XREF[P]:=0;END{:62};IDLOOKUP:=P;END;{:58}{66:}
+FUNCTION MODLOOKUP(L:SIXTEENBITS):NAMEPOINTER;LABEL 31;VAR C:0..4;
+ . . .
+WRITE(TERMOUT,'(That was a fatal error, my friend.)');END;END{:263};
+END.{:261}
+?endgroup
+\vfill\eject
+ \pageno=197 % take account of the page numbers for App's D and E.
+ \def\runninghead{APPENDIX F --- MACROS FOR FORMATTING}
+\section Appendix F: The \.{webmac.tex} file.
+This is the file that extends ``plain \TeX'' format in order to support the
+features needed by the output of \.{WEAVE}.
+
+\vskip6pt
+\verbatim
+% standard macros for WEB listings (in addition to PLAIN.TEX)
+\xdef\fmtversion{\fmtversion+WEBMAC4.0} % identifies current set of macros
+\parskip 0pt % no stretch between paragraphs
+\parindent 1em % for paragraphs and for the first line of Pascal text
+
+\font\eightrm=cmr8 \let\sc=\eightrm % NOT a caps-and-small-caps font!
+\let\mainfont=\tenrm
+\font\titlefont=cmr7 scaled\magstep4 % title on the contents page
+\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title
+\font\tentex=cmtex10 % TeX extended character set (used in strings)
+
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way
+\def\&#1{\hbox{\bf#1\/}} % boldface type for reserved words
+\def\.#1{\hbox{\tentex % typewriter type for strings
+ \let\\=\BS % backslash in a string
+ \let\'=\RQ % right quote in a string
+ \let\`=\LQ % left quote in a string
+ \let\{=\LB % left brace in a string
+ \let\}=\RB % right brace in a string
+ \let\~=\TL % tilde in a string
+ \let\ =\SP % space in a string
+ \let\_=\UL % underline in a string
+ \let\&=\AM % ampersand in a string
+ #1}}
+\def\#{\hbox{\tt\char`\#}} % parameter sign
+\def\${\hbox{\tt\char`\$}} % dollar sign
+\def\%{\hbox{\tt\char`\%}} % percent sign
+\def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % pointer or hat
+% circumflex accents can be obtained from \^^D instead of \^
+\def\AT!{@} % at sign for control text
+
+\chardef\AM=`\& % ampersand character in a string
+\chardef\BS=`\\ % backslash in a string
+\chardef\LB=`\{ % left brace in a string
+\def\LQ{{\tt\char'22}} % left quote in a string
+\chardef\RB=`\} % right brace in a string
+\def\RQ{{\tt\char'23}} % right quote in a string
+\def\SP{{\tt\char`\ }} % (visible) space in a string
+\chardef\TL=`\~ % tilde in a string
+\chardef\UL=`\_ % underline character in a string
+
+\newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em
+\newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems
+
+\newcount\ind % current indentation in ems
+\def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch
+\def\2{\global\advance\ind by-1} % indent one less notch
+\def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement
+\def\4{\copy\bak} % backspace one notch
+\def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break
+\def\6{\ifmmode\else\par % forced break
+ \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi}
+\def\7{\Y\6} % forced break and a little extra space
+
+\let\yskip=\smallskip
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+\def\note#1#2.{\Y\noindent{\hangindent2em\baselineskip10pt\eightrm#1~#2.\par}}
+\def\lapstar{\rlap{*}}
+\def\startsection{\Q\noindent{\let\*=\lapstar\bf\modstar.\quad}}
+\def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format'
+\def\A{\note{See also section}} % crossref for doubly defined section name
+\def\As{\note{See also sections}} % crossref for multiply defined section name
+\def\B{\mathopen{\.{@\{}}} % begin controlled comment
+\def\C#1{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % Pascal comments
+ \XX\hfil\penalty-1\hfilneg\quad$\{\,$#1$\,\}$\XX}
+\def\D{\defin{define}} % macro definition
+\def\E{\cdot10^} % exponent in floating point constant
+\def\ET{ and~} % conjunction between two section numbers
+\def\ETs{, and~} % conjunction between the last two of several section numbers
+\def\F{\defin{format}} % format definition
+\let\G=\ge % greater than or equal sign
+\def\H#1{\hbox{\rm\char"7D\tt#1}} % hexadecimal constant
+\let\I=\ne % unequal sign
+\def\J{\.{@\&}} % TANGLE's join operation
+\let\K=\gets % left arrow
+\let\L=\le % less than or equal sign
+\outer\def\M#1.{\MN#1.\ifon\vfil\penalty-100\vfilneg % beginning of section
+ \vskip12ptminus3pt\startsection\ignorespaces}
+\outer\def\N#1.#2.{\MN#1.\vfil\eject % beginning of starred section
+ \def\rhead{\uppercase{\ignorespaces#2}} % define running headline
+ \message{*\modno} % progress report
+ \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % to contents file
+ \ifon\startsection{\bf\ignorespaces#2.\quad}\ignorespaces}
+\def\MN#1.{\par % common code for \M, \N
+ {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}}
+ \ifx\modno\modstar \onmaybe \else\ontrue \fi \mark{\modno}}
+\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\P{\rightskip=0pt plus 100pt minus 10pt % go into Pascal mode
+ \sfcode`;=3000
+ \pretolerance 10000
+ \hyphenpenalty 10000 \exhyphenpenalty 10000
+ \global\ind=2 \1\ \unskip}
+\def\Q{\rightskip=0pt % get out of Pascal mode
+ \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 }
+\let\R=\lnot % logical not
+\let\S=\equiv % equivalence sign
+\def\T{\mathclose{\.{@\}}}} % terminate controlled comment
+\def\U{\note{This code is used in section}} % crossref for use of a section
+\def\Us{\note{This code is used in sections}} % crossref for uses of a section
+\let\V=\lor % logical or
+\let\W=\land % logical and
+\def\X#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name
+ \XX$\langle\,$#2{\eightrm\kern.5em#1}$\,\rangle$\XX}
+\def\Y{\par\yskip}
+\let\Z=\let % now you can \send the control sequence \Z
+\def\){\hbox{\.{@\$}}} % sign for string pool check sum
+\def\]{\hbox{\.{@\\}}} % sign for forced line break
+\def\=#1{\kern2pt\hbox{\vrule\vtop{\vbox{\hrule
+ \hbox{\strut\kern2pt\.{#1}\kern2pt}}
+ \hrule}\vrule}\kern2pt} % verbatim string
+\let\~=\ignorespaces
+\let\*=*
+
+\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue
+\newif\ifon \newif\iftitle \newif\ifpagesaved
+\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead\hfill\title\qquad
+ \tensy x\mainfont\topmark} % top line on left-hand pages
+\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead
+ \qquad\mainfont\the\pageno} % top line on right-hand pages
+\def\page{\box255 }
+\def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi
+ \shipout\vbox{
+ \vbox to\fullpageheight{
+ \iftitle\global\titlefalse
+ \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi
+ \vfill#1}} % parameter #1 is the page itself
+ \global\advance\pageno by1}
+
+\def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections
+\def\title{} % an optional title can be set by the user
+\def\topofcontents{\centerline{\titlefont\title}
+ \vfill} % this material will start the table of contents page
+\def\botofcontents{\vfill} % this material will end the table of contents page
+\def\contentspagenumber{0} % default page number for table of contents
+\newdimen\pagewidth \pagewidth=6.5in % the width of each page
+\newdimen\pageheight \pageheight=8.7in % the height of each page
+\newdimen\fullpageheight \fullpageheight=9in % page height including headlines
+\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones
+\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein
+ \fullpageheight=9truein\setpage}
+\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size
+\def\contentsfile{CONTENTS} % file that gets table of contents info
+\def\readcontents{\input CONTENTS}
+
+\newwrite\cont
+\output{\setbox0=\page % the first page is garbage
+ \openout\cont=\contentsfile
+ \global\output{\normaloutput\page\lheader\rheader}}
+\setpage
+\vbox to \vsize{} % the first \topmark won't be null
+
+\def\ch{\note{The following sections were changed by the change file:}
+ \let\*=\relax}
+\newbox\sbox % saved box preceding the index
+\newbox\lbox % lefthand column in the index
+\def\inx{\par\vskip6pt plus 1fil % we are beginning the index
+ \write\cont{} % ensure that the contents file isn't empty
+ \closeout\cont % the contents information has been fully gathered
+ \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi
+ \global\setbox\sbox=\page \global\pagesavedtrue}
+ \pagesavedfalse \eject % eject the page-so-far and predecessors
+ \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box
+ \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height
+ \hsize=.5\pagewidth \advance\hsize by -10pt
+ % column width for the index (20pt between cols)
+ \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
+ \def\lr{L} % this tells whether the left or right column is next
+ \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R}
+ \else\normaloutput{\vbox to\pageheight{\box\sbox\vss
+ \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader
+ \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi}
+ \message{Index:}
+ \parskip 0pt plus .5pt
+ \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry
+ \let\ttentry=\. \def\.##1{\ttentry{##1\kern.2em}} % give \tt a little room
+ \def\[##1]{$\underline{##1}$} % underlined index item
+ \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar
+ \hyphenpenalty 10000 \parindent0pt}
+\def\fin{\par\vfill\eject % this is done when we are ending the index
+ \ifpagesaved\null\vfill\eject\fi % output a null index column
+ \if L\lr\else\null\vfill\eject\fi % finish the current page
+ \parfillskip 0pt plus 1fil
+ \def\rhead{NAMES OF THE SECTIONS}
+ \message{Section names:}
+ \output{\normaloutput\page\lheader\rheader}
+ \setpage
+ \def\note##1##2.{\hfil\penalty-1\hfilneg\quad{\eightrm##1 ##2.}}
+ \linepenalty=10 % try to conserve lines
+ \def\U{\note{Used in section}} % crossref for use of a section
+ \def\Us{\note{Used in sections}} % crossref for uses of a section
+ \def\:{\par\hangindent 2em}\let\*=*\let\.=\ttentry}
+\def\con{\par\vfill\eject % finish the section names
+ \rightskip 0pt \hyphenpenalty 50 \tolerance 200
+ \setpage
+ \output{\normaloutput\page\lheader\rheader}
+ \titletrue % prepare to output the table of contents
+ \pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS}
+ \message{Table of contents:}
+ \topofcontents
+ \line{\hfil Section\hbox to3em{\hss Page}}
+ \def\Z##1##2##3{\line{\ignorespaces##1
+ \leaders\hbox to .5em{.\hfil}\hfil\ ##2\hbox to3em{\hss##3}}}
+ \readcontents\relax % read the contents info
+ \botofcontents \end} % print the contents page(s) and terminate
+?endgroup
+\vfill\eject
+ \def\runninghead{APPENDIX G --- NOTES ON FORMATTING}
+\section Appendix G: How to use \.{WEB} macros.
+The macros in \.{webmac} make it possible to produce a variety of formats
+without editing the output of \.{WEAVE}, and the purpose of this appendix
+is to explain some of the possibilities.
+
+\def\point#1.{\yskip\indent#1.\quad\ignorespaces}
+
+\point 1. Three fonts have been declared in addition to the standard fonts of
+\.{PLAIN} format: You can say `\.{\{\\sc STUFF\}}' to get {\sc STUFF}
+in small caps; and you can select the largish fonts \.{\\titlefont}
+and \.{\\ttitlefont} in the title of your document, where \.{\\ttitlefont}
+is a typewriter style of type.
+
+\point 2. When you mention an identifier in \TeX\ text, you normally call
+it `\.{|identifier|}'. But you can also say `\.{\\\\\{identifier\}}'. The
+output will look the same in both cases, but the second alternative
+doesn't put \\{identifier} into the index, since
+it bypasses \.{WEAVE}'s translation from \PASCAL\ mode.
+
+\point 3. To get typewriter-like type, as when referring to `\.{WEB}', you
+can use the `\.{\\.}' macro (e.g., `\.{\\.\{WEB\}}'). In the argument to
+this macro you should insert an additional backslash before the symbols
+listed as `special string characters' in the index to \.{WEAVE}, i.e.,
+before backslashes and dollar signs and the like.
+A `\.{\\\ }' here will result in the visible space symbol; to get an
+invisible space following a control sequence you can say `\.{\{\ \}}'.
+
+\point 4. The three control sequences \.{\\pagewidth}, \.{\\pageheight},
+and \.{\\fullpageheight} can be redefined in the limbo section at the
+beginning of your \.{WEB} file, to change the dimensions of each page.
+The standard settings
+$$\lpile{\.{\\pagewidth=6.5in}\cr
+ \.{\\pageheight=8.7in}\cr
+ \.{\\fullpageheight=9in}\cr}$$
+were used to prepare the present report; \.{\\fullpageheight} is
+\.{\\pageheight} plus room for the additional heading and page numbers at
+the top of each page. If you change any of these quantities, you should
+call the macro \.{\\setpage} immediately after making the change.
+
+\point 5. The \.{\\pageshift} macro defines an amount by which right-hand
+pages (i.e., odd-numbered pages) are shifted right with respect to
+left-hand (even-numbered) ones. By adjusting this amount you may be
+able to get two-sided output in which the page numbers line up on
+opposite sides of each sheet.
+
+\point 6. The \.{\\title} macro will appear at the top of each page
+in small caps. For example, Appendix~D was produced after saying
+`\.{\\def\\title\{WEAVE\}}'.
+
+\point 7. The first page usually is assigned page number 1.
+To start on page 16, with contents
+on page 15, say this: `\.{\\def\\contentspagenumber\{15\}}
+\.{\\pageno=\\contentspagenumber} \.{\\advance\\pageno by 1}'. (Appendix~D
+was generated that way.)
+
+\point 8. The macro \.{\\iftitle} will suppress the header line if it is
+defined by `\.{\\titletrue}'. The normal value is \.{\\titlefalse}
+except for the table of contents; thus, the contents
+page is usually unnumbered.
+
+Two macros are provided to give flexibility to the table of
+contents: \.{\\topofcontents} is invoked just before the contents
+info is read, and \.{\\botofcontents} is invoked just after.
+For example, Appendix~D was produced with the following definitions:
+$$\lpile{\.{\\def\\topofcontents\{\\null\\vfill}\cr
+ \.{ { }\\titlefalse \% include headline on the contents page}\cr
+ \.{ { }\\def\\rheader\{\\mainfont Appendix D\\hfil 15\}}\cr
+ \.{ { }\\centerline\{\\titlefont The \{\\ttitlefont WEAVE\}{ }processor\}}\cr
+ \.{ { }\\vskip 15pt \\centerline\{(Version 4)\}{ }\\vfill\}}\cr}$$
+Redefining \.{\\rheader}, which is the headline for right-hand pages,
+suffices in this case to put the desired information at the top of the
+contents page.
+
+\point 9. Data for the table of contents is written to a file that
+is read after the indexes have been \TeX ed; there's one line of data
+for every starred module. For example, when Appendix~D was being generated,
+a file \.{CONTENTS.TEX} containing
+$$\lpile{\.{\\Z \{{ }Introduction\}\{1\}\{16\}}\cr
+ \.{\\Z \{{ }The character set\}\{11\}\{19\}}\cr}$$
+and similar lines was created. The \.{\\topofcontents} macro could
+redefine \.{\\Z} so that the information appears in another format.
+
+\point 10. Sometimes it is necessary or desirable to divide the output of
+\.{WEAVE} into subfiles that can be processed separately. For example,
+the listing of \TeX\ runs to more than 500 pages, and that is enough to
+exceed the capacity of many printing devices and/or their software.
+When an extremely large job isn't cut into smaller pieces, the entire
+process might be spoiled by a single error of some sort, making it
+necessary to start everything over.
+
+Here's a safe way to break a woven file into three parts:
+Say the pieces are $\alpha$,
+$\beta$, and $\gamma$, where each piece begins with a starred module.
+All macros should be defined in the opening limbo section of $\alpha$,
+and copies of this \TeX\ code should be placed at the
+beginning of $\beta$ and of $\gamma$. In order to process the parts
+separately, we need to take care of two things: The starting page
+numbers of $\beta$ and $\gamma$ need to be set up properly, and
+the table of contents data from all three runs needs to be
+accumulated.
+
+The \.{webmac} macros include two control sequences \.{\\contentsfile} and
+\.{\\readcontents} that facilitate the necessary processing. We include
+`\.{\\def\\contentsfile\{CONT1\}}' in the limbo section of $\alpha$, and
+we include `\.{\\def\\contentsfile\{CONT2\}}' in the limbo section of
+$\beta$; this causes \TeX\ to write the contents data for $\alpha$ and $\beta$
+into \.{CONT1.TEX} and \.{CONT2.TEX}. Now in $\gamma$ we say
+$$\.{\\def\\readcontents\{\\input CONT1 \\input CONT2 \\input CONTENTS\}};$$
+this brings in the data from all three pieces, in the proper order.
+
+However, we still need to solve the page-numbering problem. One way to
+do it is to include the following in the limbo material for $\beta$:
+$$\lpile{\.{\\message\{Please type the last page number of part 1: \}}\cr
+ \.{\\read -1 to \\temp \\pageno=\\temp \\advance\\pageno by 1}\cr}$$
+Then you simply provide the necessary data when \TeX\ requests
+it; a similar construction is used at the beginning of $\gamma$.
+
+This method can, of course, be used to divide a woven file into
+any number of pieces.
+
+\point 11. Sometimes it is nice to include things in the index that are
+typeset in a special way. For example, we might want to have an
+index entry for `\TeX'. \.{WEAVE} provides two simple ways to
+typeset an index entry (unless the entry is an identifier or a reserved word):
+`\.{@\^}' gives roman type, and `\.{@.}' gives typewriter type.
+But if we try to typeset `\TeX' in roman type by saying, e.g.,
+`\.{@\^\\TeX@>}', the backslash character gets in the way,
+and this entry wouldn't appear in the index with the T's.
+
+The solution is to use the `\.{@:}' feature, declaring a macro that
+simply removes a sort key as follows:
+$$\.{\\def\\9\#1\{\}}$$
+Now you can say, e.g., `\.{@:TeX\}\{\\TeX@>}' in your \.{WEB} file; \.{WEAVE}
+puts it into the index alphabetically, based on the sort key, and
+produces the macro call `\.{\\9\{TeX\}\{\\TeX\}}' which will ensure that
+the sort key isn't printed.
+
+A similar idea can be used to insert hidden material into module
+names so that they are alphabetized in whatever way you might wish.
+Some people call these tricks ``special refinements''; others call
+them ``kludges''.
+
+\point 12. The control sequence \.{\\modno} is set to the number of the
+module being typeset.
+
+\point 13. If you want to list only the modules that have changed,
+together with the index, put the command `\.{\\let\\maybe=\\iffalse}' in
+the limbo section before the first module of your \.{WEB} file. It's
+customary to make this the first change in your change file.
+
+\point 14. To get output in languages other than English, redefine the
+macros \.{\\A}, \.{\\As}, \.{\\ET}, \.{\\ETs}, \.{\\U}, \.{\\Us},
+\.{\\ch}, \.{\\fin}, and \.{\\con}. \.{WEAVE} itself need not be changed.
+
+\vfill\eject
+ \def\runninghead{APPENDIX H --- GETTING STARTED}
+\section Appendix H: Installing the \.{WEB} system.
+Suppose you want to use the \.{WEB} programs on your computer, and suppose
+that you can't simply borrow them from somebody else who has the same
+kind of machine. Here's what to do:
+
+\yskip
+\def\step(#1){\par\hangindent 2em\noindent\hbox to 2em{\hfil(#1) }\ignorespaces}
+\step(1) Get a tape that contains the files \.{WEAVE.WEB}, \.{TANGLE.WEB},
+\.{TANGLE.PAS}, and \.{WEBMAC.TEX}. The tape will probably also contain an
+example change file \.{TANGLE.CH}.
+\step(2) Look at the sections of \.{TANGLE} that are listed under ``system
+dependencies'' in the index of Appendix~E above, and figure out what changes
+(if any) will be needed for your system.
+\step(3) Make a change file \.{TANGLE.CH} that contains the changes of~(2);
+do not change your copy of \.{TANGLE.WEB}, leave it intact. (The
+rules for change files are explained at the end of the manual just before
+the appendices; you may want to look at the example change file that
+arrived with your copy of \.{TANGLE.WEB}. It's also a good idea to
+define all the ``switches'' like \&{debug} and \&{gubed} to be null in your
+first change files; then you can sure that your compiler will handle
+all of the code.)
+\step(4) Make the changes of (2) in your copy of \.{TANGLE.PAS}. (If these
+changes are extensive, you might be better off finding some computer that
+that already has \.{TANGLE} running, and making the new \.{TANGLE.PAS}
+from \.{TANGLE.WEB} and your \.{TANGLE.CH}.)
+\step(5) Use your \PASCAL\ compiler to convert your copy of \.{TANGLE.PAS}
+to a running program \.{TANGLE}.
+\step(6) Check your changes as follows: Run \.{TANGLE} on \.{TANGLE.WEB}
+and your \.{TANGLE.CH}, yielding $\.{TANGLE.PAS}'$; make a running
+program $\.{TANGLE}'$ by applying \PASCAL\ to
+$\.{TANGLE.PAS}'$; run $\.{TANGLE}'$ on \.{TANGLE.WEB} and
+your \.{TANGLE.CH}, yielding $\.{TANGLE.PAS}''$; and check
+that $\.{TANGLE.PAS}''$ is identical to
+$\.{TANGLE.PAS}'$. Once this test has been passed, you have got a
+working \.{TANGLE} program.
+\step(7) Make a change file \.{WEAVE.CH} analogous to (3), but this time
+consider the system-dependent parts of \.{WEAVE} that are listed in
+the index to Appendix~D.
+\step(8) Run \.{TANGLE} on \.{WEAVE.WEB} and your \.{WEAVE.CH}, obtaining
+\.{WEAVE.PAS}.
+\step(9) Use \PASCAL\ on \.{WEAVE.PAS} to make a running \.{WEAVE} program.
+\step(10) Run \.{WEAVE} on \.{TANGLE.WEB} and \.{TANGLE.CH} to produce
+\.{TANGLE.TEX}.
+\step(11) Run \TeX\ on \.{TANGLE.TEX}, obtaining a listing analogous to
+Appendix~E. This listing will incorporate your changes.
+\step(12) Run \.{WEAVE} on \.{WEAVE.WEB} and your \.{WEAVE.CH} to produce
+\.{WEAVE.TEX}.
+\step(13) Run \TeX\ on \.{WEAVE.TEX}, obtaining a listing analogous to
+Appendix~D that incorporates your changes.
+
+\yskip\noindent
+This description assumes that you already have a working \TeX82 system.
+But what if you don't have \TeX82? Then you start with a tape that also
+contains \.{TEX.WEB} and \.{plain.tex}, and you refer to a hardcopy
+listing of the \TeX82 program corresponding to \.{TEX.WEB}. Between steps
+(10) and (11) you do the following:
+
+\yskip
+\def\substep(10.#1){\par\hangindent 4em\noindent
+ \hbox to 4em{\hfil(10.#1) }\ignorespaces}
+\substep(10.1) Make a change file \.{TEX.CH} to fix the system dependent
+portions of \.{TEX.WEB}, in a manner analogous to step~(2). Since \TeX\ is
+a much more complex program than \.{WEAVE} or \.{TANGLE}, there are more
+system-dependent features to think about, but by now you will be good at
+making such modifications. Do not make any changes to \.{TEX.WEB}.
+\substep(10.2) Make an almost-copy of your \.{TEX.CH} called \.{INITEX.CH};
+this one will have the `\&{init}' and `\&{tini}' macros redefined in order
+to make the initialization version of \TeX. It also might have smaller
+font memory and dynamic memory areas, since \.{INITEX} doesn't need as
+much memory for such things; by setting the memory smaller in \.{INITEX},
+you guarantee that the production system will have a ``cushion.''
+\substep(10.3) Run \.{TANGLE} on \.{TEX.WEB} and \.{INITEX.CH}, obtaining
+\.{INITEX.PAS} and \.{TEX.POOL}.
+\substep(10.4) Run \PASCAL\ on \.{INITEX.PAS}, obtaining \.{INITEX}.
+\substep(10.5) Run \.{INITEX} on \.{TEX.POOL}, during which run you type
+`\.{plain}' and `\.{\\dump}'. This will produce a file \.{plain.fmt}
+containing the data needed to initialize \TeX's memory.
+\substep(10.6) Run \.{TANGLE} on \.{TEX.WEB} and the \.{TEX.CH} of (10.1),
+obtaining \.{TEX.PAS}.
+\substep(10.7) Run \PASCAL\ on \.{TEX.PAS}, obtaining \.{VIRTEX}.
+\substep(10.8) If your operating system supports programs whose core images
+have been saved, run \.{VIRTEX}, type `\.{\&plain}', then save the core image
+and call it \TeX. Otherwise, \.{VIRTEX} will be your \TeX, and it will
+read `\.{plain.fmt}' (or some other \.{fmt} file) each time you run.
+
+\yskip
+This 21-step process may seem long, but it is actually an oversimplification,
+since you also need fonts and a way to print the device-independent files
+that \TeX\ spews out. On the other hand, the total number of steps is not
+quite so large when you consider that \.{TANGLE}-followed-by-\PASCAL\ and
+\.{WEAVE}-followed-by-\TeX\ may be regarded as single operations.
+
+If you have only the present report, not a tape, you will have to prepare
+files \.{WEAVE.WEB} and \.{TANGLE.WEB} by hand, typing them into the
+computer by following Appendices D and E. Then you have to simulate the
+behavior of \.{TANGLE} by converting \.{TANGLE.WEB} manually into
+\.{TANGLE.PAS}; with a good text editor this takes about six hours. Then
+you have to correct errors that were made in all this hand work; but still
+the whole project is not impossibly difficult, because in fact the entire
+development of \.{WEAVE} and \.{TANGLE} (including the writing of the
+programs and this manual) took less than two months of work.
+ \vfill\end