diff options
author | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
---|---|---|
committer | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
commit | c6101f91d071883b48b1b4b51e5eba0f36d9a78d (patch) | |
tree | 1bf7f5a881d7a4f5c5bf59d0b2821943dd822372 /Build/source/texk/web2c/etexdir | |
parent | 07ee7222e389b0777456b427a55c22d0e6ffd267 (diff) |
French translation for tlmgr updated
git-svn-id: svn://tug.org/texlive/trunk@57912 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/etexdir')
26 files changed, 0 insertions, 15407 deletions
diff --git a/Build/source/texk/web2c/etexdir/ChangeLog b/Build/source/texk/web2c/etexdir/ChangeLog deleted file mode 100644 index 4a71c7f3cc0..00000000000 --- a/Build/source/texk/web2c/etexdir/ChangeLog +++ /dev/null @@ -1,607 +0,0 @@ -2021-02-22 Phelype Oleinik <phe.h.o1@gmail.com> - - * etex.ch: avoid "expansion depth" overflow with \numexpr. - -2021-02-13 Karl Berry <karl@freefriends.org> - - * am/etex.am (etex_ch_srcs): adjust for split enctex changes. - -2019-12-10 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp> - - * am/etex.am (etex_CPPFLAGS): append $(ZLIB_INCLUDES). - (etex_LDADD): include $(ZLIB_LIBS.) - (etex_DEPENDENCIES): define as $(ZLIB_DEPEND) - (etex_web_srcs): include zlib-fmt.ch. - -2018-03-24 Hironobu Yamashita <h.y.acetaminophen@gmail.com> - Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp> - - * tex.ech: Recover the right \lastnodetype initialization - value ignored by tex.ch. - -2016-04-06 Karl Berry <karl@tug.org> - - * etexextra.h (COPYRIGHT_HOLDER): add et al. since - peb passed away in 2015 so can't hold later copyrights. - -2015-09-22 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etriptest.test: Also check tripos.tex and etrip.out. - -2015-07-28 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Fixed a stupid typo that caused 'make dist' to - create e-TeX. - -2015-07-10 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etriptest (removed): Renamed ... - * etriptest.test (new): ... into this. - * am/etex.am: Better dependencies for 'make check'. - -2015-06-22 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Use $(tie_c) and $(tie_m). - -2015-04-12 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etrip/etrip.diffs: Updated for TL 2015. - -2014-12-12 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etriptest: Complain early if (e)trip.fmt is not created. - Inspired by report from vvv, tlbuild 14 Jun 2011 10:25:47. - -2014-05-02 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etrip/etrip.diffs: Updated for TL14. - -2014-01-22 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etrip/etrip.{diffs,fot,log,tex,typ}, etrip/etripin.log: - Updated for e-TeX 3.14159265. - -2014-01-21 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etexextra.h: Adapt to TeX Version 3.14159265. - -2014-01-20 Peter Breitenlohner <peb@mppmu.mpg.de> - - TeX tuneup of 2014. - * etex.ch, tex.ch0, tex.ech: Adapt to TeX Version 3.14159265. - -2014-01-17 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etrip.test (removed): Renamed ... - * etriptest (new): ... into this. - * am/etex.am: Adapted. - -2013-11-21 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Enable hyphenation of text between \beginL and \endL or - between \beginR and \endR. - * etrip/etrip.diffs, etrip/etrip.fot, etrip/etrip.log, - etrip/etrip.tex, etrip/etrip.typ, etrip/etripin.log: - Version 2.6 [2013-11-21] for TL 2014. - -2013-04-09 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etrip/etrip.diffs, etrip/etrip.fot, etrip/etrip.typ, - etrip/etripin.log: Update for TL 2013. - -2013-03-08 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Towards better handling of right-to-left text. - -2013-03-04 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Better rule for etex_version.h. - -2013-03-01 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch, etex_version.h: Version 2.6. - Better handling of right-to-left text. - * etrip/etrip.diffs, etrip/etrip.fot, etrip/etrip.log, - etrip/etrip.tex, etrip/etripin.log: Version 2.6 [2013-03-01]. - -2013-02-28 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Version 2.5, dated February 28, 2013. - -2013-01-24 Peter Breitenlohner <peb@mppmu.mpg.de> - - * wprob.test: Avoid spurious failure of parallel-tests. - * am/etex.am: Renamed wprob.{tex,log} => ewprob.{tex,log}. - -2013-01-15 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am, etrip.test: Enable parallel-tests. - -2012-12-16 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (etex_version.h): Enable silent rules. - -2012-08-02 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch, etex_version.h: Version 2.5. - Better tracing of font definitions, reported by - Bruno Le Floch <blflatex@@gmail.com>, Jul 2012. - * etrip/etrip.tex: Test the additional tracing. - -2012-07-19 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Distribute etex_version.h. - -2012-07-15 Akira Kakuto <kakuto@fuk.kindai.ac.jp> - - * etexextra.c: Must #define DLLPROC before reading etexd.h. - -2012-06-30 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etexextra.c [W32TeX]: #define DLLPROC for etex.dll. - -2012-05-11 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Version 2.4, dated May 11, 2012. - * etrip/etrip.tex, etrip/etripin.log, etrip/etrip.log, - etrip/etrip.fot, etrip/etrip.typ, etrip/etrip.diffs: Adapted. - -2012-04-11 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Fixed a typo in TeX text. - - * INSTALL, README: Removed these obsolete files. - * am/etex.am (EXTRA_DIST): Removed INSTALL and README. - -2011-09-30 Peter Breitenlohner <peb@mppmu.mpg.de> - - * wprob.test: New shell script to test for uninitialized line. - * am/etex.am: Add the new test. - -2011-09-30 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Slightly reformulate printing of current line. - -2011-04-07 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Version 2.3, dated April 7, 2011. - * etrip/etrip.tex, etrip/etripin.log, etrip/etrip.log, - etrip/etrip.fot, etrip/etrip.typ, etrip/etrip.diffs: Adapted. - -2011-04-03 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Remove remove_end_M and insert_end_M (now unused). - -2011-03-31 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp> - - * etex.ch: TeX formatting. - -2011-03-30 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Further reduce e-pTeX interferences. - -2011-03-29 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Rename box_lrstat into box_lr and define to also work - for min_quarterword<0. - -2011-03-28 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Use AM_CFLAGS instead of etex_CFLAGS. - -2011-03-27 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Reformulate @<Fetch an item in the current node...@>, - begin_box, and delete_last to fix a bug in \lastpenalty & Co; - further reduce e-pTeX interferences. - -2011-03-24 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Reformulate begin_box and delete_last to reduce - interferences between e-TeX and pTeX. - -2011-03-22 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Reformulate @<Fetch an item in the current node...@> - to reduce interferences between e-TeX and pTeX. - -2011-03-18 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Define and use the Web macros box_lr and set_box_lr - to reduce interferences between e-TeX and pTeX. - -2011-01-17 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (etrip.diffs): Use $(triptrap_diffs). - -2011-01-15 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etrip/etrip.tex: Fixed 'wrong last node type' diagnostic. - -2011-01-14 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (etrip-clean): Use TRIPTRAP_CLEAN. - -2011-01-14 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Mention \protected in error and help messages only - when in extended mode. - * etrip/etrip.tex: Fixed a typo currentgroup{type => level}. - -2011-01-11 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.mak, etex.mk (removed): Obsolete. - -2011-01-08 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (etex_web_srcs): Removed etex.fix. - (etex_ch_srcs): Added enctex.ch. - * etex.fix: Deleted. - -2011-01-01 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etexextra.in: Renamed ... - * etexextra.h: ... into this; #include etex_version.h - for ETEX_VERSION. - - * etexextra.c (new): #include <etexd.h> and <lib/texmfmp.c>. - - * am/etex.am: etexextra.[ch] are now distributed; - create etex_version.h instead of etex.version. - -2010-06-10 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (etex_CPPFLAGS): Add $(AM_CPPFLAGS). - -2010-05-25 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (EXTRA_DIST): Remove tmf-pool.h. - -2010-05-18 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: More error message with \protected, from Heiko. - -2010-04-28 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Checked and adjusted tex.web line numbers. - Fixed the error message for improper use of \protected, - reported by Heiko Oberdiek <heiko.oberdiek@googlemail.com>. - -2010-04-22 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (etex_ch_srcs): Use tex-binpool.ch as for TeX. - -2010-03-04 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (TRIPTRAP): Add etrip.diffs. - -2009-12-23 Karl Berry <karl@tug.org> - - * etexextra.in (BUG_ADDRESS): tex-k@tug.org, not @mail. - -2009-12-12 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Replace the obsolete $(mkdir_p) by $(MKDIR_P). - -2009-10-04 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Enable compiler warnings. - * etex-binpool.ch (get_strings_started): Drop unused variables. - -2009-09-06 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Adapt to new makecpool with one argument. - -2009-09-04 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Prepare compiler warnings. - -2009-08-18 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: SyncTeX now integrated into ../texmfmp.h. - -2009-08-16 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am: Adapt to tangle-sh and web2c-sh. - -2009-08-13 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/etex.am (etex_c_h): avoid to split the C code. - -2009-05-12 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etrip.test (new): Shell script for e-TRIP tests. - * etrip/texmf.cnf (main_memory): Increased from 2999 to 3999 - required due to increased node sizes for syncTeX extensions. - -2008-05-15 Karl Berry <karl@tug.org> - - * etex.mk (etex-pool.c): the input is etex.pool. From Akira. - -2008-05-13 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex-mk: Use $(makecpool) instead of ./tex-mkcpool. - -2008-03-24 Karl Berry <karl@tug.org> - - * tex.ch0, - * etex.ch, - * tex.ech: update for 3.1415926. - -2008-02-17 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Fixed a bug in hyph_code handling (\savinghyphcodes) - reported by Vladimir Volovich <vvv@vsu.ru>. - Corrected a few typos in TeX text. - -2005-08-03 Olaf Weber <olaf@infovore.xs4all.nl> - - * tex.ech: Implement -etex switch. - -2004-12-19 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk (etexextra.c): Depends on etexdir/etexextra.h. - - * etex.mk (etex-check): Add TEXMFCNF=../kpathsea to the mltex - test, so the right files are found when the installation is not - yet done. From Peter Breitenlohner <peb@mppmu.mpg.de>. - -2004-10-12 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Fixed a bug in the revised glue rounding code - (detected by Tigran Aivazian <tigran@aivazian.fsnet.co.uk>). - Version 2.2, dated October 12, 2004. - -2004-09-15 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Fixed a typo in TeX text, found by Giuseppe - Bilotta <bilotta78@hotpop.com>. - -2004-09-06 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Incorporated register recycling bug fix from Bernd - Raichle <bernd@dante.de>. - Final Version 2.2 (hopefully). - - * etrip/etrip.{fot,log,tex,typ}, etrip/etripin.log: - Updated for current version. - - * etex.mk: Modified rule for etex.version. - -2004-08-26 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.mk (etrip): Use etex with "--progname=einitex --ini" or - "--progname=etex". - -2004-08-26 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.fix: Include fix for register recycling bug from Bernd - Raichle <bernd@dante.de>. - -2004-08-25 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etrip/etripman.tex: Updated to Version 2.2 - -2004-08-21 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Version 2.2. - -2004-08-20 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etexextra.in: Peter holds copyright now. - -2004-08-26 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.version: Is from now on a generated file. - - * etexextra.in: renamed from etexextra.h. The current e-TeX - version is substituted from etex.version. Variant of code - supplied by Peter Breitenlohner <peb@mppmu.mpg.de>. - - * etex.mk: Added rules to extract current e-TeX version from - etex.ch and insert into etex.version and etexextra.h. Variant of - code supplied by Peter Breitenlohner <peb@mppmu.mpg.de>. - -2004-08-17 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk, etex.fix: Resurrected etex.fix, there is again a need - to include late-breaking changes. - -2004-07-29 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Somewhat rearrange mixed direction typesetting code - in order to reduce interference between eTeX and pdfTeX change - files. - -2004-07-25 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Reorganize additional command codes for convert - and last_item in order to reduce interference between eTeX and - pdfTeX change files. - -2004-07-23 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch, tex.ch[01], tex.ech: Reorganize handling of banner - string in order to reduce interference between eTeX, pdfTeX, - and web2c change files. - -2004-07-22 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Reorganize handling of additional token types. - This also fixed a bug in error context for additional token list - parameters, introduced by their reorganization. - -2004-07-21 Olaf Weber <olaf@infovore.xs4all.nl> - - * etrip/etripin.log: Update from Preter Breitenlohner. - - * etrip/etrip.tex: Update from Peter Breitenlohner. - - * etrip/etrip.fot: Update from Peter Breitenlohner. - -2004-07-19 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch, tex.ch[01]: Reorganize handling of additional token - list and integer parameters and e-TeX's additional penalties in - order to reduce interference between eTeX, pdfTeX, and web2c - change files. - - * etex.ch: Add a note that this file not only defines etex.web - in terms of changes to be applies to tex.web, but in addition - is used to define pdfetex.web. - - * tex.ech: Add a note that this file is used to construct the - web2c change files for both e-TeX and pdfeTeX. - -2004-07-17 Peter Breitenlohner <peb@mppmu.mpg.de> - - * etex.ch: Towards etex-2.2: Adapt to TeX 3.141592; this is still - somewhat preliminary; do_glue still needs to be adapted to the new - glue rounding algorithm of TeX 3.141592. - Incorporate bug fixes from etex.fix. - - * etex.ch0, etrip/etrip.{fot,tex}, etrip/etripin.log: Adapted - to TeX 3.141592. - - * tex.ch1, tex.ech: Change the xmalloc_array calls to the `new' - interface (from 2001-11-10). - - * etex.ch0, etex.ch1, etex.fix, tex.ch2: Removed. - - * etex.mk: Rewrite build rules for etex.{web,ch}, add - etexdir/etex.mk and remove etex.{ch0,ch1,fix}, tex.ch2. - - * etex.version: add newline. - - * etrip/etrip.log, etrip.diffs: changed due to bug fix. - -2004-07-14 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.fix: Add fix for typo on line 2737 of etex.ch. From Peter - Breitenlohner. - - * etexextra.h: Add BUG_ADDRESS. - -2004-07-04 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk: Move the creation of the format-related links to - format-related install rules; this seems to be a better place for - them, as the links are pointless without the corresponding - formats. Make the install-*-pool rules depend on the pool file in - question. - -2004-07-03 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk: Set up the make rules so that if etex isn't built (by - default) we do not forward from the general to the etex-specific - rules. But the etex-specific rules can be used. - - * etex.mk: Use $(TANGLE), $(TIE) instead ./tangle, ./tie to - support cross-compiling. - -2004-05-10 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk (install-etex-programs): Typo resulted in no etex binary - being installed. - -2004-05-08 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk (install-etex-programs): This rule didn't have a command - attached, so etex didn't get installed. - (install-etex-links): Dont install einitex, evirtex links. - - * etex.mk: Formats are now parked in a subdirectory of - $(web2cdir). - - * etex.mk: Change the .efmt extension to .fmt. One consequence is - that we don't want to build tex.fmt, where we could safely build - tex.efmt. - - * etexextra.h: .efmt -> .fmt. - - * tex.ech: .efmt -> .fmt. - -2004-01-27 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.fix: The assignment to cur_val instead of cur_val_level - would result in \lastnodetype getting confused about what type of - value it was supposed to be. Reported by Hartmut Henkel - <hartmut_henkel@gmx.de>, fix found by Fabrice Popineau - <Fabrice.Popineau@supelec.fr>. - -2003-02-19 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk: Installation of formats is no longer done via - install-data in this file, but just from the install-data -> - install-dumps -> install-fmts in the main Makefile. That way we - can prevent automatic installation with a single change in that - Makefile. - (etex.p): Depend on tangle. - (triptrap): Depend on etrip. - (install-etex-data): Double-colon rule. - (install-data): Combine with install-etex-data. - -2003-02-17 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.ch1: Reduce to banner changes. - - * etex.ch0: Slightly extend the reverted bits here, so they can be - cleared out of etex.ch1 and are now all in one file. - -2003-02-16 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.ch1: Correct the banners, and revert a final few bits of - TeX that use a variable that doesn't exist in e-TeX. - - * etex.ch0: TeX 3.141592 and e-TeX 2.1 require reconciliation. - Revert some of TeX's code to 3.14159 to get e-TeX 2.1 to tangle. - - * etexextra.h: Update banner for 3.141592-2.1. - - * etex.mk (etex.web): Add etex.ch0 and etex.ch1 to build rules. - -2003-02-15 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk: From klibtool to libtool. Based on patches from Albert - Chin-A-Young <china@thewrittenword.com>. - - * etex.mk: Changes to make e-TeX, in extended mode, the engine - under LaTeX2e. - -2003-02-07 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk: Reorganized to match the new Makefile.in. - -2003-01-15 Olaf Weber <olaf@infovore.xs4all.nl> - - * etex.mk (etestenv): Add LC_ALL=C to the etrip environment. - -2002-10-11 Olaf Weber <olaf@infovore.xs4all.nl> - - * tex.ch1: Settle on a text for the not-TeX banner. - -2002-06-02 Olaf Weber <olaf@infovore.xs4all.nl> - - * tex.ch0, tex.ch1: Changes to account for the banner changing - when certain options are specified that make the program - not-strictly TeX. - - * tex.ch2: Commented-out changes deleted. These changes became - active in tex.ch1. - -Mon Feb 01 18:35:30 1999 Peter Breitenlohner <peb@mppmu.mpg.de> - - * Version 2.1 for Web2c Version 7.2 - -Thu Feb 19 18:03:12 1998 Peter Breitenlohner <peb@mppmu.mpg.de> - - * Version 2.0 for Web2c Version 7.2 - -Sat Aug 23 14:14:12 1997 Peter Breitenlohner <peb@mppmu.mpg.de> - - * Integrated e-TeX Version 1.1 into Web2c Version 7.0 - (by Karl Berry, as of Feb 7 1997. - - All e-TeX (and e-TRIP) source files as well as a Makefile fragment - are in a separate directory: web2c/etexdir. This will certainly make - it easier to switch to e-TeX Version 2. diff --git a/Build/source/texk/web2c/etexdir/am/etex.am b/Build/source/texk/web2c/etexdir/am/etex.am deleted file mode 100644 index a7c954f729c..00000000000 --- a/Build/source/texk/web2c/etexdir/am/etex.am +++ /dev/null @@ -1,123 +0,0 @@ -## $Id$ -## texk/web2c/etexdir/am/etex.am: Makefile fragment for e-TeX. -## -## Copyright 2015-2021 Karl Berry <tex-live@tug.org> -## Copyright 2009-2015 Peter Breitenlohner <tex-live@tug.org> -## You may freely use, modify and/or distribute this file. - -## e-TeX -## -if ETEX -bin_PROGRAMS += etex -endif ETEX -EXTRA_PROGRAMS += etex - -etex_CPPFLAGS = $(AM_CPPFLAGS) $(ZLIB_INCLUDES) - -# With --enable-ipc, e-TeX may need to link with -lsocket. -etex_LDADD = $(LDADD) $(ZLIB_LIBS) $(ipc_socketlibs) -etex_DEPENDENCIES = $(ZLIB_DEPEND) - -# e-TeX C sources -etex_c_h = etexini.c etex0.c etexcoerce.h etexd.h -nodist_etex_SOURCES = $(etex_c_h) etex-pool.c -dist_etex_SOURCES = etexdir/etexextra.c etexdir/etexextra.h etexdir/etex_version.h - -# We must create etexd.h and etexdir/etex_version.h before building the -# etex_OBJECTS. -etex_prereq = etexd.h etexdir/etex_version.h -$(etex_OBJECTS): $(etex_prereq) - -$(etex_c_h): etex-web2c - @$(web2c) etex -etex-web2c: etex.p $(web2c_texmf) - @$(web2c) etex - -etex-pool.c: etex.pool etexd.h $(makecpool_stamp) - $(makecpool) etex >$@ || rm -f $@ - -# Tangling e-TeX -etex.p etex.pool: etex-tangle - @$(texmf_tangle) etex etex -etex-tangle: tangle$(EXEEXT) etex.web etex.ch tangle-sh - @$(texmf_tangle) etex etex - -# Extract etex version -$(srcdir)/etexdir/etex_version.h: @MAINTAINER_MODE_TRUE@ etexdir/etex.ch - $(AM_V_GEN)grep '^@d eTeX_version_string==' $(srcdir)/etexdir/etex.ch \ - | sed "s/^.*'-/#define ETEX_VERSION \"/;s/'.*$$/\"/" >$@ - -# Generate etex.web -etex.web: tie$(EXEEXT) $(etex_web_srcs) - $(tie_m) $(etex_web_srcs) -etex_web_srcs = \ - tex.web \ - etexdir/etex.ch - -# Generate etex.ch -etex.ch: tie$(EXEEXT) etex.web $(etex_ch_srcs) - $(tie_c) etex.web $(etex_ch_srcs) -etex_ch_srcs = \ - etexdir/tex.ch0 \ - tex.ch \ - zlib-fmt.ch \ - enctexdir/enctex1.ch \ - enctexdir/enctex-tex.ch \ - enctexdir/enctex2.ch \ - $(etex_ch_synctex) \ - etexdir/tex.ch1 \ - etexdir/tex.ech \ - tex-binpool.ch -## -EXTRA_DIST += $(etex_web_srcs) $(etex_ch_srcs) - -DISTCLEANFILES += $(nodist_etex_SOURCES) etex.web etex.ch etex-web2c \ - etex.p etex.pool etex-tangle - -EXTRA_DIST += \ - etexdir/ChangeLog \ - etexdir/etex_gen.tex - -# e-TeX Tests -# -etex_tests = etexdir/wprob.test etexdir/etriptest.test -etexdir/wprob.log: etex$(EXEEXT) -etexdir/etriptest.log: etex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT) - -EXTRA_DIST += $(etex_tests) - -if ETEX -TESTS += $(etex_tests) -TRIPTRAP += etrip.diffs -TRIPTRAP_CLEAN += etrip-clean -endif ETEX -DISTCLEANFILES += etrip.diffs - -## wprob.test -EXTRA_DIST += tests/wprob.tex -DISTCLEANFILES += ewprob.log ewprob.tex -## etriptest -etrip.diffs: etex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT) - $(triptrap_diffs) $@ -.PHONY: etrip-clean -etrip-clean: - rm -rf etripdir - -## Test data -## -EXTRA_DIST += \ - etexdir/etrip/etrip.diffs \ - etexdir/etrip/etrip.fot \ - etexdir/etrip/etrip.log \ - etexdir/etrip/etrip.out \ - etexdir/etrip/etrip.pl \ - etexdir/etrip/etrip.tex \ - etexdir/etrip/etrip.typ \ - etexdir/etrip/etrip1.in \ - etexdir/etrip/etrip2.in \ - etexdir/etrip/etrip3.in \ - etexdir/etrip/etripin.log \ - etexdir/etrip/etripman.tex \ - etexdir/etrip/texmf.cnf \ - etexdir/etrip/trip2.in - diff --git a/Build/source/texk/web2c/etexdir/etex.ch b/Build/source/texk/web2c/etexdir/etex.ch deleted file mode 100644 index d6363552633..00000000000 --- a/Build/source/texk/web2c/etexdir/etex.ch +++ /dev/null @@ -1,6371 +0,0 @@ -% This is etex.ch, a -% WEB change file containing code for various features extending TeX; -% to be applied to tex.web in order to define the -% e-TeX program. - -% e-TeX is copyright (C) 1999-2012 by P. Breitenlohner (1994,98 by the NTS -% team); all rights are reserved. Copying of this file is authorized only if -% (1) you are P. Breitenlohner, or if (2) you make absolutely no changes to -% your copy. (Programs such as TIE allow the application of several change -% files to tex.web; the master files tex.web and etex.ch should stay intact.) - -% See etex_gen.tex for hints on how to install this program. -% And see etripman.tex for details about how to validate it. - -% The TeX program is copyright (C) 1982 by D. E. Knuth. -% TeX is a trademark of the American Mathematical Society. -% e-TeX and NTS are trademarks of the NTS group. - -% All line numbers refer to tex.web 3.14159265 as of January 20, 2014. - -@x limbo l.1 - this is e-TeX -% This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved. -% 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. - -% TeX is a trademark of the American Mathematical Society. -% METAFONT is a trademark of Addison-Wesley Publishing Company. -@y -% e-TeX is copyright (C) 1999-2012 by P. Breitenlohner (1994,98 by the NTS -% team); all rights are reserved. Copying of this file is authorized only if -% (1) you are P. Breitenlohner, or if (2) you make absolutely no changes to -% your copy. (Programs such as TIE allow the application of several change -% files to tex.web; the master files tex.web and etex.ch should stay intact.) - -% See etex_gen.tex for hints on how to install this program. -% And see etripman.tex for details about how to validate it. - -% e-TeX and NTS are trademarks of the NTS group. -% TeX is a trademark of the American Mathematical Society. -% METAFONT is a trademark of Addison-Wesley Publishing Company. - -% This program is directly derived from Donald E. Knuth's TeX; -% the change history which follows and the reward offered for finders of -% bugs refer specifically to TeX; they should not be taken as referring -% to e-TeX, although the change history is relevant in that it -% demonstrates the evolutionary path followed. This program is not TeX; -% that name is reserved strictly for the program which is the creation -% and sole responsibility of Professor Knuth. -@z -%--------------------------------------- -@x limbo l.51 - e-TeX history -% Although considerable effort has been expended to make the TeX program -% correct and reliable, no warranty is implied; the author disclaims any -% obligation or liability for damages, including but not limited to -% special, indirect, or consequential damages arising out of or in -% connection with the use or performance of this software. This work has -% been a ``labor of love'' and the author hopes that users enjoy it. -@y -% A preliminary version of TeX--XeT was released in April 1992. -% TeX--XeT version 1.0 was released in June 1992, -% version 1.1 prevented arith overflow in glue computation (Oct 1992). -% A preliminary e-TeX version 0.95 was operational in March 1994. -% Version 1.0beta was released in May 1995. -% Version 1.01beta fixed bugs in just_copy and every_eof (December 1995). -% Version 1.02beta allowed 256 mark classes (March 1996). -% Version 1.1 changed \group{type,level} -> \currentgroup{type,level}, -% first public release (October 1996). -% Version 2.0 development was started in March 1997; -% fixed a ligature-\beginR bug in January 1998; -% was released in March 1998. -% Version 2.1 fixed a \marks bug (when min_halfword<>0) (January 1999). -% Version 2.2 development was started in Feb 2003; released in Oct 2004. -% fixed a bug in sparse array handling (0=>null), Jun 2002; -% fixed a bug in \lastnodetype (cur_val=>cur_val_level) -% reported by Hartmut Henkel <hartmut_henkel@@gmx.de>, -% fix by Fabrice Popineau <Fabrice.Popineau@@supelec.fr>, -% Jan 2004; -% another bug in sparse array handling (cur_ptr=>cur_chr) -% reported by Taco Hoekwater <taco@@elvenkind.com>, Jul 2004; -% fixed a sparse array reference count bug (\let,\futurelet), -% fix by Bernd Raichle <berd@@dante.de>, Aug 2004; -% reorganized handling of banner, additional token list and -% integer parameters, and similar in order to reduce the -% interference between eTeX, pdfTeX, and web2c change files. -% adapted to tex.web 3.141592, revised glue rounding for mixed -% direction typesetting; -% fixed a bug in the revised glue rounding code, detected by -% Tigran Aivazian <tigran@@aivazian.fsnet.co.uk>, Oct 2004. -% Version 2.3 development was started in Feb 2008; released in Apr 2011. -% fixed a bug in hyph_code handling (\savinghyphcodes) -% reported by Vladimir Volovich <vvv@@vsu.ru>, Feb 2008. -% fixed the error messages for improper use of \protected, -% reported by Heiko Oberdiek -% <heiko.oberdiek@@googlemail.com>, May 2010. -% some rearrangements to reduce interferences between -% e-TeX and pTeX, in part suggested by Hironori Kitagawa -% <h_kitagawa2001@@yahoo.co.jp>, Mar 2011. -% Version 2.4 fixed an uninitialized line number bug, released in May 2012. -% Version 2.5 development was started in Aug 2012; released in Feb 2013. -% better tracing of font definitions, reported by -% Bruno Le Floch <blflatex@@gmail.com>, Jul 2012. -% Version 2.6 development was started in Mar 2013; released in ??? 201?. -% enable hyphenation of text between \beginL and \endL or -% between \beginR and \endR, problem reported by -% Vafa Khalighi <vafalgk@@gmail.com>, Nov 2013. -% better handling of right-to-left text -- to be done. - -% Although considerable effort has been expended to make the e-TeX program -% correct and reliable, no warranty is implied; the author disclaims any -% obligation or liability for damages, including but not limited to -% special, indirect, or consequential damages arising out of or in -% connection with the use or performance of this software. This work has -% been a ``labor of love'' and the author hopes that users enjoy it. -@z -%--------------------------------------- -@x limbo l.63 - e-TeX logo, TeXXeT -\let\mc=\ninerm % medium caps for names like SAIL -@y -\let\mc=\ninerm % medium caps for names like SAIL -\def\eTeX{$\varepsilon$-\TeX} -\font\revrm=xbmc10 % for right-to-left text -% to generate xbmc10 (i.e., reflected cmbx10) use a file -% xbmc10.mf containing: -%+++++++++++++++++++++++++++++++++++++++++++++++++ -% if unknown cmbase: input cmbase fi -% extra_endchar := extra_endchar & -% "currentpicture:=currentpicture " & -% "reflectedabout((.5[l,r],0),(.5[l,r],1));"; -% input cmbx10 -%+++++++++++++++++++++++++++++++++++++++++++++++++ -\ifx\beginL\undefined % this is TeX - \def\XeT{X\kern-.125em\lower.5ex\hbox{E}\kern-.1667emT} - \def\TeXeT{\TeX-\hbox{\revrm \XeT}} % for TeX-XeT - \def\TeXXeT{\TeX-\hbox{\revrm -\XeT}} % for TeX--XeT -\else - \ifx\eTeXversion\undefined % this is \TeXeT - \def\TeXeT{\TeX-{\revrm\beginR\TeX\endR}} % for TeX-XeT - \def\TeXXeT{\TeX-{\revrm\beginR\TeX-\endR}} % for TeX--XeT - \else % this is \eTeX - \def\TeXeT{\TeX-{\TeXXeTstate=1\revrm\beginR\TeX\endR}} % for TeX-XeT - \def\TeXXeT{\TeX-{\TeXXeTstate=1\revrm\beginR\TeX-\endR}} % for TeX--XeT - \fi -\fi -@z -%--------------------------------------- -@x limbo l.66 - bug fix (print only changed modules) -\def\pct!{{\char`\%}} % percent sign in ordinary text -@y -\def\pct!{{\char`\%}} % percent sign in ordinary text -\def\grp{\.{\char'173...\char'175}} -@z -%--------------------------------------- -@x limbo l.82 - e-TeX basic -\def\title{\TeX82} -@y -\def\title{\eTeX} -% system dependent redefinitions of \title should come later -% and should use: -% \toks0=\expandafter{\title} -% \edef\title{...\the\toks0...} -\let\maybe=\iffalse % print only changed modules -@z -%--------------------------------------- -@x [1] m.1 l.93 - this is e-TeX -This is \TeX, a document compiler intended to produce typesetting of high -@y -This is \eTeX, a program derived from and extending the capabilities of -\TeX, a document compiler intended to produce typesetting of high -@z -%--------------------------------------- -@x [1] m.2 l.182 - e-TeX basic -If this program is changed, the resulting system should not be called -@y -This program contains code for various features extending \TeX, -therefore this program is called `\eTeX' and not -@z -%--------------------------------------- -@x [1] m.2 l.188 - e-TeX basic -November 1984]. -@y -November 1984]. - -A similar test suite called the ``\.{e-TRIP} test'' is available for -helping to determine whether a particular implementation deserves to be -known as `\eTeX'. -@z -%--------------------------------------- -@x [1] m.2 l.190 - e-TeX basic -@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} -@# -@d eTeX_banner=='This is e-TeX, Version 3.141592653',eTeX_version_string - {printed when \eTeX\ starts} -@# -@d TeX_banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts} -@# -@d banner==eTeX_banner -@# -@d TEX==ETEX {change program name into |ETEX|} -@# -@d TeXXeT_code=0 {the \TeXXeT\ feature is optional} -@# -@d eTeX_states=1 {number of \eTeX\ state variables in |eqtb|} -@z -%--------------------------------------- -@x [1] m.3 l.209 - e-TeX basic -scalar types; there are no `\&{var}' parameters, except in the case of files; -@y -scalar types; there are no `\&{var}' parameters, except in the case of files ---- \eTeX, however, does use `\&{var}' parameters for the |reverse| function; -@z -%--------------------------------------- -@x [1] m.15 l.504 - e-TeX basic -@d not_found=45 {go here when you've found nothing} -@y -@d not_found=45 {go here when you've found nothing} -@d not_found1=46 {like |not_found|, when there's more than one} -@d not_found2=47 {like |not_found|, when there's more than two} -@d not_found3=48 {like |not_found|, when there's more than three} -@d not_found4=49 {like |not_found|, when there's more than four} -@z -%--------------------------------------- -@x [10] m.135 l.2895 - e-TeX TeXXeT -|fil|, |fill|, or |filll|). The |subtype| field is not used. -@y -|fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. -In \eTeX\ the |subtype| field records the box direction mode |box_lr|. -@z -%--------------------------------------- -@x [10] m.141 l.2980 - e-TeX marks -This field occupies a full word instead of a halfword, because -there's nothing to put in the other halfword; it is easier in \PASCAL\ to -use the full word than to risk leaving garbage in the unused half. -@y -In addition there is a |mark_class| field that contains the mark class. -@z -%--------------------------------------- -@x [10] m.141 l.2986 - e-TeX marks -@d mark_ptr(#)==mem[#+1].int {head of the token list for a mark} -@y -@d mark_ptr(#)==link(#+1) {head of the token list for a mark} -@d mark_class(#)==info(#+1) {the mark class} -@z -%--------------------------------------- -@x [10] m.142 l.2995 - e-TeX marks -@d adjust_ptr==mark_ptr {vertical list to be moved out of horizontal list} -@y -@d adjust_ptr(#)==mem[#+1].int - {vertical list to be moved out of horizontal list} -@z -%--------------------------------------- -@x [10] m.147 l.3084 - e-TeX TeXXeT -the amount of surrounding space inserted by \.{\\mathsurround}. -@y -the amount of surrounding space inserted by \.{\\mathsurround}. - -In addition a |math_node| with |subtype>after| and |width=0| will be -(ab)used to record a regular |math_node| reinserted after being -discarded at a line break or one of the text direction primitives ( -\.{\\beginL}, \.{\\endL}, \.{\\beginR}, and \.{\\endR} ). -@z -%--------------------------------------- -@x [10] m.147 l.3088 - e-TeX TeXXeT -@d after=1 {|subtype| for math node that winds up a formula} -@y -@d after=1 {|subtype| for math node that winds up a formula} -@# -@d M_code=2 -@d begin_M_code=M_code+before {|subtype| for \.{\\beginM} node} -@d end_M_code=M_code+after {|subtype| for \.{\\endM} node} -@d L_code=4 -@d begin_L_code=L_code+begin_M_code {|subtype| for \.{\\beginL} node} -@d end_L_code=L_code+end_M_code {|subtype| for \.{\\endL} node} -@d R_code=L_code+L_code -@d begin_R_code=R_code+begin_M_code {|subtype| for \.{\\beginR} node} -@d end_R_code=R_code+end_M_code {|subtype| for \.{\\endR} node} -@# -@d end_LR(#)==odd(subtype(#)) -@d end_LR_type(#)==(L_code*(subtype(#) div L_code)+end_M_code) -@d begin_LR_type(#)==(#-after+before) -@z -%--------------------------------------- -@x [12] m.175 l.3561 - e-TeX TeXXeT -math_node: print_char("$"); -@y -math_node: if subtype(p)>=L_code then print("[]") - else print_char("$"); -@z -%--------------------------------------- -@x [12] m.184 l.3728 - e-TeX TeXXeT - begin print(", shifted "); print_scaled(shift_amount(p)); - end; -@y - begin print(", shifted "); print_scaled(shift_amount(p)); - end; - if eTeX_ex then @<Display if this box is never to be reversed@>; -@z -%--------------------------------------- -@x [12] m.192 l.3826 - e-TeX TeXXeT -begin print_esc("math"); -@y -if subtype(p)>after then - begin if end_LR(p) then print_esc("end") - else print_esc("begin"); - if subtype(p)>R_code then print_char("R") - else if subtype(p)>L_code then print_char("L") - else print_char("M"); - end else -begin print_esc("math"); -@z -%--------------------------------------- -@x [12] m.196 l.3859 - e-TeX marks -begin print_esc("mark"); print_mark(mark_ptr(p)); -@y -begin print_esc("mark"); -if mark_class(p)<>0 then - begin print_char("s"); print_int(mark_class(p)); - end; -print_mark(mark_ptr(p)); -@z -%--------------------------------------- -@x [15] m.208 l.4096 - e-TeX saved_items -@d un_vbox=24 {unglue a box ( \.{\\unvbox}, \.{\\unvcopy} )} -@y -@d un_vbox=24 {unglue a box ( \.{\\unvbox}, \.{\\unvcopy} )} - {( or \.{\\pagediscards}, \.{\\splitdiscards} )} -@z -%--------------------------------------- -@x [15] m.208 l.4106 - e-TeX TeXXeT -@d valign=33 {vertical table alignment ( \.{\\valign} )} -@y -@d valign=33 {vertical table alignment ( \.{\\valign} )} - {or text direction directives ( \.{\\beginL}, etc.~)} -@z -%--------------------------------------- -@x [15] m.208 l.4122 - e-TeX middle -@d left_right=49 {variable delimiter ( \.{\\left}, \.{\\right} )} -@y -@d left_right=49 {variable delimiter ( \.{\\left}, \.{\\right} )} - {( or \.{\\middle} )} -@z -%--------------------------------------- -@x [15] m.209 l.4166 - e-TeX basic - \.{\\insertpenalties} )} -@y - \.{\\insertpenalties} )} - {( or \.{\\interactionmode} )} -@z -%--------------------------------------- -@x [15] m.209 l.4168 - e-TeX penalties -@d set_shape=84 {specify fancy paragraph shape ( \.{\\parshape} )} -@y -@d set_shape=84 {specify fancy paragraph shape ( \.{\\parshape} )} - {(or \.{\\interlinepenalties}, etc.~)} -@z -%--------------------------------------- -@x [15] m.209 l.4178 - e-TeX protected -@d prefix=93 {qualify a definition ( \.{\\global}, \.{\\long}, \.{\\outer} )} -@y -@d prefix=93 {qualify a definition ( \.{\\global}, \.{\\long}, \.{\\outer} )} - {( or \.{\\protected} )} -@z -%--------------------------------------- -@x [15] m.209 l.4181 - e-TeX read_line -@d read_to_cs=96 {read into a control sequence ( \.{\\read} )} -@y -@d read_to_cs=96 {read into a control sequence ( \.{\\read} )} - {( or \.{\\readline} )} -@z -%--------------------------------------- -@x [15] m.210 l.4196 - e-TeX scan_tokens -@d input=max_command+4 {input a source file ( \.{\\input}, \.{\\endinput} )} -@y -@d input=max_command+4 {input a source file ( \.{\\input}, \.{\\endinput} )} - {( or \.{\\scantokens} )} -@z -%--------------------------------------- -@x [15] m.210 l.4201 - e-TeX unexpanded -@d the=max_command+9 {expand an internal quantity ( \.{\\the} )} -@y -@d the=max_command+9 {expand an internal quantity ( \.{\\the} )} - {( or \.{\\unexpanded}, \.{\\detokenize} )} -@z -%--------------------------------------- -@x [16] m.212 l.4304 - e-TeX basic -user's output routine. -@y -user's output routine. - -A seventh quantity, |eTeX_aux|, is used by the extended features \eTeX. -In vertical modes it is known as |LR_save| and holds the LR stack when a -paragraph is interrupted by a displayed formula. In display math mode -it is known as |LR_box| and holds a pointer to a prototype box for the -display. In math mode it is known as |delim_ptr| and points to the most -recent |left_noad| or |middle_noad| of a |math_left_group|. -@z -%--------------------------------------- -@x [16] m.212 l.4319 - e-TeX basic - @!head_field,@!tail_field: pointer; -@y - @!head_field,@!tail_field: pointer; - @!eTeX_aux_field: pointer; -@z -%--------------------------------------- -@x [16] m.213 l.4326 - e-TeX basic -@d tail==cur_list.tail_field {final node on current list} -@y -@d tail==cur_list.tail_field {final node on current list} -@d eTeX_aux==cur_list.eTeX_aux_field {auxiliary data for \eTeX} -@d LR_save==eTeX_aux {LR stack when a paragraph is interrupted} -@d LR_box==eTeX_aux {prototype box for display} -@d delim_ptr==eTeX_aux {most recent left or right noad of a math left group} -@z -%--------------------------------------- -@x [16] m.215 l.4357 - e-TeX basic -mode:=vmode; head:=contrib_head; tail:=contrib_head; -@y -mode:=vmode; head:=contrib_head; tail:=contrib_head; -eTeX_aux:=null; -@z -%--------------------------------------- -@x [16] m.216 l.4373 push_nest - e-TeX basic -incr(nest_ptr); head:=get_avail; tail:=head; prev_graf:=0; mode_line:=line; -@y -incr(nest_ptr); head:=get_avail; tail:=head; prev_graf:=0; mode_line:=line; -eTeX_aux:=null; -@z -%--------------------------------------- -@x [17] m.230 l.4736 - e-TeX basic, every_eof -@d toks_base=local_base+10 {table of 256 token list registers} -@y -@d tex_toks=local_base+10 {end of \TeX's token list parameters} -@# -@d etex_toks_base=tex_toks {base for \eTeX's token list parameters} -@d every_eof_loc=etex_toks_base {points to token list for \.{\\everyeof}} -@d etex_toks=etex_toks_base+1 {end of \eTeX's token list parameters} -@# -@d toks_base=etex_toks {table of 256 token list registers} -@z -%--------------------------------------- -@x [17] m.230 l.4737 - e-TeX basic, penalties -@d box_base=toks_base+256 {table of 256 box registers} -@y -@# -@d etex_pen_base=toks_base+256 {start of table of \eTeX's penalties} -@d inter_line_penalties_loc=etex_pen_base {additional penalties between lines} -@d club_penalties_loc=etex_pen_base+1 {penalties for creating club lines} -@d widow_penalties_loc=etex_pen_base+2 {penalties for creating widow lines} -@d display_widow_penalties_loc=etex_pen_base+3 {ditto, just before a display} -@d etex_pens=etex_pen_base+4 {end of table of \eTeX's penalties} -@# -@d box_base=etex_pens {table of 256 box registers} -@z -%--------------------------------------- -@x [17] m.231 l.4802 - e-TeX basic - othercases print_esc("errhelp") -@y - @/@<Cases of |assign_toks| for |print_cmd_chr|@>@/ - othercases print_esc("errhelp") -@z -%--------------------------------------- -@x [17] m.232 l.4820 - e-TeX penalties -eq_level(par_shape_loc):=level_one;@/ -@y -eq_level(par_shape_loc):=level_one;@/ -for k:=etex_pen_base to etex_pens-1 do - eqtb[k]:=eqtb[par_shape_loc]; -@z -%--------------------------------------- -@x [17] m.233 l.4848 - e-TeX penalties -if n=par_shape_loc then - begin print_esc("parshape"); print_char("="); - if par_shape_ptr=null then print_char("0") -@y -if (n=par_shape_loc) or ((n>=etex_pen_base) and (n<etex_pens)) then - begin print_cmd_chr(set_shape,n); print_char("="); - if equiv(n)=null then print_char("0") - else if n>par_shape_loc then - begin print_int(penalty(equiv(n))); print_char(" "); - print_int(penalty(equiv(n)+1)); - if penalty(equiv(n))>1 then print_esc("ETC."); - end -@z -%--------------------------------------- -@x [17] m.236 l.4969 - e-TeX basic -@d int_pars=55 {total number of integer parameters} -@y -@d tex_int_pars=55 {total number of \TeX's integer parameters} -@# -@d etex_int_base=tex_int_pars {base for \eTeX's integer parameters} -@d tracing_assigns_code=etex_int_base {show assignments} -@d tracing_groups_code=etex_int_base+1 {show save/restore groups} -@d tracing_ifs_code=etex_int_base+2 {show conditionals} -@d tracing_scan_tokens_code=etex_int_base+3 {show pseudo file open and close} -@d tracing_nesting_code=etex_int_base+4 {show incomplete groups and ifs within files} -@d pre_display_direction_code=etex_int_base+5 {text direction preceding a display} -@d last_line_fit_code=etex_int_base+6 {adjustment for last line of paragraph} -@d saving_vdiscards_code=etex_int_base+7 {save items discarded from vlists} -@d saving_hyph_codes_code=etex_int_base+8 {save hyphenation codes for languages} -@d eTeX_state_code=etex_int_base+9 {\eTeX\ state variables} -@d etex_int_pars=eTeX_state_code+eTeX_states {total number of \eTeX's integer parameters} -@# -@d int_pars=etex_int_pars {total number of integer parameters} -@z -%--------------------------------------- -@x [17] m.236 l.5031 - e-TeX basic -@d error_context_lines==int_par(error_context_lines_code) -@y -@d error_context_lines==int_par(error_context_lines_code) -@# -@d tracing_assigns==int_par(tracing_assigns_code) -@d tracing_groups==int_par(tracing_groups_code) -@d tracing_ifs==int_par(tracing_ifs_code) -@d tracing_scan_tokens==int_par(tracing_scan_tokens_code) -@d tracing_nesting==int_par(tracing_nesting_code) -@d pre_display_direction==int_par(pre_display_direction_code) -@d last_line_fit==int_par(last_line_fit_code) -@d saving_vdiscards==int_par(saving_vdiscards_code) -@d saving_hyph_codes==int_par(saving_hyph_codes_code) -@z -%--------------------------------------- -@x [17] m.237 l.5096 print_param - e-TeX basic -othercases print("[unknown integer parameter!]") -@y -@/@<Cases for |print_param|@>@/ -othercases print("[unknown integer parameter!]") -@z -%--------------------------------------- -@x [18] m.264 l.5627 primitive - e-TeX basic -@!j:small_number; {index into |buffer|} -@y -@!j:0..buf_size; {index into |buffer|} -@z -%--------------------------------------- -@x [18] m.264 l.5631 primitive - e-TeX basic - {we will move |s| into the (empty) |buffer|} - for j:=0 to l-1 do buffer[j]:=so(str_pool[k+j]); - cur_val:=id_lookup(0,l); {|no_new_control_sequence| is |false|} -@y - {we will move |s| into the (possibly non-empty) |buffer|} - if first+l>buf_size+1 then - overflow("buffer size",buf_size); -@:TeX capacity exceeded buffer size}{\quad buffer size@> - for j:=0 to l-1 do buffer[first+j]:=so(str_pool[k+j]); - cur_val:=id_lookup(first,l); {|no_new_control_sequence| is |false|} -@z -%--------------------------------------- -@x [18] m.265 l.5706 - e-TeX penalties -primitive("parshape",set_shape,0);@/ -@y -primitive("parshape",set_shape,par_shape_loc);@/ -@z -%--------------------------------------- -@x [18] m.265 l.5723 - e-TeX sparse arrays -primitive("toks",toks_register,0);@/ -@y -primitive("toks",toks_register,mem_bot);@/ -@z -%--------------------------------------- -@x [18] m.266 l.5756 - e-TeX cond -expand_after: print_esc("expandafter"); -@y -expand_after: if chr_code=0 then print_esc("expandafter") - @<Cases of |expandafter| for |print_cmd_chr|@>; -@z -%--------------------------------------- -@x [18] m.266 l.5762 - e-TeX marks -mark: print_esc("mark"); -@y -mark: begin print_esc("mark"); - if chr_code>0 then print_char("s"); - end; -@z -%--------------------------------------- -@x [18] m.266 l.5773 - e-TeX read_line -read_to_cs: print_esc("read"); -@y -read_to_cs: if chr_code=0 then print_esc("read") - @<Cases of |read| for |print_cmd_chr|@>; -@z -%--------------------------------------- -@x [18] m.266 l.5777 - e-TeX penalties -set_shape: print_esc("parshape"); -@y -set_shape: case chr_code of - par_shape_loc: print_esc("parshape"); - @<Cases of |set_shape| for |print_cmd_chr|@>@;@/ - end; {there are no other cases} -@z -%--------------------------------------- -@x [18] m.266 l.5778 - e-TeX unexpanded -the: print_esc("the"); -@y -the: if chr_code=0 then print_esc("the") - @<Cases of |the| for |print_cmd_chr|@>; -@z -%--------------------------------------- -@x [18] m.266 l.5779 - e-TeX sparse arrays -toks_register: print_esc("toks"); -@y -toks_register: @<Cases of |toks_register| for |print_cmd_chr|@>; -@z -%--------------------------------------- -@x [18] m.266 l.5781 - e-TeX TeXXeT -valign: print_esc("valign"); -@y -valign: if chr_code=0 then print_esc("valign")@/ - @<Cases of |valign| for |print_cmd_chr|@>; -@z -%--------------------------------------- -@x [19] m.268 l.5815 - e-TeX sparse arrays -interpreted in one of four ways: -@y -interpreted in one of five ways: -@z -%--------------------------------------- -@x [19] m.268 l.5835 - e-TeX tracing -the entries for that group. -@y -the entries for that group. -Furthermore, in extended \eTeX\ mode, |save_stack[p-1]| contains the -source line number at which the current level of grouping was entered. - -\yskip\hang 5) If |save_type(p)=restore_sa|, then |sa_chain| points to a -chain of sparse array entries to be restored at the end of the current -group. Furthermore |save_index(p)| and |save_level(p)| should replace -the values of |sa_chain| and |sa_level| respectively. -@z -%--------------------------------------- -@x [19] m.268 l.5845 - e-TeX basic -@d level_boundary=3 {|save_type| corresponding to beginning of group} -@y -@d level_boundary=3 {|save_type| corresponding to beginning of group} -@d restore_sa=4 {|save_type| when sparse array entries should be restored} - -@p@t\4@>@<Declare \eTeX\ procedures for tracing and input@> -@z -%--------------------------------------- -@x [19] m.273 l.5903 - e-TeX tracing -@ The following macro is used to test if there is room for up to six more -@y -@ The following macro is used to test if there is room for up to seven more -@z -%--------------------------------------- -@x [19] m.273 l.5909 check_full_save_stack - e-TeX tracing - if max_save_stack>save_size-6 then overflow("save size",save_size); -@y - if max_save_stack>save_size-7 then overflow("save size",save_size); -@z -%--------------------------------------- -@x [19] m.274 l.5931 new_save_level - e-TeX tracing -begin check_full_save_stack; -@y -begin check_full_save_stack; -if eTeX_ex then - begin saved(0):=line; incr(save_ptr); - end; -@z -%--------------------------------------- -@x [19] m.274 l.5938 new_save_level - e-TeX tracing -cur_boundary:=save_ptr; incr(cur_level); incr(save_ptr); cur_group:=c; -@y -cur_boundary:=save_ptr; cur_group:=c; -@!stat if tracing_groups>0 then group_trace(false);@+tats@;@/ -incr(cur_level); incr(save_ptr); -@z -%--------------------------------------- -@x [19] m.275 l.5956 eq_destroy - e-TeX sparse arrays -othercases do_nothing -@y -@/@<Cases for |eq_destroy|@>@/ -othercases do_nothing -@z -%--------------------------------------- -@x [19] m.277 l.5978 - e-TeX tracing -the call, since |eq_save| makes the necessary test. -@y -the call, since |eq_save| makes the necessary test. - -@d assign_trace(#)==@!stat if tracing_assigns>0 then restore_trace(#); - tats -@z -%--------------------------------------- -@x [19] m.277 l.5982 eq_define - e-TeX tracing -begin if eq_level(p)=cur_level then eq_destroy(eqtb[p]) -@y -label exit; -begin if eTeX_ex and(eq_type(p)=t)and(equiv(p)=e) then - begin assign_trace(p,"reassigning")@;@/ - eq_destroy(eqtb[p]); return; - end; -assign_trace(p,"changing")@;@/ -if eq_level(p)=cur_level then eq_destroy(eqtb[p]) -@z -%--------------------------------------- -@x [19] m.277 l.5985 eq_define - e-TeX tracing -end; -@y -assign_trace(p,"into")@;@/ -exit:end; -@z -%--------------------------------------- -@x [19] m.278 l.5992 eq_word_define - e-TeX tracing -begin if xeq_level[p]<>cur_level then -@y -label exit; -begin if eTeX_ex and(eqtb[p].int=w) then - begin assign_trace(p,"reassigning")@;@/ - return; - end; -assign_trace(p,"changing")@;@/ -if xeq_level[p]<>cur_level then -@z -%--------------------------------------- -@x [19] m.278 l.5996 eq_word_define - e-TeX tracing -end; -@y -assign_trace(p,"into")@;@/ -exit:end; -@z -%--------------------------------------- -@x [19] m.279 l.6005 geq_define - e-TeX tracing -begin eq_destroy(eqtb[p]); -eq_level(p):=level_one; eq_type(p):=t; equiv(p):=e; -@y -begin assign_trace(p,"globally changing")@;@/ -begin eq_destroy(eqtb[p]); -eq_level(p):=level_one; eq_type(p):=t; equiv(p):=e; -end; -assign_trace(p,"into")@;@/ -@z -%--------------------------------------- -@x [19] m.279 l.6010 geq_word_define - e-TeX tracing -begin eqtb[p].int:=w; xeq_level[p]:=level_one; -@y -begin assign_trace(p,"globally changing")@;@/ -begin eqtb[p].int:=w; xeq_level[p]:=level_one; -end; -assign_trace(p,"into")@;@/ -@z -%--------------------------------------- -@x [19] m.281 l.6027 - e-TeX tracing -@p@t\4@>@<Declare the procedure called |restore_trace|@>@;@/ -@y -@p -@z -%--------------------------------------- -@x [19] m.281 l.6034 unsave - e-TeX optimized \aftergroup -begin if cur_level>level_one then -@y -@!a:boolean; {have we already processed an \.{\\aftergroup} ?} -begin a:=false; -if cur_level>level_one then -@z -%--------------------------------------- -@x [19] m.282 l.6048 - e-TeX sparse arrays - else begin if save_type(save_ptr)=restore_old_value then -@y - else if save_type(save_ptr)=restore_sa then - begin sa_restore; sa_chain:=p; sa_level:=save_level(save_ptr); - end - else begin if save_type(save_ptr)=restore_old_value then -@z -%--------------------------------------- -@x [19] m.282 l.6056 - e-TeX tracing -done: cur_group:=save_level(save_ptr); cur_boundary:=save_index(save_ptr) -@y -done: @!stat if tracing_groups>0 then group_trace(true);@+tats@;@/ -if grp_stack[in_open]=cur_boundary then group_warning; - {groups possibly not properly nested with files} -cur_group:=save_level(save_ptr); cur_boundary:=save_index(save_ptr); -if eTeX_ex then decr(save_ptr) -@z -%--------------------------------------- -@x [19] m.284 l.6082 - e-TeX tracing -@ @<Declare the procedure called |restore_trace|@>= -@y -@ @<Declare \eTeX\ procedures for tr...@>= -@z -%--------------------------------------- -@x [20] m.289 l.6170 - e-TeX protected -@d end_match_token=@'7000 {$2^8\cdot|end_match|$} -@y -@d end_match_token=@'7000 {$2^8\cdot|end_match|$} -@d protected_token=@'7001 {$2^8\cdot|end_match|+1$} -@z -%--------------------------------------- -@x [20] m.294 l.6295 - e-TeX protected -end_match: print("->"); -@y -end_match: if c=0 then print("->"); -@z -%--------------------------------------- -@x [20] m.296 l.6316 print_meaning - e-TeX marks -else if cur_cmd=top_bot_mark then -@y -else if (cur_cmd=top_bot_mark)and(cur_chr<marks_code) then -@z -%--------------------------------------- -@x [21] m.298 l.6390 print_cmd_chr - e-TeX protected -procedure print_cmd_chr(@!cmd:quarterword;@!chr_code:halfword); -@y -procedure print_cmd_chr(@!cmd:quarterword;@!chr_code:halfword); -var n:integer; {temp variable} -@z -%--------------------------------------- -@x [21] m.299 l.6409 show_cur_cmd_chr - e-TeX tracing -@p procedure show_cur_cmd_chr; -@y -@p procedure show_cur_cmd_chr; -var n:integer; {level of \.{\\if...\\fi} nesting} -@!l:integer; {line where \.{\\if} started} -@!p:pointer; -@z -%--------------------------------------- -@x [21] m.299 l.6414 show_cur_cmd_chr - e-TeX tracing -print_cmd_chr(cur_cmd,cur_chr); print_char("}"); -@y -print_cmd_chr(cur_cmd,cur_chr); -if tracing_ifs>0 then - if cur_cmd>=if_test then if cur_cmd<=fi_or_else then - begin print(": "); - if cur_cmd=fi_or_else then - begin print_cmd_chr(if_test,cur_if); print_char(" "); - n:=0; l:=if_line; - end - else begin n:=1; l:=line; - end; - p:=cond_ptr; - while p<>null do - begin incr(n); p:=link(p); - end; - print("(level "); print_int(n); print_char(")"); print_if_line(l); - end; -print_char("}"); -@z -%--------------------------------------- -@x [22] m.303 l.6490 show_context - e-TeX scan_tokens -the terminal, under control of the procedure |read_toks|.) -@y -the terminal, under control of the procedure |read_toks|.) -Finally |18<=name<=19| indicates that we are reading a pseudo file -created by the \.{\\scantokens} command. -@z -%--------------------------------------- -@x [22] m.307 l.6687 - e-TeX basic, every_eof -only if |token_type>=macro|. -@^reference counts@> -@y -only if |token_type>=macro|. -@^reference counts@> - -Since \eTeX's additional token list parameters precede |toks_base|, the -corresponding token types must precede |write_text|. -@z -%--------------------------------------- -@x [22] m.307 l.6708 - e-TeX basic -@d write_text=15 {|token_type| code for \.{\\write}} -@y -@# -@d eTeX_text_offset=output_routine_loc-output_text -@d every_eof_text=every_eof_loc-eTeX_text_offset - {|token_type| code for \.{\\everyeof}} -@# -@d write_text=toks_base-eTeX_text_offset {|token_type| code for \.{\\write}} -@z -%--------------------------------------- -@x [22] m.311 l.6764 show_context - e-TeX scan_tokens - if (name>17) or (base_ptr=0) then bottom_line:=true; -@y - if (name>19) or (base_ptr=0) then bottom_line:=true; -@z -%--------------------------------------- -@x [22] m.313 l.6809 - e-TeX scan_tokens -else begin print_nl("l."); print_int(line); -@y -else begin print_nl("l."); - if index=in_open then print_int(line) - else print_int(line_stack[index+1]); {input from a pseudo file} -@z -%--------------------------------------- -@x [22] m.314 l.6831 - e-TeX basic -write_text: print_nl("<write> "); -@y -every_eof_text: print_nl("<everyeof> "); -write_text: print_nl("<write> "); -@z -%--------------------------------------- -@x [23] m.326 l.7024 - e-TeX optimized \aftergroup -begin t:=cur_tok; cur_tok:=p; back_input; cur_tok:=t; -@y -begin t:=cur_tok; cur_tok:=p; -if a then - begin p:=get_avail; info(p):=cur_tok; link(p):=loc; loc:=p; start:=p; - if cur_tok<right_brace_limit then - if cur_tok<left_brace_limit then decr(align_state) - else incr(align_state); - end -else begin back_input; a:=eTeX_ex; - end; -cur_tok:=t; -@z -%--------------------------------------- -@x [23] m.328 l.7052 begin_file_reading - e-TeX every_eof, tracing_nesting -incr(in_open); push_input; index:=in_open; -@y -incr(in_open); push_input; index:=in_open; -eof_seen[index]:=false; -grp_stack[index]:=cur_boundary; if_stack[index]:=cond_ptr; -@z -%--------------------------------------- -@x [23] m.329 l.7062 end_file_reading - e-TeX scan_tokens -if name>17 then a_close(cur_file); {forget it} -@y -if (name=18)or(name=19) then pseudo_close else -if name>17 then a_close(cur_file); {forget it} -@z -%--------------------------------------- -@x [23] m.331 l.7081 - e-TeX tracing_nesting -in_open:=0; open_parens:=0; max_buf_stack:=0; -@y -in_open:=0; open_parens:=0; max_buf_stack:=0; -grp_stack[0]:=0; if_stack[0]:=null; -@z -%--------------------------------------- -@x [24] m.362 l.7553 - e-TeX scan_tokens, every_eof -if not force_eof then -@y -if not force_eof then - if name<=19 then - begin if pseudo_input then {not end of file} - firm_up_the_line {this sets |limit|} - else if (every_eof<>null)and not eof_seen[index] then - begin limit:=first-1; eof_seen[index]:=true; {fake one empty line} - begin_token_list(every_eof,every_eof_text); goto restart; - end - else force_eof:=true; - end - else -@z -%--------------------------------------- -@x [24] m.362 l.7556 - e-TeX every_eof - else force_eof:=true; -@y - else if (every_eof<>null)and not eof_seen[index] then - begin limit:=first-1; eof_seen[index]:=true; {fake one empty line} - begin_token_list(every_eof,every_eof_text); goto restart; - end - else force_eof:=true; -@z -%--------------------------------------- -@x [24] m.362 l.7559 - e-TeX scan_tokens - begin print_char(")"); decr(open_parens); - update_terminal; {show user that file has been read} -@y - begin if tracing_nesting>0 then - if (grp_stack[in_open]<>cur_boundary)or@| - (if_stack[in_open]<>cond_ptr) then file_warning; - {give warning for some unfinished groups and/or conditionals} - if name>=19 then - begin print_char(")"); decr(open_parens); - update_terminal; {show user that file has been read} - end; -@z -%--------------------------------------- -@x [25] m.366 l.7643 - e-TeX basic -@t\4@>@<Declare the procedure called |insert_relax|@>@;@/ -@y -@t\4@>@<Declare the procedure called |insert_relax|@>@;@/ -@t\4@>@<Declare \eTeX\ procedures for expanding@>@;@/ -@z -%--------------------------------------- -@x [25] m.366 l.7650 expand - e-TeX cond -procedure expand; -@y -procedure expand; -label reswitch; -@z -%--------------------------------------- -@x [25] m.366 l.7661 expand - e-TeX cond -if cur_cmd<call then @<Expand a nonmacro@> -@y -reswitch: -if cur_cmd<call then @<Expand a nonmacro@> -@z -%--------------------------------------- -@x [25] m.367 l.7672 - e-TeX cond -expand_after:@<Expand the token after the next token@>; -@y -expand_after:if cur_chr=0 then @<Expand the token after the next token@> - else @<Negate a boolean conditional and |goto reswitch|@>; -@z -%--------------------------------------- -@x [25] m.377 l.7792 - e-TeX scan_tokens -input: if chr_code=0 then print_esc("input")@+else print_esc("endinput"); -@y -input: if chr_code=0 then print_esc("input") - @/@<Cases of |input| for |print_cmd_chr|@>@/ - else print_esc("endinput"); -@z -%--------------------------------------- -@x [25] m.378 l.7795 - e-TeX scan_tokens -if cur_chr>0 then force_eof:=true -@y -if cur_chr=1 then force_eof:=true -@/@<Cases for |input|@>@/ -@z -%--------------------------------------- -@x [25] m.382 l.7851 - e-TeX marks -@d top_mark_code=0 {the mark in effect at the previous page break} -@y -@d marks_code==5 {add this for \.{\\topmarks} etc.} -@# -@d top_mark_code=0 {the mark in effect at the previous page break} -@z -%--------------------------------------- -@x [25] m.385 l.7883 - e-TeX marks -top_bot_mark: case chr_code of -@y -top_bot_mark: begin case (chr_code mod marks_code) of -@z -%--------------------------------------- -@x [25] m.385 l.7889 - e-TeX marks - endcases; -@y - endcases; - if chr_code>=marks_code then print_char("s"); - end; -@z -%--------------------------------------- -@x [25] m.386 l.7895 - e-TeX marks -begin if cur_mark[cur_chr]<>null then - begin_token_list(cur_mark[cur_chr],mark_text); -@y -begin t:=cur_chr mod marks_code; -if cur_chr>=marks_code then scan_register_num@+else cur_val:=0; -if cur_val=0 then cur_ptr:=cur_mark[t] -else @<Compute the mark pointer for mark type |t| and class |cur_val|@>; -if cur_ptr<>null then begin_token_list(cur_ptr,mark_text); -@z -%--------------------------------------- -@x [25] m.389 l.7958 macro_call - e-TeX protected -if info(r)<>end_match_token then -@y -if info(r)=protected_token then r:=link(r); -if info(r)<>end_match_token then -@z -%--------------------------------------- -@x [26] m.409 l.8270 - e-TeX basic -@t\4\4@>@<Declare procedures that scan font-related stuff@> -@y -@t\4\4@>@<Declare \eTeX\ procedures for scanning@>@; -@t\4\4@>@<Declare procedures that scan font-related stuff@> -@z -%--------------------------------------- -@x [26] m.411 l.8314 - e-TeX sparse arrays -|glue_val|, or |mu_val|. -@y -|glue_val|, or |mu_val| more than |mem_bot| (dynamic variable-size nodes -cannot have these values) -@z -%--------------------------------------- -@x [26] m.411 l.8317 - e-TeX sparse arrays -primitive("count",register,int_val); -@!@:count_}{\.{\\count} primitive@> -primitive("dimen",register,dimen_val); -@!@:dimen_}{\.{\\dimen} primitive@> -primitive("skip",register,glue_val); -@!@:skip_}{\.{\\skip} primitive@> -primitive("muskip",register,mu_val); -@y -primitive("count",register,mem_bot+int_val); -@!@:count_}{\.{\\count} primitive@> -primitive("dimen",register,mem_bot+dimen_val); -@!@:dimen_}{\.{\\dimen} primitive@> -primitive("skip",register,mem_bot+glue_val); -@!@:skip_}{\.{\\skip} primitive@> -primitive("muskip",register,mem_bot+mu_val); -@z -%--------------------------------------- -@x [26] m.412 l.8327 - e-TeX sparse arrays -register: if chr_code=int_val then print_esc("count") - else if chr_code=dimen_val then print_esc("dimen") - else if chr_code=glue_val then print_esc("skip") - else print_esc("muskip"); -@y -register: @<Cases of |register| for |print_cmd_chr|@>; -@z -%--------------------------------------- -@x [26] m.413 l.8343 scan_something_internal - e-TeX basic -var m:halfword; {|chr_code| part of the operand token} -@y -label exit; -var m:halfword; {|chr_code| part of the operand token} -@!q,@!r:pointer; {general purpose indices} -@!tx:pointer; {effective tail node} -@!i:four_quarters; {character info} -@z -%--------------------------------------- -@x [26] m.413 l.8369 scan_something_internal - e-TeX basic -end; -@y -exit:end; -@z -%--------------------------------------- -@x [26] m.415 l.8390 - e-TeX sparse arrays - begin scan_eight_bit_int; m:=toks_base+cur_val; - end; - scanned_result(equiv(m))(tok_val); -@y - if m=mem_bot then - begin scan_register_num; - if cur_val<256 then cur_val:=equiv(toks_base+cur_val) - else begin find_sa_element(tok_val,cur_val,false); - if cur_ptr=null then cur_val:=null - else cur_val:=sa_ptr(cur_ptr); - end; - end - else cur_val:=sa_ptr(m) - else cur_val:=equiv(m); - cur_val_level:=tok_val; -@z -%--------------------------------------- -@x [26] m.416 l.8405 - e-TeX basic -|glue_val|, |input_line_no_code|, or |badness_code|. -@y -|glue_val|, |input_line_no_code|, or |badness_code|. -\eTeX\ inserts |last_node_type_code| after |glue_val| and adds -the codes for its extensions: |eTeX_version_code|, \dots\ . -@z -%--------------------------------------- -@x [26] m.416 l.8407 - e-TeX basic -@d input_line_no_code=glue_val+1 {code for \.{\\inputlineno}} -@d badness_code=glue_val+2 {code for \.{\\badness}} -@y -@d last_node_type_code=glue_val+1 {code for \.{\\lastnodetype}} -@d input_line_no_code=glue_val+2 {code for \.{\\inputlineno}} -@d badness_code=input_line_no_code+1 {code for \.{\\badness}} -@# -@d eTeX_int=badness_code+1 {first of \eTeX\ codes for integers} -@d eTeX_dim=eTeX_int+8 {first of \eTeX\ codes for dimensions} -@d eTeX_glue=eTeX_dim+9 {first of \eTeX\ codes for glue} -@d eTeX_mu=eTeX_glue+1 {first of \eTeX\ codes for muglue} -@d eTeX_expr=eTeX_mu+1 {first of \eTeX\ codes for expressions} -@z -%--------------------------------------- -@x [26] m.417 l.8440 - e-TeX interaction_mode -@+else print_esc("insertpenalties"); -@y -@/@<Cases of |set_page_int| for |print_cmd_chr|@>@/ -@+else print_esc("insertpenalties"); -@z -%--------------------------------------- -@x [26] m.417 l.8449 - e-TeX basic - othercases print_esc("badness") -@y - @/@<Cases of |last_item| for |print_cmd_chr|@>@/ - othercases print_esc("badness") -@z -%--------------------------------------- -@x [26] m.419 l.8469 - e-TeX interaction_mode -begin if m=0 then cur_val:=dead_cycles@+else cur_val:=insert_penalties; -@y -begin if m=0 then cur_val:=dead_cycles -@/@<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>@/ -else cur_val:=insert_penalties; -@z -%--------------------------------------- -@x [26] m.420 l.8474 - e-TeX sparse arrays -begin scan_eight_bit_int; -if box(cur_val)=null then cur_val:=0 @+else cur_val:=mem[box(cur_val)+m].sc; -@y -begin scan_register_num; fetch_box(q); -if q=null then cur_val:=0 @+else cur_val:=mem[q+m].sc; -@z -%--------------------------------------- -@x [26] m.423 l.8499 - e-TeX penalties -begin if par_shape_ptr=null then cur_val:=0 -@y -begin if m>par_shape_loc then @<Fetch a penalties array element@> -else if par_shape_ptr=null then cur_val:=0 -@z -%--------------------------------------- -@x [26] m.424 l.8504 - e-TeX \lastnodetype -@ Here is where \.{\\lastpenalty}, \.{\\lastkern}, and \.{\\lastskip} are -@y -@ Here is where \.{\\lastpenalty}, \.{\\lastkern}, \.{\\lastskip}, and -\.{\\lastnodetype} are -@z -%--------------------------------------- -@x [26] m.424 l.8508 - e-TeX TeXXeT -legal in similar contexts. -@y -legal in similar contexts. - -The macro |find_effective_tail_eTeX| sets |tx| to the last non-\.{\\endM} -node of the current list. -@z -%--------------------------------------- -@x [26] m.424 l.8510 - e-TeX TeXXeT -@<Fetch an item in the current node...@>= -@y -@d find_effective_tail_eTeX== -tx:=tail; -if not is_char_node(tx) then - if (type(tx)=math_node)and(subtype(tx)=end_M_code) then - begin r:=head; - repeat q:=r; r:=link(q); - until r=tx; - tx:=q; - end -@# -@d find_effective_tail==find_effective_tail_eTeX - -@<Fetch an item in the current node...@>= -@z -%--------------------------------------- -@x [26] m.424 l.8511 - e-TeX basic -if cur_chr>glue_val then -@y -if m>=input_line_no_code then -@z -%--------------------------------------- -@x [26] m.424 l.8512 - e-TeX basic - begin if cur_chr=input_line_no_code then cur_val:=line - else cur_val:=last_badness; {|cur_chr=badness_code|} -@y - if m>=eTeX_glue then @<Process an expression and |return|@>@; - else if m>=eTeX_dim then - begin case m of - @/@<Cases for fetching a dimension value@>@/ - end; {there are no other cases} - cur_val_level:=dimen_val; - end - else begin case m of - input_line_no_code: cur_val:=line; - badness_code: cur_val:=last_badness; - @/@<Cases for fetching an integer value@>@/ - end; {there are no other cases} -@z -%--------------------------------------- -@x [26] m.424 l.8517 - e-TeX last_node_type - cur_val_level:=cur_chr; - if not is_char_node(tail)and(mode<>0) then - case cur_chr of - int_val: if type(tail)=penalty_node then cur_val:=penalty(tail); - dimen_val: if type(tail)=kern_node then cur_val:=width(tail); - glue_val: if type(tail)=glue_node then - begin cur_val:=glue_ptr(tail); - if subtype(tail)=mu_glue then cur_val_level:=mu_val; - end; - end {there are no other cases} - else if (mode=vmode)and(tail=head) then -@y - find_effective_tail; - if cur_chr=last_node_type_code then - begin cur_val_level:=int_val; - if (tx=head)or(mode=0) then cur_val:=-1; - end - else cur_val_level:=cur_chr; - if not is_char_node(tx)and(mode<>0) then - case cur_chr of - int_val: if type(tx)=penalty_node then cur_val:=penalty(tx); - dimen_val: if type(tx)=kern_node then cur_val:=width(tx); - glue_val: if type(tx)=glue_node then - begin cur_val:=glue_ptr(tx); - if subtype(tx)=mu_glue then cur_val_level:=mu_val; - end; - last_node_type_code: if type(tx)<=unset_node then cur_val:=type(tx)+1 - else cur_val:=unset_node+2; - end {there are no other cases} - else if (mode=vmode)and(tx=head) then -@z -%--------------------------------------- -@x [26] m.424 l.8531 - e-TeX last_node_type - glue_val: if last_glue<>max_halfword then cur_val:=last_glue; -@y - glue_val: if last_glue<>max_halfword then cur_val:=last_glue; - last_node_type_code: cur_val:=last_node_type; -@z -%--------------------------------------- -@x [26] m.427 l.8547 - e-TeX sparse arrays -begin scan_eight_bit_int; -case m of -@y -begin if (m<mem_bot)or(m>lo_mem_stat_max) then - begin cur_val_level:=sa_type(m); - if cur_val_level<glue_val then cur_val:=sa_int(m) - else cur_val:=sa_ptr(m); - end -else begin scan_register_num; cur_val_level:=m-mem_bot; - if cur_val>255 then - begin find_sa_element(cur_val_level,cur_val,false); - if cur_ptr=null then - if cur_val_level<glue_val then cur_val:=0 - else cur_val:=zero_glue - else if cur_val_level<glue_val then cur_val:=sa_int(cur_ptr) - else cur_val:=sa_ptr(cur_ptr); - end - else - case cur_val_level of -@z -%--------------------------------------- -@x [26] m.427 l.8554 - e-TeX sparse arrays -cur_val_level:=m; -@y - end; -@z -%--------------------------------------- -@x [26] m.461 l.9082 - e-TeX expr -exit:end; -@y -exit:end; -@# -@<Declare procedures needed for expressions@>@; -@z -%--------------------------------------- -@x [27] m.464 l.9141 - e-TeX basic -@p function str_toks(@!b:pool_pointer):pointer; -@y -@p @t\4@>@<Declare \eTeX\ procedures for token lists@>@;@/ -function str_toks(@!b:pool_pointer):pointer; -@z -%--------------------------------------- -@x [27] m.465 l.9166 the_toks - e-TeX unexpanded -@p function the_toks:pointer; -@y -@p function the_toks:pointer; -label exit; -@z -%--------------------------------------- -@x [27] m.465 l.9170 the_toks - e-TeX unexpanded -begin get_x_token; scan_something_internal(tok_val,false); -@y -@!c:small_number; {value of |cur_chr|} -begin @<Handle \.{\\unexpanded} or \.{\\detokenize} and |return|@>;@/ -get_x_token; scan_something_internal(tok_val,false); -@z -%--------------------------------------- -@x [27] m.465 l.9184 the_toks - e-TeX unexpanded -end; -@y -exit:end; -@z -%--------------------------------------- -@x [27] m.468 l.9207 - e-TeX basic -@d number_code=0 {command code for \.{\\number}} -@y -\eTeX\ adds \.{\\eTeXrevision} such that |job_name_code| remains last. - -@d number_code=0 {command code for \.{\\number}} -@z -%--------------------------------------- -@x [27] m.468 l.9212 - e-TeX basic -@d job_name_code=5 {command code for \.{\\jobname}} -@y -@d etex_convert_base=5 {base for \eTeX's command codes} -@d eTeX_revision_code=etex_convert_base {command code for \.{\\eTeXrevision}} -@d etex_convert_codes=etex_convert_base+1 {end of \eTeX's command codes} -@d job_name_code=etex_convert_codes {command code for \.{\\jobname}} -@z -%--------------------------------------- -@x [27] m.469 l.9235 - e-TeX basic - othercases print_esc("jobname") -@y - eTeX_revision_code: print_esc("eTeXrevision"); - othercases print_esc("jobname") -@z -%--------------------------------------- -@x [27] m.471 l.9260 - e-TeX basic -job_name_code: if job_name=0 then open_log_file; -@y -eTeX_revision_code: do_nothing; -job_name_code: if job_name=0 then open_log_file; -@z -%--------------------------------------- -@x [27] m.472 l.9276 - e-TeX basic -job_name_code: print(job_name); -@y -eTeX_revision_code: print(eTeX_revision); -job_name_code: print(job_name); -@z -%--------------------------------------- -@x [27] m.478 l.9386 - e-TeX protected - if cur_cmd<=max_command then goto done2; -@y - if cur_cmd>=call then - if info(link(cur_chr))=protected_token then - begin cur_cmd:=relax; cur_chr:=no_expand_flag; - end; - if cur_cmd<=max_command then goto done2; -@z -%--------------------------------------- -@x [27] m.482 l.9434 read_toks - e-TeX read_line -@p procedure read_toks(@!n:integer;@!r:pointer); -@y -@p procedure read_toks(@!n:integer;@!r:pointer;@!j:halfword); -@z -%--------------------------------------- -@x [27] m.483 l.9460 - e-TeX read_line -loop@+ begin get_token; -@y -@<Handle \.{\\readline} and |goto done|@>;@/ -loop@+ begin get_token; -@z -%--------------------------------------- -@x [28] m.487 l.9512 - e-TeX cond -@d if_char_code=0 { `\.{\\if}' } -@y -@d unless_code=32 {amount added for `\.{\\unless}' prefix} -@# -@d if_char_code=0 { `\.{\\if}' } -@z -%--------------------------------------- -@x [28] m.488 l.9567 - e-TeX cond -if_test: case chr_code of -@y -if_test: begin if chr_code>=unless_code then print_esc("unless"); -case chr_code mod unless_code of -@z -%--------------------------------------- -@x [28] m.488 l.9584 - e-TeX cond - othercases print_esc("if") - endcases; -@y - @/@<Cases of |if_test| for |print_cmd_chr|@>@/ - othercases print_esc("if") - endcases; -end; -@z -%--------------------------------------- -@x [28] m.494 l.9658 pass_text - e-TeX tracing -done: scanner_status:=save_scanner_status; -@y -done: scanner_status:=save_scanner_status; -if tracing_ifs>0 then show_cur_cmd_chr; -@z -%--------------------------------------- -@x [28] m.496 l.9674 - e-TeX tracing_nesting -begin p:=cond_ptr; if_line:=if_line_field(p); -@y -begin if if_stack[in_open]=cond_ptr then if_warning; - {conditionals possibly not properly nested with files} -p:=cond_ptr; if_line:=if_line_field(p); -@z -%--------------------------------------- -@x [28] m.498 l.9711 conditional - e-TeX cond -begin @<Push the condition stack@>;@+save_cond_ptr:=cond_ptr;this_if:=cur_chr;@/ -@<Either process \.{\\ifcase} or set |b| to the value of a boolean condition@>; -@y -@!is_unless:boolean; {was this if preceded by `\.{\\unless}' ?} -begin if tracing_ifs>0 then if tracing_commands<=1 then show_cur_cmd_chr; -@<Push the condition stack@>;@+save_cond_ptr:=cond_ptr; -is_unless:=(cur_chr>=unless_code); this_if:=cur_chr mod unless_code;@/ -@<Either process \.{\\ifcase} or set |b| to the value of a boolean condition@>; -if is_unless then b:=not b; -@z -%--------------------------------------- -@x [28] m.501 l.9754 - e-TeX cond -if_false_code: b:=false; -@y -if_false_code: b:=false; -@/@<Cases for |conditional|@>@/ -@z -%--------------------------------------- -@x [28] m.505 l.9793 - e-TeX sparse arrays -begin scan_eight_bit_int; p:=box(cur_val); -@y -begin scan_register_num; fetch_box(p); -@z -%--------------------------------------- -@x [28] m.510 l.9883 - e-TeX cond -if cur_chr>if_limit then -@y -begin if tracing_ifs>0 then if tracing_commands<=1 then show_cur_cmd_chr; -if cur_chr>if_limit then -@z -%--------------------------------------- -@x [28] m.510 l.9894 - e-TeX cond - end -@y - end; -end -@z -%--------------------------------------- -@x [29] m.536 l.10348 - e-TeX basic -print_two(sys_time div 60); print_char(":"); print_two(sys_time mod 60); -@y -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; -@z -%--------------------------------------- -@x [30] m.581 l.11282 char_warning - e-TeX tracing -begin if tracing_lost_chars>0 then -@y -var old_setting: integer; {saved value of |tracing_online|} -begin if tracing_lost_chars>0 then - begin old_setting:=tracing_online; - if eTeX_ex and(tracing_lost_chars>1) then tracing_online:=1; -@z -%--------------------------------------- -@x [30] m.581 l.11289 char_warning - e-TeX tracing -end; -@y - tracing_online:=old_setting; - end; -end; -@z -%--------------------------------------- -@x [32] m.616 l.12257 - e-TeX TeXXeT -this is essentially the depth of |push| commands in the \.{DVI} output. -@y -this is essentially the depth of |push| commands in the \.{DVI} output. - -For mixed direction text (\TeXXeT) the current text direction is called -|cur_dir|. As the box being shipped out will never be used again and -soon be recycled, we can simply reverse any R-text (i.e., right-to-left) -segments of hlist nodes as well as complete hlist nodes embedded in such -segments. Moreover this can be done iteratively rather than recursively. -There are, however, two complications related to leaders that require -some additional bookkeeping: (1)~One and the same hlist node might be -used more than once (but never inside both L- and R-text); and -(2)~leader boxes inside hlists must be aligned with respect to the left -edge of the original hlist. - -A math node is changed into a kern node whenever the text direction -remains the same, it is replaced by an |edge_node| if the text direction -changes; the subtype of an an |hlist_node| inside R-text is changed to -|reversed| once its hlist has been reversed. -@!@^data structure assumptions@> -@z -%--------------------------------------- -@x [32] m.616 l.12259 - e-TeX TeXXeT -@d synch_h==if cur_h<>dvi_h then -@y -@d reversed=1 {subtype for an |hlist_node| whose hlist has been reversed} -@d dlist=2 {subtype for an |hlist_node| from display math mode} -@d box_lr(#) == (qo(subtype(#))) {direction mode of a box} -@d set_box_lr(#) == subtype(#):=set_box_lr_end -@d set_box_lr_end(#) == qi(#) -@# -@d left_to_right=0 -@d right_to_left=1 -@d reflected==1-cur_dir {the opposite of |cur_dir|} -@# -@d synch_h==if cur_h<>dvi_h then -@z -%--------------------------------------- -@x [32] m.619 l.12327 hlist_out - e-TeX TeXXeT -@!edge:scaled; {left edge of sub-box, or right edge of leader space} -@y -@!edge:scaled; {right edge of sub-box or leader space} -@!prev_p:pointer; {one step behind |p|} -@z -%--------------------------------------- -@x [32] m.619 l.12337 hlist_out - e-TeX TeXXeT -save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; left_edge:=cur_h; -@y -save_loc:=dvi_offset+dvi_ptr; base_line:=cur_v; -prev_p:=this_box+list_offset; -@<Initialize |hlist_out| for mixed direction typesetting@>; -left_edge:=cur_h; -@z -%--------------------------------------- -@x [32] m.619 l.12340 hlist_out - e-TeX TeXXeT -prune_movements(save_loc); -@y -@<Finish |hlist_out| for mixed direction typesetting@>; -prune_movements(save_loc); -@z -%--------------------------------------- -@x [32] m.620 l.12359 - e-TeX TeXXeT - p:=link(p); -@y - prev_p:=link(prev_p); {N.B.: not |prev_p:=p|, |p| might be |lig_trick|} - p:=link(p); -@z -%--------------------------------------- -@x [32] m.622 l.12384 - e-TeX TeXXeT -kern_node,math_node:cur_h:=cur_h+width(p); -@y -kern_node:cur_h:=cur_h+width(p); -math_node: @<Handle a math node in |hlist_out|@>; -@z -%--------------------------------------- -@x [32] m.622 l.12386 - e-TeX TeXXeT -othercases do_nothing -@y -@/@<Cases of |hlist_out| that arise in mixed direction text only@>@; -othercases do_nothing -@z -%--------------------------------------- -@x [32] m.622 l.12391 - e-TeX TeXXeT -next_p:p:=link(p); -@y -next_p:prev_p:=p; p:=link(p); -@z -%--------------------------------------- -@x [32] m.623 l.12398 - e-TeX TeXXeT - temp_ptr:=p; edge:=cur_h; -@y - temp_ptr:=p; edge:=cur_h+width(p); - if cur_dir=right_to_left then cur_h:=edge; -@z -%--------------------------------------- -@x [32] m.623 l.12401 - e-TeX TeXXeT - cur_h:=edge+width(p); cur_v:=base_line; -@y - cur_h:=edge; cur_v:=base_line; -@z -%--------------------------------------- -@x [32] m.625 l.12419 - e-TeX TeXXeT - glue_temp:=-billion - -@<Move right or output leaders@>= -begin g:=glue_ptr(p); rule_wd:=width(g)-cur_g; -@y - glue_temp:=-billion -@# -@d round_glue==g:=glue_ptr(p); rule_wd:=width(g)-cur_g; -@z -%--------------------------------------- -@x [32] m.625 l.12438 - e-TeX TeXXeT -rule_wd:=rule_wd+cur_g; -@y -rule_wd:=rule_wd+cur_g - -@<Move right or output leaders@>= -begin round_glue; -if eTeX_ex then @<Handle a glue node for mixed direction typesetting@>; -@z -%--------------------------------------- -@x [32] m.626 l.12454 - e-TeX TeXXeT - edge:=cur_h+rule_wd; lx:=0; -@y - if cur_dir=right_to_left then cur_h:=cur_h-10; - edge:=cur_h+rule_wd; lx:=0; -@z -%--------------------------------------- -@x [32] m.626 l.12460 - e-TeX TeXXeT - cur_h:=edge-10; goto next_p; -@y - if cur_dir=right_to_left then cur_h:=edge - else cur_h:=edge-10; - goto next_p; -@z -%--------------------------------------- -@x [32] m.628 l.12499 - e-TeX TeXXeT -synch_h; save_h:=dvi_h; temp_ptr:=leader_box; -@y -synch_h; save_h:=dvi_h; temp_ptr:=leader_box; -if cur_dir=right_to_left then cur_h:=cur_h+leader_wd; -@z -%--------------------------------------- -@x [32] m.632 l.12573 - e-TeX TeXXeT - cur_h:=left_edge+shift_amount(p); {shift the box right} -@y - if cur_dir=right_to_left then cur_h:=left_edge-shift_amount(p) - else cur_h:=left_edge+shift_amount(p); {shift the box right} -@z -%--------------------------------------- -@x [32] m.633 l.12585 - e-TeX TeXXeT - begin synch_h; synch_v; - dvi_out(put_rule); dvi_four(rule_ht); dvi_four(rule_wd); -@y - begin if cur_dir=right_to_left then cur_h:=cur_h-rule_wd; - synch_h; synch_v; - dvi_out(put_rule); dvi_four(rule_ht); dvi_four(rule_wd); - cur_h:=left_edge; -@z -%--------------------------------------- -@x [32] m.637 l.12651 - e-TeX TeXXeT -begin cur_h:=left_edge+shift_amount(leader_box); synch_h; save_h:=dvi_h;@/ -@y -begin if cur_dir=right_to_left then - cur_h:=left_edge-shift_amount(leader_box) - else cur_h:=left_edge+shift_amount(leader_box); -synch_h; save_h:=dvi_h;@/ -@z -%--------------------------------------- -@x [32] m.638 l.12688 ship_out - e-TeX TeXXeT -@<Ship box |p| out@>; -@y -@<Ship box |p| out@>; -if eTeX_ex then @<Check for LR anomalies at the end of |ship_out|@>; -@z -%--------------------------------------- -@x [33] m.649 l.12909 hpack - e-TeX TeXXeT -h:=0; @<Clear dimensions to zero@>; -@y -h:=0; @<Clear dimensions to zero@>; -if TeXXeT_en then @<Initialize the LR stack@>; -@z -%--------------------------------------- -@x [33] m.649 l.12919 hpack - e-TeX TeXXeT -exit: hpack:=r; -@y -exit: if TeXXeT_en then @<Check for LR anomalies at the end of |hpack|@>; -hpack:=r; -@z -%--------------------------------------- -@x [33] m.651 l.12943 - e-TeX TeXXeT - kern_node,math_node: x:=x+width(p); -@y - kern_node: x:=x+width(p); - math_node: begin x:=x+width(p); - if TeXXeT_en then @<Adjust \(t)the LR stack for the |hpack| routine@>; - end; -@z -%--------------------------------------- -@x [34] m.687 l.13514 - e-TeX middle -\TeX's \.{\\left} and \.{\\right}. The |nucleus| of such noads is -@y -\TeX's \.{\\left} and \.{\\right} as well as \eTeX's \.{\\middle}. -The |nucleus| of such noads is -@z -%--------------------------------------- -@x [34] m.687 l.13531 - e-TeX middle -@d delimiter==nucleus {|delimiter| field in left and right noads} -@y -@d delimiter==nucleus {|delimiter| field in left and right noads} -@d middle_noad==1 {|subtype| of right noad representing \.{\\middle}} -@z -%--------------------------------------- -@x [34] m.696 l.13704 - e-TeX middle -right_noad: begin print_esc("right"); print_delimiter(delimiter(p)); - end; -end; -if subtype(p)<>normal then - if subtype(p)=limits then print_esc("limits") - else print_esc("nolimits"); -if type(p)<left_noad then print_subsidiary_data(nucleus(p),"."); -@y -right_noad: begin if subtype(p)=normal then print_esc("right") - else print_esc("middle"); - print_delimiter(delimiter(p)); - end; -end; -if type(p)<left_noad then - begin if subtype(p)<>normal then - if subtype(p)=limits then print_esc("limits") - else print_esc("nolimits"); - print_subsidiary_data(nucleus(p),"."); - end; -@z -%--------------------------------------- -@x [36] m.727 l.14302 - e-TeX middle -done_with_noad: r:=q; r_type:=type(r); -@y -done_with_noad: r:=q; r_type:=type(r); -if r_type=right_noad then - begin r_type:=left_noad; cur_style:=style; @<Set up the values...@>; - end; -@z -%--------------------------------------- -@x [36] m.760 l.14963 - e-TeX middle - r_type:=t; -@y - if type(q)=right_noad then t:=open_noad; - r_type:=t; -@z -%--------------------------------------- -@x [36] m.762 l.15004 make_left_right - e-TeX middle -begin if style<script_style then cur_size:=text_size -else cur_size:=16*((style-text_style) div 2); -@y -begin cur_style:=style; @<Set up the values...@>; -@z -%--------------------------------------- -@x [37] m.785 l.15495 align_peek - e-TeX protected -begin restart: align_state:=1000000; @<Get the next non-blank non-call token@>; -@y -begin restart: align_state:=1000000; -repeat get_x_or_protected; -until cur_cmd<>spacer; -@z -%--------------------------------------- -@x [37] m.791 l.15606 fin_col - e-TeX protected -align_state:=1000000; @<Get the next non-blank non-call token@>; -@y -align_state:=1000000; -repeat get_x_or_protected; -until cur_cmd<>spacer; -@z -%--------------------------------------- -@x [37] m.807 l.15868 - e-TeX TeXXeT - begin type(q):=hlist_node; width(q):=width(p); -@y - begin type(q):=hlist_node; width(q):=width(p); - if nest[nest_ptr-1].mode_field=mmode then set_box_lr(q)(dlist); {for |ship_out|} -@z -%--------------------------------------- -@x [37] m.808 l.15886 - e-TeX TeXXeT -n:=span_count(r); t:=width(s); w:=t; u:=hold_head; -@y -n:=span_count(r); t:=width(s); w:=t; u:=hold_head; -set_box_lr(r)(0); {for |ship_out|} -@z -%--------------------------------------- -@x [38] m.814 l.16009 - e-TeX penalties -There is one explicit parameter: |final_widow_penalty| is the amount of -additional penalty to be inserted before the final line of the paragraph. -@y -There is one explicit parameter: |d| is true for partial paragraphs -preceding display math mode; in this case the amount of additional -penalty inserted before the final line is |display_widow_penalty| -instead of |widow_penalty|. -@z -%--------------------------------------- -@x [38] m.815 l.16036 line_break - e-TeX penalties -procedure line_break(@!final_widow_penalty:integer); -@y -procedure line_break(@!d:boolean); -@z -%--------------------------------------- -@x [38] m.815 l.16046 - e-TeX basic -end; -@y -end; -@# -@t\4@>@<Declare \eTeX\ procedures for use by |main_control|@> -@z -%--------------------------------------- -@x [38] m.816 l.16066 - e-TeX last_line_fit -link(tail):=new_param_glue(par_fill_skip_code); -@y -link(tail):=new_param_glue(par_fill_skip_code); -last_line_fill:=link(tail); -@z -%--------------------------------------- -@x [38] m.819 l.16131 - e-TeX last_line_fit -@d active_node_size=3 {number of words in active nodes} -@y -@d active_node_size_normal=3 {number of words in normal active nodes} -@z -%--------------------------------------- -@x [38] m.827 l.16294 - e-TeX last_line_fit -background[6]:=shrink(q)+shrink(r); -@y -background[6]:=shrink(q)+shrink(r); -@<Check for special treatment of last line of paragraph@>; -@z -%--------------------------------------- -@x [38] m.829 l.16345 try_break - e-TeX last_line_fit -label exit,done,done1,continue,deactivate; -@y -label exit,done,done1,continue,deactivate,found,not_found; -@z -%--------------------------------------- -@x [38] m.845 l.16637 - e-TeX last_line_fit -total_demerits(q):=minimal_demerits[fit_class]; -@y -total_demerits(q):=minimal_demerits[fit_class]; -if do_last_line_fit then - @<Store \(a)additional data in the new active node@>; -@z -%--------------------------------------- -@x [38] m.846 l.16650 - e-TeX last_line_fit -print(" t="); print_int(total_demerits(q)); -@y -print(" t="); print_int(total_demerits(q)); -if do_last_line_fit then @<Print additional data in the new active node@>; -@z -%--------------------------------------- -@x [38] m.851 l.16749 - e-TeX last_line_fit -if (b>inf_bad)or(pi=eject_penalty) then -@y -if do_last_line_fit then @<Adjust \(t)the additional data for last line@>; -found: -if (b>inf_bad)or(pi=eject_penalty) then -@z -%--------------------------------------- -@x [38] m.852 l.16773 - e-TeX last_line_fit - begin b:=0; fit_class:=decent_fit; {infinite stretch} -@y - begin if do_last_line_fit then - begin if cur_p=null then {the last line of a paragraph} - @<Perform computations for last line and |goto found|@>; - shortfall:=0; - end; - b:=0; fit_class:=decent_fit; {infinite stretch} -@z -%--------------------------------------- -@x [38] m.855 l.16830 - e-TeX last_line_fit - best_place[fit_class]:=break_node(r); best_pl_line[fit_class]:=l; -@y - best_place[fit_class]:=break_node(r); best_pl_line[fit_class]:=l; - if do_last_line_fit then - @<Store \(a)additional data for this feasible break@>; -@z -%--------------------------------------- -@x [39] m.863 l.17003 - e-TeX last_line_fit - end;@+tats@/ -@y - end;@+tats@/ -if do_last_line_fit then @<Adjust \(t)the final line of the paragraph@>; -@z -%--------------------------------------- -@x [39] m.864 l.17014 - e-TeX last_line_fit -line_number(q):=prev_graf+1; total_demerits(q):=0; link(active):=q; -@y -line_number(q):=prev_graf+1; total_demerits(q):=0; link(active):=q; -if do_last_line_fit then - @<Initialize additional fields of the first active node@>; -@z -%--------------------------------------- -@x [39] m.866 l.17064 - e-TeX TeXXeT -math_node: begin auto_breaking:=(subtype(cur_p)=after); kern_break; -@y -math_node: begin if subtype(cur_p)<L_code then auto_breaking:=odd(subtype(cur_p)); - kern_break; -@z -%--------------------------------------- -@x [39] m.876 l.17226 - e-TeX penalties -post_line_break(final_widow_penalty) -@y -post_line_break(d) -@z -%--------------------------------------- -@x [39] m.877 l.17240 post_line_break - e-TeX penalties -procedure post_line_break(@!final_widow_penalty:integer); -@y -procedure post_line_break(@!d:boolean); -@z -%--------------------------------------- -@x [39] m.877 l.17250 post_line_break - e-TeX TeXXeT -begin @<Reverse the links of the relevant passive nodes, setting |cur_p| to the -@y -@!LR_ptr:pointer; {stack of LR codes} -begin LR_ptr:=LR_save; -@<Reverse the links of the relevant passive nodes, setting |cur_p| to the -@z -%--------------------------------------- -@x [39] m.877 l.17263 post_line_break - e-TeX TeXXeT -prev_graf:=best_line-1; -@y -prev_graf:=best_line-1; -LR_save:=LR_ptr; -@z -%--------------------------------------- -@x [39] m.879 l.17293 - e-TeX TeXXeT - 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|} - if type(q)=math_node then if TeXXeT_en then - @<Adjust \(t)the LR stack for the |post_line_break| routine@>; -@z -%--------------------------------------- -@x [39] m.880 l.17310 - e-TeX TeXXeT -@<Modify the end of the line to reflect the nature of the break and to include - \.{\\rightskip}; also set the proper value of |disc_break|@>; -@y -if TeXXeT_en then - @<Insert LR nodes at the beginning of the current line and adjust - the LR stack based on LR nodes in this line@>; -@<Modify the end of the line to reflect the nature of the break and to include - \.{\\rightskip}; also set the proper value of |disc_break|@>; -if TeXXeT_en then @<Insert LR nodes at the end of the current line@>; -@z -%--------------------------------------- -@x [39] m.881 l.17333 - e-TeX TeXXeT - else if (type(q)=math_node)or(type(q)=kern_node) then width(q):=0; -@y - else if type(q)=kern_node then width(q):=0 - else if type(q)=math_node then - begin width(q):=0; - if TeXXeT_en then @<Adjust \(t)the LR stack for the |p...@>; - end; -@z -%--------------------------------------- -@x [39] m.890 l.17427 - e-TeX penalties - begin pen:=inter_line_penalty; - if cur_line=prev_graf+1 then pen:=pen+club_penalty; - if cur_line+2=best_line then pen:=pen+final_widow_penalty; -@y - begin q:=inter_line_penalties_ptr; - if q<>null then - begin r:=cur_line; - if r>penalty(q) then r:=penalty(q); - pen:=penalty(q+r); - end - else pen:=inter_line_penalty; - q:=club_penalties_ptr; - if q<>null then - begin r:=cur_line-prev_graf; - if r>penalty(q) then r:=penalty(q); - pen:=pen+penalty(q+r); - end - else if cur_line=prev_graf+1 then pen:=pen+club_penalty; - if d then q:=display_widow_penalties_ptr - else q:=widow_penalties_ptr; - if q<>null then - begin r:=best_line-cur_line-1; - if r>penalty(q) then r:=penalty(q); - pen:=pen+penalty(q+r); - end - else if cur_line+2=best_line then - if d then pen:=pen+display_widow_penalty - else pen:=pen+widow_penalty; -@z -%--------------------------------------- -@x [40] m.891 l.17455 - e-TeX TeXXeT -implicit kern nodes, and $p_m$ is a glue or penalty or insertion or adjust -@y -implicit kern or text direction nodes, and $p_m$ is a glue or penalty or -insertion or adjust -@z -%--------------------------------------- -@x [40] m.891 l.17494 - e-TeX hyph_codes -cur_lang:=init_cur_lang; l_hyf:=init_l_hyf; r_hyf:=init_r_hyf; -@y -cur_lang:=init_cur_lang; l_hyf:=init_l_hyf; r_hyf:=init_r_hyf; -set_hyph_index; -@z -%--------------------------------------- -@x [40] m.896 l.17557 - e-TeX TeXXeT - else if (type(s)=kern_node)and(subtype(s)=normal) then goto continue -@y - else if (type(s)=kern_node)and(subtype(s)=normal) then goto continue - else if (type(s)=math_node)and(subtype(s)>=L_code) then goto continue -@z -%--------------------------------------- -@x [40] m.896 l.17563 - e-TeX hyph_codes - if lc_code(c)<>0 then - if (lc_code(c)=c)or(uc_hyph>0) then goto done2 -@y - set_lc_code(c); - if hc[0]<>0 then - if (hc[0]=c)or(uc_hyph>0) then goto done2 -@z -%--------------------------------------- -@x [40] m.897 l.17580 - e-TeX hyph_codes - if lc_code(c)=0 then goto done3; - if hn=63 then goto done3; - hb:=s; incr(hn); hu[hn]:=c; hc[hn]:=lc_code(c); hyf_bchar:=non_char; -@y - set_lc_code(c); - if hc[0]=0 then goto done3; - if hn=63 then goto done3; - hb:=s; incr(hn); hu[hn]:=c; hc[hn]:=hc[0]; hyf_bchar:=non_char; -@z -%--------------------------------------- -@x [40] m.898 l.17606 - e-TeX hyph_codes - if lc_code(c)=0 then goto done3; - if j=63 then goto done3; - incr(j); hu[j]:=c; hc[j]:=lc_code(c);@/ -@y - set_lc_code(c); - if hc[0]=0 then goto done3; - if j=63 then goto done3; - incr(j); hu[j]:=c; hc[j]:=hc[0];@/ -@z -%--------------------------------------- -@x [40] m.899 l.17623 - e-TeX TeXXeT - othercases goto done1 -@y - math_node: if subtype(s)>=L_code then goto done4@+else goto done1; - othercases goto done1 -@z -%--------------------------------------- -@x [42] m.934 l.18245 new_hyph_exceptions - e-TeX hyph_codes -label reswitch, exit, found, not_found; -@y -label reswitch, exit, found, not_found, not_found1; -@z -%--------------------------------------- -@x [42] m.934 l.18255 new_hyph_exceptions - e-TeX hyph_codes -set_cur_lang; -@y -set_cur_lang; -@!init if trie_not_ready then - begin hyph_index:=0; goto not_found1; - end; -tini@/ -set_hyph_index; -not_found1: -@z -%--------------------------------------- -@x [42] m.937 l.18287 - e-TeX hyph_codes -else begin if lc_code(cur_chr)=0 then -@y -else begin set_lc_code(cur_chr); - if hc[0]=0 then -@z -%--------------------------------------- -@x [42] m.937 l.18295 - e-TeX hyph_codes - begin incr(n); hc[n]:=lc_code(cur_chr); -@y - begin incr(n); hc[n]:=hc[0]; -@z -%--------------------------------------- -@x [43] m.952 l.18583 - e-TeX hyph_codes -trie_root:=compress_trie(trie_root); {identify equivalent subtries} -@y -hyph_root:=compress_trie(hyph_root); -trie_root:=compress_trie(trie_root); {identify equivalent subtries} -@z -%--------------------------------------- -@x [43] m.958 l.18671 - e-TeX hyph_codes -if trie_root=0 then {no patterns were given} -@y -if trie_max=0 then {no patterns were given} -@z -%--------------------------------------- -@x [43] m.958 l.18675 - e-TeX hyph_codes -else begin trie_fix(trie_root); {this fixes the non-holes in |trie|} -@y -else begin if hyph_root>0 then trie_fix(hyph_root); - if trie_root>0 then trie_fix(trie_root); {this fixes the non-holes in |trie|} -@z -%--------------------------------------- -@x [43] m.960 l.18718 new_patterns - e-TeX hyph_codes - brace@>; -@y - brace@>; - if saving_hyph_codes>0 then - @<Store hyphenation codes for current language@>; -@z -%--------------------------------------- -@x [43] m.966 l.18825 init_trie - e-TeX hyph_codes -@<Move the data into |trie|@>; -@y -if hyph_root<>0 then @<Pack all stored |hyph_codes|@>; -@<Move the data into |trie|@>; -@z -%--------------------------------------- -@x [44] m.968 l.18841 - e-TeX saved_items -whenever this is possible without backspacing. -@y -whenever this is possible without backspacing. - -When the second argument |s| is |false| the deleted nodes are destroyed, -otherwise they are collected in a list starting at |split_disc|. -@z -%--------------------------------------- -@x [44] m.968 l.18848 prune_page_top - e-TeX saved_items -@p function prune_page_top(@!p:pointer):pointer; {adjust top after page break} -var prev_p:pointer; {lags one step behind |p|} -@!q:pointer; {temporary variable for list manipulation} -@y -@p function prune_page_top(@!p:pointer;@!s:boolean):pointer; - {adjust top after page break} -var prev_p:pointer; {lags one step behind |p|} -@!q,@!r:pointer; {temporary variables for list manipulation} -@z -%--------------------------------------- -@x [44] m.968 l.18859 prune_page_top - e-TeX saved_items - link(prev_p):=p; flush_node_list(q); -@y - link(prev_p):=p; - if s then - begin if split_disc=null then split_disc:=q@+else link(r):=q; - r:=q; - end - else flush_node_list(q); -@z -%--------------------------------------- -@x [44] m.977 l.19026 vsplit - e-TeX marks, sparse arrays -@p function vsplit(@!n:eight_bits; @!h:scaled):pointer; -@y -@p @t\4@>@<Declare the function called |do_marks|@>@; -function vsplit(@!n:halfword; @!h:scaled):pointer; -@z -%--------------------------------------- -@x [44] m.977 l.19032 vsplit - e-TeX sparse arrays -begin v:=box(n); -@y -begin cur_val:=n; fetch_box(v); -@z -%--------------------------------------- -@x [44] m.977 l.19033 vsplit - e-TeX marks, saved_items -if split_first_mark<>null then -@y -flush_node_list(split_disc); split_disc:=null; -if sa_mark<>null then - if do_marks(vsplit_init,0,sa_mark) then sa_mark:=null; -if split_first_mark<>null then -@z -%--------------------------------------- -@x [44] m.977 l.19041 vsplit - e-TeX saved_items -q:=prune_page_top(q); p:=list_ptr(v); free_node(v,box_node_size); -@y -q:=prune_page_top(q,saving_vdiscards>0); -p:=list_ptr(v); free_node(v,box_node_size); -@z -%--------------------------------------- -@x [44] m.977 l.19042 vsplit - e-TeX sparse arrays -if q=null then box(n):=null {the |eq_level| of the box stays the same} -else box(n):=vpack(q,natural); -@y -if q<>null then q:=vpack(q,natural); -change_box(q); {the |eq_level| of the box stays the same} -@z -%--------------------------------------- -@x [44] m.979 l.19067 - e-TeX marks - if split_first_mark=null then -@y - if mark_class(p)<>0 then @<Update the current marks for |vsplit|@> - else if split_first_mark=null then -@z -%--------------------------------------- -@x [45] m.982 l.19201 - e-TeX last_node_type -The variables |last_penalty| and |last_kern| are similar. And -@y -The variables |last_penalty|, |last_kern|, and |last_node_type| -are similar. And -@z -%--------------------------------------- -@x [45] m.982 l.19214 - e-TeX last_node_type -@!last_kern:scaled; {used to implement \.{\\lastkern}} -@y -@!last_kern:scaled; {used to implement \.{\\lastkern}} -@!last_node_type:integer; {used to implement \.{\\lastnodetype}} -@z -%--------------------------------------- -@x [45] m.991 l.19353 - e-TeX last_node_type -last_glue:=max_halfword; last_penalty:=0; last_kern:=0; -@y -last_glue:=max_halfword; last_penalty:=0; last_kern:=0; -last_node_type:=-1; -@z -%--------------------------------------- -@x [45] m.996 l.19420 - e-TeX last_node_type -last_penalty:=0; last_kern:=0; -@y -last_penalty:=0; last_kern:=0; -last_node_type:=type(p)+1; -@z -%--------------------------------------- -@x [45] m.999 l.19454 - e-TeX saved_items -link(contrib_head):=link(p); link(p):=null; flush_node_list(p) -@y -link(contrib_head):=link(p); link(p):=null; -if saving_vdiscards>0 then - begin if page_disc=null then page_disc:=p@+else link(tail_page_disc):=p; - tail_page_disc:=p; - end -else flush_node_list(p) -@z -%--------------------------------------- -@x [45] m.1012 l.19697 fire_up - e-TeX marks -if bot_mark<>null then -@y -if sa_mark<>null then - if do_marks(fire_up_init,0,sa_mark) then sa_mark:=null; -if bot_mark<>null then -@z -%--------------------------------------- -@x [45] m.1012 l.19705 fire_up - e-TeX marks -if (top_mark<>null)and(first_mark=null) then -@y -if sa_mark<>null then - if do_marks(fire_up_done,0,sa_mark) then sa_mark:=null; -if (top_mark<>null)and(first_mark=null) then -@z -%--------------------------------------- -@x [45] m.1014 l.19742 - e-TeX marks - else if type(p)=mark_node then @<Update the values of -@y - else if type(p)=mark_node then - if mark_class(p)<>0 then @<Update the current marks for |fire_up|@> - else @<Update the values of -@z -%--------------------------------------- -@x [45] m.1021 l.19854 - e-TeX saved_items - ins_ptr(p):=prune_page_top(broken_ptr(r)); -@y - ins_ptr(p):=prune_page_top(broken_ptr(r),false); -@z -%--------------------------------------- -@x [45] m.1023 l.19890 - e-TeX saved_items -ship_out(box(255)); box(255):=null; -@y -flush_node_list(page_disc); page_disc:=null; -ship_out(box(255)); box(255):=null; -@z -%--------------------------------------- -@x [45] m.1026 l.19932 - e-TeX saved_items -pop_nest; build_page; -@y -flush_node_list(page_disc); page_disc:=null; -pop_nest; build_page; -@z -%--------------------------------------- -@x [47] m.1070 l.20735 normal_paragraph - e-TeX penalties -if par_shape_ptr<>null then eq_define(par_shape_loc,shape_ref,null); -@y -if par_shape_ptr<>null then eq_define(par_shape_loc,shape_ref,null); -if inter_line_penalties_ptr<>null then - eq_define(inter_line_penalties_loc,shape_ref,null); -@z -%--------------------------------------- -@x [47] m.1071 l.20756 - e-TeX sparse arrays -|box_flag+255| represent `\.{\\setbox0}' through `\.{\\setbox255}'; -codes |box_flag+256| through |box_flag+511| represent `\.{\\global\\setbox0}' -through `\.{\\global\\setbox255}'; -code |box_flag+512| represents `\.{\\shipout}'; and codes |box_flag+513| -through |box_flag+515| represent `\.{\\leaders}', `\.{\\cleaders}', -@y -|global_box_flag-1| represent `\.{\\setbox0}' through `\.{\\setbox32767}'; -codes |global_box_flag| through |ship_out_flag-1| represent -`\.{\\global\\setbox0}' through `\.{\\global\\setbox32767}'; -code |ship_out_flag| represents `\.{\\shipout}'; and codes |leader_flag| -through |leader_flag+2| represent `\.{\\leaders}', `\.{\\cleaders}', -@z -%--------------------------------------- -@x [47] m.1071 l.20770 - e-TeX sparse arrays -@d ship_out_flag==box_flag+512 {context code for `\.{\\shipout}'} -@d leader_flag==box_flag+513 {context code for `\.{\\leaders}'} -@y -@d global_box_flag==@'10000100000 {context code for `\.{\\global\\setbox0}'} -@d ship_out_flag==@'10000200000 {context code for `\.{\\shipout}'} -@d leader_flag==@'10000200001 {context code for `\.{\\leaders}'} -@z -%--------------------------------------- -@x [47] m.1075 l.20853 box_end - e-TeX sparse arrays -var p:pointer; {|ord_noad| for new box in math mode} -@y -var p:pointer; {|ord_noad| for new box in math mode} -@!a:small_number; {global prefix} -@z -%--------------------------------------- -@x [47] m.1077 l.20891 - e-TeX sparse arrays -if box_context<box_flag+256 then - eq_define(box_base-box_flag+box_context,box_ref,cur_box) -else geq_define(box_base-box_flag-256+box_context,box_ref,cur_box) -@y -begin if box_context<global_box_flag then - begin cur_val:=box_context-box_flag; a:=0; - end -else begin cur_val:=box_context-global_box_flag; a:=4; - end; -if cur_val<256 then define(box_base+cur_val,box_ref,cur_box) -else sa_def_box; -end -@z -%--------------------------------------- -@x [47] m.1079 l.20920 begin_box - e-TeX TeXXeT -@!m:quarterword; {the length of a replacement list} -@y -@!r:pointer; {running behind |p|} -@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?} -@!tx:pointer; {effective tail node} -@!m:quarterword; {the length of a replacement list} -@z -%--------------------------------------- -@x [47] m.1079 l.20922 begin_box - e-TeX sparse arrays -@!n:eight_bits; {a box number} -begin case cur_chr of -box_code: begin scan_eight_bit_int; cur_box:=box(cur_val); - box(cur_val):=null; {the box becomes void, at the same level} - end; -copy_code: begin scan_eight_bit_int; cur_box:=copy_node_list(box(cur_val)); -@y -@!n:halfword; {a box number} -begin case cur_chr of -box_code: begin scan_register_num; fetch_box(cur_box); - change_box(null); {the box becomes void, at the same level} - end; -copy_code: begin scan_register_num; fetch_box(q); cur_box:=copy_node_list(q); -@z -%--------------------------------------- -@x [47] m.1080 l.20940 - e-TeX TeXXeT -@<If the current list ends with a box node, delete it...@>= -@y -@d fetch_effective_tail_eTeX(#)== {extract |tx|, - drop \.{\\beginM} \.{\\endM} pair} -q:=head; p:=null; -repeat r:=p; p:=q; fm:=false; -if not is_char_node(q) then - if type(q)=disc_node then - begin for m:=1 to replace_count(q) do p:=link(p); - if p=tx then #; - end - else if (type(q)=math_node)and(subtype(q)=begin_M_code) then fm:=true; -q:=link(p); -until q=tx; {found |r|$\to$|p|$\to$|q=tx|} -q:=link(tx); link(p):=q; link(tx):=null; -if q=null then if fm then confusion("tail1") -@:this can't happen tail1}{\quad tail1@> - else tail:=p -else if fm then {|r|$\to$|p=begin_M|$\to$|q=end_M|} - begin tail:=r; link(r):=null; flush_node_list(p);@+end -@# -@d check_effective_tail(#)==find_effective_tail_eTeX -@d fetch_effective_tail==fetch_effective_tail_eTeX - -@<If the current list ends with a box node, delete it...@>= -@z -%--------------------------------------- -@x [47] m.1080 l.20950 - e-TeX TeXXeT -else begin if not is_char_node(tail) then - if (type(tail)=hlist_node)or(type(tail)=vlist_node) then - @<Remove the last box, unless it's part of a discretionary@>; - end; -@y -else begin check_effective_tail(goto done); - if not is_char_node(tx) then - if (type(tx)=hlist_node)or(type(tx)=vlist_node) then - @<Remove the last box, unless it's part of a discretionary@>; - done:end; -@z -%--------------------------------------- -@x [47] m.1081 l.20957 - e-TeX TeXXeT -begin q:=head; -repeat p:=q; -if not is_char_node(q) then if type(q)=disc_node then - begin for m:=1 to replace_count(q) do p:=link(p); - if p=tail then goto done; - end; -q:=link(p); -until q=tail; -cur_box:=tail; shift_amount(cur_box):=0; -tail:=p; link(p):=null; -done:end -@y -begin fetch_effective_tail(goto done); -cur_box:=tx; shift_amount(cur_box):=0; -end -@z -%--------------------------------------- -@x [47] m.1082 l.20972 - e-TeX sparse arrays -begin scan_eight_bit_int; n:=cur_val; -@y -begin scan_register_num; n:=cur_val; -@z -%--------------------------------------- -@x [47] m.1096 l.21156 - e-TeX penalties, TeXXeT - else line_break(widow_penalty); -@y - else line_break(false); - if LR_save<>null then - begin flush_list(LR_save); LR_save:=null; - end; -@z -%--------------------------------------- -@x [47] m.1101 l.21212 make_mark - e-TeX marks -begin p:=scan_toks(false,true); p:=get_node(small_node_size); -@y -@!c:halfword; {the mark class} -begin if cur_chr=0 then c:=0 -else begin scan_register_num; c:=cur_val; - end; -p:=scan_toks(false,true); p:=get_node(small_node_size); -mark_class(p):=c; -@z -%--------------------------------------- -@x [47] m.1105 l.21246 delete_last - e-TeX TeXXeT -@!m:quarterword; {the length of a replacement list} -@y -@!r:pointer; {running behind |p|} -@!fm:boolean; {a final \.{\\beginM} \.{\\endM} node pair?} -@!tx:pointer; {effective tail node} -@!m:quarterword; {the length of a replacement list} -@z -%--------------------------------------- -@x [47] m.1105 l.21250 delete_last - e-TeX TeXXeT -else begin if not is_char_node(tail) then if type(tail)=cur_chr then - begin q:=head; - repeat p:=q; - if not is_char_node(q) then if type(q)=disc_node then - begin for m:=1 to replace_count(q) do p:=link(p); - if p=tail then return; - end; - q:=link(p); - until q=tail; - link(p):=null; flush_node_list(tail); tail:=p; -@y -else begin check_effective_tail(return); - if not is_char_node(tx) then if type(tx)=cur_chr then - begin fetch_effective_tail(return); - flush_node_list(tx); -@z -%--------------------------------------- -@x [47] m.1108 l.21299 - e-TeX saved_items -un_vbox: if chr_code=copy_code then print_esc("unvcopy") -@y -un_vbox: if chr_code=copy_code then print_esc("unvcopy") - @<Cases of |un_vbox| for |print_cmd_chr|@>@/ -@z -%--------------------------------------- -@x [47] m.1110 l.21309 unpackage - e-TeX saved_items -label exit; -@y -label done, exit; -@z -%--------------------------------------- -@x [47] m.1110 l.21312 unpackage - e-TeX saved_items, sparse arrays -begin c:=cur_chr; scan_eight_bit_int; p:=box(cur_val); -@y -begin if cur_chr>copy_code then @<Handle saved items and |goto done|@>; -c:=cur_chr; scan_register_num; fetch_box(p); -@z -%--------------------------------------- -@x [47] m.1110 l.21324 unpackage - e-TeX sparse arrays -else begin link(tail):=list_ptr(p); box(cur_val):=null; -@y -else begin link(tail):=list_ptr(p); change_box(null); -@z -%--------------------------------------- -@x [47] m.1110 l.21327 unpackage - e-TeX saved_items -while link(tail)<>null do tail:=link(tail); -@y -done: -while link(tail)<>null do tail:=link(tail); -@z -%--------------------------------------- -@x [47] m.1130 l.21599 - e-TeX TeXXeT -vmode+halign,hmode+valign:init_align; -@y -vmode+halign:init_align; -hmode+valign:@<Cases of |main_control| for |hmode+valign|@>@; init_align; -@z -%--------------------------------------- -@x [48] m.1138 l.21678 init_math - e-TeX TeXXeT -procedure init_math; -label reswitch,found,not_found,done; -var w:scaled; {new or partial |pre_display_size|} -@y -@t\4@>@<Declare subprocedures for |init_math|@>@; -procedure init_math; -label reswitch,found,not_found,done; -var w:scaled; {new or partial |pre_display_size|} -@!j:pointer; {prototype box for display} -@!x:integer; {new |pre_display_direction|} -@z -%--------------------------------------- -@x [48] m.1145 l.21736 - e-TeX TeXXeT, penalties -begin if head=tail then {`\.{\\noindent\$\$}' or `\.{\$\${ }\$\$}'} - begin pop_nest; w:=-max_dimen; - end -else begin line_break(display_widow_penalty);@/ -@y -begin j:=null; w:=-max_dimen; -if head=tail then {`\.{\\noindent\$\$}' or `\.{\$\${ }\$\$}'} - @<Prepare for display after an empty paragraph@> -else begin line_break(true);@/ -@z -%--------------------------------------- -@x [48] m.1145 l.21749 - e-TeX TeXXeT -eq_word_define(dimen_base+pre_display_size_code,w); -@y -eq_word_define(dimen_base+pre_display_size_code,w); -LR_box:=j; -if eTeX_ex then eq_word_define(int_base+pre_display_direction_code,x); -@z -%--------------------------------------- -@x [48] m.1146 l.21757 - e-TeX TeXXeT -v:=shift_amount(just_box)+2*quad(cur_font); w:=-max_dimen; -p:=list_ptr(just_box); -@y -@<Prepare for display after a non-empty paragraph@>; -@z -%--------------------------------------- -@x [48] m.1146 l.21772 - e-TeX TeXXeT -done: -@y -done: -@<Finish the natural width computation@> -@z -%--------------------------------------- -@x [48] m.1147 l.21783 - e-TeX TeXXeT -kern_node,math_node: d:=width(p); -@y -kern_node: d:=width(p); -@t\4@>@<Cases of `Let |d| be the natural width' that need special treatment@>@; -@z -%--------------------------------------- -@x [48] m.1185 l.22292 - e-TeX middle - if type(q)<>left_noad then confusion("right"); -@:this can't happen right}{\quad right@> - info(numerator(incompleat_noad)):=link(q); - link(q):=incompleat_noad; link(incompleat_noad):=p; -@y - if (type(q)<>left_noad)or(delim_ptr=null) then confusion("right"); -@:this can't happen right}{\quad right@> - info(numerator(incompleat_noad)):=link(delim_ptr); - link(delim_ptr):=incompleat_noad; link(incompleat_noad):=p; -@z -%--------------------------------------- -@x [48] m.1189 l.22337 - e-TeX middle -else print_esc("right"); -@y -@/@<Cases of |left_right| for |print_cmd_chr|@>@/ -else print_esc("right"); -@z -%--------------------------------------- -@x [48] m.1191 l.22346 math_left_right - e-TeX middle -begin t:=cur_chr; -if (t=right_noad)and(cur_group<>math_left_group) then -@y -@!q:pointer; {resulting mlist} -begin t:=cur_chr; -if (t<>left_noad)and(cur_group<>math_left_group) then -@z -%--------------------------------------- -@x [48] m.1191 l.22351 math_left_right - e-TeX middle - if t=left_noad then - begin push_math(math_left_group); link(head):=p; tail:=p; - end - else begin p:=fin_mlist(p); unsave; {end of |math_left_group|} -@y - if t=middle_noad then - begin type(p):=right_noad; subtype(p):=middle_noad; - end; - if t=left_noad then q:=p - else begin q:=fin_mlist(p); unsave; {end of |math_left_group|} - end; - if t<>right_noad then - begin push_math(math_left_group); link(head):=q; tail:=p; - delim_ptr:=p; - end - else begin -@z -%--------------------------------------- -@x [48] m.1191 l.22357 math_left_right - e-TeX middle - info(nucleus(tail)):=p; -@y - info(nucleus(tail)):=q; -@z -%--------------------------------------- -@x [48] m.1192 l.22365 - e-TeX middle - print_err("Extra "); print_esc("right"); -@.Extra \\right.@> - help1("I'm ignoring a \right that had no matching \left."); -@y - print_err("Extra "); - if t=middle_noad then - begin print_esc("middle"); -@.Extra \\middle.@> - help1("I'm ignoring a \middle that had no matching \left."); - end - else begin print_esc("right"); -@.Extra \\right.@> - help1("I'm ignoring a \right that had no matching \left."); - end; -@z -%--------------------------------------- -@x [48] m.1194 l.22380 after_math - e-TeX TeXXeT -procedure after_math; -@y -@t\4@>@<Declare subprocedures for |after_math|@>@; -procedure after_math; -@z -%--------------------------------------- -@x [48] m.1194 l.22387 after_math - e-TeX TeXXeT -begin danger:=false; -@y -begin danger:=false; -@<Retrieve the prototype box@>; -@z -%--------------------------------------- -@x [48] m.1194 l.22394 after_math - e-TeX TeXXeT - mlist_to_hlist; a:=hpack(link(temp_head),natural); -@y - mlist_to_hlist; a:=hpack(link(temp_head),natural); - set_box_lr(a)(dlist); -@z -%--------------------------------------- -@x [48] m.1194 l.22397 after_math - e-TeX TeXXeT - danger:=false; -@y - danger:=false; - @<Retrieve the prototype box@>; -@z -%--------------------------------------- -@x [48] m.1199 l.22484 - e-TeX TeXXeT -w:=width(b); z:=display_width; s:=display_indent; -@y -w:=width(b); z:=display_width; s:=display_indent; -if pre_display_direction<0 then s:=-s-z; -@z -%--------------------------------------- -@x [48] m.1199 l.22499 - e-TeX TeXXeT -resume_after_display -@y -@<Flush the prototype box@>; -resume_after_display -@z -%--------------------------------------- -@x [48] m.1202 l.22541 - e-TeX TeXXeT -d:=half(z-w); -@y -set_box_lr(b)(dlist); -d:=half(z-w); -@z -%--------------------------------------- -@x [48] m.1203 l.22562 - e-TeX TeXXeT - begin shift_amount(a):=s; append_to_vlist(a); -@y - begin app_display(j,a,0); -@z -%--------------------------------------- -@x [48] m.1204 l.22572 - e-TeX TeXXeT -shift_amount(b):=s+d; append_to_vlist(b) -@y -app_display(j,b,d) -@z -%--------------------------------------- -@x [48] m.1205 l.22582 - e-TeX TeXXeT - shift_amount(a):=s+z-width(a); - append_to_vlist(a); -@y - app_display(j,a,z-width(a)); -@z -%--------------------------------------- -@x [48] m.1206 l.22601 - e-TeX TeXXeT -pop_nest; -@y -flush_node_list(LR_box); -pop_nest; -@z -%--------------------------------------- -@x [49] m.1208 l.22626 - e-TeX protected -control sequence can be defined to be `\.{\\long}' or `\.{\\outer}', and -it might or might not be expanded. The prefixes `\.{\\global}', `\.{\\long}', -@y -control sequence can be defined to be `\.{\\long}', `\.{\\protected}', -or `\.{\\outer}', and it might or might not be expanded. The prefixes -`\.{\\global}', `\.{\\long}', `\.{\\protected}', -@z -%--------------------------------------- -@x [49] m.1209 l.22652 - e-TeX protected - else print_esc("global"); -@y - @/@<Cases of |prefix| for |print_cmd_chr|@>@/ - else print_esc("global"); -@z -%--------------------------------------- -@x [49] m.1211 l.22714 prefixed_command - e-TeX tracing - @<Discard erroneous prefixes and |return|@>; -@y - @<Discard erroneous prefixes and |return|@>; - if tracing_commands>2 then if eTeX_ex then show_cur_cmd_chr; -@z -%--------------------------------------- -@x [49] m.1212 l.22730 - e-TeX protected -help1("I'll pretend you didn't say \long or \outer or \global."); -@y -help1("I'll pretend you didn't say \long or \outer or \global."); -if eTeX_ex then help_line[0]:=@| - "I'll pretend you didn't say \long or \outer or \global or \protected."; -@z -%--------------------------------------- -@x [49] m.1213 l.22735 - e-TeX protected -if (cur_cmd<>def)and(a mod 4<>0) then - begin print_err("You can't use `"); print_esc("long"); print("' or `"); - print_esc("outer"); print("' with `"); -@y -if a>=8 then - begin j:=protected_token; a:=a-8; - end -else j:=0; -if (cur_cmd<>def)and((a mod 4<>0)or(j<>0)) then - begin print_err("You can't use `"); print_esc("long"); print("' or `"); - print_esc("outer"); - help1("I'll pretend you didn't say \long or \outer here."); - if eTeX_ex then - begin help_line[0]:=@| - "I'll pretend you didn't say \long or \outer or \protected here."; - print("' or `"); print_esc("protected"); - end; - print("' with `"); -@z -%--------------------------------------- -@x [49] m.1213 l.22740 - e-TeX protected - help1("I'll pretend you didn't say \long or \outer here."); -@y -@z -%--------------------------------------- -@x [49] m.1218 l.22798 - e-TeX protected - q:=scan_toks(true,e); define(p,call+(a mod 4),def_ref); -@y - q:=scan_toks(true,e); - if j<>0 then - begin q:=get_avail; info(q):=j; link(q):=link(def_ref); - link(def_ref):=q; - end; - define(p,call+(a mod 4),def_ref); -@z -%--------------------------------------- -@x [49] m.1221 l.22826 - e-TeX sparse arrays - if cur_cmd>=call then add_token_ref(cur_chr); -@y - if cur_cmd>=call then add_token_ref(cur_chr) - else if (cur_cmd=register)or(cur_cmd=toks_register) then - if (cur_chr<mem_bot)or(cur_chr>lo_mem_stat_max) then - add_sa_ref(cur_chr); -@z -%--------------------------------------- -@x [49] m.1224 l.22889 - e-TeX sparse arrays - othercases begin scan_eight_bit_int; -@y - othercases begin scan_register_num; - if cur_val>255 then - begin j:=n-count_def_code; {|int_val..box_val|} - if j>mu_val then j:=tok_val; {|int_val..mu_val| or |tok_val|} - find_sa_element(j,cur_val,true); add_sa_ref(cur_ptr); - if j=tok_val then j:=toks_register@+else j:=register; - define(p,j,cur_ptr); - end - else -@z -%--------------------------------------- -@x [49] m.1225 l.22902 - e-TeX read_line -read_to_cs: begin scan_int; n:=cur_val; -@y -read_to_cs: begin j:=cur_chr; scan_int; n:=cur_val; -@z -%--------------------------------------- -@x [49] m.1225 l.22911 - e-TeX read_line - p:=cur_cs; read_toks(n,p); define(p,call,cur_val); -@y - p:=cur_cs; read_toks(n,p,j); define(p,call,cur_val); -@z -%--------------------------------------- -@x [49] m.1226 l.22920 - e-TeX sparse arrays - if cur_cmd=toks_register then - begin scan_eight_bit_int; p:=toks_base+cur_val; - end - else p:=cur_chr; {|p=every_par_loc| or |output_routine_loc| or \dots} -@y - e:=false; {just in case, will be set |true| for sparse array elements} - if cur_cmd=toks_register then - if cur_chr=mem_bot then - begin scan_register_num; - if cur_val>255 then - begin find_sa_element(tok_val,cur_val,true); - cur_chr:=cur_ptr; e:=true; - end - else cur_chr:=toks_base+cur_val; - end - else e:=true; - p:=cur_chr; {|p=every_par_loc| or |output_routine_loc| or \dots} -@z -%--------------------------------------- -@x [49] m.1226 l.22930 - e-TeX sparse arrays - begin define(p,undefined_cs,null); free_avail(def_ref); - end - else begin if p=output_routine_loc then {enclose in curlies} -@y - begin sa_define(p,null)(p,undefined_cs,null); free_avail(def_ref); - end - else begin if (p=output_routine_loc)and not e then {enclose in curlies} -@z -%--------------------------------------- -@x [49] m.1226 l.22938 - e-TeX sparse arrays - define(p,call,def_ref); -@y - sa_define(p,def_ref)(p,call,def_ref); -@z -%--------------------------------------- -@x [49] m.1227 l.22943 - e-TeX sparse arrays -begin if cur_cmd=toks_register then - begin scan_eight_bit_int; cur_cmd:=assign_toks; cur_chr:=toks_base+cur_val; - end; -if cur_cmd=assign_toks then - begin q:=equiv(cur_chr); - if q=null then define(p,undefined_cs,null) - else begin add_token_ref(q); define(p,call,q); - end; - goto done; - end; -end -@y -if (cur_cmd=toks_register)or(cur_cmd=assign_toks) then - begin if cur_cmd=toks_register then - if cur_chr=mem_bot then - begin scan_register_num; - if cur_val<256 then q:=equiv(toks_base+cur_val) - else begin find_sa_element(tok_val,cur_val,false); - if cur_ptr=null then q:=null - else q:=sa_ptr(cur_ptr); - end; - end - else q:=sa_ptr(cur_chr) - else q:=equiv(cur_chr); - if q=null then sa_define(p,null)(p,undefined_cs,null) - else begin add_token_ref(q); sa_define(p,q)(p,call,q); - end; - goto done; - end -@z -%--------------------------------------- -@x [49] m.1236 l.23059 do_register_command - e-TeX sparse arrays -begin q:=cur_cmd; -@y -@!e:boolean; {does |l| refer to a sparse array element?} -@!w:integer; {integer or dimen value of |l|} -begin q:=cur_cmd; -e:=false; {just in case, will be set |true| for sparse array elements} -@z -%--------------------------------------- -@x [49] m.1236 l.23076 do_register_command - e-TeX sparse arrays -if p<glue_val then word_define(l,cur_val) -else begin trap_zero_glue; define(l,glue_ref,cur_val); -@y -if p<glue_val then sa_word_define(l,cur_val) -else begin trap_zero_glue; sa_define(l,cur_val)(l,glue_ref,cur_val); -@z -%--------------------------------------- -@x [49] m.1237 l.23098 - e-TeX sparse arrays -p:=cur_chr; scan_eight_bit_int; -@y -if (cur_chr<mem_bot)or(cur_chr>lo_mem_stat_max) then - begin l:=cur_chr; p:=sa_type(l); e:=true; - end -else begin p:=cur_chr-mem_bot; scan_register_num; - if cur_val>255 then - begin find_sa_element(p,cur_val,true); l:=cur_ptr; e:=true; - end - else -@z -%--------------------------------------- -@x [49] m.1237 l.23105 - e-TeX sparse arrays -end; -found: -@y - end; -end; -found: if p<glue_val then@+if e then w:=sa_int(l)@+else w:=eqtb[l].int -else if e then s:=sa_ptr(l)@+else s:=equiv(l) -@z -%--------------------------------------- -@x [49] m.1238 l.23111 - e-TeX sparse arrays - if q=advance then cur_val:=cur_val+eqtb[l].int; -@y - if q=advance then cur_val:=cur_val+w; -@z -%--------------------------------------- -@x [49] m.1239 l.23118 - e-TeX sparse arrays -begin q:=new_spec(cur_val); r:=equiv(l); -@y -begin q:=new_spec(cur_val); r:=s; -@z -%--------------------------------------- -@x [49] m.1240 l.23138 - e-TeX sparse arrays - if p=int_val then cur_val:=mult_integers(eqtb[l].int,cur_val) - else cur_val:=nx_plus_y(eqtb[l].int,cur_val,0) - else cur_val:=x_over_n(eqtb[l].int,cur_val) -else begin s:=equiv(l); r:=new_spec(s); -@y - if p=int_val then cur_val:=mult_integers(w,cur_val) - else cur_val:=nx_plus_y(w,cur_val,0) - else cur_val:=x_over_n(w,cur_val) -else begin r:=new_spec(s); -@z -%--------------------------------------- -@x [49] m.1241 l.23160 - e-TeX sparse arrays -set_box: begin scan_eight_bit_int; - if global then n:=256+cur_val@+else n:=cur_val; - scan_optional_equals; - if set_box_allowed then scan_box(box_flag+n) -@y -set_box: begin scan_register_num; - if global then n:=global_box_flag+cur_val@+else n:=box_flag+cur_val; - scan_optional_equals; - if set_box_allowed then scan_box(n) -@z -%--------------------------------------- -@x [49] m.1246 l.23231 alter_integer - e-TeX interaction_mode -var c:0..1; {0 for \.{\\deadcycles}, 1 for \.{\\insertpenalties}} -begin c:=cur_chr; scan_optional_equals; scan_int; -if c=0 then dead_cycles:=cur_val -@y -var c:small_number; - {0 for \.{\\deadcycles}, 1 for \.{\\insertpenalties}, etc.} -begin c:=cur_chr; scan_optional_equals; scan_int; -if c=0 then dead_cycles:=cur_val -@/@<Cases for |alter_integer|@>@/ -@z -%--------------------------------------- -@x [49] m.1247 l.23240 alter_box_dimen - e-TeX sparse arrays -@!b:eight_bits; {box number} -begin c:=cur_chr; scan_eight_bit_int; b:=cur_val; scan_optional_equals; -scan_normal_dimen; -if box(b)<>null then mem[box(b)+c].sc:=cur_val; -@y -@!b:pointer; {box register} -begin c:=cur_chr; scan_register_num; fetch_box(b); scan_optional_equals; -scan_normal_dimen; -if b<>null then mem[b+c].sc:=cur_val; -@z -%--------------------------------------- -@x [49] m.1248 l.23249 - e-TeX penalties -set_shape: begin scan_optional_equals; scan_int; n:=cur_val; - if n<=0 then p:=null -@y -set_shape: begin q:=cur_chr; scan_optional_equals; scan_int; n:=cur_val; - if n<=0 then p:=null - else if q>par_shape_loc then - begin n:=(cur_val div 2)+1; p:=get_node(2*n+1); info(p):=n; - n:=cur_val; mem[p+1].int:=n; {number of penalties} - for j:=p+2 to p+n+1 do - begin scan_int; mem[j].int:=cur_val; {penalty values} - end; - if not odd(n) then mem[p+n+2].int:=0; {unused} - end -@z -%--------------------------------------- -@x [49] m.1248 l.23259 - e-TeX penalties - define(par_shape_loc,shape_ref,p); -@y - define(q,shape_ref,p); -@z -%--------------------------------------- -@x [49] m.1260 l.23346 new_font - e-TeX tracing -common_ending: equiv(u):=f; eqtb[font_id_base+f]:=eqtb[u]; font_id_text(f):=t; -@y -common_ending: define(u,set_font,f); eqtb[font_id_base+f]:=eqtb[u]; font_id_text(f):=t; -@z -%--------------------------------------- -@x [49] m.1292 l.23633 - e-TeX show_groups - show_lists_code:print_esc("showlists"); -@y - show_lists_code:print_esc("showlists"); - @<Cases of |xray| for |print_cmd_chr|@>@;@/ -@z -%--------------------------------------- -@x [49] m.1293 l.23640 show_whatever - e-TeX show_ifs -var p:pointer; {tail of a token list to show} -@y -var p:pointer; {tail of a token list to show} -@!t:small_number; {type of conditional being shown} -@!m:normal..or_code; {upper bound on |fi_or_else| codes} -@!l:integer; {line where that conditional began} -@!n:integer; {level of \.{\\if...\\fi} nesting} -@z -%--------------------------------------- -@x [49] m.1293 l.23646 show_whatever - e-TeX show_groups -othercases @<Show the current value of some parameter or register, -@y -@<Cases for |show_whatever|@>@;@/ -othercases @<Show the current value of some parameter or register, -@z -%--------------------------------------- -@x [49] m.1295 l.23681 - e-TeX protected -call: print("macro"); -long_call: print_esc("long macro"); -outer_call: print_esc("outer macro"); -long_outer_call: begin print_esc("long"); print_esc("outer macro"); -@y -call,long_call,outer_call,long_outer_call: begin n:=cmd-call; - if info(link(chr_code))=protected_token then n:=n+4; - if odd(n div 4) then print_esc("protected"); - if odd(n) then print_esc("long"); - if odd(n div 2) then print_esc("outer"); - if n>0 then print_char(" "); - print("macro"); -@z -%--------------------------------------- -@x [49] m.1296 l.23689 - e-TeX sparse arrays -begin scan_eight_bit_int; begin_diagnostic; -print_nl("> \box"); print_int(cur_val); print_char("="); -if box(cur_val)=null then print("void") -else show_box(box(cur_val)); -@y -begin scan_register_num; fetch_box(p); begin_diagnostic; -print_nl("> \box"); print_int(cur_val); print_char("="); -if p=null then print("void")@+else show_box(p); -@z -%--------------------------------------- -@x [50] m.1307 l.23831 - e-TeX basic -dump_int(@$);@/ -@y -dump_int(@$);@/ -@<Dump the \eTeX\ state@>@/ -@z -%--------------------------------------- -@x [50] m.1308 l.23846 - e-TeX basic -if x<>@$ then goto bad_fmt; {check that strings are the same} -@y -if x<>@$ then goto bad_fmt; {check that strings are the same} -@/@<Undump the \eTeX\ state@>@/ -@z -%--------------------------------------- -@x [50] m.1311 l.23900 - e-TeX sparse arrays -dump_int(lo_mem_max); dump_int(rover); -@y -dump_int(lo_mem_max); dump_int(rover); -if eTeX_ex then for k:=int_val to tok_val do dump_int(sa_root[k]); -@z -%--------------------------------------- -@x [50] m.1312 l.23923 - e-TeX sparse arrays -undump(lo_mem_stat_max+1)(lo_mem_max)(rover); -@y -undump(lo_mem_stat_max+1)(lo_mem_max)(rover); -if eTeX_ex then for k:=int_val to tok_val do - undump(null)(lo_mem_max)(sa_root[k]); -@z -%--------------------------------------- -@x [50] m.1324 l.24117 - e-TeX hyph_codes -dump_int(trie_max); -@y -dump_int(trie_max); -dump_int(hyph_start); -@z -%--------------------------------------- -@x [50] m.1325 l.24145 - e-TeX hyph_codes -undump_size(0)(trie_size)('trie size')(j); @+init trie_max:=j;@+tini -@y -undump_size(0)(trie_size)('trie size')(j); @+init trie_max:=j;@+tini -undump(0)(j)(hyph_start); -@z -%--------------------------------------- -@x [51] m.1335 l.24365 final_cleanup - tracing - print_int(cur_level-level_one); print_char(")"); -@y - print_int(cur_level-level_one); print_char(")"); - if eTeX_ex then show_save_groups; -@z -%--------------------------------------- -@x [51] m.1335 l.24388 final_cleanup - e-TeX marks, saved_items - if cur_mark[c]<>null then delete_token_ref(cur_mark[c]); -@y - if cur_mark[c]<>null then delete_token_ref(cur_mark[c]); - if sa_mark<>null then - if do_marks(destroy_marks,0,sa_mark) then sa_mark:=null; - for c:=last_box_code to vsplit_code do flush_node_list(disc_ptr[c]); -@z -%--------------------------------------- -@x [51] m.1336 l.24398 init_prim - e-TeX basic -begin no_new_control_sequence:=false; -@y -begin no_new_control_sequence:=false; -first:=0; -@z -%--------------------------------------- -@x [51] m.1337 l.24413 - e-TeX basic -if (format_ident=0)or(buffer[loc]="&") then -@y -@<Enable \eTeX, if requested@>@;@/ -if (format_ident=0)or(buffer[loc]="&") then -@z -%--------------------------------------- -@x [51] m.1337 l.24421 - e-TeX basic - end; -@y - end; -if eTeX_ex then wterm_ln('entering extended mode'); -@z -%--------------------------------------- -@x [53] m.1362 l.24762 adv_past - e-TeX hyph_codes - begin cur_lang:=what_lang(#); l_hyf:=what_lhm(#); r_hyf:=what_rhm(#);@+end -@y - begin cur_lang:=what_lang(#); l_hyf:=what_lhm(#); r_hyf:=what_rhm(#); - set_hyph_index; - end -@z -%--------------------------------------- -@x [54] m.1379 l.24956 - e-TeX additions -@* \[54] System-dependent changes. -@y -@* \[53a] The extended features of \eTeX. -The program has two modes of operation: (1)~In \TeX\ compatibility mode -it fully deserves the name \TeX\ and there are neither extended features -nor additional primitive commands. There are, however, a few -modifications that would be legitimate in any implementation of \TeX\ -such as, e.g., preventing inadequate results of the glue to \.{DVI} -unit conversion during |ship_out|. (2)~In extended mode there are -additional primitive commands and the extended features of \eTeX\ are -available. - -The distinction between these two modes of operation initially takes -place when a `virgin' \.{eINITEX} starts without reading a format file. -Later on the values of all \eTeX\ state variables are inherited when -\.{eVIRTEX} (or \.{eINITEX}) reads a format file. - -The code below is designed to work for cases where `$|init|\ldots|tini|$' -is a run-time switch. - -@<Enable \eTeX, if requested@>= -@!init if (buffer[loc]="*")and(format_ident=" (INITEX)") then - begin no_new_control_sequence:=false; - @<Generate all \eTeX\ primitives@>@; - incr(loc); eTeX_mode:=1; {enter extended mode} - @<Initialize variables for \eTeX\ extended mode@>@; - end; -tini@;@/ -if not no_new_control_sequence then {just entered extended mode ?} - no_new_control_sequence:=true@+else - -@ The \eTeX\ features available in extended mode are grouped into two -categories: (1)~Some of them are permanently enabled and have no -semantic effect as long as none of the additional primitives are -executed. (2)~The remaining \eTeX\ features are optional and can be -individually enabled and disabled. For each optional feature there is -an \eTeX\ state variable named \.{\\...state}; the feature is enabled, -resp.\ disabled by assigning a positive, resp.\ non-positive value to -that integer. - -@d eTeX_state_base=int_base+eTeX_state_code -@d eTeX_state(#)==eqtb[eTeX_state_base+#].int {an \eTeX\ state variable} -@# -@d eTeX_version_code=eTeX_int {code for \.{\\eTeXversion}} - -@<Generate all \eTeX...@>= -primitive("lastnodetype",last_item,last_node_type_code); -@!@:last_node_type_}{\.{\\lastnodetype} primitive@> -primitive("eTeXversion",last_item,eTeX_version_code); -@!@:eTeX_version_}{\.{\\eTeXversion} primitive@> -primitive("eTeXrevision",convert,eTeX_revision_code);@/ -@!@:eTeX_revision_}{\.{\\eTeXrevision} primitive@> - -@ @<Cases of |last_item| for |print_cmd_chr|@>= -last_node_type_code: print_esc("lastnodetype"); -eTeX_version_code: print_esc("eTeXversion"); - -@ @<Cases for fetching an integer value@>= -eTeX_version_code: cur_val:=eTeX_version; - -@ @d eTeX_ex==(eTeX_mode=1) {is this extended mode?} - -@<Glob...@>= -@!eTeX_mode: 0..1; {identifies compatibility and extended mode} - -@ @<Initialize table entries...@>= -eTeX_mode:=0; {initially we are in compatibility mode} -@<Initialize variables for \eTeX\ compatibility mode@>@; - -@ @<Dump the \eTeX\ state@>= -dump_int(eTeX_mode); -for j:=0 to eTeX_states-1 do eTeX_state(j):=0; {disable all enhancements} - -@ @<Undump the \eTeX\ state@>= -undump(0)(1)(eTeX_mode); -if eTeX_ex then - begin @<Initialize variables for \eTeX\ extended mode@>@; - end -else begin @<Initialize variables for \eTeX\ compatibility mode@>@; - end; - -@ The |eTeX_enabled| function simply returns its first argument as -result. This argument is |true| if an optional \eTeX\ feature is -currently enabled; otherwise, if the argument is |false|, the function -gives an error message. - -@<Declare \eTeX\ procedures for use...@>= -function eTeX_enabled(@!b:boolean;@!j:quarterword;@!k:halfword):boolean; -begin if not b then - begin print_err("Improper "); print_cmd_chr(j,k); - help1("Sorry, this optional e-TeX feature has been disabled."); error; - end; -eTeX_enabled:=b; -end; - -@ First we implement the additional \eTeX\ parameters in the table of -equivalents. - -@<Generate all \eTeX...@>= -primitive("everyeof",assign_toks,every_eof_loc); -@!@:every_eof_}{\.{\\everyeof} primitive@> -primitive("tracingassigns",assign_int,int_base+tracing_assigns_code);@/ -@!@:tracing_assigns_}{\.{\\tracingassigns} primitive@> -primitive("tracinggroups",assign_int,int_base+tracing_groups_code);@/ -@!@:tracing_groups_}{\.{\\tracinggroups} primitive@> -primitive("tracingifs",assign_int,int_base+tracing_ifs_code);@/ -@!@:tracing_ifs_}{\.{\\tracingifs} primitive@> -primitive("tracingscantokens",assign_int,int_base+tracing_scan_tokens_code);@/ -@!@:tracing_scan_tokens_}{\.{\\tracingscantokens} primitive@> -primitive("tracingnesting",assign_int,int_base+tracing_nesting_code);@/ -@!@:tracing_nesting_}{\.{\\tracingnesting} primitive@> -primitive("predisplaydirection", - assign_int,int_base+pre_display_direction_code);@/ -@!@:pre_display_direction_}{\.{\\predisplaydirection} primitive@> -primitive("lastlinefit",assign_int,int_base+last_line_fit_code);@/ -@!@:last_line_fit_}{\.{\\lastlinefit} primitive@> -primitive("savingvdiscards",assign_int,int_base+saving_vdiscards_code);@/ -@!@:saving_vdiscards_}{\.{\\savingvdiscards} primitive@> -primitive("savinghyphcodes",assign_int,int_base+saving_hyph_codes_code);@/ -@!@:saving_hyph_codes_}{\.{\\savinghyphcodes} primitive@> - -@ @d every_eof==equiv(every_eof_loc) - -@<Cases of |assign_toks| for |print_cmd_chr|@>= -every_eof_loc: print_esc("everyeof"); - -@ @<Cases for |print_param|@>= -tracing_assigns_code:print_esc("tracingassigns"); -tracing_groups_code:print_esc("tracinggroups"); -tracing_ifs_code:print_esc("tracingifs"); -tracing_scan_tokens_code:print_esc("tracingscantokens"); -tracing_nesting_code:print_esc("tracingnesting"); -pre_display_direction_code:print_esc("predisplaydirection"); -last_line_fit_code:print_esc("lastlinefit"); -saving_vdiscards_code:print_esc("savingvdiscards"); -saving_hyph_codes_code:print_esc("savinghyphcodes"); - -@ In order to handle \.{\\everyeof} we need an array |eof_seen| of -boolean variables. - -@<Glob...@>= -@!eof_seen : array[1..max_in_open] of boolean; {has eof been seen?} - -@ The |print_group| procedure prints the current level of grouping and -the name corresponding to |cur_group|. - -@<Declare \eTeX\ procedures for tr...@>= -procedure print_group(@!e:boolean); -label exit; -begin case cur_group of - bottom_level: begin print("bottom level"); return; - end; - simple_group,semi_simple_group: - begin if cur_group=semi_simple_group then print("semi "); - print("simple"); - end; - hbox_group,adjusted_hbox_group: - begin if cur_group=adjusted_hbox_group then print("adjusted "); - print("hbox"); - end; - vbox_group: print("vbox"); - vtop_group: print("vtop"); - align_group,no_align_group: - begin if cur_group=no_align_group then print("no "); - print("align"); - end; - output_group: print("output"); - disc_group: print("disc"); - insert_group: print("insert"); - vcenter_group: print("vcenter"); - math_group,math_choice_group,math_shift_group,math_left_group: - begin print("math"); - if cur_group=math_choice_group then print(" choice") - else if cur_group=math_shift_group then print(" shift") - else if cur_group=math_left_group then print(" left"); - end; - end; {there are no other cases} -print(" group (level "); print_int(qo(cur_level)); print_char(")"); -if saved(-1)<>0 then - begin if e then print(" entered at line ") else print(" at line "); - print_int(saved(-1)); - end; -exit:end; - -@ The |group_trace| procedure is called when a new level of grouping -begins (|e=false|) or ends (|e=true|) with |saved(-1)| containing the -line number. - -@<Declare \eTeX\ procedures for tr...@>= -@!stat procedure group_trace(@!e:boolean); -begin begin_diagnostic; print_char("{"); -if e then print("leaving ") else print("entering "); -print_group(e); print_char("}"); end_diagnostic(false); -end; -tats - -@ The \.{\\currentgrouplevel} and \.{\\currentgrouptype} commands return -the current level of grouping and the type of the current group -respectively. - -@d current_group_level_code=eTeX_int+1 {code for \.{\\currentgrouplevel}} -@d current_group_type_code=eTeX_int+2 {code for \.{\\currentgrouptype}} - -@<Generate all \eTeX...@>= -primitive("currentgrouplevel",last_item,current_group_level_code); -@!@:current_group_level_}{\.{\\currentgrouplevel} primitive@> -primitive("currentgrouptype",last_item,current_group_type_code); -@!@:current_group_type_}{\.{\\currentgrouptype} primitive@> - -@ @<Cases of |last_item| for |print_cmd_chr|@>= -current_group_level_code: print_esc("currentgrouplevel"); -current_group_type_code: print_esc("currentgrouptype"); - -@ @<Cases for fetching an integer value@>= -current_group_level_code: cur_val:=cur_level-level_one; -current_group_type_code: cur_val:=cur_group; - -@ The \.{\\currentiflevel}, \.{\\currentiftype}, and -\.{\\currentifbranch} commands return the current level of conditionals -and the type and branch of the current conditional. - -@d current_if_level_code=eTeX_int+3 {code for \.{\\currentiflevel}} -@d current_if_type_code=eTeX_int+4 {code for \.{\\currentiftype}} -@d current_if_branch_code=eTeX_int+5 {code for \.{\\currentifbranch}} - -@<Generate all \eTeX...@>= -primitive("currentiflevel",last_item,current_if_level_code); -@!@:current_if_level_}{\.{\\currentiflevel} primitive@> -primitive("currentiftype",last_item,current_if_type_code); -@!@:current_if_type_}{\.{\\currentiftype} primitive@> -primitive("currentifbranch",last_item,current_if_branch_code); -@!@:current_if_branch_}{\.{\\currentifbranch} primitive@> - -@ @<Cases of |last_item| for |print_cmd_chr|@>= -current_if_level_code: print_esc("currentiflevel"); -current_if_type_code: print_esc("currentiftype"); -current_if_branch_code: print_esc("currentifbranch"); - -@ @<Cases for fetching an integer value@>= -current_if_level_code: begin q:=cond_ptr; cur_val:=0; - while q<>null do - begin incr(cur_val); q:=link(q); - end; - end; -current_if_type_code: if cond_ptr=null then cur_val:=0 - else if cur_if<unless_code then cur_val:=cur_if+1 - else cur_val:=-(cur_if-unless_code+1); -current_if_branch_code: - if (if_limit=or_code)or(if_limit=else_code) then cur_val:=1 - else if if_limit=fi_code then cur_val:=-1 - else cur_val:=0; - -@ The \.{\\fontcharwd}, \.{\\fontcharht}, \.{\\fontchardp}, and -\.{\\fontcharic} commands return information about a character in a -font. - -@d font_char_wd_code=eTeX_dim {code for \.{\\fontcharwd}} -@d font_char_ht_code=eTeX_dim+1 {code for \.{\\fontcharht}} -@d font_char_dp_code=eTeX_dim+2 {code for \.{\\fontchardp}} -@d font_char_ic_code=eTeX_dim+3 {code for \.{\\fontcharic}} - -@<Generate all \eTeX...@>= -primitive("fontcharwd",last_item,font_char_wd_code); -@!@:font_char_wd_}{\.{\\fontcharwd} primitive@> -primitive("fontcharht",last_item,font_char_ht_code); -@!@:font_char_ht_}{\.{\\fontcharht} primitive@> -primitive("fontchardp",last_item,font_char_dp_code); -@!@:font_char_dp_}{\.{\\fontchardp} primitive@> -primitive("fontcharic",last_item,font_char_ic_code); -@!@:font_char_ic_}{\.{\\fontcharic} primitive@> - -@ @<Cases of |last_item| for |print_cmd_chr|@>= -font_char_wd_code: print_esc("fontcharwd"); -font_char_ht_code: print_esc("fontcharht"); -font_char_dp_code: print_esc("fontchardp"); -font_char_ic_code: print_esc("fontcharic"); - -@ @<Cases for fetching a dimension value@>= -font_char_wd_code, -font_char_ht_code, -font_char_dp_code, -font_char_ic_code: begin scan_font_ident; q:=cur_val; scan_char_num; - if (font_bc[q]<=cur_val)and(font_ec[q]>=cur_val) then - begin i:=char_info(q)(qi(cur_val)); - case m of - font_char_wd_code: cur_val:=char_width(q)(i); - font_char_ht_code: cur_val:=char_height(q)(height_depth(i)); - font_char_dp_code: cur_val:=char_depth(q)(height_depth(i)); - font_char_ic_code: cur_val:=char_italic(q)(i); - end; {there are no other cases} - end - else cur_val:=0; - end; - -@ The \.{\\parshapedimen}, \.{\\parshapeindent}, and \.{\\parshapelength} -commands return the indent and length parameters of the current -\.{\\parshape} specification. - -@d par_shape_length_code=eTeX_dim+4 {code for \.{\\parshapelength}} -@d par_shape_indent_code=eTeX_dim+5 {code for \.{\\parshapeindent}} -@d par_shape_dimen_code=eTeX_dim+6 {code for \.{\\parshapedimen}} - -@<Generate all \eTeX...@>= -primitive("parshapelength",last_item,par_shape_length_code); -@!@:par_shape_length_}{\.{\\parshapelength} primitive@> -primitive("parshapeindent",last_item,par_shape_indent_code); -@!@:par_shape_indent_}{\.{\\parshapeindent} primitive@> -primitive("parshapedimen",last_item,par_shape_dimen_code); -@!@:par_shape_dimen_}{\.{\\parshapedimen} primitive@> - -@ @<Cases of |last_item| for |print_cmd_chr|@>= -par_shape_length_code: print_esc("parshapelength"); -par_shape_indent_code: print_esc("parshapeindent"); -par_shape_dimen_code: print_esc("parshapedimen"); - -@ @<Cases for fetching a dimension value@>= -par_shape_length_code, -par_shape_indent_code, -par_shape_dimen_code: begin q:=cur_chr-par_shape_length_code; scan_int; - if (par_shape_ptr=null)or(cur_val<=0) then cur_val:=0 - else begin if q=2 then - begin q:=cur_val mod 2; cur_val:=(cur_val+q)div 2; - end; - if cur_val>info(par_shape_ptr) then cur_val:=info(par_shape_ptr); - cur_val:=mem[par_shape_ptr+2*cur_val-q].sc; - end; - cur_val_level:=dimen_val; - end; - -@ The \.{\\showgroups} command displays all currently active grouping -levels. - -@d show_groups=4 { \.{\\showgroups} } - -@<Generate all \eTeX...@>= -primitive("showgroups",xray,show_groups); -@!@:show_groups_}{\.{\\showgroups} primitive@> - -@ @<Cases of |xray| for |print_cmd_chr|@>= -show_groups:print_esc("showgroups"); - -@ @<Cases for |show_whatever|@>= -show_groups: begin begin_diagnostic; show_save_groups; - end; - -@ @<Types...@>= -@!save_pointer=0..save_size; {index into |save_stack|} - -@ The modifications of \TeX\ required for the display produced by the -|show_save_groups| procedure were first discussed by Donald~E. Knuth in -{\sl TUGboat\/} {\bf 11}, 165--170 and 499--511, 1990. -@^Knuth, Donald Ervin@> - -In order to understand a group type we also have to know its mode. -Since unrestricted horizontal modes are not associated with grouping, -they are skipped when traversing the semantic nest. - -@<Declare \eTeX\ procedures for use...@>= -procedure show_save_groups; -label found1,found2,found,done; -var p:0..nest_size; {index into |nest|} -@!m:-mmode..mmode; {mode} -@!v:save_pointer; {saved value of |save_ptr|} -@!l:quarterword; {saved value of |cur_level|} -@!c:group_code; {saved value of |cur_group|} -@!a:-1..1; {to keep track of alignments} -@!i:integer; -@!j:quarterword; -@!s:str_number; -begin p:=nest_ptr; nest[p]:=cur_list; {put the top level into the array} -v:=save_ptr; l:=cur_level; c:=cur_group; -save_ptr:=cur_boundary; decr(cur_level);@/ -a:=1; -print_nl(""); print_ln; -loop@+begin print_nl("### "); print_group(true); - if cur_group=bottom_level then goto done; - repeat m:=nest[p].mode_field; - if p>0 then decr(p) else m:=vmode; - until m<>hmode; - print(" ("); - case cur_group of - simple_group: begin incr(p); goto found2; - end; - hbox_group,adjusted_hbox_group: s:="hbox"; - vbox_group: s:="vbox"; - vtop_group: s:="vtop"; - align_group: if a=0 then - begin if m=-vmode then s:="halign" else s:="valign"; - a:=1; goto found1; - end - else begin if a=1 then print("align entry") else print_esc("cr"); - if p>=a then p:=p-a; - a:=0; goto found; - end; - no_align_group: - begin incr(p); a:=-1; print_esc("noalign"); goto found2; - end; - output_group: - begin print_esc("output"); goto found; - end; - math_group: goto found2; - disc_group,math_choice_group: - begin if cur_group=disc_group then print_esc("discretionary") - else print_esc("mathchoice"); - for i:=1 to 3 do if i<=saved(-2) then print("{}"); - goto found2; - end; - insert_group: - begin if saved(-2)=255 then print_esc("vadjust") - else begin print_esc("insert"); print_int(saved(-2)); - end; - goto found2; - end; - vcenter_group: begin s:="vcenter"; goto found1; - end; - semi_simple_group: begin incr(p); print_esc("begingroup"); goto found; - end; - math_shift_group: - begin if m=mmode then print_char("$") - else if nest[p].mode_field=mmode then - begin print_cmd_chr(eq_no,saved(-2)); goto found; - end; - print_char("$"); goto found; - end; - math_left_group: - begin if type(nest[p+1].eTeX_aux_field)=left_noad then print_esc("left") - else print_esc("middle"); - goto found; - end; - end; {there are no other cases} - @<Show the box context@>; - found1: print_esc(s); @<Show the box packaging info@>; - found2: print_char("{"); - found: print_char(")"); decr(cur_level); - cur_group:=save_level(save_ptr); save_ptr:=save_index(save_ptr) - end; -done: save_ptr:=v; cur_level:=l; cur_group:=c; -end; - -@ @<Show the box packaging info@>= -if saved(-2)<>0 then - begin print_char(" "); - if saved(-3)=exactly then print("to") else print("spread"); - print_scaled(saved(-2)); print("pt"); - end - -@ @<Show the box context@>= -i:=saved(-4); -if i<>0 then - if i<box_flag then - begin if abs(nest[p].mode_field)=vmode then j:=hmove else j:=vmove; - if i>0 then print_cmd_chr(j,0) else print_cmd_chr(j,1); - print_scaled(abs(i)); print("pt"); - end - else if i<ship_out_flag then - begin if i>=global_box_flag then - begin print_esc("global"); i:=i-(global_box_flag-box_flag); - end; - print_esc("setbox"); print_int(i-box_flag); print_char("="); - end - else print_cmd_chr(leader_ship,i-(leader_flag-a_leaders)) - -@ The |scan_general_text| procedure is much like |scan_toks(false,false)|, -but will be invoked via |expand|, i.e., recursively. -@^recursion@> - -@<Declare \eTeX\ procedures for sc...@>= -procedure@?scan_general_text; forward;@t\2@> - -@ The token list (balanced text) created by |scan_general_text| begins -at |link(temp_head)| and ends at |cur_val|. (If |cur_val=temp_head|, -the list is empty.) - -@<Declare \eTeX\ procedures for tok...@>= -procedure scan_general_text; -label found; -var s:normal..absorbing; {to save |scanner_status|} -@!w:pointer; {to save |warning_index|} -@!d:pointer; {to save |def_ref|} -@!p:pointer; {tail of the token list being built} -@!q:pointer; {new node being added to the token list via |store_new_token|} -@!unbalance:halfword; {number of unmatched left braces} -begin s:=scanner_status; w:=warning_index; d:=def_ref; -scanner_status:=absorbing; warning_index:=cur_cs; -def_ref:=get_avail; token_ref_count(def_ref):=null; p:=def_ref; -scan_left_brace; {remove the compulsory left brace} -unbalance:=1; -loop@+ begin get_token; - if cur_tok<right_brace_limit then - if cur_cmd<right_brace then incr(unbalance) - else begin decr(unbalance); - if unbalance=0 then goto found; - end; - store_new_token(cur_tok); - end; -found: q:=link(def_ref); free_avail(def_ref); {discard reference count} -if q=null then cur_val:=temp_head @+ else cur_val:=p; -link(temp_head):=q; -scanner_status:=s; warning_index:=w; def_ref:=d; -end; - -@ The \.{\\showtokens} command displays a token list. - -@d show_tokens=5 { \.{\\showtokens} , must be odd! } - -@<Generate all \eTeX...@>= -primitive("showtokens",xray,show_tokens); -@!@:show_tokens_}{\.{\\showtokens} primitive@> - -@ @<Cases of |xray| for |print_cmd_chr|@>= -show_tokens:print_esc("showtokens"); - -@ The \.{\\unexpanded} primitive prevents expansion of tokens much as -the result from \.{\\the} applied to a token variable. The -\.{\\detokenize} primitive converts a token list into a list of -character tokens much as if the token list were written to a file. We -use the fact that the command modifiers for \.{\\unexpanded} and -\.{\\detokenize} are odd whereas those for \.{\\the} and \.{\\showthe} -are even. - -@<Generate all \eTeX...@>= -primitive("unexpanded",the,1);@/ -@!@:unexpanded_}{\.{\\unexpanded} primitive@> -primitive("detokenize",the,show_tokens);@/ -@!@:detokenize_}{\.{\\detokenize} primitive@> - -@ @<Cases of |the| for |print_cmd_chr|@>= -else if chr_code=1 then print_esc("unexpanded") -else print_esc("detokenize") - -@ @<Handle \.{\\unexpanded} or \.{\\detokenize} and |return|@>= -if odd(cur_chr) then - begin c:=cur_chr; scan_general_text; - if c=1 then the_toks:=cur_val - else begin old_setting:=selector; selector:=new_string; b:=pool_ptr; - p:=get_avail; link(p):=link(temp_head); - token_show(p); flush_list(p); - selector:=old_setting; the_toks:=str_toks(b); - end; - return; - end - -@ The \.{\\showifs} command displays all currently active conditionals. - -@d show_ifs=6 { \.{\\showifs} } - -@<Generate all \eTeX...@>= -primitive("showifs",xray,show_ifs); -@!@:show_ifs_}{\.{\\showifs} primitive@> - -@ @<Cases of |xray| for |print_cmd_chr|@>= -show_ifs:print_esc("showifs"); - -@ -@d print_if_line(#)==if #<>0 then - begin print(" entered on line "); print_int(#); - end - -@<Cases for |show_whatever|@>= -show_ifs: begin begin_diagnostic; print_nl(""); print_ln; - if cond_ptr=null then - begin print_nl("### "); print("no active conditionals"); - end - else begin p:=cond_ptr; n:=0; - repeat incr(n); p:=link(p);@+until p=null; - p:=cond_ptr; t:=cur_if; l:=if_line; m:=if_limit; - repeat print_nl("### level "); print_int(n); print(": "); - print_cmd_chr(if_test,t); - if m=fi_code then print_esc("else"); - print_if_line(l); - decr(n); t:=subtype(p); l:=if_line_field(p); m:=type(p); p:=link(p); - until p=null; - end; - end; - -@ The \.{\\interactionmode} primitive allows to query and set the -interaction mode. - -@<Generate all \eTeX...@>= -primitive("interactionmode",set_page_int,2); -@!@:interaction_mode_}{\.{\\interactionmode} primitive@> - -@ @<Cases of |set_page_int| for |print_cmd_chr|@>= -else if chr_code=2 then print_esc("interactionmode") - -@ @<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>= -else if m=2 then cur_val:=interaction - -@ @<Declare \eTeX\ procedures for use...@>= -procedure@?new_interaction; forward;@t\2@> - -@ @<Cases for |alter_integer|@>= -else if c=2 then - begin if (cur_val<batch_mode)or(cur_val>error_stop_mode) then - begin print_err("Bad interaction mode"); -@.Bad interaction mode@> - help2("Modes are 0=batch, 1=nonstop, 2=scroll, and")@/ - ("3=errorstop. Proceed, and I'll ignore this case."); - int_error(cur_val); - end - else begin cur_chr:=cur_val; new_interaction; - end; - end - -@ The |middle| feature of \eTeX\ allows one ore several \.{\\middle} -delimiters to appear between \.{\\left} and \.{\\right}. - -@<Generate all \eTeX...@>= -primitive("middle",left_right,middle_noad); -@!@:middle_}{\.{\\middle} primitive@> - -@ @<Cases of |left_right| for |print_cmd_chr|@>= -else if chr_code=middle_noad then print_esc("middle") - -@ In constructions such as -$$\vbox{\halign{\.{#}\hfil\cr -{}\\hbox to \\hsize\{\cr -\hskip 25pt \\hskip 0pt plus 0.0001fil\cr -\hskip 25pt ...\cr -\hskip 25pt \\hfil\\penalty-200\\hfilneg\cr -\hskip 25pt ...\}\cr}}$$ -the stretch components of \.{\\hfil} and \.{\\hfilneg} compensate; they may, -however, get modified in order to prevent arithmetic overflow during -|hlist_out| when each of them is multiplied by a large |glue_set| value. - -Since this ``glue rounding'' depends on state variables |cur_g| and -|cur_glue| and \TeXXeT\ is supposed to emulate the behaviour of \TeXeT\ -(plus a suitable postprocessor) as close as possible the glue rounding -cannot be postponed until (segments of) an hlist has been reversed. - -The code below is invoked after the effective width, |rule_wd|, of a glue -node has been computed. The glue node is either converted into a kern node -or, for leaders, the glue specification is replaced by an equivalent rigid -one; the subtype of the glue node remains unchanged. - -@<Handle a glue node for mixed...@>= -if (((g_sign=stretching) and (stretch_order(g)=g_order)) or - ((g_sign=shrinking) and (shrink_order(g)=g_order))) then - begin fast_delete_glue_ref(g); - if subtype(p)<a_leaders then - begin type(p):=kern_node; width(p):=rule_wd; - end - else begin g:=get_node(glue_spec_size);@/ - stretch_order(g):=filll+1; shrink_order(g):=filll+1; {will never match} - width(g):=rule_wd; stretch(g):=0; shrink(g):=0; glue_ptr(p):=g; - end; - end - -@ The optional |TeXXeT| feature of \eTeX\ contains the code for mixed -left-to-right and right-to-left typesetting. This code is inspired by -but different from \TeXeT\ as presented by Donald~E. Knuth and Pierre -MacKay in {\sl TUGboat\/} {\bf 8}, 14--25, 1987. -@^Knuth, Donald Ervin@> -@^MacKay, Pierre@> - -In order to avoid confusion with \TeXeT\ the present implementation of -mixed direction typesetting is called \TeXXeT. It differs from \TeXeT\ -in several important aspects: (1)~Right-to-left text is reversed -explicitly by the |ship_out| routine and is written to a normal \.{DVI} -file without any |begin_reflect| or |end_reflect| commands; (2)~a -|math_node| is (ab)used instead of a |whatsit_node| to record the -\.{\\beginL}, \.{\\endL}, \.{\\beginR}, and \.{\\endR} text direction -primitives in order to keep the influence on the line breaking algorithm -for pure left-to-right text as small as possible; (3)~right-to-left text -interrupted by a displayed equation is automatically resumed after that -equation; and (4)~the |valign| command code with a non-zero command -modifier is (ab)used for the text direction primitives. - -Nevertheless there is a subtle difference between \TeX\ and \TeXXeT\ -that may influence the line breaking algorithm for pure left-to-right -text. When a paragraph containing math mode material is broken into -lines \TeX\ may generate lines where math mode material is not enclosed -by properly nested \.{\\mathon} and \.{\\mathoff} nodes. Unboxing such -lines as part of a new paragraph may have the effect that hyphenation is -attempted for `words' originating from math mode or that hyphenation is -inhibited for words originating from horizontal mode. - -In \TeXXeT\ additional \.{\\beginM}, resp.\ \.{\\endM} math nodes are -supplied at the start, resp.\ end of lines such that math mode material -inside a horizontal list always starts with either \.{\\mathon} or -\.{\\beginM} and ends with \.{\\mathoff} or \.{\\endM}. These -additional nodes are transparent to operations such as \.{\\unskip}, -\.{\\lastpenalty}, or \.{\\lastbox} but they do have the effect that -hyphenation is never attempted for `words' originating from math mode -and is never inhibited for words originating from horizontal mode. - -@d TeXXeT_state==eTeX_state(TeXXeT_code) -@d TeXXeT_en==(TeXXeT_state>0) {is \TeXXeT\ enabled?} - -@<Cases for |print_param|@>= -eTeX_state_code+TeXXeT_code:print_esc("TeXXeTstate"); - -@ @<Generate all \eTeX...@>= -primitive("TeXXeTstate",assign_int,eTeX_state_base+TeXXeT_code); -@!@:TeXXeT_state_}{\.{\\TeXXeT_state} primitive@> -primitive("beginL",valign,begin_L_code); -@!@:beginL_}{\.{\\beginL} primitive@> -primitive("endL",valign,end_L_code); -@!@:endL_}{\.{\\endL} primitive@> -primitive("beginR",valign,begin_R_code); -@!@:beginR_}{\.{\\beginR} primitive@> -primitive("endR",valign,end_R_code); -@!@:endR_}{\.{\\endR} primitive@> - -@ @<Cases of |valign| for |print_cmd_chr|@>= -else case chr_code of - begin_L_code: print_esc("beginL"); - end_L_code: print_esc("endL"); - begin_R_code: print_esc("beginR"); - othercases print_esc("endR") - endcases - -@ @<Cases of |main_control| for |hmode+valign|@>= -if cur_chr>0 then - begin if eTeX_enabled(TeXXeT_en,cur_cmd,cur_chr) then -@.Improper \\beginL@> -@.Improper \\endL@> -@.Improper \\beginR@> -@.Improper \\endR@> - tail_append(new_math(0,cur_chr)); - end -else - -@ An hbox with subtype dlist will never be reversed, even when embedded -in right-to-left text. - -@<Display if this box is never to be reversed@>= -if (type(p)=hlist_node)and(box_lr(p)=dlist) then print(", display") - -@ A number of routines are based on a stack of one-word nodes whose -|info| fields contain |end_M_code|, |end_L_code|, or |end_R_code|. The -top of the stack is pointed to by |LR_ptr|. - -When the stack manipulation macros of this section are used below, -variable |LR_ptr| might be the global variable declared here for |hpack| -and |ship_out|, or might be local to |post_line_break|. - -@d put_LR(#)==begin temp_ptr:=get_avail; info(temp_ptr):=#; - link(temp_ptr):=LR_ptr; LR_ptr:=temp_ptr; - end -@# -@d push_LR(#)==put_LR(end_LR_type(#)) -@# -@d pop_LR==begin temp_ptr:=LR_ptr; LR_ptr:=link(temp_ptr); - free_avail(temp_ptr); - end - -@<Glob...@>= -@!LR_ptr:pointer; {stack of LR codes for |hpack|, |ship_out|, and |init_math|} -@!LR_problems:integer; {counts missing begins and ends} -@!cur_dir:small_number; {current text direction} - -@ @<Set init...@>= -LR_ptr:=null; LR_problems:=0; cur_dir:=left_to_right; - -@ @<Insert LR nodes at the beg...@>= -begin q:=link(temp_head); -if LR_ptr<>null then - begin temp_ptr:=LR_ptr; r:=q; - repeat s:=new_math(0,begin_LR_type(info(temp_ptr))); link(s):=r; r:=s; - temp_ptr:=link(temp_ptr); - until temp_ptr=null; - link(temp_head):=r; - end; -while q<>cur_break(cur_p) do - begin if not is_char_node(q) then - if type(q)=math_node then @<Adjust \(t)the LR stack for the |p...@>; - q:=link(q); - end; -end - -@ @<Adjust \(t)the LR stack for the |p...@>= -if end_LR(q) then - begin if LR_ptr<>null then if info(LR_ptr)=end_LR_type(q) then pop_LR; - end -else push_LR(q) - -@ We use the fact that |q| now points to the node with \.{\\rightskip} glue. - -@<Insert LR nodes at the end...@>= -if LR_ptr<>null then - begin s:=temp_head; r:=link(s); - while r<>q do - begin s:=r; r:=link(s); - end; - r:=LR_ptr; - while r<>null do - begin temp_ptr:=new_math(0,info(r)); - link(s):=temp_ptr; s:=temp_ptr; r:=link(r); - end; - link(s):=q; - end - -@ @<Initialize the LR stack@>= -put_LR(before) {this will never match} - -@ @<Adjust \(t)the LR stack for the |hp...@>= -if end_LR(p) then - if info(LR_ptr)=end_LR_type(p) then pop_LR - else begin incr(LR_problems); type(p):=kern_node; subtype(p):=explicit; - end -else push_LR(p) - -@ @<Check for LR anomalies at the end of |hp...@>= -begin if info(LR_ptr)<>before then - begin while link(q)<>null do q:=link(q); - repeat temp_ptr:=q; q:=new_math(0,info(LR_ptr)); link(temp_ptr):=q; - LR_problems:=LR_problems+10000; pop_LR; - until info(LR_ptr)=before; - end; -if LR_problems>0 then - begin @<Report LR problems@>; goto common_ending; - end; -pop_LR; -if LR_ptr<>null then confusion("LR1"); -@:this can't happen LR1}{\quad LR1@> -end - -@ @<Report LR problems@>= -begin print_ln; print_nl("\endL or \endR problem (");@/ -print_int(LR_problems div 10000); print(" missing, ");@/ -print_int(LR_problems mod 10000); print(" extra");@/ -LR_problems:=0; -end - -@ @<Initialize |hlist_out| for mixed...@>= -if eTeX_ex then - begin @<Initialize the LR stack@>; - if box_lr(this_box)=dlist then - if cur_dir=right_to_left then - begin cur_dir:=left_to_right; cur_h:=cur_h-width(this_box); - end - else set_box_lr(this_box)(0); - if (cur_dir=right_to_left)and(box_lr(this_box)<>reversed) then - @<Reverse the complete hlist and set the subtype to |reversed|@>; - end - -@ @<Finish |hlist_out| for mixed...@>= -if eTeX_ex then - begin @<Check for LR anomalies at the end of |hlist_out|@>; - if box_lr(this_box)=dlist then cur_dir:=right_to_left; - end - -@ @<Handle a math node in |hlist_out|@>= -begin if eTeX_ex then - @<Adjust \(t)the LR stack for the |hlist_out| routine; if necessary - reverse an hlist segment and |goto reswitch|@>; - cur_h:=cur_h+width(p); - end - -@ Breaking a paragraph into lines while \TeXXeT\ is disabled may result -in lines whith unpaired math nodes. Such hlists are silently accepted -in the absence of text direction directives. - -@d LR_dir(#)==(subtype(#) div R_code) {text direction of a `math node'} - -@<Adjust \(t)the LR stack for the |hl...@>= -begin if end_LR(p) then - if info(LR_ptr)=end_LR_type(p) then pop_LR - else begin if subtype(p)>L_code then incr(LR_problems); - end -else begin push_LR(p); - if LR_dir(p)<>cur_dir then - @<Reverse an hlist segment and |goto reswitch|@>; - end; -type(p):=kern_node; -end - -@ @<Check for LR anomalies at the end of |hl...@>= -begin while info(LR_ptr)<>before do - begin if info(LR_ptr)>L_code then LR_problems:=LR_problems+10000; - pop_LR; - end; -pop_LR; -end - -@ @d edge_node=style_node {a |style_node| does not occur in hlists} -@d edge_node_size=style_node_size {number of words in an edge node} -@d edge_dist(#)==depth(#) {new |left_edge| position relative to |cur_h| - (after |width| has been taken into account)} - -@<Declare procedures needed in |hlist_out|, |vlist_out|@>= -function new_edge(@!s:small_number;@!w:scaled):pointer; - {create an edge node} -var p:pointer; {the new node} -begin p:=get_node(edge_node_size); type(p):=edge_node; subtype(p):=s; -width(p):=w; edge_dist(p):=0; {the |edge_dist| field will be set later} -new_edge:=p; -end; - -@ @<Cases of |hlist_out| that arise...@>= -edge_node: begin cur_h:=cur_h+width(p); - left_edge:=cur_h+edge_dist(p); cur_dir:=subtype(p); - end; - -@ We detach the hlist, start a new one consisting of just one kern node, -append the reversed list, and set the width of the kern node. - -@<Reverse the complete hlist...@>= -begin save_h:=cur_h; temp_ptr:=p; p:=new_kern(0); link(prev_p):=p; -cur_h:=0; link(p):=reverse(this_box,null,cur_g,cur_glue); width(p):=-cur_h; -cur_h:=save_h; set_box_lr(this_box)(reversed); -end - -@ We detach the remainder of the hlist, replace the math node by -an edge node, and append the reversed hlist segment to it; the tail of -the reversed segment is another edge node and the remainder of the -original list is attached to it. - -@<Reverse an hlist segment...@>= -begin save_h:=cur_h; temp_ptr:=link(p); rule_wd:=width(p); -free_node(p,small_node_size); -cur_dir:=reflected; p:=new_edge(cur_dir,rule_wd); link(prev_p):=p; -cur_h:=cur_h-left_edge+rule_wd; -link(p):=reverse(this_box,new_edge(reflected,0),cur_g,cur_glue); -edge_dist(p):=cur_h; cur_dir:=reflected; cur_h:=save_h; -goto reswitch; -end - -@ OLD VERSION. -The |reverse| function defined here is responsible to reverse the -nodes of an hlist (segment). The first parameter |this_box| is the enclosing -hlist node, the second parameter |t| is to become the tail of the reversed -list, and the global variable |temp_ptr| is the head of the list to be -reversed. Finally |cur_g| and |cur_glue| are the current glue rounding state -variables, to be updated by this function. We remove nodes from the original -list and add them to the head of the new one. - -@<Declare procedures needed in |hlist_out|, |vlist_out|@>= -function reverse(@!this_box,@!t:pointer; var cur_g:scaled; - var cur_glue:real):pointer; -label reswitch,next_p,done; -var l:pointer; {the new list} -@!p:pointer; {the current node} -@!q:pointer; {the next node} -@!g_order: glue_ord; {applicable order of infinity for glue} -@!g_sign: normal..shrinking; {selects type of glue} -@!glue_temp:real; {glue value before rounding} -@!m,@!n:halfword; {count of unmatched math nodes} -begin g_order:=glue_order(this_box); g_sign:=glue_sign(this_box); -l:=t; p:=temp_ptr; m:=min_halfword; n:=min_halfword; -loop@+ begin while p<>null do - @<Move node |p| to the new list and go to the next node; - or |goto done| if the end of the reflected segment has been reached@>; - if (t=null)and(m=min_halfword)and(n=min_halfword) then goto done; - p:=new_math(0,info(LR_ptr)); LR_problems:=LR_problems+10000; - {manufacture one missing math node} - end; -done:reverse:=l; -end; - -@ NEW VERSION. -The |reverse| function defined here is responsible to reverse (parts of) -the nodes of an hlist. The first parameter |this_box| is the enclosing -hlist node, the second parameter |t| is to become the tail of the reversed -list, and the global variable |temp_ptr| is the head of the list to be -reversed. Finally |cur_g| and |cur_glue| are the current glue rounding -state variables, to be updated by this function. - -@<Declare procedures needed in |hlist_out|, |vlist_out|@>= -@{ -@t\4@>@<Declare subprocedures for |reverse|@>@; -function reverse(@!this_box,@!t:pointer; var cur_g:scaled; - var cur_glue:real):pointer; -label reswitch,next_p,done; -var l:pointer; {the new list} -@!p:pointer; {the current node} -@!q:pointer; {the next node} -@!g_order: glue_ord; {applicable order of infinity for glue} -@!g_sign: normal..shrinking; {selects type of glue} -@!glue_temp:real; {glue value before rounding} -@!m,@!n:halfword; {count of unmatched math nodes} -begin g_order:=glue_order(this_box); g_sign:=glue_sign(this_box); -@<Build a list of segments and determine their widths@>; -l:=t; p:=temp_ptr; m:=min_halfword; n:=min_halfword; -loop@+ begin while p<>null do - @<Move node |p| to the new list and go to the next node; - or |goto done| if the end of the reflected segment has been reached@>; - if (t=null)and(m=min_halfword)and(n=min_halfword) then goto done; - p:=new_math(0,info(LR_ptr)); LR_problems:=LR_problems+10000; - {manufacture one missing math node} - end; -done:reverse:=l; -end; -@} - -@ We cannot simply remove nodes from the original list and add them to the -head of the new one; this might reverse the order of whatsit nodes such -that, e.g., a |write_node| for a stream appears before the |open_node| -and\slash or after the |close_node| for that stream. - -All whatsit nodes as well as hlist and vlist nodes containing such nodes -must not be permuted. A sequence of hlist and vlist nodes not containing -whatsit nodes as well as char, ligature, rule, kern, and glue nodes together -with math nodes not changing the text direction can be explicitly reversed. -Embedded sections of left-to-right text are treated as a unit and all -remaining nodes are irrelevant and can be ignored. - -In a first step we determine the width of various segments of the hlist to -be reversed: (1)~embedded left-to-right text, (2)~sequences of permutable or -irrelevant nodes, (3)~sequences of whatsit or irrelevant nodes, and -(4)~individual hlist and vlist nodes containing whatsit nodes. - -@d segment_node=style_node -@d segment_node_size=style_node_size {number of words in a segment node} -@d segment_first(#)==info(#+2) {first node of the segment} -@d segment_last(#)==link(#+2) {last node of the segment} - -@<Declare subprocedures for |reverse|@>= -function new_segment(@!s:small_number;@!f:pointer):pointer; - {create a segment node} -var p:pointer; {the new node} -begin p:=get_node(segment_node_size); type(p):=segment_node; subtype(p):=s; -width(p):=0; {the |width| field will be set later} -segment_first(p):=f; segment_last(p):=f; -new_segment:=p; -end; - -@ @<Build a list of segments and determine their widths@>= -begin -end - -@ Here is a recursive subroutine that determines if the hlist or vlist -node~|p| contains whatsit nodes. - -@<Declare subprocedures for |reverse|@>= -function has_whatsit(@!p:pointer):boolean; -label exit; -begin p:=list_ptr(p); has_whatsit:=true; -while p<>null do - begin if not is_char_node(p) then - case type(p) of - hlist_node, vlist_node: if has_whatsit(p) then goto exit; - whatsit_node: goto exit; - othercases do_nothing - endcases;@/ - p:=link(p); - end; -has_whatsit:=false; -exit: end; - -@ @<Move node |p| to the new list...@>= -reswitch: if is_char_node(p) then - repeat f:=font(p); c:=character(p); - cur_h:=cur_h+char_width(f)(char_info(f)(c)); - q:=link(p); link(p):=l; l:=p; p:=q; - until not is_char_node(p) -else @<Move the non-|char_node| |p| to the new list@> - -@ @<Move the non-|char_node| |p| to the new list@>= -begin q:=link(p); -case type(p) of -hlist_node,vlist_node,rule_node,kern_node: rule_wd:=width(p); -@t\4@>@<Cases of |reverse| that need special treatment@>@; -edge_node: confusion("LR2"); -@:this can't happen LR2}{\quad LR2@> -othercases goto next_p -endcases;@/ -cur_h:=cur_h+rule_wd; -next_p: link(p):=l; -if type(p)=kern_node then if (rule_wd=0)or(l=null) then - begin free_node(p,small_node_size); p:=l; - end; -l:=p; p:=q; -end - -@ Here we compute the effective width of a glue node as in |hlist_out|. - -@<Cases of |reverse|...@>= -glue_node: begin round_glue; - @<Handle a glue node for mixed...@>; - end; - -@ A ligature node is replaced by a char node. - -@<Cases of |reverse|...@>= -ligature_node: begin flush_node_list(lig_ptr(p)); - temp_ptr:=p; p:=get_avail; mem[p]:=mem[lig_char(temp_ptr)]; link(p):=q; - free_node(temp_ptr,small_node_size); goto reswitch; - end; - -@ Math nodes in an inner reflected segment are modified, those at the -outer level are changed into kern nodes. - -@<Cases of |reverse|...@>= -math_node: begin rule_wd:=width(p); -if end_LR(p) then - if info(LR_ptr)<>end_LR_type(p) then - begin type(p):=kern_node; incr(LR_problems); - end - else begin pop_LR; - if n>min_halfword then - begin decr(n); decr(subtype(p)); {change |after| into |before|} - end - else begin type(p):=kern_node; - if m>min_halfword then decr(m) - else @<Finish the reversed hlist segment and |goto done|@>; - end; - end -else begin push_LR(p); - if (n>min_halfword)or(LR_dir(p)<>cur_dir) then - begin incr(n); incr(subtype(p)); {change |before| into |after|} - end - else begin type(p):=kern_node; incr(m); - end; - end; -end; - -@ Finally we have found the end of the hlist segment to be reversed; the -final math node is released and the remaining list attached to the -edge node terminating the reversed segment. - -@<Finish the reversed...@>= -begin free_node(p,small_node_size); -link(t):=q; width(t):=rule_wd; edge_dist(t):=-cur_h-rule_wd; goto done; -end - -@ @<Check for LR anomalies at the end of |s...@>= -begin if LR_problems>0 then - begin @<Report LR problems@>; print_char(")"); print_ln; - end; -if (LR_ptr<>null)or(cur_dir<>left_to_right) then confusion("LR3"); -@:this can't happen LR3}{\quad LR3@> -end - -@ Some special actions are required for displayed equation in paragraphs -with mixed direction texts. First of all we have to set the text -direction preceding the display. - -@<Set the value of |x| to the text direction before the display@>= -if LR_save=null then x:=0 -else if info(LR_save)>=R_code then x:=-1@+else x:=1 - -@ @<Prepare for display after an empty...@>= -begin pop_nest; @<Set the value of |x|...@>; -end - -@ When calculating the natural width, |w|, of the final line preceding -the display, we may have to copy all or part of its hlist. We copy, -however, only those parts of the original list that are relevant for the -computation of |pre_display_size|. -@^data structure assumptions@> - -@<Declare subprocedures for |init_math|@>= -procedure just_copy(@!p,@!h,@!t:pointer); -label found,not_found; -var @!r:pointer; {current node being fabricated for new list} -@!words:0..5; {number of words remaining to be copied} -begin while p<>null do - begin words:=1; {this setting occurs in more branches than any other} - if is_char_node(p) then r:=get_avail - else case type(p) of - hlist_node,vlist_node: begin r:=get_node(box_node_size); - mem[r+6]:=mem[p+6]; mem[r+5]:=mem[p+5]; {copy the last two words} - words:=5; list_ptr(r):=null; {this affects |mem[r+5]|} - end; - rule_node: begin r:=get_node(rule_node_size); words:=rule_node_size; - end; - ligature_node: begin r:=get_avail; {only |font| and |character| are needed} - mem[r]:=mem[lig_char(p)]; goto found; - end; - kern_node,math_node: begin r:=get_node(small_node_size); - words:=small_node_size; - end; - glue_node: begin r:=get_node(small_node_size); add_glue_ref(glue_ptr(p)); - glue_ptr(r):=glue_ptr(p); leader_ptr(r):=null; - end; - whatsit_node:@<Make a partial copy of the whatsit...@>; - othercases goto not_found - endcases; - while words>0 do - begin decr(words); mem[r+words]:=mem[p+words]; - end; - found: link(h):=r; h:=r; - not_found: p:=link(p); - end; -link(h):=t; -end; - -@ When the final line ends with R-text, the value |w| refers to the line -reflected with respect to the left edge of the enclosing vertical list. - -@<Prepare for display after a non-empty...@>= -if eTeX_ex then @<Let |j| be the prototype box for the display@>; -v:=shift_amount(just_box); -@<Set the value of |x|...@>; -if x>=0 then - begin p:=list_ptr(just_box); link(temp_head):=null; - end -else begin v:=-v-width(just_box); - p:=new_math(0,begin_L_code); link(temp_head):=p; - just_copy(list_ptr(just_box),p,new_math(0,end_L_code)); - cur_dir:=right_to_left; - end; -v:=v+2*quad(cur_font); -if TeXXeT_en then @<Initialize the LR stack@> - -@ @<Finish the natural width computation@>= -if TeXXeT_en then - begin while LR_ptr<>null do pop_LR; - if LR_problems<>0 then - begin w:=max_dimen; LR_problems:=0; - end; - end; -cur_dir:=left_to_right; flush_node_list(link(temp_head)) - -@ In the presence of text direction directives we assume that any LR -problems have been fixed by the |hpack| routine. If the final line -contains, however, text direction directives while \TeXXeT\ is disabled, -then we set |w:=max_dimen|. - -@<Cases of `Let |d| be the natural...@>= -math_node: begin d:=width(p); - if TeXXeT_en then @<Adjust \(t)the LR stack for the |init_math| routine@> - else if subtype(p)>=L_code then - begin w:=max_dimen; goto done; - end; - end; -edge_node: begin d:=width(p); cur_dir:=subtype(p); - end; - -@ @<Adjust \(t)the LR stack for the |i...@>= -if end_LR(p) then - begin if info(LR_ptr)=end_LR_type(p) then pop_LR - else if subtype(p)>L_code then - begin w:=max_dimen; goto done; - end - end -else begin push_LR(p); - if LR_dir(p)<>cur_dir then - begin just_reverse(p); p:=temp_head; - end; - end - -@ @<Declare subprocedures for |init_math|@>= -procedure just_reverse(@!p:pointer); -label found,done; -var l:pointer; {the new list} -@!t:pointer; {tail of reversed segment} -@!q:pointer; {the next node} -@!m,@!n:halfword; {count of unmatched math nodes} -begin m:=min_halfword; n:=min_halfword; -if link(temp_head)=null then - begin just_copy(link(p),temp_head,null); q:=link(temp_head); - end -else begin q:=link(p); link(p):=null; flush_node_list(link(temp_head)); - end; -t:=new_edge(cur_dir,0); l:=t; cur_dir:=reflected; -while q<>null do - if is_char_node(q) then - repeat p:=q; q:=link(p); link(p):=l; l:=p; - until not is_char_node(q) - else begin p:=q; q:=link(p); - if type(p)=math_node then - @<Adjust \(t)the LR stack for the |just_reverse| routine@>; - link(p):=l; l:=p; - end; -goto done; -found:width(t):=width(p); link(t):=q; free_node(p,small_node_size); -done:link(temp_head):=l; -end; - -@ @<Adjust \(t)the LR stack for the |j...@>= -if end_LR(p) then - if info(LR_ptr)<>end_LR_type(p) then - begin type(p):=kern_node; incr(LR_problems); - end - else begin pop_LR; - if n>min_halfword then - begin decr(n); decr(subtype(p)); {change |after| into |before|} - end - else begin if m>min_halfword then decr(m)@+else goto found; - type(p):=kern_node; - end; - end -else begin push_LR(p); - if (n>min_halfword)or(LR_dir(p)<>cur_dir) then - begin incr(n); incr(subtype(p)); {change |before| into |after|} - end - else begin type(p):=kern_node; incr(m); - end; - end - -@ The prototype box is an hlist node with the width, glue set, and shift -amount of |just_box|, i.e., the last line preceding the display. Its -hlist reflects the current \.{\\leftskip} and \.{\\rightskip}. - -@<Let |j| be the prototype box for the display@>= -begin if right_skip=zero_glue then j:=new_kern(0) -else j:=new_param_glue(right_skip_code); -if left_skip=zero_glue then p:=new_kern(0) -else p:=new_param_glue(left_skip_code); -link(p):=j; j:=new_null_box; width(j):=width(just_box); -shift_amount(j):=shift_amount(just_box); list_ptr(j):=p; -glue_order(j):=glue_order(just_box); glue_sign(j):=glue_sign(just_box); -glue_set(j):=glue_set(just_box); -end - -@ At the end of a displayed equation we retrieve the prototype box. - -@<Local variables for finishing...@>= -@!j:pointer; {prototype box} - -@ @<Retrieve the prototype box@>= -if mode=mmode then j:=LR_box - -@ @<Flush the prototype box@>= -flush_node_list(j) - -@ The |app_display| procedure used to append the displayed equation -and\slash or equation number to the current vertical list has three -parameters: the prototype box, the hbox to be appended, and the -displacement of the hbox in the display line. - -@<Declare subprocedures for |after_math|@>= -procedure app_display(@!j,@!b:pointer;@!d:scaled); -var z:scaled; {width of the line} -@!s:scaled; {move the line right this much} -@!e:scaled; {distance from right edge of box to end of line} -@!x:integer; {|pre_display_direction|} -@!p,@!q,@!r,@!t,@!u:pointer; {for list manipulation} -begin s:=display_indent; x:=pre_display_direction; -if x=0 then shift_amount(b):=s+d -else begin z:=display_width; p:=b; - @<Set up the hlist for the display line@>; - @<Package the display line@>; - end; -append_to_vlist(b); -end; - -@ Here we construct the hlist for the display, starting with node |p| -and ending with node |q|. We also set |d| and |e| to the amount of -kerning to be added before and after the hlist (adjusted for the -prototype box). - -@<Set up the hlist for the display line@>= -if x>0 then e:=z-d-width(p) -else begin e:=d; d:=z-e-width(p); - end; -if j<>null then - begin b:=copy_node_list(j); height(b):=height(p); depth(b):=depth(p); - s:=s-shift_amount(b); d:=d+s; e:=e+width(b)-z-s; - end; -if box_lr(p)=dlist then q:=p {display or equation number} -else begin {display and equation number} - r:=list_ptr(p); free_node(p,box_node_size); - if r=null then confusion("LR4"); - if x>0 then - begin p:=r; - repeat q:=r; r:=link(r); {find tail of list} - until r=null; - end - else begin p:=null; q:=r; - repeat t:=link(r); link(r):=p; p:=r; r:=t; {reverse list} - until r=null; - end; - end - -@ In the presence of a prototype box we use its shift amount and width -to adjust the values of kerning and add these values to the glue nodes -inserted to cancel the \.{\\leftskip} and \.{\\rightskip}. If there is -no prototype box (because the display is preceded by an empty -paragraph), or if the skip parameters are zero, we just add kerns. - -The |cancel_glue| macro creates and links a glue node that is, together -with another glue node, equivalent to a given amount of kerning. We can -use |j| as temporary pointer, since all we need is |j<>null|. - -@d cancel_glue(#)==j:=new_skip_param(#); cancel_glue_cont -@d cancel_glue_cont(#)==link(#):=j; cancel_glue_cont_cont -@d cancel_glue_cont_cont(#)==link(j):=#; cancel_glue_end -@d cancel_glue_end(#)==j:=glue_ptr(#); cancel_glue_end_end -@d cancel_glue_end_end(#)== -stretch_order(temp_ptr):=stretch_order(j); -shrink_order(temp_ptr):=shrink_order(j); width(temp_ptr):=#-width(j); -stretch(temp_ptr):=-stretch(j); shrink(temp_ptr):=-shrink(j) - -@<Package the display line@>= -if j=null then - begin r:=new_kern(0); t:=new_kern(0); {the widths will be set later} - end -else begin r:=list_ptr(b); t:=link(r); - end; -u:=new_math(0,end_M_code); -if type(t)=glue_node then {|t| is \.{\\rightskip} glue} - begin cancel_glue(right_skip_code)(q)(u)(t)(e); link(u):=t; - end -else begin width(t):=e; link(t):=u; link(q):=t; - end; -u:=new_math(0,begin_M_code); -if type(r)=glue_node then {|r| is \.{\\leftskip} glue} - begin cancel_glue(left_skip_code)(u)(p)(r)(d); link(r):=u; - end -else begin width(r):=d; link(r):=p; link(u):=r; - if j=null then - begin b:=hpack(u,natural); shift_amount(b):=s; - end - else list_ptr(b):=u; - end - -@ The |scan_tokens| feature of \eTeX\ defines the \.{\\scantokens} -primitive. - -@<Generate all \eTeX...@>= -primitive("scantokens",input,2); -@!@:scan_tokens_}{\.{\\scantokens} primitive@> - -@ @<Cases of |input| for |print_cmd_chr|@>= -else if chr_code=2 then print_esc("scantokens") - -@ @<Cases for |input|@>= -else if cur_chr=2 then pseudo_start - -@ The global variable |pseudo_files| is used to maintain a stack of -pseudo files. The |info| field of each pseudo file points to a linked -list of variable size nodes representing lines not yet processed: the -|info| field of the first word contains the size of this node, all the -following words contain ASCII codes. - -@<Glob...@>= -@!pseudo_files:pointer; {stack of pseudo files} - -@ @<Set init...@>= -pseudo_files:=null; - -@ The |pseudo_start| procedure initiates reading from a pseudo file. - -@<Declare \eTeX\ procedures for ex...@>= -procedure@?pseudo_start; forward;@t\2@> - -@ @<Declare \eTeX\ procedures for tok...@>= -procedure pseudo_start; -var old_setting:0..max_selector; {holds |selector| setting} -@!s:str_number; {string to be converted into a pseudo file} -@!l,@!m:pool_pointer; {indices into |str_pool|} -@!p,@!q,@!r:pointer; {for list construction} -@!w: four_quarters; {four ASCII codes} -@!nl,@!sz:integer; -begin scan_general_text; -old_setting:=selector; selector:=new_string; -token_show(temp_head); selector:=old_setting; -flush_list(link(temp_head)); -str_room(1); s:=make_string; -@<Convert string |s| into a new pseudo file@>; -flush_string; -@<Initiate input from new pseudo file@>; -end; - -@ @<Convert string |s| into a new pseudo file@>= -str_pool[pool_ptr]:=si(" "); l:=str_start[s]; -nl:=si(new_line_char); -p:=get_avail; q:=p; -while l<pool_ptr do - begin m:=l; - while (l<pool_ptr)and(str_pool[l]<>nl) do incr(l); - sz:=(l-m+7)div 4; - if sz=1 then sz:=2; - r:=get_node(sz); link(q):=r; q:=r; info(q):=hi(sz); - while sz>2 do - begin decr(sz); incr(r); - w.b0:=qi(so(str_pool[m])); w.b1:=qi(so(str_pool[m+1])); - w.b2:=qi(so(str_pool[m+2])); w.b3:=qi(so(str_pool[m+3])); - mem[r].qqqq:=w; m:=m+4; - end; - w.b0:=qi(" "); w.b1:=qi(" "); w.b2:=qi(" "); w.b3:=qi(" "); - if l>m then - begin w.b0:=qi(so(str_pool[m])); - if l>m+1 then - begin w.b1:=qi(so(str_pool[m+1])); - if l>m+2 then - begin w.b2:=qi(so(str_pool[m+2])); - if l>m+3 then w.b3:=qi(so(str_pool[m+3])); - end; - end; - end; - mem[r+1].qqqq:=w; - if str_pool[l]=nl then incr(l); - end; -info(p):=link(p); link(p):=pseudo_files; pseudo_files:=p - -@ @<Initiate input from new pseudo file@>= -begin_file_reading; {set up |cur_file| and new level of input} -line:=0; limit:=start; loc:=limit+1; {force line read} -if tracing_scan_tokens>0 then - begin if term_offset>max_print_line-3 then print_ln - else if (term_offset>0)or(file_offset>0) then print_char(" "); - name:=19; print("( "); incr(open_parens); update_terminal; - end -else name:=18 - -@ Here we read a line from the current pseudo file into |buffer|. - -@<Declare \eTeX\ procedures for tr...@>= -function pseudo_input: boolean; {inputs the next line or returns |false|} -var p:pointer; {current line from pseudo file} -@!sz:integer; {size of node |p|} -@!w:four_quarters; {four ASCII codes} -@!r:pointer; {loop index} -begin last:=first; {cf.\ Matthew 19\thinspace:\thinspace30} -p:=info(pseudo_files); -if p=null then pseudo_input:=false -else begin info(pseudo_files):=link(p); sz:=ho(info(p)); - if 4*sz-3>=buf_size-last then - @<Report overflow of the input buffer, and abort@>; - last:=first; - for r:=p+1 to p+sz-1 do - begin w:=mem[r].qqqq; - buffer[last]:=w.b0; buffer[last+1]:=w.b1; - buffer[last+2]:=w.b2; buffer[last+3]:=w.b3; - last:=last+4; - end; - if last>=max_buf_stack then max_buf_stack:=last+1; - while (last>first)and(buffer[last-1]=" ") do decr(last); - free_node(p,sz); - pseudo_input:=true; - end; -end; - -@ When we are done with a pseudo file we `close' it. - -@<Declare \eTeX\ procedures for tr...@>= -procedure pseudo_close; {close the top level pseudo file} -var p,@!q: pointer; -begin p:=link(pseudo_files); q:=info(pseudo_files); -free_avail(pseudo_files); pseudo_files:=p; -while q<>null do - begin p:=q; q:=link(p); free_node(p,ho(info(p))); - end; -end; - -@ @<Dump the \eTeX\ state@>= -while pseudo_files<>null do pseudo_close; {flush pseudo files} - -@ @<Generate all \eTeX...@>= -primitive("readline",read_to_cs,1);@/ -@!@:read_line_}{\.{\\readline} primitive@> - -@ @<Cases of |read| for |print_cmd_chr|@>= -else print_esc("readline") - -@ @<Handle \.{\\readline} and |goto done|@>= -if j=1 then - begin while loc<=limit do {current line not yet finished} - begin cur_chr:=buffer[loc]; incr(loc); - if cur_chr=" " then cur_tok:=space_token - @+else cur_tok:=cur_chr+other_token; - store_new_token(cur_tok); - end; - goto done; - end - -@ Here we define the additional conditionals of \eTeX\ as well as the -\.{\\unless} prefix. - -@d if_def_code=17 { `\.{\\ifdefined}' } -@d if_cs_code=18 { `\.{\\ifcsname}' } -@d if_font_char_code=19 { `\.{\\iffontchar}' } - -@<Generate all \eTeX...@>= -primitive("unless",expand_after,1);@/ -@!@:unless_}{\.{\\unless} primitive@> -primitive("ifdefined",if_test,if_def_code); -@!@:if_defined_}{\.{\\ifdefined} primitive@> -primitive("ifcsname",if_test,if_cs_code); -@!@:if_cs_name_}{\.{\\ifcsname} primitive@> -primitive("iffontchar",if_test,if_font_char_code); -@!@:if_font_char_}{\.{\\iffontchar} primitive@> - -@ @<Cases of |expandafter| for |print_cmd_chr|@>= -else print_esc("unless") - -@ @<Cases of |if_test| for |print_cmd_chr|@>= -if_def_code:print_esc("ifdefined"); -if_cs_code:print_esc("ifcsname"); -if_font_char_code:print_esc("iffontchar"); - -@ The result of a boolean condition is reversed when the conditional is -preceded by \.{\\unless}. - -@<Negate a boolean conditional and |goto reswitch|@>= -begin get_token; -if (cur_cmd=if_test)and(cur_chr<>if_case_code) then - begin cur_chr:=cur_chr+unless_code; goto reswitch; - end; -print_err("You can't use `"); print_esc("unless"); print("' before `"); -@.You can't use \\unless...@> -print_cmd_chr(cur_cmd,cur_chr); print_char("'"); -help1("Continue, and I'll forget that it ever happened."); -back_error; -end - -@ The conditional \.{\\ifdefined} tests if a control sequence is -defined. - -We need to reset |scanner_status|, since \.{\\outer} control sequences -are allowed, but we might be scanning a macro definition or preamble. - -@<Cases for |conditional|@>= -if_def_code:begin save_scanner_status:=scanner_status; - scanner_status:=normal; - get_next; b:=(cur_cmd<>undefined_cs); - scanner_status:=save_scanner_status; - end; - -@ The conditional \.{\\ifcsname} is equivalent to \.{\{\\expandafter} -\.{\}\\expandafter} \.{\\ifdefined} \.{\\csname}, except that no new -control sequence will be entered into the hash table (once all tokens -preceding the mandatory \.{\\endcsname} have been expanded). - -@<Cases for |conditional|@>= -if_cs_code:begin n:=get_avail; p:=n; {head of the list of characters} - repeat get_x_token; - if cur_cs=0 then store_new_token(cur_tok); - until cur_cs<>0; - if cur_cmd<>end_cs_name then @<Complain about missing \.{\\endcsname}@>; - @<Look up the characters of list |n| in the hash table, and set |cur_cs|@>; - flush_list(n); - b:=(eq_type(cur_cs)<>undefined_cs); - end; - -@ @<Look up the characters of list |n| in the hash table...@>= -m:=first; p:=link(n); -while p<>null do - begin if m>=max_buf_stack then - begin max_buf_stack:=m+1; - if max_buf_stack=buf_size then - overflow("buffer size",buf_size); -@:TeX capacity exceeded buffer size}{\quad buffer size@> - end; - buffer[m]:=info(p) mod @'400; incr(m); p:=link(p); - end; -if m>first+1 then - cur_cs:=id_lookup(first,m-first) {|no_new_control_sequence| is |true|} -else if m=first then cur_cs:=null_cs {the list is empty} -else cur_cs:=single_base+buffer[first] {the list has length one} - -@ The conditional \.{\\iffontchar} tests the existence of a character in -a font. - -@<Cases for |conditional|@>= -if_font_char_code:begin scan_font_ident; n:=cur_val; scan_char_num; - if (font_bc[n]<=cur_val)and(font_ec[n]>=cur_val) then - b:=char_exists(char_info(n)(qi(cur_val))) - else b:=false; - end; - -@ The |protected| feature of \eTeX\ defines the \.{\\protected} prefix -command for macro definitions. Such macros are protected against -expansions when lists of expanded tokens are built, e.g., for \.{\\edef} -or during \.{\\write}. - -@<Generate all \eTeX...@>= -primitive("protected",prefix,8); -@!@:protected_}{\.{\\protected} primitive@> - -@ @<Cases of |prefix| for |print_cmd_chr|@>= -else if chr_code=8 then print_esc("protected") - -@ The |get_x_or_protected| procedure is like |get_x_token| except that -protected macros are not expanded. - -@<Declare \eTeX\ procedures for sc...@>= -procedure get_x_or_protected; {sets |cur_cmd|, |cur_chr|, |cur_tok|, - and expands non-protected macros} -label exit; -begin loop@+begin get_token; - if cur_cmd<=max_command then return; - if (cur_cmd>=call)and(cur_cmd<end_template) then - if info(link(cur_chr))=protected_token then return; - expand; - end; -exit:end; - -@ A group entered (or a conditional started) in one file may end in a -different file. Such slight anomalies, although perfectly legitimate, -may cause errors that are difficult to locate. In order to be able to -give a warning message when such anomalies occur, \eTeX\ uses the -|grp_stack| and |if_stack| arrays to record the initial |cur_boundary| -and |cond_ptr| values for each input file. - -@<Glob...@>= -@!grp_stack : array[0..max_in_open] of save_pointer; {initial |cur_boundary|} -@!if_stack : array[0..max_in_open] of pointer; {initial |cond_ptr|} - -@ When a group ends that was apparently entered in a different input -file, the |group_warning| procedure is invoked in order to update the -|grp_stack|. If moreover \.{\\tracingnesting} is positive we want to -give a warning message. The situation is, however, somewhat complicated -by two facts: (1)~There may be |grp_stack| elements without a -corresponding \.{\\input} file or \.{\\scantokens} pseudo file (e.g., -error insertions from the terminal); and (2)~the relevant information is -recorded in the |name_field| of the |input_stack| only loosely -synchronized with the |in_open| variable indexing |grp_stack|. - -@<Declare \eTeX\ procedures for tr...@>= -procedure group_warning; -var i:0..max_in_open; {index into |grp_stack|} -@!w:boolean; {do we need a warning?} -begin base_ptr:=input_ptr; input_stack[base_ptr]:=cur_input; - {store current state} -i:=in_open; w:=false; -while (grp_stack[i]=cur_boundary)and(i>0) do - begin @<Set variable |w| to indicate if this case should be reported@>; - grp_stack[i]:=save_index(save_ptr); decr(i); - end; -if w then - begin print_nl("Warning: end of "); print_group(true); -@.Warning: end of...@> - print(" of a different file"); print_ln; - if tracing_nesting>1 then show_context; - if history=spotless then history:=warning_issued; - end; -end; - -@ This code scans the input stack in order to determine the type of the -current input file. - -@<Set variable |w| to...@>= -if tracing_nesting>0 then - begin while (input_stack[base_ptr].state_field=token_list)or@| - (input_stack[base_ptr].index_field>i) do decr(base_ptr); - if input_stack[base_ptr].name_field>17 then w:=true; - end - -@ When a conditional ends that was apparently started in a different -input file, the |if_warning| procedure is invoked in order to update the -|if_stack|. If moreover \.{\\tracingnesting} is positive we want to -give a warning message (with the same complications as above). - -@<Declare \eTeX\ procedures for tr...@>= -procedure if_warning; -var i:0..max_in_open; {index into |if_stack|} -@!w:boolean; {do we need a warning?} -begin base_ptr:=input_ptr; input_stack[base_ptr]:=cur_input; - {store current state} -i:=in_open; w:=false; -while if_stack[i]=cond_ptr do - begin @<Set variable |w| to...@>; - if_stack[i]:=link(cond_ptr); decr(i); - end; -if w then - begin print_nl("Warning: end of "); print_cmd_chr(if_test,cur_if); -@.Warning: end of...@> - print_if_line(if_line); print(" of a different file"); print_ln; - if tracing_nesting>1 then show_context; - if history=spotless then history:=warning_issued; - end; -end; - -@ Conversely, the |file_warning| procedure is invoked when a file ends -and some groups entered or conditionals started while reading from that -file are still incomplete. - -@<Declare \eTeX\ procedures for tr...@>= -procedure file_warning; -var p:pointer; {saved value of |save_ptr| or |cond_ptr|} -@!l:quarterword; {saved value of |cur_level| or |if_limit|} -@!c:quarterword; {saved value of |cur_group| or |cur_if|} -@!i:integer; {saved value of |if_line|} -begin p:=save_ptr; l:=cur_level; c:=cur_group; save_ptr:=cur_boundary; -while grp_stack[in_open]<>save_ptr do - begin decr(cur_level); - print_nl("Warning: end of file when "); -@.Warning: end of file when...@> - print_group(true); print(" is incomplete");@/ - cur_group:=save_level(save_ptr); save_ptr:=save_index(save_ptr) - end; -save_ptr:=p; cur_level:=l; cur_group:=c; {restore old values} -p:=cond_ptr; l:=if_limit; c:=cur_if; i:=if_line; -while if_stack[in_open]<>cond_ptr do - begin print_nl("Warning: end of file when "); -@.Warning: end of file when...@> - print_cmd_chr(if_test,cur_if); - if if_limit=fi_code then print_esc("else"); - print_if_line(if_line); print(" is incomplete");@/ - if_line:=if_line_field(cond_ptr); cur_if:=subtype(cond_ptr); - if_limit:=type(cond_ptr); cond_ptr:=link(cond_ptr); - end; -cond_ptr:=p; if_limit:=l; cur_if:=c; if_line:=i; {restore old values} -print_ln; -if tracing_nesting>1 then show_context; -if history=spotless then history:=warning_issued; -end; - -@ Here are the additional \eTeX\ primitives for expressions. - -@<Generate all \eTeX...@>= -primitive("numexpr",last_item,eTeX_expr-int_val+int_val); -@!@:num_expr_}{\.{\\numexpr} primitive@> -primitive("dimexpr",last_item,eTeX_expr-int_val+dimen_val); -@!@:dim_expr_}{\.{\\dimexpr} primitive@> -primitive("glueexpr",last_item,eTeX_expr-int_val+glue_val); -@!@:glue_expr_}{\.{\\glueexpr} primitive@> -primitive("muexpr",last_item,eTeX_expr-int_val+mu_val); -@!@:mu_expr_}{\.{\\muexpr} primitive@> - -@ @<Cases of |last_item| for |print_cmd_chr|@>= -eTeX_expr-int_val+int_val: print_esc("numexpr"); -eTeX_expr-int_val+dimen_val: print_esc("dimexpr"); -eTeX_expr-int_val+glue_val: print_esc("glueexpr"); -eTeX_expr-int_val+mu_val: print_esc("muexpr"); - -@ This code for reducing |cur_val_level| and\slash or negating the -result is similar to the one for all the other cases of -|scan_something_internal|, with the difference that |scan_expr| has -already increased the reference count of a glue specification. - -@<Process an expression and |return|@>= -begin if m<eTeX_mu then - begin case m of - @/@<Cases for fetching a glue value@>@/ - end; {there are no other cases} - cur_val_level:=glue_val; - end -else if m<eTeX_expr then - begin case m of - @/@<Cases for fetching a mu value@>@/ - end; {there are no other cases} - cur_val_level:=mu_val; - end -else begin cur_val_level:=m-eTeX_expr+int_val; scan_expr; - end; -while cur_val_level>level do - begin if cur_val_level=glue_val then - begin m:=cur_val; cur_val:=width(m); delete_glue_ref(m); - end - else if cur_val_level=mu_val then mu_error; - decr(cur_val_level); - end; -if negative then - if cur_val_level>=glue_val then - begin m:=cur_val; cur_val:=new_spec(m); delete_glue_ref(m); - @<Negate all three glue components of |cur_val|@>; - end - else negate(cur_val); -return; -end - -@ @<Declare \eTeX\ procedures for sc...@>= -procedure@?scan_expr; forward;@t\2@> - -@ The |scan_expr| procedure scans and evaluates an expression. - -@<Declare procedures needed for expressions@>= -@t\4@>@<Declare subprocedures for |scan_expr|@> -procedure scan_expr; {scans and evaluates an expression} -label restart, continue, found; -var a,@!b:boolean; {saved values of |arith_error|} -@!l:small_number; {type of expression} -@!r:small_number; {state of expression so far} -@!s:small_number; {state of term so far} -@!o:small_number; {next operation or type of next factor} -@!e:integer; {expression so far} -@!t:integer; {term so far} -@!f:integer; {current factor} -@!n:integer; {numerator of combined multiplication and division} -@!p:pointer; {top of expression stack} -@!q:pointer; {for stack manipulations} -begin l:=cur_val_level; a:=arith_error; b:=false; p:=null; -incr(expand_depth_count); -if expand_depth_count>=expand_depth then overflow("expansion depth",expand_depth); -@<Scan and evaluate an expression |e| of type |l|@>; -decr(expand_depth_count); -if b then - begin print_err("Arithmetic overflow"); -@.Arithmetic overflow@> - help2("I can't evaluate this expression,")@/ - ("since the result is out of range."); - error; - if l>=glue_val then - begin delete_glue_ref(e); e:=zero_glue; add_glue_ref(e); - end - else e:=0; - end; -arith_error:=a; cur_val:=e; cur_val_level:=l; -end; - -@ Evaluating an expression is a recursive process: When the left -parenthesis of a subexpression is scanned we descend to the next level -of recursion; the previous level is resumed with the matching right -parenthesis. - -@d expr_none=0 {\.( seen, or \.( $\langle\it expr\rangle$ \.) seen} -@d expr_add=1 {\.( $\langle\it expr\rangle$ \.+ seen} -@d expr_sub=2 {\.( $\langle\it expr\rangle$ \.- seen} -@d expr_mult=3 {$\langle\it term\rangle$ \.* seen} -@d expr_div=4 {$\langle\it term\rangle$ \./ seen} -@d expr_scale=5 {$\langle\it term\rangle$ \.* - $\langle\it factor\rangle$ \./ seen} - -@<Scan and eval...@>= -restart: r:=expr_none; e:=0; s:=expr_none; t:=0; n:=0; -continue: if s=expr_none then o:=l@+else o:=int_val; -@<Scan a factor |f| of type |o| or start a subexpression@>; -found: @<Scan the next operator and set |o|@>; -arith_error:=b; -@<Make sure that |f| is in the proper range@>; -case s of @<Cases for evaluation of the current term@>@; -end; {there are no other cases} -if o>expr_sub then s:=o@+else @<Evaluate the current expression@>; -b:=arith_error; -if o<>expr_none then goto continue; -if p<>null then @<Pop the expression stack and |goto found|@> - -@ @<Scan the next op...@>= -@<Get the next non-blank non-call token@>; -if cur_tok=other_token+"+" then o:=expr_add -else if cur_tok=other_token+"-" then o:=expr_sub -else if cur_tok=other_token+"*" then o:=expr_mult -else if cur_tok=other_token+"/" then o:=expr_div -else begin o:=expr_none; - if p=null then - begin if cur_cmd<>relax then back_input; - end - else if cur_tok<>other_token+")" then - begin print_err("Missing ) inserted for expression"); -@.Missing ) inserted@> - help1("I was expecting to see `+', `-', `*', `/', or `)'. Didn't."); - back_error; - end; - end - -@ @<Scan a factor...@>= -@<Get the next non-blank non-call token@>; -if cur_tok=other_token+"(" then - @<Push the expression stack and |goto restart|@>; -back_input; -if o=int_val then scan_int -else if o=dimen_val then scan_normal_dimen -else if o=glue_val then scan_normal_glue -else scan_mu_glue; -f:=cur_val - -@ @<Declare \eTeX\ procedures for sc...@>= -procedure@?scan_normal_glue; forward;@t\2@>@/ -procedure@?scan_mu_glue; forward;@t\2@> - -@ Here we declare two trivial procedures in order to avoid mutually -recursive procedures with parameters. - -@<Declare procedures needed for expressions@>= -procedure scan_normal_glue; -begin scan_glue(glue_val); -end; -@# -procedure scan_mu_glue; -begin scan_glue(mu_val); -end; - -@ Parenthesized subexpressions can be inside expressions, and this -nesting has a stack. Seven local variables represent the top of the -expression stack: |p| points to pushed-down entries, if any; |l| -specifies the type of expression currently beeing evaluated; |e| is the -expression so far and |r| is the state of its evaluation; |t| is the -term so far and |s| is the state of its evaluation; finally |n| is the -numerator for a combined multiplication and division, if any. - -@d expr_node_size=4 {number of words in stack entry for subexpressions} -@d expr_e_field(#)==mem[#+1].int {saved expression so far} -@d expr_t_field(#)==mem[#+2].int {saved term so far} -@d expr_n_field(#)==mem[#+3].int {saved numerator} - -@<Push the expression...@>= -begin q:=get_node(expr_node_size); link(q):=p; type(q):=l; -subtype(q):=4*s+r; -expr_e_field(q):=e; expr_t_field(q):=t; expr_n_field(q):=n; -p:=q; l:=o; goto restart; -end - -@ @<Pop the expression...@>= -begin f:=e; q:=p; -e:=expr_e_field(q); t:=expr_t_field(q); n:=expr_n_field(q); -s:=subtype(q) div 4; r:=subtype(q) mod 4; -l:=type(q); p:=link(q); free_node(q,expr_node_size); -goto found; -end - -@ We want to make sure that each term and (intermediate) result is in -the proper range. Integer values must not exceed |infinity| -($2^{31}-1$) in absolute value, dimensions must not exceed |max_dimen| -($2^{30}-1$). We avoid the absolute value of an integer, because this -might fail for the value $-2^{31}$ using 32-bit arithmetic. - -@d num_error(#)== {clear a number or dimension and set |arith_error|} - begin arith_error:=true; #:=0; - end -@d glue_error(#)== {clear a glue spec and set |arith_error|} - begin arith_error:=true; delete_glue_ref(#); #:=new_spec(zero_glue); - end - -@<Make sure that |f|...@>= -if (l=int_val)or(s>expr_sub) then - begin if (f>infinity)or(f<-infinity) then num_error(f); - end -else if l=dimen_val then - begin if abs(f)>max_dimen then num_error(f); - end -else begin if (abs(width(f))>max_dimen)or@| - (abs(stretch(f))>max_dimen)or@| - (abs(shrink(f))>max_dimen) then glue_error(f); - end - -@ Applying the factor |f| to the partial term |t| (with the operator -|s|) is delayed until the next operator |o| has been scanned. Here we -handle the first factor of a partial term. A glue spec has to be copied -unless the next operator is a right parenthesis; this allows us later on -to simply modify the glue components. - -@d normalize_glue(#)== - if stretch(#)=0 then stretch_order(#):=normal; - if shrink(#)=0 then shrink_order(#):=normal - -@<Cases for evaluation of the current term@>= -expr_none: if (l>=glue_val)and(o<>expr_none) then - begin t:=new_spec(f); delete_glue_ref(f); normalize_glue(t); - end - else t:=f; - -@ When a term |t| has been completed it is copied to, added to, or -subtracted from the expression |e|. - -@d expr_add_sub(#)==add_or_sub(#,r=expr_sub) -@d expr_a(#)==expr_add_sub(#,max_dimen) - -@<Evaluate the current expression@>= -begin s:=expr_none; -if r=expr_none then e:=t -else if l=int_val then e:=expr_add_sub(e,t,infinity) -else if l=dimen_val then e:=expr_a(e,t) -else @<Compute the sum or difference of two glue specs@>; -r:=o; -end - -@ The function |add_or_sub(x,y,max_answer,negative)| computes the sum -(for |negative=false|) or difference (for |negative=true|) of |x| and -|y|, provided the absolute value of the result does not exceed -|max_answer|. - -@<Declare subprocedures for |scan_expr|@>= -function add_or_sub(@!x,@!y,@!max_answer:integer;@!negative:boolean):integer; -var a:integer; {the answer} -begin if negative then negate(y); -if x>=0 then - if y<=max_answer-x then a:=x+y@+else num_error(a) -else if y>=-max_answer-x then a:=x+y@+else num_error(a); -add_or_sub:=a; -end; - -@ We know that |stretch_order(e)>normal| implies |stretch(e)<>0| and -|shrink_order(e)>normal| implies |shrink(e)<>0|. - -@<Compute the sum or diff...@>= -begin width(e):=expr_a(width(e),width(t)); -if stretch_order(e)=stretch_order(t) then - stretch(e):=expr_a(stretch(e),stretch(t)) -else if (stretch_order(e)<stretch_order(t))and(stretch(t)<>0) then - begin stretch(e):=stretch(t); stretch_order(e):=stretch_order(t); - end; -if shrink_order(e)=shrink_order(t) then - shrink(e):=expr_a(shrink(e),shrink(t)) -else if (shrink_order(e)<shrink_order(t))and(shrink(t)<>0) then - begin shrink(e):=shrink(t); shrink_order(e):=shrink_order(t); - end; -delete_glue_ref(t); normalize_glue(e); -end - -@ If a multiplication is followed by a division, the two operations are -combined into a `scaling' operation. Otherwise the term |t| is -multiplied by the factor |f|. - -@d expr_m(#)==#:=nx_plus_y(#,f,0) - -@<Cases for evaluation of the current term@>= -expr_mult: if o=expr_div then - begin n:=f; o:=expr_scale; - end - else if l=int_val then t:=mult_integers(t,f) - else if l=dimen_val then expr_m(t) - else begin expr_m(width(t)); expr_m(stretch(t)); expr_m(shrink(t)); - end; - -@ Here we divide the term |t| by the factor |f|. - -@d expr_d(#)==#:=quotient(#,f) - -@<Cases for evaluation of the current term@>= -expr_div: if l<glue_val then expr_d(t) - else begin expr_d(width(t)); expr_d(stretch(t)); expr_d(shrink(t)); - end; - -@ The function |quotient(n,d)| computes the rounded quotient -$q=\lfloor n/d+{1\over2}\rfloor$, when $n$ and $d$ are positive. - -@<Declare subprocedures for |scan_expr|@>= -function quotient(@!n,@!d:integer):integer; -var negative:boolean; {should the answer be negated?} -@!a:integer; {the answer} -begin if d=0 then num_error(a) -else begin if d>0 then negative:=false - else begin negate(d); negative:=true; - end; - if n<0 then - begin negate(n); negative:=not negative; - end; - a:=n div d; n:=n-a*d; d:=n-d; {avoid certain compiler optimizations!} - if d+n>=0 then incr(a); - if negative then negate(a); - end; -quotient:=a; -end; - -@ Here the term |t| is multiplied by the quotient $n/f$. - -@d expr_s(#)==#:=fract(#,n,f,max_dimen) - -@<Cases for evaluation of the current term@>= -expr_scale: if l=int_val then t:=fract(t,n,f,infinity) - else if l=dimen_val then expr_s(t) - else begin expr_s(width(t)); expr_s(stretch(t)); expr_s(shrink(t)); - end; - -@ Finally, the function |fract(x,n,d,max_answer)| computes the integer -$q=\lfloor xn/d+{1\over2}\rfloor$, when $x$, $n$, and $d$ are positive -and the result does not exceed |max_answer|. We can't use floating -point arithmetic since the routine must produce identical results in all -cases; and it would be too dangerous to multiply by~|n| and then divide -by~|d|, in separate operations, since overflow might well occur. Hence -this subroutine simulates double precision arithmetic, somewhat -analogous to \MF's |make_fraction| and |take_fraction| routines. - -@d too_big=88 {go here when the result is too big} - -@<Declare subprocedures for |scan_expr|@>= -function fract(@!x,@!n,@!d,@!max_answer:integer):integer; -label found, found1, too_big, done; -var negative:boolean; {should the answer be negated?} -@!a:integer; {the answer} -@!f:integer; {a proper fraction} -@!h:integer; {smallest integer such that |2*h>=d|} -@!r:integer; {intermediate remainder} -@!t:integer; {temp variable} -begin if d=0 then goto too_big; -a:=0; -if d>0 then negative:=false -else begin negate(d); negative:=true; - end; -if x<0 then - begin negate(x); negative:=not negative; - end -else if x=0 then goto done; -if n<0 then - begin negate(n); negative:=not negative; - end; -t:=n div d; -if t>max_answer div x then goto too_big; -a:=t*x; n:=n-t*d; -if n=0 then goto found; -t:=x div d; -if t>(max_answer-a) div n then goto too_big; -a:=a+t*n; x:=x-t*d; -if x=0 then goto found; -if x<n then - begin t:=x; x:=n; n:=t; - end; {now |0<n<=x<d|} -@<Compute \(f)$f=\lfloor xn/d+{1\over2}\rfloor$@>@; -if f>(max_answer-a) then goto too_big; -a:=a+f; -found: if negative then negate(a); -goto done; -too_big: num_error(a); -done: fract:=a; -end; - -@ The loop here preserves the following invariant relations -between |f|, |x|, |n|, and~|r|: -(i)~$f+\lfloor(xn+(r+d))/d\rfloor=\lfloor x_0n_0/d+{1\over2}\rfloor$; -(ii)~|-d<=r<0<n<=x<d|, where $x_0$, $n_0$ are the original values of~$x$ -and $n$. - -Notice that the computation specifies |(x-d)+x| instead of |(x+x)-d|, -because the latter could overflow. - -@<Compute \(f)$f=\lfloor xn/d+{1\over2}\rfloor$@>= -f:=0; r:=(d div 2)-d; h:=-r; -loop@+begin if odd(n) then - begin r:=r+x; - if r>=0 then - begin r:=r-d; incr(f); - end; - end; - n:=n div 2; - if n=0 then goto found1; - if x<h then x:=x+x - else begin t:=x-d; x:=t+x; f:=f+n; - if x<n then - begin if x=0 then goto found1; - t:=x; x:=n; n:=t; - end; - end; - end; -found1: - -@ The \.{\\gluestretch}, \.{\\glueshrink}, \.{\\gluestretchorder}, and -\.{\\glueshrinkorder} commands return the stretch and shrink components -and their orders of ``infinity'' of a glue specification. - -@d glue_stretch_order_code=eTeX_int+6 {code for \.{\\gluestretchorder}} -@d glue_shrink_order_code=eTeX_int+7 {code for \.{\\glueshrinkorder}} -@d glue_stretch_code=eTeX_dim+7 {code for \.{\\gluestretch}} -@d glue_shrink_code=eTeX_dim+8 {code for \.{\\glueshrink}} - -@<Generate all \eTeX...@>= -primitive("gluestretchorder",last_item,glue_stretch_order_code); -@!@:glue_stretch_order_}{\.{\\gluestretchorder} primitive@> -primitive("glueshrinkorder",last_item,glue_shrink_order_code); -@!@:glue_shrink_order_}{\.{\\glueshrinkorder} primitive@> -primitive("gluestretch",last_item,glue_stretch_code); -@!@:glue_stretch_}{\.{\\gluestretch} primitive@> -primitive("glueshrink",last_item,glue_shrink_code); -@!@:glue_shrink_}{\.{\\glueshrink} primitive@> - -@ @<Cases of |last_item| for |print_cmd_chr|@>= -glue_stretch_order_code: print_esc("gluestretchorder"); -glue_shrink_order_code: print_esc("glueshrinkorder"); -glue_stretch_code: print_esc("gluestretch"); -glue_shrink_code: print_esc("glueshrink"); - -@ @<Cases for fetching an integer value@>= -glue_stretch_order_code, glue_shrink_order_code: - begin scan_normal_glue; q:=cur_val; - if m=glue_stretch_order_code then cur_val:=stretch_order(q) - else cur_val:=shrink_order(q); - delete_glue_ref(q); - end; - -@ @<Cases for fetching a dimension value@>= -glue_stretch_code, glue_shrink_code: - begin scan_normal_glue; q:=cur_val; - if m=glue_stretch_code then cur_val:=stretch(q) - else cur_val:=shrink(q); - delete_glue_ref(q); - end; - -@ The \.{\\mutoglue} and \.{\\gluetomu} commands convert ``math'' glue -into normal glue and vice versa; they allow to manipulate math glue with -\.{\\gluestretch} etc. - -@d mu_to_glue_code=eTeX_glue {code for \.{\\mutoglue}} -@d glue_to_mu_code=eTeX_mu {code for \.{\\gluetomu}} - -@<Generate all \eTeX...@>= -primitive("mutoglue",last_item,mu_to_glue_code); -@!@:mu_to_glue_}{\.{\\mutoglue} primitive@> -primitive("gluetomu",last_item,glue_to_mu_code); -@!@:glue_to_mu_}{\.{\\gluetomu} primitive@> - -@ @<Cases of |last_item| for |print_cmd_chr|@>= -mu_to_glue_code: print_esc("mutoglue"); -glue_to_mu_code: print_esc("gluetomu"); - -@ @<Cases for fetching a glue value@>= -mu_to_glue_code: scan_mu_glue; - -@ @<Cases for fetching a mu value@>= -glue_to_mu_code: scan_normal_glue; - -@ \eTeX\ (in extended mode) supports 32768 (i.e., $2^{15}$) count, -dimen, skip, muskip, box, and token registers. As in \TeX\ the first -256 registers of each kind are realized as arrays in the table of -equivalents; the additional registers are realized as tree structures -built from variable-size nodes with individual registers existing only -when needed. Default values are used for nonexistent registers: zero -for count and dimen values, |zero_glue| for glue (skip and muskip) -values, void for boxes, and |null| for token lists (and current marks -discussed below). - -Similarly there are 32768 mark classes; the command \.{\\marks}|n| -creates a mark node for a given mark class |0<=n<=32767| (where -\.{\\marks0} is synonymous to \.{\\mark}). The page builder (actually -the |fire_up| routine) and the |vsplit| routine maintain the current -values of |top_mark|, |first_mark|, |bot_mark|, |split_first_mark|, and -|split_bot_mark| for each mark class. They are accessed as -\.{\\topmarks}|n| etc., and \.{\\topmarks0} is again synonymous to -\.{\\topmark}. As in \TeX\ the five current marks for mark class zero -are realized as |cur_mark| array. The additional current marks are -again realized as tree structure with individual mark classes existing -only when needed. - -@<Generate all \eTeX...@>= -primitive("marks",mark,marks_code); -@!@:marks_}{\.{\\marks} primitive@> -primitive("topmarks",top_bot_mark,top_mark_code+marks_code); -@!@:top_marks_}{\.{\\topmarks} primitive@> -primitive("firstmarks",top_bot_mark,first_mark_code+marks_code); -@!@:first_marks_}{\.{\\firstmarks} primitive@> -primitive("botmarks",top_bot_mark,bot_mark_code+marks_code); -@!@:bot_marks_}{\.{\\botmarks} primitive@> -primitive("splitfirstmarks",top_bot_mark,split_first_mark_code+marks_code); -@!@:split_first_marks_}{\.{\\splitfirstmarks} primitive@> -primitive("splitbotmarks",top_bot_mark,split_bot_mark_code+marks_code); -@!@:split_bot_marks_}{\.{\\splitbotmarks} primitive@> - -@ The |scan_register_num| procedure scans a register number that must -not exceed 255 in compatibility mode resp.\ 32767 in extended mode. - -@<Declare \eTeX\ procedures for ex...@>= -procedure@?scan_register_num; forward;@t\2@> - -@ @<Declare procedures that scan restricted classes of integers@>= -procedure scan_register_num; -begin scan_int; -if (cur_val<0)or(cur_val>max_reg_num) then - begin print_err("Bad register code"); -@.Bad register code@> - help2(max_reg_help_line)("I changed this one to zero."); - int_error(cur_val); cur_val:=0; - end; -end; - -@ @<Initialize variables for \eTeX\ comp...@>= -max_reg_num:=255; -max_reg_help_line:="A register number must be between 0 and 255."; - -@ @<Initialize variables for \eTeX\ ext...@>= -max_reg_num:=32767; -max_reg_help_line:="A register number must be between 0 and 32767."; - -@ @<Glob...@>= -@!max_reg_num: halfword; {largest allowed register number} -@!max_reg_help_line: str_number; {first line of help message} - -@ There are seven almost identical doubly linked trees, one for the -sparse array of the up to 32512 additional registers of each kind and -one for the sparse array of the up to 32767 additional mark classes. -The root of each such tree, if it exists, is an index node containing 16 -pointers to subtrees for 4096 consecutive array elements. Similar index -nodes are the starting points for all nonempty subtrees for 4096, 256, -and 16 consecutive array elements. These four levels of index nodes are -followed by a fifth level with nodes for the individual array elements. - -Each index node is nine words long. The pointers to the 16 possible -subtrees or are kept in the |info| and |link| fields of the last eight -words. (It would be both elegant and efficient to declare them as -array, unfortunately \PASCAL\ doesn't allow this.) - -The fields in the first word of each index node and in the nodes for the -array elements are closely related. The |link| field points to the next -lower index node and the |sa_index| field contains four bits (one -hexadecimal digit) of the register number or mark class. For the lowest -index node the |link| field is |null| and the |sa_index| field indicates -the type of quantity (|int_val|, |dimen_val|, |glue_val|, |mu_val|, -|box_val|, |tok_val|, or |mark_val|). The |sa_used| field in the index -nodes counts how many of the 16 pointers are non-null. - -The |sa_index| field in the nodes for array elements contains the four -bits plus 16 times the type. Therefore such a node represents a count -or dimen register if and only if |sa_index<dimen_val_limit|; it -represents a skip or muskip register if and only if -|dimen_val_limit<=sa_index<mu_val_limit|; it represents a box register -if and only if |mu_val_limit<=sa_index<box_val_limit|; it represents a -token list register if and only if -|box_val_limit<=sa_index<tok_val_limit|; finally it represents a mark -class if and only if |tok_val_limit<=sa_index|. - -The |new_index| procedure creates an index node (returned in |cur_ptr|) -having given contents of the |sa_index| and |link| fields. - -@d box_val==4 {the additional box registers} -@d mark_val=6 {the additional mark classes} -@# -@d dimen_val_limit=@"20 {$2^4\cdot(|dimen_val|+1)$} -@d mu_val_limit=@"40 {$2^4\cdot(|mu_val|+1)$} -@d box_val_limit=@"50 {$2^4\cdot(|box_val|+1)$} -@d tok_val_limit=@"60 {$2^4\cdot(|tok_val|+1)$} -@# -@d index_node_size=9 {size of an index node} -@d sa_index==type {a four-bit address or a type or both} -@d sa_used==subtype {count of non-null pointers} - -@<Declare \eTeX\ procedures for ex...@>= -procedure new_index(@!i:quarterword; @!q:pointer); -var k:small_number; {loop index} -begin cur_ptr:=get_node(index_node_size); sa_index(cur_ptr):=i; -sa_used(cur_ptr):=0; link(cur_ptr):=q; -for k:=1 to index_node_size-1 do {clear all 16 pointers} - mem[cur_ptr+k]:=sa_null; -end; - -@ The roots of the seven trees for the additional registers and mark -classes are kept in the |sa_root| array. The first six locations must -be dumped and undumped; the last one is also known as |sa_mark|. - -@d sa_mark==sa_root[mark_val] {root for mark classes} - -@<Glob...@>= -@!sa_root:array[int_val..mark_val] of pointer; {roots of sparse arrays} -@!cur_ptr:pointer; {value returned by |new_index| and |find_sa_element|} -@!sa_null:memory_word; {two |null| pointers} - -@ @<Set init...@>= -sa_mark:=null; sa_null.hh.lh:=null; sa_null.hh.rh:=null; - -@ @<Initialize table...@>= -for i:=int_val to tok_val do sa_root[i]:=null; - -@ Given a type |t| and a sixteen-bit number |n|, the |find_sa_element| -procedure returns (in |cur_ptr|) a pointer to the node for the -corresponding array element, or |null| when no such element exists. The -third parameter |w| is set |true| if the element must exist, e.g., -because it is about to be modified. The procedure has two main -branches: one follows the existing tree structure, the other (only used -when |w| is |true|) creates the missing nodes. - -We use macros to extract the four-bit pieces from a sixteen-bit register -number or mark class and to fetch or store one of the 16 pointers from -an index node. - -@d if_cur_ptr_is_null_then_return_or_goto(#)== {some tree element is missing} - begin if cur_ptr=null then - if w then goto #@+else return; - end -@# -@d hex_dig1(#)==# div 4096 {the fourth lowest hexadecimal digit} -@d hex_dig2(#)==(# div 256) mod 16 {the third lowest hexadecimal digit} -@d hex_dig3(#)==(# div 16) mod 16 {the second lowest hexadecimal digit} -@d hex_dig4(#)==# mod 16 {the lowest hexadecimal digit} -@# -@d get_sa_ptr==if odd(i) then cur_ptr:=link(q+(i div 2)+1) - else cur_ptr:=info(q+(i div 2)+1) - {set |cur_ptr| to the pointer indexed by |i| from index node |q|} -@d put_sa_ptr(#)==if odd(i) then link(q+(i div 2)+1):=# - else info(q+(i div 2)+1):=# - {store the pointer indexed by |i| in index node |q|} -@d add_sa_ptr==begin put_sa_ptr(cur_ptr); incr(sa_used(q)); - end {add |cur_ptr| as the pointer indexed by |i| in index node |q|} -@d delete_sa_ptr==begin put_sa_ptr(null); decr(sa_used(q)); - end {delete the pointer indexed by |i| in index node |q|} - -@<Declare \eTeX\ procedures for ex...@>= -procedure find_sa_element(@!t:small_number;@!n:halfword;@!w:boolean); - {sets |cur_val| to sparse array element location or |null|} -label not_found,not_found1,not_found2,not_found3,not_found4,exit; -var q:pointer; {for list manipulations} -@!i:small_number; {a four bit index} -begin cur_ptr:=sa_root[t]; -if_cur_ptr_is_null_then_return_or_goto(not_found);@/ -q:=cur_ptr; i:=hex_dig1(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found1);@/ -q:=cur_ptr; i:=hex_dig2(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found2);@/ -q:=cur_ptr; i:=hex_dig3(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found3);@/ -q:=cur_ptr; i:=hex_dig4(n); get_sa_ptr; -if (cur_ptr=null)and w then goto not_found4; -return; -not_found: new_index(t,null); {create first level index node} -sa_root[t]:=cur_ptr; q:=cur_ptr; i:=hex_dig1(n); -not_found1: new_index(i,q); {create second level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig2(n); -not_found2: new_index(i,q); {create third level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig3(n); -not_found3: new_index(i,q); {create fourth level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig4(n); -not_found4: @<Create a new array element of type |t| with index |i|@>; -link(cur_ptr):=q; add_sa_ptr; -exit:end; - -@ The array elements for registers are subject to grouping and have an -|sa_lev| field (quite analogous to |eq_level|) instead of |sa_used|. -Since saved values as well as shorthand definitions (created by e.g., -\.{\\countdef}) refer to the location of the respective array element, -we need a reference count that is kept in the |sa_ref| field. An array -element can be deleted (together with all references to it) when its -|sa_ref| value is |null| and its value is the default value. -@^reference counts@> - -Skip, muskip, box, and token registers use two word nodes, their values -are stored in the |sa_ptr| field. -Count and dimen registers use three word nodes, their -values are stored in the |sa_int| resp.\ |sa_dim| field in the third -word; the |sa_ptr| field is used under the name |sa_num| to store -the register number. Mark classes use four word nodes. The last three -words contain the five types of current marks - -@d sa_lev==sa_used {grouping level for the current value} -@d pointer_node_size=2 {size of an element with a pointer value} -@d sa_type(#)==(sa_index(#) div 16) {type part of combined type/index} -@d sa_ref(#)==info(#+1) {reference count of a sparse array element} -@d sa_ptr(#)==link(#+1) {a pointer value} -@# -@d word_node_size=3 {size of an element with a word value} -@d sa_num==sa_ptr {the register number} -@d sa_int(#)==mem[#+2].int {an integer} -@d sa_dim(#)==mem[#+2].sc {a dimension (a somewhat esotheric distinction)} -@# -@d mark_class_node_size=4 {size of an element for a mark class} -@# -@d fetch_box(#)== {fetch |box(cur_val)|} - if cur_val<256 then #:=box(cur_val) - else begin find_sa_element(box_val,cur_val,false); - if cur_ptr=null then #:=null@+else #:=sa_ptr(cur_ptr); - end - -@<Create a new array element...@>= -if t=mark_val then {a mark class} - begin cur_ptr:=get_node(mark_class_node_size); - mem[cur_ptr+1]:=sa_null; mem[cur_ptr+2]:=sa_null; mem[cur_ptr+3]:=sa_null; - end -else begin if t<=dimen_val then {a count or dimen register} - begin cur_ptr:=get_node(word_node_size); sa_int(cur_ptr):=0; - sa_num(cur_ptr):=n; - end - else begin cur_ptr:=get_node(pointer_node_size); - if t<=mu_val then {a skip or muskip register} - begin sa_ptr(cur_ptr):=zero_glue; add_glue_ref(zero_glue); - end - else sa_ptr(cur_ptr):=null; {a box or token list register} - end; - sa_ref(cur_ptr):=null; {all registers have a reference count} - end; -sa_index(cur_ptr):=16*t+i; sa_lev(cur_ptr):=level_one - -@ The |delete_sa_ref| procedure is called when a pointer to an array -element representing a register is being removed; this means that the -reference count should be decreased by one. If the reduced reference -count is |null| and the register has been (globally) assigned its -default value the array element should disappear, possibly together with -some index nodes. This procedure will never be used for mark class -nodes. -@^reference counts@> - -@d add_sa_ref(#)==incr(sa_ref(#)) {increase reference count} -@# -@d change_box(#)== {change |box(cur_val)|, the |eq_level| stays the same} - if cur_val<256 then box(cur_val):=#@+else set_sa_box(#) -@# -@d set_sa_box(#)==begin find_sa_element(box_val,cur_val,false); - if cur_ptr<>null then - begin sa_ptr(cur_ptr):=#; add_sa_ref(cur_ptr); delete_sa_ref(cur_ptr); - end; - end - -@<Declare \eTeX\ procedures for tr...@>= -procedure delete_sa_ref(@!q:pointer); {reduce reference count} -label exit; -var p:pointer; {for list manipulations} -@!i:small_number; {a four bit index} -@!s:small_number; {size of a node} -begin decr(sa_ref(q)); -if sa_ref(q)<>null then return; -if sa_index(q)<dimen_val_limit then - if sa_int(q)=0 then s:=word_node_size - else return -else begin if sa_index(q)<mu_val_limit then - if sa_ptr(q)=zero_glue then delete_glue_ref(zero_glue) - else return - else if sa_ptr(q)<>null then return; - s:=pointer_node_size; - end; -repeat i:=hex_dig4(sa_index(q)); p:=q; q:=link(p); free_node(p,s); -if q=null then {the whole tree has been freed} - begin sa_root[i]:=null; return; - end; -delete_sa_ptr; s:=index_node_size; {node |q| is an index node} -until sa_used(q)>0; -exit:end; - -@ The |print_sa_num| procedure prints the register number corresponding -to an array element. - -@<Basic print...@>= -procedure print_sa_num(@!q:pointer); {print register number} -var @!n:halfword; {the register number} -begin if sa_index(q)<dimen_val_limit then n:=sa_num(q) {the easy case} -else begin n:=hex_dig4(sa_index(q)); q:=link(q); n:=n+16*sa_index(q); - q:=link(q); n:=n+256*(sa_index(q)+16*sa_index(link(q))); - end; -print_int(n); -end; - -@ Here is a procedure that displays the contents of an array element -symbolically. It is used under similar circumstances as is -|restore_trace| (together with |show_eqtb|) for the quantities kept in -the |eqtb| array. - -@<Declare \eTeX\ procedures for tr...@>= -@!stat procedure show_sa(@!p:pointer;@!s:str_number); -var t:small_number; {the type of element} -begin begin_diagnostic; print_char("{"); print(s); print_char(" "); -if p=null then print_char("?") {this can't happen} -else begin t:=sa_type(p); - if t<box_val then print_cmd_chr(register,p) - else if t=box_val then - begin print_esc("box"); print_sa_num(p); - end - else if t=tok_val then print_cmd_chr(toks_register,p) - else print_char("?"); {this can't happen either} - print_char("="); - if t=int_val then print_int(sa_int(p)) - else if t=dimen_val then - begin print_scaled(sa_dim(p)); print("pt"); - end - else begin p:=sa_ptr(p); - if t=glue_val then print_spec(p,"pt") - else if t=mu_val then print_spec(p,"mu") - else if t=box_val then - if p=null then print("void") - else begin depth_threshold:=0; breadth_max:=1; show_node_list(p); - end - else if t=tok_val then - begin if p<>null then show_token_list(link(p),null,32); - end - else print_char("?"); {this can't happen either} - end; - end; -print_char("}"); end_diagnostic(false); -end; -tats - -@ Here we compute the pointer to the current mark of type |t| and mark -class |cur_val|. - -@<Compute the mark pointer...@>= -begin find_sa_element(mark_val,cur_val,false); -if cur_ptr<>null then - if odd(t) then cur_ptr:=link(cur_ptr+(t div 2)+1) - else cur_ptr:=info(cur_ptr+(t div 2)+1); -end - -@ The current marks for all mark classes are maintained by the |vsplit| -and |fire_up| routines and are finally destroyed (for \.{INITEX} only) -@.INITEX@> -by the |final_cleanup| routine. Apart from updating the current marks -when mark nodes are encountered, these routines perform certain actions -on all existing mark classes. The recursive |do_marks| procedure walks -through the whole tree or a subtree of existing mark class nodes and -preforms certain actions indicted by its first parameter |a|, the action -code. The second parameter |l| indicates the level of recursion (at -most four); the third parameter points to a nonempty tree or subtree. -The result is |true| if the complete tree or subtree has been deleted. - -@d vsplit_init==0 {action code for |vsplit| initialization} -@d fire_up_init==1 {action code for |fire_up| initialization} -@d fire_up_done==2 {action code for |fire_up| completion} -@d destroy_marks==3 {action code for |final_cleanup|} -@# -@d sa_top_mark(#)==info(#+1) {\.{\\topmarks}|n|} -@d sa_first_mark(#)==link(#+1) {\.{\\firstmarks}|n|} -@d sa_bot_mark(#)==info(#+2) {\.{\\botmarks}|n|} -@d sa_split_first_mark(#)==link(#+2) {\.{\\splitfirstmarks}|n|} -@d sa_split_bot_mark(#)==info(#+3) {\.{\\splitbotmarks}|n|} - -@<Declare the function called |do_marks|@>= -function do_marks(@!a,@!l:small_number;@!q:pointer):boolean; -var i:small_number; {a four bit index} -begin if l<4 then {|q| is an index node} - begin for i:=0 to 15 do - begin get_sa_ptr; - if cur_ptr<>null then if do_marks(a,l+1,cur_ptr) then delete_sa_ptr; - end; - if sa_used(q)=0 then - begin free_node(q,index_node_size); q:=null; - end; - end -else {|q| is the node for a mark class} - begin case a of - @<Cases for |do_marks|@>@; - end; {there are no other cases} - if sa_bot_mark(q)=null then if sa_split_bot_mark(q)=null then - begin free_node(q,mark_class_node_size); q:=null; - end; - end; -do_marks:=(q=null); -end; - -@ At the start of the |vsplit| routine the existing |split_fist_mark| -and |split_bot_mark| are discarded. - -@<Cases for |do_marks|@>= -vsplit_init: if sa_split_first_mark(q)<>null then - begin delete_token_ref(sa_split_first_mark(q)); sa_split_first_mark(q):=null; - delete_token_ref(sa_split_bot_mark(q)); sa_split_bot_mark(q):=null; - end; - -@ We use again the fact that |split_first_mark=null| if and only if -|split_bot_mark=null|. - -@<Update the current marks for |vsplit|@>= -begin find_sa_element(mark_val,mark_class(p),true); -if sa_split_first_mark(cur_ptr)=null then - begin sa_split_first_mark(cur_ptr):=mark_ptr(p); - add_token_ref(mark_ptr(p)); - end -else delete_token_ref(sa_split_bot_mark(cur_ptr)); -sa_split_bot_mark(cur_ptr):=mark_ptr(p); -add_token_ref(mark_ptr(p)); -end - -@ At the start of the |fire_up| routine the old |top_mark| and -|first_mark| are discarded, whereas the old |bot_mark| becomes the new -|top_mark|. An empty new |top_mark| token list is, however, discarded -as well in order that mark class nodes can eventually be released. We -use again the fact that |bot_mark<>null| implies |first_mark<>null|; it -also knows that |bot_mark=null| implies |top_mark=first_mark=null|. - -@<Cases for |do_marks|@>= -fire_up_init: if sa_bot_mark(q)<>null then - begin if sa_top_mark(q)<>null then delete_token_ref(sa_top_mark(q)); - delete_token_ref(sa_first_mark(q)); sa_first_mark(q):=null; - if link(sa_bot_mark(q))=null then {an empty token list} - begin delete_token_ref(sa_bot_mark(q)); sa_bot_mark(q):=null; - end - else add_token_ref(sa_bot_mark(q)); - sa_top_mark(q):=sa_bot_mark(q); - end; - -@ @<Cases for |do_marks|@>= -fire_up_done: if (sa_top_mark(q)<>null)and(sa_first_mark(q)=null) then - begin sa_first_mark(q):=sa_top_mark(q); add_token_ref(sa_top_mark(q)); - end; - -@ @<Update the current marks for |fire_up|@>= -begin find_sa_element(mark_val,mark_class(p),true); -if sa_first_mark(cur_ptr)=null then - begin sa_first_mark(cur_ptr):=mark_ptr(p); - add_token_ref(mark_ptr(p)); - end; -if sa_bot_mark(cur_ptr)<>null then delete_token_ref(sa_bot_mark(cur_ptr)); -sa_bot_mark(cur_ptr):=mark_ptr(p); add_token_ref(mark_ptr(p)); -end - -@ Here we use the fact that the five current mark pointers in a mark -class node occupy the same locations as the the first five pointers of -an index node. For systems using a run-time switch to distinguish -between \.{VIRTEX} and \.{INITEX}, the codewords `$|init|\ldots|tini|$' -surrounding the following piece of code should be removed. -@.INITEX@> -@^system dependencies@> - -@<Cases for |do_marks|@>= -@!init destroy_marks: for i:=top_mark_code to split_bot_mark_code do - begin get_sa_ptr; - if cur_ptr<>null then - begin delete_token_ref(cur_ptr); put_sa_ptr(null); - end; - end; -tini - -@ The command code |register| is used for `\.{\\count}', `\.{\\dimen}', -etc., as well as for references to sparse array elements defined by -`\.{\\countdef}', etc. - -@<Cases of |register| for |print_cmd_chr|@>= -begin if (chr_code<mem_bot)or(chr_code>lo_mem_stat_max) then - cmd:=sa_type(chr_code) -else begin cmd:=chr_code-mem_bot; chr_code:=null; - end; -if cmd=int_val then print_esc("count") -else if cmd=dimen_val then print_esc("dimen") -else if cmd=glue_val then print_esc("skip") -else print_esc("muskip"); -if chr_code<>null then print_sa_num(chr_code); -end - -@ Similarly the command code |toks_register| is used for `\.{\\toks}' as -well as for references to sparse array elements defined by -`\.{\\toksdef}'. - -@<Cases of |toks_register| for |print_cmd_chr|@>= -begin print_esc("toks"); -if chr_code<>mem_bot then print_sa_num(chr_code); -end - -@ When a shorthand definition for an element of one of the sparse arrays -is destroyed, we must reduce the reference count. - -@<Cases for |eq_destroy|@>= -toks_register,register: - if (equiv_field(w)<mem_bot)or(equiv_field(w)>lo_mem_stat_max) then - delete_sa_ref(equiv_field(w)); - -@ The task to maintain (change, save, and restore) register values is -essentially the same when the register is realized as sparse array -element or entry in |eqtb|. The global variable |sa_chain| is the head -of a linked list of entries saved at the topmost level |sa_level|; the -lists for lowel levels are kept in special save stack entries. - -@<Glob...@>= -@!sa_chain: pointer; {chain of saved sparse array entries} -@!sa_level: quarterword; {group level for |sa_chain|} - -@ @<Set init...@>= -sa_chain:=null; sa_level:=level_zero; - -@ The individual saved items are kept in pointer or word nodes similar -to those used for the array elements: a word node with value zero is, -however, saved as pointer node with the otherwise impossible |sa_index| -value |tok_val_limit|. - -@d sa_loc==sa_ref {location of saved item} - -@<Declare \eTeX\ procedures for tr...@>= -procedure sa_save(@!p:pointer); {saves value of |p|} -var q:pointer; {the new save node} -@!i:quarterword; {index field of node} -begin if cur_level<>sa_level then - begin check_full_save_stack; save_type(save_ptr):=restore_sa; - save_level(save_ptr):=sa_level; save_index(save_ptr):=sa_chain; - incr(save_ptr); sa_chain:=null; sa_level:=cur_level; - end; -i:=sa_index(p); -if i<dimen_val_limit then - begin if sa_int(p)=0 then - begin q:=get_node(pointer_node_size); i:=tok_val_limit; - end - else begin q:=get_node(word_node_size); sa_int(q):=sa_int(p); - end; - sa_ptr(q):=null; - end -else begin q:=get_node(pointer_node_size); sa_ptr(q):=sa_ptr(p); - end; -sa_loc(q):=p; sa_index(q):=i; sa_lev(q):=sa_lev(p); -link(q):=sa_chain; sa_chain:=q; add_sa_ref(p); -end; - -@ @<Declare \eTeX\ procedures for tr...@>= -procedure sa_destroy(@!p:pointer); {destroy value of |p|} -begin if sa_index(p)<mu_val_limit then delete_glue_ref(sa_ptr(p)) -else if sa_ptr(p)<>null then - if sa_index(p)<box_val_limit then flush_node_list(sa_ptr(p)) - else delete_token_ref(sa_ptr(p)); -end; - -@ The procedure |sa_def| assigns a new value to sparse array elements, -and saves the former value if appropriate. This procedure is used only -for skip, muskip, box, and token list registers. The counterpart of -|sa_def| for count and dimen registers is called |sa_w_def|. - -@d sa_define(#)==if e then - if global then gsa_def(#)@+else sa_def(#) - else define -@# -@d sa_def_box== {assign |cur_box| to |box(cur_val)|} - begin find_sa_element(box_val,cur_val,true); - if global then gsa_def(cur_ptr,cur_box)@+else sa_def(cur_ptr,cur_box); - end -@# -@d sa_word_define(#)==if e then - if global then gsa_w_def(#)@+else sa_w_def(#) - else word_define(#) - -@<Declare \eTeX\ procedures for tr...@>= -procedure sa_def(@!p:pointer;@!e:halfword); - {new data for sparse array elements} -begin add_sa_ref(p); -if sa_ptr(p)=e then - begin @!stat if tracing_assigns>0 then show_sa(p,"reassigning");@+tats@;@/ - sa_destroy(p); - end -else begin @!stat if tracing_assigns>0 then show_sa(p,"changing");@+tats@;@/ - if sa_lev(p)=cur_level then sa_destroy(p)@+else sa_save(p); - sa_lev(p):=cur_level; sa_ptr(p):=e; - @!stat if tracing_assigns>0 then show_sa(p,"into");@+tats@;@/ - end; -delete_sa_ref(p); -end; -@# -procedure sa_w_def(@!p:pointer;@!w:integer); -begin add_sa_ref(p); -if sa_int(p)=w then - begin @!stat if tracing_assigns>0 then show_sa(p,"reassigning");@+tats@;@/ - end -else begin @!stat if tracing_assigns>0 then show_sa(p,"changing");@+tats@;@/ - if sa_lev(p)<>cur_level then sa_save(p); - sa_lev(p):=cur_level; sa_int(p):=w; - @!stat if tracing_assigns>0 then show_sa(p,"into");@+tats@;@/ - end; -delete_sa_ref(p); -end; - -@ The |sa_def| and |sa_w_def| routines take care of local definitions. -@^global definitions@> -Global definitions are done in almost the same way, but there is no need -to save old values, and the new value is associated with |level_one|. - -@<Declare \eTeX\ procedures for tr...@>= -procedure gsa_def(@!p:pointer;@!e:halfword); {global |sa_def|} -begin add_sa_ref(p); -@!stat if tracing_assigns>0 then show_sa(p,"globally changing");@+tats@;@/ -sa_destroy(p); sa_lev(p):=level_one; sa_ptr(p):=e; -@!stat if tracing_assigns>0 then show_sa(p,"into");@+tats@;@/ -delete_sa_ref(p); -end; -@# -procedure gsa_w_def(@!p:pointer;@!w:integer); {global |sa_w_def|} -begin add_sa_ref(p); -@!stat if tracing_assigns>0 then show_sa(p,"globally changing");@+tats@;@/ -sa_lev(p):=level_one; sa_int(p):=w; -@!stat if tracing_assigns>0 then show_sa(p,"into");@+tats@;@/ -delete_sa_ref(p); -end; - -@ The |sa_restore| procedure restores the sparse array entries pointed -at by |sa_chain| - -@<Declare \eTeX\ procedures for tr...@>= -procedure sa_restore; -var p:pointer; {sparse array element} -begin repeat p:=sa_loc(sa_chain); -if sa_lev(p)=level_one then - begin if sa_index(p)>=dimen_val_limit then sa_destroy(sa_chain); - @!stat if tracing_restores>0 then show_sa(p,"retaining");@+tats@;@/ - end -else begin if sa_index(p)<dimen_val_limit then - if sa_index(sa_chain)<dimen_val_limit then sa_int(p):=sa_int(sa_chain) - else sa_int(p):=0 - else begin sa_destroy(p); sa_ptr(p):=sa_ptr(sa_chain); - end; - sa_lev(p):=sa_lev(sa_chain); - @!stat if tracing_restores>0 then show_sa(p,"restoring");@+tats@;@/ - end; -delete_sa_ref(p); -p:=sa_chain; sa_chain:=link(p); -if sa_index(p)<dimen_val_limit then free_node(p,word_node_size) -else free_node(p,pointer_node_size); -until sa_chain=null; -end; - -@ When the value of |last_line_fit| is positive, the last line of a -(partial) paragraph is treated in a special way and we need additional -fields in the active nodes. - -@d active_node_size_extended=5 {number of words in extended active nodes} -@d active_short(#)==mem[#+3].sc {|shortfall| of this line} -@d active_glue(#)==mem[#+4].sc {corresponding glue stretch or shrink} - -@<Glob...@>= -@!last_line_fill:pointer; {the |par_fill_skip| glue node of the new paragraph} -@!do_last_line_fit:boolean; {special algorithm for last line of paragraph?} -@!active_node_size:small_number; {number of words in active nodes} -@!fill_width:array[0..2] of scaled; {infinite stretch components of - |par_fill_skip|} -@!best_pl_short:array[very_loose_fit..tight_fit] of scaled; {|shortfall| - corresponding to |minimal_demerits|} -@!best_pl_glue:array[very_loose_fit..tight_fit] of scaled; {corresponding - glue stretch or shrink} - -@ The new algorithm for the last line requires that the stretchability of -|par_fill_skip| is infinite and the stretchability of |left_skip| plus -|right_skip| is finite. - -@<Check for special...@>= -do_last_line_fit:=false; active_node_size:=active_node_size_normal; - {just in case} -if last_line_fit>0 then - begin q:=glue_ptr(last_line_fill); - if (stretch(q)>0)and(stretch_order(q)>normal) then - if (background[3]=0)and(background[4]=0)and(background[5]=0) then - begin do_last_line_fit:=true; - active_node_size:=active_node_size_extended; - fill_width[0]:=0; fill_width[1]:=0; fill_width[2]:=0; - fill_width[stretch_order(q)-1]:=stretch(q); - end; - end - -@ @<Other local variables for |try_break|@>= -@!g:scaled; {glue stretch or shrink of test line, adjustment for last line} - -@ Here we initialize the additional fields of the first active node -representing the beginning of the paragraph. - -@<Initialize additional fields of the first active node@>= -begin active_short(q):=0; active_glue(q):=0; -end - -@ Here we compute the adjustment |g| and badness |b| for a line from |r| -to the end of the paragraph. When any of the criteria for adjustment is -violated we fall through to the normal algorithm. - -The last line must be too short, and have infinite stretch entirely due -to |par_fill_skip|. - -@<Perform computations for last line and |goto found|@>= -begin if (active_short(r)=0)or(active_glue(r)<=0) then goto not_found; - {previous line was neither stretched nor shrunk, or was infinitely bad} -if (cur_active_width[3]<>fill_width[0])or@| - (cur_active_width[4]<>fill_width[1])or@| - (cur_active_width[5]<>fill_width[2]) then goto not_found; - {infinite stretch of this line not entirely due to |par_fill_skip|} -if active_short(r)>0 then g:=cur_active_width[2] -else g:=cur_active_width[6]; -if g<=0 then goto not_found; {no finite stretch resp.\ no shrink} -arith_error:=false; g:=fract(g,active_short(r),active_glue(r),max_dimen); -if last_line_fit<1000 then g:=fract(g,last_line_fit,1000,max_dimen); -if arith_error then - if active_short(r)>0 then g:=max_dimen@+else g:=-max_dimen; -if g>0 then - @<Set the value of |b| to the badness of the last line for stretching, - compute the corresponding |fit_class|, and |goto found|@> -else if g<0 then - @<Set the value of |b| to the badness of the last line for shrinking, - compute the corresponding |fit_class|, and |goto found|@>; -not_found:end - -@ These badness computations are rather similar to those of the standard -algorithm, with the adjustment amount |g| replacing the |shortfall|. - -@<Set the value of |b| to the badness of the last line for str...@>= -begin if g>shortfall then g:=shortfall; -if g>7230584 then if cur_active_width[2]<1663497 then - begin b:=inf_bad; fit_class:=very_loose_fit; goto found; - end; -b:=badness(g,cur_active_width[2]); -if b>12 then - if b>99 then fit_class:=very_loose_fit - else fit_class:=loose_fit -else fit_class:=decent_fit; -goto found; -end - -@ @<Set the value of |b| to the badness of the last line for shr...@>= -begin if -g>cur_active_width[6] then g:=-cur_active_width[6]; -b:=badness(-g,cur_active_width[6]); -if b>12 then fit_class:=tight_fit@+else fit_class:=decent_fit; -goto found; -end - -@ Vanishing values of |shortfall| and |g| indicate that the last line is -not adjusted. - -@<Adjust \(t)the additional data for last line@>= -begin if cur_p=null then shortfall:=0; -if shortfall>0 then g:=cur_active_width[2] -else if shortfall<0 then g:=cur_active_width[6] -else g:=0; -end - -@ For each feasible break we record the shortfall and glue stretch or -shrink (or adjustment). - -@<Store \(a)additional data for this feasible break@>= -begin best_pl_short[fit_class]:=shortfall; best_pl_glue[fit_class]:=g; -end - -@ Here we save these data in the active node representing a potential -line break. - -@<Store \(a)additional data in the new active node@>= -begin active_short(q):=best_pl_short[fit_class]; -active_glue(q):=best_pl_glue[fit_class]; -end - -@ @<Print additional data in the new active node@>= -begin print(" s="); print_scaled(active_short(q)); -if cur_p=null then print(" a=")@+else print(" g="); -print_scaled(active_glue(q)); -end - -@ Here we either reset |do_last_line_fit| or adjust the |par_fill_skip| -glue. - -@<Adjust \(t)the final line of the paragraph@>= -if active_short(best_bet)=0 then do_last_line_fit:=false -else begin q:=new_spec(glue_ptr(last_line_fill)); - delete_glue_ref(glue_ptr(last_line_fill)); - width(q):=width(q)+active_short(best_bet)-active_glue(best_bet); - stretch(q):=0; glue_ptr(last_line_fill):=q; - end - -@ When reading \.{\\patterns} while \.{\\savinghyphcodes} is positive -the current |lc_code| values are stored together with the hyphenation -patterns for the current language. They will later be used instead of -the |lc_code| values for hyphenation purposes. - -The |lc_code| values are stored in the linked trie analogous to patterns -$p_1$ of length~1, with |hyph_root=trie_r[0]| replacing |trie_root| and -|lc_code(p_1)| replacing the |trie_op| code. This allows to compress -and pack them together with the patterns with minimal changes to the -existing code. - -@d hyph_root==trie_r[0] {root of the linked trie for |hyph_codes|} - -@<Initialize table entries...@>= -hyph_root:=0; hyph_start:=0; - -@ @<Store hyphenation codes for current language@>= -begin c:=cur_lang; first_child:=false; p:=0; -repeat q:=p; p:=trie_r[q]; -until (p=0)or(c<=so(trie_c[p])); -if (p=0)or(c<so(trie_c[p])) then - @<Insert a new trie node between |q| and |p|, and - make |p| point to it@>; -q:=p; {now node |q| represents |cur_lang|} -@<Store all current |lc_code| values@>; -end - -@ We store all nonzero |lc_code| values, overwriting any previously -stored values (and possibly wasting a few trie nodes that were used -previously and are not needed now). We always store at least one -|lc_code| value such that |hyph_index| (defined below) will not be zero. - -@<Store all current |lc_code| values@>= -p:=trie_l[q]; first_child:=true; -for c:=0 to 255 do - if (lc_code(c)>0)or((c=255)and first_child) then - begin if p=0 then - @<Insert a new trie node between |q| and |p|, and - make |p| point to it@> - else trie_c[p]:=si(c); - trie_o[p]:=qi(lc_code(c)); - q:=p; p:=trie_r[q]; first_child:=false; - end; -if first_child then trie_l[q]:=0@+else trie_r[q]:=0 - -@ We must avoid to ``take'' location~1, in order to distinguish between -|lc_code| values and patterns. - -@<Pack all stored |hyph_codes|@>= -begin if trie_root=0 then for p:=0 to 255 do trie_min[p]:=p+2; -first_fit(hyph_root); trie_pack(hyph_root); -hyph_start:=trie_ref[hyph_root]; -end - -@ The global variable |hyph_index| will point to the hyphenation codes -for the current language. - -@d set_hyph_index== {set |hyph_index| for current language} - if trie_char(hyph_start+cur_lang)<>qi(cur_lang) - then hyph_index:=0 {no hyphenation codes for |cur_lang|} - else hyph_index:=trie_link(hyph_start+cur_lang) -@# -@d set_lc_code(#)== {set |hc[0]| to hyphenation or lc code for |#|} - if hyph_index=0 then hc[0]:=lc_code(#) - else if trie_char(hyph_index+#)<>qi(#) then hc[0]:=0 - else hc[0]:=qo(trie_op(hyph_index+#)) - -@<Glob...@>= -@!hyph_start:trie_pointer; {root of the packed trie for |hyph_codes|} -@!hyph_index:trie_pointer; {pointer to hyphenation codes for |cur_lang|} - -@ When |saving_vdiscards| is positive then the glue, kern, and penalty -nodes removed by the page builder or by \.{\\vsplit} from the top of a -vertical list are saved in special lists instead of being discarded. - -@d tail_page_disc==disc_ptr[copy_code] {last item removed by page builder} -@d page_disc==disc_ptr[last_box_code] {first item removed by page builder} -@d split_disc==disc_ptr[vsplit_code] {first item removed by \.{\\vsplit}} - -@<Glob...@>= -@!disc_ptr:array[copy_code..vsplit_code] of pointer; {list pointers} - -@ @<Set init...@>= -page_disc:=null; split_disc:=null; - -@ The \.{\\pagediscards} and \.{\\splitdiscards} commands share the -command code |un_vbox| with \.{\\unvbox} and \.{\\unvcopy}, they are -distinguished by their |chr_code| values |last_box_code| and -|vsplit_code|. These |chr_code| values are larger than |box_code| and -|copy_code|. - -@<Generate all \eTeX...@>= -primitive("pagediscards",un_vbox,last_box_code);@/ -@!@:page_discards_}{\.{\\pagediscards} primitive@> -primitive("splitdiscards",un_vbox,vsplit_code);@/ -@!@:split_discards_}{\.{\\splitdiscards} primitive@> - -@ @<Cases of |un_vbox| for |print_cmd_chr|@>= -else if chr_code=last_box_code then print_esc("pagediscards") -else if chr_code=vsplit_code then print_esc("splitdiscards") - -@ @<Handle saved items and |goto done|@>= -begin link(tail):=disc_ptr[cur_chr]; disc_ptr[cur_chr]:=null; -goto done; -end - -@ The \.{\\interlinepenalties}, \.{\\clubpenalties}, \.{\\widowpenalties}, -and \.{\\displaywidowpenalties} commands allow to define arrays of -penalty values to be used instead of the corresponding single values. - -@d inter_line_penalties_ptr==equiv(inter_line_penalties_loc) -@d club_penalties_ptr==equiv(club_penalties_loc) -@d widow_penalties_ptr==equiv(widow_penalties_loc) -@d display_widow_penalties_ptr==equiv(display_widow_penalties_loc) - -@<Generate all \eTeX...@>= -primitive("interlinepenalties",set_shape,inter_line_penalties_loc);@/ -@!@:inter_line_penalties_}{\.{\\interlinepenalties} primitive@> -primitive("clubpenalties",set_shape,club_penalties_loc);@/ -@!@:club_penalties_}{\.{\\clubpenalties} primitive@> -primitive("widowpenalties",set_shape,widow_penalties_loc);@/ -@!@:widow_penalties_}{\.{\\widowpenalties} primitive@> -primitive("displaywidowpenalties",set_shape,display_widow_penalties_loc);@/ -@!@:display_widow_penalties_}{\.{\\displaywidowpenalties} primitive@> - -@ @<Cases of |set_shape| for |print_cmd_chr|@>= -inter_line_penalties_loc: print_esc("interlinepenalties"); -club_penalties_loc: print_esc("clubpenalties"); -widow_penalties_loc: print_esc("widowpenalties"); -display_widow_penalties_loc: print_esc("displaywidowpenalties"); - -@ @<Fetch a penalties array element@>= -begin scan_int; -if (equiv(m)=null)or(cur_val<0) then cur_val:=0 -else begin if cur_val>penalty(equiv(m)) then cur_val:=penalty(equiv(m)); - cur_val:=penalty(equiv(m)+cur_val); - end; -end - -@* \[54] System-dependent changes. -@z -%--------------------------------------- diff --git a/Build/source/texk/web2c/etexdir/etex_gen.tex b/Build/source/texk/web2c/etexdir/etex_gen.tex deleted file mode 100644 index c9dd037c4e2..00000000000 --- a/Build/source/texk/web2c/etexdir/etex_gen.tex +++ /dev/null @@ -1,286 +0,0 @@ -% etex_gen.tex --- How to generate e-TeX --- last modified 06 Mar 1998 - -\font\eighttt= cmtt8 -\font\eightrm= cmr8 -\font\rtitlefont= cmr7 scaled\magstep5 -\font\ititlefont= cmmi7 scaled\magstep5 -\def\titlefont{\rtitlefont \textfont1=\ititlefont} -\def\eTeX{$\varepsilon$-\TeX} -\def\NTS{NTS} -\let\mc=\eightrm -\rm -\let\mainfont=\tenrm - -\def\.#1{\hbox{\tt#1}} -\def\\#1{\hbox{\it#1\/\hskip.05em}} % italic type for identifiers - -\parskip 2pt plus 1pt -\baselineskip 12pt plus .25pt - -\output{\shipout\box255\global\advance\pageno by 1} % for the title page only -\null -\vfill -\centerline{\titlefont How to generate \eTeX} -\vskip 6pt -\centerline{({\sl Version 2, March 1998\/})} -\vskip 18pt -\centerline{by The \NTS\ Team} -\vskip 6pt -\centerline{Peter Breitenlohner, Max-Planck-Institut f\"ur Physik, M\"unchen} -\vskip 6pt -\centerline{Philip Taylor, RHBNC, University of London} -\vfill -\centerline{\vbox{\hsize 4in -\noindent Given an implementation of \TeX82 for a particular system, this -report describes how to generate a corresponding implementation of -\eTeX.}} -\vskip 24pt -{\baselineskip 9pt -\eightrm\noindent -The preparation of this report was supported in part by DANTE, -Deutschsprachige Anwendervereinigung \TeX\ e.V.\hfil\break -`\TeX' is a trademark of the American Mathematical Society. - -}\pageno=0\eject - -\output{\shipout\vbox{ % for subsequent pages - \baselineskip0pt\lineskip0pt - \hbox to\hsize{\strut - \ifodd\pageno \hfil\eightrm\firstmark\hfil - \mainfont\the\pageno - \else\mainfont\the\pageno\hfil - \eightrm\firstmark\hfil\fi} - \vskip 10pt - \box255} - \global\advance\pageno by 1} -\let\runninghead=\mark -\outer\def\section#1.{\noindent{\bf#1.}\quad - \runninghead{\uppercase{#1} }\ignorespaces} - -\section Introduction. -Let us first review the process of generating an implementation of -\TeX82 for a particular system from the source files as, e.g., described -in the \.{WEB} manual [1]. The system-independent source file -\.{tex.web} must remain unmodified. All changes to \.{tex.web} -necessary for a particular operating system and\slash or compiler are to -be collected in a system-dependent change file, typically named -\.{tex.ch}. Both files \.{tex.web} and \.{tex.ch} are effectively -merged when input by the \.{WEB} system programs \.{WEAVE} and -\.{TANGLE}. When \.{WEAVE} processes this merged input, a file -\.{tex.tex} is produced. Further processing by \TeX\ yields a `pretty -printed' version of the input together with an index. - -When \.{TANGLE} processes the merged input, a string pool file -\.{tex.pool} and a Pascal file \.{tex.pas} (or similar) are produced. -The Pascal file can then be further processed by a suitable compiler -and\slash or language converter such as \.{web2c}, and eventually yields -an executable program. - -There are actually three versions of the program: First there is -\.{INITEX} with its capability to initialize all of \TeX's tables and to -write them in compact form to a format file. Next there is the -production version \.{VIRTEX} requiring a format file as input. Finally -there is \.{TRIPTEX}, a version of \.{INITEX} with special values for -some of \TeX's parameters, for the \.{TRIP} test [2] that should be used -to validate a \TeX\ implementation. Depending on the capabilities of -the compiler, these three versions of the program are generated from -three slightly different change files or they are generated from one -change file with different compiler options. They might even be one and -the same executable program used with different run time options. - -\vskip 24pt plus 24pt -\section Generating \eTeX. -The process of generating \eTeX\ is essentially the same as that of -generating \TeX\ as described above. Conceptually there is a -system-independent source file \.{etex.web} and a system-dependent change -file \.{etex.sys}. Processing these two files by \.{TANGLE} yields a -string pool file \.{etex.pool} as well as a Pascal file \.{etex.pas}, -whilst processing by \.{WEAVE} produces a \TeX\ source file, \.{etex.tex}. - -It may, however, be necessary to increase some of the constants defined -in \.{TANGLE} and \.{WEAVE}. The following values should suffice in -most cases: -$$ -\vcenter{\halign{$#$\hfil\qquad&#\hfil\cr -\\{max\_bytes}\times\\{ww}=100~000&\.{TANGLE} and \.{WEAVE}\cr -\\{max\_texts}=2~500&\.{TANGLE} and \.{WEAVE}\cr -\\{max\_toks}\times\\{zz}=180~000&\.{TANGLE}\cr -\\{max\_names}=5~000&\.{TANGLE}\cr -\\{max\_scraps}=3~000&\.{WEAVE}\cr -\\{stack\_size}=300&\.{WEAVE}\cr -}} -$$ - -The source file \.{etex.web} for \eTeX\ does not, however, exist as a -physical file. It is the hypothetical file obtained by applying the -changes in the actual source file \.{etex.ch} to \.{tex.web}. Thus -\.{etex.web} inherits the bulk of code from \.{tex.web}, whilst the -system-independent source file \.{etex.ch} for \eTeX\ defines the -differences between \.{etex.web} and \.{tex.web}. In order to generate -an implementation of \eTeX\ two change files have to be applied to -\.{tex.web}, one after the other (the actual file names may differ): -$$ -\vcenter{\halign{#\hfil&\qquad\.{#}\hfil&\qquad#\hfil\cr -0.&tex.web&system-independent \.{WEB} source for \TeX\cr -1.&etex.ch&system-independent changes for \eTeX\cr -2.&etex.sys&system-dependent changes for \eTeX\cr -}} -$$ - -The process of merging several change files into \.{tex.web} should -certainly not be performed by hand. There are programs such as \.{TIE} -and \.{PATCHWEB} that perform this process automatically. If no such -program is available, a \TeX\ program \.{WEBMERGE} can be used. -\.{WEBMERGE} reads \.{tex.web} and up to nine change files and produces -a merged change file that can then be processed, together with -\.{tex.web}, by \.{TANGLE} and \.{WEAVE}. [On systems such as VMS, use -of \.{WEBMERGE} can leave a large number of temporary files -lying around; this can be avoided by setting a version limit (e.g.~1) on any -existing versions of those files, or by setting a version limit on the -directory in which they will be created. On other systems, it will probably -leave one large temporary file.] - -Every implementor of \eTeX\ is responsible for creating and maintaining -a suitable \.{etex.sys} in the same way as every implementor of \TeX\ -is responsible for creating and maintaining \.{tex.ch}. Since the bulk -of code in \.{etex.web} is identical to that in \.{tex.web} the bulk of -the system-dependent changes in \.{etex.sys} for a particular system -will be identical to those in \.{tex.ch} for the same system. In the -following we try to give some hints where \.{etex.sys} for a particular -system might deviate from the corresponding \.{tex.ch}. - -First, it might be necessary to increase the size of \TeX's string pool -in order to accommodate \eTeX's additional strings (message texts as -well as multi-letter control sequences). If this turns out to be -necessary for \eTeX\ it would certainly not be harmful to do it for -\TeX\ as well. \TeX\ and \eTeX\ use three constants related to the -string pool: \\{max\_strings} the maximal number of strings, -\\{pool\_size} the maximal number of string characters, and -\\{string\_vacancies} the minimal number of available string characters -in addition to those occupied by strings from the pool file. It is, -therefore, sufficient to increase \\{pool\_size} (or reduce -\\{string\_vacancies}) by the number of \eTeX's additional string -characters and to increase \\{max\_strings} by the number of \eTeX's -additional strings. The latter will, however, be unnecessary for most -implementations as \\{max\_strings} is usually increased substantially -beyond its standard value in order to accommodate large \TeX\ macro -packages. - -For Version~2 of \eTeX, there are about 100 additional strings with -about 1500 additional string characters. The precise numbers can be -obtained by running \.{POOLTYPE} on \TeX's and \eTeX's pool files -(\.{POOLTYPE} reports the total number of strings and string characters -in a pool file). - -Next, \.{etex.sys} may contain a system-dependent modification of the -\\{eTeX\_banner} string. The modified \\{eTeX\_banner} string must -contain `\.{e-TeX}' as well as the \eTeX\ version number. Note, -however, that the \\{banner} string modified by \.{tex.ch} will not be -referenced by \eTeX\ unless the implementor intentionally changes that -aspect of \eTeX's functionality: therefore \.{etex.sys} can modify the -\\{banner} string in the same way as does \.{tex.ch}. - -Then, \.{etex.sys} might deviate from \.{tex.ch} in order to use a -different pool file name and\slash or format file extension (see below). - -Finally, \.{etex.sys} will necessarily deviate whenever \.{etex.ch} -and \.{tex.ch} try to change the same piece of \.{WEB} code or when the -system-independent \eTeX\ changes from \.{etex.ch} and the -system-dependent \TeX\ changes from \.{tex.ch} interfere in some other way. -In case of any such interference implementors must first of all determine -how to combine the respective changes from \.{etex.ch} and \.{tex.ch} -in order to obtain \eTeX's functionality for a particular system. -Obviously, this process cannot be automated since it requires human -insight. - -The \NTS\ team has tried to formulate \.{etex.ch} such that -interferences with system-dependent change files \.{tex.ch} are -unlikely. Suggestions by implementors how any remaining such -interferences could be avoided by a reformulation of \.{etex.ch} will -be taken into serious consideration. Such interferences can be further -reduced by reformulating the system-dependent change file \.{tex.ch} for -\TeX, e.g.\ by reducing the range of change entries from entire modules -to the pieces of code that are actually changed. - -Implementors might prefer to maintain the system-dependent change file -\.{etex.sys} not as a physical file but as a hypothetical file defined -through its deviation from \.{tex.ch}. If there are no interferences of -the kind mentioned above, then the effect of applying the changes from -the hypothetical \.{etex.sys} to the hypothetical \.{etex.web} can be -achieved by applying 3 change files, one after the other, to \.{tex.web} -(using some tool such as \.{TIE}, \.{PATCHWEB}, or \.{WEBMERGE}): -$$ -\vcenter{\halign{#\hfil&\qquad\.{#}\hfil&\qquad#\hfil\cr -0.&tex.web&system-independent \.{WEB} source for \TeX\cr -1.&etex.ch&system-independent changes for \eTeX\cr -2.&tex.ch&system-dependent changes for \TeX\cr -3.&tex.ech&additional system-dependent changes for \eTeX\cr -}} -$$ -The third change file \.{tex.ech} will be rather short and contains just -the differences between \.{etex.sys} and \.{tex.ch}. It is recommended -that implementors try to remove all interferences between \.{etex.ch} -and \.{tex.ch} and use this method to generate \eTeX. - -As with \TeX\ there are three versions of \eTeX: \.{e-INITEX}, -\.{e-VIRTEX}, and \.{e-TRIPTEX}. Depending on the implementation they -will again be generated from the three slightly different versions of -\.{tex.ch} or with different compiler options or they may be one and the -same program used with different run time options. - -\vskip 24pt plus 24pt -\section \eTeX\ modes. -In order to ensure maximal compatibility with \TeX, \eTeX\ can run in -either compatibility mode or extended mode. The possibility of this -choice is, of course, an extended feature of \eTeX. Once \eTeX\ has -chosen compatibility mode it is, however, a legitimate implementation of -\TeX\ (assuming the \TeX\ implementation itself is legitimate). The -only differences between \eTeX\ in compatibility mode and \TeX\ are -those allowed by D.~E.~Knuth [2] between different implementations of -\TeX. - -An \.{e-TRIP} test suite [3] defines the criteria by which a program can -qualify to use the name `\eTeX'. Part of the \.{e-TRIP} test consists -of the standard \.{TRIP} test for \.{e-TRIPTEX} in compatibility and -extended mode. - -\eTeX\ can therefore be used instead of \TeX\ without the necessity to -maintain both programs. For the case that both programs should -nevertheless co-exist on a system, it might be a good idea to name the -pool file for \eTeX\ \.{etex.pool} instead of \.{tex.pool} and to use -an extension other than \.{.fmt}, e.g., \.{.efmt} for \eTeX\ format -files. (Format files for \TeX\ and \eTeX\ are incompatible). All this -will require additional changes in the file \.{tex.ech}. - -When \.{INITEX} or \.{VIRTEX} start, they inspect the first non-blank -character from the command line or in response to the \.{**} prompt. -This may be an \.{\&} immediately followed by the name of a format file -to be loaded. Otherwise \.{VIRTEX} loads a default format, whereas -\.{INITEX} starts without loading a format. - -When \.{e-INITEX} or \.{e-VIRTEX} start, they inspect the first -non-blank character from the command line or in response to the \.{**} -prompt. This may again be an \.{\&} immediately followed by the name of -a format file to be loaded; otherwise \.{e-VIRTEX} loads a default -format. For \.{e-INITEX} the first non-blank character may be an \.{*} -immediately followed by what would normally be the input for \.{INITEX} -(without intervening blanks). \.{e-INITEX} enters extended mode in -response to the \.{*}, or compatibility mode otherwise. This mode is -recorded in format files produced by \.{e-INITEX} and entered again when -such a format is loaded (by either \.{e-INITEX} or \.{e-VIRTEX}). - -\vskip 24pt plus 24pt -\section References. -\item {[1]} -{\sl The \.{WEB} system of structured documentation\/}, -by Donald E.~Knuth,\hfil\break Stanford Computer Science Report~980. - -\item {[2]} -{\sl A torture test for \TeX\/}, -by Donald E.~Knuth, Stanford Computer Science Report~1027. - -\item {[3]} -{\sl A torture test for \eTeX\/}, -by The \NTS\ Team (Peter Breitenlohner and Bernd Raichle). - -\end diff --git a/Build/source/texk/web2c/etexdir/etex_version.h b/Build/source/texk/web2c/etexdir/etex_version.h deleted file mode 100644 index 13752253536..00000000000 --- a/Build/source/texk/web2c/etexdir/etex_version.h +++ /dev/null @@ -1 +0,0 @@ -#define ETEX_VERSION "2.6" diff --git a/Build/source/texk/web2c/etexdir/etexextra.c b/Build/source/texk/web2c/etexdir/etexextra.c deleted file mode 100644 index 91de6d48ae6..00000000000 --- a/Build/source/texk/web2c/etexdir/etexextra.c +++ /dev/null @@ -1,12 +0,0 @@ -/* etexextra.c: Hand-coded routines for e-TeX. - - This file is public domain. */ - -#define EXTERN /* Instantiate data from etexd.h here. */ -#define DLLPROC dlletexmain - -/* This file defines TeX and eTeX. */ -#include <etexd.h> - -/* Hand-coded routines for TeX or Metafont in C. */ -#include <lib/texmfmp.c> diff --git a/Build/source/texk/web2c/etexdir/etexextra.h b/Build/source/texk/web2c/etexdir/etexextra.h deleted file mode 100644 index 77a2a9d4246..00000000000 --- a/Build/source/texk/web2c/etexdir/etexextra.h +++ /dev/null @@ -1,34 +0,0 @@ -/* etexextra.h: banner etc. for e-TeX. - - This is included by e-TeX, from etexextra.c. - -Copyright (C) 1995, 1996, 2009, 2014, 2016 Karl Berry. -Copyright (C) 2004 Olaf Weber. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include <etexdir/etex_version.h> /* for 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 -#define BUG_ADDRESS "tex-k@tug.org" -#define DUMP_VAR TEXformatdefault -#define DUMP_LENGTH_VAR formatdefaultlength -#define DUMP_OPTION "fmt" -#define DUMP_EXT ".fmt" -#define INPUT_FORMAT kpse_tex_format -#define INI_PROGRAM "einitex" -#define VIR_PROGRAM "evirtex" diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip.diffs b/Build/source/texk/web2c/etexdir/etrip/etrip.diffs deleted file mode 100644 index 0c635a9e6b2..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip.diffs +++ /dev/null @@ -1,550 +0,0 @@ -#! /bin/sh -vx -# $Id: etriptest.test 45809 2017-11-15 00:36:56Z karl $ -# Copyright 2017 Karl Berry <tex-live@tug.org> -# Copyright 2009-2014 Peter Breitenlohner <tex-live@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.141592653 (INITEX) 4 JUL 1776 12:00 ---- -> 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 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 2021.1.27) -> 1491 strings of total length 26266 -> 479 memory locations dumped; current usage is 104&278 -> 342 multiletter control sequences -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. -./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.141592653 (INITEX) -< ** &trip trip -< (trip.tex ## ---- -> 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 ---- -> Memory usage before: 185&313; after: 112&278; still untouched: 2612 -75c74 -< 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.141592653 (preloaded format=trip 1776.7.4) 4 JUL 1776 12:00 ---- -> 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 ## -73c73 -< Memory usage before: 159&313; after: 102&278; still untouched: 1613 ---- -> Memory usage before: 185&313; after: 112&278; still untouched: 2612 -642c642 -< Memory usage before: 747&484; after: 581&481; still untouched: 1492 ---- -> Memory usage before: 1027&484; after: 795&481; still untouched: 1491 -815c815 -< Memory usage before: 475&470; after: 290&466; still untouched: 1473 ---- -> Memory usage before: 653&470; after: 384&466; still untouched: 1472 -915c915 -< Memory usage before: 218&459; after: 149&458; still untouched: 1473 ---- -> Memory usage before: 286&459; after: 181&458; still untouched: 1472 -1070c1070 -< Memory usage before: 118&328; after: 102&328; still untouched: 1473 ---- -> Memory usage before: 132&328; after: 110&328; still untouched: 1472 -1405c1405 -< \vbox(16383.99998+0.0)x1000.0, glue set 16342.0fil ---- -> \vbox(16383.99998+0.0)x1000.0, glue set 16341.99998fil -1511c1511 -< Memory usage before: 990&376; after: 584&370; still untouched: 735 ---- -> Memory usage before: 1396&376; after: 788&370; still untouched: 1472 -1954c1954 -< (tripos.tex ---- -> (./tripos.tex -2018c2018 -< \vbox(16383.99998+1.0)x100.0, glue set 16239.0fil ---- -> \vbox(16383.99998+1.0)x100.0, glue set 16238.99998fil -2189c2189 -< Memory usage before: 950&531; after: 546&448; still untouched: 706 ---- -> Memory usage before: 1400&531; after: 772&448; still untouched: 1443 -2533c2533 -< \vbox(16383.99998+0.0)x20.0, glue set 16331.0fil ---- -> \vbox(16383.99998+0.0)x20.0, glue set 16330.99998fil -2575c2575 -< Memory usage before: 339&413; after: 236&405; still untouched: 706 ---- -> Memory usage before: 455&413; after: 296&405; still untouched: 1443 -3326c3326 -< \vbox(10000.0+2.0)x28.0, glue set 9737.58789fil ---- -> \vbox(10000.0+2.0)x28.0, glue set 9737.58742fil -3616c3616 -< Memory usage before: 2170&521; after: 1181&459; still untouched: 175 ---- -> Memory usage before: 3016&521; after: 1607&459; still untouched: 178 -3864c3864 -< \vbox(16383.99998+2.0)x100.0, glue set 16318.0fil ---- -> \vbox(16383.99998+2.0)x100.0, glue set 16317.99997fil -3951c3951 -< Memory usage before: 640&415; after: 397&410; still untouched: 175 ---- -> Memory usage before: 888&415; after: 525&410; still untouched: 178 -4034c4034 -< \vbox(16383.99998+0.0)x8236.0, glue set 16344.0fil ---- -> \vbox(16383.99998+0.0)x8236.0, glue set 16343.99998fil -4053c4053 -< Memory usage before: 235&401; after: 178&399; still untouched: 175 ---- -> Memory usage before: 307&401; after: 218&399; still untouched: 178 -4420c4420 -< \vbox(16383.99998+0.0)x100.0, glue set 16332.0fil ---- -> \vbox(16383.99998+0.0)x100.0, glue set 16331.99998fil -4506c4506 -< Memory usage before: 651&432; after: 417&418; still untouched: 175 ---- -> Memory usage before: 941&432; after: 565&418; still untouched: 178 -4742c4742 -< \vbox(16383.99998+0.0)x205.12613, glue set 16344.0fil ---- -> \vbox(16383.99998+0.0)x205.12613, glue set 16343.99998fil -4828c4828 -< Memory usage before: 776&458; after: 464&452; still untouched: 175 ---- -> Memory usage before: 1098&458; after: 630&452; still untouched: 178 -6381c6381 -< (tripos.tex ---- -> (./tripos.tex -6596c6596 -< Memory usage before: 819&428; after: 720&426; still untouched: 175 ---- -> Memory usage before: 1155&428; after: 1016&426; still untouched: 178 -7156c7156 -< Memory usage before: 895&439; after: 290&420; still untouched: 175 ---- -> Memory usage before: 1269&439; after: 374&420; still untouched: 178 -7289c7289 -< Memory usage before: 334&431; after: 292&418; still untouched: 175 ---- -> Memory usage before: 434&431; after: 376&418; still untouched: 178 -7297,7300c7297,7300 -< 47 strings out of 1674 -< 253 string characters out of 8367 -< 2825 words of memory out of 3000 -< 372 multiletter control sequences out of 2100 ---- -> 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 -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 2021/dev) -9c9 -< ' TeX output 1776.07.04:1200' ---- -> ' TeX output 2021.01.27:1801' -419c419 -< 1121: down4 639342208 ---- -> 1121: down4 639342177 -1087,1088c1087,1088 -< 2535: y4 203921760 -< 2540: y0 203921760 ---- -> 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 ---- -> entering extended mode -> ***\input trip -36,41d36 -< ! Bad register code (256). -< l.29 ...{1} \toksdef\tokens=256 -< \show\errorstopmode -< A register number must be between 0 and 255. -< I changed this one to zero. -< -452,453c447,448 -< 479 memory locations dumped; current usage is 104&278 -< 342 multiletter control sequences ---- -> 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 ## ---- -> **entering extended mode -> ## (./trip.tex -16c17 -< Memory usage before: 185&313; after: 112&278; still untouched: 2612 ---- -> Memory usage before: 185&313; after: 112&278; still untouched: 1612 -76a78,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 ctrip.log xtrip.log -+ diff ctrip.log xtrip.log -2,3c2,4 -< ** &trip trip -< (./trip.tex ## ---- -> entering extended mode -> **&trip \toksdef\tokens=0 \input trip -> (./trip.tex -73c74 -< Memory usage before: 185&313; after: 112&278; still untouched: 2612 ---- -> Memory usage before: 185&313; after: 112&278; still untouched: 1612 -1769d1769 -< {restoring \fam=-1} -1779d1778 -< {restoring \displayindent=0.0pt} -1833d1831 -< {restoring \fam=-1} -2135c2133 -< .\hbox(0.0+0.0)x0.0, shifted 50.0 ---- -> .\hbox(0.0+0.0)x0.0, shifted 50.0, display -2138c2136 -< .\hbox(0.0+0.0)x0.0, shifted 100.0 ---- -> .\hbox(0.0+0.0)x0.0, shifted 100.0, display -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 -2835d2832 -< {restoring current font=\ip} -3223d3219 -< {restoring \fam=-1} -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 -3557c3553 -< .\hbox(20.5+50.80002)x8.27895, shifted 19.72105 ---- -> .\hbox(20.5+50.80002)x8.27895, shifted 19.72105, display -3766d3761 -< {restoring \fam=-1} -3839d3833 -< {restoring \fam=-1} -3895c3889 -< ..\hbox(12.0+4.0)x8.1778 ---- -> ..\hbox(12.0+4.0)x8.1778, display -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 -3925c3919 -< ....\hbox(7.0+1.0)x5.0, shifted 47.5 ---- -> ....\hbox(7.0+1.0)x5.0, shifted 47.5, display -4011d4004 -< {restoring \fam=-1} -4047c4040 -< .\hbox(0.0+0.0)x1009.0, shifted 7227.0 ---- -> .\hbox(0.0+0.0)x1009.0, shifted 7227.0, display -4051c4044 -< .\hbox(0.0+0.0)x-7127.0, shifted 7227.0 ---- -> .\hbox(0.0+0.0)x-7127.0, shifted 7227.0, display -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. -7292a7286,7288 -> -> ### semi simple group (level 1) entered at line 429 (begingroup) -> ### bottom level -7300c7296 -< 373 multiletter control sequences out of 15000+0 ---- -> 439 multiletter control sequences out of 15000+0 -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.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 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.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.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 2021/dev) -9c9 -< ' TeX output 2014.01.22:1125' ---- -> ' TeX output 2021.01.27:1801' - -$is_OK || { - echo ">>> There were some errors." >&2 - exit 1 -} -+ : - -PASS etexdir/etriptest.test (exit status: 0) -PASS: etexdir/etriptest.test diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip.fot b/Build/source/texk/web2c/etexdir/etrip/etrip.fot deleted file mode 100644 index c1c8210f47b..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip.fot +++ /dev/null @@ -1,47 +0,0 @@ -This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etex) -**entering extended mode -(./etrip.tex e-IniTeX: e-Trip format loaded. -This is the e-Trip test [2014-01-22] for e-TeX v3.14159265-2.6. -(You are using e-TeX version/revision 2.6) -Missing character: There is no c in font nullfont! - - -current interactionmode (l.230): nonstop - -current interactionmode (l.231): scroll - -current interactionmode (l.232): errorstop - -! Bad interaction mode (-1). -l.237 \interactionmode=-1 - \1 1 % nonstop -current interactionmode (l.237): nonstop -! Bad interaction mode (4). -l.238 \interactionmode=4 - \1 1 % nonstop -current interactionmode (l.238): nonstop - -current interactionmode (l.239): scroll - -current interactionmode (l.239): scroll - -current interactionmode (l.239): nonstop - -current interactionmode (l.239): nonstop - -current interactionmode (l.239): errorstop - -current interactionmode (l.239): errorstop - -current interactionmode (l.240): errorstop - -1 (l.243) -1 (l.245) -current interactionmode (l.247): errorstop - -current interactionmode (l.247): scroll - -current interactionmode (l.247): nonstop - -\openout1 = `etrip.out'. - diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip.log b/Build/source/texk/web2c/etexdir/etrip/etrip.log deleted file mode 100644 index b694b2ce46b..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip.log +++ /dev/null @@ -1,4429 +0,0 @@ -This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (preloaded format=etrip 2014.1.22) 22 JAN 2014 11:25 -entering extended mode -**&etrip etrip -(./etrip.tex e-IniTeX: e-Trip format loaded. -This is the e-Trip test [2014-01-22] for e-TeX v3.14159265-2.6. -(You are using e-TeX version/revision 2.6) -Missing character: There is no b in font nullfont! - -Missing character: There is no c in font nullfont! - -Checking input/output of new csnames: -e-TeX Version 2 has 66 new csnames: -> \3=macro: --> \eTeXversion \eTeXrevision - \showgroups \showtokens - \tracingassigns \tracinggroups - \tracingifs \tracingscantokens - \currentgrouplevel \currentgrouptype - \middle \lastnodetype - \TeXXeTstate \beginL - \endL \beginR - \endR \predisplaydirection - \marks \topmarks - \firstmarks \botmarks - \splitfirstmarks \splittopmarks - \protected \unexpanded - \detokenize \scantokens - \readline \unless - \ifdefined \ifcsname - \everyeof \interactionmode - \currentiflevel \currentiftype - \currentifbranch \showifs - \fontcharwd \fontcharht - \fontchardp \fontcharic - \iffontchar \tracingnesting - \parshapelength \parshapeindent - \parshapedimen \numexpr - \dimexpr \glueexpr - \muexpr \mutoglue - \gluetomu \gluestretchorder - \glueshrinkorder \gluestretch - \glueshrink \savingvdiscards - \pagediscards \splitdiscards - \lastlinefit \savinghyphcodes - \interlinepenalties \clubpenalties - \widowpenalties \displaywidowpenalties -. -l.181 \show\3 - \endgroup - -Checking creation and printing for new node types: - -Overfull \hbox (38.99965pt too wide) in paragraph at lines 195--197 -[]\trip a[]b[]p$q [] t$u[][] - -\hbox(17.0+3.00002)x0.0 -.\hbox(0.0+0.0)x0.0 -.\trip a -.\beginL -.\trip b -.\beginR -.\trip p -.\mathon -.\trip q -.\glue(\thinmuskip) 4.99988 plus 0.99997 -.\hbox(17.0+3.00002)x23.9999 -..\hbox(14.00002+2.0)x6.00002, shifted -0.99998 -...\bigtrip a -..\trip r -..\glue(\thinmuskip) 4.99988 plus 0.99997 -..\hbox(16.0+4.00002)x6.0, shifted -1.0 -...\bigtrip B -..\trip s -..\vbox(7.0+11.0)x7.0, shifted -9.0 -...\hbox(7.0+1.0)x3.0 -....\trip A -...\hbox(8.0+2.0)x3.0 -....\trip B -.\glue(\thinmuskip) 4.99988 plus 0.99997 -.\trip t -.\mathoff -.\trip r (ligature u|) -.\penalty 10000 -.\glue(\parfillskip) 0.0 -.\endR -.\endL -.\glue(\rightskip) 0.0 - - -Overfull \hbox (11.0pt too wide) detected at line 197 -\trip aMb - -\hbox(8.0+2.0)x0.0 -.\trip a -.\trip M -.\trip b - - -Overfull \hbox (24.6pt too wide) in paragraph at lines 197--201 -[][]\trip p[]q$st$u[] - -\hbox(0.0+0.0)x0.0 -.\beginL -.\beginR -.\trip p -.\endR -.\trip q (ligature |) -.\trip q -.\mathon, surrounded 12.3 -.\trip s -.\trip t -.\mathoff, surrounded 12.3 -.\trip r (ligature u|) -.\penalty 10000 -.\glue(\parfillskip) 0.0 -.\endL -.\glue(\rightskip) 0.0 - - -Overfull \hbox (6.0pt too wide) detected at line 201 -\trip rMs - -\hbox(0.0+0.0)x0.0 -.\trip r -.\trip M -.\trip s - - -Overfull \hbox (3.0pt too wide) in paragraph at lines 201--205 -[]\trip tp[]u - -\hbox(0.0+0.0)x0.0 -.\beginL -.\trip t -.\kern3.0 -.\trip q (ligature ) -.\trip p -.\endL -.\trip r (ligature u|) -.\penalty 10000 -.\glue(\parfillskip) 0.0 -.\glue(\rightskip) 0.0 - - -Overfull \hbox (6.0pt too wide) detected at line 205 -\trip rMs - -\hbox(0.0+0.0)x0.0 -.\trip r -.\trip M -.\trip s - -! Bad register code (-1). -<to be read again> - { -l.208 \marks-1{ - -1}\marks32768{32768}% Bad register (-1) .... -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -<to be read again> - { -l.208 ...marks-1{-1}\marks32768{ - 32768}% Bad register (-1) ...... -A register number must be between 0 and 32767. -I changed this one to zero. - -! Improper \beginL. -l.210 \beginL - \beginR\endL\endR % Improper \(begin/end)(L/R) -Sorry, this optional e-TeX feature has been disabled. - -! Improper \beginR. -l.210 \beginL\beginR - \endL\endR % Improper \(begin/end)(L/R) -Sorry, this optional e-TeX feature has been disabled. - -! Improper \endL. -l.210 \beginL\beginR\endL - \endR % Improper \(begin/end)(L/R) -Sorry, this optional e-TeX feature has been disabled. - -! Improper \endR. -l.210 ...beginL\beginR\endL\endR - % Improper \(begin/end)(L/R) -Sorry, this optional e-TeX feature has been disabled. - - -Overfull \hbox (3.0pt too wide) in paragraph at lines 205--211 -\trip tp - -\hbox(0.0+0.0)x0.0 -.\trip t -.\kern3.0 -.\trip q (ligature ) -.\trip p -.\penalty 10000 -.\glue(\parfillskip) 0.0 -.\glue(\rightskip) 0.0 - -> \box0= -\vbox(30.00002+0.0)x0.0 -.\hbox(17.0+3.00002)x0.0 -..\hbox(0.0+0.0)x0.0 -..\trip a -..\beginL -..\trip b -..\beginR -..\trip p -..\mathon -..\trip q -..\glue(\thinmuskip) 4.99988 plus 0.99997 -..\hbox(17.0+3.00002)x23.9999 -...\hbox(14.00002+2.0)x6.00002, shifted -0.99998 -....\bigtrip a -...\trip r -...\glue(\thinmuskip) 4.99988 plus 0.99997 -...\hbox(16.0+4.00002)x6.0, shifted -1.0 -....\bigtrip B -...\trip s -...\vbox(7.0+11.0)x7.0, shifted -9.0 -....\hbox(7.0+1.0)x3.0 -.....\trip A -....\hbox(8.0+2.0)x3.0 -.....\trip B -..\glue(\thinmuskip) 4.99988 plus 0.99997 -..\trip t -..\mathoff -..\trip r (ligature u|) -..\penalty 10000 -..\glue(\parfillskip) 0.0 -..\endR -..\endL -..\glue(\rightskip) 0.0 -.\penalty 0 -.\glue(\abovedisplayskip) 0.0 -.\glue(\lineskip) 0.0 -.\hbox(8.0+2.0)x0.0 -..\beginM -..\kern0.0 -..\hbox(8.0+2.0)x0.0, display -...\trip a -...\trip M -...\trip b -..\kern0.0 -..\endM -.\penalty 0 -.\glue(\belowdisplayskip) 0.0 -.\glue(\lineskip) 0.0 -.\hbox(0.0+0.0)x0.0 -..\beginL -..\beginR -..\trip p -..\endR -..\trip q (ligature |) -..\trip q -..\mathon, surrounded 12.3 -..\trip s -..\trip t -..\mathoff, surrounded 12.3 -..\trip r (ligature u|) -..\penalty 10000 -..\glue(\parfillskip) 0.0 -..\endL -..\glue(\rightskip) 0.0 -.\penalty 0 -.\glue(\abovedisplayskip) 0.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x0.0 -..\beginM -..\kern0.0 -..\hbox(0.0+0.0)x0.0, display -...\trip r -...\trip M -...\trip s -..\kern0.0 -..\endM -.\penalty 0 -.\glue(\belowdisplayskip) 0.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x0.0 -..\beginL -..\trip t -..\kern3.0 -..\trip q (ligature ) -..\trip p -..\endL -..\trip r (ligature u|) -..\penalty 10000 -..\glue(\parfillskip) 0.0 -..\glue(\rightskip) 0.0 -.\penalty 0 -.\glue(\abovedisplayskip) 0.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x0.0, display -..\trip r -..\trip M -..\trip s -.\penalty 0 -.\glue(\belowdisplayskip) 0.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x0.0 -..\trip t -..\kern3.0 -..\trip q (ligature ) -..\trip p -..\penalty 10000 -..\glue(\parfillskip) 0.0 -..\glue(\rightskip) 0.0 -.\mark{0old} -.\mark{0} -.\marks1{1} -.\marks15{15} -.\marks32767{32767} -.\mark{-1} -.\mark{32768} - -! OK. -l.211 }\showbox0 - - -Checking \interactionmode: - - -current interactionmode (l.229): batch - -current interactionmode (l.230): nonstop - -current interactionmode (l.231): scroll - -current interactionmode (l.232): errorstop - -! Bad interaction mode (-1). -l.237 \interactionmode=-1 - \1 1 % nonstop -Modes are 0=batch, 1=nonstop, 2=scroll, and -3=errorstop. Proceed, and I'll ignore this case. - -current interactionmode (l.237): nonstop -! Bad interaction mode (4). -l.238 \interactionmode=4 - \1 1 % nonstop -Modes are 0=batch, 1=nonstop, 2=scroll, and -3=errorstop. Proceed, and I'll ignore this case. - -current interactionmode (l.238): nonstop - -current interactionmode (l.239): scroll - -current interactionmode (l.239): scroll - -current interactionmode (l.239): nonstop - -current interactionmode (l.239): nonstop - -current interactionmode (l.239): errorstop - -current interactionmode (l.239): errorstop - -current interactionmode (l.239): batch - -current interactionmode (l.239): batch -current interactionmode (l.240): batch - -current interactionmode (l.240): errorstop - -1 (l.243) -0 (l.244) -1 (l.245) -current interactionmode (l.247): batch - -current interactionmode (l.247): errorstop - -current interactionmode (l.247): scroll - -current interactionmode (l.247): nonstop - -current interactionmode (l.248): batch -Checking \tracingifs: -{vertical mode: \iftrue: (level 1) entered on line 257} -{\iffalse: (level 2) entered on line 257} -{\else: \iffalse (level 2) entered on line 257} -{\fi: \iffalse (level 2) entered on line 257} -{\else: \iftrue (level 1) entered on line 257} -{\fi: \iftrue (level 1) entered on line 257} -{\unless\iftrue: (level 1) entered on line 258} -{\else: \unless\iftrue (level 1) entered on line 258} -{\unless\iffalse: (level 2) entered on line 258} -{\else: \unless\iffalse (level 2) entered on line 258} -{\fi: \unless\iffalse (level 2) entered on line 258} -{\fi: \unless\iftrue (level 1) entered on line 258} -{\ifdefined: (level 1) entered on line 260} -{true} -{\unless} -{\unless\ifdefined: (level 2) entered on line 260} -{true} -{\ifcase: (level 3) entered on line 260} -{case 2} -{\or: \ifcase (level 3) entered on line 260} -{\or: \ifcase (level 3) entered on line 260} -{\ifcsname: (level 4) entered on line 261} -{true} -{\ifcsname: (level 5) entered on line 261} -{false} -{\else: \ifcsname (level 5) entered on line 261} -{\ifx: (level 6) entered on line 262} -{false} -{\else: \ifx (level 6) entered on line 262} -{\ifx: (level 7) entered on line 262} -{false} -{\fi: \ifx (level 7) entered on line 262} -{\fi: \ifx (level 6) entered on line 262} -{\fi: \ifcsname (level 5) entered on line 261} -{\fi: \ifcsname (level 4) entered on line 261} -{\or: \ifcase (level 3) entered on line 260} -{\fi: \ifcase (level 3) entered on line 260} -{\fi: \unless\ifdefined (level 2) entered on line 260} -{\fi: \ifdefined (level 1) entered on line 260} -{\endgroup} -Checking \tracingassigns: -{into \tracingassigns=1} -{globally changing \6=undefined} -{into \6=select font nullfont} -{globally changing \6=select font nullfont} -{into \6=select font etrip at 11.0pt} -{changing \6=select font etrip at 11.0pt} -{into \6=select font nullfont} -{changing \6=select font nullfont} -{into \6=select font etrip at 11.0pt} -{globally changing \count17=0} -{into \count17=7} -{reassigning \count17=7} -{globally changing \9=undefined} -{into \9=macro:->\relax } -{globally changing \8=undefined} -{into \8=macro:->\relax } -{reassigning \8=macro:->\relax } -{globally changing \5=undefined} -{into \5=select font nullfont} -{globally changing \5=select font nullfont} -{into \5=select font etrip at 12.0pt} -{changing \5=select font etrip at 12.0pt} -{into \5=select font nullfont} -{changing \5=select font nullfont} -{into \5=select font etrip at 12.0pt} -{changing \4=undefined} -{into \4=select font etrip at 12.0pt} -{globally changing \count17=7} -{into \count17=0} -{reassigning \count17=0} -{globally changing \9=macro:->\relax } -{into \9=undefined} -{globally changing \8=macro:->\relax } -{into \8=undefined} -{reassigning \8=undefined} -{restoring \4=undefined} -{restoring \5=select font etrip at 12.0pt} -{restoring \6=select font etrip at 11.0pt} -{restoring \tracingassigns=0} -Checking \currentgrouptype, \currentgrouplevel, and \lastnodetype: -current group level (l.284): outer level -current group type (l.286): bottom level -current group type (l.313): semi simple group -{entering vbox group (level 2) at line 315} -current group type (l.315): vbox group -{entering adjusted hbox group (level 3) at line 316} -current group type (l.316): adjusted hbox group -{entering simple group (level 4) at line 317} -current group type (l.317): simple group -{leaving simple group (level 4) entered at line 317} -last node type (l.318): empty -{entering hbox group (level 4) at line 319} -current group type (l.319): hbox group -{entering disc group (level 5) at line 320} -current group type (l.320): disc group -{leaving disc group (level 5) entered at line 320} -{entering disc group (level 5) at line 320} -current group type (l.320): disc group -{leaving disc group (level 5) entered at line 320} -{entering disc group (level 5) at line 320} -current group type (l.320): disc group -{leaving disc group (level 5) entered at line 320} -last node type (l.322): disc node -last node type (l.323): char node -last node type (l.324): ligature node -{entering insert group (level 5) at line 325} -current group type (l.325): insert group -{leaving insert group (level 5) entered at line 325} -last node type (l.326): ins node -{entering insert group (level 5) at line 327} -current group type (l.327): insert group -{leaving insert group (level 5) entered at line 327} -last node type (l.328): adjust node -last node type (l.329): mark node -last node type (l.330): rule node -last node type (l.331): glue node -last node type (l.332): kern node -last node type (l.333): penalty node -{entering vtop group (level 5) at line 334} -current group type (l.334): vtop group -{leaving vtop group (level 5) entered at line 334} -last node type (l.335): vlist node -last node type (l.336): whatsit node -{entering math shift group (level 5) at line 337} -current group type (l.337): math shift group -{entering math group (level 6) at line 338} -current group type (l.338): math group -{leaving math group (level 6) entered at line 338} -{leaving math shift group (level 5) entered at line 337} -last node type (l.340): math node -last node type (l.341): math node -last node type (l.342): math node -{entering align group (level 5) at line 343} -{entering align group (level 6) at line 343} -current group type (l.343): align group -{leaving align group (level 6) entered at line 343} -{entering align group (level 6) at line 344} -{entering no align group (level 7) at line 344} -current group type (l.344): no align group -last node type (l.345): unset node -{leaving no align group (level 7) entered at line 344} -{leaving align group (level 6) entered at line 344} -{leaving align group (level 5) entered at line 343} -{leaving hbox group (level 4) entered at line 319} -{leaving adjusted hbox group (level 3) entered at line 316} -last node type (l.349): hlist node -{entering math shift group (level 3) at line 350} -current group type (l.350): math shift group -last node type (l.351): empty -{entering math choice group (level 4) at line 352} -current group type (l.352): math choice group -{leaving math choice group (level 4) entered at line 352} -{entering math choice group (level 4) at line 352} -current group type (l.352): math choice group -{leaving math choice group (level 4) entered at line 352} -{entering math choice group (level 4) at line 352} -current group type (l.352): math choice group -{leaving math choice group (level 4) entered at line 352} -{entering math choice group (level 4) at line 352} -current group type (l.352): math choice group -{entering vcenter group (level 5) at line 353} -current group type (l.353): vcenter group -{leaving vcenter group (level 5) entered at line 353} -last node type (l.354): math mode node -{leaving math choice group (level 4) entered at line 352} -last node type (l.355): math mode node -{entering math left group (level 4) at line 356} -current group type (l.356): math left group -{leaving math left group (level 4) entered at line 356} -{entering math left group (level 4) at line 357} -current group type (l.357): math left group -{leaving math left group (level 4) entered at line 357} -{entering math left group (level 4) at line 358} -current group type (l.358): math left group -{leaving math left group (level 4) entered at line 358} -{leaving math shift group (level 3) entered at line 350} -{leaving vbox group (level 2) entered at line 315} -{entering adjusted hbox group (level 2) at line 396} -{leaving adjusted hbox group (level 2) entered at line 396} -{entering output group (level 2) at line 396} -current group type (l.396): output group -{entering vbox group (level 3) at line 396} -{entering adjusted hbox group (level 4) at line 396} -{entering hbox group (level 5) at line 396} -{entering simple group (level 6) at line 396} -{entering align group (level 7) at line 396} -{entering align group (level 8) at line 396} -{entering no align group (level 9) at line 396} -{entering math shift group (level 10) at line 396} -{entering vtop group (level 11) at line 396} -{entering math shift group (level 12) at line 396} -{entering math group (level 13) at line 396} -{entering math left group (level 14) at line 396} -{leaving math left group (level 14) entered at line 396} -{entering math left group (level 14) at line 396} -{entering math choice group (level 15) at line 396} -{leaving math choice group (level 15) entered at line 396} -{entering math choice group (level 15) at line 396} -{leaving math choice group (level 15) entered at line 396} -{entering math choice group (level 15) at line 396} -{entering vcenter group (level 16) at line 396} -{entering insert group (level 17) at line 396} -{entering disc group (level 18) at line 396} -{leaving disc group (level 18) entered at line 396} -{entering disc group (level 18) at line 396} - -### disc group (level 18) entered at line 396 (\discretionary{}{) -### insert group (level 17) entered at line 396 (\vadjust{) -### vcenter group (level 16) entered at line 396 (\vcenter to7.0pt{) -### math choice group (level 15) entered at line 396 (\mathchoice{}{}{) -### math left group (level 14) entered at line 396 (\middle) -### math group (level 13) entered at line 396 ({) -### math shift group (level 12) entered at line 396 ($$) -### vtop group (level 11) entered at line 396 (\vtop{) -### math shift group (level 10) entered at line 396 ($) -### no align group (level 9) entered at line 396 (\noalign{) -### align group (level 8) entered at line 396 (\cr) -### align group (level 7) entered at line 396 (\valign{) -### simple group (level 6) entered at line 396 ({) -### hbox group (level 5) entered at line 396 (\raise5.0pt\hbox{) -### adjusted hbox group (level 4) entered at line 396 (\hbox spread5.0pt -{) -### vbox group (level 3) entered at line 396 (\setbox0=\vbox{) -### output group (level 2) entered at line 396 (\output) -### semi simple group (level 1) entered at line 287 (\begingroup) -### bottom level - -! OK. -<output> ...nary {}{\showgroups - }{} } } }{} \right . } $$ } $... -l.396 ...ox{}\vfil\penalty-10000 - - -{leaving disc group (level 18) entered at line 396} -{entering disc group (level 18) at line 396} -{leaving disc group (level 18) entered at line 396} -{leaving insert group (level 17) entered at line 396} -{leaving vcenter group (level 16) entered at line 396} -{leaving math choice group (level 15) entered at line 396} -{entering math choice group (level 15) at line 396} -{leaving math choice group (level 15) entered at line 396} -{leaving math left group (level 14) entered at line 396} -{leaving math group (level 13) entered at line 396} -{leaving math shift group (level 12) entered at line 396} -{leaving vtop group (level 11) entered at line 396} -{leaving math shift group (level 10) entered at line 396} -{leaving no align group (level 9) entered at line 396} -{leaving align group (level 8) entered at line 396} -{leaving align group (level 7) entered at line 396} -{leaving simple group (level 6) entered at line 396} -{leaving hbox group (level 5) entered at line 396} -{leaving adjusted hbox group (level 4) entered at line 396} -{leaving vbox group (level 3) entered at line 396} -{leaving output group (level 2) entered at line 396} -Checking expansion of \protected macros: -> \2=\protected macro: -->. -l.404 ...otected\def\2{} \show\2 - - -> \3=\protected macro: -->. -l.405 \let\3=\2 \show\3 - - -> \1=\protected macro: -->\2. -l.406 ...cted\def\1{\2}} \show\1 - - - -\1->\2 -\1\2 -\typeout ->\immediate \write 15 - -\1->\2 -\1\2 - -\1->\2 -> \box0= -\vbox(0.0+0.0)x0.0 -.\special{\1\2} - -! OK. -l.410 ...ndafter\1\1}} \showbox0 - - - -\1->\2 -> \5=macro: -->\1\2. -l.411 ...xpandafter\1\1} \show\5 - - - -\1->\2 - -\1->\3 - -\3-> - -\2-> -Checking \scantokens, \tracingscantokens, \readline, and \everyeof: - -Completed box being shipped out [1] -\vbox(0.0+0.0)x0.0 -.\openout1=etrip.out -.\write1{\unexpanded \expandafter {\1}} -.\closeout1 - -\openout1 = `etrip.out'. - -Memory usage before: 52&184; after: 36&178; still untouched: 1672 -(./etrip.out) ( -Warning: end of semi simple group (level 3) entered at line 433 of a dif -ferent file -Warning: end of \iftrue entered on line 433 of a different file -Warning: end of file when simple group (level 3) entered at line 3 is in -complete -Warning: end of file when \iffalse\else entered on line 4 is incomplete -) ( -Warning: end of semi simple group (level 3) entered at line 435 of a dif -ferent file -l.1 \endgroup - -l.435 ...ntokens\expandafter{\1} - \egroup \fi -Warning: end of \unless\iffalse entered on line 435 of a different file -l.2 \fi - -l.435 ...ntokens\expandafter{\1} - \egroup \fi -Warning: end of file when simple group (level 3) entered at line 3 is in -complete -Warning: end of file when \iffalse\else entered on line 4 is incomplete -l.5 \iffalse \else - -l.435 ...ntokens\expandafter{\1} - \egroup \fi) ( -Warning: end of hbox group (level 4) entered at line 1 of a different fi -le -l.1 \egroup - -l.6 } - -l.446 } - % end of outer \scantokens -Warning: end of \ifcase entered on line 2 of a different file -l.2 \else \fi - -l.6 } - -l.446 } - % end of outer \scantokens -Warning: end of hbox group (level 3) entered at line 437 of a different -file - -\1->\egroup - \fi -l.4 \1 - -l.6 } - -l.446 } - % end of outer \scantokens -Warning: end of \unless\iftrue entered on line 438 of a different file - -\1->\egroup \fi - -l.4 \1 - -l.6 } - -l.446 } - % end of outer \scantokens -Warning: end of file when math shift group (level 4) entered at line 7 i -s incomplete -Warning: end of file when vtop group (level 3) entered at line 5 is inco -mplete -Warning: end of file when \iffalse entered on line 9 is incomplete -Warning: end of file when \ifinner\else entered on line 8 is incomplete -Warning: end of file when \ifnum entered on line 6 is incomplete -l.10 \csname iffalse\endcsname - -l.6 } - -l.446 } - % end of outer \scantokens -! Incomplete \iffalse; all text was ignored after line 9. -<inserted text> - \fi -l.6 } - -l.446 } - % end of outer \scantokens -The file ended while I was skipping conditional text. -This kind of error happens when you say `\if...' and forget -the matching `\fi'. I've inserted a `\fi'; this might work. - -Warning: end of file when vtop group (level 3) entered at line 5 is inco -mplete -Warning: end of file when \ifnum entered on line 6 is incomplete -l.9 \fi - -l.446 } - % end of outer \scantokens) (./etrip.out -! Undefined control sequence. -\endgroup ->\9\9 - -l.1 \endgroup - -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -) ( -! Undefined control sequence. -\endgroup ->\9\9 - -l.1 \endgroup - -l.453 ...ntokens\expandafter{\1} - \egroup \fi -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -) ( ) -Runaway definition? -->\begingroup -! File ended while scanning definition of \1. -<inserted text> - } -l.455 ...scantokens{\begingroup} - % <== error -I suspect you have forgotten a `}', causing me -to read past where you wanted me to stop. -I'll try to recover; but if the error is serious, -you'd better type `E' or `X' now and fix your file. - -( ) ( level=2 ( level=3 ( level=4 -! Undefined control sequence. -<everyeof> ...uplevel \2\else \9 - \fi -l.2 - -\2...=\the \currentgrouplevel }} - \endgroup -<everyeof> ...rrentgrouplevel \2 - \else \9\fi -l.2 - -\2...=\the \currentgrouplevel }} - \endgroup -<everyeof> ...rrentgrouplevel \2 - \else \9\fi -l.2 - -\2...=\the \currentgrouplevel }} - \endgroup -l.463 ...evel\2\else\9\fi}}}\1\2 - -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -))) -{\tracingrestores} -{\tracingassigns} -{into \tracingassigns=1} -{\setbox} -{restricted horizontal mode: \unless} -{\unless\ifeof} -{true} -{\readline} -{changing \2=macro:->\begingroup \scantokens {\message \ETC.} -{into \2=macro:->\endgroup^^M} -{\endlinechar} -{changing \endlinechar=13} -{into \endlinechar=-1} -{the character \} -Missing character: There is no \ in font etrip! -{the character e} -Missing character: There is no e in font etrip! -{the character n} -Missing character: There is no n in font etrip! -{the character d} -Missing character: There is no d in font etrip! -{the character g} -Missing character: There is no g in font etrip! -{the character r} -Missing character: There is no o in font etrip! -{the character u} -Missing character: There is no ^^M in font etrip! -{\expandafter} -{\fi} -{\unless} -{\unless\ifeof} -{true} -{\readline} -{changing \2=macro:->\endgroup^^M} -{into \2=macro:->\fi} -{\endlinechar} -{reassigning \endlinechar=-1} -{the character \} -Missing character: There is no \ in font etrip! -{the character f} -Missing character: There is no f in font etrip! -{the character i} -Missing character: There is no i in font etrip! -{\expandafter} -{\fi} -{\unless} -{\unless\ifeof} -{true} -{\readline} -{changing \2=macro:->\fi} -{into \2=macro:->\bgroup} -{\endlinechar} -{reassigning \endlinechar=-1} -{the character \} -Missing character: There is no \ in font etrip! -{the character b} -Missing character: There is no g in font etrip! -{the character r} -Missing character: There is no o in font etrip! -{the character u} -{\expandafter} -{\fi} -{\unless} -{\unless\ifeof} -{true} -{\readline} -{changing \2=macro:->\bgroup} -{into \2=macro:->\iffalse \else} -{\endlinechar} -{reassigning \endlinechar=-1} -{the character \} -Missing character: There is no \ in font etrip! -{the character i} -Missing character: There is no i in font etrip! -{the character f} -Missing character: There is no f in font etrip! -{the character f} -Missing character: There is no f in font etrip! -{the character a} -Missing character: There is no l in font etrip! -{the character s} -Missing character: There is no e in font etrip! -{blank space } -{the character \} -Missing character: There is no \ in font etrip! -{the character e} -Missing character: There is no e in font etrip! -{the character l} -Missing character: There is no l in font etrip! -{the character s} -Missing character: There is no e in font etrip! -{\expandafter} -{\fi} -{\unless} -{\unless\ifeof} -{true} -{\readline} -{changing \2=macro:->\iffalse \else} -{into \2=macro:->} -{\endlinechar} -{reassigning \endlinechar=-1} -{\expandafter} -{\fi} -{\unless} -{\unless\ifeof} -{false} -{\showlists} - -### restricted horizontal mode entered at line 470 -\trip r -\trip r (ligature up) -\trip b -\trip r -\trip r (ligature up) -\trip a -\trip s -\glue 4.0 plus 2.0 minus 1.0 -\trip s -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.470 ...ox25=\hbox{\1\showlists - }^^M - -{end-group character }} -{restoring \endlinechar=13} -{restoring \2=macro:->\begingroup \scantokens {\message \ETC.} -{changing \box25=void} -{into \box25= -\hbox(8.0+2.0)x9.0 []} -{vertical mode: blank space } -{end-group character }} -{restoring \box25=void} -{restoring \tracingassigns=0} -Checking \marks etc., \showtokens, and \detokenize: - -Current marks: - \splitfirstmarks 0=. - \splitbotmarks 0=. - \splitfirstmarks 1=. - \splitbotmarks 1=. - \splitfirstmarks 3=. - \splitbotmarks 3=. -> \box0= -\vbox(188.0+0.0)x10.0 -.\mark{0-1} -.\marks1{1-1} -.\glue 1.0 -.\vbox(9.0+0.0)x0.0 -.\mark{0-2} -.\marks3{} -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x0.0 -.\glue 5.0 -.\glue 0.0 plus 1.0fil -.\penalty 0 -.\glue 40.0 -.\mark{0-3} -.\glue 1.0 -.\glue(\lineskip) 0.0 -.\vbox(19.0+0.0)x0.0 -.\marks3{3-3} -.\glue 3.0 plus 1.0fil -.\penalty 0 -.\glue 40.0 -.\glue(\lineskip) 0.0 -.\vbox(30.0+0.0)x0.0 -.\glue 0.0 plus 1.0fil -.\penalty 0 -.\glue 40.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x10.0 - -! OK. -l.493 \1 \showbox0 - \let\5=\3 \def\3#1{\showtokens\expandaft... - -> 0-1. -<recently read> } - -... -l.495 \1 - \showbox1 \showbox0 \let\3=\5 - -> 0-2. -<recently read> } - -... -l.495 \1 - \showbox1 \showbox0 \let\3=\5 - -> 1-1. -<recently read> } - -... -l.495 \1 - \showbox1 \showbox0 \let\3=\5 - -> 1-1. -<recently read> } - -... -l.495 \1 - \showbox1 \showbox0 \let\3=\5 - -> . -<recently read> } - -... -l.495 \1 - \showbox1 \showbox0 \let\3=\5 - -> . -<recently read> } - -... -l.495 \1 - \showbox1 \showbox0 \let\3=\5 - - -Current marks: - \splitfirstmarks 0=0-1. - \splitbotmarks 0=0-2. - \splitfirstmarks 1=1-1. - \splitbotmarks 1=1-1. - \splitfirstmarks 3=. - \splitbotmarks 3=. -> \box1= -\vbox(17.0+0.0)x0.0, glue set 2.0fil -.\mark{0-1} -.\marks1{1-1} -.\glue 1.0 -.\vbox(9.0+0.0)x0.0 -.\mark{0-2} -.\marks3{} -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x0.0 -.\glue 5.0 -.\glue 0.0 plus 1.0fil - -! OK. -l.495 \1 \showbox1 - \showbox0 \let\3=\5 - -> \box0= -\vbox(132.0+0.0)x10.0 -.\mark{0-3} -.\glue(\splittopskip) 0.0 -.\vbox(19.0+0.0)x0.0 -.\marks3{3-3} -.\glue 3.0 plus 1.0fil -.\penalty 0 -.\glue 40.0 -.\glue(\lineskip) 0.0 -.\vbox(30.0+0.0)x0.0 -.\glue 0.0 plus 1.0fil -.\penalty 0 -.\glue 40.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x10.0 - -! OK. -l.495 \1 \showbox1 \showbox0 - \let\3=\5 - - -Current marks: - \splitfirstmarks 0=0-3. - \splitbotmarks 0=0-3. - \splitfirstmarks 1=. - \splitbotmarks 1=. - \splitfirstmarks 3=3-3. - \splitbotmarks 3=3-3. -> \box1= -\vbox(27.0+0.0)x0.0, glue set 5.0fil -.\mark{0-3} -.\glue(\splittopskip) 0.0 -.\vbox(19.0+0.0)x0.0 -.\marks3{3-3} -.\glue 3.0 plus 1.0fil - -! OK. -l.497 \1 \showbox1 - \showbox0 - -> \box0= -\vbox(70.0+0.0)x10.0 -.\glue(\splittopskip) 0.0 -.\vbox(30.0+0.0)x0.0 -.\glue 0.0 plus 1.0fil -.\penalty 0 -.\glue 40.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x10.0 - -! OK. -l.497 \1 \showbox1 \showbox0 - - - -Current marks: - \splitfirstmarks 0=. - \splitbotmarks 0=. - \splitfirstmarks 1=. - \splitbotmarks 1=. - \splitfirstmarks 3=. - \splitbotmarks 3=. -> \box1= -\vbox(37.0+0.0)x0.0, glue set 7.0fil -.\glue(\splittopskip) 0.0 -.\vbox(30.0+0.0)x0.0 -.\glue 0.0 plus 1.0fil - -! OK. -l.499 \1 \showbox1 - \showbox0 - -> \box0= -\vbox(0.0+0.0)x10.0 -.\glue(\splittopskip) 0.0 -.\hbox(0.0+0.0)x10.0 - -! OK. -l.499 \1 \showbox1 \showbox0 - - - -Current marks: - \topmarks 0=. - \firstmarks 0=. - \botmarks 0=. - \topmarks 1=. - \firstmarks 1=. - \botmarks 1=. - \topmarks 3=. - \firstmarks 3=. - \botmarks 3=. - -Current marks: - \topmarks 0=. - \firstmarks 0=0-1. - \botmarks 0=0-2. - \topmarks 1=. - \firstmarks 1=1-1. - \botmarks 1=1-1. - \topmarks 3=. - \firstmarks 3=. - \botmarks 3=. -> \box255= -\vbox(35.0+0.0)x0.0, glue set 21.0fil -.\mark{0-1} -.\marks1{1-1} -.\glue(\topskip) 0.0 -.\vbox(9.0+0.0)x0.0 -.\mark{0-2} -.\marks3{} -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x0.0 -.\glue 5.0 -.\glue 0.0 plus 1.0fil - -! OK. -<output> {\1 \showbox 255 - \setbox 0=\box 255} -l.502 ...s3{}\vfil\penalty-10000 - - - -Current marks: - \topmarks 0=0-2. - \firstmarks 0=0-3. - \botmarks 0=0-3. - \topmarks 1=1-1. - \firstmarks 1=1-1. - \botmarks 1=1-1. - \topmarks 3=. - \firstmarks 3=3-3. - \botmarks 3=3-3. -> \box255= -\vbox(35.0+0.0)x0.0, glue set 13.0fil -.\mark{0-3} -.\glue(\topskip) 0.0 -.\vbox(19.0+0.0)x0.0 -.\marks3{3-3} -.\glue 3.0 plus 1.0fil - -! OK. -<output> {\1 \showbox 255 - \setbox 0=\box 255} -l.502 ...s3{}\vfil\penalty-10000 - - - -Current marks: - \topmarks 0=0-3. - \firstmarks 0=0-3. - \botmarks 0=0-3. - \topmarks 1=1-1. - \firstmarks 1=1-1. - \botmarks 1=1-1. - \topmarks 3=3-3. - \firstmarks 3=3-3. - \botmarks 3=3-3. -> \box255= -\vbox(35.0+0.0)x0.0, glue set 5.0fil -.\glue(\topskip) 0.0 -.\vbox(30.0+0.0)x0.0 -.\glue 0.0 plus 1.0fil - -! OK. -<output> {\1 \showbox 255 - \setbox 0=\box 255} -l.502 ...s3{}\vfil\penalty-10000 - - - -Current marks: - \topmarks 0=0-3. - \firstmarks 0=. - \botmarks 0=. - \topmarks 1=1-1. - \firstmarks 1=. - \botmarks 1=. - \topmarks 3=3-3. - \firstmarks 3=. - \botmarks 3=. -> \box255= -\vbox(35.0+0.0)x10.0, glue set 35.0fil -.\glue(\topskip) 0.0 -.\hbox(0.0+0.0)x10.0 -.\mark{} -.\marks1{} -.\marks3{} -.\glue 0.0 plus 1.0fil - -! OK. -<output> {\1 \showbox 255 - \setbox 0=\box 255} -l.502 ...s3{}\vfil\penalty-10000 - - - -Current marks: - \topmarks 0=. - \firstmarks 0=. - \botmarks 0=. - \topmarks 1=. - \firstmarks 1=. - \botmarks 1=. - \topmarks 3=. - \firstmarks 3=. - \botmarks 3=. -> \box255= -\vbox(35.0+0.0)x0.0, glue set 35.0fil -.\glue(\topskip) 0.0 -.\hbox(0.0+0.0)x0.0 -.\mark{} -.\marks1{} -.\marks3{} -.\glue 0.0 plus 1.0fil - -! OK. -<output> {\1 \showbox 255 - \setbox 0=\box 255} -l.503 ...s3{}\vfil\penalty-10000 - - - -Current marks: - \topmarks 0=. - \firstmarks 0=. - \botmarks 0=. - \topmarks 1=. - \firstmarks 1=. - \botmarks 1=. - \topmarks 3=. - \firstmarks 3=. - \botmarks 3=. -> \box255= -\vbox(35.0+0.0)x0.0, glue set 35.0fil -.\glue(\topskip) 0.0 -.\hbox(0.0+0.0)x0.0 -.\glue 0.0 plus 1.0fil - -! OK. -<output> {\1 \showbox 255 - \setbox 0=\box 255} -l.504 ...x{}\vfil\penalty-10000 - % reclaim sparse array memory! - -Checking \middle: -! Missing $ inserted. -<inserted text> - $ -... -l.513 \setbox0=\vbox{\middle - \par \right \par} % <== 8 errors -I've inserted a begin-math/end-math symbol since I think -you left one out. Proceed, with fingers crossed. - -! Missing delimiter (. inserted). -<to be read again> - \par -l.513 ...box0=\vbox{\middle \par - \right \par} % <== 8 errors -I was expecting to see something like `(' or `\{' or -`\}' here. If you typed, e.g., `{' instead of `\{', you -should probably delete the `{' by typing `1' now, so that -braces don't get unbalanced. Otherwise just proceed. -Acceptable delimiters are characters whose \delcode is -nonnegative, or you can use `\delimiter <delimiter code>'. - -! Extra \middle. -<to be read again> - \par -l.513 ...box0=\vbox{\middle \par - \right \par} % <== 8 errors -I'm ignoring a \middle that had no matching \left. - -! Missing $ inserted. -<inserted text> - $ -... -l.513 ...box0=\vbox{\middle \par - \right \par} % <== 8 errors -I've inserted a begin-math/end-math symbol since I think -you left one out. Proceed, with fingers crossed. - -! Missing $ inserted. -<inserted text> - $ -... -l.513 ...box{\middle \par \right - \par} % <== 8 errors -I've inserted a begin-math/end-math symbol since I think -you left one out. Proceed, with fingers crossed. - -! Missing delimiter (. inserted). -<to be read again> - \par -l.513 ...middle \par \right \par - } % <== 8 errors -I was expecting to see something like `(' or `\{' or -`\}' here. If you typed, e.g., `{' instead of `\{', you -should probably delete the `{' by typing `1' now, so that -braces don't get unbalanced. Otherwise just proceed. -Acceptable delimiters are characters whose \delcode is -nonnegative, or you can use `\delimiter <delimiter code>'. - -! Extra \right. -<to be read again> - \par -l.513 ...middle \par \right \par - } % <== 8 errors -I'm ignoring a \right that had no matching \left. - -! Missing $ inserted. -<inserted text> - $ -... -l.513 ...middle \par \right \par - } % <== 8 errors -I've inserted a begin-math/end-math symbol since I think -you left one out. Proceed, with fingers crossed. - - -### math mode entered at line 524 -\mathord -.\fam1 r -this will be denominator of: -\fraction, thickness = default -\\left"161361 -\\mathord -\.\fam1 p -\\middle"142342 -\\mathord -\.\fam1 q -\\middle"142342 -\\mathord -\.\fam1 q -### math mode entered at line 521 -\left"161361 -\mathord -.\fam1 p -\middle"142342 -\mathord -.\fam1 q -\middle"142342 -\mathord -.\fam1 q -### math mode entered at line 517 -\mathord -.\fam1 r -this will be denominator of: -\fraction, thickness = default -\\left"161361 -\\mathord -\.\fam1 q -### math mode entered at line 516 -\left"161361 -\mathord -.\fam1 p -### math mode entered at line 515 -### restricted horizontal mode entered at line 514 -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.525 ... \over r\showlists - - - -### math mode entered at line 521 -\left"161361 -\mathord -.\fam1 p -\middle"142342 -\mathord -.\fam1 q -\middle"142342 -\mathord -.\fam1 q -\mathinner -.\left"161361 -.\mathord -..\fam1 p -.\middle"142342 -.\mathord -..\fam1 q -.\middle"142342 -.\fraction, thickness = default -.\\mathord -.\.\fam1 q -./\mathord -./.\fam1 r -.\right"162362 -### math mode entered at line 517 -\mathord -.\fam1 r -this will be denominator of: -\fraction, thickness = default -\\left"161361 -\\mathord -\.\fam1 q -### math mode entered at line 516 -\left"161361 -\mathord -.\fam1 p -### math mode entered at line 515 -### restricted horizontal mode entered at line 514 -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.526 ... \right]\showlists - - - -### math mode entered at line 517 -\mathord -.\fam1 r -\mathinner -.\left"161361 -.\mathord -..\fam1 p -.\middle"142342 -.\mathord -..\fam1 q -.\middle"142342 -.\mathord -..\fam1 q -.\mathinner -..\left"161361 -..\mathord -...\fam1 p -..\middle"142342 -..\mathord -...\fam1 q -..\middle"142342 -..\fraction, thickness = default -..\\mathord -..\.\fam1 q -../\mathord -../.\fam1 r -..\right"162362 -.\right"162362 -this will be denominator of: -\fraction, thickness = default -\\left"161361 -\\mathord -\.\fam1 q -### math mode entered at line 516 -\left"161361 -\mathord -.\fam1 p -### math mode entered at line 515 -### restricted horizontal mode entered at line 514 -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.527 ... \right]\showlists - - - -### math mode entered at line 516 -\left"161361 -\mathord -.\fam1 p -\mathinner -.\left"161361 -.\fraction, thickness = default -.\\mathord -.\.\fam1 q -./\mathord -./.\fam1 r -./\mathinner -./.\left"161361 -./.\mathord -./..\fam1 p -./.\middle"142342 -./.\mathord -./..\fam1 q -./.\middle"142342 -./.\mathord -./..\fam1 q -./.\mathinner -./..\left"161361 -./..\mathord -./...\fam1 p -./..\middle"142342 -./..\mathord -./...\fam1 q -./..\middle"142342 -./..\fraction, thickness = default -./..\\mathord -./..\.\fam1 q -./../\mathord -./../.\fam1 r -./..\right"162362 -./.\right"162362 -.\right"162362 -### math mode entered at line 515 -### restricted horizontal mode entered at line 514 -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.528 \right]\showlists - - - -### math mode entered at line 515 -\mathinner -.\left"161361 -.\mathord -..\fam1 p -.\mathinner -..\left"161361 -..\fraction, thickness = default -..\\mathord -..\.\fam1 q -../\mathord -../.\fam1 r -../\mathinner -../.\left"161361 -../.\mathord -../..\fam1 p -../.\middle"142342 -../.\mathord -../..\fam1 q -../.\middle"142342 -../.\mathord -../..\fam1 q -../.\mathinner -../..\left"161361 -../..\mathord -../...\fam1 p -../..\middle"142342 -../..\mathord -../...\fam1 q -../..\middle"142342 -../..\fraction, thickness = default -../..\\mathord -../..\.\fam1 q -../../\mathord -../../.\fam1 r -../..\right"162362 -../.\right"162362 -..\right"162362 -.\right"162362 -### restricted horizontal mode entered at line 514 -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.529 \right]\showlists - - - -### restricted horizontal mode entered at line 514 -\mathon -\hbox(30.99977+16.99977)x80.99994 -.\hbox(14.00002+2.0)x6.00002, shifted -0.99998 -..\bigtrip a -.\trip p -.\glue(\thinmuskip) 4.99988 plus 0.99997 -.\hbox(30.99977+16.99977)x63.00005 -..\hbox(14.00002+2.0)x6.00002, shifted -0.99998 -...\bigtrip a -..\hbox(8.5+16.49994)x50.00003 -...\hbox(0.0+0.0)x0.0, shifted -7.0 -...\vbox(8.5+16.49994)x50.00003 -....\hbox(0.0+0.0)x50.00003, glue set 25.00002fil -.....\glue 0.0 plus 1.0fil minus 1.0fil -.....\trip q -.....\glue 0.0 plus 1.0fil minus 1.0fil -....\kern1.0 -....\rule(1.0+0.0)x* -....\kern1.0 -....\hbox(17.99997+3.99997)x50.00003 -.....\trip r -.....\hbox(17.99997+3.99997)x50.00003 -......\hbox(14.00002+2.0)x6.00002, shifted -0.99998 -.......\bigtrip a -......\trip p -......\hbox(16.0+4.00002)x6.0, shifted -1.0 -.......\bigtrip B -......\trip q -......\hbox(16.0+4.00002)x6.0, shifted -1.0 -.......\bigtrip B -......\trip q -......\hbox(17.0+3.00002)x25.00002 -.......\hbox(14.00002+2.0)x6.00002, shifted -0.99998 -........\bigtrip a -.......\trip p -.......\hbox(16.0+4.00002)x6.0, shifted -1.0 -........\bigtrip B -.......\trip q -.......\hbox(16.0+4.00002)x6.0, shifted -1.0 -........\bigtrip B -.......\hbox(8.5+2.0)x0.0 -........\hbox(0.0+0.0)x0.0, shifted -7.0 -........\vbox(8.5+2.0)x0.0 -.........\hbox(0.0+0.0)x0.0 -..........\trip q -.........\kern1.0 -.........\rule(1.0+0.0)x* -.........\kern8.5 -.........\hbox(0.0+0.0)x0.0 -..........\trip r -........\hbox(0.0+0.0)x0.0, shifted -7.0 -.......\vbox(7.0+11.0)x7.0, shifted -9.0 -........\hbox(7.0+1.0)x3.0 -.........\trip A -........\hbox(8.0+2.0)x3.0 -.........\trip B -......\vbox(-1.00002+22.99995)x7.0, shifted -18.99998 -.......\hbox(-1.00002+2.0)x7.0 -........\trip ^^@ -.......\hbox(-1.00002+2.0)x7.0 -........\trip ^^@ -.......\hbox(7.0+1.0)x3.0 -........\trip A -.......\hbox(-1.00002+2.0)x7.0 -........\trip ^^@ -.......\hbox(-1.00002+2.0)x7.0 -........\trip ^^@ -.......\hbox(8.0+2.0)x3.0 -........\trip B -...\hbox(0.0+0.0)x0.0, shifted -7.0 -..\vbox(-1.00002+48.99956)x7.0, shifted -31.99979 -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(7.0+1.0)x3.0 -....\trip A -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(-1.00002+2.0)x7.0 -....\trip ^^@ -...\hbox(8.0+2.0)x3.0 -....\trip B -.\vbox(-1.00002+48.99956)x7.0, shifted -31.99979 -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(7.0+1.0)x3.0 -...\trip A -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(8.0+2.0)x3.0 -...\trip B -\mathoff -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.530 $\showlists - - - -### restricted horizontal mode entered at line 532 -\mathon -\hbox(17.0+3.00002)x19.00002 -.\hbox(14.00002+2.0)x6.00002, shifted -0.99998 -..\bigtrip a -.\hbox(16.0+4.00002)x6.0, shifted -1.0 -..\bigtrip B -.\trip p -.\hbox(0.0+0.0)x0.0, shifted -16.5 -.\vbox(-1.00002+20.99998)x7.0, shifted -18.0 -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(7.0+1.0)x3.0 -...\trip A -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(8.0+2.0)x3.0 -...\trip B -\mathoff -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.534 ...box{}\right]$\showlists - } - - -### restricted horizontal mode entered at line 535 -\mathon -\hbox(17.99997+3.99997)x19.00002 -.\hbox(14.00002+2.0)x6.00002, shifted -0.99998 -..\bigtrip a -.\hbox(0.0+0.0)x0.0, shifted 3.0 -.\hbox(16.0+4.00002)x6.0, shifted -1.0 -..\bigtrip B -.\trip s -.\vbox(-1.00002+22.99995)x7.0, shifted -18.99998 -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(7.0+1.0)x3.0 -...\trip A -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(-1.00002+2.0)x7.0 -...\trip ^^@ -..\hbox(8.0+2.0)x3.0 -...\trip B -\mathoff -spacefactor 1000 -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -l.537 \right]$\showlists - } - -Checking TeX--XeT enhancements: - -\endL or \endR problem (0 missing, 1 extra) in paragraph at lines 550--5 -50 -[][][][][][] - -\hbox(0.0+0.0)x10.0, glue set 3.5fil -.\hbox(0.0+0.0)x0.5 -.\beginL -.\beginR -.\kern 3.0 -.\penalty 0 -.\hbox(0.0+0.0)x0.0 -.\kern 3.0 -.\kern 0.0 -.\endR -.\endL -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fil -.\glue(\rightskip) 0.0 - - -\endL or \endR problem (0 missing, 2 extra) in paragraph at lines 551--5 -51 -[] - -\hbox(0.0+0.0)x10.0, glue set 5.5fil -.\hbox(0.0+0.0)x0.5 -.\kern 0.0 -.\kern 4.0 -.\kern 0.0 -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fil -.\glue(\rightskip) 0.0 - -> \box0= -\vbox(0.0+0.0)x10.0 -.\hbox(0.0+0.0)x10.0, glue set 8.5fil -..\hbox(0.0+0.0)x0.5 -..\beginL -..\kern 1.0 -..\penalty 10000 -..\glue(\parfillskip) 0.0 plus 1.0fil -..\endL -..\glue(\rightskip) 0.0 -.\glue(\parskip) 0.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x10.0, glue set 7.5fil -..\hbox(0.0+0.0)x0.5 -..\beginR -..\kern 2.0 -..\penalty 10000 -..\glue(\parfillskip) 0.0 plus 1.0fil -..\endR -..\glue(\rightskip) 0.0 -.\glue(\parskip) 0.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x10.0, glue set 3.5fil -..\hbox(0.0+0.0)x0.5 -..\beginL -..\beginR -..\kern 3.0 -..\penalty 0 -..\hbox(0.0+0.0)x0.0 -..\kern 3.0 -..\kern 0.0 -..\endR -..\endL -..\penalty 10000 -..\glue(\parfillskip) 0.0 plus 1.0fil -..\glue(\rightskip) 0.0 -.\glue(\parskip) 0.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x10.0, glue set 5.5fil -..\hbox(0.0+0.0)x0.5 -..\kern 0.0 -..\kern 4.0 -..\kern 0.0 -..\penalty 10000 -..\glue(\parfillskip) 0.0 plus 1.0fil -..\glue(\rightskip) 0.0 - -! OK. -l.552 \showbox0 - - -Checking optimized \aftergroup: -! Undefined control sequence. -<to be read again> \x - }{\relax -l.564 ...roup{\aftergroup\relax} - } -The control sequence at the end of the top line -of your error message was never \def'ed. If you have -misspelled it (e.g., `\hobx'), type `I' and the correct -spelling (e.g., `I\hbox'). Otherwise just continue, -and I'll forget about whatever was undefined. - -Checking \showifs, \currentiftype, \currentiflevel, and \currentifbranch -: -\currentifbranch OK -current if level (l.583): 0 -current if level (l.584): 1 -current if level (l.585): 2 -current if type (l.603): \if!NONE -current if branch (l.603): no branch -current if type (l.604): \if -current if branch (l.604): true branch -current if type (l.604): \unless\if -current if branch (l.604): false branch -current if type (l.605): \if -current if branch (l.605): false branch -current if type (l.605): \unless\if -current if branch (l.605): true branch -current if type (l.606): \ifcat -current if branch (l.606): true branch -current if type (l.606): \unless\ifcat -current if branch (l.606): false branch -current if type (l.607): \ifcat -current if branch (l.607): false branch -current if type (l.607): \unless\ifcat -current if branch (l.607): true branch -current if type (l.608): \ifnum -current if branch (l.608): true branch -current if type (l.608): \unless\ifnum -current if branch (l.608): true branch -current if type (l.609): \ifdim -current if branch (l.609): false branch -current if type (l.609): \unless\ifdim -current if branch (l.609): true branch -current if type (l.610): \ifodd -current if branch (l.610): true branch -current if type (l.610): \unless\ifodd -current if branch (l.610): false branch -current if type (l.612): \ifvmode -current if branch (l.612): true branch -current if type (l.612): \unless\ifvmode -current if branch (l.612): false branch -current if type (l.615): \ifhmode -current if branch (l.615): true branch -current if type (l.615): \unless\ifhmode -current if branch (l.615): false branch -current if type (l.617): \ifmmode -current if branch (l.617): true branch -current if type (l.617): \unless\ifmmode -current if branch (l.617): false branch -current if type (l.619): \ifinner -current if branch (l.619): true branch -current if type (l.621): \unless\ifinner -current if branch (l.621): true branch -current if type (l.622): \ifvoid -current if branch (l.622): true branch -current if type (l.622): \unless\ifvoid -current if branch (l.622): true branch -current if type (l.623): \ifhbox -current if branch (l.623): true branch -current if type (l.623): \unless\ifhbox -current if branch (l.623): true branch -current if type (l.624): \ifvbox -current if branch (l.624): true branch -current if type (l.624): \unless\ifvbox -current if branch (l.624): true branch -current if type (l.625): \ifx -current if branch (l.625): false branch -current if type (l.625): \unless\ifx -current if branch (l.625): true branch -current if type (l.626): \ifeof -current if branch (l.626): true branch -current if type (l.626): \unless\ifeof -current if branch (l.626): false branch -current if type (l.627): \iftrue -current if branch (l.627): true branch -current if type (l.627): \unless\iftrue -current if branch (l.627): false branch -current if type (l.628): \iffalse -current if branch (l.628): false branch -current if type (l.628): \unless\iffalse -current if branch (l.628): true branch -current if type (l.629): \ifcase -current if branch (l.629): true branch -current if type (l.629): \ifcase -current if branch (l.629): false branch -current if type (l.630): \ifdefined -current if branch (l.630): true branch -current if type (l.630): \unless\ifdefined -current if branch (l.630): true branch -current if type (l.631): \ifcsname -current if branch (l.631): true branch -current if type (l.632): \unless\ifcsname -current if branch (l.632): true branch -current if type (l.633): \iffontchar -current if branch (l.633): true branch -current if type (l.633): \unless\iffontchar -current if branch (l.633): true branch -{math mode: \ifcsname: (level 41) entered on line 649} -{\unless\ifcsname: (level 42) entered on line 649} -{\iffontchar: (level 43) entered on line 650} -{\unless\iffontchar: (level 44) entered on line 650} - -### level 44: \unless\iffontchar entered on line 650 -### level 43: \iffontchar entered on line 650 -### level 42: \unless\ifcsname entered on line 649 -### level 41: \ifcsname entered on line 649 -### level 40: \unless\ifdefined entered on line 647 -### level 39: \ifdefined entered on line 647 -### level 38: \ifcase\else entered on line 646 -### level 37: \ifcase entered on line 646 -### level 36: \unless\iffalse entered on line 645 -### level 35: \iffalse\else entered on line 645 -### level 34: \unless\iftrue\else entered on line 645 -### level 33: \iftrue entered on line 645 -### level 32: \unless\ifx entered on line 644 -### level 31: \ifx\else entered on line 644 -### level 30: \unless\ifeof\else entered on line 643 -### level 29: \ifeof entered on line 643 -### level 28: \unless\ifvbox entered on line 643 -### level 27: \ifvbox entered on line 643 -### level 26: \unless\ifhbox entered on line 642 -### level 25: \ifhbox entered on line 642 -### level 24: \unless\ifvoid entered on line 642 -### level 23: \ifvoid entered on line 642 -### level 22: \unless\ifinner\else entered on line 641 -### level 21: \ifinner entered on line 641 -### level 20: \unless\ifmmode\else entered on line 641 -### level 19: \ifmmode entered on line 641 -### level 18: \unless\ifhmode\else entered on line 640 -### level 17: \ifhmode entered on line 640 -### level 16: \unless\ifvmode\else entered on line 639 -### level 15: \ifvmode entered on line 639 -### level 14: \unless\ifodd\else entered on line 638 -### level 13: \ifodd entered on line 638 -### level 12: \unless\ifdim entered on line 637 -### level 11: \ifdim\else entered on line 637 -### level 10: \unless\ifnum entered on line 637 -### level 9: \ifnum entered on line 637 -### level 8: \unless\ifcat entered on line 636 -### level 7: \ifcat\else entered on line 636 -### level 6: \unless\ifcat\else entered on line 636 -### level 5: \ifcat entered on line 636 -### level 4: \unless\if entered on line 635 -### level 3: \if\else entered on line 635 -### level 2: \unless\if\else entered on line 635 -### level 1: \if entered on line 635 - -! OK. -l.651 \showifs - % <== show 44 nested ifs - -{\fi: \unless\iffontchar (level 44) entered on line 650} -{\fi: \iffontchar (level 43) entered on line 650} -{\fi: \unless\ifcsname (level 42) entered on line 649} -{\fi: \ifcsname (level 41) entered on line 649} -Checking \iffontchar, \fontcharwd, etc.: -! Missing font identifier. -<to be read again> - \relax -... -l.674 \iffontchar \else - \fi % <== missing font identifie... -I was looking for a control sequence whose -current meaning has been defined by \font. - -! Missing number, treated as zero. -<to be read again> - \relax -... -l.674 \iffontchar \else - \fi % <== missing font identifie... -A number should have been here; I inserted `0'. -(If you can't figure out why I needed to see a number, -look up `weird error' in the index to The TeXbook.) - -! Bad character code (-1). -l.675 ...ffontchar\textfont2 -1 - \else \fi % <== bad charac... -A character number must be between 0 and 255. -I changed this one to zero. - -! Bad character code (256). -l.676 \iffontchar\font 256 - \else \fi % <== bad character... -A character number must be between 0 and 255. -I changed this one to zero. - -! You can't use `\fontcharwd' in vertical mode. -l.677 \fontcharwd - \fontcharht \fontchardp \fontcharic % ... -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\fontcharht' in vertical mode. -l.677 \fontcharwd \fontcharht - \fontchardp \fontcharic % ... -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\fontchardp' in vertical mode. -l.677 ...\fontcharht \fontchardp - \fontcharic % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\fontcharic' in vertical mode. -l.677 ...\fontchardp \fontcharic - % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -Font \font character A: wd=2.0pt ht=7.0pt dp=1.0pt ic=1.0pt -Font \textfont1 character B: wd=3.0pt ht=8.0pt dp=2.0pt -Font \scriptfont2 character B: wd=1.5pt ht=4.0pt dp=1.0pt -Font \scriptscriptfont3 character B: wd=6.0pt ht=16.0pt dp=4.00002pt -Font \trip character 7: -Font \trip character D does not exist -Font \nullfont character D does not exist -Font \font has 23 characters. -Font \trip has 23 characters. -Font \nullfont has 0 characters. -Checking \parshapelength, \parshapeindent, and \parshapedimen: -! You can't use `\parshapelength' in vertical mode. -l.701 \parshapelength - \parshapeindent \parshapedimen % <... -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\parshapeindent' in vertical mode. -l.701 ...elength \parshapeindent - \parshapedimen % <== can'... -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\parshapedimen' in vertical mode. -l.701 ...peindent \parshapedimen - % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -Parshape test 1 OK -Parshape test 2 OK -Parshape test 3 OK -Parshape test 4 OK -Checking \numexpr, \dimexpr, \glueexpr, and \muexpr: -! You can't use `\numexpr' in vertical mode. -l.765 \numexpr - \dimexpr \glueexpr \muexpr % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\dimexpr' in vertical mode. -l.765 \numexpr \dimexpr - \glueexpr \muexpr % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\glueexpr' in vertical mode. -l.765 ...expr \dimexpr \glueexpr - \muexpr % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\muexpr' in vertical mode. -l.765 ...mexpr \glueexpr \muexpr - % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! Missing ) inserted for expression. -<to be read again> - \9 -l.767 ...unt43=\numexpr ( ( 2 \9 - \dimen43=\dimexpr ... -I was expecting to see `+', `-', `*', `/', or `)'. Didn't. - -! Missing ) inserted for expression. -<to be read again> - \9 -l.767 ...unt43=\numexpr ( ( 2 \9 - \dimen43=\dimexpr ... -I was expecting to see `+', `-', `*', `/', or `)'. Didn't. - -! Missing ) inserted for expression. -<to be read again> - \9 -l.767 ...men43=\dimexpr ( 3pt \9 - -I was expecting to see `+', `-', `*', `/', or `)'. Didn't. - -\numexpr \count 43=2 -\dimexpr \dimen 43=3.0pt -\glueexpr \skip 43=4.0pt plus 3.0fil -\muexpr \muskip 43=5.0mu minus 1.0mu -{into \tracingassigns=5} -{changing \count44=0} -{into \count44=2147483647} -{changing \dimen44=0.0pt} -{into \dimen44=16383.99998pt} -{changing \count44=2147483647} -{into \count44=-2147483647} -{changing \dimen44=16383.99998pt} -{into \dimen44=-16383.99998pt} -{changing \count44=-2147483647} -{into \count44=2147450880} -{changing \dimen44=-16383.99998pt} -{into \dimen44=16383.5pt} -{changing \skip44=0.0pt} -{into \skip44=16383.99998pt} -{changing \skip44=16383.99998pt} -{into \skip44=16384.0pt} -! Dimension too large. -l.780 \dimen45=\skip44 - \dimen45=\dimexpr... -I can't work with sizes bigger than about 19 feet. -Continue and I'll use the largest value I can. - -{changing \dimen45=0.0pt} -{into \dimen45=16383.99998pt} -! Arithmetic overflow. -<recently read> \9 - -l.780 ...5=\dimexpr1sp*\skip44\9 - -I can't evaluate this expression, -since the result is out of range. - -{changing \dimen45=16383.99998pt} -{into \dimen45=0.0pt} -{changing \dimen44=16383.5pt} -{into \dimen44=-16383.99998pt} -{changing \dimen44=-16383.99998pt} -{into \dimen44=-16384.0pt} -! Dimension too large. -l.782 \dimen45=\skip44 - \dimen45=\dimexpr... -I can't work with sizes bigger than about 19 feet. -Continue and I'll use the largest value I can. - -{changing \dimen45=0.0pt} -{into \dimen45=16383.99998pt} -! Arithmetic overflow. -<recently read> \9 - -l.782 ...5=\dimexpr1sp*\skip44\9 - -I can't evaluate this expression, -since the result is out of range. - -{changing \dimen45=16383.99998pt} -{into \dimen45=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.783 ...4=\numexpr"7FFFFFFE+2\9 - \dimen44=\dimexpr"3FFFFFF... -I can't evaluate this expression, -since the result is out of range. - -{changing \count44=2147450880} -{into \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.783 ...imexpr"3FFFFFFEsp+2sp\9 - -I can't evaluate this expression, -since the result is out of range. - -{changing \dimen44=-16384.0pt} -{into \dimen44=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.784 ...=\numexpr-"7FFFFFFE-2\9 - \dimen44=\dimexpr-"3FFFFFF... -I can't evaluate this expression, -since the result is out of range. - -{reassigning \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.784 ...mexpr-"3FFFFFFEsp-2sp\9 - -I can't evaluate this expression, -since the result is out of range. - -{reassigning \dimen44=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.785 ...=\numexpr"10000*"8000\9 - \dimen44=\dimexpr"8000sp*"... -I can't evaluate this expression, -since the result is out of range. - -{reassigning \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.785 ...\dimexpr"8000sp*"8000\9 - -I can't evaluate this expression, -since the result is out of range. - -{reassigning \dimen44=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.786 ...\numexpr"10000*-"8000\9 - \dimen44=\dimexpr"8000sp*-"... -I can't evaluate this expression, -since the result is out of range. - -{reassigning \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.786 ...dimexpr"8000sp*-"8000\9 - -I can't evaluate this expression, -since the result is out of range. - -{reassigning \dimen44=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.787 ...\numexpr-"10000*"8000\9 - \dimen44=\dimexpr-"8000sp*"... -I can't evaluate this expression, -since the result is out of range. - -{reassigning \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.787 ...dimexpr-"8000sp*"8000\9 - -I can't evaluate this expression, -since the result is out of range. - -{reassigning \dimen44=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.788 ...numexpr-"10000*-"8000\9 - \dimen44=\dimexpr-"8000sp*-"... -I can't evaluate this expression, -since the result is out of range. - -{reassigning \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.788 ...imexpr-"8000sp*-"8000\9 - -I can't evaluate this expression, -since the result is out of range. - -{reassigning \dimen44=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.789 \count44=\numexpr0/0\9 - \dimen44=\dimexpr... -I can't evaluate this expression, -since the result is out of range. - -{reassigning \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.789 ...dimen44=\dimexpr0pt/0\9 - -I can't evaluate this expression, -since the result is out of range. - -{reassigning \dimen44=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.790 \count44=\numexpr1/0\9 - \dimen44=\dimexpr... -I can't evaluate this expression, -since the result is out of range. - -{reassigning \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.790 ...dimen44=\dimexpr1pt/0\9 - -I can't evaluate this expression, -since the result is out of range. - -{reassigning \dimen44=0.0pt} -! Arithmetic overflow. -<recently read> \9 - -l.791 ...\count44=\numexpr-1/0\9 - \dimen44=\dimexpr-... -I can't evaluate this expression, -since the result is out of range. - -{reassigning \count44=0} -! Arithmetic overflow. -<recently read> \9 - -l.791 ...imen44=\dimexpr-1pt/0\9 - -I can't evaluate this expression, -since the result is out of range. - -{reassigning \dimen44=0.0pt} -{into \tracingassigns=5} -{changing \skip93=0.0pt} -{into \skip93=3.0pt minus 1.0fil} -{changing \skip93=3.0pt minus 1.0fil} -{into \skip93=3.0pt minus 1.0fil} -{changing \skip93=3.0pt minus 1.0fil} -{into \skip93=3.0pt minus 1.0fil} -{reassigning \skip93=3.0pt minus 1.0fil} -{changing \skip93=3.0pt minus 1.0fil} -{into \skip93=3.0pt plus 1.0fil} -{changing \skip93=3.0pt plus 1.0fil} -{into \skip93=3.0pt plus 1.0fil} -{reassigning \skip93=3.0pt plus 1.0fil} -{changing \skip93=3.0pt plus 1.0fil} -{into \skip93=2.0pt plus -1.0fil minus 1.0fil} -{changing \skip93=2.0pt plus -1.0fil minus 1.0fil} -{into \skip93=2.0pt plus -1.0fil minus 1.0fil} -{reassigning \skip93=2.0pt plus -1.0fil minus 1.0fil} -{changing \skip93=2.0pt plus -1.0fil minus 1.0fil} -{into \skip93=0.0pt plus 1.0fil minus 1.0fil} -{changing \skip93=0.0pt plus 1.0fil minus 1.0fil} -{into \skip93=1.0pt plus 2.0fil minus 1.0fil} -{changing \skip93=1.0pt plus 2.0fil minus 1.0fil} -{into \skip93=5.0pt minus 1.0fil} -Expr quotient rounding 1 OK -Expr quotient rounding 2 OK -Expr quotient rounding 3 OK -Expr quotient rounding 4 OK -! Incompatible glue units. -<recently read> \9 - -... -l.831 \15{32}{5}{6} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -<to be read again> - p -... -l.831 \15{32}{5}{6} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -<recently read> \relax - -... -l.831 \15{32}{5}{6} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -Expr quotient rounding 5 OK -! Incompatible glue units. -<recently read> \9 - -... -l.832 \16{33}{5}{7} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -<to be read again> - p -... -l.832 \16{33}{5}{7} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -<recently read> \relax - -... -l.832 \16{33}{5}{7} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -Expr quotient rounding 6 OK -! Incompatible glue units. -<recently read> \9 - -... -l.833 \17{25}{4}{6} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -<to be read again> - p -... -l.833 \17{25}{4}{6} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -<recently read> \relax - -... -l.833 \17{25}{4}{6} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -Expr quotient rounding 7 OK -! Incompatible glue units. -<recently read> \9 - -... -l.834 \18{26}{4}{7} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -<to be read again> - p -... -l.834 \18{26}{4}{7} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -<recently read> \relax - -... -l.834 \18{26}{4}{7} - % <== three mu_error's (! Incompatibl... -I'm going to assume that 1mu=1pt when they're mixed. - -Expr quotient rounding 8 OK -Expr fraction rounding 1 OK -Expr fraction rounding 2 OK -! Arithmetic overflow. -<to be read again> - = -\1...\fi \ifdim \dimexpr 1sp*#6= - \dimexpr (#3sp)*(#4)/(#5)\els... -l.862 ...1 "7FFFFFFF 2 "40000000 - -I can't evaluate this expression, -since the result is out of range. - -! Arithmetic overflow. -<inserted text> \relax - -<to be read again> - \else -\1...expr (#3sp)*(#4)/(#5)\else - \2#2 \fi -l.862 ...1 "7FFFFFFF 2 "40000000 - -I can't evaluate this expression, -since the result is out of range. - -Expr fraction rounding 3 OK -[1] -Memory usage before: 53&322; after: 44&322; still untouched: 835 -[1] -Memory usage before: 53&322; after: 44&322; still untouched: 835 -Checking \mutoglue and \gluetomu: -! You can't use `\mutoglue' in vertical mode. -l.905 \mutoglue - \gluetomu % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\gluetomu' in vertical mode. -l.905 \mutoglue \gluetomu - % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! Incompatible glue units. -l.907 ...kip2=\gluetomu\muskip1 - % <== two mu_error's (! Inco... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -l.907 ...kip2=\gluetomu\muskip1 - % <== two mu_error's (! Inco... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -l.908 ...uskip2=\mutoglue\skip1 - % <== two mu_error's (! Inco... -I'm going to assume that 1mu=1pt when they're mixed. - -! Incompatible glue units. -l.908 ...uskip2=\mutoglue\skip1 - % <== two mu_error's (! Inco... -I'm going to assume that 1mu=1pt when they're mixed. - -{into \tracingassigns=1} -{changing \skip1=9.0pt} -{into \skip1=1.0pt plus -2.0pt minus -3.0fil} -{changing \muskip1=9.0mu} -{into \muskip1=1.0mu plus -2.0mu minus -3.0fil} -{changing \skip2=9.0pt} -{into \skip2=-4.0pt plus 5.0fill minus 6.0filll} -{changing \muskip2=9.0mu} -{into \muskip2=-4.0mu plus 5.0fill minus 6.0filll} -{changing \skip3=0.0pt} -{into \skip3=-1.0pt plus 2.0pt minus 3.0fil} -{changing \muskip3=0.0mu} -{into \muskip3=-1.0mu plus 2.0mu minus 3.0fil} -{changing \skip4=0.0pt} -{into \skip4=4.0pt plus -5.0fill minus -6.0filll} -{changing \muskip4=0.0mu} -{into \muskip4=4.0mu plus -5.0fill minus -6.0filll} -Checking (mu)glue identity: -{changing \1=undefined} -{into \1=\relax} -{changing \1=\relax} -{into \1=\skip32767} -{changing \skip32767=0.0pt} -{into \skip32767=7.0pt} -{changing \2=undefined} -{into \2=\relax} -{changing \2=\relax} -{into \2=\muskip32766} -{changing \muskip32766=0.0mu} -{into \muskip32766=7.0mu} -{changing \tracingassigns=1} -{into \tracingassigns=458752} -{reassigning \skip32767=7.0pt} -{reassigning \muskip32766=7.0mu} -{changing \tracingassigns=458752} -Checking \gluestretchorder, \glueshrinkorder, \gluestretch, and \glueshr -ink: -! You can't use `\gluestretchorder' in vertical mode. -l.932 \gluestretchorder - \gluestretch % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\gluestretch' in vertical mode. -l.932 ...retchorder \gluestretch - % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\glueshrinkorder' in vertical mode. -l.933 \glueshrinkorder - \glueshrink % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -! You can't use `\glueshrink' in vertical mode. -l.933 ...shrinkorder \glueshrink - % <== can't use -Sorry, but I'm not programmed to handle this case; -I'll just pretend that you didn't ask for it. -If you're in the wrong mode, you might be able to -return to the right one by typing `I}' or `I$' or `I\par'. - -Checking sparse arrays: -! Bad register code (-1). -<to be read again> - \countdef -... -l.970 \2\countdef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -<to be read again> - \countdef -... -l.970 \2\countdef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -\count32767=0. -! Bad register code (-1). -<to be read again> - \dimendef -... -l.971 \2\dimendef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -<to be read again> - \dimendef -... -l.971 \2\dimendef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -\dimen32767=0.0pt. -! Bad register code (-1). -<to be read again> - \skipdef -... -l.972 \2\skipdef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -<to be read again> - \skipdef -... -l.972 \2\skipdef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -\skip32767=0.0pt. -! Bad register code (-1). -<to be read again> - \muskipdef -... -l.973 \2\muskipdef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -<to be read again> - \muskipdef -... -l.973 \2\muskipdef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -\muskip32767=0.0mu. -! Bad register code (-1). -<to be read again> - \toksdef -... -l.974 \2\toksdef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -<to be read again> - \toksdef -... -l.974 \2\toksdef - % Bad register code (-1) ...and (32768). -A register number must be between 0 and 32767. -I changed this one to zero. - -\toks32767=. -> \9=\dimen256. -l.981 ...8 \let\8=\relax \show\9 - - -{restoring \9=undefined} -{restoring \8=undefined} -{restoring \skip22=0.0pt} -{restoring \dimen21=0.0pt} -{restoring \muskip2200=0.0mu} -{restoring \dimen2100=0.0pt} -{restoring \count2000=0} -{restoring \count20=0} -testing count registers ... -{into \tracingassigns=1} -{reassigning \count2000=0} -{restoring \tracingassigns=0} -\count2000=0, - \count2001=5, - \count2002=7, - \count2002=7. -\count2000=5, - \count2002=12, - \count2002=12. -\count2000=50, - \count2002=120, - \count2002=120. -\count2000=10, - \count2002=24, - \count2002=24. -{into \tracingassigns=1} -{globally changing \count2002=24} -{into \count2002=5} -{changing \count2002=5} -{into \count2002=7} -{globally changing \count2002=7} -{into \count2002=0} -{restoring \tracingassigns=0} -{restoring \1=undefined} -{retaining \count2002=0} -{restoring \count2000=0} -{retaining \count2002=0} -{restoring \count2001=0} -testing dimen registers ... -{into \tracingassigns=1} -{reassigning \dimen2000=0.0pt} -{restoring \tracingassigns=0} -\dimen2000=0.0pt, - \dimen2001=2.5pt, - \dimen2002=3.5pt, - \dimen2002=3.5pt. -\dimen2000=2.5pt, - \dimen2002=6.0pt, - \dimen2002=6.0pt. -\dimen2000=25.0pt, - \dimen2002=60.0pt, - \dimen2002=60.0pt. -\dimen2000=5.0pt, - \dimen2002=12.0pt, - \dimen2002=12.0pt. -{into \tracingassigns=1} -{globally changing \dimen2002=12.0pt} -{into \dimen2002=2.5pt} -{changing \dimen2002=2.5pt} -{into \dimen2002=3.5pt} -{globally changing \dimen2002=3.5pt} -{into \dimen2002=0.0pt} -{restoring \tracingassigns=0} -{restoring \1=undefined} -{retaining \dimen2002=0.0pt} -{restoring \dimen2000=0.0pt} -{retaining \dimen2002=0.0pt} -{restoring \dimen2001=0.0pt} -testing skip registers ... -{into \tracingassigns=1} -{reassigning \skip2000=0.0pt} -{restoring \tracingassigns=0} -\skip2000=0.0pt, - \skip2001=2.5pt plus 1.0fil, - \skip2002=3.5pt minus 1.0fill, - \skip2002=3.5pt minus 1.0fill. -\skip2000=2.5pt plus 1.0fil, - \skip2002=6.0pt plus 1.0fil minus 1.0fill, - \skip2002=6.0pt plus 1.0fil minus 1.0fill. -\skip2000=25.0pt plus 10.0fil, - \skip2002=60.0pt plus 10.0fil minus 10.0fill, - \skip2002=60.0pt plus 10.0fil minus 10.0fill. -\skip2000=5.0pt plus 2.0fil, - \skip2002=12.0pt plus 2.0fil minus 2.0fill, - \skip2002=12.0pt plus 2.0fil minus 2.0fill. -{into \tracingassigns=1} -{globally changing \skip2002=12.0pt plus 2.0fil minus 2.0fill} -{into \skip2002=2.5pt plus 1.0fil} -{changing \skip2002=2.5pt plus 1.0fil} -{into \skip2002=3.5pt minus 1.0fill} -{globally changing \skip2002=3.5pt minus 1.0fill} -{into \skip2002=0.0pt} -{restoring \tracingassigns=0} -{restoring \1=undefined} -{retaining \skip2002=0.0pt} -{restoring \skip2000=0.0pt} -{retaining \skip2002=0.0pt} -{restoring \skip2001=0.0pt} -testing muskip registers ... -{into \tracingassigns=1} -{reassigning \muskip2000=0.0mu} -{restoring \tracingassigns=0} -\muskip2000=0.0mu, - \muskip2001=2.5mu plus 1.0fil, - \muskip2002=3.5mu minus 1.0fill, - \muskip2002=3.5mu minus 1.0fill. -\muskip2000=2.5mu plus 1.0fil, - \muskip2002=6.0mu plus 1.0fil minus 1.0fill, - \muskip2002=6.0mu plus 1.0fil minus 1.0fill. -\muskip2000=25.0mu plus 10.0fil, - \muskip2002=60.0mu plus 10.0fil minus 10.0fill, - \muskip2002=60.0mu plus 10.0fil minus 10.0fill. -\muskip2000=5.0mu plus 2.0fil, - \muskip2002=12.0mu plus 2.0fil minus 2.0fill, - \muskip2002=12.0mu plus 2.0fil minus 2.0fill. -{into \tracingassigns=1} -{globally changing \muskip2002=12.0mu plus 2.0fil minus 2.0fill} -{into \muskip2002=2.5mu plus 1.0fil} -{changing \muskip2002=2.5mu plus 1.0fil} -{into \muskip2002=3.5mu minus 1.0fill} -{globally changing \muskip2002=3.5mu minus 1.0fill} -{into \muskip2002=0.0mu} -{restoring \tracingassigns=0} -{restoring \1=undefined} -{retaining \muskip2002=0.0mu} -{restoring \muskip2000=0.0mu} -{retaining \muskip2002=0.0mu} -{restoring \muskip2001=0.0mu} -testing toks registers ... -{into \tracingassigns=1} -{reassigning \toks2000=} -{restoring \tracingassigns=0} -\toks2000=, - \toks2001=a b c, - \toks2002=d e f, - \toks2002=d e f. -{into \tracingassigns=1} -{reassigning \toks20=} -{changing \toks21=} -{into \toks21=a b c} -{changing \toks2100=} -{into \toks2100=d e f} -{changing \toks2002=d e f} -{into \toks2002=} -{changing \toks2002=} -{into \toks2002=a b c} -{reassigning \toks2200=} -{changing \toks2200=} -{into \toks2200=a b c} -{changing \toks2002=a b c} -{into \toks2002=} -{changing \toks2002=} -{into \toks2002=a b c} -{changing \toks2200=a b c} -{into \toks2200=} -{changing \toks2200=} -{into \toks2200=a b c} -{changing \toks30=} -{into \toks30=a b c} -{changing \toks30=a b c} -{into \toks30=} -{changing \toks30=} -{into \toks30=a b c} -{changing \toks3000=} -{into \toks3000=a b c} -{changing \toks3000=a b c} -{into \toks3000=} -{changing \toks3000=} -{into \toks3000=a b c} -{restoring \toks30=} -{restoring \toks3000=} -{restoring \toks2200=} -{restoring \toks2002=d e f} -{restoring \toks2100=} -{restoring \toks21=} -{restoring \tracingassigns=0} -{into \tracingassigns=1} -{globally changing \toks2002=d e f} -{into \toks2002=a b c} -{changing \toks2002=a b c} -{into \toks2002=d e f} -{globally changing \toks2002=d e f} -{into \toks2002=} -{restoring \tracingassigns=0} -{restoring \1=undefined} -{retaining \toks2002=} -{retaining \toks2002=} -{restoring \toks2001=} -testing box registers ... -! Bad mathchar (-1). -<to be read again> - \mathchardef -... -l.1024 \2\mathchardef - % Bad mathchar (-1) ...and (32768). -A mathchar number must be between 0 and 32767. -I changed this one to zero. - -! Bad mathchar (32768). -<to be read again> - \mathchardef -... -l.1024 \2\mathchardef - % Bad mathchar (-1) ...and (32768). -A mathchar number must be between 0 and 32767. -I changed this one to zero. - -\mathchar"7FFF=32767. -! Bad register code (-1). -<to be read again> - = -l.1025 \setbox-1= - \copy32768 % Bad register code (-1) ...and... -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -l.1025 \setbox-1=\copy32768 - % Bad register code (-1) ...and... -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -<to be read again> - = -l.1026 \global\setbox32768= - \copy-1 % Bad register code (327... -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (-1). -l.1026 ...l\setbox32768=\copy-1 - % Bad register code (32768) .... -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (32768). -<to be read again> - = -l.1027 \wd32768= - \ht-1 % Bad register code (32768) ...and (-1). -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (-1). -l.1027 \wd32768=\ht-1 - % Bad register code (32768) ...and (-1). -A register number must be between 0 and 32767. -I changed this one to zero. - -! Bad register code (-1). -l.1028 \showbox-1 - % Bad register code (-1). -A register number must be between 0 and 32767. -I changed this one to zero. - -> \box0=void - -! OK. -l.1028 \showbox-1 - % Bad register code (-1). - - -### vtop group (level 4) entered at line 1041 (\setbox32103=\vtop to7.0p -t{) -### vbox group (level 3) entered at line 1040 (\global\setbox32102=\vbox - to5.0pt{) -### hbox group (level 2) entered at line 1039 (\setbox32101=\hbox to3.0p -t{) -### semi simple group (level 1) entered at line 1021 (\begingroup) -### bottom level - -! OK. -l.1042 \showgroups - - -{restoring \box32103=void} -> \box32100=void - -! OK. -l.1046 \showbox32100 - - -> \box32101= -\hbox(0.0+0.0)x3.0 - -! OK. -l.1047 \showbox32101 - - -\box32101=\hbox,wd=3.0pt. -\box32102=\vbox,ht=5.0pt. -\box32103=void. -\box32101=\hbox,wd=3.0pt. -\box32103=\hbox,wd=3.0pt. -\box32102=void. -\box32104=\vbox,ht=5.0pt. -\box32101=\hbox,ht=2.0pt,wd=3.0pt. -\box32102=void. -\box32103=\hbox,dp=6.0pt,wd=3.0pt. -\box32104=\vbox,ht=5.0pt,wd=8.0pt. -\box32105=\hbox,ht=1.0pt,wd=5.0pt. -\box32105=\hbox,ht=1.0pt,wd=5.0pt. -\box32105=void. -\box32105=void. -\box32106=\hbox,ht=1.0pt,wd=10.0pt. -\box32105=\vbox,ht=5.0pt,wd=1.0pt. -\box32105=\vbox,ht=5.0pt,wd=1.0pt. -\box32105=void. -\box32105=void. -\box32106=\vbox,ht=10.0pt,wd=1.0pt. -\box32105=\vbox,ht=30.0pt. -\box32106=\vbox,ht=10.0pt. -\box32105=\vbox,ht=20.0pt. -{restoring \box32106=void} -{restoring \box32105=void} -{restoring \box32104=void} -{restoring \box32103=void} -{restoring \box32101=void} -Checking \lastlinefit: -@firstpass -[] [] -@ via @@0 b=371 p=0 d=137641 -@@1: line 1.0 t=137641 -> @@0 -[] -@ via @@0 b=12 p=0 d=144 -@@2: line 1.2 t=144 -> @@0 -[] -@ via @@1 b=371 p=0 d=137641 -@@3: line 2.0 t=275282 -> @@1 -[] -@\par via @@1 b=12 p=-10000 d=144 -@\par via @@2 b=0 p=-10000 d=0 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=144 -> @@2 - -> \box0= -\vbox(0.0+0.0)x96.0 -.\hbox(0.0+0.0)x96.0, glue set - 0.5 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x96.0, glue set 31.0fill [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1081 \lastlinefit=-1 \1 - - -> \box0= -\hbox(0.0+0.0)x96.0, glue set 31.0fill -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fill -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1081 \lastlinefit=-1 \1 - - -@firstpass -[] [] -@ via @@0 b=371 p=0 d=137641 -@@1: line 1.0 t=137641 s=31.0 g=20.0 -> @@0 -[] -@ via @@0 b=12 p=0 d=144 -@@2: line 1.2 t=144 s=-4.0 g=8.0 -> @@0 -[] -@ via @@1 b=371 p=0 d=137641 -@@3: line 2.0 t=275282 s=31.0 g=20.0 -> @@1 -[] -@\par via @@1 b=12 p=-10000 d=144 -@\par via @@2 b=2 p=-10000 d=4 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=148 s=31.0 a=-1.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x96.0 -.\hbox(0.0+0.0)x96.0, glue set - 0.5 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x96.0, glue set - 0.25 [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1082 \lastlinefit=500 \1 - - -> \box0= -\hbox(0.0+0.0)x96.0, glue set - 0.25 -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 32.0 -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1082 \lastlinefit=500 \1 - - -@firstpass -[] [] -@ via @@0 b=371 p=0 d=137641 -@@1: line 1.0 t=137641 s=31.0 g=20.0 -> @@0 -[] -@ via @@0 b=12 p=0 d=144 -@@2: line 1.2 t=144 s=-4.0 g=8.0 -> @@0 -[] -@ via @@1 b=371 p=0 d=137641 -@@3: line 2.0 t=275282 s=31.0 g=20.0 -> @@1 -[] -@\par via @@1 b=12 p=-10000 d=144 -@\par via @@2 b=12 p=-10000 d=144 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=288 s=31.0 a=-2.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x96.0 -.\hbox(0.0+0.0)x96.0, glue set - 0.5 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x96.0, glue set - 0.5 [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1083 \lastlinefit=1001 \1 - - -> \box0= -\hbox(0.0+0.0)x96.0, glue set - 0.5 -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 33.0 -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1083 \lastlinefit=1001 \1 - - -@firstpass -[] -@ via @@0 b=0 p=0 d=0 -@@1: line 1.2 t=0 -> @@0 -[] -@ via @@0 b=0 p=0 d=0 -@ via @@1 b=0 p=0 d=0 -@@2: line 2.2 t=0 -> @@1 -[] -@ via @@0 b=2 p=0 d=4 -@ via @@1 b=0 p=0 d=0 -@ via @@2 b=0 p=0 d=0 -@@3: line 3.2 t=0 -> @@2 -[] -@ via @@1 b=2 p=0 d=4 -@ via @@2 b=0 p=0 d=0 -@ via @@3 b=0 p=0 d=0 -@@4: line 4.2 t=0 -> @@3 -[] -@\par via @@2 b=2 p=-10000 d=4 -@\par via @@3 b=0 p=-10000 d=0 -@\par via @@4 b=0 p=-10000 d=0 -@@5: line 5.2- t=0 -> @@4 - -> \box0= -\vbox(0.0+0.0)x98.0 -.\hbox(0.0+0.0)x98.0, glue set 68.0fill [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x98.0, glue set 68.0fill [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x98.0, glue set 68.0fill [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x98.0, glue set 68.0fill [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x98.0, glue set 34.0fill [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1087 ... \lastlinefit=1000 \1 - - -> \box0= -\hbox(0.0+0.0)x98.0, glue set 34.0fill -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fill -.\glue(\rightskip) 0.0 plus 1.0fill - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1087 ... \lastlinefit=1000 \1 - - -@firstpass -[] [] -@ via @@0 b=449 p=0 d=201601 -@@1: line 1.0 t=201601 s=33.0 g=20.0 -> @@0 -[] -@ via @@0 b=2 p=0 d=4 -@@2: line 1.2 t=4 s=-2.0 g=8.0 -> @@0 -[] -@ via @@1 b=449 p=0 d=201601 -@@3: line 2.0 t=403202 s=33.0 g=20.0 -> @@1 -[] -@\par via @@1 b=2 p=-10000 d=4 -@\par via @@2 b=0 p=-10000 d=0 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=4 s=33.0 a=-0.5 -> @@2 - -> \box0= -\vbox(0.0+0.0)x98.0 -.\hbox(0.0+0.0)x98.0, glue set - 0.25 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x98.0, glue set - 0.125 [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1089 \lastlinefit=500 \1 - - -> \box0= -\hbox(0.0+0.0)x98.0, glue set - 0.125 -.\glue(\leftskip) 0.0 plus -1.0fill -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 33.5 -.\glue(\rightskip) 0.0 plus 1.0fill - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1089 \lastlinefit=500 \1 - - -@firstpass -[] [] -@ via @@0 b=449 p=0 d=201601 -@@1: line 1.0 t=201601 s=33.0 g=20.0 -> @@0 -[] -@ via @@0 b=2 p=0 d=4 -@@2: line 1.2 t=4 s=-2.0 g=8.0 -> @@0 -[] -@ via @@1 b=449 p=0 d=201601 -@@3: line 2.0 t=403202 s=33.0 g=20.0 -> @@1 -[] -@\par via @@1 b=2 p=-10000 d=4 -@\par via @@2 b=2 p=-10000 d=4 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=8 s=33.0 a=-1.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x98.0 -.\hbox(0.0+0.0)x98.0, glue set - 0.25 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x98.0, glue set - 0.25 [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1091 \lastlinefit=1000 \1 - - -> \box0= -\hbox(0.0+0.0)x98.0, glue set - 0.25 -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 34.0 -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1091 \lastlinefit=1000 \1 - - -@firstpass -[] [] -@ via @@0 b=533 p=0 d=284089 -@@1: line 1.0 t=284089 -> @@0 -[] -@ via @@0 b=0 p=0 d=0 -@@2: line 1.2 t=0 -> @@0 -[] -@ via @@1 b=533 p=0 d=284089 -@@3: line 2.0 t=568178 -> @@1 -[] -@\par via @@1 b=0 p=-10000 d=0 -@\par via @@2 b=0 p=-10000 d=0 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x100.0 -.\hbox(0.0+0.0)x100.0 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x100.0, glue set 35.0fill [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1093 \lastlinefit=0 \1 - - -> \box0= -\hbox(0.0+0.0)x100.0, glue set 35.0fill -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fill -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1093 \lastlinefit=0 \1 - - -@firstpass -[] [] -@ via @@0 b=533 p=0 d=284089 -@@1: line 1.0 t=284089 s=35.0 g=20.0 -> @@0 -[] -@ via @@0 b=0 p=0 d=0 -@@2: line 1.2 t=0 s=0.0 g=0.0 -> @@0 -[] -@ via @@1 b=533 p=0 d=284089 -@@3: line 2.0 t=568178 s=35.0 g=20.0 -> @@1 -[] -@\par via @@1 b=0 p=-10000 d=0 -@\par via @@2 b=0 p=-10000 d=0 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=0 s=0.0 a=0.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x100.0 -.\hbox(0.0+0.0)x100.0 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x100.0, glue set 35.0fill [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1094 \lastlinefit=500 \1 - - -> \box0= -\hbox(0.0+0.0)x100.0, glue set 35.0fill -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fill -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1094 \lastlinefit=500 \1 - - -@firstpass -[] [] -@ via @@0 b=533 p=0 d=284089 -@@1: line 1.0 t=284089 s=35.0 g=20.0 -> @@0 -[] -@ via @@0 b=0 p=0 d=0 -@@2: line 1.2 t=0 s=0.0 g=0.0 -> @@0 -[] -@ via @@1 b=533 p=0 d=284089 -@@3: line 2.0 t=568178 s=35.0 g=20.0 -> @@1 -[] -@\par via @@1 b=0 p=-10000 d=0 -@\par via @@2 b=0 p=-10000 d=0 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=0 s=0.0 a=0.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x100.0 -.\hbox(0.0+0.0)x100.0 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x100.0, glue set 35.0fill [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1095 \lastlinefit=1000 \1 - - -> \box0= -\hbox(0.0+0.0)x100.0, glue set 35.0fill -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fill -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1095 \lastlinefit=1000 \1 - - -@firstpass -[] [] -@ via @@0 b=1137 p=0 d=1292769 -@@1: line 1.0 t=1292769 s=45.0 g=20.0 -> @@0 -[] -@ via @@0 b=2 p=0 d=4 -@@2: line 1.2 t=4 s=10.0 g=40.0 -> @@0 -[] -@ via @@1 b=1137 p=0 d=1292769 -@@3: line 2.0 t=2585538 s=45.0 g=20.0 -> @@1 - [] -@\par via @@1 b=0 p=-10000 d=0 -@\par via @@2 b=0 p=-10000 d=0 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=4 s=0.0 a=0.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x110.0 -.\hbox(0.0+0.0)x110.0, glue set 0.25 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x110.0, glue set 45.0fill [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1099 ... \lastlinefit=1000 \1 - - -> \box0= -\hbox(0.0+0.0)x110.0, glue set 45.0fill -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\glue 0.0 plus 1.0fil -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fill -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1099 ... \lastlinefit=1000 \1 - - -@firstpass -[] [] -@ via @@0 b=1137 p=0 d=1292769 -@@1: line 1.0 t=1292769 s=45.0 g=20.0 -> @@0 -[] -@ via @@0 b=2 p=0 d=4 -@@2: line 1.2 t=4 s=10.0 g=40.0 -> @@0 -[] -@ via @@1 b=1137 p=0 d=1292769 -@@3: line 2.0 t=2585538 s=45.0 g=20.0 -> @@1 -[] -@\par via @@1 b=2 p=-10000 d=4 -@\par via @@2 b=0 p=-10000 d=0 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=4 s=45.0 a=2.5 -> @@2 - -> \box0= -\vbox(0.0+0.0)x110.0 -.\hbox(0.0+0.0)x110.0, glue set 0.25 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x110.0, glue set 0.125 [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1101 \lastlinefit=500 \1 - - -> \box0= -\hbox(0.0+0.0)x110.0, glue set 0.125 -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 42.5 -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1101 \lastlinefit=500 \1 - - -@firstpass -[] [] -@ via @@0 b=1137 p=0 d=1292769 -@@1: line 1.0 t=1292769 s=45.0 g=20.0 -> @@0 -[] -@ via @@0 b=2 p=0 d=4 -@@2: line 1.2 t=4 s=10.0 g=40.0 -> @@0 -[] -@ via @@1 b=1137 p=0 d=1292769 -@@3: line 2.0 t=2585538 s=45.0 g=20.0 -> @@1 -[] -@\par via @@1 b=2 p=-10000 d=4 -@\par via @@2 b=2 p=-10000 d=4 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=8 s=45.0 a=5.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x110.0 -.\hbox(0.0+0.0)x110.0, glue set 0.25 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x110.0, glue set 0.25 [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1102 \lastlinefit=1000 \1 - - -> \box0= -\hbox(0.0+0.0)x110.0, glue set 0.25 -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 40.0 -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1102 \lastlinefit=1000 \1 - - -@firstpass -[] [] -@ via @@0 b=2073 p=0 d=4297329 -@@1: line 1.0 t=4297329 -> @@0 -[] -@ via @@0 b=12 p=0 d=144 -@@2: line 1.2 t=144 -> @@0 -[] -@ via @@1 b=2073 p=0 d=4297329 -@@3: line 2.0 t=8594658 -> @@1 -[] -@\par via @@1 b=0 p=-10000 d=0 -@\par via @@2 b=0 p=-10000 d=0 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=144 -> @@2 - -> \box0= -\vbox(0.0+0.0)x120.0 -.\hbox(0.0+0.0)x120.0, glue set 0.5 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x120.0, glue set 55.0fill [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1104 \lastlinefit=0 \1 - - -> \box0= -\hbox(0.0+0.0)x120.0, glue set 55.0fill -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 0.0 plus 1.0fill -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1104 \lastlinefit=0 \1 - - -@firstpass -[] [] -@ via @@0 b=2073 p=0 d=4297329 -@@1: line 1.0 t=4297329 s=55.0 g=20.0 -> @@0 -[] -@ via @@0 b=12 p=0 d=144 -@@2: line 1.2 t=144 s=20.0 g=40.0 -> @@0 -[] -@ via @@1 b=2073 p=0 d=4297329 -@@3: line 2.0 t=8594658 s=55.0 g=20.0 -> @@1 -[] -@\par via @@1 b=12 p=-10000 d=144 -@\par via @@2 b=2 p=-10000 d=4 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=148 s=55.0 a=5.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x120.0 -.\hbox(0.0+0.0)x120.0, glue set 0.5 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x120.0, glue set 0.25 [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1105 \lastlinefit=500 \1 - - -> \box0= -\hbox(0.0+0.0)x120.0, glue set 0.25 -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 50.0 -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1105 \lastlinefit=500 \1 - - -@firstpass -[] [] -@ via @@0 b=2073 p=0 d=4297329 -@@1: line 1.0 t=4297329 s=55.0 g=20.0 -> @@0 -[] -@ via @@0 b=12 p=0 d=144 -@@2: line 1.2 t=144 s=20.0 g=40.0 -> @@0 -[] -@ via @@1 b=2073 p=0 d=4297329 -@@3: line 2.0 t=8594658 s=55.0 g=20.0 -> @@1 -[] -@\par via @@1 b=12 p=-10000 d=144 -@\par via @@2 b=12 p=-10000 d=144 -@\par via @@3 b=0 p=-10000 d=0 -@@4: line 2.2- t=288 s=55.0 a=10.0 -> @@2 - -> \box0= -\vbox(0.0+0.0)x120.0 -.\hbox(0.0+0.0)x120.0, glue set 0.5 [] -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x120.0, glue set 0.5 [] - -! OK. -\1...nt \2\2\2\2\3\2}\showbox 0 - \setbox 0=\vbox {\unvbox 0 \s... -l.1106 \lastlinefit=1000 \1 - - -> \box0= -\hbox(0.0+0.0)x120.0, glue set 0.5 -.\hbox(0.0+0.0)x30.0 -.\glue 5.0 plus 20.0 minus 4.0 -.\hbox(0.0+0.0)x30.0 -.\penalty 10000 -.\glue(\parfillskip) 45.0 -.\glue(\rightskip) 0.0 - -! OK. -\1...tbox 0=\lastbox \showbox 0 - } -l.1106 \lastlinefit=1000 \1 - - -Checking expansion of V 2 \protected macros: -\1 (l.1115) -\1 (l.1115) -relax (l.1117) -relax (l.1117) -Checking hyphenation and \savinghyphcodes: - -Underfull \hbox (badness 10000) in paragraph at lines 1134--1134 - []\trip pp1Aqq []pp1Aqq []pp1A1qq []pp1Aqq []ppAqq - -\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1134--1134 - []\trip up1Aqq []up1Aqq []up1A1qq []up1Aqq []upAqq - -\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1134--1134 - []\trip ppB1qq []ppB1qq []ppB1qq []pp1B1qq []ppBqq - -\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1134--1134 - []\trip upB1qq []upB1qq []upB1qq []up1B1qq []upBqq - -\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1136--1136 - []\trip pp1A1qq []pp1Aqq []pp1A1qq []pp1Aqq []ppAqq - -\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1136--1136 - []\trip up1A1qq []up1Aqq []up1A1qq []up1Aqq []upAqq - -\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1136--1136 - []\trip ppB1qq []ppB1qq []ppB1qq []pp1B1qq []ppBqq - -\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1136--1136 - []\trip upB1qq []upB1qq []upB1qq []up1B1qq []upBqq - -\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1138--1138 - []\trip pp1Aqq []pp1Aqq []pp1A1qq []pp1Aqq []ppAqq - -\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1138--1138 - []\trip up1Aqq []up1Aqq []up1A1qq []up1Aqq []upAqq - -\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1138--1138 - []\trip pp1B1qq []ppB1qq []ppB1qq []pp1B1qq []ppBqq - -\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1138--1138 - []\trip up1B1qq []upB1qq []upB1qq []up1B1qq []upBqq - -\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1140--1140 - []\trip qq1app []qq1app []qqapp []qq1app []qqapp - -\hbox(7.0+1.0)x16383.99998, glue set 1635.4 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1140--1140 - []\trip qqb1pp []qqb1pp []qqb1pp []qqb1pp []qqbpp - -\hbox(8.0+2.0)x16383.99998, glue set 1634.9 [] - - -Underfull \hbox (badness 10000) in paragraph at lines 1140--1140 - []\trip qqrpp []qqrpp []qq1r1pp []qq1r1pp []qqrpp - -\hbox(0.0+0.0)x16383.99998, glue set 1634.9 [] - -Checking \savingvdiscards, \pagediscards, and \splitdiscards: -! Missing $ inserted. -<inserted text> - $ -... -l.1148 ...oindent$\splitdiscards - \noindent$\pagediscards} -I've inserted a begin-math/end-math symbol since I think -you left one out. Proceed, with fingers crossed. - -! Missing $ inserted. -<inserted text> - $ -... -l.1148 ...noindent$\pagediscards - } -I've inserted a begin-math/end-math symbol since I think -you left one out. Proceed, with fingers crossed. - -> \box27= -\vbox(0.0+0.0)x0.0 -.\hbox(0.0+0.0)x0.0 -..\mathon -..\mathoff -..\penalty 10000 -..\glue(\parfillskip) 0.0 -..\glue(\rightskip) 0.0 -.\glue(\parskip) 0.0 -.\glue(\baselineskip) 0.0 -.\hbox(0.0+0.0)x0.0 -..\mathon -..\mathoff -..\penalty 10000 -..\glue(\parfillskip) 0.0 -..\glue(\rightskip) 0.0 - -! OK. -l.1149 \showbox27 - - -> \box0= -\vbox(40.0+0.0)x0.0 -.\vbox(20.0+0.0)x0.0 -..\vbox(20.0+0.0)x0.0 -..\openout0=abc -..\penalty 0 -..\write1{write 1} -.\vbox(20.0+0.0)x0.0 -..\write2{write 2} -..\closeout3 -..\glue(\splittopskip) 0.0 -..\vbox(20.0+0.0)x0.0 -..\glue 0.0 plus 1.0fil - -! OK. -\1...cards \box 28 } \showbox 0 - } -l.1177 \1 -1 20 - \1 0 30 \1 1 20 \1 2 30 - -> \box0= -\vbox(50.0+0.0)x0.0 -.\vbox(30.0+0.0)x0.0 -..\vbox(20.0+0.0)x0.0 -..\openout0=abc -..\penalty 0 -..\write1{write 1} -..\glue 10.0 plus 1.0 minus 1.0 -..\write2{write 2} -.\vbox(20.0+0.0)x0.0 -..\closeout3 -..\glue(\splittopskip) 0.0 -..\vbox(20.0+0.0)x0.0 -..\glue 0.0 plus 1.0fil - -! OK. -\1...cards \box 28 } \showbox 0 - } -l.1177 \1 -1 20 \1 0 30 - \1 1 20 \1 2 30 - -> \box0= -\vbox(60.0+0.0)x0.0 -.\vbox(20.0+0.0)x0.0 -..\vbox(20.0+0.0)x0.0 -..\openout0=abc -..\penalty 0 -..\write1{write 1} -.\glue 10.0 plus 1.0 minus 1.0 -.\penalty 0 -.\kern 10.0 -.\vbox(20.0+0.0)x0.0 -..\write2{write 2} -..\closeout3 -..\glue(\splittopskip) 0.0 -..\vbox(20.0+0.0)x0.0 -..\glue 0.0 plus 1.0fil - -! OK. -\1...cards \box 28 } \showbox 0 - } -l.1177 ... \1 0 30 \1 1 20 - \1 2 30 - -> \box0= -\vbox(60.0+0.0)x0.0 -.\vbox(30.0+0.0)x0.0 -..\vbox(20.0+0.0)x0.0 -..\openout0=abc -..\penalty 0 -..\write1{write 1} -..\glue 10.0 plus 1.0 minus 1.0 -..\write2{write 2} -.\penalty 0 -.\kern 10.0 -.\vbox(20.0+0.0)x0.0 -..\closeout3 -..\glue(\splittopskip) 0.0 -..\vbox(20.0+0.0)x0.0 -..\glue 0.0 plus 1.0fil - -! OK. -\1...cards \box 28 } \showbox 0 - } -l.1177 ... \1 1 20 \1 2 30 - - - -### internal vertical mode entered at line 1186 -prevdepth ignored -### vertical mode entered at line 0 -### recent contributions: -\glue 0.0 plus 1.0fil -\kern 20.0 -prevdepth 0.0 - -! OK. -\1...{ \pagediscards \showlists - }} -l.1186 ...0 \vfil \kern 20 pt \1 - \penalty -1 \1 - - -### internal vertical mode entered at line 1186 -prevdepth ignored -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -\1...{ \pagediscards \showlists - }} -l.1186 ...0 pt \1 \penalty -1 \1 - - - -### internal vertical mode entered at line 1187 -prevdepth ignored -### vertical mode entered at line 0 -### recent contributions: -\glue 0.0 plus 1.0fill -\kern 2.0 -prevdepth 0.0 - -! OK. -\1...{ \pagediscards \showlists - }} -l.1187 ...1 \vfill \kern 2 pt \1 - \penalty 10 \1 - - -### internal vertical mode entered at line 1187 -\glue 0.0 plus 1.0fill -\kern 2.0 -\penalty 10 -prevdepth ignored -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -\1...{ \pagediscards \showlists - }} -l.1187 ...2 pt \1 \penalty 10 \1 - - -> \box0= -\vbox(12.0+0.0)x0.0 -.\kern 5.0 -.\penalty 0 -.\kern 7.0 -.\glue(\baselineskip) 0.0 - -! OK. -<output> ...scards } \showbox 0 - \showbox 255 \setbox 0 = \box... -l.1192 ...box {} \penalty -10000 - - -> \box255= -\vbox(0.0+0.0)x0.0 -.\write1{} -.\write2{} -.\write3{} -.\glue(\topskip) 0.0 -.\hbox(0.0+0.0)x0.0 - -! OK. -<output> ...wbox 0 \showbox 255 - \setbox 0 = \box 255 \global ... -l.1192 ...box {} \penalty -10000 - - - -### internal vertical mode entered at line 1193 -\penalty 10000 -prevdepth ignored -### vertical mode entered at line 0 -prevdepth 0.0 - -! OK. -\1...{ \pagediscards \showlists - }} -l.1193 \1 - - -Checking \interlinepenalties, \clubpenalties, \widowpenalties, and \disp -laywidowpenalties: -{into \tracingassigns=1} -{changing \tracingrestores=0} -{into \tracingrestores=1} -\interlinepenalties=0 -\clubpenalties=0 -\widowpenalties=0 -\displaywidowpenalties=0 -\interlinepenalties-1=0 -\interlinepenalties0=0 -\interlinepenalties5=0 -\interlinepenalties\interlinepenalties0=0 -\clubpenalties-1=0 -\clubpenalties0=0 -\clubpenalties5=0 -\clubpenalties\clubpenalties0=0 -\widowpenalties-1=0 -\widowpenalties0=0 -\widowpenalties5=0 -\widowpenalties\widowpenalties0=0 -\displaywidowpenalties-1=0 -\displaywidowpenalties0=0 -\displaywidowpenalties5=0 -\displaywidowpenalties\displaywidowpenalties0=0 -{changing \interlinepenalties=0} -{into \interlinepenalties=3 101\ETC.} -{changing \clubpenalties=0} -{into \clubpenalties=1 1} -{changing \clubpenalties=1 1} -{into \clubpenalties=4 201\ETC.} -{changing \widowpenalties=0} -{into \widowpenalties=5 301\ETC.} -{changing \displaywidowpenalties=0} -{into \displaywidowpenalties=6 401\ETC.} -\interlinepenalties=3 101 102 103 -\clubpenalties=4 201 202 203 204 -\widowpenalties=5 301 302 303 304 305 -\displaywidowpenalties=6 401 402 403 404 405 406 -\interlinepenalties-1=0 -\interlinepenalties0=3 -\interlinepenalties5=103 -\interlinepenalties\interlinepenalties0=103 -\clubpenalties-1=0 -\clubpenalties0=4 -\clubpenalties5=204 -\clubpenalties\clubpenalties0=204 -\widowpenalties-1=0 -\widowpenalties0=5 -\widowpenalties5=305 -\widowpenalties\widowpenalties0=305 -\displaywidowpenalties-1=0 -\displaywidowpenalties0=6 -\displaywidowpenalties5=405 -\displaywidowpenalties\displaywidowpenalties0=406 -{changing \interlinepenalties=3 101\ETC.} -{into \interlinepenalties=0} -{restoring \interlinepenalties=3 101\ETC.} -{changing \box0=void} -{into \box0= -\vbox(0.0+0.0)x0.0} -{restoring \box0=void} -{restoring \displaywidowpenalties=0} -{restoring \widowpenalties=0} -{restoring \clubpenalties=0} -{restoring \interlinepenalties=0} -Checking hyphenation of LR and RL segments: - -Overfull \hbox (15.0pt too wide) in paragraph at lines 1256--1256 - \trip MM1 - -\hbox(0.0+0.0)x0.0, glue set - 1.0 -.\glue 4.0 plus 2.0 minus 1.0 -.\trip M -.\trip M -.\discretionary -.\trip 1 -.\trip 7 (ligature |) -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -\trip MM - -\hbox(0.0+0.0)x0.0 -.\trip M -.\trip M -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -[]\trip MM1[] - -\hbox(0.0+0.0)x0.0 -.\beginL -.\trip M -.\trip M -.\discretionary -.\trip 1 -.\trip 7 (ligature |) -.\endL -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -[]\trip MM[] - -\hbox(0.0+0.0)x0.0 -.\beginL -.\trip M -.\trip M -.\endL -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -[]\trip MM1[] - -\hbox(0.0+0.0)x0.0 -.\beginL -.\trip M -.\trip M -.\discretionary -.\trip 1 -.\trip 7 (ligature |) -.\endL -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -[]\trip MM[] - -\hbox(0.0+0.0)x0.0 -.\beginL -.\trip M -.\trip M -.\endL -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -[]\trip MM1[] - -\hbox(0.0+0.0)x0.0 -.\beginL -.\trip M -.\trip M -.\discretionary -.\trip 1 -.\trip 7 (ligature |) -.\endL -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -[]\trip MM[] - -\hbox(0.0+0.0)x0.0 -.\beginL -.\trip M -.\trip M -.\endL -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -[]\trip MM1[] - -\hbox(0.0+0.0)x0.0 -.\beginR -.\trip M -.\trip M -.\discretionary -.\trip 1 -.\trip 7 (ligature |) -.\endR -.\glue(\rightskip) 0.0 - - -Overfull \hbox (12.0pt too wide) in paragraph at lines 1256--1256 -[]\trip MM[] - -\hbox(0.0+0.0)x0.0 -.\beginR -.\trip M -.\trip M -.\endR -.\penalty 10000 -.\glue(\parfillskip) 0.0 -.\glue(\rightskip) 0.0 - - ) -Here is how much of TeX's memory you used: - 19 strings out of 1809 - 145 string characters out of 7742 - 3164 words of memory out of 3999 - 409 multiletter control sequences out of 15000+0 - 3796 words of font info for 5 fonts, out of 20000 for 75 - 10 hyphenation exceptions out of 659 - 10i,15n,8p,137b,79s stack positions out of 200i,40n,60p,500b,600s - -Output written on etrip.dvi (3 pages, 220 bytes). diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip.out b/Build/source/texk/web2c/etexdir/etrip/etrip.out deleted file mode 100644 index 38cd5282c5a..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip.out +++ /dev/null @@ -1,4 +0,0 @@ -\endgroup -\fi -\bgroup -\iffalse \else diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip.pl b/Build/source/texk/web2c/etexdir/etrip/etrip.pl deleted file mode 100644 index 6a38a92316b..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip.pl +++ /dev/null @@ -1,833 +0,0 @@ -(FAMILY UNSPECIFIED) -(FACE F MRR) -(CODINGSCHEME TEX TEST: NOT A REAL FONT) -(DESIGNSIZE R 10.0) -(COMMENT DESIGNSIZE IS IN POINTS) -(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE) -(CHECKSUM O 32107654321) -(FONTDIMEN - (SLANT R -2.0) - (SPACE R 0.400001) - (STRETCH R 0.200001) - (SHRINK R 0.1) - (XHEIGHT R 0.45) - (QUAD R 1.0) - (EXTRASPACE R 0.200001) - (PARAMETER D 8 R 0.05) - (PARAMETER D 9 R 0.1) - (PARAMETER D 10 R 0.200001) - (PARAMETER D 11 R 0.3) - (PARAMETER D 12 R 0.400001) - (PARAMETER D 13 R 0.5) - ) -(BOUNDARYCHAR C Z) -(LIGTABLE - (LABEL C t) - (KRN O 0 R -1.0) - (KRN O 0 R -0.01) - (KRN O 0 R -0.02) - (KRN O 0 R -0.03) - (KRN O 0 R -0.04) - (KRN O 0 R -0.05) - (KRN O 0 R -0.06) - (KRN O 0 R -0.07) - (KRN O 0 R -0.08) - (KRN O 0 R -0.09) - (KRN O 0 R -0.1) - (KRN O 0 R -0.11) - (KRN O 0 R -0.12) - (KRN O 0 R -0.13) - (KRN O 0 R -0.14) - (KRN O 0 R -0.15) - (KRN O 0 R -0.16) - (KRN O 0 R -0.17) - (KRN O 0 R -0.18) - (KRN O 0 R -0.19) - (KRN O 0 R -0.2) - (KRN O 0 R -0.21) - (KRN O 0 R -0.22) - (KRN O 0 R -0.23) - (KRN O 0 R -0.24) - (KRN O 0 R -0.25) - (KRN O 0 R -0.26) - (KRN O 0 R -0.27) - (KRN O 0 R -0.28) - (KRN O 0 R -0.29) - (KRN O 0 R -0.3) - (KRN O 0 R -0.31) - (KRN O 0 R -0.32) - (KRN O 0 R -0.33) - (KRN O 0 R -0.34) - (KRN O 0 R -0.35) - (KRN O 0 R -0.36) - (KRN O 0 R -0.37) - (KRN O 0 R -0.38) - (KRN O 0 R -0.39) - (KRN O 0 R -0.4) - (KRN O 0 R -0.41) - (KRN O 0 R -0.42) - (KRN O 0 R -0.43) - (KRN O 0 R -0.44) - (KRN O 0 R -0.45) - (KRN O 0 R -0.46) - (KRN O 0 R -0.47) - (KRN O 0 R -0.48) - (KRN O 0 R -0.49) - (KRN O 0 R -0.5) - (KRN O 0 R -0.51) - (KRN O 0 R -0.52) - (KRN O 0 R -0.53) - (KRN O 0 R -0.54) - (KRN O 0 R -0.55) - (KRN O 0 R -0.56) - (KRN O 0 R -0.57) - (KRN O 0 R -0.58) - (KRN O 0 R -0.59) - (KRN O 0 R -0.6) - (KRN O 0 R -0.61) - (KRN O 0 R -0.62) - (KRN O 0 R -0.63) - (KRN O 0 R -0.64) - (KRN O 0 R -0.65) - (KRN O 0 R -0.66) - (KRN O 0 R -0.67) - (KRN O 0 R -0.68) - (KRN O 0 R -0.69) - (KRN O 0 R -0.7) - (KRN O 0 R -0.71) - (KRN O 0 R -0.72) - (KRN O 0 R -0.73) - (KRN O 0 R -0.74) - (KRN O 0 R -0.75) - (KRN O 0 R -0.76) - (KRN O 0 R -0.77) - (KRN O 0 R -0.78) - (KRN O 0 R -0.79) - (KRN O 0 R -0.8) - (KRN O 0 R -0.81) - (KRN O 0 R -0.82) - (KRN O 0 R -0.83) - (KRN O 0 R -0.84) - (KRN O 0 R -0.85) - (KRN O 0 R -0.86) - (KRN O 0 R -0.87) - (KRN O 0 R -0.88) - (KRN O 0 R -0.89) - (KRN O 0 R -0.9) - (KRN O 0 R -0.91) - (KRN O 0 R -0.92) - (KRN O 0 R -0.93) - (KRN O 0 R -0.94) - (KRN O 0 R -0.95) - (KRN O 0 R -0.96) - (KRN O 0 R -0.97) - (KRN O 0 R -0.98) - (KRN O 0 R -0.99) - (KRN O 0 R -1.0) - (KRN O 0 R -1.01) - (KRN O 0 R -1.02) - (KRN O 0 R -1.03) - (KRN O 0 R -1.04) - (KRN O 0 R -1.05) - (KRN O 0 R -1.06) - (KRN O 0 R -1.07) - (KRN O 0 R -1.08) - (KRN O 0 R -1.09) - (KRN O 0 R -1.1) - (KRN O 0 R -1.11) - (KRN O 0 R -1.12) - (KRN O 0 R -1.13) - (KRN O 0 R -1.14) - (KRN O 0 R -1.15) - (KRN O 0 R -1.16) - (KRN O 0 R -1.17) - (KRN O 0 R -1.18) - (KRN O 0 R -1.19) - (KRN O 0 R -1.2) - (KRN O 0 R -1.21) - (KRN O 0 R -1.22) - (KRN O 0 R -1.23) - (KRN O 0 R -1.24) - (KRN O 0 R -1.25) - (KRN O 0 R -1.26) - (KRN O 0 R -1.27) - (KRN O 0 R -1.28) - (KRN O 0 R -1.29) - (KRN O 0 R -1.3) - (KRN O 0 R -1.31) - (KRN O 0 R -1.32) - (KRN O 0 R -1.33) - (KRN O 0 R -1.34) - (KRN O 0 R -1.35) - (KRN O 0 R -1.36) - (KRN O 0 R -1.37) - (KRN O 0 R -1.38) - (KRN O 0 R -1.39) - (KRN O 0 R -1.4) - (KRN O 0 R -1.41) - (KRN O 0 R -1.42) - (KRN O 0 R -1.43) - (KRN O 0 R -1.44) - (KRN O 0 R -1.45) - (KRN O 0 R -1.46) - (KRN O 0 R -1.47) - (KRN O 0 R -1.48) - (KRN O 0 R -1.49) - (KRN O 0 R -1.5) - (KRN O 0 R -1.51) - (KRN O 0 R -1.52) - (KRN O 0 R -1.53) - (KRN O 0 R -1.54) - (KRN O 0 R -1.55) - (KRN O 0 R -1.56) - (KRN O 0 R -1.57) - (KRN O 0 R -1.58) - (KRN O 0 R -1.59) - (KRN O 0 R -1.6) - (KRN O 0 R -1.61) - (KRN O 0 R -1.62) - (KRN O 0 R -1.63) - (KRN O 0 R -1.64) - (KRN O 0 R -1.65) - (KRN O 0 R -1.66) - (KRN O 0 R -1.67) - (KRN O 0 R -1.68) - (KRN O 0 R -1.69) - (KRN O 0 R -1.7) - (KRN O 0 R -1.71) - (KRN O 0 R -1.72) - (KRN O 0 R -1.73) - (KRN O 0 R -1.74) - (KRN O 0 R -1.75) - (KRN O 0 R -1.76) - (KRN O 0 R -1.77) - (KRN O 0 R -1.78) - (KRN O 0 R -1.79) - (KRN O 0 R -1.8) - (KRN O 0 R -1.81) - (KRN O 0 R -1.82) - (KRN O 0 R -1.83) - (KRN O 0 R -1.84) - (KRN O 0 R -1.85) - (KRN O 0 R -1.86) - (KRN O 0 R -1.87) - (KRN O 0 R -1.88) - (KRN O 0 R -1.89) - (KRN O 0 R -1.9) - (KRN O 0 R -1.91) - (KRN O 0 R -1.92) - (KRN O 0 R -1.93) - (KRN O 0 R -1.94) - (KRN O 0 R -1.95) - (KRN O 0 R -1.96) - (KRN O 0 R -1.97) - (KRN O 0 R -1.98) - (KRN O 0 R -1.99) - (KRN O 0 R -2.0) - (KRN O 0 R -2.01) - (KRN O 0 R -2.02) - (KRN O 0 R -2.03) - (KRN O 0 R -2.04) - (KRN O 0 R -2.05) - (KRN O 0 R -2.06) - (KRN O 0 R -2.07) - (KRN O 0 R -2.08) - (KRN O 0 R -2.09) - (KRN O 0 R -2.1) - (KRN O 0 R -2.11) - (KRN O 0 R -2.12) - (KRN O 0 R -2.13) - (KRN O 0 R -2.14) - (KRN O 0 R -2.15) - (KRN O 0 R -2.16) - (KRN O 0 R -2.17) - (KRN O 0 R -2.18) - (KRN O 0 R -2.19) - (KRN O 0 R -2.2) - (KRN O 0 R -2.21) - (KRN O 0 R -2.22) - (KRN O 0 R -2.23) - (KRN O 0 R -2.24) - (KRN O 0 R -2.25) - (KRN O 0 R -2.26) - (KRN O 0 R -2.27) - (KRN O 0 R -2.28) - (KRN O 0 R -2.29) - (KRN O 0 R -2.3) - (SKIP D 3) - (LABEL O 55) - (LIG O 0 O 55) - (/LIG> C q C p) - (LABEL O 57) - (KRN C A R 0.1) - (STOP) - (KRN O 0 R -2.31) - (KRN O 0 R -2.32) - (KRN O 0 R -2.33) - (KRN O 0 R -2.34) - (KRN O 0 R -2.35) - (KRN O 0 R -2.36) - (KRN O 0 R -2.37) - (KRN O 0 R -2.38) - (KRN O 0 R -2.39) - (KRN O 0 R -2.4) - (KRN O 0 R -2.41) - (KRN O 0 R -2.42) - (KRN O 0 R -2.43) - (KRN O 0 R -2.44) - (KRN O 0 R -2.45) - (KRN O 0 R -2.46) - (KRN O 0 R -2.47) - (KRN O 0 R -2.48) - (KRN O 0 R -2.49) - (KRN O 0 R -2.5) - (KRN O 0 R -2.51) - (KRN O 0 R -2.52) - (KRN O 0 R -2.53) - (KRN O 0 R -2.54) - (KRN O 0 R -2.55) - (KRN O 0 R -2.56) - (KRN O 0 R -2.57) - (/LIG/>> C r C s) - (SKIP D 9) - (LABEL C p) - (/LIG/ C q C r) - (/LIG/> C r C t) - (LIG C t C t) - (STOP) - (LABEL C q) - (/LIG/ C u C p) - (/LIG/ C s C r) - (KRN C t R 0.1) - (/LIG> C r C t) - (SKIP D 2) - (LABEL C r) - (LIG/ C u C q) - (/LIG C q C u) - (STOP) - (/LIG/ C p C s) - (KRN C s R 0.3) - (STOP) - (LABEL C s) - (LIG/> C p C q) - (KRN C r R 0.1) - (STOP) - (LABEL C u) - (/LIG C Z C p) - (LIG C p C r) - (STOP) - (LABEL BOUNDARYCHAR) - (LIG/ C q C q) - (/LIG C 1 C 5) - (KRN O 55 R -0.1) - (STOP) - (LABEL C 1) - (/LIG/ C 1 C 2) - (/LIG/ C 2 C 3) - (/LIG> O 55 C 1) - (SKIP D 1) - (LABEL C 2) - (/LIG/ C 1 C 3) - (/LIG/ C 3 C 4) - (SKIP D 2) - (LABEL C 3) - (/LIG/ C 1 C 4) - (/LIG/ C 2 C 4) - (/LIG/ C 4 C 5) - (SKIP D 3) - (LABEL C 4) - (/LIG/ C 1 C 5) - (/LIG/ C 2 C 5) - (/LIG/ C 3 C 5) - (/LIG/ C 5 C 6) - (SKIP D 4) - (LABEL C 5) - (/LIG/ C 1 C 6) - (/LIG/ C 2 C 6) - (/LIG/ C 3 C 6) - (/LIG/ C 4 C 6) - (/LIG/ C 6 C 7) - (SKIP D 5) - (LABEL C 6) - (/LIG/ C 1 C 7) - (/LIG/ C 2 C 7) - (/LIG/ C 3 C 7) - (/LIG/ C 4 C 7) - (/LIG/ C 5 C 7) - (/LIG/>> C Z C 7) - (STOP) - (LABEL C 7) - (KRN C Z R 0.1) - (LABEL C A) - (LIG C A C A) - (KRN C B R 0.200001) - (KRN O 55 R 0.3) - (KRN C 1 R -0.200001) - (STOP) - (LABEL C B) - (LIG C B C A) - (LIG O 55 C C) - (KRN C C R 0.400001) - (STOP) - (LABEL C C) - (LIG C A O 202) - (LIG O 57 C B) - (STOP) - ) -(CHARACTER O 0 - (CHARWD R 0.700001) - (CHARHT R -0.1) - (CHARDP R 0.200001) - ) -(CHARACTER O 55 - (CHARWD R -0.5) - (COMMENT - (LIG O 0 O 55) - (/LIG> C q C p) - (KRN C A R 0.1) - ) - ) -(CHARACTER O 57 - (CHARWD R 0.1) - (COMMENT - (KRN C A R 0.1) - ) - ) -(CHARACTER C 1 - (CHARWD R 0.0) - (COMMENT - (/LIG/ C 1 C 2) - (/LIG/ C 2 C 3) - (/LIG> O 55 C 1) - (/LIG/ C 3 C 4) - (/LIG/ C 4 C 5) - (/LIG/ C 5 C 6) - (/LIG/ C 6 C 7) - (/LIG/>> C Z C 7) - ) - ) -(CHARACTER C 2 - (CHARWD R 0.0) - (COMMENT - (/LIG/ C 1 C 3) - (/LIG/ C 3 C 4) - (/LIG/ C 4 C 5) - (/LIG/ C 5 C 6) - (/LIG/ C 6 C 7) - (/LIG/>> C Z C 7) - ) - ) -(CHARACTER C 3 - (CHARWD R 0.0) - (COMMENT - (/LIG/ C 1 C 4) - (/LIG/ C 2 C 4) - (/LIG/ C 4 C 5) - (/LIG/ C 5 C 6) - (/LIG/ C 6 C 7) - (/LIG/>> C Z C 7) - ) - ) -(CHARACTER C 4 - (CHARWD R 0.0) - (COMMENT - (/LIG/ C 1 C 5) - (/LIG/ C 2 C 5) - (/LIG/ C 3 C 5) - (/LIG/ C 5 C 6) - (/LIG/ C 6 C 7) - (/LIG/>> C Z C 7) - ) - ) -(CHARACTER C 5 - (CHARWD R 0.0) - (COMMENT - (/LIG/ C 1 C 6) - (/LIG/ C 2 C 6) - (/LIG/ C 3 C 6) - (/LIG/ C 4 C 6) - (/LIG/ C 6 C 7) - (/LIG/>> C Z C 7) - ) - ) -(CHARACTER C 6 - (CHARWD R 0.0) - (COMMENT - (/LIG/ C 1 C 7) - (/LIG/ C 2 C 7) - (/LIG/ C 3 C 7) - (/LIG/ C 4 C 7) - (/LIG/ C 5 C 7) - (/LIG/>> C Z C 7) - ) - ) -(CHARACTER C 7 - (CHARWD R 0.0) - (COMMENT - (KRN C Z R 0.1) - (LIG C A C A) - (KRN C B R 0.200001) - (KRN O 55 R 0.3) - (KRN C 1 R -0.200001) - ) - ) -(CHARACTER C A - (CHARWD R 0.200001) - (CHARHT R 0.700001) - (CHARDP R 0.1) - (CHARIC R 0.1) - (COMMENT - (LIG C A C A) - (KRN C B R 0.200001) - (KRN O 55 R 0.3) - (KRN C 1 R -0.200001) - ) - ) -(CHARACTER C B - (CHARWD R 0.3) - (CHARHT R 0.8) - (CHARDP R 0.200001) - (COMMENT - (LIG C B C A) - (LIG O 55 C C) - (KRN C C R 0.400001) - ) - ) -(CHARACTER C C - (CHARWD R 0.400001) - (COMMENT - (LIG C A O 202) - (LIG O 57 C B) - ) - ) -(CHARACTER C M - (CHARWD R 0.6) - (CHARIC R 0.200001) - (VARCHAR - (MID C A) - (BOT C B) - (REP O 0) - ) - ) -(CHARACTER C a - (CHARWD R 0.200001) - (CHARHT R 0.700001) - (CHARDP R 0.1) - (CHARIC R 0.1) - (NEXTLARGER O 202) - ) -(CHARACTER C b - (CHARWD R 0.3) - (CHARHT R 0.8) - (CHARDP R 0.200001) - (NEXTLARGER C M) - ) -(CHARACTER C p - (CHARWD R 0.0) - (COMMENT - (/LIG/ C q C r) - (/LIG/> C r C t) - (LIG C t C t) - ) - ) -(CHARACTER C q - (CHARWD R 0.0) - (COMMENT - (/LIG/ C u C p) - (/LIG/ C s C r) - (KRN C t R 0.1) - (/LIG> C r C t) - (/LIG/ C p C s) - (KRN C s R 0.3) - ) - ) -(CHARACTER C r - (CHARWD R 0.0) - (COMMENT - (LIG/ C u C q) - (/LIG C q C u) - ) - ) -(CHARACTER C s - (CHARWD R 0.0) - (COMMENT - (LIG/> C p C q) - (KRN C r R 0.1) - ) - ) -(CHARACTER C t - (CHARWD R 0.0) - (COMMENT - (KRN O 0 R -1.0) - (KRN O 0 R -0.01) - (KRN O 0 R -0.02) - (KRN O 0 R -0.03) - (KRN O 0 R -0.04) - (KRN O 0 R -0.05) - (KRN O 0 R -0.06) - (KRN O 0 R -0.07) - (KRN O 0 R -0.08) - (KRN O 0 R -0.09) - (KRN O 0 R -0.1) - (KRN O 0 R -0.11) - (KRN O 0 R -0.12) - (KRN O 0 R -0.13) - (KRN O 0 R -0.14) - (KRN O 0 R -0.15) - (KRN O 0 R -0.16) - (KRN O 0 R -0.17) - (KRN O 0 R -0.18) - (KRN O 0 R -0.19) - (KRN O 0 R -0.2) - (KRN O 0 R -0.21) - (KRN O 0 R -0.22) - (KRN O 0 R -0.23) - (KRN O 0 R -0.24) - (KRN O 0 R -0.25) - (KRN O 0 R -0.26) - (KRN O 0 R -0.27) - (KRN O 0 R -0.28) - (KRN O 0 R -0.29) - (KRN O 0 R -0.3) - (KRN O 0 R -0.31) - (KRN O 0 R -0.32) - (KRN O 0 R -0.33) - (KRN O 0 R -0.34) - (KRN O 0 R -0.35) - (KRN O 0 R -0.36) - (KRN O 0 R -0.37) - (KRN O 0 R -0.38) - (KRN O 0 R -0.39) - (KRN O 0 R -0.4) - (KRN O 0 R -0.41) - (KRN O 0 R -0.42) - (KRN O 0 R -0.43) - (KRN O 0 R -0.44) - (KRN O 0 R -0.45) - (KRN O 0 R -0.46) - (KRN O 0 R -0.47) - (KRN O 0 R -0.48) - (KRN O 0 R -0.49) - (KRN O 0 R -0.5) - (KRN O 0 R -0.51) - (KRN O 0 R -0.52) - (KRN O 0 R -0.53) - (KRN O 0 R -0.54) - (KRN O 0 R -0.55) - (KRN O 0 R -0.56) - (KRN O 0 R -0.57) - (KRN O 0 R -0.58) - (KRN O 0 R -0.59) - (KRN O 0 R -0.6) - (KRN O 0 R -0.61) - (KRN O 0 R -0.62) - (KRN O 0 R -0.63) - (KRN O 0 R -0.64) - (KRN O 0 R -0.65) - (KRN O 0 R -0.66) - (KRN O 0 R -0.67) - (KRN O 0 R -0.68) - (KRN O 0 R -0.69) - (KRN O 0 R -0.7) - (KRN O 0 R -0.71) - (KRN O 0 R -0.72) - (KRN O 0 R -0.73) - (KRN O 0 R -0.74) - (KRN O 0 R -0.75) - (KRN O 0 R -0.76) - (KRN O 0 R -0.77) - (KRN O 0 R -0.78) - (KRN O 0 R -0.79) - (KRN O 0 R -0.8) - (KRN O 0 R -0.81) - (KRN O 0 R -0.82) - (KRN O 0 R -0.83) - (KRN O 0 R -0.84) - (KRN O 0 R -0.85) - (KRN O 0 R -0.86) - (KRN O 0 R -0.87) - (KRN O 0 R -0.88) - (KRN O 0 R -0.89) - (KRN O 0 R -0.9) - (KRN O 0 R -0.91) - (KRN O 0 R -0.92) - (KRN O 0 R -0.93) - (KRN O 0 R -0.94) - (KRN O 0 R -0.95) - (KRN O 0 R -0.96) - (KRN O 0 R -0.97) - (KRN O 0 R -0.98) - (KRN O 0 R -0.99) - (KRN O 0 R -1.0) - (KRN O 0 R -1.01) - (KRN O 0 R -1.02) - (KRN O 0 R -1.03) - (KRN O 0 R -1.04) - (KRN O 0 R -1.05) - (KRN O 0 R -1.06) - (KRN O 0 R -1.07) - (KRN O 0 R -1.08) - (KRN O 0 R -1.09) - (KRN O 0 R -1.1) - (KRN O 0 R -1.11) - (KRN O 0 R -1.12) - (KRN O 0 R -1.13) - (KRN O 0 R -1.14) - (KRN O 0 R -1.15) - (KRN O 0 R -1.16) - (KRN O 0 R -1.17) - (KRN O 0 R -1.18) - (KRN O 0 R -1.19) - (KRN O 0 R -1.2) - (KRN O 0 R -1.21) - (KRN O 0 R -1.22) - (KRN O 0 R -1.23) - (KRN O 0 R -1.24) - (KRN O 0 R -1.25) - (KRN O 0 R -1.26) - (KRN O 0 R -1.27) - (KRN O 0 R -1.28) - (KRN O 0 R -1.29) - (KRN O 0 R -1.3) - (KRN O 0 R -1.31) - (KRN O 0 R -1.32) - (KRN O 0 R -1.33) - (KRN O 0 R -1.34) - (KRN O 0 R -1.35) - (KRN O 0 R -1.36) - (KRN O 0 R -1.37) - (KRN O 0 R -1.38) - (KRN O 0 R -1.39) - (KRN O 0 R -1.4) - (KRN O 0 R -1.41) - (KRN O 0 R -1.42) - (KRN O 0 R -1.43) - (KRN O 0 R -1.44) - (KRN O 0 R -1.45) - (KRN O 0 R -1.46) - (KRN O 0 R -1.47) - (KRN O 0 R -1.48) - (KRN O 0 R -1.49) - (KRN O 0 R -1.5) - (KRN O 0 R -1.51) - (KRN O 0 R -1.52) - (KRN O 0 R -1.53) - (KRN O 0 R -1.54) - (KRN O 0 R -1.55) - (KRN O 0 R -1.56) - (KRN O 0 R -1.57) - (KRN O 0 R -1.58) - (KRN O 0 R -1.59) - (KRN O 0 R -1.6) - (KRN O 0 R -1.61) - (KRN O 0 R -1.62) - (KRN O 0 R -1.63) - (KRN O 0 R -1.64) - (KRN O 0 R -1.65) - (KRN O 0 R -1.66) - (KRN O 0 R -1.67) - (KRN O 0 R -1.68) - (KRN O 0 R -1.69) - (KRN O 0 R -1.7) - (KRN O 0 R -1.71) - (KRN O 0 R -1.72) - (KRN O 0 R -1.73) - (KRN O 0 R -1.74) - (KRN O 0 R -1.75) - (KRN O 0 R -1.76) - (KRN O 0 R -1.77) - (KRN O 0 R -1.78) - (KRN O 0 R -1.79) - (KRN O 0 R -1.8) - (KRN O 0 R -1.81) - (KRN O 0 R -1.82) - (KRN O 0 R -1.83) - (KRN O 0 R -1.84) - (KRN O 0 R -1.85) - (KRN O 0 R -1.86) - (KRN O 0 R -1.87) - (KRN O 0 R -1.88) - (KRN O 0 R -1.89) - (KRN O 0 R -1.9) - (KRN O 0 R -1.91) - (KRN O 0 R -1.92) - (KRN O 0 R -1.93) - (KRN O 0 R -1.94) - (KRN O 0 R -1.95) - (KRN O 0 R -1.96) - (KRN O 0 R -1.97) - (KRN O 0 R -1.98) - (KRN O 0 R -1.99) - (KRN O 0 R -2.0) - (KRN O 0 R -2.01) - (KRN O 0 R -2.02) - (KRN O 0 R -2.03) - (KRN O 0 R -2.04) - (KRN O 0 R -2.05) - (KRN O 0 R -2.06) - (KRN O 0 R -2.07) - (KRN O 0 R -2.08) - (KRN O 0 R -2.09) - (KRN O 0 R -2.1) - (KRN O 0 R -2.11) - (KRN O 0 R -2.12) - (KRN O 0 R -2.13) - (KRN O 0 R -2.14) - (KRN O 0 R -2.15) - (KRN O 0 R -2.16) - (KRN O 0 R -2.17) - (KRN O 0 R -2.18) - (KRN O 0 R -2.19) - (KRN O 0 R -2.2) - (KRN O 0 R -2.21) - (KRN O 0 R -2.22) - (KRN O 0 R -2.23) - (KRN O 0 R -2.24) - (KRN O 0 R -2.25) - (KRN O 0 R -2.26) - (KRN O 0 R -2.27) - (KRN O 0 R -2.28) - (KRN O 0 R -2.29) - (KRN O 0 R -2.3) - (KRN O 0 R -2.31) - (KRN O 0 R -2.32) - (KRN O 0 R -2.33) - (KRN O 0 R -2.34) - (KRN O 0 R -2.35) - (KRN O 0 R -2.36) - (KRN O 0 R -2.37) - (KRN O 0 R -2.38) - (KRN O 0 R -2.39) - (KRN O 0 R -2.4) - (KRN O 0 R -2.41) - (KRN O 0 R -2.42) - (KRN O 0 R -2.43) - (KRN O 0 R -2.44) - (KRN O 0 R -2.45) - (KRN O 0 R -2.46) - (KRN O 0 R -2.47) - (KRN O 0 R -2.48) - (KRN O 0 R -2.49) - (KRN O 0 R -2.5) - (KRN O 0 R -2.51) - (KRN O 0 R -2.52) - (KRN O 0 R -2.53) - (KRN O 0 R -2.54) - (KRN O 0 R -2.55) - (KRN O 0 R -2.56) - (KRN O 0 R -2.57) - (/LIG/>> C r C s) - (/LIG/ C p C s) - (KRN C s R 0.3) - ) - ) -(CHARACTER C u - (CHARWD R 0.0) - (COMMENT - (/LIG C Z C p) - (LIG C p C r) - ) - ) -(CHARACTER O 202 - (CHARWD R 0.400001) - ) diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip.tex b/Build/source/texk/web2c/etexdir/etrip/etrip.tex deleted file mode 100644 index bb688740f82..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip.tex +++ /dev/null @@ -1,1265 +0,0 @@ -%%; 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 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 {2021-01-28} -\def\texversion {3.141592653} -\def\etripversion{2.6} -% -\message{This is the e-Trip test [\etripdate] for - e-TeX v\texversion-\etripversion.} -% -% --- Make sure that e-Trip is run in e-TeX extended mode -\def\stop#1{\message{Emergency stop: #1!}} -\expandafter\ifx\csname eTeXversion\endcsname\relax - \stop{You aren't using e-TeX in extended mode} - \message{(Do not forget to give an asterisk `*' as the first non-blank} - \message{character to make e-IniTeX enter extended mode.)} - \expandafter\end -\fi -% -% --- Check for e-TeX version -\def\1.#1#2\relax{\bgroup - \edef\1{\egroup - \def\noexpand\2{\number\eTeXversion\eTeXrevision}% - \def\noexpand\1{\number\eTeXversion.#1}}\1} -\expandafter\1\eTeXrevision\relax -\message{(You are using e-TeX version/revision \2)} -\ifx\1\etripversion \else \stop{I have expected e-TeX - v\texversion-\etripversion...}\expandafter\end\fi -\let\1=\5 \let\2=\5 -% -% --- a special branch for e-IniTeX -\ifx\einitex\undefined \def\einitex{} - % - \message{e-IniTeX: Assigning category codes,} - \catcode`\$=3\catcode`\&=4 - \catcode`\^=7\catcode`\^^I=10\catcode`\_=8 - \message{tracing switches,} - \tracingstats=4\tracinglostchars=2 - \message{other codes,} - \endlinechar=`\^^M \newlinechar=`\^^J - % - \message{definitions for e-VirTeX e-Trip test run,} - \def\error{\immediate\write15{Bug in your e-TeX implementation!}% - \immediate\write15 } - \def\typeout{\immediate\write15 } - \def\empty{} \def\space{ } - % - \message{constants and registers,} - \chardef\zero=0\chardef\one=1\chardef\two=2 - \countdef\ctmp=255 \countdef\cndx=254 - % - \message{fonts,} - \fontdimen12\nullfont=13pt - \font\trip=etrip \hyphenchar\trip=`1 \trip - \textfont0=\trip \textfont1=\trip - \font\smalltrip=etrip scaled 500\relax % our symbols font - \fontdimen22\smalltrip=7pt - \textfont2=\smalltrip \scriptfont2=\smalltrip - \scriptscriptfont2=\smalltrip - \font\bigtrip=etrip at 20pt\relax % our extension font - \textfont3=\bigtrip \scriptfont3=\bigtrip - \scriptscriptfont3=\bigtrip - % - \message{some math characters,} - \delcode`\[="161361 % small (family 1, character "61 (a)), large (3,"61) - \delcode`\|="142342 % small (family 1, character "42 (B)), large (3,"42) - \delcode`\]="162362 % small (family 1, character "62 (b)), large (3,"62) - % - \message{some math parameters,} - \thinmuskip=18mu plus 3.6mu - \medmuskip=27mu plus 9mu minus 18mu - \thickmuskip=36mu minus 7.2mu - % - \message{hyphenation,} - \lefthyphenmin=2\righthyphenmin=2 - \begingroup - \def\x{\patterns{% - .pp1aqq. .up1aqq. .ppb1qq. .upb1qq. .pp1r1qq. .up1r1qq.}} - \language=0 \x \savinghyphcodes=1 - \language=1 \lccode`A=`a \lccode`B=`b \x - \language=2 \lccode`A=`r \lccode`B=`b \x - \language=3 \lccode`A=`a \lccode`B=`r \x - {\def\1{\lccode\count20=0 \ifnum\count20<255 \advance\count20 1 - \expandafter\1\fi}\count20=0 \1 - \language=4 \patterns{}} - {\lccode`B=`b \hyphenation{qqB-pp}} - \count20=\interactionmode \nonstopmode - {\setbox0\vbox{\parfillskip=0pt - \hbadness=0 \showboxdepth=0 - \hsize=16383.99999pt \pretolerance=-1 \tolerance=-1 - \trip\ ppaqq upaqq ppbqq upbqq pprqq uprqq qqbpp}} - {\lccode`B=`b \language=4 \hyphenation{-q-}} - \interactionmode=\count20 - {\lccode`B=`b \hyphenation{qq-B-pp}} - \endgroup - % - \message{enable e-TeX enhancements (TeXXeT),} - \TeXXeTstate=1 - % - \message{prepare saved items (not to be dumped),} - \bgroup \savingvdiscards=1 - \vfill \penalty 1234 % set \pagediscards - \setbox0=\vbox{\vbox to10pt{}\vskip5pt\penalty-4321} - \setbox1=\vsplit0 to10pt % set \splitdiscards - \egroup - % - \message{everyjob ...dumped.} - \everyjob={\message{e-IniTeX: e-Trip format loaded.}} - \expandafter\dump -\fi - -% -% -- Test \lostchars=1 and 2 -\begingroup - \tracingonline=0 - \setbox0=\hbox{% - \tracinglostchars=0 \nullfont a% - \tracinglostchars=1 \nullfont b% - \tracinglostchars=2 \nullfont c% - } -\endgroup -% -% -- Do the rest in silent, almost all of it: -\batchmode - -% -% -- Check that all e-TeX enhancements are switched off -\ifnum\TeXXeTstate=0 \else - \error{dumped e-TeX enhancement state registers aren't switch off} -\fi - -% -% ============================== input/output: new csnames -% -% -- Check table of equivalents and the routines |id_lookup|, -% |print_cmd_chr| for all new e-TeX control sequences -% -- Check new primitive \unexpanded (first test) -\typeout{Checking input/output of new csnames:} -\begingroup - \edef\1{% - \unexpanded{% -% --- additional e-TeX V 1 primitives - \eTeXversion \eTeXrevision \showgroups \showtokens - \tracingassigns \tracinggroups \tracingifs \tracingscantokens - \currentgrouplevel \currentgrouptype \middle \lastnodetype - \TeXXeTstate \beginL \endL \beginR \endR \predisplaydirection - \marks \topmarks \firstmarks \botmarks - \splitfirstmarks \splittopmarks - \protected \unexpanded \detokenize \scantokens \readline - \unless \ifdefined \ifcsname \everyeof \interactionmode -% --- additional e-TeX V 2 primitives - \currentiflevel \currentiftype \currentifbranch \showifs - \fontcharwd \fontcharht \fontchardp \fontcharic \iffontchar - \tracingnesting \parshapelength \parshapeindent \parshapedimen - \numexpr \dimexpr \glueexpr \muexpr \mutoglue \gluetomu - \gluestretchorder \glueshrinkorder \gluestretch \glueshrink - \savingvdiscards \pagediscards \splitdiscards - \lastlinefit \savinghyphcodes \interlinepenalties - \clubpenalties \widowpenalties \displaywidowpenalties - }% - } - -% loop through the list, count the number of csnames, -% insert the \newlinechar after the 2nd, 4th, 6th, ... - \ctmp=0\def\3{} - \def\2#1{\ifx\relax#1\else - \advance\ctmp\one - \edef\3{\unexpanded\expandafter{\3 #1}\ifodd\ctmp\else ^^J\fi}% - \expandafter\2\fi} - \expandafter\2\1\relax - \typeout{e-TeX Version \number\eTeXversion\space has - \number\ctmp\space new csnames:}% - \show\3\endgroup - -% -% ============================== create and output nodes -% -% -- Check |new_...| routines and |short_display|, |show_node_list| -% for all new e-TeX node types and subtypes -% -- Check for new primitives disabled when read. -\typeout{Checking creation and printing for new node types:} -\tracingonline=1 -\showboxbreadth=255\showboxdepth=255 -\begingroup - \setbox0=\vbox{\hsize=0pt\TeXXeTstate=1\relax - %% []\trip a[]b[]p$q [] t$u[][] % <== \endR\endL at end - a\beginL b\beginR p$q\left[\mathpunct{r}\middle|s\right]t$u - %% \trip aMb - $$aMb$$ % \hbox ..., display - %% [][]\trip p[]q$st$u[] % <== \beginL\beginR at beginning - p\endR q\mathsurround=12.3pt$st$u % <== \endL at end - %% \trip rMs - $$rMs$$ % \hbox ..., display - %% []\trip tp[]u % <== \beginL at beginning - tp\endL u - %% \trip rMs - $$rMs$$ % \hbox ..., display - %% \trip tp % <== no \mark(s), no \(begin/end)(L/R)! - tp\mark{0old}\marks0{0}\marks1{1}\marks15{15}\marks32767{32767}% - \marks-1{-1}\marks32768{32768}% Bad register (-1) ...and (32768). - \TeXXeTstate=0\relax - \beginL\beginR\endL\endR % Improper \(begin/end)(L/R) - }\showbox0 -\endgroup - -% -% -% ============================== \interactionmode -% -% -- Check new special register \interactionmode -\typeout{Checking \string\interactionmode:} -\begingroup \ctmp=\interactionmode % save current value -\nonstopmode -% test inquiry using \interactionmode -\def\3{\typeout{current interactionmode (l.\number\inputlineno): - \ifcase\interactionmode batch\or nonstop\or scroll\or - errorstop\else UNKNOWN!\fi}} -\def\1#1{\relax\ifnum#1=\interactionmode \3 \else - \typeout{wrong interactionmode: - \number\interactionmode\space should be \number#1!}\fi} -\batchmode \1 0 -\nonstopmode \1 1 -\scrollmode \1 2 -\errorstopmode \1 3 -% test setting |interaction_mode| using this special register -\def\2#1{\interactionmode=#1\relax \1{#1}} - \nonstopmode - % generate two errors: - \interactionmode=-1 \1 1 % nonstop - \interactionmode=4 \1 1 % nonstop -\2 2 \2 2 \2 1 \2 1 \2 3 \2 3 \2 0 \2 0 -\1 0{\interactionmode=3}\1 3 % global assignment! -% Test for the correct call of |new_interaction|, i.e. -% correct setting of |selector|: -\interactionmode=1 \message{1 (l.\number\inputlineno)}% log+term -\interactionmode=0 \message{0 (l.\number\inputlineno)}% log only -\interactionmode=1 \message{1 (l.\number\inputlineno)}% log+term -% Some tests with TeX's old command and register assignments -\batchmode \1 0 \2 3 \scrollmode \1 2 \2 1 -\2 \ctmp -\endgroup - -% -% -- Check \tracingifs -\typeout{Checking \string\tracingifs:} -\begingroup - \def\1#1\1{\def\2{#1\iffalse \else \fi}#1\iftrue \2\else \2\fi} - \tracingifs=1 - \1\1 - \1\unless\1 - \tracingcommands=2 - \ifdefined\hbox \unless\ifdefined\abc \ifcase 2 \or \or - \ifcsname hbox\endcsname \ifcsname abc\endcsname \abc \else - \ifx\abc\relax \else \ifx\abc\relax \fi \fi \fi \fi \or\fi \fi \fi -\endgroup -% -% -- Check \tracingassigns -\typeout{Checking \string\tracingassigns:} -\begingroup - \tracingrestores=1 \tracingassigns=1 - \global\font\6=etrip at 11pt \font\6=etrip at 11pt - \global\count17=7 \count17=7 - \global\def\9{\relax} \global\let\8=\9 \let\8=\9 - \bgroup - \global\font\5=etrip at 12pt \font\5=etrip at 12pt \let\4=\5 - \global\count17=0 \count17=0 - \global\let\9=\7 \global\let\8=\9 \let\8=\9 - \egroup -\endgroup - -% -% -- Check \currentgrouptype, \currentgrouplevel, and \lastnodetype -\typeout{Checking \string\currentgrouptype, - \string\currentgrouplevel, and \string\lastnodetype:} -\typeout{current group level (l.\number\inputlineno): - \ifcase\currentgrouplevel outer level\else BAD!\fi} -\typeout{current group type (l.\number\inputlineno): - \ifcase\currentgrouptype bottom level\else BAD!\fi} -\begingroup - \def\4{\typeout{current group type (l.\number\inputlineno): - \ifcase\currentgrouptype bottom level\or simple group\or - hbox group\or adjusted hbox group\or vbox group\or - vtop group\or align group\or no align group\or - output group\or math group\or disc group\or - insert group\or vcenter group\or math choice group\or - semi simple group\or math shift group\or - math left group\else UNKNOWN!\fi}} - \def\1 #1 {\relax\ifnum#1=\currentgrouptype \4\else - \typeout{wrong current group type: - \number\currentgrouptype\space should be #1!}\fi} - \def\5{\edef\6{\ifcase\lastnodetype char node\or hlist node\or - vlist node\or rule node\or ins node\or mark node\or - adjust node\or ligature node\or disc node\or whatsit node\or - math node\or glue node\or kern node\or penalty node\or - unset node\or math mode node\else - \ifnum-1=\lastnodetype empty\else UNKNOWN!\fi\fi}% - \typeout{last node type (l.\number\inputlineno): \6}} - \def\2 #1 {\relax\ifnum#1=\lastnodetype \5\else - \edef\6{\number\lastnodetype}% - \typeout{wrong last node type: \6 should be #1!}\fi} - \def\3 #1 {\relax\ifnum#1=\currentgrouplevel \else - \typeout{wrong current group level: - \number\currentgrouplevel\space should be #1!}\fi} - \tracinggroups=1 - \1 14 % semi simple group - \3 1 % group level 1 - \setbox0=\vbox{\1 4 % vbox group - \hbox{\1 3 % adjusted hbox group - {\1 1 % simple group - }\2 -1 % empty list - \hbox{\1 2 % hbox group - \discretionary{\1 10 }{\1 10 }{\1 10 % disc group - \3 5 % group level 5 - }\2 8 % disc node - A\2 0 % char node - AA\2 7 % ligature node - \insert27{\1 11 % insert group - }\2 4 % ins node - \vadjust{\1 11 % insert group - }\2 6 % adjust node - \mark{}\2 5 % mark node - \vrule \2 3 % rule node - \hfil \2 11 % glue node - \kern 0pt\2 12 % kern node - \penalty 0\2 13 % penalty node - \vtop{\1 5 % vtop group - }\2 2 % vlist node - \write5{}\2 9 % whatsit node - $\1 15 % math shift group - {\1 9 % math group - } - $\2 10 % math node - \TeXXeTstate=1\beginR\2 10 % math node - \endR\2 10 % math node - \valign{#\cr\1 6 % two align groups - \cr\noalign{\1 7 % no align agroup - \2 14 % unset node - } - } - } - }\2 1 % hlist node - $$\1 15 % math shift group - \2 -1 % empty list - \mathchoice{\1 13 }{\1 13 }{\1 13 }{\1 13 % math choice group - \vcenter{\1 12 % vcenter group - }\2 15 % math mode node - }\2 15 % math mode node - \left.\1 16 % math left group - \middle.\1 16 % math left group - \middle.\1 16 % math left group - \right. - $$ - } - \output={\1 8 % output group - \setbox0=\box255 - \setbox0=\vbox{ % vbox group % this is definitely weird! - \hbox spread 5pt{\hfil % adjusted hbox group - \raise5pt\hbox{ % hbox group - { %simple group - \valign{#\cr % two align groups - \noalign{ % no align group - $ % math shift group - \vtop{ % vtop group - $$ % math shift group - { % math group - \left.\middle. % math left group - \mathchoice{}{}{ % math choice group - \vcenter to 7pt{\vss % vcenter group - \noindent\vadjust{ % insert group - \discretionary{}{% disc group - \showgroups % show all of them - }{} - } - } - }{} - \right. - } - $$ - } - $ - } - } - } - } - } - } - } - \hbox{}\vfil\penalty-10000 - \deadcycles=0 -\endgroup - -% -% -- Check expansion of \protected macros -\typeout{Checking expansion of \string\protected\space macros:} -\begingroup - \protected\def\2{} \show\2 - \let\3=\2 \show\3 - \protected\unexpanded\bgroup\2\protected\3\protected\def\1{\2}} \show\1 - \tracingmacros=1 - \message{\expandafter\1\1} - \typeout{\expandafter\1\1} - \setbox0=\vbox{\special{\expandafter\1\1}} \showbox0 - \edef\5{\expandafter\1\1} \show\5 - \setbox0=\vbox{\halign{#\1&#\span\1\cr - \protected\def\1{\3}&\protected\def\1{\3}\cr}} -\endgroup - -% -% -- Check \scantokens, \tracingscantokens, \readline, and \everyeof -\typeout{Checking \string\scantokens, \string\tracingscantokens, - \string\readline, and \string\everyeof:} -\begingroup - \newlinechar=`\^^J - \def\1{\endgroup ^^J\fi ^^J\bgroup ^^J\iffalse \else} - \tracingoutput=1 - \shipout\vbox{\global\advance\count\zero by\one - \openout1=\jobname.out - \write1{\unexpanded\expandafter{\1}} - \closeout1} - \begingroup \iftrue \input\jobname.out \egroup \fi - \begingroup \iftrue \scantokens\expandafter{\1} \egroup \fi - \errorcontextlines=1000 \tracingscantokens=1 - \begingroup - \tracingnesting=1 - \begingroup \iftrue \scantokens\expandafter{\1} \egroup \fi - \tracingnesting=2 - \begingroup \unless\iffalse \scantokens\expandafter{\1} \egroup \fi -% and now a really weird (although legitimate) combination - \setbox0=\hbox\bgroup - \unless\iftrue\else - \scantokens{\hbox\bgroup^^J\ifcase0^^J\tracingscantokens=0^^J - \newlinechar=`\^^Z - \scantokens{\egroup^^Z\else\fi^^Z\def\1{\egroup\fi}^^Z\1^^Z^^J - \setbox0=\vtop\bgroup^^Z\ifnum0=0^^Z$$^^Z\ifinner\else^^Z - \csname iffalse\endcsname^^J - }^^J % end of inner scantokens - $$^^J\fi - } % end of outer \scantokens - \egroup - \else\fi - \endgroup - \begingroup \iftrue \let\9=\endgroup \def\endgroup{\9\9} - \input\jobname.out \egroup \fi - \begingroup \iftrue \let\9=\endgroup \def\endgroup{\9\9} - \scantokens\expandafter{\1} \egroup \fi - - \edef\1{\scantokens{\begingroup} % <== error - \everyeof={\noexpand} - \edef\1{\scantokens{\begingroup}\endgroup} % <== OK - \errorcontextlines=100 - \def\2{\begingroup\scantokens{\message{level=\the\currentgrouplevel}}% - \endgroup} - \bgroup\bgroup\bgroup \edef\1{\egroup\egroup\egroup - \everyeof={\noexpand\ifnum\number\currentgrouplevel - \unexpanded{>\currentgrouplevel\2\else\9\fi}}}\1\2 - - \openin7=\jobname.out - \bgroup - \def\1{\unless\ifeof7\readline7to\2% - \endlinechar=-\one\2\expandafter\1\fi} - \tracingcommands=2 \tracingrestores=1 \tracingassigns=1 - \setbox25=\hbox{\1\showlists} - \egroup - -\endgroup - -% -% -- Check \marks etc., \showtokens, and \detokenize -\typeout{Checking \string\marks\space etc., \string\showtokens, and - \string\detokenize:} -\begingroup - \newlinechar=`\^^J - \def\4{\message{Current marks:\9^^J}} - \def\3#1{\edef\9{\9^^J \detokenize{#1}=\detokenize\expandafter{#1}.}} - \def\2#1 {\3{\splitfirstmarks#1}\3{\splitbotmarks#1}} - \def\0{\let\9=\empty} - \def\7{\penalty0\vskip40pt} - \def\1{\0\20 \21 \23 \4} - \setbox0=\vbox{% - \marks0{0-1}\marks1{1-1}\vskip1pt\vbox to9pt{} - \mark{0-2}\marks3{}\hbox{}\vskip5pt\vfil\7 - \marks0{0-3}\vskip1pt\vbox to19pt{}\marks3{3-3}\vskip3ptplus1fil\7 - \vbox to30pt{}\vfil\7\hbox to10pt{}} - \setbox4=\copy0 - \1 \showbox0 \let\5=\3 \def\3#1{\showtokens\expandafter{#1}\5{#1}} - \setbox1=\vsplit0to17pt - \1 \showbox1 \showbox0 \let\3=\5 - \setbox1=\vsplit0to27pt - \1 \showbox1 \showbox0 - \setbox1=\vsplit0to37pt - \1 \showbox1 \showbox0 - \def\2#1 {\3{\topmarks#1}\3{\firstmarks#1}\3{\botmarks#1}} - \vsize=35pt \output{\1 \showbox255 \setbox0=\box255}\1 - \unvbox4\marks0{}\marks1{}\marks3{}\vfil\penalty-10000 - \hbox{}\marks0{}\marks1{}\marks3{}\vfil\penalty-10000 - \hbox{}\vfil\penalty-10000 % reclaim sparse array memory! - \deadcycles=0 -\endgroup - -% -% -- Check \middle -\typeout{Checking \string\middle:} -\begingroup - \scriptfont1=\textfont1 \scriptscriptfont1=\scriptfont1 - \setbox0=\vbox{\middle \par \right \par} % <== 8 errors - \setbox0=\hbox{% - $ - \left[p - \left[q - \over r - \left[p - \middle|q - \middle|q - \left[p - \middle|q - \middle|q - \over r\showlists - \right]\showlists - \right]\showlists - \right]\showlists - \right]\showlists - $\showlists - } - \setbox0=\hbox{$\displaystyle - \left[\scriptstyle\middle|\mathchoice{p}{q}{r}{s} - \raise16.5pt\hbox{}\right]$\showlists} - \setbox0=\hbox{$\scriptscriptstyle - \left[\displaystyle\lower3pt\hbox{}\middle|\mathchoice{p}{q}{r}{s} - \right]$\showlists} -\endgroup - -% -% -- Check TeX--XeT's new primitives -\typeout{Checking TeX--XeT enhancements:} -\begingroup -% -- incorrect matching & conversion -% (extra `endL/R' nodes are converted to `kern 0.0' nodes) - \setbox0=\vbox{\TeXXeTstate=1 - \parfillskip=0pt plus1fil\hsize=10pt\parindent=.5pt - \beginL\kern1pt\par - \beginR\kern2pt\par - \beginL\beginR\kern3pt\penalty0\hbox{}\kern3pt\endL\endR\endL\par - \endL\kern4pt\endR\par} - \showbox0 -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STILL INCOMPLETE!!! -% %%%%% Missing: Test for functionality of all new primitives -% \TeXXeTstate \beginL \endL \beginR \endR \predisplaydirection -% %%%%% -\endgroup - -% -% -- Check optimized \aftergroup -\typeout{Checking optimized \string\aftergroup:} -\begingroup - \errorcontextlines=1000 - {{\aftergroup\x\aftergroup}\aftergroup{\aftergroup\relax}} -\endgroup - -% -% -- Check \showifs, \currentiftype, \currentiflevel, and \currentifbranch -\typeout{Checking \string\showifs, \string\currentiftype, - \string\currentiflevel, and \string\currentifbranch:} -\begingroup - \def\1{ !BAD} \edef\2{ \ifnum0=\currentifbranch OK\else!BAD\fi} - \iftrue \expandafter \ifnum \number\currentifbranch=1 - \iffalse \else \expandafter \ifnum \number\currentifbranch=-1 - \ifnum \currentifbranch=0 \let\1=\2 \fi \fi \fi \fi \fi - \message{\string\currentifbranch \1} - \def\1 #1 {\edef\2{\number\currentiflevel}% - \ifnum\2=#1 - \typeout{current if level (l.\number\inputlineno): \number\2}% - \else - \typeout{wrong current if level: \2\space should be #1!}% - \fi} - \1 0 % if level 0 - \iftrue \1 1 % if level 1 - \iftrue \1 2 % if level 2 - \fi - \fi - \def\1 #1 #2 {\edef\2{\number\currentiftype}% - \edef\3{\number\currentifbranch}% - \ifnum\2=#1 \4\else - \typeout{wrong current if type: \2\space should be #1!}\fi - \ifnum\3=#2 \5\else - \typeout{wrong current if branch: \3\space should be #2!}\fi} - \def\4{\typeout{current if type (l.\number\inputlineno): - \ifnum\2<0 \string\unless\6{-\2}\else\6{\2}\fi}} - \def\5{\typeout{current if branch (l.\number\inputlineno): - \ifnum\3>0 true\else \ifnum\3<0 false\else - \ifnum0=\3 no\else !UNKNOWN\fi\fi\fi\space branch}} - \def\6#1{\string\if \ifcase#1!NONE\or \or cat\or num\or dim\or odd\or - vmode\or hmode\or mmode\or inner\or void\or hbox\or vbox\or x\or - eof\or true\or false\or case\or defined\or csname\or fontchar\else - !UNKNOWN\fi} - \1 0 0 - \if00 \1 1 1 \fi \unless\if00 \else \1 -1 -1 \fi - \if0a \else \1 1 -1 \fi \unless\if0a \1 -1 1 \fi - \ifcat00 \1 2 1 \fi \unless\ifcat00 \else \1 -2 -1 \fi - \ifcat0a \else \1 2 -1 \fi \unless\ifcat0a \1 -2 1 \fi - \ifnum1=1 \1 3 1 \fi \unless\ifnum1<1 \1 -3 1 \fi - \ifdim1pt=2pt \else \1 4 -1 \fi \unless\ifdim1pt>2pt \1 -4 1 \fi - \ifodd5 \1 5 1 \fi \unless\ifodd5 \else \1 -5 -1 \fi - \setbox2=\vbox{ - \ifvmode \1 6 1 \fi \unless\ifvmode \else \1 -6 -1 \fi - } \setbox0=\box2 - \setbox1=\hbox{ - \ifhmode \1 7 1 \fi \unless\ifhmode \else \1 -7 -1 \fi - $ - \ifmmode \1 8 1 \fi \unless\ifmmode \else \1 -8 -1 \fi - $ - \ifinner \1 9 1 \fi - } - \unless\ifinner \1 -9 1 \fi - \ifvoid2 \1 10 1 \fi \unless\ifvoid0 \1 -10 1 \fi - \ifhbox1 \1 11 1 \fi \unless\ifhbox2 \1 -11 1 \fi - \ifvbox0 \1 12 1 \fi \unless\ifvbox1 \1 -12 1 \fi - \ifx\abc\relax \else \1 13 -1 \fi \unless\ifx\relax\abc \1 -13 1 \fi - \ifeof7 \1 14 1 \fi \unless\ifeof5 \else \1 -14 -1 \fi - \iftrue \1 15 1 \fi \unless\iftrue \else \1 -15 -1 \fi - \iffalse \else \1 16 -1 \fi \unless\iffalse \1 -16 1 \fi - \ifcase2 \or \or \1 17 1 \fi \ifcase2 \or \else \1 17 -1 \fi - \ifdefined\hbox \1 18 1 \fi \unless\ifdefined\abc \1 -18 1 \fi - \ifcsname hbox\endcsname \1 19 1 \fi - \unless\ifcsname abc\endcsname \1 -19 1 \fi - \iffontchar\trip`b \1 20 1 \fi \unless\iffontchar\trip`c \1 -20 1 \fi -% - \if00 \unless\if00 \else \if0a \else \unless\if0a - \ifcat00 \unless\ifcat00 \else \ifcat0a \else \unless\ifcat0a - \ifnum1=1 \unless\ifnum1<1 \ifdim1pt=2pt \else \unless\ifdim1pt>2pt - \ifodd5 \unless\ifodd5 \else - \setbox3=\vbox{\ifvmode \unless\ifvmode \else - \hbox{\ifhmode \unless\ifhmode \else - $\ifmmode \unless\ifmmode \else \ifinner \unless\ifinner \else - \ifvoid2 \unless\ifvoid0 \ifhbox1 \unless\ifhbox2 - \ifvbox0 \unless\ifvbox1 \ifeof7 \unless\ifeof5 \else - \ifx\abc\relax \else \unless\ifx\relax\abc - \iftrue \unless\iftrue \else \iffalse \else \unless\iffalse - \ifcase2 \or \or \ifcase2 \or \else - \ifdefined\hbox \unless\ifdefined\abc - \begingroup \tracingifs=1 - \ifcsname hbox\endcsname \unless\ifcsname abc\endcsname - \iffontchar\trip`b \unless\iffontchar\trip`c - \showifs % <== show 44 nested ifs - \fi \fi - \fi \fi - \endgroup - \fi \fi - \fi \fi - \fi \fi \fi \fi - \fi \fi - \fi \fi \fi \fi - \fi \fi \fi \fi - \fi \fi \fi \fi $ - \fi \fi } - \fi \fi } - \fi \fi - \fi \fi \fi \fi - \fi \fi \fi \fi - \fi \fi \fi \fi -\endgroup - -% -% -- Check \iffontchar, \fontcharwd, etc. -\typeout{Checking \string\iffontchar, \string\fontcharwd, etc.:} -\begingroup - \iffontchar \else \fi % <== missing font identifier and number - \iffontchar\textfont2 -1 \else \fi % <== bad character code - \iffontchar\font 256 \else \fi % <== bad character code - \fontcharwd \fontcharht \fontchardp \fontcharic % <== can't use - \def\1#1#2{% - \def\2##1##2{\ifdim\csname fontchar##1##2\endcsname#1`#2=0pt \else - \space##1##2=\the\csname fontchar##1##2\endcsname#1`#2 \fi}% - \typeout{Font \string#1 character #2% - \iffontchar#1`#2:\2wd\2ht\2dp\2ic\else \space does not exist\fi}} - \1\font A \1{\textfont1}B \1{\scriptfont2}B \1{\scriptscriptfont3}B - \1\trip 7 \1\trip D \1\nullfont D -% - \def\1#1{\cndx=\zero \ctmp=\zero - \def\2{\iffontchar#1\cndx \advance\ctmp by\one \fi - \advance\cndx by\one - \ifnum\cndx<256 \expandafter\2\fi}% - \2% - \typeout{Font \string#1 has \number\ctmp\space character% - \ifnum1=\cndx \else s\fi .}} - \1\font \1\trip \1\nullfont -\endgroup - -% -% -- Check \parshapelength, \parshapeindent, and \parshapedimen -\typeout{Checking \string\parshapelength, \string\parshapeindent, and - \string\parshapedimen:} -\begingroup - \parshapelength \parshapeindent \parshapedimen % <== can't use - \def\1#1 {\edef\2{\2 #1}} - \let\2=\empty - \ifdim\parshapeindent-5=0pt \else\1a \fi - \ifdim\parshapelength-5=0pt \else\1b \fi - \ifdim\parshapeindent-1=0pt \else\1c \fi - \ifdim\parshapelength-1=0pt \else\1d \fi - \ifdim\parshapeindent-0=0pt \else\1e \fi - \ifdim\parshapelength-0=0pt \else\1f \fi - \ifdim\parshapeindent 1=0pt \else\1g \fi - \ifdim\parshapelength 1=0pt \else\1h \fi - \ifdim\parshapeindent 5=0pt \else\1j \fi - \ifdim\parshapelength 5=0pt \else\1i \fi - \ifdim\parshapedimen-5=0pt \else\1k \fi - \ifdim\parshapedimen-1=0pt \else\1l \fi - \ifdim\parshapedimen 0=0pt \else\1m \fi - \ifdim\parshapedimen 1=0pt \else\1n \fi - \ifdim\parshapedimen 2=0pt \else\1o \fi - \typeout{Parshape test 1 \ifx\2\empty OK\else error(s):\2\fi} - \parshape=2 1pt 2pt 3pt 4pt - \let\2=\empty - \ifdim\parshapeindent-5=0pt \else\1a \fi - \ifdim\parshapelength-5=0pt \else\1b \fi - \ifdim\parshapeindent-1=0pt \else\1c \fi - \ifdim\parshapelength-1=0pt \else\1d \fi - \ifdim\parshapeindent-0=0pt \else\1e \fi - \ifdim\parshapelength-0=0pt \else\1f \fi - \ifdim\parshapedimen-5=0pt \else\1g \fi - \ifdim\parshapedimen-1=0pt \else\1h \fi - \ifdim\parshapedimen 0=0pt \else\1i \fi - \typeout{Parshape test 2 \ifx\2\empty OK\else error(s):\2\fi} - \parshape=2 1pt 2pt 3pt 4pt - \parshape=2 \parshapelength2 \parshapeindent2 - \parshapelength1 \parshapeindent1 - \let\2=\empty - \ifdim\parshapeindent1=4pt \else\1A \fi - \ifdim\parshapelength1=3pt \else\1B \fi - \ifdim\parshapeindent2=2pt \else\1C \fi - \ifdim\parshapelength2=1pt \else\1D \fi - \ifdim\parshapeindent3=2pt \else\1E \fi - \ifdim\parshapelength3=1pt \else\1F \fi - \ifdim\parshapeindent9=2pt \else\1G \fi - \ifdim\parshapelength9=1pt \else\1H \fi - \typeout{Parshape test 3 \ifx\2\empty OK\else error(s):\2\fi} - \parshape=2 1pt 2pt 3pt 4pt - \parshape=2 11\parshapedimen4 11\parshapedimen3 - 11\parshapedimen2 11\parshapedimen1 - \let\2=\empty - \ifdim\parshapedimen1=44pt \else\1A \fi - \ifdim\parshapedimen2=33pt \else\1B \fi - \ifdim\parshapedimen3=22pt \else\1C \fi - \ifdim\parshapedimen4=11pt \else\1D \fi - \ifdim\parshapedimen5=22pt \else\1E \fi - \ifdim\parshapedimen6=11pt \else\1F \fi - \ifdim\parshapedimen99=22pt \else\1G \fi - \ifdim\parshapedimen100=11pt \else\1H \fi - \typeout{Parshape test 4 \ifx\2\empty OK\else error(s):\2\fi} -\endgroup - -% -% -- Check \numexpr, \dimexpr, \glueexpr, and \muexpr -\typeout{Checking \string\numexpr, \string\dimexpr, \string\glueexpr, - and \string\muexpr:} -\begingroup - \numexpr \dimexpr \glueexpr \muexpr % <== can't use - \let\9=\relax - \count43=\numexpr ( ( 2 \9 \dimen43=\dimexpr ( 3pt \9 - \skip43=\glueexpr 4pt plus 3fil \9 \muskip43=\muexpr(5muminus1mu)\9 - \def\1#1 {\typeout{\detokenize{#1}=\the#1}} - \1\numexpr\count43 \1\dimexpr\dimen43 - \1\glueexpr\skip43 \1\muexpr\muskip43 - - % Test arithmetic overflow - \begingroup - \tracingassigns=5 - \count44=\numexpr"7FFFFFFE+1 \dimen44=\dimexpr"3FFFFFFEsp+1sp - \count44=\numexpr-"7FFFFFFE-1 \dimen44=\dimexpr-"3FFFFFFEsp-1sp - \count44=\numexpr"FFFF*"8000 \dimen44=\dimexpr"7FFFsp*"8000 - \skip44="3FFFFFFFsp \advance\skip44by1sp \relax - \dimen45=\skip44 \dimen45=\dimexpr1sp*\skip44\9 - \dimen44=-"3FFFFFFFsp \advance\dimen44by-1sp - \dimen45=\skip44 \dimen45=\dimexpr1sp*\skip44\9 - \count44=\numexpr"7FFFFFFE+2\9 \dimen44=\dimexpr"3FFFFFFEsp+2sp\9 - \count44=\numexpr-"7FFFFFFE-2\9 \dimen44=\dimexpr-"3FFFFFFEsp-2sp\9 - \count44=\numexpr"10000*"8000\9 \dimen44=\dimexpr"8000sp*"8000\9 - \count44=\numexpr"10000*-"8000\9 \dimen44=\dimexpr"8000sp*-"8000\9 - \count44=\numexpr-"10000*"8000\9 \dimen44=\dimexpr-"8000sp*"8000\9 - \count44=\numexpr-"10000*-"8000\9 \dimen44=\dimexpr-"8000sp*-"8000\9 - \count44=\numexpr0/0\9 \dimen44=\dimexpr0pt/0\9 - \count44=\numexpr1/0\9 \dimen44=\dimexpr1pt/0\9 - \count44=\numexpr-1/0\9 \dimen44=\dimexpr-1pt/0\9 - \endgroup - - % Test glue arithmetic (add and sub) - \begingroup - \skip90=3pt plus 0fill minus 1fil - \skip91=3pt plus 1fil minus 0fill - \skip92=2pt plus -1fil minus 1fil - \tracingassigns=5 - \skip93=\glueexpr\skip90+0pt \skip93=\glueexpr\skip90+0pt - \skip93=\glueexpr--\skip90 \skip93=\glueexpr--\skip90 - \skip93=\glueexpr\skip91+0pt - \skip93=\glueexpr--\skip91 \skip93=\glueexpr--\skip91 - \skip93=\glueexpr\skip92+0pt - \skip93=\glueexpr--\skip92 \skip93=\glueexpr--\skip92 - \skip93=\glueexpr\skip90-\skip91 - \skip93=\glueexpr\skip91-\skip92 - \skip93=\glueexpr\skip91+\skip92 - \endgroup - - % Test rounding of division (all combinations of signs) - \def\2#1 {\edef\3{\3 #1}} - \def\1#1#2#3#4{\let\3=\empty - \ifnum#4=\numexpr#2/#3\else\2a \fi - \ifnum#4=-\numexpr-#2/#3\else\2b \fi - \ifnum-#4=\numexpr#2/-#3\else\2c \fi - \ifnum#4=\numexpr-#2/-#3\else\2d \fi - \typeout{Expr quotient rounding #1 \ifx\3\empty OK\else - error(s):\3\fi}} - \11{"3FFFFFFF}{"7FFFFFFF}{0} - \12{"40000000}{"7FFFFFFF}{1} - \13{"3FFFFFFE}{"7FFFFFFE}{0} - \14{"3FFFFFFF}{"7FFFFFFE}{1} - \def\1#1#2#3#4{\let\3=\empty - \ifnum#4=\numexpr#2/#3\else\2a \fi - \ifnum#4=-\dimexpr-#2sp/#3\else\2b \fi - \ifnum-#4=\glueexpr\muexpr#2mu/"10000\9/-#3\else\2c \fi - \ifnum#4=\muexpr-\dimexpr#2spplus-1muminus-1fil/-#3\else\2d \fi - \typeout{Expr quotient rounding #1 \ifx\3\empty OK\else - error(s):\3\fi}} - \15{32}{5}{6} % <== three mu_error's (! Incompatible glue units) - \16{33}{5}{7} % <== three mu_error's (! Incompatible glue units) - \17{25}{4}{6} % <== three mu_error's (! Incompatible glue units) - \18{26}{4}{7} % <== three mu_error's (! Incompatible glue units) - - % Test rounding of fractions - \begingroup - \def\1#1 #2 #3 #4 #5 {\let\3=\empty - \ifnum#5=\numexpr#2*#3/#4\else\2a \fi - \ifnum-#5=\numexpr-#2*#3/#4\else\2b \fi - \ifnum-#5=\numexpr#2*-#3/#4\else\2c \fi - \ifnum#5=\numexpr-#2*-#3/#4\else\2d \fi - \ifnum-#5=\numexpr#2*#3/-#4\else\2e \fi - \ifnum#5=\numexpr-#2*#3/-#4\else\2f \fi - \ifnum#5=\numexpr#2*-#3/-#4\else\2g \fi - \ifnum-#5=\numexpr-#2*-#3/-#4\else\2h \fi - \4#1} - \def\4#1{\typeout{Expr fraction rounding #1 \ifx\3\empty OK\else - error(s):\3\fi}\let\3=\empty} - \11 "7FFFFFFE "7FFFFFFE "7FFFFFFD "7FFFFFFF - \12 "7FFFFFFE "7FFFFFFE "7FFFFFFF "7FFFFFFD - \def\1#1#2 #3 #4 #5 #6 {\let\3=\empty - \ifnum\numexpr#6=\numexpr(#3)*(#4)/(#5)\else\2#1 \fi - \ifdim\dimexpr1sp*#6=\dimexpr(#3sp)*(#4)/(#5)\else\2#2 \fi} - \1ab "3FFFFFFE "7FFFFFFE "7FFFFFFD "3FFFFFFF - \1cd "3FFFFFFE "7FFFFFFE "7FFFFFFF "3FFFFFFD - \1ef "1FFFBFFE "20003FFE "1FFFFFFE "1FFFFFFF - \1gh "1FFFBFFF "20003FFF "1FFFFFFF "20000000 - \1ij "1FFFC000 "20004000 "20000000 "20000000 - \1kl "1FFFC001 "20004001 "20000001 "20000001 - \errorcontextlines=100 - \1mn 1 "7FFFFFFF 2 "40000000 - \43 - \endgroup - - \bgroup - \skip44=\glueexpr ( \skip43 ) + 3 pt plus 1 fil minus 1 fil l l - \muskip44=\muexpr (\muskip43)+3muplus1fill - \dimen44=\dimexpr\skip43+\count43pt - \dimen44=\dimexpr(\skip43)+(\count43pt) - \dimen44=\dimexpr\skip43*\count43 - \skip44=\glueexpr\skip43/\count43 - \skip44=\glueexpr\skip43*2/3 - \egroup - - % Test operator precedence - \bgroup - \def\1#1#2#3#4{#1#2#3#4=#2#3(#4)\else - \typeout{expression error (l.\number\inputlineno)}\fi} - \1\ifnum\numexpr{1+}{2*3} - \1\ifnum\numexpr{4-}{5*6} - \1\ifnum\numexpr{7+}{12/4} - \1\ifnum\numexpr{4-}{6/3} - \1\ifdim\dimexpr{1pt+}{2pt*3} - \1\ifdim\dimexpr{4pt-}{5pt*6} - \1\ifdim\dimexpr{7pt+}{12pt/4} - \1\ifdim\dimexpr{4pt-}{6pt/3} - \1\ifdim\glueexpr{7pt+}{12pt/4} - \egroup - - % Test glue reference count handling - \shipout\hbox{} - \bgroup - \skip43=\glueexpr1ptplus0ptminus0pt - \skip43=\glueexpr1pt-0pt+0pt - \skip43=\glueexpr(((\skip43))) - \egroup - \shipout\hbox{} -\endgroup - -% -% -- Check \mutoglue and \gluetomu -\typeout{Checking \string\mutoglue\space and \string\gluetomu:} -\begingroup - \mutoglue \gluetomu % <== can't use - \skip1=-\mutoglue-\gluetomu9pt \muskip1=-\gluetomu-\mutoglue9mu - \skip2=\gluetomu\muskip1 % <== two mu_error's (! Incompatible glue units) - \muskip2=\mutoglue\skip1 % <== two mu_error's (! Incompatible glue units) - \tracingassigns=1 - \skip1=\mutoglue1muplus-2muminus-3fil - \muskip1=\gluetomu1ptplus-2ptminus-3fil - \skip2=\mutoglue-4muplus5fillminus6filll - \muskip2=\gluetomu-4ptplus5fillminus6filll - \skip3=-\mutoglue\muskip1 - \muskip3=-\gluetomu\skip1 - \skip4=\mutoglue-\muskip2 - \muskip4=\gluetomu-\skip2 - -% -% -- Check (mu)glue identity - \typeout{Checking (mu)glue identity:} - \skipdef\132767\1=7ptplus0filminus0fill\muskipdef\232766\2=\gluetomu\1 - \tracingassigns=\1 - \1=--\mutoglue--\muexpr(--\gluetomu--\glueexpr(--\1)) - \2=--\gluetomu--\glueexpr(--\mutoglue--\muexpr(--\2)) - \tracingassigns=0 - -% -% -- Check \gluestretchorder, \glueshrinkorder, \gluestretch, and \glueshrink - \typeout{Checking \string\gluestretchorder, \string\glueshrinkorder, - \string\gluestretch, and \string\glueshrink:} - \gluestretchorder \gluestretch % <== can't use - \glueshrinkorder \glueshrink % <== can't use - \skip5=1ptminus0fil - \skip6=1ptplus0fillminus0filll - \def\2#1{\typeout{wrong glue #1 (l.\number\inputlineno)}} - \def\1#1#2pt#3#4pt#5 {% - \ifnum\gluestretchorder#5=#1 \else \2{stretch order}\fi - \ifdim\gluestretch#5=#2pt \else \2{stretch}\fi - \ifnum\glueshrinkorder#5=#3 \else \2{shrink order}\fi - \ifdim\glueshrink#5=#4pt \else \2{shrink}\fi} - \def\9{\relax} - \100pt10pt1ptminus0fil - \100pt10pt\mutoglue1muminus0fil - \100pt10pt\mutoglue\gluetomu1ptminus0fil - \100pt10pt\skip5 - \muskip5=\gluetomu\skip5 - \100pt10pt\mutoglue\muskip5 - \100pt10pt\glueexpr\mutoglue\muexpr\gluetomu\skip5\9\9 - \100pt00pt\glueexpr\skip5+0pt\9 - \120pt30pt1ptplus0fillminus0filll - \120pt30pt\mutoglue1muplus0fillminus0filll - \120pt30pt\mutoglue\gluetomu1ptplus0fillminus0filll - \120pt30pt\skip6 - \muskip6=\gluetomu\skip6 - \120pt30pt\mutoglue\muskip6 - \120pt30pt\mutoglue\muexpr\gluetomu\glueexpr\skip6\9\9 - \100pt00pt\glueexpr\skip6+0pt\9 - \10-2pt1-3pt\skip1 - \10-2pt1-3pt\mutoglue\muskip1 - \125pt36pt\skip2 - \125pt36pt\mutoglue\muskip2 -\endgroup - -% -% -- Check sparse arrays -\typeout{Checking sparse arrays:} -\begingroup - \def\2#1{#1\1=-1#1\1=32768#1\1=0#1\1=32767\typeout{\meaning\1=\the\1.}} - \2\countdef % Bad register code (-1) ...and (32768). - \2\dimendef % Bad register code (-1) ...and (32768). - \2\skipdef % Bad register code (-1) ...and (32768). - \2\muskipdef % Bad register code (-1) ...and (32768). - \2\toksdef % Bad register code (-1) ...and (32768). - \tracingrestores=1 - \count20=5 - \count2000=5 - \dimen21=5pt - \dimen2100=5pt - \skip22=5pt\relax \muskip2200=5mu\relax - \dimendef\8=256\relax \let\9=\8 \let\8=\relax \show\9 -\endgroup -\begingroup - \def\4#1#2#3#4{{\typeout{testing #1 registers ...}% - \5\2{#1}\5\3{#1def}% define, e.g., \count and \countdef - \newlinechar=`^^J \tracingrestores=1 {\tracingassigns=1 - \22000=#2} \22001=#3 \3\1=2002 \1=#4 - \typeout{\6\22000=\the\22000,^^J \6\22001=\the\22001,^^J - \6\22002=\the\22002,^^J \7\1=\the\1.}% - \expandafter\unless\expandafter\ifx\2\toks -% more tests for \count, \dimen, \skip, and \muskip - \advance\22000by#3 \advance\1by#3 \8 - \multiply\22000by10 \multiply\1by10 \8 - \divide\22000by5 \divide\1by5 \8 - \else -% more tests for \toks - \begingroup - \tracingassigns=1 - \toks20=#2 \toks21=#3 \toks2100=#4 - \1=\toks20 \1=\toks21 - \toks2200=\toks20 \toks2200=\toks21 - \1=\toks2000 \1=\toks2001 - \toks2200=\toks2000 \toks2200=\toks2001 - \toks30=\1 \toks30=\toks2000 \toks30=\toks2001 - \toks3000=\1 \toks3000=\toks2000 \toks3000=\toks2001 - \endgroup - \fi - \tracingassigns=1 \global\22002=#3 \1=#4 \global\1=#2 - }} - \def\5#1#2{\edef#1{\csname#2\endcsname}} - \def\6{\expandafter\string} - \def\7{\expandafter\meaning} - \def\8{\typeout{\6\22000=\the\22000,^^J \6\22002=\the\22002,^^J - \7\1=\the\1.}} - \4{count}{0}{5}{7} % test \count, \countdef - \4{dimen}{0pt}{2.5pt}{3.5pt} % test \dimen, \dimendef - \4{skip}{0pt}{2.5ptplus1fil}{3.5ptminus1fill} % test \skip, \skipdef - \4{muskip}{0mu}{2.5muplus1fil}{3.5muminus1fill} % test \muskip, \muskipdef - \4{toks}{{}}{{a b c}}{{d e f}} % test \toks and \toksdef -\endgroup -\begingroup - \typeout{testing box registers ...} - \def\2#1{#1\1=-1#1\1=32768#1\1=0#1\1=32767\typeout{\meaning\1=\the\1.}} - \2\mathchardef % Bad mathchar (-1) ...and (32768). - \setbox-1=\copy32768 % Bad register code (-1) ...and (32768). - \global\setbox32768=\copy-1 % Bad register code (32768) ...and (-1). - \wd32768=\ht-1 % Bad register code (32768) ...and (-1). - \showbox-1 % Bad register code (-1). - \def\2#1{\typeout{\string\box#1=% - \ifhbox#1 \ifvbox#1 \else\ifvoid#1 \else\string\hbox\fi\fi\fi - \ifvbox#1 \ifhbox#1 \else\ifvoid#1 \else\string\vbox\fi\fi\fi - \ifvoid#1 void\else - \ifdim\ht#1 =0pt \else,ht=\the\ht#1 \fi - \ifdim\dp#1 =0pt \else,dp=\the\dp#1 \fi - \ifdim\wd#1 =0pt \else,wd=\the\wd#1 \fi - \fi.}} - \def\1#1{\2{3210#1}} - \tracingrestores=1 - \setbox32101=\hbox to 3pt{% - \global\setbox32102=\vbox to 5pt{% - \setbox32103=\vtop to 7pt{% - \showgroups - }% - }% - } - \showbox32100 - \showbox32101 - \11\12\13 - \setbox32103=\copy32101 \11\13 - \setbox32104=\box32102 \12\14 - \ht32101=2pt \11 - \ht32102=4pt \12 - \dp32103=6pt \13 - \wd32104=8pt \14 - \setbox32105=\hbox{\vbox to1pt{}\hskip5pt} \15 - \setbox32106=\hbox{% - \unhcopy32105 \15% - \unhbox32105 \15% - \unhcopy32105 \unhbox32105 } \15 \16 - \setbox32105=\vbox{\hbox to1pt{}\vskip5pt} \15 - \setbox32106=\vbox{% - \unvcopy32105 \15% - \unvbox32105 \15% - \unvcopy32105 \unvbox32105 } \15 \16 - \setbox32105=\vbox{\vbox to10pt{}\penalty0\vbox to20pt{}} \15 - \setbox32106=\vsplit32105 to 10pt \16 \15 -\endgroup - -% -% -- Check \lastlinefit -\typeout{Checking \string\lastlinefit:} -\begingroup - \def\1{\setbox0=\vbox{\noindent\2\2\2\2\3\2}\showbox0 - \setbox0=\vbox{\unvbox0 \setbox0=\lastbox \showbox0 }} - \def\2{\hbox to30pt{}\hskip 5pt plus 20pt minus 4pt } - \def\3{} - \tracingparagraphs=1 \showboxdepth=1 - \hbadness=100 \pretolerance=9000 - \parfillskip=0pt plus 1fill \relax - \hsize=96pt - \lastlinefit=-1 \1 - \lastlinefit=500 \1 - \lastlinefit=1001 \1 - \hsize=98pt - \begingroup - \rightskip=0pt plus 1fill \relax - \lastlinefit=1000 \1 - \leftskip=0pt plus -1fill \relax - \lastlinefit=500 \1 - \endgroup - \lastlinefit=1000 \1 - \hsize=100pt - \lastlinefit=0 \1 - \lastlinefit=500 \1 - \lastlinefit=1000 \1 - \hsize=110pt - \begingroup - \let\3=\hfil - \lastlinefit=1000 \1 - \endgroup - \lastlinefit=500 \1 - \lastlinefit=1000 \1 - \hsize=120pt - \lastlinefit=0 \1 - \lastlinefit=500 \1 - \lastlinefit=1000 \1 -\endgroup - -% -% -- Check expansion of V 2 \protected macros -\typeout{Checking expansion of V 2 \string\protected\space macros:} -\begingroup - \protected\def\1{\omit} \def\2{\omit} \def\3{relax} - \setbox0=\vbox{\halign{&\typeout{# (l.\number\inputlineno)}\cr - \1& \1\cr - \2& \2\cr - \3& \3\cr}} -\endgroup - -% -% -- Check hyphenation and \savinghyphcodes -\typeout{Checking hyphenation and \string\savinghyphcodes:} -\begingroup - \def\2#1#2 {\language=#1 #2 } - \def\1#1 {\noindent\trip\ \20#1 \21#1 \22#1 \23#1 \24#1 \par} - \parfillskip=0pt \hbadness=0 \showboxdepth=0 - \hsize=16383.99999pt \pretolerance=-1 \tolerance=-1 - \setbox0=\vbox{ - \lccode`A=`a \lccode`B=`b - \language=0 \hyphenation{qq-App qqB-pp} - \language=1 \hyphenation{qq-App qqB-pp} - \language=2 \hyphenation{qq-A-pp qqB-pp} - \language=3 \hyphenation{qq-App qq-B-pp} - \1ppAqq \1upAqq \1ppBqq \1upBqq - \lccode`A=`r \lccode`B=`b - \1ppAqq \1upAqq \1ppBqq \1upBqq - \lccode`A=`a \lccode`B=`r - \1ppAqq \1upAqq \1ppBqq \1upBqq - } - \setbox0=\vbox{\language=3 \1qqapp \1qqbpp \1qqrpp } -\endgroup - -% -% -- Check \savingvdiscards, \pagediscards, and \splitdiscards -\typeout{Checking \string\savingvdiscards, \string\pagediscards, and - \string\splitdiscards:} -\begingroup - \setbox27=\vbox{\noindent$\splitdiscards\noindent$\pagediscards} - \showbox27 - \setbox 27 = \vbox { - \vbox to 20 pt {} - \prevdepth = -10000 pt - \openout 0 = abc - \penalty 0 - \write 1 {write 1} - \vskip 10 pt plus 1 pt minus 1 pt - \write 2 {write 2} - \penalty 0 - \closeout 3 - \kern 10 pt - \vbox to 20 pt {} - \vfil - } - \def\1 #1 #2 {% - \savingvdiscards = #1 - \setbox 28 = \copy 27 - { - \setbox 0 = \vbox { - \vsplit 28 to #2 pt - \prevdepth = -10000 pt - \splitdiscards - \box 28 - } - \showbox 0 - } - } - \1 -1 20 \1 0 30 \1 1 20 \1 2 30 - \output = {% - \setbox 0 = \vbox { \pagediscards } - \showbox 0 - \showbox 255 - \setbox 0 = \box 255 - \global \deadcycles = 0 - } - \def\1{{\setbox 0 = \vbox { \pagediscards \showlists }}} - \savingvdiscards = 0 \vfil \kern 20 pt \1 \penalty -1 \1 - \savingvdiscards = 1 \vfill \kern 2 pt \1 \penalty 10 \1 - \kern 5 pt \write 1 {} \penalty 0 - { \savingvdiscards = 0 - \kern 6 pt \write 2 {} \penalty 1 - } - \kern 7 pt \write 3 {} \hbox {} \penalty -10000 - \1 -\endgroup - -% -% -- Check \interlinepenalties, \clubpenalties, \widowpenalties, -% and \displaywidowpenalties -\typeout{Checking \string\interlinepenalties, \string\clubpenalties, - \string\widowpenalties, and \string\displaywidowpenalties:} -\begingroup - \begingroup - \def\2#1{% - \typeout{\string#1-1=\the#1-1}% - \typeout{\string#10=\the#10}% - \typeout{\string#15=\the#15}% - \typeout{\string#1\string#10=\the#1#10}} - \def\1{% - \2\interlinepenalties - \2\clubpenalties - \2\widowpenalties - \2\displaywidowpenalties} - \def\5#1#2{\number#1#2 - \ifnum#2<#10 \space\expandafter\5\expandafter#1\expandafter - {\number\numexpr#2+1\expandafter}\fi} - \def\4#1{\typeout{\string#1=\5#1{0}}} - \def\3{% - \4\interlinepenalties - \4\clubpenalties - \4\widowpenalties - \4\displaywidowpenalties} - \tracingassigns=1 \tracingrestores=1 - \3 \1 - \interlinepenalties=3 101 102 103 - \clubpenalties=1 1 \clubpenalties=4 201 202 203 204 - \widowpenalties=5 301 302 303 304 305 - \displaywidowpenalties=6 401 402 403 404 405 406 - \3 \1 - \setbox0=\vbox{} - \endgroup - \parfillskip=0pt \interlinepenalty=7 \clubpenalty=500 \widowpenalty=300 - \displaywidowpenalty=310 \rightskip=0ptplus1fil \hsize=20pt - \def\3#1 {\setbox0=\lastbox \unskip \count0=\lastpenalty \unpenalty - \ifnum\count0=#1 \else \typeout{Wrong penalty \number\count0 - \space should be #1 (l.\number\inputlineno)}\fi} - \def\2{\vrule height1ptwidth19pt\hskip5pt } - \def\1#1#2 #3 #4 #5 #6 #7 {\setbox0=\vbox{#1\noindent\2\2\2\2$$ - $$\2\2\2\2\par\3#7 \3#6 \3#5 \30 \30 \30 \30 \3#4 \3#3 \3#2 \30 }} - - \1{\interlinepenalties=8 8 7 6 5 4 3 2 1 }508 7 316 501 1 301 - \1{\clubpenalties=2 200 100 }207 107 417 207 107 407 - \1{\widowpenalties=2 2000 1000 \displaywidowpenalties=3 2200 1100 0 }% - 507 1107 2207 1507 1007 2007 -\endgroup - -% -% -- Check hyphenation of LR and RL segments -\typeout{Checking hyphenation of LR and RL segments:} -\begingroup - \setbox0=\vbox{\trip -% \language=5 - \lccode`M=`M \hyphenation{MM-MM} - \TeXXeTstate=1 - \hsize=0pt - \parfillskip=0pt - \noindent{} MMMM \beginL MMMM MMMM MMMM\endL{} \beginR MMMM\endR \par - } -\endgroup - -% -\showboxbreadth=10\showboxdepth=10 -\tracingonline=1\tracingoutput=1 -\end -\error{e-VirTeX: can't happen in e-trip test!} -%% End of file `etrip.tex'. diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip.typ b/Build/source/texk/web2c/etexdir/etrip/etrip.typ deleted file mode 100644 index 1d6d8716829..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip.typ +++ /dev/null @@ -1,20 +0,0 @@ -This is DVItype, Version 3.6 (TeX Live 2014) -Options selected: - Starting page = *.*.*.*.*.*.*.*.*.* - Maximum number of pages = 1000000 - Output level = 2 (mnemonics) - Resolution = 72.27000000 pixels per inch -numerator/denominator=25400000/473628672 -magnification=1000; 0.00001526 pixels per DVI unit -' TeX output 2014.01.22:1125' - -42: beginning of page 1.0.0.0.0.0.0.0.0.0 -87: eop - -88: beginning of page 1.0.0.0.0.0.0.0.0.0 -133: eop - -134: beginning of page 1.0.0.0.0.0.0.0.0.0 -179: eop -Postamble starts at byte 180. -maxv=0, maxh=0, maxstackdepth=0, totalpages=3 diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip1.in b/Build/source/texk/web2c/etexdir/etrip/etrip1.in deleted file mode 100644 index 0ad278fb43e..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip1.in +++ /dev/null @@ -1,2 +0,0 @@ - -*\input trip diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip2.in b/Build/source/texk/web2c/etexdir/etrip/etrip2.in deleted file mode 100644 index 8001246f85a..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip2.in +++ /dev/null @@ -1 +0,0 @@ -*etrip diff --git a/Build/source/texk/web2c/etexdir/etrip/etrip3.in b/Build/source/texk/web2c/etexdir/etrip/etrip3.in deleted file mode 100644 index 97e7957c245..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etrip3.in +++ /dev/null @@ -1 +0,0 @@ -&etrip etrip diff --git a/Build/source/texk/web2c/etexdir/etrip/etripin.log b/Build/source/texk/web2c/etexdir/etrip/etripin.log deleted file mode 100644 index af805ca4c67..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etripin.log +++ /dev/null @@ -1,41 +0,0 @@ -This is e-TeX, Version 3.14159265-2.6 (TeX Live 2014) (INITEX) 22 JAN 2014 11:25 -entering extended mode -***etrip -(./etrip.tex -This is the e-Trip test [2014-01-22] for e-TeX v3.14159265-2.6. -(You are using e-TeX version/revision 2.6) -e-IniTeX: Assigning category codes, tracing switches, other codes, -definitions for e-VirTeX e-Trip test run, constants and registers, -fonts, some math characters, some math parameters, hyphenation, - -Underfull \hbox (badness 10000) in paragraph at lines 99--99 -[] \trip pp1aqq up1aqq ppb1qq upb1qq pp1r1qq up1r1qq qqb1pp - -\hbox(8.0+2.0)x16383.99998, glue set 1166.92857 [] - -! Not a letter. -l.100 ...guage=4 \hyphenation{-q - -}} -Letters in \hyphenation words must have \lccode>0. -Proceed; I'll ignore the character I just read. - - -enable e-TeX enhancements (TeXXeT), -prepare saved items (not to be dumped), everyjob ...dumped. ) -Beginning to dump on file etrip.fmt - (preloaded format=etrip 2014.1.22) -1491 strings of total length 26258 -281 memory locations dumped; current usage is 36&167 -408 multiletter control sequences -\font\nullfont=nullfont -\font\trip=etrip -\font\smalltrip=etrip at 5.0pt -\font\bigtrip=etrip at 20.0pt -2279 words of font info for 3 preloaded fonts -2 hyphenation exceptions -Hyphenation trie of length 434 has 12 ops out of 35111 - 3 for language 3 - 3 for language 2 - 3 for language 1 - 3 for language 0 -No pages of output. diff --git a/Build/source/texk/web2c/etexdir/etrip/etripman.tex b/Build/source/texk/web2c/etexdir/etrip/etripman.tex deleted file mode 100644 index 16464f8fb45..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/etripman.tex +++ /dev/null @@ -1,436 +0,0 @@ -% The e-TRIP manual: How to validate e-TeX - last modified 25 Aug 2004 -% -% some e-TeX numbers -% -\def\minps{32000} % minimum pool_size for e-TRIP test -\def\minms{3200} % minimum max_string for e-TRIP test -% -\def\extracs{66} % additional multiletter control sequences -\def\extrasv{2} % additional save stack positions -\def\extrabf{23} % additional input buffer positions -\def\extramw{38} % additional memory words dumped -% -\font\eighttt= cmtt8 -\font\eightrm= cmr8 -\font\rtitlefont= cmr7 scaled\magstep5 -\font\ititlefont= cmmi7 scaled\magstep5 -\def\titlefont{\rtitlefont \textfont1=\ititlefont} -\def\eTeX{$\varepsilon$-\TeX} -\def\NTS{NTS} -\let\mc=\eightrm -\rm -\let\mainfont=\tenrm - -\def\.#1{\hbox{\tt#1}} -\def\\#1{\hbox{\it#1\/\hskip.05em}} % italic type for identifiers - -\parskip 2pt plus 1pt -\baselineskip 12pt plus .25pt - -\def\verbatim#1{\begingroup \frenchspacing - \def\do##1{\catcode`##1=12 } \dospecials - \parskip 0pt \parindent 0pt - \catcode`\ =\active \catcode`\^^M=\active - \tt \def\par{\ \endgraf} \obeylines \obeyspaces - \input #1 \endgroup} -% a blank line will be typeset at the end of the file; -% if you're unlucky it will appear on a page by itself! -{\obeyspaces\global\let =\ } - -\def\verblines#1 {$$\frenchspacing \global\count255=-#1 - \abovedisplayskip=0pt \belowdisplayskip=\abovedisplayskip - \def\do##1{\catcode`##1=12 }\dospecials - \def\par{\cr\noalign{\global\advance\count255by1 }% - \ifnum\count255<0 \else \egroup $$\fi}% - \obeylines \obeyspaces - \halign\bgroup\indent\tt##\hfil\cr} - -\output{\shipout\box255\global\advance\pageno by 1} % for the title page only -\null -\vfill -\centerline{\titlefont A torture test for \eTeX} -\vskip 6pt -\centerline{({\sl Version 2.2, August 2004\/})} -\vskip 18pt -\centerline{by The \NTS\ Team} -\vskip 6pt -\centerline{Peter Breitenlohner, Max-Planck-Institut f\"ur Physik, M\"unchen} -\vskip 6pt -\centerline{Bernd Raichle, Institut f\"ur Informatik, Universit\"at Stuttgart} -\vfill -\centerline{\vbox{\hsize 4in -\noindent Programs that claim to be implementations of \eTeX\ are -supposed to be able to process the test routines described in this -report, producing the outputs described in this report.}} -\vskip 24pt -{\baselineskip 9pt -\eightrm\noindent -The preparation of this report was supported in part by DANTE, -Deutschsprachige Anwendervereinigung \TeX\ e.V.\hfil\break -`\TeX' is a trademark of the American Mathematical Society. - -}\pageno=0\eject - -\output{\shipout\vbox{ % for subsequent pages - \baselineskip0pt\lineskip0pt - \hbox to\hsize{\strut - \ifodd\pageno \hfil\eightrm\firstmark\hfil - \mainfont\the\pageno - \else\mainfont\the\pageno\hfil - \eightrm\firstmark\hfil\fi} - \vskip 10pt - \box255} - \global\advance\pageno by 1} -\let\runninghead=\mark -\outer\def\section#1.{\noindent{\bf#1.}\quad - \runninghead{\uppercase{#1} }\ignorespaces} - -\section Introduction. -The program \TeX82 by D.E.~Knuth is in the public domain, and its -algorithms are published; he has done this since he does not want to -discourage its use by placing proprietary restrictions on the software. -However, he doesn't want faulty imitations to masquerade as \TeX\ -processors, since users want \TeX\ to produce identical results on -different machines. He has copyrighted the programs so that he has some -chance to forbid unauthorized copies; he explicitly authorizes copying -of correct \TeX\ implementations, and not of incorrect ones! In order -to determine, what is a correct implementation of \TeX, he has devised -a test suite for \TeX, the \.{TRIP} test [1]. - -The program \eTeX\ by `The \NTS\ Team' extends the capabilities of \TeX\ -by adding a relatively small amount (less than 10 per cent) of code; it -is in the public domain, and its algorithms (beyond those of \TeX) are -published. This report has been inspired by and is based on the -\.{TRIP} manual. It describes the \.{e-TRIP} test, a test suite that -allows one to determine whether what one has is a correct implementation -of \eTeX. - -If somebody claims to have a correct implementation of \eTeX, we will -not believe it until we see that the \.{e-TRIP} test is performed -properly. We propose, in fact, that a program must meet two criteria -before it can justifiably be called \eTeX: (1)~The person who wrote it -must be happy with the way it works at his or her installation; and -(2)~the program must produce the correct results from the \.{e-TRIP} -test. Hence we are planning to do whatever we can to suppress any -systems that call themselves \eTeX\ without meeting conditions (1) -and~(2). We have copyrighted the program (1994,98 by The \NTS\ Team, -1999-2004 by P.~Breitenlohner) so that we have some chance to forbid -unauthorized copies; we explicitly authorize copying of correct \eTeX\ -implementations, and not of incorrect ones! - -The process of generating an \eTeX\ implementation for a particular -system [2] is based on that of generating a \TeX\ implementation for the -same system. Moreover, when \eTeX\ is used in compatibility mode, it is -supposed to be 100 per cent compatible with \TeX. Thus a correct \eTeX\ -implementation, when running in compatibility mode, must pass the -\.{TRIP} test. In fact, the first part of the \.{e-TRIP} test for a -particular implementation of \eTeX\ consists in performing the standard -\.{TRIP} test (a)~for \eTeX\ in compatibility mode and (b)~for \eTeX\ in -extended mode. The deviations in the test output from step~(a) should, -of course, be limited to those explicitly allowed by Knuth and described -in Appendix~A, item~5 of the \.{TRIP} manual. Any additional deviations -in the test output from step~(b) must be accounted for by \eTeX's -additional algorithms and are described in detail in this report. Once -an \eTeX\ implementation has passed these preliminary tests, it should be -subjected to the second part of the \.{e-TRIP} test. There the extended -features and algorithms of \eTeX\ are tested under normal circumstances -as well as in situations a normal user would never dream of (in the -spirit of the \.{TRIP} test). - -The remainder of this report consists of appendices, whose contents ought -to be described briefly here: - -Appendix A explains in detail how to carry out the first part of the -test of \eTeX, given copies of the files described in the \.{TRIP} -manual. - -Appendix B explains how to carry out the \eTeX\ specific test, given -copies of the files described in the other appendices. - -Appendix C is \.{eTRIP.TEX}, a fiendish test file for \eTeX. - -Appendix D is \.{eTRIP.PL}, the property-list description of a -special font called \.{etrip}. - -Appendix E is \.{eTRIPIN.LOG}, a correct transcript file \.{eTRIP.LOG} -that results if \.{e-TRIPTEX} is applied to \.{eTRIP.TEX}. -This run of \.{e-TRIPTEX} also creates a binary format file called -\.{eTRIP.FMT} (or similar). - -Appendix F is a correct transcript file \.{eTRIP.LOG} that results if -\.{e-TRIPTEX} or any other version of \eTeX\ is applied to \.{eTRIP.TEX} -with format \.{eTRIP.FMT}. - -Appendix G is \.{eTRIP.TYP}, the symbolic version of a correct output -file \.{eTRIP.DVI} that was produced at the same time as the -\.{eTRIP.LOG} file of Appendix~F. - -Appendix H is \.{eTRIP.OUT}, a short file written out and read in by -\eTeX\ when it processes \.{eTRIP.TEX}. - -Appendix I is \.{eTRIP.FOT}, an abbreviated version of Appendix F that -appears on the user's terminal during the run that produces -\.{eTRIP.LOG}. - -\vskip 24pt plus 24pt -\section References. -\item {[1]} -{\sl A torture test for \TeX\/}, -by Donald E.~Knuth, Stanford Computer Science Report~1027. - -\item {[2]} -{\sl How to generate \eTeX\/}, -by The \NTS\ Team (Peter Breitenlohner and Phil Taylor). - -\item {[3]} -{\sl The \.{WEB} system of structured documentation\/}, -by Donald E.~Knuth, Stanford Computer Science Report~980. - -\item {[4]} -{\sl \TeX ware\/}, by Donald E.~Knuth and David R.~Fuchs, -Stanford Computer Science Report~1097. - -\vfill\eject - -\section Appendix A: How to test \eTeX\ (part 1). - -\item{0.} Let's assume that you have copies of the files \.{TRIP.TEX}, -\.{TRIP.PL}, \.{TRIPIN.LOG}, \.{TRIP.LOG}, \.{TRIP.TYP}, and -\.{TRIP.FOT} as described in Appendices~B, C, D, E, F, and~G of the -\.{TRIP} manual [1] (in a safe place so that these ``master'' files will -not be clobbered). Furthermore, let's suppose that you have a working -\.{WEB} system [3], and that you have working programs \.{PLtoTF} and -\.{DVItype}, as described in the \TeX ware report [4]. Finally let's -assume that you are able to generate \eTeX\ as described in [2]. - -\item{1.} Use \.{PLtoTF} to convert \.{TRIP.PL} into \.{TRIP.TFM}; -install \.{TRIP.TFM} in the standard file area for \TeX\ font metric -files (or set a suitable environment variable or similar such that these -files will be found by the program). - -\item{2.} Generate \.{e-TRIPTEX}, a special version of \.{e-INITEX}. -The parameters for \.{e-TRIPTEX} should agree with those for \.{TRIPTEX} -(as described in [1]), except that you should set \\{pool\_size} to a -value $\ge\minps$ and \\{max\_strings} to a value $\ge\minms$. - -\item{3.} Perform the \.{TRIP} test as described in Appendix~A, -items~3--7 of [1], with \.{e-TRIPTEX} as prepared in step~2. The program -will run in compatibility mode and should therefore be fully compatible -with \.{TRIPTEX} as described in [1]; apart from the allowed differences -listed in item~5, the test output should deviate from the master files in -the following \eTeX-specific point (and only in this one): - -\itemitem{a)} The name and version by which the program announces itself -will be different; the extension of the format file produced during the -first \.{e-TRIPTEX} run may be different. - -\def\bs{{\char`\\}} -\def\sp{{\char'40}} - -\item{4.} Perform steps 3--7 of the \.{TRIP} test once again with -\.{e-TRIPTEX}. During the first run type `\.{*\bs input\sp trip}' -instead of `\.{\bs input\sp trip}', as a consequence \.{e-TRIPTEX} will -run in extended mode. During the second run type `\.{\&trip\sp\bs -toksdef\bs tokens=0\sp\bs input\sp trip}' instead of `\.{\sp\&trip\sp\sp -trip\sp}'. The test output should differ from that of step~3 above in -the following respects (and only in these): - -\itemitem{a)} The date and\slash or time will naturally be different. - -\itemitem{b)} The message `\.{entering extended mode}' will appear on -the terminal and in the \.{TRIP.LOG} files. - -\itemitem{c)} The input `\.{*\bs input trip}' instead of -`\.{\bs input trip}' is recorded in the first \.{TRIP.LOG} file; -similarly the input `\.{\&trip\sp\bs toksdef\bs tokens=0\sp\bs input\sp -trip}' instead of `\.{\sp\&trip\sp\sp trip\sp}' is recorded in the -second \.{TRIP.LOG} file. - -\itemitem{d)} The following 6 lines (the last of them blank) will be -missing from the first \.{TRIP.LOG} file\verblines 6 -! Bad register code (256). -l.29 ...{1} \toksdef\tokens=256 - \show\errorstopmode -A register number must be between 0 and 255. -I changed this one to zero. - - -\itemitem{e)} The first \.{TRIP.LOG} file will report the dumping of -\extramw~additional memory words. - -\itemitem{f)} If the date has changed, the number of string characters -dumped by the first \.{e-TRIPTEX} run may vary by $\pm2$. - -\itemitem{g)} Both \.{e-TRIPTEX} runs report \extracs~additional -multiletter control sequences (in the \.{TRIP.LOG} files). - -\itemitem{f)} The second \.{e-TRIPTEX} run reports the unfinished -group(s) when the program terminates; there are three additional lines -(the first of them blank) on the terminal and in the \.{TRIP.LOG} -file\verblines 3 - -### semi simple group (level 1) entered at line 429 (begingroup) -### bottom level -The second \.{TRIP.LOG} does not contain six lines\verblines 1 -{restoring \fam=-1} -one line\verblines 1 -{restoring \displayindent=0.0pt} -and one line\verblines 1 -{restoring current font=\ip} -Ten lines displaying an \.{\bs hbox} contain the additional text -`\.{, display}'. -Finally the second \.{TRIP.LOG} reports the additional use of -\extrabf~input buffer (\.{b}) and \extrasv~save (\.{s}) stack positions. - -\vfill\eject - -\section Appendix B: How to test \eTeX\ (part 2). - -\item{5.} Assume that you have copies of the ``master'' files -\.{eTRIP.TEX}, \.{eTRIP.PL}, \.{eTRIPIN.LOG}, \.{eTRIP.LOG}, -\.{eTRIP.TYP}, \.{eTRIP.OUT}, and \.{eTRIP.FOT}, as in Appendices C, D, -E, F, G, H, and~I (again in a safe place). - -\item{6.} Use \.{PLtoTF} to convert \.{eTRIP.PL} into \.{eTRIP.TFM}; -install \.{eTRIP.TFM} in the standard file area for \TeX\ font metric -files (or set a suitable environment variable or similar). - -\item{7.} Run \.{e-TRIPTEX}; in response to the `\.{**}' prompt, type -`\.{*etrip}'. You should get an output file \.{eTRIP.LOG} that matches -the file \.{eTRIPIN.LOG} (Appendix~E). Contrary to the analogous step -in the \.{TRIP} test (steps~3 and~4 above) there should be no error -messages; lines in the output saying ``Emergency stop'' would indicate -that you have performed this test with a standard \TeX\ or with \eTeX\ -in compatibility mode. - -\item{8.} Run \.{e-TRIPTEX} again; this time type -`\.{\&etrip{\char'40}etrip}'. You should get outputs \.{eTRIP.LOG}, -\.{eTRIP.DVI}, and \.{eTRIP.OUT}. Furthermore, your terminal should -receive output that matches \.{eTRIP.FOT} (Appendix~I). Once again, the -terminal will be getting no output during the middle part of this test. - -\item{9.} Compare the \.{eTRIP.LOG} file from step 8 with the ``master'' -\.{eTRIP.LOG} file of step~5. There should be no lines saying -``Emergency stop'' (see above) or ``Bug in your e-TeX implementation''; -there should be perfect agreement between these files except in the -following respects: - -\itemitem{a)} The dates and possibly the file names will naturally be -different. - -\itemitem{b)} Glue settings in the displays of \TeX\ boxes are subject -to system-dependent rounding, so slight deviations are permissible. -However, such deviations apply only to the `\.{glue set}' values that -appear at the end of an \.{\char'134hbox} or \.{\char'134vbox} line; all -other numbers should agree exactly, since they are computed with integer -arithmetic in a prescribed system-independent manner. - -\itemitem{c)} The amount of space in kerns that are marked ``for -accent'' are, similarly, subject to system-dependent rounding. - -\itemitem{d)} If you had different values for \\{stack\_size}, -\\{buf\_size}, etc., the corresponding capacity values will be different -when they are printed out at the end. - -\itemitem{e)} Help messages may be different; indeed, the author of -\TeX\ encourages non-English help messages in versions of \TeX\ for -people who don't understand English as well as some other language. -Similarly, \eTeX\ could well be used with non-English help messages. - -\itemitem{f)} The total number and length of strings at the end may well -be different. - -\itemitem{g)} If your \eTeX\ uses a different memory allocation or -packing scheme or \.{DVI} output logic, the memory usage statistics may -change. - -\item{10.} Use \.{DVItype} to convert your file \.{eTRIP.DVI} to a file -\.{eTRIP.TYP}. The following options should be set when using -\.{DVItype}: -$$\vbox{\halign{#\hfil&\hfil#\cr -Output level = 2\cr -Starting page = \.{*.*.*.*.*.*.*.*.*.*}\hskip-20pt\cr -Number of pages = 1000000&(this is the default)\cr -Resolution = 7227/100&(this is one point per pixel)\cr -New magnification = 0&(this is the default)\cr}}$$ -The resulting file should agree with the master \.{eTRIP.TYP} file of -step~5, except that some of the values might be a little off due to -floating-point rounding discrepancies. Furthermore there may be -differences between `\\{right}' and `\\w' and `\\x' commands, and -between `\\{down}' and `\\y' and `\\z'; the key thing is that all -characters and rules and \\{xxx}'s should be in almost the same -positions as specified in Appendix~G. If you have set -\\{dvi\_buf\_size} to 800, then your \.{DVI} file should be virtually -identical to the one supplied.) - -\vfill\eject - -\section Appendix C: The \.{eTRIP.TEX} file. -The contents of the test routine are prefixed here with line numbers, -for ease in comparing this file with the error messages printed later; -the line numbers aren't actually present. -\runninghead{APPENDIX C: \.{eTRIP.TEX} (CONTINUED)} - -\vskip 8pt -\begingroup\count255=0 -\everypar{\global\advance\count255 by 1 - \hbox to 20pt{\sevenrm\hfil\the\count255\ \ }} -\verbatim{etrip.tex} -\endgroup -\vfill\eject - -\section Appendix D: The \.{eTRIP.PL} file. -At the moment the \.{eTRIP.PL} file is just a copy of \.{TRIP.PL} as -described in Appendix~C of [1]. - -\section Appendix E: The \.{eTRIPIN.LOG} file. -When \.{e-TRIPTEX} makes the \.{eTRIP.FMT} file, it also creates a file -called \.{eTRIP.LOG} that looks like this. -\runninghead{APPENDIX E: \.{eTRIPIN.LOG} (CONTINUED)} - -\vskip8pt -\verbatim{etripin.log} -\vfill\eject - -\section Appendix F: The \.{eTRIP.LOG} file. -Here is the major output of the \.{e-TRIP} test; it is generated by -running \.{e-TRIPTEX} and loading \.{eTRIP.FMT}, then reading -\.{eTRIP.TEX}. -\runninghead{APPENDIX F: \.{eTRIP.LOG} (CONTINUED)} - -{\let\tt=\eighttt\leftskip 1in\baselineskip 9pt plus .1pt minus .1pt -\vskip8pt -\verbatim{etrip.log} -} -\vfill\eject - -\section Appendix G: The \.{eTRIP.TYP} file. -Here is another major component of the test. It shows the output of -\.{DVItype} applied to the file \.{eTRIP.DVI} that was created at the -same time Appendix F was produced. -\runninghead{APPENDIX G: \.{eTRIP.TYP} (CONTINUED)} - -{\let\tt=\eighttt\leftskip 1in\baselineskip 9pt plus .1pt minus .1pt -\vskip8pt -\verbatim{etrip.typ} -} -\vfill\eject - -\section Appendix H: The \.{eTRIP.OUT} file. -This short file was written out once and read in several times, during -the time Appendix F was being produced. There are only four lines. -\runninghead{APPENDIX H: \.{eTRIP.OUT} (CONTINUED)} - -\vskip8pt -\verbatim{etrip.out} -\vfill\eject - -\section Appendix I: The \.{eTRIP.FOT} file. -This shows what appeared on the terminal while Appendix F was being -produced. -\runninghead{APPENDIX I: \.{eTRIP.FOT} (CONTINUED)} - -\vskip8pt -\verbatim{etrip.fot} - -\vfill\end diff --git a/Build/source/texk/web2c/etexdir/etrip/texmf.cnf b/Build/source/texk/web2c/etexdir/etrip/texmf.cnf deleted file mode 100644 index b4e4bb4c6bb..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/texmf.cnf +++ /dev/null @@ -1,41 +0,0 @@ -% etexdir/etrip/texmf.cnf -- configuration for the e-trip test. - -% These values apply to all the programs, and they are necessary for any -% kind of reasonable diff. -error_line = 64 -half_error_line = 32 -max_print_line = 72 - -% e-TeX. -main_memory = 3999 % can't change mem_bot, it stays 0 -max_strings = 3300 -pool_size = 34000 - -string_vacancies = 8000 -pool_size = 32000 - -% TeX end e-TeX. -font_mem_size = 20000 -font_max = 75 -stack_size = 200 -nest_size = 40 -buf_size = 500 -save_size = 600 -dvi_buf_size = 800 -% Although hyph_size is settable, it can't be <hyph_prime, which is 607, -% and the original trip setting is 307, so no point in changing the default. - -% Avoid running any MakeTeX* program. -MAKETEXTFM = 0 -MAKETEXTEX = 0 -MAKETEXMF = 0 - -% Search paths. -% (e)trip.tex: -TEXINPUTS = . -% (e)trip.tfm: -TFMFONTS = . -% (e)trip.fmt: -TEXFORMATS = . -% etex.pool: -TEXPOOL = . diff --git a/Build/source/texk/web2c/etexdir/etrip/trip2.in b/Build/source/texk/web2c/etexdir/etrip/trip2.in deleted file mode 100644 index 86f72b31b17..00000000000 --- a/Build/source/texk/web2c/etexdir/etrip/trip2.in +++ /dev/null @@ -1 +0,0 @@ -&trip \toksdef\tokens=0 \input trip diff --git a/Build/source/texk/web2c/etexdir/etriptest.test b/Build/source/texk/web2c/etexdir/etriptest.test deleted file mode 100755 index 04e196d9624..00000000000 --- a/Build/source/texk/web2c/etexdir/etriptest.test +++ /dev/null @@ -1,128 +0,0 @@ -#! /bin/sh -vx -# $Id$ -# Copyright 2017 Karl Berry <tex-live@tug.org> -# Copyright 2009-2014 Peter Breitenlohner <tex-live@tug.org> -# You may freely use, modify and/or distribute this file. - -testdir=$abs_srcdir/triptrap -etestdir=$abs_srcdir/etexdir/etrip - -TEXMFCNF=$etestdir; export TEXMFCNF - -rm -rf etripdir -mkdir etripdir -cd etripdir - -dvitype_args="-output-level=2 -dpi=72.27 -page-start='*.*.*.*.*.*.*.*.*.*'" - -echo ">>> Running e-TRIP test for e-TeX." >&2 -echo ">>> See $etestdir/etrip.diffs for example of acceptable diffs." >&2 - -is_OK=: - -set -x - -echo "*** TRIP test for e-TeX in compatibility mode ***." - -../pltotf $testdir/trip.pl trip.tfm || exit 1 - -../tftopl ./trip.tfm trip.pl || exit 1 - -diff $testdir/trip.pl trip.pl || is_OK=false - -# get same filename in log -$LN_S $testdir/trip.tex . - -../etex --progname=einitex --ini <$testdir/trip1.in >ctripin.fot -if test ! -s trip.fmt; then - echo "*** trip.fmt not created by trip1.in, investigate!" >&2 - exit 1 -fi -mv trip.log ctripin.log || exit 1 -diff $testdir/tripin.log ctripin.log - -# May as well test non-ini second time through. -../etex --progname=etex <$testdir/trip2.in >ctrip.fot -mv trip.log ctrip.log -diff $testdir/trip.fot ctrip.fot - -# 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 - -mv tripos.tex ctripos.tex -diff $testdir/tripos.tex ctripos.tex - -eval ../dvitype $dvitype_args trip.dvi >ctrip.typ || exit 1 -$DIFF $DIFFFLAGS $testdir/trip.typ ctrip.typ - -mv trip.fmt ctrip.fmt - -# ============================== - -echo "*** TRIP test for e-TeX in extended mode ***." - -../etex --progname=einitex --ini <$etestdir/etrip1.in >xtripin.fot -if test ! -s trip.fmt; then - echo "*** trip.fmt not created by etrip1.in, investigate!" >&2 - exit 1 -fi -mv trip.log xtripin.log || exit 1 -diff ctripin.log xtripin.log - -# May as well test non-ini second time through. -../etex --progname=etex <$etestdir/trip2.in >xtrip.fot -mv trip.log xtrip.log -diff ctrip.fot xtrip.fot - -# We use $DIFF instead of `diff' only for those files where there -# might actually be legitimate numerical differences. -$DIFF $DIFFFLAGS ctrip.log xtrip.log - -mv tripos.tex xtripos.tex -diff $testdir/tripos.tex xtripos.tex - -eval ../dvitype $dvitype_args trip.dvi >xtrip.typ || exit 1 -$DIFF $DIFFFLAGS ctrip.typ xtrip.typ - -mv trip.fmt xtrip.fmt - -# ============================== - -echo "*** e-TeX specific part of e-TRIP test ***." - -../pltotf $etestdir/etrip.pl etrip.tfm || exit 1 - -../tftopl ./etrip.tfm etrip.pl || exit 1 - -diff $etestdir/etrip.pl etrip.pl || is_OK=false - -# get same filename in log -$LN_S $etestdir/etrip.tex . - -../etex --progname=einitex --ini <$etestdir/etrip2.in >etripin.fot -if test ! -s etrip.fmt; then - echo "*** etrip.fmt not created by etrip2.in, investigate!" >&2 - exit 1 -fi -mv etrip.log etripin.log || exit 1 -diff $etestdir/etripin.log etripin.log - -# May as well test non-ini second time through. -../etex --progname=etex <$etestdir/etrip3.in >etrip.fot -diff $etestdir/etrip.fot etrip.fot - -# 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 $etestdir/etrip.out etrip.out - -eval ../dvitype $dvitype_args etrip.dvi >etrip.typ || exit 1 -$DIFF $DIFFFLAGS $etestdir/etrip.typ etrip.typ - -$is_OK || { - echo ">>> There were some errors." >&2 - exit 1 -} - diff --git a/Build/source/texk/web2c/etexdir/tex.ch0 b/Build/source/texk/web2c/etexdir/tex.ch0 deleted file mode 100644 index 43370703dd4..00000000000 --- a/Build/source/texk/web2c/etexdir/tex.ch0 +++ /dev/null @@ -1,22 +0,0 @@ -% Change file to assist in creating the web2c-specific change file. -% This one comes first, resolves inconsistencies between the generated -% etex.web and tex.ch -% Public domain. - -@x [1.2] l.188 -@d TeX_banner=='This is TeX, Version 3.141592653' {printed when \TeX\ starts} -@# -@d banner==eTeX_banner -@y -@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 -@d tex_int_pars=55 {total number of \TeX's integer parameters} -@# -@d etex_int_base=tex_int_pars {base for \eTeX's integer parameters} -@y -@d int_pars=55 {total number of integer parameters} -@# -@d etex_int_base=tex_int_pars {base for \eTeX's integer parameters} -@z diff --git a/Build/source/texk/web2c/etexdir/tex.ch1 b/Build/source/texk/web2c/etexdir/tex.ch1 deleted file mode 100644 index bf02fd83350..00000000000 --- a/Build/source/texk/web2c/etexdir/tex.ch1 +++ /dev/null @@ -1,19 +0,0 @@ -% Change file to assist in creating the web2c-specific change file. -% This one resolves inconsistencies between tex.ch and tex.ech. -% Public domain. - -@x [1] m.2 l.188 - banner -@d banner==TeX_banner -@d banner_k==TeX_banner_k -@y -@d banner==eTeX_banner -@d banner_k==eTeX_banner_k -@z - -@x [17.236] l.4960 - first web2c, then e-TeX additional integer parameters -@d int_pars=web2c_int_pars {total number of integer parameters} -@# -@d etex_int_base=tex_int_pars {base for \eTeX's integer parameters} -@y -@d etex_int_base=web2c_int_pars {base for \eTeX's integer parameters} -@z diff --git a/Build/source/texk/web2c/etexdir/tex.ech b/Build/source/texk/web2c/etexdir/tex.ech deleted file mode 100644 index 9fa445db42c..00000000000 --- a/Build/source/texk/web2c/etexdir/tex.ech +++ /dev/null @@ -1,118 +0,0 @@ -% This is `tex.ech' in text format as of Aug 3, 2005, -% for web2c-7.5 and e-TeX Version 2.1 as of Jul 19, 2004, -% made by B. Raichle and P. Breitenlohner. -% Public domain. - -% Note: This file, etexdir/tex.ech, contains the web2c changes for the -% e-TeX specific part of etex.web (defined in etexdir/etex.ch) and is -% used as follows to construct the web2c change file for e-TeX: -% -% etexdir/tex.ch0 ) -% + ) -% tex.ch ) -% + ) => tie -c ... => etex.ch -% etexdir/tex.ch1 ) -% + ) -% etexdir/tex.ech ) -% -% In addition, this file is used to construct the web2c change file -% for pdfeTeX: -% -% pdfetexdir/tex.ch0 ) -% + ) -% tex.ch ) -% + ) -% etexdir/tex.ch1 ) -% + ) => tie -c ... => pdfetex.ch -% etexdir/tex.ech ) -% + ) -% pdfetexdir/tex.ch1 ) -% + ) -% pdftexdir/tex.pch ) -% -% where the four (small) files {,pdf}etexdir/tex.ch[01] take care -% of interferences between web2c, e-Tex, pdfTeX changes. -% Consequently, changes in all these files have to be coordinated. - -@x [1] m.2 l.188 - Web2C: extensions imply we're not e-TeX -@d eTeX_banner=='This is e-TeX, Version 3.141592653',eTeX_version_string -@y -@d eTeX_banner_k=='This is e-TeXk, Version 3.141592653',eTeX_version_string -@d eTeX_banner=='This is e-TeX, Version 3.141592653',eTeX_version_string -@z - -@x [16.215] - e-TeX last_node_type -last_glue:=max_halfword; last_penalty:=0; last_kern:=0; -@y -last_glue:=max_halfword; last_penalty:=0; last_kern:=0; -last_node_type:=-1; -@z - -@x [51.1332] l.24203 (ca.) texarray - line_stack:=xmalloc_array (integer, max_in_open); -@y - line_stack:=xmalloc_array (integer, max_in_open); - eof_seen:=xmalloc_array (boolean, max_in_open); - grp_stack:=xmalloc_array (save_pointer, max_in_open); - if_stack:=xmalloc_array (pointer, max_in_open); -@z - -@x [51.1337] l.24371 (ca.) texarray - trie_root:=0; trie_c[0]:=si(0); trie_ptr:=0; -@y - trie_root:=0; trie_c[0]:=si(0); trie_ptr:=0; - hyph_root:=0; hyph_start:=0; -@z - -@x [53a.1379] l.??? -etex command line switch -@!init if (buffer[loc]="*")and(format_ident=" (INITEX)") then -@y -@!init if (etex_p or(buffer[loc]="*"))and(format_ident=" (INITEX)") then -@z - -@x [53a.1379] l.??? -etex command line switch - incr(loc); eTeX_mode:=1; {enter extended mode} -@y - if (buffer[loc]="*") then incr(loc); - eTeX_mode:=1; {enter extended mode} -@z - -@x [53a.1383] l.??? -etex command line switch -@!eTeX_mode: 0..1; {identifies compatibility and extended mode} -@y -@!eTeX_mode: 0..1; {identifies compatibility and extended mode} -@!etex_p: boolean; {was the -etex option specified} -@z - -@x [53a.1391] l.??? texarray -@!eof_seen : array[1..max_in_open] of boolean; {has eof been seen?} -@y -@!eof_seen : ^boolean; {has eof been seen?} -@z - -@x [53a.1506] l.??? texarray -@!grp_stack : array[0..max_in_open] of save_pointer; {initial |cur_boundary|} -@!if_stack : array[0..max_in_open] of pointer; {initial |cond_ptr|} -@y -@!grp_stack : ^save_pointer; {initial |cur_boundary|} -@!if_stack : ^pointer; {initial |cond_ptr|} -@z - -@x [53a.1587] l.??? texarray -hyph_root:=0; hyph_start:=0; -@y -@z - -@x [54/web2c.???] l.??? needed earlier -replacement, but always existing character |font_bc[f]|. -@^inner loop@> - -@<Declare additional functions for ML\TeX@>= -function effective_char(@!err_p:boolean; -@y -replacement, but always existing character |font_bc[f]|. -@^inner loop@> - -@<Declare \eTeX\ procedures for sc...@>= -function effective_char(@!err_p:boolean; -@z diff --git a/Build/source/texk/web2c/etexdir/wprob.test b/Build/source/texk/web2c/etexdir/wprob.test deleted file mode 100755 index 043a28e5762..00000000000 --- a/Build/source/texk/web2c/etexdir/wprob.test +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/sh -vx -# $Id$ -# Copyright 2017 Karl Berry <tex-live@tug.org> -# Copyright 2011-2013 Peter Breitenlohner <tex-live@tug.org> -# You may freely use, modify and/or distribute this file. - -rm -rf ewprob.* -cp $srcdir/tests/wprob.tex ./ewprob.tex - -TEXMFCNF=$srcdir/../kpathsea \ - ./etex --ini --etex --file-line-error --interaction=nonstopmode ewprob.tex - -grep '^\./ewprob\.tex:12: Could not open file NoSuchFile\.eps\.$' \ - ewprob.log || exit 1 - |