texlive[61723] Build/source/texk/web2c/hitexdir: generating shorter

commits+mruckert at tug.org commits+mruckert at tug.org
Mon Jan 24 16:36:16 CET 2022


Revision: 61723
          http://tug.org/svn/texlive?view=revision&revision=61723
Author:   mruckert
Date:     2022-01-24 16:36:16 +0100 (Mon, 24 Jan 2022)
Log Message:
-----------
generating shorter source lines with web2w, 
eliminating strnlen, adding the HINT prefix to all extra primitives,
using the HINT version in the banner, fixing hyphenating first word

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/hitexdir/hiformat.hnt
    trunk/Build/source/texk/web2c/hitexdir/hiformat.pdf
    trunk/Build/source/texk/web2c/hitexdir/hiformat.w
    trunk/Build/source/texk/web2c/hitexdir/hilexer.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/Makefile
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/basetypes.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/format.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/main.c
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/main.h
    trunk/Build/source/texk/web2c/hitexdir/hintview/src/renderOGL.c
    trunk/Build/source/texk/web2c/hitexdir/hiparser.c
    trunk/Build/source/texk/web2c/hitexdir/hiparser.h
    trunk/Build/source/texk/web2c/hitexdir/hitex.w

Modified: trunk/Build/source/texk/web2c/hitexdir/hiformat.hnt
===================================================================
(Binary files differ)

Modified: trunk/Build/source/texk/web2c/hitexdir/hiformat.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/texk/web2c/hitexdir/hiformat.w
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiformat.w	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hiformat.w	2022-01-24 15:36:16 UTC (rev 61723)
@@ -47,9 +47,9 @@
 
 
 \def\setrevision$#1: #2 ${\gdef\lastrevision{#2}}
-\setrevision$Revision: 2636 $
+\setrevision$Revision: 2655 $
 \def\setdate$#1(#2) ${\gdef\lastdate{#2}}
-\setdate$Date: 2022-01-07 16:10:00 +0100 (Fri, 07 Jan 2022) $
+\setdate$Date: 2022-01-24 09:01:21 +0100 (Mon, 24 Jan 2022) $
 
 \null
 
@@ -6242,8 +6242,6 @@
 other useful information about the file.  The maximum size of the
 banner is 256 byte.
 @<hint macros@>=
-#define HINT_VERSION 1
-#define HINT_SUB_VERSION 3
 #define MAX_BANNER 256
 @
 
@@ -6253,12 +6251,13 @@
 
 @<common variables@>=
 char hbanner[MAX_BANNER+1];
+int hbanner_size=0;
 @
 
 @<function to check the banner@>=
 
 bool hcheck_banner(char *magic)
-{ int hbanner_size=0;
+{
   int v;
   char *t;
   t=hbanner;
@@ -6265,7 +6264,6 @@
   if (strncmp(magic,hbanner,4)!=0)
   {  MESSAGE("This is not a %s file\n",magic); return false; }
   else t+=4;
-  hbanner_size=(int)strnlen(hbanner,MAX_BANNER);
   if(hbanner[hbanner_size-1]!='\n')
   { MESSAGE("Banner exceeds maximum size=0x%x\n",MAX_BANNER); return false; }
   if (*t!=' ')
@@ -6297,12 +6295,13 @@
 \getcode
 @<get file functions@>=
 void hget_banner(void)
-{ int i;
-  for (i=0;i<MAX_BANNER && hpos<hend;i++)@/
-  { hbanner[i]=HGET8;
-    if (hbanner[i]=='\n') break;
-  } 
-  hbanner[++i]=0;
+{ hbanner_size=0;
+  while (hbanner_size<MAX_BANNER && hpos<hend)
+  { uint8_t c=HGET8;
+    hbanner[hbanner_size++]=c;
+    if (c=='\n') break;
+  }
+  hbanner[hbanner_size]=0;
 }
 @
 
@@ -6309,12 +6308,14 @@
 To read a long format file, we use the function |fgetc|.
 \readcode
 @<read the banner@>=
-{ int i,c;
-  for (i=0;i<MAX_BANNER && (c=fgetc(hin))!=EOF;i++)@/
-  { hbanner[i]=c;
-    if (hbanner[i]=='\n') break;
+{ hbanner_size=0;
+  while ( hbanner_size<MAX_BANNER)
+  { int c=fgetc(hin);
+    if (c==EOF) break;
+    hbanner[hbanner_size++]=c;
+    if (c=='\n') break;
   } 
-  hbanner[++i]=0;
+  hbanner[hbanner_size]=0;
 }
 @
 
@@ -9991,6 +9992,8 @@
 #if __SIZEOF_DOUBLE__!=8
 #error  @=float64 type must have size 8@>
 #endif
+#define HINT_VERSION 1
+#define HINT_SUB_VERSION 3
 #endif
 @
 

Modified: trunk/Build/source/texk/web2c/hitexdir/hilexer.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hilexer.c	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hilexer.c	2022-01-24 15:36:16 UTC (rev 61723)
@@ -1,6 +1,6 @@
-#line 1 "lexer.c"
+#line 2 "lexer.c"
 
-#line 3 "lexer.c"
+#line 4 "lexer.c"
 
 #define  YY_INT_ALIGNED short int
 
@@ -7,6 +7,7 @@
 /* A lexical scanner generated by flex */
 
 /* %not-for-header */
+
 /* %if-c-only */
 /* %if-not-reentrant */
 
@@ -16,8 +17,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 4
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -26,7 +27,7 @@
 /* %endif */
 
 /* %if-c-only */
-
+    
 /* %endif */
 
 /* %if-c-only */
@@ -108,10 +109,6 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#ifndef SIZE_MAX
-#define SIZE_MAX               (~(size_t)0)
-#endif
-
 #endif /* ! C99 */
 
 #endif /* ! FLEXINT_H */
@@ -118,29 +115,44 @@
 
 /* %endif */
 
-/* begin standard C++ headers. */
 /* %if-c++-only */
 /* %endif */
 
-/* TODO: this is always defined, so inline it */
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
 #define yyconst const
-
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yynoreturn
+#define yyconst
 #endif
 
 /* %not-for-header */
+
 /* Returned upon end-of-file. */
 #define YY_NULL 0
 /* %ok-for-header */
 
 /* %not-for-header */
-/* Promotes a possibly negative, possibly signed char to an
- *   integer in range [0..255] for use as an array index.
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
  */
-#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -155,6 +167,7 @@
  * definition of BEGIN.
  */
 #define BEGIN (yy_start) = 1 + 2 *
+
 /* Translate the current start state into a value that can be later handed
  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  * compatibility.
@@ -161,23 +174,18 @@
  */
 #define YY_START (((yy_start) - 1) / 2)
 #define YYSTATE YY_START
+
 /* Action number for EOF rule of a given start state. */
 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
 /* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
+#define YY_NEW_FILE yyrestart(yyin  )
+
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -195,7 +203,7 @@
 #endif
 
 /* %if-not-reentrant */
-extern int yyleng;
+extern yy_size_t yyleng;
 /* %endif */
 
 /* %if-c-only */
@@ -207,10 +215,10 @@
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
-    
+
     /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
      *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE yylex.
+     *       existing scanners that call yyless() from OUTSIDE yylex. 
      *       One obvious solution it to make yy_act a global. I tried that, and saw
      *       a 5% performance hit in a non-yylineno scanner, because yy_act is
      *       normally declared as a register variable-- so it is not worth it.
@@ -222,13 +230,6 @@
                     if ( yytext[yyl] == '\n' )\
                         --yylineno;\
             }while(0)
-    #define YY_LINENO_REWIND_TO(dst) \
-            do {\
-                const char *p;\
-                for ( p = yy_cp-1; p >= (dst); --p)\
-                    if ( *p == '\n' )\
-                        --yylineno;\
-            }while(0)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -243,6 +244,7 @@
 		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
 		} \
 	while ( 0 )
+
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -262,12 +264,12 @@
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	int yy_buf_size;
+	yy_size_t yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	int yy_n_chars;
+	yy_size_t yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -290,7 +292,7 @@
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
-
+    
 	/* Whether to try to fill the input buffer when we reach the
 	 * end of it.
 	 */
@@ -317,12 +319,13 @@
 
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 /* %if-not-reentrant */
 
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -337,6 +340,7 @@
 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                           : NULL)
+
 /* Same as previous macro, but useful when we know that the buffer stack is not
  * NULL or when we need an lvalue. For internal use only.
  */
@@ -346,13 +350,14 @@
 
 /* %if-not-reentrant */
 /* %not-for-header */
+
 /* yy_hold_char holds the character lost when yytext is formed. */
 static char yy_hold_char;
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int yyleng;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = NULL;
+static char *yy_c_buf_p = (char *) 0;
 static int yy_init = 0;		/* whether we need to initialize */
 static int yy_start = 0;	/* start state number */
 
@@ -364,48 +369,52 @@
 
 /* %endif */
 
-void yyrestart ( FILE *input_file  );
-void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
-void yy_delete_buffer ( YY_BUFFER_STATE b  );
-void yy_flush_buffer ( YY_BUFFER_STATE b  );
-void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
-void yypop_buffer_state ( void );
+void yyrestart (FILE *input_file  );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
+void yy_delete_buffer (YY_BUFFER_STATE b  );
+void yy_flush_buffer (YY_BUFFER_STATE b  );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void yypop_buffer_state (void );
 
-static void yyensure_buffer_stack ( void );
-static void yy_load_buffer_state ( void );
-static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
-#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
-YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
-YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
 
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+
 /* %endif */
 
-void *yyalloc ( yy_size_t  );
-void *yyrealloc ( void *, yy_size_t  );
-void yyfree ( void *  );
+void *yyalloc (yy_size_t  );
+void *yyrealloc (void *,yy_size_t  );
+void yyfree (void *  );
 
 #define yy_new_buffer yy_create_buffer
+
 #define yy_set_interactive(is_interactive) \
 	{ \
 	if ( ! YY_CURRENT_BUFFER ){ \
         yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
 	} \
 	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
 	}
+
 #define yy_set_bol(at_bol) \
 	{ \
 	if ( ! YY_CURRENT_BUFFER ){\
         yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
 	} \
 	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
 	}
+
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
 /* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
@@ -412,29 +421,26 @@
 /* Begin user sect3 */
 
 #define FLEX_DEBUG
-typedef flex_uint8_t YY_CHAR;
 
-FILE *yyin = NULL, *yyout = NULL;
+typedef unsigned char YY_CHAR;
 
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
 typedef int yy_state_type;
 
 extern int yylineno;
+
 int yylineno = 1;
 
 extern char *yytext;
-#ifdef yytext_ptr
-#undef yytext_ptr
-#endif
 #define yytext_ptr yytext
 
-/* %% [1.5] DFA */
-
 /* %if-c-only Standard (non-C++) definition */
 
-static yy_state_type yy_get_previous_state ( void );
-static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  );
-static int yy_get_next_buffer ( void );
-static void yynoreturn yy_fatal_error ( const char* msg  );
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
 
@@ -444,11 +450,12 @@
 #define YY_DO_BEFORE_ACTION \
 	(yytext_ptr) = yy_bp; \
 /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-	yyleng = (int) (yy_cp - yy_bp); \
+	yyleng = (size_t) (yy_cp - yy_bp); \
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
 	(yy_c_buf_p) = yy_cp;
+
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
 #define YY_NUM_RULES 126
 #define YY_END_OF_BUFFER 127
@@ -459,7 +466,7 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[371] =
+static yyconst flex_int16_t yy_accept[371] =
     {   0,
         0,    0,    0,    0,    0,    0,  127,  125,    6,    6,
        43,   47,   10,  125,  114,  125,    4,    4,    1,    2,
@@ -503,7 +510,7 @@
        92,  124,  124,   38,   93,  124,  117,  124,  119,    0
     } ;
 
-static const YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         4,    4,    2,    1,    1,    1,    1,    1,    1,    1,
@@ -535,7 +542,7 @@
        65,   65,   65,   65,   65
     } ;
 
-static const YY_CHAR yy_meta[66] =
+static yyconst flex_int32_t yy_meta[66] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -546,7 +553,7 @@
         4,    1,    1,    1,    4
     } ;
 
-static const flex_int16_t yy_base[376] =
+static yyconst flex_int16_t yy_base[376] =
     {   0,
         0,    0,   65,  130,  194,  258,  629,  630,  630,  630,
       630,  630,   74,   68,   64,   68,   77,   72,  630,  630,
@@ -591,7 +598,7 @@
       503,  507,  511,  514,   70
     } ;
 
-static const flex_int16_t yy_def[376] =
+static yyconst flex_int16_t yy_def[376] =
     {   0,
       370,    1,  371,  371,  372,  372,  370,  370,  370,  370,
       370,  370,  373,  374,  370,  370,  370,  370,  370,  370,
@@ -636,7 +643,7 @@
       370,  370,  370,  370,  370
     } ;
 
-static const flex_int16_t yy_nxt[696] =
+static yyconst flex_int16_t yy_nxt[696] =
     {   0,
         8,    9,   10,    9,    9,   11,   12,    8,   13,   14,
         8,   15,   16,   16,    8,   17,   18,   18,   19,   20,
@@ -717,7 +724,7 @@
 
     } ;
 
-static const flex_int16_t yy_chk[696] =
+static yyconst flex_int16_t yy_chk[696] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -799,7 +806,7 @@
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[127] =
+static yyconst flex_int32_t yy_rule_can_match_eol[127] =
     {   0,
 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
     1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -815,22 +822,22 @@
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[126] =
+static yyconst flex_int16_t yy_rule_linenum[126] =
     {   0,
-      171,  172,  173,  174,  175,  176,  177,  179,  181,  183,
-      185,  186,  187,  188,  189,  194,  195,  196,  197,  198,
-      199,  200,  201,  203,  205,  207,  208,  209,  210,  212,
-      213,  214,  216,  217,  218,  220,  221,  223,  225,  226,
-      227,  229,  230,  232,  233,  234,  236,  239,  241,  242,
-      244,  245,  246,  247,  248,  249,  250,  252,  253,  255,
-      257,  258,  259,  260,  261,  262,  263,  264,  265,  268,
-      270,  271,  272,  274,  275,  276,  277,  280,  281,  282,
-      284,  285,  286,  287,  288,  289,  290,  292,  293,  294,
-      295,  297,  299,  301,  303,  305,  307,  308,  310,  312,
+      170,  171,  172,  173,  174,  175,  176,  178,  180,  182,
+      184,  185,  186,  187,  188,  193,  194,  195,  196,  197,
+      198,  199,  200,  202,  204,  206,  207,  208,  209,  211,
+      212,  213,  215,  216,  217,  219,  220,  222,  224,  225,
+      226,  228,  229,  231,  232,  233,  235,  238,  240,  241,
+      243,  244,  245,  246,  247,  248,  249,  251,  252,  254,
+      256,  257,  258,  259,  260,  261,  262,  263,  264,  267,
+      269,  270,  271,  273,  274,  275,  276,  279,  280,  281,
+      283,  284,  285,  286,  287,  288,  289,  291,  292,  293,
+      294,  296,  298,  300,  302,  304,  306,  307,  309,  311,
 
-      313,  314,  315,  317,  319,  320,  321,  323,  325,  327,
-      328,  329,  330,  331,  333,  335,  337,  338,  340,  342,
-      344,  346,  348,  350,  351
+      312,  313,  314,  316,  318,  319,  320,  322,  324,  326,
+      327,  328,  329,  330,  332,  334,  336,  337,  339,  341,
+      343,  345,  347,  349,  350
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -842,9 +849,9 @@
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
 #line 1 "lexer.l"
-#line 2 "lexer.l"
-	/*511:*/
-	#line 10272 "format.w"
+/*511:*/
+#line 3 "lexer.l"
+	#line 10275 "format.w"
 	
 #include "hibasetypes.h"
 #include "hierror.h"
@@ -980,27 +987,25 @@
 	}
 	/*:61*/
 int yywrap(void){
-	#line 10283 "format.w"
+	#line 10286 "format.w"
 	return 1;}
 #ifdef _MSC_VER
 #pragma  warning( disable : 4267)
 #endif
 
-#line 989 "lexer.c"
 #define YY_NO_UNISTD_H 1
 #define YY_NO_INPUT 1
-#line 152 "lexer.l"
-	/*23:*/
-	/*:23*/	/*32:*/
+/*23:*/
+/*:23*/	/*32:*/
 
-	/*:32*/	/*39:*/
-	/*:39*/	/*41:*/
-	/*:41*/	/*43:*/
-	/*:43*/	/*45:*/
-	/*:45*/	/*149:*/
+/*:32*/	/*39:*/
+/*:39*/	/*41:*/
+/*:41*/	/*43:*/
+/*:43*/	/*45:*/
+/*:45*/	/*149:*/
 
-	/*:149*/
-#line 1003 "lexer.c"
+/*:149*/
+#line 1009 "lexer.c"
 
 #define INITIAL 0
 #define STR 1
@@ -1026,7 +1031,7 @@
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals ( void );
+static int yy_init_globals (void );
 
 /* %endif */
 /* %if-reentrant */
@@ -1036,31 +1041,31 @@
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int yylex_destroy ( void );
+int yylex_destroy (void );
 
-int yyget_debug ( void );
+int yyget_debug (void );
 
-void yyset_debug ( int debug_flag  );
+void yyset_debug (int debug_flag  );
 
-YY_EXTRA_TYPE yyget_extra ( void );
+YY_EXTRA_TYPE yyget_extra (void );
 
-void yyset_extra ( YY_EXTRA_TYPE user_defined  );
+void yyset_extra (YY_EXTRA_TYPE user_defined  );
 
-FILE *yyget_in ( void );
+FILE *yyget_in (void );
 
-void yyset_in  ( FILE * _in_str  );
+void yyset_in  (FILE * in_str  );
 
-FILE *yyget_out ( void );
+FILE *yyget_out (void );
 
-void yyset_out  ( FILE * _out_str  );
+void yyset_out  (FILE * out_str  );
 
-			int yyget_leng ( void );
+yy_size_t yyget_leng (void );
 
-char *yyget_text ( void );
+char *yyget_text (void );
 
-int yyget_lineno ( void );
+int yyget_lineno (void );
 
-void yyset_lineno ( int _line_number  );
+void yyset_lineno (int line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1071,35 +1076,34 @@
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int yywrap ( void );
+extern "C" int yywrap (void );
 #else
-extern int yywrap ( void );
+extern int yywrap (void );
 #endif
 #endif
 
 /* %not-for-header */
-#ifndef YY_NO_UNPUT
-    
-#endif
+
 /* %ok-for-header */
 
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy ( char *, const char *, int );
+static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen ( const char * );
+static int yy_flex_strlen (yyconst char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 #ifdef __cplusplus
-static int yyinput ( void );
+static int yyinput (void );
 #else
-static int input ( void );
+static int input (void );
 #endif
 /* %ok-for-header */
 
@@ -1112,20 +1116,15 @@
         static int yy_start_stack_depth = 0;
         static int *yy_start_stack = NULL;
     
-    static void yy_push_state ( int _new_state );
+    static void yy_push_state (int new_state );
     
-    static void yy_pop_state ( void );
+    static void yy_pop_state (void );
     
 /* %endif */
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1134,7 +1133,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1149,7 +1148,7 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		int n; \
+		size_t n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1162,7 +1161,7 @@
 	else \
 		{ \
 		errno=0; \
-		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
 			{ \
 			if( errno != EINTR) \
 				{ \
@@ -1203,9 +1202,11 @@
 
 /* %if-tables-serialization structures and prototypes */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %not-for-header */
+
 /* %tables-yydmap generated elements */
 /* %endif */
 /* end tables serialization structures and prototypes */
@@ -1236,7 +1237,7 @@
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
@@ -1244,14 +1245,22 @@
 	YY_USER_ACTION
 
 /* %not-for-header */
+
 /** The main scanner function which does all the work.
  */
 YY_DECL
 {
-	yy_state_type yy_current_state;
-	char *yy_cp, *yy_bp;
-	int yy_act;
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
     
+/* %% [7.0] user's declarations go here */
+#line 167 "lexer.l"
+
+
+	/*3:*/
+#line 1263 "lexer.c"
+
 	if ( !(yy_init) )
 		{
 		(yy_init) = 1;
@@ -1280,21 +1289,13 @@
 		if ( ! YY_CURRENT_BUFFER ) {
 			yyensure_buffer_stack ();
 			YY_CURRENT_BUFFER_LVALUE =
-				yy_create_buffer( yyin, YY_BUF_SIZE );
+				yy_create_buffer(yyin,YY_BUF_SIZE );
 		}
 
-		yy_load_buffer_state(  );
+		yy_load_buffer_state( );
 		}
 
-	{
-/* %% [7.0] user's declarations go here */
-#line 168 "lexer.l"
-
-
-	/*3:*/
-#line 1295 "lexer.c"
-
-	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
+	while ( 1 )		/* loops until end-of-file is reached */
 		{
 /* %% [8.0] yymore()-related code goes here */
 		yy_cp = (yy_c_buf_p);
@@ -1312,7 +1313,7 @@
 yy_match:
 		do
 			{
-			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
 			if ( yy_accept[yy_current_state] )
 				{
 				(yy_last_accepting_state) = yy_current_state;
@@ -1322,9 +1323,9 @@
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
 				if ( yy_current_state >= 371 )
-					yy_c = yy_meta[yy_c];
+					yy_c = yy_meta[(unsigned int) yy_c];
 				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
 		while ( yy_current_state != 370 );
@@ -1344,7 +1345,7 @@
 			int yyl;
 			for ( yyl = 0; yyl < yyleng; ++yyl )
 				if ( yytext[yyl] == '\n' )
-					
+					   
     yylineno++;
 ;
 			}
@@ -1380,84 +1381,84 @@
 
 case 1:
 YY_RULE_SETUP
-#line 171 "lexer.l"
+#line 170 "lexer.l"
 SCAN_START;return START;
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 172 "lexer.l"
+#line 171 "lexer.l"
 SCAN_END;return END;
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 173 "lexer.l"
+#line 172 "lexer.l"
 return GLYPH;
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 174 "lexer.l"
+#line 173 "lexer.l"
 SCAN_UDEC(yytext);return UNSIGNED;
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 175 "lexer.l"
+#line 174 "lexer.l"
 SCAN_UDEC(yytext+1);return REFERENCE;
 	YY_BREAK
 case 6:
 /* rule 6 can match eol */
 YY_RULE_SETUP
-#line 176 "lexer.l"
+#line 175 "lexer.l"
 ;
 	YY_BREAK
 case 7:
 /* rule 7 can match eol */
 YY_RULE_SETUP
-#line 177 "lexer.l"
+#line 176 "lexer.l"
 ;
 	YY_BREAK
 /*:3*/	/*24:*/
 case 8:
 YY_RULE_SETUP
-#line 179 "lexer.l"
+#line 178 "lexer.l"
 SCAN_HEX(yytext+2);return UNSIGNED;
 	YY_BREAK
 /*:24*/	/*27:*/
 case 9:
 YY_RULE_SETUP
-#line 181 "lexer.l"
+#line 180 "lexer.l"
 SCAN_DEC(yytext);return SIGNED;
 	YY_BREAK
 /*:27*/	/*34:*/
 case 10:
 YY_RULE_SETUP
-#line 183 "lexer.l"
+#line 182 "lexer.l"
 STR_START;BEGIN(STR);
 	YY_BREAK
 
 case 11:
 YY_RULE_SETUP
-#line 185 "lexer.l"
+#line 184 "lexer.l"
 STR_END;SCAN_STR;BEGIN(INITIAL);return STRING;
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 186 "lexer.l"
+#line 185 "lexer.l"
 STR_ADD('\'');
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 187 "lexer.l"
+#line 186 "lexer.l"
 STR_ADD(yytext[0]);
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 188 "lexer.l"
+#line 187 "lexer.l"
 RNG("String character",yytext[0],0x20,0x7E);
 	YY_BREAK
 case 15:
 /* rule 15 can match eol */
 YY_RULE_SETUP
-#line 189 "lexer.l"
+#line 188 "lexer.l"
 QUIT("Unterminated String in line %d",yylineno);
 	YY_BREAK
 
@@ -1464,328 +1465,328 @@
 /*:34*/	/*48:*/
 case 16:
 YY_RULE_SETUP
-#line 194 "lexer.l"
+#line 193 "lexer.l"
 STR_START;STR_PUT('\'');BEGIN(STR);
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 195 "lexer.l"
+#line 194 "lexer.l"
 SCAN_UTF8_1(yytext+1);return CHARCODE;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 196 "lexer.l"
+#line 195 "lexer.l"
 STR_START;STR_PUT(yytext[1]);STR_PUT('\'');BEGIN(STR);
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 197 "lexer.l"
+#line 196 "lexer.l"
 STR_START;STR_PUT('\'');STR_PUT('\'');BEGIN(STR);
 	YY_BREAK
 case 20:
 /* rule 20 can match eol */
 YY_RULE_SETUP
-#line 198 "lexer.l"
+#line 197 "lexer.l"
 SCAN_UTF8_1(yytext+1);return CHARCODE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 199 "lexer.l"
+#line 198 "lexer.l"
 SCAN_UTF8_2(yytext+1);return CHARCODE;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 200 "lexer.l"
+#line 199 "lexer.l"
 SCAN_UTF8_3(yytext+1);return CHARCODE;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 201 "lexer.l"
+#line 200 "lexer.l"
 SCAN_UTF8_4(yytext+1);return CHARCODE;
 	YY_BREAK
 /*:48*/	/*55:*/
 case 24:
 YY_RULE_SETUP
-#line 203 "lexer.l"
+#line 202 "lexer.l"
 SCAN_DECFLOAT;return FPNUM;
 	YY_BREAK
 /*:55*/	/*59:*/
 case 25:
 YY_RULE_SETUP
-#line 205 "lexer.l"
+#line 204 "lexer.l"
 SCAN_HEXFLOAT;return FPNUM;
 	YY_BREAK
 /*:59*/	/*80:*/
 case 26:
 YY_RULE_SETUP
-#line 207 "lexer.l"
+#line 206 "lexer.l"
 return DIMEN;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 208 "lexer.l"
+#line 207 "lexer.l"
 return PT;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 209 "lexer.l"
+#line 208 "lexer.l"
 return MM;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 210 "lexer.l"
+#line 209 "lexer.l"
 return INCH;
 	YY_BREAK
 /*:80*/	/*88:*/
 case 30:
 YY_RULE_SETUP
-#line 212 "lexer.l"
+#line 211 "lexer.l"
 return XDIMEN;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 213 "lexer.l"
+#line 212 "lexer.l"
 return H;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 214 "lexer.l"
+#line 213 "lexer.l"
 return V;
 	YY_BREAK
 /*:88*/	/*99:*/
 case 33:
 YY_RULE_SETUP
-#line 216 "lexer.l"
+#line 215 "lexer.l"
 return FIL;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 217 "lexer.l"
+#line 216 "lexer.l"
 return FILL;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 218 "lexer.l"
+#line 217 "lexer.l"
 return FILLL;
 	YY_BREAK
 /*:99*/	/*103:*/
 case 36:
 YY_RULE_SETUP
-#line 220 "lexer.l"
+#line 219 "lexer.l"
 return PENALTY;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 221 "lexer.l"
+#line 220 "lexer.l"
 return INTEGER;
 	YY_BREAK
 /*:103*/	/*109:*/
 case 38:
 YY_RULE_SETUP
-#line 223 "lexer.l"
+#line 222 "lexer.l"
 return LANGUAGE;
 	YY_BREAK
 /*:109*/	/*115:*/
 case 39:
 YY_RULE_SETUP
-#line 225 "lexer.l"
+#line 224 "lexer.l"
 return RULE;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 226 "lexer.l"
+#line 225 "lexer.l"
 return RUNNING;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 227 "lexer.l"
+#line 226 "lexer.l"
 return RUNNING;
 	YY_BREAK
 /*:115*/	/*124:*/
 case 42:
 YY_RULE_SETUP
-#line 229 "lexer.l"
+#line 228 "lexer.l"
 return KERN;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 230 "lexer.l"
+#line 229 "lexer.l"
 return EXPLICIT;
 	YY_BREAK
 /*:124*/	/*133:*/
 case 44:
 YY_RULE_SETUP
-#line 232 "lexer.l"
+#line 231 "lexer.l"
 return GLUE;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 233 "lexer.l"
+#line 232 "lexer.l"
 return PLUS;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 234 "lexer.l"
+#line 233 "lexer.l"
 return MINUS;
 	YY_BREAK
 /*:133*/	/*151:*/
 case 47:
 YY_RULE_SETUP
-#line 236 "lexer.l"
+#line 235 "lexer.l"
 SCAN_TXT_START;return TXT_START;
 	YY_BREAK
 
 case 48:
 YY_RULE_SETUP
-#line 239 "lexer.l"
+#line 238 "lexer.l"
 SCAN_TXT_END;return TXT_END;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 241 "lexer.l"
+#line 240 "lexer.l"
 SCAN_START;return START;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 242 "lexer.l"
+#line 241 "lexer.l"
 QUIT("> not allowed in text mode");
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 244 "lexer.l"
+#line 243 "lexer.l"
 yylval.u= '\\';return TXT_CC;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 245 "lexer.l"
+#line 244 "lexer.l"
 yylval.u= '"';return TXT_CC;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 246 "lexer.l"
+#line 245 "lexer.l"
 yylval.u= '<';return TXT_CC;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 247 "lexer.l"
+#line 246 "lexer.l"
 yylval.u= '>';return TXT_CC;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 248 "lexer.l"
+#line 247 "lexer.l"
 yylval.u= ' ';return TXT_CC;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 249 "lexer.l"
+#line 248 "lexer.l"
 yylval.u= '-';return TXT_CC;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 250 "lexer.l"
+#line 249 "lexer.l"
 return TXT_IGNORE;
 	YY_BREAK
 case 58:
 /* rule 58 can match eol */
 YY_RULE_SETUP
-#line 252 "lexer.l"
+#line 251 "lexer.l"
 return TXT_FONT_GLUE;
 	YY_BREAK
 case 59:
 /* rule 59 can match eol */
 YY_RULE_SETUP
-#line 253 "lexer.l"
+#line 252 "lexer.l"
 ;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 255 "lexer.l"
+#line 254 "lexer.l"
 yylval.u= yytext[1]-'0';return TXT_FONT;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 257 "lexer.l"
+#line 256 "lexer.l"
 SCAN_REF(font_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 258 "lexer.l"
+#line 257 "lexer.l"
 SCAN_REF(penalty_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 259 "lexer.l"
+#line 258 "lexer.l"
 SCAN_REF(kern_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 260 "lexer.l"
+#line 259 "lexer.l"
 SCAN_REF(ligature_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 261 "lexer.l"
+#line 260 "lexer.l"
 SCAN_REF(disc_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 262 "lexer.l"
+#line 261 "lexer.l"
 SCAN_REF(glue_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 263 "lexer.l"
+#line 262 "lexer.l"
 SCAN_REF(language_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 264 "lexer.l"
+#line 263 "lexer.l"
 SCAN_REF(rule_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 265 "lexer.l"
+#line 264 "lexer.l"
 SCAN_REF(image_kind);return TXT_GLOBAL;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 268 "lexer.l"
+#line 267 "lexer.l"
 SCAN_UDEC(yytext+2);return TXT_CC;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 270 "lexer.l"
+#line 269 "lexer.l"
 yylval.u= yytext[1]-'a';return TXT_LOCAL;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 271 "lexer.l"
+#line 270 "lexer.l"
 return TXT_FONT_GLUE;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 272 "lexer.l"
+#line 271 "lexer.l"
 return TXT_FONT_HYPHEN;
 	YY_BREAK
 case 74:
 /* rule 74 can match eol */
 YY_RULE_SETUP
-#line 274 "lexer.l"
+#line 273 "lexer.l"
 SCAN_UTF8_1(yytext);return TXT_CC;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 275 "lexer.l"
+#line 274 "lexer.l"
 SCAN_UTF8_2(yytext);return TXT_CC;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 276 "lexer.l"
+#line 275 "lexer.l"
 SCAN_UTF8_3(yytext);return TXT_CC;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 277 "lexer.l"
+#line 276 "lexer.l"
 SCAN_UTF8_4(yytext);return TXT_CC;
 	YY_BREAK
 
@@ -1792,274 +1793,274 @@
 /*:151*/	/*162:*/
 case 78:
 YY_RULE_SETUP
-#line 280 "lexer.l"
+#line 279 "lexer.l"
 return HBOX;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 281 "lexer.l"
+#line 280 "lexer.l"
 return VBOX;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 282 "lexer.l"
+#line 281 "lexer.l"
 return SHIFTED;
 	YY_BREAK
 /*:162*/	/*170:*/
 case 81:
 YY_RULE_SETUP
-#line 284 "lexer.l"
+#line 283 "lexer.l"
 return HPACK;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 285 "lexer.l"
+#line 284 "lexer.l"
 return HSET;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 286 "lexer.l"
+#line 285 "lexer.l"
 return VPACK;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 287 "lexer.l"
+#line 286 "lexer.l"
 return VSET;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 288 "lexer.l"
+#line 287 "lexer.l"
 return ADD;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 289 "lexer.l"
+#line 288 "lexer.l"
 return TO;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 290 "lexer.l"
+#line 289 "lexer.l"
 return DEPTH;
 	YY_BREAK
 /*:170*/	/*175:*/
 case 88:
 YY_RULE_SETUP
-#line 292 "lexer.l"
+#line 291 "lexer.l"
 return LEADERS;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 293 "lexer.l"
+#line 292 "lexer.l"
 return ALIGN;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 294 "lexer.l"
+#line 293 "lexer.l"
 return CENTER;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 295 "lexer.l"
+#line 294 "lexer.l"
 return EXPAND;
 	YY_BREAK
 /*:175*/	/*182:*/
 case 92:
 YY_RULE_SETUP
-#line 297 "lexer.l"
+#line 296 "lexer.l"
 return BASELINE;
 	YY_BREAK
 /*:182*/	/*189:*/
 case 93:
 YY_RULE_SETUP
-#line 299 "lexer.l"
+#line 298 "lexer.l"
 return LIGATURE;
 	YY_BREAK
 /*:189*/	/*197:*/
 case 94:
 YY_RULE_SETUP
-#line 301 "lexer.l"
+#line 300 "lexer.l"
 return DISC;
 	YY_BREAK
 /*:197*/	/*205:*/
 case 95:
 YY_RULE_SETUP
-#line 303 "lexer.l"
+#line 302 "lexer.l"
 return PAR;
 	YY_BREAK
 /*:205*/	/*210:*/
 case 96:
 YY_RULE_SETUP
-#line 305 "lexer.l"
+#line 304 "lexer.l"
 return MATH;
 	YY_BREAK
 /*:210*/	/*215:*/
 case 97:
 YY_RULE_SETUP
-#line 307 "lexer.l"
+#line 306 "lexer.l"
 return ON;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 308 "lexer.l"
+#line 307 "lexer.l"
 return OFF;
 	YY_BREAK
 /*:215*/	/*219:*/
 case 99:
 YY_RULE_SETUP
-#line 310 "lexer.l"
+#line 309 "lexer.l"
 return ADJUST;
 	YY_BREAK
 /*:219*/	/*223:*/
 case 100:
 YY_RULE_SETUP
-#line 312 "lexer.l"
+#line 311 "lexer.l"
 return TABLE;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 313 "lexer.l"
+#line 312 "lexer.l"
 return ITEM;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 314 "lexer.l"
+#line 313 "lexer.l"
 return ITEM;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 315 "lexer.l"
+#line 314 "lexer.l"
 return ITEM;
 	YY_BREAK
 /*:223*/	/*230:*/
 case 104:
 YY_RULE_SETUP
-#line 317 "lexer.l"
+#line 316 "lexer.l"
 return IMAGE;
 	YY_BREAK
 /*:230*/	/*247:*/
 case 105:
 YY_RULE_SETUP
-#line 319 "lexer.l"
+#line 318 "lexer.l"
 return LABEL;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 320 "lexer.l"
+#line 319 "lexer.l"
 return BOT;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 321 "lexer.l"
+#line 320 "lexer.l"
 return MID;
 	YY_BREAK
 /*:247*/	/*261:*/
 case 108:
 YY_RULE_SETUP
-#line 323 "lexer.l"
+#line 322 "lexer.l"
 return LINK;
 	YY_BREAK
 /*:261*/	/*271:*/
 case 109:
 YY_RULE_SETUP
-#line 325 "lexer.l"
+#line 324 "lexer.l"
 return OUTLINE;
 	YY_BREAK
 /*:271*/	/*278:*/
 case 110:
 YY_RULE_SETUP
-#line 327 "lexer.l"
+#line 326 "lexer.l"
 if(section_no==1)return STREAMDEF;else return STREAM;
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 328 "lexer.l"
+#line 327 "lexer.l"
 return FIRST;
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 329 "lexer.l"
+#line 328 "lexer.l"
 return LAST;
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 330 "lexer.l"
+#line 329 "lexer.l"
 return TOP;
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 331 "lexer.l"
+#line 330 "lexer.l"
 return NOREFERENCE;
 	YY_BREAK
 /*:278*/	/*288:*/
 case 115:
 YY_RULE_SETUP
-#line 333 "lexer.l"
+#line 332 "lexer.l"
 return PAGE;
 	YY_BREAK
 /*:288*/	/*296:*/
 case 116:
 YY_RULE_SETUP
-#line 335 "lexer.l"
+#line 334 "lexer.l"
 return RANGE;
 	YY_BREAK
 /*:296*/	/*323:*/
 case 117:
 YY_RULE_SETUP
-#line 337 "lexer.l"
+#line 336 "lexer.l"
 return DIRECTORY;
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 338 "lexer.l"
+#line 337 "lexer.l"
 return SECTION;
 	YY_BREAK
 /*:323*/	/*344:*/
 case 119:
 YY_RULE_SETUP
-#line 340 "lexer.l"
+#line 339 "lexer.l"
 return DEFINITIONS;
 	YY_BREAK
 /*:344*/	/*352:*/
 case 120:
 YY_RULE_SETUP
-#line 342 "lexer.l"
+#line 341 "lexer.l"
 return MAX;
 	YY_BREAK
 /*:352*/	/*367:*/
 case 121:
 YY_RULE_SETUP
-#line 344 "lexer.l"
+#line 343 "lexer.l"
 return PARAM;
 	YY_BREAK
 /*:367*/	/*376:*/
 case 122:
 YY_RULE_SETUP
-#line 346 "lexer.l"
+#line 345 "lexer.l"
 return FONT;
 	YY_BREAK
 /*:376*/	/*404:*/
 case 123:
 YY_RULE_SETUP
-#line 348 "lexer.l"
+#line 347 "lexer.l"
 return CONTENT;
 	YY_BREAK
 /*:404*/
 case 124:
 YY_RULE_SETUP
-#line 350 "lexer.l"
+#line 349 "lexer.l"
 QUIT("Unexpected keyword '%s' in line %d",yytext,yylineno);
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 351 "lexer.l"
+#line 350 "lexer.l"
 QUIT("Unexpected character '%c' (0x%02X) in line %d",yytext[0]>' '?yytext[0]:' ',yytext[0],yylineno);
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 353 "lexer.l"
+#line 352 "lexer.l"
 ECHO;
 	YY_BREAK
-#line 2062 "lexer.c"
+#line 2064 "lexer.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(STR):
 case YY_STATE_EOF(TXT):
@@ -2086,11 +2087,7 @@
 			 * back-up) that will match for the new input source.
 			 */
 			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-/* %if-c-only */
 			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
 			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
 			}
 
@@ -2145,7 +2142,7 @@
 				{
 				(yy_did_buffer_switch_on_eof) = 0;
 
-				if ( yywrap(  ) )
+				if ( yywrap( ) )
 					{
 					/* Note: because we've taken care in
 					 * yy_get_next_buffer() to have set up
@@ -2198,12 +2195,12 @@
 			"fatal flex scanner internal error--no action found" );
 	} /* end of action switch */
 		} /* end of scanning one token */
-	} /* end of user's declarations */
 } /* end of yylex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %endif */
@@ -2221,9 +2218,9 @@
 /* %if-c++-only */
 /* %endif */
 {
-    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	char *source = (yytext_ptr);
-	int number_to_move, i;
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
 	int ret_val;
 
 	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -2252,7 +2249,7 @@
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
@@ -2265,7 +2262,7 @@
 
 	else
 		{
-			int num_to_read =
+			yy_size_t num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -2279,7 +2276,7 @@
 
 			if ( b->yy_is_our_buffer )
 				{
-				int new_size = b->yy_buf_size * 2;
+				yy_size_t new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -2288,12 +2285,11 @@
 
 				b->yy_ch_buf = (char *)
 					/* Include room in for 2 EOB chars. */
-					yyrealloc( (void *) b->yy_ch_buf,
-							 (yy_size_t) (b->yy_buf_size + 2)  );
+					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
 				}
 			else
 				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = NULL;
+				b->yy_ch_buf = 0;
 
 			if ( ! b->yy_ch_buf )
 				YY_FATAL_ERROR(
@@ -2321,7 +2317,7 @@
 		if ( number_to_move == YY_MORE_ADJ )
 			{
 			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart( yyin  );
+			yyrestart(yyin  );
 			}
 
 		else
@@ -2335,15 +2331,12 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
 		/* Extend the array by 50%, plus the number we really need. */
-		int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
-			(void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-		/* "- 2" to take care of EOB's */
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
 	}
 
 	(yy_n_chars) += number_to_move;
@@ -2359,13 +2352,14 @@
 
 /* %if-c-only */
 /* %not-for-header */
+
     static yy_state_type yy_get_previous_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
-	yy_state_type yy_current_state;
-	char *yy_cp;
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
 	yy_current_state = (yy_start);
@@ -2373,7 +2367,7 @@
 	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
 		{
 /* %% [16.0] code to find the next state goes here */
-		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
 		if ( yy_accept[yy_current_state] )
 			{
 			(yy_last_accepting_state) = yy_current_state;
@@ -2383,9 +2377,9 @@
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
 			if ( yy_current_state >= 371 )
-				yy_c = yy_meta[yy_c];
+				yy_c = yy_meta[(unsigned int) yy_c];
 			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 		}
 
 	return yy_current_state;
@@ -2402,11 +2396,11 @@
 /* %if-c++-only */
 /* %endif */
 {
-	int yy_is_jam;
+	register int yy_is_jam;
     /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-	char *yy_cp = (yy_c_buf_p);
+	register char *yy_cp = (yy_c_buf_p);
 
-	YY_CHAR yy_c = 1;
+	register YY_CHAR yy_c = 1;
 	if ( yy_accept[yy_current_state] )
 		{
 		(yy_last_accepting_state) = yy_current_state;
@@ -2416,19 +2410,17 @@
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
 		if ( yy_current_state >= 371 )
-			yy_c = yy_meta[yy_c];
+			yy_c = yy_meta[(unsigned int) yy_c];
 		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 	yy_is_jam = (yy_current_state == 370);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
 
-#ifndef YY_NO_UNPUT
 /* %if-c-only */
 
 /* %endif */
-#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -2458,7 +2450,7 @@
 
 		else
 			{ /* need more input */
-			int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -2475,14 +2467,14 @@
 					 */
 
 					/* Reset buffer status. */
-					yyrestart( yyin );
+					yyrestart(yyin );
 
 					/*FALLTHROUGH*/
 
 				case EOB_ACT_END_OF_FILE:
 					{
-					if ( yywrap(  ) )
-						return 0;
+					if ( yywrap( ) )
+						return EOF;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -2506,7 +2498,7 @@
 
 /* %% [19.0] update BOL and yylineno */
 	if ( c == '\n' )
-		
+		   
     yylineno++;
 ;
 
@@ -2531,16 +2523,13 @@
 	if ( ! YY_CURRENT_BUFFER ){
         yyensure_buffer_stack ();
 		YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
+            yy_create_buffer(yyin,YY_BUF_SIZE );
 	}
 
-	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-	yy_load_buffer_state(  );
+	yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+	yy_load_buffer_state( );
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
  * 
@@ -2570,7 +2559,7 @@
 		}
 
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	yy_load_buffer_state(  );
+	yy_load_buffer_state( );
 
 	/* We don't actually know whether we did this switch during
 	 * EOF (yywrap()) processing, but the only time this flag
@@ -2588,11 +2577,7 @@
 {
     	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
 	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-/* %if-c-only */
 	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
 	(yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -2610,7 +2595,7 @@
 {
 	YY_BUFFER_STATE b;
     
-	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
@@ -2619,20 +2604,17 @@
 	/* yy_ch_buf has to be 2 characters longer than the size given because
 	 * we need to put in 2 end-of-buffer characters.
 	 */
-	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
+	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
 	if ( ! b->yy_ch_buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
 	b->yy_is_our_buffer = 1;
 
-	yy_init_buffer( b, file );
+	yy_init_buffer(b,file );
 
 	return b;
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Destroy the buffer.
  * @param b a buffer created with yy_create_buffer()
  * 
@@ -2651,9 +2633,9 @@
 		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
 	if ( b->yy_is_our_buffer )
-		yyfree( (void *) b->yy_ch_buf  );
+		yyfree((void *) b->yy_ch_buf  );
 
-	yyfree( (void *) b  );
+	yyfree((void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
@@ -2669,13 +2651,9 @@
 {
 	int oerrno = errno;
     
-	yy_flush_buffer( b );
+	yy_flush_buffer(b );
 
-/* %if-c-only */
 	b->yy_input_file = file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
 	b->yy_fill_buffer = 1;
 
     /* If b is the current buffer, then yy_init_buffer was _probably_
@@ -2725,7 +2703,7 @@
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
 	if ( b == YY_CURRENT_BUFFER )
-		yy_load_buffer_state(  );
+		yy_load_buffer_state( );
 }
 
 /* %if-c-or-c++ */
@@ -2761,7 +2739,7 @@
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
 	/* copied from yy_switch_to_buffer. */
-	yy_load_buffer_state(  );
+	yy_load_buffer_state( );
 	(yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -2786,7 +2764,7 @@
 		--(yy_buffer_stack_top);
 
 	if (YY_CURRENT_BUFFER) {
-		yy_load_buffer_state(  );
+		yy_load_buffer_state( );
 		(yy_did_buffer_switch_on_eof) = 1;
 	}
 }
@@ -2810,15 +2788,15 @@
 		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
 		 * immediate realloc on the next call.
          */
-      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+		num_to_alloc = 1;
 		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
 		if ( ! (yy_buffer_stack) )
 			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
+								  
 		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
+				
 		(yy_buffer_stack_max) = num_to_alloc;
 		(yy_buffer_stack_top) = 0;
 		return;
@@ -2827,7 +2805,7 @@
 	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
 		/* Increase the buffer to prepare for a possible push. */
-		yy_size_t grow_size = 8 /* arbitrary grow size */;
+		int grow_size = 8 /* arbitrary grow size */;
 
 		num_to_alloc = (yy_buffer_stack_max) + grow_size;
 		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
@@ -2849,7 +2827,7 @@
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object.
+ * @return the newly allocated buffer state object. 
  */
 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
@@ -2859,16 +2837,16 @@
 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
 		/* They forgot to leave room for the EOB's. */
-		return NULL;
+		return 0;
 
-	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
 
-	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
 	b->yy_buf_pos = b->yy_ch_buf = base;
 	b->yy_is_our_buffer = 0;
-	b->yy_input_file = NULL;
+	b->yy_input_file = 0;
 	b->yy_n_chars = b->yy_buf_size;
 	b->yy_is_interactive = 0;
 	b->yy_at_bol = 1;
@@ -2875,7 +2853,7 @@
 	b->yy_fill_buffer = 0;
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
-	yy_switch_to_buffer( b  );
+	yy_switch_to_buffer(b  );
 
 	return b;
 }
@@ -2890,10 +2868,10 @@
  * @note If you want to scan bytes that may contain NUL values, then use
  *       yy_scan_bytes() instead.
  */
-YY_BUFFER_STATE yy_scan_string (const char * yystr )
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 {
     
-	return yy_scan_bytes( yystr, (int) strlen(yystr) );
+	return yy_scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
@@ -2905,7 +2883,7 @@
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -2913,8 +2891,8 @@
 	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = (yy_size_t) (_yybytes_len + 2);
-	buf = (char *) yyalloc( n  );
+	n = _yybytes_len + 2;
+	buf = (char *) yyalloc(n  );
 	if ( ! buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
 
@@ -2923,7 +2901,7 @@
 
 	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-	b = yy_scan_buffer( buf, n );
+	b = yy_scan_buffer(buf,n );
 	if ( ! b )
 		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
 
@@ -2937,7 +2915,7 @@
 /* %endif */
 
 /* %if-c-only */
-    static void yy_push_state (int  _new_state )
+    static void yy_push_state (int  new_state )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2947,14 +2925,13 @@
 		yy_size_t new_size;
 
 		(yy_start_stack_depth) += YY_START_STACK_INCR;
-		new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int );
+		new_size = (yy_start_stack_depth) * sizeof( int );
 
 		if ( ! (yy_start_stack) )
-			(yy_start_stack) = (int *) yyalloc( new_size  );
+			(yy_start_stack) = (int *) yyalloc(new_size  );
 
 		else
-			(yy_start_stack) = (int *) yyrealloc(
-					(void *) (yy_start_stack), new_size  );
+			(yy_start_stack) = (int *) yyrealloc((void *) (yy_start_stack),new_size  );
 
 		if ( ! (yy_start_stack) )
 			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
@@ -2962,7 +2939,7 @@
 
 	(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
 
-	BEGIN(_new_state);
+	BEGIN(new_state);
 }
 
 /* %if-c-only */
@@ -2982,9 +2959,9 @@
 #endif
 
 /* %if-c-only */
-static void yynoreturn yy_fatal_error (const char* msg )
+static void yy_fatal_error (yyconst char* msg )
 {
-			fprintf( stderr, "%s\n", msg );
+    	(void) fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -3019,7 +2996,7 @@
  */
 int yyget_lineno  (void)
 {
-    
+        
     return yylineno;
 }
 
@@ -3042,7 +3019,7 @@
 /** Get the length of the current token.
  * 
  */
-int yyget_leng  (void)
+yy_size_t yyget_leng  (void)
 {
         return yyleng;
 }
@@ -3060,29 +3037,29 @@
 /* %endif */
 
 /** Set the current line number.
- * @param _line_number line number
+ * @param line_number
  * 
  */
-void yyset_lineno (int  _line_number )
+void yyset_lineno (int  line_number )
 {
     
-    yylineno = _line_number;
+    yylineno = line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param _in_str A readable stream.
+ * @param in_str A readable stream.
  * 
  * @see yy_switch_to_buffer
  */
-void yyset_in (FILE *  _in_str )
+void yyset_in (FILE *  in_str )
 {
-        yyin = _in_str ;
+        yyin = in_str ;
 }
 
-void yyset_out (FILE *  _out_str )
+void yyset_out (FILE *  out_str )
 {
-        yyout = _out_str ;
+        yyout = out_str ;
 }
 
 int yyget_debug  (void)
@@ -3090,9 +3067,9 @@
         return yy_flex_debug;
 }
 
-void yyset_debug (int  _bdebug )
+void yyset_debug (int  bdebug )
 {
-        yy_flex_debug = _bdebug ;
+        yy_flex_debug = bdebug ;
 }
 
 /* %endif */
@@ -3112,10 +3089,10 @@
     /* We do not touch yylineno unless the option is enabled. */
     yylineno =  1;
     
-    (yy_buffer_stack) = NULL;
+    (yy_buffer_stack) = 0;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = NULL;
+    (yy_c_buf_p) = (char *) 0;
     (yy_init) = 0;
     (yy_start) = 0;
 
@@ -3128,8 +3105,8 @@
     yyin = stdin;
     yyout = stdout;
 #else
-    yyin = NULL;
-    yyout = NULL;
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
@@ -3146,7 +3123,7 @@
     
     /* Pop the buffer stack, destroying each element. */
 	while(YY_CURRENT_BUFFER){
-		yy_delete_buffer( YY_CURRENT_BUFFER  );
+		yy_delete_buffer(YY_CURRENT_BUFFER  );
 		YY_CURRENT_BUFFER_LVALUE = NULL;
 		yypop_buffer_state();
 	}
@@ -3156,7 +3133,7 @@
 	(yy_buffer_stack) = NULL;
 
     /* Destroy the start condition stack. */
-        yyfree( (yy_start_stack)  );
+        yyfree((yy_start_stack)  );
         (yy_start_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
@@ -3174,10 +3151,9 @@
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, const char * s2, int n )
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-		
-	int i;
+	register int i;
 	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
 }
@@ -3184,9 +3160,9 @@
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (const char * s )
+static int yy_flex_strlen (yyconst char * s )
 {
-	int n;
+	register int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
@@ -3196,12 +3172,11 @@
 
 void *yyalloc (yy_size_t  size )
 {
-			return malloc(size);
+	return (void *) malloc( size );
 }
 
 void *yyrealloc  (void * ptr, yy_size_t  size )
 {
-		
 	/* The cast to (char *) in the following accommodates both
 	 * implementations that use char* generic pointers, and those
 	 * that use void* generic pointers.  It works with the latter
@@ -3209,12 +3184,12 @@
 	 * any pointer type to void*, and deal with argument conversions
 	 * as though doing an assignment.
 	 */
-	return realloc(ptr, size);
+	return (void *) realloc( (char *) ptr, size );
 }
 
 void yyfree (void * ptr )
 {
-			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
+	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -3224,7 +3199,8 @@
 
 /* %ok-for-header */
 
-#line 353 "lexer.l"
+#line 352 "lexer.l"
 
+
 	/*:511*/
 

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/Makefile
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/Makefile	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/Makefile	2022-01-24 15:36:16 UTC (rev 61723)
@@ -2,18 +2,36 @@
 CC = gcc
 CFLAGS = -g -Og -DDEBUG -Wall
 LDFLAGS = -g -Og
+#GL_DEFINES = -DGLEW_STATIC -DTW_NO_DIRECT3D -DTW_NO_LIB_PRAGMA -DTW_STATIC -D_CRT_SECURE_NO_WARNINGS
 
 FT_INCLUDES = -I/usr/include/freetype2
+GL_INCLUDES = $(FT_INCLUDES)
 
 
+HFILES =     hint.h htex.h format.h get.h basetypes.h error.h \
+	     hrender.h rendernative.h hfonts.h
+
+WFILES =     format.w hint.w htex.ch btex.w
+
+HINT_FILES = get.c hint.c tables.c htex.c hrender.c hfonts.c \
+	     $(HFILES) $(WFILES)
+
+
 OBJ=main.o  renderOGL.o get.o hint.o tables.o htex.o hrender.o hfonts.o
 
+ifeq (Msys,$(shell uname -o))
+LIBS= ../external/glfw-3.1.2/msys.build/src/libglfw3.a ../external/libglew.a  -lfreetype \
+	       -lm -lz
+#	 -ldl -lm -lX11 -lpthread -lXrandr -lXinerama -lXi -lXcursor -lGL -lz
+else
 LIBS= -lglfw -lGLEW -ldl -lfreetype -lX11 -lXrandr -lXinerama -lXi -lXcursor -lGL -lz -lpthread -lm 
+endif
 
 all: hintview
 
 .SUFFIXES:
 
+
 hint.o: hint.c
 	$(CC) $(CFLAGS) -Wno-unused-but-set-variable -o $@ -c $<
 
@@ -32,6 +50,13 @@
 hintview: $(OBJ)
 	$(CC) $(LDFLAGS)  $(OBJ) $(LIBS) -o $@ 
 
+SRC= $(OBJ:.o=.c) $(HFILES) main.h stb_image.h Makefile
+DIST_SRC = $(SRC:%=src/%)
+DIST_MAN = man/hintview.1
+
+hintview.tgz: 
+	tar -c -C .. --transform 's,^,hintview/,' -z -f $@ $(DIST_SRC) $(DIST_MAN) 
+
 BINDIR=/usr/local/bin
 MANDIR=/usr/local/man
 
@@ -40,7 +65,13 @@
 	install -t $(BINDIR) --mode=755 hintview
 	install -t $(MANDIR)/man1 --mode=644 ../man/hintview.1
 
+
+.PHONY: www
+www: hintview hintview.tgz
+	cp hintview hintview.tgz ../man/hintview.1 ../../www/linux/
+
 clean:
 	rm -f *.o *~ *.dvi *.log *.aux
-	rm -f hintview
+	rm -f hintview hintview.tgz
+	$(MAKE) -C ../../hint viewlinux || true
 

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/basetypes.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/basetypes.h	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/basetypes.h	2022-01-24 15:36:16 UTC (rev 61723)
@@ -1,5 +1,5 @@
 	/*503:*/
-	#line 9953 "format.w"
+	#line 9954 "format.w"
 
 #ifndef __BASETYPES_H__
 #define __BASETYPES_H__
@@ -41,5 +41,7 @@
 #if __SIZEOF_DOUBLE__!=8
 #error  float64 type must have size 8
 #endif
+#define HINT_VERSION 1
+#define HINT_SUB_VERSION 3
 #endif
 	/*:503*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/format.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/format.h	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/format.h	2022-01-24 15:36:16 UTC (rev 61723)
@@ -1,19 +1,19 @@
 	/*504:*/
-	#line 10003 "format.w"
+	#line 10006 "format.w"
 
 #ifndef _HFORMAT_H_
 #define _HFORMAT_H_
 	/*349:*/
-	#line 7407 "format.w"
+	#line 7408 "format.w"
 
 #define REF_RNG(K,N) if ((int)(N)>max_ref[K]) QUIT("Reference %d to %s out of range [0 - %d]",\
   (N),definition_name[K],max_ref[K])
 	/*:349*/	/*350:*/
-	#line 7421 "format.w"
+	#line 7422 "format.w"
 
 #define MAX_REF(K) ((K)==label_kind?0xFFFF:0xFF)
 	/*:350*/	/*423:*/
-	#line 8876 "format.w"
+	#line 8877 "format.w"
 
 #ifdef WIN32
 #define SIZE_F "0x%x"
@@ -32,10 +32,10 @@
 
 #define TAGERR(A) QUIT("Unknown tag [%s,%d] at " SIZE_F "\n",NAME(A),INFO(A),hpos-hstart)
 	/*:423*/
-	#line 10006 "format.w"
+	#line 10009 "format.w"
 
 	/*410:*/
-	#line 8614 "format.w"
+	#line 8615 "format.w"
 
 #define DBGNONE     0x0
 #define DBGBASIC    0x1
@@ -55,7 +55,7 @@
 #define DBGRENDER   0x4000
 #define DBGLABEL    0x8000
 	/*:410*/
-	#line 10007 "format.w"
+	#line 10010 "format.w"
 
 	/*12:*/
 	#line 635 "format.w"
@@ -97,15 +97,13 @@
 	/*:294*/	/*302:*/
 	#line 6244 "format.w"
 
-#define HINT_VERSION 1
-#define HINT_SUB_VERSION 3
 #define MAX_BANNER 256
 	/*:302*/	/*315:*/
-	#line 6447 "format.w"
+	#line 6448 "format.w"
 
 #define MAX_TAG_DISTANCE 32
 	/*:315*/
-	#line 10008 "format.w"
+	#line 10011 "format.w"
 
 	/*6:*/
 	#line 487 "format.w"
@@ -220,14 +218,14 @@
 uint32_t pos0;uint8_t f;
 }Label;
 	/*:242*/	/*373:*/
-	#line 7941 "format.w"
+	#line 7942 "format.w"
 
 #define MAX_FONT_PARAMS 11
 	/*:373*/
-	#line 10009 "format.w"
+	#line 10012 "format.w"
 
 	/*385:*/
-	#line 8176 "format.w"
+	#line 8177 "format.w"
 
 typedef enum{
 zero_int_no= 0,
@@ -256,7 +254,7 @@
 }Int_no;
 #define MAX_INT_DEFAULT floating_penalty_no
 	/*:385*/	/*387:*/
-	#line 8249 "format.w"
+	#line 8250 "format.w"
 
 typedef enum{
 zero_dimen_no= 0,
@@ -272,7 +270,7 @@
 }Dimen_no;
 #define MAX_DIMEN_DEFAULT math_quad_no
 	/*:387*/	/*389:*/
-	#line 8294 "format.w"
+	#line 8295 "format.w"
 
 typedef enum{
 zero_xdimen_no= 0,
@@ -281,7 +279,7 @@
 }Xdimen_no;
 #define MAX_XDIMEN_DEFAULT vsize_xdimen_no
 	/*:389*/	/*391:*/
-	#line 8318 "format.w"
+	#line 8319 "format.w"
 
 typedef enum{
 zero_skip_no= 0,
@@ -302,7 +300,7 @@
 }Glue_no;
 #define MAX_GLUE_DEFAULT par_fill_skip_no
 	/*:391*/	/*393:*/
-	#line 8404 "format.w"
+	#line 8405 "format.w"
 
 typedef enum{
 zero_baseline_no= 0
@@ -309,7 +307,7 @@
 }Baseline_no;
 #define MAX_BASELINE_DEFAULT zero_baseline_no
 	/*:393*/	/*395:*/
-	#line 8429 "format.w"
+	#line 8430 "format.w"
 
 typedef enum{
 zero_label_no= 0
@@ -316,7 +314,7 @@
 }Label_no;
 #define MAX_LABEL_DEFAULT zero_label_no
 	/*:395*/	/*397:*/
-	#line 8443 "format.w"
+	#line 8444 "format.w"
 
 typedef enum{
 zero_stream_no= 0
@@ -323,7 +321,7 @@
 }Stream_no;
 #define MAX_STREAM_DEFAULT zero_stream_no
 	/*:397*/	/*399:*/
-	#line 8459 "format.w"
+	#line 8460 "format.w"
 
 typedef enum{
 zero_page_no= 0
@@ -330,7 +328,7 @@
 }Page_no;
 #define MAX_PAGE_DEFAULT zero_page_no
 	/*:399*/	/*401:*/
-	#line 8476 "format.w"
+	#line 8477 "format.w"
 
 typedef enum{
 zero_range_no= 0
@@ -337,7 +335,7 @@
 }Range_no;
 #define MAX_RANGE_DEFAULT zero_range_no
 	/*:401*/
-	#line 10010 "format.w"
+	#line 10013 "format.w"
 
 
 extern const char*content_name[32];

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.c	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.c	2022-01-24 15:36:16 UTC (rev 61723)
@@ -1,5 +1,5 @@
 	/*508:*/
-	#line 10150 "format.w"
+	#line 10153 "format.w"
 
 #include "basetypes.h"
 #include <string.h>
@@ -25,15 +25,16 @@
 int next_range= 1,max_range;
 int*page_on;
 	/*:292*/	/*303:*/
-	#line 6254 "format.w"
+	#line 6252 "format.w"
 
 char hbanner[MAX_BANNER+1];
+int hbanner_size= 0;
 	/*:303*/	/*310:*/
-	#line 6392 "format.w"
+	#line 6393 "format.w"
 
 uint8_t*hpos= NULL,*hstart= NULL,*hend= NULL,*hpos0= NULL;
 	/*:310*/	/*316:*/
-	#line 6473 "format.w"
+	#line 6474 "format.w"
 
 char*hin_name= NULL;
 uint64_t hin_size= 0;
@@ -40,11 +41,11 @@
 uint8_t*hin_addr= NULL;
 uint64_t hin_time= 0;
 	/*:316*/	/*372:*/
-	#line 7937 "format.w"
+	#line 7938 "format.w"
 
 char**hfont_name;
 	/*:372*/	/*411:*/
-	#line 8637 "format.w"
+	#line 8638 "format.w"
 
 unsigned int debugflags= DBGNONE;
 int option_utf8= false;
@@ -56,15 +57,15 @@
 char*stem_name= NULL;
 int stem_length= 0;
 	/*:411*/	/*414:*/
-	#line 8771 "format.w"
+	#line 8772 "format.w"
 
 FILE*hin= NULL,*hout= NULL,*hlog= NULL;
 	/*:414*/
-	#line 10163 "format.w"
+	#line 10166 "format.w"
 
 
 	/*317:*/
-	#line 6480 "format.w"
+	#line 6481 "format.w"
 
 #ifndef USE_MMAP
 void hget_unmap(void)
@@ -158,14 +159,14 @@
 #endif
 
 	/*:317*/
-	#line 10165 "format.w"
+	#line 10168 "format.w"
 
 	/*304:*/
-	#line 6258 "format.w"
+	#line 6257 "format.w"
 
 
 bool hcheck_banner(char*magic)
-{int hbanner_size= 0;
+{
 int v;
 char*t;
 t= hbanner;
@@ -172,7 +173,6 @@
 if(strncmp(magic,hbanner,4)!=0)
 {MESSAGE("This is not a %s file\n",magic);return false;}
 else t+= 4;
-hbanner_size= (int)strnlen(hbanner,MAX_BANNER);
 if(hbanner[hbanner_size-1]!='\n')
 {MESSAGE("Banner exceeds maximum size=0x%x\n",MAX_BANNER);return false;}
 if(*t!=' ')
@@ -194,10 +194,10 @@
 return true;
 }
 	/*:304*/
-	#line 10166 "format.w"
+	#line 10169 "format.w"
 
 	/*326:*/
-	#line 6813 "format.w"
+	#line 6814 "format.w"
 
 Entry*dir= NULL;
 uint16_t section_no,max_section_no;
@@ -209,7 +209,7 @@
 dir[0].section_no= 0;dir[1].section_no= 1;dir[2].section_no= 2;
 }
 	/*:326*/	/*327:*/
-	#line 6826 "format.w"
+	#line 6827 "format.w"
 
 void hset_entry(Entry*e,uint16_t i,uint32_t size,uint32_t xsize,char*file_name)
 {e->section_no= i;
@@ -221,22 +221,23 @@
 DBG(DBGDIR,"Creating entry %d: \"%s\" size=0x%x xsize=0x%x\n",i,file_name,size,xsize);
 }
 	/*:327*/
-	#line 10167 "format.w"
+	#line 10170 "format.w"
 
 
 	/*305:*/
-	#line 6298 "format.w"
+	#line 6296 "format.w"
 
 void hget_banner(void)
-{int i;
-for(i= 0;i<MAX_BANNER&&hpos<hend;i++)
-{hbanner[i]= HGET8;
-if(hbanner[i]=='\n')break;
+{hbanner_size= 0;
+while(hbanner_size<MAX_BANNER&&hpos<hend)
+{uint8_t c= HGET8;
+hbanner[hbanner_size++]= c;
+if(c=='\n')break;
 }
-hbanner[++i]= 0;
+hbanner[hbanner_size]= 0;
 }
 	/*:305*/	/*318:*/
-	#line 6585 "format.w"
+	#line 6586 "format.w"
 
 
 static void hdecompress(uint16_t n)
@@ -273,7 +274,7 @@
 hend= hstart+dir[n].xsize;
 }
 	/*:318*/	/*320:*/
-	#line 6673 "format.w"
+	#line 6674 "format.w"
 
 void hget_section(uint16_t n)
 {DBG(DBGDIR,"Reading section %d\n",n);
@@ -289,7 +290,7 @@
 }
 }
 	/*:320*/	/*337:*/
-	#line 7051 "format.w"
+	#line 7052 "format.w"
 
 void hget_entry(Entry*e)
 {	/*15:*/
@@ -300,7 +301,7 @@
 if(hpos>=hend)QUIT("Attempt to read a start byte at the end of the section");
 HGETTAG(a);
 	/*:15*/
-	#line 7053 "format.w"
+	#line 7054 "format.w"
 
 DBG(DBGDIR,"Reading directory entry\n");
 switch(a)
@@ -322,11 +323,11 @@
 QUIT("Tag mismatch [%s,%d]!=[%s,%d] at 0x%x to "SIZE_F"\n",
 NAME(a),INFO(a),NAME(z),INFO(z),node_pos,hpos-hstart-1);
 	/*:16*/
-	#line 7066 "format.w"
+	#line 7067 "format.w"
 
 }
 	/*:337*/	/*338:*/
-	#line 7083 "format.w"
+	#line 7084 "format.w"
 
 static void hget_root(Entry*root)
 {DBG(DBGDIR,"Root entry at "SIZE_F"\n",hpos-hstart);
@@ -362,7 +363,7 @@
 }
 
 	/*:338*/	/*356:*/
-	#line 7499 "format.w"
+	#line 7500 "format.w"
 
 void hget_max_definitions(void)
 {Kind k;
@@ -374,7 +375,7 @@
 if(hpos>=hend)QUIT("Attempt to read a start byte at the end of the section");
 HGETTAG(a);
 	/*:15*/
-	#line 7502 "format.w"
+	#line 7503 "format.w"
 
 if(a!=TAG(list_kind,0))QUIT("Start of maximum list expected");
 for(k= 0;k<32;k++)max_ref[k]= max_default[k];max_outline= -1;
@@ -395,7 +396,7 @@
 case TAG(outline_kind,b101):max_outline= n;
 DBG(DBGDEF|DBGLABEL,"max(outline) = %d\n",max_outline);break;
 	/*:238*/
-	#line 7514 "format.w"
+	#line 7515 "format.w"
 
 default:
 if(max_fixed[k]>max_default[k])
@@ -413,13 +414,13 @@
 QUIT("Tag mismatch [%s,%d]!=[%s,%d] at 0x%x to "SIZE_F"\n",
 NAME(a),INFO(a),NAME(z),INFO(z),node_pos,hpos-hstart-1);
 	/*:16*/
-	#line 7523 "format.w"
+	#line 7524 "format.w"
 
 }
 if(INFO(a)!=0)QUIT("End of maximum list with info %d",INFO(a));
 }
 	/*:356*/
-	#line 10169 "format.w"
+	#line 10172 "format.w"
 
 	/*52:*/
 	#line 1228 "format.w"
@@ -509,10 +510,10 @@
 }
 }
 	/*:145*/
-	#line 10170 "format.w"
+	#line 10173 "format.w"
 
 	/*426:*/
-	#line 8943 "format.w"
+	#line 8944 "format.w"
 
 uint32_t hff_list_pos= 0,hff_list_size= 0;
 uint8_t hff_tag;
@@ -532,7 +533,7 @@
 }
 else if(hff_tag<=TAG(param_kind,5))
 	/*428:*/
-	#line 8988 "format.w"
+	#line 8989 "format.w"
 
 switch(INFO(hff_tag)){
 case 1:hff_list_pos= hpos-hstart+1;hff_list_size= 0;hpos= hpos+2;return;
@@ -542,12 +543,12 @@
 case 5:hpos++;HGET32(hff_list_size);hff_list_pos= hpos-hstart+1;hpos= hpos+1+hff_list_size+1+4+1;return;
 }
 	/*:428*/
-	#line 8961 "format.w"
+	#line 8962 "format.w"
 
 TAGERR(hff_tag);
 }
 	/*:426*/	/*457:*/
-	#line 9396 "format.w"
+	#line 9397 "format.w"
 
 float32_t hteg_float32(void)
 {union{float32_t d;uint32_t bits;}u;
@@ -555,7 +556,7 @@
 return u.d;
 }
 	/*:457*/	/*495:*/
-	#line 9824 "format.w"
+	#line 9825 "format.w"
 
 void hteg_size_boundary(Info info)
 {uint32_t n;
@@ -578,7 +579,7 @@
 
 void hteg_list(List*l)
 {	/*454:*/
-	#line 9368 "format.w"
+	#line 9369 "format.w"
 
 uint8_t a,z;
 uint32_t node_pos= hpos-hstart;
@@ -585,7 +586,7 @@
 if(hpos<=hstart)return;
 HTEGTAG(z);
 	/*:454*/
-	#line 9845 "format.w"
+	#line 9846 "format.w"
 
 if(KIND(z)!=list_kind&&KIND(z)!=text_kind&&KIND(z)!=param_kind)
 QUIT("List expected at 0x%x",(uint32_t)(hpos-hstart));
@@ -601,13 +602,13 @@
 if(s!=l->s)QUIT("List sizes at "SIZE_F" and 0x%x do not match 0x%x != 0x%x",
 hpos-hstart,node_pos-1,s,l->s);
 	/*455:*/
-	#line 9375 "format.w"
+	#line 9376 "format.w"
 
 HTEGTAG(a);
 if(a!=z)QUIT("Tag mismatch [%s,%d]!=[%s,%d] at "SIZE_F" to 0x%x\n",NAME(a),INFO(a),NAME(z),INFO(z),
 hpos-hstart,node_pos-1);
 	/*:455*/
-	#line 9859 "format.w"
+	#line 9860 "format.w"
 
 }
 }
@@ -619,6 +620,6 @@
 
 
 	/*:495*/
-	#line 10171 "format.w"
+	#line 10174 "format.w"
 
 	/*:508*/

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.h	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/get.h	2022-01-24 15:36:16 UTC (rev 61723)
@@ -1,5 +1,5 @@
 	/*507:*/
-	#line 10105 "format.w"
+	#line 10108 "format.w"
 
 	/*1:*/
 	#line 328 "format.w"
@@ -71,10 +71,10 @@
 typedef
 struct{uint8_t pg;uint32_t pos;bool on;int link;}RangePos;
 	/*:291*/
-	#line 10106 "format.w"
+	#line 10109 "format.w"
 
 	/*325:*/
-	#line 6799 "format.w"
+	#line 6800 "format.w"
 
 typedef struct{
 uint64_t pos;
@@ -85,7 +85,7 @@
 uint32_t bsize;
 }Entry;
 	/*:325*/
-	#line 10107 "format.w"
+	#line 10110 "format.w"
 
 	/*37:*/
 	#line 1062 "format.w"
@@ -104,7 +104,7 @@
       if (s!=(L).s) \
       QUIT("List sizes at 0x%x and " SIZE_F " do not match 0x%x != 0x%x",node_pos+1,hpos-hstart-I-1,(L).s,s);}
 	/*:146*/	/*311:*/
-	#line 6400 "format.w"
+	#line 6401 "format.w"
 
 #define HGET_ERROR  QUIT("HGET overrun in section %d at " SIZE_F "\n",section_no,hpos-hstart)
 #define HEND   ((hpos<=hend)?0:(HGET_ERROR,0))
@@ -115,7 +115,7 @@
 #define HGET32(X) ((X)= (hpos[0]<<24)+(hpos[1]<<16)+(hpos[2]<<8)+hpos[3],hpos+= 4,HEND)
 #define HGETTAG(A) A= HGET8,DBGTAG(A,hpos-1)
 	/*:311*/	/*336:*/
-	#line 7027 "format.w"
+	#line 7028 "format.w"
 
 #define HGET_SIZE(I) \
   if ((I)&b100) { \
@@ -139,7 +139,7 @@
   hset_entry(&(E),i,s,xs,file_name); \
 }
 	/*:336*/	/*456:*/
-	#line 9383 "format.w"
+	#line 9384 "format.w"
 
 #define HBACK(X) ((hpos-(X)<hstart)?(QUIT("HTEG underflow\n"),NULL):(hpos-= (X)))
 
@@ -149,7 +149,7 @@
 #define HTEG32(X) (HBACK(4),(X)= (hpos[0]<<24)+(hpos[1]<<16)+(hpos[2]<<8)+hpos[3])
 #define HTEGTAG(X) X= HTEG8,DBGTAG(X,hpos)
 	/*:456*/
-	#line 10108 "format.w"
+	#line 10111 "format.w"
 
 
 extern Entry*dir;

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/main.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/main.c	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/main.c	2022-01-24 15:36:16 UTC (rev 61723)
@@ -1,3 +1,30 @@
+/* This file is part of HINT
+ * Copyright 2017-2021 Martin Ruckert, Hochschule Muenchen, Lothstrasse 64, 80336 Muenchen
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ * OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holders shall
+ * not be used in advertising or otherwise to promote the sale, use or other
+ * dealings in this Software without prior written authorization from the
+ * copyright holders.
+ */
 #include <stdio.h>
 #include <stdlib.h>
 #include <setjmp.h>

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/main.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/main.h	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/main.h	2022-01-24 15:36:16 UTC (rev 61723)
@@ -1,3 +1,30 @@
+/* This file is part of HINT
+ * Copyright 2017-2021 Martin Ruckert, Hochschule Muenchen, Lothstrasse 64, 80336 Muenchen
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ * OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holders shall
+ * not be used in advertising or otherwise to promote the sale, use or other
+ * dealings in this Software without prior written authorization from the
+ * copyright holders.
+ */
 #ifndef MAIN_H
 #define MAIN_H
 

Modified: trunk/Build/source/texk/web2c/hitexdir/hintview/src/renderOGL.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hintview/src/renderOGL.c	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hintview/src/renderOGL.c	2022-01-24 15:36:16 UTC (rev 61723)
@@ -1,5 +1,32 @@
+/* This file is part of HINT
+ * Copyright 2017-2021 Martin Ruckert, Hochschule Muenchen, Lothstrasse 64, 80336 Muenchen
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ * OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holders shall
+ * not be used in advertising or otherwise to promote the sale, use or other
+ * dealings in this Software without prior written authorization from the
+ * copyright holders.
+ */
+
 #include <GL/glew.h>
-
 #include "basetypes.h"
 #include "main.h"
 #include "error.h"

Modified: trunk/Build/source/texk/web2c/hitexdir/hiparser.c
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiparser.c	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hiparser.c	2022-01-24 15:36:16 UTC (rev 61723)
@@ -69,7 +69,7 @@
 /* First part of user prologue.  */
 #line 2 "parser.y"
 
-	#line 10313 "format.w"
+	#line 10316 "format.w"
 	
 #include "hibasetypes.h"
 #include <string.h>
@@ -81,7 +81,7 @@
 
 	/*358:*/
 uint32_t definition_bits[0x100/32][32]= {
-	#line 7627 "format.w"
+	#line 7628 "format.w"
 	{0}};
 
 #define SET_DBIT(N,K) ((N)>0xFF?1:(definition_bits[N/32][K]	|= (1<<((N)&(32-1)))))
@@ -113,7 +113,7 @@
 	/*354:*/
 void hset_max(Kind k,int n)
 {
-	#line 7470 "format.w"
+	#line 7471 "format.w"
 	DBG(DBGDEF,"Setting max %s to %d\n",definition_name[k],n);
 	RNG("Maximum",n,max_fixed[k]+1,MAX_REF(k));
 	if(n>max_ref[k])
@@ -122,7 +122,7 @@
 	/*:354*/	/*365:*/
 void check_param_def(Ref*df)
 {
-	#line 7776 "format.w"
+	#line 7777 "format.w"
 	if(df->k!=int_kind&&df->k!=dimen_kind&&df->k!=glue_kind)
 	QUIT("Kind %s not allowed in parameter list",definition_name[df->k]);
 	if(df->n<=max_fixed[df->k]||max_default[df->k]<df->n)
@@ -132,7 +132,7 @@
 extern int yylineno;
 int yyerror(const char*msg)
 {
-	#line 8901 "format.w"
+	#line 8902 "format.w"
 	QUIT(" in line %d %s",yylineno,msg);
 	return 0;
 	}
@@ -3315,7 +3315,7 @@
   case 185: /* $@10: %empty  */
 #line 837 "parser.y"
                                           {
-	#line 6788 "format.w"
+	#line 6789 "format.w"
 	new_directory((yyvsp[0].u)+1);new_output_buffers();}
 #line 3321 "parser.c"
     break;
@@ -3323,7 +3323,7 @@
   case 189: /* entry: "<" "entry" UNSIGNED string ">"  */
 #line 842 "parser.y"
 {
-	#line 6791 "format.w"
+	#line 6792 "format.w"
 	RNG("Section number",(yyvsp[-2].u),3,max_section_no);hset_entry(&(dir[(yyvsp[-2].u)]),(yyvsp[-2].u),0,0,(yyvsp[-1].s));}
 #line 3329 "parser.c"
     break;
@@ -3331,7 +3331,7 @@
   case 190: /* $@11: %empty  */
 #line 846 "parser.y"
                                     {
-	#line 7326 "format.w"
+	#line 7327 "format.w"
 	hput_definitions_start();}
 #line 3337 "parser.c"
     break;
@@ -3339,7 +3339,7 @@
   case 191: /* definition_section: "<" "definitions" $@11 max_definitions definition_list ">"  */
 #line 850 "parser.y"
    {
-	#line 7328 "format.w"
+	#line 7329 "format.w"
 	hput_definitions_end();}
 #line 3345 "parser.c"
     break;
@@ -3347,7 +3347,7 @@
   case 194: /* max_definitions: "<" "max" max_list ">"  */
 #line 856 "parser.y"
 {
-	#line 7444 "format.w"
+	#line 7445 "format.w"
 		/*245:*/
 	if(max_ref[label_kind]>=0)
 	ALLOCATE(labels,max_ref[label_kind]+1,Label);
@@ -3375,7 +3375,7 @@
   case 197: /* max_value: "font" UNSIGNED  */
 #line 882 "parser.y"
                        {
-	#line 7448 "format.w"
+	#line 7449 "format.w"
 	hset_max(font_kind,(yyvsp[0].u));}
 #line 3381 "parser.c"
     break;
@@ -3383,7 +3383,7 @@
   case 198: /* max_value: "int" UNSIGNED  */
 #line 885 "parser.y"
                          {
-	#line 7449 "format.w"
+	#line 7450 "format.w"
 	hset_max(int_kind,(yyvsp[0].u));}
 #line 3389 "parser.c"
     break;
@@ -3391,7 +3391,7 @@
   case 199: /* max_value: "dimen" UNSIGNED  */
 #line 888 "parser.y"
                        {
-	#line 7450 "format.w"
+	#line 7451 "format.w"
 	hset_max(dimen_kind,(yyvsp[0].u));}
 #line 3397 "parser.c"
     break;
@@ -3399,7 +3399,7 @@
   case 200: /* max_value: "ligature" UNSIGNED  */
 #line 891 "parser.y"
                           {
-	#line 7451 "format.w"
+	#line 7452 "format.w"
 	hset_max(ligature_kind,(yyvsp[0].u));}
 #line 3405 "parser.c"
     break;
@@ -3407,7 +3407,7 @@
   case 201: /* max_value: "disc" UNSIGNED  */
 #line 894 "parser.y"
                       {
-	#line 7452 "format.w"
+	#line 7453 "format.w"
 	hset_max(disc_kind,(yyvsp[0].u));}
 #line 3413 "parser.c"
     break;
@@ -3415,7 +3415,7 @@
   case 202: /* max_value: "glue" UNSIGNED  */
 #line 897 "parser.y"
                       {
-	#line 7453 "format.w"
+	#line 7454 "format.w"
 	hset_max(glue_kind,(yyvsp[0].u));}
 #line 3421 "parser.c"
     break;
@@ -3423,7 +3423,7 @@
   case 203: /* max_value: "language" UNSIGNED  */
 #line 900 "parser.y"
                           {
-	#line 7454 "format.w"
+	#line 7455 "format.w"
 	hset_max(language_kind,(yyvsp[0].u));}
 #line 3429 "parser.c"
     break;
@@ -3431,7 +3431,7 @@
   case 204: /* max_value: "rule" UNSIGNED  */
 #line 903 "parser.y"
                       {
-	#line 7455 "format.w"
+	#line 7456 "format.w"
 	hset_max(rule_kind,(yyvsp[0].u));}
 #line 3437 "parser.c"
     break;
@@ -3439,7 +3439,7 @@
   case 205: /* max_value: "image" UNSIGNED  */
 #line 906 "parser.y"
                        {
-	#line 7456 "format.w"
+	#line 7457 "format.w"
 	hset_max(image_kind,(yyvsp[0].u));}
 #line 3445 "parser.c"
     break;
@@ -3447,7 +3447,7 @@
   case 206: /* max_value: "leaders" UNSIGNED  */
 #line 909 "parser.y"
                          {
-	#line 7457 "format.w"
+	#line 7458 "format.w"
 	hset_max(leaders_kind,(yyvsp[0].u));}
 #line 3453 "parser.c"
     break;
@@ -3455,7 +3455,7 @@
   case 207: /* max_value: "baseline" UNSIGNED  */
 #line 912 "parser.y"
                           {
-	#line 7458 "format.w"
+	#line 7459 "format.w"
 	hset_max(baseline_kind,(yyvsp[0].u));}
 #line 3461 "parser.c"
     break;
@@ -3463,7 +3463,7 @@
   case 208: /* max_value: "xdimen" UNSIGNED  */
 #line 915 "parser.y"
                         {
-	#line 7459 "format.w"
+	#line 7460 "format.w"
 	hset_max(xdimen_kind,(yyvsp[0].u));}
 #line 3469 "parser.c"
     break;
@@ -3471,7 +3471,7 @@
   case 209: /* max_value: "param" UNSIGNED  */
 #line 918 "parser.y"
                        {
-	#line 7460 "format.w"
+	#line 7461 "format.w"
 	hset_max(param_kind,(yyvsp[0].u));}
 #line 3477 "parser.c"
     break;
@@ -3479,7 +3479,7 @@
   case 210: /* max_value: "stream (definition)" UNSIGNED  */
 #line 921 "parser.y"
                            {
-	#line 7461 "format.w"
+	#line 7462 "format.w"
 	hset_max(stream_kind,(yyvsp[0].u));}
 #line 3485 "parser.c"
     break;
@@ -3487,7 +3487,7 @@
   case 211: /* max_value: "page" UNSIGNED  */
 #line 924 "parser.y"
                       {
-	#line 7462 "format.w"
+	#line 7463 "format.w"
 	hset_max(page_kind,(yyvsp[0].u));}
 #line 3493 "parser.c"
     break;
@@ -3495,7 +3495,7 @@
   case 212: /* max_value: "range" UNSIGNED  */
 #line 927 "parser.y"
                        {
-	#line 7463 "format.w"
+	#line 7464 "format.w"
 	hset_max(range_kind,(yyvsp[0].u));}
 #line 3501 "parser.c"
     break;
@@ -3503,7 +3503,7 @@
   case 213: /* max_value: "label" UNSIGNED  */
 #line 930 "parser.y"
                        {
-	#line 7464 "format.w"
+	#line 7465 "format.w"
 	hset_max(label_kind,(yyvsp[0].u));}
 #line 3509 "parser.c"
     break;
@@ -3511,7 +3511,7 @@
   case 214: /* def_node: start "font" ref font ">"  */
 #line 936 "parser.y"
                        {
-	#line 7661 "format.w"
+	#line 7662 "format.w"
 	DEF((yyval.rf),font_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),(yyvsp[-1].info));}
 #line 3517 "parser.c"
     break;
@@ -3519,7 +3519,7 @@
   case 215: /* def_node: start "int" ref integer ">"  */
 #line 939 "parser.y"
                                       {
-	#line 7662 "format.w"
+	#line 7663 "format.w"
 	DEF((yyval.rf),int_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_int((yyvsp[-1].i)));}
 #line 3525 "parser.c"
     break;
@@ -3527,7 +3527,7 @@
   case 216: /* def_node: start "dimen" ref dimension ">"  */
 #line 942 "parser.y"
                                       {
-	#line 7663 "format.w"
+	#line 7664 "format.w"
 	DEF((yyval.rf),dimen_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_dimen((yyvsp[-1].d)));}
 #line 3533 "parser.c"
     break;
@@ -3535,7 +3535,7 @@
   case 217: /* def_node: start "language" ref string ">"  */
 #line 945 "parser.y"
                                       {
-	#line 7664 "format.w"
+	#line 7665 "format.w"
 	DEF((yyval.rf),language_kind,(yyvsp[-2].u));hput_string((yyvsp[-1].s));hput_tags((yyvsp[-4].u),TAG(language_kind,0));}
 #line 3541 "parser.c"
     break;
@@ -3543,7 +3543,7 @@
   case 218: /* def_node: start "glue" ref glue ">"  */
 #line 948 "parser.y"
                                 {
-	#line 7665 "format.w"
+	#line 7666 "format.w"
 	DEF((yyval.rf),glue_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_glue(&((yyvsp[-1].g))));}
 #line 3549 "parser.c"
     break;
@@ -3551,7 +3551,7 @@
   case 219: /* def_node: start "xdimen" ref xdimen ">"  */
 #line 951 "parser.y"
                                     {
-	#line 7666 "format.w"
+	#line 7667 "format.w"
 	DEF((yyval.rf),xdimen_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_xdimen(&((yyvsp[-1].xd))));}
 #line 3557 "parser.c"
     break;
@@ -3559,7 +3559,7 @@
   case 220: /* def_node: start "rule" ref rule ">"  */
 #line 954 "parser.y"
                                 {
-	#line 7667 "format.w"
+	#line 7668 "format.w"
 	DEF((yyval.rf),rule_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_rule(&((yyvsp[-1].r))));}
 #line 3565 "parser.c"
     break;
@@ -3567,7 +3567,7 @@
   case 221: /* def_node: start "leaders" ref leaders ">"  */
 #line 957 "parser.y"
                                       {
-	#line 7668 "format.w"
+	#line 7669 "format.w"
 	DEF((yyval.rf),leaders_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(leaders_kind,(yyvsp[-1].info)));}
 #line 3573 "parser.c"
     break;
@@ -3575,7 +3575,7 @@
   case 222: /* def_node: start "baseline" ref baseline ">"  */
 #line 960 "parser.y"
                                         {
-	#line 7669 "format.w"
+	#line 7670 "format.w"
 	DEF((yyval.rf),baseline_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(baseline_kind,(yyvsp[-1].info)));}
 #line 3581 "parser.c"
     break;
@@ -3583,7 +3583,7 @@
   case 223: /* def_node: start "ligature" ref ligature ">"  */
 #line 963 "parser.y"
                                         {
-	#line 7670 "format.w"
+	#line 7671 "format.w"
 	DEF((yyval.rf),ligature_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_ligature(&((yyvsp[-1].lg))));}
 #line 3589 "parser.c"
     break;
@@ -3591,7 +3591,7 @@
   case 224: /* def_node: start "disc" ref disc ">"  */
 #line 966 "parser.y"
                                 {
-	#line 7671 "format.w"
+	#line 7672 "format.w"
 	DEF((yyval.rf),disc_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_disc(&((yyvsp[-1].dc))));}
 #line 3597 "parser.c"
     break;
@@ -3599,7 +3599,7 @@
   case 225: /* def_node: start "image" ref image ">"  */
 #line 969 "parser.y"
                                   {
-	#line 7672 "format.w"
+	#line 7673 "format.w"
 	DEF((yyval.rf),image_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_image(&((yyvsp[-1].x))));}
 #line 3605 "parser.c"
     break;
@@ -3607,7 +3607,7 @@
   case 226: /* def_node: start "param" ref parameters ">"  */
 #line 972 "parser.y"
                                        {
-	#line 7673 "format.w"
+	#line 7674 "format.w"
 	DEF((yyval.rf),param_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),hput_list((yyvsp[-4].u)+2,&((yyvsp[-1].l))));}
 #line 3613 "parser.c"
     break;
@@ -3615,7 +3615,7 @@
   case 227: /* def_node: start "page" ref page ">"  */
 #line 975 "parser.y"
                                 {
-	#line 7674 "format.w"
+	#line 7675 "format.w"
 	DEF((yyval.rf),page_kind,(yyvsp[-2].u));hput_tags((yyvsp[-4].u),TAG(page_kind,0));}
 #line 3621 "parser.c"
     break;
@@ -3623,7 +3623,7 @@
   case 228: /* def_node: start "int" ref ref ">"  */
 #line 980 "parser.y"
                          {
-	#line 7693 "format.w"
+	#line 7694 "format.w"
 	DEF_REF((yyval.rf),int_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(int_kind,0));}
 #line 3629 "parser.c"
     break;
@@ -3631,7 +3631,7 @@
   case 229: /* def_node: start "dimen" ref ref ">"  */
 #line 983 "parser.y"
                                 {
-	#line 7694 "format.w"
+	#line 7695 "format.w"
 	DEF_REF((yyval.rf),dimen_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(dimen_kind,0));}
 #line 3637 "parser.c"
     break;
@@ -3639,7 +3639,7 @@
   case 230: /* def_node: start "glue" ref ref ">"  */
 #line 986 "parser.y"
                                {
-	#line 7695 "format.w"
+	#line 7696 "format.w"
 	DEF_REF((yyval.rf),glue_kind,(yyvsp[-2].u),(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(glue_kind,0));}
 #line 3645 "parser.c"
     break;
@@ -3647,7 +3647,7 @@
   case 232: /* def_list: def_list def_node  */
 #line 991 "parser.y"
                           {
-	#line 7809 "format.w"
+	#line 7810 "format.w"
 	check_param_def(&((yyvsp[0].rf)));}
 #line 3653 "parser.c"
     break;
@@ -3655,7 +3655,7 @@
   case 233: /* parameters: estimate def_list  */
 #line 994 "parser.y"
                             {
-	#line 7810 "format.w"
+	#line 7811 "format.w"
 	(yyval.l).p= (yyvsp[0].u);(yyval.l).k= param_kind;(yyval.l).s= (hpos-hstart)-(yyvsp[0].u);}
 #line 3661 "parser.c"
     break;
@@ -3663,7 +3663,7 @@
   case 234: /* empty_param_list: position  */
 #line 998 "parser.y"
                          {
-	#line 7831 "format.w"
+	#line 7832 "format.w"
 	HPUTX(2);hpos++;hput_tags((yyvsp[0].u),TAG(param_kind,1));}
 #line 3669 "parser.c"
     break;
@@ -3671,7 +3671,7 @@
   case 235: /* $@12: %empty  */
 #line 1001 "parser.y"
                                 {
-	#line 7832 "format.w"
+	#line 7833 "format.w"
 	hpos= hpos-2;}
 #line 3677 "parser.c"
     break;
@@ -3679,7 +3679,7 @@
   case 236: /* non_empty_param_list: start "param" $@12 parameters ">"  */
 #line 1004 "parser.y"
 {
-	#line 7833 "format.w"
+	#line 7834 "format.w"
 	hput_tags((yyvsp[-4].u)-2,hput_list((yyvsp[-4].u)-1,&((yyvsp[-1].l))));}
 #line 3685 "parser.c"
     break;
@@ -3687,7 +3687,7 @@
   case 238: /* font_head: string dimension UNSIGNED UNSIGNED  */
 #line 1012 "parser.y"
 {
-	#line 7975 "format.w"
+	#line 7976 "format.w"
 	uint8_t f= (yyvsp[-4].u);SET_DBIT(f,font_kind);hfont_name[f]= strdup((yyvsp[-3].s));(yyval.info)= hput_font_head(f,hfont_name[f],(yyvsp[-2].d),(yyvsp[-1].u),(yyvsp[0].u));}
 #line 3693 "parser.c"
     break;
@@ -3695,7 +3695,7 @@
   case 241: /* font_param: start "penalty" fref penalty ">"  */
 #line 1019 "parser.y"
                               {
-	#line 7980 "format.w"
+	#line 7981 "format.w"
 	hput_tags((yyvsp[-4].u),hput_int((yyvsp[-1].i)));}
 #line 3701 "parser.c"
     break;
@@ -3703,7 +3703,7 @@
   case 242: /* font_param: start "kern" fref kern ">"  */
 #line 1022 "parser.y"
                                  {
-	#line 7981 "format.w"
+	#line 7982 "format.w"
 	hput_tags((yyvsp[-4].u),hput_kern(&((yyvsp[-1].kt))));}
 #line 3709 "parser.c"
     break;
@@ -3711,7 +3711,7 @@
   case 243: /* font_param: start "ligature" fref ligature ">"  */
 #line 1025 "parser.y"
                                          {
-	#line 7982 "format.w"
+	#line 7983 "format.w"
 	hput_tags((yyvsp[-4].u),hput_ligature(&((yyvsp[-1].lg))));}
 #line 3717 "parser.c"
     break;
@@ -3719,7 +3719,7 @@
   case 244: /* font_param: start "disc" fref disc ">"  */
 #line 1028 "parser.y"
                                  {
-	#line 7983 "format.w"
+	#line 7984 "format.w"
 	hput_tags((yyvsp[-4].u),hput_disc(&((yyvsp[-1].dc))));}
 #line 3725 "parser.c"
     break;
@@ -3727,7 +3727,7 @@
   case 245: /* font_param: start "glue" fref glue ">"  */
 #line 1031 "parser.y"
                                  {
-	#line 7984 "format.w"
+	#line 7985 "format.w"
 	hput_tags((yyvsp[-4].u),hput_glue(&((yyvsp[-1].g))));}
 #line 3733 "parser.c"
     break;
@@ -3735,7 +3735,7 @@
   case 246: /* font_param: start "language" fref string ">"  */
 #line 1034 "parser.y"
                                        {
-	#line 7985 "format.w"
+	#line 7986 "format.w"
 	hput_string((yyvsp[-1].s));hput_tags((yyvsp[-4].u),TAG(language_kind,0));}
 #line 3741 "parser.c"
     break;
@@ -3743,7 +3743,7 @@
   case 247: /* font_param: start "rule" fref rule ">"  */
 #line 1037 "parser.y"
                                  {
-	#line 7986 "format.w"
+	#line 7987 "format.w"
 	hput_tags((yyvsp[-4].u),hput_rule(&((yyvsp[-1].r))));}
 #line 3749 "parser.c"
     break;
@@ -3751,7 +3751,7 @@
   case 248: /* font_param: start "image" fref image ">"  */
 #line 1040 "parser.y"
                                    {
-	#line 7987 "format.w"
+	#line 7988 "format.w"
 	hput_tags((yyvsp[-4].u),hput_image(&((yyvsp[-1].x))));}
 #line 3757 "parser.c"
     break;
@@ -3759,7 +3759,7 @@
   case 249: /* fref: ref  */
 #line 1044 "parser.y"
         {
-	#line 7989 "format.w"
+	#line 7990 "format.w"
 	RNG("Font parameter",(yyvsp[0].u),0,MAX_FONT_PARAMS);}
 #line 3765 "parser.c"
     break;
@@ -3767,7 +3767,7 @@
   case 250: /* xdimen_ref: ref  */
 #line 1048 "parser.y"
               {
-	#line 8062 "format.w"
+	#line 8063 "format.w"
 	REF(xdimen_kind,(yyvsp[0].u));}
 #line 3773 "parser.c"
     break;
@@ -3775,7 +3775,7 @@
   case 251: /* param_ref: ref  */
 #line 1051 "parser.y"
              {
-	#line 8063 "format.w"
+	#line 8064 "format.w"
 	REF(param_kind,(yyvsp[0].u));}
 #line 3781 "parser.c"
     break;
@@ -3783,7 +3783,7 @@
   case 252: /* stream_ref: ref  */
 #line 1054 "parser.y"
               {
-	#line 8064 "format.w"
+	#line 8065 "format.w"
 	REF_RNG(stream_kind,(yyvsp[0].u));}
 #line 3789 "parser.c"
     break;
@@ -3791,7 +3791,7 @@
   case 253: /* content_node: start "penalty" ref ">"  */
 #line 1060 "parser.y"
                      {
-	#line 8068 "format.w"
+	#line 8069 "format.w"
 	REF(penalty_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(penalty_kind,0));}
 #line 3797 "parser.c"
     break;
@@ -3799,7 +3799,7 @@
   case 254: /* content_node: start "kern" explicit ref ">"  */
 #line 1064 "parser.y"
 {
-	#line 8070 "format.w"
+	#line 8071 "format.w"
 	REF(dimen_kind,(yyvsp[-1].u));hput_tags((yyvsp[-4].u),TAG(kern_kind,((yyvsp[-2].b))?b100:b000));}
 #line 3805 "parser.c"
     break;
@@ -3807,7 +3807,7 @@
   case 255: /* content_node: start "kern" explicit "xdimen" ref ">"  */
 #line 1068 "parser.y"
 {
-	#line 8072 "format.w"
+	#line 8073 "format.w"
 	REF(xdimen_kind,(yyvsp[-1].u));hput_tags((yyvsp[-5].u),TAG(kern_kind,((yyvsp[-3].b))?b101:b001));}
 #line 3813 "parser.c"
     break;
@@ -3815,7 +3815,7 @@
   case 256: /* content_node: start "glue" ref ">"  */
 #line 1071 "parser.y"
                            {
-	#line 8073 "format.w"
+	#line 8074 "format.w"
 	REF(glue_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(glue_kind,0));}
 #line 3821 "parser.c"
     break;
@@ -3823,7 +3823,7 @@
   case 257: /* content_node: start "ligature" ref ">"  */
 #line 1074 "parser.y"
                                {
-	#line 8074 "format.w"
+	#line 8075 "format.w"
 	REF(ligature_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(ligature_kind,0));}
 #line 3829 "parser.c"
     break;
@@ -3831,7 +3831,7 @@
   case 258: /* content_node: start "disc" ref ">"  */
 #line 1077 "parser.y"
                            {
-	#line 8075 "format.w"
+	#line 8076 "format.w"
 	REF(disc_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(disc_kind,0));}
 #line 3837 "parser.c"
     break;
@@ -3839,7 +3839,7 @@
   case 259: /* content_node: start "rule" ref ">"  */
 #line 1080 "parser.y"
                            {
-	#line 8076 "format.w"
+	#line 8077 "format.w"
 	REF(rule_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(rule_kind,0));}
 #line 3845 "parser.c"
     break;
@@ -3847,7 +3847,7 @@
   case 260: /* content_node: start "image" ref ">"  */
 #line 1083 "parser.y"
                             {
-	#line 8077 "format.w"
+	#line 8078 "format.w"
 	REF(image_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(image_kind,0));}
 #line 3853 "parser.c"
     break;
@@ -3855,7 +3855,7 @@
   case 261: /* content_node: start "leaders" ref ">"  */
 #line 1086 "parser.y"
                               {
-	#line 8078 "format.w"
+	#line 8079 "format.w"
 	REF(leaders_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(leaders_kind,0));}
 #line 3861 "parser.c"
     break;
@@ -3863,7 +3863,7 @@
   case 262: /* content_node: start "baseline" ref ">"  */
 #line 1089 "parser.y"
                                {
-	#line 8079 "format.w"
+	#line 8080 "format.w"
 	REF(baseline_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),TAG(baseline_kind,0));}
 #line 3869 "parser.c"
     break;
@@ -3871,7 +3871,7 @@
   case 263: /* content_node: start "language" REFERENCE ">"  */
 #line 1092 "parser.y"
                                      {
-	#line 8080 "format.w"
+	#line 8081 "format.w"
 	REF(language_kind,(yyvsp[-1].u));hput_tags((yyvsp[-3].u),hput_language((yyvsp[-1].u)));}
 #line 3877 "parser.c"
     break;
@@ -3879,7 +3879,7 @@
   case 264: /* glue_node: start "glue" ref ">"  */
 #line 1096 "parser.y"
                             {
-	#line 8082 "format.w"
+	#line 8083 "format.w"
 	REF(glue_kind,(yyvsp[-1].u));
 	if((yyvsp[-1].u)==zero_skip_no){hpos= hpos-2;(yyval.b)= false;}
 	else{hput_tags((yyvsp[-3].u),TAG(glue_kind,0));(yyval.b)= true;}}
@@ -3889,7 +3889,7 @@
   case 265: /* $@13: %empty  */
 #line 1103 "parser.y"
                              {
-	#line 8513 "format.w"
+	#line 8514 "format.w"
 	hput_content_start();}
 #line 3895 "parser.c"
     break;
@@ -3897,7 +3897,7 @@
   case 266: /* content_section: "<" "content" $@13 content_list ">"  */
 #line 1106 "parser.y"
 {
-	#line 8514 "format.w"
+	#line 8515 "format.w"
 	hput_content_end();hput_range_defs();hput_label_defs();}
 #line 3903 "parser.c"
     break;

Modified: trunk/Build/source/texk/web2c/hitexdir/hiparser.h
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hiparser.h	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hiparser.h	2022-01-24 15:36:16 UTC (rev 61723)
@@ -147,7 +147,7 @@
 {
 #line 79 "parser.y"
 
-	#line 10338 "format.w"
+	#line 10341 "format.w"
 	uint32_t u;  int32_t i;  char *s;  float64_t f;  Glyph c;
 	Dimen d;Stretch st;Xdimen xd;Kern kt;
 	Rule r;Glue g;Image x;

Modified: trunk/Build/source/texk/web2c/hitexdir/hitex.w
===================================================================
--- trunk/Build/source/texk/web2c/hitexdir/hitex.w	2022-01-24 13:43:19 UTC (rev 61722)
+++ trunk/Build/source/texk/web2c/hitexdir/hitex.w	2022-01-24 15:36:16 UTC (rev 61723)
@@ -324,7 +324,10 @@
 @d Prote_banner "This is Prote, Version " Prote_version_string
    /*printed when \Prote\ starts*/
 @#
- at d banner "This is HiTeX, Version 3.141592653-" HiTeX_version_string  /*printed when \TeX\ starts*/
+ at d QUOTE(X) #X
+ at d HINT_VER_STR(X,Y) "HINT version " QUOTE(X) "." QUOTE(Y)
+ at d banner "This is HiTeX, Version 3.141592653, " HINT_VER_STR(HINT_VERSION,HINT_SUB_VERSION)
+   /*printed when \TeX\ starts*/
 
 @ Different \PASCAL s have slightly different conventions, and the present
 @!@:PASCAL H}{\ph@>
@@ -873,7 +876,8 @@
 @^system dependencies@>
 
 @<Glob...@>=
-static unsigned char @!name_of_file0[file_name_size+1]={0}, *const @!name_of_file = @!name_of_file0-1;@;@/
+static unsigned char @!name_of_file0[file_name_size+1]={0},
+  *const @!name_of_file = @!name_of_file0-1;@;@/
    /*on some systems this may be a \&{record} variable*/
 static int @!name_length;@/ /*this many characters are actually
   relevant in |name_of_file| (the rest are blank)*/
@@ -1982,7 +1986,9 @@
 
 @<Interpret code |c| and |return| if done@>=
 switch (c) {
-case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (deletions_allowed)
+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 continue|@>@;@+break;
 @t\4\4@>@;
 #ifdef @!DEBUG
@@ -2645,7 +2651,8 @@
 deallocating them after their use.
 
 @<Glob...@>=
-static memory_word @!mem0[mem_max-mem_min+1], *const @!mem = @!mem0-mem_min; /*the big dynamic storage area*/
+static memory_word @!mem0[mem_max-mem_min+1],
+  *const @!mem = @!mem0-mem_min; /*the big dynamic storage area*/
 static pointer @!lo_mem_max; /*the largest location of variable-size memory in use*/
 static pointer @!hi_mem_min; /*the smallest location of one-word memory in use*/
 
@@ -2803,8 +2810,8 @@
 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 at +{@<Try to allocate within node |p| and its physical successors, and |goto found|
-if allocation was possible@>;
+@/do at +{@<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*/
@@ -2906,8 +2913,8 @@
 pointer @!old_rover; /*initial |rover| setting*/
 p=get_node(010000000000); /*merge adjacent free areas*/
 p=rlink(rover);rlink(rover)=max_halfword;old_rover=rover;
-while (p!=old_rover) @<Sort \(p)|p| into the list starting at |rover| and advance
-|p| to |rlink(p)|@>;
+while (p!=old_rover) @<Sort \(p)|p| into the list starting at |rover| and
+advance |p| to |rlink(p)|@>;
 p=rover;
 while (rlink(p)!=max_halfword)
   {@+llink(rlink(p))=p;p=rlink(p);
@@ -3498,8 +3505,10 @@
 
 @<Glob...@>=
 #ifdef @!DEBUG
-static bool @!is_free0[mem_max-mem_min+1], *const @!is_free = @!is_free0-mem_min; /*free cells*/
- at t\hskip10pt@>static bool @!was_free0[mem_max-mem_min+1], *const @!was_free = @!was_free0-mem_min;
+static bool @!is_free0[mem_max-mem_min+1],
+  *const @!is_free = @!is_free0-mem_min; /*free cells*/
+ at t\hskip10pt@>static bool @!was_free0[mem_max-mem_min+1],
+  *const @!was_free = @!was_free0-mem_min;
    /*previously free cells*/
 @t\hskip10pt@>static pointer @!was_mem_end, @!was_lo_max, @!was_hi_min;
    /*previous |mem_end|, |lo_mem_max|, and |hi_mem_min|*/
@@ -3678,7 +3687,8 @@
 
 @ @<Print a short indication of the contents of node |p|@>=
 switch (type(p)) {
-case hlist_node: case vlist_node: case ins_node: case whatsit_node: case mark_node: case adjust_node:
+case hlist_node: case vlist_node: case ins_node:
+  case whatsit_node: case mark_node: case adjust_node:
   case unset_node: case unset_set_node: case unset_pack_node: print("[]");@+break;
 case rule_node: print_char('|');@+break;
 case glue_node: if (glue_ptr(p)!=zero_glue) print_char(' ');@+break;
@@ -4056,7 +4066,8 @@
   {@+q=link(p);
   if (is_char_node(p)) free_avail(p)@;
   else{@+switch (type(p)) {
-    case hlist_node: case vlist_node: case unset_node: case unset_set_node: case unset_pack_node: {@+flush_node_list(list_ptr(p));
+    case hlist_node: case vlist_node: case unset_node:
+  case unset_set_node: case unset_pack_node: {@+flush_node_list(list_ptr(p));
       free_node(p, box_node_size);goto done;
       }
     case rule_node: {@+free_node(p, rule_node_size);goto done;
@@ -4129,8 +4140,8 @@
 @ @<Make a copy of node |p|...@>=
 words=1; /*this setting occurs in more branches than any other*/
 if (is_char_node(p)) r=get_avail();
-else@<Case statement to copy different types and set |words| to the number of initial
-words not yet copied@>;
+else@<Case statement to copy different types and set |words| to the number
+of initial words not yet copied@>;
 while (words > 0)
   {@+decr(words);mem[r+words]=mem[p+words];
   }
@@ -4137,7 +4148,8 @@
 
 @ @<Case statement to copy...@>=
 switch (type(p)) {
-case hlist_node: case vlist_node: case unset_node: case unset_set_node: case unset_pack_node: {@+r=get_node(box_node_size);
+case hlist_node: case vlist_node: case unset_node:
+case unset_set_node: case unset_pack_node: {@+r=get_node(box_node_size);
   mem[r+6]=mem[p+6];mem[r+5]=mem[p+5]; /*copy the last two words*/
   list_ptr(r)=copy_node_list(list_ptr(p)); /*this affects |mem[r+5]|*/
   words=5;
@@ -4149,8 +4161,8 @@
   ins_ptr(r)=copy_node_list(ins_ptr(p)); /*this affects |mem[r+4]|*/
   words=ins_node_size-1;
   } @+break;
-case whatsit_node: @<Make a partial copy of the whatsit node |p| and make |r| point
-to it; set |words| to the number of initial words not yet copied@>@;@+break;
+case whatsit_node: @<Make a partial copy of the whatsit node |p| and make
+|r| point to it; set |words| to the number of initial words not yet copied@>@;@+break;
 case glue_node: {@+r=get_node(small_node_size);add_glue_ref(glue_ptr(p));
   glue_ptr(r)=glue_ptr(p);leader_ptr(r)=copy_node_list(leader_ptr(p));
   } @+break;
@@ -5670,12 +5682,16 @@
 called |xeq_level|.
 
 @<Glob...@>=
-static memory_word @!eqtb0[eqtb_size-active_base+1], *const @!eqtb = @!eqtb0-active_base;
-static memory_word hfactor_eqtb0[dimen_pars+256]={{{0}}}, *const @!hfactor_eqtb = @!hfactor_eqtb0-dimen_base;
-static memory_word vfactor_eqtb0[dimen_pars+256]={{{0}}}, *const @!vfactor_eqtb = @!vfactor_eqtb0-dimen_base;
+static memory_word @!eqtb0[eqtb_size-active_base+1],
+  *const @!eqtb = @!eqtb0-active_base;
+static memory_word hfactor_eqtb0[dimen_pars+256]={{{0}}},
+  *const @!hfactor_eqtb = @!hfactor_eqtb0-dimen_base;
+static memory_word vfactor_eqtb0[dimen_pars+256]={{{0}}},
+  *const @!vfactor_eqtb = @!vfactor_eqtb0-dimen_base;
 static scaled par_shape_hfactor=0, par_shape_vfactor=0;
 static scaled hhsize=0,hvsize=0;
-static quarterword @!xeq_level0[eqtb_size-int_base+1], *const @!xeq_level = @!xeq_level0-int_base;
+static quarterword @!xeq_level0[eqtb_size-int_base+1],
+  *const @!xeq_level = @!xeq_level0-int_base;
 
 @ @<Set init...@>=
 for (k=int_base; k<=eqtb_size; k++) xeq_level[k]=level_one;
@@ -5722,7 +5738,8 @@
 @d font_id_text(A) text(font_id_base+A) /*a frozen font identifier's name*/
 
 @<Glob...@>=
-static two_halves @!hash0[undefined_control_sequence-hash_base], *const @!hash = @!hash0-hash_base;
+static two_halves @!hash0[undefined_control_sequence-hash_base],
+  *const @!hash = @!hash0-hash_base;
    /*the hash table*/
 static pointer @!hash_used; /*allocation pointer for |hash|*/
 static bool @!no_new_control_sequence; /*are new identifiers legal?*/
@@ -5761,7 +5778,8 @@
   if (next(p)==0)
     {@+if (no_new_control_sequence)
       p=undefined_control_sequence;
-    else@<Insert a new control sequence after |p|, then make |p| point to it@>;
+    else@<Insert a new control sequence after |p|, then make |p| point to
+it@>;
     goto found;
     }
   p=next(p);
@@ -6219,7 +6237,8 @@
 @p static void eq_destroy(memory_word @!w) /*gets ready to forget |w|*/
 {@+pointer q; /*|equiv| field of |w|*/
 switch (eq_type_field(w)) {
-case call: case long_call: case outer_call: case long_outer_call: delete_token_ref(equiv_field(w));@+break;
+case call: case long_call: case outer_call:
+  case long_outer_call: delete_token_ref(equiv_field(w));@+break;
 case glue_ref: delete_glue_ref(equiv_field(w));@+break;
 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);
@@ -6384,8 +6403,8 @@
       {@+l=save_level(save_ptr);decr(save_ptr);
       }
     else save_stack[save_ptr]=eqtb[undefined_control_sequence];
-    @<Store \(s)|save_stack[save_ptr]| in |eqtb[p]|, unless |eqtb[p]| holds a global
-value@>;
+    @<Store \(s)|save_stack[save_ptr]| in |eqtb[p]|, unless |eqtb[p]| holds
+a global value@>;
     }
   }
 done:
@@ -6646,7 +6665,9 @@
 
 @<Display the token...@>=
 switch (m) {
-case left_brace: case right_brace: case math_shift: case tab_mark: case sup_mark: case sub_mark: case spacer:
+case left_brace: case right_brace: case math_shift:
+  case tab_mark: case sup_mark: case sub_mark:
+  case spacer:
   case letter: case other_char: printn(c);@+break;
 case mac_param: {@+printn(c);printn(c);
   } @+break;
@@ -6936,9 +6957,11 @@
 @<Glob...@>=
 static int @!in_open; /*the number of lines in the buffer, less one*/
 static int @!open_parens; /*the number of open text files*/
-static alpha_file @!input_file0[max_in_open], *const @!input_file = @!input_file0-1;
+static alpha_file @!input_file0[max_in_open],
+  *const @!input_file = @!input_file0-1;
 static int @!line; /*current line number in the current source file*/
-static int @!line_stack0[max_in_open], *const @!line_stack = @!line_stack0-1;
+static int @!line_stack0[max_in_open],
+  *const @!line_stack = @!line_stack0-1;
 
 @ Users of \TeX\ sometimes forget to balance left and right braces properly,
 and one of the ways \TeX\ tries to spot such errors is by considering an
@@ -7594,8 +7617,8 @@
 @.Forbidden control sequence...@>
   }
 print(" while scanning ");
-@<Print either `\.{definition}' or `\.{use}' or `\.{preamble}' or `\.{text}', and
-insert tokens that should lead to recovery@>;
+@<Print either `\.{definition}' or `\.{use}' or `\.{preamble}' or `\.{text}',
+and insert tokens that should lead to recovery@>;
 print(" of ");sprint_cs(warning_index);
 help4("I suspect you have forgotten a `}', causing me",@/
 "to read past where you wanted me to stop.",@/
@@ -7651,8 +7674,8 @@
 restart: cur_cs=0;
 if (state!=token_list)
 @<Input from external file, |goto restart| if no input found@>@;
-else@<Input from token list, |goto restart| if end of list or if a parameter needs
-to be expanded@>;
+else@<Input from token list, |goto restart| if end of list or if a parameter
+needs to be expanded@>;
 @<If an alignment entry has just ended, take appropriate action@>;
 }
 
@@ -7671,12 +7694,13 @@
 {@+get_cur_chr: if (loc <= limit)  /*current line not yet finished*/
   {@+cur_chr=buffer[loc];incr(loc);
   reswitch: cur_cmd=cat_code(cur_chr);
-  @<Change state if necessary, and |goto switch| if the current character should be
-ignored, or |goto reswitch| if the current character changes to another@>;
+  @<Change state if necessary, and |goto switch| if the current character
+should be ignored, or |goto reswitch| if the current character changes to
+another@>;
   }
 else{@+state=new_line;@/
-  @<Move to next line of file, or |goto restart| if there is no next line, or |return|
-if a \.{\\read} line has finished@>;
+  @<Move to next line of file, or |goto restart| if there is no next line,
+or |return| if a \.{\\read} line has finished@>;
   check_interrupt;
   goto get_cur_chr;
   }
@@ -7688,17 +7712,18 @@
 apart from each other by |max_char_code+1|, so we can add a character's
 command code to the state to get a single number that characterizes both.
 
- at d any_state_plus(A) case mid_line+A: case skip_blanks+A: case new_line+A
+ at d any_state_plus(A) case mid_line+A:
+  case skip_blanks+A: case new_line+A
 
 @<Change state if necessary...@>=
 switch (state+cur_cmd) {
 @<Cases where character is ignored@>: goto get_cur_chr;
-any_state_plus(escape): @<Scan a control sequence and set |state:=skip_blanks| or
-|mid_line|@>@;@+break;
-any_state_plus(active_char): @<Process an active-character control sequence 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(escape): @<Scan a control sequence and set |state:=skip_blanks|
+or |mid_line|@>@;@+break;
+any_state_plus(active_char): @<Process an active-character control sequence
+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@>@;
 default:do_nothing;
@@ -7705,7 +7730,8 @@
 }
 
 @ @<Cases where character is ignored@>=
-any_state_plus(ignore): case skip_blanks+spacer: case new_line+spacer
+any_state_plus(ignore): case skip_blanks+spacer:
+  case new_line+spacer
 
 @ We go to |restart| instead of to |get_cur_chr|, because |state| might equal
 |token_list| after the error has been dealt with
@@ -7737,7 +7763,8 @@
 case skip_blanks+right_brace: case new_line+right_brace: {@+
   state=mid_line;decr(align_state);
   } @+break;
-add_delims_to(case skip_blanks): add_delims_to(case new_line): state=mid_line;@+break;
+add_delims_to(case skip_blanks): add_delims_to(
+  case new_line): state=mid_line;@+break;
 
 @ When a character of type |spacer| gets through, its character code is
 changed to $\.{"\ "}=040$. This means that the ASCII codes for tab and space,
@@ -7818,9 +7845,9 @@
   else if (cat==spacer) state=skip_blanks;
   else state=mid_line;
   if ((cat==letter)&&(k <= limit))
-    @<Scan ahead in the buffer until finding a nonletter; if an expanded code is encountered,
-reduce it and |goto start_cs|; otherwise if a multiletter control sequence is found,
-adjust |cur_cs| and |loc|, and |goto found|@>@;
+    @<Scan ahead in the buffer until finding a nonletter; if an expanded code
+is encountered, reduce it and |goto start_cs|; otherwise if a multiletter
+control sequence is found, adjust |cur_cs| and |loc|, and |goto found|@>@;
   else@<If an expanded code is present, reduce it and |goto start_cs|@>;
   cur_cs=single_base+buffer[loc];incr(loc);
   }
@@ -7869,8 +7896,8 @@
 
 @ Let's consider now what happens when |get_next| is looking at a token list.
 
-@<Input from token list, |goto restart| if end of list or if a parameter needs to
-be expanded@>=
+@<Input from token list, |goto restart| if end of list or if a parameter needs
+to be expanded@>=
 if (loc!=null)  /*list not exhausted*/
 @^inner loop@>
   {@+t=info(loc);loc=link(loc); /*move to next*/
@@ -7920,8 +7947,8 @@
 @d end_line_char_inactive (end_line_char < 0)||(end_line_char > 255)
 
 @<Move to next line of file, or |goto restart|...@>=
-if (name > 17) @<Read next line of file into |buffer|, or |goto restart| if the file
-has ended@>@;
+if (name > 17) @<Read next line of file into |buffer|, or |goto restart| if
+the file has ended@>@;
 else{@+if (!terminal_input)  /*\.{\\read} line has ended*/
     {@+cur_cmd=0;cur_chr=0;return;
     }
@@ -7955,7 +7982,8 @@
 @<Glob...@>=
 static bool @!force_eof; /*should the next \.{\\input} be aborted early?*/
 
-@ @<Read next line of file into |buffer|, or |goto restart| if the file has ended@>=
+@ @<Read next line of file into |buffer|, or |goto restart| if the file has
+ended@>=
 {@+incr(line);first=start;
 if (!force_eof)
   if (name <= 19)
@@ -8299,7 +8327,8 @@
 @d split_bot_mark cur_mark[split_bot_mark_code]
 
 @<Glob...@>=
-static pointer @!cur_mark0[split_bot_mark_code-top_mark_code+1], *const @!cur_mark = @!cur_mark0-top_mark_code;
+static pointer @!cur_mark0[split_bot_mark_code-top_mark_code+1],
+  *const @!cur_mark = @!cur_mark0-top_mark_code;
    /*token lists for marks*/
 
 @ @<Set init...@>=
@@ -8396,8 +8425,8 @@
 if (tracing_macros > 0) @<Show the text of the macro being expanded@>;
 if (info(r)==protected_token) r=link(r);
 if (info(r)!=end_match_token)
-  @<Scan the parameters and make |link(r)| point to the macro body; but |return| if
-an illegal \.{\\par} is detected@>;
+  @<Scan the parameters and make |link(r)| point to the macro body; but |return|
+if an illegal \.{\\par} is detected@>;
 @<Feed the macro body and its parameters to the scanner@>;
 end: scanner_status=save_scanner_status;warning_index=save_warning_index;
 }
@@ -8440,8 +8469,8 @@
 else{@+match_chr=info(r)-match_token;s=link(r);r=s;
   p=temp_head;m=0;
   }
-@<Scan a parameter until its delimiter string has been found; or, if |s=null|, simply
-scan the delimiter string@>;@/
+@<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));
 }
@@ -8454,10 +8483,10 @@
 @<Scan a parameter until its delimiter string has been found; or,...@>=
 resume: get_token(); /*set |cur_tok| to the next token of input*/
 if (cur_tok==info(r))
-  @<Advance \(r)|r|; |goto found| if the parameter delimiter has been fully matched,
-otherwise |goto continue|@>;
-@<Contribute the recently matched tokens to the current parameter, and |goto continue|
-if a partial match is still in effect; but abort if |s=null|@>;
+  @<Advance \(r)|r|; |goto found| if the parameter delimiter has been fully
+matched, otherwise |goto continue|@>;
+@<Contribute the recently matched tokens to the current parameter, and |goto
+continue| if a partial match is still in effect; but abort if |s=null|@>;
 if (cur_tok==par_token) if (long_state!=long_call)
   @<Report a runaway argument and abort@>;
 if (cur_tok < right_brace_limit)
@@ -8464,8 +8493,8 @@
   if (cur_tok < left_brace_limit)
     @<Contribute an entire group to the current parameter@>@;
   else@<Report an extra right brace and |goto continue|@>@;
-else@<Store the current token, but |goto continue| if it is a blank space that would
-become an undelimited parameter@>;
+else@<Store the current token, but |goto continue| if it is a blank space
+that would become an undelimited parameter@>;
 incr(m);
 if (info(r) > end_match_token) goto resume;
 if (info(r) < match_token) goto resume;
@@ -8786,8 +8815,9 @@
 m=cur_chr;
 switch (cur_cmd) {
 case def_code: @<Fetch a character code from some table@>@;@+break;
-case toks_register: case assign_toks: case def_family: case set_font: case def_font: @<Fetch
-a token list or font identifier, provided that |level=tok_val|@>@;@+break;
+case toks_register: case assign_toks:
+  case def_family: case set_font: case def_font: @<Fetch a token list or font
+identifier, provided that |level=tok_val|@>@;@+break;
 case assign_int: scanned_result(eqtb[m].i, int_val)@;@+break;
 case assign_dimen:
   scanned_result(eqtb[m].sc, dimen_val);
@@ -9346,7 +9376,8 @@
 if (!shortcut)
   {@+@<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@>@;
+    @<Fetch an internal dimension and |goto attach_sign|, or fetch an internal
+integer@>@;
   else{@+back_input();
     if (cur_tok==continental_point_token) cur_tok=point_token;
     if (cur_tok!=point_token) scan_int();
@@ -9359,8 +9390,8 @@
 if (cur_val < 0)  /*in this case |f==0|*/
   {@+negative=!negative;negate(cur_val);
   }
-@<Scan units and set |cur_val| to $x\cdot(|cur_val|+f/2^{16})$, where there are |x|
-sp per unit; |goto attach_sign| if the units are internal@>;
+@<Scan units and set |cur_val| to $x\cdot(|cur_val|+f/2^{16})$, where there
+are |x| sp per unit; |goto attach_sign| if the units are internal@>;
 @<Scan an optional space@>;
 attach_sign:
 if (arith_error||(abs(cur_val) >= 010000000000)||
@@ -9427,15 +9458,15 @@
 
 @<Scan units and set |cur_val| to $x\cdot(|cur_val|+f/2^{16})$...@>=
 if (inf) @<Scan for \(f)\.{fil} units; |goto attach_fraction| if found@>;
-@<Scan for \(u)units that are internal dimensions; |goto attach_sign| with |cur_val|
-set if found@>;
+@<Scan for \(u)units that are internal dimensions; |goto attach_sign| with
+|cur_val| set if found@>;
 if (mu) @<Scan for \(m)\.{mu} units and |goto attach_fraction|@>;
 if (scan_keyword("true")) @<Adjust \(f)for the magnification ratio@>;
 @.true@>
 if (scan_keyword("pt")) goto attach_fraction; /*the easy case*/
 @.pt@>
-@<Scan for \(a)all other units and adjust |cur_val| and |f| accordingly; |goto done|
-in the case of scaled points@>;
+@<Scan for \(a)all other units and adjust |cur_val| and |f| accordingly; |goto
+done| in the case of scaled points@>;
 attach_fraction: if (cur_val >= 040000) arith_error=true;
 else cur_val=cur_val*unity+f;
 done:
@@ -9595,8 +9626,8 @@
 else{@+back_input();scan_dimen(mu, false, false);
   if (negative) { negate(cur_val); negate(cur_hfactor); negate(cur_vfactor);}
   }
-@<Create a new glue specification whose width is |cur_val|; scan for its stretch and
-shrink components@>;
+@<Create a new glue specification whose width is |cur_val|; scan for its stretch
+and shrink components@>;
 }
 @#
 @<Declare procedures needed for expressions@>@;
@@ -9863,9 +9894,9 @@
 {@+loop{@+resume: get_token(); /*set |cur_cmd|, |cur_chr|, |cur_tok|*/
   if (cur_tok < right_brace_limit) goto done1;
   if (cur_cmd==mac_param)
-    @<If the next character is a parameter number, make |cur_tok| a |match| token;
-but if it is a left brace, store `|left_brace|, |end_match|', set |hash_brace|, and
-|goto done|@>;
+    @<If the next character is a parameter number, make |cur_tok| a |match|
+token; but if it is a left brace, store `|left_brace|, |end_match|', set |hash_brace|,
+and |goto done|@>;
   store_new_token(cur_tok);
   }
 done1: store_new_token(end_match_token);
@@ -10303,7 +10334,8 @@
 case if_hmode_code: b=(abs(mode)==hmode);@+break;
 case if_mmode_code: b=(abs(mode)==mmode);@+break;
 case if_inner_code: b=(mode < 0);@+break;
-case if_void_code: case if_hbox_code: case if_vbox_code: @<Test box register status@>@;@+break;
+case if_void_code: case if_hbox_code:
+  case if_vbox_code: @<Test box register status@>@;@+break;
 case ifx_code: @<Test if two tokens match@>@;@+break;
 case if_eof_code: {@+scan_four_bit_int();b=(read_open[cur_val]==closed);
   } @+break;
@@ -11243,31 +11275,46 @@
    /*the big collection of font data*/
 static font_index @!fmem_ptr; /*first unused word of |font_info|*/
 static internal_font_number @!font_ptr; /*largest internal font number in use*/
-static four_quarters @!font_check0[font_max-font_base+1], *const @!font_check = @!font_check0-font_base; /*check sum*/
-static scaled @!font_size0[font_max-font_base+1], *const @!font_size = @!font_size0-font_base; /*``at'' size*/
-static scaled @!font_dsize0[font_max-font_base+1], *const @!font_dsize = @!font_dsize0-font_base; /*``design'' size*/
-static font_index @!font_params0[font_max-font_base+1], *const @!font_params = @!font_params0-font_base; /*how many font
+static four_quarters @!font_check0[font_max-font_base+1],
+  *const @!font_check = @!font_check0-font_base; /*check sum*/
+static scaled @!font_size0[font_max-font_base+1],
+  *const @!font_size = @!font_size0-font_base; /*``at'' size*/
+static scaled @!font_dsize0[font_max-font_base+1],
+  *const @!font_dsize = @!font_dsize0-font_base; /*``design'' size*/
+static font_index @!font_params0[font_max-font_base+1],
+  *const @!font_params = @!font_params0-font_base; /*how many font
   parameters are present*/
-static str_number @!font_name0[font_max-font_base+1], *const @!font_name = @!font_name0-font_base; /*name of the font*/
-static str_number @!font_area0[font_max-font_base+1], *const @!font_area = @!font_area0-font_base; /*area of the font*/
-static eight_bits @!font_bc0[font_max-font_base+1], *const @!font_bc = @!font_bc0-font_base;
+static str_number @!font_name0[font_max-font_base+1],
+  *const @!font_name = @!font_name0-font_base; /*name of the font*/
+static str_number @!font_area0[font_max-font_base+1],
+  *const @!font_area = @!font_area0-font_base; /*area of the font*/
+static eight_bits @!font_bc0[font_max-font_base+1],
+  *const @!font_bc = @!font_bc0-font_base;
    /*beginning (smallest) character code*/
-static eight_bits @!font_ec0[font_max-font_base+1], *const @!font_ec = @!font_ec0-font_base;
+static eight_bits @!font_ec0[font_max-font_base+1],
+  *const @!font_ec = @!font_ec0-font_base;
    /*ending (largest) character code*/
-static pointer @!font_glue0[font_max-font_base+1], *const @!font_glue = @!font_glue0-font_base;
+static pointer @!font_glue0[font_max-font_base+1],
+  *const @!font_glue = @!font_glue0-font_base;
    /*glue specification for interword space, |null| if not allocated*/
-static bool @!font_used0[font_max-font_base+1], *const @!font_used = @!font_used0-font_base;
+static bool @!font_used0[font_max-font_base+1],
+  *const @!font_used = @!font_used0-font_base;
    /*has a character from this font actually appeared in the output?*/
-static int @!hyphen_char0[font_max-font_base+1], *const @!hyphen_char = @!hyphen_char0-font_base;
+static int @!hyphen_char0[font_max-font_base+1],
+  *const @!hyphen_char = @!hyphen_char0-font_base;
    /*current \.{\\hyphenchar} values*/
-static int @!skew_char0[font_max-font_base+1], *const @!skew_char = @!skew_char0-font_base;
+static int @!skew_char0[font_max-font_base+1],
+  *const @!skew_char = @!skew_char0-font_base;
    /*current \.{\\skewchar} values*/
-static font_index @!bchar_label0[font_max-font_base+1], *const @!bchar_label = @!bchar_label0-font_base;
+static font_index @!bchar_label0[font_max-font_base+1],
+  *const @!bchar_label = @!bchar_label0-font_base;
    /*start of |lig_kern| program for left boundary character,
   |non_address| if there is none*/
-static int16_t @!font_bchar0[font_max-font_base+1], *const @!font_bchar = @!font_bchar0-font_base;
+static int16_t @!font_bchar0[font_max-font_base+1],
+  *const @!font_bchar = @!font_bchar0-font_base;
    /*boundary character, |non_char| if there is none*/
-static int16_t @!font_false_bchar0[font_max-font_base+1], *const @!font_false_bchar = @!font_false_bchar0-font_base;
+static int16_t @!font_false_bchar0[font_max-font_base+1],
+  *const @!font_false_bchar = @!font_false_bchar0-font_base;
    /*|font_bchar| if it doesn't exist in the font, otherwise |non_char|*/
 
 @ Besides the arrays just enumerated, we have directory arrays that make it
@@ -11280,23 +11327,32 @@
 stores its quarterwords that way.)
 
 @<Glob...@>=
-static int @!char_base0[font_max-font_base+1], *const @!char_base = @!char_base0-font_base;
+static int @!char_base0[font_max-font_base+1],
+  *const @!char_base = @!char_base0-font_base;
    /*base addresses for |char_info|*/
-static int @!width_base0[font_max-font_base+1], *const @!width_base = @!width_base0-font_base;
+static int @!width_base0[font_max-font_base+1],
+  *const @!width_base = @!width_base0-font_base;
    /*base addresses for widths*/
-static int @!height_base0[font_max-font_base+1], *const @!height_base = @!height_base0-font_base;
+static int @!height_base0[font_max-font_base+1],
+  *const @!height_base = @!height_base0-font_base;
    /*base addresses for heights*/
-static int @!depth_base0[font_max-font_base+1], *const @!depth_base = @!depth_base0-font_base;
+static int @!depth_base0[font_max-font_base+1],
+  *const @!depth_base = @!depth_base0-font_base;
    /*base addresses for depths*/
-static int @!italic_base0[font_max-font_base+1], *const @!italic_base = @!italic_base0-font_base;
+static int @!italic_base0[font_max-font_base+1],
+  *const @!italic_base = @!italic_base0-font_base;
    /*base addresses for italic corrections*/
-static int @!lig_kern_base0[font_max-font_base+1], *const @!lig_kern_base = @!lig_kern_base0-font_base;
+static int @!lig_kern_base0[font_max-font_base+1],
+  *const @!lig_kern_base = @!lig_kern_base0-font_base;
    /*base addresses for ligature/kerning programs*/
-static int @!kern_base0[font_max-font_base+1], *const @!kern_base = @!kern_base0-font_base;
+static int @!kern_base0[font_max-font_base+1],
+  *const @!kern_base = @!kern_base0-font_base;
    /*base addresses for kerns*/
-static int @!exten_base0[font_max-font_base+1], *const @!exten_base = @!exten_base0-font_base;
+static int @!exten_base0[font_max-font_base+1],
+  *const @!exten_base = @!exten_base0-font_base;
    /*base addresses for extensible recipes*/
-static int @!param_base0[font_max-font_base+1], *const @!param_base = @!param_base0-font_base;
+static int @!param_base0[font_max-font_base+1],
+  *const @!param_base = @!param_base0-font_base;
    /*base addresses for font parameters*/
 
 @ @<Set init...@>=
@@ -11442,9 +11498,9 @@
 int @!alpha;int @!beta;
    /*auxiliary quantities used in fixed-point multiplication*/
 g=null_font;@/
-@<Read and check the font data; |abort| if the \.{TFM} file is malformed; if there's
-no room for this font, say so and |goto done|; otherwise |incr(font_ptr)| and |goto
-done|@>;
+@<Read and check the font data; |abort| if the \.{TFM} file is malformed;
+if there's no room for this font, say so and |goto done|; otherwise |incr(font_ptr)|
+and |goto done|@>;
 bad_tfm: @<Report that the font won't be loaded@>;
 done: if (file_opened) b_close(&tfm_file);
 return g;
@@ -12602,10 +12658,11 @@
   }
 else{@+link(q)=right_ptr;right_ptr=q;
   }
-@<Look at the other stack entries until deciding what sort of \.{DVI} command to generate;
-|goto found| if node |p| is a ``hit''@>;
+@<Look at the other stack entries until deciding what sort of \.{DVI} command
+to generate; |goto found| if node |p| is a ``hit''@>;
 @<Generate a |down| or |right| command for |w| and |return|@>;
-found: @<Generate a |y0| or |z0| command in order to reuse a previous appearance of~|w|@>;
+found: @<Generate a |y0| or |z0| command in order to reuse a previous appearance
+of~|w|@>;
 }
 
 @ The |info| fields in the entries of the down stack or the right stack
@@ -12708,8 +12765,8 @@
 @<Look at the other stack entries until deciding...@>=
 p=link(q);mstate=none_seen;
 while (p!=null)
-  {@+if (width(p)==w) @<Consider a node with matching width; |goto found| if it's
-a hit@>@;
+  {@+if (width(p)==w) @<Consider a node with matching width; |goto found|
+if it's a hit@>@;
   else switch (mstate+info(p)) {
     case none_seen+y_here: mstate=y_seen;@+break;
     case none_seen+z_here: mstate=z_seen;@+break;
@@ -12726,13 +12783,16 @@
 
 @<Consider a node with matching width...@>=
 switch (mstate+info(p)) {
-case none_seen+yz_OK: case none_seen+y_OK: case z_seen+yz_OK: case z_seen+y_OK: @t@>@;@/
+case none_seen+yz_OK: case none_seen+y_OK:
+  case z_seen+yz_OK: case z_seen+y_OK: @t@>@;@/
   if (location(p) < dvi_gone) goto not_found;
   else@<Change buffered instruction to |y| or |w| and |goto found|@>@;@+break;
-case none_seen+z_OK: case y_seen+yz_OK: case y_seen+z_OK: @t@>@;@/
+case none_seen+z_OK: case y_seen+yz_OK:
+  case y_seen+z_OK: @t@>@;@/
   if (location(p) < dvi_gone) goto not_found;
   else@<Change buffered instruction to |z| or |x| and |goto found|@>@;@+break;
-case none_seen+y_here: case none_seen+z_here: case y_seen+z_here: case z_seen+y_here: goto found;
+case none_seen+y_here: case none_seen+z_here:
+  case y_seen+z_here: case z_seen+y_here: goto found;
 default:do_nothing;
 }
 
@@ -12868,8 +12928,8 @@
 if (cur_s > 0) dvi_out(push);
 if (cur_s > max_push) max_push=cur_s;
 save_loc=dvi_offset+dvi_ptr;base_line=cur_v;left_edge=cur_h;
-while (p!=null) @<Output node |p| for |hlist_out| and move to the next node, maintaining
-the condition |cur_v=base_line|@>;
+while (p!=null) @<Output node |p| for |hlist_out| and move to the next node,
+maintaining the condition |cur_v=base_line|@>;
 prune_movements(save_loc);
 if (cur_s > 0) dvi_pop(save_loc);
 decr(cur_s);
@@ -12893,7 +12953,8 @@
   }@+ while (!(!is_char_node(p)));
   dvi_h=cur_h;
   }
-else@<Output the non-|char_node| |p| for |hlist_out| and move to the next node@>@;
+else@<Output the non-|char_node| |p| for |hlist_out| and move to the next
+node@>@;
 
 @ @<Change font |dvi_f| to |f|@>=
 {@+if (!font_used[f])
@@ -12969,7 +13030,8 @@
   }
 rule_wd=rule_wd+cur_g;
 if (subtype(p) >= a_leaders)
-  @<Output leaders in an hlist, |goto fin_rule| if a rule or to |next_p| if done@>;
+  @<Output leaders in an hlist, |goto fin_rule| if a rule or to |next_p| if
+done@>;
 goto move_past;
 }
 
@@ -12983,8 +13045,8 @@
 if ((leader_wd > 0)&&(rule_wd > 0))
   {@+rule_wd=rule_wd+10; /*compensate for floating-point rounding*/
   edge=cur_h+rule_wd;lx=0;
-  @<Let |cur_h| be the position of the first box, and set |leader_wd+lx| to the spacing
-between corresponding parts of boxes@>;
+  @<Let |cur_h| be the position of the first box, and set |leader_wd+lx| to
+the spacing between corresponding parts of boxes@>;
   while (cur_h+leader_wd <= edge)
     @<Output a leader box at |cur_h|, then advance |cur_h| by |leader_wd+lx|@>;
   cur_h=edge-10;goto next_p;
@@ -13062,8 +13124,8 @@
 if (cur_s > max_push) max_push=cur_s;
 save_loc=dvi_offset+dvi_ptr;left_edge=cur_h;cur_v=cur_v-height(this_box);
 top_edge=cur_v;
-while (p!=null) @<Output node |p| for |vlist_out| and move to the next node, maintaining
-the condition |cur_h=left_edge|@>;
+while (p!=null) @<Output node |p| for |vlist_out| and move to the next node,
+maintaining the condition |cur_h=left_edge|@>;
 prune_movements(save_loc);
 if (cur_s > 0) dvi_pop(save_loc);
 decr(cur_s);
@@ -13136,7 +13198,8 @@
   }
 rule_ht=rule_ht+cur_g;
 if (subtype(p) >= a_leaders)
-  @<Output leaders in a vlist, |goto fin_rule| if a rule or to |next_p| if done@>;
+  @<Output leaders in a vlist, |goto fin_rule| if a rule or to |next_p| if
+done@>;
 goto move_past;
 }
 
@@ -13150,8 +13213,8 @@
 if ((leader_ht > 0)&&(rule_ht > 0))
   {@+rule_ht=rule_ht+10; /*compensate for floating-point rounding*/
   edge=cur_v+rule_ht;lx=0;
-  @<Let |cur_v| be the position of the first box, and set |leader_ht+lx| to the spacing
-between corresponding parts of boxes@>;
+  @<Let |cur_v| be the position of the first box, and set |leader_ht+lx| to
+the spacing between corresponding parts of boxes@>;
   while (cur_v+leader_ht <= edge)
     @<Output a leader box at |cur_v|, then advance |cur_v| by |leader_ht+lx|@>;
   cur_v=edge-10;goto next_p;
@@ -13215,7 +13278,8 @@
 #endif
 
 @ @<Ship box |p| out@>=
-@<Update the values of |max_h| and |max_v|; but if the page is too large, |goto done|@>;
+@<Update the values of |max_h| and |max_v|; but if the page is too large,
+|goto done|@>;
 @<Initialize variables as |ship_out| begins@>;
 page_loc=dvi_offset+dvi_ptr;
 dvi_out(bop);
@@ -13383,7 +13447,9 @@
 to implement \.{\\badness}.
 
 @<Glob...@>=
-static scaled @!total_stretch0[filll-normal+1], *const @!total_stretch = @!total_stretch0-normal, @!total_shrink0[filll-normal+1], *const @!total_shrink = @!total_shrink0-normal;
+static scaled @!total_stretch0[filll-normal+1],
+  *const @!total_stretch = @!total_stretch0-normal,
+  @!total_shrink0[filll-normal+1], *const @!total_shrink = @!total_shrink0-normal;
    /*glue found by |hpack| or |vpack|*/
 static int @!last_badness; /*badness of the most recently packaged box*/
 
@@ -13411,12 +13477,14 @@
 @ @<Examine node |p| in the hlist, taking account of its effect...@>=
 @^inner loop@>
 {@+reswitch: while (is_char_node(p))
-  @<Incorporate character dimensions into the dimensions of the hbox that will contain~it,
-then move to the next node@>;
+  @<Incorporate character dimensions into the dimensions of the hbox that
+will contain~it, then move to the next node@>;
 if (p!=null)
   {@+switch (type(p)) {
-  case hlist_node: case vlist_node: case rule_node: case unset_node: case unset_set_node: case unset_pack_node:
-    @<Incorporate box dimensions into the dimensions of the hbox that will contain~it@>@;@+break;
+  case hlist_node: case vlist_node: case rule_node:
+  case unset_node: case unset_set_node: case unset_pack_node:
+    @<Incorporate box dimensions into the dimensions of the hbox that will
+contain~it@>@;@+break;
   case ins_node: case mark_node: case adjust_node: if (adjust_tail!=null)
     @<Transfer node |p| to the adjustment list@>@;@+break;
   case whatsit_node: @<Incorporate a whatsit node into an hbox@>;@+break;
@@ -13500,9 +13568,10 @@
   set_glue_ratio_zero(glue_set(r));
   goto end;
   }
-else if (x > 0) @<Determine horizontal glue stretch setting, then |return| or \hbox{|goto
+else if (x > 0) @<Determine horizontal glue stretch setting, then |return|
+or \hbox{|goto common_ending|}@>@;
+else@<Determine horizontal glue shrink setting, then |return| or \hbox{|goto
 common_ending|}@>@;
-else@<Determine horizontal glue shrink setting, then |return| or \hbox{|goto common_ending|}@>@;
 
 @ @<Determine horizontal glue stretch setting...@>=
 {@+@<Determine the stretch order@>;
@@ -13578,7 +13647,8 @@
 bad@>;
   }
 else if (o==normal) if (list_ptr(r)!=null)
-  @<Report a tight hbox and |goto common_ending|, if this box is sufficiently bad@>;
+  @<Report a tight hbox and |goto common_ending|, if this box is sufficiently
+bad@>;
 goto end;
 }
 
@@ -13626,8 +13696,10 @@
 {@+if (is_char_node(p)) confusion("vpack");
 @:this can't happen vpack}{\quad vpack@>
 else switch (type(p)) {
-  case hlist_node: case vlist_node: case rule_node: case unset_node: case unset_set_node: case unset_pack_node:
-    @<Incorporate box dimensions into the dimensions of the vbox that will contain~it@>@;@+break;
+  case hlist_node: case vlist_node: case rule_node:
+  case unset_node: case unset_set_node: case unset_pack_node:
+    @<Incorporate box dimensions into the dimensions of the vbox that will
+contain~it@>@;@+break;
   case whatsit_node: @<Incorporate a whatsit node into a vbox@>;@+break;
   case glue_node: @<Incorporate glue into the vertical totals@>@;@+break;
   case kern_node: {@+x=x+d+width(p);d=0;
@@ -13665,9 +13737,10 @@
   set_glue_ratio_zero(glue_set(r));
   goto end;
   }
-else if (x > 0) @<Determine vertical glue stretch setting, then |return| or \hbox{|goto
+else if (x > 0) @<Determine vertical glue stretch setting, then |return| or
+\hbox{|goto common_ending|}@>@;
+else@<Determine vertical glue shrink setting, then |return| or \hbox{|goto
 common_ending|}@>@;
-else@<Determine vertical glue shrink setting, then |return| or \hbox{|goto common_ending|}@>@;
 
 @ @<Determine vertical glue stretch setting...@>=
 {@+@<Determine the stretch order@>;
@@ -13723,7 +13796,8 @@
 bad@>;
   }
 else if (o==normal) if (list_ptr(r)!=null)
-  @<Report a tight vbox and |goto common_ending|, if this box is sufficiently bad@>;
+  @<Report a tight vbox and |goto common_ending|, if this box is sufficiently
+bad@>;
 goto end;
 }
 
@@ -14065,8 +14139,11 @@
 @<Cases of |show_node_list| that arise...@>=
 case style_node: print_style(subtype(p));@+break;
 case choice_node: @<Display choice node |p|@>@;@+break;
-case ord_noad: case op_noad: case bin_noad: case rel_noad: case open_noad: case close_noad: case punct_noad: case inner_noad:
-  case radical_noad: case over_noad: case under_noad: case vcenter_noad: case accent_noad:
+case ord_noad: case op_noad: case bin_noad:
+  case rel_noad: case open_noad: case close_noad:
+  case punct_noad: case inner_noad:
+  case radical_noad: case over_noad: case under_noad:
+  case vcenter_noad: case accent_noad:
   case left_noad: case right_noad: @<Display normal noad |p|@>@;@+break;
 case fraction_noad: @<Display fraction noad |p|@>@;@+break;
 
@@ -14214,8 +14291,11 @@
   flush_node_list(script_script_mlist(p));
   free_node(p, style_node_size);goto done;
   }
-case ord_noad: case op_noad: case bin_noad: case rel_noad: case open_noad: case close_noad: case punct_noad: case inner_noad:
-  case radical_noad: case over_noad: case under_noad: case vcenter_noad: case accent_noad: @t@>@;@/
+case ord_noad: case op_noad: case bin_noad:
+  case rel_noad: case open_noad: case close_noad:
+  case punct_noad: case inner_noad:
+  case radical_noad: case over_noad: case under_noad:
+  case vcenter_noad: case accent_noad: @t@>@;@/
   {@+if (math_type(nucleus(p)) >= sub_box)
     flush_node_list(info(nucleus(p)));
   if (math_type(supscr(p)) >= sub_box)
@@ -14372,8 +14452,8 @@
 bool @!large_attempt; /*are we trying the ``large'' variant?*/
 f=null_font;w=0;large_attempt=false;
 z=small_fam(d);x=small_char(d);
-loop at +{@+@<Look at the variants of |(z,x)|; set |f| and |c| whenever a better character
-is found; |goto found| as soon as a large enough variant is encountered@>;
+loop at +{@+@<Look at the variants of |(z,x)|; set |f| and |c| whenever a better
+character is found; |goto found| as soon as a large enough variant is encountered@>;
   if (large_attempt) goto found; /*there were none large enough*/
   large_attempt=true;z=large_fam(d);x=large_char(d);
   }
@@ -14395,9 +14475,9 @@
   {@+z=z+s+16;
   @/do at +{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@>;
+    @<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));
   }
 
@@ -14475,8 +14555,8 @@
 {@+b=new_null_box();
 type(b)=vlist_node;
 r=font_info[exten_base[f]+rem_byte(q)].qqqq;@/
-@<Compute the minimum suitable height, |w|, and the corresponding number of extension
-steps, |n|; also set |width(b)|@>;
+@<Compute the minimum suitable height, |w|, and the corresponding number of
+extension steps, |n|; also set |width(b)|@>;
 c=ext_bot(r);
 if (c!=min_quarterword) stack_into_box(b, f, c);
 c=ext_rep(r);
@@ -14743,11 +14823,12 @@
 style=cur_style; /*tuck global parameters away as local variables*/
 q=mlist;r=null;r_type=op_noad;max_h=0;max_d=0;
 @<Set up the values of |cur_size| and |cur_mu|, based on |cur_style|@>;
-while (q!=null) @<Process node-or-noad |q| as much as possible in preparation for
-the second pass of |mlist_to_hlist|, then move to the next item in the mlist@>;
+while (q!=null) @<Process node-or-noad |q| as much as possible in preparation
+for the second pass of |mlist_to_hlist|, then move to the next item in the
+mlist@>;
 @<Convert \(a)a final |bin_noad| to an |ord_noad|@>;
-@<Make a second pass over the mlist, removing all noads and inserting the proper spacing
-and penalties@>;
+@<Make a second pass over the mlist, removing all noads and inserting the
+proper spacing and penalties@>;
 }
 
 @ We use the fact that no character nodes appear in an mlist, hence
@@ -14754,9 +14835,9 @@
 the field |type(q)| is always present.
 
 @<Process node-or-noad...@>=
-{@+@<Do first-pass processing based on |type(q)|; |goto done_with_noad| if a noad
-has been fully processed, |goto check_dimensions| if it has been translated into |new_hlist(q)|,
-or |goto done_with_node| if a node has been fully processed@>;
+{@+@<Do first-pass processing based on |type(q)|; |goto done_with_noad| if
+a noad has been fully processed, |goto check_dimensions| if it has been translated
+into |new_hlist(q)|, or |goto done_with_node| if a node has been fully processed@>;
 check_dimensions: z=hpack(new_hlist(q), natural);
 if (height(z) > max_h) max_h=height(z);
 if (depth(z) > max_d) max_d=depth(z);
@@ -14776,17 +14857,20 @@
 reswitch: delta=0;
 switch (type(q)) {
 case bin_noad: switch (r_type) {
-  case bin_noad: case op_noad: case rel_noad: case open_noad: case punct_noad: case left_noad:
+  case bin_noad: case op_noad: case rel_noad:
+  case open_noad: case punct_noad: case left_noad:
     {@+type(q)=ord_noad;goto reswitch;
     }
   default:do_nothing;
   } @+break;
-case rel_noad: case close_noad: case punct_noad: case right_noad: {@+ at t@>@;@/
+case rel_noad: case close_noad: case punct_noad:
+  case right_noad: {@+ at t@>@;@/
   @<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|@>@;
- at t\4@>@<Cases for nodes that can appear in an mlist, after which we |goto done_with_node|@>@;
+ at 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@>
 } @/
@@ -14800,10 +14884,11 @@
   @<Set up the values of |cur_size| and |cur_mu|, based on |cur_style|@>;
   goto done_with_node;
   }
-case choice_node: @<Change this node to a style node followed by the correct choice,
-then |goto done_with_node|@>@;
+case choice_node: @<Change this node to a style node followed by the correct
+choice, then |goto done_with_node|@>@;
 case ins_node: case mark_node: case adjust_node:
-  case whatsit_node: case penalty_node: case disc_node: goto done_with_node;
+  case whatsit_node: case penalty_node:
+  case disc_node: goto done_with_node;
 case rule_node: {@+if (height(q) > max_h) max_h=height(q);
   if (depth(q) > max_d) max_d=depth(q);goto done_with_node;
   }
@@ -15034,15 +15119,15 @@
 scaled @!delta, @!delta1, @!delta2, @!shift_up, @!shift_down, @!clr;
    /*dimensions for box calculations*/
 if (thickness(q)==default_code) thickness(q)=default_rule_thickness;
-@<Create equal-width boxes |x| and |z| for the numerator and denominator, and compute
-the default amounts |shift_up| and |shift_down| by which they are displaced from the
-baseline@>;
-if (thickness(q)==0) @<Adjust \(s)|shift_up| and |shift_down| for the case of no fraction
-line@>@;
+@<Create equal-width boxes |x| and |z| for the numerator and denominator,
+and compute the default amounts |shift_up| and |shift_down| by which they
+are displaced from the baseline@>;
+if (thickness(q)==0) @<Adjust \(s)|shift_up| and |shift_down| for the case
+of no fraction line@>@;
 else@<Adjust \(s)|shift_up| and |shift_down| for the case of a fraction line@>;
 @<Construct a vlist box for the fraction, according to |shift_up| and |shift_down|@>;
-@<Put the \(f)fraction into a box with its delimiters, and make |new_hlist(q)| point
-to it@>;
+@<Put the \(f)fraction into a box with its delimiters, and make |new_hlist(q)|
+point to it@>;
 }
 
 @ @<Create equal-width boxes |x| and |z| for the numerator and denom...@>=
@@ -15165,8 +15250,8 @@
 x=rebox(x, width(v));y=rebox(y, width(v));z=rebox(z, width(v));@/
 shift_amount(x)=half(delta);shift_amount(z)=-shift_amount(x);
 height(v)=height(y);depth(v)=depth(y);
-@<Attach the limits to |y| and adjust |height(v)|, |depth(v)| to account for their
-presence@>;
+@<Attach the limits to |y| and adjust |height(v)|, |depth(v)| to account for
+their presence@>;
 new_hlist(q)=v;
 }
 
@@ -15226,9 +15311,10 @@
           {@+a=lig_kern_restart(cur_f, cur_i);
           cur_i=font_info[a].qqqq;
           }
-        loop at +{@+@<If instruction |cur_i| is a kern with |cur_c|, attach the kern
-after~|q|; or if it is a ligature with |cur_c|, combine noads |q| and~|p| appropriately;
-then |return| if the cursor has moved past a noad, or |goto restart|@>;
+        loop at +{@+@<If instruction |cur_i| is a kern with |cur_c|, attach the
+kern after~|q|; or if it is a ligature with |cur_c|, combine noads |q| and~|p|
+appropriately; then |return| if the cursor has moved past a noad, or |goto
+restart|@>;
           if (skip_byte(cur_i) >= stop_flag) return;
           a=a+qo(skip_byte(cur_i))+1;
           cur_i=font_info[a].qqqq;
@@ -15288,9 +15374,9 @@
 @<Convert \(n)|nucleus(q)| to an hlist and attach the sub/superscripts@>=
 switch (math_type(nucleus(q))) {
 case math_char: case math_text_char:
-  @<Create a character node |p| for |nucleus(q)|, possibly followed by a kern node
-for the italic correction, and set |delta| to the italic correction if a subscript
-is present@>@;@+break;
+  @<Create a character node |p| for |nucleus(q)|, possibly followed by a kern
+node for the italic correction, and set |delta| to the italic correction if
+a subscript is present@>@;@+break;
 case empty: p=null;@+break;
 case sub_box: p=info(nucleus(q));@+break;
 case sub_mlist: {@+cur_mlist=info(nucleus(q));save_style=cur_style;
@@ -15347,8 +15433,8 @@
   @<Construct a subscript box |x| when there is no superscript@>@;
 else{@+@<Construct a superscript box |x|@>;
   if (math_type(subscr(q))==empty) shift_amount(x)=-shift_up;
-  else@<Construct a sub/superscript combination box |x|, with the superscript offset
-by |delta|@>;
+  else@<Construct a sub/superscript combination box |x|, with the superscript
+offset by |delta|@>;
   }
 if (new_hlist(q)==null) new_hlist(q)=x;
 else{@+p=new_hlist(q);
@@ -15418,10 +15504,10 @@
 p=temp_head;link(p)=null;q=mlist;r_type=0;cur_style=style;
 @<Set up the values of |cur_size| and |cur_mu|, based on |cur_style|@>;
 while (q!=null)
-  {@+@<If node |q| is a style node, change the style and |goto delete_q|; otherwise
-if it is not a noad, put it into the hlist, advance |q|, and |goto done|; otherwise
-set |s| to the size of noad |q|, set |t| to the associated type (|ord_noad.. inner_noad|),
-and set |pen| to the associated penalty@>;
+  {@+@<If node |q| is a style node, change the style and |goto delete_q|;
+otherwise if it is not a noad, put it into the hlist, advance |q|, and |goto
+done|; otherwise set |s| to the size of noad |q|, set |t| to the associated
+type (|ord_noad.. inner_noad|), and set |pen| to the associated penalty@>;
   @<Append inter-element spacing based on |r_type| and |t|@>;
   @<Append any |new_hlist| entries for |q|, and any appropriate penalties@>;
   if (type(q)==right_noad) t=open_noad;
@@ -15435,18 +15521,22 @@
 @<If node |q| is a style node, change the style...@>=
 t=ord_noad;s=noad_size;pen=inf_penalty;
 switch (type(q)) {
-case op_noad: case open_noad: case close_noad: case punct_noad: case inner_noad: t=type(q);@+break;
+case op_noad: case open_noad: case close_noad:
+  case punct_noad: case inner_noad: t=type(q);@+break;
 case bin_noad: {@+t=bin_noad;pen=bin_op_penalty;
   } @+break;
 case rel_noad: {@+t=rel_noad;pen=rel_penalty;
   } @+break;
-case ord_noad: case vcenter_noad: case over_noad: case under_noad: do_nothing;@+break;
+case ord_noad: case vcenter_noad: case over_noad:
+  case under_noad: do_nothing;@+break;
 case radical_noad: s=radical_noad_size;@+break;
 case accent_noad: s=accent_noad_size;@+break;
 case fraction_noad: s=fraction_noad_size;@+break;
 case left_noad: case right_noad: t=make_left_right(q, style, max_d, max_h);@+break;
 case style_node: @<Change the current style and |goto delete_q|@>@;
-case whatsit_node: case penalty_node: case rule_node: case disc_node: case adjust_node: case ins_node: case mark_node:
+case whatsit_node: case penalty_node:
+  case rule_node: case disc_node: case adjust_node:
+  case ins_node: case mark_node:
  case glue_node: case kern_node: @t@>@;@/
   {@+link(p)=q;p=q;q=link(q);link(p)=null;goto done;
   }
@@ -15814,8 +15904,8 @@
    /*at this point, |cur_cmd==left_brace|*/
 loop at +{@+@<Append the current tabskip glue to the preamble list@>;
   if (cur_cmd==car_ret) goto done; /*\.{\\cr} ends the preamble*/
-  @<Scan preamble text until |cur_cmd| is |tab_mark| or |car_ret|, looking for changes
-in the tabskip glue; append an alignrecord to the preamble list@>;
+  @<Scan preamble text until |cur_cmd| is |tab_mark| or |car_ret|, looking
+for changes in the tabskip glue; append an alignrecord to the preamble list@>;
   }
 done: scanner_status=normal
 
@@ -16213,15 +16303,15 @@
 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@>;
+@<Go through the preamble list, determining the column widths and changing
+the alignrecords to dummy unset boxes@>;
 if (x)
 { @<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@>;
+{ @<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();
 }
@@ -16271,8 +16361,8 @@
 if (width(q)==null_flag)
   @<Nullify |width(q)| and the tabskip glue following this column@>;
 if (info(q)!=end_span)
-  @<Merge the widths in the span nodes of |q| with those of |p|, destroying the span
-nodes of |q|@>;
+  @<Merge the widths in the span nodes of |q| with those of |p|, destroying
+the span nodes of |q|@>;
 type(q)=unset_node;span_count(q)=min_quarterword;height(q)=0;
 depth(q)=0;glue_order(q)=normal;glue_sign(q)=normal;
 glue_stretch(q)=0;glue_shrink(q)=0;q=p;
@@ -16341,7 +16431,8 @@
     if (type(q)==unset_node)
       @<Set the unset box |q| and the unset boxes in it@>@;
     else if (type(q)==rule_node)
-      @<Make the running dimensions in rule |q| extend to the boundaries of the alignment@>;
+      @<Make the running dimensions in rule |q| extend to the boundaries of
+the alignment@>;
   s=q;q=link(q);
   }
 
@@ -16381,14 +16472,14 @@
 n=span_count(r);t=width(s);w=t;u=hold_head;
 while (n > min_quarterword)
   {@+decr(n);
-  @<Append tabskip glue and an empty box to list |u|, and update |s| and |t| as the
-prototype nodes are passed@>;
+  @<Append tabskip glue and an empty box to list |u|, and update |s| and |t|
+as the prototype nodes are passed@>;
   }
 if (mode==-vmode)
-  @<Make the unset node |r| into an |hlist_node| of width |w|, setting the glue as
-if the width were |t|@>@;
-else@<Make the unset node |r| into a |vlist_node| of height |w|, setting the glue
-as if the height were |t|@>;
+  @<Make the unset node |r| into an |hlist_node| of width |w|, setting the
+glue as if the width were |t|@>@;
+else@<Make the unset node |r| into a |vlist_node| of height |w|, setting the
+glue as if the height were |t|@>;
 shift_amount(r)=0;
 if (u!=hold_head)  /*append blank boxes to account for spanned nodes*/
   {@+link(u)=link(r);link(r)=link(hold_head);r=u;
@@ -16534,8 +16625,8 @@
 pack_begin_line=mode_line; /*this is for over/underfull box messages*/
 @<Get ready to start line breaking@>;
 @<Find optimal breakpoints@>;
-@<Break the paragraph at the chosen breakpoints, justify the resulting lines to the
-correct widths, and append them to the current vertical list@>;
+@<Break the paragraph at the chosen breakpoints, justify the resulting lines
+to the correct widths, and append them to the current vertical list@>;
 @<Clean up the memory by removing the break nodes@>;
 pack_begin_line=0;
 }
@@ -16706,7 +16797,8 @@
 @<Glob...@>=
 static scaled @!active_width0[6], *const @!active_width = @!active_width0-1;
    /*distance from first active node to~|cur_p|*/
-static scaled @!cur_active_width0[6], *const @!cur_active_width = @!cur_active_width0-1; /*distance from current active node*/
+static scaled @!cur_active_width0[6],
+  *const @!cur_active_width = @!cur_active_width0-1; /*distance from current active node*/
 static scaled @!background0[6], *const @!background = @!background0-1; /*length of an ``empty'' line*/
 static scaled @!break_width0[6], *const @!break_width = @!break_width0-1; /*length being computed after current break*/
 
@@ -16855,14 +16947,14 @@
 no_break_yet=true;prev_r=active;old_l=0;
 do_all_six(copy_to_cur_active);
 loop at +{@+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 continue|@>;
-  @<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 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 continue| if a line from |r| to |cur_p| is
-infeasible, otherwise record a new feasible break@>;
+  @<If node |r| is of type |delta_node|, update |cur_active_width|, set |prev_r|
+and |prev_prev_r|, then |goto continue|@>;
+  @<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
+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 continue| if a line from
+|r| to |cur_p| is infeasible, otherwise record a new feasible break@>;
   }
 end: ;
 #ifdef @!STAT
@@ -16922,13 +17014,16 @@
 @d awful_bad 07777777777 /*more than a billion demerits*/
 
 @<Global...@>=
-static int @!minimal_demerits0[tight_fit-very_loose_fit+1], *const @!minimal_demerits = @!minimal_demerits0-very_loose_fit; /*best total
+static int @!minimal_demerits0[tight_fit-very_loose_fit+1],
+  *const @!minimal_demerits = @!minimal_demerits0-very_loose_fit; /*best total
   demerits known for current line class and position, given the fitness*/
 static int @!minimum_demerits; /*best total demerits known for current line class
   and position*/
-static pointer @!best_place0[tight_fit-very_loose_fit+1], *const @!best_place = @!best_place0-very_loose_fit; /*how to achieve
+static pointer @!best_place0[tight_fit-very_loose_fit+1],
+  *const @!best_place = @!best_place0-very_loose_fit; /*how to achieve
   |minimal_demerits|*/
-static halfword @!best_pl_line0[tight_fit-very_loose_fit+1], *const @!best_pl_line = @!best_pl_line0-very_loose_fit; /*corresponding
+static halfword @!best_pl_line0[tight_fit-very_loose_fit+1],
+  *const @!best_pl_line = @!best_pl_line0-very_loose_fit; /*corresponding
   line number*/
 
 @ @<Get ready to start...@>=
@@ -17070,7 +17165,8 @@
     break_width[1]=@|break_width[1]-
       char_width(f, char_info(f, character(lig_char(v))));
     } @+break;
-  case hlist_node: case vlist_node: case rule_node: case kern_node:
+  case hlist_node: case vlist_node: case rule_node:
+  case kern_node:
     break_width[1]=break_width[1]-width(v);@+break;
   default:confusion("disc1");
 @:this can't happen disc1}{\quad disc1@>
@@ -17086,7 +17182,8 @@
     break_width[1]=break_width[1]+
       char_width(f, char_info(f, character(lig_char(s))));
     } @+break;
-  case hlist_node: case vlist_node: case rule_node: case kern_node:
+  case hlist_node: case vlist_node: case rule_node:
+  case kern_node:
     break_width[1]=break_width[1]+width(s);@+break;
   default:confusion("disc2");
 @:this can't happen disc2}{\quad disc2@>
@@ -17252,13 +17349,13 @@
 @^inner loop@>
 shortfall=line_width-cur_active_width[1]; /*we're this much too short*/
 if (shortfall > 0)
-  @<Set the value of |b| to the badness for stretching the line, and compute the corresponding
-|fit_class|@>@;
-else@<Set the value of |b| to the badness for shrinking the line, and compute the
-corresponding |fit_class|@>;
+  @<Set the value of |b| to the badness for stretching the line, and compute
+the corresponding |fit_class|@>@;
+else@<Set the value of |b| to the badness for shrinking the line, and compute
+the corresponding |fit_class|@>;
 if ((b > inf_bad)||(pi==eject_penalty))
-  @<Prepare to deactivate node~|r|, and |goto deactivate| unless there is a reason
-to consider lines of text from |r| to |cur_p|@>@;
+  @<Prepare to deactivate node~|r|, and |goto deactivate| unless there is
+a reason to consider lines of text from |r| to |cur_p|@>@;
 else{@+prev_r=r;
   if (b > threshold) goto resume;
   node_r_stays_active=true;
@@ -17412,8 +17509,8 @@
 
 @<Deactivate node |r|@>=
 link(prev_r)=link(r);free_node(r, active_node_size);
-if (prev_r==active) @<Update the active widths, since the first active node has been
-deleted@>@;
+if (prev_r==active) @<Update the active widths, since the first active node
+has been deleted@>@;
 else if (type(prev_r)==delta_node)
   {@+r=link(prev_r);
   if (r==last_active)
@@ -17498,12 +17595,12 @@
   cur_p=link(temp_head);auto_breaking=true;@/
   prev_p=cur_p; /*glue at beginning is not a legal breakpoint*/
   while ((cur_p!=null)&&(link(active)!=last_active))
-    @<Call |try_break| if |cur_p| is a legal breakpoint; on the second pass, also
-try to hyphenate the next word, if |cur_p| is a glue node; then advance |cur_p| to
-the next node of the paragraph that could possibly be a legal breakpoint@>;
+    @<Call |try_break| if |cur_p| is a legal breakpoint; on the second pass,
+also try to hyphenate the next word, if |cur_p| is a glue node; then advance
+|cur_p| to the next node of the paragraph that could possibly be a legal breakpoint@>;
   if (cur_p==null)
-    @<Try the final line break at the end of the paragraph, and |goto done| if the
-desired breakpoints have been found@>;
+    @<Try the final line break at the end of the paragraph, and |goto done|
+if the desired breakpoints have been found@>;
   @<Clean up the memory by removing the break nodes@>;
   if (!second_pass)
     {
@@ -17573,9 +17670,10 @@
   @<Advance \(c)|cur_p| to the node following the present string of characters@>;
 switch (type(cur_p)) {
 case hlist_node: case vlist_node: case rule_node: act_width=act_width+width(cur_p);@+break;
-case whatsit_node: @<Advance \(p)past a whatsit node in the \(l)|line_break| loop@>@;@+break;
-case glue_node: {@+@<If node |cur_p| is a legal breakpoint, call |try_break|; then
-update the active widths by including the glue in |glue_ptr(cur_p)|@>;
+case whatsit_node: @<Advance \(p)past a whatsit node in the \(l)|line_break|
+loop@>@;@+break;
+case glue_node: {@+@<If node |cur_p| is a legal breakpoint, call |try_break|;
+then update the active widths by including the glue in |glue_ptr(cur_p)|@>;
   if (second_pass&&auto_breaking)
     hyphenate_word();
   } @+break;
@@ -17584,7 +17682,8 @@
 case ligature_node: {@+f=font(lig_char(cur_p));
   act_width=act_width+char_width(f, char_info(f, character(lig_char(cur_p))));
   } @+break;
-case disc_node: @<Try to break after a discretionary fragment, then |goto done5|@>@;
+case disc_node: @<Try to break after a discretionary fragment, then |goto
+done5|@>@;
 case math_node: {@+auto_breaking=(subtype(cur_p)==after);kern_break;
   } @+break;
 case penalty_node: try_break(penalty(cur_p), unhyphenated);@+break;
@@ -17657,7 +17756,8 @@
     disc_width=disc_width+
       char_width(f, char_info(f, character(lig_char(s))));
     } @+break;
-  case hlist_node: case vlist_node: case rule_node: case kern_node:
+  case hlist_node: case vlist_node: case rule_node:
+  case kern_node:
     disc_width=disc_width+width(s);@+break;
   default:confusion("disc3");
 @:this can't happen disc3}{\quad disc3@>
@@ -17673,7 +17773,8 @@
     act_width=act_width+
       char_width(f, char_info(f, character(lig_char(s))));
     } @+break;
-  case hlist_node: case vlist_node: case rule_node: case kern_node:
+  case hlist_node: case vlist_node: case rule_node:
+  case kern_node:
     act_width=act_width+width(s);@+break;
   default:confusion("disc4");
 @:this can't happen disc4}{\quad disc4@>
@@ -17771,10 +17872,11 @@
 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@>;
+@<Reverse the links of the relevant passive nodes, setting |cur_p| to the
+first breakpoint@>;
 cur_line=prev_graf+1;
-@/do at +{@<Justify the line ending at breakpoint |cur_p|, and append it to the current
-vertical list, together with associated penalties and other insertions@>;
+@/do at +{@<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@>;
@@ -17829,12 +17931,12 @@
 the |left_skip| glue at the left of the line, unless it is zero.
 
 @<Justify the line ending at breakpoint |cur_p|, and append it...@>=
-@<Modify the end of the line to reflect the nature of the break and to include \.{\\rightskip};
-also set the proper value of |disc_break|@>;
+@<Modify the end of the line to reflect the nature of the break and to include
+\.{\\rightskip}; also set the proper value of |disc_break|@>;
 @<Put the \(l)\.{\\leftskip} glue at the left and detach this line@>;
 @<Call the packaging subroutine, setting |just_box| to the justified box@>;
-@<Append the new box to the current vertical list, followed by the list of special
-nodes taken out of the box by the packager@>;
+@<Append the new box to the current vertical list, followed by the list of
+special nodes taken out of the box by the packager@>;
 @<Append a penalty node, if a nonzero penalty is appropriate@>@;
 
 @ At the end of the following code, |q| will point to the final node on the
@@ -17861,7 +17963,8 @@
 
 @ @<Change discretionary to compulsory...@>=
 {@+t=replace_count(q);
-@<Destroy the |t| nodes following |q|, and make |r| point to the following node@>;
+@<Destroy the |t| nodes following |q|, and make |r| point to the following
+node@>;
 if (post_break(q)!=null) @<Transplant the post-break list@>;
 if (pre_break(q)!=null) @<Transplant the pre-break list@>;
 link(q)=r;disc_break=true;
@@ -18055,8 +18158,8 @@
   {@+@<Skip to node |ha|, or |goto done1| if no hyphenation should be attempted@>;
   if (l_hyf+r_hyf > 63) goto done1;
   @<Skip to node |hb|, putting letters into |hu| and |hc|@>;
-  @<Check that the nodes following |hb| permit hyphenation and that at least |l_hyf+r_hyf|
-letters have been found, otherwise |goto done1|@>;
+  @<Check that the nodes following |hb| permit hyphenation and that at least
+|l_hyf+r_hyf| letters have been found, otherwise |goto done1|@>;
   hyphenate();
   }
 done1: ;}
@@ -18068,7 +18171,8 @@
 @<Local variables for hyphenation@>@;
 @<Find hyphen locations for the word in |hc|, or |return|@>;
 @<If no hyphens were found, |return|@>;
-@<Replace nodes |ha..hb| by a sequence of nodes that includes the discretionary hyphens@>;
+@<Replace nodes |ha..hb| by a sequence of nodes that includes the discretionary
+hyphens@>;
 }
 
 @ The first thing we need to do is find the node |ha| just before the
@@ -18110,8 +18214,8 @@
     hb=s;incr(hn);hu[hn]=c;hc[hn]=lc_code(c);hyf_bchar=non_char;
     }
   else if (type(s)==ligature_node)
-    @<Move the characters of a ligature node to |hu| and |hc|; but |goto done3| if
-they are not all letters@>@;
+    @<Move the characters of a ligature node to |hu| and |hc|; but |goto done3|
+if they are not all letters@>@;
   else if ((type(s)==kern_node)&&(subtype(s)==normal))
     {@+hb=s;
     hyf_bchar=font_bchar[hf];
@@ -18146,7 +18250,9 @@
     switch (type(s)) {
     case ligature_node: do_nothing;@+break;
     case kern_node: if (subtype(s)!=normal) goto done4;@+break;
-    case whatsit_node: case glue_node: case penalty_node: case ins_node: case adjust_node: case mark_node:
+    case whatsit_node: case glue_node:
+  case penalty_node: case ins_node: case adjust_node:
+  case mark_node:
       goto done4;
     default:goto done1;
     }
@@ -18303,10 +18409,10 @@
 hyphen_passed=0;t=hold_head;w=0;link(hold_head)=null;
   /*at this point |ligature_present==lft_hit==rt_hit==false|*/
 @<Set up data structures with the cursor following position |j|@>;
-resume: @<If there's a ligature or kern at the cursor position, update the data structures,
-possibly advancing~|j|; continue until the cursor moves@>;
-@<Append a ligature and/or kern to the translation; |goto continue| if the stack of
-inserted ligatures is nonempty@>;
+resume: @<If there's a ligature or kern at the cursor position, update the
+data structures, possibly advancing~|j|; continue until the cursor moves@>;
+@<Append a ligature and/or kern to the translation; |goto continue| if the
+stack of inserted ligatures is nonempty@>;
 return j;
 }
 
@@ -18379,8 +18485,9 @@
         {@+hyphen_passed=j;hchar=non_char;
         }
       if (op_byte(q) < kern_flag)
-      @<Carry out a ligature replacement, updating the cursor structure and possibly
-advancing~|j|; |goto continue| if the cursor doesn't advance, otherwise |goto done|@>;
+      @<Carry out a ligature replacement, updating the cursor structure and
+possibly advancing~|j|; |goto continue| if the cursor doesn't advance, otherwise
+|goto done|@>;
       w=char_kern(hf, q);goto done; /*this kern will be inserted below*/
      }
   if (skip_byte(q) >= stop_flag)
@@ -18482,8 +18589,8 @@
     }
   }
 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@>;
+  @<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));
 link(s)=q
 
@@ -18504,9 +18611,10 @@
 while (link(major_tail) > null) advance_major_tail;
 i=hyphen_passed;hyf[i]=0;
 @<Put the \(c)characters |hu[l..i]| and a hyphen into |pre_break(r)|@>;
-@<Put the \(c)characters |hu[i+1..]| into |post_break(r)|, appending to this 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@>;
+@<Put the \(c)characters |hu[i+1..]| into |post_break(r)|, appending to this
+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])))
 
@@ -18632,9 +18740,12 @@
 
 @<Glob...@>=
 static two_halves @!trie[trie_size+1]; /*|trie_link|, |trie_char|, |trie_op|*/
-static small_number @!hyf_distance0[trie_op_size], *const @!hyf_distance = @!hyf_distance0-1; /*position |k-j| of $n_j$*/
-static small_number @!hyf_num0[trie_op_size], *const @!hyf_num = @!hyf_num0-1; /*value of $n_j$*/
-static quarterword @!hyf_next0[trie_op_size], *const @!hyf_next = @!hyf_next0-1; /*continuation code*/
+static small_number @!hyf_distance0[trie_op_size],
+  *const @!hyf_distance = @!hyf_distance0-1; /*position |k-j| of $n_j$*/
+static small_number @!hyf_num0[trie_op_size],
+  *const @!hyf_num = @!hyf_num0-1; /*value of $n_j$*/
+static quarterword @!hyf_next0[trie_op_size],
+  *const @!hyf_next = @!hyf_next0-1; /*continuation code*/
 static uint16_t @!op_start[256]; /*offset for current language*/
 
 @ @<Local variables for hyph...@>=
@@ -18648,8 +18759,8 @@
 
 @<Find hyphen locations for the word in |hc|...@>=
 for (j=0; j<=hn; j++) hyf[j]=0;
-@<Look for the word |hc[1..hn]| in the exception table, and |goto found| (with |hyf|
-containing the hyphens) if an entry is found@>;
+@<Look for the word |hc[1..hn]| in the exception table, and |goto found| (with
+|hyf| containing the hyphens) if an entry is found@>;
 if (trie_char(cur_lang+1)!=qi(cur_lang)) return; /*no patterns for |cur_lang|*/
 hc[0]=0;hc[hn+1]=0;hc[hn+2]=256; /*insert delimiters*/
 for (j=0; j<=hn-r_hyf+1; j++)
@@ -18721,8 +18832,9 @@
 @<Look for the word |hc[1...@>=
 h=hc[1];incr(hn);hc[hn]=cur_lang;
 for (j=2; j<=hn; j++) h=(h+h+hc[j])%hyph_size;
-loop at +{@+@<If the string |hyph_word[h]| is less than \(hc)|hc[1..hn]|, |goto not_found|;
-but if the two strings are equal, set |hyf| to the hyphen positions and |goto found|@>;
+loop at +{@+@<If the string |hyph_word[h]| is less than \(hc)|hc[1..hn]|, |goto
+not_found|; but if the two strings are equal, set |hyf| to the hyphen positions
+and |goto found|@>;
   if (h > 0) decr(h);@+else h=hyph_size;
   }
 not_found: decr(hn)
@@ -18777,8 +18889,8 @@
 pool_pointer @!u, @!v; /*indices into |str_pool|*/
 scan_left_brace(); /*a left brace must follow \.{\\hyphenation}*/
 set_cur_lang;
-@<Enter as many hyphenation exceptions as are listed, until coming to a right brace;
-then |return|@>;
+@<Enter as many hyphenation exceptions as are listed, until coming to a right
+brace; then |return|@>;
 }
 
 @ @<Enter as many...@>=
@@ -18785,7 +18897,8 @@
 n=0;p=null;
 loop at +{@+get_x_token();
   reswitch: switch (cur_cmd) {
-  case letter: case other_char: case char_given: @<Append a new letter or hyphen@>@;@+break;
+  case letter: case other_char: case char_given: @<Append a new letter or
+hyphen@>@;@+break;
   case char_num: {@+scan_char_num();cur_chr=cur_val;cur_cmd=char_given;
     goto reswitch;
     }
@@ -18903,13 +19016,16 @@
 
 @<Glob...@>=
 #ifdef @!INIT
-static uint16_t @!trie_op_hash0[trie_op_size+trie_op_size+1], *const @!trie_op_hash = @!trie_op_hash0+trie_op_size;
+static uint16_t @!trie_op_hash0[trie_op_size+trie_op_size+1],
+  *const @!trie_op_hash = @!trie_op_hash0+trie_op_size;
    /*trie op codes for quadruples*/
 static quarterword @!trie_used[256];
    /*largest opcode used so far for this language*/
-static ASCII_code @!trie_op_lang0[trie_op_size], *const @!trie_op_lang = @!trie_op_lang0-1;
+static ASCII_code @!trie_op_lang0[trie_op_size],
+  *const @!trie_op_lang = @!trie_op_lang0-1;
    /*language part of a hashed quadruple*/
-static quarterword @!trie_op_val0[trie_op_size], *const @!trie_op_val = @!trie_op_val0-1;
+static quarterword @!trie_op_val0[trie_op_size],
+  *const @!trie_op_val = @!trie_op_val0-1;
    /*opcode corresponding to a hashed quadruple*/
 static int @!trie_op_ptr; /*number of stored ops so far*/
 #endif
@@ -19083,7 +19199,8 @@
 
 @<Glob...@>=
 #ifdef @!INIT
-static bool @!trie_taken0[trie_size], *const @!trie_taken = @!trie_taken0-1;
+static bool @!trie_taken0[trie_size],
+  *const @!trie_taken = @!trie_taken0-1;
    /*does a family start here?*/
 @t\hskip10pt@>static trie_pointer @!trie_min[256];
    /*the first possible slot for each character*/
@@ -19134,8 +19251,8 @@
 loop at +{@+h=z-c;@/
   @<Ensure that |trie_max>=h+256|@>;
   if (trie_taken[h]) goto not_found;
-  @<If all characters of the family fit relative to |h|, then |goto found|,\30\ otherwise
-|goto not_found|@>;
+  @<If all characters of the family fit relative to |h|, then |goto found|,\30\
+otherwise |goto not_found|@>;
   not_found: z=trie_link(z); /*move to the next hole*/
   }
 found: @<Pack the family into |trie| relative to |h|@>;
@@ -19242,7 +19359,8 @@
 ASCII_code @!c; /*character being inserted*/
 if (trie_not_ready)
   {@+set_cur_lang;scan_left_brace(); /*a left brace must follow \.{\\patterns}*/
-  @<Enter all of the patterns into a linked trie, until coming to a right brace@>;
+  @<Enter all of the patterns into a linked trie, until coming to a right
+brace@>;
   }
 else{@+print_err("Too late for ");print_esc("patterns");
   help1("All patterns must be given before typesetting begins.");
@@ -19437,9 +19555,9 @@
 small_number @!t; /*|type| of the node following a kern*/
 prev_p=p; /*an initial glue node is not a legal breakpoint*/
 least_cost=awful_bad;do_all_six(set_height_zero);prev_dp=0;
-loop at +{@+@<If node |p| is a legal breakpoint, check if this break is the best known,
-and |goto done| if |p| is null or if the page-so-far is already too full to accept
-more stuff@>;
+loop at +{@+@<If node |p| is a legal breakpoint, check if this break is the best
+known, and |goto done| if |p| is null or if the page-so-far is already too
+full to accept more stuff@>;
   prev_p=p;p=link(prev_p);
   }
 done: return best_place;
@@ -19459,14 +19577,14 @@
 
 @<If node |p| is a legal breakpoint, check...@>=
 if (p==null) pi=eject_penalty;
-else@<Use node |p| to update the current height and depth measurements; if this node
-is not a legal breakpoint, |goto not_found| or |update_heights|, otherwise set |pi|
-to the associated penalty at the break@>;
-@<Check if node |p| is a new champion breakpoint; then \(go)|goto done| if |p| is
-a forced break or if the page-so-far is already too full@>;
+else@<Use node |p| to update the current height and depth measurements; if
+this node is not a legal breakpoint, |goto not_found| or |update_heights|,
+otherwise set |pi| to the associated penalty at the break@>;
+@<Check if node |p| is a new champion breakpoint; then \(go)|goto done| if
+|p| is a forced break or if the page-so-far is already too full@>;
 if ((type(p) < glue_node)||(type(p) > kern_node)) goto not_found;
-update_heights: @<Update the current height and depth measurements with respect to
-a glue or kern node~|p|@>;
+update_heights: @<Update the current height and depth measurements with respect
+to a glue or kern node~|p|@>;
 not_found: if (prev_dp > d)
     {@+cur_height=cur_height+prev_dp-d;
     prev_dp=d;
@@ -19568,8 +19686,8 @@
   }
 @<Dispense with trivial cases of void or bad boxes@>;
 q=vert_break(list_ptr(v), h, split_max_depth);
-@<Look at all the marks in nodes before the break, and set the final link to |null|
-at the break@>;
+@<Look at all the marks in nodes before the break, and set the final link
+to |null| at the break@>;
 q=prune_page_top(q, saving_vdiscards > 0);
 p=list_ptr(v);list_ptr(v)=null;flush_node_list(v);
 if (q!=null) q=vpack(q, natural);
@@ -19957,16 +20075,17 @@
 the various labels have a well-understood meaning.
 
 @<Move node |p| to the current page;...@>=
-@<If the current page is empty and node |p| is to be deleted, |goto done1|; otherwise
-use node |p| to update the state of the current page; if this node is an insertion,
-|goto contribute|; otherwise if this node is not a legal breakpoint, |goto contribute|
-or |update_heights|; otherwise set |pi| to the penalty associated with this breakpoint@>;
-@<Check if node |p| is a new champion breakpoint; then \(if)if it is time for a page
-break, prepare for output, and either fire up the user's output routine and |return|
-or ship out the page and |goto done|@>;
+@<If the current page is empty and node |p| is to be deleted, |goto done1|;
+otherwise use node |p| to update the state of the current page; if this node
+is an insertion, |goto contribute|; otherwise if this node is not a legal
+breakpoint, |goto contribute| or |update_heights|; otherwise set |pi| to the
+penalty associated with this breakpoint@>;
+@<Check if node |p| is a new champion breakpoint; then \(if)if it is time
+for a page break, prepare for output, and either fire up the user's output
+routine and |return| or ship out the page and |goto done|@>;
 if ((type(p) < glue_node)||(type(p) > kern_node)) goto contribute;
-update_heights: @<Update the current page measurements with respect to the glue or
-kern specified by node~|p|@>;
+update_heights: @<Update the current page measurements with respect to the
+glue or kern specified by node~|p|@>;
 contribute: @<Make sure that |page_max_depth| is not exceeded@>;
 @<Link node |p| into the current page and |goto done|@>;
 done1: @<Recycle node |p|@>;
@@ -19992,10 +20111,12 @@
 @<If the current page is empty...@>=
 switch (type(p)) {
 case hlist_node: case vlist_node: case rule_node: if (page_contents < box_there)
-    @<Initialize the current page, insert the \.{\\topskip} glue ahead of |p|, and
-|goto continue|@>@;
-  else@<Prepare to move a box or rule node to the current page, then |goto contribute|@>@;@+break;
-case whatsit_node: @<Prepare to move whatsit |p| to the current page, then |goto contribute|@>;
+    @<Initialize the current page, insert the \.{\\topskip} glue ahead of
+|p|, and |goto continue|@>@;
+  else@<Prepare to move a box or rule node to the current page, then |goto
+contribute|@>@;@+break;
+case whatsit_node: @<Prepare to move whatsit |p| to the current page, then
+|goto contribute|@>;
 case glue_node: if (page_contents < box_there) goto done1;
   else if (precedes_break(page_tail)) pi=0;
   else goto update_heights;@+break;
@@ -20055,8 +20176,8 @@
 
 @ @<Check if node |p| is a new champion breakpoint; then \(if)...@>=
 if (pi < inf_penalty)
-  {@+@<Compute the badness, |b|, of the current page, using |awful_bad| if the box
-is too full@>;
+  {@+@<Compute the badness, |b|, of the current page, using |awful_bad| if
+the box is too full@>;
   if (b < awful_bad)
     if (pi <= eject_penalty) c=pi;
     else if (b < inf_bad) c=b+pi+insert_penalties;
@@ -20111,8 +20232,8 @@
 while (n >= subtype(link(r))) r=link(r);
 n=qo(n);
 if (subtype(r)!=qi(n))
-  @<Create a page insertion node with |subtype(r)=qi(n)|, and include the glue correction
-for box |n| in the current page state@>;
+  @<Create a page insertion node with |subtype(r)=qi(n)|, and include the
+glue correction for box |n| in the current page state@>;
 if (type(r)==split_up) insert_penalties=insert_penalties+float_cost(p);
 else{@+last_ins_ptr(r)=p;
   delta=page_goal-page_total-page_depth+page_shrink;
@@ -20122,7 +20243,8 @@
   if (((h <= 0)||(h <= delta))&&(height(p)+height(r) <= dimen(n)))
     {@+page_goal=page_goal-h;height(r)=height(r)+height(p);
     }
-  else@<Find the best way to split the insertion, and change |type(r)| to |split_up|@>;
+  else@<Find the best way to split the insertion, and change |type(r)| to
+|split_up|@>;
   }
 goto contribute;
 }
@@ -20230,8 +20352,8 @@
   delete_token_ref(first_mark);first_mark=null;
   }
 @<Put the \(o)optimal current page into box 255, update |first_mark| and |bot_mark|,
-append insertions to their boxes, and put the remaining nodes back on the contribution
-list@>;
+append insertions to their boxes, and put the remaining nodes back on the
+contribution list@>;
 if ((top_mark!=null)&&(first_mark==null))
   {@+first_mark=top_mark;add_token_ref(top_mark);
   }
@@ -20265,15 +20387,15 @@
 while (p!=best_page_break)
   {@+if (type(p)==ins_node)
     {@+if (holding_inserts <= 0)
-       @<Either insert the material specified by node |p| into the appropriate box,
-or hold it for the next page; also delete node |p| from the current page@>;
+       @<Either insert the material specified by node |p| into the appropriate
+box, or hold it for the next page; also delete node |p| from the current page@>;
     }
   else if (type(p)==mark_node) @<Update the values of |first_mark| and |bot_mark|@>;
   prev_p=p;p=link(prev_p);
   }
 split_top_skip=save_split_top_skip;
-@<Break the current page at node |p|, put it in box~255, and put the remaining nodes
-on the contribution list@>;
+@<Break the current page at node |p|, put it in box~255, and put the remaining
+nodes on the contribution list@>;
 @<Delete \(t)the page-insertion nodes@>@;
 
 @ @<Ensure that box 255 is empty before output@>=
@@ -20362,14 +20484,14 @@
 if (best_ins_ptr(r)==null) wait=true;
 else{@+wait=false;s=last_ins_ptr(r);link(s)=ins_ptr(p);
   if (best_ins_ptr(r)==p)
-    @<Wrap up the box specified by node |r|, splitting node |p| if called for; set
-|wait:=true| if node |p| holds a remainder after splitting@>@;
+    @<Wrap up the box specified by node |r|, splitting node |p| if called
+for; set |wait:=true| if node |p| holds a remainder after splitting@>@;
   else{@+while (link(s)!=null) s=link(s);
     last_ins_ptr(r)=s;
     }
   }
-@<Either append the insertion node |p| after node |q|, and remove it from the current
-page, or delete |node(p)|@>;
+@<Either append the insertion node |p| after node |q|, and remove it from
+the current page, or delete |node(p)|@>;
 }
 
 @ @<Wrap up the box specified by node |r|, splitting node |p| if...@>=
@@ -20540,7 +20662,8 @@
 big_switch: get_x_token();@/
 reswitch: @<Give diagnostic information, if requested@>;
 switch (abs(mode)+cur_cmd) {
-case hmode+letter: case hmode+other_char: case hmode+char_given: goto main_loop;
+case hmode+letter: case hmode+other_char:
+  case hmode+char_given: goto main_loop;
 case hmode+char_num: {@+scan_char_num();cur_chr=cur_val;goto main_loop;@+}
 case hmode+no_boundary: {@+get_x_token();
   if ((cur_cmd==letter)||(cur_cmd==other_char)||(cur_cmd==char_given)||
@@ -20553,10 +20676,11 @@
 @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) to the
-current hlist in the current font; |goto reswitch| when a non-character has been fetched@>;
-append_normal_space: @<Append a normal inter-word space to the current list, then
-|goto big_switch|@>;
+main_loop: @<Append character |cur_chr| and the following characters (if~any)
+to the current hlist in the current font; |goto reswitch| when a non-character
+has been fetched@>;
+append_normal_space: @<Append a normal inter-word space to the current list,
+then |goto big_switch|@>;
 }
 
 @ When a new token has just been fetched at |big_switch|, we have an
@@ -20644,15 +20768,15 @@
 cur_r=cur_l;cur_l=non_char;
 goto main_lig_loop1; /*begin with cursor after left boundary*/
 @#
-main_loop_wrapup: @<Make a ligature node, if |ligature_present|; insert a null discretionary,
-if appropriate@>;
-main_loop_move: @<If the cursor is immediately followed by the right boundary, |goto
-reswitch|; if it's followed by an invalid character, |goto big_switch|; otherwise
-move the cursor one step to the right and |goto main_lig_loop|@>;
-main_loop_lookahead: @<Look ahead for another character, or leave |lig_stack| empty
-if there's none there@>;
-main_lig_loop: @<If there's a ligature/kern command relevant to |cur_l| and |cur_r|,
-adjust the text appropriately; exit to |main_loop_wrapup|@>;
+main_loop_wrapup: @<Make a ligature node, if |ligature_present|; insert a
+null discretionary, if appropriate@>;
+main_loop_move: @<If the cursor is immediately followed by the right boundary,
+|goto reswitch|; if it's followed by an invalid character, |goto big_switch|;
+otherwise move the cursor one step to the right and |goto main_lig_loop|@>;
+main_loop_lookahead: @<Look ahead for another character, or leave |lig_stack|
+empty if there's none there@>;
+main_lig_loop: @<If there's a ligature/kern command relevant to |cur_l| and
+|cur_r|, adjust the text appropriately; exit to |main_loop_wrapup|@>;
 main_loop_move_lig: @<Move the cursor past a pseudo-ligature, then |goto main_loop_lookahead|
 or |main_lig_loop|@>@;
 
@@ -20830,7 +20954,8 @@
 
 @<Append a normal inter-word space...@>=
 if (space_skip==zero_glue)
-  {@+@<Find the glue specification, |main_p|, for text spaces in the current font@>;
+  {@+@<Find the glue specification, |main_p|, for text spaces in the current
+font@>;
   temp_ptr=new_glue(main_p);
   }
 else temp_ptr=new_param_glue(space_skip_code);
@@ -20875,10 +21000,12 @@
 @ Whew---that covers the main loop. We can now proceed at a leisurely
 pace through the other combinations of possibilities.
 
- at d any_mode(A) case vmode+A: case hmode+A: case mmode+A /*for mode-independent commands*/
+ at d any_mode(A) case vmode+A: case hmode+A:
+  case mmode+A /*for mode-independent commands*/
 
 @<Cases of |main_control| that are not part of the inner loop@>=
-any_mode(relax): case vmode+spacer: case mmode+spacer: case mmode+no_boundary: do_nothing;
+any_mode(relax): case vmode+spacer: case mmode+spacer:
+  case mmode+no_boundary: do_nothing;
 any_mode(ignore_spaces): {@+@<Get the next non-blank non-call...@>;
   goto reswitch;
   }
@@ -20902,7 +21029,8 @@
 non_math(math_style): non_math(math_choice): non_math(vcenter):
 non_math(non_script): non_math(mkern): non_math(limit_switch):
 non_math(mskip): non_math(math_accent):
-case mmode+endv: case mmode+par_end: case mmode+stop: case mmode+vskip: case mmode+un_vbox:
+case mmode+endv: case mmode+par_end: case mmode+stop:
+  case mmode+vskip: case mmode+un_vbox:
 case mmode+valign: case mmode+hrule
 
 @ @<Declare action...@>=
@@ -21026,7 +21154,8 @@
 activates |append_kern|.
 
 @<Cases of |main_control| that build...@>=
-case vmode+vskip: case hmode+hskip: case mmode+hskip: case mmode+mskip: append_glue();@+break;
+case vmode+vskip: case hmode+hskip: case mmode+hskip:
+  case mmode+mskip: append_glue();@+break;
 any_mode(kern): case mmode+mkern: append_kern();@+break;
 
 @ The |hskip| and |vskip| command codes are used for control sequences
@@ -21161,7 +21290,8 @@
   @<Drop current token and complain that it was unmatched@>@;
 else{@+back_input();p=get_avail();link(temp_head)=p;
   print_err("Missing ");
-  @<Prepare to insert a token that matches |cur_group|, and print what it is@>;
+  @<Prepare to insert a token that matches |cur_group|, and print what it
+is@>;
   print(" inserted");ins_list(link(temp_head));
   help5("I've inserted something that you may have forgotten.",@/
   "(See the <inserted text> above.)",@/
@@ -21222,8 +21352,10 @@
   help2("You've closed more groups than you opened.",@/
   "Such booboos are generally harmless, so keep going.");error();
   } @+break;
-case semi_simple_group: case math_shift_group: case math_left_group: extra_right_brace();@+break;
- at t\4@>@<Cases of |handle_right_brace| where a |right_brace| triggers a delayed action@>@;
+case semi_simple_group: case math_shift_group:
+  case math_left_group: extra_right_brace();@+break;
+ at 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@>
 }
@@ -21377,8 +21509,8 @@
 static void box_end(int @!box_context)
 {@+pointer p; /*|ord_noad| for new box in math mode*/
 small_number @!a; /*global prefix*/
-if (box_context < box_flag) @<Append box |cur_box| to the current list, shifted by
-|box_context|@>@;
+if (box_context < box_flag) @<Append box |cur_box| to the current list, shifted
+by |box_context|@>@;
 else if (box_context < ship_out_flag) @<Store \(c)|cur_box| in a box register@>@;
 else if (cur_box!=null)
   if (box_context > ship_out_flag) @<Append a new leader node that uses |cur_box|@>@;
@@ -21456,9 +21588,10 @@
   } @+break;
 case copy_code: {@+scan_register_num();fetch_box(q);cur_box=copy_node_list(q);
   } @+break;
-case last_box_code: @<If the current list ends with a box node, delete it from the
-list and make |cur_box| point to it; otherwise set |cur_box:=null|@>@;@+break;
-case vsplit_code: @<Split off part of a vertical box, make |cur_box| point to it@>@;@+break;
+case last_box_code: @<If the current list ends with a box node, delete it
+from the list and make |cur_box| point to it; otherwise set |cur_box:=null|@>@;@+break;
+case vsplit_code: @<Split off part of a vertical box, make |cur_box| point
+to it@>@;@+break;
 default:@<Initiate the construction of an hbox or vbox, then |return|@>@;
 } @/
 box_end(box_context); /*in simple cases, we use the box immediately*/
@@ -21605,9 +21738,12 @@
 
 @ @<Cases of |main_control| that build...@>=
 case vmode+start_par: new_graf(cur_chr > 0);@+break;
-case vmode+letter: case vmode+other_char: case vmode+char_num: case vmode+char_given:
-   case vmode+math_shift: case vmode+un_hbox: case vmode+vrule:
-   case vmode+accent: case vmode+discretionary: case vmode+hskip: case vmode+valign:
+case vmode+letter: case vmode+other_char:
+  case vmode+char_num: case vmode+char_given:
+   case vmode+math_shift: case vmode+un_hbox:
+  case vmode+vrule:
+   case vmode+accent: case vmode+discretionary:
+  case vmode+hskip: case vmode+valign:
    case vmode+ex_space: case vmode+no_boundary: @t@>@;@/
   {@+back_input();new_graf(true);
   } @+break;
@@ -21661,7 +21797,8 @@
   end_graf(); /*this takes us to the enclosing mode, if |mode > 0|*/
   if (mode==vmode) build_page();
   } @+break;
-case hmode+stop: case hmode+vskip: case hmode+hrule: case hmode+un_vbox: case hmode+halign: head_for_vmode();@+break;
+case hmode+stop: case hmode+vskip: case hmode+hrule:
+  case hmode+un_vbox: case hmode+halign: head_for_vmode();@+break;
 
 @ @<Declare act...@>=
 static void head_for_vmode(void)
@@ -21692,7 +21829,8 @@
 pieces of the program.
 
 @<Cases of |main_control| that build...@>=
-any_mode(insert): case hmode+vadjust: case mmode+vadjust: begin_insert_or_adjust();@+break;
+any_mode(insert): case hmode+vadjust:
+  case mmode+vadjust: begin_insert_or_adjust();@+break;
 any_mode(mark): make_mark();@+break;
 
 @ @<Forbidden...@>=
@@ -21778,7 +21916,8 @@
 pointer @!p, @!q; /*run through the current list*/
 int @!m; /*the length of a replacement list*/
 if ((mode==vmode)&&(tail==head))
-  @<Apologize for inability to do the operation now, unless \.{\\unskip} follows non-glue@>@;
+  @<Apologize for inability to do the operation now, unless \.{\\unskip} follows
+non-glue@>@;
 else{@+if (!is_char_node(tail)) if (type(tail)==cur_chr)
     {@+q=head;
     @/do at +{p=q;
@@ -21835,7 +21974,8 @@
 @ The |un_hbox| and |un_vbox| commands unwrap one of the 256 current boxes.
 
 @<Cases of |main_control| that build...@>=
-case vmode+un_vbox: case hmode+un_hbox: case mmode+un_hbox: unpackage();@+break;
+case vmode+un_vbox: case hmode+un_hbox:
+  case mmode+un_hbox: unpackage();@+break;
 
 @ @<Declare act...@>=
 static void unpackage(void)
@@ -21937,15 +22077,15 @@
 pointer p, @!q; /*for link manipulation*/
 int @!n; /*length of discretionary list*/
 unsave();
-@<Prune the current list, if necessary, until it contains only |char_node|, |kern_node|,
-|hlist_node|, |vlist_node|, |rule_node|, and |ligature_node| items; set |n| to the
-length of the list, and set |q| to the list's tail@>;
+@<Prune the current list, if necessary, until it contains only |char_node|,
+|kern_node|, |hlist_node|, |vlist_node|, |rule_node|, and |ligature_node|
+items; set |n| to the length of the list, and set |q| to the list's tail@>;
 p=link(head);pop_nest();
 switch (saved(-1)) {
 case 0: pre_break(tail)=p;@+break;
 case 1: post_break(tail)=p;@+break;
-case 2: @<Attach list |p| to the current list, and record its length; then finish
-up and |return|@>;
+case 2: @<Attach list |p| to the current list, and record its length; then
+finish up and |return|@>;
 }  /*there are no other cases*/
 incr(saved(-1));new_save_level(disc_group);scan_left_brace();
 push_nest();mode=-hmode;space_factor=1000;
@@ -22020,8 +22160,8 @@
 @^real division@>
   a=char_width(f, char_info(f, character(p)));@/
   do_assignments();@/
-  @<Create a character node |q| for the next character, but set |q:=null| if problems
-arise@>;
+  @<Create a character node |q| for the next character, but set |q:=null|
+if problems arise@>;
   if (q!=null) @<Append the accent with appropriate kerns, then set |p:=q|@>;
   link(tail)=p;tail=p;space_factor=1000;
   }
@@ -22289,8 +22429,8 @@
 v=shift_amount(just_box)+2*quad(cur_font);w=-max_dimen;
 p=list_ptr(just_box);
 while (p!=null)
-  {@+@<Let |d| be the natural width of node |p|; if the node is ``visible,'' |goto
-found|; if the node is glue that stretches or shrinks, set |v:=max_dimen|@>;
+  {@+@<Let |d| be the natural width of node |p|; if the node is ``visible,''
+|goto found|; if the node is glue that stretches or shrinks, set |v:=max_dimen|@>;
   if (v < max_dimen) v=v+d;
   goto not_found;
   found: if (v < max_dimen)
@@ -22312,8 +22452,8 @@
   }
 case ligature_node: @<Make node |p| look like a |char_node|...@>@;
 case kern_node: case math_node: d=width(p);@+break;
-case glue_node: @<Let |d| be the natural width of this glue; if stretching or shrinking,
-set |v:=max_dimen|; |goto found| in the case of leaders@>@;@+break;
+case glue_node: @<Let |d| be the natural width of this glue; if stretching
+or shrinking, set |v:=max_dimen|; |goto found| in the case of leaders@>@;@+break;
 case whatsit_node: @<Let |d| be the width of the whatsit |p|@>;@+break;
 default:d=0;
 }
@@ -22437,7 +22577,8 @@
 @^Knuth, Donald Ervin@>
 
 @<Cases of |main_control| that build...@>=
-case mmode+letter: case mmode+other_char: case mmode+char_given:
+case mmode+letter: case mmode+other_char:
+  case mmode+char_given:
   set_math_char(ho(math_code(cur_chr)));@+break;
 case mmode+char_num: {@+scan_char_num();cur_chr=cur_val;
   set_math_char(ho(math_code(cur_chr)));
@@ -22552,8 +22693,8 @@
   default:cur_val=-1;
   }
   }
-if (cur_val < 0) @<Report that an invalid delimiter code is being changed to null;
-set~|cur_val:=0|@>;
+if (cur_val < 0) @<Report that an invalid delimiter code is being changed
+to null; set~|cur_val:=0|@>;
 small_fam(p)=(cur_val/04000000)%16;
 small_char(p)=qi((cur_val/010000)%256);
 large_fam(p)=(cur_val/256)%16;
@@ -22931,8 +23072,8 @@
 pointer @!p; /*the formula*/
 pointer @!a; /*box containing equation number*/
 danger=false;
-@<Check that the necessary fonts for math symbols are present; if not, flush the current
-math lists and set |danger:=true|@>;
+@<Check that the necessary fonts for math symbols are present; if not, flush
+the current math lists and set |danger:=true|@>;
 m=mode;l=false;p=fin_mlist(null); /*this pops the nest*/
 if (mode==-m)  /*end of equation number*/
   {@+@<Check that another \.\$ follows@>;
@@ -22941,8 +23082,8 @@
   unsave();decr(save_ptr); /*now |cur_group==math_shift_group|*/
   if (saved(0)==1) l=true;
   danger=false;
-  @<Check that the necessary fonts for math symbols are present; if not, flush the
-current math lists and set |danger:=true|@>;
+  @<Check that the necessary fonts for math symbols are present; if not, flush
+the current math lists and set |danger:=true|@>;
   m=mode;p=fin_mlist(null);
   }
 else a=null;
@@ -23507,8 +23648,8 @@
   p=cur_chr; /*|p==every_par_loc| or |output_routine_loc| or \dots*/
   scan_optional_equals();
   @<Get the next non-blank non-relax non-call token@>;
-  if (cur_cmd!=left_brace) @<If the right-hand side is a token parameter or token
-register, finish the assignment and |goto done|@>;
+  if (cur_cmd!=left_brace) @<If the right-hand side is a token parameter or
+token register, finish the assignment and |goto done|@>;
   back_input();cur_cs=q;q=scan_toks(false, false);
   if (link(def_ref)==null)  /*empty list: revert to the default*/
     {@+sa_define(p, null, p, undefined_cs, null);free_avail(def_ref);
@@ -23637,7 +23778,8 @@
 @ Next we consider changes to \TeX's numeric registers.
 
 @<Assignments@>=
-case internal_register: case advance: case multiply: case divide: do_register_command(a);@+break;
+case internal_register: case advance:
+  case multiply: case divide: do_register_command(a);@+break;
 
 @ We use the fact that |internal_register < advance < multiply < divide|.
 
@@ -23964,8 +24106,8 @@
   }
 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|@>;
+@<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: define(u, set_font, f);eqtb[font_id_base+f]=eqtb[u];font_id_text(f)=t;
 }
@@ -24273,7 +24415,8 @@
 case show_box_code: @<Show the current contents of a box@>@;@+break;
 case show_code: @<Show the current meaning of a token, then |goto common_ending|@>@;
 @<Cases for |show_whatever|@>@;@/
-default:@<Show the current value of some parameter or register, then |goto common_ending|@>@;
+default:@<Show the current value of some parameter or register, then |goto
+common_ending|@>@;
 } @/
 @<Complete a potentially long \.{\\show} command@>;
 common_ending: if (interaction < error_stop_mode)
@@ -24307,7 +24450,8 @@
 
 @ @<Cases of |print_cmd_chr|...@>=
 case undefined_cs: print("undefined");@+break;
-case call: case long_call: case outer_call: case long_outer_call: {@+n=cmd-call;
+case call: case long_call: case outer_call:
+  case long_outer_call: {@+n=cmd-call;
   if (info(link(chr_code))==protected_token) n=n+4;
   if (odd(n/4)) print_esc("protected");
   if (odd(n)) print_esc("long");
@@ -24373,8 +24517,8 @@
 int @!x; /*something to dump*/
 four_quarters @!w; /*four ASCII codes*/
 @<If dumping is not allowed, abort@>;
-@<Create the |format_ident|, open the format file, and inform the user that dumping
-has begun@>;
+@<Create the |format_ident|, open the format file, and inform the user that
+dumping has begun@>;
 eqtb[dimen_base+hsize_code].i=hhsize;
 eqtb[dimen_base+vsize_code].i=hvsize;
 @<Dump constants for consistency check@>;
@@ -25403,6 +25547,7 @@
 @!@:special\_}{\.{\\special} primitive@>
 primitive("immediate", extension, immediate_code);@/
 @!@:immediate\_}{\.{\\immediate} primitive@>
+
 primitive("setlanguage", extension, set_language_code);@/
 @!@:set\_language\_}{\.{\\setlanguage} primitive@>
 
@@ -25421,22 +25566,22 @@
 primitive("HINToutline", extension, outline_node);@/
 @!@:HINToutline\_}{\.{\\HINToutline} primitive@>
 
-primitive("image", extension, image_node);@/
+primitive("HINTimage", extension, image_node);@/
 @!@:image\_}{\.{\\image} primitive@>
 
-primitive("setpage", extension, setpage_node);@/
+primitive("HINTsetpage", extension, setpage_node);@/
 @!@:setpage\_}{\.{\\setpage} primitive@>
 
-primitive("stream", extension, stream_node);@/
+primitive("HINTstream", extension, stream_node);@/
 @!@:stream\_}{\.{\\stream} primitive@>
 
-primitive("setstream", extension, setstream_node);@/
+primitive("HINTsetstream", extension, setstream_node);@/
 @!@:setstream\_}{\.{\\setstream} primitive@>
 
-primitive("before", extension, stream_before_node);@/
+primitive("HINTbefore", extension, stream_before_node);@/
 @!@:before\_}{\.{\\before} primitive@>
 
-primitive("after", extension, stream_after_node);@/
+primitive("HINTafter", extension, stream_after_node);@/
 @!@:after\_}{\.{\\after} primitive@>
 
 
@@ -25460,15 +25605,15 @@
   case vpack_node: print("vpack");@+break;
   case hset_node: print("hset");@+break;
   case vset_node: print("vset");@+break;
-  case image_node: print("image");@+break;
-  case start_link_node: print("startlink");@+break;
-  case end_link_node: print("endlink");@+break;
-  case label_node: print("dest");@+break;
-  case outline_node: print("outline");@+break;
+  case image_node: print("HINTimage");@+break;
+  case start_link_node: print("HINTstartlink");@+break;
+  case end_link_node: print("HINTendlink");@+break;
+  case label_node: print("HINTdest");@+break;
+  case outline_node: print("HINToutline");@+break;
   case align_node: print("align");@+break;
-  case setpage_node: print("setpage");@+break;
-  case setstream_node: print("setstream");@+break;
-  case stream_node: print("stream");@+break;
+  case setpage_node: print("HINTsetpage");@+break;
+  case setstream_node: print("HINTsetstream");@+break;
+  case stream_node: print("HINTstream");@+break;
   case xdimen_node: print("xdimen");@+break;
   case ignore_node: print("ignore");@+break;
   case immediate_code: print_esc("immediate");@+break;
@@ -25810,7 +25955,7 @@
   node_list_display(list_ptr(p));
   break;
 case image_node:
-  print_esc("image(");
+  print_esc("HINTimage(");
   print_char('(');print_scaled(image_height(p));
    print_char('+'); print_scaled(image_depth(p));
    print(")x"); print_scaled(image_width(p));
@@ -25828,7 +25973,7 @@
   node_list_display(align_list(p));
   break;
 case setpage_node:
-  print_esc("setpage");print_int(setpage_number(p));print_char(' '); printn(setpage_name(p));
+  print_esc("HINTsetpage");print_int(setpage_number(p));print_char(' '); printn(setpage_name(p));
   print(" priority ");print_int(setpage_priority(p));
   print(" width ");print_xdimen(setpage_width(p));
   print(" height ");print_xdimen(setpage_height(p));
@@ -25838,7 +25983,7 @@
   node_list_display(setpage_streams(p));
   break;
 case setstream_node:
-  print_esc("setstream");print_int(setstream_insertion(p));
+  print_esc("HINTsetstream");print_int(setstream_insertion(p));
   print_char('(');print_int(setstream_number(p));print_char(')');
   if (setstream_prefered(p)!=255) { print(" prefered ");print_int(setstream_prefered(p)); }
   if (setstream_ratio(p)>0) { print(" ratio ");print_int(setstream_ratio(p)); }
@@ -25852,8 +25997,8 @@
     print_spec(setstream_height(p),0);
    print_ln();print_current_string();print_esc("hsize=");print_xdimen(setstream_width(p));
    print_ln();print_current_string();print_esc("topskip=");print_spec(setstream_topskip(p),0);
-  if (setstream_before(p)!=null) { print_ln();print_current_string();print_esc("before");node_list_display(setstream_before(p));}
-  if (setstream_after(p)!=null) { print_ln();print_current_string();print_esc("after");node_list_display(setstream_after(p));}
+  if (setstream_before(p)!=null) { print_ln();print_current_string();print_esc("HINTbefore");node_list_display(setstream_before(p));}
+  if (setstream_after(p)!=null) { print_ln();print_current_string();print_esc("HINTafter");node_list_display(setstream_after(p));}
   flush_char;
   break;
 case ignore_node:
@@ -25861,14 +26006,14 @@
   node_list_display(ignore_list(p));
   break;
 case start_link_node:
-  print_esc("startlink ");
+  print_esc("HINTstartlink ");
   print_label(p);
   break;
 case end_link_node:
-  print_esc("endlink ");
+  print_esc("HINTendlink ");
   break;
 case label_node:
-  print_esc("dest ");
+  print_esc("HINTdest ");
   print_label(p);
   if (label_where(p)==1) print("top");
   else if (label_where(p)==2) print("bot");
@@ -25876,7 +26021,7 @@
   else print("undefined");
   break;
 case outline_node:
-  print_esc("outline");
+  print_esc("HINToutline");
   print_label(p);
   print(" depth "); print_int(outline_depth(p));
   if (outline_ptr(p)==null) print("{}"); else
@@ -25883,7 +26028,7 @@
   { print_ln();print_current_string();node_list_display(outline_ptr(p));}
   break;
 case stream_node:
-  print_esc("stream");print_int(stream_insertion(p));
+  print_esc("HINTstream");print_int(stream_insertion(p));
   print_char('(');print_int(stream_number(p));print_char(')');
   break;
 case xdimen_node:
@@ -26210,8 +26355,8 @@
 static void out_what(pointer @!p)
 {@+small_number j; /*write stream number*/
 switch (subtype(p)) {
-case open_node: case write_node: case close_node: @<Do some work that has been queued
-up for \.{\\write}@>@;@+break;
+case open_node: case write_node: case close_node: @<Do some work that has
+been queued up for \.{\\write}@>@;@+break;
 case special_node:
 case language_node:
 case save_pos_code: do_nothing;@+break;
@@ -26430,7 +26575,8 @@
 boolean variables.
 
 @<Glob...@>=
-static bool @!eof_seen0[max_in_open], *const @!eof_seen = @!eof_seen0-1; /*has eof been seen?*/
+static bool @!eof_seen0[max_in_open],
+  *const @!eof_seen = @!eof_seen0-1; /*has eof been seen?*/
 
 @ The |print_group| procedure prints the current level of grouping and
 the name corresponding to |cur_group|.
@@ -26459,7 +26605,8 @@
   case disc_group: print("disc");@+break;
   case insert_group: print("insert");@+break;
   case vcenter_group: print("vcenter");@+break;
-  case math_group: case math_choice_group: case math_shift_group: case math_left_group:
+  case math_group: case math_choice_group:
+  case math_shift_group: case math_left_group:
     {@+print("math");
     if (cur_group==math_choice_group) print(" choice");
     else if (cur_group==math_shift_group) print(" shift");
@@ -27870,7 +28017,8 @@
 @d sa_mark sa_root[mark_val] /*root for mark classes*/
 
 @<Glob...@>=
-static pointer @!sa_root0[mark_val-int_val+1], *const @!sa_root = @!sa_root0-int_val; /*roots of sparse arrays*/
+static pointer @!sa_root0[mark_val-int_val+1],
+  *const @!sa_root = @!sa_root0-int_val; /*roots of sparse arrays*/
 static pointer @!cur_ptr; /*value returned by |new_index| and |find_sa_element|*/
 static memory_word @!sa_null; /*two |null| pointers*/
 
@@ -28324,7 +28472,8 @@
 @d split_disc disc_ptr[vsplit_code] /*first item removed by \.{\\vsplit}*/
 
 @<Glob...@>=
-static pointer @!disc_ptr0[vsplit_code-copy_code+1], *const @!disc_ptr = @!disc_ptr0-copy_code; /*list pointers*/
+static pointer @!disc_ptr0[vsplit_code-copy_code+1],
+  *const @!disc_ptr = @!disc_ptr0-copy_code; /*list pointers*/
 
 @ @<Set init...@>=
 page_disc=null;split_disc=null;
@@ -28628,7 +28777,8 @@
 \.{\\filemoddate} that is $23$ \.{text\_char}. So at least $64$ for now.
 
 @<Global...@>=
-static eight_bits @!xchg_buffer0[xchg_buffer_size], *const @!xchg_buffer = @!xchg_buffer0-1;
+static eight_bits @!xchg_buffer0[xchg_buffer_size],
+  *const @!xchg_buffer = @!xchg_buffer0-1;
    /*exchange buffer for interaction with system routines*/
 static int @!xchg_buffer_length; /*last valid index in this buf; 0 means no data*/
 @ @<Check \Prote\ ``constant'' values for consistency@>=
@@ -28794,7 +28944,8 @@
   else p=ROM_undefined_primitive
 
 @<Global...@>=
-static memory_word @!ROM0[ROM_size-ROM_base+1], *const @!ROM = @!ROM0-ROM_base;
+static memory_word @!ROM0[ROM_size-ROM_base+1],
+  *const @!ROM = @!ROM0-ROM_base;
 
 @ Even if it will be unused in \TeX\ or \eTeX\ modes, we will initialize
 it since we add code to the |primitive| procedure and we need \TeX\
@@ -29344,8 +29495,8 @@
       and $2^{16}\times.74436163\approx 48782$*/
   y=y+(z/unity);k=2;
   while (x > mpfract_four+4)
-    @<Increase |k| until |x| can be multiplied by a factor of $2^{-k}$, and adjust
-$y$ accordingly@>;
+    @<Increase |k| until |x| can be multiplied by a factor of $2^{-k}$, and
+adjust $y$ accordingly@>;
   return y/8;
   }
 }
@@ -29874,7 +30025,36 @@
 In the following we present macros, variables, and routines that
 implement the various features that have been used above to replace
 \TeX's native behaviour.
-The implementation reuses code that has been written as part of
+
+@ Following the implemenentation of other engines,
+the new engine returns a version number as an integer
+extending the cases for |last_item|. Since the additional
+primitives that we define are specific to the \HINT\ format,
+we return version and subversion of the \HINT\ file
+format that this program will generate.
+
+ at d HINT_version_code (eTeX_last_last_item_cmd_mod+7) /* \.{\\HINTversion} */
+ at d HINT_subversion_code (eTeX_last_last_item_cmd_mod+8) /* \.{\\HINTsubversion} */
+
+@<Generate all \Prote\ primitives@>=
+primitive("HINTversion", last_item, HINT_version_code);
+@!@:HINT\_version\_}{\.{\\HINTversion} primitive@>
+primitive("HINTsubversion", last_item, HINT_subversion_code);
+@!@:HINT\_subversion\_}{\.{\\HINTsubversion} primitive@>
+
+@ Now this new primitive needs its implementation
+
+@<Cases of |last_item| for |print_cmd_chr|@>=
+case HINT_version_code: print_esc("HINTversion");@+break;
+case HINT_subversion_code: print_esc("HINTsubversion");@+break;
+
+@ @<Cases for fetching a \Prote\ int value@>=
+case HINT_version_code: cur_val=HINT_VERSION;@+break;
+case HINT_subversion_code: cur_val=HINT_SUB_VERSION;@+break;
+
+
+
+@ The implementation reuses code that has been written as part of
 the \HINT\  file format specification; therfore we start with three
 include files containing the necessary declarations.
 We end with a list of forward declarations for all the functions
@@ -30102,7 +30282,6 @@
   pointer r, s ; /*miscellaneous nodes of temporary interest*/
   pointer pp;
   bool par_shape_fix=false;
-  bool first_word=true;
   if (DBGTEX&debugflags)
   { print_ln();print("Before hline_break:\n");
     breadth_max=200;
@@ -30158,10 +30337,12 @@
     show_node_list(link(temp_head));print_ln();
   }
   auto_breaking=true;
-  cur_p=temp_head;
-  if (option_hyphen_first && is_char_node(link(cur_p)))
-  { hyphenate_word(); first_word=false; }
-  cur_p=link(cur_p);
+  if (option_hyphen_first && is_char_node(link(temp_head)))
+  { cur_p = new_glue(zero_glue);
+    link(cur_p)=link(temp_head);
+  }
+  else
+    cur_p=link(temp_head);
   while (cur_p!=null)
   { /*Call |try_break| if |cur_p| is a legal breakpoint...*/
     if (is_char_node(cur_p))
@@ -30195,8 +30376,6 @@
 	  default:
 		break;
 	}
-        if (option_hyphen_first && first_word && is_char_node(link(cur_p)))
-        { hyphenate_word(); first_word=false; }
         cur_p=link(cur_p);
 done5:;
   }
@@ -33979,14 +34158,12 @@
 
 @ Now we can handle the first two options:
 
- at d HiTeX_version 1
- at d HiTeX_revision 0
- at d HiTeX_version_string "1.0"
-
 @<handle the option at |option_index|@>=
 if (ARGUMENT_IS("help")) usage_help();
 else if (ARGUMENT_IS("version")){@+
-       printf("Version " HiTeX_version_string "\n");
+       printf(banner "\n"
+              "eTeX version " eTeX_version_string "\n"
+              "Prote version " Prote_version_string "\n");
        exit(0);@+
 }
 
@@ -34764,31 +34941,6 @@
 }
 
 
-@ Following the implemenentation of other engines,
-the new engine returns a version number as an integer
-extending the cases for |last_item|.
-
- at d HiTeX_version_code (eTeX_last_last_item_cmd_mod+7) /* \.{\\HiTeXversion} */
- at d HiTeX_revision_code (eTeX_last_last_item_cmd_mod+8) /* \.{\\HiTeXrevision} */
-
-@<Generate all \Prote\ primitives@>=
-primitive("HiTeXversion", last_item, HiTeX_version_code);
-@!@:HiTeX\_version\_}{\.{\\HiTeXversion} primitive@>
-primitive("HiTeXrevision", last_item, HiTeX_revision_code);
-@!@:HiTeX\_revision\_}{\.{\\HiTeXrevision} primitive@>
-
-@ Now this new primitive needs its implementation
-
-@<Cases of |last_item| for |print_cmd_chr|@>=
-case HiTeX_version_code: print_esc("HiTeXversion");@+break;
-case HiTeX_revision_code: print_esc("HiTeXrevision");@+break;
-
-@ @<Cases for fetching a \Prote\ int value@>=
-case HiTeX_version_code: cur_val=HiTeX_version;@+break;
-case HiTeX_revision_code: cur_val=HiTeX_revision;@+break;
-
-
-
 @* Index.
 Here is where you can find all uses of each identifier in the program,
 with underlined entries pointing to where the identifier was defined.



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