diff options
Diffstat (limited to 'Build/source/texk/web2c')
58 files changed, 1011 insertions, 924 deletions
diff --git a/Build/source/texk/web2c/ChangeLog b/Build/source/texk/web2c/ChangeLog index c9203566413..ab0d6888111 100644 --- a/Build/source/texk/web2c/ChangeLog +++ b/Build/source/texk/web2c/ChangeLog @@ -1,3 +1,22 @@ +2024-08-23 Andreas Scherer <https://ascherer.github.io> + + * gftopk.ch, + * gftype.ch, + * pktogf.ch, + * pktype.ch: Fix a few spaces. + +2024-08-21 Andreas Scherer <https://ascherer.github.io> + + * weav-twill.ch: Prime the title page. + +2024-08-16 Andreas Scherer <https://ascherer.github.io> + + * showstream.ch: Restore section numbering as far as possible. + +2024-08-12 Andreas Scherer <https://ascherer.github.io> + + * ctangleboot.cin: CWEB 4.12 release. + 2024-07-14 Andreas Scherer <https://ascherer.github.io> * mft.ch: Preserve Metafont logo on title page. diff --git a/Build/source/texk/web2c/ctangleboot.cin b/Build/source/texk/web2c/ctangleboot.cin index eefec8569c5..3483628ef0c 100644 --- a/Build/source/texk/web2c/ctangleboot.cin +++ b/Build/source/texk/web2c/ctangleboot.cin @@ -28,7 +28,7 @@ /*:5*/ #line 67 "cwebdir/ctangle.w" -#define banner "This is CTANGLE, Version 4.11" \ +#define banner "This is CTANGLE, Version 4.12" \ \ #define _(s) gettext(s) \ diff --git a/Build/source/texk/web2c/cwebdir/ChangeLog b/Build/source/texk/web2c/cwebdir/ChangeLog index dbfba96a73d..7bb17212989 100644 --- a/Build/source/texk/web2c/cwebdir/ChangeLog +++ b/Build/source/texk/web2c/cwebdir/ChangeLog @@ -1,3 +1,68 @@ +2024-08-12 Andreas Scherer <https://ascherer.github.io> + + * Makefile + * comm-{mac,mini,ql,w2c}.ch + * comm-w2c.h + * common.h + * common.w + * ctang-{bs,pc,ql,vms,w2c,w32}.ch + * ctangle.c + * ctangle.w + * ctwill-w2c.ch + * cweav-{bs,pc,ql,vms,w2c,w32}.ch + * cweave.w + * cwebman-w2c.ch + * cwebman.tex + * po/cweb-tl.pot + * po/cweb.pot + * po/de/cweb-tl.po + * po/de/cweb.po + * po/it/cweb.po + * prod-{cweave,twill}.w + * prod.w: CWEB 4.12 release. + +2024-08-10 Andreas Scherer <https://ascherer.github.io> + + * cwebacromac.tex, + * cwebmac.tex, + * texinputs/icwebmac.tex, + * texinputs/pdfctproofmac.tex, + * texinputs/pdfctwimac.tex: Apply new scanning macros. + +2024-08-08 Andreas Scherer <https://ascherer.github.io> + + * comm-mini.ch, + * comm-w2c.ch: Demote 'Extensions' and subsections. + +2024-08-07 Andreas Scherer <https://ascherer.github.io> + + * comm-mini.ch, + * comm-w2c.ch: The Index is not an Extension. + +2024-08-06 Andreas Scherer <https://ascherer.github.io> + + * cwebacromac.tex, + * cwebmac.tex, + * cwebman.tex, + * texinputs/pdfctproofmac.tex, + * texinputs/pdfctwimac.tex: Refine PDF-related macros. + +2024-08-02 Andreas Scherer <https://ascherer.github.io> + + * ctwill-w2c.ch, + * cweav-w2c.ch, + * cweave.w: Remove unused 'kludge'. + +2024-07-26 Andreas Scherer <https://ascherer.github.io> + + * cwebmac.tex: Reshuffle '\note' macro. + +2024-07-24 Andreas Scherer <https://ascherer.github.io> + + * cwebmac.tex, + * cwebman-w2c.ch, + * cwebman.tex: Recollect '\font' declarations. + 2024-07-23 Andreas Scherer <https://ascherer.github.io> * cwebman-w2c.ch, diff --git a/Build/source/texk/web2c/cwebdir/Makefile b/Build/source/texk/web2c/cwebdir/Makefile index 28ea97d5540..a11936f9894 100644 --- a/Build/source/texk/web2c/cwebdir/Makefile +++ b/Build/source/texk/web2c/cwebdir/Makefile @@ -1,6 +1,6 @@ # This file is part of CWEB. # It is distributed WITHOUT ANY WARRANTY, express or implied. -# Version 4.11 --- December 2023 +# Version 4.12 --- August 2024 # Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth @@ -216,6 +216,6 @@ tarball: tar zcvhf /tmp/cweb.tgz $(ALL) examples ctan: - git archive -o ~/cweb-4.11.zip --prefix=cweb/ cweb-4.11 + git archive -o ~/cweb-4.12.zip --prefix=cweb/ cweb-4.12 make PDF=pdf usermanual - cd ..; zip -r ~/cweb-4.11.zip cweb/cwebman.pdf + cd ..; zip -r ~/cweb-4.12.zip cweb/cwebman.pdf diff --git a/Build/source/texk/web2c/cwebdir/comm-mac.ch b/Build/source/texk/web2c/cwebdir/comm-mac.ch index 79b1ec945e8..1540a9a4e21 100644 --- a/Build/source/texk/web2c/cwebdir/comm-mac.ch +++ b/Build/source/texk/web2c/cwebdir/comm-mac.ch @@ -4,9 +4,9 @@ No changes to CTANGLE or CWEAVE are needed. (Contributed 13 Oct 2000 by AndPio@aol.com; slightly edited by Don Knuth) @x in limbo, change the title page document to specify Mac version - \centerline{(Version 4.11)} + \centerline{(Version 4.12)} @y - \centerline{(Version 4.11 for MacOS)} + \centerline{(Version 4.12 for MacOS)} @z @x section 23: Make input_ln accept \n, \r, \n\r, or \r\n as line endings diff --git a/Build/source/texk/web2c/cwebdir/comm-mini.ch b/Build/source/texk/web2c/cwebdir/comm-mini.ch index d1bd623b2a2..adf9fc0c28e 100644 --- a/Build/source/texk/web2c/cwebdir/comm-mini.ch +++ b/Build/source/texk/web2c/cwebdir/comm-mini.ch @@ -1,9 +1,9 @@ Limbo. @x -\def\title{Common code for CTANGLE and CWEAVE (4.11 [\TeX~Live])} +\def\title{Common code for CTANGLE and CWEAVE (4.12 [\TeX~Live])} @y -\def\title{COMMON (4.11 [\TeX~Live])} +\def\title{COMMON (4.12 [\TeX~Live])} \def\contentspagenumber{0} @z diff --git a/Build/source/texk/web2c/cwebdir/comm-ql.ch b/Build/source/texk/web2c/cwebdir/comm-ql.ch index 44cc39ec45f..8510fc093a2 100644 --- a/Build/source/texk/web2c/cwebdir/comm-ql.ch +++ b/Build/source/texk/web2c/cwebdir/comm-ql.ch @@ -10,24 +10,24 @@ ex <dev_>cc;'-v -h -c -=500000 -DCWEBINPUTS=flp2_ common_c' @x \def\v{\char'174} % vertical (|) in typewriter font -\def\title{Common code for CTANGLE and CWEAVE (Version 4.11)} +\def\title{Common code for CTANGLE and CWEAVE (Version 4.12)} \def\topofcontents{\null\vfill \centerline{\titlefont Common code for {\ttitlefont CTANGLE} and {\ttitlefont CWEAVE}} \vskip 15pt - \centerline{(Version 4.11)} + \centerline{(Version 4.12)} \vfill} \def\botofcontents{\vfill \noindent @y \def\v{\char'174} % vertical (|) in typewriter font -\def\title{Common code for CTANGLE and CWEAVE (QL Version 4.11)} +\def\title{Common code for CTANGLE and CWEAVE (QL Version 4.12)} \def\topofcontents{\null\vfill \centerline{\titlefont Common code for {\ttitlefont CTANGLE} and {\ttitlefont CWEAVE}} \vskip 15pt - \centerline{(Version 4.11)} + \centerline{(Version 4.12)} \vfill} \def\botofcontents{\vfill \noindent diff --git a/Build/source/texk/web2c/cwebdir/comm-w2c.ch b/Build/source/texk/web2c/cwebdir/comm-w2c.ch index 4035a633ffb..f0d5b6a8034 100644 --- a/Build/source/texk/web2c/cwebdir/comm-w2c.ch +++ b/Build/source/texk/web2c/cwebdir/comm-w2c.ch @@ -17,16 +17,16 @@ @q Please send comments, suggestions, etc. to tex-k@@tug.org. @> @x [0.0] l.25 -\def\title{Common code for CTANGLE and CWEAVE (Version 4.11)} +\def\title{Common code for CTANGLE and CWEAVE (Version 4.12)} @y \def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}} \ifacro\sanitizecommand\Kpathsea{KPATHSEA}\fi -\def\title{Common code for CTANGLE and CWEAVE (4.11 [\TeX~Live])} +\def\title{Common code for CTANGLE and CWEAVE (4.12 [\TeX~Live])} @z @x [0.0] l.30 - \centerline{(Version 4.11)} + \centerline{(Version 4.12)} @y - \centerline{(Version 4.11 [\TeX~Live])} + \centerline{(Version 4.12 [\TeX~Live])} @z @x [0.0] l.32 @@ -616,21 +616,21 @@ else { @x [9.85] l.1286 @* Index. @y -@** Extensions to {\tentex CWEB}. The following sections introduce new or +@* Extensions to {\tentex CWEB}. The following sections introduce new or improved features that have been created by numerous contributors over the course of a quarter century. Care has been taken to keep the original section numbering intact, so this new material should nicely integrate with the original ``\&{85.~Index}.'' -@* Language setting. This global variable is set by the argument of the +@*1 Language setting. This global variable is set by the argument of the `\.{+l}' (or `\.{-l}') command-line option. @<Global var...@>= const char *use_language=""; /* prefix of \.{cwebmac.tex} in \TEX/ output */ -@* User communication. The |scan_args| and |cb_show_banner| routines and the +@*1 User communication. The |scan_args| and |cb_show_banner| routines and the |bindtextdomain| argument string need a few extra variables. @d max_banner 50 @@ -647,7 +647,7 @@ string texmf_locale;@/ #endif char separators[]=SEPARATORS; -@* Temporary file output. Most \CEE/ projects are controlled by a \.{Makefile} +@*1 Temporary file output. Most \CEE/ projects are controlled by a \.{Makefile} that automatically takes care of the temporal dependencies between the different source modules. It may be convenient that \.{CWEB} doesn't create new output for all existing files, when there are only changes to some of them. Thus the @@ -696,7 +696,7 @@ if(check_file) fclose(check_file); if(strlen(check_file_name)) /* Delete the temporary file in case of a break */ remove(check_file_name); -@* Internationalization. If translation catalogs for your personal +@*1 Internationalization. If translation catalogs for your personal \.{LANGUAGE} are installed at the appropriate place, \.{CTANGLE} and \.{CWEAVE} will talk to you in your favorite language. Catalog \.{cweb} contains all strings from ``plain \.{CWEB},'' catalog \.{cweb-tl} contains a few extra @@ -759,7 +759,7 @@ free(texmf_locale); textdomain("cweb"); /* the majority of |"strings"| come from ``plain \.{CWEB}'' */ @.cweb.mo@> -@* File lookup with \Kpathsea/. The \.{CTANGLE} and \.{CWEAVE} programs from +@*1 File lookup with \Kpathsea/. The \.{CTANGLE} and \.{CWEAVE} programs from the original \.{CWEB} package use the compile-time default directory or the value of the environment variable \.{CWEBINPUTS} as an alternative place to be searched for files, if they could not be found in the current directory. @@ -816,7 +816,7 @@ numbers. Debugging output is always written to |stderr|, and begins with the string `\.{kdebug:}'. -@* System dependent changes. The most volatile stuff comes at the very end. +@*1 System dependent changes. The most volatile stuff comes at the very end. Modules for dealing with help messages and version info. diff --git a/Build/source/texk/web2c/cwebdir/comm-w2c.h b/Build/source/texk/web2c/cwebdir/comm-w2c.h index c2743c1a388..154371c4fa7 100644 --- a/Build/source/texk/web2c/cwebdir/comm-w2c.h +++ b/Build/source/texk/web2c/cwebdir/comm-w2c.h @@ -2,7 +2,7 @@ % This program by Silvio Levy and Donald E. Knuth % is based on a program by Knuth. % It is distributed WITHOUT ANY WARRANTY, express or implied. -% Version 4.11 --- December 2023 (works also with later versions) +% Version 4.12 --- August 2024 (works also with later versions) % Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth diff --git a/Build/source/texk/web2c/cwebdir/common.h b/Build/source/texk/web2c/cwebdir/common.h index 97fda82e75a..2e02af934f4 100644 --- a/Build/source/texk/web2c/cwebdir/common.h +++ b/Build/source/texk/web2c/cwebdir/common.h @@ -2,7 +2,7 @@ % This program by Silvio Levy and Donald E. Knuth % is based on a program by Knuth. % It is distributed WITHOUT ANY WARRANTY, express or implied. -% Version 4.11 --- December 2023 (works also with later versions) +% Version 4.12 --- August 2024 (works also with later versions) % Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth diff --git a/Build/source/texk/web2c/cwebdir/common.w b/Build/source/texk/web2c/cwebdir/common.w index 88932f3118b..1c077736bb2 100644 --- a/Build/source/texk/web2c/cwebdir/common.w +++ b/Build/source/texk/web2c/cwebdir/common.w @@ -2,7 +2,7 @@ % This program by Silvio Levy and Donald E. Knuth % is based on a program by Knuth. % It is distributed WITHOUT ANY WARRANTY, express or implied. -% Version 4.11 --- December 2023 +% Version 4.12 --- August 2024 % Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth @@ -22,12 +22,12 @@ \def\v{\char'174} % vertical (|) in typewriter font -\def\title{Common code for CTANGLE and CWEAVE (Version 4.11)} +\def\title{Common code for CTANGLE and CWEAVE (Version 4.12)} \def\topofcontents{\null\vfill \centerline{\titlefont Common code for {\ttitlefont CTANGLE} and {\ttitlefont CWEAVE}} \vskip 15pt - \centerline{(Version 4.11)} + \centerline{(Version 4.12)} \vfill} \def\botofcontents{\vfill \noindent diff --git a/Build/source/texk/web2c/cwebdir/ctang-bs.ch b/Build/source/texk/web2c/cwebdir/ctang-bs.ch index c70a87fe1d0..234f41039e0 100644 --- a/Build/source/texk/web2c/cwebdir/ctang-bs.ch +++ b/Build/source/texk/web2c/cwebdir/ctang-bs.ch @@ -17,12 +17,12 @@ by using "huge" pointers. The ``banner line'' defined here should be changed whenever \.{CTANGLE} is modified. -@d banner "This is CTANGLE (Version 4.11)" +@d banner "This is CTANGLE (Version 4.12)" @y The ``banner line'' defined here should be changed whenever \.{CTANGLE} is modified. -@d banner "This is CTANGLE (Version 4.11pc/big)" +@d banner "This is CTANGLE (Version 4.12pc/big)" @z diff --git a/Build/source/texk/web2c/cwebdir/ctang-pc.ch b/Build/source/texk/web2c/cwebdir/ctang-pc.ch index 3e6e7ac5ef2..61db92aa7e4 100644 --- a/Build/source/texk/web2c/cwebdir/ctang-pc.ch +++ b/Build/source/texk/web2c/cwebdir/ctang-pc.ch @@ -9,9 +9,9 @@ that allows >64K arrays. If you need lots of bytes and toks, try the alternate change files with -bs suffix instead of -pc. @x section 1 -@d banner "This is CTANGLE (Version 4.11)" +@d banner "This is CTANGLE (Version 4.12)" @y -@d banner "This is CTANGLE (Version 4.11pc)" +@d banner "This is CTANGLE (Version 4.12pc)" @z @x section 17 @d max_bytes 100000 /* the number of bytes in identifiers, diff --git a/Build/source/texk/web2c/cwebdir/ctang-ql.ch b/Build/source/texk/web2c/cwebdir/ctang-ql.ch index 8072aff51ab..41831c850d9 100644 --- a/Build/source/texk/web2c/cwebdir/ctang-ql.ch +++ b/Build/source/texk/web2c/cwebdir/ctang-ql.ch @@ -7,15 +7,15 @@ ex <dev_>cc;"-v -h -c -=500000 ctangle_c" @x -\def\title{CTANGLE (Version 4.11)} +\def\title{CTANGLE (Version 4.12)} @y -\def\title{CTANGLE (QL Version 4.11)} +\def\title{CTANGLE (QL Version 4.12)} @z @x section 1 -@d banner "This is CTANGLE (Version 4.11)" +@d banner "This is CTANGLE (Version 4.12)" @y -@d banner "This is CTANGLE (QL Version 4.11)" +@d banner "This is CTANGLE (QL Version 4.12)" @z @x diff --git a/Build/source/texk/web2c/cwebdir/ctang-vms.ch b/Build/source/texk/web2c/cwebdir/ctang-vms.ch index 2c4df3bf60e..7f142df49a7 100644 --- a/Build/source/texk/web2c/cwebdir/ctang-vms.ch +++ b/Build/source/texk/web2c/cwebdir/ctang-vms.ch @@ -10,9 +10,9 @@ created: (these changes not necessary for initial bootstrapping) @x section 1 (01-FEB-1992 ST) -@d banner "This is CTANGLE (Version 4.11)" +@d banner "This is CTANGLE (Version 4.12)" @y -@d banner "This is CTANGLE (VAX/VMS Version 4.11)" +@d banner "This is CTANGLE (VAX/VMS Version 4.12)" @z @x section 5 (01-FEB-1992 ST) diff --git a/Build/source/texk/web2c/cwebdir/ctang-w2c.ch b/Build/source/texk/web2c/cwebdir/ctang-w2c.ch index 177daac7ab2..61eea96a0de 100644 --- a/Build/source/texk/web2c/cwebdir/ctang-w2c.ch +++ b/Build/source/texk/web2c/cwebdir/ctang-w2c.ch @@ -17,15 +17,15 @@ @q Please send comments, suggestions, etc. to tex-k@@tug.org. @> @x [0.0] l.30 -\def\title{CTANGLE (Version 4.11)} +\def\title{CTANGLE (Version 4.12)} @y -\def\title{CTANGLE (Version 4.11 [\TeX~Live])} +\def\title{CTANGLE (Version 4.12 [\TeX~Live])} @z @x [0.0] l.34 - \centerline{(Version 4.11)} + \centerline{(Version 4.12)} @y - \centerline{(Version 4.11 [\TeX~Live])} + \centerline{(Version 4.12 [\TeX~Live])} @z @x [0.0] l.36 @@ -41,9 +41,9 @@ @z @x [1.1] l.64 -@d banner "This is CTANGLE (Version 4.11)" +@d banner "This is CTANGLE (Version 4.12)" @y -@d banner "This is CTANGLE, Version 4.11" +@d banner "This is CTANGLE, Version 4.12" /* will be extended by the \TeX~Live |versionstring| */ @z diff --git a/Build/source/texk/web2c/cwebdir/ctang-w32.ch b/Build/source/texk/web2c/cwebdir/ctang-w32.ch index c0384b48881..2a5c6f11868 100644 --- a/Build/source/texk/web2c/cwebdir/ctang-w32.ch +++ b/Build/source/texk/web2c/cwebdir/ctang-w32.ch @@ -4,9 +4,9 @@ This is the change file for CWEB's CTANGLE under Win32 Changes necessary for compiling with Borland C/C++ @x section 1 -@d banner "This is CTANGLE (Version 4.11)" +@d banner "This is CTANGLE (Version 4.12)" @y -@d banner "This is CTANGLE (Version 4.11win32)" +@d banner "This is CTANGLE (Version 4.12win32)" @z @x section 24 diff --git a/Build/source/texk/web2c/cwebdir/ctangle.c b/Build/source/texk/web2c/cwebdir/ctangle.c index 58e37b27b41..d1cf6c67694 100644 --- a/Build/source/texk/web2c/cwebdir/ctangle.c +++ b/Build/source/texk/web2c/cwebdir/ctangle.c @@ -15,7 +15,7 @@ /*:5*/ #line 67 "ctangle.w" -#define banner "This is CTANGLE (Version 4.11)" \ +#define banner "This is CTANGLE (Version 4.12)" \ #define ctangle false #define cweave true \ diff --git a/Build/source/texk/web2c/cwebdir/ctangle.w b/Build/source/texk/web2c/cwebdir/ctangle.w index 37b09e7fc02..b42595baa9e 100644 --- a/Build/source/texk/web2c/cwebdir/ctangle.w +++ b/Build/source/texk/web2c/cwebdir/ctangle.w @@ -2,7 +2,7 @@ % This program by Silvio Levy and Donald E. Knuth % is based on a program by Knuth. % It is distributed WITHOUT ANY WARRANTY, express or implied. -% Version 4.11 --- December 2023 +% Version 4.12 --- August 2024 % Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth @@ -27,11 +27,11 @@ \mathchardef\RA="3221 % right arrow \mathchardef\BA="3224 % double arrow -\def\title{CTANGLE (Version 4.11)} +\def\title{CTANGLE (Version 4.12)} \def\topofcontents{\null\vfill \centerline{\titlefont The {\ttitlefont CTANGLE} processor} \vskip 15pt - \centerline{(Version 4.11)} + \centerline{(Version 4.12)} \vfill} \def\botofcontents{\vfill \noindent @@ -61,7 +61,7 @@ Joachim Schrod, Lee Wittenberg, and others who have contributed improvements. The ``banner line'' defined here should be changed whenever \.{CTANGLE} is modified. -@d banner "This is CTANGLE (Version 4.11)" +@d banner "This is CTANGLE (Version 4.12)" @c @<Include files@>@/ diff --git a/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch b/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch index 70616695efb..664254dee08 100644 --- a/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch +++ b/Build/source/texk/web2c/cwebdir/ctwill-w2c.ch @@ -34,38 +34,38 @@ \datethis % Put timestamp before section 1 @z -@x [0.0] l.35 -\def\title{CWEAVE (Version 4.11)} +@x [0.0] l.34 +\def\title{CWEAVE (Version 4.12)} @y \def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}} \ifacro\sanitizecommand\Kpathsea{KPATHSEA}\fi -\def\title{CTWILL (Version 4.11 [\TeX~Live])} +\def\title{CTWILL (Version 4.12 [\TeX~Live])} @z -@x [0.0] l.37 +@x [0.0] l.36 \centerline{\titlefont The {\ttitlefont CWEAVE} processor} @y \centerline{\titlefont The {\ttitlefont CTWILL} processor} @z -@x [0.0] l.39 - \centerline{(Version 4.11)} +@x [0.0] l.38 + \centerline{(Version 4.12)} @y - \centerline{(Version 4.11 [\TeX~Live])} + \centerline{(Version 4.12 [\TeX~Live])} @z -@x [0.0] l.41 +@x [0.0] l.40 \def\botofcontents{\vfill @y \def\covernote{\vbox{% @z -@x [0.0] l.54 +@x [0.0] l.53 } @y }} @z -@x [1.1] l.59 +@x [1.1] l.58 This is the \.{CWEAVE} program by Silvio Levy and Donald E. Knuth, based on \.{WEAVE} by Knuth. We are thankful to Steve Avery, @@ -77,7 +77,7 @@ Crusius, and others who have contributed improvements. The ``banner line'' defined here should be changed whenever \.{CWEAVE} is modified. -@d banner "This is CWEAVE (Version 4.11)" +@d banner "This is CWEAVE (Version 4.12)" @y This is the \.{CTWILL} program by D. E. Knuth, based on \.{CWEAVE} by Silvio Levy and D.~E. Knuth. It is also based on @@ -101,29 +101,29 @@ Until then, \.{CWEAVE}'s sequence of sections will be preserved. The ``banner line'' defined here should be changed whenever \.{CTWILL} is modified. The version number parallels the corresponding version of \.{CWEAVE}. -@d banner "This is CTWILL, Version 4.11" +@d banner "This is CTWILL, Version 4.12" /* will be extended by the \TeX~Live |versionstring| */ @z -@x [1.2] l.94 +@x [1.2] l.93 program=cweave; @y program=ctwill; @z -@x [1.2] l.98 +@x [1.2] l.97 if (show_banner) puts(banner); /* print a ``banner line'' */ @y if (show_banner) cb_show_banner(); /* print a ``banner line'' */ @z -@x [1.3] l.112 +@x [1.3] l.111 @i common.h @y @i comm-w2c.h @z -@x [2.21] l.183 +@x [2.21] l.182 turned on during the first phase. @<Private...@>= @@ -132,19 +132,19 @@ static boolean change_exists; /* has any section changed? */ turned on during the first phase---NOT! @z -@x [2.23] l.217 +@x [2.23] l.216 @ @d max_refs 30000 /* number of cross-references; must be less than 65536 */ @y @ @d max_refs 65535 /* number of cross-references; must be less than 65536 */ @z -@x [2.25] l.246 +@x [2.25] l.245 @d append_xref(c) if (xref_ptr==xmem_end) overflow("cross-reference"); @y @d append_xref(c) if (xref_ptr==xmem_end) overflow(_("cross-reference")); @z -@x [2.30] l.337 +@x [2.30] l.336 @d max_toks 30000 /* number of symbols in \CEE/ texts being parsed; must be less than 65536 */ @d max_texts 8000 /* number of phrases in \CEE/ texts being parsed; @@ -156,14 +156,14 @@ turned on during the first phase---NOT! must be less than 10240 */ @z -@x [2.32] l.357 +@x [2.32] l.356 @ Here are the two procedures needed to complete |id_lookup|: @y @ Here are the two procedures needed to complete |id_lookup|: @s perm_meaning int @z -@x [2.32] l.374 +@x [2.32] l.373 p->xref=(void *)xmem; @y p->xref=(void *)xmem; @@ -177,7 +177,7 @@ turned on during the first phase---NOT! } @z -@x [2.33] l.377 +@x [2.33] l.376 @ And here's a small helper function to simplify the code. @d update_node(p) (p)->xref=(void *)xref_ptr @@ -188,7 +188,7 @@ turned on during the first phase---NOT! @d get_meaning(p) (p)-name_dir+cur_meaning @z -@x [2.34] l.436 +@x [2.34] l.435 id_lookup("extern",NULL,int_like); @y @# @@ -196,7 +196,7 @@ ext_loc=id_lookup("extern",NULL,int_like)-name_dir; @# @z -@x [2.34] l.449 +@x [2.34] l.448 id_lookup("int",NULL,raw_int); @y @# @@ -204,7 +204,7 @@ int_loc=id_lookup("int",NULL,raw_int)-name_dir; @# @z -@x [3.36] l.544 +@x [3.36] l.543 @d ord 0207 /* control code for `\.{@@'}' */ @d join 0210 /* control code for `\.{@@\&}' */ @d thin_space 0211 /* control code for `\.{@@,}' */ @@ -248,7 +248,7 @@ int_loc=id_lookup("int",NULL,raw_int)-name_dir; @d new_section 0235 /* control code for `\.{@@\ }' and `\.{@@*}' */ @z -@x [3.38] l.587 +@x [3.38] l.586 ccode['\'']=ord; @y ccode['\'']=ord; @@ -256,7 +256,7 @@ ccode['$']=meaning; ccode['%']=temp_meaning; ccode['-']=suppress; ccode['r']=ccode['R']=right_start; @z -@x [3.40] l.608 +@x [3.40] l.607 static eight_bits skip_TeX(void); @ @c @@ -269,7 +269,7 @@ part of all meanings. @c @z -@x [3.41] l.614 +@x [3.41] l.613 if (loc>limit && get_line()==false) return; @y if (loc>limit && get_line()==false) return; @@ -279,44 +279,44 @@ part of all meanings. } @z -@x [4.43] l.670 +@x [4.43] l.669 \yskip\hang |xref_roman|, |xref_wildcard|, |xref_typewriter|, |TeX_string|, @y \yskip\hang |xref_roman|, |xref_wildcard|, |xref_typewriter|, |TeX_string|, |meaning|, |suppress|, @z -@x [4.46] l.731 +@x [4.46] l.730 @d right_preproc 0217 /* ends a preprocessor command */ @y @d right_preproc 0223 /* ends a preprocessor command */ @z -@x [4.57] l.888 +@x [4.57] l.887 err_print("! String didn't end"); loc=limit; break; @y err_print(_("! String didn't end")); loc=limit; break; @z -@x [4.57] l.892 +@x [4.57] l.891 err_print("! Input ended in middle of string"); loc=buffer; break; @y err_print(_("! Input ended in middle of string")); loc=buffer; break; @z -@x [4.57] l.911 +@x [4.57] l.910 printf("%s","\n! String too long: "); @y printf("%s",_("\n! String too long: ")); @z -@x [4.59] l.930 +@x [4.59] l.929 case translit_code: err_print("! Use @@l in limbo only"); continue; @y case translit_code: err_print(_("! Use @@l in limbo only")); continue; @z -@x [4.59] l.932 +@x [4.59] l.931 case underline: xref_switch=def_flag; continue; @y case underline: xref_switch=def_flag; continue; @@ -324,38 +324,38 @@ part of all meanings. case right_start: right_start_switch=true; continue; @z -@x [4.59] l.938 +@x [4.59] l.937 case xref_roman: case xref_wildcard: case xref_typewriter: case noop: @y case xref_roman: case xref_wildcard: case xref_typewriter: case noop: case meaning: case suppress: @z -@x [4.62] l.968 +@x [4.62] l.967 err_print("! Input ended in section name"); @y err_print(_("! Input ended in section name")); @z -@x [4.62] l.981 +@x [4.62] l.980 printf("%s","\n! Section name too long: "); @y printf("%s",_("\n! Section name too long: ")); @z -@x [4.63] l.995 +@x [4.63] l.994 err_print("! Section name didn't end"); break; @y err_print(_("! Section name didn't end")); break; @z -@x [4.63] l.999 +@x [4.63] l.998 err_print("! Control codes are forbidden in section name"); break; @y err_print(_("! Control codes are forbidden in section name")); break; @z -@x [4.64] l.1009 +@x [4.64] l.1008 skip_restricted(void) { @y @@ -363,19 +363,19 @@ skip_restricted(void) { int c=ccode[(eight_bits)*(loc-1)]; @z -@x [4.64] l.1016 +@x [4.64] l.1015 err_print("! Control text didn't end"); loc=limit; @y err_print(_("! Control text didn't end")); loc=limit; @z -@x [4.64] l.1021 +@x [4.64] l.1020 err_print("! Control codes are forbidden in control text"); @y err_print(_("! Control codes are forbidden in control text")); @z -@x [4.64] l.1022 +@x [4.64] l.1021 @.Control codes are forbidden...@> @y @.Control codes are forbidden...@> @@ -383,68 +383,68 @@ skip_restricted(void) else if (c==suppress && phase==2) @<Suppress mini-index entry@>@; @z -@x [4.66] l.1036 +@x [4.66] l.1035 if (loc>=limit) err_print("! Verbatim string didn't end"); @y if (loc>=limit) err_print(_("! Verbatim string didn't end")); @z -@x [5.68] l.1061 +@x [5.68] l.1060 skip_limbo(); change_exists=false; @y skip_limbo(); @<Give a default title to the program, if necessary@>@; @z -@x [5.68] l.1064 +@x [5.68] l.1063 changed_section[section_count]=change_exists; /* the index changes if anything does */ @y @z -@x [5.70] l.1073 +@x [5.70] l.1072 if (++section_count==max_sections) overflow("section number"); @y if (++section_count==max_sections) overflow(_("section number")); @z -@x [5.70] l.1074 +@x [5.70] l.1073 changed_section[section_count]=changing; /* it will become |true| if any line changes */ @y @z -@x [5.70] l.1083 +@x [5.70] l.1082 if (changed_section[section_count]) change_exists=true; @y @z -@x [5.74] l.1162 +@x [5.74] l.1161 case translit_code: err_print("! Use @@l in limbo only"); continue; @y case translit_code: err_print(_("! Use @@l in limbo only")); continue; @z -@x [5.74] l.1167 +@x [5.74] l.1166 case xref_roman: case xref_wildcard: case xref_typewriter: @y case xref_roman: case xref_wildcard: case xref_typewriter: case meaning: case suppress: @z -@x [5.79] l.1249 +@x [5.79] l.1248 err_print("! Missing left identifier of @@s"); @y err_print(_("! Missing left identifier of @@s")); @z -@x [5.79] l.1254 +@x [5.79] l.1253 err_print("! Missing right identifier of @@s"); @y err_print(_("! Missing right identifier of @@s")); @z -@x [5.82] l.1302 +@x [5.82] l.1301 printf("%s","\n! Never defined: <"); print_section_name(p); putchar('>'); mark_harmless(); @y @@ -452,7 +452,7 @@ if (loc>=limit) err_print(_("! Verbatim string didn't end")); print_section_name(p); putchar('>'); mark_harmless(); @z -@x [5.82] l.1308 +@x [5.82] l.1307 printf("%s","\n! Never used: <"); print_section_name(p); putchar('>'); mark_harmless(); @y @@ -460,7 +460,7 @@ if (loc>=limit) err_print(_("! Verbatim string didn't end")); print_section_name(p); putchar('>'); mark_harmless(); @z -@x [6.89] l.1397 +@x [6.89] l.1396 @ In particular, the |finish_line| procedure is called near the very beginning of phase two. We initialize the output variables in a slightly tricky way so that the first line of the output file will be @@ -494,7 +494,7 @@ tex_puts(proofing?"ctproofma":"ctwima"); *out_ptr='c'; @z -@x [6.90] l.1414 +@x [6.90] l.1413 @d out(c) {if (out_ptr>=out_buf_end) break_out(); *(++out_ptr)=c;} @y @d out(c) @@ -508,102 +508,102 @@ tex_puts(proofing?"ctproofma":"ctwima"); } @z -@x [6.94] l.1462 +@x [6.94] l.1461 printf("\n! Line had to be broken (output l. %d):\n",out_line); @y printf(_("\n! Line had to be broken (output l. %d):\n"),out_line); @z -@x [6.95] l.1471 +@x [6.95] l.1470 |def_flag|, so it cannot have more than five decimal digits. If the section is changed, we output `\.{\\*}' just after the number. @y |def_flag|, so it cannot have more than five decimal digits. @z -@x [6.96] l.1485 +@x [6.96] l.1484 if (changed_section[n]) out_str("\\*"); @.\\*@> @y @z -@x [7.99] l.1543 +@x [7.99] l.1542 default: err_print("! Double @@ should be used in limbo"); @y case right_start: right_start_switch=true; break; default: err_print(_("! Double @@ should be used in limbo")); @z -@x [7.101] l.1585 +@x [7.101] l.1584 @d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow("token"); *(tok_ptr++)=c;} @y @d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow(_("token")); *(tok_ptr++)=c;} @z -@x [7.101] l.1597 +@x [7.101] l.1596 err_print("! Input ended in mid-comment"); @y err_print(_("! Input ended in mid-comment")); @z -@x [7.101] l.1602 +@x [7.101] l.1601 if (bal>1) err_print("! Missing } in comment"); @y if (bal>1) err_print(_("! Missing } in comment")); @z -@x [7.101] l.1618 +@x [7.101] l.1617 else {err_print("! Extra } in comment"); @y else {err_print(_("! Extra } in comment")); @z -@x [7.102] l.1630 +@x [7.102] l.1629 if (bal>1) err_print("! Missing } in comment"); @y if (bal>1) err_print(_("! Missing } in comment")); @z -@x [7.103] l.1638 +@x [7.103] l.1637 err_print("! Illegal use of @@ in comment"); @y err_print(_("! Illegal use of @@ in comment")); @z -@x [8.106] l.1755 +@x [8.106] l.1754 @d attr_head 69 /* denotes beginning of attribute */ @y @d attr_head 69 /* denotes beginning of attribute */ @d title 70 /* program name or header name in a ``meaning'' */ @z -@x [8.110] l.2129 +@x [8.110] l.2128 @i prod.w @y @i prod-twill.w @z -@x [9.113] l.2179 +@x [9.113] l.2178 static scrap scrap_info[max_scraps]; /* memory array for scraps */ @y static scrap scrap_info[max_scraps]; /* memory array for scraps */ static scrap null_scrap; /* a scrap with empty translation */ @z -@x [9.114] l.2188 +@x [9.114] l.2187 @ @<Set init...@>= @y @ @<Set init...@>= null_scrap.trans=&tok_start[0]; @z -@x [9.116] l.2249 +@x [9.116] l.2248 update_terminal(); @y puts("|"); update_terminal(); @z -@x [9.124] l.2560 +@x [9.124] l.2559 the |for| loop below. @c @@ -618,7 +618,7 @@ static token_pointer tok_loc; /* where the first identifier appears */ @# @z -@x [9.124] l.2568 +@x [9.124] l.2567 token_pointer tok_loc; /* pointer to |tok_value| */ if ((tok_loc=find_first_ident(p->trans))<=operator_found) return; /* this should not happen */ @@ -626,12 +626,12 @@ static token_pointer tok_loc; /* where the first identifier appears */ if (tok_loc<=operator_found) return; /* this should not happen */ @z -@x [9.125] l.2597 +@x [9.125] l.2596 token_pointer tok_loc; /* where the first identifier appears */ @y @z -@x [9.128] l.2651 +@x [9.128] l.2650 @<Cases for |exp|@>= if (cat1==lbrace || cat1==int_like || cat1==decl) { make_underlined(pp); big_app(dindent); big_app1(pp); @@ -646,7 +646,7 @@ if(cat1==lbrace || cat1==int_like || cat1==decl) { } @z -@x [9.128] l.2666 +@x [9.128] l.2665 make_underlined (pp); squash(pp,2,tag,-1,7); @y make_underlined (pp); @@ -657,7 +657,7 @@ if(cat1==lbrace || cat1==int_like || cat1==decl) { squash(pp,2,tag,-1,7); @z -@x [9.138] l.2755 +@x [9.138] l.2754 @ @<Cases for |decl_head|@>= if (cat1==comma) { big_app2(pp); app(opt); app('9'); reduce(pp,2,decl_head,-1,33); @@ -700,7 +700,7 @@ else if (cat1==int_like || cat1==lbrace || cat1==decl) { else if (cat1==semi) squash(pp,2,decl,-1,39); @z -@x [9.139] l.2777 +@x [9.139] l.2776 @ @<Cases for |decl|@>= if (cat1==decl) { big_app1_insert(pp,force); reduce(pp,2,decl,-1,40); @@ -719,13 +719,13 @@ else if (cat1==stmt || cat1==function) { } @z -@x [9.141] l.2803 +@x [9.141] l.2802 make_underlined(pp+1); make_reserved(pp+1); @y make_underlined(pp+1); make_reserved(pp+1); make_ministring(pp+1); @z -@x [9.143] l.2834 +@x [9.143] l.2833 @ @<Cases for |fn_decl|@>= if (cat1==decl) { big_app1_insert(pp,force); reduce(pp,2,fn_decl,0,51); @@ -748,14 +748,14 @@ else if (cat1==stmt) { } @z -@x [9.153] l.2938 +@x [9.153] l.2937 big_app1_insert(pp,dindent); reduce(pp,2,fn_decl,0,73); @y big_app1(pp); if (indent_param_decl) big_app(dindent); big_app1(pp+1); reduce(pp,2,fn_decl,0,73); @z -@x [9.156] l.2964 +@x [9.156] l.2963 big_app1_insert(pp, (cat1==decl || cat1==function) ? big_force : force_lines ? force : break_space); reduce(pp,2,cat1,-1,76); @y @@ -764,7 +764,7 @@ else if (cat1==stmt) { ( force_lines ? force : break_space ) ); reduce(pp,2,cat1,-1,76); @z -@x [9.158] l.2972 +@x [9.158] l.2971 if (cat1==define_like) make_underlined(pp+2); @y if (cat1==define_like) { /* \#\&{define} is analogous to \&{extern} */ @@ -776,7 +776,7 @@ if (cat1==define_like) { /* \#\&{define} is analogous to \&{extern} */ } @z -@x [9.167] l.3069 +@x [9.167] l.3068 if (cat1==prelangle) reduce(pp+1,0,langle,1,100); else reduce(pp,0,exp,-2,101); @y @@ -784,13 +784,13 @@ if (cat1==prelangle) reduce(pp+1,0,langle,1,121); else reduce(pp,0,exp,-2,122); @z -@x [9.168] l.3074 +@x [9.168] l.3073 big_app1_insert(pp,' '); reduce(pp,2,else_like,-2,102); @y big_app1_insert(pp,' '); reduce(pp,2,else_like,-2,123); @z -@x [9.173] l.3106 +@x [9.173] l.3105 @ @<Cases for |typedef_like|@>= if ((cat1==int_like || cat1==cast) && (cat2==comma || cat2==semi)) reduce(pp+1,0,exp,-1,115); @@ -826,56 +826,56 @@ if (cat1==decl_head) { (cat3==semi || cat3==comma)) reduce(pp+2,0,exp,1,202); @z -@x [9.186] l.3293 +@x [9.186] l.3292 overflow("token"); @y overflow(_("token")); @z -@x [9.186] l.3297 +@x [9.186] l.3296 overflow("text"); @y overflow(_("text")); @z -@x [9.190] l.3352 +@x [9.190] l.3351 if (tok_ptr+6>tok_mem_end) overflow("token"); @y if (tok_ptr+6>tok_mem_end) overflow(_("token")); @z -@x [9.191] l.3358 +@x [9.191] l.3357 printf("\nIrreducible scrap sequence in section %d:",(int)section_count); @y printf(_("\nIrreducible scrap sequence in section %d:"),(int)section_count); @z -@x [9.192] l.3368 +@x [9.192] l.3367 printf("\nTracing after l. %d:\n",cur_line); mark_harmless(); @y printf(_("\nTracing after l. %d:\n"),cur_line); mark_harmless(); @z -@x [10.196] l.3454 +@x [10.196] l.3453 case ignore: case xref_roman: case xref_wildcard: @y case ignore: case xref_roman: case xref_wildcard: case meaning: case suppress: @z -@x [10.197] l.3500 +@x [10.197] l.3499 overflow("scrap/token/text"); @y overflow(_("scrap/token/text")); @z -@x [10.199] l.3585 +@x [10.199] l.3584 else err_print("! Double @@ should be used in strings"); @y else err_print(_("! Double @@ should be used in strings")); @z -@x [10.202] l.3650 +@x [10.202] l.3649 else app_scrap(p->ilk,maybe_math); } } @@ -886,62 +886,62 @@ if (cat1==decl_head) { @<Flag the usage of this identifier, for the mini-index@>@; @z -@x [10.203] l.3668 +@x [10.203] l.3667 if (next_control!='|') err_print("! Missing '|' after C text"); @y if (next_control!='|') err_print(_("! Missing '|' after C text")); @z -@x [10.204] l.3683 +@x [10.204] l.3682 to \.{\\PB}. Although \.{cwebmac} ignores \.{\\PB}, other macro packages @y to \.{\\PB}. Although \.{ctwimac} ignores \.{\\PB}, other macro packages @z -@x [10.205] l.3713 +@x [10.205] l.3712 app(tok_flag+(int)(p-tok_start)); @y app(tok_flag+(int)(p-tok_start)); app(inserted); @z -@x [11.211] l.3809 +@x [11.211] l.3808 if (stack_ptr==stack_end) overflow("stack"); @y if (stack_ptr==stack_end) overflow(_("stack")); @z -@x [11.224] l.4132 +@x [11.224] l.4131 printf("%s","\n! Illegal control code in section name: <"); @y printf("%s",_("\n! Illegal control code in section name: <")); @z -@x [11.225] l.4147 +@x [11.225] l.4146 printf("%s","\n! C text in section name didn't end: <"); @y printf("%s",_("\n! C text in section name didn't end: <")); @z -@x [11.225] l.4159 +@x [11.225] l.4158 if (j>buffer+long_buf_size-3) overflow("buffer"); @y if (j>buffer+long_buf_size-3) overflow(_("buffer")); @z -@x [11.226] l.4167 +@x [11.226] l.4166 if (j>buffer+long_buf_size-4) overflow("buffer"); @y if (j>buffer+long_buf_size-4) overflow(_("buffer")); @z -@x [12.227] l.4182 +@x [12.227] l.4181 if (show_progress) printf("%s","\nWriting the output file..."); @y if (show_progress) printf("%s",_("\nWriting the output file...")); @z -@x [12.227] l.4184 +@x [12.227] l.4183 section_count=0; format_visible=true; copy_limbo(); @y temp_switch=false; temp_meaning_ptr=temp_meaning_stack; @@ -949,7 +949,7 @@ temp_switch=false; temp_meaning_ptr=temp_meaning_stack; section_count=0; format_visible=true; right_start_switch=false; copy_limbo(); @z -@x [12.229] l.4213 +@x [12.229] l.4212 static boolean group_found=false; /* has a starred section occurred? */ @ @<Translate the current section@>= { @@ -966,12 +966,12 @@ static boolean temp_switch; /* has `\.{@@\%}' occurred recently? */ top_usage=usage_sentinel; @z -@x [12.231] l.4231 +@x [12.231] l.4230 If the section has changed, we put \.{\\*} just after the section number. @y @z -@x [12.231] l.4234 +@x [12.231] l.4233 if (*(loc-1)!='*') out_str("\\M"); @y if (*(loc-1)!='*') { @@ -983,7 +983,7 @@ if (*(loc-1)!='*') { } @z -@x [12.231] l.4249 +@x [12.231] l.4248 @.\\N@> @y @.\\N@> @@ -993,14 +993,14 @@ if (*(loc-1)!='*') { } @z -@x [12.231] l.4256 +@x [12.231] l.4255 out('{'); out_section(section_count); out('}'); @y out('{'); out_section(section_count); out('}'); flush_buffer(out_ptr,false,false); @z -@x [12.232] l.4264 +@x [12.232] l.4263 case '@@': out('@@'); break; @y case '@@': out('@@'); break; @@ -1008,26 +1008,26 @@ flush_buffer(out_ptr,false,false); case right_start: right_start_switch=true; break; @z -@x [12.232] l.4267 +@x [12.232] l.4266 case section_name: loc-=2; next_control=get_next(); /* skip to \.{@@>} */ @y case meaning: case suppress: case section_name: loc-=2; next_control=get_next(); /* reprocess */ @z -@x [12.232] l.4269 +@x [12.232] l.4268 err_print("! TeX string should be in C text only"); break; @y err_print(_("! TeX string should be in C text only")); break; @z -@x [12.232] l.4275 +@x [12.232] l.4274 err_print("! You can't do that in TeX text"); break; @y err_print(_("! You can't do that in TeX text")); break; @z -@x [12.233] l.4289 +@x [12.233] l.4288 outer_parse(); finish_C(format_visible); format_visible=true; doing_format=false; } @@ -1039,20 +1039,20 @@ flush_buffer(out_ptr,false,false); } @z -@x [12.236] l.4341 +@x [12.236] l.4340 @<Start a macro...@>= { @y @<Start a macro...@>= { is_macro=true; @z -@x [12.236] l.4347 +@x [12.236] l.4346 err_print("! Improper macro definition"); @y err_print(_("! Improper macro definition")); @z -@x [12.236] l.4348 +@x [12.236] l.4347 @.Improper macro definition@> else { app('$'); app_cur_id(false); @@ -1064,7 +1064,7 @@ flush_buffer(out_ptr,false,false); def_diff=(*loc!='('); @z -@x [12.236] l.4360 +@x [12.236] l.4359 } @=/* otherwise fall through */@>@; default: err_print("! Improper macro definition"); break; @y @@ -1072,7 +1072,7 @@ flush_buffer(out_ptr,false,false); default: err_print(_("! Improper macro definition")); break; @z -@x [12.237] l.4370 +@x [12.237] l.4369 @ @<Start a format...@>= { doing_format=true; @y @@ -1081,25 +1081,25 @@ flush_buffer(out_ptr,false,false); is_macro=false; @z -@x [12.237] l.4387 +@x [12.237] l.4386 if (scrap_ptr!=scrap_info+2) err_print("! Improper format definition"); @y if (scrap_ptr!=scrap_info+2) err_print(_("! Improper format definition")); @z -@x [12.240] l.4422 +@x [12.240] l.4421 err_print("! You need an = sign after the section name"); @y err_print(_("! You need an = sign after the section name")); @z -@x [12.241] l.4444 +@x [12.241] l.4443 err_print("! You can't do that in C text"); @y err_print(_("! You can't do that in C text")); @z -@x [12.246] l.4514 +@x [12.246] l.4513 out_str("\\fi"); finish_line(); @.\\fi@> @y @@ -1110,13 +1110,13 @@ out_str("}\\FI"); finish_line(); @.\\FI@> @z -@x [13.247] l.4535 +@x [13.247] l.4534 if (show_progress) printf("%s","\nWriting the index..."); @y if (show_progress) printf("%s",_("\nWriting the index...")); @z -@x [13.247] l.4537 +@x [13.247] l.4536 if (change_exists) { @<Tell about changed sections@>@; finish_line(); flush_buffer(out_buf,false,false); @@ -1125,32 +1125,32 @@ out_str("}\\FI"); finish_line(); @y @z -@x [13.247] l.4546 +@x [13.247] l.4545 fatal("! Cannot open index file ",idx_file_name); @y fatal(_("! Cannot open index file "),idx_file_name); @z -@x [13.247] l.4558 +@x [13.247] l.4557 fatal("! Cannot open section file ",scn_file_name); @y fatal(_("! Cannot open section file "),scn_file_name); @z -@x [13.247] l.4570 +@x [13.247] l.4569 fclose(active_file); @y fclose(active_file); active_file=tex_file=NULL; if (check_for_change) @<Update the result when it has changed@>@; @z -@x [13.247] l.4573 +@x [13.247] l.4572 printf("%s","Done."); @y printf("%s",_("Done.")); @z -@x [13.249] l.4581 +@x [13.249] l.4580 the index section itself. @<Tell about changed sections@>= @@ -1169,13 +1169,13 @@ out('.'); the index section itself---NOT! @z -@x [13.257] l.4725 +@x [13.257] l.4724 if (sort_ptr>=scrap_info_end) overflow("sorting"); @y if (sort_ptr>=scrap_info_end) overflow(_("sorting")); @z -@x [13.262] l.4770 +@x [13.262] l.4769 @ @<Output the name...@>= switch (cur_name->ilk) {@+char *p; /* index into |byte_mem| */@+@t}\6{\4@> @y @@ -1186,20 +1186,20 @@ rest of the job. Compare this code with section |@<Mini-output...@>|. switch (cur_name->ilk) { @z -@x [13.262] l.4772 +@x [13.262] l.4771 case normal: case func_template: @y case normal: @z -@x [13.262] l.4774 +@x [13.262] l.4773 else {@+boolean all_caps=true;@+@t}\6{@> @y else {@+boolean all_caps=true;@+char *p; /* index into |byte_mem| */ @+@t}\6{@> @z -@x [13.262] l.4789 +@x [13.262] l.4788 case roman: not_an_identifier: out_name(cur_name,false); goto name_done; case custom: out_str("$\\"); @@ -1214,13 +1214,13 @@ not_an_identifier: out_name(cur_name,false); goto name_done; @.\\\$@> @z -@x [13.262] l.4799 +@x [13.262] l.4798 out_name(cur_name,true); @y out_name(cur_name,proofing); @z -@x [13.269] l.4862 +@x [13.269] l.4861 puts("\nMemory usage statistics:"); @.Memory usage statistics:@> printf("%td names (out of %ld)\n",@^system dependencies@> @@ -1269,7 +1269,7 @@ out_name(cur_name,proofing); (ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps); @z -@x [14.270] l.4884 +@x [14.270] l.4883 @** Index. @y @q Section 270. @> diff --git a/Build/source/texk/web2c/cwebdir/cweav-bs.ch b/Build/source/texk/web2c/cwebdir/cweav-bs.ch index c2f3214c793..458a0a7e60c 100644 --- a/Build/source/texk/web2c/cwebdir/cweav-bs.ch +++ b/Build/source/texk/web2c/cwebdir/cweav-bs.ch @@ -20,12 +20,12 @@ This file contributed by Barry Schwartz, trashman@crud.mn.org, 28 Jun 94. The ``banner line'' defined here should be changed whenever \.{CWEAVE} is modified. -@d banner "This is CWEAVE (Version 4.11)" +@d banner "This is CWEAVE (Version 4.12)" @y The ``banner line'' defined here should be changed whenever \.{CWEAVE} is modified. -@d banner "This is CWEAVE (Version 4.11pc/big)" +@d banner "This is CWEAVE (Version 4.12pc/big)" @z diff --git a/Build/source/texk/web2c/cwebdir/cweav-pc.ch b/Build/source/texk/web2c/cwebdir/cweav-pc.ch index 165b8a54eeb..ae1fb9f45c7 100644 --- a/Build/source/texk/web2c/cwebdir/cweav-pc.ch +++ b/Build/source/texk/web2c/cwebdir/cweav-pc.ch @@ -11,9 +11,9 @@ that allows >64K arrays. (If you need lots more bytes, try the alternate change files that have -bs in their name instead of -pc.) @x section 1 -@d banner "This is CWEAVE (Version 4.11)" +@d banner "This is CWEAVE (Version 4.12)" @y -@d banner "This is CWEAVE (Version 4.11pc)" +@d banner "This is CWEAVE (Version 4.12pc)" @z @x section 17 diff --git a/Build/source/texk/web2c/cwebdir/cweav-ql.ch b/Build/source/texk/web2c/cwebdir/cweav-ql.ch index 31bd6138a29..fd369064deb 100644 --- a/Build/source/texk/web2c/cwebdir/cweav-ql.ch +++ b/Build/source/texk/web2c/cwebdir/cweav-ql.ch @@ -7,15 +7,15 @@ ex <dev_>cc;"-v -h -c =500000 cweave_c" @x -\def\title{CWEAVE (Version 4.11)} +\def\title{CWEAVE (Version 4.12)} @y -\def\title{CWEAVE (QL Version 4.11)} +\def\title{CWEAVE (QL Version 4.12)} @z @x section 1 -@d banner "This is CWEAVE (Version 4.11)" +@d banner "This is CWEAVE (Version 4.12)" @y -@d banner "This is CWEAVE (QL Version 4.11)" +@d banner "This is CWEAVE (QL Version 4.12)" @z @x diff --git a/Build/source/texk/web2c/cwebdir/cweav-vms.ch b/Build/source/texk/web2c/cwebdir/cweav-vms.ch index b944f838153..f4630f98661 100644 --- a/Build/source/texk/web2c/cwebdir/cweav-vms.ch +++ b/Build/source/texk/web2c/cwebdir/cweav-vms.ch @@ -13,9 +13,9 @@ modified: (also modified by Don Knuth to keep version numbers uptodate) @x section 1 (01-FEB-1992 ST) -@d banner "This is CWEAVE (Version 4.11)" +@d banner "This is CWEAVE (Version 4.12)" @y -@d banner "This is CWEAVE (VAX/VMS Version 4.11)" +@d banner "This is CWEAVE (VAX/VMS Version 4.12)" @z @x section 5 (01-FEB-1992 ST) diff --git a/Build/source/texk/web2c/cwebdir/cweav-w2c.ch b/Build/source/texk/web2c/cwebdir/cweav-w2c.ch index 73b9ab4b2c9..6d350fc405a 100644 --- a/Build/source/texk/web2c/cwebdir/cweav-w2c.ch +++ b/Build/source/texk/web2c/cwebdir/cweav-w2c.ch @@ -16,62 +16,62 @@ @q Please send comments, suggestions, etc. to tex-k@@tug.org. @> -@x [0.0] l.35 -\def\title{CWEAVE (Version 4.11)} +@x [0.0] l.34 +\def\title{CWEAVE (Version 4.12)} @y -\def\title{CWEAVE (Version 4.11 [\TeX~Live])} +\def\title{CWEAVE (Version 4.12 [\TeX~Live])} @z -@x [0.0] l.39 - \centerline{(Version 4.11)} +@x [0.0] l.38 + \centerline{(Version 4.12)} @y - \centerline{(Version 4.11 [\TeX~Live])} + \centerline{(Version 4.12 [\TeX~Live])} @z -@x [0.0] l.41 +@x [0.0] l.40 \def\botofcontents{\vfill @y \def\covernote{\vbox{% @z -@x [0.0] l.54 +@x [0.0] l.53 } @y }}\datecontentspage @z -@x [1.1] l.70 -@d banner "This is CWEAVE (Version 4.11)" +@x [1.1] l.69 +@d banner "This is CWEAVE (Version 4.12)" @y -@d banner "This is CWEAVE, Version 4.11" +@d banner "This is CWEAVE, Version 4.12" /* will be extended by the \TeX~Live |versionstring| */ @z -@x [1.2] l.98 +@x [1.2] l.97 if (show_banner) puts(banner); /* print a ``banner line'' */ @y if (show_banner) cb_show_banner(); /* print a ``banner line'' */ @z -@x [1.3] l.112 +@x [1.3] l.111 @i common.h @y @i comm-w2c.h @z -@x [2.23] l.217 +@x [2.23] l.216 @ @d max_refs 30000 /* number of cross-references; must be less than 65536 */ @y @ @d max_refs 65535 /* number of cross-references; must be less than 65536 */ @z -@x [2.25] l.246 +@x [2.25] l.245 @d append_xref(c) if (xref_ptr==xmem_end) overflow("cross-reference"); @y @d append_xref(c) if (xref_ptr==xmem_end) overflow(_("cross-reference")); @z -@x [2.30] l.337 +@x [2.30] l.336 @d max_toks 30000 /* number of symbols in \CEE/ texts being parsed; must be less than 65536 */ @d max_texts 8000 /* number of phrases in \CEE/ texts being parsed; @@ -83,97 +83,97 @@ must be less than 10240 */ @z -@x [4.57] l.888 +@x [4.57] l.887 err_print("! String didn't end"); loc=limit; break; @y err_print(_("! String didn't end")); loc=limit; break; @z -@x [4.57] l.892 +@x [4.57] l.891 err_print("! Input ended in middle of string"); loc=buffer; break; @y err_print(_("! Input ended in middle of string")); loc=buffer; break; @z -@x [4.57] l.911 +@x [4.57] l.910 printf("%s","\n! String too long: "); @y printf("%s",_("\n! String too long: ")); @z -@x [4.59] l.930 +@x [4.59] l.929 case translit_code: err_print("! Use @@l in limbo only"); continue; @y case translit_code: err_print(_("! Use @@l in limbo only")); continue; @z -@x [4.62] l.968 +@x [4.62] l.967 err_print("! Input ended in section name"); @y err_print(_("! Input ended in section name")); @z -@x [4.62] l.981 +@x [4.62] l.980 printf("%s","\n! Section name too long: "); @y printf("%s",_("\n! Section name too long: ")); @z -@x [4.63] l.995 +@x [4.63] l.994 err_print("! Section name didn't end"); break; @y err_print(_("! Section name didn't end")); break; @z -@x [4.63] l.999 +@x [4.63] l.998 err_print("! Control codes are forbidden in section name"); break; @y err_print(_("! Control codes are forbidden in section name")); break; @z -@x [4.64] l.1016 +@x [4.64] l.1015 err_print("! Control text didn't end"); loc=limit; @y err_print(_("! Control text didn't end")); loc=limit; @z -@x [4.64] l.1021 +@x [4.64] l.1020 err_print("! Control codes are forbidden in control text"); @y err_print(_("! Control codes are forbidden in control text")); @z -@x [4.66] l.1036 +@x [4.66] l.1035 if (loc>=limit) err_print("! Verbatim string didn't end"); @y if (loc>=limit) err_print(_("! Verbatim string didn't end")); @z -@x [5.70] l.1073 +@x [5.70] l.1072 if (++section_count==max_sections) overflow("section number"); @y if (++section_count==max_sections) overflow(_("section number")); @z -@x [5.74] l.1162 +@x [5.74] l.1161 case translit_code: err_print("! Use @@l in limbo only"); continue; @y case translit_code: err_print(_("! Use @@l in limbo only")); continue; @z -@x [5.79] l.1249 +@x [5.79] l.1248 err_print("! Missing left identifier of @@s"); @y err_print(_("! Missing left identifier of @@s")); @z -@x [5.79] l.1254 +@x [5.79] l.1253 err_print("! Missing right identifier of @@s"); @y err_print(_("! Missing right identifier of @@s")); @z -@x [5.82] l.1302 +@x [5.82] l.1301 printf("%s","\n! Never defined: <"); print_section_name(p); putchar('>'); mark_harmless(); @y @@ -181,7 +181,7 @@ if (loc>=limit) err_print(_("! Verbatim string didn't end")); print_section_name(p); putchar('>'); mark_harmless(); @z -@x [5.82] l.1308 +@x [5.82] l.1307 printf("%s","\n! Never used: <"); print_section_name(p); putchar('>'); mark_harmless(); @y @@ -189,7 +189,7 @@ if (loc>=limit) err_print(_("! Verbatim string didn't end")); print_section_name(p); putchar('>'); mark_harmless(); @z -@x [6.89] l.1397 +@x [6.89] l.1396 @ In particular, the |finish_line| procedure is called near the very beginning of phase two. We initialize the output variables in a slightly tricky way so that the first line of the output file will be @@ -218,61 +218,61 @@ tex_puts("cwebma"); *out_ptr='c'; @z -@x [6.94] l.1462 +@x [6.94] l.1461 printf("\n! Line had to be broken (output l. %d):\n",out_line); @y printf(_("\n! Line had to be broken (output l. %d):\n"),out_line); @z -@x [7.99] l.1543 +@x [7.99] l.1542 default: err_print("! Double @@ should be used in limbo"); @y default: err_print(_("! Double @@ should be used in limbo")); @z -@x [7.101] l.1585 +@x [7.101] l.1584 @d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow("token"); *(tok_ptr++)=c;} @y @d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow(_("token")); *(tok_ptr++)=c;} @z -@x [7.101] l.1597 +@x [7.101] l.1596 err_print("! Input ended in mid-comment"); @y err_print(_("! Input ended in mid-comment")); @z -@x [7.101] l.1602 +@x [7.101] l.1601 if (bal>1) err_print("! Missing } in comment"); @y if (bal>1) err_print(_("! Missing } in comment")); @z -@x [7.101] l.1618 +@x [7.101] l.1617 else {err_print("! Extra } in comment"); @y else {err_print(_("! Extra } in comment")); @z -@x [7.102] l.1630 +@x [7.102] l.1629 if (bal>1) err_print("! Missing } in comment"); @y if (bal>1) err_print(_("! Missing } in comment")); @z -@x [7.103] l.1638 +@x [7.103] l.1637 err_print("! Illegal use of @@ in comment"); @y err_print(_("! Illegal use of @@ in comment")); @z -@x [8.110] l.2129 +@x [8.110] l.2128 @i prod.w @y @i prod-cweave.w @z -@x [9.128] l.2651 +@x [9.128] l.2650 @<Cases for |exp|@>= if (cat1==lbrace || cat1==int_like || cat1==decl) { make_underlined(pp); big_app(dindent); big_app1(pp); @@ -286,7 +286,7 @@ if(cat1==lbrace || cat1==int_like || cat1==decl) { } @z -@x [9.138] l.2755 +@x [9.138] l.2754 @ @<Cases for |decl_head|@>= if (cat1==comma) { big_app2(pp); app(opt); app('9'); reduce(pp,2,decl_head,-1,33); @@ -328,7 +328,7 @@ else if (cat1==int_like || cat1==lbrace || cat1==decl) { else if (cat1==semi) squash(pp,2,decl,-1,39); @z -@x [9.139] l.2777 +@x [9.139] l.2776 @ @<Cases for |decl|@>= if (cat1==decl) { big_app1_insert(pp,force); reduce(pp,2,decl,-1,40); @@ -347,7 +347,7 @@ else if (cat1==stmt || cat1==function) { } @z -@x [9.143] l.2834 +@x [9.143] l.2833 @ @<Cases for |fn_decl|@>= if (cat1==decl) { big_app1_insert(pp,force); reduce(pp,2,fn_decl,0,51); @@ -370,14 +370,14 @@ else if (cat1==stmt) { } @z -@x [9.153] l.2938 +@x [9.153] l.2937 big_app1_insert(pp,dindent); reduce(pp,2,fn_decl,0,73); @y big_app1(pp); if (indent_param_decl) big_app(dindent); big_app1(pp+1); reduce(pp,2,fn_decl,0,73); @z -@x [9.156] l.2964 +@x [9.156] l.2963 big_app1_insert(pp, (cat1==decl || cat1==function) ? big_force : force_lines ? force : break_space); reduce(pp,2,cat1,-1,76); @y @@ -386,109 +386,109 @@ else if (cat1==stmt) { ( force_lines ? force : break_space ) ); reduce(pp,2,cat1,-1,76); @z -@x [9.186] l.3293 +@x [9.186] l.3292 overflow("token"); @y overflow(_("token")); @z -@x [9.186] l.3297 +@x [9.186] l.3296 overflow("text"); @y overflow(_("text")); @z -@x [9.190] l.3352 +@x [9.190] l.3351 if (tok_ptr+6>tok_mem_end) overflow("token"); @y if (tok_ptr+6>tok_mem_end) overflow(_("token")); @z -@x [9.191] l.3358 +@x [9.191] l.3357 printf("\nIrreducible scrap sequence in section %d:",(int)section_count); @y printf(_("\nIrreducible scrap sequence in section %d:"),(int)section_count); @z -@x [9.192] l.3368 +@x [9.192] l.3367 printf("\nTracing after l. %d:\n",cur_line); mark_harmless(); @y printf(_("\nTracing after l. %d:\n"),cur_line); mark_harmless(); @z -@x [10.197] l.3500 +@x [10.197] l.3499 overflow("scrap/token/text"); @y overflow(_("scrap/token/text")); @z -@x [10.199] l.3585 +@x [10.199] l.3584 else err_print("! Double @@ should be used in strings"); @y else err_print(_("! Double @@ should be used in strings")); @z -@x [10.203] l.3668 +@x [10.203] l.3667 if (next_control!='|') err_print("! Missing '|' after C text"); @y if (next_control!='|') err_print(_("! Missing '|' after C text")); @z -@x [11.211] l.3809 +@x [11.211] l.3808 if (stack_ptr==stack_end) overflow("stack"); @y if (stack_ptr==stack_end) overflow(_("stack")); @z -@x [11.224] l.4132 +@x [11.224] l.4131 printf("%s","\n! Illegal control code in section name: <"); @y printf("%s",_("\n! Illegal control code in section name: <")); @z -@x [11.225] l.4147 +@x [11.225] l.4146 printf("%s","\n! C text in section name didn't end: <"); @y printf("%s",_("\n! C text in section name didn't end: <")); @z -@x [11.225] l.4159 +@x [11.225] l.4158 if (j>buffer+long_buf_size-3) overflow("buffer"); @y if (j>buffer+long_buf_size-3) overflow(_("buffer")); @z -@x [11.226] l.4167 +@x [11.226] l.4166 if (j>buffer+long_buf_size-4) overflow("buffer"); @y if (j>buffer+long_buf_size-4) overflow(_("buffer")); @z -@x [12.227] l.4182 +@x [12.227] l.4181 if (show_progress) printf("%s","\nWriting the output file..."); @y if (show_progress) printf("%s",_("\nWriting the output file...")); @z -@x [12.232] l.4269 +@x [12.232] l.4268 err_print("! TeX string should be in C text only"); break; @y err_print(_("! TeX string should be in C text only")); break; @z -@x [12.232] l.4275 +@x [12.232] l.4274 err_print("! You can't do that in TeX text"); break; @y err_print(_("! You can't do that in TeX text")); break; @z -@x [12.236] l.4347 +@x [12.236] l.4346 err_print("! Improper macro definition"); @y err_print(_("! Improper macro definition")); @z -@x [12.236] l.4360 +@x [12.236] l.4359 } @=/* otherwise fall through */@>@; default: err_print("! Improper macro definition"); break; @y @@ -496,62 +496,62 @@ if (show_progress) printf("%s",_("\nWriting the output file...")); default: err_print(_("! Improper macro definition")); break; @z -@x [12.237] l.4387 +@x [12.237] l.4386 if (scrap_ptr!=scrap_info+2) err_print("! Improper format definition"); @y if (scrap_ptr!=scrap_info+2) err_print(_("! Improper format definition")); @z -@x [12.240] l.4422 +@x [12.240] l.4421 err_print("! You need an = sign after the section name"); @y err_print(_("! You need an = sign after the section name")); @z -@x [12.241] l.4444 +@x [12.241] l.4443 err_print("! You can't do that in C text"); @y err_print(_("! You can't do that in C text")); @z -@x [13.247] l.4535 +@x [13.247] l.4534 if (show_progress) printf("%s","\nWriting the index..."); @y if (show_progress) printf("%s",_("\nWriting the index...")); @z -@x [13.247] l.4546 +@x [13.247] l.4545 fatal("! Cannot open index file ",idx_file_name); @y fatal(_("! Cannot open index file "),idx_file_name); @z -@x [13.247] l.4558 +@x [13.247] l.4557 fatal("! Cannot open section file ",scn_file_name); @y fatal(_("! Cannot open section file "),scn_file_name); @z -@x [13.247] l.4570 +@x [13.247] l.4569 fclose(active_file); @y fclose(active_file); active_file=tex_file=NULL; if (check_for_change) @<Update the result when it has changed@>@; @z -@x [13.247] l.4573 +@x [13.247] l.4572 printf("%s","Done."); @y printf("%s",_("Done.")); @z -@x [13.257] l.4725 +@x [13.257] l.4724 if (sort_ptr>=scrap_info_end) overflow("sorting"); @y if (sort_ptr>=scrap_info_end) overflow(_("sorting")); @z -@x [13.269] l.4862 +@x [13.269] l.4861 puts("\nMemory usage statistics:"); @.Memory usage statistics:@> printf("%td names (out of %ld)\n",@^system dependencies@> @@ -595,7 +595,7 @@ if (check_for_change) @<Update the result when it has changed@>@; (ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps); @z -@x [14.270] l.4884 +@x [14.270] l.4883 @** Index. @y @** Extensions to {\tentex CWEB}. The following sections introduce new or diff --git a/Build/source/texk/web2c/cwebdir/cweav-w32.ch b/Build/source/texk/web2c/cwebdir/cweav-w32.ch index 1bf1471e18e..2f9a2127ac5 100644 --- a/Build/source/texk/web2c/cwebdir/cweav-w32.ch +++ b/Build/source/texk/web2c/cwebdir/cweav-w32.ch @@ -2,9 +2,9 @@ This is the change file for CWEB's CWEAVE under Win32 (Contributed by Fabrice Popineau, February 2002) @x section 1 -@d banner "This is CWEAVE (Version 4.11)" +@d banner "This is CWEAVE (Version 4.12)" @y -@d banner "This is CWEAVE (Version 4.11win32)" +@d banner "This is CWEAVE (Version 4.12win32)" @z @x section 32 diff --git a/Build/source/texk/web2c/cwebdir/cweave.w b/Build/source/texk/web2c/cwebdir/cweave.w index 808d46cc7eb..627fa1fa815 100644 --- a/Build/source/texk/web2c/cwebdir/cweave.w +++ b/Build/source/texk/web2c/cwebdir/cweave.w @@ -2,7 +2,7 @@ % This program by Silvio Levy and Donald E. Knuth % is based on a program by Knuth. % It is distributed WITHOUT ANY WARRANTY, express or implied. -% Version 4.11 --- December 2023 +% Version 4.12 --- August 2024 % Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth @@ -27,16 +27,15 @@ \def\dleft{[\![} \def\dright{]\!]} % double brackets \mathchardef\RA="3221 % right arrow \mathchardef\BA="3224 % double arrow -\def\({} % ) kludge for alphabetizing certain section names \def\TeXxstring{\\{\TEX/\_string}} \def\skipxTeX{\\{skip\_\TEX/}} \def\copyxTeX{\\{copy\_\TEX/}} -\def\title{CWEAVE (Version 4.11)} +\def\title{CWEAVE (Version 4.12)} \def\topofcontents{\null\vfill \centerline{\titlefont The {\ttitlefont CWEAVE} processor} \vskip 15pt - \centerline{(Version 4.11)} + \centerline{(Version 4.12)} \vfill} \def\botofcontents{\vfill \noindent @@ -67,7 +66,7 @@ Crusius, and others who have contributed improvements. The ``banner line'' defined here should be changed whenever \.{CWEAVE} is modified. -@d banner "This is CWEAVE (Version 4.11)" +@d banner "This is CWEAVE (Version 4.12)" @c @<Include files@>@/ diff --git a/Build/source/texk/web2c/cwebdir/cwebacromac.tex b/Build/source/texk/web2c/cwebdir/cwebacromac.tex index f8462d06a37..3e8baad77c1 100644 --- a/Build/source/texk/web2c/cwebdir/cwebacromac.tex +++ b/Build/source/texk/web2c/cwebdir/cwebacromac.tex @@ -1,6 +1,8 @@ % hypertext macros for CWEB listings (in addition to cwebmac.tex) -% Version 2.0 --- May 2024 +% Used in cwebmac.tex, pdfctwimac.tex, pdfproofmac.tex +% Version 3.0 --- August 2024 \ifx\ifacrohint\undefined\endinput\fi % these are not standalone macros + \ifluatex % LuaTeX is almost like pdfTeX \protected\def\pdfliteral {\pdfextension literal} \protected\def\pdfstartlink {\pdfextension startlink\space} @@ -15,7 +17,6 @@ \let\pdfoutput=\outputmode \fi % end of LuaTeX->pdfTeX redirection macros -% Used in cwebmac.tex, pdfctwimac.tex, pdfproofmac.tex \def\tocpages{1} % Most programs have one-page Table-of-Contents \def\startpdf{\def\pagemode{/PageMode /UseOutlines} \ifnum\contentspagenumber=0 \advance \pageno by -\tocpages @@ -24,9 +25,53 @@ \else \twodigits=\pageno \pageno=\contentspagenumber \advance \pageno by \tocpages \advance \twodigits by -\pageno \def\pagelabels{/PageLabels << /Nums [ 0 << /S/D/St \the\pageno >> - \the\twodigits << /S/D/St \contentspagenumber >> ] >>} \fi + \the\twodigits << /S/D/St \contentspagenumber >> ] >>} + \fi \ifpdflua\pdfcatalog{\pagemode\space\pagelabels} - \else \special{pdf: docview << \pagemode\space\pagelabels >>}\fi} + \else\special{pdf: docview << \pagemode\space\pagelabels >>}\fi} +\ifacrohint\def\digits{\pdflink{\the\countA}\scan} +\else\def\digits{{\the\countA}\scan}\fi +\def\scan#1{\begingroup + \ifx!#1% exit on exclamation point + \else\ifx,#1,\space\aftergroup\scan % insert ,\space}\scan ... + \else\ifx\[#1\aftergroup#1% insert }\[... + \else\ifx\*#1\aftergroup\lapstar\aftergroup\scan % insert }\lapstar\scan ... + \else\ifnum`#1>`9#1\aftergroup\scan % insert #1}\scan ... + \else\ifnum`#1<`0#1\aftergroup\scan % insert #1}\scan ... + \else + \afterassignment\digits \aftergroup\countA + \aftergroup#1% insert }\countA=#1...\digits ... + \fi\fi\fi\fi\fi \fi + \endgroup} + +% Local variables; there are a few externals like '\toksA' and '\countA' +\newtoks\toksB \newtoks\toksC \newtoks\toksD \newtoks\toksF \newtoks\sanitizer +\newif\iftokprocessed \newif\ifTnum \newif\ifinstr \newif\ifhavenum + +\ifacrohint % Common macros for \ifacro and \ifhint to create \pdflink's +\def\pdfnote#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}\maketoks}\the\toksA} +\def\firstsecno#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}% + \def\makenote{\addtokens\toksB{\the\toksC}\def\makenote{\let\space\empty + \toksC={}\toksD={}}\makenote}\maketoks}} +\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} +\def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}% + \ifcat\noexpand\first0\countB=`#1\else\countB=0\fi} +\def\maketoks{\expandafter\poptoks\the\toksA|ENDTOKS|% + \let\next=\maketoks % continue processing by default + \ifnum\countB>`9 \countB=0 \fi + \ifnum\countB<`0 + \ifhavenum\makenote\fi + \ifx\first.\let\next=\maketoksdone % fullstop + \else \addtokens\toksB{\the\toksD} \ifx\first,\addtokens\toksB{\space}\fi + \fi + \else \addtokens\toksC{\the\toksD}\global\havenumtrue + \fi + \next +} +\def\makenote{\addtokens\toksB + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\havenumfalse} +\def\maketoksdone{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\fi % End of common pdf/hint macros \ifacro % The following are general pdf macros \def\thewidth{\the\wd0 \space} @@ -34,13 +79,14 @@ \def\thedepth{\the\dp\strutbox\space} \ifpdflua \ifx\pdfannotlink\undefined\let\pdfannotlink\pdfstartlink\fi% for pdfTeX 0.14 - \def\pdflink#1#2{\hbox{\pdfannotlink height \theheight depth \thedepth + \def\pdflink#1{\hbox{\pdfannotlink height \theheight depth \thedepth attr{/Border [0 0 0]} goto num #1 \Blue #1\Black\pdfendlink}} % changed 3.69 -\else\def\pdflink#1#2{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}% +\else\def\pdflink#1{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}% \special{pdf: ec}}\special{pdf: ann width \thewidth height \theheight - depth \thedepth << /Type /Annot /Subtype /Link - /Border [0 0 0] /A << /S /GoTo /D (#2) >> >>}\box0\relax}\fi -\def\sanitizecommand#1#2{\addtokens\usersanitizer + depth \thedepth << /Type /Annot /Subtype /Link /Border [0 0 0] + /A << /S /GoTo /D (\romannumeral#1) >> >>}\box0\relax} +\fi +\def\sanitizecommand#1#2{\addtokens\sanitizer {\noexpand\dosanitizecommand\noexpand#1{#2}}} \def\dosanitizecommand#1#2{\ifx\nxt#1\addF{#2}\fi} @@ -49,7 +95,8 @@ \catcode`\[=12 \catcode`\]=12 \catcode`\{=1 \catcode`\}=2 \catcode`\~=12 \def\tildechar{~} \catcode`\~=13 \catcode`\|=0 |catcode`|\=12 |def|bschar{\} |catcode`|\=0 \catcode`\|=12 -\def\makeoutlinetoks{\Tnumfalse\afterassignment\makeolproctok\let\nxt= } +\def\makeoutlinetoks{\toksF={}\Tnumfalse + \afterassignment\makeolproctok\let\nxt= } \def\makeolnexttok{\afterassignment\makeolproctok\let\nxt= } \def\makeolgobbletok{\afterassignment\makeolnexttok\let\nxt= } \def\addF#1{\addtokens\toksF{#1}\tokprocessedtrue} @@ -64,7 +111,7 @@ \else\if\noexpand\nxt\relax % we have a control sequence; is it one we know? \ifx\nxt~\addF\space \else\ifx\nxt\onespace\addF\space - \else\the\usersanitizer + \else\the\sanitizer \iftokprocessed\else\makeolproctokctli \iftokprocessed\else\makeolproctokctlii \iftokprocessed\else\makeolproctokctliii % if not recognised, skip it @@ -141,48 +188,19 @@ \fi\fi\fi\fi\fi } \def\outlinedone{\edef\outlinest{\global\noexpand\toksE={\the\toksF}}% - \outlinest\let\outlinedone=\relax} + \outlinest\let\outlinedone=\relax\outlinedone} \fi % End of pdf macros \ifhint -% The following uses HINT primitives to implement: +% The following top level macros use HINT primitives to implement: % \HINThome to mark the position of the home page % \HINTlabel to attach a label to the top of a section % \HINTlink to link a section number to the section label % \HINTcontents to produce an 'outline' item -% These are the top level HINT macros that are used in this file -% No HINT primitives are used directly. \def\HINThome{\HINTdest name {HINT.home}% \HINToutline goto name {HINT.home} depth 1 {Table of Contents}} \def\HINTlabel{{\let\*=\empty\HINTdest num \secstar top}} -\def\HINTlink#1#2{\HINTstartlink goto num #1 {#1}\HINTendlink}% #2 not used ??? +\def\HINTlink#1{\HINTstartlink goto num #1 {#1}\HINTendlink} \def\HINTcontents#1#2#3{\HINToutline goto num #3 depth #2 {#1}} \let\pdflink=\HINTlink \fi % End of HINT macros - -% Common macros for \ifacro and \ifhint -\ifacrohint -\def\pdfnote#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}\maketoks}\the\toksA} -\def\firstsecno#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}% - \def\makenote{\addtokens\toksB{\the\toksC}\def\makenote{\toksD={} - \toksC={}\let\space\empty}\makenote}\maketoks}} -\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} -\def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}% - \ifcat\noexpand\first0\countB=`#1\else\countB=0\fi\toksA={#2}} -\def\maketoks{\expandafter\poptoks\the\toksA|ENDTOKS|% - \ifnum\countB>`9 \countB=0 \fi - \ifnum\countB<`0 - \ifnum0=\countC\else\makenote\fi - \ifx\first.\let\next=\maketoksdone\else - \let\next=\maketoks - \addtokens\toksB{\the\toksD} - \ifx\first,\addtokens\toksB{\space}\fi - \fi - \else \addtokens\toksC{\the\toksD}\global\countC=1\let\next=\maketoks - \fi - \next -} -\def\makenote{\addtokens\toksB - {\noexpand\pdflink{\the\toksC}{\romannumeral\the\toksC}}\toksC={}\global\countC=0} -\def\maketoksdone{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\fi % End of common macros diff --git a/Build/source/texk/web2c/cwebdir/cwebmac.tex b/Build/source/texk/web2c/cwebdir/cwebmac.tex index 99e899476ce..a46dc4b782f 100644 --- a/Build/source/texk/web2c/cwebdir/cwebmac.tex +++ b/Build/source/texk/web2c/cwebdir/cwebmac.tex @@ -1,26 +1,14 @@ % standard macros for CWEB listings (in addition to plain.tex) -% Version 4.12 --- May 2024 +% Version 4.12 --- August 2024 \ifx\renewenvironment\undefined\else\endinput\fi % LaTeX will use other macros \xdef\fmtversion{\fmtversion+CWEB4.12} \chardef\cwebversion=4 \chardef\cwebrevision=12 -\let\:=\. % preserve a way to get the dot accent - % (all other accents will still work as usual) - \parskip 0pt % no stretch between paragraphs \parindent 1em % for paragraphs and for the first line of C text \font\ninerm=cmr9 \let\mc=\ninerm % medium caps -\def\CEE/{{\mc C\spacefactor1000}} -\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}} -\def\TEX/{\TeX} -\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}} -\def\Cee{\CEE/} % for backward compatibility -\def\Cpp{\CPLUSPLUS/} % for backward compatibility -\def\9#1{} - % with this definition of \9 you can say @:sort key}{TeX code@> - % to alphabetize an index entry by the sort key but format with the TeX code \font\eightrm=cmr8 \let\sc=\eightrm % for smallish caps (NOT a caps-and-small-caps font) \let\mainfont=\tenrm @@ -31,6 +19,17 @@ \font\tentex=cmtex10 % TeX extended character set (used in strings) \fontdimen7\tentex=0pt % no double space after sentences +\def\CEE/{{\mc C\spacefactor1000}} +\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}} +\def\TEX/{\TeX} +\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}} +\def\Cee{\CEE/} % for backward compatibility +\def\Cpp{\CPLUSPLUS/} % for backward compatibility +\def\9#1{} % with this definition of \9 you can say @:sort key}{TeX code@> + % to alphabetize an index entry by the sort key but format with the TeX code +\let\:=\. % preserve a way to get the dot accent + % (all other accents will still work as usual) + \def\\#1{\leavevmode\hbox{\it#1\/\kern.05em}} % italic type for identifiers \def\|#1{\leavevmode\hbox{$#1$}} % one-letter identifiers look better this way \def\{\leavevmode\hbox{\bf @@ -112,14 +111,10 @@ \let\yskip=\smallskip \def\?{\mathrel?} \def\,{\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi} -\def\note#1#2.{\Y\noindent{\hangindent2em% - \baselineskip10pt\eightrm#1~\ifacrohint{\pdfnote#2.}\else#2\fi.\par}} -\newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD -\newtoks\toksE \newtoks\toksF \newtoks\usersanitizer +\newtoks\toksA \newtoks\toksE \newcount\countA \countA=0 \newcount\countB \countB=0 -\newcount\countC \countC=0 \newcount\countD \countD=0 -\newif\iftokprocessed \newif\ifTnum \newif\ifinstr +\newcount\countNOS \countNOS=0 {\def\\{\global\let\spacechar= }\\ } % Here we decide the output format, depending on the TeX engine in use: @@ -136,7 +131,7 @@ \def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too \def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}} \fi -\ifacrohint \input cwebacromac \fi % load hypertext macros +\input cwebacromac % load hypertext macros \def\pdfURL#1#2{\ifpdf \ifpdflua\pdfannotlink height \theheight depth \thedepth attr {/Border [0 0 0]} user { /Type /Annot /Subtype /Link /A << /S /URI /URI (#2) >>}\Blue #1\Black \pdfendlink % changed in 3.69 @@ -159,6 +154,8 @@ [ @thispage /FitH @ypos ]}\fi}}\fi} \let\startsection=\stsec \def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format' +\def\note#1#2.{\Y\noindent{\hangindent2em\baselineskip10pt% + \eightrm#1~\ifacrohint{\pdfnote#2.}\else#2\fi.\par}} \def\A{\note{See also section}} % xref for doubly defined section name \def\As{\note{See also sections}} % xref for multiply defined section name \def\B{\rightskip=0pt plus 100pt minus 10pt % go into C mode @@ -186,7 +183,7 @@ \outer\def\M#1{\MN{#1}\ifon\vfil\penalty-100\vfilneg % beginning of section \vskip\intersecskip\startsection\ignorespaces} \outer\def\N#1#2#3.{% beginning of starred section - \ifacro{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi + \ifacro{\makeoutlinetoks#3\outlinedone}\fi \gdepth=#1\gtitle={#3}\MN{#2}% \ifon\ifnum#1<\secpagedepth \vfil\eject % force page break if depth is small \else\vfil\penalty-100\vfilneg\vskip\intersecskip\fi\fi @@ -240,9 +237,8 @@ \def\oct{\hbox{$^\circ$\kern-.1em\it\aftergroup\?\aftergroup}} % CWEB style \def\hex{\hbox{$^{\scriptscriptstyle\#}$\tt\aftergroup}} % CWEB style \def\bin{\hbox{$^{\scriptscriptstyle b}$\tt\aftergroup}} % new in CWEB 4.3 -\def\vb#1{\leavevmode\hbox{\kern2pt\vrule\vtop{\vbox{\hrule - \hbox{\strut\kern2pt\.{#1}\kern2pt}} - \hrule}\vrule\kern2pt}} % verbatim string +\def\vb#1{\leavevmode\hbox{\kern2pt\vrule\vtop{\vbox{\hrule\hbox{\strut + \kern2pt\.{#1}\kern2pt}}\hrule}\vrule\kern2pt}} % verbatim string \def\p#1{\cdot 2^{#1}} % power of two (hex exponent) \def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue @@ -317,9 +313,7 @@ \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height \hsize=.5\pagewidth \advance\hsize by -10pt % column width for the index (20pt between cols) - \ifhint\else - \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines - \fi + \ifhint\else\parfillskip 0pt plus .6\hsize\fi % avoid almost empty lines \def\lr{L} % this tells whether the left or right column is next \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R} \else\normaloutput{\vbox to\pageheight{\box\sbox\vss @@ -328,9 +322,9 @@ \message{Index:} \parskip 0pt plus .5pt \outer\def\I##1, ##2.{\par\hangindent2em\noindent##1:\kern1em - \ifacrohint\pdfnote##2.\else##2\fi.} % index entry - \def\[##1]{$\underline{##1}$} % underlined index item - \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar + \scan##2!.} % index entry + \def\[##1]{$\underline{\scan##1!}$\scan} % underlined index item + \rm \rightskip0pt plus 2.5em \tolerance 10000 \hyphenpenalty 10000 \parindent0pt \readindex} \def\fin{\par\vfill\eject % this is done when we are ending the index @@ -353,23 +347,21 @@ \ifacro \def\outsecname{Names of the sections} \let\Xpdf\X % \ifpdflua \makebookmarks \pdfdest name {NOS} fitb % in versions < 3.68 \ifpdflua \pdfdest name {NOS} fith % changed in version 3.69 - \pdfoutline goto name {NOS} count -\the\countD {\outsecname} - \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% - {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% - \pdfoutline goto num \the\toksA \expandafter{\the\toksE}} + \pdfoutline goto name {NOS} count -\the\countNOS {\outsecname} \else \special{pdf: outline -1 << /Title (\outsecname) - /Dest [ @thispage /FitH @ypos ] >>} - \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% - {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% - \special{pdf: outline 0 << /Title (\the\toksE) - /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}} - \fi\fi + /Dest [ @thispage /FitH @ypos ] >>}\fi + \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% + {\makeoutlinetoks##2\outlinedone}% + \ifpdflua \pdfoutline goto num \the\toksA \expandafter{\the\toksE} + \else \special{pdf: outline 0 << /Title (\the\toksE) + /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}\fi} + \fi % \ifacro \readsections} \def\makebookmarks{\let\ZZ=\writebookmarkline \readcontents\relax} \def\countsections{\message{Number of named sections:} - {\def\I{\global\advance\countD by 1}\def\X##1\X{\relax} + {\def\I{\global\advance\countNOS by 1}\def\X##1\X{\relax} \def\Q##1.{\relax}\def\Qs##1.{\relax}\def\U##1.{\relax}\def\Us##1.{\relax} - \readsections\relax}\message{\the\countD}} + \readsections\relax}\message{\the\countNOS}} \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} % Petr Olsak's macros from texinfo.tex \def\advancenumber#1{\countA=\expnumber{#1}\relax \advance\countA by1 @@ -395,9 +387,9 @@ \line{\consetup{#2}#1 \rm\leaders\hbox to .5em{.\hfil}\hfil \ \ifhint - \HINTlink{#3}{\romannumeral#3}% No page numbers in HINT + \HINTlink{#3}% No page numbers in HINT \HINTcontents{#1}{#2}{#3}% - \else\ifacro\pdflink{#3}{\romannumeral#3}\else#3\fi + \else\ifacro\pdflink{#3}\else#3\fi \hbox to3em{\hss#4}\fi}} \def\consetup#1{\ifcase#1 \bf % depth -1 (@**) \or % depth 0 (@*) diff --git a/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch b/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch index 30e21842f09..ad478b81019 100644 --- a/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch +++ b/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch @@ -33,7 +33,7 @@ \advance\footnotecount by 1\relax} @z -@x l.29 +@x l.28 \outer\def\section #1.{\penalty-500\bigskip \centerline{\sectionfont\def\.##1{{\twelvett##1}} #1}\nobreak\vskip 6pt \everypar{\hskip-\parindent\everypar{}}} @@ -93,21 +93,21 @@ \fi} @z -@x l.35 -\def\runninghead{{\ninett CWEB} USER MANUAL (VERSION 4.11)} +@x l.34 +\def\runninghead{{\ninett CWEB} USER MANUAL (VERSION 4.12)} @y \def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}} -\def\runninghead{{\ninett CWEB} USER MANUAL (Version 4.11 [\TeX~Live])} +\def\runninghead{{\ninett CWEB} USER MANUAL (Version 4.12 [\TeX~Live])} @z -@x l.49 -\vskip 18pt\centerline{(Version 4.11 --- December 2023)} +@x l.48 +\vskip 18pt\centerline{(Version 4.12 --- August 2024)} @y -\vskip 18pt\centerline{(Version 4.11 --- December 2023)% -\footnote*{This document describes the extended \.{CWEB} (Version 4.11 [\TeX~Live]).}} +\vskip 18pt\centerline{(Version 4.12 --- August 2024)% +\footnote*{This document describes the extended \.{CWEB} (Version 4.12 [\TeX~Live]).}} @z -@x l.80 +@x l.79 Internet page \.{http://www-cs-faculty.stanford.edu/\char`\~knuth/cweb.html} @y Internet page @@ -115,7 +115,7 @@ Internet page {http://www-cs-faculty.stanford.edu/\TILDE/knuth/cweb.html} @z -@x l.85 +@x l.84 \.{https://github.com/ascherer/cweb} with the really current news. @y \pdfURL{\.{https://github.com/ascherer/cweb}}% @@ -123,7 +123,7 @@ Internet page with the really current news. @z -@x l.103 +@x l.102 should be sent to the \TeX-related mailing list \.{tex-k@tug.org}. @y should be sent to the \TeX-related mailing list @@ -131,7 +131,7 @@ should be sent to the \TeX-related mailing list {mailto:tex-k@tug.org}. @z -@x l.105 +@x l.104 Readers who are familiar with Knuth's memo ``The \.{WEB} System of Structured Documentation'' will be able @y @@ -139,7 +139,7 @@ Readers who are familiar with Knuth's memo ``\pdfURL{The \.{WEB} System of Structured Documentation}{../web/webman.pdf}'' will be able @z -@x l.524 +@x l.523 email address in a \.{CWEB} file (e.g., \.{tex-k@@tug.org}). @y email address in a \.{CWEB} file (e.g., @@ -147,7 +147,7 @@ email address in a \.{CWEB} file (e.g., {mailto:tex-k@tug.org}). @z -@x l.919 +@x l.918 it cannot find them in the current directory. @y it cannot find them in the current directory.% @@ -160,7 +160,7 @@ for it. (This is true for any other input or change file lookup.)} @z -@x l.1026 +@x l.1025 except for error messages. @y except for error messages.% @@ -168,7 +168,7 @@ except for error messages.% options `\.{b}', `\.{h}', and `\.{p}' are `off' by default.} @z -@x l.1032 +@x l.1031 options are currently implemented: \yskip @@ -202,7 +202,7 @@ argument to switch between different user languages and macro packages. \yskip @z -@x l.1068 +@x l.1067 \option x Include indexes and a table of contents in the \TEX/ file output by \.{CWEAVE}. (On by default.) (Has no effect on \.{CTANGLE}.) @y @@ -212,14 +212,14 @@ output by \.{CWEAVE}. (On by default.) (\.{CWEAVE} only.) \vfill\eject @z -@x l.1124 +@x l.1123 Sometimes things don't work as smoothly, and you get a bunch of @y \pdffalse\acrohintfalse Sometimes things don't work as smoothly, and you get a bunch of @z -@x l.1132 +@x l.1131 `$\\{main}(\\{argc},\39\\{argv}{}$)'. @y `$\\{main}(\\{argc},\39\\{argv}{}$)'. @@ -228,7 +228,7 @@ Sometimes things don't work as smoothly, and you get a bunch of \ifpdf\acrohinttrue\fi \ifhint\acrohinttrue\fi @z -@x l.1142 +@x l.1141 the `\.{@\#}' will put extra space after `$\langle\,$Other locals$\,\rangle$'. @y the `\.{@\#}' will put extra space after `$\langle\,$Other locals$\,\rangle$'.% @@ -236,14 +236,14 @@ the `\.{@\#}' will put extra space after `$\langle\,$Other locals$\,\rangle$'.% to suppress the extra space globally.} @z -@x l.1144 +@x l.1143 \section Hypertext and hyperdocumentation. @y \vfill\eject \section Hypertext and hyperdocumentation. @z -@x l.1168 +@x l.1167 from \.{https://hint.userweb.mwn.de/hint/hintview.html}. @y from @@ -251,7 +251,7 @@ from {https://hint.userweb.mwn.de/hint/hintview.html}.% @z -@x l.1177 +@x l.1176 the program sources at \.{ftp://ftp.cs.stanford.edu/pub/ctwill}. @y the program sources at @@ -261,13 +261,13 @@ the program sources at \.{ctwill} executable -- and its associated helpers -- out of the box.} @z -@x l.1181 +@x l.1180 As an example of a real program written in \.{CWEB}, Appendix~A @y As an example of a real program written in \.{CWEB}, \Appendix A @z -@x l.1186 +@x l.1185 Appendix B displays the files that set \TEX/ up to accept the output of \.{CWEAVE}, and Appendix~C discusses how to use some of those @y @@ -275,7 +275,7 @@ the output of \.{CWEAVE}, and Appendix~C discusses how to use some of those the output of \.{CWEAVE}, and \Appendix C discusses how to use some of those @z -@x l.1192 +@x l.1191 appendices D, E, and~F, which exhibit the complete source code for \.{CTANGLE} and \.{CWEAVE}. @@ -291,7 +291,7 @@ exhibits the source code for \.{CTWILL}, which is based on \.{CWEAVE}.} \vfill\eject\titletrue @z -@x l.1198 +@x l.1197 \section Appendix A: Excerpts from a \.{CWEB} Program. @y \def\subsections{4} @@ -299,28 +299,28 @@ exhibits the source code for \.{CTWILL}, which is based on \.{CWEAVE}.} \subsection CWEB file format. @z -@x l.1202 +@x l.1201 generated sections 27--31 of the file \.{common.w}, which contains @y generated sections 27--31 of the file \pdfURL{\.{common.w}}{common.pdf}, which contains @z -@x l.1273 +@x l.1272 \def\runninghead{APPENDIX A --- TRANSLATION BY {\ninett CTANGLE}} @y \def\runninghead{APPENDIX A --- TRANSLATION BY {\ninett CTANGLE}} \subsection Translation by CTANGLE. @z -@x l.1341 +@x l.1340 \def\runninghead{APPENDIX A --- TRANSLATION BY {\ninett CWEAVE}} @y \def\runninghead{APPENDIX A --- TRANSLATION BY {\ninett CWEAVE}} \subsection Translation by CWEAVE. @z -@x l.1430 +@x l.1429 \def\runninghead{APPENDIX A --- FINAL DOCUMENT} And here's what the same excerpt looks like when typeset. @@ -337,7 +337,7 @@ And here's what the same excerpt looks like when typeset. \def\C#1{\5\5\quad$\triangleright\,${\cmntfont#1}$\,\triangleleft$} @z -@x l.1512 +@x l.1511 \vfil\eject\titletrue @y \vfill\eject\titletrue @@ -346,13 +346,13 @@ And here's what the same excerpt looks like when typeset. \ifacro\acrohinttrue\fi \ifhint\acrohinttrue\fi @z -@x l.1614 - \.{ { }\\vskip 15pt \\centerline\{(Version 4.11)\}{ }\\vfill\}}\cr}$$ +@x l.1613 + \.{ { }\\vskip 15pt \\centerline\{(Version 4.12)\}{ }\\vfill\}}\cr}$$ @y - \.{ { }\\vskip 15pt \\centerline\{(Version 4.11)\}{ }\\vfill\}}\cr}$$ + \.{ { }\\vskip 15pt \\centerline\{(Version 4.12)\}{ }\\vfill\}}\cr}$$ @z -@x l.1729 +@x l.1728 if you have a duplex printer. Appendices D, E, and F of the complete version of this manual are printed using a commented-out option that substitutes `$\gets$' for `$=$' in the program listings. Looking at those @@ -366,14 +366,14 @@ also make use of the alternative format for \CEE/ comments.} Looking at those @z -@x l.1781 +@x l.1780 \point 20. Furthermore, group titles can be converted to an arbitrary @y \vfill\eject \point 20. Furthermore, group titles can be converted to an arbitrary @z -@x l.1792 +@x l.1791 \bye @y \point 21. With modern \TeX\ engines like `\.{luatex}', `\.{pdftex}', and diff --git a/Build/source/texk/web2c/cwebdir/cwebman.tex b/Build/source/texk/web2c/cwebdir/cwebman.tex index d47c46ff166..25654a53172 100644 --- a/Build/source/texk/web2c/cwebdir/cwebman.tex +++ b/Build/source/texk/web2c/cwebdir/cwebman.tex @@ -7,7 +7,6 @@ \parskip 0pt plus 1pt \def\RA{\char'31 } % right arrow \def\hang{\hangindent 4em\ignorespaces} -\font\eightrm=cmr8 \font\eighttt=cmtt8 \font\ninett=cmtt9 \font\twelvett=cmtt12 @@ -32,7 +31,7 @@ \def\lheader{\mainfont\the\pageno\hfill\sc\runninghead\hfill} \def\rheader{\hfill\sc\runninghead\hfill\mainfont\the\pageno} -\def\runninghead{{\ninett CWEB} USER MANUAL (VERSION 4.11)} +\def\runninghead{{\ninett CWEB} USER MANUAL (VERSION 4.12)} % This verbatim mode assumes that ! marks are !! in the text being copied. \def\verbatim{\begingroup @@ -46,7 +45,7 @@ \null\vfill \centerline{\titlefont The {\ttitlefont CWEB} System of Structured Documentation} -\vskip 18pt\centerline{(Version 4.11 --- December 2023)} +\vskip 18pt\centerline{(Version 4.12 --- August 2024)} \vskip 24pt \centerline{\authorfont Donald E. Knuth and Silvio Levy} \vfill @@ -1528,9 +1527,9 @@ features needed by the output of \.{CWEAVE}. \printmacs{\empty} \vskip6pt \baselineskip12pt -\noindent And here comes the file that extends \.{cwebmac.tex} in order to -support the ``hypertext'' features needed by the enhanced \TEX/ engines when -processing the output of \.{CWEAVE}. +\noindent And here comes the file \.{cwebacromac.tex} that extends +\.{cwebmac.tex} in order to support the ``hypertext'' features needed +by the enhanced \TEX/ engines when processing the output of \.{CWEAVE}. \vskip6pt \baselineskip9pt \printmacs{acro} @@ -1611,7 +1610,7 @@ $$\lpile{\.{\\def\\topofcontents\{\\null\\vfill}\cr \.{ { }\\titlefalse \% include headline on the contents page}\cr \.{ { }\\def\\rheader\{\\mainfont The \{\\tt CWEAVE\}{ }processor\\hfil\}}\cr \.{ { }\\centerline\{\\titlefont The \{\\ttitlefont CWEAVE\}{ }processor\}}\cr - \.{ { }\\vskip 15pt \\centerline\{(Version 4.11)\}{ }\\vfill\}}\cr}$$ + \.{ { }\\vskip 15pt \\centerline\{(Version 4.12)\}{ }\\vfill\}}\cr}$$ Redefining \.{\\rheader}, which is the headline for right-hand pages, suffices in this case to put the desired information at the top of the contents page. diff --git a/Build/source/texk/web2c/cwebdir/po/cweb-tl.pot b/Build/source/texk/web2c/cwebdir/po/cweb-tl.pot index 19c348da56a..9ba80115a93 100644 --- a/Build/source/texk/web2c/cwebdir/po/cweb-tl.pot +++ b/Build/source/texk/web2c/cwebdir/po/cweb-tl.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: CWEBbin 2023\n" +"Project-Id-Version: CWEBbin 2024\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-02 13:08+0100\n" +"POT-Creation-Date: 2024-08-12 13:10+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -30,15 +30,15 @@ msgid "%s: Need one to three file arguments.\n" msgstr "" #: ctang-texlive.ch:39 -msgid "This is CTANGLE, Version 4.11" +msgid "This is CTANGLE, Version 4.12" msgstr "" #: ctwill-texlive.ch:39 -msgid "This is CTWILL, Version 4.11" +msgid "This is CTWILL, Version 4.12" msgstr "" #: cweav-texlive.ch:39 -msgid "This is CWEAVE, Version 4.11" +msgid "This is CWEAVE, Version 4.12" msgstr "" #: comm-texlive.ch:512 diff --git a/Build/source/texk/web2c/cwebdir/po/cweb.pot b/Build/source/texk/web2c/cwebdir/po/cweb.pot index 8db3c5a3168..f451101937c 100644 --- a/Build/source/texk/web2c/cwebdir/po/cweb.pot +++ b/Build/source/texk/web2c/cwebdir/po/cweb.pot @@ -523,15 +523,15 @@ msgid "Sorting:" msgstr "" #: ctang-i18n.ch:17 -msgid "This is CTANGLE (Version 4.11 [CWEBbin 2023])" +msgid "This is CTANGLE (Version 4.12 [CWEBbin 2024])" msgstr "" #: cweav-twill.ch:61 -msgid "This is CTWILL (Version 4.11 [CWEBbin 2023])" +msgid "This is CTWILL (Version 4.12 [CWEBbin 2024])" msgstr "" #: cweav-i18n.ch:17 cweav-twill.ch:42 -msgid "This is CWEAVE (Version 4.11 [CWEBbin 2023])" +msgid "This is CWEAVE (Version 4.12 [CWEBbin 2024])" msgstr "" #: cweav-i18n.ch:301 cweav-i18n.ch:309 diff --git a/Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po b/Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po index 7d875bdd177..b1412747cbf 100644 --- a/Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po +++ b/Build/source/texk/web2c/cwebdir/po/de/cweb-tl.po @@ -1,14 +1,14 @@ # International version of CWEB (CWEBbin, TeXLive). -# Copyright (C) 2023 Andreas Scherer et al. +# Copyright (C) 2024 Andreas Scherer et al. # This file is distributed under the same license as the CWEB package. # Andreas Scherer <https://ascherer.github.io>. # msgid "" msgstr "" -"Project-Id-Version: CWEBbin 2023\n" +"Project-Id-Version: CWEBbin 2024\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-02 13:10+0100\n" -"PO-Revision-Date: 2023-12-02 13:10+0100\n" +"POT-Creation-Date: 2024-08-12 13:10+0200\n" +"PO-Revision-Date: 2024-08-12 13:10+0200\n" "Last-Translator: Andreas Scherer <andreas_github@freenet.de>\n" "Language-Team: German\n" "Language: de\n" @@ -33,16 +33,16 @@ msgid "%s: Need one to three file arguments.\n" msgstr "%s: Benötige ein bis drei Dateiargumente.\n" #: ctang-texlive.ch:39 -msgid "This is CTANGLE, Version 4.11" -msgstr "Dies ist CTANGLE, Version 4.11" +msgid "This is CTANGLE, Version 4.12" +msgstr "Dies ist CTANGLE, Version 4.12" #: ctwill-texlive.ch:39 -msgid "This is CTWILL, Version 4.11" -msgstr "Dies ist CTWILL, Version 4.11" +msgid "This is CTWILL, Version 4.12" +msgstr "Dies ist CTWILL, Version 4.12" #: cweav-texlive.ch:39 -msgid "This is CWEAVE, Version 4.11" -msgstr "Dies ist CWEAVE, Version 4.11" +msgid "This is CWEAVE, Version 4.12" +msgstr "Dies ist CWEAVE, Version 4.12" #: comm-texlive.ch:512 #, c-format diff --git a/Build/source/texk/web2c/cwebdir/po/de/cweb.po b/Build/source/texk/web2c/cwebdir/po/de/cweb.po index f93952f9a06..0b459e1b01b 100644 --- a/Build/source/texk/web2c/cwebdir/po/de/cweb.po +++ b/Build/source/texk/web2c/cwebdir/po/de/cweb.po @@ -603,16 +603,16 @@ msgid "Sorting:" msgstr "Sortieren:" #: ctang-i18n.ch:17 -msgid "This is CTANGLE (Version 4.11 [CWEBbin 2023])" -msgstr "Dies ist CTANGLE (Version 4.11 [CWEBbin 2023])" +msgid "This is CTANGLE (Version 4.12 [CWEBbin 2024])" +msgstr "Dies ist CTANGLE (Version 4.12 [CWEBbin 2024])" #: cweav-twill.ch:61 -msgid "This is CTWILL (Version 4.11 [CWEBbin 2023])" -msgstr "Dies ist CTWILL (Version 4.11 [CWEBbin 2023])" +msgid "This is CTWILL (Version 4.12 [CWEBbin 2024])" +msgstr "Dies ist CTWILL (Version 4.12 [CWEBbin 2024])" #: cweav-i18n.ch:17 cweav-twill.ch:42 -msgid "This is CWEAVE (Version 4.11 [CWEBbin 2023])" -msgstr "Dies ist CWEAVE (Version 4.11 [CWEBbin 2023])" +msgid "This is CWEAVE (Version 4.12 [CWEBbin 2024])" +msgstr "Dies ist CWEAVE (Version 4.12 [CWEBbin 2024])" #: cweav-i18n.ch:301 cweav-i18n.ch:309 msgid "buffer" diff --git a/Build/source/texk/web2c/cwebdir/po/it/cweb.po b/Build/source/texk/web2c/cwebdir/po/it/cweb.po index a171f020d28..2cf95a994d3 100644 --- a/Build/source/texk/web2c/cwebdir/po/it/cweb.po +++ b/Build/source/texk/web2c/cwebdir/po/it/cweb.po @@ -1,14 +1,14 @@ # International version of CWEB (CWEBbin, TeXLive). -# Copyright (C) 2023 Andreas Scherer et al. +# Copyright (C) 2024 Andreas Scherer et al. # This file is distributed under the same license as the CWEB package. # Andreas Scherer <https://ascherer/github.io>. # msgid "" msgstr "" -"Project-Id-Version: CWEBbin 2023\n" +"Project-Id-Version: CWEBbin 2024\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-02 13:10+0100\n" -"PO-Revision-Date: 2023-12-02 13:10+0100\n" +"POT-Creation-Date: 2024-08-12 13:10+0200\n" +"PO-Revision-Date: 2024-08-12 13:10+0200\n" "Last-Translator: Andreas Scherer <andreas_github@freenet.de>\n" "Language-Team: Italian\n" "Language: it\n" @@ -598,16 +598,16 @@ msgid "Sorting:" msgstr "Ordinamento:" #: ctang-i18n.ch:17 -msgid "This is CTANGLE (Version 4.11 [CWEBbin 2023])" -msgstr "Questo è CTANGLE (Versione 4.11 [CWEBbin 2023])" +msgid "This is CTANGLE (Version 4.12 [CWEBbin 2024])" +msgstr "Questo è CTANGLE (Versione 4.12 [CWEBbin 2024])" #: cweav-i18n.ch:17 -msgid "This is CWEAVE (Version 4.11 [CWEBbin 2023])" -msgstr "Questo è CWEAVE (Versione 4.11 [CWEBbin 2023])" +msgid "This is CWEAVE (Version 4.12 [CWEBbin 2024])" +msgstr "Questo è CWEAVE (Versione 4.12 [CWEBbin 2024])" #: cweav-twill.ch:68 -msgid "This is CTWILL (Version 4.11 [CWEBbin 2023])" -msgstr "Questo è CTWILL (Versione 4.11 [CWEBbin 2023])" +msgid "This is CTWILL (Version 4.12 [CWEBbin 2024])" +msgstr "Questo è CTWILL (Versione 4.12 [CWEBbin 2024])" #: cweav-i18n.ch:301 cweav-i18n.ch:309 msgid "buffer" diff --git a/Build/source/texk/web2c/cwebdir/prod-cweave.w b/Build/source/texk/web2c/cwebdir/prod-cweave.w index 6c75760fa2f..e7939716b72 100644 --- a/Build/source/texk/web2c/cwebdir/prod-cweave.w +++ b/Build/source/texk/web2c/cwebdir/prod-cweave.w @@ -2,7 +2,7 @@ % This program by Silvio Levy and Donald E. Knuth % is based on a program by Knuth. % It is distributed WITHOUT ANY WARRANTY, express or implied. -% Version 4.11 --- December 2023 +% Version 4.12 --- August 2024 % @ Here is a table of all the productions. Each production that combines two or more consecutive scraps implicitly inserts a {\tt \$} diff --git a/Build/source/texk/web2c/cwebdir/prod-twill.w b/Build/source/texk/web2c/cwebdir/prod-twill.w index 63ebdb4893d..c1b67aedc90 100644 --- a/Build/source/texk/web2c/cwebdir/prod-twill.w +++ b/Build/source/texk/web2c/cwebdir/prod-twill.w @@ -2,7 +2,7 @@ % This program by Silvio Levy and Donald E. Knuth % is based on a program by Knuth. % It is distributed WITHOUT ANY WARRANTY, express or implied. -% Version 4.11 --- December 2023 +% Version 4.12 --- August 2024 % @ Here is a table of all the productions. Each production that combines two or more consecutive scraps implicitly inserts a {\tt \$} diff --git a/Build/source/texk/web2c/cwebdir/prod.w b/Build/source/texk/web2c/cwebdir/prod.w index b0da3ddce5f..851c5ffe234 100644 --- a/Build/source/texk/web2c/cwebdir/prod.w +++ b/Build/source/texk/web2c/cwebdir/prod.w @@ -2,7 +2,7 @@ % This program by Silvio Levy and Donald E. Knuth % is based on a program by Knuth. % It is distributed WITHOUT ANY WARRANTY, express or implied. -% Version 4.11 --- December 2023 +% Version 4.12 --- August 2024 % @ Here is a table of all the productions. Each production that combines two or more consecutive scraps implicitly inserts a {\tt \$} diff --git a/Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex b/Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex index 09e222d3c3a..dd8b43bea93 100644 --- a/Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex +++ b/Build/source/texk/web2c/cwebdir/texinputs/dcwebmac.tex @@ -28,7 +28,7 @@ % Version 3.64 [p21] --- Andreas Scherer, Octobre 2005 % Version 3.64 [p22] --- Andreas Scherer, March 2016 % Version 4.9 --- Andreas Scherer, June 2022 -% Version 4.12 --- Andreas Scherer, May 2024 +% Version 4.12 --- Andreas Scherer, August 2024 \ifx\undefined\botofcontents\input cwebmac.tex\fi diff --git a/Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex b/Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex index 82d67edb1a5..ff0c0b30bd9 100644 --- a/Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex +++ b/Build/source/texk/web2c/cwebdir/texinputs/fcwebmac.tex @@ -28,7 +28,7 @@ % Version 3.64 [p21] --- Andreas Scherer, October 2005 % Version 3.64 [p22] --- Andreas Scherer, March 2016 % Version 4.9 --- Andreas Scherer, June 2022 -% Version 4.12 --- Andreas Scherer, May 2024 +% Version 4.12 --- Andreas Scherer, August 2024 % french translations --- Denis Roegel, 18 September 1994 diff --git a/Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex b/Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex index 5f2e7d3a45a..cbb5696984e 100644 --- a/Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex +++ b/Build/source/texk/web2c/cwebdir/texinputs/icwebmac.tex @@ -28,7 +28,7 @@ % Version 3.64 [p21] --- Andreas Scherer, October 2005 % Version 3.64 [p22] --- Andreas Scherer, March 2016 % Version 4.9 --- Andreas Scherer, June 2022 -% Version 4.12 --- Andreas Scherer, May 2024 +% Version 4.12 --- Andreas Scherer, August 2024 \ifx\undefined\botofcontents\input cwebmac.tex\fi @@ -73,7 +73,7 @@ \def\inx{\par\vskip6pt plus 1fil % we are beginning the index \def\page{\box255 } \normalbottom \write\cont{} % ensure that the contents file isn't empty - \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother + \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother \closeout\cont % the contents information has been fully gathered \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi \global\setbox\sbox=\page \global\pagesavedtrue \mark{\topmark}} @@ -82,9 +82,7 @@ \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height \hsize=.5\pagewidth \advance\hsize by -10pt % column width for the index (20pt between cols) - \ifhint\else - \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines - \fi + \ifhint\else\parfillskip 0pt plus .6\hsize\fi % avoid almost empty lines \def\lr{L} % this tells whether the left or right column is next \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R} \else\normaloutput{\vbox to\pageheight{\box\sbox\vss @@ -93,9 +91,9 @@ \message{Indice Analitico:} \parskip 0pt plus .5pt \outer\def\I##1, ##2.{\par\hangindent2em\noindent##1:\kern1em - \ifacrohint\pdfnote##2.\else##2\fi.} % index entry - \def\[##1]{$\underline{##1}$} % underlined index item - \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar + \scan##2!.} % index entry + \def\[##1]{$\underline{\scan##1!}$\scan} % underlined index item + \rm \rightskip0pt plus 2.5em \tolerance 10000 \hyphenpenalty 10000 \parindent0pt \readindex} \def\fin{\par\vfill\eject % this is done when we are ending the index diff --git a/Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex b/Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex index f41ad4d6334..4079d5f704b 100644 --- a/Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex +++ b/Build/source/texk/web2c/cwebdir/texinputs/pdfctproofmac.tex @@ -1,5 +1,5 @@ % standard macros for CWEB listings (in addition to plain.tex) -% Version 4.12 --- May 2024 +% Version 4.12 --- August 2024 % modified for proofs in CTWILL % modified for PDF/HINT output with 'tex "\let\pdf+' or '{hi|lua|pdf|xe}tex' % This file is not copyrighted and can be used freely. @@ -14,15 +14,6 @@ \font\ninerm=cmr9 \let\mc=\ninerm % medium caps -\def\CEE/{{\mc C\spacefactor1000}} -\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}} -\def\TEX/{\TeX} -\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}} -\def\Cee{\CEE/} % for backward compatibility -\def\Cpp{\CPLUSPLUS/} % for backward compatibility -\def\9#1{} - % with this definition of \9 you can say @:sort key}{TeX code@> - % to alphabetize an index entry by the sort key but format with the TeX code \font\eightrm=cmr8 \let\sc=\eightrm % small caps (NOT a caps-and-small-caps font) \let\mainfont=\tenrm @@ -33,6 +24,16 @@ \font\tentex=cmtex10 % TeX extended character set (used in strings) \fontdimen7\tentex=0pt % no double space after sentences +\def\CEE/{{\mc C\spacefactor1000}} +\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}} +\def\TEX/{\TeX} +\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}} +\def\Cee{\CEE/} % for backward compatibility +\def\Cpp{\CPLUSPLUS/} % for backward compatibility +\def\9#1{} + % with this definition of \9 you can say @:sort key}{TeX code@> + % to alphabetize an index entry by the sort key but format with the TeX code + \def\\#1{\leavevmode\hbox{\it#1\/\kern.05em}} % italic type for identifiers \def\|#1{\leavevmode\hbox{$#1$}} % one-letter identifiers look better this way \def\{\leavevmode\hbox{\bf @@ -116,11 +117,9 @@ \def\note#1#2.{\Y\noindent{\hangindent2em% \baselineskip10pt\eightrm#1~\ifacrohint{\pdfnote#2.}\else#2\fi.\par}} -\newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD -\newtoks\toksE \newtoks\toksF \newtoks\usersanitizer +\newtoks\toksA \newtoks\toksE \newcount\countA \countA=0 \newcount\countB \countB=0 -\newcount\countC \countC=0 \newcount\countD \countD=0 -\newif\iftokprocessed \newif\ifTnum \newif\ifinstr +\newcount\countNOS \countNOS=0 {\def\\{\global\let\spacechar= }\\ } % Here we decide the output format, depending on the TeX engine in use: @@ -137,7 +136,7 @@ \def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too \def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}} \fi -\ifacrohint \input cwebacromac \fi % load hypertext macros +\input cwebacromac % load hypertext macros \def\pdfURL#1#2{\ifpdf \ifpdflua\pdfannotlink height \theheight depth \thedepth attr {/Border [0 0 0]} user { /Type /Annot /Subtype /Link /A << /S /URI /URI (#2) >>}\Blue #1\Black \pdfendlink % changed in 3.69 @@ -187,7 +186,7 @@ \outer\def\M#1{\MN{#1}\ifon\vfil\penalty-100\vfilneg % beginning of section \vskip\intersecskip\startsection\ignorespaces} \outer\def\N#1#2#3.{% beginning of starred section - \ifpdf{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi + \ifpdf{\makeoutlinetoks#3\outlinedone}\fi \gdepth=#1\gtitle={#3}\MN{#2}% \ifon\ifnum#1<\secpagedepth \vfil\eject % force page break if depth is small \else\vfil\penalty-100\vfilneg\vskip\intersecskip\fi\fi @@ -327,18 +326,16 @@ \newbox\lbox % lefthand column in the index \def\inx{\par\vskip6pt plus 1fil % we are beginning the index \write\cont{} % ensure that the contents file isn't empty - \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother + \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother \closeout\cont % the contents information has been fully gathered \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi - \global\setbox\sbox=\page \global\pagesavedtrue} + \global\setbox\sbox=\page \global\pagesavedtrue \mark{\topmark}} \pagesavedfalse \eject % eject the page-so-far and predecessors \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height \hsize=.5\pagewidth \advance\hsize by -10pt % column width for the index (20pt between cols) - \ifhint\else - \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines - \fi + \ifhint\else\parfillskip 0pt plus .6\hsize\fi % avoid almost empty lines \def\lr{L} % this tells whether the left or right column is next \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R} \else\normaloutput{\vbox to\pageheight{\box\sbox\vss @@ -347,9 +344,9 @@ \message{Index:} \parskip 0pt plus .5pt \outer\def\I##1, ##2.{\par\hangindent2em\noindent##1:\kern1em - \ifacrohint\pdfnote##2.\else##2\fi.} % index entry - \def\[##1]{$\underline{##1}$} % underlined index item - \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar + \scan##2!.} % index entry + \def\[##1]{$\underline{\scan##1!}$\scan} % underlined index item + \rm \rightskip0pt plus 2.5em \tolerance 10000 \hyphenpenalty 10000 \parindent0pt \readindex} \def\fin{\par\vfill\eject % this is done when we are ending the index @@ -370,23 +367,21 @@ \def\I{\par\hangindent 2em}\let\*=* \ifpdf \def\outsecname{Names of the sections} \let\Xpdf\X \ifpdflua \pdfdest name {NOS} fith - \pdfoutline goto name {NOS} count -\the\countD {\outsecname} - \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% - {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% - \pdfoutline goto num \the\toksA \expandafter{\the\toksE}} + \pdfoutline goto name {NOS} count -\the\countNOS {\outsecname} \else \special{pdf: outline -1 << /Title (\outsecname) - /Dest [ @thispage /FitH @ypos ] >>} - \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% - {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% - \special{pdf: outline 0 << /Title (\the\toksE) - /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}} - \fi\fi + /Dest [ @thispage /FitH @ypos ] >>}\fi + \def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% + {\makeoutlinetoks##2\outlinedone}% + \ifpdflua \pdfoutline goto num \the\toksA \expandafter{\the\toksE} + \else \special{pdf: outline 0 << /Title (\the\toksE) + /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}\fi} + \fi % \ifacro \readsections} \def\makebookmarks{\let\ZZ=\writebookmarkline \readcontents\relax} \def\countsections{\message{Number of named sections:} - {\def\I{\global\advance\countD by 1}\def\X##1\X{\relax} + {\def\I{\global\advance\countNOS by 1}\def\X##1\X{\relax} \def\Q##1.{\relax}\def\Qs##1.{\relax}\def\U##1.{\relax}\def\Us##1.{\relax} - \readsections\relax}\message{\the\countD}} + \readsections\relax}\message{\the\countNOS}} \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} % Petr Olsak's macros from texinfo.tex \def\advancenumber#1{\countA=\expnumber{#1}\relax \advance\countA by1 @@ -412,17 +407,14 @@ \line{\consetup{#2}#1 \rm\leaders\hbox to .5em{.\hfil}\hfil \ \ifhint - \HINTlink{#3}{\romannumeral#3}% No page numbers in HINT + \HINTlink{#3}% No page numbers in HINT \HINTcontents{#1}{#2}{#3}% - \else\ifacro\pdflink{#3}{\romannumeral#3}\else#3\fi + \else\ifacro\pdflink{#3}\else#3\fi \hbox to3em{\hss#4}\fi}} \def\consetup#1{\ifcase#1 \bf % depth -1 (@**) \or % depth 0 (@*) \or \hskip2em % depth 1 (@*1) - \or \hskip4em % depth 2 (@*2) - \or \hskip6em % depth 3 (@*3) - \or \hskip8em % depth 4 (@*4) - \or \hskip10em % depth 5 (@*5) + \or \hskip4em \or \hskip6em \or \hskip8em \or \hskip10em % depth 2,3,4,5 \else \hskip12em \fi} % depth 6 or more \def\noinx{\let\inx=\end} % no indexes or table of contents \def\nosecs{\let\FIN=\fin \def\fin{\let\parfillskip=\end \FIN}} diff --git a/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex b/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex index 2a0499949e6..d1278cac3bf 100644 --- a/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex +++ b/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex @@ -1,5 +1,5 @@ % standard macros for CWEB listings (in addition to plain.tex) -% Version 4.12 --- May 2024 +% Version 4.12 --- August 2024 % modified for pages produced by CTWILL % further modified for page size of the MMIXware book % modified for PDF output with 'tex "\let\pdf+' or '{lua|pdf|xe}tex' @@ -26,15 +26,6 @@ \font\ninerm=cmr9 \let\mc=\ninerm % medium caps -\def\CEE/{{\mc C\spacefactor1000}} -\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}} -\def\TEX/{\TeX} -\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}} -\def\Cee{\CEE/} % for backward compatibility -\def\Cpp{\CPLUSPLUS/} % for backward compatibility -\def\9#1{} - % with this definition of \9 you can say @:sort key}{TeX code@> - % to alphabetize an index entry by the sort key but format with the TeX code \font\eightrm=cmr8 \font\sixrm=cmr6 \font\ninei=cmmi9 @@ -146,6 +137,16 @@ \font\titlefont=cmr7 scaled\magstep4 % title on the contents page \font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title +\def\CEE/{{\mc C\spacefactor1000}} +\def\UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}} +\def\TEX/{\TeX} +\def\CPLUSPLUS/{{\mc C\PP\spacefactor1000}} +\def\Cee{\CEE/} % for backward compatibility +\def\Cpp{\CPLUSPLUS/} % for backward compatibility +\def\9#1{} + % with this definition of \9 you can say @:sort key}{TeX code@> + % to alphabetize an index entry by the sort key but format with the TeX code + \def\\#1{\leavevmode\hbox{\it#1\/\kern.05em}} % italic type for identifiers \def\|#1{\leavevmode\hbox{$#1$}} % one-letter identifiers look better this way \def\{\leavevmode\hbox{\bf @@ -228,11 +229,9 @@ \Y\noindent{\hangindent2\em\baselineskip10pt% \eightrm#1~\ifacro{\pdfnote#2.}\else#2\fi.\par}} -\newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD -\newtoks\toksE \newtoks\toksF \newtoks\usersanitizer +\newtoks\toksA \newtoks\toksE \newcount\countA \countA=0 \newcount\countB \countB=0 -\newcount\countC \countC=0 \newcount\countD \countD=0 -\newif\iftokprocessed \newif\ifTnum \newif\ifinstr +\newcount\countNOS \countNOS=0 {\def\\{\global\let\spacechar= }\\ } % Here we decide the output format, depending on the TeX engine in use: @@ -253,7 +252,7 @@ \def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too \def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}} \fi -\ifacrohint \input cwebacromac \fi % load hypertext macros +\input cwebacromac % load hypertext macros \def\lapstar{\rlap{*}} \def\stsec{\tenpoint\rightskip=0pt % get out of C mode (cf. \B) @@ -301,7 +300,7 @@ \outer\def\NN{\ifvoid\partialpage\leftfalse \else\ifdim\ht\partialpage<\pageht \lefttrue\else\leftfalse\fi\fi\NNN} \outer\def\NNN#1#2#3.{% beginning of starred section - \ifacro{\toksF={}\makeoutlinetoks#3\outlinedone\outlinedone}\fi + \ifacro{\makeoutlinetoks#3\outlinedone}\fi \gdepth=#1\gtitle={#3}\def\secno{#2}\xdef\secstar{#2} \ifleft \flushout \gdef\rlhead{\let\i=I\uppercase{\ignorespaces#3}} % running left headline @@ -334,7 +333,7 @@ \def\T#1{\leavevmode % octal, hex or decimal constant \hbox{$\def\?{\kern.2em}%$% \let\ \, % C++ digit separator becomes a little white space - \def\$##1{\egroup_{\rm##1}\bgroup}% suffix to constant + \def\$##1{\egroup_{\rm##1}\bgroup}%$% suffix to constant \def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick) \let\~=\oct \let\^=\hex \let\\=\bin {#1}$}}%$% \def\U{\note{This code is used in section}} % xref for use of a section @@ -543,22 +542,20 @@ \def\outsecname{Names of the sections} \ifpdflua \makebookmarks \countsections \pdfdest name {NOS} fith - \pdfoutline goto name {NOS} count -\the\countD {\outsecname} - \def\X##1:##2\X{\firstsecno##1.% - {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% - \pdfoutline goto num \the\toksA \expandafter{\the\toksE}} + \pdfoutline goto name {NOS} count -\the\countNOS {\outsecname} \else \special{pdf: outline -1 << /Title (\outsecname) - /Dest [ @thispage /FitH @ypos ] >>} - \def\X##1:##2\X{\firstsecno##1.% - {\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% - \special{pdf: outline 0 << /Title (\the\toksE) - /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}} - \fi \readsections \fi} + /Dest [ @thispage /FitH @ypos ] >>}\fi + \def\X##1:##2\X{\firstsecno##1.% + {\makeoutlinetoks##2\outlinedone}% + \ifpdflua \pdfoutline goto num \the\toksA \expandafter{\the\toksE} + \else \special{pdf: outline 0 << /Title (\the\toksE) + /A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}\fi} + \readsections \fi} \def\makebookmarks{\let\ZZ=\writebookmarkline \readcontents\relax} \def\countsections{\message{Number of named sections:} - {\def\I{\global\advance\countD by 1}\def\X##1\X{\relax} + {\def\I{\global\advance\countNOS by 1}\def\X##1\X{\relax} \def\Q##1.{\relax}\def\Qs##1.{\relax}\def\U##1.{\relax}\def\Us##1.{\relax} - \readsections\relax}\message{\the\countD}} + \readsections\relax}\message{\the\countNOS}} \def\writebookmarkline#1#2#3#4#5{{% \let\(=\let \let\)=\let \let\[=\let \let\]=\let \let\/=\let \pdfoutline goto num #3 count -\expnumber{chunk#2.#3} {#5}}} @@ -579,7 +576,7 @@ %\def\contentsline#1#2#3#4#5{\ifnum#2=0 \smallbreak\fi %\line{\consetup{#2}#1 %\rm\leaders\hbox to .5em{.\hfil}\hfil - %\ \ifacro\pdflink{#3}{\romannumeral#3}\else#3\fi\hbox to3em{\hss#4}}} + %\ \ifacro\pdflink{#3}\else#3\fi\hbox to3em{\hss#4}}} %\def\consetup#1{\ifcase#1 \bf % depth -1 (@**) %\or % depth 0 (@*) %\or \hskip2em % depth 1 (@*1) diff --git a/Build/source/texk/web2c/gftopk.ch b/Build/source/texk/web2c/gftopk.ch index 1afa9119ef7..62af338db8e 100644 --- a/Build/source/texk/web2c/gftopk.ch +++ b/Build/source/texk/web2c/gftopk.ch @@ -82,7 +82,7 @@ begin @<Labels...@>=final_end; @y @ This module is deleted, because it is only useful for -a non-local goto, which we can't use in C. +a non-local |goto|\unskip, which we can't use in C. @z @x [6] Dynamic allocation of |row| array. diff --git a/Build/source/texk/web2c/gftype.ch b/Build/source/texk/web2c/gftype.ch index 49d7bf6b3e0..2e51550240a 100644 --- a/Build/source/texk/web2c/gftype.ch +++ b/Build/source/texk/web2c/gftype.ch @@ -78,7 +78,7 @@ begin @<Labels...@>=final_end; @y @ This module is deleted, because it is only useful for -a non-local goto, which we can't use in C. +a non-local |goto|\unskip, which we can't use in C. Instead, we define parameters settable at runtime. diff --git a/Build/source/texk/web2c/hitexdir/hitex.w b/Build/source/texk/web2c/hitexdir/hitex.w index 7351c672e2d..cad0605c82f 100644 --- a/Build/source/texk/web2c/hitexdir/hitex.w +++ b/Build/source/texk/web2c/hitexdir/hitex.w @@ -224,7 +224,6 @@ @s alpha_file int @s byte_file int @s word_file int -@s int8_t int @s uint8_t int @s int16_t int @s uint16_t int @@ -250,13 +249,9 @@ @s line normal @s to do -\def\contentspagenumber{0} -\def\tocpages{3} % HiTeX has a long ToC -\pageno=\contentspagenumber \advance \pageno by \tocpages - @* Introduction. This is Hi\TeX, a program derived from \TeX, extending its capabilities -using \eTeX\ and \Prote, and adding functions common to other engines from +using \eTeX and \Prote, and adding functions common to other engines from the \TeX\ Live distribution. Hi\TeX\ writes output files in the \HINT\ file format. Like \TeX, it is a document compiler intended to produce typesetting of high @@ -380,7 +375,7 @@ known as `\Prote'. @d Prote_banner "This is Prote, Version " Prote_version_string /*printed when \Prote\ starts*/ @# -@d banner "This is HiTeX, Version 3.141592653"@| +@d banner "This is HiTeX, Version 3.141592653" eTeX_version_string"-"HINT_VERSION_STRING" "TL_VERSION /*printed when \TeX\ starts*/ @@ -436,7 +431,7 @@ portions of the program. The program starts with inserting header files and occassionaly a function must be placed before declaring \TeX's macros, because the function -uses identifiers that \TeX\ will declare as macros. +uses identifiers that \TeX will declare as macros. @p @<Header files and function declarations@>@; @h @@ -447,7 +442,7 @@ enum {@+@<Constants in the outer block@>@+}; @# static void initialize(void) /*this procedure gets things started properly*/ {@+@<Local variables for initialization@>@; - @<Initialize whatever \TeX\ might access@>@; + @<Initialize whatever \TeX\ might access@>; } @# @<Basic printing procedures@>@; @<Error handling procedures@>@; @@ -634,7 +629,7 @@ because some fussy \PASCAL\ compilers will complain about redundant labels. @d negate(A) A=-A /*change the sign of a variable*/ @d loop @+while (true) @+ /*repeat over and over until a |goto| happens*/ @f loop else - /*\.{WEB}'s |loop| acts like `\ignorespaces|while true do|\unskip'*/ + /*\.{WEB}'s |else| acts like `\ignorespaces|while true do|\unskip'*/ @d do_nothing /*empty statement*/ @d empty 0 /*symbolic name for a null constant*/ @@ -1334,7 +1329,7 @@ while (j < str_start[s+1]) result=true; not_found: return result; } -@#@<Declare \Prote\ procedures for strings@>@; +@t\4@>@<Declare \Prote\ procedures for strings@>@; @ The initial values of |str_pool|, |str_start|, |pool_ptr|, and |str_ptr| are computed by the \.{INITEX} program, based in part @@ -1425,8 +1420,6 @@ declaration. @<Forward declarations@>= static int s_no(const char *str); -@ (Empty section to keep numbering intact.) - @* On-line and off-line printing. Messages that are sent to a user's terminal and to the transcript-log file are produced by several `|print|' procedures. These procedures will @@ -1498,10 +1491,8 @@ for terminal output, and it is possible to adhere to those conventions by changing |wterm|, |wterm_ln|, and |wterm_cr| in this section. @^system dependencies@> -@s sizeof x - @<Basic printing procedures@>= -#define @[put(F)@] @[fwrite(&((F).d),sizeof((F).d),1,(F).f)@] +#define @[put(F)@] @[fwrite(&((F).d)@],@[sizeof((F).d),1,(F).f)@]@; #define @[get(F)@] @[fread(&((F).d),sizeof((F).d),1,(F).f)@] #define @[pascal_close(F)@] @[fclose((F).f)@] @@ -1708,8 +1699,8 @@ if (n < 0) } } } -do {dig[k]=n%10;n=n/10;incr(k); -} while (!(n==0)); +@/do@+{dig[k]=n%10;n=n/10;incr(k); +}@+ while (!(n==0)); print_the_digs(k); } @@ -1727,8 +1718,8 @@ print_char('0'+(n%10)); /*prints a positive integer in hexadecimal form*/ {@+int k; /*index to current digit; we assume that $0\le n<16^{22}$*/ k=0;print_char('"'); -do {dig[k]=n%16;n=n/16;incr(k); -} while (!(n==0)); +@/do@+{dig[k]=n%16;n=n/16;incr(k); +}@+ while (!(n==0)); print_the_digs(k); } @@ -1804,7 +1795,7 @@ $$\vbox{\halign{#\hfil\cr |help3("This is the first line of my offer to help.")|\cr |("This is the second line. I'm trying to")|\cr |("explain the best way for you to proceed.");|\cr -|error();|\cr}}$$ +|error;|\cr}}$$ A two-line help message would be given using |help2|, etc.; these informal helps should use simple vocabulary that complements the words used in the official error message that was printed. (Outside the U.S.A., the help @@ -2010,6 +2001,7 @@ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (deletions_allowed) @<Delete \(c)|c-"0"| tokens and |goto resume|@>@;@+break; +@t\4\4@>@; #ifdef @!DEBUG case 'D': {@+debug_help();goto resume;@+} #endif @@ -2102,8 +2094,8 @@ show_context();goto resume; else{@+if (help_ptr==0) help2("Sorry, I don't know how to help in this situation.",@/ @t\kern1em@>"Maybe you should try asking a human?"); - do {decr(help_ptr);print(help_line[help_ptr]);print_ln(); - } while (!(help_ptr==0)); + @/do@+{decr(help_ptr);print(help_line[help_ptr]);print_ln(); + }@+ while (!(help_ptr==0)); } help4("Sorry, I already gave what help I could...",@/ "Maybe you should try asking a human?",@/ @@ -2272,7 +2264,7 @@ positions from the right end of a binary computer word. @<Types...@>= typedef int scaled; /*this type is used for scaled integers*/ -typedef uint32_t nonnegative_integer; /*$0\le x<2^{31}$*/ +typedef int32_t nonnegative_integer; /*$0\le x<2^{31}$*/ typedef int8_t small_number; /*this type is self-explanatory*/ @ The following function is used to create a scaled integer from a given decimal @@ -2310,9 +2302,9 @@ if (s < 0) print_int(s/unity); /*print the integer part*/ print_char('.'); s=10*(s%unity)+5;delta=10; -do {if (delta > unity) s=s+0100000-50000; /*round the last digit*/ +@/do@+{if (delta > unity) s=s+0100000-50000; /*round the last digit*/ print_char('0'+(s/unity));s=10*(s%unity);delta=delta*10; -} while (!(s <= delta)); +}@+ while (!(s <= delta)); } @ Physical sizes that a \TeX\ user specifies for portions of documents are @@ -2429,7 +2421,7 @@ computing at most 1095 distinct values, but that is plenty. @d inf_bad 10000 /*infinitely bad value*/ -@p @<Declare \Prote\ arithmetic routines@>@; +@p @<Declare \Prote\ arithmetic routines@>@/ static halfword badness(scaled @!t, scaled @!s) /*compute badness, given |t >= 0|*/ {@+int r; /*approximation to $\alpha t/s$, where $\alpha^3\approx 100\cdot2^{18}$*/ @@ -2464,16 +2456,12 @@ routines cited there must be modified to allow negative glue ratios.) @d unfix(A) ((double)(A)) /*convert from |glue_ratio| to type |double|*/ @d fix(A) ((glue_ratio)(A)) /*convert from |double| to type |glue_ratio|*/ @d float_constant(A) ((double)(A)) /*convert |int| constant to |double|*/ -@# -@d perror e@&r@&r@&o@&r /* this is a \.{CWEB} coding trick: */ -@f perror error /* `\&{perror}' will be equivalent to `\&{error}' */ -@f error x /* but `|error|' will not be treated as a reserved word */ @<Types...@>= #if __SIZEOF_FLOAT__==4 typedef float float32_t; #else -#perror @=float type must have size 4@> +#error @=float type must have size 4@> #endif typedef float @!glue_ratio; /*one-word representation of a glue expansion factor*/ @@ -2583,29 +2571,25 @@ typedef uint16_t quarterword; /*1/4 of a word*/ typedef int32_t halfword; /*1/2 of a word*/ typedef int8_t two_choices; /*used when there are two variants in a record*/ typedef int8_t four_choices; /*used when there are four variants in a record*/ -@# -typedef struct { +typedef struct { @;@/ halfword @!rh; union { halfword @!lh; struct { quarterword @!b0;quarterword @!b1;} ; };} two_halves; -@# -typedef struct { +typedef struct { @;@/ quarterword @!b0; quarterword @!b1; quarterword @!b2; quarterword @!b3; } four_quarters; -@# -typedef struct { +typedef struct { @;@/ union { int @!i; glue_ratio @!gr; two_halves @!hh; four_quarters @!qqqq; };} memory_word; -@# typedef struct {@+FILE *f;@+memory_word@,d;@+} word_file; @ When debugging, we may want to print a |memory_word| without knowing @@ -2788,11 +2772,11 @@ one-word nodes that starts at position |p|. {@+pointer @!q, @!r; /*list traversers*/ if (p!=null) {@+r=p; - do {q=r;r=link(r); + @/do@+{q=r;r=link(r); #ifdef @!STAT decr(dyn_used); #endif - } while (!(r==null)); /*now |q| is the last node on the list*/ + }@+ while (!(r==null)); /*now |q| is the last node on the list*/ link(q)=avail;avail=p; } } @@ -2837,11 +2821,11 @@ pointer @!q; /*the node physically after node |p|*/ int @!r; /*the newly allocated node, or a candidate for this honor*/ int @!t; /*temporary register*/ restart: p=rover; /*start at some free node in the ring*/ -do {@<Try to allocate within node |p| and its physical successors, and +@/do@+{@<Try to allocate within node |p| and its physical successors, and |goto found| if allocation was possible@>; @^inner loop@> p=rlink(p); /*move to the next node in the ring*/ -} while (!(p==rover)); /*repeat until the whole list has been traversed*/ +}@+ while (!(p==rover)); /*repeat until the whole list has been traversed*/ if (s==010000000000) {@+return max_halfword; } @@ -3334,7 +3318,7 @@ current \.{\\lineskip}. pointer @!q; /*the glue specification*/ p=get_node(small_node_size);type(p)=glue_node;subtype(p)=n+1; leader_ptr(p)=null;@/ -q=@[@<Current |mem| equivalent of glue parameter number |n|@>@]; +q=@<Current |mem| equivalent of glue parameter number |n|@>@t@>; glue_ptr(p)=q;incr(glue_ref_count(q)); return p; } @@ -3374,8 +3358,6 @@ kerns inserted from font information or math mode calculations) or |explicit| (for kerns inserted from non-math accents) or |mu_glue| (for kerns inserted from \.{\\mkern} specifications in math formulas). -@s explicit true - @d kern_node 11 /*|type| of a kern node*/ @d explicit 1 /*|subtype| of kern nodes from \.{\\kern} and \.{\\/}*/ @d acc_kern 2 /*|subtype| of kern nodes from accents*/ @@ -3591,7 +3573,7 @@ done1: @ @<Check variable-size...@>= p=rover;q=null;clobbered=false; -do {if ((p >= lo_mem_max)||(p < mem_min)) clobbered=true; +@/do@+{if ((p >= lo_mem_max)||(p < mem_min)) clobbered=true; else if ((rlink(p) >= lo_mem_max)||(rlink(p) < mem_min)) clobbered=true; else if (!(is_empty(p))||(node_size(p) < 2)||@| (p+node_size(p) > lo_mem_max)||@|(llink(rlink(p))!=p)) clobbered=true; @@ -3608,7 +3590,7 @@ for (q=p; q<=p+node_size(p)-1; q++) /*mark all locations free*/ is_free[q]=true; } q=p;p=rlink(p); -} while (!(p==rover)); +}@+ while (!(p==rover)); done2: @ @<Check flags...@>= @@ -3703,13 +3685,13 @@ while (p > mem_min) {@+if ((font(p) < font_base)||(font(p) > font_max)) print_char('*'); @.*\relax@> - else@<Print the font identifier for |font(p)|@>@; + else@<Print the font identifier for |font(p)|@>; print_char(' ');font_in_short_display=font(p); } print_ASCII(qo(character(p))); } } - else@<Print a short indication of the contents of node |p|@>@; + else@<Print a short indication of the contents of node |p|@>; p=link(p); } } @@ -3742,7 +3724,7 @@ its reference count, and one to print a rule dimension. {@+if (p > mem_end) print_esc("CLOBBERED."); else{@+if ((font(p) < font_base)||(font(p) > font_max)) print_char('*'); @.*\relax@> - else@<Print the font identifier for |font(p)|@>@; + else@<Print the font identifier for |font(p)|@>; print_char(' ');print_ASCII(qo(character(p))); } } @@ -3882,7 +3864,7 @@ else switch (type(p)) { case disc_node: @<Display discretionary |p|@>@;@+break; case mark_node: @<Display mark |p|@>@;@+break; case adjust_node: @<Display adjustment |p|@>@;@+break; - @/@t\4@>@<Cases of |show_node_list| that arise in mlists only@>@; + @t\4@>@<Cases of |show_node_list| that arise in mlists only@>@; default:print("Unknown node type!"); } @@ -4081,7 +4063,7 @@ specification is being withdrawn. } @p static void delete_glue_ref(pointer @!p) /*|p| points to a glue specification*/ -fast_delete_glue_ref(p)@; +fast_delete_glue_ref(p) static void delete_xdimen_ref(pointer @!p) /*|p| points to a xdimen specification*/ {@+if (p==null) return; if (xdimen_ref_count(p)==null) free_node(p, xdimen_node_size); @@ -4122,7 +4104,7 @@ while (p!=null) flush_node_list(post_break(p)); } @+break; case adjust_node: flush_node_list(adjust_ptr(p));@+break; - @/@t\4@>@<Cases of |flush_node_list| that arise in mlists only@>@; + @t\4@>@<Cases of |flush_node_list| that arise in mlists only@>@; default:confusion("flushing"); @:this can't happen flushing}{\quad flushing@> } @/ @@ -5022,7 +5004,7 @@ else switch (chr_code) { case every_vbox_loc: print_esc("everyvbox");@+break; case every_job_loc: print_esc("everyjob");@+break; case every_cr_loc: print_esc("everycr");@+break; - @/@t\4@>@<Cases of |assign_toks| for |print_cmd_chr|@>@; + @/@<Cases of |assign_toks| for |print_cmd_chr|@>@/ default:print_esc("errhelp"); } @+break; @@ -5350,7 +5332,7 @@ case right_hyphen_min_code: print_esc("righthyphenmin");@+break; case holding_inserts_code: print_esc("holdinginserts");@+break; case error_context_lines_code: print_esc("errorcontextlines");@+break; case tracing_stack_levels_code: print_esc("tracingstacklevels");@+break; -@/@t\4@>@<Cases for |print_param|@>@; +@/@<Cases for |print_param|@>@/ default:print("[unknown integer parameter!]"); } } @@ -5503,7 +5485,6 @@ defined by |SOURCE_DATE_EPOCH|. @^reference time@> @^system dependencies@> \TeX\ Live calls |tl_now| to obtain the current time as a |tm| structure. -@s tm int @p static void fix_date_and_time(void) {@+ struct tm *t=tl_now(); time=sys_time= t->tm_hour*60+t->tm_min;/*minutes since midnight*/ @@ -5707,9 +5688,8 @@ print_char('=');print_scaled(eqtb[n].sc);print("pt"); @ Here is a procedure that displays the contents of |eqtb[n]| symbolically. -@p @<Declare the procedure called |print_cmd_chr|@>@; +@p @t\4@>@<Declare the procedure called |print_cmd_chr|@>@;@/ #ifdef @!STAT -@+@t}\6\4\4{@> static void show_eqtb(pointer @!n) {@+if (n < active_base) print_char('?'); /*this can't happen*/ else if (n < glue_base) @<Show equivalent |n|, in region 1 or 2@>@; @@ -5834,10 +5814,10 @@ found: return p; @ @<Insert a new control...@>= {@+if (text(p) > 0) - {@+do {if (hash_is_full) overflow("hash size", hash_size); + {@+@/do@+{if (hash_is_full) overflow("hash size", hash_size); @:TeX capacity exceeded hash size}{\quad hash size@> decr(hash_used); - } while (!(text(hash_used)==0)); /*search for an empty location in |hash|*/ + }@+ while (!(text(hash_used)==0)); /*search for an empty location in |hash|*/ next(p)=hash_used;p=hash_used; } str_room(l);d=cur_length; @@ -6055,7 +6035,7 @@ case end_group: print_esc("endgroup");@+break; case ex_space: print_esc(" ");@+break; case expand_after: switch (chr_code) { case 0: print_esc("expandafter");@+break; -@/@t\4@>@<Cases of |expandafter| for |print_cmd_chr|@>@; +@/@<Cases of |expandafter| for |print_cmd_chr|@>@/ } @+break; /*there are no other cases*/ case halign: print_esc("halign");@+break; case hrule: print_esc("hrule");@+break; @@ -6075,17 +6055,17 @@ case no_expand: print_esc("noexpand");@+break; case non_script: print_esc("nonscript");@+break; case omit: print_esc("omit");@+break; case radical: print_esc("radical");@+break; -case read_to_cs: if (chr_code==0) print_esc("read"); - else @<Cases of |read| for |print_cmd_chr|@>;@+break; +case read_to_cs: if (chr_code==0) print_esc("read") + @<Cases of |read| for |print_cmd_chr|@>;@+break; case relax: print_esc("relax");@+break; case set_box: print_esc("setbox");@+break; case set_prev_graf: print_esc("prevgraf");@+break; case set_shape: switch (chr_code) { case par_shape_loc: print_esc("parshape");@+break; - @/@t\4@>@<Cases of |set_shape| for |print_cmd_chr|@>@; + @<Cases of |set_shape| for |print_cmd_chr|@>@;@/ } @+break; /*there are no other cases*/ -case the: if (chr_code==0) print_esc("the"); - else @<Cases of |the| for |print_cmd_chr|@>;@+break; +case the: if (chr_code==0) print_esc("the") + @<Cases of |the| for |print_cmd_chr|@>;@+break; case toks_register: @<Cases of |toks_register| for |print_cmd_chr|@>@;@+break; case vadjust: print_esc("vadjust");@+break; case valign: print_esc("valign");@+break; @@ -6106,7 +6086,7 @@ Meanwhile, this is a convenient place to catch up on something we were unable to do before the hash table was defined: @<Print the font identifier for |font(p)|@>= -printn_esc(font_id_text(font(p))); +printn_esc(font_id_text(font(p))) @* Saving and restoring equivalents. The nested structure provided by `$\.{\char'173}\ldots\.{\char'175}$' groups @@ -6291,7 +6271,7 @@ case shape_ref: {@+q=equiv_field(w); /*we need to free a \.{\\parshape} block*/ if (q!=null) free_node(q, info(q)+info(q)+1); } @+break; /*such a block is |2 n+1| words long, where |n==info(q)|*/ case box_ref: flush_node_list(equiv_field(w));@+break; -@/@t\4@>@<Cases for |eq_destroy|@>@; +@/@<Cases for |eq_destroy|@>@/ default:do_nothing; } } @@ -6329,7 +6309,7 @@ the call, since |eq_save| makes the necessary test. #ifdef @!STAT #define assign_trace(A, B) if (tracing_assigns > 0) restore_trace(A, B); #else -#define assign_trace(A, B) @[@] +#define assign_trace(A, B) #endif static void eq_define(pointer @!p, quarterword @!t, halfword @!e) @@ -6834,7 +6814,7 @@ case endv: print("end of alignment template");@+break; case spacer: chr_cmd("blank space ")@;@+break; case letter: chr_cmd("the letter ")@;@+break; case other_char: chr_cmd("the character ")@;@+break; -@/@t\4@>@<Cases of |print_cmd_chr| for symbolic printing of primitives@>@; +@t\4@>@<Cases of |print_cmd_chr| for symbolic printing of primitives@>@/ default:print("[unknown command code!]"); } } @@ -7572,7 +7552,7 @@ actions. in_open=0;open_parens=0;max_buf_stack=0; grp_stack[0]=0;if_stack[0]=null; param_ptr=0;max_param_stack=0; -first=buf_size;do {buffer[first]=0;decr(first);} while (!(first==0)); +first=buf_size;@/do@+{buffer[first]=0;decr(first);}@+ while (!(first==0)); scanner_status=normal;warning_index=null;first=1; state=new_line;start=1;index=0;line=0;name=0; force_eof=false; @@ -7783,7 +7763,7 @@ and set |state:=mid_line|@>@;@+break; any_state_plus(sup_mark): @<If this |sup_mark| starts an expanded character like~\.{\^\^A} or~\.{\^\^df}, then |goto reswitch|, otherwise set |state:=mid_line|@>@;@+break; any_state_plus(invalid_char): @<Decry the invalid character and |goto restart|@>@; -@/@t\4@>@<Handle situations involving spaces, braces, changes of state@>@; +@t\4@>@<Handle situations involving spaces, braces, changes of state@>@; default:do_nothing; } @@ -7942,8 +7922,8 @@ the buffer left two or three places. } @ @<Scan ahead in the buffer...@>= -{@+do {cur_chr=buffer[k];cat=cat_code(cur_chr);incr(k); -} while (!((cat!=letter)||(k > limit))); +{@+@/do@+{cur_chr=buffer[k];cat=cat_code(cur_chr);incr(k); +}@+ while (!((cat!=letter)||(k > limit))); @<If an expanded...@>; if (cat!=letter) decr(k); /*now |k| points to first nonletter*/ @@ -8188,7 +8168,7 @@ case top_bot_mark: @<Insert the \(a)appropriate mark text into the scanner@>@;@+ case expand_after: switch (cur_chr) { case 0: @<Expand the token after the next token@>@;@+break; case 1: @<Negate a boolean conditional and |goto reswitch|@>@;@+break; -@/@t\4@>@<Cases for |expandafter|@>@; +@/@<Cases for |expandafter|@>@/ } @+break; /*there are no other cases*/ case no_expand: @<Suppress expansion of the next token@>@;@+break; case cs_name: @<Manufacture a control sequence name@>@;@+break; @@ -8252,9 +8232,9 @@ the variables |p| and |q| are reserved for token-list building. @ @<Manufacture a control...@>= {@+r=get_avail();p=r; /*head of the list of characters*/ incr(incsname_state); -do {get_x_token(); +@/do@+{get_x_token(); if (cur_cs==0) store_new_token(cur_tok); -} while (!(cur_cs!=0)); +}@+ while (!(cur_cs!=0)); if (cur_cmd!=end_cs_name) @<Complain about missing \.{\\endcsname}@>; decr(incsname_state); @<Look up the characters of list |r| in the hash table, and set |cur_cs|@>; @@ -8312,15 +8292,15 @@ primitive("endinput", input, 1);@/ @!@:end\_input\_}{\.{\\endinput} primitive@> @ @<Cases of |print_cmd_chr|...@>= -case input: if (chr_code==0) print_esc("input"); - else @<Cases of |input| for |print_cmd_chr|@>@; +case input: if (chr_code==0) print_esc("input") + @/@<Cases of |input| for |print_cmd_chr|@>;@/ else print_esc("endinput");@+break; @ @<Initiate or terminate input...@>= -if (cur_chr==1) force_eof=true; -else @<Cases for |input|@>@; +if (cur_chr==1) force_eof=true +@/@<Cases for |input|@>;@/ else if (name_in_progress) insert_relax(); -else start_input(); +else start_input() @ Sometimes the expansion looks too far ahead, so we want to insert a harmless \.{\\relax} into the user's input. @@ -8530,7 +8510,7 @@ a string that will delimit the next parameter. {@+scanner_status=matching;unbalance=0; long_state=eq_type(cur_cs); if (long_state >= outer_call) long_state=long_state-2; -do {link(temp_head)=null; +@/do@+{link(temp_head)=null; if ((info(r) > match_token+255)||(info(r) < match_token)) s=null; else{@+match_chr=info(r)-match_token;s=link(r);r=s; p=temp_head;m=0; @@ -8538,7 +8518,7 @@ else{@+match_chr=info(r)-match_token;s=link(r);r=s; @<Scan a parameter until its delimiter string has been found; or, if |s=null|, simply scan the delimiter string@>;@/ /*now |info(r)| is a token whose command code is either |match| or |end_match|*/ -} while (!(info(r)==end_match_token)); +}@+ while (!(info(r)==end_match_token)); } @ If |info(r)| is a |match| or |end_match| command, it cannot be equal to @@ -8638,7 +8618,7 @@ the rules. if (s!=r) if (s==null) @<Report an improper use of the macro and abort@>@; else{@+t=s; - do {store_new_token(info(t));incr(m);u=link(t);v=s; + @/do@+{store_new_token(info(t));incr(m);u=link(t);v=s; loop@+{@+if (u==r) if (cur_tok!=info(v)) goto done; else{@+r=link(v);goto resume; @@ -8647,7 +8627,7 @@ if (s!=r) u=link(u);v=link(v); } done: t=link(t); - } while (!(t==r)); + }@+ while (!(t==r)); r=s; /*at this point, no tokens are recently matched*/ } @@ -8739,7 +8719,8 @@ if (cur_cmd!=left_brace) } @ @<Get the next non-blank non-relax non-call token@>= -do get_x_token(); while (!((cur_cmd!=spacer)&&(cur_cmd!=relax))) +@/do@+{get_x_token(); +}@+ while (!((cur_cmd!=spacer)&&(cur_cmd!=relax))) @ The |scan_optional_equals| routine looks for an optional `\.=' sign preceded by optional spaces; `\.{\\relax}' is not ignored here. @@ -8750,7 +8731,8 @@ if (cur_tok!=other_token+'=') back_input(); } @ @<Get the next non-blank non-call token@>= -do get_x_token(); while (!(cur_cmd!=spacer)) +@/do@+{get_x_token(); +}@+ while (!(cur_cmd!=spacer)) @ In case you are getting bored, here is a slightly less trivial routine: Given a string of lowercase letters, like `\.{pt}' or `\.{plus}' or @@ -8809,9 +8791,9 @@ have to declare |scan_int| as a |forward| procedure. A few other procedures are also declared at this point. @p static void scan_int(void); /*scans an integer value*/ -@#@<Declare procedures that scan restricted classes of integers@>@; -@<Declare \eTeX\ procedures for scanning@>@; -@<Declare procedures that scan font-related stuff@>@; +@t\4\4@>@<Declare procedures that scan restricted classes of integers@>@; +@t\4\4@>@<Declare \eTeX\ procedures for scanning@>@; +@t\4\4@>@<Declare procedures that scan font-related stuff@>@; @ \TeX\ doesn't know exactly what to expect when |scan_something_internal| begins. For example, an integer or dimension or glue value could occur @@ -9009,9 +8991,9 @@ primitive("badness", last_item, badness_code); @ @<Cases of |print_cmd_chr|...@>= case set_aux: if (chr_code==vmode) print_esc("prevdepth"); @+else print_esc("spacefactor");@+break; -case set_page_int: if (chr_code==0) print_esc("deadcycles"); -else @<Cases of |set_page_int| for |print_cmd_chr|@>@; -else print_esc("insertpenalties");@+break; +case set_page_int: if (chr_code==0) print_esc("deadcycles") +@/@<Cases of |set_page_int| for |print_cmd_chr|@>;@/ +@+else print_esc("insertpenalties");@+break; case set_box_dimen: if (chr_code==width_offset) print_esc("wd"); else if (chr_code==height_offset) print_esc("ht"); else print_esc("dp");@+break; @@ -9020,7 +9002,7 @@ case last_item: switch (chr_code) { case dimen_val: print_esc("lastkern");@+break; case glue_val: print_esc("lastskip");@+break; case input_line_no_code: print_esc("inputlineno");@+break; - @/@t\4@>@<Cases of |last_item| for |print_cmd_chr|@>@; + @/@<Cases of |last_item| for |print_cmd_chr|@>@/ default:print_esc("badness"); } @+break; @@ -9042,8 +9024,8 @@ else if (m==vmode) else scanned_result(space_factor, int_val) @ @<Fetch the |dead_cycles| or the |insert_penalties|@>= -{@+if (m==0) cur_val=dead_cycles; -else @<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>@; +{@+if (m==0) cur_val=dead_cycles +@/@<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>;@/ else cur_val=insert_penalties; cur_val_level=int_val; } @@ -9094,14 +9076,14 @@ else if (m >= input_line_no_code) if (m >= eTeX_glue) @<Process an expression and |return|@>@; else if (m >= eTeX_dim) {@+switch (m) { - @/@t\4@>@<Cases for fetching a dimension value@>@; + @/@<Cases for fetching a dimension value@>@/ } /*there are no other cases*/ cur_val_level=dimen_val; } else{@+switch (m) { case input_line_no_code: cur_val=line;@+break; case badness_code: cur_val=last_badness;@+break; - @/@t\4@>@<Cases for fetching an integer value@>@; + @/@<Cases for fetching an integer value@>@/ } /*there are no other cases*/ cur_val_level=int_val; } @@ -9326,11 +9308,11 @@ if (negative) negate(cur_val); @ @<Get the next non-blank non-sign token...@>= negative=false; -do {@<Get the next non-blank non-call token@>; +@/do@+{@<Get the next non-blank non-call token@>; if (cur_tok==other_token+'-') {@+negative=!negative;cur_tok=other_token+'+'; } -} while (!(cur_tok!=other_token+'+')); +}@+ while (!(cur_tok!=other_token+'+')) @ A space is ignored after an alphabetic character constant, so that such constants behave like numeric ones. @@ -9451,7 +9433,7 @@ int @!f; /*numerator of a fraction whose denominator is $2^{16}$*/ f=0;arith_error=false;cur_order=normal;negative=false; cur_hfactor=cur_vfactor=0; if (!shortcut) - {@+@<Get the next non-blank non-sign...@>@; + {@+@<Get the next non-blank non-sign...@>; if ((cur_cmd >= min_internal)&&(cur_cmd <= max_internal)) @<Fetch an internal dimension and |goto attach_sign|, or fetch an internal integer@>@; @@ -9690,7 +9672,7 @@ most of the work has already been done. bool negative; /*should the answer be negated?*/ pointer @!q; /*new glue specification*/ bool @!mu; /*does |level==mu_val|?*/ -mu=(level==mu_val);@<Get the next non-blank non-sign...@>@; +mu=(level==mu_val);@<Get the next non-blank non-sign...@>; if ((cur_cmd >= min_internal)&&(cur_cmd <= max_internal)) {@+scan_something_internal(level, negative); if (cur_val_level >= glue_val) @@ -9870,7 +9852,7 @@ case convert: switch (chr_code) { case font_name_code: print_esc("fontname");@+break; case job_name_code: print_esc("jobname");@+break; case eTeX_revision_code: print_esc("eTeXrevision");@+break; - @/@t\4@>@<Cases of |convert| for |print_cmd_chr|@>@; + @/@<Cases of |convert| for |print_cmd_chr|@>@/ } @+break; @ The procedure |conv_toks| uses |str_toks| to insert the token list @@ -9901,7 +9883,7 @@ case string_code: case meaning_code: {@+save_scanner_status=scanner_status; case font_name_code: scan_font_ident();@+break; case job_name_code: if (job_name==0) open_log_file();@+break; case eTeX_revision_code: do_nothing;@+break; -@/@t\4@>@<Cases of `Scan the argument for command |c|'@>@; +@/@<Cases of `Scan the argument for command |c|'@>@/ } /*there are no other cases*/ @ @<Print the result of command |c|@>= @@ -9919,7 +9901,7 @@ case font_name_code: {@+printn(font_name[cur_val]); } @+break; case eTeX_revision_code: print(eTeX_revision);@+break; case job_name_code: printn(job_name);@+break; -@/@t\4@>@<Cases of `Print the result of command |c|'@>@; +@/@<Cases of `Print the result of command |c|'@>@/ } /*there are no other cases*/ @ Now we can't postpone the difficulties any longer; we must bravely tackle @@ -10095,13 +10077,13 @@ p=def_ref; /*the reference count*/ store_new_token(end_match_token); if ((n < 0)||(n > 15)) m=16;@+else m=n; s=align_state;align_state=1000000; /*disable tab marks, etc.*/ -do @<Input and store tokens from the next line of the file@>@; -while (!(align_state==1000000)); +@/do@+{@<Input and store tokens from the next line of the file@>; +}@+ while (!(align_state==1000000)); cur_val=def_ref;scanner_status=normal;align_state=s; } @ @<Input and store tokens from the next line of the file@>= -{begin_file_reading();name=m+1; +begin_file_reading();name=m+1; if (read_open[m]==closed) @<Input for \.{\\read} from the terminal@>; else if (read_open[m]==just_open) @<Input the first line of |read_file[m]|@>@; else@<Input the next line of |read_file[m]|@>; @@ -10114,12 +10096,12 @@ loop@+{@+get_token(); if (cur_tok==0) goto done; /*|cur_cmd==cur_chr==0| will occur at the end of the line*/ if (align_state < 1000000) /*unmatched `\.\}' aborts the line*/ - {@+do get_token(); while (!(cur_tok==0)); + {@+@/do@+{get_token();}@+ while (!(cur_tok==0)); align_state=1000000;goto done; } store_new_token(cur_tok); } -done: end_file_reading();} +done: end_file_reading() @ Here we input on-line into the |buffer| array, prompting the user explicitly if |n >= 0|. The value of |n| is set negative so that additional prompts @@ -10237,7 +10219,7 @@ switch (chr_code%unless_code) { case if_true_code: print_esc("iftrue");@+break; case if_false_code: print_esc("iffalse");@+break; case if_case_code: print_esc("ifcase");@+break; - @/@t\4@>@<Cases of |if_test| for |print_cmd_chr|@>@; + @/@<Cases of |if_test| for |print_cmd_chr|@>@/ default:print_esc("if"); } } @+break; @@ -10418,7 +10400,7 @@ case if_eof_code: {@+scan_four_bit_int();b=(read_open[cur_val]==closed); } @+break; case if_true_code: b=true;@+break; case if_false_code: b=false;@+break; -@/@t\4@>@<Cases for |conditional|@>@; +@/@<Cases for |conditional|@>@/ case if_case_code: @<Select the appropriate case and |return| or |goto common_ending|@>; } /*there are no other cases*/ @@ -10795,7 +10777,6 @@ static str_number b_make_name_string(byte_file *f) {@+return make_name_string(); } #ifdef @!INIT -@+@t}\6\4\4{@> static str_number w_make_name_string(word_file *f) {@+return make_name_string(); } @@ -11549,8 +11530,8 @@ that do not do local optimization. @ Font parameters are referred to as |slant(f)|, |space(f)|, etc. -@d param_end(A) @[param_base[A]].sc@] -@d param(A) @[font_info[A+param_end@] +@d param_end(A) param_base[A]].sc +@d param(A) font_info[A+param_end @d slant param(slant_code) /*slant to the right, per unit distance upward*/ @d space param(space_code) /*normal space between words*/ @d space_stretch param(space_stretch_code) /*stretch between words*/ @@ -11954,11 +11935,11 @@ if (cur_val==fmem_ptr) } @ @<Increase the number of parameters...@>= -{@+do {if (fmem_ptr==font_mem_size) +{@+@/do@+{if (fmem_ptr==font_mem_size) overflow("font memory", font_mem_size); @:TeX capacity exceeded font memory}{\quad font memory@> font_info[fmem_ptr].sc=0;incr(fmem_ptr);incr(font_params[f]); -} while (!(n==font_params[f])); +}@+ while (!(n==font_params[f])); cur_val=fmem_ptr-1; /*this equals |param_base[f]+font_params[f]|*/ } @@ -13002,7 +12983,7 @@ entering a new level of recursion. In effect, the values of |save_h| and |save_v| on \TeX's run-time stack correspond to the values of |h| and |v| that a \.{DVI}-reading program will push onto its coordinate stack. -@p @<Declare procedures needed in |hlist_out|, |vlist_out|@>@t@>@; +@p @t\4@>@<Declare procedures needed in |hlist_out|, |vlist_out|@>@t@>@/ static void hlist_out(void) /*output an |hlist_node| box*/ {@+ scaled base_line; /*the baseline coordinate for this box*/ @@ -13044,13 +13025,13 @@ reaching a non-|char_node|. The program uses the fact that |set_char_0==0|. @<Output node |p| for |hlist_out|...@>= reswitch: if (is_char_node(p)) {@+synch_h;synch_v; - do {f=font(p);c=character(p); + @/do@+{f=font(p);c=character(p); if (f!=dvi_f) @<Change font |dvi_f| to |f|@>; if (c >= qi(128)) dvi_out(set1); dvi_out(qo(c));@/ cur_h=cur_h+char_width(f, char_info(f, c)); p=link(p); - } while (!(!is_char_node(p))); + }@+ while (!(!is_char_node(p))); dvi_h=cur_h; } else@<Output the non-|char_node| |p| for |hlist_out| and move to the next @@ -13355,7 +13336,7 @@ ready for the |ship_out| routine that gets them started in the first place. @p static void ship_out(pointer @!p) /*output the box |p|*/ {@+ execute_output(p); -@<Flush the box from memory...@>@; +flush_node_list(p); } @ @<Flush the box from memory, showing statistics if requested@>= @@ -13921,20 +13902,21 @@ if (last_badness > vbadness) @ When a box is being appended to the current vertical list, the baselineskip calculation is handled by the |append_to_vlist| routine. -@p static void append_to_vlist(pointer @!b) -{ @+bool height_known; +@p static void append_to_vlist(pointer @!b)@t\2\2@>@/ +{ bool height_known;@t\1@>@/ height_known=(type(b)==hlist_node || type(b)==vlist_node ||@| (type(b)==whatsit_node && subtype(b)==hset_node));@/ if (prev_depth > ignore_depth && height_known)@/ - {@+scaled d; /*deficiency of space between baselines*/ + {@+scaled d;@t\1@> /*deficiency of space between baselines*/ pointer @!p; /*a new glue node*/ - d=width(baseline_skip)-prev_depth-height(b); + {@+d=width(baseline_skip)-prev_depth-height(b); if (d < line_skip_limit) p=new_param_glue(line_skip_code); else{@+p=new_skip_param(baseline_skip_code); width(temp_ptr)=d; /*|temp_ptr==glue_ptr(p)|*/ } link(tail)=p;tail=p; -} @+ else @+if (prev_depth<=unknown_depth || prev_depth>ignore_depth ) @/ + }@+ +} @+ else @+if (prev_depth<=unknown_depth || prev_depth>ignore_depth )@t\2@>@/ {@+pointer p; p=new_baseline_node(baseline_skip, line_skip, line_skip_limit); link(tail)= p;tail= p; @@ -14576,12 +14558,12 @@ be probed in increasing order of height. @<Look at the variants of |(z,x)|; set |f| and |c|...@>= if ((z!=0)||(x!=min_quarterword)) {@+z=z+s+16; - do {z=z-16;g=fam_fnt(z); + @/do@+{z=z-16;g=fam_fnt(z); if (g!=null_font) @<Look at the list of characters starting with |x| in font |g|; set |f| and |c| whenever a better character is found; |goto found| as soon as a large enough variant is encountered@>; - } while (!(z < 16)); + }@+ while (!(z < 16)); } @ @<Look at the list of characters starting with |x|...@>= @@ -14971,8 +14953,8 @@ case rel_noad: case close_noad: case punct_noad: @<Convert \(a)a final |bin_noad| to an |ord_noad|@>; if (type(q)==right_noad) goto done_with_noad; } @+break; -@/@t\4@>@<Cases for noads that can follow a |bin_noad|@>@; -@/@t\4@>@<Cases for nodes that can appear in an mlist, after which we |goto +@t\4@>@<Cases for noads that can follow a |bin_noad|@>@; +@t\4@>@<Cases for nodes that can appear in an mlist, after which we |goto done_with_node|@>@; default:confusion("mlist1"); @:this can't happen mlist1}{\quad mlist1@> @@ -15732,7 +15714,8 @@ is not a penalty node or a |rel_noad| or absent entirely. @<Append any |new_hlist| entries for |q|, and any appropriate penalties@>= if (new_hlist(q)!=null) {@+link(p)=new_hlist(q); - do p=link(p); while (!(link(p)==null)); + @/do@+{p=link(p); + }@+ while (!(link(p)==null)); } if (penalties) if (link(q)!=null) if (pen < inf_penalty) {@+r_type=type(link(q)); @@ -15957,7 +15940,7 @@ good start. This mostly involves scanning the preamble and putting its information into the preamble list. @^preamble@> -@p @<Declare the procedure called |get_preamble_token|@>@; +@p @t\4@>@<Declare the procedure called |get_preamble_token|@>@t@>@/ static void align_peek(void);@/ static void normal_paragraph(void);@/ static void init_align(void) @@ -16145,7 +16128,8 @@ started, or finishes off the alignment. static void align_peek(void) {@+ restart: align_state=1000000; -do get_x_or_protected(); while (!(cur_cmd!=spacer)); +@/do@+{get_x_or_protected(); +}@+ while (!(cur_cmd!=spacer)); if (cur_cmd==no_align) {@+scan_left_brace();new_save_level(no_align_group); if (mode==-vmode) normal_paragraph(); @@ -16164,7 +16148,7 @@ from internal vertical mode to restricted horizontal mode or vice versa. The |space_factor| and |prev_depth| are not used on this semantic level, but we clear them to zero just to be tidy. -@p @<Declare the procedure called |init_span|@>@; +@p @t\4@>@<Declare the procedure called |init_span|@>@t@>@/ static void init_row(void) {@+push_nest();mode=(-hmode-vmode)-mode; if (mode==-hmode) space_factor=0;@+else prev_depth=0; @@ -16257,7 +16241,8 @@ if (extra_info(cur_align)!=span_code) init_span(p); } align_state=1000000; -do get_x_or_protected(); while (!(cur_cmd!=spacer)); +@/do@+{get_x_or_protected(); +}@+ while (!(cur_cmd!=spacer)); cur_align=p; init_col();return false; } @@ -16351,8 +16336,8 @@ link(end_span)=max_quarterword+1;info(end_span)=null; @ @<Update width entry for spanned columns@>= {@+q=cur_span; -do {incr(n);q=link(link(q)); -} while (!(q==cur_align)); +@/do@+{incr(n);q=link(link(q)); +}@+ while (!(q==cur_align)); if (n > max_quarterword) confusion("256 spans"); /*this can happen, but won't*/ @^system dependencies@> @:this can't happen 256 spans}{\quad 256 spans@> @@ -16409,9 +16394,21 @@ unsave(); /*that |align_group| was for the whole alignment*/ if (nest[nest_ptr-1].mode_field==mmode) o=display_indent; else o=0; @<Go through the preamble list, determining the column widths and changing -the alignrecords to dummy unset boxes@>@; +the alignrecords to dummy unset boxes@>; if (x) -{ /*Handle an alignment that depends on |hsize| or |vsize|*/ +{ @<Handle an alignment that depends on |hsize| or |vsize|@>@; + pop_alignment(); +} +else +{ @<Package the preamble list, to determine the actual tabskip glue amounts, + and let |p| point to this prototype box@>; + @<Set the glue in all the unset boxes of the current list@>; + flush_node_list(p);pop_alignment(); +} +@<Insert the \(c)current list into its environment@>; +} @/ +@t\4@>@<Declare the procedure called |align_peek|@>@; +@ @<Handle an alignment that depends on |hsize| or |vsize|@>= pointer r=get_node(align_node_size); save_ptr=save_ptr-2;pack_begin_line=-mode_line; @@ -16423,18 +16420,6 @@ if (x) align_v(r)= (mode!=-vmode); link(head)=r; tail=r; pack_begin_line=0; - pop_alignment(); -} -else -{ @<Package the preamble list, to determine the actual tabskip glue amounts, - and let |p| point to this prototype box@>; - @<Set the glue in all the unset boxes of the current list@>; - flush_node_list(p);pop_alignment(); -} -@<Insert the \(c)current list into its environment@>; -} -@# -@t\4@>@<Declare the procedure called |align_peek|@>@; @ It's time now to dismantle the preamble list and to compute the column widths. Let $w_{ij}$ be the maximum of the natural widths of all entries @@ -16461,7 +16446,7 @@ value is changed to zero and so is the next tabskip. @<Go through the preamble list,...@>= q=link(preamble); -do {flush_list(u_part(q));flush_list(v_part(q)); +@/do@+{flush_list(u_part(q));flush_list(v_part(q)); p=link(link(q)); if (width(q)==null_flag) @<Nullify |width(q)| and the tabskip glue following this column@>; @@ -16475,7 +16460,7 @@ glue_stretch(q)=0;glue_shrink(q)=0; if (width(q)>max_dimen) x=true; #endif q=p; -} while (!(q==null)); +}@+ while (!(q==null)) @ @<Nullify |width(q)| and the tabskip glue following this column@>= {@+width(q)=0;r=link(q);s=glue_ptr(r); @@ -16487,7 +16472,7 @@ if (s!=zero_glue) @ Merging of two span-node lists is a typical exercise in the manipulation of linearly linked data structures. The essential invariant in the following -|do {| loop is that we want to dispense with node |r|, in |q|'s list, +|@/do@+{| loop is that we want to dispense with node |r|, in |q|'s list, and |u| is its successor; all nodes of |p|'s list up to and including |s| have been processed, and the successor of |s| matches |r| or precedes |r| or follows |r|, according as |link(r)==n| or |link(r) > n| or |link(r) < n|. @@ -16495,7 +16480,7 @@ or follows |r|, according as |link(r)==n| or |link(r) > n| or |link(r) < n|. @<Merge the widths...@>= {@+t=width(q)+width(glue_ptr(link(q))); r=info(q);s=end_span;info(s)=p;n=min_quarterword+1; -do {width(r)=width(r)-t;u=info(r); +@/do@+{width(r)=width(r)-t;u=info(r); while (link(r) > n) {@+s=info(s);n=link(info(s))+1; } @@ -16506,7 +16491,7 @@ else{@+if (width(r) > width(info(s))) width(info(s))=width(r); free_node(r, span_node_size); } r=u; -} while (!(r==end_span)); +}@+ while (!(r==end_span)); } @ Now the preamble list has been converted to a list of alternating unset @@ -16523,12 +16508,12 @@ if (mode==-vmode) p=hpack(preamble, saved(1), saved_hfactor(1), saved_vfactor(1), saved(0));overfull_rule=rule_save; } else{@+q=link(preamble); - do {height(q)=width(q);width(q)=0;q=link(link(q)); - } while (!(q==null)); + @/do@+{height(q)=width(q);width(q)=0;q=link(link(q)); + }@+ while (!(q==null)); p=vpack(preamble, saved(1), saved_hfactor(1), saved_vfactor(1), saved(0)); q=link(preamble); - do {width(q)=height(q);height(q)=0;q=link(link(q)); - } while (!(q==null)); + @/do@+{width(q)=height(q);height(q)=0;q=link(link(q)); + }@+ while (!(q==null)); } pack_begin_line=0 @@ -16566,9 +16551,9 @@ else{@+type(q)=vlist_node;height(q)=height(p); glue_order(q)=glue_order(p);glue_sign(q)=glue_sign(p); glue_set(q)=glue_set(p);shift_amount(q)=o; r=link(list_ptr(q));s=link(list_ptr(p)); -do {@<Set the glue in node |r| and change it from an unset node@>; +@/do@+{@<Set the glue in node |r| and change it from an unset node@>; r=link(link(r));s=link(link(s)); -} while (!(r==null)); +}@+ while (!(r==null)); } @ A box made from spanned columns will be followed by tabskip glue nodes and @@ -16900,7 +16885,7 @@ k=1 to 6 do cur_active_width[k]=cur_active_width[k]+mem[q+k].sc|};$$ and we want to do this without the overhead of |for| loops. The |do_all_six| macro makes such six-tuples convenient. -@d do_all_six(A) A(1);A(2);A(3);A(4);A(5);A(6)@; +@d do_all_six(A) A(1);A(2);A(3);A(4);A(5);A(6) @<Glob...@>= static scaled @!active_width0[6], *const @!active_width = @!active_width0-1; @@ -17058,7 +17043,7 @@ loop@+{@+resume: r=link(prev_r); @<If node |r| is of type |delta_node|, update |cur_active_width|, set |prev_r| and |prev_prev_r|, then |goto resume|@>; @<If a line number class has ended, create new active nodes for the best -feasible breaks in that class; then |return| if |r==last_active|, otherwise +feasible breaks in that class; then |return| if |r=last_active|, otherwise compute the new |line_width|@>; @<Consider the demerits for a line from |r| to |cur_p|; deactivate node |r| if it should no longer be active; then |goto resume| if a line from @@ -17811,10 +17796,10 @@ character node. @<Advance \(c)|cur_p| to the node following the present string...@>= {@+prev_p=cur_p; -do {f=font(cur_p); +@/do@+{f=font(cur_p); act_width=act_width+char_width(f, char_info(f, character(cur_p))); cur_p=link(cur_p); -} while (!(!is_char_node(cur_p))); +}@+ while (!(!is_char_node(cur_p))); } @ When node |cur_p| is a glue node, we look at |prev_p| to see whether or not @@ -17839,9 +17824,9 @@ only character nodes, kern nodes, box nodes, rule nodes, and ligature nodes. @<Try to break after a discretionary fragment...@>= {@+s=pre_break(cur_p);disc_width=0; if (s==null) try_break(ex_hyphen_penalty, hyphenated); -else{@+do {@<Add the width of node |s| to |disc_width|@>; +else{@+@/do@+{@<Add the width of node |s| to |disc_width|@>; s=link(s); - } while (!(s==null)); + }@+ while (!(s==null)); act_width=act_width+disc_width; try_break(hyphen_penalty, hyphenated); act_width=act_width-disc_width; @@ -17919,11 +17904,11 @@ if (link(active)!=last_active) @ @<Find an active node...@>= r=link(active);fewest_demerits=awful_bad; -do {if (type(r)!=delta_node) if (total_demerits(r) < fewest_demerits) +@/do@+{if (type(r)!=delta_node) if (total_demerits(r) < fewest_demerits) {@+fewest_demerits=total_demerits(r);best_bet=r; } r=link(r); -} while (!(r==last_active)); +}@+ while (!(r==last_active)); best_line=line_number(best_bet) @ The adjustment for a desired looseness is a slightly more complicated @@ -17933,7 +17918,7 @@ looseness calculation, independently of the other segments. @<Find the best active node...@>= {@+r=link(active);actual_looseness=0; -do {if (type(r)!=delta_node) +@/do@+{if (type(r)!=delta_node) {@+line_diff=line_number(r)-best_line; if (((line_diff < actual_looseness)&&(looseness <= line_diff))||@| ((line_diff > actual_looseness)&&(looseness >= line_diff))) @@ -17946,7 +17931,7 @@ do {if (type(r)!=delta_node) } } r=link(r); -} while (!(r==last_active)); +}@+ while (!(r==last_active)); best_line=line_number(best_bet); } @@ -17981,14 +17966,14 @@ quarterword @!t; /*used for replacement counts in discretionary nodes*/ int @!pen; /*use when calculating penalties between lines*/ halfword @!cur_line; /*the current line number being justified*/ @<Reverse the links of the relevant passive nodes, setting |cur_p| to the -first breakpoint@>@; +first breakpoint@>; cur_line=prev_graf+1; -do {@<Justify the line ending at breakpoint |cur_p|, and append it to the +@/do@+{@<Justify the line ending at breakpoint |cur_p|, and append it to the current vertical list, together with associated penalties and other insertions@>; incr(cur_line);cur_p=next_break(cur_p); if (cur_p!=null) if (!post_disc_break) @<Prune unwanted nodes at the beginning of the next line@>; -} while (!(cur_p==null)); +}@+ while (!(cur_p==null)); if ((cur_line!=best_line)||(link(temp_head)!=null)) confusion("line breaking"); @:this can't happen line breaking}{\quad line breaking@> @@ -18003,8 +17988,8 @@ Node |r| is the passive node being moved from stack to stack. @<Reverse the links of the relevant passive nodes...@>= q=break_node(best_bet);cur_p=null; -do {r=q;q=prev_break(q);next_break(r)=cur_p;cur_p=r; -} while (!(q==null)); +@/do@+{r=q;q=prev_break(q);next_break(r)=cur_p;cur_p=r; +}@+ while (!(q==null)) @ Glue and penalty and kern and math nodes are deleted at the beginning of a line, except in the anomalous case that the node to be deleted is actually @@ -18257,8 +18242,8 @@ int @!c; /*character being considered for hyphenation*/ second pass, and |cur_p| points to a glue node. @p -static void hyphenate_word(void) -{ @+pointer @!q, @!s, @!prev_s; /*miscellaneous nodes of temporary interest*/ +static void hyphenate_word(void)@t\2\2@>@/ +{ pointer @!q, @!s, @!prev_s;@t\1@> /*miscellaneous nodes of temporary interest*/ small_number @!j; /*an index into |hc| or |hu|*/ uint8_t @!c; /*character being considered for hyphenation*/ @@ -18692,7 +18677,7 @@ pointer @!hyf_node; /*the hyphen, if it exists*/ @ When the following code is performed, |hyf[0]| and |hyf[hn]| will be zero. @<Reconstitute nodes for the hyphenated word...@>= -do {l=j;j=reconstitute(j, hn, bchar, qi(hyf_char))+1; +@/do@+{l=j;j=reconstitute(j, hn, bchar, qi(hyf_char))+1; if (hyphen_passed==0) {@+link(s)=link(hold_head); while (link(s) > null) s=link(s); @@ -18702,8 +18687,8 @@ if (hyphen_passed==0) } if (hyphen_passed > 0) @<Create and append a discretionary node as an alternative to the unhyphenated -word, and continue to develop both branches until they become equivalent@>@; -} while (!(j > hn)); +word, and continue to develop both branches until they become equivalent@>; +}@+ while (!(j > hn)); link(s)=q @ In this repeat loop we will insert another discretionary if |hyf[j-1]| is @@ -18717,7 +18702,7 @@ point. (Consider the word `difficult', where the letter `c' is in position |j|.) } @<Create and append a discretionary node as an alternative...@>= -do {r=get_node(small_node_size); +@/do@+{r=get_node(small_node_size); link(r)=link(hold_head);type(r)=disc_node; major_tail=r;r_count=0; while (link(major_tail) > null) advance_major_tail; @@ -18728,7 +18713,7 @@ list and to |major_tail| until synchronization has been achieved@>; @<Move pointer |s| to the end of the current list, and set |replace_count(r)| appropriately@>; hyphen_passed=j-1;link(hold_head)=null; -} while (!(!odd(hyf[j-1]))); +}@+ while (!(!odd(hyf[j-1]))) @ The new hyphen might combine with the previous character via ligature or kern. At this point we have |l-1 <= i < j| and |i < hn|. @@ -18760,7 +18745,7 @@ if (bchar_label[hf]!=non_address) /*put left boundary at beginning of new line* {@+decr(l);c=hu[l];c_loc=l;hu[l]=256; } while (l < j) - {@+do {l=reconstitute(l, hn, bchar, non_char)+1; + {@+@/do@+{l=reconstitute(l, hn, bchar, non_char)+1; if (c_loc > 0) {@+hu[c_loc]=c;c_loc=0; } @@ -18770,7 +18755,7 @@ while (l < j) minor_tail=link(hold_head); while (link(minor_tail) > null) minor_tail=link(minor_tail); } - } while (!(l >= j)); + }@+ while (!(l >= j)); while (l > j) @<Append characters of |hu[j..]| to |major_tail|, advancing~|j|@>; } @@ -18888,10 +18873,10 @@ for (j=0; j<=r_hyf-1; j++) hyf[hn-j]=0 @ @<Store \(m)maximum values in the |hyf| table@>= {@+v=trie_op(z); -do {v=v+op_start[cur_lang];i=l-hyf_distance[v]; +@/do@+{v=v+op_start[cur_lang];i=l-hyf_distance[v]; if (hyf_num[v] > hyf[i]) hyf[i]=hyf_num[v]; v=hyf_next[v]; -} while (!(v==min_quarterword)); +}@+ while (!(v==min_quarterword)); } @ The exception table that is built by \TeX's \.{\\hyphenation} primitive is @@ -18956,10 +18941,10 @@ k=hyph_word[h];if (k==0) goto not_found; if (length(k) < hn) goto not_found; if (length(k)==hn) {@+j=1;u=str_start[k]; - do {if (so(str_pool[u]) < hc[j]) goto not_found; + @/do@+{if (so(str_pool[u]) < hc[j]) goto not_found; if (so(str_pool[u]) > hc[j]) goto done; incr(j);incr(u); - } while (!(j > hn)); + }@+ while (!(j > hn)); @<Insert hyphens as specified in |hyph_list[h]|@>; decr(hn);goto found; } @@ -19085,10 +19070,10 @@ k=hyph_word[h]; if (length(k) < length(s)) goto found; if (length(k) > length(s)) goto not_found; u=str_start[k];v=str_start[s]; -do {if (str_pool[u] < str_pool[v]) goto found; +@/do@+{if (str_pool[u] < str_pool[v]) goto found; if (str_pool[u] > str_pool[v]) goto not_found; incr(u);incr(v); -} while (!(u==str_start[k+1])); +}@+ while (!(u==str_start[k+1])); found: q=hyph_list[h];hyph_list[h]=p;p=q;@/ t=hyph_word[h];hyph_word[h]=s;s=t; not_found: @@ -19376,7 +19361,7 @@ loop@+{@+h=z-c;@/ otherwise |goto not_found|@>; not_found: z=trie_link(z); /*move to the next hole*/ } -found: @<Pack the family into |trie| relative to |h|@>@; +found: @<Pack the family into |trie| relative to |h|@>; } @ By making sure that |trie_max| is at least |h+256|, we can be sure that @@ -19387,9 +19372,9 @@ never be occupied in |trie|, and we will have |trie_max >= trie_link(z)|. if (trie_max < h+256) {@+if (trie_size <= h+256) overflow("pattern memory", trie_size); @:TeX capacity exceeded pattern memory}{\quad pattern memory@> - do {incr(trie_max);trie_taken[trie_max]=false; + @/do@+{incr(trie_max);trie_taken[trie_max]=false; trie_link(trie_max)=trie_max+1;trie_back(trie_max)=trie_max-1; - } while (!(trie_max==h+256)); + }@+ while (!(trie_max==h+256)); } @ @<If all characters of the family fit relative to |h|...@>= @@ -19402,15 +19387,15 @@ goto found @ @<Pack the family into |trie| relative to |h|@>= trie_taken[h]=true;trie_ref[p]=h;q=p; -do {z=h+so(trie_c[q]);l=trie_back(z);r=trie_link(z); +@/do@+{z=h+so(trie_c[q]);l=trie_back(z);r=trie_link(z); trie_back(r)=l;trie_link(l)=r;trie_link(z)=0; if (l < 256) {@+if (z < 256) ll=z;@+else ll=256; - do {trie_min[l]=r;incr(l); - } while (!(l==ll)); + @/do@+{trie_min[l]=r;incr(l); + }@+ while (!(l==ll)); } q=trie_r[q]; -} while (!(q==0)); +}@+ while (!(q==0)) @ To pack the entire linked trie, we use the following recursive procedure. @^recursion@> @@ -19418,12 +19403,12 @@ q=trie_r[q]; @<Declare procedures for preprocessing hyph...@>= static void trie_pack(trie_pointer @!p) /*pack subtries of a family*/ {@+trie_pointer q; /*a local variable that need not be saved on recursive calls*/ -do {q=trie_l[p]; +@/do@+{q=trie_l[p]; if ((q > 0)&&(trie_ref[q]==0)) {@+first_fit(q);trie_pack(q); } p=trie_r[p]; -} while (!(p==0)); +}@+ while (!(p==0)); } @ When the whole trie has been allocated into the sequential table, we @@ -19441,8 +19426,8 @@ if (trie_max==0) /*no patterns were given*/ else{@+if (hyph_root > 0) trie_fix(hyph_root); if (trie_root > 0) trie_fix(trie_root); /*this fixes the non-holes in |trie|*/ r=0; /*now we will zero out all the holes*/ - do {s=trie_link(r);trie[r]=h;r=s; - } while (!(r > trie_max)); + @/do@+{s=trie_link(r);trie[r]=h;r=s; + }@+ while (!(r > trie_max)); } trie_char(0)=qi('?'); /*make |trie_char(c)!=c| for all |c|*/ @@ -19458,11 +19443,11 @@ static void trie_fix(trie_pointer @!p) /*moves |p| and its siblings into |trie|* ASCII_code @!c; /*another one that need not be saved*/ trie_pointer @!z; /*|trie| reference; this local variable must be saved*/ z=trie_ref[p]; -do {q=trie_l[p];c=so(trie_c[p]); +@/do@+{q=trie_l[p];c=so(trie_c[p]); trie_link(z+c)=trie_ref[q];trie_char(z+c)=qi(c);trie_op(z+c)=trie_o[p]; if (q > 0) trie_fix(q); p=trie_r[p]; -} while (!(p==0)); +}@+ while (!(p==0)); } @ Now let's go back to the easier problem, of building the linked @@ -20061,9 +20046,9 @@ if (page_head!=page_tail) print_scaled(t); if (type(r)==split_up) {@+q=page_head;t=0; - do {q=link(q); + @/do@+{q=link(q); if ((type(q)==ins_node)&&(subtype(q)==subtype(r))) incr(t); - } while (!(q==broken_ins(r))); + }@+ while (!(q==broken_ins(r))); print(", #");print_int(t);print(" might split"); } r=link(r); @@ -20723,7 +20708,8 @@ pop_nest();build_page(); @.Unbalanced output routine@> help2("Your sneaky output routine has problematic {'s and/or }'s.",@/ "I can't handle that very well; good luck.");error(); -do get_token(); while (!(loc==null)); +@/do@+{get_token(); +}@+ while (!(loc==null)); } /*loops forever if reading from a file, since |null==min_halfword <= 0|*/ @ @<Ensure that box 255 is empty after output@>= @@ -20807,7 +20793,7 @@ case hmode+no_boundary: {@+get_x_token(); case hmode+spacer: if (space_factor==1000) goto append_normal_space; else app_space();@+break; case hmode+ex_space: case mmode+ex_space: goto append_normal_space; -@/@t\4@>@<Cases of |main_control| that are not part of the inner loop@>@; +@t\4@>@<Cases of |main_control| that are not part of the inner loop@>@; } /*of the big |case| statement*/ goto big_switch; main_loop: @<Append character |cur_chr| and the following characters (if~any) @@ -21120,7 +21106,7 @@ if ((space_factor >= 2000)&&(xspace_skip!=zero_glue)) else{@+if (space_skip!=zero_glue) main_p=space_skip; else@<Find the glue specification...@>; main_p=new_spec(main_p); - @<Modify the glue specification in |main_p| according to the space factor@>@; + @<Modify the glue specification in |main_p| according to the space factor@>; q=new_glue(main_p);glue_ref_count(main_p)=null; } link(tail)=q;tail=q; @@ -21129,7 +21115,7 @@ link(tail)=q;tail=q; @ @<Modify the glue specification in |main_p| according to the space factor@>= if (space_factor >= 2000) width(main_p)=width(main_p)+extra_space(cur_font); stretch(main_p)=xn_over_d(stretch(main_p), space_factor, 1000); -shrink(main_p)=xn_over_d(shrink(main_p), 1000, space_factor); +shrink(main_p)=xn_over_d(shrink(main_p), 1000, space_factor) @ Whew---that covers the main loop. We can now proceed at a leisurely pace through the other combinations of possibilities. @@ -21144,7 +21130,7 @@ any_mode(ignore_spaces): {@+@<Get the next non-blank non-call...@>; goto reswitch; } case vmode+stop: if (its_all_over()) return;@+break; /*this is the only way out*/ -@<Forbidden cases detected in |main_control|@>@+@, any_mode(mac_param): +@t\4@>@<Forbidden cases detected in |main_control|@>@+@, any_mode(mac_param): report_illegal_case();@+break; @<Math-only cases in non-math modes, or vice versa@>: insert_dollar_sign();@+break; @t\4@>@<Cases of |main_control| that build boxes and lists@>@; @@ -21497,7 +21483,7 @@ case bottom_level: {@+print_err("Too many }'s"); } @+break; case semi_simple_group: case math_shift_group: case math_left_group: extra_right_brace();@+break; -@/@t\4@>@<Cases of |handle_right_brace| where a |right_brace| triggers a delayed +@t\4@>@<Cases of |handle_right_brace| where a |right_brace| triggers a delayed action@>@; default:confusion("rightbrace"); @:this can't happen rightbrace}{\quad rightbrace@> @@ -21693,7 +21679,7 @@ current vertical list. } else{@+cur_val=box_context-global_box_flag;a=4; } -if (cur_val < 256) @[g_define(box_base+cur_val, box_ref, cur_box)@]; +if (cur_val < 256) define(box_base+cur_val, box_ref, cur_box); else sa_def_box; } @@ -21761,13 +21747,13 @@ else{@+if (!is_char_node(tail)) @ @<Remove the last box...@>= {@+q=head; -do {p=q; +@/do@+{p=q; if (!is_char_node(q)) if (type(q)==disc_node) {@+for (m=1; m<=replace_count(q); m++) p=link(p); if (p==tail) goto done; } q=link(p); -} while (!(q==tail)); +}@+ while (!(q==tail)); cur_box=tail;shift_amount(cur_box)=0; tail=p;link(p)=null; done: ;} @@ -22078,13 +22064,13 @@ if ((mode==vmode)&&(tail==head)) non-glue@>@; else{@+if (!is_char_node(tail)) if (type(tail)==cur_chr) {@+q=head; - do {p=q; + @/do@+{p=q; if (!is_char_node(q)) if (type(q)==disc_node) {@+for (m=1; m<=replace_count(q); m++) p=link(p); if (p==tail) return; } q=link(p); - } while (!(q==tail)); + }@+ while (!(q==tail)); link(p)=null;flush_node_list(tail);tail=p; } } @@ -22125,8 +22111,8 @@ case remove_item: if (chr_code==glue_node) print_esc("unskip"); else print_esc("unpenalty");@+break; case un_hbox: if (chr_code==copy_code) print_esc("unhcopy"); else print_esc("unhbox");@+break; -case un_vbox: if (chr_code==copy_code) print_esc("unvcopy"); - else @<Cases of |un_vbox| for |print_cmd_chr|@>@; +case un_vbox: if (chr_code==copy_code) print_esc("unvcopy") + @<Cases of |un_vbox| for |print_cmd_chr|@>;@/ else print_esc("unvbox");@+break; @ The |un_hbox| and |un_vbox| commands unwrap one of the 256 current boxes. @@ -23167,8 +23153,8 @@ primitive("right", left_right, right_noad); text(frozen_right)=text(cur_val);eqtb[frozen_right]=eqtb[cur_val]; @ @<Cases of |print_cmd_chr|...@>= -case left_right: if (chr_code==left_noad) print_esc("left"); -else @<Cases of |left_right| for |print_cmd_chr|@>@; +case left_right: if (chr_code==left_noad) print_esc("left") +@/@<Cases of |left_right| for |print_cmd_chr|@>;@/ else print_esc("right");@+break; @ @<Cases of |main_control| that build...@>= @@ -23505,8 +23491,8 @@ primitive("xdef", def, 3); @ @<Cases of |print_cmd_chr|...@>= case prefix: if (chr_code==1) print_esc("long"); - else if (chr_code==2) print_esc("outer"); - else @<Cases of |prefix| for |print_cmd_chr|@>@; + else if (chr_code==2) print_esc("outer") + @/@<Cases of |prefix| for |print_cmd_chr|@>;@/ else print_esc("global");@+break; case def: if (chr_code==0) print_esc("def"); else if (chr_code==1) print_esc("gdef"); @@ -23616,7 +23602,7 @@ if ((cur_cmd!=def)&&((a%4!=0)||(j!=0))) since the following routines test for the \.{\\global} prefix as follows. @d global (a >= 4) -@d g_define(A, B, C) if (global) geq_define(A, B, C);@+else eq_define(A, B, C) +@d define(A, B, C) if (global) geq_define(A, B, C);@+else eq_define(A, B, C) @d word_define(A, B) if (global) geq_word_define(A, B);@+else eq_word_define(A, B) @<Adjust \(f)for the setting of \.{\\globaldefs}@>= @@ -23634,7 +23620,8 @@ control sequence for a token that is not redefinable. @<Declare subprocedures for |prefixed_command|@>= static void get_r_token(void) {@+ -restart: do get_token(); while (!(cur_tok!=space_token)); +restart: @/do@+{get_token(); +}@+ while (!(cur_tok!=space_token)); if ((cur_cs==0)||(cur_cs > frozen_control_sequence)) {@+print_err("Missing control sequence inserted"); @.Missing control...@> @@ -23657,7 +23644,7 @@ text(frozen_protection)=s_no("inaccessible"); (Unfortunately, they aren't all as simple as this.) @<Assignments@>= -case set_font: g_define(cur_font_loc, data, cur_chr);@+break; +case set_font: define(cur_font_loc, data, cur_chr);@+break; @ When a |def| command has been scanned, |cur_chr| is odd if the definition is supposed to be global, and @@ -23671,7 +23658,7 @@ case def: {@+if (odd(cur_chr)&&!global&&(global_defs >= 0)) a=a+4; {@+q=get_avail();info(q)=j;link(q)=link(def_ref); link(def_ref)=q; } - g_define(p, call+(a%4), def_ref); + define(p, call+(a%4), def_ref); } @+break; @ Both \.{\\let} and \.{\\futurelet} share the command code |let|. @@ -23689,7 +23676,8 @@ case let: if (chr_code!=normal) print_esc("futurelet");@+else print_esc("let");@ case let: {@+n=cur_chr; get_r_token();p=cur_cs; if (n==normal) - {@+do get_token(); while (!(cur_cmd!=spacer)); + {@+@/do@+{get_token(); + }@+ while (!(cur_cmd!=spacer)); if (cur_tok==other_token+'=') {@+get_token(); if (cur_cmd==spacer) get_token(); @@ -23702,7 +23690,7 @@ case let: {@+n=cur_chr; else if ((cur_cmd==internal_register)||(cur_cmd==toks_register)) if ((cur_chr < mem_bot)||(cur_chr > lo_mem_stat_max)) add_sa_ref(cur_chr); - g_define(p, cur_cmd, cur_chr); + define(p, cur_cmd, cur_chr); } @+break; @ A \.{\\chardef} creates a control sequence whose |cmd| is |char_given|; @@ -23757,12 +23745,12 @@ producing an ``undefined control sequence'' error or expanding the previous meaning. This allows, for instance, `\.{\\chardef\\foo=123\\foo}'. @<Assignments@>= -case shorthand_def: {@+n=cur_chr;get_r_token();p=cur_cs;g_define(p, relax, 256); +case shorthand_def: {@+n=cur_chr;get_r_token();p=cur_cs;define(p, relax, 256); scan_optional_equals(); switch (n) { - case char_def_code: {@+scan_char_num();g_define(p, char_given, cur_val); + case char_def_code: {@+scan_char_num();define(p, char_given, cur_val); } @+break; - case math_char_def_code: {@+scan_fifteen_bit_int();g_define(p, math_given, cur_val); + case math_char_def_code: {@+scan_fifteen_bit_int();define(p, math_given, cur_val); } @+break; default:{@+scan_register_num(); if (cur_val > 255) @@ -23770,15 +23758,15 @@ case shorthand_def: {@+n=cur_chr;get_r_token();p=cur_cs;g_define(p, relax, 256); if (j > mu_val) j=tok_val; /*|int_val dotdot mu_val| or |tok_val|*/ find_sa_element(j, cur_val, true);add_sa_ref(cur_ptr); if (j==tok_val) j=toks_register;@+else j=internal_register; - g_define(p, j, cur_ptr); + define(p, j, cur_ptr); } else switch (n) { - case count_def_code: g_define(p, assign_int, count_base+cur_val);@+break; - case dimen_def_code: g_define(p, assign_dimen, scaled_base+cur_val);@+break; - case skip_def_code: g_define(p, assign_glue, skip_base+cur_val);@+break; - case mu_skip_def_code: g_define(p, assign_mu_glue, mu_skip_base+cur_val);@+break; - case toks_def_code: g_define(p, assign_toks, toks_base+cur_val); + case count_def_code: define(p, assign_int, count_base+cur_val);@+break; + case dimen_def_code: define(p, assign_dimen, scaled_base+cur_val);@+break; + case skip_def_code: define(p, assign_glue, skip_base+cur_val);@+break; + case mu_skip_def_code: define(p, assign_mu_glue, mu_skip_base+cur_val);@+break; + case toks_def_code: define(p, assign_toks, toks_base+cur_val); } /*there are no other cases*/ } } @@ -23794,7 +23782,7 @@ case read_to_cs: {@+j=cur_chr;scan_int();n=cur_val; "I'm going to look for the \\cs now.");error(); } get_r_token(); - p=cur_cs;read_toks(n, p, j);g_define(p, call, cur_val); + p=cur_cs;read_toks(n, p, j);define(p, call, cur_val); } @+break; @ The token-list parameters, \.{\\output} and \.{\\everypar}, etc., receive @@ -23864,7 +23852,7 @@ case assign_dimen: {@+p=cur_chr;scan_optional_equals(); case assign_glue: case assign_mu_glue: {@+p=cur_chr;n=cur_cmd;scan_optional_equals(); if (n==assign_mu_glue) scan_glue(mu_val);@+else scan_glue(glue_val); trap_zero_glue(); - g_define(p, glue_ref, cur_val); + define(p, glue_ref, cur_val); } @+break; @ When a glue register or parameter becomes zero, it will always point to @@ -23927,8 +23915,8 @@ case def_code: {@+@<Let |n| be the largest legal code value, based on |cur_chr|@ help1("I'm going to use 0 instead of that illegal code value.");@/ error();cur_val=0; } - if (p < math_code_base) g_define(p, data, cur_val); - else if (p < del_code_base) g_define(p, data, hi(cur_val)); + if (p < math_code_base) define(p, data, cur_val); + else if (p < del_code_base) define(p, data, hi(cur_val)); else word_define(p, cur_val); } @+break; @@ -23941,7 +23929,7 @@ else n=255 @ @<Assignments@>= case def_family: {@+p=cur_chr;scan_four_bit_int();p=p+cur_val; - scan_optional_equals();scan_font_ident();g_define(p, data, cur_val); + scan_optional_equals();scan_font_ident();define(p, data, cur_val); } @+break; @ Next we consider changes to \TeX's numeric registers. @@ -24149,8 +24137,8 @@ static void alter_integer(void) {@+small_number c; /*0 for \.{\\deadcycles}, 1 for \.{\\insertpenalties}, etc.*/ c=cur_chr;scan_optional_equals();scan_int(); -if (c==0) dead_cycles=cur_val; -else @<Cases for |alter_integer|@>@; +if (c==0) dead_cycles=cur_val +@/@<Cases for |alter_integer|@>@;@/ else insert_penalties=cur_val; } @@ -24188,7 +24176,7 @@ case set_shape: {@+q=cur_chr;scan_optional_equals();scan_int();n=cur_val; } cur_hfactor=fh; cur_vfactor=fv; } - g_define(q, shape_ref, p); + define(q, shape_ref, p); } @+break; @ Here's something that isn't quite so obvious. It guarantees that @@ -24219,7 +24207,7 @@ new_patterns();goto done;@; print_err("Patterns can be loaded only by INITEX"); @.Patterns can be...@> help0;error(); - do get_token(); while (!(cur_cmd==right_brace)); /*flush the patterns*/ + @/do@+{get_token();}@+ while (!(cur_cmd==right_brace)); /*flush the patterns*/ return; } else{@+new_hyph_exceptions();goto done; @@ -24273,12 +24261,12 @@ else{@+old_setting=selector;selector=new_string; @.FONTx@> str_room(1);t=make_string(); } -g_define(u, set_font, null_font);scan_optional_equals();scan_file_name(); +define(u, set_font, null_font);scan_optional_equals();scan_file_name(); @<Scan the font size specification@>; @<If this font has already been loaded, set |f| to the internal font number and |goto common_ending|@>; f=read_font_info(u, cur_name, cur_area, s); -common_ending: g_define(u, set_font, f);eqtb[font_id_base+f]=eqtb[u];font_id_text(f)=t; +common_ending: define(u, set_font, f);eqtb[font_id_base+f]=eqtb[u];font_id_text(f)=t; } @ @<Scan the font size specification@>= @@ -24663,7 +24651,7 @@ so that the inverse relation between them is clear. The global variable |format_ident| is a string that is printed right after the |banner| line when \TeX\ is ready to start. For \.{INITEX} this string says simply `\.{ (INITEX)}'; for other versions of \TeX\ it says, -for example, `\.{(preloaded format=plain 1982.11.19)}', showing the year, +for example, `\.{ (preloaded format=plain 1982.11.19)}', showing the year, month, and day that the format file was created. We have |format_ident==0| before \TeX's tables are loaded. @@ -24853,10 +24841,10 @@ sort_avail();var_used=0; dump_int(lo_mem_max);dump_int(rover); if (eTeX_ex) for (k=int_val; k<=tok_val; k++) dump_int(sa_root[k]); p=mem_bot;q=rover;x=0; -do {for (k=p; k<=q+1; k++) dump_wd(mem[k]); +@/do@+{for (k=p; k<=q+1; k++) dump_wd(mem[k]); x=x+q+2-p;var_used=var_used+q-p; p=q+node_size(q);q=rlink(q); -} while (!(q==rover)); +}@+ while (!(q==rover)); var_used=var_used+lo_mem_max-p;dyn_used=mem_end+1-hi_mem_min;@/ for (k=p; k<=lo_mem_max; k++) dump_wd(mem[k]); x=x+lo_mem_max+1-p; @@ -24878,11 +24866,11 @@ undump(lo_mem_stat_max+1, lo_mem_max, rover); if (eTeX_ex) for (k=int_val; k<=tok_val; k++) undump(null, lo_mem_max, sa_root[k]); p=mem_bot;q=rover; -do {for (k=p; k<=q+1; k++) undump_wd(mem[k]); +@/do@+{for (k=p; k<=q+1; k++) undump_wd(mem[k]); p=q+node_size(q); if ((p > lo_mem_max)||((q >= rlink(q))&&(rlink(q)!=rover))) goto bad_fmt; q=rlink(q); -} while (!(q==rover)); +}@+ while (!(q==rover)); for (k=p; k<=lo_mem_max; k++) undump_wd(mem[k]); if (mem_min < mem_bot-2) /*make more low memory available*/ {@+p=llink(rover);q=mem_min+1; @@ -24897,14 +24885,14 @@ for (k=hi_mem_min; k<=mem_end; k++) undump_wd(mem[k]); undump_int(var_used);undump_int(dyn_used) @ @<Dump the table of equivalents@>= -@<Dump regions 1 to 4 of |eqtb|@>@; -@<Dump regions 5 and 6 of |eqtb|@>@; +@<Dump regions 1 to 4 of |eqtb|@>; +@<Dump regions 5 and 6 of |eqtb|@>; dump_int(par_loc);dump_int(write_loc);@/ dump_int(input_loc);@/ @<Dump the hash table@>@; @ @<Undump the table of equivalents@>= -@<Undump regions 1 to 6 of |eqtb|@>@; +@<Undump regions 1 to 6 of |eqtb|@>; undump(hash_base, frozen_control_sequence, par_loc); par_token=cs_token_flag+par_loc;@/ undump(hash_base, frozen_control_sequence, write_loc);@/ @@ -24919,7 +24907,7 @@ copies of $x_n$, namely $(x_1,\ldots,x_n,x_n,\ldots,x_n)$. @<Dump regions 1 to 4 of |eqtb|@>= k=active_base; -do {j=k; +@/do@+{j=k; while (j < int_base-1) {@+if ((equiv(j)==equiv(j+1))&&(eq_type(j)==eq_type(j+1))&&@| (eq_level(j)==eq_level(j+1))) goto found1; @@ -24937,10 +24925,10 @@ while (k < l) {@+dump_wd(eqtb[k]);incr(k); } k=j+1;dump_int(k-l); -} while (!(k==int_base)); +}@+ while (!(k==int_base)) @ @<Dump regions 5 and 6 of |eqtb|@>= -do {j=k; +@/do@+{j=k; while (j < eqtb_size) {@+if (eqtb[j].i==eqtb[j+1].i) goto found2; incr(j); @@ -24956,11 +24944,11 @@ while (k < l) {@+dump_wd(eqtb[k]);incr(k); } k=j+1;dump_int(k-l); -} while (!(k > eqtb_size)); +}@+ while (!(k > eqtb_size)) @ @<Undump regions 1 to 6 of |eqtb|@>= k=active_base; -do {undump_int(x); +@/do@+{undump_int(x); if ((x < 1)||(k+x > eqtb_size+1)) goto bad_fmt; for (j=k; j<=k+x-1; j++) undump_wd(eqtb[j]); k=k+x; @@ -24968,7 +24956,7 @@ undump_int(x); if ((x < 0)||(k+x > eqtb_size+1)) goto bad_fmt; for (j=k; j<=k+x-1; j++) eqtb[j]=eqtb[k-1]; k=k+x; -} while (!(k > eqtb_size)); +}@+ while (!(k > eqtb_size)) @ A different scheme is used to compress the hash table, since its lower region is usually sparse. When |text(p)!=0| for |p <= hash_used|, we output @@ -24986,8 +24974,8 @@ print_ln();print_int(cs_count);print(" multiletter control sequences") @ @<Undump the hash table@>= undump(hash_base, frozen_control_sequence, hash_used);p=hash_base-1; -do {undump(p+1, hash_used, p);undump_hh(hash[p]); -} while (!(p==hash_used)); +@/do@+{undump(p+1, hash_used, p);undump_hh(hash[p]); +}@+ while (!(p==hash_used)); for (p=hash_used+1; p<=undefined_control_sequence-1; p++) undump_hh(hash[p]); undump_int(cs_count) @@ -25800,7 +25788,7 @@ case extension: switch (chr_code) { case ignore_node: print("[HINT internal: ignore]");@+break; case immediate_code: print_esc("immediate");@+break; case set_language_code: print_esc("setlanguage");@+break; - @/@t\4@>@<Cases of |extension| for |print_cmd_chr|@>@; + @/@<Cases of |extension| for |print_cmd_chr|@>@/ default:print("[unknown extension!]"); } @+break; @@ -25991,7 +25979,7 @@ case xdimen_node: case ignore_node: @+break; case immediate_code: @<Implement \.{\\immediate}@>@;@+break; case set_language_code: @<Implement \.{\\setlanguage}@>@;@+break; -@/@t\4@>@<Cases for |do_extension|@>@; +@/@<Cases for |do_extension|@>@/ default:confusion("ext1"); @:this can't happen ext1}{\quad ext1@> } @@ -26122,7 +26110,7 @@ case language_node: {@+print_esc("setlanguage"); print_int(what_lhm(p));print_char(','); print_int(what_rhm(p));print_char(')'); } @+break; -@/@t\4@>@<Cases for displaying the |whatsit| node@>@; +@/@<Cases for displaying the |whatsit| node@>@/ case param_node: print_esc("parameter "); print_int(param_type(p));print_char(',');print_int(param_no(p)); print_char(':');print_int(param_value(p).i); @@ -26263,7 +26251,7 @@ case write_node: case special_node: case latespecial_node: {@+r=get_node(write_n case close_node: case language_node: {@+r=get_node(small_node_size); words=small_node_size; } @+break; -@/@t\4@>@<Cases for making a partial copy of the whatsit node@>@; +@/@<Cases for making a partial copy of the whatsit node@>@/ case param_node: {@+r=get_node(param_node_size); if (param_type(p)==glue_type) add_glue_ref(param_value(p).i); @@ -26446,7 +26434,7 @@ case stream_node: free_node(p,stream_node_size); @+break; case xdimen_node: free_node(p,xdimen_node_size); -@/@t\4@>@<Cases for wiping out the whatsit node@>@; +@/@<Cases for wiping out the whatsit node@>@/ default:confusion("ext3"); @:this can't happen ext3}{\quad ext3@> } @/ @@ -26459,7 +26447,7 @@ goto done; @ @<Let |d| be the width of the whatsit |p|@>=d=0 -@ @d adv_past(A) if (subtype(A)==language_node) +@ @d adv_past(A) @+if (subtype(A)==language_node) {@+cur_lang=what_lang(A);l_hyf=what_lhm(A);r_hyf=what_rhm(A); set_hyph_index; } @@ -26558,7 +26546,8 @@ end_token_list() /*conserve stack space*/ @.Unbalanced write...@> help2("On this page there's a \\write with fewer real {'s than }'s.",@/ "I can't handle that very well; good luck.");error(); -do get_token(); while (!(cur_tok==end_write_token)); +@/do@+{get_token(); +}@+ while (!(cur_tok==end_write_token)); } @ The |out_what| procedure takes care of outputting whatsit nodes for @@ -27029,9 +27018,9 @@ a=1; print_nl("");print_ln(); loop@+{@+print_nl("### ");print_group(true); if (cur_group==bottom_level) goto done; - do {m=nest[p].mode_field; + @/do@+{m=nest[p].mode_field; if (p > 0) decr(p);else m=vmode; - } while (!(m!=hmode)); + }@+ while (!(m!=hmode)); print(" ("); switch (cur_group) { case simple_group: {@+incr(p);goto found2; @@ -27156,7 +27145,7 @@ scanner_status=s;warning_index=w;def_ref=d; @ The \.{\\showtokens} command displays a token list. -@d show_tokens 5 /* \.{\\showtokens}, must be odd! */ +@d show_tokens 5 /* \.{\\showtokens} , must be odd! */ @<Generate all \eTeX...@>= primitive("showtokens", xray, show_tokens); @@ -27179,9 +27168,9 @@ primitive("unexpanded", the, 1);@/ primitive("detokenize", the, show_tokens);@/ @!@:detokenize\_}{\.{\\detokenize} primitive@> -@ @<Cases of |the| for |print_cmd_chr|@>= -if (chr_code==1) print_esc("unexpanded"); -else print_esc("detokenize"); +@ @<Cases of |the| for |print_cmd_chr|@>=; +else if (chr_code==1) print_esc("unexpanded"); +else print_esc("detokenize") @ @<Handle \.{\\unexpanded} or \.{\\detokenize} and |return|@>= if (odd(cur_chr)) @@ -27216,14 +27205,14 @@ case show_ifs: {@+begin_diagnostic();print_nl("");print_ln(); {@+print_nl("### ");print("no active conditionals"); } else{@+p=cond_ptr;n=0; - do {incr(n);p=link(p);@+} while (!(p==null)); + @/do@+{incr(n);p=link(p);@+}@+ while (!(p==null)); p=cond_ptr;t=cur_if;l=if_line;m=if_limit; - do {print_nl("### level ");print_int(n);print(": "); + @/do@+{print_nl("### level ");print_int(n);print(": "); print_cmd_chr(if_test, t); if (m==fi_code) print_esc("else"); print_if_line(l); decr(n);t=subtype(p);l=if_line_field(p);m=type(p);p=link(p); - } while (!(p==null)); + }@+ while (!(p==null)); } } @+break; @@ -27234,17 +27223,17 @@ interaction mode. primitive("interactionmode", set_page_int, 2); @!@:interaction\_mode\_}{\.{\\interactionmode} primitive@> -@ @<Cases of |set_page_int| for |print_cmd_chr|@>= -if (chr_code==2) print_esc("interactionmode"); +@ @<Cases of |set_page_int| for |print_cmd_chr|@>=; +else if (chr_code==2) print_esc("interactionmode") -@ @<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>= -if (m==2) cur_val=interaction; +@ @<Cases for `Fetch the |dead_cycles| or the |insert_penalties|'@>=; +else if (m==2) cur_val=interaction @ @<Declare \eTeX\ procedures for use...@>= static void new_interaction(void); -@ @<Cases for |alter_integer|@>= -if (c==2) +@ @<Cases for |alter_integer|@>=; +else if (c==2) {@+if ((cur_val < batch_mode)||(cur_val > error_stop_mode)) {@+print_err("Bad interaction mode"); @.Bad interaction mode@> @@ -27263,8 +27252,8 @@ delimiters to appear between \.{\\left} and \.{\\right}. primitive("middle", left_right, middle_noad); @!@:middle\_}{\.{\\middle} primitive@> -@ @<Cases of |left_right| for |print_cmd_chr|@>= -if (chr_code==middle_noad) print_esc("middle"); +@ @<Cases of |left_right| for |print_cmd_chr|@>=; +else if (chr_code==middle_noad) print_esc("middle") @ The |scan_tokens| feature of \eTeX\ defines the \.{\\scantokens} primitive. @@ -27273,11 +27262,11 @@ primitive. primitive("scantokens", input, 2); @!@:scan\_tokens\_}{\.{\\scantokens} primitive@> -@ @<Cases of |input| for |print_cmd_chr|@>= -if (chr_code==2) print_esc("scantokens"); +@ @<Cases of |input| for |print_cmd_chr|@>=; +else if (chr_code==2) print_esc("scantokens") -@ @<Cases for |input|@>= -if (cur_chr==2) pseudo_start(); +@ @<Cases for |input|@>=; +else if (cur_chr==2) 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 @@ -27403,8 +27392,8 @@ while (pseudo_files!=null) pseudo_close(); /*flush pseudo files*/ primitive("readline", read_to_cs, 1);@/ @!@:read\_line\_}{\.{\\readline} primitive@> -@ @<Cases of |read| for |print_cmd_chr|@>= -print_esc("readline"); +@ @<Cases of |read| for |print_cmd_chr|@>=; +else print_esc("readline") @ @<Handle \.{\\readline} and |goto done|@>= if (j==1) @@ -27479,9 +27468,9 @@ preceding the mandatory \.{\\endcsname} have been expanded). @<Cases for |conditional|@>= case if_cs_code: {@+n=get_avail();p=n; /*head of the list of characters*/ - do {get_x_token(); + @/do@+{get_x_token(); if (cur_cs==0) store_new_token(cur_tok); - } while (!(cur_cs!=0)); + }@+ while (!(cur_cs!=0)); if (cur_cmd!=end_cs_name) @<Complain about missing \.{\\endcsname}@>; @<Look up the characters of list |n| in the hash table, and set |cur_cs|@>; flush_list(n); @@ -27523,8 +27512,8 @@ or during \.{\\write}. primitive("protected", prefix, 8); @!@:protected\_}{\.{\\protected} primitive@> -@ @<Cases of |prefix| for |print_cmd_chr|@>= -if (chr_code==8) print_esc("protected"); +@ @<Cases of |prefix| for |print_cmd_chr|@>=; +else if (chr_code==8) print_esc("protected") @ The |get_x_or_protected| procedure is like |get_x_token| except that protected macros are not expanded. @@ -27762,7 +27751,7 @@ resume: if (s==expr_none) o=l;@+else o=int_val; found: @<Scan the next operator and set |o|@>; arith_error=b; @<Make sure that |f| is in the proper range@>; -switch (s) {@t\4@>@<Cases for evaluation of the current term@>@; +switch (s) {@<Cases for evaluation of the current term@>@; } /*there are no other cases*/ if (o > expr_sub) s=o;@+else@<Evaluate the current expression@>; b=arith_error; @@ -28423,12 +28412,12 @@ else{@+if (sa_index(q) < mu_val_limit) else if (sa_ptr(q)!=null) return; s=pointer_node_size; } -do {i=hex_dig4(sa_index(q));p=q;q=link(p);free_node(p, s); +@/do@+{i=hex_dig4(sa_index(q));p=q;q=link(p);free_node(p, s); if (q==null) /*the whole tree has been freed*/ {@+sa_root[i]=null;return; } delete_sa_ptr;s=index_node_size; /*node |q| is an index node*/ -} while (!(sa_used(q) > 0)); +}@+ while (!(sa_used(q) > 0)); } @ The |print_sa_num| procedure prints the register number corresponding @@ -28531,7 +28520,7 @@ if (l < 4) /*|q| is an index node*/ } else /*|q| is the node for a mark class*/ {@+switch (a) { - @t\4@>@<Cases for |do_marks|@>@; + @<Cases for |do_marks|@>@; } /*there are no other cases*/ if (sa_bot_mark(q)==null) if (sa_split_bot_mark(q)==null) {@+free_node(q, mark_class_node_size);q=null; @@ -28808,7 +28797,7 @@ at by |sa_chain| @<Declare \eTeX\ procedures for tr...@>= static void sa_restore(void) {@+pointer p; /*sparse array element*/ -do {p=sa_loc(sa_chain); +@/do@+{p=sa_loc(sa_chain); if (sa_lev(p)==level_one) {@+if (sa_index(p) >= dimen_val_limit) sa_destroy(sa_chain); #ifdef @!STAT @@ -28831,7 +28820,7 @@ delete_sa_ref(p); p=sa_chain;sa_chain=link(p); if (sa_index(p) < dimen_val_limit) free_node(p, word_node_size); else free_node(p, pointer_node_size); -} while (!(sa_chain==null)); +}@+ while (!(sa_chain==null)); } @ When reading \.{\\patterns} while \.{\\savinghyphcodes} is positive @@ -28852,8 +28841,8 @@ hyph_root=0;hyph_start=0; @ @<Store hyphenation codes for current language@>= {@+c=cur_lang;first_child=false;p=0; -do {q=p;p=trie_r[q]; -} while (!((p==0)||(c <= so(trie_c[p])))); +@/do@+{q=p;p=trie_r[q]; +}@+ while (!((p==0)||(c <= so(trie_c[p])))); if ((p==0)||(c < so(trie_c[p]))) @<Insert a new trie node between |q| and |p|, and make |p| point to it@>; q=p; /*now node |q| represents |cur_lang|*/ @@ -28931,9 +28920,9 @@ primitive("pagediscards", un_vbox, last_box_code);@/ primitive("splitdiscards", un_vbox, vsplit_code);@/ @!@:split\_discards\_}{\.{\\splitdiscards} primitive@> -@ @<Cases of |un_vbox| for |print_cmd_chr|@>= -if (chr_code==last_box_code) print_esc("pagediscards"); -else if (chr_code==vsplit_code) print_esc("splitdiscards"); +@ @<Cases of |un_vbox| for |print_cmd_chr|@>=; +else if (chr_code==last_box_code) print_esc("pagediscards"); +else if (chr_code==vsplit_code) print_esc("splitdiscards") @ @<Handle saved items and |goto done|@>= {@+link(tail)=disc_ptr[cur_chr];disc_ptr[cur_chr]=null; @@ -28993,7 +28982,7 @@ expand_depth_count=0; @* The extended features of \Prote. \Prote\ extends furthermore \eTeX\ i.e. \eTeX\ is thus required before adding \Prote\ own extensions. But if \eTeX\ mode has not -be enabled, the engine is still compatible with \TeX\ with no added +be enabled, the engine is still compatible with \TeX with no added primitive commands and with a modification of code---from \eTeX\ exclusively for now---that is sufficiently minor so that the engine still deserves the name \TeX. @@ -29288,7 +29277,7 @@ hash since |no_new_control_sequence| is |true|), but since it has the for a control sequence entered but never defined. @ @<Cases for |conditional|@>= -case if_primitive_code: {@+do get_token(); while (!(cur_tok!=space_token)); +case if_primitive_code: {@+@/do@+{get_token();}@+ while (!(cur_tok!=space_token)); if ((cur_cs!=0)&&(cur_cmd!=undefined_cs)&&(cur_cmd < call)) b=true;else b=false; } @+break; @@ -29650,7 +29639,7 @@ dependent. The information shall be set in |xchg_buffer|. @^system dependencies@> In this basic implementation, we set the string to the empty one by -simply setting |xchg_buffer_length| to~$0$. +simply setting |xchg_buffer_length| to $0$. @d get_file_mtime xchg_buffer_length=0 @@ -29727,10 +29716,10 @@ case file_dump_code: { FILE *f=fopen((char*)name_of_file0,"rb"); if (f!=NULL) {@+ fseek(f,k,SEEK_SET); - do {i=fgetc(f); if (i==EOF) break; + do@+{i=fgetc(f); if (i==EOF) break; dig[0]=i%16;dig[1]=i/16; print_the_digs(2);decr(l); - } while (!(feof(f)||(l==0))); + }@+ while (!(feof(f)||(l==0))); fclose(f); } } @+break; @@ -29830,7 +29819,7 @@ communicate with the routines. @ To obtain the MD5 hash signature of a file will need an external implementation, since the algorithm requires bitwise operation that -standard \PASCAL\ does not provide. So we do not bother to try. The +standard \PASCAL does not provide. So we do not bother to try. The present implementation returns nothing. @^system dependencies@> @@ -30015,7 +30004,7 @@ else{@+n=(n-1)*mpfract_one; } } -@ The |do {| loop here preserves the following invariant relations +@ The |@/do@+{| loop here preserves the following invariant relations between |f|, |p|, and~|q|: (i)~|0 <= p < q|; (ii)~$fq+p=2^k(q+p_0)$, where $k$ is an integer and $p_0$ is the original value of~$p$. @@ -30030,11 +30019,11 @@ in a register, not store it in memory. @<Compute $f=\lfloor 2^{28}(1+p/q)+{1\over2}\rfloor$@>= f=1; -do {be_careful=p-q;p=be_careful+p; +@/do@+{be_careful=p-q;p=be_careful+p; if (p >= 0) f=f+f+1; else{@+double(f);p=p+q; } -} while (!(f >= mpfract_one)); +}@+ while (!(f >= mpfract_one)); be_careful=p-q; if (be_careful+p >= 0) incr(f) @@ -30057,7 +30046,7 @@ else{@+n=f/mpfract_one;f=f%mpfract_one; } } f=f+mpfract_one; -@<Compute $p=\lfloor qf/2^{28}+{1\over2}\rfloor-q$@>@; +@<Compute $p=\lfloor qf/2^{28}+{1\over2}\rfloor-q$@>; be_careful=n-el_gordo; if (be_careful+p > 0) {@+arith_error=true;n=el_gordo-p; @@ -30082,12 +30071,12 @@ $f_0$ is the original value of~$f$; (ii)~$2^k\L f<2^{k+1}$. @<Compute $p=\lfloor qf/2^{28}+{1\over2}\rfloor-q$@>= p=mpfract_half; /*that's $2^{27}$; the invariants hold now with $k=28$*/ if (q < mpfract_four) - do {if (odd(f)) p=halfp(p+q);@+else p=halfp(p); + @/do@+{if (odd(f)) p=halfp(p+q);@+else p=halfp(p); f=halfp(f); - } while (!(f==1)); -else do {if (odd(f)) p=p+halfp(q-p);@+else p=halfp(p); + }@+ while (!(f==1)); +else@/do@+{if (odd(f)) p=p+halfp(q-p);@+else p=halfp(p); f=halfp(f); - } while (!(f==1)); + }@+ while (!(f==1)) @ There's an auxiliary array |randoms| that contains 55 pseudo-random fractions. Using the recurrence $x_n=(x_{n-55}-x_{n-31})\bmod 2^{28}$, @@ -30275,15 +30264,15 @@ can readily be obtained with the ratio method (Algorithm 3.4.1R in static scaled norm_rand(void) {@+int @!x, @!u, @!l; /*what the book would call $2^{16}X$, $2^{28}U$, and $-2^{24}\ln U$*/ -do { - do {next_random; +@/do@+{ + @/do@+{next_random; x=take_mpfract(112429, randoms[j_random]-mpfract_half); /*$2^{16}\sqrt{8/e}\approx 112428.82793$*/ next_random;u=randoms[j_random]; - } while (!(abs(x) < u)); + }@+ while (!(abs(x) < u)); x=make_mpfract(x, u); l=139548960-m_log(u); /*$2^{24}\cdot12\ln2\approx139548959.6165$*/ -} while (!(ab_vs_cd(1024, l, x, x) >= 0)); +}@+ while (!(ab_vs_cd(1024, l, x, x) >= 0)); return x; } @@ -31171,8 +31160,8 @@ if (option_no_empty_page && ((eject && penalty(p)>2*(eject_penalty)) || (page_contents==empty && !is_visible(p)))) { pointer r, prev_r = p; - loop@+{ - r =link(prev_r); + while (true) + { r =link(prev_r); if (r==null) return; else if (is_visible(r)) break; else if (type(r)==penalty_node && penalty(r)<=eject_penalty) @@ -32017,14 +32006,15 @@ static pointer new_setpage_node(uint8_t i, str_number n) for (p=link(prev_p); p!=null; prev_p=p,p=link(p)) if (setpage_id(p)==i) break; if (p==null) - @<Allocate a new |setpage_node| |p|@>@; + @<allocate a new |setpage_node| |p|@>@; else link(prev_p)=link(p); link(p)=link(setpage_head); link(setpage_head)=p; return p; } -@ @<Allocate a new |setpage_node| |p|@>= +@ +@<allocate a new |setpage_node| |p|@>= { p=get_node(setpage_node_size);type(p)=whatsit_node;subtype(p)=setpage_node; setpage_number(p)=max_ref[page_kind]=++max_page; setpage_id(p)=i; @@ -32111,7 +32101,7 @@ static void hint_open(void) output_file_name=make_name_string(); DBG(DBGBASIC,"Output file %s opened\n",(char *)name_of_file+1); } -@# + #define HITEX_VERSION "1.1" static void hput_definitions(); extern int option_global; @@ -32326,7 +32316,7 @@ but we will need it repeatedly in the function |hdef_param_node| and the overhea not warrant having the mapping in both directions. @<Hi\TeX\ variables@>= -static const int hmap_int[] ={@t\1\1@>@/ +static const int hmap_int[] ={@/ pretolerance_no, /* |pretolerance_code| 0 */ tolerance_no, /* |tolerance_code| 1 */ line_penalty_no, /* |line_penalty_code| 2 */ @@ -32369,7 +32359,7 @@ year_no, /* |year_code| 23 */ -1, /* |output_penalty_code| 39 */ -1, /* |max_dead_cycles_code| 40 */ hang_after_no, /* |hang_after_code| 41*/ -@t\2\2@> floating_penalty_no /* |floating_penalty_code| 42*/ +floating_penalty_no /* |floating_penalty_code| 42*/ }; @@ -32381,7 +32371,7 @@ hang_after_no, /* |hang_after_code| 41*/ if ( hmap_int[i]>=0) int_defined[hmap_int[i]]=int_par(i); max_ref[int_kind]=MAX_INT_DEFAULT; @ The function |hget_int_no| tries to allocate a predefined integer number; -if not successful, it returns~$-1$. +if not successful, it returns $-1$. @<Hi\TeX\ auxiliary routines@>= static int hget_int_no(int32_t n) @@ -32424,7 +32414,7 @@ We proceed as we did for integers, starting with the array that holds the define @<Hi\TeX\ variables@>= static scaled dimen_defined[0x100]={0}; @ @<Hi\TeX\ variables@>= -static const int hmap_dimen[] ={@t\1\1@>@/ +static const int hmap_dimen[] ={@/ -1, /* |par_indent_code| 0 */ -1, /* |math_surround_code| 1 */ line_skip_limit_no, /* |line_skip_limit_code| 2 */ @@ -32445,7 +32435,7 @@ static const int hmap_dimen[] ={@t\1\1@>@/ hang_indent_no, /* |hang_indent_code| 17 */ -1, /* |h_offset_code| 18 */ -1, /* |v_offset_code| 19 */ - @t\2\2@> emergency_stretch_no /* |emergency_stretch_code| 20 */ + emergency_stretch_no /* |emergency_stretch_code| 20 */ }; @ @<Fix definitions for dimension parameters@>= dimen_defined[zero_dimen_no]=0; @@ -32551,7 +32541,8 @@ glue specifications and often a simple comparison of pointers might suffice. @<Hi\TeX\ variables@>= static pointer glue_defined[0x100]; @ @<Hi\TeX\ variables@>= -static int hmap_glue[] ={@t\1\1@>@/ +static int hmap_glue[] ={ + line_skip_no, /* |line_skip_code| 0 */ baseline_skip_no, /* |baseline_skip_code| 1 */ -1, /* |par_skip_code| 2 */ @@ -32566,7 +32557,7 @@ split_top_skip_no, /* |split_top_skip_code| 10 */ tab_skip_no, /* |tab_skip_code| 11 */ -1, /* |space_skip_code| 12 */ -1, /* |xspace_skip_code| 13 */ -@t\2\2@> par_fill_skip_no /* |par_fill_skip_code| 14 */ +par_fill_skip_no /* |par_fill_skip_code| 14 */ }; @ @<Fix definitions for glue parameters@>= glue_defined[zero_skip_no]=zero_glue; incr(glue_ref_count(zero_glue)); @@ -32818,8 +32809,8 @@ static bool node_equal(pointer p, pointer q) } static bool list_equal(pointer p, pointer q) -{@+loop@+{ - if (p==q) return true; +{@+while (true) + { if (p==q) return true; if (p==null || q==null) return false; if (!node_equal(p,q)) return false; p=link(p);q=link(q); @@ -34397,7 +34388,7 @@ static const char *option_mfmode="ljfour", *option_dpi_str="600"; extern int option_compress; extern unsigned int debugflags; -static struct option long_options[] = {@t\1\1@>@/ +static struct option long_options[] = {@/ { "help", 0, 0, 0 },@/ { "version", 0, 0, 0 },@/ { "interaction", 1, 0, 0 },@/ @@ -34428,8 +34419,8 @@ static struct option long_options[] = {@t\1\1@>@/ { "hint-debug", 1, 0, 0 },@/ { "hint-debug-help", 0, 0, 0 },@/ #endif -@t\2\2@> { 0, 0, 0, 0 } @/ -}; + { 0, 0, 0, 0 }@+}@+; + @ Parsing the command line options is accomplished with the |parse_options| function which in turn uses the |getopt_long_only| @@ -34438,7 +34429,7 @@ function from the \CEE/ library. This function returns 0 and sets the the end of all options is reached. @<\TeX\ Live functions@>= static void parse_options (int argc, char *argv[]) -{@+ loop @+ { +{@+ while (true) { int option_index; int g = getopt_long_only (argc, argv, "+", long_options, &option_index); if (g==0) @@ -34488,7 +34479,7 @@ the option structure. #include <kpathsea/kpathsea.h> static int argument_is(struct option *opt, char * s) {@+ return STREQ(opt->name, s); @+} -#define ARGUMENT_IS(S) @[argument_is(long_options+option_index,S)@] +#define ARGUMENT_IS(S) argument_is(long_options+option_index,S) @ Now we can handle the first two options: @@ -35111,7 +35102,7 @@ last=first; while (optind < argc) input_add_str(argv[optind++]); loc=first; return (loc < last); -} +@+ } @ @<Forward declarations@>= static int input_command_line(void); @@ -35169,9 +35160,8 @@ static bool b_open_out(byte_file *f) /*open a binary file for output*/ {@+f->f=open_out((char *)name_of_file+1,"wb"); return f->f!=NULL && ferror(f->f)==0;@+ } -@# + #ifdef @!INIT -@+@t}\6\4\4{@> static bool w_open_out(word_file *f) /*open a word file for output*/ {@+f->f=open_out((char *)name_of_file+1,"wb"); return f->f!=NULL && ferror(f->f)==0;@+ @@ -35359,8 +35349,6 @@ static int get_md5_sum(int s, int file); @ The code that follows was taken from the \.{texmfmp.c} file of the \TeX\ Live distribution and slightly modified. -@s md5_byte_t int -@s md5_state_t int @<\TeX\ Live auxiliary functions@>= @@ -35419,17 +35407,17 @@ make_time_str(time_t t, bool utc) static void get_creation_date(void) { make_time_str(start_time,source_date_epoch!=NULL); } -@# -#ifdef WIN32 + /* static structure for file status set by |find_input_file| */ -@+@t}\6{@> +#ifdef WIN32 static struct _stat file_stat; -#define GET_FILE_STAT @[_stat(fname,&file_stat)@] +#define GET_FILE_STAT _stat(fname,&file_stat) #else static struct stat file_stat; -#define GET_FILE_STAT @[stat(fname,&file_stat)@] +#define GET_FILE_STAT stat(fname,&file_stat) #endif + static char* find_input_file(void) { char *fname; int r; diff --git a/Build/source/texk/web2c/luatexdir/luaffi/README b/Build/source/texk/web2c/luatexdir/luaffi/README index bff350f6f64..745ed379b96 100644 --- a/Build/source/texk/web2c/luatexdir/luaffi/README +++ b/Build/source/texk/web2c/luatexdir/luaffi/README @@ -12,7 +12,7 @@ The ffi module is available for: The ARM processor is currently not supported. There are subtle differences between this module and the one in luajitTeX -and we hope to be in sync around TeXLive 2018. +and we hope to be in sync around TeXLive 2025. Different OS can have different interfaces, for instance OS_WIN has not 'complex.h'. If you want portable code, stick to the most common concepts. diff --git a/Build/source/texk/web2c/luatexdir/luaffi/ffi.c b/Build/source/texk/web2c/luatexdir/luaffi/ffi.c index 6d3c197e48e..cbd57c260ea 100644 --- a/Build/source/texk/web2c/luatexdir/luaffi/ffi.c +++ b/Build/source/texk/web2c/luatexdir/luaffi/ffi.c @@ -3576,7 +3576,7 @@ int luaopen_ffi(lua_State *L) "\n" "The ARM processor is currently not supported. There are subtle\n" "differences between this module and the one in luajitTeX \n" -"and we hope to be in sync around TeXLive 2022.\n" +"and we hope to be in sync around TeXLive 2025.\n" "Different OS can have different interfaces,\n" "for instance OS_WIN has not 'complex.h'. If you want portable\n" "code, stick to the most common concepts.\n" diff --git a/Build/source/texk/web2c/man/ChangeLog b/Build/source/texk/web2c/man/ChangeLog index f82821f1847..b047bb6abf4 100644 --- a/Build/source/texk/web2c/man/ChangeLog +++ b/Build/source/texk/web2c/man/ChangeLog @@ -1,3 +1,7 @@ +2024-08-12 Andreas Scherer <https://ascherer.github.io> + + * ctwill.man: CWEB 4.12 release. + 2024-04-14 TANAKA Takuji <ttk@t-lab.opal.ne.jp> * Makefile.am: Remove eptex. diff --git a/Build/source/texk/web2c/man/ctwill.man b/Build/source/texk/web2c/man/ctwill.man index 50437193073..a30dcd6a0be 100644 --- a/Build/source/texk/web2c/man/ctwill.man +++ b/Build/source/texk/web2c/man/ctwill.man @@ -1,6 +1,6 @@ .\" Automatically generated by Pandoc .\" -.TH "CTWILL" "1" "March 10, 2024" "Web2c @VERSION@" "General Commands Manual" +.TH "CTWILL" "1" "August 12, 2024" "Web2c @VERSION@" "General Commands Manual" .SH NAME ctwill, ctwill-proofsort, ctwill-refsort, ctwill-twinx \- translate CWEB to TeX with mini-indexes @@ -122,7 +122,7 @@ The present incarnation of \f[B]ctwill\f[R] and its utilities tries hard to be a drop-in replacement for the original package. There are, however, a few differences worth noting: .IP \[bu] 2 -This version is based on the most recent version of CWEB (4.11). +This version is based on the most recent version of CWEB (4.12). .IP \[bu] 2 In TeX\ Live the utility programs are prefixed with \f[B]ctwill\-\f[R] and the macro files with \f[B]ct\f[R] for technical reasons. diff --git a/Build/source/texk/web2c/pdftexdir/ChangeLog b/Build/source/texk/web2c/pdftexdir/ChangeLog index 9fcf5a277d2..ee5e17bb9f3 100644 --- a/Build/source/texk/web2c/pdftexdir/ChangeLog +++ b/Build/source/texk/web2c/pdftexdir/ChangeLog @@ -1,3 +1,11 @@ +2024-08-04 Thanh Han The <hanthethanh@gmail.com> + + * pdftoepdf.cc (write_epdf): reversed sep and pdfkeyprefix. + +2024-07-26 Andreas Scherer <https://ascherer.github.io> + + * pdftex.ch: Prepare for compilation with gcc-14. + 2024-05-24 Thanh Han The <hanthethanh@gmail.com> * pdftex.web (pdf_ptex_use_underscore_code), @@ -5,7 +13,7 @@ (Put each ...): define it. (print_param): print it. (get_ptex_use_underscore): new fn to implement it. - (pdf_print_info): adjust Fullbanner prefix character. + (pdf_print_info): adjust Fullbanner prefix character. * pdftoepdf.cc (getptexuseunderscore): declare fn. (write_epdf): use it for FileName, PageNumber, InfoDict. diff --git a/Build/source/texk/web2c/pdftexdir/pdftex.ch b/Build/source/texk/web2c/pdftexdir/pdftex.ch index 0607f7f2f1f..a30a74c3376 100644 --- a/Build/source/texk/web2c/pdftexdir/pdftex.ch +++ b/Build/source/texk/web2c/pdftexdir/pdftex.ch @@ -179,7 +179,7 @@ pdf_font_type:=xmalloc_array(eight_bits, font_max); pdf_font_attr:=xmalloc_array(str_number, font_max); pdf_font_blink:=xmalloc_array(internal_font_number, font_max); pdf_font_elink:=xmalloc_array(internal_font_number, font_max); -pdf_font_has_space_char:=xmalloc_array(internal_font_number, font_max); +pdf_font_has_space_char:=xmalloc_array(boolean, font_max); pdf_font_stretch:=xmalloc_array(integer, font_max); pdf_font_shrink:=xmalloc_array(integer, font_max); pdf_font_step:=xmalloc_array(integer, font_max); @@ -298,7 +298,7 @@ pdf_font_type:=xmalloc_array(eight_bits,font_max); pdf_font_attr:=xmalloc_array(str_number,font_max); pdf_font_blink:=xmalloc_array(internal_font_number,font_max); pdf_font_elink:=xmalloc_array(internal_font_number,font_max); -pdf_font_has_space_char:=xmalloc_array(internal_font_number,font_max); +pdf_font_has_space_char:=xmalloc_array(boolean,font_max); pdf_font_stretch:=xmalloc_array(integer,font_max); pdf_font_shrink:=xmalloc_array(integer,font_max); pdf_font_step:=xmalloc_array(integer,font_max); diff --git a/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc b/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc index 238ed4dba5d..237bd6530c4 100644 --- a/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc +++ b/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc @@ -846,18 +846,18 @@ void write_epdf(void) // write additional information if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_FILENAME) == 0) { - pdf_printf("/%s%sFileName (%s)\n", sep, pdfkeyprefix, + pdf_printf("/%s%sFileName (%s)\n", pdfkeyprefix, sep, convertStringToPDFString(pdf_doc->file_name, strlen(pdf_doc->file_name))); } if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_PAGENUMBER) == 0) { - pdf_printf("/%s%sPageNumber %i\n", sep, pdfkeyprefix, (int) epdf_selected_page); + pdf_printf("/%s%sPageNumber %i\n", pdfkeyprefix, sep, (int) epdf_selected_page); } if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_INFODICT) == 0) { pdf_doc->doc->getDocInfoNF(&info); if (info.isRef()) { // the info dict must be indirect (PDF Ref p. 61) - pdf_printf("/%s%sInfoDict ", sep, pdfkeyprefix); + pdf_printf("/%s%sInfoDict ", pdfkeyprefix, sep); pdf_printf("%d 0 R\n", addOther(info.getRef())); } } diff --git a/Build/source/texk/web2c/pktogf.ch b/Build/source/texk/web2c/pktogf.ch index bd468f2a9de..1dc768e46e0 100644 --- a/Build/source/texk/web2c/pktogf.ch +++ b/Build/source/texk/web2c/pktogf.ch @@ -79,7 +79,7 @@ begin @<Labels...@>=final_end; @y @ This module is deleted, because it is only useful for -a non-local goto, which we don't use in C. +a non-local |goto|\unskip, which we don't use in C. @z % [6] Remove terminal_line_length, since there is no dialog, and diff --git a/Build/source/texk/web2c/pktype.ch b/Build/source/texk/web2c/pktype.ch index b5e64566529..df785ce8b26 100644 --- a/Build/source/texk/web2c/pktype.ch +++ b/Build/source/texk/web2c/pktype.ch @@ -65,7 +65,7 @@ begin @<Labels...@>=final_end; @y @ This module is deleted, because it is only useful for -a non-local |goto|, which we don't use in C. +a non-local |goto|\unskip, which we don't use in C. @z % [6] No need for |name_length| or |terminal_line_length|. Since these @@ -89,7 +89,7 @@ to the very end of the program with an error message. begin goto final_end; end; @y -@ We use a call to the external C exit to avoid a non-local |goto|. +@ We use a call to the external C exit to avoid a non-local |goto|\unskip. @d abort(#)==begin print_ln(#); uexit(1) end diff --git a/Build/source/texk/web2c/showstream.ch b/Build/source/texk/web2c/showstream.ch index d0347a795c4..17a6a70e401 100644 --- a/Build/source/texk/web2c/showstream.ch +++ b/Build/source/texk/web2c/showstream.ch @@ -72,7 +72,7 @@ show_lists_code: begin begin_diagnostic; show_activities; end; @y show_lists_code: - begin @<Adjust |selector| based on |show_stream|@> + begin @<Adjust |selector| based on |show_stream|@>@; begin_diagnostic; show_activities; end; @z @@ -132,13 +132,9 @@ While the other cases have separate blocks @ @<Show the current meaning of a token...@>= begin get_token; @y -@ @<Adjust |selector| based on |show_stream|@>= -if (show_stream>=0) and (show_stream<no_print) and write_open[show_stream] then - selector:=show_stream; - @ @<Show the current meaning of a token...@>= begin get_token; - @<Adjust |selector| based on |show_stream|@> + @<Adjust |selector| based on |show_stream|@>@; @z @x @@ -147,7 +143,7 @@ begin scan_register_num; fetch_box(p); begin_diagnostic; @y @ @<Show the current contents of a box@>= begin scan_register_num; fetch_box(p); -@<Adjust |selector| based on |show_stream|@> +@<Adjust |selector| based on |show_stream|@>@; begin_diagnostic; @z @@ -157,19 +153,29 @@ begin p:=the_toks; @y @ @<Show the current value of some parameter...@>= begin p:=the_toks; -@<Adjust |selector| based on |show_stream|@> +@<Adjust |selector| based on |show_stream|@>@; @z @x show_groups: begin begin_diagnostic; show_save_groups; @y -show_groups: begin @<Adjust |selector| based on |show_stream|@> +show_groups: begin @<Adjust |selector| based on |show_stream|@>@; begin_diagnostic; show_save_groups; @z @x show_ifs: begin begin_diagnostic; print_nl(""); print_ln; @y -show_ifs: begin @<Adjust |selector| based on |show_stream|@> +show_ifs: begin @<Adjust |selector| based on |show_stream|@>@; begin_diagnostic; print_nl(""); print_ln; @z + +@x +@* \[55] Index. +@y +@ @<Adjust |selector| based on |show_stream|@>= +if (show_stream>=0) and (show_stream<no_print) and write_open[show_stream] then + selector:=show_stream; + +@* \[55] Index. +@z diff --git a/Build/source/texk/web2c/weav-twill.ch b/Build/source/texk/web2c/weav-twill.ch index 17c02718758..0c556a098ba 100644 --- a/Build/source/texk/web2c/weav-twill.ch +++ b/Build/source/texk/web2c/weav-twill.ch @@ -51,9 +51,11 @@ Limbo. \def\title{TWILL for \TeX~Live} @z -@x 48c24 +@x 47c23 + \def\rheader{\mainfont Appendix D\hfil \contentspagenumber} \centerline{\titlefont The {\ttitlefont WEAVE} processor} @y + \def\rheader{\mainfont Appendix D${}'$\hfil \contentspagenumber} \centerline{\titlefont The {\ttitlefont TWILL} processor} @z |