texlive[57963] Master/texmf-dist: knuth runtime file updates from the

commits+karl at tug.org commits+karl at tug.org
Sat Feb 27 00:56:54 CET 2021


Revision: 57963
          http://tug.org/svn/texlive?view=revision&revision=57963
Author:   karl
Date:     2021-02-27 00:56:54 +0100 (Sat, 27 Feb 2021)
Log Message:
-----------
knuth runtime file updates from the 2021 tuneup

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/fonts/cm/README
    trunk/Master/texmf-dist/doc/generic/knuth/errata/mf84.bug
    trunk/Master/texmf-dist/doc/generic/knuth/errata/tex82.bug
    trunk/Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf
    trunk/Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf
    trunk/Master/texmf-dist/fonts/source/public/knuth-local/domino.mf
    trunk/Master/texmf-dist/source/generic/knuth/errata/errata.nine
    trunk/Master/texmf-dist/source/generic/knuth/errata/errata.tex
    trunk/Master/texmf-dist/source/generic/knuth/errata/errata.three
    trunk/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex
    trunk/Master/texmf-dist/source/generic/knuth/tex/glue.web
    trunk/Master/texmf-dist/source/generic/knuth/web/webman.tex
    trunk/Master/texmf-dist/tex/plain/base/gkpmac.tex
    trunk/Master/texmf-dist/tex/plain/base/list-latin.tex
    trunk/Master/texmf-dist/tex/plain/base/llist.tex
    trunk/Master/texmf-dist/tex/plain/base/plain.tex
    trunk/Master/texmf-dist/tex/plain/knuth-lib/webmac.tex

Added Paths:
-----------
    trunk/Master/texmf-dist/fonts/source/public/concrete/ccn10.mf
    trunk/Master/texmf-dist/source/generic/knuth/errata/errata.twelve
    trunk/Master/texmf-dist/tex/plain/base/letterformat.tex
    trunk/Master/texmf-dist/tex/plain/base/llist-latin.tex

Removed Paths:
-------------
    trunk/Master/texmf-dist/tex/plain/base/letter.tex

Modified: trunk/Master/texmf-dist/doc/fonts/cm/README
===================================================================
--- trunk/Master/texmf-dist/doc/fonts/cm/README	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/doc/fonts/cm/README	2021-02-26 23:56:54 UTC (rev 57963)
@@ -51,7 +51,7 @@
 
 Four special italic fonts are provided as demonstrations of further
 possibilities: cmbxti10 is a bold extended text italic; cmmib10 is
-a bold math italic; cmit10 is an italic typewriter font; cmu10 is
+a bold math italic; cmitt10 is an italic typewriter font; cmu10 is
 an unslanted italic with the same stem weights as cmr10.
 
 The math symbol fonts, cmsy5--cmsy10, have the same parameters

Modified: trunk/Master/texmf-dist/doc/generic/knuth/errata/mf84.bug
===================================================================
--- trunk/Master/texmf-dist/doc/generic/knuth/errata/mf84.bug	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/doc/generic/knuth/errata/mf84.bug	2021-02-26 23:56:54 UTC (rev 57963)
@@ -2321,10 +2321,117 @@
 link(p):=s; beta:=-y_coord(h);
 @z
 
+573. Don't restrict the length of the banner line, leave it system-dependent code
+(Udo Wermuth, 02 April 2017)
+ at x module 61
+incorrect, but the discrepancy is not serious since we assume that the banner
+and base identifier together will occupy at most |max_print_line|
+character positions.
+ at y
+incorrect, but the discrepancy is not serious since we assume that this
+part of the program is system dependent.
+@^system dependencies@>
+ at z
+
+574. Defeat interactions during batch mode (Xiaosa Zhang, 27 June 2020)
+ at x module 78
+@ @<Get user's advice...@>=
+loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
+ at y
+@ @<Get user's advice...@>=
+loop at +begin continue: if interaction<>error_stop_mode then return;
+  clear_for_error_prompt; prompt_input("? ");
+ at z
+
+575. Don't exit to editor if no input file is at the bottom line
+(Xiaosa Zhang, 03 July 2020)
+ at x module 79
+"E": if file_ptr>0 then
+ at y
+"E": if file_ptr>0 then if input_stack[file_ptr].name_field>=256 then
+ at z
+ at x module 80
+if file_ptr>0 then print("E to edit your file,");
+ at y
+if file_ptr>0 then if input_stack[file_ptr].name_field>=256 then
+  print("E to edit your file,");
+ at z
+
+576. Keep date and time in system variables, use them in opening banner
+(Udo Wermuth, 11 December 2020)
+ at x module 194
+Since standard \PASCAL\ cannot provide such information, something special
+is needed. The program here simply specifies July 4, 1776, at noon; but
+users probably want a better approximation to the truth.
+
+Note that the values are |scaled| integers. Hence \MF\ can no longer
+be used after the year 32767.
+
+ at p procedure fix_date_and_time;
+begin internal[time]:=12*60*unity; {minutes since midnight}
+internal[day]:=4*unity; {fourth day of the month}
+internal[month]:=7*unity; {seventh month of the year}
+internal[year]:=1776*unity; {Anno Domini}
+end;
+ at y
+Since standard \PASCAL\ cannot provide such information, something special
+is needed. The program here simply assumes that suitable values appear in
+the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and
+\\{sys\_year} (which are initialized to noon on 4 July 1776,
+in case the implementor is careless).
+
+Note that the values are |scaled| integers. Hence \MF\ can no longer
+be used after the year 32767.
+
+ at p procedure fix_date_and_time;
+begin sys_time:=12*60;
+sys_day:=4; sys_month:=7; sys_year:=1776;  {self-evident truths}
+internal[time]:=sys_time*unity; {minutes since midnight}
+internal[day]:=sys_day*unity; {day of the month}
+internal[month]:=sys_month*unity; {month of the year}
+internal[year]:=sys_year*unity; {Anno Domini}
+end;
+ at z
+ at x module 196
+@ Of course we had better declare another global variable, if the previous
+routines are going to work.
+
+@<Glob...@>=
+@!old_setting:0..max_selector;
+ at y  
+@ Of course we had better declare a few more global variables, if the previous
+routines are going to work.
+
+@<Glob...@>=
+@!old_setting:0..max_selector;
+@!sys_time,@!sys_day,@!sys_month,@!sys_year:integer;
+    {date and time supplied by external system}
+ at z
+ at x module 790
+print_int(round_unscaled(internal[day])); print_char(" ");
+months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
+m:=round_unscaled(internal[month]);
+for k:=3*m-2 to 3*m do wlog(months[k]);
+print_char(" "); print_int(round_unscaled(internal[year])); print_char(" ");
+m:=round_unscaled(internal[time]);
+print_dd(m div 60); print_char(":"); print_dd(m mod 60);
+ at y
+print_int(sys_day); print_char(" ");
+months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
+for k:=3*sys_month-2 to 3*sys_month do wlog(months[k]);
+print_char(" "); print_int(sys_year); print_char(" ");
+print_dd(sys_time div 60); print_char(":"); print_dd(sys_time mod 60);
+ at z
+ at x module 1211
+fix_date_and_time; init_randoms((internal[time] div unity)+internal[day]);@/
+ at y
+fix_date_and_time; init_randoms(sys_time+sys_day*unity);@/
+ at z
+
 -------------
 999. The absolutely final change (to be made after my death)
 @x module 2
- at d banner=='This is METAFONT, Version 2.7182818' {printed when \MF\ starts}
+ at d banner=='This is METAFONT, Version 2.71828182' {printed when \MF\ starts}
 @y
 @d banner=='This is METAFONT, Version $e$' {printed when \MF\ starts}
 @z

Modified: trunk/Master/texmf-dist/doc/generic/knuth/errata/tex82.bug
===================================================================
--- trunk/Master/texmf-dist/doc/generic/knuth/errata/tex82.bug	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/doc/generic/knuth/errata/tex82.bug	2021-02-26 23:56:54 UTC (rev 57963)
@@ -1577,7 +1577,7 @@
 231. \the to be an expandable control sequence (July 12)
 Several things in the language are cleaned up:
 a) \the\tenrm replaced by \fontname\tenrm [\fontname<font>]
-b) when expanding edef, etc., result of \the still expanded only only level
+b) when expanding edef, etc., result of \the still expanded only one level
 c) expansion after \def not inhibited, since \noexpand is now present
 d) \the\the disallowed.
 
@@ -9044,10 +9044,186 @@
       begin print_esc("csname"); print_esc("endcsname"); print_char(" ");
 @z
 
+429. Don't echo error message to terminal when tracing paragraphs
+(Udo Wermuth, 15 January 2017)
+ at x module 826
+  begin no_shrink_error_yet:=false;
+ at y
+  begin no_shrink_error_yet:=false;
+  @!stat if tracing_paragraphs>0 then end_diagnostic(true);@+tats@;
+ at z
+ at x
+  error;
+ at y
+  error;
+  @!stat if tracing_paragraphs>0 then begin_diagnostic;@+tats@;
+ at z
+
+430. Defeat interactions during batch mode (Xiaosa Zhang, 27 June 2020)
+ at x module 83
+@ @<Get user's advice...@>=
+loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
+ at y
+@ @<Get user's advice...@>=
+loop at +begin continue: if interaction<>error_stop_mode then return;
+  clear_for_error_prompt; prompt_input("? ");
+ at z
+
+431. Don't exit to editor if no input file is at the bottom line
+(Xiaosa Zhang, 03 July 2020)
+ at x module 84
+"E": if base_ptr>0 then
+ at y
+"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
+ at z
+ at x module 85
+if base_ptr>0 then print("E to edit your file,");
+ at y
+if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
+  print("E to edit your file,");
+ at z
+
+432. Keep date and time in system variables, use them in opening banner
+(Udo Wermuth, 11 December 2020)
+ at x module 241
+Since standard \PASCAL\ cannot provide such information, something special
+is needed. The program here simply specifies July 4, 1776, at noon; but
+users probably want a better approximation to the truth.
+
+ at p procedure fix_date_and_time;
+begin time:=12*60; {minutes since midnight}
+day:=4; {fourth day of the month}
+month:=7; {seventh month of the year}
+year:=1776; {Anno Domini}
+ at y
+Since standard \PASCAL\ cannot provide such information, something special
+is needed. The program here simply assumes that suitable values appear in
+the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and
+\\{sys\_year} (which are initialized to noon on 4 July 1776,
+in case the implementor is careless).
+
+ at p procedure fix_date_and_time;
+begin sys_time:=12*60;
+sys_day:=4; sys_month:=7; sys_year:=1776;  {self-evident truths}
+time:=sys_time; {minutes since midnight}
+day:=sys_day; {day of the month}
+month:=sys_month; {month of the year}
+year:=sys_year; {Anno Domini}
+ at z
+ at x module 246
+@ Of course we had better declare another global variable, if the previous
+routines are going to work.
+
+@<Glob...@>=
+@!old_setting:0..max_selector;
+ at y  
+@ Of course we had better declare a few more global variables, if the previous
+routines are going to work.
+
+@<Glob...@>=
+@!old_setting:0..max_selector;
+@!sys_time,@!sys_day,@!sys_month,@!sys_year:integer;
+    {date and time supplied by external system}
+ at z
+ at x module 536
+print_int(day); print_char(" ");
+months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
+for k:=3*month-2 to 3*month do wlog(months[k]);
+print_char(" "); print_int(year); print_char(" ");
+print_two(time div 60); print_char(":"); print_two(time mod 60);
+ at y
+print_int(sys_day); print_char(" ");
+months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
+for k:=3*sys_month-2 to 3*sys_month do wlog(months[k]);
+print_char(" "); print_int(sys_year); print_char(" ");
+print_two(sys_time div 60); print_char(":"); print_two(sys_time mod 60);
+ at z
+
+433. After nine parameters, delete both # and the token that follows
+(Bruno Le Floch, 22 October 2020)
+ at x module 473
+label found,done,done1,done2;
+ at y
+label found,continue,done,done1,done2;
+ at z
+ at x module 474
+begin loop begin get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|}
+ at y
+begin loop begin continue: get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|}
+ at z
+ at x module 476
+  help1("I'm going to ignore the # sign you just used."); error;
+ at y
+  help2("I'm going to ignore the # sign you just used,")@/
+    ("as well as the token that followed it."); error; goto continue;
+ at z
+
+434. Don't accept an implicit left brace after # in macro head
+(Udo Wermuth, 20 May 2020)
+ at x module 476
+if cur_cmd=left_brace then
+ at y
+if cur_tok<left_brace_limit then
+ at z
+
+435. Keep garbage out of the buffer if a |\read| end unexpectedly
+(DRF, 17 February 2018)
+ at x module 486
+    align_state:=1000000; error;
+ at y
+    align_state:=1000000; limit:=0; error;
+ at z
+
+436. Zero out nonexistent chars, to prevent rogue TFM files
+(DRF, 06 October 2020)
+ at x module 722
+    math_type(a):=empty;
+ at y
+    math_type(a):=empty; cur_i:=null_character;
+ at z
+
+437. Don't classify fraction noads as inner noads (DRF, 25 March 2019)
+ at x module 761
+fraction_noad: begin t:=inner_noad; s:=fraction_noad_size;
+  end;
+ at y
+fraction_noad: s:=fraction_noad_size;
+ at z
+
+438. Properly identify tabskip glue when tracing repeated templates
+(Igor Liferenko, 10 January 2020)
+ at x module 793
+link(p):=new_glue(glue_ptr(cur_loop));
+ at y
+link(p):=new_glue(glue_ptr(cur_loop));
+subtype(link(p)):=tab_skip_code+1;
+ at z
+
+439. Use the correct range for local variable hn (DRF, 31 October 2020)
+ at x module 892
+@!hn:small_number; {the number of positions occupied in |hc|}
+ at y
+@!hn:0..64; {the number of positions occupied in |hc|;
+                                  not always a |small_number|}
+ at z
+
+440. Normalize newlinechar when printing the final stats
+(Udo Wermuth, 29 November 2020)
+ at x module 1333
+begin @<Finish the extensions@>;
+ at y
+begin @<Finish the extensions@>; new_line_char:=-1;
+ at z
+ at x module 1335
+begin c:=cur_chr;
+ at y
+begin c:=cur_chr; if c<>1 then new_line_char:=-1;
+ at z
+
 -----------
 999. The absolutely final change (to be made after my death)
 @x module 2
- at d banner=='This is TeX, Version 3.14159265' {printed when \TeX\ starts}
+ at d banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts}
 @y
 @d banner=='This is TeX, Version $\pi$' {printed when \TeX\ starts}
 @z

Added: trunk/Master/texmf-dist/fonts/source/public/concrete/ccn10.mf
===================================================================
--- trunk/Master/texmf-dist/fonts/source/public/concrete/ccn10.mf	                        (rev 0)
+++ trunk/Master/texmf-dist/fonts/source/public/concrete/ccn10.mf	2021-02-26 23:56:54 UTC (rev 57963)
@@ -0,0 +1,75 @@
+% Concrete Roman Narrow 10 point
+if unknown cmbase: input cmbase fi
+
+font_identifier:="CCR"; font_size 10pt#;
+
+u#:=17/36pt#;			% unit width
+width_adj#:=0pt#;		% width adjustment for certain characters
+serif_fit#:=1/36pt#;		% extra sidebar near lowercase serifs
+cap_serif_fit#:=3/36pt#;	% extra sidebar near uppercase serifs
+letter_fit#:=0pt#;		% extra space added to all sidebars
+
+body_height#:=270/36pt#;	% height of tallest characters
+asc_height#:=250/36pt#;		% height of lowercase ascenders
+cap_height#:=246/36pt#;		% height of caps
+fig_height#:=232/36pt#;		% height of numerals
+x_height#:=165/36pt#;		% height of lowercase without ascenders
+math_axis#:=90/36pt#;		% axis of symmetry for math symbols
+bar_height#:=92/36pt#;		% height of crossbar in lowercase e
+comma_depth#:=70/36pt#;		% depth of comma below baseline
+desc_depth#:=70/36pt#;		% depth of lowercase descenders
+
+crisp#:=0pt#;			% diameter of serif corners
+tiny#:=11/36pt#;		% diameter of rounded corners
+fine#:=6/36pt#;			% diameter of sharply rounded corners
+thin_join#:=17/36pt#;		% width of extrafine details
+hair#:=21/36pt#;		% lowercase hairline breadth
+stem#:=25/36pt#;		% lowercase stem breadth
+curve#:=27/36pt#;		% lowercase curve breadth
+ess#:=25/36pt#;			% breadth in middle of lowercase s
+flare#:=29/36pt#;		% diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#;		% diameter of dots
+cap_hair#:=21/36pt#;		% uppercase hairline breadth
+cap_stem#:=27/36pt#;		% uppercase stem breadth
+cap_curve#:=28/36pt#;		% uppercase curve breadth
+cap_ess#:=27/36pt#;		% breadth in middle of uppercase s
+rule_thickness#:=.4pt#;		% thickness of lines in math symbols
+
+dish#:=0/36pt#;			% amount erased at top or bottom of serifs
+bracket#:=5/36pt#;		% vertical distance from serif base to tangent
+jut#:=30/36pt#;			% protrusion of lowercase serifs
+cap_jut#:=32/36pt#;		% protrusion of uppercase serifs
+beak_jut#:=10/36pt#;		% horizontal protrusion of beak serifs
+beak#:=70/36pt#;		% vertical protrusion of beak serifs
+vair#:=21/36pt#;		% vertical diameter of hairlines
+notch_cut#:=30/36pt#;		% maximum breadth above or below notches
+bar#:=21/36pt#;			% lowercase bar thickness
+slab#:=21/36pt#;		% serif and arm thickness
+cap_bar#:=21/36pt#;		% uppercase bar thickness
+cap_band#:=21/36pt#;		% uppercase thickness above/below lobes
+cap_notch_cut#:=1pt#;		% max breadth above/below uppercase notches
+serif_drop#:=5/36pt#;		% vertical drop of sloped serifs
+stem_corr#:=1/36pt#;		% for small refinements of stem breadth
+vair_corr#:=1/36pt#;		% for small refinements of hairline height
+apex_corr#:=0pt#;		% extra width at diagonal junctions
+
+o#:=4/36pt#;			% amount of overshoot for curves
+apex_o#:=3/36pt#;		% amount of overshoot for diagonal junctions
+
+slant:=0;			% tilt ratio $(\Delta x/\Delta y)$
+fudge:=.95;			% factor applied to weights of heavy characters
+math_spread:=0;			% extra openness of math symbols
+superness:=8/11;		% parameter for superellipses
+superpull:=1/15;		% extra openness inside bowls
+beak_darkness:=4/30;		% fraction of triangle inside beak serifs
+ligs:=2;			% level of ligatures to be included
+
+square_dots:=false;		% should dots be square?
+hefty:=false;			% should we try hard not to be overweight?
+serifs:=true;			% should serifs and bulbs be attached?
+monospace:=false;		% should all characters have the same width?
+variant_g:=false;		% should an italic-style g be used?
+low_asterisk:=false;		% should the asterisk be centered at the axis?
+math_fitting:=false;		% should math-mode spacing be used?
+
+generate roman			% switch to the driver file


Property changes on: trunk/Master/texmf-dist/fonts/source/public/concrete/ccn10.mf
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf
===================================================================
--- trunk/Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/fonts/source/public/knuth-lib/grayf.mf	2021-02-26 23:56:54 UTC (rev 57963)
@@ -10,7 +10,7 @@
 mg := mag; mag := 1; mode_setup;
 if mg>1: hppp := hppp*mg; vppp := vppp*mg;
  extra_endchar:=
-  "if charcode>0:currentpicture:=currentpicture scaled mg;fi"
+  "if charcode>0:currentpicture:=currentpicture scaled mg;fi;"
   & extra_endchar; fi;
 
 if picture pix_picture: rep := 1;

Modified: trunk/Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf
===================================================================
--- trunk/Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/fonts/source/public/knuth-lib/slant.mf	2021-02-26 23:56:54 UTC (rev 57963)
@@ -19,8 +19,8 @@
 for k=1 upto n:
  beginchar(k,k*u#*s,n*u#,0);
  pickup ruler; draw origin--(k*u*s,k*u);
- unfill (lft-1,bot -1)--(rt 1,bot -1)
-  --(rt 1,0)--(lft-1,0)--cycle;
+ unfill (lft -1,bot -1)--(rt 1,bot -1)
+  --(rt 1,0)--(lft -1,0)--cycle;
  unfill ((lft -1,0)--(rt 1,0)
   --(rt 1,top 1)--(lft -1,top 1)--cycle) shifted (k*u*s,k*u);
  endchar; endfor

Modified: trunk/Master/texmf-dist/fonts/source/public/knuth-local/domino.mf
===================================================================
--- trunk/Master/texmf-dist/fonts/source/public/knuth-local/domino.mf	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/fonts/source/public/knuth-local/domino.mf	2021-02-26 23:56:54 UTC (rev 57963)
@@ -14,26 +14,34 @@
 % instead of 16,32,48. But the present scheme seems mathematically better.
 mode_setup;
 p#:=in#/300;
-d#:=64p#;
+%d#:=64p#;
+d#:=63p#; % changed September 2016 (makes the font slightly smaller)
 define_pixels(p);
 
 font_identifier:="DOMINO";
 font_coding_scheme:="dominoes";
 font_size:=10pt#;
+font_quad:=d#;
+font_normal_space:=d#;
 
-pickup pencircle scaled p; tiny_pen=savepen;
+pickup pencircle scaled .5p; tiny_pen=savepen;
 pickup pencircle scaled 13p; huge_pen=savepen;
 % I first tried 15p, and it looked OK, but the Taiwan set has smaller dots
-pickup pencircle scaled 3p; bound_pen=savepen;
 
 def begindomchar(expr code)=
  beginchar(code,d#,d#,0);
  pickup tiny_pen;
- for x=0 step 2p until 60p:
-  drawdot (x+.5p,1.5p); drawdot (x+1.5p,.5p);
-  drawdot (.5p,x+3.5p); drawdot (1.5p,x+2.5p);
-  drawdot (w-1.5p,x+1.5p); drawdot (w-.5p,x+.5p);
-  drawdot (x+2.5p,h-.5p); drawdot (x+3.5p,h-1.5p);
+% for x=0 step 2p until 60p:
+%  drawdot (x+.5p,1.5p); drawdot (x+1.5p,.5p);
+%  drawdot (.5p,x+3.5p); drawdot (1.5p,x+2.5p);
+%  drawdot (w-1.5p,x+1.5p); drawdot (w-.5p,x+.5p);
+%  drawdot (x+2.5p,h-.5p); drawdot (x+3.5p,h-1.5p);
+% September 2016: that approach gave bad effect at join between domino halves
+ for x=0 step 3p until 57p:
+  drawdot (x+1.5p,1.5p);
+  drawdot (w-1.5p,x+1.5p);
+  drawdot (w-1.5p-x,h-1.5p);
+  drawdot (1.5p,h-1.5p-x);
  endfor
 % fill (2p,2p)--(w-2p,2p)--(w-2p,h-2p)--(2p,h-2p)--cycle;
  fill (3p,3p)--(w-3p,3p)--(w-3p,h-3p)--(3p,h-3p)--cycle;
@@ -40,15 +48,15 @@
  pickup huge_pen;
 enddef;
 
-def dota = erase drawdot(16p,48p) enddef;
-def dotb = erase drawdot(32p,48p) enddef;
-def dotc = erase drawdot(48p,48p) enddef;
-def dotd = erase drawdot(16p,32p) enddef;
-def dote = erase drawdot(32p,32p) enddef;
-def dotf = erase drawdot(48p,32p) enddef;
+def dota = erase drawdot(16p,47p) enddef;
+def dotb = erase drawdot(31.5p,47p) enddef;
+def dotc = erase drawdot(47p,47p) enddef;
+def dotd = erase drawdot(16p,31.5p) enddef;
+def dote = erase drawdot(31.5p,31.5p) enddef;
+def dotf = erase drawdot(47p,31.5p) enddef;
 def dotg = erase drawdot(16p,16p) enddef;
-def doth = erase drawdot(32p,16p) enddef;
-def doti = erase drawdot(48p,16p) enddef;
+def doth = erase drawdot(31.5p,16p) enddef;
+def doti = erase drawdot(47p,16p) enddef;
 
 def v(expr code)=128+ASCII code enddef;
   % change character code for vertical format

Modified: trunk/Master/texmf-dist/source/generic/knuth/errata/errata.nine
===================================================================
--- trunk/Master/texmf-dist/source/generic/knuth/errata/errata.nine	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/source/generic/knuth/errata/errata.nine	2021-02-26 23:56:54 UTC (rev 57963)
@@ -215,7 +215,7 @@
 \eightpoint
 |\downbracefill| (\hbox to 4em{\downbracefill}), 225--226, $\underline{357}$.
 
-\bugonpage A483, lines 15--21 (4/29/97)
+\bugonpage A483, lines 15--21 (4/29/96)
 
 \tenpoint
 \begintt

Modified: trunk/Master/texmf-dist/source/generic/knuth/errata/errata.tex
===================================================================
--- trunk/Master/texmf-dist/source/generic/knuth/errata/errata.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/source/generic/knuth/errata/errata.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -1,5 +1,6 @@
 % Bugs (sigh) in Computers \& Typesetting --- the most recent errata
 
+\tracingpages=1
 \input manmac
 \def\.#1{\hbox{\tt#1}}
 \font\sltt=cmsltt10
@@ -34,11 +35,12 @@
 
 \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.)
+\& Typesetting\/} since the beginning of 2014.
+(More precisely, it lists errors corrected
+since the 19th printing of Volume~A, the 9th printing
+of Volume~B, the 8th printing of Volume~C, the 6th printing of Volume~D,
+and the 7th printing of Volume~E. % 2012 for A-D, 2013 for E
+But it omits changes that are ``purely cosmetic.'')
 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
@@ -51,1650 +53,1750 @@
 
 
% volume A
 
-\bugonpage A7, line 4 from the bottom (01/15/04)
+\bugonpage A34, line 3 from the bottom (01/09/20)
 
-\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
+not, you can say
+`\.{I\char`\\errorcontextlines=100} \.{\char`\\oops}' and try again. \ (That
+will usually\cutpar
 
-\bugonpage A124, lines 12 and 13 (02/27/08)
+\bugonpage A43, line 6 (07/24/14)
 
-\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.)
+\tenpoint\noindent
+keyboard, or that have been
+pre\"empted for formatting?
 
-\bugonpage A153, line 7 (01/03/14)
+\bugonpage A49, cummings quote (08/03/19)
 
-\ninepoint\noindent
-of three fonts: one for text size, one for
-script size, and one for scriptscript size. The\cutpar
+(delete the period at the end of the line)
 
-\bugonpage A206, lines 12--17 (05/21/07)
+\bugonpage A66, line 3 from the bottom (08/26/17)
 
-\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.
+\ninepoint
+Such displays of box contents will be discussed further in
+Chapters 12 and~27.\cutpar
 
+\bugonpage A105, lines 9--16 (01/16/21)
 
-\bugonpage A216, line 3 from the bottom (12/20/07)
+\ddanger If you say \.{\char`\\vadjust\char`\{}$\langle\,$vertical
+mode material$\,\rangle$\.{\char`\}} within a
+paragraph, \TeX\ will use internal vertical mode to insert the specified
+material into the vertical
+list that encloses the paragraph, immediately after whatever line
+contained the position of the \.{\char`\\vadjust}. For example, you can say
+`\.{\char`\\vadjust\char`\{\char`\\kern1pt\char`\}}'
+to increase the amount of space between lines of a
+paragraph if those lines would otherwise come out too close together.  \ (The
+\vadjust{\kern1pt}author
+did that in the current line, just to illustrate what happens.) \ Also,
+if you want to make sure that a page break will occur immediately after a
+certain line, you can say `\.{\char`\\vadjust\char`\{\char`\\eject\char`\}}'
+anywhere in that line.
 
-\ninepoint\indent|\openin|\<number>|=|\<file name>
+\bugonpage A122, lines 3--8 (11/24/19)
 
-\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
+\.{\char`\\count255}, \.{\char`\\dimen255}, \.{\char`\\skip255},
+\.{\char`\\muskip255}, and \.{\char`\\toks255} are
+traditionally kept available for such purposes.  Furthermore, plain \TeX\
+reserves \.{\char`\\dimen0} to \.{\char`\\dimen9},
+\.{\char`\\skip0} to \.{\char`\\skip9}, \.{\char`\\muskip0} to
+\.{\char`\\muskip9}, and \.{\char`\\box0} to \.{\char`\\box9}
+for ``scratchwork''; these registers
+are never allocated by the \.{\char`\\new...}\null\ operations.  We have seen that
+\.{\char`\\count0} through \.{\char`\\count9} are special,
+and \.{\char`\\box255} also turns out to
+be special; so those registers should be avoided unless you know what you
+are doing.
 
-\bugonpage A308, lines 25 and 26 (06/17/02)
+\bugonpage A155, line 8 from the bottom (01/17/21)
 
-\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|
+\.{\char`\\mathopen\char`\{\char`\\hbox\char`\{\char`\$\char`\\left\char`\#1}%
+$\langle\,$strut$\,\rangle$\.{\char`\\right.\char`\$\char`\}\char`\}}
 
-\bugonpage A311, line 17 (12/29/07)
+\bugonpage A155, the bottom six lines (12/10/18)
 
-\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
+dividual symbols; \.{\char`\\left}$\,\ldots\,$\.{\char`\\right}
+constructions are treated as ``inner'' subformulas, which means that
+they will be surrounded by additional space in certain circumstances.
+All other subformulas are generally treated as ordinary symbols,
+whether they are formed by \.{\char`\\overline} or
+\.{\char`\\hbox} or \.{\char`\\vcenter} or
+by simply being enclosed in braces. Thus, \.{\char`\\mathord} isn't really
+a necessary part of the \TeX\ language; instead of typing
+`\.{\char`\$1\char`\\mathord,234\char`\$}' you can get the same
+effect from `\.{\char`\$1\char`\{,\char`\}234\char`\$}'.
 
-\bugonpage A364, lines 12--15 from the bottom (02/29/08)
+\bugonpage A158, line 19 (12/10/18)
 
-\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}|
+\ninepoint\indent
+Inner\quad is an inner atom produced by
+ `\.{\char`\\left}$\,\ldots\,$\.{\char`\\right}';
 
-\bugonpage A364, line 5 from the bottom (02/29/08)
+\bugonpage A170, lines 18 and 19 (12/10/18)
 
 \ninepoint\noindent
-|\def\fmtversion{3.141592653} % identifies the current format|
+subformulas delimited by \.{\char`\\left} and \.{\char`\\right}
+are treated as type~Inner. The following table is
+used to determine the spacing between pairs of adjacent atoms:
 
-\bugonpage A373, lines 4 and 5 from the bottom (01/02/14)
+\bugonpage A171, line 19 from the bottom (06/15/19)
 
 \ninepoint\noindent
-And here's another solution (which may be faster, because
-token list registers can be expanded more quickly than macros
-on some implementations, using |\the|):
+formula produces a result essentially equivalent to
+`\.{\char`\\left(}$\langle\,$subformula$\,\rangle$\.{\char`\\right)}',
+when\cutpar
 
-\bugonpage A373, line 2 from the bottom (01/02/14)
+\bugonpage A215, line 16 from the bottom becomes two lines (10/13/20)
 
-\ninepoint\indent
-|\loop \ifnum\m>0 \t=\expandafter{\the\t*}\advance\m-1 \repeat|
+\ninepoint
+\item\bull Just after a token such as \.{\char`\$}$_3$
+that begins math mode, to see if
+another token of category 3 follows.
 
-\bugonpage A399, line 18, through what used to be page A400, line 14 (02/26/08)
+\bugonpage A222, lines 21--23 (01/16/21)
 
 \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.
+\halign{\indent#\hfil&\quad(see Chapter #)\hfil\cr
+\.{\char`\\hbox}$\langle\,$box specification$\,\rangle$%
+ \.{\char`\{}$\langle\,$horizontal mode material$\,\rangle$\.{\char`\}}&12\cr
+\.{\char`\\vbox}$\langle\,$box specification$\,\rangle$%
+ \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}}&12\cr
+\.{\char`\\vtop}$\langle\,$box specification$\,\rangle$%
+ \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}}&12\cr
+}
 
-In our application there is no interline glue within |\box\footins|,
-so the |\unskip| command could be deleted from |\removehboxes|.
+\bugonpage A222, lines 11--13 from the bottom (01/16/21)
 
-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.
+\ninepoint\noindent
+ter~15. The \.{\char`\\vsplit} operation
+is also explained in Chapter~15. In math modes an additional
+type of box is available:
+\.{\char`\\vcenter}$\langle\,$box specification$\,\rangle$%
+ \.{\char`\{}$\langle\,$vertical mode material$\,\rangle$\.{\char`\}}
+(see Chapter~17).
 
-\bugonpage A416, lines 18--22 (06/08/07)
+\bugonpage A232, line 14 (01/10/21)
 
-\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
+\ninepoint\noindent
+tabs outside; `\.{\char`\\global\char`\\settabs}' will not do what
+you might think it should.
 
-\bugonpage A418, line 8 from the bottom (12/13/11)
+\bugonpage A233, lines 3--5 (04/27/15)
 
-\ninepoint\noindent\beginlines
-|    \def\\{#3} \advance\hsize by -18mm|
-\endlines
+\tenpoint\noindent
+Only two tabs are set in this case, because only two \.{\char`\&}'s
+appear in the sample line. \ (A sample line usually
+ends with~\.{\char`\&\char`\\cr}, as it does here,
+because text material between the last tab and \.{\char`\\cr}
+isn't used for anything.)
 
-\bugonpage A418, line 3 from the bottom (12/13/11)
+\bugonpage A252, lines 5--7 (12/25/20)
 
-\ninepoint\noindent\beginlines
-|    \halign{\line{\titlefont\hss##}\\#4\unskip\\}|
-\endlines
+\ninepoint\noindent
+blank, and
+the footline is normally a centered page number, but you can specify any
+headline and footline that you want by changing the token lists
+\.{\char`\\headline} and \.{\char`\\footline}. For example,
 
-\bugonpage A442, lines 7 and 8 from the bottom (01/03/14)
+\bugonpage A253, lines 7--9 from the bottom (10/27/20)
 
-\def\rule#1.{\smallskip\textindent{\bf#1.}\ignorespaces}
-\ninepoint\textindent{\bf 3.}%
-If the current item is a style change, set $C$ to the specified
-style and move on to the next item.
+\ninepoint\indent
+\.{\char`\\everypar} or \.{\char`\\errhelp}, except that \TeX\
+retains the begin-group symbol~`\.{\char`\{}' at the beginning
+and the end-group symbol~`\.{\char`\}}' at the end. These
+grouping characters
+help to keep the output routine from interfering with what
+\TeX\ was doing\cutpar
 
-\bugonpage A450, lines 14--16 from the bottom (12/19/02)
+\bugonpage A256, line 19 (08/28/15)
 
-\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
+\ninepoint\indent
+\tt \char`\\baselineskip=24pt \char`\\lineskiplimit=0pt
 
-\bugonpage A458, left column (01/11/07)
+\bugonpage A277, lines 9 and 10 from the bottom (08/26/17)
 
-\eightpoint\noindent
-|\\|, 38, {\it356}, {\it378}, {\it418}.
+\ninepoint\indent
+$\langle\,$hyphenation assignment$\,\rangle$\is
+ \.{\char`\\hyphenation}$\langle\,$filler$\,\rangle$%
+ \.{\char`\{}$\langle\,$hyphenations$\,\rangle$\.{\char`\}}\par
+\qquad \alt \.{\char`\\patterns}$\langle\,$filler$\,\rangle$%
+ \.{\char`\{}$\langle\,$patterns$\,\rangle$\.{\char`\}}
 
-\bugonpage A459, left column (03/17/06)
+\bugonpage A286, bottom two lines {(and affecting the top lines
+of page 287)} (08/26/17)
 
-\eightpoint\noindent
-angle brackets ( $\langle\,\rangle$ ), 59, {\it146--147}, 150,~156,\par
-\noindent\qquad $\underline{268}$, 420, 437;
- {\sl see also\/} |\langle|, |\rangle|.
+\ninepoint\noindent
+stands for zero or more \<assignment>
+commands other than \.{\char`\\setbox}, possibly with \<filler>.
+If the assignments are not followed by a \<character>, where
+\<character> stands\cutpar
 
-\bugonpage A461, left column (02/24/08)
+\bugonpage A287, lines 11--17  (04/22/20)
 
-\eightpoint\noindent
-|\boxit|, 223, 331.
+\ninepoint
+\textindent{$\bull$} \.{\char`\\discretionary}%
+  \<disc text>\<disc text>\<disc text>.\enskip
+A \<disc text> has the form
+`\<filler>\.{\char`\{}\<horizontal mode material>\.{\char`\}}',
+where the material is processed in restricted horizontal mode and
+should contain only fixed-width things.
+More precisely, the horizontal list formed by each
+\<disc text> must consist only of characters, ligatures,
+kerns, boxes, and rules; there should be no glue or penalty items, etc.
+This command appends a discretionary item to the current list; see
+Chapter~14 for the meaning of a discretionary item. The space factor is
+not changed.
 
-\bugonpage A468, right column (02/26/08)
+\bugonpage A292, lines 8--10 (04/22/20)
 
-\eightpoint\noindent
-interline glue, 78--79, $\underline{80}$, 104, 105, 125, 221,\par
-\noindent\qquad 245, 263, 281--282, 335, 352, 399, 409.
+\ninepoint
+\textindent{$\bull$} \.{\char`\\discretionary}%
+  \<disc text>\<disc text>\<disc text>.\enskip
+This command has the same effect as in horizontal mode (see Chapter~25), but the
+third \<disc text> must produce an empty list.
 
-\bugonpage A469, left column (02/26/08)
+\bugonpage A299, line 11 from the bottom (11/01/20)
 
-\eightpoint\noindent
-Kastrup, David Friedrich, 399.
+\ninepoint\noindent
+is corrupted or was prepared for a different version of \TeX.
 
-\bugonpage A470, left column (01/21/03)
+\bugonpage A305, bottom line (06/30/20)
 
-\eightpoint\noindent
-|\loggingall|, $\underline{364}$.
+\ninepoint\indent
+\tt \char`\\setbox0=\char`\\hbox\char`\{\char`\#1\char`\}%
+\char`\\advance\char`\\dimen0 by -\char`\\wd0 \char`\}\rm.
 
-\bugonpage A477, right column (06/08/07)
+\bugonpage A309, line 2 becomes two lines (12/06/20)
 
-\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 Bv, page number change (12/27/11)
-
-\eightpoint\noindent[For consistency with Volumes A, C, and E, the
-preface now begins on page v instead of page~vii. This change was first
-made in the ninth printing.]
-
-\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/06/14)
-
-\eightpoint\noindent
-all of those changes.
-I~now believe that the final bug was discovered on 14 September 2008
-and removed in version 3.14159265.
-The finder's fee has converged to \$327.68.
-
-\bugonpage Bxiii {(formerly Bxv)}, line $-7$ (12/27/11)
-
 \ninepoint\noindent
-Format specs have no effect on the corresponding Pascal program, but they
-do influence\cutpar
+represent text entered from the user's terminal, or with
+`\.{<insert>}', when they
+represent text inserted during error recovery).
 
-\hsize=35pc
+\bugonpage A316, lines 17 and 18 from the bottom (09/03/15)
 
-\bugonpage B2, line 10 from the bottom (01/02/14)
-
-\ninepoint\noindent\hskip10pt
-{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
-{\tt This\]is\]TeX,\]Version\]3.14159265\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 B109, line 16 (01/06/14)
-
 \ninepoint\noindent
-\qquad\qquad{\bf begin} $\\{print\_esc}(\.{"csname"})$;
-$\\{print\_esc}(\.{"endcsname"})$;
-$\\{print\_char}(\.{"\ "})$;
-{\bf end}
+(The next line must also not be too tall.)
+Here \.{\char`\\specialstar} is a box of height zero and depth
+\.{\char`\\strutdepth},
+and it puts an asterisk in the left margin:
 
-\bugonpage B114, line 25 (09/11/07)
+\bugonpage A320, lines 5--9 from the bottom (06/27/15)
 
-\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$\,\}$
+{\bf 17.21.}\enspace Assigning \.{\char`\\delcode\char`\`\char`\{} 
+would not work to allow `\.{\char`\\left\char`\{}', because
+the brace has category~1 and isn't a legal \<delim>.
+Allowing brace delimiters would be a bad idea because it would
+mess up other constructions, such as arguments to macros, and
+components of alignments. Moreover, a user who
+gets away with `\.{\char`\\left\char`\{}'
+is likely to try also `\.{\char`\\bigl\char`\{}', which
+fails miserably.
 
-\bugonpage B139, line 20 (12/19/02)
+\bugonpage A326, line 12 (08/26/17)
 
 \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$\,\}$
+its natural width. The \.{\char`\\hbox} version also invokes
+\.{\char`\\everyhbox} and \.{\char`\\everymath}.
 
-\bugonpage B144, line 14 (09/11/07)
+\bugonpage A329, line 3 of answer 20.7 (05/15/19)
 
 \ninepoint\noindent
-\quad\\{cat}: $0\to\\{max\_char\_code}$;\quad$\{\,$\\{cat\_code}(\\{cur\_char}), usually$\,\}$
+the three tokens \.{!1}, \.{\char`\#2}, \.{[}$_1$; the
+\<replacement text> consists of the six tokens
+\.{\char`\{}$_1$, \.{\char`\#}$_6$,\cutpar
 
-\bugonpage B153, lines 2 and 3 (09/11/07)
+\bugonpage A329, line 6 of answer 20.7 (05/15/19)
 
-\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$\,\}$
+is otherwise irrelevant. Thus, `\.{\char`\\def\char`\\!!1\char`\#2\char
+ `\#[\char`\{\char`\#\char`\#]!!\char`\#2]}'
+would produce an essentially\cutpar
 
-\bugonpage B163, line 29 (12/19/02)
+\bugonpage A329, line 5 from the bottom of answer 20.7 (05/15/19)
 
-\ninepoint\noindent
-\quad$\\{long\_state}\gets\\{call}$;
-$\\{cur\_tok}\gets\\{par\_token}$;
-$\\{ins\_error}$;
-{\bf goto} \\{continue};
+\ninepoint\indent
+\.{!1<-x}
 
-\bugonpage B172, lines 2--6 from the bottom (09/11/07)
+\bugonpage A329, bottom line of answer 20.7 (05/15/19)
 
 \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})
+final parameter in the parameter text;
+`\.{!1}' would have been rendered `\.{\char`\#1}'.
 
-\bugonpage B178, line 4 (09/11/07)
+\bugonpage A332, lines 13 and 14 (08/26/17)
 
 \ninepoint\noindent
-\quad$\\{cur\_val}\gets0$;
-$\\{cur\_val\_level}\gets\\{int\_val}$;
-$\\{radix}\gets0$;
-$\\{cur\_order}\gets\\{normal}$;
+{\bf 21.10.}\enspace If you say
+`\.{\char`\{\char`\\let}\stretch
+\.{\char`\\the=0\char`\\edef}\stretch
+\.{\char`\\next}\stretch
+\.{\char`\{\char`\\write}\stretch
+\.{\char`\\cont}\stretch
+\.{\char`\{}\<token list>\.{\char`\}\char`\}\char`\\next}\stretch
+\.{\char`\}}',
+the \.{\char`\\write} will be exercuted after
+\.{\char`\\edef} expands everything except \.{\char`\\the}.
 
-\bugonpage B184, line 9 from the bottom (04/18/07)
+\bugonpage A332, bottom line (11/15/19)
 
-\tenpoint\noindent
-and denominator sum to 32768 or less.
-According to the definitions here, $\rm2660\,dd\approx1000.33297\,mm$;\kern-6.6pt\cutpar
+\ninepoint\indent\quad
+\tt \char`\\+\char`\&\char`\{\char`\\bf end\char`\};\char`\\cr \
+ \char`\%\ note that the semicolon isn't bold
 
-\bugonpage B206, line 14 (10/30/02)
+\bugonpage A342, lines 12 and 13 (08/14/20)
 
 \tenpoint\noindent
-used input files like \.{webmac.tex}.
+of plain \TeX\ format; but some of them are primitive (built in),
+such as `\.{\char`\\par}' (end of
+paragraph), `\.{\char`\\noindent}' (beginning of
+non-indented paragraph), and `\.{\char`\/}' (italic\cutpar
 
-\bugonpage B206, new paragraph to follow line 22 (12/20/02)
+\bugonpage A345, lines 10--13 from the bottom (06/27/15)
 
-\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.
+\ninepoint\noindent
+Braces are used for grouping, when supplying
+arguments to macros; so they cannot also be used as math delimiters, or as
+arguments to macros such as \.{\char`\\big}. (One could change their catcodes
+to~12, and use some other pair of characters for grouping; but that
+would not be plain \TeX.)
 
-\bugonpage B227, new line to precede line 23 (09/11/07)
+\bugonpage A346, lines 10--22 (11/24/19)
 
 \ninepoint\noindent
-{\bf if} $(\\{nw}=0)\lor(\\{nh}=0)\lor(\\{nd}=0)\lor(\\{ni}=0)$
- {\bf then} \\{abort};
+number identification.) \ (2)~The registers
+\.{\char`\\count255}, \.{\char`\\dimen255}, \.{\char`\\skip255},
+\.{\char`\\toks255}, and \.{\char`\\muskip255}
+are freely available in the same way.
+\ (3)~All assignments to the scratch registers whose numbers are
+1,~3, 5, 7, and~9 should be \.{\char`\\global}; all assignments to the
+other scratch registers (0,~2, 4, 6, 8,~255) should be non-\.{\char`\\global}.
+\ (This prevents the phenomenon of ``save stack buildup'' discussed
+in Chapter~27.)
+\ (4)~Furthermore, it's possible to
+use any register in a group, if you ensure that \TeX's grouping
+mechanism will restore the register when you're done with the group, and
+if you are certain that other macros will not make global assignments
+to that register when you need it. \ (5)~But when a register is used
+by several macros, or over long spans of time, it should be allocated
+by \.{\char`\\newcount}, \.{\char`\\newdimen}, \.{\char`\\newbox},
+etc. \ (6)~Similar remarks
+apply to input/output streams used by \.{\char`\\read} and \.{\char`\\write},
+to math families used by \.{\char`\\fam}, to sets of hyphenation rules used by
+\.{\char`\\language}, and to insertions (which require
+\.{\char`\\box}, \.{\char`\\count}, \.{\char`\\dimen},
+and \.{\char`\\skip} registers all having the
+same number).\looseness=-1
 
-\bugonpage B256, line 25 (12/20/02)
+\bugonpage A347, line 6 (06/30/20)
 
 \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})$;
+\tt \char`\\def\char`\\wlog\char`\{\char`\\immediate\char`\\write-1 \char`\}
+\ \char`\%\ this will write on log file (only)
 
-\bugonpage B258, line 5 from the bottom (12/20/02)
+\bugonpage A347, line 10 (11/24/19)
 
 \ninepoint\noindent
-\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$;
-  $\\{rule\_wd}\gets\\{width}(g)-\\{cur\_g}$;
+\tt \char`\\outer\char`\\def\char`\\newmuskip\char`\{\char`\\alloc at 3%
+\char`\\muskip\char`\\muskipdef\char`\\@cclv\char`\}
 
-\bugonpage B258, bottom line (12/20/02)
+\bugonpage A347, line 14 (11/24/19)
 
 \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})$;
+\tt \char`\\outer\char`\\def\char`\\newtoks\char`\{\char`\\alloc at 5%
+\char`\\toks\char`\\toksdef\char`\\@cclv\char`\}
 
-\bugonpage B259, line 4 (12/20/02)
+\bugonpage A350, lines 15 and 16 from the bottom (01/17/21)
 
 \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})$;
+format; it shouldn't cost much for people to acquire all the
+fonts of plain \TeX\ in addition to the ones that they really want. Second, it
+is desirable on many computer systems to\cutpar
 
-\bugonpage B259, new line to precede old line 7 (12/20/02)
+\bugonpage A364, line 5 from the bottom (01/14/21)
 
 \ninepoint\noindent
-\quad$\\{rule\_wd}\gets\\{rule\_wd}+\\{cur\_g}$;
+\tt \char`\\def\char`\\fmtversion\char`\{3.1415926535\char`\} 
+\ \char`\%\ identifies the current format
 
-\bugonpage B260, line 21 (12/19/02)
+\bugonpage A370, lines 11 and 12 (08/26/17)
 
 \ninepoint\noindent
-\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$;
+close as possible to the ASCII conventions.
+\ (b)~Make sure that codes \oct{041}--\oct{046}, \oct{060}--\oct{071},
+\oct{136}, \oct{141}--\oct{146}, and \oct{160}--\oct{171} are present and that
+each unrepresentable in-\cutpar
 
-\bugonpage B261, line 9 (12/20/02)
+\bugonpage A373, lines 21 and 22 (01/17/21)
 
 \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})$;
+and \.{\char`\\if...\char`\\fi}
+tests, as well as special operations like \.{\char`\\the}
+and \.{\char`\\input}, while the
+latter category includes the primitive commands listed in Chapters~24--26.
+The expansion of\cutpar
 
-\bugonpage B262, line 10 from the bottom (12/20/02)
+\bugonpage A375, bottom three lines (06/30/20)
 
 \ninepoint\noindent
-\quad{\bf begin} $g\gets\\{glue\_ptr}(p)$;
-  $\\{rule\_ht}\gets\\{width}(g)-\\{cur\_g}$;
+|$$\generaldisplay$$| to be invoked, with |\eq| defined to be $\alpha$.
+Furthermore, when an equation number~$\beta$ is present, it should be stored
+in |\eqn|, and the test |\ifeqno| should be true.
+In such cases |\ifleqno| should distinguish |\leqno| from |\eqno|.
+Here\cutpar
 
-\bugonpage B262, line 6 from the bottom (12/20/02)
+\bugonpage A398, lines 4 and 5 (08/26/17)
 
-\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})$;
+\ninepoint\indent
+|\setbox2=\lastbox \setbox\footins=\vbox{\box2}|\par
+\smallskip\noindent
+since |\lastbox| will be the result of\/ |\rigidbalance|, which is an hbox.
 
-\bugonpage B262, line 2 from the bottom (12/20/02)
+\bugonpage A407, line 5 from the bottom (06/30/20)
 
-\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})$;
+\ninepoint\noindent\quad
+|  \interlinepenalty5000\def\par{\endgraf\penalty5000 }}|
 
-\bugonpage B263, new line to precede old line 2 (12/20/02)
+\bugonpage A413, line 11 from the bottom (05/14/19)
 
-\ninepoint\noindent
-\quad$\\{rule\_ht}\gets\\{rule\_ht}+\\{cur\_g}$;
+\ninepoint\indent
+The computer file |texbook.tex| that generated {\sl The \TeX book\/} begins
+with a\cutpar
 
-\bugonpage B264, line 10 (12/19/02)
+\bugonpage A418, line 4 (05/14/19)
 
 \ninepoint\noindent
-\qquad{\bf else begin} $\\{lx}\gets\\{lr}$ {\bf div} $(\\{lq}+1)$;
+\TeX\ commands
+that look like this in the file |texbook.tex|:
 
-\bugonpage B266, line 29 (09/11/07)
+\bugonpage A420, line 11 (06/30/20)
 
-\tenpoint\noindent
-$\\{total\_pages}\ge65536$, the \.{DVI} file will lie. And if
-$\\{max\_push}\ge65536$, the user deserves whatever chaos might ensue.
+\ninepoint\noindent
+|\def\bull{\vrule height.9ex width.8ex depth-.1ex \relax} % square bullet|
 
-\bugonpage B279, line 19 (09/11/07)
+\bugonpage A423, line 16 (06/30/20)
 
 \ninepoint\noindent
-\qquad\\{p}: \\{pointer};\quad$\{\,$a new glue node$\,\}$
+|  \vrule height6pt depth2pt width0pt \relax} % a strut for \insert\margin|
 
-\bugonpage B288, lines 18--20 (09/11/07)
+\bugonpage A445, lines 10--14 (12/10/18)
 
-\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$));
+\ninepoint
+\textindent{\bf 15e.} Enclose the vbox that was constructed in Rule 15c or 15d by
+delimiters $(\lambda,\rho)$
+whose height plus depth is at least $\sigma_{20}$, if $C>T$, and at
+least $\sigma_{21}$ otherwise. Shift the delimiters up or down so that they are
+vertically centered with respect to the axis. Replace the generalized
+fraction by an Ord atom whose nucleus is the resulting sequence of three boxes
+($\lambda$, vbox, $\rho$). Go to rule~19.
 
-\bugonpage B290, line 12 (09/11/07)
+\bugonpage A446, the bottom three lines of Rule 19 become four lines (01/10/21)
 
 \ninepoint\noindent
-\quad{\bf begin if\/} $s=\\{text\_size}$ {\bf then}
- \\{print\_esc}(\.{"textfont"});
+atom and the right boundary item to
+a Close atom. The entire resulting list now becomes the nucleus of an
+Inner atom. \ (All of the calculations in this step are done with
+$C$ equal to the starting style of the math list; style items in the
+middle of the list do not affect the style of the right boundary item.)
 
-\bugonpage B299, line 9 (12/20/02)
+\bugonpage A454, lines 17 and 18 from the bottom (04/13/20)
 
 \ninepoint\noindent
-\qquad\qquad\quad{\bf if\/} $\\{type}(r)=\\{kern\_node}$ {\bf then}
- \quad$\{\,$unneeded italic correction$\,\}$
+of the process; the trial word consists of all the letters found in admissible
+items, up to a maximum of~63. Notice that all of these letters are in font~$f$.
 
-\bugonpage B332, line 6 (12/19/02)
+\bugonpage A458 and following, selected amendments to the index (01/18/21)
 
-\tenpoint\noindent
-is being scanned, or when no alignment preamble is active.
+\eightpoint
+|[1]| (progress report), 23, $\underline{119}$.\par
+|\aa| ( \aa\ ), {\it52}, $\underline{356}$.\par
+|\AA| ( \AA\ ), {\it52}, $\underline{356}$.\par
+\<disc text>, $\underline{287}$, 292.\par
+\<general text>, $\underline{276}$, 279, 280.\par
+\<horizontal mode material>, 278, 285, 287.\par
+integral signs, {\sl see\/} |\int|, |\oint|, |\smallint|.\par
+\<math mode material>, 287, 289--293.\par
+|\null|, 311, {\it312}, {\it316}, {\it332}, {\it335}, $\underline{351}$, {\it354}, {\it360}--{\it362}, {\it419}.\par
+|\o| ( \o\ ), {\it52}, $\underline{356}$.\par
+|\O| ( \O\ ), {\it52}, $\underline{356}$.\par
+programs, for computers, 38, 165, {\it234}.\par
+repeating templates, {\sl see\/} periodic preambles.\par
+replacement text, {\it200}--{\it204}, 212, 280, 300, 329.\par
+right delimiters, {\sl see\/} closings.\par
+struts, $\underline{82}$, 125, 131, 142, 155, 178, 245--247, 255, 329, 416, 422, 423.\par
+\<vertical mode material>, 278, 280--282, 290.
 
-\bugonpage B332, line 8 (12/19/02)
 
-\ninepoint\noindent
-\quad{\bf begin if\/} $(\\{scanner\_status}=\\{aligning}) \lor
- (\\{cur\_align}=\\{null})$ {\bf then}
+
% volume B
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\dts{\mathrel{.\,.}} % double dot, used only in math mode
 
-\bugonpage B336, line 11 from the bottom (10/13/03)
+\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/15/21)
 
-\tenpoint\noindent
-$j-i+\\{min\_quarterword}$ in their
-\\{link} fields. The values of $w_{ii}$ were initialized to
-\\{null\_flag},\cutpar
+\eightpoint\noindent
+all of those changes.
+I~now believe that the final bug was discovered on 22 October 2020
+and removed in version 3.141592653. % on 12 January 2021
+The finder's fee has converged to \$327.68.
 
-\bugonpage B342, lines 5 and 6 (09/11/07)
+\hsize=35pc
 
-\tenpoint
-In restricted horizontal mode, the \\{clang} part of \\{aux} is undefined;
-an over-cautious Pascal runtime system may complain about this.
+\bugonpage B2, line 10 from the bottom (01/15/21)
 
-\bugonpage B416, line 22 (02/29/08)
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]3.141592653\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
 
-\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 B4, line 8 of \S7 (04/02/17)
 
-\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}.
+diagnostic information for \.{\char`\\tracingparagraphs},
+\.{\char`\\tracingpages}, and \.{\char`\\tracingrestores}.
 
-\bugonpage B438, lines 19 and 20 (09/11/07)
+\bugonpage B21, lines 33 and 34 (04/02/17)
 
-\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}$;
+\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 80 printable characters are needed.
 
-\bugonpage B438, line 4 from the bottom (09/11/07)
+\bugonpage B28, lines 3 and 4 (04/02/17)
 
-\ninepoint\noindent
-\quad$\\{link}(\\{tail})\gets\\{lig\_stack}$;
-$\\{tail}\gets\\{lig\_stack}$\quad$\{\,$\\{main\_loop\_lookahead} is next$\,\}$
+\tenpoint\noindent
+not serious since we assume that this
+part of the program is system dependent.
 
-\bugonpage B439, line 3 (09/11/07)
+\bugonpage B28, line 2 from the bottom (04/02/17)
 
-\ninepoint\noindent
-\quad{\bf if\/} $\\{main\_p}>\\{null}$ {\bf then}
- \\{tail\_append}(\\{main\_p});\quad$\{\,$append a single character$\,\}$
+\ninepoint\noindent\quad
+{\bf var} $k$: $0\dts23$;\quad$\{\,$index to current digit; we assume
+ that $\vert n\vert<10^{23}\,\}$
 
-\bugonpage B440, new line to follow line 9 (09/11/07)
+\bugonpage B35, line 2 of \S83 becomes two lines (06/27/20)
 
-\ninepoint\noindent
-\quad{\bf if\/} $\\{cur\_r}=\\{non\_char}$ {\bf then goto}
- \\{main\_loop\_wrapup};
+\ninepoint\noindent\quad
+{\bf loop begin} \\{continue}: {\bf if} $\\{interaction}\ne\\{error\_stop\_mode}$
+  {\bf then return};\par
+\noindent\qquad
+\\{clear\_for\_error\_prompt}; \ \\{prompt\_input}(\.{"?\]"});
 
-\bugonpage B452, line 18 (28/03/11)
+\bugonpage B36, line 11 of \S84 (07/03/20)
 
-\noindent\\{hmode}, where the latter two are used to denote
- \.{\char`\\vbox} and \.{\char`\\hbox}, respectively.
+\ninepoint\noindent\quad
+\.{"E"}: {\bf if} $\\{base\_ptr}>0$ {\bf then if}
+ $\\{input\_stack}[\\{base\_ptr}].\\{name\_field}\ge256$ {\bf then}
 
-\bugonpage B455, lines 3 and 4 (09/11/07)
+\bugonpage B36, line 5 of \S85 becomes two lines (07/03/20)
 
-\ninepoint\noindent
-\quad{\bf if\/} $((\\{cur\_cmd}=\\{hskip})\land(\\{abs}(\\{mode})\ne\\{vmode}))
- \lor  ((\\{cur\_cmd}=\\{vskip})\land(\\{abs}(\\{mode})=\\{vmode}))$ {\bf then}
+\ninepoint\noindent\quad
+{\bf if} $\\{base\_ptr}>0$ {\bf then}\par
+\noindent\qquad
+{\bf if} $\\{input\_stack}[\\{base\_ptr}].\\{name\_field}\ge256$ {\bf then}
+\\{print}(\.{"E\]to\]edit\]your\]file."}
 
-\bugonpage B472, new paragraph to follow line 10 (12/20/02)
+\bugonpage B40, line 5 from the bottom (08/07/20)
 
-\tenpoint\noindent\quad
-A devious user might force an \\{endv} command to occur just about anywhere;
-we must defeat such hacks.
+\ninepoint\noindent\qquad
+(\.{"Try\]to\]insert\]an\]instruction\]for\]me\](e.g.,\]%
+        \char`\`I\char`\\showlists\char`\'),"})
 
-\bugonpage B472, replacement for what used to be line 13 (12/20/02)
+\bugonpage B58, lines 2 and 3 of \S136 (10/11/20)
 
-\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}
+\tenpoint\noindent
+the values corresponding to `\.{\char`\\hbox\char`\{\char`\}}'.
+The \\{sub\_type} 
+field is set to \\{min\_quarterword}, for historic reasons that are no
+longer relevant.
 
-\bugonpage B505, line 19 (09/11/07)
+\bugonpage B88, line 16 (10/22/20)
 
-\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};
+\tenpoint\noindent
+The mode is temporarily set to zero while processing \.{\char`\\write} texts.
 
-\bugonpage B506, line 1 (10/13/03)
+\bugonpage B102, lines 3 and following of \S241 (12/11/20)
 
 \tenpoint\noindent
-{\bf 1237.\quad}Here we use the fact that the consecutive codes
-$\\{int\_val}\to\\{mu\_val}$ and
-$\\{assign\_int}\to$\cutpar
+information, something special
+is needed. The program here simply assumes that suitable values appear in
+the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and
+\\{sys\_year} (which are initialized to noon on 4 July 1776,
+in case the implementor is careless).
+\smallskip
+\ninepoint\noindent
+{\bf procedure} \\{fix\_date\_and\_time};\par
+\noindent\quad{\bf begin}
+$\\{sys\_time}\gets12\ast60$; \
+$\\{sys\_day}\gets4$; \
+$\\{sys\_month}\gets7$; \
+$\\{sys\_year}\gets1776$;\quad
+$\{\,$self-evident truths$\,\}$\par
+\noindent\quad$\\{time}\gets\\{sys\_time}$;\quad
+  $\{\,$minutes since midnight$\,\}$\par
+\noindent\quad$\\{day}\gets\\{sys\_day}$;\quad$\{\,$day of the month$\,\}$\par
+\noindent\quad$\\{month}\gets\\{sys\_month}$;\quad$\{\,$month of the year$\,\}$\par
+\noindent\quad$\\{year}\gets\\{sys\_year}$;\quad$\{\,$Anno Domini$\,\}$\par
+\noindent\quad{\bf end};
 
-\bugonpage B520, line 8 (06/25/04)
+\bugonpage B103, replacement for \S246 (12/11/20)
 
 \tenpoint\noindent
-says,
-for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
-month, and day\cutpar
+{\bf 246.}\quad Of course we had better declare a few more global variables,
+if the previous routines are going to work.
+\smallskip
+\ninepoint\noindent
+$\langle\,$Global variables {\sevenrm\kern.5em13}$\,\rangle+\equiv$\par
+\noindent\\{old\_setting}: $0\dts\\{max\_selector}$;\par
+\noindent\\{sys\_time}, \\{sys\_day}, \\{sys\_month}, \\{sys\_year}: \\{integer};
+\quad$\{\,$date and time supplied by external system$\,\}$
 
-\bugonpage B535, new line to follow line 11 (09/11/07)
+\goodbreak
+\bugonpage B122, lines 9 and 10 of \S291 (10/12/20)
 
-\ninepoint\noindent
-\qquad{\bf if\/} $\\{last\_glue}\ne\\{max\_halfword}$ {\bf then}
- \\{delete\_glue\_ref}(\\{last\_glue});
+\tenpoint\noindent\quad
+The enclosing \.{\char'173} and \.{\char'175} characters of a macro
+definition are omitted, but an output routine
+will be enclosed in braces.
 
-\bugonpage B578, new entry (06/04/06)
+\bugonpage B143, lines 2, 3, 4 become four lines (01/15/17)
 
-\eightpoint\noindent
-Trabb Pardo, Luis Isidoro, 2.
+\tenpoint\noindent
+routines that should be aborted, but we can sketch the
+ideas here:  For a runaway definition or a runaway balanced text,
+we will insert a right brace; for a
+runaway preamble, we will insert a special \.{\char`\\cr} token and a right
+brace; and for a runaway argument, we will set \\{long\_state} to
+\\{outer\_call} and insert \.{\char`\\par}.
 
-
% 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 B188, line 8 (04/02/17)
 
-\bugonpage Cxi, line 4 (05/20/07)
+\ninepoint\noindent
+{\bf function} \\{str\_toks}$(b:\\{pool\_pointer})$: \\{pointer};\quad
+ $\{\,$converts \\{str\_pool}$[b\dts\\{pool\_ptr}-1]$ to a token list$\,\}$
 
-\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 B192, line 17 (10/22/20)
 
-\bugonpage C11, line 11 (10/11/01)
+\ninepoint\noindent\quad
+{\bf label} \\{found}, \\{continue}, \\{done}, \\{done1}, \\{done2};
 
-\noindent
-the area below the bar to the area above it equal to
-$(\sqrt5+1)/2\approx1.61803$, the\cutpar
+\bugonpage B192, line 3 of \S474 (10/22/20)
 
-\bugonpage C29, illustration for exercise 4.11 (09/09/01)
+\ninepoint\noindent\qquad
+{\bf begin} \\{continue}: \\{get\_token};\quad$\{\,$set \\{cur\_cmd},
+  \\{cur\_chr}, \\{cur\_tok}$\,\}$
 
-\noindent
-[points 2 and 5 should not be labeled twice]
+\bugonpage B193, line 4 of \S476 (05/20/20)
 
-\bugonpage C32, line 5 from the bottom (01/04/14)
+\ninepoint\noindent\quad
+{\bf if} $\\{cur\_tok}<\\{left\_brace\_limit}$ {\bf then}
 
-\noindent
-\hbox to\parindent{\hfil\sevenrm20\ \ }%
-|  penpos1(stem,15); penpos2(.9stem,12); penpos3(stem,10);|
+\bugonpage B193, line 10 of \S476 becomes two lines (10/22/20)
 
-\bugonpage C36, line 5 from the bottom (01/05/14)
+\ninepoint\noindent\qquad
+\\{help2}(\.{"I\char`\'m\]going\]to\]ignore\]the\]\#\]sign\]you\]just\]used,"})\par
+\noindent\qquad
+(\.{"as\]well\]as\]the\]token\]that\]followed\]it."});
+\\{error}; {\bf goto} \\{continue};
 
-\noindent
-line~12, where it
-says `|x1l|', not `|x11|' or~`|xll|'); be sure to distinguish between\cutpar
+\bugonpage B196, line 5 from the bottom (02/17/18)
 
-\bugonpage C55, lines 5 and 6 (01/05/14)
+\ninepoint\noindent\qquad\quad
+\\{help1}(\.{"This\]\char`\\read\]has\]unbalanced\]braces."});
+$\\{align\_state}\gets1000000$;
+$\\{limit}\gets0$;
+\\{error};
 
-\ninepoint\noindent
-suffixed or subscripted.
-Thus, the syntax rule for \<variable>
-should actually be replaced by a slightly more complicated pair of rules:
+\bugonpage B199, lines 1--3 of \S494 (10/25/20)
 
+\tenpoint\noindent
+{\bf 494.} \ \ Here is a procedure that ignores text until coming to an \.{\char`\\or},
+\.{\char`\\else}, or \.{\char`\\fi} at the current level
+of $\.{\char`\\if}\ldots\.{\char`\\fi}$
+nesting. After it has acted, \\{cur\_chr} will indicate the token that
+was found, but \\{cur\_tok} will not be set (because this makes the
+procedure run faster).
 
-\bugonpage C129, line 16 (02/21/08)
 
-\ninepoint\beginsyntax
-<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
-\endsyntax
+\bugonpage B214, lines 2--6 of \S536 (12/11/20)
 
-\bugonpage C130, lines 13--15 from the bottom (09/13/03)
+\ninepoint\noindent\quad
+{\bf begin} \\{wlog}(\\{banner});
+\\{slow\_print}(\\{format\_ident});
+\\{print}(\.{"\]\]"});
+\\{print\_int}(\\{sys\_day});
+\\{print\_char}(\.{"\]"});\par
+\noindent\quad
+$\\{months}\gets\.{\char`\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC\char`\'}$;\par
+\noindent\quad
+{\bf for} $k\gets3\ast\\{sys\_month}-2$ {\bf to} $3\ast\\{sys\_month}$
+{\bf do} \\{wlog}(\\{months}[$k$]);\par
+\noindent\quad
+\\{print\_char}(\.{"\]"});
+\\{print\_int}(\\{sys\_year});
+\\{print\_char}(\.{"\]"});
+\\{print\_two}(\\{sys\_time} {\bf div} 60);
+\\{print\_char}(\.{":"});\par
+\noindent\quad
+\\{print\_two}(\\{sys\_time} {\bf mod} 60);
 
-\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 B214, line 2 of \S537 becomes two lines (10/29/20)
 
-\bugonpage C137, lines 5--7 from the bottom (02/21/08)
+\tenpoint\noindent
+command is being processed.
+Beware: For historic reasons, this code foolishly conserves a tiny bit
+of string pool space; but that can confuse the interactive `\.E' option.
 
-\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 B214, bottom line (10/29/20)
 
-\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
+{\bf if} $\\{name}=\\{str\_ptr}-1$ {\bf then}
+\ $\{\,$conserve string pool space (but see note above)$\,\}$
 
-\bugonpage C156, line 15 from the bottom (09/09/01)
+\bugonpage B219, lines 18--20 of \S545 (09/19/19)
 
-\ninepoint\noindent
-be the values they had upon entry to the group.)
+\tenpoint\noindent
+so-called boundary character of this font;
+the value of \\{next\_char} need not lie between \\{bc} and~\\{ec}.
+If the very last instruction of the \\{lig\_kern} array has $\\{skip%
+\_byte}=255$,
+there is a special ligature/kerning program for a boundary character at the
+left, beginning at location $256\ast\\{op\_byte}+$\cutpar
 
-\bugonpage C159, lines 12--15 (12/01/06)
+\bugonpage B282, line 1 {(and change lines 20--23 accordingly)} (04/02/17)
 
-\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.
+\tenpoint\noindent
+{\bf 682.} Each portion of a formula is classified as Ord, Op, Bin, Rel, Open,
+Close, Punct, or Inner, for\cutpar
 
-\bugonpage C171, line 16 from the bottom (06/18/02)
+\bugonpage B299, line 4 from the bottom of \S722 (10/06/20)
 
-\tenpoint
-\<loop>\is\<loop header>|:|\<loop text> {\tt endfor}
+\ninepoint\noindent\qquad\quad
+{\bf begin} \\{char\_warning}(\\{cur\_f}, \\{qo}(\\{cur\_c}));
+$\\{math\_type}(a)\gets\\{empty}$;
+$\\{cur\_i}\gets\\{null\_character}$;
 
-\bugonpage C179, line 7 from the bottom (09/09/01)
+\bugonpage B318, lines 16 and 17 of \S761 become one (03/25/19)
 
 \ninepoint\noindent
-next time \MF\ gets to the end of an input line, it will stop reading
-from the\cutpar
+\\{fraction\_noad}: $s\gets\\{fraction\_noad\_size}$;
 
-\bugonpage C180, lines 14--16 (04/25/03)
+\bugonpage B333, line 5 of \S793 becomes two lines (01/10/20)
 
-\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.
+\ninepoint\noindent\quad
+$\\{cur\_loop}\gets\\{link}(\\{cur\_loop})$;
+$\\{link}(p)\gets\\{new\_glue}(\\{glue\_ptr}(\\{cur\_loop}))$;\par
+\noindent\quad
+$\\{subtype}(\\{link}(p))\gets\\{tab\_skip\_code}+1$;
 
-\bugonpage C180, new line to be inserted 4 from the bottom (06/25/04)
+\bugonpage B348, insert a new line after line 5 of \S826 (01/15/17)
 
-\ninepoint\item\bull
-When \MF\ is reading the symbolic tokens to be saved by {\bf save}.
+\ninepoint\noindent\qquad
+{\bf stat if} $\\{tracing\_paragraphs}>0$ {\bf then}
+\\{end\_diagnostic}(\\{true}); \ {\bf tats}
 
-\bugonpage C203, line 12 from the bottom (04/25/03)
+\bugonpage B348, insert a new line to be the seventh line after the previous change (01/15/17)
 
-\ninepoint\hbox to 237pt{point~3 at the right of the triangle
-might digitize into a}
+\ninepoint\noindent\qquad
+{\bf stat if} $\\{tracing\_paragraphs}>0$ {\bf then}
+\\{begin\_diagnostic}; \ {\bf tats}
 
-\bugonpage C213, line 26 (02/21/08)
+\bugonpage B377, line 6 (10/31/20)
 
-\ninepoint\beginsyntax
-<path subexpression>\is<path expression not ending with direction specifier>\kern-5pt\null
-\endsyntax
+\ninepoint\noindent
+\\{hn}: $0\dts64$; \ $\{\,$the number of positions occupied in \\{hc};
+                       not always a \\{small\_number}$\,\}$
 
-\bugonpage C226, line 23 (02/21/08)
+\bugonpage B417, mini-index (04/02/17)
 
-\ninepoint\noindent following nineteen things will be mentioned:
+\eightpoint\noindent
+The entry `\\{height}, \S981.' here and on many later
+odd-numbered pages should be `$\\{height}=\rm macro$, \S135.'
 
-\bugonpage C226, new line to be second from the bottom (02/21/08)
+\bugonpage B522, line 3 of \S1306. (10/25/20)
 
-\ninepoint\indent|independent variables|\qquad(distinct numeric variables)
+\tenpoint\noindent
+to be in the range $a\le x\le b$.
+System error messages should be suppressed when undumping.
 
-\bugonpage C236, line 7 from the bottom (01/05/14)
+\bugonpage B533, lines 5--8 of \S1333. (10/15/20)
 
-\ninepoint\noindent
-\hbox to\parindent{\hss\bf 7.4.\enspace}False.
-After `|newinternal x;|' you can't say `|x|\<tag>' in a \<suffix list>.
+\tenpoint\noindent
+loop.
+(Actually there's one way to get error messages, via \\{prepare\_mag};
+but that can't cause infinite recursion.)\par
+\noindent\quad
+If \\{final\_cleanup} is bypassed, this program doesn't bother to
+close the input files that may still be open.
 
-\bugonpage C246, line 12 (02/21/08)
+\bugonpage B533, line 12 of \S1333. (11/29/20)
 
-\ninepoint\noindent
-is performed whenever \MF\ uses the last two alternatives
-in the definition\cutpar
+\ninepoint\noindent\quad
+{\bf begin} $\langle\,$Finish the extensions{\sevenrm\kern.5em1378}$\,\rangle$;
+$\\{new\_line\_char}\gets-1$;
 
-\bugonpage C250, lines 13 and 14 (02/19/08)
+\bugonpage B534, line 6 of \S1335. (11/29/20)
 
-\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.)
+\ninepoint\noindent\quad
+{\bf begin} $c\gets\\{cur\_chr}$;
+{\bf if} $c\ne1$ {\bf then} $\\{new\_line\_char}\gets-1$;
 
-\bugonpage C250, line 12 from the bottom (04/25/03)
+\bugonpage B537, line 18 of \S1338 becomes two lines (10/05/20)
 
-\ninepoint\noindent
-following \<boolean primary>.)
+\ninepoint\noindent\quad
+{\bf begin} \\{clear\_terminal};\par
+\noindent\quad
+{\bf loop}
 
-\bugonpage C286, line 25 (09/09/01)
+\bugonpage B537, lines 11 and 12 from the bottom of \S1338
+  become three lines (04/02/17)
 
-\ninepoint\noindent
-problem; it would simply have put |ENDFOR| into the
-replacement text of |asts|, because\cutpar
+\ninepoint\noindent\qquad\qquad
+{\bf begin goto} \\{breakpoint};\par
+\noindent\qquad\qquad\quad$\{\,$go to every declared label at least once$\,\}$\par
+\noindent\qquad\quad\\{breakpoint}: $m\gets0$;
+ \.{@\char`\{\char`\'BREAKPOINT\char`\'@\char`\}}
 
-\bugonpage C289, line 7 (09/09/01)
+\bugonpage B600, the bottom five lines (05/14/19)
 
-\vskip-6pt\ninepoint\begintt
-if if pair x: x>(0,0) else: false fi: A else: B fi.
-\endtt
+\tenpoint\noindent
+they occupy in a typical production system
+(executable code size for dark blocks, global data size for light blocks).
+In this way the chart indicates a total of about
+$12\times22=264${\ninerm K} bytes of memory, plus
+$12\times10=120${\ninerm K} for the
+dynamic memory region not shown explicitly. The dynamic memory
+is often considerably larger in practice, because it is desirable to
+accommodate large macro packages and large pages.
 
-\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
+
% volume C
+\hsize=29pc
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}}
+\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}}
+\def\tension{\mathop{\rm tension}}
+\def\controls{\mathop{\rm controls}}
+\def\and{\,{\rm and}\,}
 
-\bugonpage C293, line 5 from the bottom (04/25/03)
+\bugonpage Cx, line 4 from the bottom (06/14/20)
 
-\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
+\count255=1
+\def\diamondleaders{\global\advance\count255 by 1
+  \ifodd\count255 \kern-10pt \fi
+  \leaders\hbox to 20pt{\ifodd\count255 \kern13pt \else\kern3pt \fi
+    .\hss}}
+\line{\strut
+    \hbox to\parindent{\bf\hbox to 1em{\hss20}\hss}%
+    \rm More About Macros\diamondleaders\hfil\hbox to 2em{\hss175}}
 
-\bugonpage C315, line 15 from the bottom (04/25/03)
+\bugonpage C39, lines 10 and 11 become three lines (07/04/20)
 
-\ninepoint\noindent
-`b' was shipped out.) \ The second letter,~`o', is placed
-in a second little box adjacent\cutpar
+\tenpoint\noindent
+that has already been designed. All you'll see is
+`|(io.mf| |The| |letter| |O| |[79])|' or possibly only `|(io.mf| |[79])|',
+followed by~`|*|'. Now the fun starts: You should type
 
-\bugonpage C325, bottom line (02/29/08)
+\bugonpage C68, lines 9, 28, 35, 36, 38 (11/11/17)
 
-\rightline{\eightss--- CAROLUS LINN\AE US, 
- {\eightssi Philosophia Botanica\/}\enspace(1751)}
+\ninepoint
+\halign{\indent\hbox to 160pt{\tt#\hfil}&\tt#\hfil\cr
+uniformdeviate -100&-36.1628\cr
+z slanted 1/6&(0.16667y+x,y)\cr
+(a,b)zscaled(3,4)&(-4b+3a,3b+4a)\cr
+(a,b)zscaled dir 30&(-0.5b+0.86603a,0.86603b+0.5a)\cr
+(a,b)dotprod(3,4)&4b+3a\cr
+}
 
-\bugonpage C332, line 4 from the bottom (04/25/03)
+\bugonpage C72, lines 4--18 (07/16/20)
 
 \ninepoint\noindent
-(The proofsheet resolution will be 50 pixels per inch, because {\it cheapo\/}
-has 200 pixels per\cutpar
+\beginsyntax
+<numeric atom>\is<numeric variable>
+ \alt<numeric token primary>
+ \alt[(]<numeric expression>[)]
+ \alt[normaldeviate]
+ \alt[length]<string primary>
+ \alt[length]<path primary>
+ \alt[length]<pair primary>
+ \alt[angle]<pair primary>
+ \alt[xpart]<pair primary>
+ \alt[ypart]<pair primary>
+ \alt<numeric operator><numeric primary>
+<numeric token primary>\is<numeric token>[/]<numeric token>
+ \alt<numeric token not followed by %
+  `{\tt/}$\thinspace\langle$numeric token$\rangle$'\thinspace>
+<numeric primary>\is<numeric atom not followed by {[\char'133]<expression>[,]}>
+ \alt<numeric atom>[\char'133]<numeric expression>%
+   [,]<numeric expression>[\char'135]
+\endsyntax
 
-\bugonpage C346, left column (06/18/02)
+\bugonpage C76, lines  8--16 from the bottom (11/11/17)
 
-\eightpoint\noindent
-\llap{*}|:|, 169, 171, 317--319.
+\newdimen\longesteq
+\setbox0=\hbox{\indent$z_{12}-z_{11}=z_{14}-z_{13}$\quad}
+\longesteq=\wd0
+\tenpoint\noindent \hangindent\longesteq \hangafter0
+tom edge of the type.
+\ (With plain \MF's {\bf beginchar} each
+character has a ``bounding box'' that runs from $(0,h)$
+at the upper left and $(w,h)$ at the upper right to $(0,-d)$ and~$(w,-d)$
+at the lower left and lower right; variable $d$ represents the depth of
+the type. The values of $w$, $h$, and~$d$ might change from character to
+character, since the individual pieces of type need not have the same size
+in a computer-produced font.)
 
-\bugonpage C346, right column (07/09/01)
+\bugonpage C80, line 14 (06/13/20)
 
-\eightpoint\noindent
-\llap{*}|angle|, {\it29}, {\it67}, $\underline{72}$, {\it107},
-{\it135}, 211, {\it238}.
+\tenpoint\indent
+\\{penpos}\<suffix>(\<unknown>,\thinspace\<known>).
 
-\bugonpage C346, right column (10/04/04)
+\bugonpage C83, line 16 (06/13/20)
 
-\eightpoint\noindent
-arccosine, arcsine, arctangent, {\sl see\/} |angle|.
+\ninepoint\indent
+|### 0.5a=-c-0.5b+1.5|
 
-\bugonpage C351, right column (02/21/08)
+\bugonpage C83, line 19 (06/13/20)
 
-\eightpoint\noindent
-independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226.
+\ninepoint\noindent
+the only
+dependent variable is now $d$, which equals $0.5c+0.75b+0.75$. \ (This is\cutpar
 
-\bugonpage C352, right column (02/29/08)
+\bugonpage C96, line 13 from the bottom (10/31/20)
 
-\eightpoint\noindent
-Linn\'e, Carl von (= Linn\ae us, Carolus), 325.
+\tenpoint\noindent
+illustrates the
+use of $u\0$, $s\0$, $\\{ht}\0$, \\{logo\_pen}, \\{leftstemloc}, $o$,
+\\{xgap}, and \\{barheight}:
 
-\bugonpage C355, right column (02/29/08)
+\bugonpage C106, lines 19--21 (07/03/20)
 
-\eightpoint\noindent
-\llap{*}|save|, $\underline{155}$--$\underline{156}$, {\it160}, 173,
-  {\it178}, 180, 218,\par
-\noindent\qquad{\it236}, {\it244}, {\it296}, 299.
+\ninepoint\noindent
+pixels. \ (Some typesetting
+systems use both of these device-dependent amounts to alter their current
+position on a page, just after typesetting each character. Other systems,
+like typical |dvi| software associated with \TeX, assume that $\\{chardy}=0$
+but use \\{chardx}\cutpar
 
-
% Volume D
-\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
-\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+\bugonpage C113, lines 5--11 from the bottom (07/20/20)
 
-\bugonpage Dv, page number change (12/27/11)
+\def\cycle{\hbox{\rm cycle}}
+\ninepoint\noindent
+\begindisplay
+$s\0:=5\\{pt}\0$; \ {\bf define\_pixels}$(s)$; \ \%  side of the square\cr
+$z_1=(0,0)$; \ $z_2=(s,0)$; \ $z_3=(0,s)$; \ $z_4=(s,s)$;\cr
+{\bf for} $k=1$ {\bf upto} 4:
+ $z[k+4]=z[k]+({2\over3}s,{1\over3}s)$; \ {\bf endfor}\cr
+{\bf pickup pencircle} scaled $.4\\{pt}$; \
+{\bf draw} $z_5\dashto z_6\dashto z_8\dashto z_7\dashto \cycle$;\cr
+{\bf pickup pencircle} scaled $1.6\\{pt}$; \
+{\bf erase draw} $z_2\dashto z_4\dashto z_3$;\cr
+{\bf pickup pencircle} scaled $.4\\{pt}$; \
+{\bf draw} $z_1\dashto z_2\dashto z_4\dashto z_3\dashto \cycle$;\cr
+{\bf for} $k=1$ {\bf upto} 4:
+ {\bf draw} $z[k]\dashto z[k+4]$; \ {\bf endfor}.\cr
+\enddisplay
 
-\eightpoint\noindent[For consistency with Volumes A, C, and E, the
-preface now begins on page v instead of page~vii. This change was first
-made in the sixth printing.]
+\bugonpage C114, line 7 (07/20/20)
 
-\bugonpage Dv {(formerly Dvii)}, bottom two lines (01/06/14)
+\ninepoint\indent
+{\bf for} $k=0$ {\bf upto} 4: \ $z[k]=\\{center}+(\\{radius},0)$
+  rotated$(90+{360\over5}k)$; \ {\bf endfor}
 
-\eightpoint\noindent
-corporates all of those changes.
-I~now believe that the final bug was discovered on 03~June 2008,
-and removed in version 2.7182818.
-The finder's fee has converged to \$327.68.
+\bugonpage C128, lines 13 and 14 (06/13/20)
 
-\bugonpage Dxiii {(formerly Dxv)}, line $-7$ (12/27/11)
-
 \ninepoint\noindent
-Format specs have no effect on the corresponding Pascal program, but they
-do influence\cutpar
+changed. Plain \MF\ has a {\bf tensepath} operation
+that does this. For example, {\bf tensepath}~\\{unitsquare}~$=$
+$(0,0)\ddashto(1,0)\ddashto(1,1)\ddashto(0,1)\ddashto\cycle$.
 
-\hsize=35pc
-\parindent=1em
+\bugonpage C136, lines 18 and 19 (07/17/20)
 
-\bugonpage D2, line $-17$ (01/03/14)
-
 \ninepoint\noindent
-{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
-{\tt This\]is\]METAFONT,\]Version\]2.7182818\char'23}\quad
-$\{\,$printed when \MF\ starts$\,\}$
+only
+about 0.28 with respect to the initial and final directions; since \MF\ insists
+that tensions be at least~0.75, this anomalous path could never have arisen
+if the control\cutpar
 
-\bugonpage D2, lines 4 and 5 from the bottom (12/23/02)
+\bugonpage C155, line 7 (10/07/20)
 
-\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.)
+\tenpoint\indent
+\<program>\is\<statement list>\<statement>\thinspace|end|
 
-\bugonpage D16, new paragraph to follow line 26 (06/25/04)
+\bugonpage C160, lines 7--9 (06/25/20)
 
-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.)
+\ninepoint\noindent
+might produce a transcript
+that includes the following diagnostic information:
+\begintt
+rotatedaround(EXPR0)(EXPR1)->
+ shifted-(EXPR0)rotated(EXPR1)shifted(EXPR0)
+\endtt
 
-\bugonpage D22, line 26 (09/11/07)
+\bugonpage C165, lines 5--7 from the bottom (11/11/17)
 
-\noindent
-ASCII codes $[\Oct{60}\to\Oct{71},%
-\Oct{136},\Oct{141}\to\Oct{146}]$
-must be printable.
+\ninepoint\noindent
+(i.e., parameters in parentheses),
+then we name zero or one or two undelimited parameters.
+Then comes an `$=$'~sign,
+followed by the replacement text, and {\bf enddef}. The `$=$'~sign might also
+be~`$:=$'\thinspace; both mean the same thing.
 
-\bugonpage D31, line 29 (06/25/04)
+\bugonpage C171, lines 18--20 (08/16/20)
 
-\noindent
-This is the only nontrivial {\bf goto}  statement in the
-whole program. It is used when there is no\cutpar
+\ninepoint\indent
+Chapter~14's syntax rules for
+\<path primary>, via \<pair primary>.
+A pair expression is not considered to be
+of type {\bf path} unless the path interpretation is the only~possibility.
 
-\bugonpage D42, replacement for lines 8--13 (12/23/02)
+\bugonpage C176, line 7 from the bottom (07/09/20)
 
-\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.
+\ninepoint\indent
+\quad {\bf if} |@#|$(\\{x\_})\colon\ \\{tx\_} \ \hbox{\bf else}\colon\
+ \\{fx\_}\  \hbox{\bf fi}$
+   :=\ \\{x\_}\thinspace; {\bf endfor}
 
-\bugonpage D43, line 20 (12/23/02)
+\bugonpage C180, line 3 from the bottom (06/24/20)
 
-\tenpoint\noindent
-language or 64-bit substitute is advisable.
+\ninepoint\indent
+`$=$' or `$:=$' following {\bf let}.
 
-\bugonpage D44, lines 24--26 (12/23/02)
+\bugonpage C187, line11 from the bottom (07/12/20)
 
-\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.
+\ninepoint\indent\qquad
+\alt|substring|\thinspace\<pair expression>\thinspace|of|\thinspace
+ \<string primary>
 
-\bugonpage D58, line 16 from the bottom (06/25/04)
+\bugonpage C189, line 14 (06/13/20)
 
 \ninepoint\noindent
-\hskip5em{\bf if\/} $\\{j\_random}=0$ {\bf then} \\{new\_randoms}
- {\bf else} \\{decr}(\\{j\_random})
+`|! |' and followed
+by~`|.|', followed by lines of context as in \MF's normal error\cutpar
 
-\bugonpage D63, line 21 (06/25/04)
+\bugonpage C200, line 12 from the bottom (08/27/20)
 
-Locations of \\{mem} between \\{mem\_min} and \\{mem\_top} may be dumped as
-part
-of preloaded base\cutpar
+\ninepoint\indent
+$y_1=y_2=\\{good.y}(.5[-d,h]+1.1\\{pt})$;
 
-\bugonpage D75, line 13 (06/25/04)
+\bugonpage C202, line 17 from the bottom (06/13/20)
 
 \ninepoint\noindent
-\quad{\bf define} $\\{fi\_or\_else}=2$\quad$\{\,$delimiters for conditionals
-  {\bf elseif\/}, {\bf else}, {\bf fi})$\,\}$
+command,
+and it works only when the \\{penpos} angle is~0. If the \\{penpos} command
+is\cutpar
 
-\bugonpage D76, line 5 (06/25/04)
+\bugonpage C210, bottom eight lines, and top ten lines of page C211 (07/16/20)
 
 \ninepoint\noindent
-\quad{\bf define} $\\{type\_name}=30$\quad$\{\,$declare a type
-  ({\bf numeric}, {\bf pair}, etc.)$\,\}$
+\beginsyntax
+<numeric atom>\is<numeric variable>\alt<numeric argument>
+ \alt<numeric token primary>
+ \alt<internal quantity>
+ \alt[normaldeviate]
+ \alt[(]<numeric expression>[)]
+ \alt[begingroup]<statement list><numeric expression>[endgroup]
+ \alt[length]<numeric primary>\alt[length]<pair primary>
+ \alt[length]<path primary>\alt[length]<string primary>
+ \alt[ASCII]<string primary>\alt[oct]<string primary>\alt[hex]<string primary>
+ \alt<pair part><pair primary>\alt<transform part><transform primary>
+ \alt[angle]<pair primary>
+ \alt[turningnumber]<path primary>\alt[totalweight]<picture primary>
+ \alt<numeric operator><numeric primary>
+ \alt[directiontime]<pair expression>[of]<path primary>
+<numeric token primary>\is<numeric token>[/]<numeric token>
+ \alt<numeric token not followed by %
+  `{\tt/}$\thinspace\langle$numeric token$\rangle$'\thinspace>
+<numeric primary>\is<numeric atom not followed by {[\char'133]<expression>[,]}>
+ \alt<numeric atom>[\char'133]<numeric expression>%
+   [,]<numeric expression>[\char'135]
+\endsyntax
 
-\bugonpage D77, line 16 (06/25/04)
+\bugonpage C214, line 6 becomes two lines (07/17/20)
 
 \ninepoint\noindent
-\quad{\bf define} $\\{lig\_kern\_token}=76$\quad$\{\,$the operators
-  `{\bf kern}' and `\.{=:}' and `\.{=:\char'174}', etc.$\,\}$
+\beginsyntax
+<future pen primary>\is<future pen argument>
+ \alt[pencircle]
+\endsyntax
 
-\bugonpage D98, bottom two lines (06/25/04)
+\bugonpage C214, line 6 from the bottom (07/12/20)
 
-\noindent
-They consist of zero or more parameter tokens followed
-by a code for the type of macro.
+\ninepoint\noindent
+\beginsyntax
+ \alt[substring]<pair expression>[of]<string primary>
+\endsyntax
 
-\bugonpage D101, line 3 (06/25/04)
+\bugonpage C217, lines 20--25 (10/07/20)
 
-\noindent
-\MF\ user assigns a type to a variable like \.{x20a.b} by saying, for
-example, `\.{boolean} \.{x[]a.b}'.
+\ninepoint\noindent
+\beginsyntax
+<program>\is<statement list><non-title statement>[end]
+ \alt<statement list><non-title statement>[dump]
+<statement list>\is<empty>\alt<statement>[;]<statement list>
+<statement>\is<empty>\alt<title>
+ \alt<equation>\alt<assignment>\alt<declaration>
+ \alt<definition>\alt<compound>\alt<command>
+\endsyntax
 
-\bugonpage D102, lines 10--16 (06/25/04)
+\bugonpage C219, line 25 (05/25/20)
 
-\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).
+\ninepoint\noindent
+to see which of its subscripts and suffixes have occurred.
+For example, if you're\cutpar
 
-\bugonpage D102, lines 7 and 8 from the bottom (06/25/04)
+\bugonpage C224, lines 7--9 from the bottom (12/21/18)
 
-\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
+\tenpoint\indent
+|y4r=-0.9848thinn+259.00049|\par
+|x4r=-0.08682thinn+144|\par
+|y4=-0.4924thinn+259.00049|
 
-\bugonpage D103, line 6 (06/25/04)
+\bugonpage C226, lines 9 and 10 (11/01/20)
 
-\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$.
+\ninepoint\noindent
+This means that the preloaded base you have specified cannot be used,
+because it is corrupted or was prepared for a different version of
+\MF\kern-.03em.
 
-\bugonpage D114, line 12 (06/25/04)
+\bugonpage C228, line 27 (06/19/20)
 
-\noindent
-\qquad Such save stack entries are generated by \&{save} commands.
+\ninepoint\indent
+|l.94 endfor|
 
-\bugonpage D120, line 3 (06/25/04)
+\bugonpage C228, line 4 from the bottom (07/12/20)
 
 \ninepoint\noindent
-[delete the line `The code here \dots', since the
- code {\it doesn't\/} use the stated fact]
+might want to review now.) \
+You probably also have a |proof| mode diagram:
 
-\bugonpage D126, line 10 (06/25/04)
+\bugonpage C234, line 4 of answer 4.6 (07/20/20)
 
-\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
+\ninepoint\indent
+{\bf for} $k=1$ {\bf upto} 6: $z[k]'=.2[z[k],z_0]$; {\bf endfor}
 
-\bugonpage D138, line 11 from the bottom (10/26/06)
+\bugonpage C241, line 2 (11/11/17)
 
-\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}$.
+\ninepoint\indent
+|\mode=cheapo; input cheaplogo10|
 
-\bugonpage D142, line 3 (06/25/04)
+\bugonpage C242, line 11 of answer 13.7 (07/20/20)
 
-\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
+\ninepoint\indent
+{\bf for} $k=1$ {\bf upto} 4:
+ $z[k+4]=z[k]+({2\over3}s,{1\over3}s)$; \ {\bf endfor}
 
-\bugonpage D142, line 8 (10/26/06)
+\bugonpage C243, lines 7 and 8 (11/08/15)
 
-\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
+\ninepoint\indent
+\indent {\bf draw} subpath$(k,k+1)$ of \\{star}; {\bf cullit};\par\indent
+\indent {\bf undraw} subpath$(k+2,k+3)$ of \\{star} {\bf withpen}
+  \\{eraser}; {\bf cullit};
 
-\bugonpage D142, lines 21--23 (06/25/04)
+\bugonpage C243, line 3 of answer 13.11 (06/17/20)
 
-\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)$.)
+\ninepoint\indent
+{\bf def overdraw expr} $c$ = {\bf begingroup save} \\{region};
 
-\bugonpage D177, line 18 (06/25/04)
+\bugonpage C243, lines 12--16 of answer 13.11 (05/24/20)
 
 \ninepoint\noindent
-$\\{cur\_x},\\{cur\_y}$: \\{scaled};\quad$\{\,$outputs of \\{skew},
- \\{unskew}, and a few other routines$\,\}$
+\begindisplay
+{\bf beginchar}$(\hbox{\tt"M"},1.25\\{in}\0,.5\\{in}\0,0)$; \
+ {\bf pickup pencircle} scaled .4\\{pt};\cr
+$z_1=(20,-13)$; \ $z_2=(30,-6)$; \ $z_3=(20,1)$; \ $z_4=(4,-7)$;\cr
+\indent $z_5=(-12,-13)$; \ $z_6=(-24,-4)$; \ $z_7=(-15,6)$;\cr
+{\bf path} $M$; $M=(\\{origin}\dts
+ z_1\dts z_2\dts z_3\dts z_4\dts z_5\dts z_6\dts z_7\dts$\cr
+\indent$\\{origin}\dts -z_7\dts -z_6\dts -z_5\dts -z_4\dts
+  -z_3\dts -z_2\dts -z_1\dts\cycle)$\cr
+\enddisplay
 
-\bugonpage D182, lines 27--29 (06/25/04)
+\bugonpage C246, line 2 of answer 14.13 (08/16/20)
 
-\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$.
+\ninepoint\noindent
+path $z_0\dashto z_1$ is equivalent to `$z_0\dts
+\controls1/3[z_0,z_1]\and2/3[z_0,z_1]\dts z_1$', and the\cutpar
 
-\bugonpage D184, line 18 (12/21/02)
+\bugonpage C247, line 1 of answer 15.5 (06/13/20)
 
 \ninepoint\noindent
-\qquad\\{chopped}: \\{integer};\quad
-$\{\,$positive if data truncated, negative if data dangerously large$\,\}$
+\quad{\bf 15.5.}\enspace
+{\bf beginchar}$(126,25u\0,\\{h\_height}\0+\\{border}\0,0)$; \
+|"Dangerous left bend"|;
 
-\bugonpage D184, line 25 (12/21/02)
+\bugonpage C247, replacement for answer 15.7 (07/21/20)
 
 \ninepoint\noindent
-\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>0)\land(\\{chopped}=0)$
- {\bf then} \\{xy\_round};
+\quad{\bf 15.7.}\enspace
+Replace lines 10 and 11 by
+\begindisplay
+{\bf pickup pencircle} scaled 3/4\\{pt} yscaled 1/3 rotated $-60$;\cr
+{\bf draw} ($z_1\ldots p$) transformed $t$;\cr
+{\bf addto} \\{currentpicture} {\bf also} \\{currentpicture}\cr
+\qquad rotatedaround$\bigl((.5w,.5h)$ yscaled \\{aspect\_ratio}$,-180\bigr)$;\cr
+\enddisplay
 
-\bugonpage D184, line 27 (12/21/02)
+\bugonpage C249, line 1 of answer 18.9 (08/02/20)
 
 \ninepoint\noindent
-\quad{\bf if\/} $(\\{internal}[\\{autorounding}]>\\{unity})\land
- (\\{chopped}=0)$  {\bf then} \\{diag\_round};
+\quad{\bf 18.9.}\enspace
+{\bf beginchar}\kern1pt(|"H"|$,13u\0,"ht"\0,0)$; \
+ {\bf pickup} \\{broad\_pen};
 
-\bugonpage D184, line 32 (12/21/02)
+\bugonpage C249, line 11 of answer 18.9 (08/02/20)
 
-\ninepoint\noindent
-\qquad{\bf if\/} $(\\{internal}[\\{autorounding}]\le0)\lor(\\{chopped}\ne0)$
- {\bf then} \\{print\_spec}({\tt\char`",\]after\]subdivision\char`"})
+\ninepoint\indent
+{\bf filldraw} $\\{bot\_serif\_edge}_4$
 
-\bugonpage D185, lines 15--19 (12/21/02)
+\bugonpage C250, line 4 of answer 19.1 (04/19/20)
 
 \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$
+because it saves a wee bit of time and because
+`;'\ often belongs before {\bf endfor}.
 
-\bugonpage D185, old line 22 (12/21/02)
+\bugonpage C250, replacement for answer 19.3 (07/12/20)
 
 \ninepoint\noindent
-\quad$p\gets\\{cur\_spec}$; $k\gets1$; $\\{chopped}\gets0$;
- $\\{dmax}\gets\\{half}(\\{max\_allowed})$;
+\quad{\bf 19.3.}\enspace
+Yes, if and only if $n-{1\over2}$ is an even integer.
+\ (Because ambiguous values are rounded upwards.)
 
-\bugonpage D185, old line 28 (12/21/02)
+\bugonpage C251, replacement for answer 22.1 (07/12/20)
 
 \ninepoint\noindent
-\quad{\bf if\/} $\\{chopped}>0$ {\bf then}
+\quad{\bf 22.1}\enspace
+(a) If and only if $n$ is an integer between 0 and 255.
+(b) If and only if $s$ is a string of length~1.
 
-\bugonpage D196, lines 3--8 (06/25/04)
+\bugonpage C254, lines 10--13 from the bottom become five lines (06/26/20)
 
-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}$.
+\ninepoint\noindent
+\begintt
+? H
+I found no right delimiter to match a left one. So I've
+put one in, behind the scenes; this may fix the problem.
+|null
+?
+\endtt
 
-\bugonpage D196, lines 15 and 16 (06/25/04)
+\bugonpage C260, the ``line'' after line 3 (06/14/20)
 
-\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
+\def\bb{$\,\left\{\vcenter\bgroup\halign\bgroup\hfil##\hfil\cr}
+\def\ee{\crcr\egroup\egroup\right\}\,$}
+\tenpoint\noindent
+\bb|font_size|\cr|font_slant|\cr|font_normal_space|\cr
+ |font_normal_stretch|\cr|font_normal_shrink|\cr|font_x_height|\cr
+ |font_quad|\cr|font_extra_space|\ee
+\bb|=|\cr\noalign{\kern-2pt}|:=|\cr\noalign{\kern-2pt}\<empty>\ee
+\<numeric$\0$>; \
+\bb|ligtable|\<ligs/kerns>\cr|charlist|\<codes>\cr|extensible|\<codes>\cr
+ |fontdimen|\<info>\cr|headerbyte|\<info>\ee;\kern-10pt
 
-\bugonpage D200, line 4 (06/25/04)
+\bugonpage C261, lines 16 and 17 from the bottom (06/14/20)
 
-\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.]
+\tenpoint\noindent
+\bb|proofrule|\cr|screenrule|\ee|(|\<pair>|,|\<pair>|)|; \
+|makegrid(|\<numerics>|)(|\<numerics>|)|;\smallskip\noindent
+|proofrulethickness| \<numeric$\0$>; \ |proofoffset| \<pair>.
 
-\bugonpage D212, line 18 (06/25/04)
+\bugonpage C266, lines 19 and 20 (07/04/20)
 
-\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
+\ninepoint\noindent
+You can say either `|incr|~|x|' or `|incr|~|(x)|', within
+an expression; but neither of them are valid statements by themselves.
 
-\bugonpage D216, bottom line (06/25/04)
+\bugonpage C269, line 11 (01/10/21)
 
-\noindent
-we list it twice (with coordinates
-interchanged, so as to make the second octant look like\cutpar
+\ninepoint\indent
+|\smode="specmode"; mag=|\<magnification>|; input |\<font file name>
 
-\bugonpage D217, lines 2--10 (06/25/04)
+\bugonpage C277, lines 15--19 (03/06/17)
 
+\ninepoint\noindent
+|def openit = openwindow currentwindow from origen    % and please correct|\par
 \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)
-
+| to (screen_rows,screen_cols) at (-50,300) enddef;   % "(-50,300)" too|\par
 \noindent
-count followed by pointers to the eight offset lists, followed
-by an indication of the pen's range of values.
+|def showit_ = display currentpicture inwindow currentwindow enddef;|\par
+\noindent
+|def showit = openit; let showit=showit_; showit enddef; % first time only|\par
+\kern3pt\hrule\medskip\noindent
+Plain \MF\ has several other terse commands
+similar to `{\bf openit}' and `{\bf showit}':
 
-\bugonpage D218, line 15 (06/25/04)
+\bugonpage C279, line 1 (11/11/17)
 
-The \\{link} field of a pen header node should be \\{null} if and only if
-the pen is a single point.
+\ninepoint\noindent
+| blacker:=.1;                   % make pens a teeny bit blacker|
 
-\bugonpage D227, line 11 (06/25/04)
+\bugonpage C289, line 20 (10/07/20)
 
-\noindent
-\\{endpoint}. The cubics all have
-monotone-nondecreasing $x(t)$ and $y(t)$.
+\ninepoint\indent
+|if {{(pair x) cand x>(0,0)}}: A else: B fi.|
 
-\bugonpage D228, lines 4--7 from the bottom (06/25/04)
+\bugonpage C291, line 18 (07/24/20)
 
-\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
+\ninepoint\indent
+| save u_; setu_ u; let switch_ = if; if false: enddef.|
 
-\bugonpage D231, line 7 (06/25/04)
+\bugonpage C292, line 10 from the bottom (10/23/20)
 
 \ninepoint\noindent
-\quad{\bf if\/} $\\{abs}(\\{du})\ge\\{abs}(\\{dv})$ {\bf then}\quad $\{\,
- s_{k-1}\le1$ or $s_k\le1\,\}$
+be known by saying `{\bf if} known $(p-q)$: $p=q$ {\bf else}:~{\bf false fi}';
+transforms could be handled\cutpar
 
-\bugonpage D231, line 16 (06/25/04)
+\bugonpage C293, lines 13 and 14 from the bottom (10/27/20)
 
-\noindent
-and return towards $s_{k-1}$ or $s_k$,
-respectively, yielding another solution of $(*)$.
+\ninepoint\noindent
+$f(-1)$ is false! When $c\rightarrow0$, the quantity $a^3+b^3$
+approaches $-\infty$ when $c$~is positive, $+\infty$ when $c$~is
+negative. An attempt to `\\{solve} $f(1,-1)$' will divide by zero and
+come\cutpar
 
-\bugonpage D246, line 4 from the bottom (06/25/04)
+\bugonpage C295, line 2 (07/04/20)
 
-\noindent
-dinate fields. Hence, for example,
-the point $\bigl($$\\{x\_coord}(p)-\\{left\_v}(q),\\{y\_coord}(p)+%
-\\{right\_u}(p)$$\bigr)$
-also\cutpar
+\ninepoint\noindent
+`interpolate $(1,1)\dts(3,2)\dts(15,4)$ of~7' the approximate value 3.37.
 
-\bugonpage D248, lines 14 and 15 (01/06/14)
+\bugonpage C299, bottom four lines of code become five (08/06/20)
 
-\noindent
-the $x$-axis at the point
-$\bigl((a^2-b^2)\sin\theta\cos\theta/\rho\bigr)+i\rho$, where
-\vadjust{\vskip1pt}%
-$\rho=\sqrt{(a\sin\theta)^2+(b\cos\theta)^2}$. It reaches
-furthest to the right of~the $y$-axis at the point
-$\sigma+i(a^2-b^2)\sin\theta\cos\theta/\sigma$, where
-$\sigma=$\cutpar
+\ninepoint\noindent
+\begintt
+primarydef t Bernshtein nn = begingroup save r; r =
+ begingroup for n=nn downto 2:
+  for k=1 upto n-1: u_[[[k]]]:=t[[[u_[[[k]]],u_[[[k+1]]] ]]];
+  endfor endfor u_[[[1]]] endgroup; numeric u_[[[]]];
+ r endgroup enddef;
+\endtt
 
-\bugonpage D248, line 24 (06/25/04)
+\bugonpage C299, line 5 after the code becomes two lines (08/06/20)
 
 \ninepoint\noindent
-\qquad{\bf else begin} $\\{beta}\gets\\{minor\_axis}$;
- $\\{gamma}\gets\\{major\_axis}$;
- $\\{theta}\gets0$;
+brackets are nested inside of brackets.
+However, the auxiliary variables `|u_[[[|$k$|]]]|' must not remain
+independent at the end.
 
-\bugonpage D251, line 1 (01/06/14)
+\bugonpage C305, lines 14--18 (07/08/20)
 
+\ninepoint\noindent
+|width_adj#:=0pt#;         % width adjustment for certain characters|\par
 \noindent
-{\bf536.\quad}Only the coordinates need to be copied, not the class numbers
-and other stuff. At this point either $\\{link}(p)$ or
-$\\{link}(\\{link}(p))$ is \\{null}.
+|serif_fit#:=0pt#;         % extra sidebar near lowercase serifs|
+\vskip-3pt\noindent\qquad\vdots\par\noindent
+|low_asterisk:=false;      % should the asterisk be centered at the axis?|\par
+\noindent
+|math_fitting:=false;      % should math-mode spacing be used?|
 
-\bugonpage D251, line 10 (01/06/14)
+\bugonpage C317, line 21 becomes two lines (11/11/17)
 
 \ninepoint\noindent
-\\{done1}: {\bf if\/} $(\\{link}(p)\ne\\{null})$ {\bf then}
-$\\{free\_node}(\\{link}(p),\\{knot\_node\_size})$;\hfil\break
-\null\quad$\\{link}(p)\gets s$;
-$\\{beta}\gets-\\{y\_coord}(h)$;
+\beginsyntax
+<label>\is<code label>\alt<code>[::]\alt[\\\\:]
+<code label>\is\<code>[:]
+\endsyntax
 
-\bugonpage D256, line 2 from the bottom (06/25/04)
+\bugonpage C318, lines 10--16 from the bottom (11/11/17)
 
-\noindent
-we have $2^lu_{\min}=2^lu_0+U_{\min}$, etc.; the condition for overlap
-reduces to
+\ninepoint\noindent
+\beginsyntax
+ \alt<code label><labeled code>
+<extensible command>\is[extensible]<code label><four codes>
+<four codes>\is<code>[,]<code>[,]<code>[,]<code>
+\endsyntax
+Notice that a \<code label> can appear in a {\bf ligtable}, {\bf charlist}, or
+{\bf extensible} command.
+ These appearances are mutually exclusive: No code may be
+used more than once as a label. Thus, for example, a character with a
+ligature/kerning program cannot also be {\bf extensible}, nor can it be
+in a {\bf charlist} (except as the final item).
 
-\bugonpage D261, line 5 (06/25/04)
+\bugonpage C333, line 29 (10/25/19)
 
 \ninepoint\noindent
-\\{tol}: \\{integer};\quad$\{\,$bound on the uncertainty in the overlap test$\,\}$
+|  "if charcode>0:currentpicture:=currentpicture scaled mg;fi;"|
 
-\bugonpage D262, lines 26 and 27 (06/25/04)
+\bugonpage C333, bottom two lines become one (11/11/17)
 
 \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}$\,\}$
+| if unknown scale: scale := max(1,round(pixels_per_inch/300)); fi|
 
-\bugonpage D262, line 11 from the bottom (06/25/04)
+\bugonpage C339, line 3 (05/21/20)
 
 \ninepoint\noindent
-\qquad$\\{xy}\gets\\{xy}+\\{int\_packets}$;\quad$\{\,$switch
-   from \\{l\_packets} to \\{r\_packets}$\,\}$
+ing `\char'31', `\char'32',
+`\char'33', and~`\char'34') and the uppercase letters (including
+`\char'35', `\char'36', and~`\char'37') are\cutpar
 
-\bugonpage D274, line 15 from the bottom (06/25/04)
+\bugonpage C341, line 14 from the bottom (11/11/17)
 
 \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}$;
+prints the |\table| and the |\text|; ^|\bigtest| gives
+you the works, plus a mysterious word\cutpar
 
-\bugonpage D309, line 21 (06/25/04)
+\bugonpage C345 and following, selected amendments to the index (01/20/21)
 
-\noindent
-{\bf670.\quad}We go to \\{restart} instead of to \\{switch},
-because we might enter \\{token\_state} after the error\cutpar
+\eightpoint
+*|,| (comma), 57, 72, 73, 129, 155, 165--167, 171, 211--213, 218, 317, 318.\par
+`A', 10--11, 163, 164, 248, 302--303.\par
+\<addto command>, 118, $\underline{220}$.\par
+bell-shaped distribution, $\underline{183}$, 251.\par
+|black|, 270, 332--333.\par
+\<code> and \<code label>, $\underline{317}$.\par
+concatenation, of paths, {\it70}--{\it71}, {\it123}, 127--129, $\underline{130}$, 137, {\it245}, {\it266}.\par
+\quad of strings, {\it69}, 73, 84--85, $\underline{187}$, {\it278}, {\it286}, {\it312}.\par
+*|directiontime|, {\it135}, $\underline{\it136}$, 211, 245, 265, {\it298}.\par
+distance, 76, 84, {\sl see also\/} |length|.\par
+|dotprod|, {\it68}--{\it69}, 178, {\it238}, 265.\par
+efficiency, 39, 99, 116, 141, 144, 147, 228, 230, 234, 244, 264, 265, 277,  291, 297, 298.\par
+empty option in {\bf for\/} list, 171, $\underline{172}$, {\it299}.\par
+forbidden tokens, 173, $\underline{218}$--$\underline{219}$, 286.\par
+*|from|, $\underline{191}$, 220, {\it252}, {\it277}, {\it312}.\par
+Giotto di Bondone, 139.\par
+independent variables, $\underline{81}$--$\underline{83}$, 88, 224, 226, 299.\par
+|\init|, $\underline{337}$, 342.\par
+internal quantities, 54--55, 88, 218, 262, 265--266.\par
+*|inwindow|, $\underline{191}$, 220, {\it277}.\par
+\<keep or drop>, $\underline{118}$, 220.\par
+|labels|, {\it107}, $\underline{274}$, 327--328.\par
+*|length|, {\it66}, {\it69}, 72, 210, 238.\par
+*|ligtable|, {\it97}, {\it305}--{\it306}, $\underline{316}$--$\underline{317}$.\par
+loops, 169, 171--173, 179, 226--227, 259, 290--291, 299.\par
+`N', 184--185, 302--303.\par
+\<numeric token primary>, 72, $\underline{211}$.\par
+|o|, {\it23}, {\it34}, $\underline{93}$, 197, 200, 204, 240, 302.\par
+`O', 32--37, 161, 199, 302--303.\par
+overshoot, 23, 34, 93, 197, 200, 204, 302.\par
+|penpos|, {\it26}--{\it29}, 37, 80, {\it103}, {\it162}, $\underline{273}$, 310.\par
+pens, 21--29, 147--152, 297--298.\par
+*|rotated|, {\it21}--{\it22}, {\it25}, 27, 44, {\it68}, 73, {\it107}, {\it114}, {\it117}, $\underline{141}$, 213, {\it238}.\par
+|rule|, 274, 328.\par
+*|scaled|, {\it21}--{\it23}, {\it68}, 73, $\underline{141}$, 213, 244, 291.\par
+*|showstopping|, 211, 219, {\it227}, 230, {\it262}.\par
+string expressions, {\it69}, 187--189, 258, 286.\par
+\<suffix list>, $\underline{171}$, 236.\par
+sum, of vectors, 9, {\it68}.\par
+|test.mf|, 311--313.\par
+\TeX, 1, 34, 40, 91, 96, 98, 101--103, 315, 336--343, 361.\par
+text arguments, 219, 288--291, 299.\par
+|.tfm|, 39, 315--321, 333, 335.\par
+*|to|, $\underline{191}$, 220, {\it252}, {\it277}, {\it312}.\par
+undelimited suffix parameters, $\underline{167}$, 176, 266, 270.\par
+|undraw|, 113, 118, 120, {\it242}, $\underline{271}$.\par
+|unitsquare|, {\it116}, 123--124, 128, 132, 136, $\underline{263}$.\par
+*|unknown|, $\underline{170}$, 210.\par
+unknown quantities, nonnumeric, 84--85, 143.\par
+values, disappearance of, 56, 83, 88, 156--157, 177--178, 218, 239, 299.\par
+\<vardef heading>, 165, $\underline{178}$.\par
+*|xscaled|, {\it21}--{\it22}, {\it68}, 73, $\underline{141}$, 213, 244, 291.\par
 
-\bugonpage D314, line 6 from the bottom (06/25/04)
 
-\noindent
-\\{macro\_def} or \\{iteration}).
 
-\bugonpage D330, line 1 (06/25/04)
+
% Volume D
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
 
-\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 Dv, line 16 (01/16/21)
 
-\bugonpage D354, lines 15 and 16 from the bottom (06/25/04)
+\tenpoint\noindent
+\kern12.5mm I believe that the final bug in \MF\ was discovered on January\cutpar
 
-\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 Dv, bottom two lines (01/16/21)
 
-\bugonpage D354, lines 11 and 12 from the bottom (06/25/04)
+\eightpoint\noindent
+corporates all of those changes.
+I~now believe that the final bug was discovered on 03 July 2020
+and removed in version 2.71828182. % on 16 January 2021
+The finder's fee has converged to \$327.68.
 
-\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.
+\hsize=35pc
 
-\bugonpage D354, lines 7 and 8 from the bottom (06/25/04)
+\bugonpage D2, last line of \S2 (01/15/21)
 
-\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.
+\ninepoint\noindent
+$$\hbox{{\bf define} $\\{banner}\equiv\.{\char`\'This\]is\]METAFONT,\]Version\]2.71828182\char`\'}$\quad
+$\{\,$printed when \MF\ starts$\,\}$}$$
 
-\bugonpage D355, lines 1 and 2 (06/25/04)
+\bugonpage D14, line 1 of \S30 (05/05/14)
 
-\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.
+\tenpoint\noindent
+{\bf 20.} \quad The \\{input\_ln} function brings the next line of input from the specified
+file into available\cutpar
 
-\bugonpage D355, lines 5 and 6 (06/25/04)
+\bugonpage D21, line 8 of \S47 (10/11/20)
 
-\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.
+\ninepoint\noindent\quad
+$g$: \\{str\_number};\quad$\{\,$the string just created$\,\}$
 
-\bugonpage D355, lines 21 and 22 (06/25/04)
+\bugonpage D27, lines 3 and 4 of \S61 (04/02/17)
 
-\noindent
-$\\{cur\_type}=\\{token\_list}$ means that \\{cur\_exp} points to a linked list
-of tokens.
+\tenpoint\noindent
+is not serious since we assume that this
+part of the program is system dependent.
 
-\bugonpage D356, lines 2--3 (06/25/04)
+\bugonpage D28, line 7 (04/02/17)
 
-\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.
+\ninepoint\noindent\quad
+{\bf var} $k$: $0\dts23$;\quad$\{\,$index to current digit; we assume
+ that $\vert n\vert<10^{23}\,\}$
 
-\bugonpage D368, line 13 (06/25/04)
+\bugonpage D32, line 2 of \S78 becomes two lines (06/27/20)
 
-\ninepoint\noindent
-\qquad\\{my\_var\_flag}: $0\to\\{max\_command\_code}$;\quad$\{\,$initial
-  value of \\{var\_flag}$\,\}$
+\ninepoint\noindent\quad
+{\bf loop begin} \\{continue}: {\bf if} $\\{interaction}\ne\\{error\_stop\_mode}$
+  {\bf then return};\par
+\noindent\qquad
+\\{clear\_for\_error\_prompt}; \ \\{prompt\_input}(\.{"?\]"});
 
-\bugonpage D378, line 9 from the bottom (06/25/04)
+\bugonpage D32, line 11 of \S79 (07/03/20)
 
-\ninepoint\noindent
-\qquad\quad{\bf begin} $\\{cur\_type}\gets\\{known}$;
- $\\{cur\_exp}\gets0$;
- $\\{free\_node}(q,\\{dep\_node\_size})$;
+\ninepoint\noindent\quad
+\.{"E"}: {\bf if} $\\{file\_ptr}>0$ {\bf then if}
+ $\\{input\_stack}[\\{file\_ptr}].\\{name\_field}\ge256$ {\bf then}
 
-\bugonpage D380, line 12 (06/25/04)
+\bugonpage D33, line 5 of \S80 (07/03/20)
 
-\ninepoint\noindent
-\qquad\qquad{\bf begin} $\\{type}(r)\gets\\{known}$;
- $\\{value}(r)\gets0$;
- $\\{free\_node}(p,\\{dep\_node\_size})$;
+\ninepoint\noindent\quad
+{\bf if} $\\{file\_ptr}>0$ {\bf then}\par
+\noindent\qquad
+{\bf if} $\\{input\_stack}[\\{file\_ptr}].\\{name\_field}\ge256$ {\bf then}
+\\{print}(\.{"E\]to\]edit\]your\]file."}
 
-\bugonpage D390, lines 2 and 3 (06/25/04)
+\bugonpage D37, line 9 of \S93 (08/07/20)
 
-\noindent
-by a previous operation. We must maintain
-the value of $\\{right\_type}(q)$ in cases such as\break
-`|..\\{curl2\}z\{0,0\}..|'.
+\ninepoint\noindent\qquad
+(\.{"Try\]to\]insert\]an\]instruction\]for\]me\](e.g.,\]%
+        \char`\`I\]show\]x;\char`\'),"})
 
-\bugonpage D437, line 1 (06/25/04)
+\bugonpage D82, line 2 from the bottom (09/19/19)
 
-\noindent
-{\bf996.\quad}And \\{do\_assignment} is similar to \\{do\_equation}:
+\ninepoint\noindent\quad
+{\bf define} $\\{boundary\_char}=41$\quad$\{\,$the boundary character for ligatures$\,\}$
 
-\bugonpage D439, line 10 becomes two lines (06/25/04)
+\bugonpage D85, lines 3 and 4 of \S194 {(and \S194 actually moves to page D86)} (12/11/20)
 
-\ninepoint\noindent
-\qquad{\bf begin} $\\{nonlinear\_eq}(v,\\{cur\_exp},\\{false})$;
-  $\\{cur\_type}\gets t$;
-  {\bf goto} \\{done};
+\tenpoint\noindent
+information, something special
+is needed. The program here simply assumes that suitable values appear in
+the global variables \\{sys\_time}, \\{sys\_day}, \\{sys\_month}, and
+\\{sys\_year} (which are initialized to noon on 4 July 1776,
+in case the implementor is careless).
 
-\bugonpage D443, line 11 (06/25/04)
+\bugonpage D85, the final six lines of \S194 {(and \S194 actually moves to page D86)} (12/11/20)
 
 \ninepoint\noindent
-\\{done}: {\bf if\/} $\\{eq\_type}(x)\mathbin{\hbox{\bf mod}}\\{outer\_tag}
-  \ne\\{tag\_token}$ {\bf then}
-  $\\{clear\_symbol}(x,\\{false})$;
+{\bf procedure} \\{fix\_date\_and\_time};\par
+\noindent\quad{\bf begin}
+$\\{sys\_time}\gets12\ast60$; \
+$\\{sys\_day}\gets4$; \
+$\\{sys\_month}\gets7$; \
+$\\{sys\_year}\gets1776$;\quad
+$\{\,$self-evident truths$\,\}$\par
+\noindent\quad$\\{internal}[\\{time}]\gets\\{sys\_time}\ast\\{unity}$;\quad
+  $\{\,$minutes since midnight$\,\}$\par
+\noindent\quad$\\{internal}[\\{day}]\gets\\{sys\_day}\ast\\{unity}$;\quad$\{\,$day of the month$\,\}$\par
+\noindent\quad$\\{internal}[\\{month}]\gets\\{sys\_month}\ast\\{unity}$;\quad$\{\,$month of the year$\,\}$\par
+\noindent\quad$\\{internal}[\\{year}]\gets\\{sys\_year}\ast\\{unity}$;\quad$\{\,$Anno Domini$\,\}$\par
+\noindent\quad{\bf end};
 
-\bugonpage D452, line 9 (06/25/04)
+\bugonpage D86, replacement for \S196 (12/11/20)
 
-\noindent
-though they don't necessarily correspond to primitive tokens.
-
-\bugonpage D476, line 12 from the bottom (06/25/04)
-
+\tenpoint\noindent
+{\bf 196.}\quad Of course we had better declare a few more global variables,
+if the previous routines are going to work.
+\smallskip
 \ninepoint\noindent
-\quad{\bf if\/} $\\{nl}-\\{skip\_table}[c]>128$ {\bf then}
+$\langle\,$Global variables {\sevenrm\kern.5em13}$\,\rangle+\equiv$\par
+\noindent\\{old\_setting}: $0\dts\\{max\_selector}$;\par
+\noindent\\{sys\_time}, \\{sys\_day}, \\{sys\_month}, \\{sys\_year}: \\{integer};
+\quad$\{\,$date and time supplied by external system$\,\}$
 
-\bugonpage D483, line 7 (06/25/04)
+\bugonpage D97, line 2 of \S221 (05/26/17)
 
-\ninepoint\noindent
-\quad$\\{max\_tfm\_dimen}\gets16\ast\\{internal}[\\{design\_size}]-1
-  -\\{internal}[\\{design\_size}]\mathbin{\hbox{\bf div}}\Oct{10000000}$;
+\tenpoint\noindent
+the definition of attribute nodes) that
+it is convenient to let $\\{info}(p)=0$ stand for `\.{[]}'.
 
-\bugonpage D483, lines 15--17 (06/25/04)
+\goodbreak
+\bugonpage D148, line 7 (06/12/18)
 
-\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}])$;
+\tenpoint\noindent
+but the $\log n$ factor is buried in our
+implicit restriction on the maximum raster size.) The\cutpar
 
-\bugonpage D496, line 2 (06/25/04)
+\bugonpage D237, line 5 of \S513 (05/26/17)
 
-\noindent
-a pointer to
-an edge structure. Its mission is to describe the positive pixels
-in \.{GF} form,\cutpar
+\ninepoint\noindent\quad
+{\bf for} $n\gets0$ {\bf to} $\\{n1}-\\{n0}-1$ {\bf do} $\\{env\_move}[n]\gets\\{mm0}$;
 
-\bugonpage D500, line 16 (06/25/04)
+\bugonpage D250, line 2 of \S534 (05/26/17)
 
-\ninepoint\noindent
-\quad$\\{selector}\gets\\{old\_setting}$;
- $\\{gf\_out}(\\{cur\_length})$;
- $\\{gf\_string}(0,\\{make\_string})$;
- $\\{decr}(\\{str\_ptr})$;
+\tenpoint\noindent
+direction $\bigl(\\{right\_u}(p),\\{left\_v}(q)\bigr)$;
+and there's a line of length $\ge\\{delta}$ from vertex~$q$ to vertex~$r$,\cutpar
 
-\bugonpage D506, lines 8--10 (06/25/04)
+\bugonpage D296, line 11 (06/23/20)
 
-\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.
+\tenpoint\noindent
+\\{name} points to the \\{eqtb} address of the macro
+being expanded, if the current token list\cutpar
 
-\bugonpage D514, line 14 from the bottom (06/25/04)
+\bugonpage D324, line 13 of \S713 (12/20/20)
 
-\noindent
-\.{CMMF}, should also be provided for commonly used bases such as \.{cmbase}.
+\ninepoint\noindent\qquad\quad
+\\{help2}(\.{"After\]\char`\`exitif\]<boolean\]expr>\char`\'\]I\]expect\]to\]see\]a\]%
+semicolon."})
 
-
% volume E
-\hsize=29pc
+\bugonpage D326, line 5 from the bottom (06/23/20)
 
-\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 `--'
+\ninepoint\noindent\qquad\qquad
+$\{\,$invokes a user-defined sequence of commands$\,\}$
 
-\bugonpage E1, line 3 (01/06/06)
+\bugonpage D334, lines 1 and 2 of \S742 (10/25/20)
 
 \tenpoint\noindent
-Zillions of alphabets can be generated by the programs in this book.
-All\cutpar
+{\bf 742.} \ Here is a procedure that ignores text until coming to an {\bf elseif},
+{\bf else}, or {\bf fi} at the current level of {\bf if}$\,\ldots\,${\bf fi}
+nesting. After it has acted, \\{cur\_mod} will indicate the token that
+was found.
 
-\bugonpage E6, lines 16--19 (12/29/04)
+\bugonpage D339, line 4 of \S757 (06/16/20)
 
-\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;
+\tenpoint\noindent\quad
+(A user who tries some shenanigan like `{\bf for} $\ldots$ {\bf let} {\bf endfor}'
+will be foiled by the \\{get\_symbol}\cutpar
 
-\bugonpage E7, line 11 (12/21/02)
+\bugonpage D351, lines 2--7 of \S536 become five lines (12/11/20)
 
-\ninepoint\indent
-\\{hair}, \\{vair}, \\{stem}, \\{curve}, \\{ess}, \\{flare}, \\{dot\_size},
- \\{bar}, \\{slab},
+\ninepoint\noindent\quad
+{\bf begin} \\{wlog}(\\{banner});
+\\{slow\_print}(\\{format\_ident});
+\\{print}(\.{"\]\]"});
+\\{print\_int}(\\{sys\_day});
+\\{print\_char}(\.{"\]"});\par
+\noindent\quad
+$\\{months}\gets\.{\char`\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC\char`\'}$;\par
+\noindent\quad
+{\bf for} $k\gets3\ast\\{sys\_month}-2$ {\bf to} $3\ast\\{sys\_month}$
+{\bf do} \\{wlog}(\\{months}[$k$]);\par
+\noindent\quad
+\\{print\_char}(\.{"\]"});
+\\{print\_int}(\\{sys\_year});
+\\{print\_char}(\.{"\]"});
+\\{print\_two}(\\{sys\_time} {\bf div} 60);
+\\{print\_char}(\.{":"});\par
+\noindent\quad
+\\{print\_two}(\\{sys\_time} {\bf mod} 60);
 
-\bugonpage E7, line 14 (12/21/02)
+\bugonpage D352, line 2 of \S793 becomes two lines (10/29/20)
 
-\ninepoint\indent
-\\{crisp}, \\{tiny}, \\{fine};
-\medskip\noindent
-and \\{thin\_join} should not be less than \\{fine}.
+\tenpoint\noindent
+command is being processed.
+Beware: For historic reasons, this code foolishly conserves a tiny bit
+of string pool space; but that can confuse the interactive `\.E' option.
 
-\bugonpage E19, line 19 (11/07/01)
+\bugonpage D352, line 5 from the bottom (10/29/20)
 
-\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}$];
+{\bf if} $\\{name}=\\{str\_ptr}-1$ {\bf then}
+\ $\{\,$conserve string pool space (but see note above)$\,\}$
 
-\bugonpage E125, line 6 from the bottom (07/10/05)
+\bugonpage D354, line 2 from the bottom (07/29/20)
 
-\ninepoint\noindent
-$\\{top}\,y_1=\\{top}\,y_6=h$; $z_2=.5[z_3,z_1]+\\{bend}$;
+\tenpoint\noindent
+$\\{cur\_type}=\\{path\_type}$ means that \\{cur\_exp} points to the first
+node of
+a path; nobody else points\cutpar
 
-\bugonpage E125, line 3 from the bottom (07/10/05)
+\bugonpage D469, lines 18--20 of \S1093 (09/19/19)
 
-\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}
+\tenpoint\noindent
+so-called boundary character of this font;
+the value of \\{next\_char} need not lie between \\{bc} and~\\{ec}.
+If the very last instruction of the \\{lig\_kern} array has $\\{skip%
+\_byte}=255$,
+there is a special ligature/kerning program for a boundary character at the
+left, beginning at location $256\ast\\{op\_byte}+$\cutpar
 
-\bugonpage E146, also pages 164 and 540 (02/08/03)
+\bugonpage D469, line 30 of \S1093 (01/15/21)
 
-\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.]
+\tenpoint\noindent
+tional halt; no ligature or kerning command is performed.
 
-\bugonpage E147, line 11 from the bottom (04/23/04)
+\bugonpage D471, lines 20 and 21 (08/07/20)
 
 \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$;
+\\{param}: {\bf array} $[1\dts\\{max\_font\_dimen}]$ {\bf of}
+\\{scaled};\quad$\{\,${\bf fontdimen} parameters$\,\}$\par\noindent
+\\{np}: $0\dts\\{max\_font\_dimen}$;\quad$\{\,$the largest {\bf fontdimen} parameter
+specified so far$\,\}$
 
-\bugonpage E147, line 8 from the bottom (04/23/04)
+\bugonpage D474, line 2 from the bottom (08/07/20)
 
-\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]$;
+\ninepoint\noindent\quad\qquad
+\\{help1}(\.{"A\]colon\]should\]follow\]a\]headerbyte\]or\]fontdimen\]location."});
+\\{back\_error};
 
-\bugonpage E149, line 8 from the bottom (04/23/04)
+\bugonpage D508, line 3 of \S1189. (10/05/20)
 
-\ninepoint\noindent
-$y_5+.1\\{x\_height}=y_7=.5[y_6,y_8]$; $\\{bot}\,y_{6r}=-\\{oo}$;
+\tenpoint\noindent
+to be in the range $a\le x\le b$.
+System error messages should be suppressed when undumping.
 
-\bugonpage E157, line 11 (02/29/08)
+\bugonpage D516, line 6 (10/15/20)
 
-\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}
+\tenpoint\noindent\quad
+If \\{final\_cleanup} is bypassed, this program doesn't bother to
+close the input files that may still be open.
 
-\bugonpage E161, line 7 from the bottom (04/23/04)
+\bugonpage D519, line 17 (01/15/21)
 
-\ninepoint\noindent
-$\\{top}\,y_{1r}=\\{x\_height}+\\{oo}$; $y_2=y_4=.5[y_1,y_3]$;
- $\\{bot}\,y_{3r}=-\\{oo}$;
+\ninepoint\noindent\quad
+\\{fix\_date\_and\_time};
+$\\{init\_randoms}(\\{sys\_time}+\\{sys\_day}*\\{unity})$;
 
-\bugonpage E209, line 3 (12/29/04)
+\bugonpage D520, line 18 of \S1212 becomes two lines (10/05/20)
 
-\ninepoint
-\rightline{\% This lowercase italic alphabet was prepared by D. E. Knuth
- in December, 1979,}
+\ninepoint\noindent\quad
+{\bf begin} \\{clear\_terminal};\par
+\noindent\quad
+{\bf loop}
 
-\bugonpage E377, lines 3 and 4 from the bottom (12/22/02)
+\bugonpage D520, lines 11 and 12 from the bottom of \S1212
+  become three lines (04/02/17)
 
-\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}
+\ninepoint\noindent\qquad\qquad
+{\bf begin goto} \\{breakpoint};\par
+\noindent\qquad\qquad\quad$\{\,$go to every declared label at least once$\,\}$\par
+\noindent\qquad\quad\\{breakpoint}: $m\gets0$;
+ \.{@\char`\{\char`\'BREAKPOINT\char`\'@\char`\}}
 
-\bugonpage E379, lines 17 and 18 become one line (01/06/14)
+\bugonpage D566, the bottom five lines (05/14/19)
 
-\ninepoint\noindent
-{\bf else}: $\\{rt}\,x_{6r}={\rm hround}(w-1.5u)$;
-$y_{6}=y_{5l}+\\{eps};$ {\bf fi}
+\tenpoint\noindent
+they occupy in a typical production system
+(executable code size for dark blocks, global data size for light blocks).
+In this way the chart indicates a total of about
+$8\times22=176${\ninerm K} bytes of memory, plus
+$8\times15=120${\ninerm K} for the
+dynamic memory region not shown explicitly. The dynamic memory
+is often considerably larger in practice, because it is desirable to
+accommodate large macro packages and large pictures.
 
-\bugonpage E379, bottom line of the program (01/06/14)
 
-\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units
-\ninepoint\noindent
-{\bf math\_fit}$(0,\\{ic}\SH-2.5u\SH)$;
-{\bf penlabels}$(0,1,2,3,4,5,6,7)$;
-{\bf endchar};
+
% volume E
+\hsize=29pc
 
-\bugonpage E489, bottom line (06/25/04)
+\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 `--'
 
-\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)
-
-\parindent=36pt
-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

Modified: trunk/Master/texmf-dist/source/generic/knuth/errata/errata.three
===================================================================
--- trunk/Master/texmf-dist/source/generic/knuth/errata/errata.three	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/source/generic/knuth/errata/errata.three	2021-02-26 23:56:54 UTC (rev 57963)
@@ -793,7 +793,7 @@
 \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`\{%
+`{\tt\char`\$\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)

Added: trunk/Master/texmf-dist/source/generic/knuth/errata/errata.twelve
===================================================================
--- trunk/Master/texmf-dist/source/generic/knuth/errata/errata.twelve	                        (rev 0)
+++ trunk/Master/texmf-dist/source/generic/knuth/errata/errata.twelve	2021-02-26 23:56:54 UTC (rev 57963)
@@ -0,0 +1,1709 @@
+% Bugs (sigh) in Computers \& Typesetting
+
+\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\/} between the publication of the second ``Millennium Edition''
+at the close of the year 2001 and the beginning of the year 2014.
+(More precisely, it lists errors corrected
+in 16th to 19th printings of Volume~A, the 7th and 8th printings
+of Volume~B, the 6th and 7th printings of Volume~C, the 4th and 5th printings
+of Volume~D, and the 5th and 6th printings 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. All of these
+errors have supposedly been corrected in more recent printings, unless
+they were subsequently found to be wrong.
+\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 A153, line 7 (01/03/14)
+
+\ninepoint\noindent
+of three fonts: one for text size, one for
+script size, and one for scriptscript size. The\cutpar
+
+\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 A373, lines 4 and 5 from the bottom (01/02/14)
+
+\ninepoint\noindent
+And here's another solution (which may be faster, because
+token list registers can be expanded more quickly than macros
+on some implementations, using |\the|):
+
+\bugonpage A373, line 2 from the bottom (01/02/14)
+
+\ninepoint\indent
+|\loop \ifnum\m>0 \t=\expandafter{\the\t*}\advance\m-1 \repeat|
+
+\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 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 A418, line 8 from the bottom (12/13/11)
+
+\ninepoint\noindent\beginlines
+|    \def\\{#3} \advance\hsize by -18mm|
+\endlines
+
+\bugonpage A418, line 3 from the bottom (12/13/11)
+
+\ninepoint\noindent\beginlines
+|    \halign{\line{\titlefont\hss##}\\#4\unskip\\}|
+\endlines
+
+\bugonpage A442, lines 7 and 8 from the bottom (01/03/14)
+
+\def\rule#1.{\smallskip\textindent{\bf#1.}\ignorespaces}
+\ninepoint\textindent{\bf 3.}%
+If the current item is a style change, set $C$ to the specified
+style and move on to the next item.
+
+\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 Bv, page number change (12/27/11)
+
+\eightpoint\noindent[For consistency with Volumes A, C, and E, the
+preface now begins on page v instead of page~vii. This change was first
+made in the ninth printing.]
+
+\bugonpage Bv {(formerly Bvii)}, bottom two lines (01/06/14)
+
+\eightpoint\noindent
+all of those changes.
+I~now believe that the final bug was discovered on 14 September 2008
+and removed in version 3.14159265.
+The finder's fee has converged to \$327.68.
+
+\bugonpage Bxiii {(formerly Bxv)}, line $-7$ (12/27/11)
+
+\ninepoint\noindent
+Format specs have no effect on the corresponding Pascal program, but they
+do influence\cutpar
+
+\hsize=35pc
+
+\bugonpage B2, line 10 from the bottom (01/02/14)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]3.14159265\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 B109, line 16 (01/06/14)
+
+\ninepoint\noindent
+\qquad\qquad{\bf begin} $\\{print\_esc}(\.{"csname"})$;
+$\\{print\_esc}(\.{"endcsname"})$;
+$\\{print\_char}(\.{"\ "})$;
+{\bf end}
+
+\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 B343, line 25 (01/02/13)
+
+\noindent
+should begin in the
+sequence of line numbers, in case hanging indentation or \.{\char`\\parshape}
+is in\cutpar
+
+\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 B452, line 18 (28/03/11)
+
+\noindent\\{hmode}, where the latter two are used to denote
+ \.{\char`\\vbox} and \.{\char`\\hbox}, respectively.
+
+\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 C32, line 5 from the bottom (01/04/14)
+
+\noindent
+\hbox to\parindent{\hfil\sevenrm20\ \ }%
+|  penpos1(stem,15); penpos2(.9stem,12); penpos3(stem,10);|
+
+\bugonpage C36, line 5 from the bottom (01/05/14)
+
+\noindent
+line~12, where it
+says `|x1l|', not `|x11|' or~`|xll|'); be sure to distinguish between\cutpar
+
+\bugonpage C55, lines 5 and 6 (01/05/14)
+
+\ninepoint\noindent
+suffixed or subscripted.
+Thus, the syntax rule for \<variable>
+should actually be replaced by a slightly more complicated pair of rules:
+
+
+\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 C236, line 7 from the bottom (01/05/14)
+
+\ninepoint\noindent
+\hbox to\parindent{\hss\bf 7.4.\enspace}False.
+After `|newinternal x;|' you can't say `|x|\<tag>' in a \<suffix list>.
+
+\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 C346, right column (10/04/04)
+
+\eightpoint\noindent
+arccosine, arcsine, arctangent, {\sl see\/} |angle|.
+
+\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 Dv, page number change (12/27/11)
+
+\eightpoint\noindent[For consistency with Volumes A, C, and E, the
+preface now begins on page v instead of page~vii. This change was first
+made in the sixth printing.]
+
+\bugonpage Dv {(formerly Dvii)}, bottom two lines (01/06/14)
+
+\eightpoint\noindent
+corporates all of those changes.
+I~now believe that the final bug was discovered on 03~June 2008,
+and removed in version 2.7182818.
+The finder's fee has converged to \$327.68.
+
+\bugonpage Dxiii {(formerly Dxv)}, line $-7$ (12/27/11)
+
+\ninepoint\noindent
+Format specs have no effect on the corresponding Pascal program, but they
+do influence\cutpar
+
+\hsize=35pc
+\parindent=1em
+
+\bugonpage D2, line $-17$ (01/03/14)
+
+\ninepoint\noindent
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]METAFONT,\]Version\]2.7182818\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 {\bf 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, lines 14 and 15 (01/06/14)
+
+\noindent
+the $x$-axis at the point
+$\bigl((a^2-b^2)\sin\theta\cos\theta/\rho\bigr)+i\rho$, where
+\vadjust{\vskip1pt}%
+$\rho=\sqrt{(a\sin\theta)^2+(b\cos\theta)^2}$. It reaches
+furthest to the right of~the $y$-axis at the point
+$\sigma+i(a^2-b^2)\sin\theta\cos\theta/\sigma$, where
+$\sigma=$\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 D251, line 1 (01/06/14)
+
+\noindent
+{\bf536.\quad}Only the coordinates need to be copied, not the class numbers
+and other stuff. At this point either $\\{link}(p)$ or
+$\\{link}(\\{link}(p))$ is \\{null}.
+
+\bugonpage D251, line 10 (01/06/14)
+
+\ninepoint\noindent
+\\{done1}: {\bf if\/} $(\\{link}(p)\ne\\{null})$ {\bf then}
+$\\{free\_node}(\\{link}(p),\\{knot\_node\_size})$;\hfil\break
+\null\quad$\\{link}(p)\gets s$;
+$\\{beta}\gets-\\{y\_coord}(h)$;
+
+\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 becomes two lines (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\char`\_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 E379, lines 17 and 18 become one line (01/06/14)
+
+\ninepoint\noindent
+{\bf else}: $\\{rt}\,x_{6r}={\rm hround}(w-1.5u)$;
+$y_{6}=y_{5l}+\\{eps};$ {\bf fi}
+
+\bugonpage E379, bottom line of the program (01/06/14)
+
+\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units
+\ninepoint\noindent
+{\bf math\_fit}$(0,\\{ic}\SH-2.5u\SH)$;
+{\bf penlabels}$(0,1,2,3,4,5,6,7)$;
+{\bf endchar};
+
+\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)
+
+\parindent=36pt
+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

Modified: trunk/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex
===================================================================
--- trunk/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/source/generic/knuth/errata/errorlog.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -1946,7 +1946,7 @@
 * 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.
+# 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
@@ -2694,7 +2694,7 @@
 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
+	\\{jump_out} (Klaus Guntermann). @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
@@ -2887,7 +2887,7 @@
 * 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
+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
@@ -2899,14 +2899,25 @@
 * 18 March 2008
 F939. Forgot to goto the proper error recovery (DRF). @395
 E940. Avoid a case of dirty Pascal and speed up inner loop. @1035
-R941. Forget reference to last_glue in format file (DRF). @1335
+R941. Forget reference to \\{last_glue} in format file (DRF). @1335
 R942. Glue reference not updated after overflow error (DRF). @1236
-B943. Muglue in \leaders had wrong units; now disallowed (DRF). @1078
+B943. Muglue in |\leaders| had wrong units; now disallowed (DRF). @1078
 E944. Speedup of ligatures and kerns at end of a word (DRF). @1039
-R945. Another sanity check of TFM files for security (DRF). @365
+R945. Another sanity check of TFM files for security (DRF). @565
 I946. Give better size data for unmagnified insertions. @986
 * 6 January 2014
-C947. Space after \csname\endcsname to match other spaces. (Oleg Bulatov) @262
+C947. Space after |\csname\endcsname| to match other spaces. (Oleg Bulatov) @262
+* 15 January 2021
+I948. Don't pause on errors when tracing paragraphs (Udo Wermuth). @826
+S949. Don't try to interact when in |\batchmode| (Xiaosa Zhang). @83
+S950. Don't try to edit when no file is active (Xiaosa Zhang). @84
+R951. Take date and time sometimes from system, not user (Udo Wermuth). @241,536
+B952. Don't allow implicit left brace after |#| (Udo Wermuth). @476
+R953. After nine parameters, must delete offending tokens (Bruno Le Floch). @476
+D954. Garbage visible in buffer after file ends prematurely (DRF). @486
+R955. Force nonexistent characters to have null specs (DRF). @722
+C956. Don't mark fraction noads as temporarily Inner (DRF). @761
+Q957. Reset |\newlinechar| before logging the stats (Udo Wermuth). @1333,1335
 \relax
 \bye
 

Modified: trunk/Master/texmf-dist/source/generic/knuth/tex/glue.web
===================================================================
--- trunk/Master/texmf-dist/source/generic/knuth/tex/glue.web	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/source/generic/knuth/tex/glue.web	2021-02-26 23:56:54 UTC (rev 57963)
@@ -7,7 +7,7 @@
 
 \def\title{GLUE}
 \def\topofcontents{\null
-  \def\titlepage{F} % include headline on the contents page
+  \titlefalse % include headline on the contents page
   \def\rheader{\mainfont\hfil \contentspagenumber}
   \vfill
   \centerline{\titlefont Fixed-Point Glue Setting}

Modified: trunk/Master/texmf-dist/source/generic/knuth/web/webman.tex
===================================================================
--- trunk/Master/texmf-dist/source/generic/knuth/web/webman.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/source/generic/knuth/web/webman.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -622,7 +622,8 @@
 `\.{@\{}' 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
+nested comments. The \.{WEAVE} processor outputs `\.{@\{}'.
+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
@@ -633,6 +634,7 @@
 \@\} [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.
+The \.{WEAVE} processor outputs `\.{@\}}'.
 
 \@\& [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
@@ -812,7 +814,7 @@
 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\{|"\{"|\}}'.
+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
@@ -1196,7 +1198,7 @@
 END.{:261}
 ?endgroup
 \vfill\eject
-
\pageno=197 % take account of the page numbers for App's D and E.
+
\pageno=200 % 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
@@ -1590,7 +1592,7 @@
 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
+changes are extensive, you might be better off finding some computer
 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}

Modified: trunk/Master/texmf-dist/tex/plain/base/gkpmac.tex
===================================================================
--- trunk/Master/texmf-dist/tex/plain/base/gkpmac.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/tex/plain/base/gkpmac.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -4,12 +4,12 @@
 
 % Fonts for regular text
 
-\font\textrm=ccr10		% roman
-\font\textit=ccti10		% italic (emphasis)
-\font\textsl=ccsl10		% slanted (titles)
-\font\textbf=cmbx10			% bold
-\font\textcsc=cccsc10		% caps and small caps
-\font\oldsty=ccmi10		% equation numbers
+\font\textrm=ccr10              % roman
+\font\textit=ccti10             % italic (emphasis)
+\font\textsl=ccsl10             % slanted (titles)
+\font\textbf=cmbx10                     % bold
+\font\textcsc=cccsc10           % caps and small caps
+\font\oldsty=ccmi10             % equation numbers
 \font\twelvett=cmtt12
 
 % Fonts for regular math
@@ -266,8 +266,8 @@
   \smallskip\noindent}
 
 \def\beginsection#1 #2 \par{ % should not be first in the chapter
-  \backup=\lastskip	% but should come on first or second page of chapter
-  \mark{#1\enspace #2}	% because the mark gives running head on right page
+  \backup=\lastskip     % but should come on first or second page of chapter
+  \mark{#1\enspace #2}  % because the mark gives running head on right page
   \nobreak\vskip-\backup\penalty-200
   {\subtitle\baselineskip=34pt
     \noindent\hbox to2\parindent{#1\hfil}\uppercase{\kern-.05em#2}\par}
@@ -413,8 +413,8 @@
 \def\copyrite{\ifpreprint{\textfont2=\sevensy\sevenrm\copyright\ 1988
    Addison-Wesley Publishing Company; all rights reserved}\fi}
 
-\newdimen\htrimsize \htrimsize=7.5in
-\newdimen\vtrimsize \vtrimsize=9.1875in
+\newdimen\htrimsize \htrimsize=7.375in
+\newdimen\vtrimsize \vtrimsize=9.25in
 \newdimen\outermargin \outermargin=23mm
 \newdimen\topmargin \topmargin=10mm % plus height of the headline box
 \newbox\htrim \newbox\vtrim \newbox\trimmarks
@@ -438,6 +438,7 @@
          \vbox to\vtrimsize{\kern\topmargin\fi
       \vbox to\totheight{
     \offinterlineskip % butt the boxes together
+    \vskip2.5pt % adjustment at the top (10 Jan 2011)
     \vbox to 2pc{ % this part goes on top of the regular pages
       \ifodd\pageno \rightheadline\else\leftheadline\fi
       \vfill} % this completes the \vbox to 2pc
@@ -444,8 +445,8 @@
     \ifodd\pageno\moveright7pc\fi #1
     \vfill
     \iftitle \global\titlefalse % reset the titlepage switch
-	\ifodd\pageno \hbox to35pc{\hfil\foliofont\folio}
-	\else\hbox{\foliofont\folio}\fi\fi
+        \ifodd\pageno \hbox to35pc{\hfil\foliofont\folio}
+        \else\hbox{\foliofont\folio}\fi\fi
     \ifpreprint\ifinxmode\makeinxfooter\fi\fi
     \iffinal % finish the trimmed page
       }\vfill}\ifodd\pageno\hskip\outermargin\else\hss\fi
@@ -489,9 +490,9 @@
 
 \catcode`\|=\active
 \expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\|}
-\newcount\defcount	% number of old definitions not yet repeated
-\newcount\changecount	% number of new definitions that are changed
-\newcount\miscount	% number of unknown references
+\newcount\defcount      % number of old definitions not yet repeated
+\newcount\changecount   % number of new definitions that are changed
+\newcount\miscount      % number of unknown references
 
 \newread\tempin
 \def\refin#1 {\openin\tempin=#1.ref
@@ -763,6 +764,7 @@
 \def\And{\quad{\rm and}\quad}
 \let\==\equiv
 \def\tmod#1{(mod~$#1$)}
+\def\pmod#1{\allowbreak\mkern18mu\hbox{(}{\rm mod}\,\,#1\hbox{)}}
 \let\implies=\Longrightarrow
 \def\?{\hbox{!`}} % subfactorial
 \def\hyp{\mathop{F{}}\nolimits\hyper}
@@ -770,7 +772,7 @@
 \def\hyper#1#2#3{\mathchoice{\tightplus
    \hbox{$\displaystyle\biggl({#1\atop#2}\Big\vert\,{#3}\!\biggr)$}}%
  {\bigl({#1\atop#2}\vert\mskip2mu#3\bigr)}%
- {}{}}	% used only in D and T styles
+ {}{}}  % used only in D and T styles
 %\def\hypk_#1{\mathop{F{}}_{#1}\nolimits\hyper} % confl with mFn convention
 \def\hypk_#1#2#3#4{\mathop{F{}}\mathchoice{\tightplus
   \hbox{$\displaystyle\biggl({#2\atop#3}\Big\vert\,{#4}\!\biggr)$}%
@@ -777,7 +779,7 @@
   \lower\fontdimen11\mathsym\hbox{$\scriptstyle\!#1$}}%
  {\bigl({#2\atop#3}\vert\mskip2mu#4\bigr)\lower\fontdimen12\mathsym
    \hbox{$\scriptstyle\!#1$}}%
- {}{}}	% used only in D and T styles
+ {}{}}  % used only in D and T styles
 \def\double(#1\choose#2){\mathchoice{\biggl(\!\!{#1\choose#2}\!\!\biggr)}
  {\bigl(\!{#1\choose#2}\!\bigr)}{}{}} % only D and T styles
 \def\hypstrut{\vphantom{_1\_^k}} % if there's another denominator with \_^k
@@ -853,9 +855,9 @@
 
 \hyphenation{logical Mac-Mahon hyper-geo-metric hyper-geo-met-rics Ber-noulli}
 
-\preprintfalse		% WE ARE MAKING THE REAL BOOK!
-\inxmodetrue		% WE ARE PREPARING A ROUGH INDEX
-\showmissestrue		% THE REFERENCES SHOULD ALL BE READY NOW
+\preprintfalse          % WE ARE MAKING THE REAL BOOK!
+\inxmodetrue            % WE ARE PREPARING A ROUGH INDEX
+\showmissestrue         % THE REFERENCES SHOULD ALL BE READY NOW
 
 \ifinxmode\immediate\openout\inx=\jobname.inx \fi % file for index reminders
 \ifinxmode\immediate\openout\bnx=\jobname.bnx \fi % file for bib reminders
@@ -883,7 +885,8 @@
  \message{OK, I'm making final copy with trim marks!}
  \hoffset=-.5in
  \getnxtpg % this should ensure eof on the \pages file
-\else\message{OK, I'll ship only the requested pages!}\fi\fi
+\else\message{OK, I'll ship only the requested pages!}
+ \hoffset=-.5in\fi\fi
 \def\shipout{\ifeof\pages\let\next=\Shipout
  \else\ifnum\pageno=\nxtpg\getnxtpg\let\next=\Shipout
   \else\let\next=\Tosspage\fi\fi \next}

Deleted: trunk/Master/texmf-dist/tex/plain/base/letter.tex
===================================================================
--- trunk/Master/texmf-dist/tex/plain/base/letter.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/tex/plain/base/letter.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -1,119 +0,0 @@
-% This macro file is for business letters
-
-\def\today{\ifcase\month\or
-  January\or February\or March\or April\or May\or June\or
-  July\or August\or September\or October\or November\or December\fi
-  \space\number\day, \number\year}
-\def\narrower{\advance\leftskip by 20pt \advance\rightskip by 20pt }
-
-\raggedbottom
-\interlinepenalty=1000
-\hsize=6.25truein \voffset=24pt \advance\vsize by-\voffset
-\parindent=0pt \parskip=0pt
-\nopagenumbers
-\headline={\ifnum\pageno>1
-  \tenrm To \addressee\hfil\today\hfil Page \folio
-  \else\hfil\fi}
-
-\def\beginlinemode{\endmode
-  \begingroup\obeylines\def\endmode{\par\endgroup}}
-\def\beginparmode{\endmode
-  \begingroup\parskip=\medskipamount \def\endmode{\par\endgroup}}
-\let\endmode=\par
-\def\endletter{\endmode\vfill\supereject \pageno=1 }
-
-\newdimen\longindentation \longindentation=4truein
-\newbox\theaddress
-\def\address{\beginlinemode\getaddress}
-{\obeylines\gdef\getaddress#1
-  #2
-  {\gdef\addressee{#2\unskip}%
-    \global\setbox\theaddress=\vbox\bgroup\raggedright%
-    \hsize=\longindentation \everypar{\hangindent2em}#2
-    \def\endmode{\egroup\endgroup \copy\theaddress \bigskip}}}
-
-\def\body{\beginparmode}
-\def\closing{\beginlinemode\getclosing}
-{\obeylines\gdef\getclosing #1
-  #2
-  {\nobreak\bigskip \leftskip=\longindentation #2
-    \nobreak\bigskip\bigskip\bigskip % space for signature
-    \def
-    {\endgraf\nobreak}}}
-\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}
-\def\ps{\beginparmode\nobreak
-  \interlinepenalty5000\def\par{\endgraf\penalty5000}}
-\def\cc{\beginparmode\nobreak
-  \interlinepenalty5000\def\par{\endgraf\penalty5000}}
-
-\def\up#1{\leavevmode \raise.16ex\hbox{#1}}
-\font\smallheadfont=cmr8 at 8truept
-\font\largeheadfont=cmbx10 at 14.4truept
-\font\logofont=stan70 at 70truept
-\def\stanfordseal{\vbox{\kern-3truept\hbox{\logofont A}\kern-3truept}}
-
-\def\csdreturn{Computer Science Department\par \stanfordreturn}
-\def\stanfordreturn{Stanford University\par
-    Stanford, CA 94305\kern.5pt-21\kern-.5pt40 USA\par}
-\def\letterhead{\pageno=1 \univletterhead
-  {\leftskip=\longindentation
-    {\baselineskip9truept\smallheadfont\sendingaddress}
-    \bigskip\bigskip\rm\today\bigskip}}
-\def\specrule#1{\nointerlineskip
-  \line{\hbox to 60truept{\hrulefill
-      \hphantom{\stanfordseal\kern-#1truept}%
-    \hrulefill}\hrulefill}\nointerlineskip}
-\def\univletterhead{\vglue-34pt
-  \specrule{11}\vskip8truept
-  \hbox{\hbox to\longindentation{\smash{\hbox to60truept{\hfil\kern2.5truept
-        \lower10truept\stanfordseal\hfil}}%
-      \largeheadfont STANFORD UNIVERSITY\hfil}%
-    \smallheadfont STANFORD, CALIFORNIA 94305\kern.5pt-21\kern-.5pt40}
-  \vskip6truept\specrule{17}\vskip13truept }
-
-\def\deklet{
-  \def\sendingaddress{DONALD E. KNUTH\par
-    Professor Emeritus of The Art of\par
-    \qquad Computer Programming\par
-    Department of Computer Science\par
-    Telephone \up[415\up]\thinspace 723-4367\par}
-  \def\returnaddress{Prof.~D. E. Knuth\par \csdreturn}
-  \letterhead}
-
-\def\memoto{\beginlinemode\parindent=60truept
-  \everypar{\hangindent70truept}\startmemo}
-\def\bigmemoto{\beginlinemode\parindent=60pt % use this for magstep>1!
-  \everypar{\hangindent70pt}\startmemo}
-\def\textin#1{\noindent\hbox to\parindent{#1\hss}\ignorespaces}
-{\obeylines\gdef\startmemo #1
-  {\gdef\addressee{#1}%
-  \global\pageno=1 \vglue-34pt\specrule{11}\vskip8truept
-  \leftline{\smash{\hbox to60truept{\hfil\kern2.5truept
-        \lower10truept\stanfordseal\hfil}}%
-    \largeheadfont Stanford Computer Science Department %
-    \rm\today}%
-  \vskip6truept\specrule{20}\bigskip\bigskip\bigskip%
-  \textin{Memo to:}#1
-  \def\endmode{\par\endgroup\bigskip}}
-  \gdef\from #1
-  {\smallskip\textin{From:}#1
-  }
-  \gdef\subject #1
-  {\smallskip\textin{Subject:}#1
-  }
-}
-
-\def\makelabel{\endletter\hbox{\vrule
-    \vbox{\hrule \kern6truept
-      \hbox{\kern6truept\stanfordseal\kern3pt
-          \vbox{\smallheadfont\baselineskip9truept\hsize=2truein\returnaddress}
-        \kern6truept}\kern6truept\hrule}\vrule}
-  \kern.1truein
-  \hbox{\vrule
-    \vbox{\hrule \kern12truept
-      \hbox{\kern12truept\copy\theaddress
-        \kern12truept}\kern12truept\hrule}\vrule}
-  \pageno=0\vfill\eject}
-
-\def\frac#1/#2{\leavemode\kern.1em\raise.5ex\hbox{\the\scriptfont0 
- #1}\kern-.1em/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}

Copied: trunk/Master/texmf-dist/tex/plain/base/letterformat.tex (from rev 57962, trunk/Master/texmf-dist/tex/plain/base/letter.tex)
===================================================================
--- trunk/Master/texmf-dist/tex/plain/base/letterformat.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/plain/base/letterformat.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -0,0 +1,85 @@
+% This macro file is for business letters
+
+\def\today{\ifcase\month\or
+  January\or February\or March\or April\or May\or June\or
+  July\or August\or September\or October\or November\or December\fi
+  \space\number\day, \number\year}
+
+\raggedbottom
+\interlinepenalty=1000
+\hsize=6.25truein
+\voffset=24pt
+\advance\vsize by-\voffset
+\parindent=0pt
+\parskip=0pt
+\nopagenumbers
+\headline={\ifnum\pageno>1
+  \tenrm To \addressee\hfil\today\hfil Page \folio
+  \else\hfil\fi}
+
+\def\beginlinemode{\endmode
+  \begingroup\obeylines\def\endmode{\par\endgroup}}
+\def\beginparmode{\endmode
+  \begingroup\parskip=\medskipamount \def\endmode{\par\endgroup}}
+\let\endmode=\par
+\def\endletter{\endmode\vfill\supereject}
+
+\newdimen\longindentation \longindentation=4truein
+\newbox\theaddress
+\def\address{\beginlinemode\getaddress}
+{\obeylines\gdef\getaddress #1
+  #2
+  {#1\gdef\addressee{#2}%
+    \global\setbox\theaddress=\vbox\bgroup\raggedright%
+    \hsize=\longindentation \everypar{\hangindent2em}#2
+    \def\endmode{\egroup\endgroup \copy\theaddress \bigskip}}}
+
+\def\body{\beginparmode}
+\def\closing{\beginlinemode\getclosing}
+{\obeylines\gdef\getclosing #1
+  #2
+  {#1\nobreak\bigskip \leftskip=\longindentation #2
+    \nobreak\bigskip\bigskip\bigskip % space for signature
+    \def
+    {\endgraf\nobreak}}}
+\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}
+\def\ps{\beginparmode\nobreak
+  \interlinepenalty5000\def\par{\endgraf\penalty5000 }}
+
+\def\up#1{\leavevmode \raise.16ex\hbox{#1}}
+\font\smallheadfont=cmr8 at 8truept
+\font\largeheadfont=cmdunh10 at 14.4truept
+\font\logofont=manfnt at 14.4truept
+
+\def\rjdletterhead{
+  \def\sendingaddress{R. J. DROFNATS, F.T.U.G.\par
+    PROFESSOR OF FARM ECOLOGY\par
+    TEX.RJD @ SU-SCORE.ARPA\par
+    \up[415\up]\thinspace 497-4975\par}
+  \def\returnaddress{R. J. Drofnats, Dept.~of Farm Ecology\par
+    The University of St.~Anford\par
+    P. O. Box 1009, Haga Alto, CA 94321 USA}
+  \letterhead}
+
+\def\letterhead{\pageno=1 \def\addressee{} \univletterhead
+  {\leftskip=\longindentation
+    {\baselineskip9truept\smallheadfont\sendingaddress}
+    \bigskip\bigskip\rm\today\bigskip}}
+
+\def\univletterhead{\vglue-\voffset
+  \hbox{\hbox to\longindentation{\raise4truemm\hbox{\logofont
+        \kern2truept X\kern-1.667truept
+        \lower2truept\hbox{X}\kern-1.667truept X}\hfil
+      \largeheadfont The University of St.~Anford\hfil}%
+    \kern-\longindentation
+    \vbox{\smallheadfont\baselineskip9truept
+      \leftskip=\longindentation BOX 1009\par HAGA ALTO, CA 94321}}
+  \vskip2truept\hrule\vskip4truept }
+
+\def\makelabel{\endletter\hbox{\vrule
+    \vbox{\hrule \kern6truept
+      \hbox{\kern6truept\vbox to 2truein{\hsize=\longindentation
+          \smallheadfont\baselineskip9truept\returnaddress
+          \vfill\moveright 2truein\copy\theaddress\vfill}%
+        \kern6truept}\kern6truept\hrule}\vrule}
+  \pageno=0\vfill\eject}

Modified: trunk/Master/texmf-dist/tex/plain/base/list-latin.tex
===================================================================
--- trunk/Master/texmf-dist/tex/plain/base/list-latin.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/tex/plain/base/list-latin.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -1,4 +1,3 @@
-% This program by D. E. Knuth is not copyrighted and can be used freely.
 % Makes a listing of one or more files
 % Extended to allow the Latin-1 accented characters in UTF-8 encoding
 % Typical usage:
@@ -63,32 +62,3 @@
 % at present, it's indistinguishable from newline (^^J).
 
 % You can get up to 103 characters on a line without an overfull box.
-
-% Further notes from Don, January 2017:
-% 
-% Maybe I'm the only person left who still uses plain TeX in a UTF-8 world.
-% 
-% But for what it's worth, I'm appending a little file that I prepared today,
-% since it turned out to be useful in a project of interest to me.
-% 
-% Namely, I've got a program that takes an XML encoding of organ-pipe
-% settings, used by performers when they change the stops during a
-% performance, and translates it into a human-readable form.
-% I mean, the output says "when you reach combination nunber 0013,
-% the following ranks of pipes are set to play".
-% 
-% The names of those ranks of pipes often contain accented characters,
-% as well as things like the German \ss. In order to use such texts on the Web,
-% I have them in UTF-8 code. But to make a verbatim hardcopy listing using
-% nice typewriter-style fonts, I wanted a program like "list.tex", which
-% I've been using to print text files for more than 25 years.
-% 
-% Fortunately, the accented characters all turn out to be two-character
-% sequences in UTF-8, where the first character is always '303. So I
-% can simply make that character active, and it can then change the
-% following character appropriately.
-% 
-% Therefore I added a few lines to "list.tex", resulting in "list-latin.tex".
-% And it works! Hence it might be a useful addition to the CTAN archives.
-% 
-% Yours truly, Don

Added: trunk/Master/texmf-dist/tex/plain/base/llist-latin.tex
===================================================================
--- trunk/Master/texmf-dist/tex/plain/base/llist-latin.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/plain/base/llist-latin.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -0,0 +1,84 @@
+% Makes a landscape listing of one or more files
+% Extended to allow the Latin-1 accented characters in UTF-8 encoding
+% Typical usage:
+% tex llist-latin *.txt \\end
+
+\def\grabfile#1 {\setbox0=\lastbox\endgraf\doit{#1}}
+\everypar{\grabfile}
+
+\font\filenamefont= cmtt8 scaled\magstep3
+\font\headlinefont= cmr8
+\font\listingfont= cmtex8
+\font\ttfont= cmtt8
+\font\syttfont= cmsytt10 at 8pt
+\font\eoffont= cmti8
+
+\def\today{\ifcase\month\or
+  January\or February\or March\or April\or May\or June\or
+  July\or August\or September\or October\or November\or December\fi
+  \space\number\day, \number\year}
+\newcount\m \newcount\n
+\n=\time \divide\n 60 \m=-\n \multiply\m 60 \advance\m \time
+\def\hours{\twodigits\n\twodigits\m}
+\def\twodigits#1{\ifnum #1<10 0\fi \number#1}
+
+\newlinechar=`@
+\message{@\today\space at \hours}
+
+\baselineskip=9pt
+\medskipamount=4pt minus 1pt
+\raggedbottom
+\nopagenumbers
+
+\newcount\n
+\catcode`\^^c3=\active
+\def\missing{{\syttfont\char15}}
+\def^^c3#1{\n=`#1\advance\n by-128
+  {\ttfont\ifcase\n 
+  \`A\or\'A\or\^A\or\~A\or\"A\or\AA\or\AE\or\c C\or
+  \`E\or\'E\or\^E\or\"E\or\`I\or\'I\or\^I\or\"I\or
+  \missing\or\~N\or\`O\or\'O\or\^O\or\~O\or\"O\or{\syttfont\char2}\or
+  \O\or\`U\or\'U\or\^U\or\"U\or\'Y\or\missing\or\ss\or
+  \`a\or\'a\or\^a\or\~a\or\"a\or\aa\or\ae\or\c c\or
+  \`e\or\'e\or\^e\or\"e\or\`\i\or\'\i\or\^\i\or\"\i\or
+  \missing\or\~n\or\`o\or\'o\or\^o\or\~o\or\"o\or{\syttfont\char4}\or
+  \o\or\`u\or\'u\or\^u\or\"u\or\'y\or\missing\or\"y\fi}}
+
+\chardef\other=12
+\def\doit#1{\message{@Listing #1@}
+  \begingroup \everypar{} \frenchspacing
+  \headline{\ifright \headlinefont \hfill Page \folio
+    \else\filenamefont#1\quad\headlinefont \today\ at \hours\hss \fi}
+  \def\do##1{\catcode`##1=\other}\dospecials
+  \catcode127=\other \catcode9=\other \catcode12=\other
+  \parindent 0pt \parfillskip=0pt plus 1fil minus .8in
+  \everypar{\hangindent 1in} \rightskip=0pt plus 2in
+  \def\par{\ifvmode\penalty-50\medskip\else\endgraf\fi}
+  \listingfont \obeylines \obeyspaces \global\pageno=1
+  \input #1 {\eoffont(end of\/ file)}\endgraf\vfill\eject
+  \ifright\null\vfill\eject\fi\endgroup}
+{\obeyspaces\global\let =\ }
+\catcode`\_=\other % allow _ in file names
+
+\hsize=4.6truein
+\vsize=7truein
+\hoffset=-.5truein
+\voffset=-.2truein
+\newif\ifright
+\newbox\lefthalf
+\output{\ifright
+ \shipout\hbox{\hbox to5.5in{\box\lefthalf\hss}%
+    \vbox{\makeheadline\pagebody\makefootline}}
+    \advancepageno\global\rightfalse
+ \else\global\setbox\lefthalf\vbox{\makeheadline\pagebody\makefootline}
+    \global\righttrue\fi}
+
+\special{landscape}
+
+% A tab (^^I) prints as lowercase gamma.
+% Character ^^M could be made visible, with a bit of work;
+% at present, it's indistinguishable from newline (^^J).
+
+% You can get up to 91 characters on a line without an overfull box.
+% (But lines with more than 84 characters will be clipped, if they
+% appear on a righthand halfpage.)


Property changes on: trunk/Master/texmf-dist/tex/plain/base/llist-latin.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/plain/base/llist.tex
===================================================================
--- trunk/Master/texmf-dist/tex/plain/base/llist.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/tex/plain/base/llist.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -31,7 +31,7 @@
 \def\doit#1{\message{@Listing #1@}
   \begingroup \everypar{} \frenchspacing
   \headline{\ifright \headlinefont \hfill Page \folio
-    \else\filenamefont#1\quad\headlinefont \today\ at \hours\hfill \fi}
+    \else\filenamefont#1\quad\headlinefont \today\ at \hours\hss \fi}
   \def\do##1{\catcode`##1=\other}\dospecials
   \catcode127=\other \catcode9=\other \catcode12=\other
   \parindent 0pt \parfillskip=0pt plus 1fil minus .8in

Modified: trunk/Master/texmf-dist/tex/plain/base/plain.tex
===================================================================
--- trunk/Master/texmf-dist/tex/plain/base/plain.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/tex/plain/base/plain.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -225,11 +225,11 @@
 \outer\def\newcount{\alloc at 0\count\countdef\insc at unt}
 \outer\def\newdimen{\alloc at 1\dimen\dimendef\insc at unt}
 \outer\def\newskip{\alloc at 2\skip\skipdef\insc at unt}
-\outer\def\newmuskip{\alloc at 3\muskip\muskipdef\@cclvi}
+\outer\def\newmuskip{\alloc at 3\muskip\muskipdef\@cclv}
 \outer\def\newbox{\alloc at 4\box\chardef\insc at unt}
 \let\newtoks=\relax % we do this to allow plain.tex to be read in twice
 \outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
-\outer\def\newtoks{\alloc at 5\toks\toksdef\@cclvi}
+\outer\def\newtoks{\alloc at 5\toks\toksdef\@cclv}
 \outer\def\newread{\alloc at 6\read\chardef\sixt@@n}
 \outer\def\newwrite{\alloc at 7\write\chardef\sixt@@n}
 \outer\def\newfam{\alloc at 8\fam\chardef\sixt@@n}
@@ -1238,4 +1238,4 @@
 \nonfrenchspacing % punctuation affects the spacing
 \catcode`@=12 % at signs are no longer letters
 
-\def\fmtname{plain}\def\fmtversion{3.141592653} % identifies the current format
+\def\fmtname{plain}\def\fmtversion{3.1415926535} % identifies the current format

Modified: trunk/Master/texmf-dist/tex/plain/knuth-lib/webmac.tex
===================================================================
--- trunk/Master/texmf-dist/tex/plain/knuth-lib/webmac.tex	2021-02-26 23:50:57 UTC (rev 57962)
+++ trunk/Master/texmf-dist/tex/plain/knuth-lib/webmac.tex	2021-02-26 23:56:54 UTC (rev 57963)
@@ -1,5 +1,5 @@
 % standard macros for WEB listings (in addition to PLAIN.TEX)
-\xdef\fmtversion{\fmtversion+WEBMAC4.1} % identifies current set of macros
+\xdef\fmtversion{\fmtversion+WEBMAC4.2} % identifies current set of macros
 \parskip 0pt % no stretch between paragraphs
 \parindent 1em % for paragraphs and for the first line of Pascal text
 
@@ -84,8 +84,10 @@
   \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}}
+  {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}}% remove \* from section name
+  \ifx\modno\modstar \onmaybe \else\ontrue \fi
+  \mark{{{\tensy x}\modno}{\rhead}}}
+  % each \mark is {section reference or null}{group title}
 \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
@@ -115,10 +117,14 @@
 
 \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\lheader{\mainfont\the\pageno\eightrm\qquad\rhead
+  \hfill\title\qquad\mainfont\topsecno} % top line on left-hand pages
+\def\rheader{\mainfont\topsecno\eightrm\qquad\title\hfill
+  \rhead\qquad\mainfont\the\pageno} % top line on right-hand pages
+\def\topsecno{\expandafter\takeone\topmark}
+\def\takeone#1#2{#1}
+\def\taketwo#1#2{#2}
+\def\nullsec{\eightrm\kern-2em} % the \kern-2em cancels \qquad in headers
 \def\page{\box255 }
 \def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi
   \shipout\vbox{
@@ -129,6 +135,7 @@
   \global\advance\pageno by1}
 
 \def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections
+\mark{\noexpand\nullsec{\rhead}}
 \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
@@ -183,6 +190,7 @@
   \if L\lr\else\null\vfill\eject\fi % finish the current page
   \parfillskip 0pt plus 1fil
   \def\rhead{NAMES OF THE SECTIONS}
+  \let\topsecno=\nullsec
   \message{Section names:}
   \output{\normaloutput\page\lheader\rheader}
   \setpage



More information about the tex-live-commits mailing list.