texlive[57558] Build/source/texk/web2c: tuneup2021 from DEK, with

commits+karl at tug.org commits+karl at tug.org
Sat Jan 30 02:42:07 CET 2021


Revision: 57558
          http://tug.org/svn/texlive?view=revision&revision=57558
Author:   karl
Date:     2021-01-30 02:42:07 +0100 (Sat, 30 Jan 2021)
Log Message:
-----------
tuneup2021 from DEK, with adaptations for TL

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/ChangeLog
    trunk/Build/source/texk/web2c/Makefile.am
    trunk/Build/source/texk/web2c/Makefile.in
    trunk/Build/source/texk/web2c/NEWS
    trunk/Build/source/texk/web2c/alephdir/alephextra.h
    trunk/Build/source/texk/web2c/alephdir/com16bit.ch
    trunk/Build/source/texk/web2c/alephdir/eobase.ch
    trunk/Build/source/texk/web2c/alephdir/eocprt.ch
    trunk/Build/source/texk/web2c/alephdir/eoext.ch
    trunk/Build/source/texk/web2c/alephdir/eover.ch
    trunk/Build/source/texk/web2c/alephdir/om16bit.ch
    trunk/Build/source/texk/web2c/alephdir/omfont.ch
    trunk/Build/source/texk/web2c/alephdir/omstr.ch
    trunk/Build/source/texk/web2c/dvitype.web
    trunk/Build/source/texk/web2c/eptexdir/eptex.ech
    trunk/Build/source/texk/web2c/eptexdir/eptexextra.h
    trunk/Build/source/texk/web2c/eptexdir/eptrip/eptrip.diffs
    trunk/Build/source/texk/web2c/etexdir/etex.ch
    trunk/Build/source/texk/web2c/etexdir/etexextra.h
    trunk/Build/source/texk/web2c/etexdir/etrip/etrip.diffs
    trunk/Build/source/texk/web2c/etexdir/etrip/etrip.tex
    trunk/Build/source/texk/web2c/etexdir/tex.ch0
    trunk/Build/source/texk/web2c/etexdir/tex.ech
    trunk/Build/source/texk/web2c/euptexdir/euptex.ch0
    trunk/Build/source/texk/web2c/euptexdir/euptexextra.h
    trunk/Build/source/texk/web2c/euptexdir/euptrip/euptrip.diffs
    trunk/Build/source/texk/web2c/gftodvi.web
    trunk/Build/source/texk/web2c/gftopk.web
    trunk/Build/source/texk/web2c/gftype.web
    trunk/Build/source/texk/web2c/lib/texmfmp.c
    trunk/Build/source/texk/web2c/mf-binpool.ch
    trunk/Build/source/texk/web2c/mf.ch
    trunk/Build/source/texk/web2c/mf.web
    trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch
    trunk/Build/source/texk/web2c/mfluadir/mflua_version.h
    trunk/Build/source/texk/web2c/mfluadir/mfluaextra.h
    trunk/Build/source/texk/web2c/mfluadir/mfluatrap/mfluatrap.diffs
    trunk/Build/source/texk/web2c/mfluajitdir/mf-luajit.ch
    trunk/Build/source/texk/web2c/mfluajitdir/mfluajitextra.h
    trunk/Build/source/texk/web2c/mfluajitdir/mfluajittrap/mfluajittrap.diffs
    trunk/Build/source/texk/web2c/mft.ch
    trunk/Build/source/texk/web2c/mft.web
    trunk/Build/source/texk/web2c/mftraptest.test
    trunk/Build/source/texk/web2c/pdftexdir/pdftex.web
    trunk/Build/source/texk/web2c/pdftexdir/pdftexextra.h
    trunk/Build/source/texk/web2c/pdftexdir/tex.ch0
    trunk/Build/source/texk/web2c/pltotf.web
    trunk/Build/source/texk/web2c/pooltype.web
    trunk/Build/source/texk/web2c/ptexdir/ptex-base.ch
    trunk/Build/source/texk/web2c/ptexdir/ptexextra.h
    trunk/Build/source/texk/web2c/ptexdir/ptrip/ptrip.diffs
    trunk/Build/source/texk/web2c/tangle.ch
    trunk/Build/source/texk/web2c/tangle.web
    trunk/Build/source/texk/web2c/tangleboot.pin
    trunk/Build/source/texk/web2c/tex.ch
    trunk/Build/source/texk/web2c/tex.web
    trunk/Build/source/texk/web2c/tftopl.web
    trunk/Build/source/texk/web2c/triptest.test
    trunk/Build/source/texk/web2c/triptrap/README
    trunk/Build/source/texk/web2c/triptrap/mftrap.diffs
    trunk/Build/source/texk/web2c/triptrap/mftrap.fot
    trunk/Build/source/texk/web2c/triptrap/mftrap.log
    trunk/Build/source/texk/web2c/triptrap/mftrapin.log
    trunk/Build/source/texk/web2c/triptrap/mptrap.diffs
    trunk/Build/source/texk/web2c/triptrap/trap.typ
    trunk/Build/source/texk/web2c/triptrap/trip.diffs
    trunk/Build/source/texk/web2c/triptrap/trip.fot
    trunk/Build/source/texk/web2c/triptrap/trip.log
    trunk/Build/source/texk/web2c/triptrap/trip.tex
    trunk/Build/source/texk/web2c/triptrap/trip.typ
    trunk/Build/source/texk/web2c/triptrap/tripin.log
    trunk/Build/source/texk/web2c/triptrap-sh
    trunk/Build/source/texk/web2c/uptexdir/uptex-m.ch
    trunk/Build/source/texk/web2c/uptexdir/uptexextra.h
    trunk/Build/source/texk/web2c/uptexdir/uptrip/uptrip.diffs
    trunk/Build/source/texk/web2c/vftovp.web
    trunk/Build/source/texk/web2c/vptovf.web
    trunk/Build/source/texk/web2c/weave.ch
    trunk/Build/source/texk/web2c/weave.web
    trunk/Build/source/texk/web2c/xetexdir/xetex.web
    trunk/Build/source/texk/web2c/xetexdir/xetexextra.h

Property Changed:
----------------
    trunk/Build/source/texk/web2c/triptrap/README
    trunk/Build/source/texk/web2c/triptrap-sh

Modified: trunk/Build/source/texk/web2c/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/ChangeLog	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/ChangeLog	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,3 +1,100 @@
+2021-01-29  Karl Berry  <karl at freefriends.org>
+
+	* NEWS: mention tuneup.
+
+	* alephdir/alephextra.h,
+	* alephdir/com16bit.ch,
+	* alephdir/eobase.ch,
+	* alephdir/eocprt.ch,
+	* alephdir/eoext.ch,
+	* alephdir/eover.ch,
+	* alephdir/om16bit.ch,
+	* alephdir/omfont.ch,
+	* alephdir/omstr.ch,
+	* eptexdir/eptex.ech,
+	* eptexdir/eptexextra.h,
+	* etexdir/etex.ch,
+	* etexdir/etexextra.h,
+	* etexdir/tex.ch0,
+	* etexdir/tex.ech,
+	* euptexdir/euptex.ch0,
+	* euptexdir/euptexextra.h,
+	* lib/texmfmp.c,
+	* mf-binpool.ch,
+	* mf.ch,
+	* mfluadir/mf-lua.ch,
+	* mfluadir/mflua_version.h,
+	* mfluadir/mfluaextra.h,
+	* mfluajitdir/mf-luajit.ch,
+	* mfluajitdir/mfluajitextra.h,
+	* mft.ch,
+	* pdftexdir/pdftexextra.h,
+	* pdftexdir/tex.ch0,
+	* ptexdir/ptex-base.ch,
+	* ptexdir/ptexextra.h,
+	* tangle.ch,
+	* tangleboot.pin,
+	* tex.ch,
+	* uptexdir/uptex-m.ch,
+	* uptexdir/uptexextra.h,
+	* weave.ch,
+	* xetexdir/xetexextra.h: updates for 2021 tuneup.
+
+	* mftraptest.test,
+	* triptest.test,
+	* triptrap-sh,
+	* mfluadir/mfluatrap/mfluatrap.diffs,
+	* etexdir/etrip/etrip.diffs,
+	* triptrap/trip.diffs,
+	* triptrap/mftrap.diffs,
+	* triptrap/mptrap.diffs,
+	* eptexdir/eptrip/eptrip.diffs,
+	* uptexdir/uptrip/uptrip.diffs,
+	* euptexdir/euptrip/euptrip.diffs,
+	* mfluajitdir/mfluajittrap/mfluajittrap.diffs,
+	* ptexdir/ptrip/ptrip.diffs: trip/trap updates for 2021 tuneup.
+
+	* tangleboot.pin: update bootstrap file.
+
+	* triptrap/README,
+	* Makefile.am: doc for running triptrap.
+
+2021-01-29  Donald Knuth  <tex-k at tug.org>
+
+	2021 tuneup update. Overview:
+	  https://tug.org/TUGboat/tb42-1/tb130knuth-tuneup21.pdf
+	Bug reporting info:
+	  https://tug.org/texmfbug/
+	New TeX version is 3.141592653, MF 2.71828182.
+
+	* dvitype.web,
+	* gftodvi.web,
+	* gftopk.web,
+	* gftype.web,
+	* mf.web,
+	* mft.web,
+	* pltotf.web,
+	* pooltype.web,
+	* tangle.web,
+	* tex.web,
+	* tftopl.web,
+	* vftovp.web,
+	* vptovf.web,
+	* weave.web: new versions. BTW, these are all of the web
+	files which DEK maintains. The rest are maintained by other people:
+	bibtex.web (Oren), patgen.web and dvicopy.web (here),
+	pktype.web and pktogf.web (Tom Rokicki).
+	
+	* triptrap/mftrap.fot,
+	* triptrap/mftrap.log,
+	* triptrap/mftrapin.log,
+	* triptrap/trap.typ,
+	* triptrap/trip.fot,
+	* triptrap/trip.log,
+	* triptrap/trip.tex,
+	* triptrap/trip.typ,
+	* triptrap/tripin.log: trip and trap test updates.
+
 2020-10-27  Karl Berry  <karl at freefriends.org>
 
 	* pktogf.web: TFM widths are 2^20 times the ratio, not 2^24.

Modified: trunk/Build/source/texk/web2c/Makefile.am
===================================================================
--- trunk/Build/source/texk/web2c/Makefile.am	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/Makefile.am	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,7 +1,7 @@
 ## $Id$
 ## Makefile.am for the TeX Live subdirectory texk/web2c/.
 ##
-## Copyright 2017-2020 Karl Berry <tex-live at tug.org>
+## Copyright 2017-2021 Karl Berry <tex-live at tug.org>
 ## Copyright 2009-2015 Peter Breitenlohner <tex-live at tug.org>
 ## You may freely use, modify and/or distribute this file.
 ##
@@ -157,6 +157,31 @@
 AM_TESTS_ENVIRONMENT += LN_S='$(LN_S)'; export LN_S;
 AM_TESTS_ENVIRONMENT += KPSEWHICH='$(KPSEWHICH)'; export KPSEWHICH;
 
+# To run, e.g., just the original trip test, in the build directory:
+#   make -C $ww TRIPTRAP=trip.diffs triptrap
+# where $ww is the web2c build directory.   
+# 
+# This will run the triptrap-sh script
+#   which then runs make TEST=triptest.test check-am,
+#   which then runs the (srcdir file) triptest.test script;
+#   its output will be in (builddir file) trip.diffs,
+#   and triptest.out if the test failed,   
+#   plus various created files in the tripdir/ subdirectory.
+# The triptest.diffs file will have the actual abs_srcdir value replaced
+#  with the constant string "SRCDIR" to minimize differences, and "../"
+#  replaced with "./" to match the canonical output. Confusing. For the
+#  real output, see triptest.log.
+# 
+# To build only tex, make -C $ww tex (i.e., in builddir) should do it.
+# Unfortunately the check-am target depends on all-am, so all engines
+# are built before any tests are run. If this is a problem, just have to
+# edit the generated Makefile in builddir to remove the dependency.
+# 
+# Other per-engine invocations (see triptrap-sh for complete list):
+#   make -C $ww mf && make -C $ww TRIPTRAP=mftrap.diffs triptrap
+#   make -C $ww etex && make -C $ww TRIPTRAP=etrip.diffs triptrap   
+#   make -C $ww ptex && make -C $ww TRIPTRAP=ptrip.diffs triptrap   
+#   
 triptrap_diffs = $(AM_V_GEN)srcdir=$(srcdir) abs_srcdir=$(abs_srcdir) MAKE=$(MAKE) $(SHELL) $(srcdir)/triptrap-sh
 
 .PHONY: triptrap

Modified: trunk/Build/source/texk/web2c/Makefile.in
===================================================================
--- trunk/Build/source/texk/web2c/Makefile.in	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/Makefile.in	2021-01-30 01:42:07 UTC (rev 57558)
@@ -3680,6 +3680,32 @@
 	DIFF='$(DIFF)'; export DIFF; DIFFFLAGS='$(DIFFFLAGS)'; export \
 	DIFFFLAGS; LN_S='$(LN_S)'; export LN_S; \
 	KPSEWHICH='$(KPSEWHICH)'; export KPSEWHICH;
+
+# To run, e.g., just the original trip test, in the build directory:
+#   make -C $ww TRIPTRAP=trip.diffs triptrap
+# where $ww is the web2c build directory.   
+# 
+# This will run the triptrap-sh script
+#   which then runs make TEST=triptest.test check-am,
+#   which then runs the (srcdir file) triptest.test script;
+#   its output will be in (builddir file) trip.diffs,
+#   and triptest.out if the test failed,   
+#   plus various created files in the tripdir/ subdirectory.
+# The triptest.diffs file will have the actual abs_srcdir value replaced
+#  with the constant string "SRCDIR" to minimize differences, and "../"
+#  replaced with "./" to match the canonical output. Confusing. For the
+#  real output, see triptest.log.
+# 
+# To build only tex, make -C $ww tex (i.e., in builddir) should do it.
+# Unfortunately the check-am target depends on all-am, so all engines
+# are built before any tests are run. If this is a problem, just have to
+# edit the generated Makefile in builddir to remove the dependency.
+# 
+# Other per-engine invocations (see triptrap-sh for complete list):
+#   make -C $ww mf && make -C $ww TRIPTRAP=mftrap.diffs triptrap
+#   make -C $ww etex && make -C $ww TRIPTRAP=etrip.diffs triptrap   
+#   make -C $ww ptex && make -C $ww TRIPTRAP=ptrip.diffs triptrap   
+#   
 triptrap_diffs = $(AM_V_GEN)srcdir=$(srcdir) abs_srcdir=$(abs_srcdir) MAKE=$(MAKE) $(SHELL) $(srcdir)/triptrap-sh
 
 # The environment for making dumps.

Modified: trunk/Build/source/texk/web2c/NEWS
===================================================================
--- trunk/Build/source/texk/web2c/NEWS	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/NEWS	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,5 +1,9 @@
 This file records noteworthy changes.  (Public domain.)
 
+* Knuth 2021 tune-up, with fixes to all of his *.web files. Overview:
+https://tug.org/TUGboat/42-1/tb130knuth-tuneup21.pdf
+New TeX version is 3.141592653, MF 2.71828182.
+
 * pdftex, xetex, e(u)ptex: if \tracinglostchars >= 3,
 make missing characters an error (not just a log message),
 and always report the character code in hex.

Modified: trunk/Build/source/texk/web2c/alephdir/alephextra.h
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/alephextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/alephextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -23,7 +23,7 @@
 
 */
 
-#define BANNER "This is Aleph, Version 3.14159265-1.15-2.1-0.1"
+#define BANNER "This is Aleph, Version 3.141592653-1.15-2.1-0.1"
 #define COPYRIGHT_HOLDER "Aleph task force"
 #define AUTHOR NULL
 #define PROGRAM_HELP ALEPHHELP

Modified: trunk/Build/source/texk/web2c/alephdir/com16bit.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/com16bit.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/com16bit.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -40,9 +40,9 @@
 @z
 
 @x
- at d banner=='This is Aleph, Version 3.14159265-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts}
+ at d banner=='This is Aleph, Version 3.141592653-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts}
 @y
- at d banner=='This is Aleph, Version 3.14159265-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts}
+ at d banner=='This is Aleph, Version 3.141592653-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts}
 @d banner_k==banner {Web2C announces itself}
 @z
 
@@ -740,13 +740,14 @@
 % selector from 16 to 15 in term_input, due to the lack of this check in
 % a recursive error() call.
 %
- at x [6.83] l.1893 - avoid wrong interaction 
-loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
- at y
-loop at +begin continue:
-if interaction<>error_stop_mode then return;
-clear_for_error_prompt; prompt_input("? ");
- at z
+%@x [6.83] l.1893 - avoid wrong interaction 
+%applied in 3.141592653
+%loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
+%@y
+%loop at +begin continue:
+%if interaction<>error_stop_mode then return;
+%clear_for_error_prompt; prompt_input("? ");
+%@z
 
 @x [6.84] l.1904 - Implement the switch-to-editor option.
 line ready to be edited. But such an extension requires some system
@@ -774,7 +775,7 @@
 @z
 
 @x [6.84] l.1903 - Implement the switch-to-editor option.
-"E": if base_ptr>0 then
+"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
   begin print_nl("You want to edit file ");
 @.You want to edit file x@>
   slow_print(input_stack[base_ptr].name_field);
@@ -781,7 +782,7 @@
   print(" at line "); print_int(line);
   interaction:=scroll_mode; jump_out;
 @y
-"E": if base_ptr>0 then
+"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
     begin edit_name_start:=str_start(edit_file.name_field);
     edit_name_length:=str_start(edit_file.name_field+1) -
     		      str_start(edit_file.name_field);
@@ -950,23 +951,24 @@
 input and output, establishes the initial values of the date and time.
 @^system dependencies@>
 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.
+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).
 
 @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}
+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}
 end;
 @y
 @ The following procedure, which is called just before \TeX\ initializes its
 input and output, establishes the initial values of the date and time.
-It calls a macro-defined |date_and_time| routine.  |date_and_time|
-in turn is a C macro, which calls |get_date_and_time|, passing
-it the addresses of the day, month, etc., so they can be set by the
-routine.  |get_date_and_time| also sets up interrupt catching if that
-is conditionally compiled in the C code.
+It calls an externally defined |date_and_time|, which also sets up
+interrupt catching. See more comments in \.{tex.ch}.
 @^system dependencies@>
 
 @d fix_date_and_time==o_date_and_time(int_base+time_code,
@@ -1624,7 +1626,7 @@
 @z
 
 @x [29.537] l.10359 - start_input: don't return filename to string pool.
-if name=str_ptr-1 then {we can conserve string pool space now}
+if name=str_ptr-1 then {conserve string pool space (but see note above)}
   begin flush_string; name:=cur_name;
   end;
 @y
@@ -2009,9 +2011,9 @@
 @z
 
 @x [43.943] l.18346 - web2c can't parse negative lower bounds in arrays.  Sorry.
-@!init@! trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
+@!init @!trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
 @y
-@!init@! trie_op_hash:array[neg_trie_op_size..trie_op_size] of 0..trie_op_size;
+@!init @!trie_op_hash:array[neg_trie_op_size..trie_op_size] of 0..trie_op_size;
 @z
 
 @x [43.944] l.18365 - web2c can't parse negative lower bounds in arrays.  Sorry
@@ -2057,7 +2059,7 @@
 @z
 
 @x [43.590] l.18524 - Dynamically allocate & larger tries.
-@!init@!trie_taken:packed array[1..trie_size] of boolean;
+@!init @!trie_taken:packed array[1..trie_size] of boolean;
   {does a family start here?}
 @t\hskip10pt@>@!trie_min:array[ASCII_code] of trie_pointer;
   {the first possible slot for each character}
@@ -2065,7 +2067,7 @@
 @t\hskip10pt@>@!trie_not_ready:boolean; {is the trie still in linked form?}
 tini
 @y
-@!init@!trie_taken: ^boolean;
+@!init @!trie_taken: ^boolean;
   {does a family start here?}
 @t\hskip10pt@>@!trie_min:^trie_pointer;
   {the first possible slot for each character}
@@ -2616,6 +2618,12 @@
 end {|main_body|};
 @z
 
+ at x
+begin @<Finish the extensions@>; new_line_char:=-1;
+ at y
+begin @<Finish the extensions@>; set_new_eqtb_int(int_base+new_line_char_code,-1);
+ at z
+
 @x [51.1333] l.24254 - Print new line before termination; switch to editor if necessary.
     slow_print(log_name); print_char(".");
     end;
@@ -2634,6 +2642,12 @@
 @y
 @z
 
+ at x
+begin c:=cur_chr; if c<>1 then new_line_char:=-1;
+ at y
+begin c:=cur_chr; if c<>1 then set_new_eqtb_int(int_base+new_line_char_code,-1);
+ at z
+
 @x [51.1335] l.24335 - Only do dump if ini.
   begin @!init for c:=top_mark_code to split_bot_mark_code do
     if cur_mark[c]<>null then delete_token_ref(cur_mark[c]);
@@ -2687,8 +2701,8 @@
 % running.  The best approximation is to do a core dump, then run the
 % debugger on it later.
 @x [52.1338] l.24411 - Core-dump in debugging mode on 0 input.
-    begin goto breakpoint;@\ {go to every label at least once}
-    breakpoint: m:=0; @{'BREAKPOINT'@}@\
+    begin goto breakpoint;@/ {go to every declared label at least once}
+    breakpoint: m:=0; @{'BREAKPOINT'@}@/
     end
 @y
     dump_core {do something to cause a core dump}

Modified: trunk/Build/source/texk/web2c/alephdir/eobase.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/eobase.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/eobase.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -39,8 +39,9 @@
 @x limbo l.1 - this is e-TeX
 %
 % This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved.
-% Copying of this file is authorized only if (1) you are D. E. Knuth, or if
-% (2) you make absolutely no changes to your copy. (The WEB system provides
+% Unlimited copying and redistribution of this file are permitted as long
+% as this file is not modified. Modifications are permitted, but only if
+% the resulting file is not named tex.web. (The WEB system provides
 % for alterations via an auxiliary file; the master file should stay intact.)
 % See Appendix H of the WEB manual for hints on how to install this program.
 % And see Appendix A of the TRIP manual for details about how to validate it.
@@ -182,11 +183,11 @@
 @z
 %---------------------------------------
 @x [1] m.2 l.187 - e-TeX basic
- at d banner=='This is Omega, Version 3.14159265--1.15' {printed when \TeX\ starts}
+ at d banner=='This is Omega, Version 3.141592653--1.15' {printed when \TeX\ starts}
 @y
- at d banner=='This is Aleph, Version 3.14159265--1.15--2.1' {printed when \TeX\ starts}
+ at d banner=='This is Aleph, Version 3.141592653--1.15--2.1' {printed when \TeX\ starts}
 @#
- at d eTeX_version_string=='3.14159265--1.15--2.1' {current \eTeX\ version}
+ at d eTeX_version_string=='3.141592653--1.15--2.1' {current \eTeX\ version}
 @d eTeX_version=2 { \.{\\eTeXversion} }
 @d eTeX_revision==".1" { \.{\\eTeXrevision} }
 @#
@@ -2361,9 +2362,9 @@
 @z
 %---------------------------------------
 @x [49] m.1292 l.23581 - e-TeX show_groups
-  show_lists:print_esc("showlists");
+  show_lists_code:print_esc("showlists");
 @y
-  show_lists:print_esc("showlists");
+  show_lists_code:print_esc("showlists");
   @<Cases of |xray| for |print_cmd_chr|@>@;@/
 @z
 %---------------------------------------

Modified: trunk/Build/source/texk/web2c/alephdir/eocprt.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/eocprt.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/eocprt.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -7,6 +7,6 @@
 print_nl("Copyright (c) 1994--2000 John Plaice and Yannis Haralambous");
 @y
 print_nl("Copyright (C) 1994--2000 John Plaice and Yannis Haralambous");
-print_nl("Copyright (C) 2002--2009 Aleph task force");
+print_nl("Copyright (C) 2002--2021 Aleph task force");
 @z
 

Modified: trunk/Build/source/texk/web2c/alephdir/eoext.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/eoext.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/eoext.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -62,9 +62,9 @@
 @z
 %----------------------------------------
 @x
-  print("Omega output, Version 3.14159265--1.15, ");
+  print("Omega output, Version 3.141592653--1.15, ");
 @y
-  print("Aleph output, Version 3.14159265--1.15--2.1, ");
+  print("Aleph output, Version 3.141592653--1.15--2.1, ");
 @z
 %----------------------------------------
 @x

Modified: trunk/Build/source/texk/web2c/alephdir/eover.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/eover.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/eover.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -5,9 +5,9 @@
 % * we add both \eTeX-like and \OMEGA-like
 %   commands to display the version
 @x
- at d banner=='This is Aleph, Version 3.14159265--1.15--2.1' {printed when \TeX\ starts}
+ at d banner=='This is Aleph, Version 3.141592653--1.15--2.1' {printed when \TeX\ starts}
 @#
- at d eTeX_version_string=='3.14159265--1.15--2.1' {current \eTeX\ version}
+ at d eTeX_version_string=='3.141592653--1.15--2.1' {current \eTeX\ version}
 @d eTeX_version=2 { \.{\\eTeXversion} }
 @d eTeX_revision==".1" { \.{\\eTeXrevision} }
 @#
@@ -30,7 +30,7 @@
 @d Omega_revision==".15" { \.{\\Omegarevision} }
 @d Aleph_revision==".0" { \.{\\Alephrevision} }
 @#
- at d banner=='This is Aleph, Version 3.14159265-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts}
+ at d banner=='This is Aleph, Version 3.141592653-',Omega_version_banner,'-',eTeX_version_banner,'-',Aleph_version_banner {printed when \TeX\ starts}
 @d eTeX_banner==banner
   {printed when \eTeX\ starts}
 @z

Modified: trunk/Build/source/texk/web2c/alephdir/om16bit.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/om16bit.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/om16bit.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -74,9 +74,9 @@
 @z
 %---------------------------------------
 @x [1] m.2 l.187 - Omega
- 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
- at d banner=='This is Omega, Version 3.14159265--1.15' {printed when \TeX\ starts}
+ at d banner=='This is Omega, Version 3.141592653--1.15' {printed when \TeX\ starts}
 @z
 %---------------------------------------
 @x [1] m.4 l.243
@@ -1558,6 +1558,7 @@
 primitive("crcr",car_ret,cr_cr_code);
 @!@:cr_cr_}{\.{\\crcr} primitive@>
 text(frozen_end_template):="endtemplate"; text(frozen_endv):="endtemplate";
+ at .endtemplate@>
 eq_type(frozen_endv):=endv; equiv(frozen_endv):=null_list;
 eq_level(frozen_endv):=level_one;@/
 eqtb[frozen_end_template]:=eqtb[frozen_endv];
@@ -1616,7 +1617,8 @@
 %---------------------------------------
 @x [40] m.892 l.17469 - Omega
 @!hc:array[0..65] of 0..256; {word to be hyphenated}
-@!hn:small_number; {the number of positions occupied in |hc|}
+@!hn:0..64; {the number of positions occupied in |hc|;
+                                  not always a |small_number|}
 @!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result}
 @!hf:internal_font_number; {font number of the letters in |hc|}
 @!hu:array[0..63] of 0..256; {like |hc|, before conversion to lowercase}
@@ -1626,7 +1628,8 @@
 @!hyf_bchar:halfword; {boundary character after $c_n$}
 @y
 @!hc:array[0..65] of 0..too_big_char; {word to be hyphenated}
-@!hn:small_number; {the number of positions occupied in |hc|}
+@!hn:0..64; {the number of positions occupied in |hc|;
+                                  not always a |small_number|}
 @!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result}
 @!hf:internal_font_number; {font number of the letters in |hc|}
 @!hu:array[0..63] of 0..too_big_char; 

Modified: trunk/Build/source/texk/web2c/alephdir/omfont.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/omfont.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/omfont.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -279,7 +279,7 @@
   {start of |lig_kern| program for left boundary character,
   |non_address| if there is none}
 @!font_bchar:array[internal_font_number] of min_quarterword..non_char;
-  {right boundary character, |non_char| if there is none}
+  {boundary character, |non_char| if there is none}
 @!font_false_bchar:array[internal_font_number] of min_quarterword..non_char;
   {|font_bchar| if it doesn't exist in the font, otherwise |non_char|}
 @y
@@ -619,9 +619,9 @@
 @z
 %---------------------------------------
 @x [30] m.560 l.10888 - Omega
-@!bchar:0..256; {right boundary character, or 256}
+@!bchar:0..256; {boundary character, or 256}
 @y
-@!bchar:0..too_big_char; {right boundary character, or |too_big_char|}
+@!bchar:0..too_big_char; {boundary character, or |too_big_char|}
 @!first_two:integer;
 @z
 %---------------------------------------

Modified: trunk/Build/source/texk/web2c/alephdir/omstr.ch
===================================================================
--- trunk/Build/source/texk/web2c/alephdir/omstr.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/alephdir/omstr.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -758,11 +758,11 @@
 @x [29] m.536 l.10324 - Omega
 begin wlog(banner);
 slow_print(format_ident); print("  ");
-print_int(day); print_char(" ");
+print_int(sys_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);
+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);
 end
 @y
 begin wlog(banner);
@@ -769,6 +769,10 @@
 slow_print(format_ident); print_nl("");
 print_int(day); print_char(" ");
 months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
+{don't output garbage if nefarious user sets invalid month value;
+ this error message never actually shows up, the program just aborts,
+ but it doesn't matter in practice.}
+if (month < 1) or (month > 12) then fatal_error("month out of range 1..12");
 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);
@@ -785,7 +789,7 @@
 @x [32] m.617 l.12262 - Omega
   print(" TeX output "); print_int(year); print_char(".");
 @y
-  print("Omega output, Version 3.14159265--1.15, ");
+  print("Omega output, Version 3.141592653--1.15, ");
   print_int(year); print_char(".");
 @z
 %---------------------------------------

Modified: trunk/Build/source/texk/web2c/dvitype.web
===================================================================
--- trunk/Build/source/texk/web2c/dvitype.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/dvitype.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -32,7 +32,7 @@
 \def\title{DVI$\,$\lowercase{type}}
 \def\contentspagenumber{401}
 \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 The {\ttitlefont DVItype} processor}
@@ -1245,7 +1245,7 @@
 options that the user must specify: The |out_mode| level is set to one of
 five values (|errors_only|, |terse|, |mnemonics_only|,
 |verbose|, |the_works|), giving
-different degrees of output; and the typeout can be confined to a
+different degrees of output; and the listing can be confined to a
 restricted subset of the pages by specifying the desired starting page and
 the maximum number of pages. Furthermore there is an option to specify the
 resolution of an assumed discrete output device, so that pixel-oriented
@@ -2266,7 +2266,7 @@
 post_loc:=q; first_backpointer:=signed_quad
 
 @ Note that the last steps of the above code save the locations of the
-the |post| byte and the final |bop|.  We had better declare these global
+|post| byte and the final |bop|.  We had better declare these global
 variables, together with two more that we will need shortly.
 
 @<Glob...@>=

Modified: trunk/Build/source/texk/web2c/eptexdir/eptex.ech
===================================================================
--- trunk/Build/source/texk/web2c/eptexdir/eptex.ech	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/eptexdir/eptex.ech	2021-01-30 01:42:07 UTC (rev 57558)
@@ -36,7 +36,7 @@
   {printed when \pTeX\ starts}
 @#
 @d epTeX_version==pTeX_version_string,epTeX_version_string,eTeX_version_string
- at d epTeX_banner=='This is e-pTeX, Version 3.14159265',epTeX_version
+ at d epTeX_banner=='This is e-pTeX, Version 3.141592653',epTeX_version
 @d epTeX_banner_k==epTeX_banner
   {printed when \epTeX\ starts}
 @z

Modified: trunk/Build/source/texk/web2c/eptexdir/eptexextra.h
===================================================================
--- trunk/Build/source/texk/web2c/eptexdir/eptexextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/eptexdir/eptexextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -7,7 +7,7 @@
 #include <eptexdir/eptex_version.h> /* for EPTEX_VERSION */
 #include <ptexdir/ptex_version.h> /* for PTEX_VERSION */
 
-#define BANNER "This is e-pTeX, Version 3.14159265-" PTEX_VERSION "-" EPTEX_VERSION "-" ETEX_VERSION
+#define BANNER "This is e-pTeX, Version 3.141592653-" PTEX_VERSION "-" EPTEX_VERSION "-" ETEX_VERSION
 #define COPYRIGHT_HOLDER "D.E. Knuth"
 #define AUTHOR "Peter Breitenlohner"
 #define PROGRAM_HELP EPTEXHELP

Modified: trunk/Build/source/texk/web2c/eptexdir/eptrip/eptrip.diffs
===================================================================
--- trunk/Build/source/texk/web2c/eptexdir/eptrip/eptrip.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/eptexdir/eptrip/eptrip.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,266 +1,492 @@
+#! /bin/sh -vx
+# $Id: eptriptest.test 48633 2018-09-09 17:56:55Z karl $
+# Copyright 2017-2018 Karl Berry <tex-live at tug.org>
+# Copyright 2011-2014 Peter Breitenlohner <tex-live at tug.org>
+# Copyright 2010 Hironori Kitagawa <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL;  LANGUAGE=C; export LANGUAGE
++ LC_ALL=C
++ export LC_ALL
++ LANGUAGE=C
++ export LANGUAGE
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+etestdir=$abs_srcdir/etexdir/etrip
++ etestdir=SRCDIR/etexdir/etrip
+eptestdir=$abs_srcdir/eptexdir/eptrip
++ eptestdir=SRCDIR/eptexdir/eptrip
+
+TEXMFCNF=$eptestdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/eptexdir/eptrip
++ export TEXMFCNF
+
+rm -rf eptripdir
++ rm -rf eptripdir
+mkdir eptripdir
++ mkdir eptripdir
+cd eptripdir
++ cd eptripdir
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\'''
+
+echo ">>> Running e-TRIP test for e-pTeX." >&2
++ echo '>>> Running e-TRIP test for e-pTeX.'
 >>> Running e-TRIP test for e-pTeX.
+echo ">>> See $eptestdir/eptrip.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/eptexdir/eptrip/eptrip.diffs for example of acceptable diffs.'
 >>> See SRCDIR/eptexdir/eptrip/eptrip.diffs for example of acceptable diffs.
+
+# pTeX outputs direction of boxes.
+P_SED1='s/, yoko direction//;s/yoko direction, //'
++ P_SED1='s/, yoko direction//;s/yoko direction, //'
+P_SED2='s/yoko(math) direction, //'
++ P_SED2='s/yoko(math) direction, //'
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+echo "*** TRIP test for e-pTeX in compatibility mode ***."
 + echo '*** TRIP test for e-pTeX in compatibility mode ***.'
 *** TRIP test for e-pTeX in compatibility mode ***.
+
+./pltotf $testdir/trip.pl trip.tfm || exit 1
 + ./pltotf SRCDIR/triptrap/trip.pl trip.tfm
+
+./tftopl ./trip.tfm trip.pl || exit 1
 + ./tftopl ./trip.tfm trip.pl
+
+diff $testdir/trip.pl trip.pl || is_OK=false
 + diff SRCDIR/triptrap/trip.pl trip.pl
+
+# get same filename in log
+$LN_S $testdir/trip.tex .
 + ln -s SRCDIR/triptrap/trip.tex .
+
+rm -f trip.log
 + rm -f trip.log
+./eptex --progname=epinitex --ini <$testdir/trip1.in >cptripin.fot
 + ./eptex --progname=epinitex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by trip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+sed "$P_SED1" trip.log >  cptripin.log || exit 1
 + sed 's/, yoko direction//;s/yoko direction, //' trip.log
+diff $testdir/tripin.log cptripin.log
 + diff SRCDIR/triptrap/tripin.log cptripin.log
 1c1
-< This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+< This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (INITEX)  12 APR 2015 16:22
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
 3c3
 < (trip.tex
 ---
 > (./trip.tex
-9c9
-< A character number must be between 0 and 255.
----
-> A character number must be between 0 and 255, or KANJI code.
 91c91,92
 < ### horizontal mode entered at line 77 (language255:hyphenmin1,63)
 ---
 > ### horizontal mode entered at line 77 (language255:hyph
 > enmin1,63)
-450,453c451,454
-<  (preloaded format=trip 2014.1.7)
-< 1326 strings of total length 23646
+93a95
+> \displace 0.0
+95a98
+> \displace 0.0
+368a372
+> ....\displace 0.0
+370a375
+> ....\displace 0.0
+437,438d441
+< ....\rip 6 (ligature )
+< ....\rip 7 (ligature )
+450,453c453,456
+<  (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
 < 471 memory locations dumped; current usage is 96&278
 < 341 multiletter control sequences
 ---
->  (preloaded format=trip 2015.4.12)
-> 1616 strings of total length 27981
-> 489 memory locations dumped; current usage is 110&278
-> 387 multiletter control sequences
-461c462
+>  (preloaded format=trip 2021.1.27)
+> 1673 strings of total length 29297
+> 491 memory locations dumped; current usage is 112&278
+> 400 multiletter control sequences
+461c464
 < Hyphenation trie of length 273 has 9 ops out of 500
 ---
 > Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+rm -f trip.log
 + rm -f trip.log
+./eptex --progname=eptex <$testdir/trip2.in >cptrip.fot
 + ./eptex --progname=eptex
+sed "$P_SED1;$P_SED2" trip.log > cptrip.log
 + sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log
+diff $testdir/trip.fot cptrip.fot
 + diff SRCDIR/triptrap/trip.fot cptrip.fot
 1,3c1,2
-< This is TeX, Version 3.14159265 (INITEX)
+< This is TeX, Version 3.141592653 (INITEX)
 < ** &trip  trip 
 < (trip.tex ##
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=eptex)
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=eptex)
 > **(./trip.tex ##
 17c16
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 194&313; after: 118&278; still untouched: 2109
+> Memory usage before: 196&313; after: 120&278; still untouched: 2109
 75c74
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 456&431; after: 394&418; still untouched: 483
+> Memory usage before: 462&431; after: 400&418; still untouched: 240
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log cptrip.log 
 + diff SRCDIR/triptrap/trip.log cptrip.log
 1c1
-< This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=trip 2015.4.12)  12 APR 2015 16:22
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27)  27 JAN 2021 18:03
 3c3
 < (trip.tex ##
 ---
 > (./trip.tex ##
-58a59,62
-> \openout0 = `8terminal.tex'.
-> 
-> \openout10 = `tripos.tex'.
-> 
-73c77
+73c73
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 194&313; after: 118&278; still untouched: 2109
-385,386c389,390
+> Memory usage before: 196&313; after: 120&278; still untouched: 2109
+113a114
+> .\displace 0.0
+198a200
+> .\displace 0.0
+253a256
+> .\displace 0.0
+308a312
+> .\displace 0.0
+349a354
+> .\displace 0.0
+385,386c390,391
 < \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos
 < t 100
 ---
 > \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co
 > st 100
-426c430
+406a412
+> ....\displace 0.0
+409a416
+> ....\displace 0.0
+412a420
+> ....\displace 0.0
+420a429
+> .\displace 0.0
+426c435
 < \insert200, natural size 400.0; split(0.0,-2.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100
-441c445
+435a445
+> .\displace 0.0
+441c451
 < \insert200, natural size 400.0; split(1.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100
-456c460
+450a461
+> .\displace 0.0
+456c467
 < \insert200, natural size 400.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100
-483,484c487,488
+466a478
+> .\displace 0.0
+483,484c495,496
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-642c646
+588a601
+> .....\displace 0.0
+591a605
+> .....\displace 0.0
+594a609
+> .....\displace 0.0
+630a646
+> ......\displace 0.0
+633a650
+> ......\displace 0.0
+636a654
+> ......\displace 0.0
+642c660
 < Memory usage before: 747&484; after: 581&481; still untouched: 1492
 ---
-> Memory usage before: 1090&483; after: 842&480; still untouched: 1989
-647c651,652
+> Memory usage before: 1118&483; after: 864&480; still untouched: 1989
+647c665,666
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-693,694c698,699
+650a670
+> .\displace 0.0
+660a681
+> .\displace 0.0
+670a692
+> .\displace 0.0
+681a704
+> .\displace 0.0
+693,694c716,717
 < \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10
 < 0
 ---
 > \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1
 > 00
-701c706
+701c724
 < \insert200, natural size 2.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100
-714,715c719,720
+714,715c737,738
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-815c820
+815c838
 < Memory usage before: 475&470; after: 290&466; still untouched: 1473
 ---
-> Memory usage before: 694&469; after: 410&465; still untouched: 1970
-820c825,826
+> Memory usage before: 710&469; after: 418&465; still untouched: 1970
+820c843,844
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-915c921
+915c939
 < Memory usage before: 218&459; after: 149&458; still untouched: 1473
 ---
 > Memory usage before: 308&458; after: 198&457; still untouched: 1970
-920c926,927
+920c944,945
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-1070c1077
+1070c1095
 < Memory usage before: 118&328; after: 102&328; still untouched: 1473
 ---
 > Memory usage before: 150&327; after: 126&327; still untouched: 1970
-1405c1412
+1405c1430
 < \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil
 ---
 > \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil
-1504a1512
+1493a1519
 > ..\displace 0.0
-1511c1519
+1503a1530
+> ..\displace 0.0
+1504a1532
+> ..\displace 0.0
+1511c1539
 < Memory usage before: 990&376; after: 584&370; still untouched: 735
 ---
-> Memory usage before: 1490&375; after: 842&369; still untouched: 1970
-1954c1962
+> Memory usage before: 1498&375; after: 846&369; still untouched: 1970
+1887c1915
+< .\rip A
+---
+> .\displace 0.0
+1923c1951
+< .\hbox(0.0+0.0)x120.0 []
+---
+> .\hbox(0.0+0.0)x120.0, yoko(math) direction []
+1954c1982
 < (tripos.tex
 ---
 > (./tripos.tex
-2018c2026
+2018c2046
 < \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil
 ---
 > \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil
-2189c2197
+2022a2051
+> ..\displace 0.0
+2058a2088
+> ..\displace 0.0
+2071a2102
+> ..\displace 0.0
+2092a2124
+> ..\displace 0.0
+2113a2146
+> ..\displace 0.0
+2123a2157
+> ..\displace 0.0
+2142a2177
+> ..\displace 0.0
+2150a2186
+> ..\displace 0.0
+2171c2207,2208
+< ..\hbox(0.0+0.0)x120.0
+---
+> ..\hbox(0.0+0.0)x120.0, yoko(math) direction
+> ...\displace 0.0
+2189c2226
 < Memory usage before: 950&531; after: 546&448; still untouched: 706
 ---
-> Memory usage before: 1458&530; after: 808&447; still untouched: 1941
-2397c2405
+> Memory usage before: 1494&530; after: 826&447; still untouched: 1941
+2397c2434
 < ! Improper alphabetic constant.
 ---
 > ! Improper alphabetic or KANJI constant.
-2405,2406c2413,2421
-< {the character -}
-< {the character 1}
+2533c2570
+< \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
 ---
-> ! Extended delimiter code used as delcode.
-> <to be read again> 
->                    \relax 
-> l.249 ...mber\the\delcode`\relax
->                                 \over{{{}}}}\pagestretch=-1\p...
-> A numeric delimiter code must be between 0 and 2^{27}-1.
-> I changed this one to zero.
+> \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
+2544a2582
+> ..\displace 0.0
+2570c2608,2609
+< .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0
+---
+> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, yoko(math) direction
 > 
-> {the character 0}
-2434d2448
-< \\mathord []
-2533c2547
-< \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
+2572c2611
+< ..\hbox(0.0+0.0)x0.0
 ---
-> \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
-2575c2589
+> ..\hbox(0.0+0.0)x0.0, yoko(math) direction
+2575c2614
 < Memory usage before: 339&413; after: 236&405; still untouched: 706
 ---
-> Memory usage before: 493&411; after: 327&403; still untouched: 1941
-2830c2844
+> Memory usage before: 497&411; after: 329&403; still untouched: 1941
+2650,2651c2689,2690
+< Dimensions can be in units of em, ex, in, pt, pc,
+< cm, mm, dd, cc, bp, or sp; but yours is a new one!
+---
+> Dimensions can be in units of em, ex, zw, zh, in, pt, pc,
+> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one!
+2830c2869
 < Since I expected to read a number between 0 and 15,
 ---
 > Since I expected to read a number between 0 and 255,
-3051c3065
+3038c3077,3078
+< ^\hbox(7.0+1.0)x2.0
+---
+> ^\hbox(7.0+1.0)x2.0, yoko(math) direction
+> ^.\displace 0.0
+3051c3091
 < \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
 ---
 > \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
-3054c3068
+3054c3094
 < .\fam0 ^^c8
 ---
 > .\fam0 \xC8 
-3143a3158
+3056c3096
+< .\vbox(-2.0+0.0)x0.0
+---
+> .\vbox(-2.0+0.0)x0.0, yoko(math) direction
+3060c3100,3101
+< ^.\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> ^..\displace 0.0
+3140a3182
+> .....\displace 0.0
+3142a3185
+> ....|\displace 0.0
+3143a3187
 > ....\displace 0.0
-3235c3250
+3151a3196
+> .\displace 0.0
+3235c3280
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-3326c3341
+3286c3331
+< .\vbox(6.0+-8.0)x0.0
+---
+> .\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3326c3371
 < \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil
 ---
 > \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil
-3547a3563
+3329a3375
+> ..\displace 0.0
+3374c3420
+< ..\vbox(6.0+-8.0)x0.0
+---
+> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3385c3431,3432
+< ......\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> .......\displace 0.0
+3544a3592
+> ..........\displace 0.0
+3546a3595
+> .........|\displace 0.0
+3547a3597
 > .........\displace 0.0
-3616c3632
+3564c3614,3615
+< ...\hbox(7.0+1.0)x1.99
+---
+> ...\hbox(7.0+1.0)x1.99, yoko(math) direction
+> ....\displace 0.0
+3616c3667
 < Memory usage before: 2170&521; after: 1181&459; still untouched: 175
 ---
-> Memory usage before: 3263&519; after: 1743&457; still untouched: 483
-3864c3880
+> Memory usage before: 3283&519; after: 1753&457; still untouched: 240
+3864c3915
 < \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil
 ---
 > \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil
-3951c3967
+3919,3920c3970,3972
+< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247
+< ....\vbox(-0.00002+0.0)x0.0
+---
+> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi
+> on
+> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction
+3951c4003
 < Memory usage before: 640&415; after: 397&410; still untouched: 175
 ---
-> Memory usage before: 959&413; after: 573&408; still untouched: 483
-4034c4050
+> Memory usage before: 959&413; after: 573&408; still untouched: 240
+4034c4086
 < \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil
-4053c4069
+4053c4105
 < Memory usage before: 235&401; after: 178&399; still untouched: 175
 ---
-> Memory usage before: 342&399; after: 248&397; still untouched: 483
-4420c4436
+> Memory usage before: 342&399; after: 248&397; still untouched: 240
+4420c4472
 < \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil
 ---
 > \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil
-4506c4522
+4425a4478
+> ...\displace 0.0
+4447a4501
+> ...\displace 0.0
+4475a4530
+> ...\displace 0.0
+4492a4548
+> ...\displace 0.0
+4506c4562
 < Memory usage before: 651&432; after: 417&418; still untouched: 175
 ---
-> Memory usage before: 992&431; after: 598&417; still untouched: 483
-4742c4758,4759
+> Memory usage before: 1008&431; after: 606&417; still untouched: 240
+4742c4798,4799
 < \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio
 > n
-4828c4845
+4746a4804
+> ...\displace 0.0
+4762a4821
+> .....\displace 0.0
+4777a4837
+> ......\displace 0.0
+4828c4888
 < Memory usage before: 776&458; after: 464&452; still untouched: 175
 ---
-> Memory usage before: 1174&457; after: 676&451; still untouched: 483
-4881,4888d4897
+> Memory usage before: 1186&457; after: 682&451; still untouched: 240
+4881,4888d4940
 < ! Bad number (16).
 < <to be read again> 
 <                    =
@@ -269,55 +495,97 @@
 < Since I expected to read a number between 0 and 15,
 < I changed this one to zero.
 < 
-5700c5709
+5701c5753
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-6380c6389
+6381c6433
 < (tripos.tex
 ---
 > (./tripos.tex
-6501c6510
+6502c6554
 < l.429 ...^^M=13 \def^^M{\relax}#
 ---
 > l.429 ...^^M=13 \defqqM{\relax}#
-6595c6604
+6596c6648
 < Memory usage before: 819&428; after: 720&426; still untouched: 175
 ---
-> Memory usage before: 1220&428; after: 1070&426; still untouched: 483
-7155c7164
+> Memory usage before: 1232&428; after: 1078&426; still untouched: 240
+6853c6905
+< .|vbox(0.0+0.0)x0.0
+---
+> .|vbox(0.0+0.0)x0.0, yoko(math) direction
+6876a6929
+> ..|displace 0.0
+6891a6945
+> ..|displace 0.0
+6926a6981
+> .|displace 0.0
+6959a7015
+> .|displace 0.0
+6961c7017,7018
+< .|hbox(0.0+0.0)x0.0
+---
+> .|hbox(0.0+0.0)x0.0, yoko(math) direction
+> ..|displace 0.0
+6991a7049
+> .|displace 0.0
+7103a7162
+> ...|displace 0.0
+7108d7166
+< ...|ip A (ligature BB)
+7116a7175
+> ...|displace 0.0
+7125d7183
+< ...|kern2.0
+7126a7185
+> .|displace 0.0
+7136c7195
+< ...|vbox(0.0+0.0)x0.0
+---
+> ...|vbox(0.0+0.0)x0.0, yoko(math) direction
+7156c7215
 < Memory usage before: 895&439; after: 290&420; still untouched: 175
 ---
-> Memory usage before: 1336&439; after: 392&420; still untouched: 483
-7288c7297
+> Memory usage before: 1350&439; after: 398&420; still untouched: 240
+7289c7348
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 456&431; after: 394&418; still untouched: 483
-7296,7299c7305,7308
+> Memory usage before: 462&431; after: 400&418; still untouched: 240
+7297,7300c7356,7359
 <  47 strings out of 1674
-<  253 string characters out of 8354
+<  253 string characters out of 8367
 <  2825 words of memory out of 3000
 <  372 multiletter control sequences out of 2100
 ---
->  44 strings out of 1684
->  261 string characters out of 8019
->  4017 words of memory out of 4500
->  418 multiletter control sequences out of 15000+0
-7301c7310
+>  44 strings out of 1627
+>  261 string characters out of 10703
+>  4260 words of memory out of 4500
+>  431 multiletter control sequences out of 15000+0
+7302c7361
 <  2 hyphenation exceptions out of 307
 ---
 >  1 hyphenation exception out of 659
+
+mv tripos.tex cptripos.tex
++ mv tripos.tex cptripos.tex
+diff $testdir/tripos.tex cptripos.tex
++ diff SRCDIR/triptrap/tripos.tex cptripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >cptrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ cptrip.typ
 + diff SRCDIR/triptrap/trip.typ cptrip.typ
 1c1
 < This is DVItype, Version 3.6
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
-< ' TeX output 2014.01.07:0959'
+< ' TeX output 1776.07.04:1200'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
 419c419
 < 1121: down4 639342208 
 ---
@@ -328,27 +596,38 @@
 ---
 > 2535: y4 203921756 
 > 2540: y0 203921756 
+
+mv trip.fmt ctrip.fmt
 + mv trip.fmt ctrip.fmt
+
+# =================================
+
+echo "*** TRIP test for e-pTeX in extended mode ***."
 + echo '*** TRIP test for e-pTeX in extended mode ***.'
 *** TRIP test for e-pTeX in extended mode ***.
+
+rm -f trip.log
 + rm -f trip.log
+./eptex --progname=epinitex --ini <$etestdir/etrip1.in >xptripin.fot
 + ./eptex --progname=epinitex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by etrip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+sed "$P_SED1" trip.log >  xptripin.log || exit 1
 + sed 's/, yoko direction//;s/yoko direction, //' trip.log
+diff $testdir/tripin.log xptripin.log
 + diff SRCDIR/triptrap/tripin.log xptripin.log
 1,3c1,4
-< This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+< This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 < **\input trip
 < (trip.tex
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (INITEX)  12 APR 2015 16:22
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
 > entering extended mode
 > ***\input trip
 > (./trip.tex
-9c10
-< A character number must be between 0 and 255.
----
-> A character number must be between 0 and 255, or KANJI code.
 36,41d36
 < ! Bad register code (256).
 < l.29 ...{1} \toksdef\tokens=256 
@@ -361,306 +640,461 @@
 ---
 > ### horizontal mode entered at line 77 (language255:hyph
 > enmin1,63)
-450,453c446,449
-<  (preloaded format=trip 2014.1.7)
-< 1326 strings of total length 23646
+93a90
+> \displace 0.0
+95a93
+> \displace 0.0
+368a367
+> ....\displace 0.0
+370a370
+> ....\displace 0.0
+437,438d436
+< ....\rip 6 (ligature )
+< ....\rip 7 (ligature )
+450,453c448,451
+<  (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
 < 471 memory locations dumped; current usage is 96&278
 < 341 multiletter control sequences
 ---
->  (preloaded format=trip 2015.4.12)
-> 1616 strings of total length 27981
-> 536 memory locations dumped; current usage is 157&278
-> 465 multiletter control sequences
-461c457
+>  (preloaded format=trip 2021.1.27)
+> 1673 strings of total length 29297
+> 538 memory locations dumped; current usage is 159&278
+> 494 multiletter control sequences
+461c459
 < Hyphenation trie of length 273 has 9 ops out of 500
 ---
 > Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+rm -f trip.log
 + rm -f trip.log
+./eptex --progname=eptex <$etestdir/trip2.in >xptrip.fot
 + ./eptex --progname=eptex
+sed "$P_SED1;$P_SED2" trip.log > xptrip.log
 + sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log
+diff $testdir/trip.fot xptrip.fot
 + diff SRCDIR/triptrap/trip.fot xptrip.fot
 1,3c1,3
-< This is TeX, Version 3.14159265 (INITEX)
+< This is TeX, Version 3.141592653 (INITEX)
 < ** &trip  trip 
 < (trip.tex ##
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=eptex)
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=eptex)
 > **entering extended mode
 > ## (./trip.tex
 17c17
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 194&313; after: 118&278; still untouched: 2109
+> Memory usage before: 196&313; after: 120&278; still untouched: 2109
 75c75
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 456&431; after: 394&418; still untouched: 483
+> Memory usage before: 462&431; after: 400&418; still untouched: 240
 77a78,80
 > 
 > ### semi simple group (level 1) entered at line 429 (begingroup)
 > ### bottom level
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log xptrip.log 
 + diff SRCDIR/triptrap/trip.log xptrip.log
 1,3c1,4
-< This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 < ** &trip  trip
 < (trip.tex ##
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=trip 2015.4.12)  12 APR 2015 16:22
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27)  27 JAN 2021 18:03
 > entering extended mode
 > **&trip \toksdef\tokens=0 \input trip
 >  (./trip.tex
-58a60,63
-> \openout0 = `8terminal.tex'.
-> 
-> \openout10 = `tripos.tex'.
-> 
-73c78
+73c74
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 194&313; after: 118&278; still untouched: 2109
-385,386c390,391
+> Memory usage before: 196&313; after: 120&278; still untouched: 2109
+113a115
+> .\displace 0.0
+198a201
+> .\displace 0.0
+253a257
+> .\displace 0.0
+308a313
+> .\displace 0.0
+349a355
+> .\displace 0.0
+385,386c391,392
 < \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos
 < t 100
 ---
 > \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co
 > st 100
-426c431
+406a413
+> ....\displace 0.0
+409a417
+> ....\displace 0.0
+412a421
+> ....\displace 0.0
+420a430
+> .\displace 0.0
+426c436
 < \insert200, natural size 400.0; split(0.0,-2.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100
-441c446
+435a446
+> .\displace 0.0
+441c452
 < \insert200, natural size 400.0; split(1.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100
-456c461
+450a462
+> .\displace 0.0
+456c468
 < \insert200, natural size 400.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100
-483,484c488,489
+466a479
+> .\displace 0.0
+483,484c496,497
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-642c647
+588a602
+> .....\displace 0.0
+591a606
+> .....\displace 0.0
+594a610
+> .....\displace 0.0
+630a647
+> ......\displace 0.0
+633a651
+> ......\displace 0.0
+636a655
+> ......\displace 0.0
+642c661
 < Memory usage before: 747&484; after: 581&481; still untouched: 1492
 ---
-> Memory usage before: 1090&483; after: 842&480; still untouched: 1989
-647c652,653
+> Memory usage before: 1118&483; after: 864&480; still untouched: 1989
+647c666,667
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-693,694c699,700
+650a671
+> .\displace 0.0
+660a682
+> .\displace 0.0
+670a693
+> .\displace 0.0
+681a705
+> .\displace 0.0
+693,694c717,718
 < \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10
 < 0
 ---
 > \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1
 > 00
-701c707
+701c725
 < \insert200, natural size 2.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100
-714,715c720,721
+714,715c738,739
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-815c821
+815c839
 < Memory usage before: 475&470; after: 290&466; still untouched: 1473
 ---
-> Memory usage before: 694&469; after: 410&465; still untouched: 1970
-820c826,827
+> Memory usage before: 710&469; after: 418&465; still untouched: 1970
+820c844,845
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-915c922
+915c940
 < Memory usage before: 218&459; after: 149&458; still untouched: 1473
 ---
 > Memory usage before: 308&458; after: 198&457; still untouched: 1970
-920c927,928
+920c945,946
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-1070c1078
+1070c1096
 < Memory usage before: 118&328; after: 102&328; still untouched: 1473
 ---
 > Memory usage before: 150&327; after: 126&327; still untouched: 1970
-1405c1413
+1405c1431
 < \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil
 ---
 > \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil
-1504a1513
+1493a1520
 > ..\displace 0.0
-1511c1520
+1503a1531
+> ..\displace 0.0
+1504a1533
+> ..\displace 0.0
+1511c1540
 < Memory usage before: 990&376; after: 584&370; still untouched: 735
 ---
-> Memory usage before: 1490&375; after: 842&369; still untouched: 1970
-1769d1777
+> Memory usage before: 1498&375; after: 846&369; still untouched: 1970
+1769d1797
 < {restoring \fam=-1}
-1779d1786
+1779d1806
 < {restoring \displayindent=0.0pt}
-1833d1839
+1833d1859
 < {restoring \fam=-1}
-1954c1960
+1887c1913
+< .\rip A
+---
+> .\displace 0.0
+1923c1949
+< .\hbox(0.0+0.0)x120.0 []
+---
+> .\hbox(0.0+0.0)x120.0, yoko(math) direction []
+1954c1980
 < (tripos.tex
 ---
 > (./tripos.tex
-2018c2024
+2018c2044
 < \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil
 ---
 > \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil
-2135c2141
+2022a2049
+> ..\displace 0.0
+2058a2086
+> ..\displace 0.0
+2071a2100
+> ..\displace 0.0
+2092a2122
+> ..\displace 0.0
+2113a2144
+> ..\displace 0.0
+2123a2155
+> ..\displace 0.0
+2135c2167
 < .\hbox(0.0+0.0)x0.0, shifted 50.0
 ---
 > .\hbox(0.0+0.0)x0.0, shifted 50.0, display
-2138c2144
+2138c2170
 < .\hbox(0.0+0.0)x0.0, shifted 100.0
 ---
 > .\hbox(0.0+0.0)x0.0, shifted 100.0, display
-2189c2195
+2142a2175
+> ..\displace 0.0
+2150a2184
+> ..\displace 0.0
+2171c2205,2206
+< ..\hbox(0.0+0.0)x120.0
+---
+> ..\hbox(0.0+0.0)x120.0, yoko(math) direction
+> ...\displace 0.0
+2189c2224
 < Memory usage before: 950&531; after: 546&448; still untouched: 706
 ---
-> Memory usage before: 1458&530; after: 808&447; still untouched: 1941
-2397c2403
+> Memory usage before: 1494&530; after: 826&447; still untouched: 1941
+2397c2432
 < ! Improper alphabetic constant.
 ---
 > ! Improper alphabetic or KANJI constant.
-2405,2406c2411,2419
-< {the character -}
-< {the character 1}
----
-> ! Extended delimiter code used as delcode.
-> <to be read again> 
->                    \relax 
-> l.249 ...mber\the\delcode`\relax
->                                 \over{{{}}}}\pagestretch=-1\p...
-> A numeric delimiter code must be between 0 and 2^{27}-1.
-> I changed this one to zero.
-> 
-> {the character 0}
-2434d2446
-< \\mathord []
-2533c2545
+2533c2568
 < \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
 ---
 > \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
-2570c2582,2583
+2544a2580
+> ..\displace 0.0
+2570c2606,2607
 < .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0
 ---
-> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, display, yoko direct
-> ion
-2575c2588
+> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, display, yoko(math) 
+> direction
+2572c2609
+< ..\hbox(0.0+0.0)x0.0
+---
+> ..\hbox(0.0+0.0)x0.0, yoko(math) direction
+2575c2612
 < Memory usage before: 339&413; after: 236&405; still untouched: 706
 ---
-> Memory usage before: 493&411; after: 327&403; still untouched: 1941
-2830c2843
+> Memory usage before: 497&411; after: 329&403; still untouched: 1941
+2650,2651c2687,2688
+< Dimensions can be in units of em, ex, in, pt, pc,
+< cm, mm, dd, cc, bp, or sp; but yours is a new one!
+---
+> Dimensions can be in units of em, ex, zw, zh, in, pt, pc,
+> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one!
+2830c2867
 < Since I expected to read a number between 0 and 15,
 ---
 > Since I expected to read a number between 0 and 255,
-2835d2847
+2835d2871
 < {restoring current font=\ip}
-3051c3063
+3038c3074,3075
+< ^\hbox(7.0+1.0)x2.0
+---
+> ^\hbox(7.0+1.0)x2.0, yoko(math) direction
+> ^.\displace 0.0
+3051c3088
 < \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
 ---
 > \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
-3054c3066
+3054c3091
 < .\fam0 ^^c8
 ---
 > .\fam0 \xC8 
-3143a3156
+3056c3093
+< .\vbox(-2.0+0.0)x0.0
+---
+> .\vbox(-2.0+0.0)x0.0, yoko(math) direction
+3060c3097,3098
+< ^.\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> ^..\displace 0.0
+3140a3179
+> .....\displace 0.0
+3142a3182
+> ....|\displace 0.0
+3143a3184
 > ....\displace 0.0
-3223d3235
+3151a3193
+> .\displace 0.0
+3223d3264
 < {restoring \fam=-1}
-3235c3247
+3235c3276
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-3326c3338
+3286c3327
+< .\vbox(6.0+-8.0)x0.0
+---
+> .\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3326c3367
 < \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil
 ---
 > \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil
-3372c3384
+3329a3371
+> ..\displace 0.0
+3372c3414
 < .\hbox(68.26251+98.15005)x19.0, glue set - 1.0, shifted 9.0
 ---
 > .\hbox(68.26251+98.15005)x19.0, glue set - 1.0, shifted 9.0, display
-3547a3560
+3374c3416
+< ..\vbox(6.0+-8.0)x0.0
+---
+> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3385c3427,3428
+< ......\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> .......\displace 0.0
+3544a3588
+> ..........\displace 0.0
+3546a3591
+> .........|\displace 0.0
+3547a3593
 > .........\displace 0.0
-3557c3570
+3557c3603
 < .\hbox(20.5+50.80002)x8.27895, shifted 19.72105
 ---
 > .\hbox(20.5+50.80002)x8.27895, shifted 19.72105, display
-3616c3629
+3564c3610,3611
+< ...\hbox(7.0+1.0)x1.99
+---
+> ...\hbox(7.0+1.0)x1.99, yoko(math) direction
+> ....\displace 0.0
+3616c3663
 < Memory usage before: 2170&521; after: 1181&459; still untouched: 175
 ---
-> Memory usage before: 3263&519; after: 1743&457; still untouched: 483
-3766d3778
+> Memory usage before: 3283&519; after: 1753&457; still untouched: 240
+3766d3812
 < {restoring \fam=-1}
-3839d3850
+3839d3884
 < {restoring \fam=-1}
-3864c3875
+3864c3909
 < \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil
 ---
 > \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil
-3895c3906
+3895c3940
 < ..\hbox(12.0+4.0)x8.1778
 ---
 > ..\hbox(12.0+4.0)x8.1778, display
-3917c3928
+3917c3962
 < ..\hbox(0.0+13.00002)x-0.1778, glue set - 57.67767fil
 ---
 > ..\hbox(0.0+13.00002)x-0.1778, glue set - 57.67767fil, display
-3925c3936
+3919,3920c3964,3966
+< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247
+< ....\vbox(-0.00002+0.0)x0.0
+---
+> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi
+> on
+> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction
+3925c3971
 < ....\hbox(7.0+1.0)x5.0, shifted 47.5
 ---
 > ....\hbox(7.0+1.0)x5.0, shifted 47.5, display
-3951c3962
+3951c3997
 < Memory usage before: 640&415; after: 397&410; still untouched: 175
 ---
-> Memory usage before: 959&413; after: 573&408; still untouched: 483
-4011d4021
+> Memory usage before: 959&413; after: 573&408; still untouched: 240
+4011d4056
 < {restoring \fam=-1}
-4034c4044
+4034c4079
 < \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil
-4047c4057
+4047c4092
 < .\hbox(0.0+0.0)x1009.0, shifted 7227.0
 ---
 > .\hbox(0.0+0.0)x1009.0, shifted 7227.0, display
-4051c4061
+4051c4096
 < .\hbox(0.0+0.0)x-7127.0, shifted 7227.0
 ---
 > .\hbox(0.0+0.0)x-7127.0, shifted 7227.0, display
-4053c4063
+4053c4098
 < Memory usage before: 235&401; after: 178&399; still untouched: 175
 ---
-> Memory usage before: 342&399; after: 248&397; still untouched: 483
-4420c4430
+> Memory usage before: 342&399; after: 248&397; still untouched: 240
+4420c4465
 < \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil
 ---
 > \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil
-4506c4516
+4425a4471
+> ...\displace 0.0
+4447a4494
+> ...\displace 0.0
+4475a4523
+> ...\displace 0.0
+4492a4541
+> ...\displace 0.0
+4506c4555
 < Memory usage before: 651&432; after: 417&418; still untouched: 175
 ---
-> Memory usage before: 992&431; after: 598&417; still untouched: 483
-4742c4752,4753
+> Memory usage before: 1008&431; after: 606&417; still untouched: 240
+4742c4791,4792
 < \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio
 > n
-4828c4839
+4746a4797
+> ...\displace 0.0
+4762a4814
+> .....\displace 0.0
+4777a4830
+> ......\displace 0.0
+4828c4881
 < Memory usage before: 776&458; after: 464&452; still untouched: 175
 ---
-> Memory usage before: 1174&457; after: 676&451; still untouched: 483
-4845c4856
+> Memory usage before: 1186&457; after: 682&451; still untouched: 240
+4845c4898
 < I'll pretend you didn't say \long or \outer or \global.
 ---
 > I'll pretend you didn't say \long or \outer or \global or \protected.
-4881,4888d4891
+4881,4888d4933
 < ! Bad number (16).
 < <to be read again> 
 <                    =
@@ -669,61 +1103,103 @@
 < Since I expected to read a number between 0 and 15,
 < I changed this one to zero.
 < 
-5700c5703
+5701c5746
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-6380c6383
+6381c6426
 < (tripos.tex
 ---
 > (./tripos.tex
-6501c6504
+6502c6547
 < l.429 ...^^M=13 \def^^M{\relax}#
 ---
 > l.429 ...^^M=13 \defqqM{\relax}#
-6595c6598
+6596c6641
 < Memory usage before: 819&428; after: 720&426; still untouched: 175
 ---
-> Memory usage before: 1220&428; after: 1070&426; still untouched: 483
-7155c7158
+> Memory usage before: 1232&428; after: 1078&426; still untouched: 240
+6853c6898
+< .|vbox(0.0+0.0)x0.0
+---
+> .|vbox(0.0+0.0)x0.0, yoko(math) direction
+6876a6922
+> ..|displace 0.0
+6891a6938
+> ..|displace 0.0
+6926a6974
+> .|displace 0.0
+6959a7008
+> .|displace 0.0
+6961c7010,7011
+< .|hbox(0.0+0.0)x0.0
+---
+> .|hbox(0.0+0.0)x0.0, yoko(math) direction
+> ..|displace 0.0
+6991a7042
+> .|displace 0.0
+7103a7155
+> ...|displace 0.0
+7108d7159
+< ...|ip A (ligature BB)
+7116a7168
+> ...|displace 0.0
+7125d7176
+< ...|kern2.0
+7126a7178
+> .|displace 0.0
+7136c7188
+< ...|vbox(0.0+0.0)x0.0
+---
+> ...|vbox(0.0+0.0)x0.0, yoko(math) direction
+7156c7208
 < Memory usage before: 895&439; after: 290&420; still untouched: 175
 ---
-> Memory usage before: 1336&439; after: 392&420; still untouched: 483
-7288c7291
+> Memory usage before: 1350&439; after: 398&420; still untouched: 240
+7289c7341
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 456&431; after: 394&418; still untouched: 483
-7291a7295,7297
+> Memory usage before: 462&431; after: 400&418; still untouched: 240
+7292a7345,7347
 > 
 > ### semi simple group (level 1) entered at line 429 (begingroup)
 > ### bottom level
-7296,7299c7302,7305
+7297,7300c7352,7355
 <  47 strings out of 1674
-<  253 string characters out of 8354
+<  253 string characters out of 8367
 <  2825 words of memory out of 3000
 <  372 multiletter control sequences out of 2100
 ---
->  44 strings out of 1684
->  261 string characters out of 8019
->  4017 words of memory out of 4500
->  496 multiletter control sequences out of 15000+0
-7301,7302c7307,7308
+>  44 strings out of 1627
+>  261 string characters out of 10703
+>  4260 words of memory out of 4500
+>  525 multiletter control sequences out of 15000+0
+7302,7303c7357,7358
 <  2 hyphenation exceptions out of 307
 <  7i,7n,9p,113b,38s stack positions out of 200i,40n,60p,500b,600s
 ---
 >  1 hyphenation exception out of 659
 >  7i,7n,9p,136b,40s stack positions out of 200i,40n,60p,500b,600s
+
+mv tripos.tex xptripos.tex
++ mv tripos.tex xptripos.tex
+diff $testdir/tripos.tex xptripos.tex
++ diff SRCDIR/triptrap/tripos.tex xptripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >xptrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ xptrip.typ
 + diff SRCDIR/triptrap/trip.typ xptrip.typ
 1c1
 < This is DVItype, Version 3.6
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
-< ' TeX output 2014.01.07:0959'
+< ' TeX output 1776.07.04:1200'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
 419c419
 < 1121: down4 639342208 
 ---
@@ -734,21 +1210,44 @@
 ---
 > 2535: y4 203921756 
 > 2540: y0 203921756 
+
+mv trip.fmt xtrip.fmt
 + mv trip.fmt xtrip.fmt
+
+# =================================
+
+echo "*** e-TeX specific part of e-TRIP test for e-pTeX ***."
 + echo '*** e-TeX specific part of e-TRIP test for e-pTeX ***.'
 *** e-TeX specific part of e-TRIP test for e-pTeX ***.
+
+./pltotf $etestdir/etrip.pl etrip.tfm || exit 1
 + ./pltotf SRCDIR/etexdir/etrip/etrip.pl etrip.tfm
+
+./tftopl ./etrip.tfm etrip.pl || exit 1
 + ./tftopl ./etrip.tfm etrip.pl
+
+diff $etestdir/etrip.pl etrip.pl || is_OK=false
 + diff SRCDIR/etexdir/etrip/etrip.pl etrip.pl
+
+# get same filename in log
+$LN_S $eptestdir/eptrip.tex etrip.tex
 + ln -s SRCDIR/eptexdir/eptrip/eptrip.tex etrip.tex
+
+./eptex --progname=epinitex --ini <$etestdir/etrip2.in >eptripin.fot
 + ./eptex --progname=epinitex --ini
+if test ! -s etrip.fmt; then
+  echo "*** etrip.fmt not created by etrip2.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s etrip.fmt
+sed "$P_SED1" etrip.log > eptripin.log || exit 1
 + sed 's/, yoko direction//;s/yoko direction, //' etrip.log
+diff $etestdir/etripin.log eptripin.log
 + diff SRCDIR/etexdir/etrip/etripin.log eptripin.log
 1c1
 < This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (INITEX)  22 JAN 2014 11:25
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (INITEX)  12 APR 2015 16:22
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
 26,29c26,29
 <  (preloaded format=etrip 2014.1.22)
 < 1491 strings of total length 26258
@@ -755,42 +1254,133 @@
 < 281 memory locations dumped; current usage is 36&167
 < 408 multiletter control sequences
 ---
->  (preloaded format=etrip 2015.4.12)
-> 1617 strings of total length 28012
+>  (preloaded format=etrip 2021.1.27)
+> 1674 strings of total length 29328
 > 284 memory locations dumped; current usage is 40&167
-> 465 multiletter control sequences
+> 494 multiletter control sequences
+
+# May as well test non-ini second time through.
+./eptex --progname=eptex <$etestdir/etrip3.in >eptrip.fot
 + ./eptex --progname=eptex
+sed "$P_SED1;$P_SED2" etrip.log > eptrip.log
 + sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' etrip.log
+diff $etestdir/etrip.fot eptrip.fot
 + diff SRCDIR/etexdir/etrip/etrip.fot eptrip.fot
 1c1
 < This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etex)
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=eptex)
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=eptex)
+45,46d44
+< 
+< \openout1 = `etrip.out'.
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $eptestdir/eptrip.log eptrip.log
 + diff SRCDIR/eptexdir/eptrip/eptrip.log eptrip.log
 1c1
 < This is e-pTeX, Version 3.14159265-p3.4-130605-2.6 (utf8.euc) (TeX Live 2014) (preloaded format=etrip 2014.1.22)  22 JAN 2014 11:25
 ---
-> This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=etrip 2015.4.12)  12 APR 2015 16:22
-4421,4422c4421,4422
+> This is e-pTeX, Version 3.141592653-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2021/dev) (preloaded format=etrip 2021.1.27)  27 JAN 2021 18:03
+57a58
+> .\displace 0.0
+104a106
+> .\displace 0.0
+133a136
+> .\displace 0.0
+193a197
+> .\displace 0.0
+205a210
+> ..\displace 0.0
+253a259
+> ..\displace 0.0
+283a290
+> ..\displace 0.0
+303a311
+> ..\displace 0.0
+692,693d699
+< \openout1 = `etrip.out'.
+< 
+1426c1432
+< this will be denominator of:
+---
+> this will begin denominator of:
+1450c1456
+< this will be denominator of:
+---
+> this will begin denominator of:
+1497c1503
+< this will be denominator of:
+---
+> this will begin denominator of:
+1545c1551
+< this will be denominator of:
+---
+> this will begin denominator of:
+1662a1669
+> \displace 0.0
+1873a1881
+> \displace 0.0
+1881c1889
+< .\hbox(0.0+0.0)x0.0, shifted -16.5
+---
+> .\hbox(0.0+0.0)x0.0, shifted -16.5, yoko(math) direction
+1901a1910
+> \displace 0.0
+1906c1915
+< .\hbox(0.0+0.0)x0.0, shifted 3.0
+---
+> .\hbox(0.0+0.0)x0.0, shifted 3.0, yoko(math) direction
+2207c2216
+< A character number must be between 0 and 255, or KANJI code.
+---
+> A character number must be between 0 and 255.
+2213c2222
+< A character number must be between 0 and 255, or KANJI code.
+---
+> A character number must be between 0 and 255.
+4025a4035
+> ..\displace 0.0
+4033a4044
+> ..\displace 0.0
+4300a4312
+> .\displace 0.0
+4421,4422c4433,4434
 <  19 strings out of 1692
 <  145 string characters out of 8157
 ---
->  19 strings out of 1683
->  145 string characters out of 7988
-4424c4424
+>  19 strings out of 1626
+>  145 string characters out of 10672
+4424c4436
 <  463 multiletter control sequences out of 15000+0
 ---
->  466 multiletter control sequences out of 15000+0
+>  495 multiletter control sequences out of 15000+0
+
+mv etrip.out eptrip.out
++ mv etrip.out eptrip.out
+diff $etestdir/etrip.out eptrip.out
++ diff SRCDIR/etexdir/etrip/etrip.out eptrip.out
+
+eval ./dvitype $dvitype_args etrip.dvi >eptrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' etrip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' etrip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' etrip.dvi
+$DIFF $DIFFFLAGS $etestdir/etrip.typ eptrip.typ
 + diff SRCDIR/etexdir/etrip/etrip.typ eptrip.typ
 1c1
 < This is DVItype, Version 3.6 (TeX Live 2014)
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
 < ' TeX output 2014.01.22:1125'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
+
+$is_OK || {
+  echo ">>> There were some errors." >&2
+  exit 1
+}
 + :
-PASS: eptexdir/eptriptest
+
+PASS eptexdir/eptriptest.test (exit status: 0)
+PASS: eptexdir/eptriptest.test

Modified: trunk/Build/source/texk/web2c/etexdir/etex.ch
===================================================================
--- trunk/Build/source/texk/web2c/etexdir/etex.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/etexdir/etex.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -20,8 +20,9 @@
 
 @x limbo l.1 - this is e-TeX
 % This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved.
-% Copying of this file is authorized only if (1) you are D. E. Knuth, or if
-% (2) you make absolutely no changes to your copy. (The WEB system provides
+% Unlimited copying and redistribution of this file are permitted as long
+% as this file is not modified. Modifications are permitted, but only if
+% the resulting file is not named tex.web. (The WEB system provides
 % for alterations via an auxiliary file; the master file should stay intact.)
 % See Appendix H of the WEB manual for hints on how to install this program.
 % And see Appendix A of the TRIP manual for details about how to validate it.
@@ -189,16 +190,16 @@
 @z
 %---------------------------------------
 @x [1] m.2 l.190 - e-TeX basic
- 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 eTeX_version=2 { \.{\\eTeXversion} }
 @d eTeX_revision==".6" { \.{\\eTeXrevision} }
 @d eTeX_version_string=='-2.6' {current \eTeX\ version}
 @#
- at d eTeX_banner=='This is e-TeX, Version 3.14159265',eTeX_version_string
+ at d eTeX_banner=='This is e-TeX, Version 3.141592653',eTeX_version_string
   {printed when \eTeX\ starts}
 @#
- at d TeX_banner=='This is TeX, Version 3.14159265' {printed when \TeX\ starts}
+ at d TeX_banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts}
 @#
 @d banner==eTeX_banner
 @#
@@ -1490,9 +1491,9 @@
 @z
 %---------------------------------------
 @x [29] m.536 l.10348 - e-TeX basic
-print_two(time div 60); print_char(":"); print_two(time mod 60);
+print_two(sys_time div 60); print_char(":"); print_two(sys_time mod 60);
 @y
-print_two(time div 60); print_char(":"); print_two(time mod 60);
+print_two(sys_time div 60); print_char(":"); print_two(sys_time mod 60);
 if eTeX_ex then
   begin; wlog_cr; wlog('entering extended mode');
   end;
@@ -1947,9 +1948,9 @@
 @z
 %---------------------------------------
 @x [39] m.879 l.17293 - e-TeX TeXXeT
-  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node| or |penalty_node|}
+  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node|, or |penalty_node|}
 @y
-  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node| or |penalty_node|}
+  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node|, or |penalty_node|}
   if type(q)=math_node then if TeXXeT_en then
     @<Adjust \(t)the LR stack for the |post_line_break| routine@>;
 @z
@@ -3019,9 +3020,9 @@
 @z
 %---------------------------------------
 @x [49] m.1292 l.23633 - e-TeX show_groups
-  show_lists:print_esc("showlists");
+  show_lists_code:print_esc("showlists");
 @y
-  show_lists:print_esc("showlists");
+  show_lists_code:print_esc("showlists");
   @<Cases of |xray| for |print_cmd_chr|@>@;@/
 @z
 %---------------------------------------

Modified: trunk/Build/source/texk/web2c/etexdir/etexextra.h
===================================================================
--- trunk/Build/source/texk/web2c/etexdir/etexextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/etexdir/etexextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -20,7 +20,7 @@
 
 #include <etexdir/etex_version.h> /* for ETEX_VERSION */
 
-#define BANNER "This is e-TeX, Version 3.14159265-" ETEX_VERSION
+#define BANNER "This is e-TeX, Version 3.141592653-" ETEX_VERSION
 #define COPYRIGHT_HOLDER "Peter Breitenlohner et al"
 #define AUTHOR NULL
 #define PROGRAM_HELP ETEXHELP

Modified: trunk/Build/source/texk/web2c/etexdir/etrip/etrip.diffs
===================================================================
--- trunk/Build/source/texk/web2c/etexdir/etrip/etrip.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/etexdir/etrip/etrip.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,31 +1,85 @@
+#! /bin/sh -vx
+# $Id: etriptest.test 45809 2017-11-15 00:36:56Z karl $
+# Copyright 2017 Karl Berry <tex-live at tug.org>
+# Copyright 2009-2014 Peter Breitenlohner <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+etestdir=$abs_srcdir/etexdir/etrip
++ etestdir=SRCDIR/etexdir/etrip
+
+TEXMFCNF=$etestdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/etexdir/etrip
++ export TEXMFCNF
+
+rm -rf etripdir
++ rm -rf etripdir
+mkdir etripdir
++ mkdir etripdir
+cd etripdir
++ cd etripdir
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\'''
+
+echo ">>> Running e-TRIP test for e-TeX." >&2
++ echo '>>> Running e-TRIP test for e-TeX.'
 >>> Running e-TRIP test for e-TeX.
+echo ">>> See $etestdir/etrip.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/etexdir/etrip/etrip.diffs for example of acceptable diffs.'
 >>> See SRCDIR/etexdir/etrip/etrip.diffs for example of acceptable diffs.
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+echo "*** TRIP test for e-TeX in compatibility mode ***."
 + echo '*** TRIP test for e-TeX in compatibility mode ***.'
 *** TRIP test for e-TeX in compatibility mode ***.
+
+./pltotf $testdir/trip.pl trip.tfm || exit 1
 + ./pltotf SRCDIR/triptrap/trip.pl trip.tfm
+
+./tftopl ./trip.tfm trip.pl || exit 1
 + ./tftopl ./trip.tfm trip.pl
+
+diff $testdir/trip.pl trip.pl || is_OK=false
 + diff SRCDIR/triptrap/trip.pl trip.pl
+
+# get same filename in log
+$LN_S $testdir/trip.tex .
 + ln -s SRCDIR/triptrap/trip.tex .
+
+./etex --progname=einitex --ini <$testdir/trip1.in >ctripin.fot
 + ./etex --progname=einitex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by trip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+mv trip.log ctripin.log || exit 1
 + mv trip.log ctripin.log
+diff $testdir/tripin.log ctripin.log
 + diff SRCDIR/triptrap/tripin.log ctripin.log
 1c1
-< This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+< This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 ---
-> This is e-TeX, Version 3.14159265-2.6 (TeX Live 2015) (INITEX)  12 APR 2015 16:23
+> This is e-TeX, Version 3.141592653-2.6 (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:01
 3c3
 < (trip.tex
 ---
 > (./trip.tex
 450,453c450,453
-<  (preloaded format=trip 2014.1.7)
-< 1326 strings of total length 23646
+<  (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
 < 471 memory locations dumped; current usage is 96&278
 < 341 multiletter control sequences
 ---
->  (preloaded format=trip 2015.4.12)
-> 1490 strings of total length 26227
+>  (preloaded format=trip 2021.1.27)
+> 1491 strings of total length 26266
 > 479 memory locations dumped; current usage is 104&278
 > 342 multiletter control sequences
 461c461
@@ -32,15 +86,20 @@
 < Hyphenation trie of length 273 has 9 ops out of 500
 ---
 > Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+./etex --progname=etex <$testdir/trip2.in >ctrip.fot
 + ./etex --progname=etex
+mv trip.log ctrip.log
 + mv trip.log ctrip.log
+diff $testdir/trip.fot ctrip.fot
 + diff SRCDIR/triptrap/trip.fot ctrip.fot
 1,3c1,2
-< This is TeX, Version 3.14159265 (INITEX)
+< This is TeX, Version 3.141592653 (INITEX)
 < ** &trip  trip 
 < (trip.tex ##
 ---
-> This is e-TeX, Version 3.14159265-2.6 (TeX Live 2015) (preloaded format=etex)
+> This is e-TeX, Version 3.141592653-2.6 (TeX Live 2021/dev) (preloaded format=etex)
 > **(./trip.tex ##
 17c16
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
@@ -50,149 +109,157 @@
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
 > Memory usage before: 434&431; after: 376&418; still untouched: 178
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log ctrip.log
 + diff SRCDIR/triptrap/trip.log ctrip.log
 1c1
-< This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is e-TeX, Version 3.14159265-2.6 (TeX Live 2015) (preloaded format=trip 2015.4.12)  12 APR 2015 16:23
+> This is e-TeX, Version 3.141592653-2.6 (TeX Live 2021/dev) (preloaded format=trip 2021.1.27)  27 JAN 2021 18:01
 3c3
 < (trip.tex ##
 ---
 > (./trip.tex ##
-58a59,62
-> \openout0 = `8terminal.tex'.
-> 
-> \openout10 = `tripos.tex'.
-> 
-73c77
+73c73
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
 > Memory usage before: 185&313; after: 112&278; still untouched: 2612
-642c646
+642c642
 < Memory usage before: 747&484; after: 581&481; still untouched: 1492
 ---
 > Memory usage before: 1027&484; after: 795&481; still untouched: 1491
-815c819
+815c815
 < Memory usage before: 475&470; after: 290&466; still untouched: 1473
 ---
 > Memory usage before: 653&470; after: 384&466; still untouched: 1472
-915c919
+915c915
 < Memory usage before: 218&459; after: 149&458; still untouched: 1473
 ---
 > Memory usage before: 286&459; after: 181&458; still untouched: 1472
-1070c1074
+1070c1070
 < Memory usage before: 118&328; after: 102&328; still untouched: 1473
 ---
 > Memory usage before: 132&328; after: 110&328; still untouched: 1472
-1405c1409
+1405c1405
 < \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil
 ---
 > \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil
-1511c1515
+1511c1511
 < Memory usage before: 990&376; after: 584&370; still untouched: 735
 ---
 > Memory usage before: 1396&376; after: 788&370; still untouched: 1472
-1954c1958
+1954c1954
 < (tripos.tex
 ---
 > (./tripos.tex
-2018c2022
+2018c2018
 < \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil
 ---
 > \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil
-2189c2193
+2189c2189
 < Memory usage before: 950&531; after: 546&448; still untouched: 706
 ---
 > Memory usage before: 1400&531; after: 772&448; still untouched: 1443
-2533c2537
+2533c2533
 < \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
 ---
 > \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
-2575c2579
+2575c2575
 < Memory usage before: 339&413; after: 236&405; still untouched: 706
 ---
 > Memory usage before: 455&413; after: 296&405; still untouched: 1443
-3326c3330
+3326c3326
 < \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil
 ---
 > \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil
-3616c3620
+3616c3616
 < Memory usage before: 2170&521; after: 1181&459; still untouched: 175
 ---
 > Memory usage before: 3016&521; after: 1607&459; still untouched: 178
-3864c3868
+3864c3864
 < \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil
 ---
 > \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil
-3951c3955
+3951c3951
 < Memory usage before: 640&415; after: 397&410; still untouched: 175
 ---
 > Memory usage before: 888&415; after: 525&410; still untouched: 178
-4034c4038
+4034c4034
 < \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil
-4053c4057
+4053c4053
 < Memory usage before: 235&401; after: 178&399; still untouched: 175
 ---
 > Memory usage before: 307&401; after: 218&399; still untouched: 178
-4420c4424
+4420c4420
 < \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil
 ---
 > \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil
-4506c4510
+4506c4506
 < Memory usage before: 651&432; after: 417&418; still untouched: 175
 ---
 > Memory usage before: 941&432; after: 565&418; still untouched: 178
-4742c4746
+4742c4742
 < \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil
-4828c4832
+4828c4828
 < Memory usage before: 776&458; after: 464&452; still untouched: 175
 ---
 > Memory usage before: 1098&458; after: 630&452; still untouched: 178
-6380c6384
+6381c6381
 < (tripos.tex
 ---
 > (./tripos.tex
-6595c6599
+6596c6596
 < Memory usage before: 819&428; after: 720&426; still untouched: 175
 ---
 > Memory usage before: 1155&428; after: 1016&426; still untouched: 178
-7155c7159
+7156c7156
 < Memory usage before: 895&439; after: 290&420; still untouched: 175
 ---
 > Memory usage before: 1269&439; after: 374&420; still untouched: 178
-7288c7292
+7289c7289
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
 > Memory usage before: 434&431; after: 376&418; still untouched: 178
-7296,7299c7300,7303
+7297,7300c7297,7300
 <  47 strings out of 1674
-<  253 string characters out of 8354
+<  253 string characters out of 8367
 <  2825 words of memory out of 3000
 <  372 multiletter control sequences out of 2100
 ---
->  44 strings out of 1810
->  261 string characters out of 7773
+>  44 strings out of 1809
+>  261 string characters out of 7734
 >  3821 words of memory out of 3999
 >  373 multiletter control sequences out of 15000+0
-7301c7305
+7302c7302
 <  2 hyphenation exceptions out of 307
 ---
 >  1 hyphenation exception out of 659
+
+mv tripos.tex ctripos.tex
++ mv tripos.tex ctripos.tex
+diff $testdir/tripos.tex ctripos.tex
++ diff SRCDIR/triptrap/tripos.tex ctripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >ctrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ ctrip.typ
 + diff SRCDIR/triptrap/trip.typ ctrip.typ
 1c1
 < This is DVItype, Version 3.6
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
-< ' TeX output 2014.01.07:0959'
+< ' TeX output 1776.07.04:1200'
 ---
-> ' TeX output 2015.04.12:1623'
+> ' TeX output 2021.01.27:1801'
 419c419
 < 1121: down4 639342208 
 ---
@@ -203,12 +270,26 @@
 ---
 > 2535: y4 203921756 
 > 2540: y0 203921756 
+
+mv trip.fmt ctrip.fmt
 + mv trip.fmt ctrip.fmt
+
+# ==============================
+
+echo "*** TRIP test for e-TeX in extended mode ***."
 + echo '*** TRIP test for e-TeX in extended mode ***.'
 *** TRIP test for e-TeX in extended mode ***.
+
+./etex --progname=einitex --ini <$etestdir/etrip1.in >xtripin.fot
 + ./etex --progname=einitex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by etrip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+mv trip.log xtripin.log || exit 1
 + mv trip.log xtripin.log
+diff ctripin.log xtripin.log
 + diff ctripin.log xtripin.log
 2c2,3
 < **\input trip
@@ -228,8 +309,13 @@
 ---
 > 517 memory locations dumped; current usage is 142&278
 > 408 multiletter control sequences
+
+# May as well test non-ini second time through.
+./etex --progname=etex <$etestdir/trip2.in >xtrip.fot
 + ./etex --progname=etex
+mv trip.log xtrip.log
 + mv trip.log xtrip.log
+diff ctrip.fot xtrip.fot
 + diff ctrip.fot xtrip.fot
 2c2,3
 < **(./trip.tex ##
@@ -244,6 +330,10 @@
 > 
 > ### semi simple group (level 1) entered at line 429 (begingroup)
 > ### bottom level
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS ctrip.log xtrip.log
 + diff ctrip.log xtrip.log
 2,3c2,4
 < ** &trip  trip
@@ -252,125 +342,209 @@
 > entering extended mode
 > **&trip \toksdef\tokens=0 \input trip
 >  (./trip.tex
-77c78
+73c74
 < Memory usage before: 185&313; after: 112&278; still untouched: 2612
 ---
 > Memory usage before: 185&313; after: 112&278; still untouched: 1612
-1773d1773
+1769d1769
 < {restoring \fam=-1}
-1783d1782
+1779d1778
 < {restoring \displayindent=0.0pt}
-1837d1835
+1833d1831
 < {restoring \fam=-1}
-2139c2137
+2135c2133
 < .\hbox(0.0+0.0)x0.0, shifted 50.0
 ---
 > .\hbox(0.0+0.0)x0.0, shifted 50.0, display
-2142c2140
+2138c2136
 < .\hbox(0.0+0.0)x0.0, shifted 100.0
 ---
 > .\hbox(0.0+0.0)x0.0, shifted 100.0, display
-2574c2572
+2570c2568
 < .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0
 ---
 > .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, display
-2839d2836
+2835d2832
 < {restoring current font=\ip}
-3227d3223
+3223d3219
 < {restoring \fam=-1}
-3376c3372
+3372c3368
 < .\hbox(68.26251+98.15005)x19.0, glue set - 1.0, shifted 9.0
 ---
 > .\hbox(68.26251+98.15005)x19.0, glue set - 1.0, shifted 9.0, display
-3561c3557
+3557c3553
 < .\hbox(20.5+50.80002)x8.27895, shifted 19.72105
 ---
 > .\hbox(20.5+50.80002)x8.27895, shifted 19.72105, display
-3770d3765
+3766d3761
 < {restoring \fam=-1}
-3843d3837
+3839d3833
 < {restoring \fam=-1}
-3899c3893
+3895c3889
 < ..\hbox(12.0+4.0)x8.1778
 ---
 > ..\hbox(12.0+4.0)x8.1778, display
-3921c3915
+3917c3911
 < ..\hbox(0.0+13.00002)x-0.1778, glue set - 57.67767fil
 ---
 > ..\hbox(0.0+13.00002)x-0.1778, glue set - 57.67767fil, display
-3929c3923
+3925c3919
 < ....\hbox(7.0+1.0)x5.0, shifted 47.5
 ---
 > ....\hbox(7.0+1.0)x5.0, shifted 47.5, display
-4015d4008
+4011d4004
 < {restoring \fam=-1}
-4051c4044
+4047c4040
 < .\hbox(0.0+0.0)x1009.0, shifted 7227.0
 ---
 > .\hbox(0.0+0.0)x1009.0, shifted 7227.0, display
-4055c4048
+4051c4044
 < .\hbox(0.0+0.0)x-7127.0, shifted 7227.0
 ---
 > .\hbox(0.0+0.0)x-7127.0, shifted 7227.0, display
-4849c4842
+4845c4838
 < I'll pretend you didn't say \long or \outer or \global.
 ---
 > I'll pretend you didn't say \long or \outer or \global or \protected.
-7295a7289,7291
+7292a7286,7288
 > 
 > ### semi simple group (level 1) entered at line 429 (begingroup)
 > ### bottom level
-7303c7299
+7300c7296
 <  373 multiletter control sequences out of 15000+0
 ---
 >  439 multiletter control sequences out of 15000+0
-7306c7302
+7303c7299
 <  7i,7n,9p,113b,38s stack positions out of 200i,40n,60p,500b,600s
 ---
 >  7i,7n,9p,136b,40s stack positions out of 200i,40n,60p,500b,600s
+
+mv tripos.tex xtripos.tex
++ mv tripos.tex xtripos.tex
+diff $testdir/tripos.tex xtripos.tex
++ diff SRCDIR/triptrap/tripos.tex xtripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >xtrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS ctrip.typ xtrip.typ
 + diff ctrip.typ xtrip.typ
+
+mv trip.fmt xtrip.fmt
 + mv trip.fmt xtrip.fmt
+
+# ==============================
+
+echo "*** e-TeX specific part of e-TRIP test ***."
 + echo '*** e-TeX specific part of e-TRIP test ***.'
 *** e-TeX specific part of e-TRIP test ***.
+
+./pltotf $etestdir/etrip.pl etrip.tfm || exit 1
 + ./pltotf SRCDIR/etexdir/etrip/etrip.pl etrip.tfm
+
+./tftopl ./etrip.tfm etrip.pl || exit 1
 + ./tftopl ./etrip.tfm etrip.pl
+
+diff $etestdir/etrip.pl etrip.pl || is_OK=false
 + diff SRCDIR/etexdir/etrip/etrip.pl etrip.pl
+
+# get same filename in log
+$LN_S $etestdir/etrip.tex .
 + ln -s SRCDIR/etexdir/etrip/etrip.tex .
+
+./etex --progname=einitex --ini <$etestdir/etrip2.in >etripin.fot
 + ./etex --progname=einitex --ini
+if test ! -s etrip.fmt; then
+  echo "*** etrip.fmt not created by etrip2.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s etrip.fmt
+mv etrip.log etripin.log || exit 1
 + mv etrip.log etripin.log
+diff $etestdir/etripin.log etripin.log
 + diff SRCDIR/etexdir/etrip/etripin.log etripin.log
 1c1
 < This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (INITEX)  22 JAN 2014 11:25
 ---
-> This is e-TeX, Version 3.14159265-2.6 (TeX Live 2015) (INITEX)  12 APR 2015 16:23
-26c26
+> This is e-TeX, Version 3.141592653-2.6 (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:01
+26,27c26,27
 <  (preloaded format=etrip 2014.1.22)
+< 1491 strings of total length 26258
 ---
->  (preloaded format=etrip 2015.4.12)
+>  (preloaded format=etrip 2021.1.27)
+> 1492 strings of total length 26297
+
+# May as well test non-ini second time through.
+./etex --progname=etex <$etestdir/etrip3.in >etrip.fot
 + ./etex --progname=etex
+diff $etestdir/etrip.fot etrip.fot
 + diff SRCDIR/etexdir/etrip/etrip.fot etrip.fot
 1c1
 < This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etex)
 ---
-> This is e-TeX, Version 3.14159265-2.6 (TeX Live 2015) (preloaded format=etex)
+> This is e-TeX, Version 3.141592653-2.6 (TeX Live 2021/dev) (preloaded format=etex)
+45,46d44
+< 
+< \openout1 = `etrip.out'.
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $etestdir/etrip.log etrip.log
 + diff SRCDIR/etexdir/etrip/etrip.log etrip.log
 1c1
 < This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etrip 2014.1.22)  22 JAN 2014 11:25
 ---
-> This is e-TeX, Version 3.14159265-2.6 (TeX Live 2015) (preloaded format=etrip 2015.4.12)  12 APR 2015 16:23
+> This is e-TeX, Version 3.141592653-2.6 (TeX Live 2021/dev) (preloaded format=etrip 2021.1.27)  27 JAN 2021 18:01
+692,693d691
+< \openout1 = `etrip.out'.
+< 
+1426c1424
+< this will be denominator of:
+---
+> this will begin denominator of:
+1450c1448
+< this will be denominator of:
+---
+> this will begin denominator of:
+1497c1495
+< this will be denominator of:
+---
+> this will begin denominator of:
+1545c1543
+< this will be denominator of:
+---
+> this will begin denominator of:
+4421,4422c4419,4420
+<  19 strings out of 1809
+<  145 string characters out of 7742
+---
+>  19 strings out of 1808
+>  145 string characters out of 7703
+
+diff $etestdir/etrip.out etrip.out
++ diff SRCDIR/etexdir/etrip/etrip.out etrip.out
+
+eval ./dvitype $dvitype_args etrip.dvi >etrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' etrip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' etrip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' etrip.dvi
+$DIFF $DIFFFLAGS $etestdir/etrip.typ etrip.typ
 + diff SRCDIR/etexdir/etrip/etrip.typ etrip.typ
 1c1
 < This is DVItype, Version 3.6 (TeX Live 2014)
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
 < ' TeX output 2014.01.22:1125'
 ---
-> ' TeX output 2015.04.12:1623'
+> ' TeX output 2021.01.27:1801'
+
+$is_OK || {
+  echo ">>> There were some errors." >&2
+  exit 1
+}
 + :
-PASS: etexdir/etriptest
+
+PASS etexdir/etriptest.test (exit status: 0)
+PASS: etexdir/etriptest.test

Modified: trunk/Build/source/texk/web2c/etexdir/etrip/etrip.tex
===================================================================
--- trunk/Build/source/texk/web2c/etexdir/etrip/etrip.tex	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/etexdir/etrip/etrip.tex	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,16 +1,16 @@
-%%; This is `etrip.tex' for e-TeX v3.14159265-2.6 as of Jan 22, 2014.
+%%; This is `etrip.tex' for e-TeX v3.141592653-2.6 as of Jan 28, 2021.
 %%;
 %%; This is a diabolical test file for e-TeX, an extension of TeX82.
 %%; It is not as diabolical as `trip.tex', Knuth's torture test for TeX.
 %%;
-%%; ==>> Do not use this TeX code and its macros as an example  <<==
+%%; ==>> Do not use this TeX code and macros as an example of   <<==
 %%; ==>> how you can make use of the new e-TeX features!  It is <<==
 %%; ==>> meant to test these extensions and often uses slightly <<==
 %%; ==>> wrong e-TeX input to produce errors and warnings.      <<==
 %%;
 \catcode`\{=1\catcode`\}=2\catcode`\#=6 \let\bgroup={ \let\egroup=}
-\def\etripdate   {2014-01-22}
-\def\texversion  {3.14159265}
+\def\etripdate   {2021-01-28}
+\def\texversion  {3.141592653}
 \def\etripversion{2.6}
 %
 \message{This is the e-Trip test [\etripdate] for

Modified: trunk/Build/source/texk/web2c/etexdir/tex.ch0
===================================================================
--- trunk/Build/source/texk/web2c/etexdir/tex.ch0	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/etexdir/tex.ch0	2021-01-30 01:42:07 UTC (rev 57558)
@@ -4,11 +4,11 @@
 % Public domain.
 
 @x [1.2] l.188
- at d TeX_banner=='This is TeX, Version 3.14159265' {printed when \TeX\ starts}
+ at d TeX_banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts}
 @#
 @d banner==eTeX_banner
 @y
- 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}
 @z
 
 @x [17.236] l.4960 - first web2c, then e-TeX additional integer parameters

Modified: trunk/Build/source/texk/web2c/etexdir/tex.ech
===================================================================
--- trunk/Build/source/texk/web2c/etexdir/tex.ech	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/etexdir/tex.ech	2021-01-30 01:42:07 UTC (rev 57558)
@@ -35,10 +35,10 @@
 % Consequently, changes in all these files have to be coordinated.
 
 @x [1] m.2 l.188 - Web2C: extensions imply we're not e-TeX
- at d eTeX_banner=='This is e-TeX, Version 3.14159265',eTeX_version_string
+ at d eTeX_banner=='This is e-TeX, Version 3.141592653',eTeX_version_string
 @y
- at d eTeX_banner_k=='This is e-TeXk, Version 3.14159265',eTeX_version_string
- at d eTeX_banner=='This is e-TeX, Version 3.14159265',eTeX_version_string
+ at d eTeX_banner_k=='This is e-TeXk, Version 3.141592653',eTeX_version_string
+ at d eTeX_banner=='This is e-TeX, Version 3.141592653',eTeX_version_string
 @z
 
 @x [16.215] - e-TeX last_node_type

Modified: trunk/Build/source/texk/web2c/euptexdir/euptex.ch0
===================================================================
--- trunk/Build/source/texk/web2c/euptexdir/euptex.ch0	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/euptexdir/euptex.ch0	2021-01-30 01:42:07 UTC (rev 57558)
@@ -11,7 +11,7 @@
   {printed when u\pTeX\ starts}
 @#
 @d eupTeX_version==pTeX_version_string,upTeX_version_string,epTeX_version_string,eTeX_version_string
- at d eupTeX_banner=='This is e-upTeX, Version 3.14159265',eupTeX_version
+ at d eupTeX_banner=='This is e-upTeX, Version 3.141592653',eupTeX_version
 @d eupTeX_banner_k==eupTeX_banner
   {printed when \eupTeX\ starts}
 @z

Modified: trunk/Build/source/texk/web2c/euptexdir/euptexextra.h
===================================================================
--- trunk/Build/source/texk/web2c/euptexdir/euptexextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/euptexdir/euptexextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -8,7 +8,7 @@
 #include <ptexdir/ptex_version.h> /* for PTEX_VERSION */
 #include <uptexdir/uptex_version.h> /* for UPTEX_VERSION */
 
-#define BANNER "This is e-upTeX, Version 3.14159265-" PTEX_VERSION "-" UPTEX_VERSION "-" EPTEX_VERSION "-" ETEX_VERSION
+#define BANNER "This is e-upTeX, Version 3.141592653-" PTEX_VERSION "-" UPTEX_VERSION "-" EPTEX_VERSION "-" ETEX_VERSION
 #define COPYRIGHT_HOLDER "D.E. Knuth"
 #define AUTHOR "Peter Breitenlohner"
 #define PROGRAM_HELP EUPTEXHELP

Modified: trunk/Build/source/texk/web2c/euptexdir/euptrip/euptrip.diffs
===================================================================
--- trunk/Build/source/texk/web2c/euptexdir/euptrip/euptrip.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/euptexdir/euptrip/euptrip.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,300 +1,524 @@
+#! /bin/sh -vx
+# $Id: euptriptest.test 48633 2018-09-09 17:56:55Z karl $
+# Copyright 2017-2018 Karl Berry <tex-live at tug.org>
+# Copyright 2011-2014 Peter Breitenlohner <tex-live at tug.org>
+# Copyright 2010 Hironori Kitagawa <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL;  LANGUAGE=C; export LANGUAGE
++ LC_ALL=C
++ export LC_ALL
++ LANGUAGE=C
++ export LANGUAGE
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+etestdir=$abs_srcdir/etexdir/etrip
++ etestdir=SRCDIR/etexdir/etrip
+eptestdir=$abs_srcdir/eptexdir/eptrip
++ eptestdir=SRCDIR/eptexdir/eptrip
+euptestdir=$abs_srcdir/euptexdir/euptrip
++ euptestdir=SRCDIR/euptexdir/euptrip
+
+TEXMFCNF=$euptestdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/euptexdir/euptrip
++ export TEXMFCNF
+
+rm -rf euptripdir
++ rm -rf euptripdir
+mkdir euptripdir
++ mkdir euptripdir
+cd euptripdir
++ cd euptripdir
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\'''
+
+echo ">>> Running e-TRIP test for e-upTeX." >&2
++ echo '>>> Running e-TRIP test for e-upTeX.'
 >>> Running e-TRIP test for e-upTeX.
+echo ">>> See $euptestdir/euptrip.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/euptexdir/euptrip/euptrip.diffs for example of acceptable diffs.'
 >>> See SRCDIR/euptexdir/euptrip/euptrip.diffs for example of acceptable diffs.
+
+# upTeX outputs direction of boxes.
+P_SED1='s/, yoko direction//;s/yoko direction, //'
++ P_SED1='s/, yoko direction//;s/yoko direction, //'
+P_SED2='s/yoko(math) direction, //'
++ P_SED2='s/yoko(math) direction, //'
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+echo "*** TRIP test for e-upTeX in compatibility mode ***."
 + echo '*** TRIP test for e-upTeX in compatibility mode ***.'
 *** TRIP test for e-upTeX in compatibility mode ***.
+
+./pltotf $testdir/trip.pl trip.tfm || exit 1
 + ./pltotf SRCDIR/triptrap/trip.pl trip.tfm
+
+./tftopl ./trip.tfm trip.pl || exit 1
 + ./tftopl ./trip.tfm trip.pl
+
+diff $testdir/trip.pl trip.pl || is_OK=false
 + diff SRCDIR/triptrap/trip.pl trip.pl
+
+# get same filename in log
+$LN_S $testdir/trip.tex .
 + ln -s SRCDIR/triptrap/trip.tex .
+
+rm -f trip.log
 + rm -f trip.log
+./euptex --progname=eupinitex --ini <$testdir/trip1.in >cuptripin.fot
 + ./euptex --progname=eupinitex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by trip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+sed "$P_SED1" trip.log >  cuptripin.log || exit 1
 + sed 's/, yoko direction//;s/yoko direction, //' trip.log
+diff $testdir/tripin.log cuptripin.log
 + diff SRCDIR/triptrap/tripin.log cuptripin.log
 1c1
-< This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+< This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (INITEX)  12 APR 2015 16:22
-3,11c3
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
+3c3
 < (trip.tex
-< ! Bad character code (256).
-< <to be read again> 
-<                    -
-< l.26   \nonstopmode\lccode256-
-<                               0\mathchardef\a="8000\def\a{ SC...
-< A character number must be between 0 and 255.
-< I changed this one to zero.
-< 
 ---
 > (./trip.tex
-91c83,84
+91c91,92
 < ### horizontal mode entered at line 77 (language255:hyphenmin1,63)
 ---
 > ### horizontal mode entered at line 77 (language255:hyph
 > enmin1,63)
-450,453c443,446
-<  (preloaded format=trip 2014.1.7)
-< 1326 strings of total length 23646
+93a95
+> \displace 0.0
+95a98
+> \displace 0.0
+368a372
+> ....\displace 0.0
+370a375
+> ....\displace 0.0
+437,438d441
+< ....\rip 6 (ligature )
+< ....\rip 7 (ligature )
+450,453c453,456
+<  (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
 < 471 memory locations dumped; current usage is 96&278
 < 341 multiletter control sequences
 ---
->  (preloaded format=trip 2015.4.12)
-> 1627 strings of total length 28005
-> 489 memory locations dumped; current usage is 110&278
-> 393 multiletter control sequences
-461c454
+>  (preloaded format=trip 2021.1.27)
+> 1690 strings of total length 29502
+> 491 memory locations dumped; current usage is 112&278
+> 408 multiletter control sequences
+461c464
 < Hyphenation trie of length 273 has 9 ops out of 500
 ---
 > Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+rm -f trip.log
 + rm -f trip.log
+./euptex --progname=euptex <$testdir/trip2.in >cuptrip.fot
 + ./euptex --progname=euptex
+sed "$P_SED1;$P_SED2" trip.log > cuptrip.log
 + sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log
+diff $testdir/trip.fot cuptrip.fot
 + diff SRCDIR/triptrap/trip.fot cuptrip.fot
 1,3c1,2
-< This is TeX, Version 3.14159265 (INITEX)
+< This is TeX, Version 3.141592653 (INITEX)
 < ** &trip  trip 
 < (trip.tex ##
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (preloaded format=euptex)
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (preloaded format=euptex)
 > **(./trip.tex ##
 17c16
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 194&313; after: 118&278; still untouched: 2109
+> Memory usage before: 196&313; after: 120&278; still untouched: 2109
 75c74
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 456&431; after: 394&418; still untouched: 483
+> Memory usage before: 462&431; after: 400&418; still untouched: 240
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log cuptrip.log 
 + diff SRCDIR/triptrap/trip.log cuptrip.log
 1c1
-< This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (preloaded format=trip 2015.4.12)  12 APR 2015 16:22
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27)  27 JAN 2021 18:03
 3c3
 < (trip.tex ##
 ---
 > (./trip.tex ##
-58a59,62
-> \openout0 = `8terminal.tex'.
-> 
-> \openout10 = `tripos.tex'.
-> 
-73c77
+73c73
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 194&313; after: 118&278; still untouched: 2109
-385,386c389,390
+> Memory usage before: 196&313; after: 120&278; still untouched: 2109
+113a114
+> .\displace 0.0
+198a200
+> .\displace 0.0
+253a256
+> .\displace 0.0
+308a312
+> .\displace 0.0
+349a354
+> .\displace 0.0
+385,386c390,391
 < \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos
 < t 100
 ---
 > \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co
 > st 100
-426c430
+406a412
+> ....\displace 0.0
+409a416
+> ....\displace 0.0
+412a420
+> ....\displace 0.0
+420a429
+> .\displace 0.0
+426c435
 < \insert200, natural size 400.0; split(0.0,-2.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100
-441c445
+435a445
+> .\displace 0.0
+441c451
 < \insert200, natural size 400.0; split(1.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100
-456c460
+450a461
+> .\displace 0.0
+456c467
 < \insert200, natural size 400.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100
-474c478
+466a478
+> .\displace 0.0
+474c486
 < \special{^^80-1000.0pt}
 ---
 > \special{\x80-1000.0pt}
-483,484c487,488
+483,484c495,496
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-642c646
+588a601
+> .....\displace 0.0
+591a605
+> .....\displace 0.0
+594a609
+> .....\displace 0.0
+630a646
+> ......\displace 0.0
+633a650
+> ......\displace 0.0
+636a654
+> ......\displace 0.0
+642c660
 < Memory usage before: 747&484; after: 581&481; still untouched: 1492
 ---
-> Memory usage before: 1090&483; after: 842&480; still untouched: 1989
-647c651,652
+> Memory usage before: 1118&483; after: 864&480; still untouched: 1989
+647c665,666
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-689c694
+650a670
+> .\displace 0.0
+660a681
+> .\displace 0.0
+670a692
+> .\displace 0.0
+681a704
+> .\displace 0.0
+689c712
 < \special{^^80-1000.0pt}
 ---
 > \special{\x80-1000.0pt}
-693,694c698,699
+693,694c716,717
 < \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10
 < 0
 ---
 > \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1
 > 00
-701c706
+701c724
 < \insert200, natural size 2.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100
-714,715c719,720
+714,715c737,738
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-815c820
+815c838
 < Memory usage before: 475&470; after: 290&466; still untouched: 1473
 ---
-> Memory usage before: 694&469; after: 410&465; still untouched: 1970
-820c825,826
+> Memory usage before: 710&469; after: 418&465; still untouched: 1970
+820c843,844
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-915c921
+915c939
 < Memory usage before: 218&459; after: 149&458; still untouched: 1473
 ---
 > Memory usage before: 308&458; after: 198&457; still untouched: 1970
-920c926,927
+920c944,945
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-1070c1077
+1070c1095
 < Memory usage before: 118&328; after: 102&328; still untouched: 1473
 ---
 > Memory usage before: 150&327; after: 126&327; still untouched: 1970
-1405c1412
+1405c1430
 < \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil
 ---
 > \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil
-1504a1512
+1493a1519
 > ..\displace 0.0
-1511c1519
+1503a1530
+> ..\displace 0.0
+1504a1532
+> ..\displace 0.0
+1511c1539
 < Memory usage before: 990&376; after: 584&370; still untouched: 735
 ---
-> Memory usage before: 1490&375; after: 842&369; still untouched: 1970
-1954c1962
+> Memory usage before: 1498&375; after: 846&369; still untouched: 1970
+1887c1915
+< .\rip A
+---
+> .\displace 0.0
+1923c1951
+< .\hbox(0.0+0.0)x120.0 []
+---
+> .\hbox(0.0+0.0)x120.0, yoko(math) direction []
+1954c1982
 < (tripos.tex
 ---
 > (./tripos.tex
-2018c2026
+2018c2046
 < \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil
 ---
 > \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil
-2048,2049c2056,2057
+2022a2051
+> ..\displace 0.0
+2048,2049c2077,2078
 < ..\rip ^^82 (ligature CA)
 < ..\rip ^^82 (ligature CA)
 ---
 > ..\rip \x82 (ligature CA)
 > ..\rip \x82 (ligature CA)
-2189c2197
+2058a2088
+> ..\displace 0.0
+2071a2102
+> ..\displace 0.0
+2092a2124
+> ..\displace 0.0
+2113a2146
+> ..\displace 0.0
+2123a2157
+> ..\displace 0.0
+2142a2177
+> ..\displace 0.0
+2150a2186
+> ..\displace 0.0
+2171c2207,2208
+< ..\hbox(0.0+0.0)x120.0
+---
+> ..\hbox(0.0+0.0)x120.0, yoko(math) direction
+> ...\displace 0.0
+2189c2226
 < Memory usage before: 950&531; after: 546&448; still untouched: 706
 ---
-> Memory usage before: 1458&530; after: 808&447; still untouched: 1941
-2397c2405
+> Memory usage before: 1494&530; after: 826&447; still untouched: 1941
+2397c2434
 < ! Improper alphabetic constant.
 ---
 > ! Improper alphabetic or KANJI constant.
-2405,2406c2413,2421
-< {the character -}
-< {the character 1}
+2533c2570
+< \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
 ---
-> ! Extended delimiter code used as delcode.
-> <to be read again> 
->                    \relax 
-> l.249 ...mber\the\delcode`\relax
->                                 \over{{{}}}}\pagestretch=-1\p...
-> A numeric delimiter code must be between 0 and 2^{27}-1.
-> I changed this one to zero.
+> \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
+2544a2582
+> ..\displace 0.0
+2570c2608,2609
+< .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0
+---
+> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, yoko(math) direction
 > 
-> {the character 0}
-2434d2448
-< \\mathord []
-2533c2547
-< \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
+2572c2611
+< ..\hbox(0.0+0.0)x0.0
 ---
-> \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
-2575c2589
+> ..\hbox(0.0+0.0)x0.0, yoko(math) direction
+2575c2614
 < Memory usage before: 339&413; after: 236&405; still untouched: 706
 ---
-> Memory usage before: 493&411; after: 327&403; still untouched: 1941
-2830c2844
+> Memory usage before: 497&411; after: 329&403; still untouched: 1941
+2650,2651c2689,2690
+< Dimensions can be in units of em, ex, in, pt, pc,
+< cm, mm, dd, cc, bp, or sp; but yours is a new one!
+---
+> Dimensions can be in units of em, ex, zw, zh, in, pt, pc,
+> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one!
+2830c2869
 < Since I expected to read a number between 0 and 15,
 ---
 > Since I expected to read a number between 0 and 255,
-3051c3065
+3038c3077,3078
+< ^\hbox(7.0+1.0)x2.0
+---
+> ^\hbox(7.0+1.0)x2.0, yoko(math) direction
+> ^.\displace 0.0
+3051c3091
 < \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
 ---
 > \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
-3054c3068
+3054c3094
 < .\fam0 ^^c8
 ---
 > .\fam0 \xC8 
-3143a3158
+3056c3096
+< .\vbox(-2.0+0.0)x0.0
+---
+> .\vbox(-2.0+0.0)x0.0, yoko(math) direction
+3060c3100,3101
+< ^.\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> ^..\displace 0.0
+3140a3182
+> .....\displace 0.0
+3142a3185
+> ....|\displace 0.0
+3143a3187
 > ....\displace 0.0
-3235c3250
+3151a3196
+> .\displace 0.0
+3235c3280
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-3326c3341
+3286c3331
+< .\vbox(6.0+-8.0)x0.0
+---
+> .\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3326c3371
 < \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil
 ---
 > \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil
-3411c3426
+3329a3375
+> ..\displace 0.0
+3374c3420
+< ..\vbox(6.0+-8.0)x0.0
+---
+> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3385c3431,3432
+< ......\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> .......\displace 0.0
+3411c3458
 < p ^^82
 ---
 > p \x82
-3547a3563
+3544a3592
+> ..........\displace 0.0
+3546a3595
+> .........|\displace 0.0
+3547a3597
 > .........\displace 0.0
-3616c3632
+3564c3614,3615
+< ...\hbox(7.0+1.0)x1.99
+---
+> ...\hbox(7.0+1.0)x1.99, yoko(math) direction
+> ....\displace 0.0
+3616c3667
 < Memory usage before: 2170&521; after: 1181&459; still untouched: 175
 ---
-> Memory usage before: 3263&519; after: 1743&457; still untouched: 483
-3864c3880
+> Memory usage before: 3283&519; after: 1753&457; still untouched: 240
+3864c3915
 < \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil
 ---
 > \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil
-3951c3967
+3919,3920c3970,3972
+< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247
+< ....\vbox(-0.00002+0.0)x0.0
+---
+> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi
+> on
+> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction
+3951c4003
 < Memory usage before: 640&415; after: 397&410; still untouched: 175
 ---
-> Memory usage before: 959&413; after: 573&408; still untouched: 483
-3985c4001
+> Memory usage before: 959&413; after: 573&408; still untouched: 240
+3985c4037
 < ^^82 
 ---
 > \x82 
-3991c4007
+3991c4043
 <  []\ip A ^^82 
 ---
 >  []\ip A \x82 
-4034c4050
+4034c4086
 < \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil
-4041c4057
+4041c4093
 < ..\ip ^^82
 ---
 > ..\ip \x82
-4053c4069
+4053c4105
 < Memory usage before: 235&401; after: 178&399; still untouched: 175
 ---
-> Memory usage before: 342&399; after: 248&397; still untouched: 483
-4420c4436
+> Memory usage before: 342&399; after: 248&397; still untouched: 240
+4420c4472
 < \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil
 ---
 > \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil
-4506c4522
+4425a4478
+> ...\displace 0.0
+4447a4501
+> ...\displace 0.0
+4475a4530
+> ...\displace 0.0
+4492a4548
+> ...\displace 0.0
+4506c4562
 < Memory usage before: 651&432; after: 417&418; still untouched: 175
 ---
-> Memory usage before: 992&431; after: 598&417; still untouched: 483
-4742c4758,4759
+> Memory usage before: 1008&431; after: 606&417; still untouched: 240
+4742c4798,4799
 < \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio
 > n
-4828c4845
+4746a4804
+> ...\displace 0.0
+4762a4821
+> .....\displace 0.0
+4777a4837
+> ......\displace 0.0
+4828c4888
 < Memory usage before: 776&458; after: 464&452; still untouched: 175
 ---
-> Memory usage before: 1174&457; after: 676&451; still untouched: 483
-4881,4888d4897
+> Memory usage before: 1186&457; after: 682&451; still untouched: 240
+4881,4888d4940
 < ! Bad number (16).
 < <to be read again> 
 <                    =
@@ -303,55 +527,97 @@
 < Since I expected to read a number between 0 and 15,
 < I changed this one to zero.
 < 
-5700c5709
+5701c5753
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-6380c6389
+6381c6433
 < (tripos.tex
 ---
 > (./tripos.tex
-6501c6510
+6502c6554
 < l.429 ...^^M=13 \def^^M{\relax}#
 ---
 > l.429 ...^^M=13 \defqqM{\relax}#
-6595c6604
+6596c6648
 < Memory usage before: 819&428; after: 720&426; still untouched: 175
 ---
-> Memory usage before: 1220&428; after: 1070&426; still untouched: 483
-7155c7164
+> Memory usage before: 1232&428; after: 1078&426; still untouched: 240
+6853c6905
+< .|vbox(0.0+0.0)x0.0
+---
+> .|vbox(0.0+0.0)x0.0, yoko(math) direction
+6876a6929
+> ..|displace 0.0
+6891a6945
+> ..|displace 0.0
+6926a6981
+> .|displace 0.0
+6959a7015
+> .|displace 0.0
+6961c7017,7018
+< .|hbox(0.0+0.0)x0.0
+---
+> .|hbox(0.0+0.0)x0.0, yoko(math) direction
+> ..|displace 0.0
+6991a7049
+> .|displace 0.0
+7103a7162
+> ...|displace 0.0
+7108d7166
+< ...|ip A (ligature BB)
+7116a7175
+> ...|displace 0.0
+7125d7183
+< ...|kern2.0
+7126a7185
+> .|displace 0.0
+7136c7195
+< ...|vbox(0.0+0.0)x0.0
+---
+> ...|vbox(0.0+0.0)x0.0, yoko(math) direction
+7156c7215
 < Memory usage before: 895&439; after: 290&420; still untouched: 175
 ---
-> Memory usage before: 1336&439; after: 392&420; still untouched: 483
-7288c7297
+> Memory usage before: 1350&439; after: 398&420; still untouched: 240
+7289c7348
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 456&431; after: 394&418; still untouched: 483
-7296,7299c7305,7308
+> Memory usage before: 462&431; after: 400&418; still untouched: 240
+7297,7300c7356,7359
 <  47 strings out of 1674
-<  253 string characters out of 8354
+<  253 string characters out of 8367
 <  2825 words of memory out of 3000
 <  372 multiletter control sequences out of 2100
 ---
->  44 strings out of 1673
->  261 string characters out of 7995
->  4017 words of memory out of 4500
->  424 multiletter control sequences out of 15000+0
-7301c7310
+>  44 strings out of 1610
+>  261 string characters out of 10498
+>  4260 words of memory out of 4500
+>  439 multiletter control sequences out of 15000+0
+7302c7361
 <  2 hyphenation exceptions out of 307
 ---
 >  1 hyphenation exception out of 659
+
+mv tripos.tex cuptripos.tex
++ mv tripos.tex cuptripos.tex
+diff $testdir/tripos.tex cuptripos.tex
++ diff SRCDIR/triptrap/tripos.tex cuptripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >cuptrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ cuptrip.typ
 + diff SRCDIR/triptrap/trip.typ cuptrip.typ
 1c1
 < This is DVItype, Version 3.6
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
-< ' TeX output 2014.01.07:0959'
+< ' TeX output 1776.07.04:1200'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
 419c419
 < 1121: down4 639342208 
 ---
@@ -362,32 +628,39 @@
 ---
 > 2535: y4 203921756 
 > 2540: y0 203921756 
+
+mv trip.fmt ctrip.fmt
 + mv trip.fmt ctrip.fmt
+
+# =================================
+
+echo "*** TRIP test for e-upTeX in extended mode ***."
 + echo '*** TRIP test for e-upTeX in extended mode ***.'
 *** TRIP test for e-upTeX in extended mode ***.
+
+rm -f trip.log
 + rm -f trip.log
+./euptex --progname=eupinitex --ini <$etestdir/etrip1.in >xuptripin.fot
 + ./euptex --progname=eupinitex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by etrip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+sed "$P_SED1" trip.log >  xuptripin.log || exit 1
 + sed 's/, yoko direction//;s/yoko direction, //' trip.log
+diff $testdir/tripin.log xuptripin.log
 + diff SRCDIR/triptrap/tripin.log xuptripin.log
-1,11c1,4
-< This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+1,3c1,4
+< This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 < **\input trip
 < (trip.tex
-< ! Bad character code (256).
-< <to be read again> 
-<                    -
-< l.26   \nonstopmode\lccode256-
-<                               0\mathchardef\a="8000\def\a{ SC...
-< A character number must be between 0 and 255.
-< I changed this one to zero.
-< 
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (INITEX)  12 APR 2015 16:22
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
 > entering extended mode
 > ***\input trip
 > (./trip.tex
-36,41d28
+36,41d36
 < ! Bad register code (256).
 < l.29 ...{1} \toksdef\tokens=256 
 <                                 \show\errorstopmode
@@ -394,341 +667,496 @@
 < A register number must be between 0 and 255.
 < I changed this one to zero.
 < 
-91c78,79
+91c86,87
 < ### horizontal mode entered at line 77 (language255:hyphenmin1,63)
 ---
 > ### horizontal mode entered at line 77 (language255:hyph
 > enmin1,63)
-450,453c438,441
-<  (preloaded format=trip 2014.1.7)
-< 1326 strings of total length 23646
+93a90
+> \displace 0.0
+95a93
+> \displace 0.0
+368a367
+> ....\displace 0.0
+370a370
+> ....\displace 0.0
+437,438d436
+< ....\rip 6 (ligature )
+< ....\rip 7 (ligature )
+450,453c448,451
+<  (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
 < 471 memory locations dumped; current usage is 96&278
 < 341 multiletter control sequences
 ---
->  (preloaded format=trip 2015.4.12)
-> 1627 strings of total length 28005
-> 536 memory locations dumped; current usage is 157&278
-> 471 multiletter control sequences
-461c449
+>  (preloaded format=trip 2021.1.27)
+> 1690 strings of total length 29502
+> 538 memory locations dumped; current usage is 159&278
+> 503 multiletter control sequences
+461c459
 < Hyphenation trie of length 273 has 9 ops out of 500
 ---
 > Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+rm -f trip.log
 + rm -f trip.log
+./euptex --progname=euptex <$etestdir/trip2.in >xuptrip.fot
 + ./euptex --progname=euptex
+sed "$P_SED1;$P_SED2" trip.log > xuptrip.log
 + sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log
+diff $testdir/trip.fot xuptrip.fot
 + diff SRCDIR/triptrap/trip.fot xuptrip.fot
 1,3c1,3
-< This is TeX, Version 3.14159265 (INITEX)
+< This is TeX, Version 3.141592653 (INITEX)
 < ** &trip  trip 
 < (trip.tex ##
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (preloaded format=euptex)
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (preloaded format=euptex)
 > **entering extended mode
 > ## (./trip.tex
 17c17
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 194&313; after: 118&278; still untouched: 2109
+> Memory usage before: 196&313; after: 120&278; still untouched: 2109
 75c75
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 456&431; after: 394&418; still untouched: 483
+> Memory usage before: 462&431; after: 400&418; still untouched: 240
 77a78,80
 > 
 > ### semi simple group (level 1) entered at line 429 (begingroup)
 > ### bottom level
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log xuptrip.log 
 + diff SRCDIR/triptrap/trip.log xuptrip.log
 1,3c1,4
-< This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 < ** &trip  trip
 < (trip.tex ##
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (preloaded format=trip 2015.4.12)  12 APR 2015 16:22
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27)  27 JAN 2021 18:03
 > entering extended mode
 > **&trip \toksdef\tokens=0 \input trip
 >  (./trip.tex
-58a60,63
-> \openout0 = `8terminal.tex'.
-> 
-> \openout10 = `tripos.tex'.
-> 
-73c78
+73c74
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 194&313; after: 118&278; still untouched: 2109
-385,386c390,391
+> Memory usage before: 196&313; after: 120&278; still untouched: 2109
+113a115
+> .\displace 0.0
+198a201
+> .\displace 0.0
+253a257
+> .\displace 0.0
+308a313
+> .\displace 0.0
+349a355
+> .\displace 0.0
+385,386c391,392
 < \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos
 < t 100
 ---
 > \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co
 > st 100
-426c431
+406a413
+> ....\displace 0.0
+409a417
+> ....\displace 0.0
+412a421
+> ....\displace 0.0
+420a430
+> .\displace 0.0
+426c436
 < \insert200, natural size 400.0; split(0.0,-2.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100
-441c446
+435a446
+> .\displace 0.0
+441c452
 < \insert200, natural size 400.0; split(1.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100
-456c461
+450a462
+> .\displace 0.0
+456c468
 < \insert200, natural size 400.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100
-474c479
+466a479
+> .\displace 0.0
+474c487
 < \special{^^80-1000.0pt}
 ---
 > \special{\x80-1000.0pt}
-483,484c488,489
+483,484c496,497
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-642c647
+588a602
+> .....\displace 0.0
+591a606
+> .....\displace 0.0
+594a610
+> .....\displace 0.0
+630a647
+> ......\displace 0.0
+633a651
+> ......\displace 0.0
+636a655
+> ......\displace 0.0
+642c661
 < Memory usage before: 747&484; after: 581&481; still untouched: 1492
 ---
-> Memory usage before: 1090&483; after: 842&480; still untouched: 1989
-647c652,653
+> Memory usage before: 1118&483; after: 864&480; still untouched: 1989
+647c666,667
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-689c695
+650a671
+> .\displace 0.0
+660a682
+> .\displace 0.0
+670a693
+> .\displace 0.0
+681a705
+> .\displace 0.0
+689c713
 < \special{^^80-1000.0pt}
 ---
 > \special{\x80-1000.0pt}
-693,694c699,700
+693,694c717,718
 < \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10
 < 0
 ---
 > \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1
 > 00
-701c707
+701c725
 < \insert200, natural size 2.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100
-714,715c720,721
+714,715c738,739
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-815c821
+815c839
 < Memory usage before: 475&470; after: 290&466; still untouched: 1473
 ---
-> Memory usage before: 694&469; after: 410&465; still untouched: 1970
-820c826,827
+> Memory usage before: 710&469; after: 418&465; still untouched: 1970
+820c844,845
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-915c922
+915c940
 < Memory usage before: 218&459; after: 149&458; still untouched: 1473
 ---
 > Memory usage before: 308&458; after: 198&457; still untouched: 1970
-920c927,928
+920c945,946
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-1070c1078
+1070c1096
 < Memory usage before: 118&328; after: 102&328; still untouched: 1473
 ---
 > Memory usage before: 150&327; after: 126&327; still untouched: 1970
-1405c1413
+1405c1431
 < \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil
 ---
 > \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil
-1504a1513
+1493a1520
 > ..\displace 0.0
-1511c1520
+1503a1531
+> ..\displace 0.0
+1504a1533
+> ..\displace 0.0
+1511c1540
 < Memory usage before: 990&376; after: 584&370; still untouched: 735
 ---
-> Memory usage before: 1490&375; after: 842&369; still untouched: 1970
-1769d1777
+> Memory usage before: 1498&375; after: 846&369; still untouched: 1970
+1769d1797
 < {restoring \fam=-1}
-1779d1786
+1779d1806
 < {restoring \displayindent=0.0pt}
-1833d1839
+1833d1859
 < {restoring \fam=-1}
-1954c1960
+1887c1913
+< .\rip A
+---
+> .\displace 0.0
+1923c1949
+< .\hbox(0.0+0.0)x120.0 []
+---
+> .\hbox(0.0+0.0)x120.0, yoko(math) direction []
+1954c1980
 < (tripos.tex
 ---
 > (./tripos.tex
-2018c2024
+2018c2044
 < \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil
 ---
 > \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil
-2048,2049c2054,2055
+2022a2049
+> ..\displace 0.0
+2048,2049c2075,2076
 < ..\rip ^^82 (ligature CA)
 < ..\rip ^^82 (ligature CA)
 ---
 > ..\rip \x82 (ligature CA)
 > ..\rip \x82 (ligature CA)
-2135c2141
+2058a2086
+> ..\displace 0.0
+2071a2100
+> ..\displace 0.0
+2092a2122
+> ..\displace 0.0
+2113a2144
+> ..\displace 0.0
+2123a2155
+> ..\displace 0.0
+2135c2167
 < .\hbox(0.0+0.0)x0.0, shifted 50.0
 ---
 > .\hbox(0.0+0.0)x0.0, shifted 50.0, display
-2138c2144
+2138c2170
 < .\hbox(0.0+0.0)x0.0, shifted 100.0
 ---
 > .\hbox(0.0+0.0)x0.0, shifted 100.0, display
-2189c2195
+2142a2175
+> ..\displace 0.0
+2150a2184
+> ..\displace 0.0
+2171c2205,2206
+< ..\hbox(0.0+0.0)x120.0
+---
+> ..\hbox(0.0+0.0)x120.0, yoko(math) direction
+> ...\displace 0.0
+2189c2224
 < Memory usage before: 950&531; after: 546&448; still untouched: 706
 ---
-> Memory usage before: 1458&530; after: 808&447; still untouched: 1941
-2397c2403
+> Memory usage before: 1494&530; after: 826&447; still untouched: 1941
+2397c2432
 < ! Improper alphabetic constant.
 ---
 > ! Improper alphabetic or KANJI constant.
-2405,2406c2411,2419
-< {the character -}
-< {the character 1}
----
-> ! Extended delimiter code used as delcode.
-> <to be read again> 
->                    \relax 
-> l.249 ...mber\the\delcode`\relax
->                                 \over{{{}}}}\pagestretch=-1\p...
-> A numeric delimiter code must be between 0 and 2^{27}-1.
-> I changed this one to zero.
-> 
-> {the character 0}
-2434d2446
-< \\mathord []
-2533c2545
+2533c2568
 < \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
 ---
 > \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
-2570c2582,2583
+2544a2580
+> ..\displace 0.0
+2570c2606,2607
 < .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0
 ---
-> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, display, yoko direct
-> ion
-2575c2588
+> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, display, yoko(math) 
+> direction
+2572c2609
+< ..\hbox(0.0+0.0)x0.0
+---
+> ..\hbox(0.0+0.0)x0.0, yoko(math) direction
+2575c2612
 < Memory usage before: 339&413; after: 236&405; still untouched: 706
 ---
-> Memory usage before: 493&411; after: 327&403; still untouched: 1941
-2830c2843
+> Memory usage before: 497&411; after: 329&403; still untouched: 1941
+2650,2651c2687,2688
+< Dimensions can be in units of em, ex, in, pt, pc,
+< cm, mm, dd, cc, bp, or sp; but yours is a new one!
+---
+> Dimensions can be in units of em, ex, zw, zh, in, pt, pc,
+> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one!
+2830c2867
 < Since I expected to read a number between 0 and 15,
 ---
 > Since I expected to read a number between 0 and 255,
-2835d2847
+2835d2871
 < {restoring current font=\ip}
-3051c3063
+3038c3074,3075
+< ^\hbox(7.0+1.0)x2.0
+---
+> ^\hbox(7.0+1.0)x2.0, yoko(math) direction
+> ^.\displace 0.0
+3051c3088
 < \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
 ---
 > \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
-3054c3066
+3054c3091
 < .\fam0 ^^c8
 ---
 > .\fam0 \xC8 
-3143a3156
+3056c3093
+< .\vbox(-2.0+0.0)x0.0
+---
+> .\vbox(-2.0+0.0)x0.0, yoko(math) direction
+3060c3097,3098
+< ^.\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> ^..\displace 0.0
+3140a3179
+> .....\displace 0.0
+3142a3182
+> ....|\displace 0.0
+3143a3184
 > ....\displace 0.0
-3223d3235
+3151a3193
+> .\displace 0.0
+3223d3264
 < {restoring \fam=-1}
-3235c3247
+3235c3276
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-3326c3338
+3286c3327
+< .\vbox(6.0+-8.0)x0.0
+---
+> .\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3326c3367
 < \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil
 ---
 > \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil
-3372c3384
+3329a3371
+> ..\displace 0.0
+3372c3414
 < .\hbox(68.26251+98.15005)x19.0, glue set - 1.0, shifted 9.0
 ---
 > .\hbox(68.26251+98.15005)x19.0, glue set - 1.0, shifted 9.0, display
-3411c3423
+3374c3416
+< ..\vbox(6.0+-8.0)x0.0
+---
+> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3385c3427,3428
+< ......\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> .......\displace 0.0
+3411c3454
 < p ^^82
 ---
 > p \x82
-3547a3560
+3544a3588
+> ..........\displace 0.0
+3546a3591
+> .........|\displace 0.0
+3547a3593
 > .........\displace 0.0
-3557c3570
+3557c3603
 < .\hbox(20.5+50.80002)x8.27895, shifted 19.72105
 ---
 > .\hbox(20.5+50.80002)x8.27895, shifted 19.72105, display
-3616c3629
+3564c3610,3611
+< ...\hbox(7.0+1.0)x1.99
+---
+> ...\hbox(7.0+1.0)x1.99, yoko(math) direction
+> ....\displace 0.0
+3616c3663
 < Memory usage before: 2170&521; after: 1181&459; still untouched: 175
 ---
-> Memory usage before: 3263&519; after: 1743&457; still untouched: 483
-3766d3778
+> Memory usage before: 3283&519; after: 1753&457; still untouched: 240
+3766d3812
 < {restoring \fam=-1}
-3839d3850
+3839d3884
 < {restoring \fam=-1}
-3864c3875
+3864c3909
 < \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil
 ---
 > \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil
-3895c3906
+3895c3940
 < ..\hbox(12.0+4.0)x8.1778
 ---
 > ..\hbox(12.0+4.0)x8.1778, display
-3917c3928
+3917c3962
 < ..\hbox(0.0+13.00002)x-0.1778, glue set - 57.67767fil
 ---
 > ..\hbox(0.0+13.00002)x-0.1778, glue set - 57.67767fil, display
-3925c3936
+3919,3920c3964,3966
+< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247
+< ....\vbox(-0.00002+0.0)x0.0
+---
+> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi
+> on
+> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction
+3925c3971
 < ....\hbox(7.0+1.0)x5.0, shifted 47.5
 ---
 > ....\hbox(7.0+1.0)x5.0, shifted 47.5, display
-3951c3962
+3951c3997
 < Memory usage before: 640&415; after: 397&410; still untouched: 175
 ---
-> Memory usage before: 959&413; after: 573&408; still untouched: 483
-3985c3996
+> Memory usage before: 959&413; after: 573&408; still untouched: 240
+3985c4031
 < ^^82 
 ---
 > \x82 
-3991c4002
+3991c4037
 <  []\ip A ^^82 
 ---
 >  []\ip A \x82 
-4011d4021
+4011d4056
 < {restoring \fam=-1}
-4034c4044
+4034c4079
 < \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil
-4041c4051
+4041c4086
 < ..\ip ^^82
 ---
 > ..\ip \x82
-4047c4057
+4047c4092
 < .\hbox(0.0+0.0)x1009.0, shifted 7227.0
 ---
 > .\hbox(0.0+0.0)x1009.0, shifted 7227.0, display
-4051c4061
+4051c4096
 < .\hbox(0.0+0.0)x-7127.0, shifted 7227.0
 ---
 > .\hbox(0.0+0.0)x-7127.0, shifted 7227.0, display
-4053c4063
+4053c4098
 < Memory usage before: 235&401; after: 178&399; still untouched: 175
 ---
-> Memory usage before: 342&399; after: 248&397; still untouched: 483
-4420c4430
+> Memory usage before: 342&399; after: 248&397; still untouched: 240
+4420c4465
 < \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil
 ---
 > \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil
-4506c4516
+4425a4471
+> ...\displace 0.0
+4447a4494
+> ...\displace 0.0
+4475a4523
+> ...\displace 0.0
+4492a4541
+> ...\displace 0.0
+4506c4555
 < Memory usage before: 651&432; after: 417&418; still untouched: 175
 ---
-> Memory usage before: 992&431; after: 598&417; still untouched: 483
-4742c4752,4753
+> Memory usage before: 1008&431; after: 606&417; still untouched: 240
+4742c4791,4792
 < \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio
 > n
-4828c4839
+4746a4797
+> ...\displace 0.0
+4762a4814
+> .....\displace 0.0
+4777a4830
+> ......\displace 0.0
+4828c4881
 < Memory usage before: 776&458; after: 464&452; still untouched: 175
 ---
-> Memory usage before: 1174&457; after: 676&451; still untouched: 483
-4845c4856
+> Memory usage before: 1186&457; after: 682&451; still untouched: 240
+4845c4898
 < I'll pretend you didn't say \long or \outer or \global.
 ---
 > I'll pretend you didn't say \long or \outer or \global or \protected.
-4881,4888d4891
+4881,4888d4933
 < ! Bad number (16).
 < <to be read again> 
 <                    =
@@ -737,61 +1165,103 @@
 < Since I expected to read a number between 0 and 15,
 < I changed this one to zero.
 < 
-5700c5703
+5701c5746
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-6380c6383
+6381c6426
 < (tripos.tex
 ---
 > (./tripos.tex
-6501c6504
+6502c6547
 < l.429 ...^^M=13 \def^^M{\relax}#
 ---
 > l.429 ...^^M=13 \defqqM{\relax}#
-6595c6598
+6596c6641
 < Memory usage before: 819&428; after: 720&426; still untouched: 175
 ---
-> Memory usage before: 1220&428; after: 1070&426; still untouched: 483
-7155c7158
+> Memory usage before: 1232&428; after: 1078&426; still untouched: 240
+6853c6898
+< .|vbox(0.0+0.0)x0.0
+---
+> .|vbox(0.0+0.0)x0.0, yoko(math) direction
+6876a6922
+> ..|displace 0.0
+6891a6938
+> ..|displace 0.0
+6926a6974
+> .|displace 0.0
+6959a7008
+> .|displace 0.0
+6961c7010,7011
+< .|hbox(0.0+0.0)x0.0
+---
+> .|hbox(0.0+0.0)x0.0, yoko(math) direction
+> ..|displace 0.0
+6991a7042
+> .|displace 0.0
+7103a7155
+> ...|displace 0.0
+7108d7159
+< ...|ip A (ligature BB)
+7116a7168
+> ...|displace 0.0
+7125d7176
+< ...|kern2.0
+7126a7178
+> .|displace 0.0
+7136c7188
+< ...|vbox(0.0+0.0)x0.0
+---
+> ...|vbox(0.0+0.0)x0.0, yoko(math) direction
+7156c7208
 < Memory usage before: 895&439; after: 290&420; still untouched: 175
 ---
-> Memory usage before: 1336&439; after: 392&420; still untouched: 483
-7288c7291
+> Memory usage before: 1350&439; after: 398&420; still untouched: 240
+7289c7341
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 456&431; after: 394&418; still untouched: 483
-7291a7295,7297
+> Memory usage before: 462&431; after: 400&418; still untouched: 240
+7292a7345,7347
 > 
 > ### semi simple group (level 1) entered at line 429 (begingroup)
 > ### bottom level
-7296,7299c7302,7305
+7297,7300c7352,7355
 <  47 strings out of 1674
-<  253 string characters out of 8354
+<  253 string characters out of 8367
 <  2825 words of memory out of 3000
 <  372 multiletter control sequences out of 2100
 ---
->  44 strings out of 1673
->  261 string characters out of 7995
->  4017 words of memory out of 4500
->  502 multiletter control sequences out of 15000+0
-7301,7302c7307,7308
+>  44 strings out of 1610
+>  261 string characters out of 10498
+>  4260 words of memory out of 4500
+>  534 multiletter control sequences out of 15000+0
+7302,7303c7357,7358
 <  2 hyphenation exceptions out of 307
 <  7i,7n,9p,113b,38s stack positions out of 200i,40n,60p,500b,600s
 ---
 >  1 hyphenation exception out of 659
 >  7i,7n,9p,136b,40s stack positions out of 200i,40n,60p,500b,600s
+
+mv tripos.tex xuptripos.tex
++ mv tripos.tex xuptripos.tex
+diff $testdir/tripos.tex xuptripos.tex
++ diff SRCDIR/triptrap/tripos.tex xuptripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >xuptrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ xuptrip.typ
 + diff SRCDIR/triptrap/trip.typ xuptrip.typ
 1c1
 < This is DVItype, Version 3.6
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
-< ' TeX output 2014.01.07:0959'
+< ' TeX output 1776.07.04:1200'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
 419c419
 < 1121: down4 639342208 
 ---
@@ -802,21 +1272,44 @@
 ---
 > 2535: y4 203921756 
 > 2540: y0 203921756 
+
+mv trip.fmt xtrip.fmt
 + mv trip.fmt xtrip.fmt
+
+# =================================
+
+echo "*** e-TeX specific part of e-TRIP test for e-upTeX ***."
 + echo '*** e-TeX specific part of e-TRIP test for e-upTeX ***.'
 *** e-TeX specific part of e-TRIP test for e-upTeX ***.
+
+./pltotf $etestdir/etrip.pl etrip.tfm || exit 1
 + ./pltotf SRCDIR/etexdir/etrip/etrip.pl etrip.tfm
+
+./tftopl ./etrip.tfm etrip.pl || exit 1
 + ./tftopl ./etrip.tfm etrip.pl
+
+diff $etestdir/etrip.pl etrip.pl || is_OK=false
 + diff SRCDIR/etexdir/etrip/etrip.pl etrip.pl
+
+# get same filename in log
+$LN_S $eptestdir/eptrip.tex etrip.tex
 + ln -s SRCDIR/eptexdir/eptrip/eptrip.tex etrip.tex
+
+./euptex --progname=eupinitex --ini <$etestdir/etrip2.in >euptripin.fot
 + ./euptex --progname=eupinitex --ini
+if test ! -s etrip.fmt; then
+  echo "*** etrip.fmt not created by etrip2.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s etrip.fmt
+sed "$P_SED1" etrip.log > euptripin.log || exit 1
 + sed 's/, yoko direction//;s/yoko direction, //' etrip.log
+diff $etestdir/etripin.log euptripin.log
 + diff SRCDIR/etexdir/etrip/etripin.log euptripin.log
 1c1
 < This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (INITEX)  22 JAN 2014 11:25
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (INITEX)  12 APR 2015 16:22
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
 26,29c26,29
 <  (preloaded format=etrip 2014.1.22)
 < 1491 strings of total length 26258
@@ -823,49 +1316,133 @@
 < 281 memory locations dumped; current usage is 36&167
 < 408 multiletter control sequences
 ---
->  (preloaded format=etrip 2015.4.12)
-> 1628 strings of total length 28036
+>  (preloaded format=etrip 2021.1.27)
+> 1691 strings of total length 29533
 > 284 memory locations dumped; current usage is 40&167
-> 471 multiletter control sequences
+> 503 multiletter control sequences
+
+# May as well test non-ini second time through.
+./euptex --progname=euptex <$etestdir/etrip3.in >euptrip.fot
 + ./euptex --progname=euptex
+sed "$P_SED1;$P_SED2" etrip.log > euptrip.log
 + sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' etrip.log
+diff $etestdir/etrip.fot euptrip.fot
 + diff SRCDIR/etexdir/etrip/etrip.fot euptrip.fot
 1c1
 < This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etex)
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (preloaded format=euptex)
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (preloaded format=euptex)
+45,46d44
+< 
+< \openout1 = `etrip.out'.
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $eptestdir/eptrip.log euptrip.log
 + diff SRCDIR/eptexdir/eptrip/eptrip.log euptrip.log
 1c1
 < This is e-pTeX, Version 3.14159265-p3.4-130605-2.6 (utf8.euc) (TeX Live 2014) (preloaded format=etrip 2014.1.22)  22 JAN 2014 11:25
 ---
-> This is e-upTeX, Version 3.14159265-p3.6-u1.20-141210-2.6 (utf8.uptex) (TeX Live 2015) (preloaded format=etrip 2015.4.12)  12 APR 2015 16:22
-2210,2215d2209
-< ! Bad character code (256).
-< l.676   \iffontchar\font 256 
-<                              \else \fi    % <== bad character...
+> This is e-upTeX, Version 3.141592653-p3.8.3-u1.27-191112-2.6 (utf8.uptex) (TeX Live 2021/dev) (preloaded format=etrip 2021.1.27)  27 JAN 2021 18:03
+57a58
+> .\displace 0.0
+104a106
+> .\displace 0.0
+133a136
+> .\displace 0.0
+193a197
+> .\displace 0.0
+205a210
+> ..\displace 0.0
+253a259
+> ..\displace 0.0
+283a290
+> ..\displace 0.0
+303a311
+> ..\displace 0.0
+692,693d699
+< \openout1 = `etrip.out'.
+< 
+1426c1432
+< this will be denominator of:
+---
+> this will begin denominator of:
+1450c1456
+< this will be denominator of:
+---
+> this will begin denominator of:
+1497c1503
+< this will be denominator of:
+---
+> this will begin denominator of:
+1545c1551
+< this will be denominator of:
+---
+> this will begin denominator of:
+1662a1669
+> \displace 0.0
+1873a1881
+> \displace 0.0
+1881c1889
+< .\hbox(0.0+0.0)x0.0, shifted -16.5
+---
+> .\hbox(0.0+0.0)x0.0, shifted -16.5, yoko(math) direction
+1901a1910
+> \displace 0.0
+1906c1915
+< .\hbox(0.0+0.0)x0.0, shifted 3.0
+---
+> .\hbox(0.0+0.0)x0.0, shifted 3.0, yoko(math) direction
+2207c2216
 < A character number must be between 0 and 255, or KANJI code.
-< I changed this one to zero.
-< 
-4421,4422c4415,4416
+---
+> A character number must be between 0 and 255.
+2213c2222
+< A character number must be between 0 and 255, or KANJI code.
+---
+> A character number must be between 0 and 255.
+4025a4035
+> ..\displace 0.0
+4033a4044
+> ..\displace 0.0
+4300a4312
+> .\displace 0.0
+4421,4422c4433,4434
 <  19 strings out of 1692
 <  145 string characters out of 8157
 ---
->  19 strings out of 1672
->  145 string characters out of 7964
-4424c4418
+>  19 strings out of 1609
+>  145 string characters out of 10467
+4424c4436
 <  463 multiletter control sequences out of 15000+0
 ---
->  472 multiletter control sequences out of 15000+0
+>  504 multiletter control sequences out of 15000+0
+
+mv etrip.out euptrip.out
++ mv etrip.out euptrip.out
+diff $etestdir/etrip.out euptrip.out
++ diff SRCDIR/etexdir/etrip/etrip.out euptrip.out
+
+eval ./dvitype $dvitype_args etrip.dvi >euptrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' etrip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' etrip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' etrip.dvi
+$DIFF $DIFFFLAGS $etestdir/etrip.typ euptrip.typ
 + diff SRCDIR/etexdir/etrip/etrip.typ euptrip.typ
 1c1
 < This is DVItype, Version 3.6 (TeX Live 2014)
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
 < ' TeX output 2014.01.22:1125'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
+
+$is_OK || {
+  echo ">>> There were some errors." >&2
+  exit 1
+}
 + :
-PASS: euptexdir/euptriptest
+
+PASS euptexdir/euptriptest.test (exit status: 0)
+PASS: euptexdir/euptriptest.test

Modified: trunk/Build/source/texk/web2c/gftodvi.web
===================================================================
--- trunk/Build/source/texk/web2c/gftodvi.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/gftodvi.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -32,7 +32,7 @@
 \def\title{GF$\,$\lowercase{to}$\,$DVI}
 \def\contentspagenumber{301}
 \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 The {\ttitlefont GFtoDVI} processor}
@@ -1128,7 +1128,7 @@
 escapement.
 
 The character width~|w| duplicates the information in the \.{TFM} file; it
-is $2^{24}$ times the ratio of the true width to the font's design size.
+is $2^{20}$ times the ratio of the true width to the font's design size.
 
 The backpointer |p| points to the character's |boc|, or to the first of
 a sequence of consecutive \\{xxx} or |yyy| or |no_op| commands that

Modified: trunk/Build/source/texk/web2c/gftopk.web
===================================================================
--- trunk/Build/source/texk/web2c/gftopk.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/gftopk.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -44,7 +44,7 @@
 \def\title{GFtoPK}
 \def\contentspagenumber{201}
 \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 The {\ttitlefont GFtoPK} processor}
@@ -681,7 +681,7 @@
 various things about how the character definition is encoded.  Command bytes
 have zero or more parameters, and can never appear within a character
 definition or between parameters of another command, where they would be
-interpeted as data.
+interpreted as data.
 
 A \.{PK} file consists of a preamble, followed by a sequence of one or more
 character definitions, followed by a postamble.  The preamble command must
@@ -722,7 +722,7 @@
 length exceeds~255.
 
 \yskip\hang\\{pk\_xxx4} 243 |k[4]| |x[k]|.  Like |pk_xxx1|, but |k| can be
-ridiculously large; |k| musn't be negative.
+ridiculously large; |k| mustn't be negative.
 
 \yskip\hang|pk_yyy| 244 |y[4]|.  This command is undefined in general; it
 functions as a five-byte \\{no\_op} unless special \.{PK} reading programs
@@ -1281,7 +1281,7 @@
 @* Plan of attack.
 It would seem at first that converting a \.{GF} file to \.{PK} format should
 be relatively easy, since they both use a form of run-encoding.  Unfortunately,
-several idiosyncracies of the \.{GF} format make this conversion slightly
+several idiosyncrasies of the \.{GF} format make this conversion slightly
 cumbersome.
 The \.{GF} format separates the raster information from the escapement values
 and \.{TFM} widths; the \.{PK} format combines all information about a single
@@ -1458,7 +1458,7 @@
 
 @<Glob...@>=
 @!gf_ch : integer ; {the character we are working with}
-@!gf_ch_mod_256 : integer ; {locater pointer}
+@!gf_ch_mod_256 : integer ; {locator pointer}
 @!pred_pk_loc : integer ; {where we predict the end of the character to be.}
 @!max_n, @!min_n : integer ; {the maximum and minimum horizontal rows}
 @!max_m, @!min_m : integer ; {the maximum and minimum vertical rows}
@@ -1705,7 +1705,7 @@
 end
 
 @ We must convert the run-count array from a row orientation to a glyph
-orientation, with repeat counts for repeated rows.  We seperate this task
+orientation, with repeat counts for repeated rows.  We separate this task
 into two smaller tasks, on a per row basis.  But first, we define a new
 macro to help us fill up this new array.  Here, we have no fear that we will
 run out of space, as the glyph representation is provably smaller than the
@@ -2152,10 +2152,10 @@
 while (pk_loc mod 4 <> 0) do pk_byte(pk_no_op)
 
 @ Once we are finished with the \.{GF} file, we check the status of each
-character to insure that each character that had a locater also had raster
+character to insure that each character that had a locator also had raster
 information.
 
-@<Check for un-rasterized locaters@>=
+@<Check for unrasterized locators@>=
 for i := 0 to 255 do
    if status[i] = located then
       print_ln('Character ',i:1,' missing raster information!')
@@ -2166,7 +2166,7 @@
 @p begin
   initialize ;
   convert_gf_file ;
-  @<Check for un-rasterized locaters@> ;
+  @<Check for unrasterized locators@> ;
   print_ln(gf_len:1,' bytes packed to ',pk_loc:1,' bytes.') ;
 final_end : end .
 

Modified: trunk/Build/source/texk/web2c/gftype.web
===================================================================
--- trunk/Build/source/texk/web2c/gftype.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/gftype.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -30,7 +30,7 @@
 \def\title{GFtype}
 \def\contentspagenumber{101}
 \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 The {\ttitlefont GFtype} processor}
@@ -572,7 +572,7 @@
 escapement.
 
 The character width~|w| duplicates the information in the \.{TFM} file; it
-is $2^{24}$ times the ratio of the true width to the font's design size.
+is $2^{20}$ times the ratio of the true width to the font's design size.
 
 The backpointer |p| points to the character's |boc|, or to the first of
 a sequence of consecutive \\{xxx} or |yyy| or |no_op| commands that

Modified: trunk/Build/source/texk/web2c/lib/texmfmp.c
===================================================================
--- trunk/Build/source/texk/web2c/lib/texmfmp.c	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/lib/texmfmp.c	2021-01-30 01:42:07 UTC (rev 57558)
@@ -74,7 +74,7 @@
 #define IS_upTeX 1
 #include <euptexdir/euptexextra.h>
 #else
-#define BANNER "This is TeX, Version 3.14159265"
+#define BANNER "This is TeX, Version 3.141592653"
 #define COPYRIGHT_HOLDER "D.E. Knuth"
 #define AUTHOR NULL
 #define PROGRAM_HELP TEXHELP
@@ -95,7 +95,7 @@
 #elif defined(MFLuaJIT)
 #include <mfluajitdir/mfluajitextra.h>
 #else
-#define BANNER "This is Metafont, Version 2.7182818"
+#define BANNER "This is Metafont, Version 2.71828182"
 #define COPYRIGHT_HOLDER "D.E. Knuth"
 #define AUTHOR NULL
 #define PROGRAM_HELP MFHELP

Modified: trunk/Build/source/texk/web2c/mf-binpool.ch
===================================================================
--- trunk/Build/source/texk/web2c/mf-binpool.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mf-binpool.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -3,11 +3,11 @@
 %
 @x
 @!m,@!n:text_char; {characters input from |pool_file|}
-@!g:str_number; {garbage}
+@!g:str_number; {the string just created}
 @!a:integer; {accumulator for check sum}
 @!c:boolean; {check sum has been checked}
 @y
-@!g:str_number; {garbage}
+@!g:str_number; {the string just created}
 @z
 @x
 @ @d bad_pool(#)==begin wake_up_terminal; write_ln(term_out,#);

Modified: trunk/Build/source/texk/web2c/mf.ch
===================================================================
--- trunk/Build/source/texk/web2c/mf.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mf.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -704,7 +704,7 @@
 @d edit_file==input_stack[file_ptr]
 @z
 @x
-"E": if file_ptr>0 then
+"E": if file_ptr>0 then if input_stack[file_ptr].name_field>=256 then
   begin print_nl("You want to edit file ");
 @.You want to edit file x@>
   slow_print(input_stack[file_ptr].name_field);
@@ -711,7 +711,7 @@
   print(" at line "); print_int(line);@/
   interaction:=scroll_mode; jump_out;
 @y
-"E": if file_ptr>0 then
+"E": if file_ptr>0 then if input_stack[file_ptr].name_field>=256 then
     begin
     edit_name_start:=str_start[edit_file.name_field];
     edit_name_length:=str_start[edit_file.name_field+1] -
@@ -1009,24 +1009,22 @@
 input and output, establishes the initial values of the date and time.
 @^system dependencies@>
 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.
+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.
 
 @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;
+begin sys_time:=12*60;
+sys_day:=4; sys_month:=7; sys_year:=1776;  {self-evident truths}
 @y
 @ The following procedure, which is called just before \MF\ initializes its
 input and output, establishes the initial values of the date and time.
-It is calls an externally defined |date_and_time|, even though it could
-be done from Pascal.
-The external procedure also sets up interrupt catching.
+It calls an externally defined |date_and_time|, which also sets up
+interrupt catching. See more comments in \.{tex.ch}.
 @^system dependencies@>
 
 Note that the values are |scaled| integers. Hence \MF\ can no longer
@@ -1033,13 +1031,7 @@
 be used after the year 32767.
 
 @p procedure fix_date_and_time;
-begin
-    date_and_time(internal[time],internal[day],internal[month],internal[year]);
-    internal[time] := internal[time] * unity;
-    internal[day] := internal[day] * unity;
-    internal[month] := internal[month] * unity;
-    internal[year] := internal[year] * unity;
-end;
+begin date_and_time(sys_time,sys_day,sys_month,sys_year);
 @z
 
 @x [12.198] Change class to c_class to avoid C++ keyword.
@@ -1176,7 +1168,7 @@
   @!n:screen_col);
 var @!k:screen_col; {an index into |a|}
 @!c:screen_col; {an index into |screen_pixel|}
-begin @{ k:=0; c:=a[0];
+begin @{@+k:=0; c:=a[0];
 repeat incr(k);
   repeat screen_pixel[r,c]:=b; incr(c);
   until c=a[k];
@@ -1535,16 +1527,9 @@
 pack_job_name(".log");
 @z
 
- at x [38.790]
-begin wlog(banner);
-slow_print(base_ident); print("  ");
-print_int(round_unscaled(internal[day])); print_char(" ");
+ at x [38.790] leading character for C string
 months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
 @y
-begin wlog(banner);
-wlog (version_string);
-slow_print(base_ident); print("  ");
-print_int(round_unscaled(internal[day])); print_char(" ");
 months := ' JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
 @z
 
@@ -1592,7 +1577,7 @@
 @z
 
 @x [38.793] Can't return name to string pool because of editor option?
-if name=str_ptr-1 then {we can conserve string pool space now}
+if name=str_ptr-1 then {conserve string pool space (but see note above)}
   begin flush_string(name); name:=cur_name;
   end;
 @y
@@ -1969,6 +1954,12 @@
     @!init if ini_version then begin store_base_file; return;end;@+tini@/
 @z
 
+ at x
+fix_date_and_time; init_randoms(sys_time+sys_day);@/
+ at y
+fix_date_and_time; init_randoms(internal[time]+internal[day]);@/
+ at z
+
 %@x [49.1211] l.23002 - Handle %&base line.
 %if (base_ident=0)or(buffer[loc]="&") then
 %@y

Modified: trunk/Build/source/texk/web2c/mf.web
===================================================================
--- trunk/Build/source/texk/web2c/mf.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mf.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,6 +1,7 @@
 % This program is copyright (C) 1984 by D. E. Knuth; all rights are reserved.
-% Copying of this file is authorized only if (1) you are D. E. Knuth, or if
-% (2) you make absolutely no changes to your copy. (The WEB system provides
+% Unlimited copying and redistribution of this file are permitted as long
+% as this file is not modified. Modifications are permitted, but only if
+% the resulting file is not named mf.web. (The WEB system provides
 % for alterations via an auxiliary file; the master file should stay intact.)
 % In other words, METAFONT is under essentially the same ground rules as TeX.
 
@@ -26,6 +27,7 @@
 % Version 2.71828 suppressed autorounding in dangerous cases (June 2003).
 % Version 2.718281 was a general cleanup with minor fixes (February 2008).
 % Version 2.7182818 was similar (January 2014).
+% Version 2.71828182 was similar (January 2021).
 
 % A reward of $327.68 will be paid to the first finder of any remaining bug.
 
@@ -155,7 +157,7 @@
 known as `\MF\kern.5pt' [cf.~Stanford Computer Science report CS1095,
 January 1986].
 
- 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}
 
 @ Different \PASCAL s have slightly different conventions, and the present
 @!@:PASCAL H}{\ph@>
@@ -166,7 +168,7 @@
 if necessary. (\ph\ is Charles Hedrick's modification of a compiler
 @^Hedrick, Charles Locke@>
 for the DECsystem-10 that was originally developed at the University of
-Hamburg; cf.\ {\sl SOFTWARE---Practice \AM\ Experience \bf6} (1976),
+Hamburg; cf.\ {\sl Software---Practice and Experience \bf6} (1976),
 29--42. The \MF\ program below is intended to be adaptable, without
 extensive changes, to most other versions of \PASCAL, so it does not fully
 use the admirable features of \ph. Indeed, a conscious effort has been
@@ -830,7 +832,7 @@
 @!max_buf_stack:0..buf_size; {largest index used in |buffer|}
 
 @ The |input_ln| function brings the next line of input from the specified
-field into available positions of the buffer array and returns the value
+file into available positions of the buffer array and returns the value
 |true|, unless the file has already been entirely read, in which case it
 returns |false| and sets |last:=first|.  In general, the |ASCII_code|
 numbers that represent the next line of the file are input into
@@ -1218,7 +1220,7 @@
 label done,exit;
 var @!k,@!l:0..255; {small indices or counters}
 @!m,@!n:text_char; {characters input from |pool_file|}
-@!g:str_number; {garbage}
+@!g:str_number; {the string just created}
 @!a:integer; {accumulator for check sum}
 @!c:boolean; {check sum has been checked}
 begin pool_ptr:=0; str_ptr:=0; max_pool_ptr:=0; max_str_ptr:=0; str_start[0]:=0;
@@ -1499,9 +1501,9 @@
 
 @ Here is the very first thing that \MF\ prints: a headline that identifies
 the version number and base name. The |term_offset| variable is temporarily
-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.
+incorrect, but the discrepancy is not serious since we assume that this
+part of the program is system dependent.
+@^system dependencies@>
 
 @<Initialize the output...@>=
 wterm(banner);
@@ -1538,7 +1540,7 @@
 
 @<Basic print...@>=
 procedure print_int(@!n:integer); {prints an integer in decimal form}
-var k:0..23; {index to current digit; we assume that $|n|<10^{23}$}
+var k:0..23; {index to current digit; we assume that $\vert n\vert<10^{23}$}
 @!m:integer; {used to negate |n| in possibly dangerous cases}
 begin k:=0;
 if n<0 then
@@ -1758,7 +1760,8 @@
 exit:end;
 
 @ @<Get user's advice...@>=
-loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
+loop at +begin continue: if interaction<>error_stop_mode then return;
+  clear_for_error_prompt; prompt_input("? ");
 @.?\relax@>
   if last=first then return;
   c:=buffer[first];
@@ -1783,7 +1786,7 @@
 "0","1","2","3","4","5","6","7","8","9": if deletions_allowed then
   @<Delete |c-"0"| tokens and |goto continue|@>;
 @t\4\4@>@;@+@!debug "D":begin debug_help;goto continue;@+end;@+gubed@/
-"E": if file_ptr>0 then
+"E": if file_ptr>0 then if input_stack[file_ptr].name_field>=256 then
   begin print_nl("You want to edit file ");
 @.You want to edit file x@>
   slow_print(input_stack[file_ptr].name_field);
@@ -1804,7 +1807,8 @@
 @.Type <return> to proceed...@>
 print_nl("R to run without stopping, Q to run quietly,");@/
 print_nl("I to insert something, ");
-if file_ptr>0 then print("E to edit your file,");
+if file_ptr>0 then if input_stack[file_ptr].name_field>=256 then
+  print("E to edit your file,");
 if deletions_allowed then
   print_nl("1 or ... or 9 to ignore the next 1 to 9 tokens of input,");
 print_nl("H for help, X to quit.");
@@ -1999,7 +2003,7 @@
   print_err("Interruption");
 @.Interruption@>
   help3("You rang?")@/
-  ("Try to insert some instructions for me (e.g.,`I show x'),")@/
+  ("Try to insert an instruction for me (e.g., `I show x;'),")@/
   ("unless you just want to quit by typing `X'.");
   deletions_allowed:=false; error; deletions_allowed:=true;
   interrupt:=0;
@@ -2200,7 +2204,7 @@
 been designed to avoid this sort of error.
 
 Notice that if 64-bit integer arithmetic were available,
-we could simply compute |(@t$(2^{29}$@>*p+q)div (2*q)|.
+we could simply compute |@t$(2^{29}$@>*p+q)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
@@ -4111,7 +4115,7 @@
 @d fillin=38 {extra darkness of diagonal lines}
 @d turning_check=39 {controls reorientation of clockwise paths}
 @d warning_check=40 {controls error message when variable value is large}
- at d boundary_char=41 {the right boundary character for ligatures}
+ at d boundary_char=41 {the boundary character for ligatures}
 @d max_given_internal=41
 
 @<Glob...@>=
@@ -4265,17 +4269,21 @@
 input and output, establishes the initial values of the date and time.
 @^system dependencies@>
 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.
+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.
 
 @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}
+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;
 
 @ \MF\ is occasionally supposed to print diagnostic information that
@@ -4299,11 +4307,14 @@
 selector:=old_setting;
 end;
 
-@ Of course we had better declare another global variable, if the previous
+@ 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}
+@^system dependencies@>
 
 @ We will occasionally use |begin_diagnostic| in connection with line-number
 printing, as follows. (The parameter |s| is typically |"Path"| or
@@ -4874,7 +4885,7 @@
 end
 
 @ Strictly speaking, a genuine token will never have |info(p)=0|.
-But we will see later (in the |print_variable_name| routine) that
+But we will see later (in the definition of attribute nodes) that
 it is convenient to let |info(p)=0| stand for `\.{[]}'.
 
 @<Display a collective subscript@>=
@@ -5584,7 +5595,7 @@
 @ @<Set init...@>=save_ptr:=null;
 
 @ The |save_variable| routine is given a hash address |q|; it salts this
-address in the save stack, together with its current equivalent,
+address away in the save stack, together with its current equivalent,
 then makes token~|q| behave as though it were brand new.
 
 Nothing is stacked when |save_ptr=null|, however; there's no way to remove
@@ -7036,9 +7047,9 @@
 Here $a\ll b$ means that $a\L b-2$, and $a\gg b$ means that $a\G b+2$.
 
 The smoothing operation is symmetric in the sense that, if $a_0\ldots a_n$
-smoothes to $a_0'\ldots a_n'$, then the reverse sequence $a_n\ldots a_0$
-smoothes to $a_n'\ldots a_0'$; also the complementary sequence
-$(m-a_0)\ldots(m-a_n)$ smoothes to $(m-a_0')\ldots(m-a_n')$.
+smooths to $a_0'\ldots a_n'$, then the reverse sequence $a_n\ldots a_0$
+smooths to $a_n'\ldots a_0'$; also the complementary sequence
+$(m-a_0)\ldots(m-a_n)$ smooths to $(m-a_0')\ldots(m-a_n')$.
 We have $a_0'+\cdots+a_n'=a_0+\cdots+a_n$ because $\delta_0=\delta_{n+1}=0$.
 
 @p procedure smooth_moves(@!b,@!t:integer);
@@ -7073,7 +7084,7 @@
 weightless; in this way, the data storage requirements grow only linearly
 with respect to the number of pixels per point, even though two-dimensional
 data is being represented. (Well, the actual dependence on the underlying
-resolution is order $n\log n$, but the the $\log n$ factor is buried in our
+resolution is order $n\log n$, but the $\log n$ factor is buried in our
 implicit restriction on the maximum raster size.) The sum of all edge
 weights in each row should be zero.
 
@@ -10870,7 +10881,7 @@
 k:=0; w:=link(h); ww:=knil(w);
 mm0:=floor_unscaled(x_coord(p)+x_coord(w)-xy_corr[octant]);
 mm1:=floor_unscaled(x_coord(q)+x_coord(ww)-xy_corr[octant]);
-for n:=0 to n1-n0 do env_move[n]:=mm0;
+for n:=0 to n1-n0-1 do env_move[n]:=mm0;
 env_move[n1-n0]:=mm1; move_ptr:=0; m:=mm0
 
 @ At this point |n| holds the value of |move_ptr| that was current
@@ -11074,7 +11085,7 @@
 For example, the exact envelope with respect to a pen of diameter~1
 blackens a pixel if and only if the path intersects a circle of diameter~1
 inscribed in that pixel; the resulting pattern has ``blots'' when the path
-is travelling diagonally in unfortunate raster positions. A much better
+is traveling diagonally in unfortunate raster positions. A much better
 result is obtained when pixels are blackened only when the path intersects
 an inscribed {\sl diamond\/} of diameter~1. Such a diamond is precisely
 the polygon that \MF\ uses in the special case of a circle whose diameter is~1.
@@ -11417,7 +11428,7 @@
 
 @ At this point there's a line of length |<=delta| from vertex~|p|
 to vertex~|q|, orthogonal to direction $\bigl($|right_u(p),left_v(q)|$\bigr)$;
-and there's a line of length |>=delta| from vertex~|q| to
+and there's a line of length |>=delta| from vertex~|q|
 to vertex~|r|, orthogonal to direction $\bigl($|right_u(q),left_v(r)|$\bigr)$.
 The best line to direction $(u,v)$ should replace the line from
 |p| to~|q|; this new line will have the same length as the old.
@@ -12111,7 +12122,7 @@
 is actually commented out, but it does specify the intended effects.
 
 @<Glob...@>=
-@{@!screen_pixel:array[screen_row,screen_col] of pixel_color;@+@}
+@{@+@!screen_pixel:array[screen_row,screen_col] of pixel_color at t; @>@}
 
 @ The |blank_rectangle| routine simply whitens all pixels that lie in
 columns |left_col| through |right_col-1|, inclusive, of rows
@@ -12156,7 +12167,7 @@
   @!n:screen_col);
 var @!k:screen_col; {an index into |a|}
 @!c:screen_col; {an index into |screen_pixel|}
-begin @{ k:=0; c:=a[0];
+begin @{@+k:=0; c:=a[0];
 repeat incr(k);
   repeat screen_pixel[r,c]:=b; incr(c);
   until c=a[k];
@@ -13384,7 +13395,7 @@
 discussion above, is a code number that explains what kind of token list
 is being scanned.
 
-\yskip\hang|name| points to the |eqtb| address of the control sequence
+\yskip\hang|name| points to the |eqtb| address of the macro
 being expanded, if the current token list is a macro not defined by
 \&{vardef}. Macros defined by \&{vardef} have |name=null|; their name
 can be deduced by looking at their first two parameters.
@@ -13405,7 +13416,7 @@
 \indent|parameter|, if a \&{text} or \&{suffix} parameter is being scanned;
 
 \indent|backed_up|, if the token list being scanned has been inserted as
-`to be read again'.
+`to be read again';
 
 \indent|inserted|, if the token list being scanned has been inserted as
 part of error recovery;
@@ -14674,7 +14685,7 @@
 else if cur_cmd<>semicolon then
   begin missing_err(";");@/
 @.Missing `;'@>
-  help2("After `exitif <boolean exp>' I expect to see a semicolon.")@/
+  help2("After `exitif <boolean expr>' I expect to see a semicolon.")@/
   ("I shall pretend that one was there."); back_error;
   end;
 end
@@ -14790,7 +14801,7 @@
 @t\4@>@<Declare the procedure called |print_arg|@>@;
 @t\4@>@<Declare the procedure called |scan_text_arg|@>@;
 procedure macro_call(@!def_ref,@!arg_list,@!macro_name:pointer);
-  {invokes a user-defined control sequence}
+  {invokes a user-defined sequence of commands}
 label found;
 var @!r:pointer; {current node in the macro's token list}
 @!p,@!q:pointer; {for list manipulation}
@@ -15126,7 +15137,7 @@
   endcases;
 
 @ Here is a procedure that ignores text until coming to an \&{elseif},
-\&{else}, or \&{fi} at level zero of $\&{if}\ldots\&{fi}$
+\&{else}, or \&{fi} at the current level of $\&{if}\ldots\&{fi}$
 nesting. After it has acted, |cur_mod| will indicate the token that
 was found.
 
@@ -15369,8 +15380,8 @@
 `\&{endfor}' at the end of the loop. This will come through \MF's scanner
 at the proper time to cause the loop to be repeated.
 
-(If the user tries some shenanigan like `\&{for} $\ldots$ \&{let} \&{endfor}',
-he will be foiled by the |get_symbol| routine, which keeps frozen
+(A user who tries some shenanigan like `\&{for} $\ldots$ \&{let} \&{endfor}'
+will be foiled by the |get_symbol| routine, which keeps frozen
 tokens unchanged. Furthermore the |frozen_repeat_loop| is an \&{outer}
 token, so it won't be lost accidentally.)
 
@@ -15910,13 +15921,11 @@
 @ @<Print the banner...@>=
 begin wlog(banner);
 slow_print(base_ident); print("  ");
-print_int(round_unscaled(internal[day])); print_char(" ");
+print_int(sys_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);
+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);
 end
 
 @ Here's an example of how these file-name-parsing routines work in practice.
@@ -15939,6 +15948,9 @@
 
 @ Let's turn now to the procedure that is used to initiate file reading
 when an `\.{input}' 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.
+@^system dependencies@>
 
 @p procedure start_input; {\MF\ will \.{input} something}
 label done;
@@ -15962,7 +15974,7 @@
 if term_offset+length(name)>max_print_line-2 then print_ln
 else if (term_offset>0)or(file_offset>0) then print_char(" ");
 print_char("("); incr(open_parens); slow_print(name); update_terminal;
-if name=str_ptr-1 then {we can conserve string pool space now}
+if name=str_ptr-1 then {conserve string pool space (but see note above)}
   begin flush_string(name); name:=cur_name;
   end;
 @<Read the first line of the new file@>;
@@ -16066,7 +16078,7 @@
 and |scan_secondary|, not as an output of |scan_tertiary| or |scan_expression|.
 
 \smallskip\hang
-|cur_type=path_type| means that |cur_exp| points to a the first node of
+|cur_type=path_type| means that |cur_exp| points to the first node of
 a path; nobody else points to this particular path. The control points of
 the path will have been chosen.
 
@@ -16106,7 +16118,7 @@
 
 \smallskip\hang
 |cur_type=proto_dependent| means that |cur_exp| points to a |proto_dependent|
-capsule node . The |dep_list| field in this capsule
+capsule node. The |dep_list| field in this capsule
 points to the associated dependency list.
 
 \smallskip\hang
@@ -20847,11 +20859,11 @@
 current character (which may have a ligature/kerning program of its own).
 
 If the very first instruction of the |lig_kern| array has |skip_byte=255|,
-the |next_char| byte is the so-called right boundary character of this font;
+the |next_char| byte is the 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 left boundary character,
-beginning at location |256*op_byte+remainder|.
+there is a special ligature/kerning program for a boundary character at the
+left, beginning at location |256*op_byte+remainder|.
 The interpretation is that \TeX\ puts implicit boundary characters
 before and after each consecutive string of characters from the same font.
 These implicit characters do not appear in the output, but they can affect
@@ -20868,7 +20880,7 @@
 $$\hbox{|256*op_byte+remainder<nl|.}$$
 If such an instruction is encountered during
 normal program execution, it denotes an unconditional halt; no ligature
-command is performed.
+or kerning command is performed.
 
 @d stop_flag=128+min_quarterword
   {value indicating `\.{STOP}' in a lig/kern program}
@@ -20968,8 +20980,8 @@
 @!nk:0..max_kerns; {the number of distinct kerns so far}
 @!exten:array[eight_bits] of four_quarters; {extensible character recipes}
 @!ne:0..256; {the number of extensible characters so far}
-@!param:array[1..max_font_dimen] of scaled; {\&{fontinfo} parameters}
-@!np:0..max_font_dimen; {the largest \&{fontinfo} parameter specified so far}
+@!param:array[1..max_font_dimen] of scaled; {\&{fontdimen} parameters}
+@!np:0..max_font_dimen; {the largest \&{fontdimen} parameter specified so far}
 @!nw,@!nh,@!nd,@!ni:0..256; {sizes of \.{TFM} subtables}
 @!skip_table:array[eight_bits] of 0..lig_table_size; {local label status}
 @!lk_started:boolean; {has there been a lig/kern step in this command yet?}
@@ -21128,7 +21140,7 @@
     if cur_cmd<>colon then
       begin missing_err(":");
 @.Missing `:'@>
-      help1("A colon should follow a headerbyte or fontinfo location.");
+      help1("A colon should follow a headerbyte or fontdimen location.");
       back_error;
       end;
     if c=header_byte_code then @<Store a list of header bytes@>
@@ -22582,6 +22594,8 @@
 @ The inverse macros are slightly more complicated, since we need to check
 the range of the values we are reading in. We say `|undump(a)(b)(x)|' to
 read an integer value |x| that is supposed to be in the range |a<=x<=b|.
+System error messages should be suppressed when undumping.
+@^system dependencies@>
 
 @d undump_wd(#)==begin get(base_file); #:=base_file^;@+end
 @d undump_int(#)==begin get(base_file); #:=base_file^.int;@+end
@@ -22881,7 +22895,8 @@
 might lead to an infinite loop.
 @^system dependencies@>
 
-This program doesn't bother to close the input files that may still be open.
+If |final_cleanup| is bypassed, this program doesn't bother to close
+the input files that may still be open.
 
 @<Last-minute...@>=
 procedure close_files_and_terminate;
@@ -23038,7 +23053,7 @@
   while (loc<limit)and(buffer[loc]=" ") do incr(loc);
   end;
 buffer[limit]:="%";@/
-fix_date_and_time; init_randoms((internal[time] div unity)+internal[day]);@/
+fix_date_and_time; init_randoms(sys_time+sys_day);@/
 @<Initialize the print |selector|...@>;
 if loc<limit then if buffer[loc]<>"\" then start_input; {\&{input} assumed}
 end
@@ -23070,14 +23085,15 @@
 @!debug procedure debug_help; {routine to display various things}
 label breakpoint,exit;
 var @!k,@!l,@!m,@!n:integer;
-begin loop begin wake_up_terminal;
+begin clear_terminal;
+  loop begin wake_up_terminal;
   print_nl("debug # (-1 to exit):"); update_terminal;
 @.debug \#@>
   read(term_in,m);
   if m<0 then return
   else if m=0 then
-    begin goto breakpoint;@\ {go to every label at least once}
-    breakpoint: m:=0; @{'BREAKPOINT'@}@\
+    begin goto breakpoint;@/ {go to every declared label at least once}
+    breakpoint: m:=0; @{'BREAKPOINT'@}@/
     end
   else  begin read(term_in,n);
     case m of

Modified: trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,8 +1,8 @@
 @x [0] MFLua
 % This program is copyright (C) 1984 by D. E. Knuth; all rights are reserved.
 @y
-% This program is MFLua, strictly based on the METAFONT 2.7182818 source code.
-% What follow are the original comments of METAFONT 2.7182818.
+% This program is MFLua, strictly based on the METAFONT 2.71828182 source code.
+% What follow are the original comments of METAFONT 2.71828182.
 
 % This program is copyright (C) 1984 by D. E. Knuth; all rights are reserved.
 @z
@@ -15,13 +15,13 @@
 @z
 
 @x [1.2] MFLua
- 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
- at d METAFONT_banner=='This is METAFONT, Version 2.7182818' {printed when \MF\ starts}
+ at d METAFONT_banner=='This is METAFONT, Version 2.71828182' {printed when \MF\ starts}
 @#
 @d MFLua_version_string=='-1.0.0-alpha'
 @#
- at d MFLua_banner=='This is MFLua, Version 2.7182818', MFLua_version_string
+ at d MFLua_banner=='This is MFLua, Version 2.71828182', MFLua_version_string
   {printed when MFLua starts}
 @#
 @d banner==MFLua_banner

Modified: trunk/Build/source/texk/web2c/mfluadir/mflua_version.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mflua_version.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mfluadir/mflua_version.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,2 +1,2 @@
 #define MFLUA_VERSION "1.0.0-alpha"
-#define BANNER "This is MFLua, Version 2.7182818-" MFLUA_VERSION
\ No newline at end of file
+#define BANNER "This is MFLua, Version 2.71828182-" MFLUA_VERSION

Modified: trunk/Build/source/texk/web2c/mfluadir/mfluaextra.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mfluaextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mfluadir/mfluaextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -5,7 +5,7 @@
 
 #include <mfluadir/mflua_version.h> /* for MFLUA_VERSION and BANNER */
 
-/*#define BANNER "This is MFLua, Version 2.7182818-" MFLUA_VERSION*/
+/*#define BANNER "This is MFLua, Version 2.71828182-" MFLUA_VERSION*/
 #define COPYRIGHT_HOLDER "L. Scarso"
 #define AUTHOR NULL
 #define PROGRAM_HELP MFLUAHELP

Modified: trunk/Build/source/texk/web2c/mfluadir/mfluatrap/mfluatrap.diffs
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mfluatrap/mfluatrap.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mfluadir/mfluatrap/mfluatrap.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,48 +1,213 @@
+#! /bin/sh -vx
+# Copyright 2017 Karl Berry <tex-live at tug.org>
+# Copyright 2015 Peter Breitenlohner <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+ltestdir=$abs_srcdir/mfluadir/mfluatrap
++ ltestdir=SRCDIR/mfluadir/mfluatrap
+
+TEXMFCNF=$ltestdir
++ TEXMFCNF=SRCDIR/mfluadir/mfluatrap
+LUAINPUTS=$ltestdir
++ LUAINPUTS=SRCDIR/mfluadir/mfluatrap
+export TEXMFCNF LUAINPUTS
++ export TEXMFCNF LUAINPUTS
+
+rm -rf mfluatrapdir
++ rm -rf mfluatrapdir
+mkdir mfluatrapdir
++ mkdir mfluatrapdir
+cd mfluatrapdir
++ cd mfluatrapdir
+
+echo ">>> Running TRAP test for MFLua." >&2
++ echo '>>> Running TRAP test for MFLua.'
 >>> Running TRAP test for MFLua.
+echo ">>> See $ltestdir/mfluatrap.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/mfluadir/mfluatrap/mfluatrap.diffs for example of acceptable diffs.'
 >>> See SRCDIR/mfluadir/mfluatrap/mfluatrap.diffs for example of acceptable diffs.
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+# get same filename in log
+$LN_S $testdir/trap.mf .
 + ln -s SRCDIR/triptrap/trap.mf .
+
+./mflua --progname=inimflua <$testdir/mftrap1.in >mftrapin.fot
 + ./mflua --progname=inimflua
+if test ! -s trap.base; then
+  echo "*** trap.base not created by mftrap1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trap.base
+mv trap.log mftrapin.log || exit 1
 + mv trap.log mftrapin.log
+diff $testdir/mftrapin.log mftrapin.log
 + diff SRCDIR/triptrap/mftrapin.log mftrapin.log
 1c1
-< This is METAFONT, Version 2.7182818 (INIMF)  7 JAN 2014 17:51
+< This is METAFONT, Version 2.71828182 (INIMF)  4 JUL 1776 12:00
 ---
-> This is MFLua, Version 2.7182818-0.5 (TeX Live 2015) (INIMF)  17 APR 2015 11:16
+> This is MFLua, Version 2.71828182-1.0.0-alpha (INIMF)  27 JAN 2021 18:03
 150c150
-< String usage 26&83 (891&11438 still untouched)
+< String usage 26&83 (892&11481 still untouched)
 ---
-> String usage 30&98 (6384&979377 still untouched)
+> String usage 30&98 (1047458&9979376 still untouched)
 176,177c176,177
-<  (preloaded base=trap 2014.1.7)
-< 1117 strings of total length 20614
+<  (preloaded base=trap 1776.7.4)
+< 1116 strings of total length 20570
 ---
->  (preloaded base=trap 2015.4.17)
-> 1125 strings of total length 20684
+>  (preloaded base=trap 2021.1.27)
+> 1125 strings of total length 20685
 179c179
 < 265 symbolic tokens
 ---
 > 266 symbolic tokens
+
+./mflua --progname=inimflua <$testdir/mftrap2.in >mftrap.fot
 + ./mflua --progname=inimflua
+mv trap.log mftrap.log || exit 1
 + mv trap.log mftrap.log
+mv trap.tfm mftrap.tfm || exit 1
 + mv trap.tfm mftrap.tfm
+diff $testdir/mftrap.fot mftrap.fot
 + diff SRCDIR/triptrap/mftrap.fot mftrap.fot
-1,3c1,2
-< This is METAFONT, Version 2.7182818 (INIMF)
+1,3c1,4
+< This is METAFONT, Version 2.71828182 (INIMF)
 < ** &trap  trap 
 < (trap.mf
 ---
-> This is MFLua, Version 2.7182818-0.5 (TeX Live 2015) (INIMF)
+> MFLua version: 1.0.0-alpha
+> MFLua banner:  This is MFLua, Version 2.71828182-1.0.0-alpha
+> This is MFLua, Version 2.71828182-1.0.0-alpha (TeX Live 2021/dev) (INIMF)
 > **(trap.mf
-39c38
-< String usage 41&161 (815&7634 still untouched)
+22a24,99
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+27a105,136
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+39c148
+< String usage 41&161 (816&7678 still untouched)
 ---
-> String usage 50&202 (6298&975523 still untouched)
+> String usage 50&202 (1047372&9975522 still untouched)
+59a169
+> Warning: end_program.lua not found
+diff $testdir/mftrap.log mftrap.log
 + diff SRCDIR/triptrap/mftrap.log mftrap.log
 1c1
-< This is METAFONT, Version 2.7182818 (preloaded base=trap 2014.1.7)  7 JAN 2014 18:11
+< This is METAFONT, Version 2.71828182 (preloaded base=trap 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is MFLua, Version 2.7182818-0.5 (TeX Live 2015) (preloaded base=trap 2015.4.17)  17 APR 2015 11:16
+> This is MFLua, Version 2.71828182-1.0.0-alpha (preloaded base=trap 2021.1.27)  27 JAN 2021 18:03
 133,134c133,134
 < <scantokens> pair
 <                   p[],';^^ff
@@ -68,115 +233,19 @@
 > <scantokens> or <runscript> ...f
 >                                 
 1825c1825
-< String usage 24&92 (858&11309 still untouched)
+< String usage 24&92 (859&11353 still untouched)
 ---
-> String usage 30&119 (6344&979191 still untouched)
-3693,3695c3693,3695
-< xpart %CAPSULE1359=xx
-< %CAPSULE1367=2yy-2
-< %CAPSULE1375 = 3.3333xx+3.3333
----
-> xpart %CAPSULE1370=xx
-> %CAPSULE1378=2yy-2
-> %CAPSULE1386 = 3.3333xx+3.3333
-3755,3757c3755,3757
-< xpart %CAPSULE1049 = 8000o2-4000o1+1000o3+9
-< xpart %CAPSULE1383=xpart '
-< ypart %CAPSULE1383=ypart '
----
-> xpart %CAPSULE604 = 8000o2-4000o1+1000o3+9
-> xpart %CAPSULE1394=xpart '
-> ypart %CAPSULE1394=ypart '
-3760,3761c3760,3761
-< ### 4000o1 = -xpart %CAPSULE1049+8000o2+1000o3+9
-< ### -4.87383o2 = -oo-0.0004xpart %CAPSULE1049+0.39673o3-17.99643
----
-> ### 4000o1 = -xpart %CAPSULE604+8000o2+1000o3+9
-> ### -4.87383o2 = -oo-0.0004xpart %CAPSULE604+0.39673o3-17.99643
-3768c3768
-< ### -alfa=-xpart %CAPSULE1494
----
-> ### -alfa=-xpart %CAPSULE368
-3770,3771c3770,3771
-< {xpart((xpart %CAPSULE1494,0))}
-< ### -xpart %CAPSULE17=-%CAPSULE1176
----
-> {xpart((xpart %CAPSULE368,0))}
-> ### -xpart %CAPSULE17=-%CAPSULE1376
-3773,3775c3773,3775
-< {(%CAPSULE382)+(%CAPSULE1176)}
-< ### -%CAPSULE382=-%CAPSULE1893+%CAPSULE1176
-< ### -%CAPSULE1893=-ypart %CAPSULE1049
----
-> {(%CAPSULE382)+(%CAPSULE1376)}
-> ### -%CAPSULE382=-%CAPSULE1364+%CAPSULE1376
-> ### -%CAPSULE1364=-ypart %CAPSULE604
-3780c3780
-< ### p$=-ypart %CAPSULE604+1
----
-> ### p$=-ypart %CAPSULE1360+1
-3782,3793c3782,3793
-< {(2/3)*((-ypart %CAPSULE604+1,ypart %CAPSULE604))}
-< ### ypart %CAPSULE604=-xpart %CAPSULE604+1
-< ### -0.66667xpart %CAPSULE604=-xpart %CAPSULE1889
-< {-((xpart %CAPSULE1889,-xpart %CAPSULE1889+0.66667))}
-< ### xpart %CAPSULE1889=-xpart %CAPSULE1172
-< {((xpart %CAPSULE1049,ypart %CAPSULE1049))=((xpart %CAPSULE1172,-xpart %
-< CAPSULE1172-0.66667))}
-< ## xpart %CAPSULE1172=-ypart %CAPSULE1049-0.66667
-< ## ypart %CAPSULE1049=-xpart %CAPSULE1049-0.66667
-< ### -xpart %CAPSULE1049=-xpart %CAPSULE1172
-< {((xpart ',ypart '))=((xpart %CAPSULE1172,-xpart %CAPSULE1172-0.66667))}
-< ## xpart %CAPSULE1172=-ypart '-0.66667
----
-> {(2/3)*((-ypart %CAPSULE1360+1,ypart %CAPSULE1360))}
-> ### ypart %CAPSULE1360=-xpart %CAPSULE1360+1
-> ### -0.66667xpart %CAPSULE1360=-xpart %CAPSULE1744
-> {-((xpart %CAPSULE1744,-xpart %CAPSULE1744+0.66667))}
-> ### xpart %CAPSULE1744=-xpart %CAPSULE1675
-> {((xpart %CAPSULE604,ypart %CAPSULE604))=((xpart %CAPSULE1675,-xpart %CA
-> PSULE1675-0.66667))}
-> ## xpart %CAPSULE1675=-ypart %CAPSULE604-0.66667
-> ## ypart %CAPSULE604=-xpart %CAPSULE604-0.66667
-> ### -xpart %CAPSULE604=-xpart %CAPSULE1675
-> {((xpart ',ypart '))=((xpart %CAPSULE1675,-xpart %CAPSULE1675-0.66667))}
-> ## xpart %CAPSULE1675=-ypart '-0.66667
-3799c3799
-< ### -ooo=-%CAPSULE1494
----
-> ### -ooo=-%CAPSULE1051
-3801,3810c3801,3810
-< {(%CAPSULE1494)+(1)}
-< ### -%CAPSULE1494=-%CAPSULE1350+1
-< {(1/2)*(%CAPSULE1350)}
-< ### -0.5%CAPSULE1350=-%CAPSULE1367
-< {-(%CAPSULE1367)}
-< ### %CAPSULE1367=-%CAPSULE1893
-< {(2)*(%CAPSULE1893)}
-< ### -2%CAPSULE1893=-%CAPSULE1885
-< {(-0.5%CAPSULE1885-0.5)=(%CAPSULE1885)}
-< ## %CAPSULE1885=-0.33333
----
-> {(%CAPSULE1051)+(1)}
-> ### -%CAPSULE1051=-%CAPSULE1378+1
-> {(1/2)*(%CAPSULE1378)}
-> ### -0.5%CAPSULE1378=-%CAPSULE1370
-> {-(%CAPSULE1370)}
-> ### %CAPSULE1370=-%CAPSULE1362
-> {(2)*(%CAPSULE1362)}
-> ### -2%CAPSULE1362=-%CAPSULE1354
-> {(-0.5%CAPSULE1354-0.5)=(%CAPSULE1354)}
-> ## %CAPSULE1354=-0.33333
+> String usage 30&119 (1047418&9979190 still untouched)
 4235c4235
-< String usage 41&161 (815&7634 still untouched)
+< String usage 41&161 (816&7678 still untouched)
 ---
-> String usage 50&202 (6298&975523 still untouched)
+> String usage 50&202 (1047372&9975522 still untouched)
 4251,4252c4251,4252
-<  68 strings out of 883
-<  3752 string characters out of 11386
+<  68 strings out of 884
+<  3752 string characters out of 11430
 ---
->  77 strings out of 6375
->  3793 string characters out of 979316
+>  77 strings out of 1047449
+>  3793 string characters out of 9979315
 4254,4255c4254,4255
 <  289 symbolic tokens out of 2100
 <  8i,43n,14r,8p,167b stack positions out of 30i,100n,300r,150p,500b
@@ -187,17 +256,30 @@
 <   out of 256w,16h,16d,64i,5000l,500k,256e,50p)
 ---
 >   out of 256w,16h,16d,64i,15000l,2500k,256e,60p)
+
+./tftopl ./mftrap.tfm mftrap.pl || exit 1
 + ./tftopl ./mftrap.tfm mftrap.pl
+diff $testdir/mftrap.pl mftrap.pl || is_OK=false
 + diff SRCDIR/triptrap/mftrap.pl mftrap.pl
+
+./gftype -m -i ./trap.72270gf >trap.typ || exit 1
 + ./gftype -m -i ./trap.72270gf
+diff $testdir/trap.typ trap.typ
 + diff SRCDIR/triptrap/trap.typ trap.typ
 1c1
 < This is GFtype, Version 3.1
 ---
-> This is GFtype, Version 3.1 (TeX Live 2015)
+> This is GFtype, Version 3.1 (TeX Live 2021/dev)
 3c3
 < ' METAFONT output 2014.01.07:1811'
 ---
-> ' METAFONT output 2015.04.17:1116'
+> ' METAFONT output 2021.01.27:1803'
+
+$is_OK || {
+  echo ">>> There were some errors." >&2
+  exit 1
+}
 + :
-PASS: mfluadir/mfluatraptest
+
+PASS mfluadir/mfluatraptest.test (exit status: 0)
+PASS: mfluadir/mfluatraptest.test

Modified: trunk/Build/source/texk/web2c/mfluajitdir/mf-luajit.ch
===================================================================
--- trunk/Build/source/texk/web2c/mfluajitdir/mf-luajit.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mfluajitdir/mf-luajit.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,7 +1,7 @@
 @x [1.2] - this is MFLuaJIT
 @d banner==MFLua_banner
 @y
- at d MFLuaJITbanner=='This is MFLuaJIT, Version 2.7182818', MFLua_version_string
+ at d MFLuaJITbanner=='This is MFLuaJIT, Version 2.71828182', MFLua_version_string
   {printed when MFLuaJIT starts}
 @#
 @d banner==MFLuaJITbanner

Modified: trunk/Build/source/texk/web2c/mfluajitdir/mfluajitextra.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluajitdir/mfluajitextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mfluajitdir/mfluajitextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -6,7 +6,7 @@
 #include <mfluadir/mflua_version.h> /* for MFLUA_VERSION */
 #ifdef  BANNER 
 #undef  BANNER
-#define BANNER "This is MFLuaJIT, Version 2.7182818-" MFLUA_VERSION
+#define BANNER "This is MFLuaJIT, Version 2.71828182-" MFLUA_VERSION
 #endif 
 #define COPYRIGHT_HOLDER "L. Scarso"
 #define AUTHOR NULL
@@ -23,4 +23,4 @@
 #define INPUT_FORMAT kpse_mf_format
 #define INI_PROGRAM "inimfluajit"
 #define VIR_PROGRAM "virmfluajit"
-#define MFLuaJIT
\ No newline at end of file
+#define MFLuaJIT

Modified: trunk/Build/source/texk/web2c/mfluajitdir/mfluajittrap/mfluajittrap.diffs
===================================================================
--- trunk/Build/source/texk/web2c/mfluajitdir/mfluajittrap/mfluajittrap.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mfluajitdir/mfluajittrap/mfluajittrap.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,48 +1,215 @@
+#! /bin/sh -vx
+# Copyright 2017 Karl Berry <tex-live at tug.org>
+# Copyright 2015 Peter Breitenlohner <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+ltestdir=$abs_srcdir/mfluadir/mfluatrap
++ ltestdir=SRCDIR/mfluadir/mfluatrap
+jtestdir=$abs_srcdir/mfluajitdir/mfluajittrap
++ jtestdir=SRCDIR/mfluajitdir/mfluajittrap
+
+TEXMFCNF=$ltestdir
++ TEXMFCNF=SRCDIR/mfluadir/mfluatrap
+LUAINPUTS=$ltestdir
++ LUAINPUTS=SRCDIR/mfluadir/mfluatrap
+export TEXMFCNF LUAINPUTS
++ export TEXMFCNF LUAINPUTS
+
+rm -rf mfluajittrapdir
++ rm -rf mfluajittrapdir
+mkdir mfluajittrapdir
++ mkdir mfluajittrapdir
+cd mfluajittrapdir
++ cd mfluajittrapdir
+
+echo ">>> Running TRAP test for MFLuaJIT." >&2
++ echo '>>> Running TRAP test for MFLuaJIT.'
 >>> Running TRAP test for MFLuaJIT.
+echo ">>> See $jtestdir/mfluajittrap.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/mfluajitdir/mfluajittrap/mfluajittrap.diffs for example of acceptable diffs.'
 >>> See SRCDIR/mfluajitdir/mfluajittrap/mfluajittrap.diffs for example of acceptable diffs.
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+# get same filename in log
+$LN_S $testdir/trap.mf .
 + ln -s SRCDIR/triptrap/trap.mf .
+
+./mfluajit --progname=inimfluajit <$testdir/mftrap1.in >mftrapin.fot
 + ./mfluajit --progname=inimfluajit
+if test ! -s trap.base; then
+  echo "*** trap.base not created by mftrap1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trap.base
+mv trap.log mftrapin.log || exit 1
 + mv trap.log mftrapin.log
+diff $testdir/mftrapin.log mftrapin.log
 + diff SRCDIR/triptrap/mftrapin.log mftrapin.log
 1c1
-< This is METAFONT, Version 2.7182818 (INIMF)  7 JAN 2014 17:51
+< This is METAFONT, Version 2.71828182 (INIMF)  4 JUL 1776 12:00
 ---
-> This is MFLuaJIT, Version 2.7182818-0.5 (TeX Live 2015) (INIMF)  17 APR 2015 11:16
+> This is MFLuaJIT, Version 2.71828182-1.0.0-alpha (INIMF)  27 JAN 2021 18:03
 150c150
-< String usage 26&83 (891&11438 still untouched)
+< String usage 26&83 (892&11481 still untouched)
 ---
-> String usage 30&98 (6384&979377 still untouched)
+> String usage 30&98 (1047458&9979376 still untouched)
 176,177c176,177
-<  (preloaded base=trap 2014.1.7)
-< 1117 strings of total length 20614
+<  (preloaded base=trap 1776.7.4)
+< 1116 strings of total length 20570
 ---
->  (preloaded base=trap 2015.4.17)
-> 1125 strings of total length 20684
+>  (preloaded base=trap 2021.1.27)
+> 1125 strings of total length 20685
 179c179
 < 265 symbolic tokens
 ---
 > 266 symbolic tokens
+
+./mfluajit --progname=inimfluajit <$testdir/mftrap2.in >mftrap.fot
 + ./mfluajit --progname=inimfluajit
+mv trap.log mftrap.log || exit 1
 + mv trap.log mftrap.log
+mv trap.tfm mftrap.tfm || exit 1
 + mv trap.tfm mftrap.tfm
+diff $testdir/mftrap.fot mftrap.fot
 + diff SRCDIR/triptrap/mftrap.fot mftrap.fot
-1,3c1,2
-< This is METAFONT, Version 2.7182818 (INIMF)
+1,3c1,4
+< This is METAFONT, Version 2.71828182 (INIMF)
 < ** &trap  trap 
 < (trap.mf
 ---
-> This is MFLuaJIT, Version 2.7182818-0.5 (TeX Live 2015) (INIMF)
+> MFLua version: 1.0.0-alpha
+> MFLua banner:  This is MFLua, Version 2.71828182-1.0.0-alpha
+> This is MFLuaJIT, Version 2.71828182-1.0.0-alpha (TeX Live 2021/dev) (INIMF)
 > **(trap.mf
-39c38
-< String usage 41&161 (815&7634 still untouched)
+22a24,99
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+27a105,136
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+> Warning: print_scale called with  nil argument.
+> 
+39c148
+< String usage 41&161 (816&7678 still untouched)
 ---
-> String usage 50&202 (6298&975523 still untouched)
+> String usage 50&202 (1047372&9975522 still untouched)
+59a169
+> Warning: end_program.lua not found
+diff $testdir/mftrap.log mftrap.log
 + diff SRCDIR/triptrap/mftrap.log mftrap.log
 1c1
-< This is METAFONT, Version 2.7182818 (preloaded base=trap 2014.1.7)  7 JAN 2014 18:11
+< This is METAFONT, Version 2.71828182 (preloaded base=trap 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is MFLuaJIT, Version 2.7182818-0.5 (TeX Live 2015) (preloaded base=trap 2015.4.17)  17 APR 2015 11:16
+> This is MFLuaJIT, Version 2.71828182-1.0.0-alpha (preloaded base=trap 2021.1.27)  27 JAN 2021 18:03
 133,134c133,134
 < <scantokens> pair
 <                   p[],';^^ff
@@ -68,115 +235,19 @@
 > <scantokens> or <runscript> ...f
 >                                 
 1825c1825
-< String usage 24&92 (858&11309 still untouched)
+< String usage 24&92 (859&11353 still untouched)
 ---
-> String usage 30&119 (6344&979191 still untouched)
-3693,3695c3693,3695
-< xpart %CAPSULE1359=xx
-< %CAPSULE1367=2yy-2
-< %CAPSULE1375 = 3.3333xx+3.3333
----
-> xpart %CAPSULE1370=xx
-> %CAPSULE1378=2yy-2
-> %CAPSULE1386 = 3.3333xx+3.3333
-3755,3757c3755,3757
-< xpart %CAPSULE1049 = 8000o2-4000o1+1000o3+9
-< xpart %CAPSULE1383=xpart '
-< ypart %CAPSULE1383=ypart '
----
-> xpart %CAPSULE604 = 8000o2-4000o1+1000o3+9
-> xpart %CAPSULE1394=xpart '
-> ypart %CAPSULE1394=ypart '
-3760,3761c3760,3761
-< ### 4000o1 = -xpart %CAPSULE1049+8000o2+1000o3+9
-< ### -4.87383o2 = -oo-0.0004xpart %CAPSULE1049+0.39673o3-17.99643
----
-> ### 4000o1 = -xpart %CAPSULE604+8000o2+1000o3+9
-> ### -4.87383o2 = -oo-0.0004xpart %CAPSULE604+0.39673o3-17.99643
-3768c3768
-< ### -alfa=-xpart %CAPSULE1494
----
-> ### -alfa=-xpart %CAPSULE368
-3770,3771c3770,3771
-< {xpart((xpart %CAPSULE1494,0))}
-< ### -xpart %CAPSULE17=-%CAPSULE1176
----
-> {xpart((xpart %CAPSULE368,0))}
-> ### -xpart %CAPSULE17=-%CAPSULE1376
-3773,3775c3773,3775
-< {(%CAPSULE382)+(%CAPSULE1176)}
-< ### -%CAPSULE382=-%CAPSULE1893+%CAPSULE1176
-< ### -%CAPSULE1893=-ypart %CAPSULE1049
----
-> {(%CAPSULE382)+(%CAPSULE1376)}
-> ### -%CAPSULE382=-%CAPSULE1364+%CAPSULE1376
-> ### -%CAPSULE1364=-ypart %CAPSULE604
-3780c3780
-< ### p$=-ypart %CAPSULE604+1
----
-> ### p$=-ypart %CAPSULE1360+1
-3782,3793c3782,3793
-< {(2/3)*((-ypart %CAPSULE604+1,ypart %CAPSULE604))}
-< ### ypart %CAPSULE604=-xpart %CAPSULE604+1
-< ### -0.66667xpart %CAPSULE604=-xpart %CAPSULE1889
-< {-((xpart %CAPSULE1889,-xpart %CAPSULE1889+0.66667))}
-< ### xpart %CAPSULE1889=-xpart %CAPSULE1172
-< {((xpart %CAPSULE1049,ypart %CAPSULE1049))=((xpart %CAPSULE1172,-xpart %
-< CAPSULE1172-0.66667))}
-< ## xpart %CAPSULE1172=-ypart %CAPSULE1049-0.66667
-< ## ypart %CAPSULE1049=-xpart %CAPSULE1049-0.66667
-< ### -xpart %CAPSULE1049=-xpart %CAPSULE1172
-< {((xpart ',ypart '))=((xpart %CAPSULE1172,-xpart %CAPSULE1172-0.66667))}
-< ## xpart %CAPSULE1172=-ypart '-0.66667
----
-> {(2/3)*((-ypart %CAPSULE1360+1,ypart %CAPSULE1360))}
-> ### ypart %CAPSULE1360=-xpart %CAPSULE1360+1
-> ### -0.66667xpart %CAPSULE1360=-xpart %CAPSULE1744
-> {-((xpart %CAPSULE1744,-xpart %CAPSULE1744+0.66667))}
-> ### xpart %CAPSULE1744=-xpart %CAPSULE1675
-> {((xpart %CAPSULE604,ypart %CAPSULE604))=((xpart %CAPSULE1675,-xpart %CA
-> PSULE1675-0.66667))}
-> ## xpart %CAPSULE1675=-ypart %CAPSULE604-0.66667
-> ## ypart %CAPSULE604=-xpart %CAPSULE604-0.66667
-> ### -xpart %CAPSULE604=-xpart %CAPSULE1675
-> {((xpart ',ypart '))=((xpart %CAPSULE1675,-xpart %CAPSULE1675-0.66667))}
-> ## xpart %CAPSULE1675=-ypart '-0.66667
-3799c3799
-< ### -ooo=-%CAPSULE1494
----
-> ### -ooo=-%CAPSULE1051
-3801,3810c3801,3810
-< {(%CAPSULE1494)+(1)}
-< ### -%CAPSULE1494=-%CAPSULE1350+1
-< {(1/2)*(%CAPSULE1350)}
-< ### -0.5%CAPSULE1350=-%CAPSULE1367
-< {-(%CAPSULE1367)}
-< ### %CAPSULE1367=-%CAPSULE1893
-< {(2)*(%CAPSULE1893)}
-< ### -2%CAPSULE1893=-%CAPSULE1885
-< {(-0.5%CAPSULE1885-0.5)=(%CAPSULE1885)}
-< ## %CAPSULE1885=-0.33333
----
-> {(%CAPSULE1051)+(1)}
-> ### -%CAPSULE1051=-%CAPSULE1378+1
-> {(1/2)*(%CAPSULE1378)}
-> ### -0.5%CAPSULE1378=-%CAPSULE1370
-> {-(%CAPSULE1370)}
-> ### %CAPSULE1370=-%CAPSULE1362
-> {(2)*(%CAPSULE1362)}
-> ### -2%CAPSULE1362=-%CAPSULE1354
-> {(-0.5%CAPSULE1354-0.5)=(%CAPSULE1354)}
-> ## %CAPSULE1354=-0.33333
+> String usage 30&119 (1047418&9979190 still untouched)
 4235c4235
-< String usage 41&161 (815&7634 still untouched)
+< String usage 41&161 (816&7678 still untouched)
 ---
-> String usage 50&202 (6298&975523 still untouched)
+> String usage 50&202 (1047372&9975522 still untouched)
 4251,4252c4251,4252
-<  68 strings out of 883
-<  3752 string characters out of 11386
+<  68 strings out of 884
+<  3752 string characters out of 11430
 ---
->  77 strings out of 6375
->  3793 string characters out of 979316
+>  77 strings out of 1047449
+>  3793 string characters out of 9979315
 4254,4255c4254,4255
 <  289 symbolic tokens out of 2100
 <  8i,43n,14r,8p,167b stack positions out of 30i,100n,300r,150p,500b
@@ -187,17 +258,30 @@
 <   out of 256w,16h,16d,64i,5000l,500k,256e,50p)
 ---
 >   out of 256w,16h,16d,64i,15000l,2500k,256e,60p)
+
+./tftopl ./mftrap.tfm mftrap.pl || exit 1
 + ./tftopl ./mftrap.tfm mftrap.pl
+diff $testdir/mftrap.pl mftrap.pl || is_OK=false
 + diff SRCDIR/triptrap/mftrap.pl mftrap.pl
+
+./gftype -m -i ./trap.72270gf >trap.typ || exit 1
 + ./gftype -m -i ./trap.72270gf
+diff $testdir/trap.typ trap.typ
 + diff SRCDIR/triptrap/trap.typ trap.typ
 1c1
 < This is GFtype, Version 3.1
 ---
-> This is GFtype, Version 3.1 (TeX Live 2015)
+> This is GFtype, Version 3.1 (TeX Live 2021/dev)
 3c3
 < ' METAFONT output 2014.01.07:1811'
 ---
-> ' METAFONT output 2015.04.17:1116'
+> ' METAFONT output 2021.01.27:1803'
+
+$is_OK || {
+  echo ">>> There were some errors." >&2
+  exit 1
+}
 + :
-PASS: mfluajitdir/mfluajittraptest
+
+PASS mfluajitdir/mfluajittraptest.test (exit status: 0)
+PASS: mfluajitdir/mfluajittraptest.test

Modified: trunk/Build/source/texk/web2c/mft.ch
===================================================================
--- trunk/Build/source/texk/web2c/mft.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mft.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -37,10 +37,10 @@
 @z
 
 @x [2] Define my_name
- at d banner=='This is MFT, Version 2.0'
+ at d banner=='This is MFT, Version 2.1'
 @y
 @d my_name=='mft'
- at d banner=='This is MFT, Version 2.0'
+ at d banner=='This is MFT, Version 2.1'
 @z
 
 % [3] No need for the final label in C.
@@ -463,6 +463,8 @@
  ("s")("t")("a")("t")("s")(internal);@/
 pr13("t")("r")("a")("c")("i")("n")("g")
  ("o")("n")("l")("i")("n")("e")(internal);@/
+pr15("t")("r")("a")("c")("i")("n")("g")
+ ("r")("e")("s")("t")("o")("r")("e")("s")(internal);@/
 
 @ @<Store all the primitives@>=
 pr4("y")("e")("a")("r")(internal);@/
@@ -470,7 +472,7 @@
 pr3("d")("a")("y")(internal);@/
 pr4("t")("i")("m")("e")(internal);@/
 pr8("c")("h")("a")("r")("c")("o")("d")("e")(internal);@/
-pr7("c")("h")("a")("r")("f")("a")("m")(internal);@/
+pr7("c")("h")("a")("r")("e")("x")("t")(internal);@/
 pr6("c")("h")("a")("r")("w")("d")(internal);@/
 pr6("c")("h")("a")("r")("h")("t")(internal);@/
 pr6("c")("h")("a")("r")("d")("p")(internal);@/
@@ -735,6 +737,8 @@
  ("s")("t")("a")("t")("s")(internal);@/
 pr13("t")("r")("a")("c")("i")("n")("g")
  ("o")("n")("l")("i")("n")("e")(internal);@/
+pr15("t")("r")("a")("c")("i")("n")("g")
+ ("r")("e")("s")("t")("o")("r")("e")("s")(internal);@/
 
 @ @<Store all the primitives@>=
 pr4("y")("e")("a")("r")(internal);@/
@@ -742,6 +746,7 @@
 pr3("d")("a")("y")(internal);@/
 pr4("t")("i")("m")("e")(internal);@/
 pr8("c")("h")("a")("r")("c")("o")("d")("e")(internal);@/
+pr7("c")("h")("a")("r")("e")("x")("t")(internal);@/
 pr6("c")("h")("a")("r")("w")("d")(internal);@/
 pr6("c")("h")("a")("r")("h")("t")(internal);@/
 pr6("c")("h")("a")("r")("d")("p")(internal);@/

Modified: trunk/Build/source/texk/web2c/mft.web
===================================================================
--- trunk/Build/source/texk/web2c/mft.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mft.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -7,6 +7,7 @@
 % Version 1.0 was tuned up for the METAFONTware report (April 16, 1989).
 % Version 1.1 ditto, with input handled by Hosek's idea (April 27, 1989).
 % Version 2 has the new primitives of METAFONT 2.0 (October 16, 1989).
+% Version 2.1 corrects two of those primitives (January 20, 2021).
 
 % Here is TeX material that gets inserted after \input webmac
 \def\hang{\hangindent 3em\indent\ignorespaces}
@@ -21,17 +22,16 @@
 \mathchardef\RA="3221 % right arrow
 \mathchardef\BA="3224 % double arrow
 \def\({} % kludge for alphabetizing certain module names
-\chardef\V=`\| % vertical line in a string
 
 \def\title{MFT}
 \def\contentspagenumber{401}
 \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 The {\ttitlefont MFT} processor}
   \vskip 15pt
-  \centerline{(Version 2.0, October 1989)}
+  \centerline{(Version 2.1, January 2021)}
   \vfill}
 \def\botofcontents{\vfill
   \centerline{\hsize 5in\baselineskip9pt
@@ -83,7 +83,7 @@
 \MF\ comments, which follow a single \.\% sign, should be valid \TeX\
 input.  But \MF\ material can be included in \pb\ within a comment; this
 will be translated by \.{MFT} as if it were not in a comment. For example,
-a phrase like `\.{make} \.{\V x2r\V} \.{zero}' will be translated into
+a phrase like `\.{make} \.{\v x2r\v} \.{zero}' will be translated into
 `\.{make \$x\_\{2r\}\$ zero}'.
 
 The rules just stated apply to lines that contain one, two, or three \.\% signs
@@ -128,7 +128,7 @@
 The ``banner line'' defined here should be changed whenever \.{MFT}
 is modified.
 
- at d banner=='This is MFT, Version 2.0'
+ at d banner=='This is MFT, Version 2.1'
 
 @ The program begins with a fairly normal header, made up of pieces that
 @^system dependencies@>
@@ -802,9 +802,7 @@
 @ @<Read from |mf_file|...@>=
 begin incr(line);
 if not input_ln(mf_file) then input_has_ended:=true
-else if limit=change_limit then
-  if buffer[0]=change_buffer[0] then
-    if change_limit>0 then check_change;
+else if change_limit>0 then check_change;
 end
 
 @ @<Read from |style_file|...@>=
@@ -840,7 +838,7 @@
 
 @<Check that all changes have been read@>=
 if change_limit<>0 then {|changing| is false}
-  begin for loc:=0 to change_limit do buffer[loc]:=change_buffer[loc];
+  begin for loc:=0 to change_limit-1 do buffer[loc]:=change_buffer[loc];
   limit:=change_limit; changing:=true; line:=other_line; loc:=change_limit;
   err_print('! Change file entry did not match');
 @.Change file entry did not match@>
@@ -936,7 +934,7 @@
 end;
 
 @ A simple hash code is used: If the sequence of
-ASCII codes is $c_1c_2\ldots c_m$, its hash value will be
+ASCII codes is $c_1c_2\ldots c_n$, its hash value will be
 $$(2^{n-1}c_1+2^{n-2}c_2+\cdots+c_n)\,\bmod\,|hash_size|.$$
 
 @<Compute the hash...@>=
@@ -1226,6 +1224,8 @@
  ("s")("t")("a")("t")("s")(internal);@/
 pr13("t")("r")("a")("c")("i")("n")("g")
  ("o")("n")("l")("i")("n")("e")(internal);@/
+pr15("t")("r")("a")("c")("i")("n")("g")
+ ("r")("e")("s")("t")("o")("r")("e")("s")(internal);@/
 
 @ @<Store all the primitives@>=
 pr4("y")("e")("a")("r")(internal);@/
@@ -1233,7 +1233,7 @@
 pr3("d")("a")("y")(internal);@/
 pr4("t")("i")("m")("e")(internal);@/
 pr8("c")("h")("a")("r")("c")("o")("d")("e")(internal);@/
-pr7("c")("h")("a")("r")("f")("a")("m")(internal);@/
+pr7("c")("h")("a")("r")("e")("x")("t")(internal);@/
 pr6("c")("h")("a")("r")("w")("d")(internal);@/
 pr6("c")("h")("a")("r")("h")("t")(internal);@/
 pr6("c")("h")("a")("r")("d")("p")(internal);@/

Modified: trunk/Build/source/texk/web2c/mftraptest.test
===================================================================
--- trunk/Build/source/texk/web2c/mftraptest.test	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/mftraptest.test	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,6 +1,6 @@
 #! /bin/sh -vx
 # $Id$
-# Copyright 2017-2019 Karl Berry <tex-live at tug.org>
+# Copyright 2017-2021 Karl Berry <tex-live at tug.org>
 # Copyright 2009-2014 Peter Breitenlohner <tex-live at tug.org>
 # You may freely use, modify and/or distribute this file.
 
@@ -31,7 +31,7 @@
 	s/tokens out of [1-9][0-9]*/tokens out of YYYY/
 	s/out of [1-9][0-9]*i,[0-9nrpb,]*/out of YYi,YYYn,YYYr,YYYp,YYYb/
 	s/out of [1-9][0-9]*w,[0-9hdilkep,]*)/out of YYYw,YYh,YYd,YYi,YYYYl,YYYk,YYYe,YYp)/
-	s/METAFONT output 20..\...\...:..../METAFONT output 20YY.MM.DD:hhmm/
+	s/METAFONT output ....\...\...:..../METAFONT output YYYY.MM.DD:hhmm/
 	_EOF
 
 # Capsule numbers

Modified: trunk/Build/source/texk/web2c/pdftexdir/pdftex.web
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/pdftex.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/pdftexdir/pdftex.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -70,6 +70,7 @@
 % Version 3.141592 fixed \xleaders, glueset, weird alignments (December 2002).
 % Version 3.1415926 was a general cleanup with minor fixes (February 2008).
 % Version 3.14159265 was similar (January 2014).
+% Version 3.141592653 was similar but more extensive (January 2021).
 
 % A preliminary version of TeX--XeT was released in April 1992.
 % TeX--XeT version 1.0 was released in June 1992,
@@ -302,7 +303,7 @@
 @d eTeX_revision==".6" { \.{\\eTeXrevision} }
 @d eTeX_version_string=='-2.6' {current \eTeX\ version}
 @#
- at d eTeX_banner=='This is e-TeX, Version 3.14159265',eTeX_version_string
+ at d eTeX_banner=='This is e-TeX, Version 3.141592653',eTeX_version_string
   {printed when \eTeX\ starts}
 @#
 @d pdftex_version==140 { \.{\\pdftexversion} }
@@ -309,10 +310,10 @@
 @d pdftex_revision=="21" { \.{\\pdftexrevision} }
 @d pdftex_version_string=='-1.40.21' {current \pdfTeX\ version}
 @#
- at d pdfTeX_banner=='This is pdfTeX, Version 3.14159265',eTeX_version_string,pdftex_version_string
+ at d pdfTeX_banner=='This is pdfTeX, Version 3.141592653',eTeX_version_string,pdftex_version_string
    {printed when \pdfTeX\ starts}
 @#
- at d TeX_banner=='This is TeX, Version 3.14159265' {printed when \TeX\ starts}
+ at d TeX_banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts}
 @#
 @d banner==pdfTeX_banner
 @#
@@ -331,7 +332,7 @@
 if necessary. (\ph\ is Charles Hedrick's modification of a compiler
 @^Hedrick, Charles Locke@>
 for the DECsystem-10 that was originally developed at the University of
-Hamburg; cf.\ {\sl SOFTWARE---Practice \AM\ Experience \bf6} (1976),
+Hamburg; cf.\ {\sl Software---Practice and Experience \bf6} (1976),
 29--42. The \TeX\ program below is intended to be adaptable, without
 extensive changes, to most other versions of \PASCAL, so it does not fully
 use the admirable features of \ph. Indeed, a conscious effort has been
@@ -428,8 +429,8 @@
 Similarly, there is some conditional code delimited by
 `$|stat|\ldots|tats|$' that is intended for use when statistics are to be
 kept about \TeX's memory usage.  The |stat| $\ldots$ |tats| code also
-implements diagnostic information for \.{\\tracingparagraphs} and
-\.{\\tracingpages}.
+implements diagnostic information for \.{\\tracingparagraphs},
+\.{\\tracingpages}, and \.{\\tracingrestores}.
 @^debugging@>
 
 @d debug==@{ {change this to `$\\{debug}\equiv\null$' when debugging}
@@ -1440,7 +1441,7 @@
 If character |k| cannot be printed, and |k<@'200|, then character |k+@'100| or
 |k-@'100| must be printable; moreover, ASCII codes |[@'41..@'46,
 @'60..@'71, @'136, @'141..@'146, @'160..@'171]| must be printable.
-Thus, at least 81 printable characters are needed.
+Thus, at least 80 printable characters are needed.
 @:TeXbook}{\sl The \TeX book@>
 @^character set dependencies@>
 @^system dependencies@>
@@ -1701,9 +1702,9 @@
 
 @ Here is the very first thing that \TeX\ prints: a headline that identifies
 the version number and format package. The |term_offset| variable is temporarily
-incorrect, but the discrepancy is not serious since we assume that the banner
-and format identifier together will occupy at most |max_print_line|
-character positions.
+incorrect, but the discrepancy is not serious since we assume that this
+part of the program is system dependent.
+@^system dependencies@>
 
 @<Initialize the output...@>=
 wterm(banner);
@@ -1753,7 +1754,7 @@
 
 @<Basic print...@>=
 procedure print_int(@!n:longinteger); {prints an integer in decimal form}
-var k:0..23; {index to current digit; we assume that $|n|<10^{23}$}
+var k:0..23; {index to current digit; we assume that $\vert n\vert<10^{23}$}
 @!m:longinteger; {used to negate |n| in possibly dangerous cases}
 begin k:=0;
 if n<0 then
@@ -1901,7 +1902,8 @@
 
 \hang|term_only| (when |interaction>batch_mode| and |log_file| not yet open);
 
-\hang|log_only| (when |interaction=batch_mode| and |log_file| is open);
+\hang|log_only| (when |interaction=batch_mode| and |log_file| is open,
+  or when tracing paragraphs);
 
 \hang|term_and_log| (when |interaction>batch_mode| and |log_file| is open).
 
@@ -2017,7 +2019,8 @@
   {used to save global variables when deleting tokens}
 begin if history<error_message_issued then history:=error_message_issued;
 print_char("."); show_context;
-if interaction=error_stop_mode then @<Get user's advice and |return|@>;
+if interaction=error_stop_mode then if selector<>log_only then
+  @<Get user's advice and |return|@>;
 incr(error_count);
 if error_count=100 then
   begin print_nl("(That makes 100 errors; please try again.)");
@@ -2028,7 +2031,8 @@
 exit:end;
 
 @ @<Get user's advice...@>=
-loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
+loop at +begin continue: if interaction<>error_stop_mode then return;
+  clear_for_error_prompt; prompt_input("? ");
 @.?\relax@>
   if last=first then return;
   c:=buffer[first];
@@ -2053,7 +2057,7 @@
 "0","1","2","3","4","5","6","7","8","9": if deletions_allowed then
   @<Delete \(c)|c-"0"| tokens and |goto continue|@>;
 @t\4\4@>@;@+@!debug "D": begin debug_help; goto continue;@+end;@+gubed@/
-"E": if base_ptr>0 then
+"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
   begin print_nl("You want to edit file ");
 @.You want to edit file x@>
   slow_print(input_stack[base_ptr].name_field);
@@ -2074,7 +2078,8 @@
 @.Type <return> to proceed...@>
 print_nl("R to run without stopping, Q to run quietly,");@/
 print_nl("I to insert something, ");
-if base_ptr>0 then print("E to edit your file,");
+if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
+  print("E to edit your file,");
 if deletions_allowed then
   print_nl("1 or ... or 9 to ignore the next 1 to 9 tokens of input,");
 print_nl("H for help, X to quit.");
@@ -2266,7 +2271,7 @@
   print_err("Interruption");
 @.Interruption@>
   help3("You rang?")@/
-  ("Try to insert some instructions for me (e.g.,`I\showlists'),")@/
+  ("Try to insert an instruction for me (e.g., `I\showlists'),")@/
   ("unless you just want to quit by typing `X'.");
   deletions_allowed:=false; error; deletions_allowed:=true;
   interrupt:=0;
@@ -3415,8 +3420,8 @@
 
 @ The |new_null_box| function returns a pointer to an |hlist_node| in
 which all subfields have the values corresponding to `\.{\\hbox\{\}}'.
-The |subtype| field is set to |min_quarterword|, since that's the desired
-|span_count| value if this |hlist_node| is changed to an |unset_node|.
+(The |subtype| field is set to |min_quarterword|, for historic reasons
+that are no longer relevant.)
 
 @p function new_null_box:pointer; {creates a new box node}
 var p:pointer; {the new node}
@@ -4716,7 +4721,7 @@
 @d hskip=26 {horizontal glue ( \.{\\hskip}, \.{\\hfil}, etc.~)}
 @d vskip=27 {vertical glue ( \.{\\vskip}, \.{\\vfil}, etc.~)}
 @d mskip=28 {math glue ( \.{\\mskip} )}
- at d kern=29 {fixed space ( \.{\\kern})}
+ at d kern=29 {fixed space ( \.{\\kern} )}
 @d mkern=30 {math kern ( \.{\\mkern} )}
 @d leader_ship=31 {use a box ( \.{\\shipout}, \.{\\leaders}, etc.~)}
 @d halign=32 {horizontal table alignment ( \.{\\halign} )}
@@ -4865,7 +4870,7 @@
 \hang|-mmode| stands for math formula mode (not displayed).
 
 \yskip\noindent The mode is temporarily set to zero while processing \.{\\write}
-texts in the |ship_out| routine.
+texts.
 
 Numeric values are assigned to |vmode|, |hmode|, and |mmode| so that
 \TeX's ``big semantic switch'' can select the appropriate thing to
@@ -5074,7 +5079,7 @@
     end;
   end;
 2: if a.int<>null then
-  begin print("this will be denominator of:"); show_box(a.int);@+
+  begin print("this will begin denominator of:"); show_box(a.int);@+
   end;
 end {there are no other cases}
 
@@ -5645,7 +5650,7 @@
 @d output_penalty_code=39 {penalty found at current page break}
 @d max_dead_cycles_code=40 {bound on consecutive dead cycles of output}
 @d hang_after_code=41 {hanging indentation changes after this many lines}
- at d floating_penalty_code=42 {penalty for insertions heldover after a split}
+ at d floating_penalty_code=42 {penalty for insertions held over after a split}
 @d global_defs_code=43 {override \.{\\global} specifications}
 @d cur_fam_code=44 {current family}
 @d escape_char_code=45 {escape character for token output}
@@ -6136,14 +6141,18 @@
 input and output, establishes the initial values of the date and time.
 @^system dependencies@>
 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.
+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).
 
 @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}
+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}
 end;
 
 @ @<Show equivalent |n|, in region 5@>=
@@ -6179,11 +6188,13 @@
 selector:=old_setting;
 end;
 
-@ Of course we had better declare another global variable, if the previous
+@ 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}
 
 @ The final region of |eqtb| contains the dimension parameters defined
 here, and the 256 \.{\\dimen} registers.
@@ -6958,7 +6969,7 @@
 \yskip\hangg 2) If |save_type(p)=restore_zero|, then |save_index(p)|
 is a location in |eqtb| whose current value should be destroyed at the end
 of the current group, when it should be
-replaced by the current value of |eqtb[undefined_control_sequence]|.
+replaced by the value of |eqtb[undefined_control_sequence]|.
 
 \yskip\hangg 3) If |save_type(p)=insert_token|, then |save_index(p)|
 is a token that should be inserted into \TeX's input when the current
@@ -7372,8 +7383,8 @@
 number |c| into the text at this point.
 
 The enclosing \.{\char'173} and \.{\char'175} characters of a macro
-definition are omitted, but the final right brace of an output routine
-is included at the end of its token list.
+definition are omitted, but an output routine
+will be enclosed in braces.
 
 Here is an example macro definition that illustrates these conventions.
 After \TeX\ processes the text
@@ -7859,7 +7870,7 @@
 template is being scanned;
 
 \hang|backed_up|, if the token list being scanned has been inserted as
-`to be read again'.
+`to be read again';
 
 \hang|inserted|, if the token list being scanned has been inserted as
 the text expansion of a \.{\\count} or similar variable;
@@ -8420,7 +8431,8 @@
 
 @ The recovery procedure can't be fully understood without knowing more
 about the \TeX\ routines that should be aborted, but we can sketch the
-ideas here:  For a runaway definition we will insert a right brace; for a
+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 \.{\\cr} token and a right
 brace; and for a runaway argument, we will set |long_state| to
 |outer_call| and insert \.{\\par}.
@@ -9160,7 +9172,7 @@
 else cur_tok:=cs_token_flag+cur_cs;
 end;
 
-@ The |get_x_token| procedure is equivalent to two consecutive
+@ The |get_x_token| procedure is essentially equivalent to two consecutive
 procedure calls: |get_next; x_token|.
 
 @p procedure x_token; {|get_x_token| without the initial |get_next|}
@@ -9489,7 +9501,7 @@
 strip off the enclosing braces. That's why |rbrace_ptr| was introduced.
 
 @<Tidy up the parameter just scanned, and tuck it away@>=
-begin if (m=1)and(info(p)<right_brace_limit)and(p<>temp_head) then
+begin if (m=1)and(info(p)<right_brace_limit) then
   begin link(rbrace_ptr):=null; free_avail(p);
   p:=link(temp_head); pstack[n]:=link(p); free_avail(p);
   end
@@ -10680,7 +10692,7 @@
 
 @p @t\4@>@<Declare \eTeX\ procedures for token lists@>@;@/
 function str_toks(@!b:pool_pointer):pointer;
-  {changes the string |str_pool[b..pool_ptr]| to a token list}
+  {converts |str_pool[b..pool_ptr-1]| to a token list}
 var p:pointer; {tail of the token list}
 @!q:pointer; {new node being added to the token list via |store_new_token|}
 @!t:halfword; {token being appended}
@@ -11407,7 +11419,7 @@
 messages.
 
 @p function scan_toks(@!macro_def,@!xpand:boolean):pointer;
-label found,done,done1,done2;
+label found,continue,done,done1,done2;
 var t:halfword; {token representing the highest parameter number}
 @!s:halfword; {saved token}
 @!p:pointer; {tail of the token list being built}
@@ -11427,7 +11439,7 @@
 end;
 
 @ @<Scan and build the parameter part...@>=
-begin loop begin get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|}
+begin loop begin continue: get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|}
   if cur_tok<right_brace_limit then goto done1;
   if cur_cmd=mac_param then
     @<If the next character is a parameter number, make |cur_tok|
@@ -11449,7 +11461,7 @@
 
 @ @<If the next character is a parameter number...@>=
 begin s:=match_token+cur_chr; get_token;
-if cur_cmd=left_brace then
+if cur_tok<left_brace_limit then
   begin hash_brace:=cur_tok;
   store_new_token(cur_tok); store_new_token(end_match_token);
   goto done;
@@ -11457,7 +11469,8 @@
 if t=zero_token+9 then
   begin print_err("You already have nine parameters");
 @.You already have nine...@>
-  help1("I'm going to ignore the # sign you just used."); error;
+  help2("I'm going to ignore the # sign you just used,")@/
+    ("as well as the token that followed it."); error; goto continue;
   end
 else  begin incr(t);
   if cur_tok<>t then
@@ -11612,7 +11625,7 @@
     print_err("File ended within "); print_esc("read");
 @.File ended within \\read@>
     help1("This \read has unbalanced braces.");
-    align_state:=1000000; error;
+    align_state:=1000000; limit:=0; error;
     end;
   end;
 end
@@ -11757,7 +11770,7 @@
 @!skip_line:integer; {skipping began here}
 
 @ Here is a procedure that ignores text until coming to an \.{\\or},
-\.{\\else}, or \.{\\fi} at level zero of $\.{\\if}\ldots\.{\\fi}$
+\.{\\else}, or \.{\\fi} at the current level of $\.{\\if}\ldots\.{\\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).
@@ -12486,11 +12499,11 @@
 @ @<Print the banner...@>=
 begin wlog(banner);
 slow_print(format_ident); print("  ");
-print_int(day); print_char(" ");
+print_int(sys_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);
+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);
 if eTeX_ex then
   begin; wlog_cr; wlog('entering extended mode');
   end;
@@ -12498,6 +12511,9 @@
 
 @ Let's turn now to the procedure that is used to initiate file reading
 when an `\.{\\input}' 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.
+@^system dependencies@>
 
 @p procedure start_input; {\TeX\ will \.{\\input} something}
 label done;
@@ -12522,7 +12538,7 @@
 else if (term_offset>0)or(file_offset>0) then print_char(" ");
 print_char("("); incr(open_parens); slow_print(name); update_terminal;
 state:=new_line;
-if name=str_ptr-1 then {we can conserve string pool space now}
+if name=str_ptr-1 then {conserve string pool space (but see note above)}
   begin flush_string; name:=cur_name;
   end;
 @<Read the first line of the new file@>;
@@ -12736,11 +12752,11 @@
 current character (which may have a ligature/kerning program of its own).
 
 If the very first instruction of the |lig_kern| array has |skip_byte=255|,
-the |next_char| byte is the so-called right boundary character of this font;
+the |next_char| byte is the 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 left boundary character,
-beginning at location |256*op_byte+remainder|.
+there is a special ligature/kerning program for a boundary character at the
+left, beginning at location |256*op_byte+remainder|.
 The interpretation is that \TeX\ puts implicit boundary characters
 before and after each consecutive string of characters from the same font.
 These implicit characters do not appear in the output, but they can affect
@@ -12872,7 +12888,7 @@
   {start of |lig_kern| program for left boundary character,
   |non_address| if there is none}
 @!font_bchar:array[internal_font_number] of min_quarterword..non_char;
-  {right boundary character, |non_char| if there is none}
+  {boundary character, |non_char| if there is none}
 @!font_false_bchar:array[internal_font_number] of min_quarterword..non_char;
   {|font_bchar| if it doesn't exist in the font, otherwise |non_char|}
 
@@ -13051,7 +13067,7 @@
 @!a,@!b,@!c,@!d:eight_bits; {byte variables}
 @!qw:four_quarters;@!sw:scaled; {accumulators}
 @!bch_label:integer; {left boundary start location, or infinity}
-@!bchar:0..256; {right boundary character, or 256}
+@!bchar:0..256; {boundary character, or 256}
 @!z:scaled; {the design size or the ``at'' size}
 @!alpha:integer;@!beta:1..16;
   {auxiliary quantities used in fixed-point multiplication}
@@ -13684,13 +13700,13 @@
 The parameter is a signed number in two's complement notation, |-128<=b<128|;
 if |b<0|, the reference point moves left.
 
-\yskip\hang|right2| 144 |b[2]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right2| 144 |b[2]|. Same as |right1|, except that |b| is a
 two-byte quantity in the range |-32768<=b<32768|.
 
-\yskip\hang|right3| 145 |b[3]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right3| 145 |b[3]|. Same as |right1|, except that |b| is a
 three-byte quantity in the range |@t$-2^{23}$@><=b<@t$2^{23}$@>|.
 
-\yskip\hang|right4| 146 |b[4]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right4| 146 |b[4]|. Same as |right1|, except that |b| is a
 four-byte quantity in the range |@t$-2^{31}$@><=b<@t$2^{31}$@>|.
 
 \yskip\hang|w0| 147. Set |h:=h+w|; i.e., move right |w| units. With luck,
@@ -20400,7 +20416,7 @@
 items and appends the resulting material onto the list that ends at
 location |adjust_tail|.
 
-@< Glob...@>=
+@<Glob...@>=
 @!adjust_tail:pointer; {tail of adjustment list}
 
 @ @<Set init...@>=adjust_tail:=null; last_badness:=0;
@@ -21348,8 +21364,8 @@
 @d sub_mlist=3 {|math_type| when the attribute is a formula}
 @d math_text_char=4 {|math_type| when italic correction is dubious}
 
-@ Each portion of a formula is classified as Ord, Op, Bin, Rel, Ope,
-Clo, Pun, or Inn, for purposes of spacing and line breaking. An
+@ Each portion of a formula is classified as Ord, Op, Bin, Rel, Open,
+Close, Punct, or Inner, for purposes of spacing and line breaking. An
 |ord_noad|, |op_noad|, |bin_noad|, |rel_noad|, |open_noad|, |close_noad|,
 |punct_noad|, or |inner_noad| is used to represent portions of the various
 types. For example, an `\.=' sign in a formula leads to the creation of a
@@ -21371,10 +21387,10 @@
 @d op_noad=ord_noad+1 {|type| of a noad classified Op}
 @d bin_noad=ord_noad+2 {|type| of a noad classified Bin}
 @d rel_noad=ord_noad+3 {|type| of a noad classified Rel}
- at d open_noad=ord_noad+4 {|type| of a noad classified Ope}
- at d close_noad=ord_noad+5 {|type| of a noad classified Clo}
- at d punct_noad=ord_noad+6 {|type| of a noad classified Pun}
- at d inner_noad=ord_noad+7 {|type| of a noad classified Inn}
+ at d open_noad=ord_noad+4 {|type| of a noad classified Open}
+ at d close_noad=ord_noad+5 {|type| of a noad classified Close}
+ at d punct_noad=ord_noad+6 {|type| of a noad classified Punct}
+ at d inner_noad=ord_noad+7 {|type| of a noad classified Inner}
 @d limits=1 {|subtype| of |op_noad| whose scripts are to be above, below}
 @d no_limits=2 {|subtype| of |op_noad| whose scripts are to be normal}
 
@@ -22155,7 +22171,7 @@
   else cur_i:=null_character;
   if not(char_exists(cur_i)) then
     begin char_warning(cur_f,qo(cur_c));
-    math_type(a):=empty;
+    math_type(a):=empty; cur_i:=null_character;
     end;
   end;
 end;
@@ -22545,7 +22561,7 @@
 
 @ The numerator and denominator must be separated by a certain minimum
 clearance, called |clr| in the following program. The difference between
-|clr| and the actual clearance is |2delta|.
+|clr| and the actual clearance is twice |delta|.
 
 @<Adjust \(s)|shift_up| and |shift_down| for the case of no fraction line@>=
 begin if cur_style<text_style then clr:=7*default_rule_thickness
@@ -22929,8 +22945,7 @@
 ord_noad,vcenter_noad,over_noad,under_noad: do_nothing;
 radical_noad: s:=radical_noad_size;
 accent_noad: s:=accent_noad_size;
-fraction_noad: begin t:=inner_noad; s:=fraction_noad_size;
-  end;
+fraction_noad: s:=fraction_noad_size;
 left_noad,right_noad: t:=make_left_right(q,style,max_d,max_h);
 style_node: @<Change the current style and |goto delete_q|@>;
 whatsit_node,penalty_node,rule_node,disc_node,adjust_node,ins_node,mark_node,
@@ -22969,7 +22984,7 @@
 goto delete_q;
 end
 
-@ The inter-element spacing in math formulas depends on a $8\times8$ table that
+@ The inter-element spacing in math formulas depends on an $8\times8$ table that
 \TeX\ preloads as a 64-digit string. The elements of this string have the
 following significance:
 $$\vbox{\halign{#\hfil\cr
@@ -23355,6 +23370,7 @@
 primitive("crcr",car_ret,cr_cr_code);
 @!@:cr_cr_}{\.{\\crcr} primitive@>
 text(frozen_end_template):="endtemplate"; text(frozen_endv):="endtemplate";
+ at .endtemplate@>
 eq_type(frozen_endv):=endv; equiv(frozen_endv):=null_list;
 eq_level(frozen_endv):=level_one;@/
 eqtb[frozen_end_template]:=eqtb[frozen_endv];
@@ -23587,6 +23603,7 @@
 @<Copy the templates from node |cur_loop| into node |p|@>;
 cur_loop:=link(cur_loop);
 link(p):=new_glue(glue_ptr(cur_loop));
+subtype(link(p)):=tab_skip_code+1;
 end
 
 @ @<Copy the templates from node |cur_loop| into node |p|@>=
@@ -23958,8 +23975,8 @@
 @^Plass, Michael Frederick@>
 @^Knuth, Donald Ervin@>
 the author in 1977, subsequently generalized and improved by the same two
-people in 1980. A detailed discussion appears in {\sl SOFTWARE---Practice
-\AM\ Experience \bf11} (1981), 1119--1184, where it is shown that the
+people in 1980. A detailed discussion appears in {\sl Software---Practice
+and Experience \bf11} (1981), 1119--1184, where it is shown that the
 line-breaking problem can be regarded as a special case of the problem of
 computing the shortest path in an acyclic network. The cited paper includes
 numerous examples and describes the history of line breaking as it has been
@@ -25645,7 +25662,7 @@
   if is_char_node(q) then goto done1;
   if non_discardable(q) then goto done1;
   if type(q)=kern_node then if subtype(q)<>explicit then goto done1;
-  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node| or |penalty_node|}
+  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node|, or |penalty_node|}
   if type(q)=math_node then if TeXXeT_en then
     @<Adjust \(t)the LR stack for the |post_line_break| routine@>;
   end;
@@ -25959,7 +25976,8 @@
 
 @<Glob...@>=
 @!hc:array[0..65] of 0..256; {word to be hyphenated}
-@!hn:small_number; {the number of positions occupied in |hc|}
+@!hn:0..64; {the number of positions occupied in |hc|;
+                                  not always a |small_number|}
 @!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result}
 @!hf:internal_font_number; {font number of the letters in |hc|}
 @!hu:array[0..63] of 0..256; {like |hc|, before conversion to lowercase}
@@ -26106,7 +26124,7 @@
 @ @<Local variables for hyphenation@>=
 @!i,@!j,@!l:0..65; {indices into |hc| or |hu|}
 @!q,@!r,@!s:pointer; {temporary registers for list manipulation}
-@!bchar:halfword; {right boundary character of hyphenated word, or |non_char|}
+@!bchar:halfword; {boundary character of hyphenated word, or |non_char|}
 
 @ \TeX\ will never insert a hyphen that has fewer than
 \.{\\lefthyphenmin} letters before it or fewer than
@@ -26847,7 +26865,7 @@
 is |trie_op_ptr|.
 
 @<Glob...@>=
-@!init@! trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
+@!init @!trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
   {trie op codes for quadruples}
 @!trie_used:array[ASCII_code] of quarterword;
   {largest opcode used so far for this language}
@@ -27025,7 +27043,7 @@
 @d trie_back(#)==trie[#].lh {backward links in |trie| holes}
 
 @<Glob...@>=
-@!init@!trie_taken:packed array[1..trie_size] of boolean;
+@!init @!trie_taken:packed array[1..trie_size] of boolean;
   {does a family start here?}
 @t\hskip10pt@>@!trie_min:array[ASCII_code] of trie_pointer;
   {the first possible slot for each character}
@@ -27721,7 +27739,8 @@
 @!last_penalty:integer; {used to implement \.{\\lastpenalty}}
 @!last_kern:scaled; {used to implement \.{\\lastkern}}
 @!last_node_type:integer; {used to implement \.{\\lastnodetype}}
-@!insert_penalties:integer; {sum of the penalties for held-over insertions}
+@!insert_penalties:integer; {sum of the penalties for insertions
+  that were held over}
 
 @ @<Put each...@>=
 primitive("pagegoal",set_page_dimen,0);
@@ -28610,7 +28629,7 @@
 @!main_k:font_index; {index into |font_info|}
 @!main_p:pointer; {temporary register for list manipulation}
 @!main_s:integer; {space factor value}
-@!bchar:halfword; {right boundary character of current font, or |non_char|}
+@!bchar:halfword; {boundary character of current font, or |non_char|}
 @!false_bchar:halfword; {nonexistent character matching |bchar|, or |non_char|}
 @!cancel_boundary:boolean; {should the left boundary be ignored?}
 @!ins_disc:boolean; {should we insert a discretionary node?}
@@ -29178,7 +29197,7 @@
 
 @ Many of the actions related to box-making are triggered by the appearance
 of braces in the input. For example, when the user says `\.{\\hbox}
-\.{to} \.{100pt\{$\langle\,\hbox{hlist}\,\rangle$\}}' in vertical mode,
+\.{to} \.{100pt\{$\langle\,\hbox{\rm hlist}\,\rangle$\}}' in vertical mode,
 the information about the box size (100pt, |exactly|) is put onto |save_stack|
 with a level boundary word just above it, and |cur_group:=adjusted_hbox_group|;
 \TeX\ enters restricted horizontal mode to process the hlist. The right
@@ -31480,6 +31499,7 @@
 
 @ @<Initialize table entries...@>=
 text(frozen_protection):="inaccessible";
+ at .inaccessible@>
 
 @ Here's an example of the way many of the following routines operate.
 (Unfortunately, they aren't all as simple as this.)
@@ -32417,7 +32437,7 @@
 @ @d show_code=0 { \.{\\show} }
 @d show_box_code=1 { \.{\\showbox} }
 @d show_the_code=2 { \.{\\showthe} }
- at d show_lists=3 { \.{\\showlists} }
+ at d show_lists_code=3 { \.{\\showlists} }
 
 @<Put each...@>=
 primitive("show",xray,show_code);
@@ -32426,14 +32446,14 @@
 @!@:show_box_}{\.{\\showbox} primitive@>
 primitive("showthe",xray,show_the_code);
 @!@:show_the_}{\.{\\showthe} primitive@>
-primitive("showlists",xray,show_lists);
-@!@:show_lists_}{\.{\\showlists} primitive@>
+primitive("showlists",xray,show_lists_code);
+@!@:show_lists_code_}{\.{\\showlists} primitive@>
 
 @ @<Cases of |print_cmd_chr|...@>=
 xray: case chr_code of
   show_box_code:print_esc("showbox");
   show_the_code:print_esc("showthe");
-  show_lists:print_esc("showlists");
+  show_lists_code:print_esc("showlists");
   @<Cases of |xray| for |print_cmd_chr|@>@;@/
   othercases print_esc("show")
   endcases;
@@ -32447,7 +32467,7 @@
 @!l:integer; {line where that conditional began}
 @!n:integer; {level of \.{\\if...\\fi} nesting}
 begin case cur_chr of
-show_lists: begin begin_diagnostic; show_activities;
+show_lists_code: begin begin_diagnostic; show_activities;
   end;
 show_box_code: @<Show the current contents of a box@>;
 show_code: @<Show the current meaning of a token, then |goto common_ending|@>;
@@ -32530,8 +32550,8 @@
 
 The global variable |format_ident| is a string that is printed right
 after the |banner| line when \TeX\ is ready to start. For \.{INITEX} this
-string says simply `\.{(INITEX)}'; for other versions of \TeX\ it says,
-for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
+string says simply `\.{ (INITEX)}'; for other versions of \TeX\ it says,
+for example, `\.{ (preloaded format=plain 1982.11.19)}', showing the year,
 month, and day that the format file was created. We have |format_ident=0|
 before \TeX's tables are loaded.
 
@@ -32625,6 +32645,8 @@
 @ The inverse macros are slightly more complicated, since we need to check
 the range of the values we are reading in. We say `|undump(a)(b)(x)|' to
 read an integer value |x| that is supposed to be in the range |a<=x<=b|.
+System error messages should be suppressed when undumping.
+@^system dependencies@>
 
 @d undump_wd(#)==begin get(fmt_file); #:=fmt_file^;@+end
 @d undump_int(#)==begin get(fmt_file); #:=fmt_file^.int;@+end
@@ -33182,12 +33204,12 @@
 |str_room| or |make_string| at this time, because a call on |overflow|
 might lead to an infinite loop.
 @^system dependencies@>
-
-Actually there's one way to get error messages, via |prepare_mag|;
-but that can't cause infinite recursion.
+(Actually there's one way to get error messages, via |prepare_mag|;
+but that can't cause infinite recursion.)
 @^recursion@>
 
-This program doesn't bother to close the input files that may still be open.
+If |final_cleanup| is bypassed, this program doesn't bother to close
+the input files that may still be open.
 
 @<Last-minute...@>=
 procedure close_files_and_terminate;
@@ -33197,7 +33219,7 @@
     is_names: boolean; {flag for name tree output: is it Names or Kids?}
     root, outlines, threads, names_tree, dests: integer;
     xref_offset_width, names_head, names_tail: integer;
-begin @<Finish the extensions@>;
+begin @<Finish the extensions@>; new_line_char:=-1;
 @!stat if tracing_stats>0 then @<Output statistics about this job@>;@;@+tats@/
 wake_up_terminal;
 if not fixed_pdfoutput_set then
@@ -33284,7 +33306,7 @@
 procedure final_cleanup;
 label exit;
 var c:small_number; {0 for \.{\\end}, 1 for \.{\\dump}}
-begin c:=cur_chr;
+begin c:=cur_chr; if c<>1 then new_line_char:=-1;
 if job_name=0 then open_log_file;
 while input_ptr>0 do
   if state=token_list then end_token_list at +else end_file_reading;
@@ -33400,14 +33422,15 @@
 @!debug procedure debug_help; {routine to display various things}
 label breakpoint,exit;
 var k,@!l,@!m,@!n:integer;
-begin loop begin wake_up_terminal;
+begin clear_terminal;
+  loop begin wake_up_terminal;
   print_nl("debug # (-1 to exit):"); update_terminal;
 @.debug \#@>
   read(term_in,m);
   if m<0 then return
   else if m=0 then
-    begin goto breakpoint;@\ {go to every label at least once}
-    breakpoint: m:=0; @{'BREAKPOINT'@}@\
+    begin goto breakpoint;@/ {go to every declared label at least once}
+    breakpoint: m:=0; @{'BREAKPOINT'@}@/
     end
   else  begin read(term_in,n);
     case m of

Modified: trunk/Build/source/texk/web2c/pdftexdir/pdftexextra.h
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/pdftexextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/pdftexdir/pdftexextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -25,7 +25,7 @@
 #include <pdftexdir/pdftex_version.h> /* for PDFTEX_VERSION */
 #include <pdftexdir/etex_version.h> /* for ETEX_VERSION */
 
-#define BANNER "This is pdfTeX, Version 3.14159265-" ETEX_VERSION "-" PDFTEX_VERSION
+#define BANNER "This is pdfTeX, Version 3.141592653-" ETEX_VERSION "-" PDFTEX_VERSION
 #define COPYRIGHT_HOLDER "Han The Thanh (pdfTeX) et al"
 #define AUTHOR NULL
 #define PROGRAM_HELP PDFTEXHELP

Modified: trunk/Build/source/texk/web2c/pdftexdir/tex.ch0
===================================================================
--- trunk/Build/source/texk/web2c/pdftexdir/tex.ch0	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/pdftexdir/tex.ch0	2021-01-30 01:42:07 UTC (rev 57558)
@@ -20,11 +20,11 @@
 % pdfetex.web and tex.ch
 
 @x [1.2] l.188
- at d TeX_banner=='This is TeX, Version 3.14159265' {printed when \TeX\ starts}
+ at d TeX_banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts}
 @#
 @d banner==pdfTeX_banner
 @y
- 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}
 @z
 
 @x [17.236] l.4960 - first web2c, then pdfTeX, then e-TeX additional integer parameters

Modified: trunk/Build/source/texk/web2c/pltotf.web
===================================================================
--- trunk/Build/source/texk/web2c/pltotf.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/pltotf.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -16,7 +16,7 @@
 % Version 3.2 (December 1989) improved `shorten', increased max_letters.
 % Version 3.3 (September 1990) fixed `nonexistent char 0' (John Gourlay).
 % Version 3.4 (March 1991) has more robust `out_scaled' (Wayne Sullivan).
-% Version 3.5 (March 1995) initialized lk_step_ended (Armin K\"ollner).
+% Version 3.5 (March 1995) initialized lk_step_ended (Armin K\"ollner).   
 % Version 3.6 (January 2014) corrected possible end-of-line glitch (Ken Nakano),
 %  and get_fix now treats -- as + (Peter Breitenlohner).
 
@@ -34,7 +34,7 @@
 \def\title{PL\lowercase{to}TF}
 \def\contentspagenumber{301}
 \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 The {\ttitlefont PLtoTF} processor}
@@ -393,7 +393,7 @@
 
 \yskip\noindent
 The elements of a \.{VARCHAR} property list are either \.{TOP}, \.{MID},
-\.{BOT} or \.{REP}; the values are integers, which must be zero or the number
+\.{BOT}, or \.{REP}; the values are integers, which must be zero or the number
 of a character in the font. A zero value for \.{TOP}, \.{MID}, or \.{BOT} means
 that the corresponding piece of the extensible character is absent. A nonzero
 value, or a \.{REP} value of zero, denotes the character code used to make
@@ -428,8 +428,8 @@
 
 \yskip\hang\.{KRN} (a one-byte value and a real value). The instruction
 `\.{(KRN} $c$ $r$\.)' means, ``If the next character is $c$, then insert
-a blank space of width $r$ between the current character character and $c$;
-otherwise go on to the next intruction.'' The value of $r$, which is in
+a blank space of width $r$ between the current character and $c$;
+otherwise go on to the next instruction.'' The value of $r$, which is in
 design units, is often negative. Character code $c$ must exist
 in the font.
 
@@ -2013,7 +2013,7 @@
 @!lig_z:array[0..hash_size] of 0..257;
 @!hash_ptr:0..hash_size; {the number of nonzero entries in |hash|}
 @!hash_list:array[0..hash_size] of 0..hash_size; {list of those nonzero entries}
-@!h,@!hh:0..hash_size; {indices into the hash table}
+@!h:0..hash_size; {index into the hash table}
 @!tt:indx; {temporary register}
 @!x_lig_cycle,@!y_lig_cycle:0..256; {problematic ligature pair}
 

Modified: trunk/Build/source/texk/web2c/pooltype.web
===================================================================
--- trunk/Build/source/texk/web2c/pooltype.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/pooltype.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -16,7 +16,7 @@
 \def\title{POOL\lowercase{type}}
 \def\contentspagenumber{101}
 \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 The {\ttitlefont POOLtype} processor}
@@ -69,7 +69,7 @@
 (The following material is copied verbatim from \TeX82.
 Thus, the same system-dependent changes should be made to both programs.)
 
-In order to make \TeX\ readily portable between a wide variety of
+In order to make \TeX\ readily portable to a wide variety of
 computers, all of its input text is converted to an internal eight-bit
 code that includes standard ASCII, the ``American Standard Code for
 Information Interchange.''  This conversion is done immediately when each
@@ -87,7 +87,7 @@
 a particular font encoding.
 @^ASCII code@>
 
-\TeX's internal code is relevant also with respect to constants
+\TeX's internal code also defines the value of constants
 that begin with a reverse apostrophe; and it provides an index to the
 \.{\\catcode}, \.{\\mathcode}, \.{\\uccode}, \.{\\lccode}, and \.{\\delcode}
 tables.
@@ -367,7 +367,7 @@
 example, be `|k in [0,@'10..@'12,@'14,@'15,@'33,@'177..@'377]|'.
 If character |k| cannot be printed, and |k<@'200|, then character |k+@'100| or
 |k-@'100| must be printable; moreover, ASCII codes |[@'41..@'46,
-@'60..@'71, @'141..@'146, @'160..@'171]| must be printable.
+@'60..@'71, @'136, @'141..@'146, @'160..@'171]| must be printable.
 Thus, at least 80 printable characters are needed.
 @:TeXbook}{\sl The \TeX book@>
 @^character set dependencies@>

Modified: trunk/Build/source/texk/web2c/ptexdir/ptex-base.ch
===================================================================
--- trunk/Build/source/texk/web2c/ptexdir/ptex-base.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/ptexdir/ptex-base.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -79,7 +79,7 @@
 @d pTeX_revision==".3"
 @d pTeX_version_string=='-p3.8.3' {current \pTeX\ version}
 @#
- at d pTeX_banner=='This is pTeX, Version 3.14159265',pTeX_version_string
+ at d pTeX_banner=='This is pTeX, Version 3.141592653',pTeX_version_string
 @d pTeX_banner_k==pTeX_banner
   {printed when \pTeX\ starts}
 @#
@@ -793,7 +793,7 @@
 @d hskip=26 {horizontal glue ( \.{\\hskip}, \.{\\hfil}, etc.~)}
 @d vskip=27 {vertical glue ( \.{\\vskip}, \.{\\vfil}, etc.~)}
 @d mskip=28 {math glue ( \.{\\mskip} )}
- at d kern=29 {fixed space ( \.{\\kern})}
+ at d kern=29 {fixed space ( \.{\\kern} )}
 @d mkern=30 {math kern ( \.{\\mkern} )}
 @d leader_ship=31 {use a box ( \.{\\shipout}, \.{\\leaders}, etc.~)}
 @d halign=32 {horizontal table alignment ( \.{\\halign} )}
@@ -804,7 +804,7 @@
 @d hskip=remove_item+1 {horizontal glue ( \.{\\hskip}, \.{\\hfil}, etc.~)}
 @d vskip=hskip+1 {vertical glue ( \.{\\vskip}, \.{\\vfil}, etc.~)}
 @d mskip=vskip+1 {math glue ( \.{\\mskip} )}
- at d kern=mskip+1 {fixed space ( \.{\\kern})}
+ at d kern=mskip+1 {fixed space ( \.{\\kern} )}
 @d mkern=kern+1 {math kern ( \.{\\mkern} )}
 @d leader_ship=mkern+1 {use a box ( \.{\\shipout}, \.{\\leaders}, etc.~)}
 @d halign=leader_ship+1 {horizontal table alignment ( \.{\\halign} )}
@@ -3357,10 +3357,20 @@
 @z
 
 @x [33.647] l.13515 - pTeX: cur_kanji_skip, cur_xkanji_skip, last_disp
-@< Glob...@>=
+@ If the global variable |adjust_tail| is non-null, the |hpack| routine
+also removes all occurrences of |ins_node|, |mark_node|, and |adjust_node|
+items and appends the resulting material onto the list that ends at
+location |adjust_tail|.
+
+@<Glob...@>=
 @!adjust_tail:pointer; {tail of adjustment list}
 @y
-@< Glob...@>=
+@ If the global variable |adjust_tail| is non-null, the |hpack| routine
+also removes all occurrences of |ins_node|, |mark_node|, and |adjust_node|
+items and appends the resulting material onto the list that ends at
+location |adjust_tail|.
+
+@<Glob...@>=
 @!adjust_tail:pointer; {tail of adjustment list}
 @!last_disp:scaled; {displacement at end of list}
 @!cur_kanji_skip:pointer;
@@ -3754,7 +3764,7 @@
   else cur_i:=null_character;
   if not(char_exists(cur_i)) then
     begin char_warning(cur_f,qo(cur_c));
-    math_type(a):=empty;
+    math_type(a):=empty; cur_i:=null_character;
     end;
   end;
 @y
@@ -3765,7 +3775,7 @@
   else cur_i:=null_character;
   if not(char_exists(cur_i)) then
     begin char_warning(cur_f,qo(cur_c));
-    math_type(a):=empty;
+    math_type(a):=empty; cur_i:=null_character;
     end;
   end;
 @z
@@ -6186,18 +6196,18 @@
 @z
 
 @x [49.1291] l.24467 - pTeX: show_mode
- at d show_lists=3 { \.{\\showlists} }
+ at d show_lists_code=3 { \.{\\showlists} }
 @y
- at d show_lists=3 { \.{\\showlists} }
+ at d show_lists_code=3 { \.{\\showlists} }
 @d show_mode=4 { \.{\\showmode} }
 @z
 
 @x [49.1291] l.24476 - pTeX: show_mode
-primitive("showlists",xray,show_lists);
-@!@:show_lists_}{\.{\\showlists} primitive@>
+primitive("showlists",xray,show_lists_code);
+@!@:show_lists_code_}{\.{\\showlists} primitive@>
 @y
-primitive("showlists",xray,show_lists);
-@!@:show_lists_}{\.{\\showlists} primitive@>
+primitive("showlists",xray,show_lists_code);
+@!@:show_lists_code_}{\.{\\showlists} primitive@>
 primitive("showmode",xray,show_mode);
 @!@:show_mode_}{\.{\\showmode} primitive@>
 @z

Modified: trunk/Build/source/texk/web2c/ptexdir/ptexextra.h
===================================================================
--- trunk/Build/source/texk/web2c/ptexdir/ptexextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/ptexdir/ptexextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -5,7 +5,7 @@
 
 #include <ptexdir/ptex_version.h> /* for PTEX_VERSION */
 
-#define BANNER "This is pTeX, Version 3.14159265-" PTEX_VERSION
+#define BANNER "This is pTeX, Version 3.141592653-" PTEX_VERSION
 #define COPYRIGHT_HOLDER "D.E. Knuth"
 #define AUTHOR NULL
 #define PROGRAM_HELP PTEXHELP

Modified: trunk/Build/source/texk/web2c/ptexdir/ptrip/ptrip.diffs
===================================================================
--- trunk/Build/source/texk/web2c/ptexdir/ptrip/ptrip.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/ptexdir/ptrip/ptrip.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,295 +1,575 @@
+#! /bin/sh -vx
+# $Id: ptriptest.test 48633 2018-09-09 17:56:55Z karl $
+# Copyright 2017-2018 Karl Berry <tex-live at tug.org>
+# Copyright 2010-2014 Peter Breitenlohner <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL;  LANGUAGE=C; export LANGUAGE
++ LC_ALL=C
++ export LC_ALL
++ LANGUAGE=C
++ export LANGUAGE
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+ptestdir=$abs_srcdir/ptexdir/ptrip
++ ptestdir=SRCDIR/ptexdir/ptrip
+
+TEXMFCNF=$ptestdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/ptexdir/ptrip
++ export TEXMFCNF
+
+rm -rf ptripdir
++ rm -rf ptripdir
+mkdir ptripdir
++ mkdir ptripdir
+cd ptripdir
++ cd ptripdir
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\'''
+
+echo ">>> Running TRIP test for pTeX." >&2
++ echo '>>> Running TRIP test for pTeX.'
 >>> Running TRIP test for pTeX.
+echo ">>> See $ptestdir/ptrip.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/ptexdir/ptrip/ptrip.diffs for example of acceptable diffs.'
 >>> See SRCDIR/ptexdir/ptrip/ptrip.diffs for example of acceptable diffs.
+
+# pTeX outputs direction of boxes.
+P_SED1='s/, yoko direction//;s/yoko direction, //'
++ P_SED1='s/, yoko direction//;s/yoko direction, //'
+P_SED2='s/yoko(math) direction, //'
++ P_SED2='s/yoko(math) direction, //'
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+echo "*** TRIP test for pTeX ***."
 + echo '*** TRIP test for pTeX ***.'
 *** TRIP test for pTeX ***.
+
+./pltotf $testdir/trip.pl trip.tfm || exit 1
 + ./pltotf SRCDIR/triptrap/trip.pl trip.tfm
+
+./tftopl ./trip.tfm trip.pl || exit 1
 + ./tftopl ./trip.tfm trip.pl
+
+diff $testdir/trip.pl trip.pl || is_OK=false
 + diff SRCDIR/triptrap/trip.pl trip.pl
+
+# get same filename in log
+$LN_S $testdir/trip.tex .
 + ln -s SRCDIR/triptrap/trip.tex .
+
+rm -f trip.log
 + rm -f trip.log
+./ptex --progname=pinitex --ini <$testdir/trip1.in >ptripin.fot
 + ./ptex --progname=pinitex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by trip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+sed "$P_SED1" trip.log >  ptripin.log || exit 1
 + sed 's/, yoko direction//;s/yoko direction, //' trip.log
+diff $testdir/tripin.log ptripin.log
 + diff SRCDIR/triptrap/tripin.log ptripin.log
 1c1
-< This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+< This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 ---
-> This is pTeX, Version 3.14159265-p3.6 (utf8.euc) (TeX Live 2015) (INITEX)  12 APR 2015 16:22
+> This is pTeX, Version 3.141592653-p3.8.3 (utf8.euc) (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
 3c3
 < (trip.tex
 ---
 > (./trip.tex
-9c9
-< A character number must be between 0 and 255.
----
-> A character number must be between 0 and 255, or KANJI code.
 91c91,92
 < ### horizontal mode entered at line 77 (language255:hyphenmin1,63)
 ---
 > ### horizontal mode entered at line 77 (language255:hyph
 > enmin1,63)
-450,453c451,454
-<  (preloaded format=trip 2014.1.7)
-< 1326 strings of total length 23646
+93a95
+> \displace 0.0
+95a98
+> \displace 0.0
+368a372
+> ....\displace 0.0
+370a375
+> ....\displace 0.0
+437,438d441
+< ....\rip 6 (ligature )
+< ....\rip 7 (ligature )
+450,453c453,456
+<  (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
 < 471 memory locations dumped; current usage is 96&278
 < 341 multiletter control sequences
 ---
->  (preloaded format=trip 2015.4.12)
-> 1451 strings of total length 25481
-> 485 memory locations dumped; current usage is 106&278
-> 377 multiletter control sequences
-461c462
+>  (preloaded format=trip 2021.1.27)
+> 1476 strings of total length 26143
+> 487 memory locations dumped; current usage is 108&278
+> 387 multiletter control sequences
+461c464
 < Hyphenation trie of length 273 has 9 ops out of 500
 ---
 > Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+rm -f trip.log
 + rm -f trip.log
+./ptex --progname=ptex <$testdir/trip2.in >ptrip.fot
 + ./ptex --progname=ptex
+sed "$P_SED1;$P_SED2" trip.log > ptrip.log
 + sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log
+diff $testdir/trip.fot ptrip.fot
 + diff SRCDIR/triptrap/trip.fot ptrip.fot
 1,3c1,2
-< This is TeX, Version 3.14159265 (INITEX)
+< This is TeX, Version 3.141592653 (INITEX)
 < ** &trip  trip 
 < (trip.tex ##
 ---
-> This is pTeX, Version 3.14159265-p3.6 (utf8.euc) (TeX Live 2015) (preloaded format=ptex)
+> This is pTeX, Version 3.141592653-p3.8.3 (utf8.euc) (TeX Live 2021/dev) (preloaded format=ptex)
 > **(./trip.tex ##
 17c16
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 190&313; after: 114&278; still untouched: 3113
+> Memory usage before: 192&313; after: 116&278; still untouched: 3113
 75c74
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 452&431; after: 390&418; still untouched: 241
+> Memory usage before: 458&431; after: 396&418; still untouched: 484
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log ptrip.log 
 + diff SRCDIR/triptrap/trip.log ptrip.log
 1c1
-< This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is pTeX, Version 3.14159265-p3.6 (utf8.euc) (TeX Live 2015) (preloaded format=trip 2015.4.12)  12 APR 2015 16:22
+> This is pTeX, Version 3.141592653-p3.8.3 (utf8.euc) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27)  27 JAN 2021 18:03
 3c3
 < (trip.tex ##
 ---
 > (./trip.tex ##
-58a59,62
-> \openout0 = `8terminal.tex'.
-> 
-> \openout10 = `tripos.tex'.
-> 
-73c77
+73c73
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 190&313; after: 114&278; still untouched: 3113
-385,386c389,390
+> Memory usage before: 192&313; after: 116&278; still untouched: 3113
+113a114
+> .\displace 0.0
+198a200
+> .\displace 0.0
+253a256
+> .\displace 0.0
+308a312
+> .\displace 0.0
+349a354
+> .\displace 0.0
+385,386c390,391
 < \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos
 < t 100
 ---
 > \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co
 > st 100
-426c430
+406a412
+> ....\displace 0.0
+409a416
+> ....\displace 0.0
+412a420
+> ....\displace 0.0
+420a429
+> .\displace 0.0
+426c435
 < \insert200, natural size 400.0; split(0.0,-2.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100
-441c445
+435a445
+> .\displace 0.0
+441c451
 < \insert200, natural size 400.0; split(1.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100
-456c460
+450a461
+> .\displace 0.0
+456c467
 < \insert200, natural size 400.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100
-483,484c487,488
+466a478
+> .\displace 0.0
+483,484c495,496
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-642c646
+588a601
+> .....\displace 0.0
+591a605
+> .....\displace 0.0
+594a609
+> .....\displace 0.0
+630a646
+> ......\displace 0.0
+633a650
+> ......\displace 0.0
+636a654
+> ......\displace 0.0
+642c660
 < Memory usage before: 747&484; after: 581&481; still untouched: 1492
 ---
-> Memory usage before: 1086&483; after: 838&480; still untouched: 1993
-647c651,652
+> Memory usage before: 1114&483; after: 860&480; still untouched: 1993
+647c665,666
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-693,694c698,699
+650a670
+> .\displace 0.0
+660a681
+> .\displace 0.0
+670a692
+> .\displace 0.0
+681a704
+> .\displace 0.0
+693,694c716,717
 < \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10
 < 0
 ---
 > \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1
 > 00
-701c706
+701c724
 < \insert200, natural size 2.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100
-714,715c719,720
+714,715c737,738
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-815c820
+815c838
 < Memory usage before: 475&470; after: 290&466; still untouched: 1473
 ---
-> Memory usage before: 690&469; after: 406&465; still untouched: 1974
-820c825,826
+> Memory usage before: 706&469; after: 414&465; still untouched: 1974
+820c843,844
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-915c921
+915c939
 < Memory usage before: 218&459; after: 149&458; still untouched: 1473
 ---
 > Memory usage before: 304&458; after: 194&457; still untouched: 1974
-920c926,927
+920c944,945
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-1070c1077
+1070c1095
 < Memory usage before: 118&328; after: 102&328; still untouched: 1473
 ---
 > Memory usage before: 146&327; after: 122&327; still untouched: 1974
-1405c1412
+1405c1430
 < \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil
 ---
 > \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil
-1504a1512
+1493a1519
 > ..\displace 0.0
-1511c1519
+1503a1530
+> ..\displace 0.0
+1504a1532
+> ..\displace 0.0
+1511c1539
 < Memory usage before: 990&376; after: 584&370; still untouched: 735
 ---
-> Memory usage before: 1486&375; after: 838&369; still untouched: 1974
-1954c1962
+> Memory usage before: 1494&375; after: 842&369; still untouched: 1974
+1887c1915
+< .\rip A
+---
+> .\displace 0.0
+1923c1951
+< .\hbox(0.0+0.0)x120.0 []
+---
+> .\hbox(0.0+0.0)x120.0, yoko(math) direction []
+1954c1982
 < (tripos.tex
 ---
 > (./tripos.tex
-2018c2026
+2018c2046
 < \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil
 ---
 > \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil
-2189c2197
+2022a2051
+> ..\displace 0.0
+2058a2088
+> ..\displace 0.0
+2071a2102
+> ..\displace 0.0
+2092a2124
+> ..\displace 0.0
+2113a2146
+> ..\displace 0.0
+2123a2157
+> ..\displace 0.0
+2142a2177
+> ..\displace 0.0
+2150a2186
+> ..\displace 0.0
+2171c2207,2208
+< ..\hbox(0.0+0.0)x120.0
+---
+> ..\hbox(0.0+0.0)x120.0, yoko(math) direction
+> ...\displace 0.0
+2189c2226
 < Memory usage before: 950&531; after: 546&448; still untouched: 706
 ---
-> Memory usage before: 1454&530; after: 804&447; still untouched: 1945
-2397c2405
+> Memory usage before: 1490&530; after: 822&447; still untouched: 1945
+2397c2434
 < ! Improper alphabetic constant.
 ---
 > ! Improper alphabetic or KANJI constant.
-2533c2541
+2533c2570
 < \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
 ---
 > \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
-2575c2583
+2544a2582
+> ..\displace 0.0
+2570c2608,2609
+< .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0
+---
+> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, yoko(math) direction
+> 
+2572c2611
+< ..\hbox(0.0+0.0)x0.0
+---
+> ..\hbox(0.0+0.0)x0.0, yoko(math) direction
+2575c2614
 < Memory usage before: 339&413; after: 236&405; still untouched: 706
 ---
-> Memory usage before: 489&411; after: 323&403; still untouched: 1945
-3051c3059
+> Memory usage before: 493&411; after: 325&403; still untouched: 1945
+2650,2651c2689,2690
+< Dimensions can be in units of em, ex, in, pt, pc,
+< cm, mm, dd, cc, bp, or sp; but yours is a new one!
+---
+> Dimensions can be in units of em, ex, zw, zh, in, pt, pc,
+> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one!
+3038c3077,3078
+< ^\hbox(7.0+1.0)x2.0
+---
+> ^\hbox(7.0+1.0)x2.0, yoko(math) direction
+> ^.\displace 0.0
+3051c3091
 < \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
 ---
 > \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
-3054c3062
+3054c3094
 < .\fam0 ^^c8
 ---
 > .\fam0 \xC8 
-3143a3152
+3056c3096
+< .\vbox(-2.0+0.0)x0.0
+---
+> .\vbox(-2.0+0.0)x0.0, yoko(math) direction
+3060c3100,3101
+< ^.\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> ^..\displace 0.0
+3140a3182
+> .....\displace 0.0
+3142a3185
+> ....|\displace 0.0
+3143a3187
 > ....\displace 0.0
-3235c3244
+3151a3196
+> .\displace 0.0
+3235c3280
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-3326c3335
+3286c3331
+< .\vbox(6.0+-8.0)x0.0
+---
+> .\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3326c3371
 < \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil
 ---
 > \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil
-3547a3557
+3329a3375
+> ..\displace 0.0
+3374c3420
+< ..\vbox(6.0+-8.0)x0.0
+---
+> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3385c3431,3432
+< ......\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> .......\displace 0.0
+3544a3592
+> ..........\displace 0.0
+3546a3595
+> .........|\displace 0.0
+3547a3597
 > .........\displace 0.0
-3616c3626
+3564c3614,3615
+< ...\hbox(7.0+1.0)x1.99
+---
+> ...\hbox(7.0+1.0)x1.99, yoko(math) direction
+> ....\displace 0.0
+3616c3667
 < Memory usage before: 2170&521; after: 1181&459; still untouched: 175
 ---
-> Memory usage before: 3259&519; after: 1739&457; still untouched: 241
-3864c3874
+> Memory usage before: 3279&519; after: 1749&457; still untouched: 484
+3864c3915
 < \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil
 ---
 > \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil
-3951c3961
+3919,3920c3970,3972
+< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247
+< ....\vbox(-0.00002+0.0)x0.0
+---
+> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi
+> on
+> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction
+3951c4003
 < Memory usage before: 640&415; after: 397&410; still untouched: 175
 ---
-> Memory usage before: 955&413; after: 569&408; still untouched: 241
-4034c4044
+> Memory usage before: 955&413; after: 569&408; still untouched: 484
+4034c4086
 < \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil
-4053c4063
+4053c4105
 < Memory usage before: 235&401; after: 178&399; still untouched: 175
 ---
-> Memory usage before: 338&399; after: 244&397; still untouched: 241
-4420c4430
+> Memory usage before: 338&399; after: 244&397; still untouched: 484
+4420c4472
 < \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil
 ---
 > \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil
-4506c4516
+4425a4478
+> ...\displace 0.0
+4447a4501
+> ...\displace 0.0
+4475a4530
+> ...\displace 0.0
+4492a4548
+> ...\displace 0.0
+4506c4562
 < Memory usage before: 651&432; after: 417&418; still untouched: 175
 ---
-> Memory usage before: 988&431; after: 594&417; still untouched: 241
-4742c4752,4753
+> Memory usage before: 1004&431; after: 602&417; still untouched: 484
+4742c4798,4799
 < \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio
 > n
-4828c4839
+4746a4804
+> ...\displace 0.0
+4762a4821
+> .....\displace 0.0
+4777a4837
+> ......\displace 0.0
+4828c4888
 < Memory usage before: 776&458; after: 464&452; still untouched: 175
 ---
-> Memory usage before: 1170&457; after: 672&451; still untouched: 241
-5700c5711
+> Memory usage before: 1182&457; after: 678&451; still untouched: 484
+5701c5761
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-6380c6391
+6381c6441
 < (tripos.tex
 ---
 > (./tripos.tex
-6501c6512
+6502c6562
 < l.429 ...^^M=13 \def^^M{\relax}#
 ---
 > l.429 ...^^M=13 \defqqM{\relax}#
-6595c6606
+6596c6656
 < Memory usage before: 819&428; after: 720&426; still untouched: 175
 ---
-> Memory usage before: 1216&428; after: 1066&426; still untouched: 241
-7155c7166
+> Memory usage before: 1228&428; after: 1074&426; still untouched: 484
+6853c6913
+< .|vbox(0.0+0.0)x0.0
+---
+> .|vbox(0.0+0.0)x0.0, yoko(math) direction
+6876a6937
+> ..|displace 0.0
+6891a6953
+> ..|displace 0.0
+6926a6989
+> .|displace 0.0
+6959a7023
+> .|displace 0.0
+6961c7025,7026
+< .|hbox(0.0+0.0)x0.0
+---
+> .|hbox(0.0+0.0)x0.0, yoko(math) direction
+> ..|displace 0.0
+6991a7057
+> .|displace 0.0
+7103a7170
+> ...|displace 0.0
+7108d7174
+< ...|ip A (ligature BB)
+7116a7183
+> ...|displace 0.0
+7125d7191
+< ...|kern2.0
+7126a7193
+> .|displace 0.0
+7136c7203
+< ...|vbox(0.0+0.0)x0.0
+---
+> ...|vbox(0.0+0.0)x0.0, yoko(math) direction
+7156c7223
 < Memory usage before: 895&439; after: 290&420; still untouched: 175
 ---
-> Memory usage before: 1332&439; after: 388&420; still untouched: 241
-7288c7299
+> Memory usage before: 1346&439; after: 394&420; still untouched: 484
+7289c7356
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 452&431; after: 390&418; still untouched: 241
-7296,7299c7307,7310
+> Memory usage before: 458&431; after: 396&418; still untouched: 484
+7297,7300c7364,7367
 <  47 strings out of 1674
-<  253 string characters out of 8354
+<  253 string characters out of 8367
 <  2825 words of memory out of 3000
 <  372 multiletter control sequences out of 2100
 ---
->  44 strings out of 1549
->  261 string characters out of 14519
->  4259 words of memory out of 4500
->  408 multiletter control sequences out of 15000+0
-7301c7312
+>  44 strings out of 1524
+>  261 string characters out of 13857
+>  4016 words of memory out of 4500
+>  418 multiletter control sequences out of 15000+0
+7302c7369
 <  2 hyphenation exceptions out of 307
 ---
 >  1 hyphenation exception out of 659
+
+mv tripos.tex ptripos.tex
++ mv tripos.tex ptripos.tex
+diff $testdir/tripos.tex ptripos.tex || is_OK=false
++ diff SRCDIR/triptrap/tripos.tex ptripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >ptrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ ptrip.typ
 + diff SRCDIR/triptrap/trip.typ ptrip.typ
 1c1
 < This is DVItype, Version 3.6
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
-< ' TeX output 2014.01.07:0959'
+< ' TeX output 1776.07.04:1200'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
 419c419
 < 1121: down4 639342208 
 ---
@@ -300,5 +580,12 @@
 ---
 > 2535: y4 203921756 
 > 2540: y0 203921756 
+
+$is_OK || {
+  echo ">>> There were some errors." >&2
+  exit 1
+}
 + :
-PASS: ptexdir/ptriptest
+
+PASS ptexdir/ptriptest.test (exit status: 0)
+PASS: ptexdir/ptriptest.test

Modified: trunk/Build/source/texk/web2c/tangle.ch
===================================================================
--- trunk/Build/source/texk/web2c/tangle.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/tangle.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -45,10 +45,10 @@
 @z
 
 @x [1] Define my_name
- at d banner=='This is TANGLE, Version 4.5'
+ at d banner=='This is TANGLE, Version 4.6'
 @y
 @d my_name=='tangle'
- at d banner=='This is TANGLE, Version 4.5'
+ at d banner=='This is TANGLE, Version 4.6'
 @z
 
 @x [2] Eliminate the |end_of_TANGLE| label.
@@ -85,7 +85,7 @@
 @x
 @!max_bytes=45000; {|1/ww| times the number of bytes in identifiers,
   strings, and module names; must be less than 65536}
-@!max_toks=50000; {|1/zz| times the number of bytes in compressed \PASCAL\ code;
+@!max_toks=65000; {|1/zz| times the number of bytes in compressed \PASCAL\ code;
   must be less than 65536}
 @!max_names=4000; {number of identifiers, strings, module names;
   must be less than 10240}
@@ -551,15 +551,15 @@
 @z
 
 @x [173] Add parametric2 macros (macros that use [] to delimit arguments).
-  else @<If the next text is `|(#)==|', call |define_macro|
+  else @<If the next text is `\.{(\#)==}', call |define_macro|
     and |goto continue|@>;
 @y
-  else @<If the next text is `|(#)==|' or |[#]==|, call |define_macro|
+  else @<If the next text is `\.{(\#)==}' or `\.{[\#]==}', call |define_macro|
     and |goto continue|@>;
 @z
 
 @x [174] Add parametric2 macros (macros that use [] to delimit arguments).
-@ @<If the next text is `|(#)==|'...@>=
+@ @<If the next text is `\.{(\#)==}'...@>=
 if next_control="(" then
   begin next_control:=get_next;
   if next_control="#" then
@@ -578,7 +578,7 @@
     end;
   end;
 @y
-@ @<If the next text is `|(#)==|'...@>=
+@ @<If the next text is `\.{(\#)==}'...@>=
 if next_control="(" then
   begin next_control:=get_next;
   if next_control="#" then

Modified: trunk/Build/source/texk/web2c/tangle.web
===================================================================
--- trunk/Build/source/texk/web2c/tangle.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/tangle.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -19,6 +19,7 @@
 % Version 4.3 fixes @@ bug in verbatim, catches extra } (September, 1991).
 % Version 4.4 activates debug_help on errors as advertised (February, 1993).
 % Version 4.5 prevents modno-comments from being split across lines (Dec 2002).
+% Version 4.6 fixes archaic @@z logic; is again big enough for TeX (Jan 2021).
 
 % Here is TeX material that gets inserted after \input webmac
 \def\hang{\hangindent 3em\indent\ignorespaces}
@@ -31,13 +32,13 @@
 \def\({} % kludge for alphabetizing certain module names
 
 \def\title{TANGLE}
-\def\contentspagenumber{123} % should be odd
+\def\contentspagenumber{125} % should be odd
 \def\topofcontents{\null\vfill
   \titlefalse % include headline on the contents page
   \def\rheader{\mainfont Appendix E\hfil \contentspagenumber}
   \centerline{\titlefont The {\ttitlefont TANGLE} processor}
   \vskip 15pt
-  \centerline{(Version 4.5)}
+  \centerline{(Version 4.6)}
   \vfill}
 \pageno=\contentspagenumber \advance\pageno by 1
 
@@ -66,7 +67,7 @@
 The ``banner line'' defined here should be changed whenever \.{TANGLE}
 is modified.
 
- at d banner=='This is TANGLE, Version 4.5'
+ at d banner=='This is TANGLE, Version 4.6'
 
 @ The program begins with a fairly normal header, made up of pieces that
 @^system dependencies@>
@@ -182,7 +183,7 @@
 @!buf_size=100; {maximum length of input line}
 @!max_bytes=45000; {|1/ww| times the number of bytes in identifiers,
   strings, and module names; must be less than 65536}
-@!max_toks=50000; {|1/zz| times the number of bytes in compressed \PASCAL\ code;
+@!max_toks=65000; {|1/zz| times the number of bytes in compressed \PASCAL\ code;
   must be less than 65536}
 @!max_names=4000; {number of identifiers, strings, module names;
   must be less than 10240}
@@ -732,7 +733,7 @@
 even need more than 65536 bytes; \TeX\ is one of these.  To get around
 this problem, a slight complication has been added to the data structures:
 |byte_mem| and |tok_mem| are two-dimensional arrays, whose first index is
-either 0 or 1. (For generality, the first index is actually allowed to run
+either 0 or 1 or 2. (For generality, the first index is actually allowed to run
 between 0 and |ww-1| in |byte_mem|, or between 0 and |zz-1| in |tok_mem|,
 where |ww| and |zz| are set to 2 and~3; the program will work for any
 positive values of |ww| and |zz|, and it can be simplified in obvious ways
@@ -875,7 +876,7 @@
 @ The names of modules are stored in |byte_mem| together
 with the identifier names, but a hash table is not used for them because
 \.{TANGLE} needs to be able to recognize a module name when given a prefix of
-that name. A conventional binary seach tree is used to retrieve module names,
+that name. A conventional binary search tree is used to retrieve module names,
 with fields called |llink| and |rlink| in place of |link| and |ilk|. The
 root of this tree is |rlink[0]|. If |p| is a pointer to a module name,
 |equiv[p]| points to its replacement text, just as in simple and parametric
@@ -977,7 +978,7 @@
 end;
 
 @ A simple hash code is used: If the sequence of
-ASCII codes is $c_1c_2\ldots c_m$, its hash value will be
+ASCII codes is $c_1c_2\ldots c_n$, its hash value will be
 $$(2^{n-1}c_1+2^{n-2}c_2+\cdots+c_n)\,\bmod\,|hash_size|.$$
 
 @<Compute the hash...@>=
@@ -1311,7 +1312,7 @@
 \hang |double_dot| denotes `\.{..}' in \PASCAL.
 
 \hang |verbatim| denotes the \.{@@=} that begins a verbatim \PASCAL\ string.
-It is also used for the end of the string.
+The \.{@@>} at the end of such a string is also denoted by |verbatim|.
 
 \hang |force_line| denotes the \.{@@\\} that forces a new line in the
 \PASCAL\ output.
@@ -1758,11 +1759,11 @@
 (&\.(&|misc|\cr
 x&\.{(x}&|num_or_id|\cr
 -&\.{(x}&|sign|&&&$-1$&$-1$\cr
-15&\.{(x}&|sign_val|&\.{"+"}&$-15$&&$-15$\cr
+15&\.{(x}&|sign_val|&\.{"+"}&$-15$&&$-1$\cr
 +&\.{(x}&|sign_val_sign|&\.{"+"}&$-15$&$+1$&$+1$\cr
 19&\.{(x}&|sign_val_val|&\.{"+"}&$-15$&$+19$&$+1$\cr
 -&\.{(x}&|sign_val_sign|&\.{"+"}&$+4$&$-1$&$-1$\cr
-2&\.{(x}&|sign_val_val|&\.{"+"}&$+4$&$-2$&$-2$\cr
+2&\.{(x}&|sign_val_val|&\.{"+"}&$+4$&$-2$&$-1$\cr
 )&\.{(x+2)}&|misc|\cr}}$$
 At each stage we have put as much into the buffer as possible without
 knowing what is coming next. Examples like `\.{x-0.1}' indicate why
@@ -2474,9 +2475,7 @@
 @ @<Read from |web_file|...@>=
 begin incr(line);
 if not input_ln(web_file) then input_has_ended:=true
-else if limit=change_limit then
-  if buffer[0]=change_buffer[0] then
-    if change_limit>0 then check_change;
+else if change_limit>0 then check_change;
 end
 
 @ @<Read from |change_file|...@>=
@@ -2505,7 +2504,7 @@
 
 @<Check that all changes have been read@>=
 if change_limit<>0 then {|changing| is false}
-  begin for ii:=0 to change_limit do buffer[ii]:=change_buffer[ii];
+  begin for ii:=0 to change_limit-1 do buffer[ii]:=change_buffer[ii];
   limit:=change_limit; changing:=true; line:=other_line; loc:=change_limit;
   err_print('! Change file entry did not match');
 @.Change file entry did not match@>
@@ -2606,7 +2605,7 @@
 @ @<Do special things when |c="@@"...@>=
 if c="@@" then
   begin c:=buffer[loc];
-  if (c<>" ")and(c<>tab_mark)and(c<>"*")and(c<>"z")and(c<>"Z") then incr(loc)
+  if (c<>" ")and(c<>tab_mark)and(c<>"*") then incr(loc)
   else  begin err_print('! Section ended in mid-comment');
 @.Section ended in mid-comment@>
     decr(loc); return;
@@ -2827,7 +2826,7 @@
 
 @* Scanning a numeric definition.
 When \.{TANGLE} looks at the \PASCAL\ text following the `\.=' of a numeric
-macro definition, it calls on the precedure |scan_numeric(p)|, where |p|
+macro definition, it calls on the procedure |scan_numeric(p)|, where |p|
 points to the name that is to be defined. This procedure evaluates the
 right-hand side, which must consist entirely of integer constants and
 defined numeric macros connected with \.+ and \.- signs (no parentheses).
@@ -3105,7 +3104,7 @@
   else if next_control=equivalence_sign then
     begin define_macro(simple); goto continue;
     end
-  else @<If the next text is `|(#)==|', call |define_macro|
+  else @<If the next text is `\.{(\#)==}', call |define_macro|
     and |goto continue|@>;
   err_print('! Definition flushed since it starts badly');
 @.Definition flushed...@>
@@ -3112,7 +3111,7 @@
   end;
 done:
 
-@ @<If the next text is `|(#)==|'...@>=
+@ @<If the next text is `\.{(\#)==}'...@>=
 if next_control="(" then
   begin next_control:=get_next;
   if next_control="#" then

Modified: trunk/Build/source/texk/web2c/tangleboot.pin
===================================================================
--- trunk/Build/source/texk/web2c/tangleboot.pin	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/tangleboot.pin	2021-01-30 01:42:07 UTC (rev 57558)
@@ -102,7 +102,7 @@
 end else if(strcmp(longoptions[optionindex].name,'help')=0)then begin
 usagehelp(TANGLEHELP,nil);
 end else if(strcmp(longoptions[optionindex].name,'version')=0)then begin
-printversionandexit('This is TANGLE, Version 4.5',nil,'D.E. Knuth',nil);
+printversionandexit('This is TANGLE, Version 4.6',nil,'D.E. Knuth',nil);
 end else if(strcmp(longoptions[optionindex].name,'mixedcase')=0)then
 begin forceuppercase:=false;forcelowercase:=false;
 end else if(strcmp(longoptions[optionindex].name,'uppercase')=0)then
@@ -590,9 +590,8 @@
 changing:=not changing;templine:=otherline;otherline:=line;
 line:=templine;end;end;end{:137};
 if not changing then begin{136:}begin line:=line+1;
-if not inputln(webfile)then inputhasended:=true else if limit=
-changelimit then if buffer[0]=changebuffer[0]then if changelimit>0 then
-checkchange;end{:136};if changing then goto 20;end;loc:=0;
+if not inputln(webfile)then inputhasended:=true else if changelimit>0
+then checkchange;end{:136};if changing then goto 20;end;loc:=0;
 buffer[limit]:=32;end;
 {:135}{139:}function controlcode(c:ASCIIcode):eightbits;
 begin case c of 64:controlcode:=64;39:controlcode:=12;
@@ -614,10 +613,9 @@
 if inputhasended then begin begin writeln(stdout);
 write(stdout,'! Input ended in mid-comment');error;end;goto 10;end;end;
 c:=buffer[loc];loc:=loc+1;{142:}if c=64 then begin c:=buffer[loc];
-if(c<>32)and(c<>9)and(c<>42)and(c<>122)and(c<>90)then loc:=loc+1 else
-begin begin writeln(stdout);
-write(stdout,'! Section ended in mid-comment');error;end;loc:=loc-1;
-goto 10;
+if(c<>32)and(c<>9)and(c<>42)then loc:=loc+1 else begin begin writeln(
+stdout);write(stdout,'! Section ended in mid-comment');error;end;
+loc:=loc-1;goto 10;
 end end else if(c=92)and(buffer[loc]<>64)then loc:=loc+1 else if c=123
 then bal:=bal+1 else if c=125 then begin if bal=0 then goto 10;
 bal:=bal-1;end{:142};end;10:end;{:141}{145:}function getnext:eightbits;
@@ -853,12 +851,12 @@
 changing:=true;primethechangebuffer;changing:=not changing;
 templine:=otherline;otherline:=line;line:=templine;limit:=0;loc:=1;
 buffer[0]:=32;inputhasended:=false;{:134};
-write(stdout,'This is TANGLE, Version 4.5');
+write(stdout,'This is TANGLE, Version 4.6');
 writeln(stdout,versionstring);{183:}phaseone:=true;modulecount:=0;
 repeat nextcontrol:=skipahead;until nextcontrol=136;
 while not inputhasended do scanmodule;
-{138:}if changelimit<>0 then begin for ii:=0 to changelimit do buffer[ii
-]:=changebuffer[ii];limit:=changelimit;changing:=true;line:=otherline;
+{138:}if changelimit<>0 then begin for ii:=0 to changelimit-1 do buffer[
+ii]:=changebuffer[ii];limit:=changelimit;changing:=true;line:=otherline;
 loc:=changelimit;begin writeln(stdout);
 write(stdout,'! Change file entry did not match');error;end;end{:138};
 phaseone:=false;{:183};{for ii:=0 to 4 do maxtokptr[ii]:=tokptr[ii];}

Modified: trunk/Build/source/texk/web2c/tex.ch
===================================================================
--- trunk/Build/source/texk/web2c/tex.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/tex.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -72,10 +72,10 @@
 @z
 
 @x [1.2] l.188
- 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
- at d TeX_banner_k=='This is TeXk, Version 3.14159265' {printed when \TeX\ starts}
- at d TeX_banner=='This is TeX, Version 3.14159265' {printed when \TeX\ starts}
+ at d TeX_banner_k=='This is TeXk, Version 3.141592653' {printed when \TeX\ starts}
+ at d TeX_banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts}
 @#
 @d banner==TeX_banner
 @d banner_k==TeX_banner_k
@@ -871,25 +871,6 @@
 end;
 @z
 
-% Original reports:
-%   https://tex.stackexchange.com/questions/551313/
-%   https://tug.org/pipermail/tex-live/2020-June/045876.html
-%
-% This will probably be fixed by DEK in the 2021 tuneup in a different
-% way (so we'll have to remove or alter this change), but the interaction
-% sequence in the reports above causes a segmentation fault in web2c -
-% writing to the closed \write15 stream because we wrongly decrement
-% selector from 16 to 15 in term_input, due to the lack of this check in
-% a recursive error() call.
-%
- at x [6.83] l.1893 - avoid wrong interaction 
-loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
- at y
-loop at +begin continue:
-if interaction<>error_stop_mode then return;
-clear_for_error_prompt; prompt_input("? ");
- at z
-
 @x [6.84] l.1904 - Implement the switch-to-editor option.
 line ready to be edited. But such an extension requires some system
 wizardry, so the present implementation simply types out the name of the
@@ -916,7 +897,7 @@
 @z
 
 @x [6.84] l.1903 - Implement the switch-to-editor option.
-"E": if base_ptr>0 then
+"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
   begin print_nl("You want to edit file ");
 @.You want to edit file x@>
   slow_print(input_stack[base_ptr].name_field);
@@ -923,7 +904,7 @@
   print(" at line "); print_int(line);
   interaction:=scroll_mode; jump_out;
 @y
-"E": if base_ptr>0 then
+"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
     begin edit_name_start:=str_start[edit_file.name_field];
     edit_name_length:=str_start[edit_file.name_field+1] -
                       str_start[edit_file.name_field];
@@ -1315,26 +1296,29 @@
 input and output, establishes the initial values of the date and time.
 @^system dependencies@>
 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.
+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).
 
 @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}
-end;
+begin sys_time:=12*60;
+sys_day:=4; sys_month:=7; sys_year:=1776;  {self-evident truths}
 @y
-@ The following procedure, which is called just before \TeX\ initializes its
-input and output, establishes the initial values of the date and time.
-It calls a macro-defined |date_and_time| routine.  |date_and_time|
-in turn is a C macro, which calls |get_date_and_time|, passing
-it the addresses of the day, month, etc., so they can be set by the
-routine.  |get_date_and_time| also sets up interrupt catching if that
-is conditionally compiled in the C code.
+@ The following procedure, which is called just before \TeX\ initializes
+its input and output, establishes the initial values of the date and
+time. It calls a |date_and_time| C macro (a.k.a.\ |dateandtime|), which
+calls the C function |get_date_and_time|, passing it the addresses of
+|sys_time|, etc., so they can be set by the routine. |get_date_and_time|
+also sets up interrupt catching if that is conditionally compiled in the
+C code.
+
+We have to initialize the |sys_| variables because that is what gets
+output on the first line of the log file. (New in 2021.)
 @^system dependencies@>
 
- at d fix_date_and_time==date_and_time(time,day,month,year)
+ at p procedure fix_date_and_time;
+begin date_and_time(sys_time,sys_day,sys_month,sys_year);
 @z
 
 @x [17.252] l.5420 - hash_extra
@@ -2141,7 +2125,7 @@
 @z
 
 @x [29.537] l.10360 - start_input: don't return filename to string pool.
-if name=str_ptr-1 then {we can conserve string pool space now}
+if name=str_ptr-1 then {conserve string pool space (but see note above)}
   begin flush_string; name:=cur_name;
   end;
 @y
@@ -2184,7 +2168,7 @@
   {start of |lig_kern| program for left boundary character,
   |non_address| if there is none}
 @!font_bchar:array[internal_font_number] of min_quarterword..non_char;
-  {right boundary character, |non_char| if there is none}
+  {boundary character, |non_char| if there is none}
 @!font_false_bchar:array[internal_font_number] of min_quarterword..non_char;
   {|font_bchar| if it doesn't exist in the font, otherwise |non_char|}
 @y
@@ -2215,7 +2199,7 @@
   {start of |lig_kern| program for left boundary character,
   |non_address| if there is none}
 @!font_bchar: ^nine_bits;
-  {right boundary character, |non_char| if there is none}
+  {boundary character, |non_char| if there is none}
 @!font_false_bchar: ^nine_bits;
   {|font_bchar| if it doesn't exist in the font, otherwise |non_char|}
 @z
@@ -2967,9 +2951,9 @@
 @z
 
 @x [43.943] l.18346 - web2c can't parse negative lower bounds in arrays.  Sorry.
-@!init@! trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
+@!init @!trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
 @y
-@!init@! trie_op_hash:array[neg_trie_op_size..trie_op_size] of 0..trie_op_size;
+@!init @!trie_op_hash:array[neg_trie_op_size..trie_op_size] of 0..trie_op_size;
 @z
 
 @x [43.943] l.18348 - bigtrie: Larger hyphenation tries.
@@ -3085,7 +3069,7 @@
 @z
 
 @x [43.590] l.18524 - Dynamically allocate & larger tries.
-@!init@!trie_taken:packed array[1..trie_size] of boolean;
+@!init @!trie_taken:packed array[1..trie_size] of boolean;
   {does a family start here?}
 @t\hskip10pt@>@!trie_min:array[ASCII_code] of trie_pointer;
   {the first possible slot for each character}
@@ -3093,7 +3077,7 @@
 @t\hskip10pt@>@!trie_not_ready:boolean; {is the trie still in linked form?}
 tini
 @y
-@!init@!trie_taken: ^boolean;
+@!init @!trie_taken: ^boolean;
   {does a family start here?}
 @t\hskip10pt@>@!trie_min:array[ASCII_code] of trie_pointer;
   {the first possible slot for each character}
@@ -4309,8 +4293,8 @@
 % running.  The best approximation is to do a core dump, then run the
 % debugger on it later.
 @x [52.1338] l.24411 - Core-dump in debugging mode on 0 input.
-    begin goto breakpoint;@\ {go to every label at least once}
-    breakpoint: m:=0; @{'BREAKPOINT'@}@\
+    begin goto breakpoint;@/ {go to every declared label at least once}
+    breakpoint: m:=0; @{'BREAKPOINT'@}@/
     end
 @y
     dump_core {do something to cause a core dump}

Modified: trunk/Build/source/texk/web2c/tex.web
===================================================================
--- trunk/Build/source/texk/web2c/tex.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/tex.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,6 +1,7 @@
 % This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved.
-% Copying of this file is authorized only if (1) you are D. E. Knuth, or if
-% (2) you make absolutely no changes to your copy. (The WEB system provides
+% Unlimited copying and redistribution of this file are permitted as long
+% as this file is not modified. Modifications are permitted, but only if
+% the resulting file is not named tex.web. (The WEB system provides
 % for alterations via an auxiliary file; the master file should stay intact.)
 % See Appendix H of the WEB manual for hints on how to install this program.
 % And see Appendix A of the TRIP manual for details about how to validate it.
@@ -46,6 +47,7 @@
 % Version 3.141592 fixed \xleaders, glueset, weird alignments (December 2002).
 % Version 3.1415926 was a general cleanup with minor fixes (February 2008).
 % Version 3.14159265 was similar (January 2014).
+% Version 3.141592653 was similar but more extensive (January 2021).
 
 % A reward of $327.68 will be paid to the first finder of any remaining bug.
 
@@ -188,7 +190,7 @@
 known as `\TeX' [cf.~Stanford Computer Science report CS1027,
 November 1984].
 
- 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}
 
 @ Different \PASCAL s have slightly different conventions, and the present
 @!@:PASCAL H}{\ph@>
@@ -199,7 +201,7 @@
 if necessary. (\ph\ is Charles Hedrick's modification of a compiler
 @^Hedrick, Charles Locke@>
 for the DECsystem-10 that was originally developed at the University of
-Hamburg; cf.\ {\sl SOFTWARE---Practice \AM\ Experience \bf6} (1976),
+Hamburg; cf.\ {\sl Software---Practice and Experience \bf6} (1976),
 29--42. The \TeX\ program below is intended to be adaptable, without
 extensive changes, to most other versions of \PASCAL, so it does not fully
 use the admirable features of \ph. Indeed, a conscious effort has been
@@ -295,8 +297,8 @@
 Similarly, there is some conditional code delimited by
 `$|stat|\ldots|tats|$' that is intended for use when statistics are to be
 kept about \TeX's memory usage.  The |stat| $\ldots$ |tats| code also
-implements diagnostic information for \.{\\tracingparagraphs} and
-\.{\\tracingpages}.
+implements diagnostic information for \.{\\tracingparagraphs},
+\.{\\tracingpages}, and \.{\\tracingrestores}.
 @^debugging@>
 
 @d debug==@{ {change this to `$\\{debug}\equiv\null$' when debugging}
@@ -1303,7 +1305,7 @@
 If character |k| cannot be printed, and |k<@'200|, then character |k+@'100| or
 |k-@'100| must be printable; moreover, ASCII codes |[@'41..@'46,
 @'60..@'71, @'136, @'141..@'146, @'160..@'171]| must be printable.
-Thus, at least 81 printable characters are needed.
+Thus, at least 80 printable characters are needed.
 @:TeXbook}{\sl The \TeX book@>
 @^character set dependencies@>
 @^system dependencies@>
@@ -1564,9 +1566,9 @@
 
 @ Here is the very first thing that \TeX\ prints: a headline that identifies
 the version number and format package. The |term_offset| variable is temporarily
-incorrect, but the discrepancy is not serious since we assume that the banner
-and format identifier together will occupy at most |max_print_line|
-character positions.
+incorrect, but the discrepancy is not serious since we assume that this
+part of the program is system dependent.
+@^system dependencies@>
 
 @<Initialize the output...@>=
 wterm(banner);
@@ -1616,7 +1618,7 @@
 
 @<Basic print...@>=
 procedure print_int(@!n:integer); {prints an integer in decimal form}
-var k:0..23; {index to current digit; we assume that $|n|<10^{23}$}
+var k:0..23; {index to current digit; we assume that $\vert n\vert<10^{23}$}
 @!m:integer; {used to negate |n| in possibly dangerous cases}
 begin k:=0;
 if n<0 then
@@ -1764,7 +1766,8 @@
 
 \hang|term_only| (when |interaction>batch_mode| and |log_file| not yet open);
 
-\hang|log_only| (when |interaction=batch_mode| and |log_file| is open);
+\hang|log_only| (when |interaction=batch_mode| and |log_file| is open,
+  or when tracing paragraphs);
 
 \hang|term_and_log| (when |interaction>batch_mode| and |log_file| is open).
 
@@ -1880,7 +1883,8 @@
   {used to save global variables when deleting tokens}
 begin if history<error_message_issued then history:=error_message_issued;
 print_char("."); show_context;
-if interaction=error_stop_mode then @<Get user's advice and |return|@>;
+if interaction=error_stop_mode then if selector<>log_only then
+  @<Get user's advice and |return|@>;
 incr(error_count);
 if error_count=100 then
   begin print_nl("(That makes 100 errors; please try again.)");
@@ -1891,7 +1895,8 @@
 exit:end;
 
 @ @<Get user's advice...@>=
-loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
+loop at +begin continue: if interaction<>error_stop_mode then return;
+  clear_for_error_prompt; prompt_input("? ");
 @.?\relax@>
   if last=first then return;
   c:=buffer[first];
@@ -1916,7 +1921,7 @@
 "0","1","2","3","4","5","6","7","8","9": if deletions_allowed then
   @<Delete \(c)|c-"0"| tokens and |goto continue|@>;
 @t\4\4@>@;@+@!debug "D": begin debug_help; goto continue;@+end;@+gubed@/
-"E": if base_ptr>0 then
+"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
   begin print_nl("You want to edit file ");
 @.You want to edit file x@>
   slow_print(input_stack[base_ptr].name_field);
@@ -1937,7 +1942,8 @@
 @.Type <return> to proceed...@>
 print_nl("R to run without stopping, Q to run quietly,");@/
 print_nl("I to insert something, ");
-if base_ptr>0 then print("E to edit your file,");
+if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
+  print("E to edit your file,");
 if deletions_allowed then
   print_nl("1 or ... or 9 to ignore the next 1 to 9 tokens of input,");
 print_nl("H for help, X to quit.");
@@ -2129,7 +2135,7 @@
   print_err("Interruption");
 @.Interruption@>
   help3("You rang?")@/
-  ("Try to insert some instructions for me (e.g.,`I\showlists'),")@/
+  ("Try to insert an instruction for me (e.g., `I\showlists'),")@/
   ("unless you just want to quit by typing `X'.");
   deletions_allowed:=false; error; deletions_allowed:=true;
   interrupt:=0;
@@ -2917,8 +2923,8 @@
 
 @ The |new_null_box| function returns a pointer to an |hlist_node| in
 which all subfields have the values corresponding to `\.{\\hbox\{\}}'.
-The |subtype| field is set to |min_quarterword|, since that's the desired
-|span_count| value if this |hlist_node| is changed to an |unset_node|.
+(The |subtype| field is set to |min_quarterword|, for historic reasons
+that are no longer relevant.)
 
 @p function new_null_box:pointer; {creates a new box node}
 var p:pointer; {the new node}
@@ -4100,7 +4106,7 @@
 @d hskip=26 {horizontal glue ( \.{\\hskip}, \.{\\hfil}, etc.~)}
 @d vskip=27 {vertical glue ( \.{\\vskip}, \.{\\vfil}, etc.~)}
 @d mskip=28 {math glue ( \.{\\mskip} )}
- at d kern=29 {fixed space ( \.{\\kern})}
+ at d kern=29 {fixed space ( \.{\\kern} )}
 @d mkern=30 {math kern ( \.{\\mkern} )}
 @d leader_ship=31 {use a box ( \.{\\shipout}, \.{\\leaders}, etc.~)}
 @d halign=32 {horizontal table alignment ( \.{\\halign} )}
@@ -4239,7 +4245,7 @@
 \hang|-mmode| stands for math formula mode (not displayed).
 
 \yskip\noindent The mode is temporarily set to zero while processing \.{\\write}
-texts in the |ship_out| routine.
+texts.
 
 Numeric values are assigned to |vmode|, |hmode|, and |mmode| so that
 \TeX's ``big semantic switch'' can select the appropriate thing to
@@ -4432,7 +4438,7 @@
     end;
   end;
 2: if a.int<>null then
-  begin print("this will be denominator of:"); show_box(a.int);@+
+  begin print("this will begin denominator of:"); show_box(a.int);@+
   end;
 end {there are no other cases}
 
@@ -4954,7 +4960,7 @@
 @d output_penalty_code=39 {penalty found at current page break}
 @d max_dead_cycles_code=40 {bound on consecutive dead cycles of output}
 @d hang_after_code=41 {hanging indentation changes after this many lines}
- at d floating_penalty_code=42 {penalty for insertions heldover after a split}
+ at d floating_penalty_code=42 {penalty for insertions held over after a split}
 @d global_defs_code=43 {override \.{\\global} specifications}
 @d cur_fam_code=44 {current family}
 @d escape_char_code=45 {escape character for token output}
@@ -5236,14 +5242,18 @@
 input and output, establishes the initial values of the date and time.
 @^system dependencies@>
 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.
+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).
 
 @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}
+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}
 end;
 
 @ @<Show equivalent |n|, in region 5@>=
@@ -5279,11 +5289,13 @@
 selector:=old_setting;
 end;
 
-@ Of course we had better declare another global variable, if the previous
+@ 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}
 
 @ The final region of |eqtb| contains the dimension parameters defined
 here, and the 256 \.{\\dimen} registers.
@@ -5824,7 +5836,7 @@
 \yskip\hangg 2) If |save_type(p)=restore_zero|, then |save_index(p)|
 is a location in |eqtb| whose current value should be destroyed at the end
 of the current group, when it should be
-replaced by the current value of |eqtb[undefined_control_sequence]|.
+replaced by the value of |eqtb[undefined_control_sequence]|.
 
 \yskip\hangg 3) If |save_type(p)=insert_token|, then |save_index(p)|
 is a token that should be inserted into \TeX's input when the current
@@ -6189,8 +6201,8 @@
 number |c| into the text at this point.
 
 The enclosing \.{\char'173} and \.{\char'175} characters of a macro
-definition are omitted, but the final right brace of an output routine
-is included at the end of its token list.
+definition are omitted, but an output routine
+will be enclosed in braces.
 
 Here is an example macro definition that illustrates these conventions.
 After \TeX\ processes the text
@@ -6654,7 +6666,7 @@
 template is being scanned;
 
 \hang|backed_up|, if the token list being scanned has been inserted as
-`to be read again'.
+`to be read again';
 
 \hang|inserted|, if the token list being scanned has been inserted as
 the text expansion of a \.{\\count} or similar variable;
@@ -7190,7 +7202,8 @@
 
 @ The recovery procedure can't be fully understood without knowing more
 about the \TeX\ routines that should be aborted, but we can sketch the
-ideas here:  For a runaway definition we will insert a right brace; for a
+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 \.{\\cr} token and a right
 brace; and for a runaway argument, we will set |long_state| to
 |outer_call| and insert \.{\\par}.
@@ -7357,7 +7370,7 @@
 end
 
 @ Notice that a code like \.{\^\^8} becomes \.x if not followed by a hex digit.
-
+ 
 @d is_hex(#)==(((#>="0")and(#<="9"))or((#>="a")and(#<="f")))
 @d hex_to_cur_chr==
   if c<="9" then cur_chr:=c-"0" @+else cur_chr:=c-"a"+10;
@@ -7367,7 +7380,7 @@
 @<If this |sup_mark| starts an expanded character...@>=
 begin if cur_chr=buffer[loc] then if loc<limit then
   begin c:=buffer[loc+1]; @+if c<@'200 then {yes we have an expanded char}
-    begin loc:=loc+2;
+    begin loc:=loc+2; 
     if is_hex(c) then if loc<=limit then
       begin cc:=buffer[loc]; @+if is_hex(cc) then
         begin incr(loc); hex_to_cur_chr; goto reswitch;
@@ -7827,7 +7840,7 @@
 else cur_tok:=cs_token_flag+cur_cs;
 end;
 
-@ The |get_x_token| procedure is equivalent to two consecutive
+@ The |get_x_token| procedure is essentially equivalent to two consecutive
 procedure calls: |get_next; x_token|.
 
 @p procedure x_token; {|get_x_token| without the initial |get_next|}
@@ -8148,7 +8161,7 @@
 strip off the enclosing braces. That's why |rbrace_ptr| was introduced.
 
 @<Tidy up the parameter just scanned, and tuck it away@>=
-begin if (m=1)and(info(p)<right_brace_limit)and(p<>temp_head) then
+begin if (m=1)and(info(p)<right_brace_limit) then
   begin link(rbrace_ptr):=null; free_avail(p);
   p:=link(temp_head); pstack[n]:=link(p); free_avail(p);
   end
@@ -9140,7 +9153,7 @@
 at the value |p| that is returned. (If |p=temp_head|, the list is empty.)
 
 @p function str_toks(@!b:pool_pointer):pointer;
-  {changes the string |str_pool[b..pool_ptr]| to a token list}
+  {converts |str_pool[b..pool_ptr-1]| to a token list}
 var p:pointer; {tail of the token list}
 @!q:pointer; {new node being added to the token list via |store_new_token|}
 @!t:halfword; {token being appended}
@@ -9302,7 +9315,7 @@
 messages.
 
 @p function scan_toks(@!macro_def,@!xpand:boolean):pointer;
-label found,done,done1,done2;
+label found,continue,done,done1,done2;
 var t:halfword; {token representing the highest parameter number}
 @!s:halfword; {saved token}
 @!p:pointer; {tail of the token list being built}
@@ -9322,7 +9335,7 @@
 end;
 
 @ @<Scan and build the parameter part...@>=
-begin loop begin get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|}
+begin loop begin continue: get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|}
   if cur_tok<right_brace_limit then goto done1;
   if cur_cmd=mac_param then
     @<If the next character is a parameter number, make |cur_tok|
@@ -9344,7 +9357,7 @@
 
 @ @<If the next character is a parameter number...@>=
 begin s:=match_token+cur_chr; get_token;
-if cur_cmd=left_brace then
+if cur_tok<left_brace_limit then
   begin hash_brace:=cur_tok;
   store_new_token(cur_tok); store_new_token(end_match_token);
   goto done;
@@ -9352,7 +9365,8 @@
 if t=zero_token+9 then
   begin print_err("You already have nine parameters");
 @.You already have nine...@>
-  help1("I'm going to ignore the # sign you just used."); error;
+  help2("I'm going to ignore the # sign you just used,")@/
+    ("as well as the token that followed it."); error; goto continue;
   end
 else  begin incr(t);
   if cur_tok<>t then
@@ -9502,7 +9516,7 @@
     print_err("File ended within "); print_esc("read");
 @.File ended within \\read@>
     help1("This \read has unbalanced braces.");
-    align_state:=1000000; error;
+    align_state:=1000000; limit:=0; error;
     end;
   end;
 end
@@ -9638,7 +9652,7 @@
 @!skip_line:integer; {skipping began here}
 
 @ Here is a procedure that ignores text until coming to an \.{\\or},
-\.{\\else}, or \.{\\fi} at level zero of $\.{\\if}\ldots\.{\\fi}$
+\.{\\else}, or \.{\\fi} at the current level of $\.{\\if}\ldots\.{\\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).
@@ -10342,15 +10356,18 @@
 @ @<Print the banner...@>=
 begin wlog(banner);
 slow_print(format_ident); print("  ");
-print_int(day); print_char(" ");
+print_int(sys_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);
+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);
 end
 
 @ Let's turn now to the procedure that is used to initiate file reading
 when an `\.{\\input}' 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.
+@^system dependencies@>
 
 @p procedure start_input; {\TeX\ will \.{\\input} something}
 label done;
@@ -10375,7 +10392,7 @@
 else if (term_offset>0)or(file_offset>0) then print_char(" ");
 print_char("("); incr(open_parens); slow_print(name); update_terminal;
 state:=new_line;
-if name=str_ptr-1 then {we can conserve string pool space now}
+if name=str_ptr-1 then {conserve string pool space (but see note above)}
   begin flush_string; name:=cur_name;
   end;
 @<Read the first line of the new file@>;
@@ -10589,11 +10606,11 @@
 current character (which may have a ligature/kerning program of its own).
 
 If the very first instruction of the |lig_kern| array has |skip_byte=255|,
-the |next_char| byte is the so-called right boundary character of this font;
+the |next_char| byte is the 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 left boundary character,
-beginning at location |256*op_byte+remainder|.
+there is a special ligature/kerning program for a boundary character at the
+left, beginning at location |256*op_byte+remainder|.
 The interpretation is that \TeX\ puts implicit boundary characters
 before and after each consecutive string of characters from the same font.
 These implicit characters do not appear in the output, but they can affect
@@ -10725,7 +10742,7 @@
   {start of |lig_kern| program for left boundary character,
   |non_address| if there is none}
 @!font_bchar:array[internal_font_number] of min_quarterword..non_char;
-  {right boundary character, |non_char| if there is none}
+  {boundary character, |non_char| if there is none}
 @!font_false_bchar:array[internal_font_number] of min_quarterword..non_char;
   {|font_bchar| if it doesn't exist in the font, otherwise |non_char|}
 
@@ -10904,7 +10921,7 @@
 @!a,@!b,@!c,@!d:eight_bits; {byte variables}
 @!qw:four_quarters;@!sw:scaled; {accumulators}
 @!bch_label:integer; {left boundary start location, or infinity}
-@!bchar:0..256; {right boundary character, or 256}
+@!bchar:0..256; {boundary character, or 256}
 @!z:scaled; {the design size or the ``at'' size}
 @!alpha:integer;@!beta:1..16;
   {auxiliary quantities used in fixed-point multiplication}
@@ -11472,13 +11489,13 @@
 The parameter is a signed number in two's complement notation, |-128<=b<128|;
 if |b<0|, the reference point moves left.
 
-\yskip\hang|right2| 144 |b[2]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right2| 144 |b[2]|. Same as |right1|, except that |b| is a
 two-byte quantity in the range |-32768<=b<32768|.
 
-\yskip\hang|right3| 145 |b[3]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right3| 145 |b[3]|. Same as |right1|, except that |b| is a
 three-byte quantity in the range |@t$-2^{23}$@><=b<@t$2^{23}$@>|.
 
-\yskip\hang|right4| 146 |b[4]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right4| 146 |b[4]|. Same as |right1|, except that |b| is a
 four-byte quantity in the range |@t$-2^{31}$@><=b<@t$2^{31}$@>|.
 
 \yskip\hang|w0| 147. Set |h:=h+w|; i.e., move right |w| units. With luck,
@@ -12886,7 +12903,7 @@
 items and appends the resulting material onto the list that ends at
 location |adjust_tail|.
 
-@< Glob...@>=
+@<Glob...@>=
 @!adjust_tail:pointer; {tail of adjustment list}
 
 @ @<Set init...@>=adjust_tail:=null; last_badness:=0;
@@ -13408,8 +13425,8 @@
 @d sub_mlist=3 {|math_type| when the attribute is a formula}
 @d math_text_char=4 {|math_type| when italic correction is dubious}
 
-@ Each portion of a formula is classified as Ord, Op, Bin, Rel, Ope,
-Clo, Pun, or Inn, for purposes of spacing and line breaking. An
+@ Each portion of a formula is classified as Ord, Op, Bin, Rel, Open,
+Close, Punct, or Inner, for purposes of spacing and line breaking. An
 |ord_noad|, |op_noad|, |bin_noad|, |rel_noad|, |open_noad|, |close_noad|,
 |punct_noad|, or |inner_noad| is used to represent portions of the various
 types. For example, an `\.=' sign in a formula leads to the creation of a
@@ -13431,10 +13448,10 @@
 @d op_noad=ord_noad+1 {|type| of a noad classified Op}
 @d bin_noad=ord_noad+2 {|type| of a noad classified Bin}
 @d rel_noad=ord_noad+3 {|type| of a noad classified Rel}
- at d open_noad=ord_noad+4 {|type| of a noad classified Ope}
- at d close_noad=ord_noad+5 {|type| of a noad classified Clo}
- at d punct_noad=ord_noad+6 {|type| of a noad classified Pun}
- at d inner_noad=ord_noad+7 {|type| of a noad classified Inn}
+ at d open_noad=ord_noad+4 {|type| of a noad classified Open}
+ at d close_noad=ord_noad+5 {|type| of a noad classified Close}
+ at d punct_noad=ord_noad+6 {|type| of a noad classified Punct}
+ at d inner_noad=ord_noad+7 {|type| of a noad classified Inner}
 @d limits=1 {|subtype| of |op_noad| whose scripts are to be above, below}
 @d no_limits=2 {|subtype| of |op_noad| whose scripts are to be normal}
 
@@ -14209,7 +14226,7 @@
   else cur_i:=null_character;
   if not(char_exists(cur_i)) then
     begin char_warning(cur_f,qo(cur_c));
-    math_type(a):=empty;
+    math_type(a):=empty; cur_i:=null_character;
     end;
   end;
 end;
@@ -14596,7 +14613,7 @@
 
 @ The numerator and denominator must be separated by a certain minimum
 clearance, called |clr| in the following program. The difference between
-|clr| and the actual clearance is |2delta|.
+|clr| and the actual clearance is twice |delta|.
 
 @<Adjust \(s)|shift_up| and |shift_down| for the case of no fraction line@>=
 begin if cur_style<text_style then clr:=7*default_rule_thickness
@@ -14979,8 +14996,7 @@
 ord_noad,vcenter_noad,over_noad,under_noad: do_nothing;
 radical_noad: s:=radical_noad_size;
 accent_noad: s:=accent_noad_size;
-fraction_noad: begin t:=inner_noad; s:=fraction_noad_size;
-  end;
+fraction_noad: s:=fraction_noad_size;
 left_noad,right_noad: t:=make_left_right(q,style,max_d,max_h);
 style_node: @<Change the current style and |goto delete_q|@>;
 whatsit_node,penalty_node,rule_node,disc_node,adjust_node,ins_node,mark_node,
@@ -15020,7 +15036,7 @@
 goto delete_q;
 end
 
-@ The inter-element spacing in math formulas depends on a $8\times8$ table that
+@ The inter-element spacing in math formulas depends on an $8\times8$ table that
 \TeX\ preloads as a 64-digit string. The elements of this string have the
 following significance:
 $$\vbox{\halign{#\hfil\cr
@@ -15400,6 +15416,7 @@
 primitive("crcr",car_ret,cr_cr_code);
 @!@:cr_cr_}{\.{\\crcr} primitive@>
 text(frozen_end_template):="endtemplate"; text(frozen_endv):="endtemplate";
+ at .endtemplate@>
 eq_type(frozen_endv):=endv; equiv(frozen_endv):=null_list;
 eq_level(frozen_endv):=level_one;@/
 eqtb[frozen_end_template]:=eqtb[frozen_endv];
@@ -15627,6 +15644,7 @@
 @<Copy the templates from node |cur_loop| into node |p|@>;
 cur_loop:=link(cur_loop);
 link(p):=new_glue(glue_ptr(cur_loop));
+subtype(link(p)):=tab_skip_code+1;
 end
 
 @ @<Copy the templates from node |cur_loop| into node |p|@>=
@@ -15992,8 +16010,8 @@
 @^Plass, Michael Frederick@>
 @^Knuth, Donald Ervin@>
 the author in 1977, subsequently generalized and improved by the same two
-people in 1980. A detailed discussion appears in {\sl SOFTWARE---Practice
-\AM\ Experience \bf11} (1981), 1119--1184, where it is shown that the
+people in 1980. A detailed discussion appears in {\sl Software---Practice
+and Experience \bf11} (1981), 1119--1184, where it is shown that the
 line-breaking problem can be regarded as a special case of the problem of
 computing the shortest path in an acyclic network. The cited paper includes
 numerous examples and describes the history of line breaking as it has been
@@ -17291,7 +17309,7 @@
   if is_char_node(q) then goto done1;
   if non_discardable(q) then goto done1;
   if type(q)=kern_node then if subtype(q)<>explicit then goto done1;
-  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node| or |penalty_node|}
+  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node|, or |penalty_node|}
   end;
 done1: if r<>temp_head then
   begin link(r):=null; flush_node_list(link(temp_head));
@@ -17502,7 +17520,8 @@
 
 @<Glob...@>=
 @!hc:array[0..65] of 0..256; {word to be hyphenated}
-@!hn:small_number; {the number of positions occupied in |hc|}
+@!hn:0..64; {the number of positions occupied in |hc|;
+                                  not always a |small_number|}
 @!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result}
 @!hf:internal_font_number; {font number of the letters in |hc|}
 @!hu:array[0..63] of 0..256; {like |hc|, before conversion to lowercase}
@@ -17644,7 +17663,7 @@
 @ @<Local variables for hyphenation@>=
 @!i,@!j,@!l:0..65; {indices into |hc| or |hu|}
 @!q,@!r,@!s:pointer; {temporary registers for list manipulation}
-@!bchar:halfword; {right boundary character of hyphenated word, or |non_char|}
+@!bchar:halfword; {boundary character of hyphenated word, or |non_char|}
 
 @ \TeX\ will never insert a hyphen that has fewer than
 \.{\\lefthyphenmin} letters before it or fewer than
@@ -17766,7 +17785,7 @@
 function reconstitute(@!j,@!n:small_number;@!bchar,@!hchar:halfword):
   small_number;
 label continue,done;
-var @!p:pointer; {temporary register for list manipulation}
+var @!p:pointer; {temporary register for list manipulation} 
 @!t:pointer; {a node being appended to}
 @!q:four_quarters; {character information or a lig/kern instruction}
 @!cur_rh:halfword; {hyphen character for ligature testing}
@@ -18378,7 +18397,7 @@
 is |trie_op_ptr|.
 
 @<Glob...@>=
-@!init@! trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
+@!init @!trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
   {trie op codes for quadruples}
 @!trie_used:array[ASCII_code] of quarterword;
   {largest opcode used so far for this language}
@@ -18556,7 +18575,7 @@
 @d trie_back(#)==trie[#].lh {backward links in |trie| holes}
 
 @<Glob...@>=
-@!init@!trie_taken:packed array[1..trie_size] of boolean;
+@!init @!trie_taken:packed array[1..trie_size] of boolean;
   {does a family start here?}
 @t\hskip10pt@>@!trie_min:array[ASCII_code] of trie_pointer;
   {the first possible slot for each character}
@@ -19213,7 +19232,8 @@
 @!last_glue:pointer; {used to implement \.{\\lastskip}}
 @!last_penalty:integer; {used to implement \.{\\lastpenalty}}
 @!last_kern:scaled; {used to implement \.{\\lastkern}}
-@!insert_penalties:integer; {sum of the penalties for held-over insertions}
+@!insert_penalties:integer; {sum of the penalties for insertions
+  that were held over}
 
 @ @<Put each...@>=
 primitive("pagegoal",set_page_dimen,0);
@@ -19914,7 +19934,7 @@
 in internal vertical mode, and \TeX\ will do the following:
 
 @<Resume the page builder after an output routine has come to an end@>=
-begin if (loc<>null) or
+begin if (loc<>null) or 
  ((token_type<>output_text)and(token_type<>backed_up)) then
   @<Recover from an unbalanced output routine@>;
 end_token_list; {conserve stack space in case more outputs are triggered}
@@ -20077,7 +20097,7 @@
 @!main_k:font_index; {index into |font_info|}
 @!main_p:pointer; {temporary register for list manipulation}
 @!main_s:integer; {space factor value}
-@!bchar:halfword; {right boundary character of current font, or |non_char|}
+@!bchar:halfword; {boundary character of current font, or |non_char|}
 @!false_bchar:halfword; {nonexistent character matching |bchar|, or |non_char|}
 @!cancel_boundary:boolean; {should the left boundary be ignored?}
 @!ins_disc:boolean; {should we insert a discretionary node?}
@@ -20599,7 +20619,7 @@
 
 @ Many of the actions related to box-making are triggered by the appearance
 of braces in the input. For example, when the user says `\.{\\hbox}
-\.{to} \.{100pt\{$\langle\,\hbox{hlist}\,\rangle$\}}' in vertical mode,
+\.{to} \.{100pt\{$\langle\,\hbox{\rm hlist}\,\rangle$\}}' in vertical mode,
 the information about the box size (100pt, |exactly|) is put onto |save_stack|
 with a level boundary word just above it, and |cur_group:=adjusted_hbox_group|;
 \TeX\ enters restricted horizontal mode to process the hlist. The right
@@ -22785,6 +22805,7 @@
 
 @ @<Initialize table entries...@>=
 text(frozen_protection):="inaccessible";
+ at .inaccessible@>
 
 @ Here's an example of the way many of the following routines operate.
 (Unfortunately, they aren't all as simple as this.)
@@ -23618,7 +23639,7 @@
 @ @d show_code=0 { \.{\\show} }
 @d show_box_code=1 { \.{\\showbox} }
 @d show_the_code=2 { \.{\\showthe} }
- at d show_lists=3 { \.{\\showlists} }
+ at d show_lists_code=3 { \.{\\showlists} }
 
 @<Put each...@>=
 primitive("show",xray,show_code);
@@ -23627,14 +23648,14 @@
 @!@:show_box_}{\.{\\showbox} primitive@>
 primitive("showthe",xray,show_the_code);
 @!@:show_the_}{\.{\\showthe} primitive@>
-primitive("showlists",xray,show_lists);
-@!@:show_lists_}{\.{\\showlists} primitive@>
+primitive("showlists",xray,show_lists_code);
+@!@:show_lists_code_}{\.{\\showlists} primitive@>
 
 @ @<Cases of |print_cmd_chr|...@>=
 xray: case chr_code of
   show_box_code:print_esc("showbox");
   show_the_code:print_esc("showthe");
-  show_lists:print_esc("showlists");
+  show_lists_code:print_esc("showlists");
   othercases print_esc("show")
   endcases;
 
@@ -23643,7 +23664,7 @@
 label common_ending;
 var p:pointer; {tail of a token list to show}
 begin case cur_chr of
-show_lists: begin begin_diagnostic; show_activities;
+show_lists_code: begin begin_diagnostic; show_activities;
   end;
 show_box_code: @<Show the current contents of a box@>;
 show_code: @<Show the current meaning of a token, then |goto common_ending|@>;
@@ -23723,8 +23744,8 @@
 
 The global variable |format_ident| is a string that is printed right
 after the |banner| line when \TeX\ is ready to start. For \.{INITEX} this
-string says simply `\.{(INITEX)}'; for other versions of \TeX\ it says,
-for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
+string says simply `\.{ (INITEX)}'; for other versions of \TeX\ it says,
+for example, `\.{ (preloaded format=plain 1982.11.19)}', showing the year,
 month, and day that the format file was created. We have |format_ident=0|
 before \TeX's tables are loaded.
 
@@ -23815,6 +23836,8 @@
 @ The inverse macros are slightly more complicated, since we need to check
 the range of the values we are reading in. We say `|undump(a)(b)(x)|' to
 read an integer value |x| that is supposed to be in the range |a<=x<=b|.
+System error messages should be suppressed when undumping.
+@^system dependencies@>
 
 @d undump_wd(#)==begin get(fmt_file); #:=fmt_file^;@+end
 @d undump_int(#)==begin get(fmt_file); #:=fmt_file^.int;@+end
@@ -24289,17 +24312,17 @@
 |str_room| or |make_string| at this time, because a call on |overflow|
 might lead to an infinite loop.
 @^system dependencies@>
-
-Actually there's one way to get error messages, via |prepare_mag|;
-but that can't cause infinite recursion.
+(Actually there's one way to get error messages, via |prepare_mag|;
+but that can't cause infinite recursion.)
 @^recursion@>
 
-This program doesn't bother to close the input files that may still be open.
+If |final_cleanup| is bypassed, this program doesn't bother to close
+the input files that may still be open.
 
 @<Last-minute...@>=
 procedure close_files_and_terminate;
 var k:integer; {all-purpose index}
-begin @<Finish the extensions@>;
+begin @<Finish the extensions@>; new_line_char:=-1;
 @!stat if tracing_stats>0 then @<Output statistics about this job@>;@;@+tats@/
 wake_up_terminal; @<Finish the \.{DVI} file@>;
 if log_opened then
@@ -24355,7 +24378,7 @@
 procedure final_cleanup;
 label exit;
 var c:small_number; {0 for \.{\\end}, 1 for \.{\\dump}}
-begin c:=cur_chr;
+begin c:=cur_chr; if c<>1 then new_line_char:=-1;
 if job_name=0 then open_log_file;
 while input_ptr>0 do
   if state=token_list then end_token_list at +else end_file_reading;
@@ -24459,14 +24482,15 @@
 @!debug procedure debug_help; {routine to display various things}
 label breakpoint,exit;
 var k,@!l,@!m,@!n:integer;
-begin loop begin wake_up_terminal;
+begin clear_terminal;
+  loop begin wake_up_terminal;
   print_nl("debug # (-1 to exit):"); update_terminal;
 @.debug \#@>
   read(term_in,m);
   if m<0 then return
   else if m=0 then
-    begin goto breakpoint;@\ {go to every label at least once}
-    breakpoint: m:=0; @{'BREAKPOINT'@}@\
+    begin goto breakpoint;@/ {go to every declared label at least once}
+    breakpoint: m:=0; @{'BREAKPOINT'@}@/
     end
   else  begin read(term_in,n);
     case m of

Modified: trunk/Build/source/texk/web2c/tftopl.web
===================================================================
--- trunk/Build/source/texk/web2c/tftopl.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/tftopl.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -28,7 +28,7 @@
 \def\title{TF\lowercase{to}PL}
 \def\contentspagenumber{201}
 \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 The {\ttitlefont TFtoPL} processor}
@@ -782,7 +782,7 @@
 @* Doing it.
 \TeX\ checks the information of a \.{TFM} file for validity as the
 file is being read in, so that no further checks will be needed when
-typesetting is going on. And when it finds something wrong, it justs
+typesetting is going on. And when it finds something wrong, it just
 calls the file ``bad,'' without identifying the nature of the problem,
 since \.{TFM} files are supposed to be good almost all of the time.
 

Modified: trunk/Build/source/texk/web2c/triptest.test
===================================================================
--- trunk/Build/source/texk/web2c/triptest.test	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptest.test	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,6 +1,6 @@
 #! /bin/sh -vx
 # $Id$
-# Copyright 2017-2019 Karl Berry <tex-live at tug.org>
+# Copyright 2017-2021 Karl Berry <tex-live at tug.org>
 # Copyright 2009-2014 Peter Breitenlohner <tex-live at tug.org>
 # You may freely use, modify and/or distribute this file.
 
@@ -31,7 +31,7 @@
 	s/[1-9] hyphenation exceptions* out of [1-9].*/X hyphenation exceptions out of YYY/
 	s/[1-9][0-9]* strings of total length [1-9].*/XXXX strings of total length YYYYY/
 	s/9 ops out of [1-9][0-9]*/9 ops out of YYY/
-	s/TeX output 20..\...\...:..../TeX output 20YY.MM.DD:hhmm/
+	s/TeX output ....\...\...:..../TeX output YYYY.MM.DD:hhmm/
 	_EOF
 
 # x86 glue rounding

Modified: trunk/Build/source/texk/web2c/triptrap/README
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/README	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/README	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,12 +1,13 @@
+$Id$
+(This file is public domain.)
+
 web2c/triptrap -- The trip and trap tests are Knuth's torture tests for
-TeX and Metafont.  The MetaPost test is also named `trap', so I've
-renamed the conflicting files to `mftrap...' and `mptrap...'.  (The
-contents of all files remain absolutely unaltered, of course.)
+TeX and Metafont.  The MetaPost test is also named `trap', so
+renamed the conflicting files to `mftrap...' and `mptrap...'. 
+The contents of all files remain absolutely unaltered, of course.
 
-The tests are exercised in the web2c distribution via `make trip trap mptrap'
-(from the top-level or web2c/ directories).  They do not and cannot
-exercise the path searching capabilities; for that, a few ``normal''
-test runs before and after installation should suffice.
+The tests are exercised in TeX Live via `make triptrap' in the web2c/
+directory.
 
 {trip,mftrap,mptrap}.diffs -- show the diffs from Knuth's originals as
 generated on my development machine. tripman.tex, trapman.tex, and
@@ -28,9 +29,10 @@
   hyphenation exception table is to be dynamic at all).  Knuth has said
   this discrepancy is ok.
 
-For trap, additionally, the capsule numbers will be different.  We
-believe this is because the master trap.log was not updated completed
-after the 2.7182818 (2014) tune-up, and have asked Knuth to review.
+For trap, additionally, the capsule numbers have sometimes been
+different, because the master trap.log was not updated completely after
+the 2.7182818 (2014) tune-up, as confirmed by Knuth. The 2.7182818 (2021)
+tuneup restores correct values.
 
 texmf.cnf -- sets up various constants the way the tests want them.  Not
 all constants can be changed, alas, but this suffices to avoid building


Property changes on: trunk/Build/source/texk/web2c/triptrap/README
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Date Author Id Revision
\ No newline at end of property
Modified: trunk/Build/source/texk/web2c/triptrap/mftrap.diffs
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/mftrap.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/mftrap.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,154 +1,145 @@
+#! /bin/sh -vx
+# $Id: mftraptest.test 53154 2019-12-17 19:06:20Z karl $
+# Copyright 2017-2021 Karl Berry <tex-live at tug.org>
+# Copyright 2009-2014 Peter Breitenlohner <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL;  LANGUAGE=C; export LANGUAGE
++ LC_ALL=C
++ export LC_ALL
++ LANGUAGE=C
++ export LANGUAGE
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+TEXMFCNF=$testdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/triptrap
++ export TEXMFCNF
+
+rm -rf trapdir
++ rm -rf trapdir
+mkdir trapdir
++ mkdir trapdir
+cd trapdir
++ cd trapdir
+mkdir a b
++ mkdir a b
+
+# See triptrap/README for explanation of why we believe these diffs are ok,
+# notably including the capsule numbers.
+
+# TeX Live generic
+cat >filter <<-\_EOF
+	s,^\*\*(trap\.mf,** \&trap  trap \
+	(trap.mf,
+	s/ (TeX Live 20[^)]*)//
+	s/base=trap [^)][^)]*)/base=trap)/
+	s/)  [0-9A-Z: ]*$/)/
+	s/usage [1-9][0-9&]* ([1-9][0-9&]* still/usage XX\&XX (YYY\&YYYYY still/
+	s/[1-9][0-9]* strings of total length [1-9][0-9]*/XXXX strings of total length YYYYY/
+	s/[1-9][0-9]* strings out of [1-9].*/XX strings out of YYY/
+	s/[1-9][0-9]* string characters out of [1-9].*/XXXX string characters out of YYYYY/
+	s/tokens out of [1-9][0-9]*/tokens out of YYYY/
+	s/out of [1-9][0-9]*i,[0-9nrpb,]*/out of YYi,YYYn,YYYr,YYYp,YYYb/
+	s/out of [1-9][0-9]*w,[0-9hdilkep,]*)/out of YYYw,YYh,YYd,YYi,YYYYl,YYYk,YYYe,YYp)/
+	s/METAFONT output ....\...\...:.../METAFONT output YYYY.MM.DD:hhmm/
+	_EOF
++ cat
+
+# Capsule numbers
+cat >>filter <<-\_EOF
+	s/ %CA$/ %/
+	s/^PSULE1675/CAPSULE1172/
+	s/%CAPSULE[1-9][0-9]*/%CAPSULEnnnn/g
+	_EOF
++ cat
+
+echo ">>> Running TRAP test for Metafont." >&2
++ echo '>>> Running TRAP test for Metafont.'
 >>> Running TRAP test for Metafont.
+echo ">>> See $testdir/mftrap.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/triptrap/mftrap.diffs for example of acceptable diffs.'
 >>> See SRCDIR/triptrap/mftrap.diffs for example of acceptable diffs.
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+# get same filename in log
+rm -f trap.mf
++ rm -f trap.mf
+$LN_S $testdir/trap.mf . || exit 1
 + ln -s SRCDIR/triptrap/trap.mf .
+
+rm -f trap.base
++ rm -f trap.base
+./mf --progname=inimf <$testdir/mftrap1.in >mftrapin.fot
 + ./mf --progname=inimf
+if test ! -s trap.base; then
+  echo "*** trap.base not created by mftrap1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trap.base
+mv trap.log mftrapin.log || exit 1
 + mv trap.log mftrapin.log
+diff $testdir/mftrapin.log mftrapin.log
 + diff SRCDIR/triptrap/mftrapin.log mftrapin.log
 1c1
-< This is METAFONT, Version 2.7182818 (INIMF)  7 JAN 2014 17:51
+< This is METAFONT, Version 2.71828182 (INIMF)  4 JUL 1776 12:00
 ---
-> This is METAFONT, Version 2.7182818 (TeX Live 2015) (INIMF)  12 APR 2015 16:22
+> This is METAFONT, Version 2.71828182 (INIMF)  27 JAN 2021 18:03
 150c150
-< String usage 26&83 (891&11438 still untouched)
+< String usage 26&83 (892&11481 still untouched)
 ---
-> String usage 30&98 (6386&79448 still untouched)
+> String usage 30&98 (6386&79447 still untouched)
 176,177c176,177
-<  (preloaded base=trap 2014.1.7)
-< 1117 strings of total length 20614
+<  (preloaded base=trap 1776.7.4)
+< 1116 strings of total length 20570
 ---
->  (preloaded base=trap 2015.4.12)
-> 1123 strings of total length 20613
+>  (preloaded base=trap 2021.1.27)
+> 1123 strings of total length 20614
+
+./mf --progname=inimf <$testdir/mftrap2.in >mftrap.fot
 + ./mf --progname=inimf
+mv trap.log mftrap.log || exit 1
 + mv trap.log mftrap.log
+mv trap.tfm mftrap.tfm || exit 1
 + mv trap.tfm mftrap.tfm
+diff $testdir/mftrap.fot mftrap.fot
 + diff SRCDIR/triptrap/mftrap.fot mftrap.fot
 1,3c1,2
-< This is METAFONT, Version 2.7182818 (INIMF)
+< This is METAFONT, Version 2.71828182 (INIMF)
 < ** &trap  trap 
 < (trap.mf
 ---
-> This is METAFONT, Version 2.7182818 (TeX Live 2015) (INIMF)
+> This is METAFONT, Version 2.71828182 (TeX Live 2021/dev) (INIMF)
 > **(trap.mf
 39c38
-< String usage 41&161 (815&7634 still untouched)
+< String usage 41&161 (816&7678 still untouched)
 ---
-> String usage 50&202 (6300&75594 still untouched)
+> String usage 50&202 (6300&75593 still untouched)
+diff $testdir/mftrap.log mftrap.log
 + diff SRCDIR/triptrap/mftrap.log mftrap.log
 1c1
-< This is METAFONT, Version 2.7182818 (preloaded base=trap 2014.1.7)  7 JAN 2014 18:11
+< This is METAFONT, Version 2.71828182 (preloaded base=trap 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is METAFONT, Version 2.7182818 (TeX Live 2015) (preloaded base=trap 2015.4.12)  12 APR 2015 16:22
+> This is METAFONT, Version 2.71828182 (preloaded base=trap 2021.1.27)  27 JAN 2021 18:03
 1825c1825
-< String usage 24&92 (858&11309 still untouched)
+< String usage 24&92 (859&11353 still untouched)
 ---
-> String usage 30&119 (6346&79262 still untouched)
-3693,3695c3693,3695
-< xpart %CAPSULE1359=xx
-< %CAPSULE1367=2yy-2
-< %CAPSULE1375 = 3.3333xx+3.3333
----
-> xpart %CAPSULE1370=xx
-> %CAPSULE1378=2yy-2
-> %CAPSULE1386 = 3.3333xx+3.3333
-3755,3757c3755,3757
-< xpart %CAPSULE1049 = 8000o2-4000o1+1000o3+9
-< xpart %CAPSULE1383=xpart '
-< ypart %CAPSULE1383=ypart '
----
-> xpart %CAPSULE604 = 8000o2-4000o1+1000o3+9
-> xpart %CAPSULE1394=xpart '
-> ypart %CAPSULE1394=ypart '
-3760,3761c3760,3761
-< ### 4000o1 = -xpart %CAPSULE1049+8000o2+1000o3+9
-< ### -4.87383o2 = -oo-0.0004xpart %CAPSULE1049+0.39673o3-17.99643
----
-> ### 4000o1 = -xpart %CAPSULE604+8000o2+1000o3+9
-> ### -4.87383o2 = -oo-0.0004xpart %CAPSULE604+0.39673o3-17.99643
-3768c3768
-< ### -alfa=-xpart %CAPSULE1494
----
-> ### -alfa=-xpart %CAPSULE368
-3770,3771c3770,3771
-< {xpart((xpart %CAPSULE1494,0))}
-< ### -xpart %CAPSULE17=-%CAPSULE1176
----
-> {xpart((xpart %CAPSULE368,0))}
-> ### -xpart %CAPSULE17=-%CAPSULE1376
-3773,3775c3773,3775
-< {(%CAPSULE382)+(%CAPSULE1176)}
-< ### -%CAPSULE382=-%CAPSULE1893+%CAPSULE1176
-< ### -%CAPSULE1893=-ypart %CAPSULE1049
----
-> {(%CAPSULE382)+(%CAPSULE1376)}
-> ### -%CAPSULE382=-%CAPSULE1364+%CAPSULE1376
-> ### -%CAPSULE1364=-ypart %CAPSULE604
-3780c3780
-< ### p$=-ypart %CAPSULE604+1
----
-> ### p$=-ypart %CAPSULE1360+1
-3782,3793c3782,3793
-< {(2/3)*((-ypart %CAPSULE604+1,ypart %CAPSULE604))}
-< ### ypart %CAPSULE604=-xpart %CAPSULE604+1
-< ### -0.66667xpart %CAPSULE604=-xpart %CAPSULE1889
-< {-((xpart %CAPSULE1889,-xpart %CAPSULE1889+0.66667))}
-< ### xpart %CAPSULE1889=-xpart %CAPSULE1172
-< {((xpart %CAPSULE1049,ypart %CAPSULE1049))=((xpart %CAPSULE1172,-xpart %
-< CAPSULE1172-0.66667))}
-< ## xpart %CAPSULE1172=-ypart %CAPSULE1049-0.66667
-< ## ypart %CAPSULE1049=-xpart %CAPSULE1049-0.66667
-< ### -xpart %CAPSULE1049=-xpart %CAPSULE1172
-< {((xpart ',ypart '))=((xpart %CAPSULE1172,-xpart %CAPSULE1172-0.66667))}
-< ## xpart %CAPSULE1172=-ypart '-0.66667
----
-> {(2/3)*((-ypart %CAPSULE1360+1,ypart %CAPSULE1360))}
-> ### ypart %CAPSULE1360=-xpart %CAPSULE1360+1
-> ### -0.66667xpart %CAPSULE1360=-xpart %CAPSULE1744
-> {-((xpart %CAPSULE1744,-xpart %CAPSULE1744+0.66667))}
-> ### xpart %CAPSULE1744=-xpart %CAPSULE1675
-> {((xpart %CAPSULE604,ypart %CAPSULE604))=((xpart %CAPSULE1675,-xpart %CA
-> PSULE1675-0.66667))}
-> ## xpart %CAPSULE1675=-ypart %CAPSULE604-0.66667
-> ## ypart %CAPSULE604=-xpart %CAPSULE604-0.66667
-> ### -xpart %CAPSULE604=-xpart %CAPSULE1675
-> {((xpart ',ypart '))=((xpart %CAPSULE1675,-xpart %CAPSULE1675-0.66667))}
-> ## xpart %CAPSULE1675=-ypart '-0.66667
-3799c3799
-< ### -ooo=-%CAPSULE1494
----
-> ### -ooo=-%CAPSULE1051
-3801,3810c3801,3810
-< {(%CAPSULE1494)+(1)}
-< ### -%CAPSULE1494=-%CAPSULE1350+1
-< {(1/2)*(%CAPSULE1350)}
-< ### -0.5%CAPSULE1350=-%CAPSULE1367
-< {-(%CAPSULE1367)}
-< ### %CAPSULE1367=-%CAPSULE1893
-< {(2)*(%CAPSULE1893)}
-< ### -2%CAPSULE1893=-%CAPSULE1885
-< {(-0.5%CAPSULE1885-0.5)=(%CAPSULE1885)}
-< ## %CAPSULE1885=-0.33333
----
-> {(%CAPSULE1051)+(1)}
-> ### -%CAPSULE1051=-%CAPSULE1378+1
-> {(1/2)*(%CAPSULE1378)}
-> ### -0.5%CAPSULE1378=-%CAPSULE1370
-> {-(%CAPSULE1370)}
-> ### %CAPSULE1370=-%CAPSULE1362
-> {(2)*(%CAPSULE1362)}
-> ### -2%CAPSULE1362=-%CAPSULE1354
-> {(-0.5%CAPSULE1354-0.5)=(%CAPSULE1354)}
-> ## %CAPSULE1354=-0.33333
+> String usage 30&119 (6346&79261 still untouched)
 4235c4235
-< String usage 41&161 (815&7634 still untouched)
+< String usage 41&161 (816&7678 still untouched)
 ---
-> String usage 50&202 (6300&75594 still untouched)
+> String usage 50&202 (6300&75593 still untouched)
 4251,4252c4251,4252
-<  68 strings out of 883
-<  3752 string characters out of 11386
+<  68 strings out of 884
+<  3752 string characters out of 11430
 ---
 >  77 strings out of 6377
->  3793 string characters out of 79387
+>  3793 string characters out of 79386
 4254,4255c4254,4255
 <  289 symbolic tokens out of 2100
 <  8i,43n,14r,8p,167b stack positions out of 30i,100n,300r,150p,500b
@@ -159,18 +150,30 @@
 <   out of 256w,16h,16d,64i,5000l,500k,256e,50p)
 ---
 >   out of 256w,16h,16d,64i,15000l,2500k,256e,60p)
+
+./tftopl ./mftrap.tfm mftrap.pl || exit 1
 + ./tftopl ./mftrap.tfm mftrap.pl
+diff $testdir/mftrap.pl mftrap.pl || is_OK=false
 + diff SRCDIR/triptrap/mftrap.pl mftrap.pl
+
+./gftype -m -i ./trap.72270gf >trap.typ || exit 1
 + ./gftype -m -i ./trap.72270gf
+diff $testdir/trap.typ trap.typ
 + diff SRCDIR/triptrap/trap.typ trap.typ
 1c1
 < This is GFtype, Version 3.1
 ---
-> This is GFtype, Version 3.1 (TeX Live 2015)
+> This is GFtype, Version 3.1 (TeX Live 2021/dev)
 3c3
 < ' METAFONT output 2014.01.07:1811'
 ---
-> ' METAFONT output 2015.04.12:1622'
+> ' METAFONT output 2021.01.27:1803'
+
+for f in mftrapin.log mftrap.fot mftrap.log trap.typ; do
+  sed $testdir/$f -f filter >a/$f
+  sed $f -f filter >b/$f
+  diff a/$f b/$f || is_OK=false
+done
 + for f in mftrapin.log mftrap.fot mftrap.log trap.typ
 + sed SRCDIR/triptrap/mftrapin.log -f filter
 + sed mftrapin.log -f filter
@@ -187,7 +190,15 @@
 + sed SRCDIR/triptrap/trap.typ -f filter
 + sed trap.typ -f filter
 + diff a/trap.typ b/trap.typ
+
+$is_OK && {
+  echo ">>> All differences are acceptable." >&2
+} || {
+  echo "*** Error(s) found in mf trap test, investigate!" >&2
+  exit 1
+}
 + :
 + echo '>>> All differences are acceptable.'
 >>> All differences are acceptable.
-PASS: mftraptest
+PASS mftraptest.test (exit status: 0)
+PASS: mftraptest.test

Modified: trunk/Build/source/texk/web2c/triptrap/mftrap.fot
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/mftrap.fot	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/mftrap.fot	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,4 +1,4 @@
-This is METAFONT, Version 2.7182818 (INIMF)
+This is METAFONT, Version 2.71828182 (INIMF)
 ** &trap  trap 
 (trap.mf
 \*//*\trap\pass2!
@@ -36,7 +36,7 @@
 {qq:=pen}
 {showstats}
 Memory usage 1462&588 (104 still untouched)
-String usage 41&161 (815&7634 still untouched)
+String usage 41&161 (816&7678 still untouched)
 {[repeat the loop]}
 ! A group begun on line 163 never ended.
 <to be read again> 

Modified: trunk/Build/source/texk/web2c/triptrap/mftrap.log
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/mftrap.log	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/mftrap.log	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,4 +1,4 @@
-This is METAFONT, Version 2.7182818 (preloaded base=trap 2014.1.7)  7 JAN 2014 18:11
+This is METAFONT, Version 2.71828182 (preloaded base=trap 1776.7.4)  4 JUL 1776 12:00
 ** &trap  trap
 (trap.mf
 {if}
@@ -161,7 +161,7 @@
                    path
 l.25 path
           p[][]p,w,qw; qw=(1,-2)..(2,-1)..(2.5,0.5)..(1,2)..(...
-After `exitif <boolean exp>' I expect to see a semicolon.
+After `exitif <boolean expr>' I expect to see a semicolon.
 I shall pretend that one was there.
 
 {pair}
@@ -1822,7 +1822,7 @@
 
 {showstats}
 Memory usage 1084&202 (749 still untouched)
-String usage 24&92 (858&11309 still untouched)
+String usage 24&92 (859&11353 still untouched)
 {addto}
 {(path)yscaled(0.01666)}
 Path at line 82, before subdivision into octants:
@@ -3046,7 +3046,7 @@
                    substring
 l.124 ...aderbyte(48.5)substring
                                 (-9,9)of"long"; for\=0:\
-A colon should follow a headerbyte or fontinfo location.
+A colon should follow a headerbyte or fontdimen location.
 
 {-(9)}
 {((-9,9))substring("long")}
@@ -3690,9 +3690,9 @@
 alpha=0.45p3~+7
 {tracingcapsules:=1}
 {showdependencies}
-xpart %CAPSULE1359=xx
-%CAPSULE1367=2yy-2
-%CAPSULE1375 = 3.3333xx+3.3333
+xpart %CAPSULE1370=xx
+%CAPSULE1378=2yy-2
+%CAPSULE1386 = 3.3333xx+3.3333
 alpha=0.45p3~+7
 {show}
 {(1/3)*((3,6))}
@@ -3752,13 +3752,13 @@
 o5=0.44444o2+0.88889o1
 oo=1.7o2+1.6o1-18
 %CAPSULE382 = 3ooo-0.01o3
-xpart %CAPSULE1049 = 8000o2-4000o1+1000o3+9
-xpart %CAPSULE1383=xpart '
-ypart %CAPSULE1383=ypart '
+xpart %CAPSULE604 = 8000o2-4000o1+1000o3+9
+xpart %CAPSULE1394=xpart '
+ypart %CAPSULE1394=ypart '
 alpha=0.45p3~+7
 {numeric}
-### 4000o1 = -xpart %CAPSULE1049+8000o2+1000o3+9
-### -4.87383o2 = -oo-0.0004xpart %CAPSULE1049+0.39673o3-17.99643
+### 4000o1 = -xpart %CAPSULE604+8000o2+1000o3+9
+### -4.87383o2 = -oo-0.0004xpart %CAPSULE604+0.39673o3-17.99643
 #### o6=-0.00027
 ### -0.04366o3 = -o4+0.46689oo+8.40439
 ### -o4 = -o5
@@ -3765,49 +3765,49 @@
 ### 0.22894o5 = -%CAPSULE382+0.10689oo+3ooo+1.92412
 {begingroup}
 {pair}
-### -alfa=-xpart %CAPSULE1494
+### -alfa=-xpart %CAPSULE368
 {endgroup}
-{xpart((xpart %CAPSULE1494,0))}
-### -xpart %CAPSULE17=-%CAPSULE1176
+{xpart((xpart %CAPSULE368,0))}
+### -xpart %CAPSULE17=-%CAPSULE1376
 {endgroup}
-{(%CAPSULE382)+(%CAPSULE1176)}
-### -%CAPSULE382=-%CAPSULE1893+%CAPSULE1176
-### -%CAPSULE1893=-ypart %CAPSULE1049
+{(%CAPSULE382)+(%CAPSULE1376)}
+### -%CAPSULE382=-%CAPSULE1364+%CAPSULE1376
+### -%CAPSULE1364=-ypart %CAPSULE604
 {begingroup}
 {save}
 {(1)-(p$)}
 {restoring p}
-### p$=-ypart %CAPSULE604+1
+### p$=-ypart %CAPSULE1360+1
 {endgroup}
-{(2/3)*((-ypart %CAPSULE604+1,ypart %CAPSULE604))}
-### ypart %CAPSULE604=-xpart %CAPSULE604+1
-### -0.66667xpart %CAPSULE604=-xpart %CAPSULE1889
-{-((xpart %CAPSULE1889,-xpart %CAPSULE1889+0.66667))}
-### xpart %CAPSULE1889=-xpart %CAPSULE1172
-{((xpart %CAPSULE1049,ypart %CAPSULE1049))=((xpart %CAPSULE1172,-xpart %
-CAPSULE1172-0.66667))}
-## xpart %CAPSULE1172=-ypart %CAPSULE1049-0.66667
-## ypart %CAPSULE1049=-xpart %CAPSULE1049-0.66667
-### -xpart %CAPSULE1049=-xpart %CAPSULE1172
-{((xpart ',ypart '))=((xpart %CAPSULE1172,-xpart %CAPSULE1172-0.66667))}
-## xpart %CAPSULE1172=-ypart '-0.66667
+{(2/3)*((-ypart %CAPSULE1360+1,ypart %CAPSULE1360))}
+### ypart %CAPSULE1360=-xpart %CAPSULE1360+1
+### -0.66667xpart %CAPSULE1360=-xpart %CAPSULE1744
+{-((xpart %CAPSULE1744,-xpart %CAPSULE1744+0.66667))}
+### xpart %CAPSULE1744=-xpart %CAPSULE1675
+{((xpart %CAPSULE604,ypart %CAPSULE604))=((xpart %CAPSULE1675,-xpart %CA
+PSULE1675-0.66667))}
+## xpart %CAPSULE1675=-ypart %CAPSULE604-0.66667
+## ypart %CAPSULE604=-xpart %CAPSULE604-0.66667
+### -xpart %CAPSULE604=-xpart %CAPSULE1675
+{((xpart ',ypart '))=((xpart %CAPSULE1675,-xpart %CAPSULE1675-0.66667))}
+## xpart %CAPSULE1675=-ypart '-0.66667
 ## xpart '=-ypart '-0.66667
 {begingroup}
 {(0.5)*(ooo)}
 {begingroup}
 {numeric}
-### -ooo=-%CAPSULE1494
+### -ooo=-%CAPSULE1051
 {endgroup}
-{(%CAPSULE1494)+(1)}
-### -%CAPSULE1494=-%CAPSULE1350+1
-{(1/2)*(%CAPSULE1350)}
-### -0.5%CAPSULE1350=-%CAPSULE1367
-{-(%CAPSULE1367)}
-### %CAPSULE1367=-%CAPSULE1893
-{(2)*(%CAPSULE1893)}
-### -2%CAPSULE1893=-%CAPSULE1885
-{(-0.5%CAPSULE1885-0.5)=(%CAPSULE1885)}
-## %CAPSULE1885=-0.33333
+{(%CAPSULE1051)+(1)}
+### -%CAPSULE1051=-%CAPSULE1378+1
+{(1/2)*(%CAPSULE1378)}
+### -0.5%CAPSULE1378=-%CAPSULE1370
+{-(%CAPSULE1370)}
+### %CAPSULE1370=-%CAPSULE1362
+{(2)*(%CAPSULE1362)}
+### -2%CAPSULE1362=-%CAPSULE1354
+{(-0.5%CAPSULE1354-0.5)=(%CAPSULE1354)}
+## %CAPSULE1354=-0.33333
 {(oo)=(-0.33333)}
 ## oo=-0.33333
 {endgroup}
@@ -4232,7 +4232,7 @@
 {qq:=pen}
 {showstats}
 Memory usage 1462&588 (104 still untouched)
-String usage 41&161 (815&7634 still untouched)
+String usage 41&161 (816&7678 still untouched)
 {[repeat the loop]}
 ! A group begun on line 163 never ended.
 <to be read again> 
@@ -4248,8 +4248,8 @@
 (end occurred when if on line 36 was incomplete)
 (end occurred when elseif on line 21 was incomplete) 
 Here is how much of METAFONT's memory you used:
- 68 strings out of 883
- 3752 string characters out of 11386
+ 68 strings out of 884
+ 3752 string characters out of 11430
  2897 words of memory out of 3001
  289 symbolic tokens out of 2100
  8i,43n,14r,8p,167b stack positions out of 30i,100n,300r,150p,500b

Modified: trunk/Build/source/texk/web2c/triptrap/mftrapin.log
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/mftrapin.log	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/mftrapin.log	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,4 +1,4 @@
-This is METAFONT, Version 2.7182818 (INIMF)  7 JAN 2014 17:51
+This is METAFONT, Version 2.71828182 (INIMF)  4 JUL 1776 12:00
 **\input trap
 (trap.mf
 >> << == >> ::: ||`` ''--!! ??## && @@ $$[[]]{{ }}((5.5 0.5))
@@ -147,7 +147,7 @@
 {for}
 {showstats}
 Memory usage 291&41 (1922 still untouched)
-String usage 26&83 (891&11438 still untouched)
+String usage 26&83 (892&11481 still untouched)
 ! OK.
 l.17 ...ing:fi endfor showstats;
                                  let!!=skipto;
@@ -173,7 +173,7 @@
 {elseif}
  )
 Beginning to dump on file trap.base
- (preloaded base=trap 2014.1.7)
-1117 strings of total length 20614
+ (preloaded base=trap 1776.7.4)
+1116 strings of total length 20570
 395 memory locations dumped; current usage is 317&67
 265 symbolic tokens

Modified: trunk/Build/source/texk/web2c/triptrap/mptrap.diffs
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/mptrap.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/mptrap.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,15 +1,50 @@
+#! /bin/sh -vx
+# Public domain.
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+
+TEXMFCNF=$testdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/triptrap
++ export TEXMFCNF
+
+rm -rf mptrapdir
++ rm -rf mptrapdir
+mkdir mptrapdir
++ mkdir mptrapdir
+cd mptrapdir
++ cd mptrapdir
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\'''
+
+echo ">>> Running MPTRAP test for MetaPost." >&2
++ echo '>>> Running MPTRAP test for MetaPost.'
 >>> Running MPTRAP test for MetaPost.
+echo ">>> See $testdir/mptrap.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/triptrap/mptrap.diffs for example of acceptable diffs.'
 >>> See SRCDIR/triptrap/mptrap.diffs for example of acceptable diffs.
+
+set -x
++ set -x
+
+./pltotf $testdir/trapf.pl trapf.tfm
 + ./pltotf SRCDIR/triptrap/trapf.pl trapf.tfm
+
+# get same filename in log
+$LN_S $testdir/mtrap.mp . || exit 1
 + ln -s SRCDIR/triptrap/mtrap.mp .
+
+./mpost --ini mtrap
 + ./mpost --ini mtrap
-This is MetaPost, version 1.999 (TeX Live 2015) (kpathsea version 6.2.1)
+This is MetaPost, version 2.00 (TeX Live 2021/dev) (kpathsea version 6.3.3/dev)
 (./mtrap.mp
+diff $testdir/mtrap.log mtrap.log
 + diff SRCDIR/triptrap/mtrap.log mtrap.log
 1c1
 < This is MetaPost, version 1.203 (kpathsea version 3.5.7dev) (INIMP)  25 MAY 2009 12:47
 ---
-> This is MetaPost, version 1.999 (TeX Live 2015) (kpathsea version 6.2.1)  12 APR 2015 16:22
+> This is MetaPost, version 2.00 (TeX Live 2021/dev) (kpathsea version 6.3.3/dev)  27 JAN 2021 18:03
 4,5c4,5
 < Memory usage 19&13 (3972 still untouched)
 < String usage 3&12 (101&7774 now untouched)
@@ -185,7 +220,7 @@
 929c929
 < >> "%%Creator: MetaPost 1.203"
 ---
-> >> "%%Creator: MetaPost 1.999"
+> >> "%%Creator: MetaPost 2.00"
 931c931
 < >> "%*Font: trapf 9.9628 9.96265 35:c008"
 ---
@@ -205,7 +240,7 @@
 < String usage 16&50 (46&6607 now untouched)
 ---
 > Memory usage 15664
-> String usage 70&1484
+> String usage 70&1483
 966,968c966,968
 < >> 42
 < Memory usage 359&13 (2867 still untouched)
@@ -213,7 +248,7 @@
 ---
 > >> 41
 > Memory usage 15664
-> String usage 90&2139
+> String usage 90&2138
 973,976c973,976
 < Memory usage 359&13 (2867 still untouched)
 < String usage 17&84 (1&5292 now untouched)
@@ -221,13 +256,13 @@
 < String usage 30&97 (43&7558 now untouched)
 ---
 > Memory usage 15664
-> String usage 91&2147
+> String usage 91&2146
 > Memory usage 15664
-> String usage 152&2401
+> String usage 152&2400
 978c978
 < >> "%%CreationDate: 2009.05.25:1247"
 ---
-> >> "%%CreationDate: 2015.04.12:1622"
+> >> "%%CreationDate: 2021.01.27:1803"
 982,984c982,984
 < >> "%*Font: trapf 9.9628 9.96265 35:c008"
 < Memory usage 359&13 (2867 still untouched)
@@ -235,13 +270,13 @@
 ---
 > >> "%*Font: trapf 9.96266 9.96265 35:c008"
 > Memory usage 15664
-> String usage 152&2401
+> String usage 152&2400
 987,988c987,988
 < Memory usage 359&13 (2867 still untouched)
 < String usage 30&88 (61&6618 now untouched)
 ---
 > Memory usage 16432
-> String usage 172&2909
+> String usage 172&2908
 999,1001c999,1001
 < The equation I just processed has given some variable
 < a value of 4096 or more. Continue and I'll try to cope
@@ -255,19 +290,19 @@
 < String usage 30&88 (61&6618 now untouched)
 ---
 > Memory usage 16432
-> String usage 172&2909
+> String usage 172&2908
 1022,1023c1022,1023
 < Memory usage 361&13 (2867 still untouched)
 < String usage 31&96 (60&6610 now untouched)
 ---
 > Memory usage 16432
-> String usage 172&2909
+> String usage 172&2908
 1071,1072c1071,1072
 < Memory usage 361&13 (2867 still untouched)
 < String usage 31&96 (59&6602 now untouched)
 ---
 > Memory usage 16432
-> String usage 173&2917
+> String usage 173&2916
 1076,1081c1076,1079
 <  37 strings out of 104
 <  508 string characters out of 7786
@@ -276,19 +311,20 @@
 <  5i,42n,6p,99b,2f stack positions out of 300i,84n,1500p,200b,25f
 <  8 string compactions (moved 2756 characters, 222 strings)
 ---
->  173 strings using 2917 characters
+>  173 strings using 2916 characters
 >  18856 bytes of node memory
->  317 symbolic tokens
->  6i,48n,6p,99b,2f stack positions out of 16i,96n,7p,200b,4f
+>  320 symbolic tokens
+>  6i,49n,6p,99b,2f stack positions out of 16i,98n,7p,200b,4f
 1082a1081
 > 
+diff $testdir/mtrap.0 mtrap.0
 + diff SRCDIR/triptrap/mtrap.0 mtrap.0
 4,5c4,5
 < %%Creator: MetaPost 1.203
 < %%CreationDate: 2009.05.25:1247
 ---
-> %%Creator: MetaPost 1.999
-> %%CreationDate: 2015.04.12:1622
+> %%Creator: MetaPost 2.00
+> %%CreationDate: 2021.01.27:1803
 7c7
 < %*Font: trapf 9.9628 9.96265 35:c008
 ---
@@ -303,13 +339,14 @@
 < 0.00064 1 scale stroke grestore
 ---
 > 1.00067 1 scale stroke grestore
+diff $testdir/mtrap.1 mtrap.1
 + diff SRCDIR/triptrap/mtrap.1 mtrap.1
 4,5c4,5
 < %%Creator: MetaPost 1.203
 < %%CreationDate: 2009.05.25:1247
 ---
-> %%Creator: MetaPost 1.999
-> %%CreationDate: 2015.04.12:1622
+> %%Creator: MetaPost 2.00
+> %%CreationDate: 2021.01.27:1803
 23,25c23,24
 <  0 0 0 setrgbcolor 1
 <  0 dtransform exch truncate exch idtransform pop setlinewidth [] 0 setdash
@@ -327,17 +364,27 @@
 < [0 -0.00064 -1 0 0 0] concat stroke grestore
 ---
 > [0 -1.00067 -1 0 0 0] concat stroke grestore
+diff $testdir/writeo writeo
 + diff SRCDIR/triptrap/writeo writeo
+diff $testdir/writeo.2 writeo.2
 + diff SRCDIR/triptrap/writeo.2 writeo.2
+
+$LN_S $testdir/trap.mp . || exit 1
 + ln -s SRCDIR/triptrap/trap.mp .
+$LN_S $testdir/trap.mpx . || exit 1
 + ln -s SRCDIR/triptrap/trap.mpx .
+
+## Why is --jobname required? And why --ini?
+./mpost --ini --jobname=trap <$testdir/mptrap1.in >mptrapin.fot
 + ./mpost --ini --jobname=trap
+mv trap.log mptrapin.log || exit 1
 + mv trap.log mptrapin.log
+diff $testdir/mptrapin.log mptrapin.log
 + diff SRCDIR/triptrap/mptrapin.log mptrapin.log
 1c1
 < This is MetaPost, version 1.203 (kpathsea version 3.5.7dev) (INIMP)  25 MAY 2009 12:47
 ---
-> This is MetaPost, version 1.999 (TeX Live 2015) (kpathsea version 6.2.1)  12 APR 2015 16:22
+> This is MetaPost, version 2.00 (TeX Live 2021/dev) (kpathsea version 6.3.3/dev)  27 JAN 2021 18:03
 40,60c40,47
 < ! Missing `:' has been inserted.
 < <to be read again> 
@@ -532,5 +579,8 @@
 < 308 symbolic tokens
 ---
 > 
+
+exit 0
 + exit 0
-PASS: mplibdir/mptraptest
+PASS mplibdir/mptraptest.test (exit status: 0)
+PASS: mplibdir/mptraptest.test

Modified: trunk/Build/source/texk/web2c/triptrap/trap.typ
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/trap.typ	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/trap.typ	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,6 +1,6 @@
 This is GFtype, Version 3.1
 Options selected: Mnemonic output = true; pixel output = true.
-' METAFONT output 2014.01.07:1811'
+' METAFONT output 1776.07.04:1200'
 
 35: beginning of char 5: -4096<=m<=4094 -2<=n<=1
 (initially n=1) paint (4095)1

Modified: trunk/Build/source/texk/web2c/triptrap/trip.diffs
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/trip.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/trip.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,45 +1,150 @@
+#! /bin/sh -vx
+# $Id: triptest.test 53154 2019-12-17 19:06:20Z karl $
+# Copyright 2017-2021 Karl Berry <tex-live at tug.org>
+# Copyright 2009-2014 Peter Breitenlohner <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL;  LANGUAGE=C; export LANGUAGE
++ LC_ALL=C
++ export LC_ALL
++ LANGUAGE=C
++ export LANGUAGE
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+TEXMFCNF=$testdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/triptrap
++ export TEXMFCNF
+
+rm -rf tripdir
++ rm -rf tripdir
+mkdir tripdir
++ mkdir tripdir
+cd tripdir
++ cd tripdir
+mkdir a b
++ mkdir a b
+
+# See triptrap/README for explanation of why we believe these diffs are ok.
+
+# TeX Live generic
+cat >filter <<-\_EOF
+	s,^\*\*(\./trip\.tex ##,** \&trip  trip \
+	(trip.tex ##,
+	s/ (TeX Live 20[^)]*)//
+	s/(preloaded format=tex)/(INITEX)/
+	s/format=trip [^)][^)]*)/format=trip)/
+	s/)  [0-9A-Z: ]*$/)/
+	s,^(\./,(,
+	s/[1-9][0-9]* strings out of [1-9].*/XX strings out of YYY/
+	s/[1-9][0-9]* string characters out of [1-9].*/XXX string characters out of YYYY/
+	s/sequences out of [1-9].*/sequences out of YYYY/
+	s/[1-9] hyphenation exceptions* out of [1-9].*/X hyphenation exceptions out of YYY/
+	s/[1-9][0-9]* strings of total length [1-9].*/XXXX strings of total length YYYYY/
+	s/9 ops out of [1-9][0-9]*/9 ops out of YYY/
+	s/TeX output ....\...\...:.../TeX output YYYY.MM.DD:hhmm/
+	_EOF
++ cat
+
+# x86 glue rounding
+cat >>filter <<-\_EOF
+	s/ 16341\.999.*fil/ 16342.0fil/
+	s/ 16238\.999.*fil/ 16239.0fil/
+	s/ 16317\.999.*fil/ 16318.0fil/
+	s/ 16330\.999.*fil/ 16331.0fil/
+	s/ 16331\.999.*fil/ 16332.0fil/
+	s/ 16343\.999.*fil/ 16344.0fil/
+	s/ 9737\.587..fil/ 9737.58789fil/
+	s/down4 639342../down4 639342208/
+	s/y4 2039217./y4 203921760/
+	s/y0 2039217./y0 203921760/
+	_EOF
++ cat
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\'''
+
+echo ">>> Running TRIP test for TeX." >&2
++ echo '>>> Running TRIP test for TeX.'
 >>> Running TRIP test for TeX.
+echo ">>> See $testdir/trip.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/triptrap/trip.diffs for example of acceptable diffs.'
 >>> See SRCDIR/triptrap/trip.diffs for example of acceptable diffs.
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+./pltotf $testdir/trip.pl trip.tfm || exit 1
 + ./pltotf SRCDIR/triptrap/trip.pl trip.tfm
+
+./tftopl ./trip.tfm trip.pl || exit 1
 + ./tftopl ./trip.tfm trip.pl
+
+diff $testdir/trip.pl trip.pl || is_OK=false
 + diff SRCDIR/triptrap/trip.pl trip.pl
+
+# get same filename in log
+rm -f trip.tex
++ rm -f trip.tex
+$LN_S $testdir/trip.tex . || exit 1
 + ln -s SRCDIR/triptrap/trip.tex .
+
+rm -f trip.fmt
++ rm -f trip.fmt
+./tex --progname=initex --ini <$testdir/trip1.in >tripin.fot
 + ./tex --progname=initex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by trip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+mv trip.log tripin.log || exit 1
 + mv trip.log tripin.log
+diff $testdir/tripin.log tripin.log
 + diff SRCDIR/triptrap/tripin.log tripin.log
 1c1
-< This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+< This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 ---
-> This is TeX, Version 3.14159265 (TeX Live 2015) (INITEX)  12 APR 2015 16:22
+> This is TeX, Version 3.141592653 (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
 3c3
 < (trip.tex
 ---
 > (./trip.tex
 450,451c450,451
-<  (preloaded format=trip 2014.1.7)
-< 1326 strings of total length 23646
+<  (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
 ---
->  (preloaded format=trip 2015.4.12)
-> 1371 strings of total length 24606
+>  (preloaded format=trip 2021.1.27)
+> 1372 strings of total length 24645
 461c461
 < Hyphenation trie of length 273 has 9 ops out of 500
 ---
 > Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+./tex --progname=tex <$testdir/trip2.in >trip.fot
 + ./tex --progname=tex
+diff $testdir/trip.fot trip.fot
 + diff SRCDIR/triptrap/trip.fot trip.fot
 1,3c1,2
-< This is TeX, Version 3.14159265 (INITEX)
+< This is TeX, Version 3.141592653 (INITEX)
 < ** &trip  trip 
 < (trip.tex ##
 ---
-> This is TeX, Version 3.14159265 (TeX Live 2015) (preloaded format=tex)
+> This is TeX, Version 3.141592653 (TeX Live 2021/dev) (preloaded format=tex)
 > **(./trip.tex ##
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log trip.log
 + diff SRCDIR/triptrap/trip.log trip.log
 1c1
-< This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is TeX, Version 3.14159265 (TeX Live 2015) (preloaded format=trip 2015.4.12)  12 APR 2015 16:22
+> This is TeX, Version 3.141592653 (TeX Live 2021/dev) (preloaded format=trip 2021.1.27)  27 JAN 2021 18:03
 3c3
 < (trip.tex ##
 ---
@@ -80,35 +185,42 @@
 < \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil
-6380c6380
+6381c6381
 < (tripos.tex
 ---
 > (./tripos.tex
-7296,7297c7296,7297
+7297,7298c7297,7298
 <  47 strings out of 1674
-<  253 string characters out of 8354
+<  253 string characters out of 8367
 ---
->  44 strings out of 1629
->  261 string characters out of 15395
-7299c7299
+>  44 strings out of 1628
+>  261 string characters out of 15355
+7300c7300
 <  372 multiletter control sequences out of 2100
 ---
 >  372 multiletter control sequences out of 15000+0
-7301c7301
+7302c7302
 <  2 hyphenation exceptions out of 307
 ---
 >  1 hyphenation exception out of 659
+
+diff $testdir/tripos.tex tripos.tex || is_OK=false
++ diff SRCDIR/triptrap/tripos.tex tripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >trip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ trip.typ
 + diff SRCDIR/triptrap/trip.typ trip.typ
 1c1
 < This is DVItype, Version 3.6
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
-< ' TeX output 2014.01.07:0959'
+< ' TeX output 1776.07.04:1200'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
 419c419
 < 1121: down4 639342208 
 ---
@@ -119,6 +231,12 @@
 ---
 > 2535: y4 203921756 
 > 2540: y0 203921756 
+
+for f in tripin.log trip.fot trip.log trip.typ; do
+  sed $testdir/$f -f filter >a/$f
+  sed $f -f filter >b/$f
+  diff a/$f b/$f || is_OK=false
+done
 + for f in tripin.log trip.fot trip.log trip.typ
 + sed SRCDIR/triptrap/tripin.log -f filter
 + sed tripin.log -f filter
@@ -135,7 +253,15 @@
 + sed SRCDIR/triptrap/trip.typ -f filter
 + sed trip.typ -f filter
 + diff a/trip.typ b/trip.typ
+
+$is_OK && {
+  echo ">>> All differences are acceptable." >&2
+} || {
+  echo "*** Error(s) found in trip test, investigate!" >&2
+  exit 1
+}
 + :
 + echo '>>> All differences are acceptable.'
 >>> All differences are acceptable.
-PASS: triptest
+PASS triptest.test (exit status: 0)
+PASS: triptest.test

Modified: trunk/Build/source/texk/web2c/triptrap/trip.fot
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/trip.fot	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/trip.fot	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,4 +1,4 @@
-This is TeX, Version 3.14159265 (INITEX)
+This is TeX, Version 3.141592653 (INITEX)
 ** &trip  trip 
 (trip.tex ##
 ! Bad number (-7).

Modified: trunk/Build/source/texk/web2c/triptrap/trip.log
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/trip.log	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/trip.log	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,4 +1,4 @@
-This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 ** &trip  trip
 (trip.tex ##
 {vertical mode: \tracingrestores}
@@ -2428,7 +2428,7 @@
 ### display math mode entered at line 249
 \mathord
 .{}
-this will be denominator of:
+this will begin denominator of:
 \fraction, thickness = default
 \\mathord []
 \\mathord []
@@ -3021,7 +3021,7 @@
 ./.\.\fam1 q
 ././\rule(9.0+*)x0.4
 \mathord
-this will be denominator of:
+this will begin denominator of:
 \fraction, thickness 9.0
 \{}
 ### math mode entered at line 280
@@ -5015,14 +5015,15 @@
 <to be read again> 
                    8
 l.356 ...ef\lo#1#2U3#4#5#6#7#8#8
-                                #9#{\relax}
+                                #99#{\relax}
 I've inserted the digit you should have used after the #.
 Type `1' to delete what you did use.
 
 ! You already have nine parameters.
 l.356 ...\lo#1#2U3#4#5#6#7#8#8#9
-                                #{\relax}
-I'm going to ignore the # sign you just used.
+                                9#{\relax}
+I'm going to ignore the # sign you just used,
+as well as the token that followed it.
 
 {blank space  }
 {\ifcase}
@@ -7294,7 +7295,7 @@
 (end occurred when iftrue on line 413 was incomplete) 
 Here is how much of TeX's memory you used:
  47 strings out of 1674
- 253 string characters out of 8354
+ 253 string characters out of 8367
  2825 words of memory out of 3000
  372 multiletter control sequences out of 2100
  3041 words of font info for 4 fonts, out of 20000 for 75

Modified: trunk/Build/source/texk/web2c/triptrap/trip.tex
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/trip.tex	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/trip.tex	2021-01-30 01:42:07 UTC (rev 57558)
@@ -353,7 +353,7 @@
 \def\b#1\par{}
 \outer\gdef\a^^@^^@a#1\par#2{}\tokens{\a^^@^^@a\par!
 \long\gdef\l#1{}
-\outer\global\long\edef\lo#1#2U3#4#5#6#7#8#8#9#{\relax}
+\outer\global\long\edef\lo#1#2U3#4#5#6#7#8#8#99#{\relax}
 \ifcase 1 \undefined\or\l\par\b{\par % occurrence of \par aborts \b
 \b{\l\undefined}\par\else\b{\par}\fi % but not there!
 \ifcase\iftrue-1a\else\fi \ifcase0\fi\else\ifcase5\fi\fi

Modified: trunk/Build/source/texk/web2c/triptrap/trip.typ
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/trip.typ	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/trip.typ	2021-01-30 01:42:07 UTC (rev 57558)
@@ -6,7 +6,7 @@
   Resolution =  72.27000000 pixels per inch
 numerator/denominator=25400000/473628672
 magnification=2000;       0.00003052 pixels per DVI unit
-' TeX output 2014.01.07:0959'
+' TeX output 1776.07.04:1200'
  
 42: beginning of page 0.0.0.0.11.0.0.0.0.0 
 87: down4 129105920 

Modified: trunk/Build/source/texk/web2c/triptrap/tripin.log
===================================================================
--- trunk/Build/source/texk/web2c/triptrap/tripin.log	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap/tripin.log	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,4 +1,4 @@
-This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 **\input trip
 (trip.tex
 ! Bad character code (256).
@@ -447,8 +447,8 @@
 
  )
 Beginning to dump on file trip.fmt
- (preloaded format=trip 2014.1.7)
-1326 strings of total length 23646
+ (preloaded format=trip 1776.7.4)
+1326 strings of total length 23633
 471 memory locations dumped; current usage is 96&278
 341 multiletter control sequences
 \font\nullfont=nullfont

Modified: trunk/Build/source/texk/web2c/triptrap-sh
===================================================================
--- trunk/Build/source/texk/web2c/triptrap-sh	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/triptrap-sh	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,7 +1,9 @@
 #! /bin/sh
+# $Id$
 # shell script to run TRIP and TRAP tests and create diffs.
 #
-#   Copyright (C) 2010-2015 Peter Breitenlohner <tex-live at tug.org>
+#   Copyright 2015-2021 Karl Berry <tex-live at tug.org>
+#   Copyright 2010-2015 Peter Breitenlohner <tex-live at tug.org>
 #
 #   This file is free software; the copyright holder
 #   gives unlimited permission to copy and/or distribute it,
@@ -37,19 +39,23 @@
   $MAKE TESTS=$tst.test check-am >$tmp 2>&1 \
     && grep "PASS: $tst.test" $tmp >/dev/null 2>&1 \
     || { echo "FAIL: $tst.test"; is_OK=false; }
+  
   sed -e "s%$abs_srcdir/%SRCDIR/%" \
       -e "s%\.\./%./%" \
       $tst.log >$file
+      
+  rm -f $tst.out # previous output file, if any.
+  
   $is_OK && {
     echo "PASS: $tst.test" >>$file
     echo "PASS: $tst.test"
+    rm -f $tmp
   } || {
     echo "FAIL: $tst.test" >>$file
+    # preserve our output file in case of failure
+    mv $tmp $tst.out
     rc=1
   }
-  rm -f $tmp
 done
 echo "$me: All done"
 exit $rc
-
-


Property changes on: trunk/Build/source/texk/web2c/triptrap-sh
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Date Author Id Revision
\ No newline at end of property
Modified: trunk/Build/source/texk/web2c/uptexdir/uptex-m.ch
===================================================================
--- trunk/Build/source/texk/web2c/uptexdir/uptex-m.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/uptexdir/uptex-m.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -53,7 +53,7 @@
 @d upTeX_revision==".27"
 @d upTeX_version_string=='-u1.27' {current u\pTeX\ version}
 @#
- at d upTeX_banner=='This is upTeX, Version 3.14159265',pTeX_version_string,upTeX_version_string
+ at d upTeX_banner=='This is upTeX, Version 3.141592653',pTeX_version_string,upTeX_version_string
 @d upTeX_banner_k==upTeX_banner
   {printed when u\pTeX\ starts}
 @z

Modified: trunk/Build/source/texk/web2c/uptexdir/uptexextra.h
===================================================================
--- trunk/Build/source/texk/web2c/uptexdir/uptexextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/uptexdir/uptexextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -6,7 +6,7 @@
 #include <ptexdir/ptex_version.h> /* for PTEX_VERSION */
 #include <uptexdir/uptex_version.h> /* for UPTEX_VERSION */
 
-#define BANNER "This is upTeX, Version 3.14159265-" PTEX_VERSION "-" UPTEX_VERSION
+#define BANNER "This is upTeX, Version 3.141592653-" PTEX_VERSION "-" UPTEX_VERSION
 #define COPYRIGHT_HOLDER "D.E. Knuth"
 #define AUTHOR NULL
 #define PROGRAM_HELP UPTEXHELP

Modified: trunk/Build/source/texk/web2c/uptexdir/uptrip/uptrip.diffs
===================================================================
--- trunk/Build/source/texk/web2c/uptexdir/uptrip/uptrip.diffs	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/uptexdir/uptrip/uptrip.diffs	2021-01-30 01:42:07 UTC (rev 57558)
@@ -1,329 +1,605 @@
+#! /bin/sh -vx
+# $Id: uptriptest.test 48633 2018-09-09 17:56:55Z karl $
+# Copyright 2017-2018 Karl Berry <tex-live at tug.org>
+# Copyright 2011-2014 Peter Breitenlohner <tex-live at tug.org>
+# You may freely use, modify and/or distribute this file.
+
+LC_ALL=C; export LC_ALL;  LANGUAGE=C; export LANGUAGE
++ LC_ALL=C
++ export LC_ALL
++ LANGUAGE=C
++ export LANGUAGE
+
+testdir=$abs_srcdir/triptrap
++ testdir=SRCDIR/triptrap
+uptestdir=$abs_srcdir/uptexdir/uptrip
++ uptestdir=SRCDIR/uptexdir/uptrip
+
+TEXMFCNF=$uptestdir; export TEXMFCNF
++ TEXMFCNF=SRCDIR/uptexdir/uptrip
++ export TEXMFCNF
+
+rm -rf uptripdir
++ rm -rf uptripdir
+mkdir uptripdir
++ mkdir uptripdir
+cd uptripdir
++ cd uptripdir
+
+dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'"
++ dvitype_args='-output-level=2 -dpi=72.27 -page-start='\''*.*.*.*.*.*.*.*.*.*'\'''
+
+echo ">>> Running TRIP test for upTeX." >&2
++ echo '>>> Running TRIP test for upTeX.'
 >>> Running TRIP test for upTeX.
+echo ">>> See $uptestdir/uptrip.diffs for example of acceptable diffs." >&2
++ echo '>>> See SRCDIR/uptexdir/uptrip/uptrip.diffs for example of acceptable diffs.'
 >>> See SRCDIR/uptexdir/uptrip/uptrip.diffs for example of acceptable diffs.
+
+# upTeX outputs direction of boxes.
+P_SED1='s/, yoko direction//;s/yoko direction, //'
++ P_SED1='s/, yoko direction//;s/yoko direction, //'
+P_SED2='s/yoko(math) direction, //'
++ P_SED2='s/yoko(math) direction, //'
+
+is_OK=:
++ is_OK=:
+
+set -x
++ set -x
+
+echo "*** TRIP test for upTeX ***."
 + echo '*** TRIP test for upTeX ***.'
 *** TRIP test for upTeX ***.
+
+./pltotf $testdir/trip.pl trip.tfm || exit 1
 + ./pltotf SRCDIR/triptrap/trip.pl trip.tfm
+
+./tftopl ./trip.tfm trip.pl || exit 1
 + ./tftopl ./trip.tfm trip.pl
+
+diff $testdir/trip.pl trip.pl || is_OK=false
 + diff SRCDIR/triptrap/trip.pl trip.pl
+
+# get same filename in log
+$LN_S $testdir/trip.tex .
 + ln -s SRCDIR/triptrap/trip.tex .
+
+rm -f trip.log
 + rm -f trip.log
+./uptex --progname=upinitex --ini <$testdir/trip1.in >uptripin.fot
 + ./uptex --progname=upinitex --ini
+if test ! -s trip.fmt; then
+  echo "*** trip.fmt not created by trip1.in, investigate!" >&2
+  exit 1
+fi
 + test '!' -s trip.fmt
+sed "$P_SED1" trip.log >  uptripin.log || exit 1
 + sed 's/, yoko direction//;s/yoko direction, //' trip.log
+diff $testdir/tripin.log uptripin.log
 + diff SRCDIR/triptrap/tripin.log uptripin.log
 1c1
-< This is TeX, Version 3.14159265 (INITEX)  7 JAN 2014 09:09
+< This is TeX, Version 3.141592653 (INITEX)  4 JUL 1776 12:00
 ---
-> This is upTeX, Version 3.14159265-p3.6-u1.20 (utf8.uptex) (TeX Live 2015) (INITEX)  12 APR 2015 16:22
-3,11c3
+> This is upTeX, Version 3.141592653-p3.8.3-u1.27 (utf8.uptex) (TeX Live 2021/dev) (INITEX)  27 JAN 2021 18:03
+3c3
 < (trip.tex
-< ! Bad character code (256).
-< <to be read again> 
-<                    -
-< l.26   \nonstopmode\lccode256-
-<                               0\mathchardef\a="8000\def\a{ SC...
-< A character number must be between 0 and 255.
-< I changed this one to zero.
-< 
 ---
 > (./trip.tex
-91c83,84
+91c91,92
 < ### horizontal mode entered at line 77 (language255:hyphenmin1,63)
 ---
 > ### horizontal mode entered at line 77 (language255:hyph
 > enmin1,63)
-450,453c443,446
-<  (preloaded format=trip 2014.1.7)
-< 1326 strings of total length 23646
+93a95
+> \displace 0.0
+95a98
+> \displace 0.0
+368a372
+> ....\displace 0.0
+370a375
+> ....\displace 0.0
+437,438d441
+< ....\rip 6 (ligature )
+< ....\rip 7 (ligature )
+450,453c453,456
+<  (preloaded format=trip 1776.7.4)
+< 1326 strings of total length 23633
 < 471 memory locations dumped; current usage is 96&278
 < 341 multiletter control sequences
 ---
->  (preloaded format=trip 2015.4.12)
-> 1462 strings of total length 25505
-> 485 memory locations dumped; current usage is 106&278
-> 383 multiletter control sequences
-461c454
+>  (preloaded format=trip 2021.1.27)
+> 1489 strings of total length 26192
+> 487 memory locations dumped; current usage is 108&278
+> 395 multiletter control sequences
+461c464
 < Hyphenation trie of length 273 has 9 ops out of 500
 ---
 > Hyphenation trie of length 273 has 9 ops out of 35111
+
+# May as well test non-ini second time through.
+rm -f trip.log
 + rm -f trip.log
+./uptex --progname=uptex <$testdir/trip2.in >uptrip.fot
 + ./uptex --progname=uptex
+sed "$P_SED1;$P_SED2" trip.log > uptrip.log
 + sed 's/, yoko direction//;s/yoko direction, //;s/yoko(math) direction, //' trip.log
+diff $testdir/trip.fot uptrip.fot
 + diff SRCDIR/triptrap/trip.fot uptrip.fot
 1,3c1,2
-< This is TeX, Version 3.14159265 (INITEX)
+< This is TeX, Version 3.141592653 (INITEX)
 < ** &trip  trip 
 < (trip.tex ##
 ---
-> This is upTeX, Version 3.14159265-p3.6-u1.20 (utf8.uptex) (TeX Live 2015) (preloaded format=uptex)
+> This is upTeX, Version 3.141592653-p3.8.3-u1.27 (utf8.uptex) (TeX Live 2021/dev) (preloaded format=uptex)
 > **(./trip.tex ##
 17c16
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 190&313; after: 114&278; still untouched: 3113
+> Memory usage before: 192&313; after: 116&278; still untouched: 3113
 75c74
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 452&431; after: 390&418; still untouched: 241
+> Memory usage before: 458&431; after: 396&418; still untouched: 484
+
+# We use $DIFF instead of `diff' only for those files where there
+# might actually be legitimate numerical differences.
+$DIFF $DIFFFLAGS $testdir/trip.log uptrip.log 
 + diff SRCDIR/triptrap/trip.log uptrip.log
 1c1
-< This is TeX, Version 3.14159265 (preloaded format=trip 2014.1.7)  7 JAN 2014 09:59
+< This is TeX, Version 3.141592653 (preloaded format=trip 1776.7.4)  4 JUL 1776 12:00
 ---
-> This is upTeX, Version 3.14159265-p3.6-u1.20 (utf8.uptex) (TeX Live 2015) (preloaded format=trip 2015.4.12)  12 APR 2015 16:22
+> This is upTeX, Version 3.141592653-p3.8.3-u1.27 (utf8.uptex) (TeX Live 2021/dev) (preloaded format=trip 2021.1.27)  27 JAN 2021 18:03
 3c3
 < (trip.tex ##
 ---
 > (./trip.tex ##
-58a59,62
-> \openout0 = `8terminal.tex'.
-> 
-> \openout10 = `tripos.tex'.
-> 
-73c77
+73c73
 < Memory usage before: 159&313; after: 102&278; still untouched: 1613
 ---
-> Memory usage before: 190&313; after: 114&278; still untouched: 3113
-385,386c389,390
+> Memory usage before: 192&313; after: 116&278; still untouched: 3113
+113a114
+> .\displace 0.0
+198a200
+> .\displace 0.0
+253a256
+> .\displace 0.0
+308a312
+> .\displace 0.0
+349a354
+> .\displace 0.0
+385,386c390,391
 < \insert100, natural size 803.09999; split(1.0 plus 43.0,-2.0); float cos
 < t 100
 ---
 > \insert100Y, natural size 803.09999; split(1.0 plus 43.0,-2.0); float co
 > st 100
-426c430
+406a412
+> ....\displace 0.0
+409a416
+> ....\displace 0.0
+412a420
+> ....\displace 0.0
+420a429
+> .\displace 0.0
+426c435
 < \insert200, natural size 400.0; split(0.0,-2.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(0.0,-2.0); float cost 100
-441c445
+435a445
+> .\displace 0.0
+441c451
 < \insert200, natural size 400.0; split(1.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(1.0,-1.0); float cost 100
-456c460
+450a461
+> .\displace 0.0
+456c467
 < \insert200, natural size 400.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 400.0; split(2.0,-1.0); float cost 100
-474c478
+466a478
+> .\displace 0.0
+474c486
 < \special{^^80-1000.0pt}
 ---
 > \special{\x80-1000.0pt}
-483,484c487,488
+483,484c495,496
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-642c646
+588a601
+> .....\displace 0.0
+591a605
+> .....\displace 0.0
+594a609
+> .....\displace 0.0
+630a646
+> ......\displace 0.0
+633a650
+> ......\displace 0.0
+636a654
+> ......\displace 0.0
+642c660
 < Memory usage before: 747&484; after: 581&481; still untouched: 1492
 ---
-> Memory usage before: 1086&483; after: 838&480; still untouched: 1993
-647c651,652
+> Memory usage before: 1114&483; after: 860&480; still untouched: 1993
+647c665,666
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-689c694
+650a670
+> .\displace 0.0
+660a681
+> .\displace 0.0
+670a692
+> .\displace 0.0
+681a704
+> .\displace 0.0
+689c712
 < \special{^^80-1000.0pt}
 ---
 > \special{\x80-1000.0pt}
-693,694c698,699
+693,694c716,717
 < \insert100, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 10
 < 0
 ---
 > \insert100Y, natural size 535.4; split(1.0 plus 43.0,-2.0); float cost 1
 > 00
-701c706
+701c724
 < \insert200, natural size 2.0; split(2.0,-1.0); float cost 100
 ---
 > \insert200Y, natural size 2.0; split(2.0,-1.0); float cost 100
-714,715c719,720
+714,715c737,738
 < \insert200, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost 
 < 3
 ---
 > \insert200Y, natural size 10000.0; split(1.0 plus 43.0,-1.0); float cost
 >  3
-815c820
+815c838
 < Memory usage before: 475&470; after: 290&466; still untouched: 1473
 ---
-> Memory usage before: 690&469; after: 406&465; still untouched: 1974
-820c825,826
+> Memory usage before: 706&469; after: 414&465; still untouched: 1974
+820c843,844
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-915c921
+915c939
 < Memory usage before: 218&459; after: 149&458; still untouched: 1473
 ---
 > Memory usage before: 304&458; after: 194&457; still untouched: 1974
-920c926,927
+920c944,945
 < ### internal vertical mode entered at line 150 (\output routine)
 ---
 > ### internal vertical mode entered at line 150 (\output 
 > routine)
-1070c1077
+1070c1095
 < Memory usage before: 118&328; after: 102&328; still untouched: 1473
 ---
 > Memory usage before: 146&327; after: 122&327; still untouched: 1974
-1405c1412
+1405c1430
 < \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil
 ---
 > \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil
-1504a1512
+1493a1519
 > ..\displace 0.0
-1511c1519
+1503a1530
+> ..\displace 0.0
+1504a1532
+> ..\displace 0.0
+1511c1539
 < Memory usage before: 990&376; after: 584&370; still untouched: 735
 ---
-> Memory usage before: 1486&375; after: 838&369; still untouched: 1974
-1954c1962
+> Memory usage before: 1494&375; after: 842&369; still untouched: 1974
+1887c1915
+< .\rip A
+---
+> .\displace 0.0
+1923c1951
+< .\hbox(0.0+0.0)x120.0 []
+---
+> .\hbox(0.0+0.0)x120.0, yoko(math) direction []
+1954c1982
 < (tripos.tex
 ---
 > (./tripos.tex
-2018c2026
+2018c2046
 < \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil
 ---
 > \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil
-2048,2049c2056,2057
+2022a2051
+> ..\displace 0.0
+2048,2049c2077,2078
 < ..\rip ^^82 (ligature CA)
 < ..\rip ^^82 (ligature CA)
 ---
 > ..\rip \x82 (ligature CA)
 > ..\rip \x82 (ligature CA)
-2189c2197
+2058a2088
+> ..\displace 0.0
+2071a2102
+> ..\displace 0.0
+2092a2124
+> ..\displace 0.0
+2113a2146
+> ..\displace 0.0
+2123a2157
+> ..\displace 0.0
+2142a2177
+> ..\displace 0.0
+2150a2186
+> ..\displace 0.0
+2171c2207,2208
+< ..\hbox(0.0+0.0)x120.0
+---
+> ..\hbox(0.0+0.0)x120.0, yoko(math) direction
+> ...\displace 0.0
+2189c2226
 < Memory usage before: 950&531; after: 546&448; still untouched: 706
 ---
-> Memory usage before: 1454&530; after: 804&447; still untouched: 1945
-2397c2405
+> Memory usage before: 1490&530; after: 822&447; still untouched: 1945
+2397c2434
 < ! Improper alphabetic constant.
 ---
 > ! Improper alphabetic or KANJI constant.
-2533c2541
+2533c2570
 < \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil
 ---
 > \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil
-2575c2583
+2544a2582
+> ..\displace 0.0
+2570c2608,2609
+< .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0
+---
+> .\hbox(0.0+0.0)x15.0, glue set 0.1875, shifted 5.0, yoko(math) direction
+> 
+2572c2611
+< ..\hbox(0.0+0.0)x0.0
+---
+> ..\hbox(0.0+0.0)x0.0, yoko(math) direction
+2575c2614
 < Memory usage before: 339&413; after: 236&405; still untouched: 706
 ---
-> Memory usage before: 489&411; after: 323&403; still untouched: 1945
-3051c3059
+> Memory usage before: 493&411; after: 325&403; still untouched: 1945
+2650,2651c2689,2690
+< Dimensions can be in units of em, ex, in, pt, pc,
+< cm, mm, dd, cc, bp, or sp; but yours is a new one!
+---
+> Dimensions can be in units of em, ex, zw, zh, in, pt, pc,
+> cm, mm, dd, cc, bp, H, Q, or sp; but yours is a new one!
+3038c3077,3078
+< ^\hbox(7.0+1.0)x2.0
+---
+> ^\hbox(7.0+1.0)x2.0, yoko(math) direction
+> ^.\displace 0.0
+3051c3091
 < \insert0, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
 ---
 > \insert0Y, natural size 0.0; split(1.0 plus 43.0,-2.0); float cost 100
-3054c3062
+3054c3094
 < .\fam0 ^^c8
 ---
 > .\fam0 \xC8 
-3143a3152
+3056c3096
+< .\vbox(-2.0+0.0)x0.0
+---
+> .\vbox(-2.0+0.0)x0.0, yoko(math) direction
+3060c3100,3101
+< ^.\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ^.\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> ^..\displace 0.0
+3140a3182
+> .....\displace 0.0
+3142a3185
+> ....|\displace 0.0
+3143a3187
 > ....\displace 0.0
-3235c3244
+3151a3196
+> .\displace 0.0
+3235c3280
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-3326c3335
+3286c3331
+< .\vbox(6.0+-8.0)x0.0
+---
+> .\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3326c3371
 < \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil
 ---
 > \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil
-3411c3420
+3329a3375
+> ..\displace 0.0
+3374c3420
+< ..\vbox(6.0+-8.0)x0.0
+---
+> ..\vbox(6.0+-8.0)x0.0, yoko(math) direction
+3385c3431,3432
+< ......\hbox(7.0+1.0)x2.0, shifted -2.0
+---
+> ......\hbox(7.0+1.0)x2.0, shifted -2.0, yoko(math) direction
+> .......\displace 0.0
+3411c3458
 < p ^^82
 ---
 > p \x82
-3547a3557
+3544a3592
+> ..........\displace 0.0
+3546a3595
+> .........|\displace 0.0
+3547a3597
 > .........\displace 0.0
-3616c3626
+3564c3614,3615
+< ...\hbox(7.0+1.0)x1.99
+---
+> ...\hbox(7.0+1.0)x1.99, yoko(math) direction
+> ....\displace 0.0
+3616c3667
 < Memory usage before: 2170&521; after: 1181&459; still untouched: 175
 ---
-> Memory usage before: 3259&519; after: 1739&457; still untouched: 241
-3864c3874
+> Memory usage before: 3279&519; after: 1749&457; still untouched: 484
+3864c3915
 < \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil
 ---
 > \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil
-3951c3961
+3919,3920c3970,3972
+< ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247
+< ....\vbox(-0.00002+0.0)x0.0
+---
+> ...\vbox(-0.00002+13.00002)x52.5, glue set - 0.00247, yoko(math) directi
+> on
+> ....\vbox(-0.00002+0.0)x0.0, yoko(math) direction
+3951c4003
 < Memory usage before: 640&415; after: 397&410; still untouched: 175
 ---
-> Memory usage before: 955&413; after: 569&408; still untouched: 241
-3985c3995
+> Memory usage before: 955&413; after: 569&408; still untouched: 484
+3985c4037
 < ^^82 
 ---
 > \x82 
-3991c4001
+3991c4043
 <  []\ip A ^^82 
 ---
 >  []\ip A \x82 
-4034c4044
+4034c4086
 < \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil
-4041c4051
+4041c4093
 < ..\ip ^^82
 ---
 > ..\ip \x82
-4053c4063
+4053c4105
 < Memory usage before: 235&401; after: 178&399; still untouched: 175
 ---
-> Memory usage before: 338&399; after: 244&397; still untouched: 241
-4420c4430
+> Memory usage before: 338&399; after: 244&397; still untouched: 484
+4420c4472
 < \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil
 ---
 > \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil
-4506c4516
+4425a4478
+> ...\displace 0.0
+4447a4501
+> ...\displace 0.0
+4475a4530
+> ...\displace 0.0
+4492a4548
+> ...\displace 0.0
+4506c4562
 < Memory usage before: 651&432; after: 417&418; still untouched: 175
 ---
-> Memory usage before: 988&431; after: 594&417; still untouched: 241
-4742c4752,4753
+> Memory usage before: 1004&431; after: 602&417; still untouched: 484
+4742c4798,4799
 < \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil
 ---
 > \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil, yoko directio
 > n
-4828c4839
+4746a4804
+> ...\displace 0.0
+4762a4821
+> .....\displace 0.0
+4777a4837
+> ......\displace 0.0
+4828c4888
 < Memory usage before: 776&458; after: 464&452; still untouched: 175
 ---
-> Memory usage before: 1170&457; after: 672&451; still untouched: 241
-5700c5711
+> Memory usage before: 1182&457; after: 678&451; still untouched: 484
+5701c5761
 < ! \textfont 0 is undefined (character ^^c8).
 ---
 > ! \textfont 0 is undefined (character \xC8).
-6380c6391
+6381c6441
 < (tripos.tex
 ---
 > (./tripos.tex
-6501c6512
+6502c6562
 < l.429 ...^^M=13 \def^^M{\relax}#
 ---
 > l.429 ...^^M=13 \defqqM{\relax}#
-6595c6606
+6596c6656
 < Memory usage before: 819&428; after: 720&426; still untouched: 175
 ---
-> Memory usage before: 1216&428; after: 1066&426; still untouched: 241
-7155c7166
+> Memory usage before: 1228&428; after: 1074&426; still untouched: 484
+6853c6913
+< .|vbox(0.0+0.0)x0.0
+---
+> .|vbox(0.0+0.0)x0.0, yoko(math) direction
+6876a6937
+> ..|displace 0.0
+6891a6953
+> ..|displace 0.0
+6926a6989
+> .|displace 0.0
+6959a7023
+> .|displace 0.0
+6961c7025,7026
+< .|hbox(0.0+0.0)x0.0
+---
+> .|hbox(0.0+0.0)x0.0, yoko(math) direction
+> ..|displace 0.0
+6991a7057
+> .|displace 0.0
+7103a7170
+> ...|displace 0.0
+7108d7174
+< ...|ip A (ligature BB)
+7116a7183
+> ...|displace 0.0
+7125d7191
+< ...|kern2.0
+7126a7193
+> .|displace 0.0
+7136c7203
+< ...|vbox(0.0+0.0)x0.0
+---
+> ...|vbox(0.0+0.0)x0.0, yoko(math) direction
+7156c7223
 < Memory usage before: 895&439; after: 290&420; still untouched: 175
 ---
-> Memory usage before: 1332&439; after: 388&420; still untouched: 241
-7288c7299
+> Memory usage before: 1346&439; after: 394&420; still untouched: 484
+7289c7356
 < Memory usage before: 334&431; after: 292&418; still untouched: 175
 ---
-> Memory usage before: 452&431; after: 390&418; still untouched: 241
-7296,7299c7307,7310
+> Memory usage before: 458&431; after: 396&418; still untouched: 484
+7297,7300c7364,7367
 <  47 strings out of 1674
-<  253 string characters out of 8354
+<  253 string characters out of 8367
 <  2825 words of memory out of 3000
 <  372 multiletter control sequences out of 2100
 ---
->  44 strings out of 1538
->  261 string characters out of 14495
->  4259 words of memory out of 4500
->  414 multiletter control sequences out of 15000+0
-7301c7312
+>  44 strings out of 1511
+>  261 string characters out of 13808
+>  4016 words of memory out of 4500
+>  426 multiletter control sequences out of 15000+0
+7302c7369
 <  2 hyphenation exceptions out of 307
 ---
 >  1 hyphenation exception out of 659
+
+mv tripos.tex uptripos.tex
++ mv tripos.tex uptripos.tex
+diff $testdir/tripos.tex uptripos.tex || is_OK=false
++ diff SRCDIR/triptrap/tripos.tex uptripos.tex
+
+eval ./dvitype $dvitype_args trip.dvi >uptrip.typ || exit 1
 + eval ./dvitype -output-level=2 -dpi=72.27 '-page-start='\''*.*.*.*.*.*.*.*.*.*'\''' trip.dvi
+./dvitype -output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*' trip.dvi
 ++ ./dvitype -output-level=2 -dpi=72.27 '-page-start=*.*.*.*.*.*.*.*.*.*' trip.dvi
+$DIFF $DIFFFLAGS $testdir/trip.typ uptrip.typ
 + diff SRCDIR/triptrap/trip.typ uptrip.typ
 1c1
 < This is DVItype, Version 3.6
 ---
-> This is DVItype, Version 3.6 (TeX Live 2015)
+> This is DVItype, Version 3.6 (TeX Live 2021/dev)
 9c9
-< ' TeX output 2014.01.07:0959'
+< ' TeX output 1776.07.04:1200'
 ---
-> ' TeX output 2015.04.12:1622'
+> ' TeX output 2021.01.27:1803'
 419c419
 < 1121: down4 639342208 
 ---
@@ -334,5 +610,12 @@
 ---
 > 2535: y4 203921756 
 > 2540: y0 203921756 
+
+$is_OK || {
+  echo ">>> There were some errors." >&2
+  exit 1
+}
 + :
-PASS: uptexdir/uptriptest
+
+PASS uptexdir/uptriptest.test (exit status: 0)
+PASS: uptexdir/uptriptest.test

Modified: trunk/Build/source/texk/web2c/vftovp.web
===================================================================
--- trunk/Build/source/texk/web2c/vftovp.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/vftovp.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -18,7 +18,7 @@
 \def\title{VF\lowercase{to}VP}
 \def\contentspagenumber{101}
 \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 The {\ttitlefont VFtoVP} processor}
@@ -145,7 +145,7 @@
 @ A \.{VF} file is organized as a stream of 8-bit bytes, using conventions
 borrowed from \.{DVI} and \.{PK} files. Thus, a device driver that knows
 about \.{DVI} and \.{PK} format will already
-contain most of the mechanisms necessary to process \.{VF} files.
+contain most of the mechanisms necessary to process \.{VF} files. 
 We shall assume that \.{DVI} format is understood; the conventions in the
 \.{DVI} documentation (see, for example, {\sl \TeX: The Program}, part 31)
 are adopted here to define \.{VF} format.
@@ -189,7 +189,7 @@
 Thus if the local font is to be used at the same size
 as the design size of the virtual font itself, |s| will be the
 integer value $2^{20}$. The value of |s| must be positive and less than
-$2^{24}$ (thus less than 16 when considered as a |fix_word|).
+$2^{24}$ (thus less than 16 when considered as a |fix_word|). 
 The dimension~|d| is a |fix_word| in units of printer's points; hence it
 is identical to the design size found in the corresponding \.{TFM} file.
 
@@ -840,7 +840,7 @@
 a:=vf[vf_ptr-2]; l:=vf[vf_ptr-1]; vf_store(a+l); {|n[a+l]|}
 @<Print the name of the local font@>;
 @<Read the local font's \.{TFM} file and record the characters it contains@>;
-incr(font_ptr); font_start[font_ptr]:=vf_ptr;
+incr(font_ptr); font_start[font_ptr]:=vf_ptr; 
 end
 
 @ The font area may need to be separated from the font name on some systems.
@@ -1270,7 +1270,7 @@
 @* Outputting the TFM info.
 \TeX\ checks the information of a \.{TFM} file for validity as the
 file is being read in, so that no further checks will be needed when
-typesetting is going on. And when it finds something wrong, it justs
+typesetting is going on. And when it finds something wrong, it just
 calls the file ``bad,'' without identifying the nature of the problem,
 since \.{TFM} files are supposed to be good almost all of the time.
 
@@ -2171,7 +2171,7 @@
   incr(top); wstack[top]:=wstack[top-1]; xstack[top]:=xstack[top-1];
   ystack[top]:=ystack[top-1]; zstack[top]:=zstack[top-1]; out('(PUSH)');
   out_ln;
-  end;
+  end;                            
 pop:if top=0 then bad_vf('More pops than pushes!')
 @.More pops than pushes@>
   else begin decr(top); out('(POP)'); out_ln;

Modified: trunk/Build/source/texk/web2c/vptovf.web
===================================================================
--- trunk/Build/source/texk/web2c/vptovf.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/vptovf.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -3,7 +3,7 @@
 % Version 1.1 fixed some for-loop indices for stricter Pascal (April 1990).
 % Version 1.2 fixed `nonexistent char 0' bug, and a bit more (September 1990).
 % Version 1.3 has more robust `out_scaled' (March 1991).
-% Version 1.4 (March 1995) initialized lk_step_ended (Armin K\"ollner).
+% Version 1.4 (March 1995) initialized lk_step_ended (Armin K\"ollner).   
 % Version 1.5 (August 1998) corrected vf_fix(0) (Wayne Sullivan).
 % Version 1.6 (January 2014) corrected possible end-of-line glitch (Ken Nakano),
 %  and get_fix now treats -- as + (Peter Breitenlohner).
@@ -22,7 +22,7 @@
 \def\title{VP\lowercase{to}VF}
 \def\contentspagenumber{201}
 \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 The {\ttitlefont VPtoVF} processor}
@@ -46,7 +46,7 @@
 device drivers and the \.{TFM} file should be acceptable to \TeX.
 
 \indent\.{VPtoVF} is an extended version of the program \.{PLtoTF}, which
-is part of the standard \TeX ware library.
+is part of the standard \TeX ware library. 
 The idea of a virtual font was inspired by the work of David R. Fuchs
 @^Fuchs, David Raymond@>
 who designed a similar set of conventions in 1984 while developing a
@@ -440,7 +440,7 @@
 
 \yskip\noindent
 The elements of a \.{VARCHAR} property list are either \.{TOP}, \.{MID},
-\.{BOT} or \.{REP}; the values are integers, which must be zero or the number
+\.{BOT}, or \.{REP}; the values are integers, which must be zero or the number
 of a character in the font. A zero value for \.{TOP}, \.{MID}, or \.{BOT} means
 that the corresponding piece of the extensible character is absent. A nonzero
 value, or a \.{REP} value of zero, denotes the character code used to make
@@ -475,8 +475,8 @@
 
 \yskip\hang\.{KRN} (a one-byte value and a real value). The instruction
 `\.{(KRN} $c$ $r$\.)' means, ``If the next character is $c$, then insert
-a blank space of width $r$ between the current character character and $c$;
-otherwise go on to the next intruction.'' The value of $r$, which is in
+a blank space of width $r$ between the current character and $c$;
+otherwise go on to the next instruction.'' The value of $r$, which is in
 design units, is often negative. Character code $c$ must exist
 in the font.
 

Modified: trunk/Build/source/texk/web2c/weave.ch
===================================================================
--- trunk/Build/source/texk/web2c/weave.ch	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/weave.ch	2021-01-30 01:42:07 UTC (rev 57558)
@@ -304,13 +304,6 @@
 if (reserved(p)or(byte_start[p]+1=byte_start[p+ww]))and
 @z
 
- at x [179] only used when debugging
-@!k:0..long_buf_size; {index into |buffer|}
- at y
-@!debug @!k:0..long_buf_size; {index into |buffer|}
-gubed@;
- at z
-
 @x [239] omit index and module names if no_xref set
 @<Phase III: Output the cross-reference index@>=
 @y

Modified: trunk/Build/source/texk/web2c/weave.web
===================================================================
--- trunk/Build/source/texk/web2c/weave.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/weave.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -26,6 +26,7 @@
 % Version 4.2 conforms to ANSI standard for-loop rules (September, 1990).
 % Version 4.3 catches extra } in input (Breitenlohner, September, 1991).
 % Version 4.4 corrects changed_module logic, %-overflow (January, 1992).
+% Version 4.5 corrects archaic @@z logic and empty change file (January, 2021).
 
 % Here is TeX material that gets inserted after \input webmac
 \def\hang{\hangindent 3em\indent\ignorespaces}
@@ -817,7 +818,7 @@
 @d for_like=12 {\&{for}, \&{while}, \&{with}}
 @d goto_like=13 {\&{goto}, \&{packed}}
 @d if_like=14 {\&{if}}
- at d in_like=15 {\&{in}}
+ at d intercal_like=15 {not used}
 @d nil_like=16 {\&{nil}}
 @d proc_like=17 {\&{function}, \&{procedure}, \&{program}}
 @d record_like=18 {\&{record}}
@@ -831,7 +832,7 @@
 @ The names of modules are stored in |byte_mem| together
 with the identifier names, but a hash table is not used for them because
 \.{WEAVE} needs to be able to recognize a module name when given a prefix of
-that name. A conventional binary seach tree is used to retrieve module names,
+that name. A conventional binary search tree is used to retrieve module names,
 with fields called |llink| and |rlink| in place of |link| and |ilk|. The
 root of this tree is |rlink[0]|.
 
@@ -1027,7 +1028,7 @@
 end;
 
 @ A simple hash code is used: If the sequence of
-ASCII codes is $c_1c_2\ldots c_m$, its hash value will be
+ASCII codes is $c_1c_2\ldots c_n$, its hash value will be
 $$(2^{n-1}c_1+2^{n-2}c_2+\cdots+c_n)\,\bmod\,|hash_size|.$$
 
 @<Compute the hash...@>=
@@ -1458,9 +1459,7 @@
 @ @<Read from |web_file|...@>=
 begin incr(line);
 if not input_ln(web_file) then input_has_ended:=true
-else if limit=change_limit then
-  if buffer[0]=change_buffer[0] then
-    if change_limit>0 then check_change;
+else if change_limit>0 then check_change;
 end
 
 @ @<Read from |change_file|...@>=
@@ -1497,7 +1496,7 @@
 
 @<Check that all changes have been read@>=
 if change_limit<>0 then {|changing| is false}
-  begin for ii:=0 to change_limit do buffer[ii]:=change_buffer[ii];
+  begin for ii:=0 to change_limit-1 do buffer[ii]:=change_buffer[ii];
   limit:=change_limit; changing:=true; line:=other_line; loc:=change_limit;
   err_print('! Change file entry did not match');
 @.Change file entry did not match@>
@@ -1951,7 +1950,8 @@
 @<Phase I: Read all the user's text and store the cross references@>=
 phase_one:=true; phase_three:=false;
 reset_input;
-module_count:=0; skip_limbo; change_exists:=false;
+module_count:=0; changed_module[0]:=false;
+skip_limbo; change_exists:=false;
 while not input_has_ended do
   @<Store cross reference data for the current module@>;
 changed_module[module_count]:=change_exists;
@@ -2330,11 +2330,9 @@
 if loc<=limit then
   begin loc:=loc+2; c:=buffer[loc-1];
   if (c=" ")or(c=tab_mark)or(c="*") then return;
-  if (c<>"z")and(c<>"Z") then
-    begin out("@@");
-    if c<>"@@" then err_print('! Double @@ required outside of sections');
+  out("@@");
+  if c<>"@@" then err_print('! Double @@ required outside of sections');
 @.Double \AT! required...@>
-    end;
   end
 
 @ The |copy_TeX| routine processes the \TeX\ code at the beginning of a
@@ -2453,7 +2451,7 @@
 applied from left to right. Suppose that we are currently working on the
 sequence of scraps $s_1\,s_2\ldots s_n$. We try first to find the longest
 production that applies to an initial substring $s_1\,s_2\ldots\,$; but if
-no such productions exist, we find to find the longest production
+no such productions exist, we try to find the longest production
 applicable to the next substring $s_2\,s_3\ldots\,$; and if that fails, we
 try to match $s_3\,s_4\ldots\,$, etc.
 
@@ -3244,7 +3242,7 @@
 else if cat[pp+2]=var_head then
   begin if cat[pp+3]=intro then
     begin app1(pp+1); app(math_op); app(cancel);
-    app1(pp+2); app("}"); reduce(pp+1,3,math,0)(31);
+    app1(pp+2); app("}"); reduce(pp+1,3,math,0)(33);
     end;
   end;
 end
@@ -3436,7 +3434,8 @@
 label done,found;
 var i: 1..max_scraps; {index into |cat|}
 @!j:0..max_scraps; {runs through final scraps}
-@!k:0..long_buf_size; {index into |buffer|}
+@!debug@!k:0..long_buf_size; {index into |buffer|}
+gubed
 begin pp:=scrap_base; lo_ptr:=pp-1; hi_ptr:=pp;
 @<If tracing, print an indication of where we are@>;
 @<Reduce the scraps...@>;

Modified: trunk/Build/source/texk/web2c/xetexdir/xetex.web
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/xetex.web	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/xetexdir/xetex.web	2021-01-30 01:42:07 UTC (rev 57558)
@@ -88,6 +88,7 @@
 % Version 3.141592 fixed \xleaders, glueset, weird alignments (December 2002).
 % Version 3.1415926 was a general cleanup with minor fixes (February 2008).
 % Version 3.14159265 was similar (January 2014).
+% Version 3.141592653 was similar but more extensive (January 2021).
 
 % A reward of $327.68 will be paid to the first finder of any remaining bug.
 
@@ -321,10 +322,10 @@
 @d XeTeX_revision==".999992" { \.{\\XeTeXrevision} }
 @d XeTeX_version_string=='-0.999992' {current \XeTeX\ version}
 @#
- at d XeTeX_banner=='This is XeTeX, Version 3.14159265',eTeX_version_string,XeTeX_version_string
+ at d XeTeX_banner=='This is XeTeX, Version 3.141592653',eTeX_version_string,XeTeX_version_string
   {printed when \XeTeX\ starts}
 @#
- 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}
 @#
 @d TEX==XETEX {change program name into |XETEX|}
 @#
@@ -365,7 +366,7 @@
 if necessary. (\ph\ is Charles Hedrick's modification of a compiler
 @^Hedrick, Charles Locke@>
 for the DECsystem-10 that was originally developed at the University of
-Hamburg; cf.\ {\sl SOFTWARE---Practice \AM\ Experience \bf6} (1976),
+Hamburg; cf.\ {\sl Software---Practice and Experience \bf6} (1976),
 29--42. The \TeX\ program below is intended to be adaptable, without
 extensive changes, to most other versions of \PASCAL, so it does not fully
 use the admirable features of \ph. Indeed, a conscious effort has been
@@ -462,8 +463,8 @@
 Similarly, there is some conditional code delimited by
 `$|stat|\ldots|tats|$' that is intended for use when statistics are to be
 kept about \TeX's memory usage.  The |stat| $\ldots$ |tats| code also
-implements diagnostic information for \.{\\tracingparagraphs} and
-\.{\\tracingpages}.
+implements diagnostic information for \.{\\tracingparagraphs},
+\.{\\tracingpages}, and \.{\\tracingrestores}.
 @^debugging@>
 
 @d debug==@{ {change this to `$\\{debug}\equiv\null$' when debugging}
@@ -1449,7 +1450,7 @@
 If character |k| cannot be printed, and |k<@'200|, then character |k+@'100| or
 |k-@'100| must be printable; moreover, ASCII codes |[@'41..@'46,
 @'60..@'71, @'136, @'141..@'146, @'160..@'171]| must be printable.
-Thus, at least 81 printable characters are needed.
+Thus, at least 80 printable characters are needed.
 @:TeXbook}{\sl The \TeX book@>
 @^character set dependencies@>
 @^system dependencies@>
@@ -1793,9 +1794,9 @@
 
 @ Here is the very first thing that \TeX\ prints: a headline that identifies
 the version number and format package. The |term_offset| variable is temporarily
-incorrect, but the discrepancy is not serious since we assume that the banner
-and format identifier together will occupy at most |max_print_line|
-character positions.
+incorrect, but the discrepancy is not serious since we assume that this
+part of the program is system dependent.
+@^system dependencies@>
 
 @<Initialize the output...@>=
 wterm(banner);
@@ -1845,7 +1846,7 @@
 
 @<Basic print...@>=
 procedure print_int(@!n:integer); {prints an integer in decimal form}
-var k:0..23; {index to current digit; we assume that $|n|<10^{23}$}
+var k:0..23; {index to current digit; we assume that $\vert n\vert<10^{23}$}
 @!m:integer; {used to negate |n| in possibly dangerous cases}
 begin k:=0;
 if n<0 then
@@ -1993,7 +1994,8 @@
 
 \hang|term_only| (when |interaction>batch_mode| and |log_file| not yet open);
 
-\hang|log_only| (when |interaction=batch_mode| and |log_file| is open);
+\hang|log_only| (when |interaction=batch_mode| and |log_file| is open,
+  or when tracing paragraphs);
 
 \hang|term_and_log| (when |interaction>batch_mode| and |log_file| is open).
 
@@ -2109,7 +2111,8 @@
   {used to save global variables when deleting tokens}
 begin if history<error_message_issued then history:=error_message_issued;
 print_char("."); show_context;
-if interaction=error_stop_mode then @<Get user's advice and |return|@>;
+if interaction=error_stop_mode then if selector<>log_only then
+  @<Get user's advice and |return|@>;
 incr(error_count);
 if error_count=100 then
   begin print_nl("(That makes 100 errors; please try again.)");
@@ -2120,7 +2123,8 @@
 exit:end;
 
 @ @<Get user's advice...@>=
-loop at +begin continue: clear_for_error_prompt; prompt_input("? ");
+loop at +begin continue: if interaction<>error_stop_mode then return;
+  clear_for_error_prompt; prompt_input("? ");
 @.?\relax@>
   if last=first then return;
   c:=buffer[first];
@@ -2145,7 +2149,7 @@
 "0","1","2","3","4","5","6","7","8","9": if deletions_allowed then
   @<Delete \(c)|c-"0"| tokens and |goto continue|@>;
 @t\4\4@>@;@+@!debug "D": begin debug_help; goto continue;@+end;@+gubed@/
-"E": if base_ptr>0 then
+"E": if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
   begin print_nl("You want to edit file ");
 @.You want to edit file x@>
   slow_print(input_stack[base_ptr].name_field);
@@ -2166,7 +2170,8 @@
 @.Type <return> to proceed...@>
 print_nl("R to run without stopping, Q to run quietly,");@/
 print_nl("I to insert something, ");
-if base_ptr>0 then print("E to edit your file,");
+if base_ptr>0 then if input_stack[base_ptr].name_field>=256 then
+  print("E to edit your file,");
 if deletions_allowed then
   print_nl("1 or ... or 9 to ignore the next 1 to 9 tokens of input,");
 print_nl("H for help, X to quit.");
@@ -2358,7 +2363,7 @@
   print_err("Interruption");
 @.Interruption@>
   help3("You rang?")@/
-  ("Try to insert some instructions for me (e.g.,`I\showlists'),")@/
+  ("Try to insert an instruction for me (e.g., `I\showlists'),")@/
   ("unless you just want to quit by typing `X'.");
   deletions_allowed:=false; error; deletions_allowed:=true;
   interrupt:=0;
@@ -3508,8 +3513,8 @@
 
 @ The |new_null_box| function returns a pointer to an |hlist_node| in
 which all subfields have the values corresponding to `\.{\\hbox\{\}}'.
-The |subtype| field is set to |min_quarterword|, since that's the desired
-|span_count| value if this |hlist_node| is changed to an |unset_node|.
+(The |subtype| field is set to |min_quarterword|, for historic reasons
+that are no longer relevant.)
 
 @p function new_null_box:pointer; {creates a new box node}
 var p:pointer; {the new node}
@@ -4928,7 +4933,7 @@
 @d hskip=26 {horizontal glue ( \.{\\hskip}, \.{\\hfil}, etc.~)}
 @d vskip=27 {vertical glue ( \.{\\vskip}, \.{\\vfil}, etc.~)}
 @d mskip=28 {math glue ( \.{\\mskip} )}
- at d kern=29 {fixed space ( \.{\\kern})}
+ at d kern=29 {fixed space ( \.{\\kern} )}
 @d mkern=30 {math kern ( \.{\\mkern} )}
 @d leader_ship=31 {use a box ( \.{\\shipout}, \.{\\leaders}, etc.~)}
 @d halign=32 {horizontal table alignment ( \.{\\halign} )}
@@ -5077,7 +5082,7 @@
 \hang|-mmode| stands for math formula mode (not displayed).
 
 \yskip\noindent The mode is temporarily set to zero while processing \.{\\write}
-texts in the |ship_out| routine.
+texts.
 
 Numeric values are assigned to |vmode|, |hmode|, and |mmode| so that
 \TeX's ``big semantic switch'' can select the appropriate thing to
@@ -5284,7 +5289,7 @@
     end;
   end;
 2: if a.int<>null then
-  begin print("this will be denominator of:"); show_box(a.int);@+
+  begin print("this will begin denominator of:"); show_box(a.int);@+
   end;
 end {there are no other cases}
 
@@ -5844,7 +5849,7 @@
 @d output_penalty_code=39 {penalty found at current page break}
 @d max_dead_cycles_code=40 {bound on consecutive dead cycles of output}
 @d hang_after_code=41 {hanging indentation changes after this many lines}
- at d floating_penalty_code=42 {penalty for insertions heldover after a split}
+ at d floating_penalty_code=42 {penalty for insertions held over after a split}
 @d global_defs_code=43 {override \.{\\global} specifications}
 @d cur_fam_code=44 {current family}
 @d escape_char_code=45 {escape character for token output}
@@ -6166,14 +6171,18 @@
 input and output, establishes the initial values of the date and time.
 @^system dependencies@>
 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.
+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).
 
 @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}
+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}
 end;
 
 @ @<Show equivalent |n|, in region 5@>=
@@ -6209,11 +6218,13 @@
 selector:=old_setting;
 end;
 
-@ Of course we had better declare another global variable, if the previous
+@ 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}
 
 @ The final region of |eqtb| contains the dimension parameters defined
 here, and the |number_regs| \.{\\dimen} registers.
@@ -6904,7 +6915,7 @@
 \yskip\hangg 2) If |save_type(p)=restore_zero|, then |save_index(p)|
 is a location in |eqtb| whose current value should be destroyed at the end
 of the current group, when it should be
-replaced by the current value of |eqtb[undefined_control_sequence]|.
+replaced by the value of |eqtb[undefined_control_sequence]|.
 
 \yskip\hangg 3) If |save_type(p)=insert_token|, then |save_index(p)|
 is a token that should be inserted into \TeX's input when the current
@@ -7320,8 +7331,8 @@
 number |c| into the text at this point.
 
 The enclosing \.{\char'173} and \.{\char'175} characters of a macro
-definition are omitted, but the final right brace of an output routine
-is included at the end of its token list.
+definition are omitted, but an output routine
+will be enclosed in braces.
 
 Here is an example macro definition that illustrates these conventions.
 After \TeX\ processes the text
@@ -7811,7 +7822,7 @@
 template is being scanned;
 
 \hang|backed_up|, if the token list being scanned has been inserted as
-`to be read again'.
+`to be read again';
 
 \hang|inserted|, if the token list being scanned has been inserted as
 the text expansion of a \.{\\count} or similar variable;
@@ -8376,7 +8387,8 @@
 
 @ The recovery procedure can't be fully understood without knowing more
 about the \TeX\ routines that should be aborted, but we can sketch the
-ideas here:  For a runaway definition we will insert a right brace; for a
+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 \.{\\cr} token and a right
 brace; and for a runaway argument, we will set |long_state| to
 |outer_call| and insert \.{\\par}.
@@ -9183,7 +9195,7 @@
 else cur_tok:=cs_token_flag+cur_cs;
 end;
 
-@ The |get_x_token| procedure is equivalent to two consecutive
+@ The |get_x_token| procedure is essentially equivalent to two consecutive
 procedure calls: |get_next; x_token|.
 
 @p procedure x_token; {|get_x_token| without the initial |get_next|}
@@ -9512,7 +9524,7 @@
 strip off the enclosing braces. That's why |rbrace_ptr| was introduced.
 
 @<Tidy up the parameter just scanned, and tuck it away@>=
-begin if (m=1)and(info(p)<right_brace_limit)and(p<>temp_head) then
+begin if (m=1)and(info(p)<right_brace_limit) then
   begin link(rbrace_ptr):=null; free_avail(p);
   p:=link(temp_head); pstack[n]:=link(p); free_avail(p);
   end
@@ -11382,7 +11394,7 @@
 messages.
 
 @p function scan_toks(@!macro_def,@!xpand:boolean):pointer;
-label found,done,done1,done2;
+label found,continue,done,done1,done2;
 var t:halfword; {token representing the highest parameter number}
 @!s:halfword; {saved token}
 @!p:pointer; {tail of the token list being built}
@@ -11402,7 +11414,7 @@
 end;
 
 @ @<Scan and build the parameter part...@>=
-begin loop begin get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|}
+begin loop begin continue: get_token; {set |cur_cmd|, |cur_chr|, |cur_tok|}
   if cur_tok<right_brace_limit then goto done1;
   if cur_cmd=mac_param then
     @<If the next character is a parameter number, make |cur_tok|
@@ -11424,7 +11436,7 @@
 
 @ @<If the next character is a parameter number...@>=
 begin s:=match_token+cur_chr; get_token;
-if cur_cmd=left_brace then
+if cur_tok<left_brace_limit then
   begin hash_brace:=cur_tok;
   store_new_token(cur_tok); store_new_token(end_match_token);
   goto done;
@@ -11432,7 +11444,8 @@
 if t=zero_token+9 then
   begin print_err("You already have nine parameters");
 @.You already have nine...@>
-  help1("I'm going to ignore the # sign you just used."); error;
+  help2("I'm going to ignore the # sign you just used,")@/
+    ("as well as the token that followed it."); error; goto continue;
   end
 else  begin incr(t);
   if cur_tok<>t then
@@ -11587,7 +11600,7 @@
     print_err("File ended within "); print_esc("read");
 @.File ended within \\read@>
     help1("This \read has unbalanced braces.");
-    align_state:=1000000; error;
+    align_state:=1000000; limit:=0; error;
     end;
   end;
 end
@@ -11732,7 +11745,7 @@
 @!skip_line:integer; {skipping began here}
 
 @ Here is a procedure that ignores text until coming to an \.{\\or},
-\.{\\else}, or \.{\\fi} at level zero of $\.{\\if}\ldots\.{\\fi}$
+\.{\\else}, or \.{\\fi} at the current level of $\.{\\if}\ldots\.{\\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).
@@ -12468,11 +12481,11 @@
 @ @<Print the banner...@>=
 begin wlog(banner);
 slow_print(format_ident); print("  ");
-print_int(day); print_char(" ");
+print_int(sys_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);
+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);
 if eTeX_ex then
   begin; wlog_cr; wlog('entering extended mode');
   end;
@@ -12480,6 +12493,9 @@
 
 @ Let's turn now to the procedure that is used to initiate file reading
 when an `\.{\\input}' 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.
+@^system dependencies@>
 
 @p procedure start_input; {\TeX\ will \.{\\input} something}
 label done;
@@ -12504,7 +12520,7 @@
 else if (term_offset>0)or(file_offset>0) then print_char(" ");
 print_char("("); incr(open_parens); slow_print(name); update_terminal;
 state:=new_line;
-if name=str_ptr-1 then {we can conserve string pool space now}
+if name=str_ptr-1 then {conserve string pool space (but see note above)}
   begin flush_string; name:=cur_name;
   end;
 @<Read the first line of the new file@>;
@@ -12718,11 +12734,11 @@
 current character (which may have a ligature/kerning program of its own).
 
 If the very first instruction of the |lig_kern| array has |skip_byte=255|,
-the |next_char| byte is the so-called right boundary character of this font;
+the |next_char| byte is the 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 left boundary character,
-beginning at location |256*op_byte+remainder|.
+there is a special ligature/kerning program for a boundary character at the
+left, beginning at location |256*op_byte+remainder|.
 The interpretation is that \TeX\ puts implicit boundary characters
 before and after each consecutive string of characters from the same font.
 These implicit characters do not appear in the output, but they can affect
@@ -12865,7 +12881,7 @@
   {start of |lig_kern| program for left boundary character,
   |non_address| if there is none}
 @!font_bchar:array[internal_font_number] of min_quarterword..non_char;
-  {right boundary character, |non_char| if there is none}
+  {boundary character, |non_char| if there is none}
 @!font_false_bchar:array[internal_font_number] of min_quarterword..non_char;
   {|font_bchar| if it doesn't exist in the font, otherwise |non_char|}
 
@@ -13044,7 +13060,7 @@
 @!a,@!b,@!c,@!d:eight_bits; {byte variables}
 @!qw:four_quarters;@!sw:scaled; {accumulators}
 @!bch_label:integer; {left boundary start location, or infinity}
-@!bchar:0..256; {right boundary character, or 256}
+@!bchar:0..256; {boundary character, or 256}
 @!z:scaled; {the design size or the ``at'' size}
 @!alpha:integer;@!beta:1..16;
   {auxiliary quantities used in fixed-point multiplication}
@@ -13678,13 +13694,13 @@
 The parameter is a signed number in two's complement notation, |-128<=b<128|;
 if |b<0|, the reference point moves left.
 
-\yskip\hang|right2| 144 |b[2]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right2| 144 |b[2]|. Same as |right1|, except that |b| is a
 two-byte quantity in the range |-32768<=b<32768|.
 
-\yskip\hang|right3| 145 |b[3]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right3| 145 |b[3]|. Same as |right1|, except that |b| is a
 three-byte quantity in the range |@t$-2^{23}$@><=b<@t$2^{23}$@>|.
 
-\yskip\hang|right4| 146 |b[4]|. Same as |right1|, except that |b| is a
+\yskip\hang|@!right4| 146 |b[4]|. Same as |right1|, except that |b| is a
 four-byte quantity in the range |@t$-2^{31}$@><=b<@t$2^{31}$@>|.
 
 \yskip\hang|w0| 147. Set |h:=h+w|; i.e., move right |w| units. With luck,
@@ -15371,7 +15387,7 @@
 items and appends the resulting material onto the list that ends at
 location |adjust_tail|.
 
-@< Glob...@>=
+@<Glob...@>=
 @!adjust_tail:pointer; {tail of adjustment list}
 
 @ @<Set init...@>=adjust_tail:=null; last_badness:=0;
@@ -15990,8 +16006,8 @@
 @d sub_mlist=3 {|math_type| when the attribute is a formula}
 @d math_text_char=4 {|math_type| when italic correction is dubious}
 
-@ Each portion of a formula is classified as Ord, Op, Bin, Rel, Ope,
-Clo, Pun, or Inn, for purposes of spacing and line breaking. An
+@ Each portion of a formula is classified as Ord, Op, Bin, Rel, Open,
+Close, Punct, or Inner, for purposes of spacing and line breaking. An
 |ord_noad|, |op_noad|, |bin_noad|, |rel_noad|, |open_noad|, |close_noad|,
 |punct_noad|, or |inner_noad| is used to represent portions of the various
 types. For example, an `\.=' sign in a formula leads to the creation of a
@@ -16013,10 +16029,10 @@
 @d op_noad=ord_noad+1 {|type| of a noad classified Op}
 @d bin_noad=ord_noad+2 {|type| of a noad classified Bin}
 @d rel_noad=ord_noad+3 {|type| of a noad classified Rel}
- at d open_noad=ord_noad+4 {|type| of a noad classified Ope}
- at d close_noad=ord_noad+5 {|type| of a noad classified Clo}
- at d punct_noad=ord_noad+6 {|type| of a noad classified Pun}
- at d inner_noad=ord_noad+7 {|type| of a noad classified Inn}
+ at d open_noad=ord_noad+4 {|type| of a noad classified Open}
+ at d close_noad=ord_noad+5 {|type| of a noad classified Close}
+ at d punct_noad=ord_noad+6 {|type| of a noad classified Punct}
+ at d inner_noad=ord_noad+7 {|type| of a noad classified Inner}
 @d limits=1 {|subtype| of |op_noad| whose scripts are to be above, below}
 @d no_limits=2 {|subtype| of |op_noad| whose scripts are to be normal}
 
@@ -17457,7 +17473,7 @@
   else cur_i:=null_character;
   if not(char_exists(cur_i)) then
     begin char_warning(cur_f,qo(cur_c));
-    math_type(a):=empty;
+    math_type(a):=empty; cur_i:=null_character;
     end;
   end;
 end;
@@ -17955,7 +17971,7 @@
 
 @ The numerator and denominator must be separated by a certain minimum
 clearance, called |clr| in the following program. The difference between
-|clr| and the actual clearance is |2delta|.
+|clr| and the actual clearance is twice |delta|.
 
 @<Adjust \(s)|shift_up| and |shift_down| for the case of no fraction line@>=
 begin if is_new_mathfont(cur_f) then begin
@@ -18584,8 +18600,7 @@
 ord_noad,vcenter_noad,over_noad,under_noad: do_nothing;
 radical_noad: s:=radical_noad_size;
 accent_noad: s:=accent_noad_size;
-fraction_noad: begin t:=inner_noad; s:=fraction_noad_size;
-  end;
+fraction_noad: s:=fraction_noad_size;
 left_noad,right_noad: t:=make_left_right(q,style,max_d,max_h);
 style_node: @<Change the current style and |goto delete_q|@>;
 whatsit_node,penalty_node,rule_node,disc_node,adjust_node,ins_node,mark_node,
@@ -18624,7 +18639,7 @@
 goto delete_q;
 end
 
-@ The inter-element spacing in math formulas depends on a $8\times8$ table that
+@ The inter-element spacing in math formulas depends on an $8\times8$ table that
 \TeX\ preloads as a 64-digit string. The elements of this string have the
 following significance:
 $$\vbox{\halign{#\hfil\cr
@@ -19010,6 +19025,7 @@
 primitive("crcr",car_ret,cr_cr_code);
 @!@:cr_cr_}{\.{\\crcr} primitive@>
 text(frozen_end_template):="endtemplate"; text(frozen_endv):="endtemplate";
+ at .endtemplate@>
 eq_type(frozen_endv):=endv; equiv(frozen_endv):=null_list;
 eq_level(frozen_endv):=level_one;@/
 eqtb[frozen_end_template]:=eqtb[frozen_endv];
@@ -19242,6 +19258,7 @@
 @<Copy the templates from node |cur_loop| into node |p|@>;
 cur_loop:=link(cur_loop);
 link(p):=new_glue(glue_ptr(cur_loop));
+subtype(link(p)):=tab_skip_code+1;
 end
 
 @ @<Copy the templates from node |cur_loop| into node |p|@>=
@@ -19614,8 +19631,8 @@
 @^Plass, Michael Frederick@>
 @^Knuth, Donald Ervin@>
 the author in 1977, subsequently generalized and improved by the same two
-people in 1980. A detailed discussion appears in {\sl SOFTWARE---Practice
-\AM\ Experience \bf11} (1981), 1119--1184, where it is shown that the
+people in 1980. A detailed discussion appears in {\sl Software---Practice
+and Experience \bf11} (1981), 1119--1184, where it is shown that the
 line-breaking problem can be regarded as a special case of the problem of
 computing the shortest path in an acyclic network. The cited paper includes
 numerous examples and describes the history of line breaking as it has been
@@ -21125,7 +21142,7 @@
   if is_char_node(q) then goto done1;
   if non_discardable(q) then goto done1;
   if type(q)=kern_node then if (subtype(q)<>explicit) and (subtype(q)<>space_adjustment) then goto done1;
-  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node| or |penalty_node|}
+  r:=q; {now |type(q)=glue_node|, |kern_node|, |math_node|, or |penalty_node|}
   if type(q)=math_node then if TeXXeT_en then
     @<Adjust \(t)the LR stack for the |post_line_break| routine@>;
   end;
@@ -21416,7 +21433,7 @@
 @!hc:array[0..hyphenatable_length_limit+3] of 0..number_usvs; {word to be hyphenated}
 { note that element 0 needs to be a full UnicodeScalar, even though we
   basically work in UTF16 }
-@!hn:small_number; {the number of positions occupied in |hc|}
+@!hn:small_number; {the number of positions occupied in |hc|, 0..64 in TeX}
 @!ha,@!hb:pointer; {nodes |ha..hb| should be replaced by the hyphenated result}
 @!hf:internal_font_number; {font number of the letters in |hc|}
 @!hu:array[0..hyphenatable_length_limit+1] of 0..too_big_char;
@@ -21668,7 +21685,7 @@
 @ @<Local variables for hyphenation@>=
 @!i,@!j,@!l:0..hyphenatable_length_limit+2; {indices into |hc| or |hu|}
 @!q,@!r,@!s:pointer; {temporary registers for list manipulation}
-@!bchar:halfword; {right boundary character of hyphenated word, or |non_char|}
+@!bchar:halfword; {boundary character of hyphenated word, or |non_char|}
 
 @ \TeX\ will never insert a hyphen that has fewer than
 \.{\\lefthyphenmin} letters before it or fewer than
@@ -22469,7 +22486,7 @@
 is |trie_op_ptr|.
 
 @<Glob...@>=
-@!init@! trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
+@!init @!trie_op_hash:array[-trie_op_size..trie_op_size] of 0..trie_op_size;
   {trie op codes for quadruples}
 @!trie_used:array[ASCII_code] of quarterword;
   {largest opcode used so far for this language}
@@ -22647,7 +22664,7 @@
 @d trie_back(#)==trie[#].lh {backward links in |trie| holes}
 
 @<Glob...@>=
-@!init@!trie_taken:packed array[1..trie_size] of boolean;
+@!init @!trie_taken:packed array[1..trie_size] of boolean;
   {does a family start here?}
 @t\hskip10pt@>@!trie_min:array[ASCII_code] of trie_pointer;
   {the first possible slot for each character}
@@ -23330,7 +23347,8 @@
 @!last_penalty:integer; {used to implement \.{\\lastpenalty}}
 @!last_kern:scaled; {used to implement \.{\\lastkern}}
 @!last_node_type:integer; {used to implement \.{\\lastnodetype}}
-@!insert_penalties:integer; {sum of the penalties for held-over insertions}
+@!insert_penalties:integer; {sum of the penalties for insertions
+  that were held over}
 
 @ @<Put each...@>=
 primitive("pagegoal",set_page_dimen,0);
@@ -24230,7 +24248,7 @@
 @!space_class:integer;
 @!prev_class:integer;
 @!main_s:integer; {space factor value}
-@!bchar:halfword; {right boundary character of current font, or |non_char|}
+@!bchar:halfword; {boundary character of current font, or |non_char|}
 @!false_bchar:halfword; {nonexistent character matching |bchar|, or |non_char|}
 @!cancel_boundary:boolean; {should the left boundary be ignored?}
 @!ins_disc:boolean; {should we insert a discretionary node?}
@@ -25093,7 +25111,7 @@
 
 @ Many of the actions related to box-making are triggered by the appearance
 of braces in the input. For example, when the user says `\.{\\hbox}
-\.{to} \.{100pt\{$\langle\,\hbox{hlist}\,\rangle$\}}' in vertical mode,
+\.{to} \.{100pt\{$\langle\,\hbox{\rm hlist}\,\rangle$\}}' in vertical mode,
 the information about the box size (100pt, |exactly|) is put onto |save_stack|
 with a level boundary word just above it, and |cur_group:=adjusted_hbox_group|;
 \TeX\ enters restricted horizontal mode to process the hlist. The right
@@ -27521,6 +27539,7 @@
 
 @ @<Initialize table entries...@>=
 text(frozen_protection):="inaccessible";
+ at .inaccessible@>
 
 @ Here's an example of the way many of the following routines operate.
 (Unfortunately, they aren't all as simple as this.)
@@ -28559,7 +28578,7 @@
 @ @d show_code=0 { \.{\\show} }
 @d show_box_code=1 { \.{\\showbox} }
 @d show_the_code=2 { \.{\\showthe} }
- at d show_lists=3 { \.{\\showlists} }
+ at d show_lists_code=3 { \.{\\showlists} }
 
 @<Put each...@>=
 primitive("show",xray,show_code);
@@ -28568,14 +28587,14 @@
 @!@:show_box_}{\.{\\showbox} primitive@>
 primitive("showthe",xray,show_the_code);
 @!@:show_the_}{\.{\\showthe} primitive@>
-primitive("showlists",xray,show_lists);
-@!@:show_lists_}{\.{\\showlists} primitive@>
+primitive("showlists",xray,show_lists_code);
+@!@:show_lists_code_}{\.{\\showlists} primitive@>
 
 @ @<Cases of |print_cmd_chr|...@>=
 xray: case chr_code of
   show_box_code:print_esc("showbox");
   show_the_code:print_esc("showthe");
-  show_lists:print_esc("showlists");
+  show_lists_code:print_esc("showlists");
   @<Cases of |xray| for |print_cmd_chr|@>@;@/
   othercases print_esc("show")
   endcases;
@@ -28589,7 +28608,7 @@
 @!l:integer; {line where that conditional began}
 @!n:integer; {level of \.{\\if...\\fi} nesting}
 begin case cur_chr of
-show_lists: begin begin_diagnostic; show_activities;
+show_lists_code: begin begin_diagnostic; show_activities;
   end;
 show_box_code: @<Show the current contents of a box@>;
 show_code: @<Show the current meaning of a token, then |goto common_ending|@>;
@@ -28672,8 +28691,8 @@
 
 The global variable |format_ident| is a string that is printed right
 after the |banner| line when \TeX\ is ready to start. For \.{INITEX} this
-string says simply `\.{(INITEX)}'; for other versions of \TeX\ it says,
-for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year,
+string says simply `\.{ (INITEX)}'; for other versions of \TeX\ it says,
+for example, `\.{ (preloaded format=plain 1982.11.19)}', showing the year,
 month, and day that the format file was created. We have |format_ident=0|
 before \TeX's tables are loaded.
 
@@ -28764,6 +28783,8 @@
 @ The inverse macros are slightly more complicated, since we need to check
 the range of the values we are reading in. We say `|undump(a)(b)(x)|' to
 read an integer value |x| that is supposed to be in the range |a<=x<=b|.
+System error messages should be suppressed when undumping.
+@^system dependencies@>
 
 @d undump_wd(#)==begin get(fmt_file); #:=fmt_file^;@+end
 @d undump_int(#)==begin get(fmt_file); #:=fmt_file^.int;@+end
@@ -29249,17 +29270,17 @@
 |str_room| or |make_string| at this time, because a call on |overflow|
 might lead to an infinite loop.
 @^system dependencies@>
-
-Actually there's one way to get error messages, via |prepare_mag|;
-but that can't cause infinite recursion.
+(Actually there's one way to get error messages, via |prepare_mag|;
+but that can't cause infinite recursion.)
 @^recursion@>
 
-This program doesn't bother to close the input files that may still be open.
+If |final_cleanup| is bypassed, this program doesn't bother to close
+the input files that may still be open.
 
 @<Last-minute...@>=
 procedure close_files_and_terminate;
 var k:integer; {all-purpose index}
-begin @<Finish the extensions@>;
+begin @<Finish the extensions@>; new_line_char:=-1;
 @!stat if tracing_stats>0 then @<Output statistics about this job@>;@;@+tats@/
 wake_up_terminal; @<Finish the \.{DVI} file@>;
 if log_opened then
@@ -29315,7 +29336,7 @@
 procedure final_cleanup;
 label exit;
 var c:small_number; {0 for \.{\\end}, 1 for \.{\\dump}}
-begin c:=cur_chr;
+begin c:=cur_chr; if c<>1 then new_line_char:=-1;
 if job_name=0 then open_log_file;
 while input_ptr>0 do
   if state=token_list then end_token_list at +else end_file_reading;
@@ -29428,14 +29449,15 @@
 @!debug procedure debug_help; {routine to display various things}
 label breakpoint,exit;
 var k,@!l,@!m,@!n:integer;
-begin loop begin wake_up_terminal;
+begin clear_terminal;
+  loop begin wake_up_terminal;
   print_nl("debug # (-1 to exit):"); update_terminal;
 @.debug \#@>
   read(term_in,m);
   if m<0 then return
   else if m=0 then
-    begin goto breakpoint;@\ {go to every label at least once}
-    breakpoint: m:=0; @{'BREAKPOINT'@}@\
+    begin goto breakpoint;@/ {go to every declared label at least once}
+    breakpoint: m:=0; @{'BREAKPOINT'@}@/
     end
   else  begin read(term_in,n);
     case m of

Modified: trunk/Build/source/texk/web2c/xetexdir/xetexextra.h
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/xetexextra.h	2021-01-30 00:53:47 UTC (rev 57557)
+++ trunk/Build/source/texk/web2c/xetexdir/xetexextra.h	2021-01-30 01:42:07 UTC (rev 57558)
@@ -56,7 +56,7 @@
 #include <xetexdir/etex_version.h> /* for ETEX_VERSION */
 #include <xetexdir/xetex_version.h> /* for XETEX_VERSION */
 
-#define BANNER "This is XeTeX, Version 3.14159265-" ETEX_VERSION "-" XETEX_VERSION
+#define BANNER "This is XeTeX, Version 3.141592653-" ETEX_VERSION "-" XETEX_VERSION
 #define COPYRIGHT_HOLDER "SIL International, Jonathan Kew and Khaled Hosny"
 #define AUTHOR "Jonathan Kew"
 #define PROGRAM_HELP XETEXHELP



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