#define EXTERN extern
#include "texd.h"

boolean zinuse ( w , l , mdb )
wort w ;
integer l ;
mdbknoten mdb ;
{register boolean Result; inuse_regmem
 integer test  ;
 if ( mdb == nil )
 {
   (void) Fputs( stdout ,  " =iSi=> in_use Fehler: " ) ;
   wwort ( w , l ) ;
   (void) Fputs( stdout ,  " nicht in mdb" ) ;
   (void) putc('\n',  stdout );
 }
 else {

   test = vergl ( w , l , mdb ->w12 , mdb ->l1 ) ;
   if ( test == -1 )
   {
     Result = inuse ( w , l , mdb ->li ) ;
   }
   else if ( test == 1 )
   {
     Result = inuse ( w , l , mdb ->re ) ;
   }
   else {

     Result = mdb ->used1 ;
     if ( isidebug == 1 )
     {
       if ( mdb ->used1 )
       {
         (void) Fputs( stdout ,  " =iSi=> " ) ;
         wwort ( w , l ) ;
         (void) Fputs( stdout ,  " in use" ) ;
         (void) putc('\n',  stdout );
       }
       else {

         (void) Fputs( stdout ,  " =iSi=> " ) ;
         wwort ( w , l ) ;
         (void) Fputs( stdout ,  " not in use" ) ;
         (void) putc('\n',  stdout );
       }
     }
   }
 }
 return(Result) ;
}
void hsinit ( )
{hsinit_regmem
 integer i, j, l  ;
 trennvektor tr  ;
 wort w  ;
 char temp, auswahl, schnuller  ;
 boolean neu, memkorr  ;
 (void) putc('\n',  stdout );
 (void) putc('\n',  stdout );
 do {
     (void) fprintf( stdout , "%s\n",  "iSi debug Info ? [J/N]" ) ;
   read ( stdin , auswahl ) ;
   schnuller = auswahl ;
   readln ( stdin ) ;
 } while ( ! ( ( xord [ auswahl ] == 74 ) || ( xord [ auswahl ] == 78 ) || (
 xord [ auswahl ] == 106 ) || ( xord [ auswahl ] == 110 ) ) ) ;
 (void) putc('\n',  stdout );
 if ( ( xord [ auswahl ] == 74 ) || ( xord [ auswahl ] == 106 ) )
 {
   isidebug = 1 ;
 }
 else {

   isidebug = 0 ;
 }
 {register integer for_end; i = 1 ; for_end = FILENAMESIZE ; if ( i <=
 for_end) do
   {
     nameoffile [ i ] = ' ' ;
   }
 while ( i++ < for_end ) ; }
 j = strstart [ jobname ] ;
 i = 1 ;
 while ( ( j < strstart [ jobname + 1 ] ) && ( i < FILENAMESIZE - 4 ) ) {

   nameoffile [ i ] = xchr [ strpool [ j ] ] ;
   j = j + 1 ;
   i = i + 1 ;
 }
 nameoffile [ i ] = '.' ;
 nameoffile [ i + 1 ] = 'm' ;
 nameoffile [ i + 2 ] = 'e' ;
 nameoffile [ i + 3 ] = 'm' ;
 if ( ! aopenin ( hsmem , TEXINPUTPATH ) )
 {
   if ( isidebug == 1 )
   {
     (void) Fputs( stdout ,  " =iSi=> cant a_open_in " ) ;
     wjob () ;
     (void) Fputs( stdout ,  ".mem" ) ;
     (void) putc('\n',  stdout );
   }
 }
 else {

   do {
       (void) putc('\n',  stdout );
     (void) Fputs( stdout ,  "Sollen Fehleintr\"age gel\"oscht werden? [J/N]" ) ;
     (void) putc('\n',  stdout );
     read ( stdin , auswahl ) ;
     schnuller = auswahl ;
     readln ( stdin ) ;
   } while ( ! ( ( xord [ auswahl ] == 74 ) || ( xord [ auswahl ] == 78 ) ||
   ( xord [ auswahl ] == 106 ) || ( xord [ auswahl ] == 110 ) ) ) ;
   (void) putc('\n',  stdout );
   (void) putc('\n',  stdout );
   if ( ( xord [ auswahl ] == 74 ) || ( xord [ auswahl ] == 106 ) )
   {
     memkorr = true ;
   }
   else {

     memkorr = false ;
   }
   while ( ! eof ( hsmem ) ) {
     fscanf ( hsmem , "%d", &l ) ;
     readln ( hsmem ) ;
     {register integer for_end; i = 1 ; for_end = l ; if ( i <= for_end) do
       {
         fscanf ( hsmem , "%hd", &w [ i ] ) ;
       }
     while ( i++ < for_end ) ; }
     readln ( hsmem ) ;
     {register integer for_end; i = 1 ; for_end = l ; if ( i <= for_end) do
       {
         fscanf ( hsmem , "%d", &tr [ i ] ) ;
       }
     while ( i++ < for_end ) ; }
     readln ( hsmem ) ;
     fscanf ( hsmem , "%c", &temp ) ;
     readln ( hsmem ) ;
     if ( temp == xchr [ 116 ] )
     neu = true ;
     else neu = false ;
     if ( isidebug == 1 )
     {
       (void) Fputs( stdout ,  " =iSi=> reading from " ) ;
       wjob () ;
       (void) Fputs( stdout ,  ".mem: " ) ;
       wwort ( w , l ) ;
       (void) Fputs( stdout ,  ", neu = " ) ;
       (void) fprintf( stdout , "%ld",  (long)temp ) ;
       (void) putc('\n',  stdout );
     }
     if ( memkorr )
     {
       do {
           (void) putc('\n',  stdout );
         (void) Fputs( stdout ,  "Soll " ) ;
         writewt ( w , l , tr ) ;
         (void) Fputs( stdout ,  " gel\"oscht werden? [J/N]" ) ;
         (void) putc('\n',  stdout );
         read ( stdin , auswahl ) ;
         schnuller = auswahl ;
         readln ( stdin ) ;
       } while ( ! ( ( xord [ auswahl ] == 74 ) || ( xord [ auswahl ] == 78 )
       || ( xord [ auswahl ] == 106 ) || ( xord [ auswahl ] == 110 ) ) ) ;
       (void) putc('\n',  stdout );
       if ( ( xord [ auswahl ] == 74 ) || ( xord [ auswahl ] == 106 ) )
       {
         ;
       }
       else {

         if ( isidebug == 1 )
         {
           (void) Fputs( stdout ,  " =iSi=> mdb/mdm_eintragen: " ) ;
           writewt ( w , l , tr ) ;
           (void) putc('\n',  stdout );
         }
         mdbeintragen ( w , l , tr , neu , false , mdb ) ;
         mdmeintragen ( w , l , tr , neu , mdm ) ;
       }
     }
     else {

       if ( isidebug == 1 )
       {
         (void) Fputs( stdout ,  " =iSi=> mdb/mdm_eintragen: " ) ;
         writewt ( w , l , tr ) ;
         (void) putc('\n',  stdout );
       }
       mdbeintragen ( w , l , tr , neu , false , mdb ) ;
       mdmeintragen ( w , l , tr , neu , mdm ) ;
     }
   }
   if ( isidebug == 1 )
   {
     (void) putc('\n',  stdout );
   }
   aclose ( hsmem ) ;
 }
 do {
     (void) putc('\n',  stdout );
   (void) fprintf( stdout , "%s\n",  "Sollen mehrdeutige W\"orter angezeigt werden? [J/N]" )
   ;
   read ( stdin , auswahl ) ;
   schnuller = auswahl ;
   readln ( stdin ) ;
 } while ( ! ( ( xord [ auswahl ] == 74 ) || ( xord [ auswahl ] == 78 ) || (
 xord [ auswahl ] == 106 ) || ( xord [ auswahl ] == 110 ) ) ) ;
 (void) putc('\n',  stdout );
 if ( ( xord [ auswahl ] == 74 ) || ( xord [ auswahl ] == 106 ) )
 {
   mehrdanz = true ;
 }
 else {

   mehrdanz = false ;
 }
}
void zabteilen ( w , tr1 , alletr , laenge , ok , zerlegungen )
wort w ;
trennvektor tr1 ;
trenn16 alletr ;
integer laenge ;
boolean * ok ;
integer * zerlegungen ;
{/* 99 */ abteilen_regmem
 integer i  ;
 integer iSij  ;
 dudt dud  ;
 varr v  ;
 intarr ind, k  ;
 trennvektor tr, dudtr  ;
 sperrvektor spv, dudstop  ;
 tr1 [ 0 ] = keine ;
 {register integer for_end; i = 0 ; for_end = laenge ; if ( i <= for_end) do
   {
     tr [ i ] = keine ;
     spv [ i ] = false ;
     dudstop [ i ] = false ;
     dud [ i ] = false ;
     if ( i > 0 )
     if ( ( w [ i ] == trennzeichen ) || ( w [ i ] == sonderzeichen ) )
     {
(*        zerlegungen )= 0 ;
(*        ok )= false ;
       goto lab99 ;
     }
   }
 while ( i++ < for_end ) ; }
(*  zerlegungen )= 0 ;
 trennen ( 3 , 1 , spv , (*ok ), alletr , tr , dudtr , (*zerlegungen ), dud , v ,
 ind , k , dudstop , w , tr1 , laenge ) ;
 {register integer for_end; i = 0 ; for_end = laenge ; if ( i <= for_end) do
   if ( tr1 [ i ] == nebenck )
   {
     tr1 [ i ] = keine ;
     tr1 [ i - 1 ] = nebenck ;
     {register integer for_end; iSij = 1 ; for_end = (*zerlegungen ); if ( iSij
     <= for_end) do
       {
         if ( ( alletr [ iSij ] [ i ] == nebenck ) )
         {
           alletr [ iSij ] [ i ] = keine ;
           alletr [ iSij ] [ i - 1 ] = nebenck ;
         }
       }
     while ( iSij++ < for_end ) ; }
   }
 while ( i++ < for_end ) ; }
 lab99: ;
}
boolean zisdirtyumlaut ( p )
halfword p ;
{register boolean Result; isdirtyumlaut_regmem
 boolean res  ;
 halfword q  ;
 res = false ;
 if ( p != 0 )
 if ( mem [ p ] .hh.b0 == 7 )
 if ( mem [ p + 1 ] .hh .v.LH != 0 )
 if ( mem [ mem [ p + 1 ] .hh .v.LH ] .hh .v.RH != 0 )
 if ( mem [ mem [ mem [ p + 1 ] .hh .v.LH ] .hh .v.RH ] .hh .v.RH != 0 )
 {
   q = mem [ p + 1 ] .hh .v.LH ;
   if ( mem [ q ] .hh.b0 == 12 )
   q = mem [ q ] .hh .v.RH ;
   if ( ( mem [ q ] .hh.b0 == 11 ) && ( mem [ q + 1 ] .cint == specletterID )
   && ( mem [ q ] .hh .v.RH >= himemmin ) && ( mem [ mem [ mem [ q ] .hh
   .v.RH ] .hh .v.RH ] .hh.b0 == 11 ) )
   res = true ;
 }
 Result = res ;
 return(Result) ;
}
integer zgetcharof ( s )
halfword s ;
{register integer Result; getcharof_regmem
 halfword q  ;
 q = mem [ s + 1 ] .hh .v.LH ;
 if ( mem [ q ] .hh.b0 == 12 )
 q = mem [ q ] .hh .v.RH ;
 Result = mem [ mem [ mem [ q ] .hh .v.RH ] .hh .v.RH + 1 ] .cint ;
 return(Result) ;
}
integer zgetfontof ( s )
halfword s ;
{register integer Result; getfontof_regmem
 halfword q  ;
 q = mem [ s + 1 ] .hh .v.LH ;
 if ( mem [ q ] .hh.b0 == 12 )
 q = mem [ q ] .hh .v.RH ;
 Result = mem [ mem [ q ] .hh .v.RH ] .hh.b0 ;
 return(Result) ;
}
void hyphenate ( )
{/* 50 30 31 40 41 42 45 10 */ hyphenate_regmem
 schar i, j, l, kk  ;
 halfword q, r, s, qq, qr, holdr  ;
 halfword bchar  ;
 short xchgchar[11]  ;
 schar addchar, xchgi, xchgk, xchghu  ;
 halfword spechyf  ;
 integer sij  ;
 halfword majortail, minortail  ;
 ASCIIcode c  ;
 schar cloc  ;
 integer rcount  ;
 halfword hyfnode  ;
 triepointer z  ;
 integer v  ;
 boolean funktioniert  ;
 integer zerleg  ;
 trenn16 alletr  ;
 char auswahl, schnuller  ;
 boolean memkorr  ;
 integer indexi  ;
 boolean uebersprungen  ;
 boolean lexja, lexok  ;
 hyphpointer h  ;
 strnumber k  ;
 poolpointer u  ;
 {register integer for_end; j = 0 ; for_end = hn ; if ( j <= for_end) do
   hyf [ j ] = 0 ;
 while ( j++ < for_end ) ; }
 h = hc [ 1 ] ;
 incr ( hn ) ;
 hc [ hn ] = curlang ;
 {register integer for_end; j = 2 ; for_end = hn ; if ( j <= for_end) do
   h = ( h + h + hc [ j ] ) % 607 ;
 while ( j++ < for_end ) ; }
 while ( true ) {

   k = hyphword [ h ] ;
   if ( k == 0 )
   goto lab45 ;
   if ( ( strstart [ k + 1 ] - strstart [ k ] ) < hn )
   goto lab45 ;
   if ( ( strstart [ k + 1 ] - strstart [ k ] ) == hn )
   {
     j = 1 ;
     u = strstart [ k ] ;
     do {
         if ( strpool [ u ] < hc [ j ] )
       goto lab45 ;
       if ( strpool [ u ] > hc [ j ] )
       goto lab30 ;
       incr ( j ) ;
       incr ( u ) ;
     } while ( ! ( j > hn ) ) ;
     s = hyphlist [ h ] ;
     while ( s != 0 ) {

       hyf [ mem [ s ] .hh .v.LH ] = 1 ;
       s = mem [ s ] .hh .v.RH ;
     }
     decr ( hn ) ;
     goto lab40 ;
   }
   lab30: ;
   if ( h > 0 )
   decr ( h ) ;
   else h = 607 ;
 }
 lab45: decr ( hn ) ;
 {register integer for_end; j = 0 ; for_end = hn ; if ( j <= for_end) do
   hcsi [ j ] = ktab [ hc [ j ] ] ;
 while ( j++ < for_end ) ; }
 if ( odd ( eqtb [ 12719 ] .cint / 2 ) )
 {
   if ( ! odd ( eqtb [ 12720 ] .cint / 2 ) )
   {
     println () ;
     {
       if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
       println () ;
       if ( selector != 18 )
       (void) fprintf( stdout , "%s%ld%s\n",  "    <*  debugging output section #" , (long)2 , "  *>" )
       ;
       if ( ( selector == 18 ) || ( selector == 19 ) )
       (void) fprintf( logfile , "%s%ld%s\n",  "    <*  debugging output section #" , (long)2 , "  *>"         ) ;
     }
   }
   {
     if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
     println () ;
     if ( selector != 18 )
     (void) Fputs( stdout ,  "            hc:" ) ;
     if ( ( selector == 18 ) || ( selector == 19 ) )
     (void) Fputs( logfile ,  "            hc:" ) ;
   }
   {register integer for_end; j = 0 ; for_end = hn ; if ( j <= for_end) do
     {
       if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
       println () ;
       if ( selector != 18 )
       (void) putc( Xchr ( hc [ j ] ) ,  stdout );
       if ( ( selector == 18 ) || ( selector == 19 ) )
       (void) putc( Xchr ( hc [ j ] ) ,  logfile );
     }
   while ( j++ < for_end ) ; }
   {
     if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
     println () ;
     if ( selector != 18 )
     (void) fprintf( stdout , "%c\n",  ':' ) ;
     if ( ( selector == 18 ) || ( selector == 19 ) )
     (void) fprintf( logfile , "%c\n",  ':' ) ;
   }
   {
     if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
     println () ;
     if ( selector != 18 )
     (void) Fputs( stdout ,  "         hc_si:" ) ;
     if ( ( selector == 18 ) || ( selector == 19 ) )
     (void) Fputs( logfile ,  "         hc_si:" ) ;
   }
   {register integer for_end; j = 0 ; for_end = hn ; if ( j <= for_end) do
     {
       if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
       println () ;
       if ( selector != 18 )
       (void) putc( Xchr ( revtab [ hcsi [ j ] ] ) ,  stdout );
       if ( ( selector == 18 ) || ( selector == 19 ) )
       (void) putc( Xchr ( revtab [ hcsi [ j ] ] ) ,  logfile );
     }
   while ( j++ < for_end ) ; }
   {
     if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
     println () ;
     if ( selector != 18 )
     (void) fprintf( stdout , "%c\n",  ':' ) ;
     if ( ( selector == 18 ) || ( selector == 19 ) )
     (void) fprintf( logfile , "%c\n",  ':' ) ;
   }
 }
 if ( odd ( eqtb [ 12719 ] .cint / 4 ) )
 {
   if ( ! odd ( eqtb [ 12720 ] .cint / 4 ) )
   {
     println () ;
     {
       if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
       println () ;
       if ( selector != 18 )
       (void) fprintf( stdout , "%s%ld%s\n",  "    <*  debugging output section #" , (long)4 , "  *>" )
       ;
       if ( ( selector == 18 ) || ( selector == 19 ) )
       (void) fprintf( logfile , "%s%ld%s\n",  "    <*  debugging output section #" , (long)4 , "  *>"         ) ;
     }
   }
   {
     if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
     println () ;
     if ( selector != 18 )
     (void) fprintf( stdout , "%s\n",  "< decimal character codes >" ) ;
     if ( ( selector == 18 ) || ( selector == 19 ) )
     (void) fprintf( logfile , "%s\n",  "< decimal character codes >" ) ;
   }
   {
     if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
     println () ;
     if ( selector != 18 )
     (void) Fputs( stdout ,  "    hc:" ) ;
     if ( ( selector == 18 ) || ( selector == 19 ) )
     (void) Fputs( logfile ,  "    hc:" ) ;
   }
   {register integer for_end; j = 0 ; for_end = hn ; if ( j <= for_end) do
     {
       {
         if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
         println () ;
         if ( selector != 18 )
         (void) fprintf( stdout , "%ld%c",  (long)hc [ j ] , '-' ) ;
         if ( ( selector == 18 ) || ( selector == 19 ) )
         (void) fprintf( logfile , "%ld%c",  (long)hc [ j ] , '-' ) ;
       }
       if ( ( ( j + 1 ) % 16 ) == 0 )
       {
         println () ;
         {
           if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
           println () ;
           if ( selector != 18 )
           (void) Fputs( stdout ,  "       " ) ;
           if ( ( selector == 18 ) || ( selector == 19 ) )
           (void) Fputs( logfile ,  "       " ) ;
         }
       }
     }
   while ( j++ < for_end ) ; }
   println () ;
   {
     if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
     println () ;
     if ( selector != 18 )
     (void) Fputs( stdout ,  " hc_si:" ) ;
     if ( ( selector == 18 ) || ( selector == 19 ) )
     (void) Fputs( logfile ,  " hc_si:" ) ;
   }
   {register integer for_end; j = 0 ; for_end = hn ; if ( j <= for_end) do
     {
       {
         if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
         println () ;
         if ( selector != 18 )
         (void) fprintf( stdout , "%ld%c",  (long)revtab [ hcsi [ j ] ] , '-' ) ;
         if ( ( selector == 18 ) || ( selector == 19 ) )
         (void) fprintf( logfile , "%ld%c",  (long)revtab [ hcsi [ j ] ] , '-' ) ;
       }
       if ( ( ( j + 1 ) % 16 ) == 0 )
       {
         println () ;
         {
           if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
           println () ;
           if ( selector != 18 )
           (void) Fputs( stdout ,  "       " ) ;
           if ( ( selector == 18 ) || ( selector == 19 ) )
           (void) Fputs( logfile ,  "       " ) ;
         }
       }
     }
   while ( j++ < for_end ) ; }
   println () ;
   println () ;
 }
 if ( ! hsstart )
 {
   hsinit () ;
   hsstart = true ;
 }
 if ( isidebug == 1 )
 {
   (void) Fputs( stdout ,  " =iSi=> abteilen von " ) ;
   wwort ( hcsi , hn ) ;
 }
 abteilen ( hcsi , hyfsi , alletr , hn , funktioniert , zerleg ) ;
 if ( ! funktioniert )
 {
   if ( isidebug == 1 )
   {
     (void) putc('\n',  stdout );
     (void) Fputs( stdout ,  " =iSi=> unbekanntes Wort: " ) ;
     wwort ( hcsi , hn ) ;
     (void) putc('\n',  stdout );
     (void) Fputs( stdout ,  " =iSi=> suchen in mdb: " ) ;
     wwort ( hcsi , hn ) ;
     (void) putc('\n',  stdout );
   }
   if ( mdsuchen ( hcsi , hn , mdb , hyfsi ) )
   {
     if ( isidebug == 1 )
     {
       (void) Fputs( stdout ,  " =iSi=> gefunden in mdb: " ) ;
       writewt ( hcsi , hn , hyfsi ) ;
       (void) putc('\n',  stdout );
     }
     funktioniert = true ;
   }
   else {

     if ( isidebug == 1 )
     {
       (void) Fputs( stdout ,  " =iSi=> nicht gefunden in mdb: " ) ;
       wwort ( hcsi , hn ) ;
       (void) putc('\n',  stdout );
     }
     do {
         (void) putc('\n',  stdout );
       (void) putc('\n',  stdout );
       (void) putc( '"' ,  stdout );
       wwort ( hcsi , hn ) ;
       (void) Fputs( stdout ,  "\" ist ein unbekanntes Wort!" ) ;
       (void) putc('\n',  stdout );
       (void) fprintf( stdout , "%ld",  (long)0 ) ;
       (void) Fputs( stdout ,  ": neues Wort, merken in \"" ) ;
       wjob () ;
       (void) Fputs( stdout ,  ".lex\"" ) ;
       (void) putc('\n',  stdout );
       (void) fprintf( stdout , "%ld",  (long)1 ) ;
       (void) Fputs( stdout ,  ": neues Wort, Trennstellen angeben und merken in \""         ) ;
       wjob () ;
       (void) Fputs( stdout ,  ".lex\"" ) ;
       (void) putc('\n',  stdout );
       (void) fprintf( stdout , "%ld",  (long)9 ) ;
       (void) Fputs( stdout ,  ": Tippfehler! - merken im File \"" ) ;
       wjob () ;
       (void) Fputs( stdout ,  ".edt\"" ) ;
       (void) putc('\n',  stdout );
       (void) Fputs( stdout ,  "Bitte waehlen Sie eine Bedeutung (0,1,9) aus:" ) ;
       (void) putc('\n',  stdout );
       read ( stdin , schnuller ) ;
       auswahl = schnuller ;
       readln ( stdin ) ;
     } while ( ! ( ( ( xord [ auswahl ] >= 48 ) && ( xord [ auswahl ] <= 49 )
     ) || ( auswahl == '9' ) ) ) ;
     if ( ( auswahl == '0' ) )
     {
       {register integer for_end; indexi = 1 ; for_end = hn ; if ( indexi <=
       for_end) do
         {
           hyfsi [ indexi ] = keine ;
         }
       while ( indexi++ < for_end ) ; }
       if ( isidebug == 1 )
       {
         (void) Fputs( stdout ,  " =iSi=> mdb/mdm_eintragen: " ) ;
         writewt ( hcsi , hn , hyfsi ) ;
         (void) putc('\n',  stdout );
       }
       mdbeintragen ( hcsi , hn , hyfsi , true , true , mdb ) ;
       mdmeintragen ( hcsi , hn , hyfsi , true , mdm ) ;
       funktioniert = true ;
     }
     else if ( ( auswahl == '9' ) )
     {
       mdeeintragen ( hcsi , hn , mde ) ;
     }
     else {

       (void) Fputs( stdout ,  "Bitte den Trennvektor angeben" ) ;
       (void) putc('\n',  stdout );
       (void) Fputs( stdout ,  " (\"-\" Nebentrennstelle, \"=\" Haupttrennstelle, "         ) ;
       (void) Fputs( stdout ,  "\".\" Weiterruecken," ) ;
       (void) putc('\n',  stdout );
       (void) Fputs( stdout ,          " Trennstrich unter den Buchstaben angeben, hinter dem " ) ;
       (void) Fputs( stdout ,  "getrennt werden soll):" ) ;
       (void) putc('\n',  stdout );
       wwort ( hcsi , hn ) ;
       (void) putc('\n',  stdout );
       indexi = 1 ;
       uebersprungen = false ;
       read ( stdin , auswahl ) ;
       while ( ( xord [ auswahl ] != 10 ) && ( indexi <= hn ) ) {

         if ( ( hcsi [ indexi ] >= 27 ) && ( hcsi [ indexi ] <= 30 ) && !
         uebersprungen )
         {
           uebersprungen = true ;
         }
         else {

           if ( auswahl == '.' )
           {
             hyfsi [ indexi ] = keine ;
           }
           else if ( auswahl == '-' )
           {
             hyfsi [ indexi ] = neben ;
           }
           else if ( auswahl == '=' )
           {
             hyfsi [ indexi ] = haupt ;
           }
           else {

             hyfsi [ indexi ] = keine ;
           }
           uebersprungen = false ;
           indexi = indexi + 1 ;
         }
         read ( stdin , auswahl ) ;
       }
       while ( ( indexi ) <= hn ) {

         hyfsi [ indexi ] = keine ;
         indexi = indexi + 1 ;
       }
       if ( isidebug == 1 )
       {
         (void) Fputs( stdout ,  " =iSi=> mdb/mdm_eintragen: " ) ;
         writewt ( hcsi , hn , hyfsi ) ;
         (void) putc('\n',  stdout );
       }
       mdbeintragen ( hcsi , hn , hyfsi , true , true , mdb ) ;
       mdmeintragen ( hcsi , hn , hyfsi , true , mdm ) ;
       funktioniert = true ;
     }
   }
 }
 else {

   if ( isidebug == 1 )
   {
     (void) Fputs( stdout ,  ": " ) ;
     writewt ( hcsi , hn , hyfsi ) ;
     (void) putc('\n',  stdout );
   }
 }
 if ( zerleg >= 2 )
 {
   gleicheweg ( alletr , zerleg , hn ) ;
   if ( zerleg >= 2 )
   {
     if ( isidebug == 1 )
     {
       (void) Fputs( stdout ,  " =iSi=> mehrdeutiges Wort: " ) ;
       writewt ( hcsi , hn , hyfsi ) ;
       (void) putc('\n',  stdout );
       (void) Fputs( stdout ,  " =iSi=> suchen in mdb: " ) ;
       wwort ( hcsi , hn ) ;
       (void) putc('\n',  stdout );
     }
     if ( mdsuchen ( hcsi , hn , mdb , hyfsi ) )
     {
       if ( isidebug == 1 )
       {
         (void) Fputs( stdout ,  " =iSi=> gefunden in mdb: " ) ;
         writewt ( hcsi , hn , hyfsi ) ;
         (void) putc('\n',  stdout );
       }
     }
     else {

       if ( isidebug == 1 )
       {
         (void) Fputs( stdout ,  " =iSi=> nicht gefunden in mdb: " ) ;
         wwort ( hcsi , hn ) ;
         (void) putc('\n',  stdout );
       }
       if ( mehrdanz )
       {
         do {
             (void) putc('\n',  stdout );
           (void) putc('\n',  stdout );
           (void) putc( '`' ,  stdout );
           wwort ( hcsi , hn ) ;
           (void) Fputs( stdout ,  "' ist ein mehrdeutiges Wort!" ) ;
           (void) putc('\n',  stdout );
           (void) fprintf( stdout , "%ld",  (long)0 ) ;
           (void) Fputs( stdout ,  ": nur die sicheren Trennstellen waehlen (also `"             ) ;
           writewt ( hcsi , hn , hyfsi ) ;
           (void) Fputs( stdout ,  "')" ) ;
           (void) putc('\n',  stdout );
           {register integer for_end; indexi = 1 ; for_end = zerleg ; if (
           indexi <= for_end) do
             {
               (void) fprintf( stdout , "%ld",  (long)indexi ) ;
               (void) Fputs( stdout ,  ": `" ) ;
               writewt ( hcsi , hn , alletr [ indexi ] ) ;
               (void) putc( '\'' ,  stdout );
               (void) putc('\n',  stdout );
             }
           while ( indexi++ < for_end ) ; }
           (void) fprintf( stdout , "%ld",  (long)9 ) ;
           (void) Fputs( stdout ,  ": Tippfehler! - merken im File `" ) ;
           wjob () ;
           (void) Fputs( stdout ,  ".edt'" ) ;
           (void) putc('\n',  stdout );
           (void) Fputs( stdout ,              "Bitte waehlen Sie eine Bedeutung z.B. `0'+`Enter' aus:" ) ;
           (void) putc('\n',  stdout );
           (void) Fputs( stdout ,  " (zusaetzlich `E' z.B. `0E'+`Enter': " ) ;
           (void) Fputs( stdout ,  "Wort auch fuer LEXIKON vormerken)" ) ;
           (void) putc('\n',  stdout );
           read ( stdin , schnuller ) ;
           auswahl = schnuller ;
           lexja = false ;
           lexok = true ;
           if ( xord [ schnuller ] != 32 )
           {
             read ( stdin , schnuller ) ;
             if ( xord [ schnuller ] != 10 )
             {
               if ( ( schnuller == 'e' ) || ( schnuller == 'E' ) )
               {
                 lexja = true ;
               }
               else {

                 lexok = false ;
               }
               readln ( stdin ) ;
             }
           }
         } while ( ! ( ( ( ( xord [ auswahl ] >= 48 ) && ( xord [ auswahl ]
         <= 48 + zerleg ) ) || ( auswahl == '9' ) ) && lexok ) ) ;
         if ( ( auswahl == '0' ) || ( ( auswahl == '0' ) && lexja ) )
         {
           if ( ( auswahl == '0' ) && ! lexja )
           {
             if ( isidebug == 1 )
             {
               (void) Fputs( stdout ,  " =iSi=> mdb/mdm_eintragen: " ) ;
               writewt ( hcsi , hn , hyfsi ) ;
               (void) putc('\n',  stdout );
             }
             mdbeintragen ( hcsi , hn , hyfsi , false , true , mdb ) ;
             mdmeintragen ( hcsi , hn , hyfsi , false , mdm ) ;
           }
           else {

             if ( isidebug == 1 )
             {
               (void) Fputs( stdout ,  " =iSi=> mdb/mdm_eintragen: " ) ;
               writewt ( hcsi , hn , hyfsi ) ;
               (void) putc('\n',  stdout );
             }
             mdbeintragen ( hcsi , hn , hyfsi , true , true , mdb ) ;
             mdmeintragen ( hcsi , hn , hyfsi , true , mdm ) ;
           }
         }
         else if ( ( auswahl == '9' ) )
         {
           mdeeintragen ( hcsi , hn , mde ) ;
         }
         else {
                       memcpy((void *)hyfsi , (void *) alletr [ xord [ auswahl ] - 48 ],
                                                               sizeof(trennvektor));
           if ( ! lexja )
           {
             if ( isidebug == 1 )
             {
               (void) Fputs( stdout ,  " =iSi=> mdb/mdm_eintragen: " ) ;
               writewt ( hcsi , hn , hyfsi ) ;
               (void) putc('\n',  stdout );
             }
             mdbeintragen ( hcsi , hn , hyfsi , false , true , mdb ) ;
             mdmeintragen ( hcsi , hn , hyfsi , false , mdm ) ;
           }
           else {

             if ( isidebug == 1 )
             {
               (void) Fputs( stdout ,  " =iSi=> mdb/mdm_eintragen: " ) ;
               writewt ( hcsi , hn , hyfsi ) ;
               (void) putc('\n',  stdout );
             }
             mdbeintragen ( hcsi , hn , hyfsi , true , true , mdb ) ;
             mdmeintragen ( hcsi , hn , hyfsi , true , mdm ) ;
           }
         }
       }
     }
   }
 }
 {register integer for_end; j = 0 ; for_end = 64 ; if ( j <= for_end) do
   {
     hyfdisc [ j ] = 0 ;
     hyfpen [ j ] = 10000 ;
   }
 while ( j++ < for_end ) ; }
 if ( funktioniert )
 {register integer for_end; j = 0 ; for_end = hn ; if ( j <= for_end) do
   {
     if ( hyfsi [ j ] == neben )
     hyfpen [ j ] = eqtb [ 12718 ] .cint ;
     else if ( hyfsi [ j ] == haupt )
     hyfpen [ j ] = eqtb [ 12666 ] .cint ;
     else if ( hyfsi [ j ] == nebenck )
     {
       hyfpen [ j + 1 ] = eqtb [ 12718 ] .cint ;
       s = getnode ( 2 ) ;
       mem [ s ] .hh.b0 = 7 ;
       hyfdisc [ j + 1 ] = s ;
       mem [ s + 1 ] .hh .v.LH = newpenalty ( eqtb [ 12718 ] .cint ) ;
       s = mem [ s + 1 ] .hh .v.LH ;
       mem [ s ] .hh.b1 = 0 ;
       mem [ s ] .hh .v.RH = newcharacter ( hf , hu [ j + 2 ] ) ;
       mem [ mem [ s ] .hh .v.RH ] .hh .v.RH = 0 ;
       s = hyfdisc [ j + 1 ] ;
       mem [ s + 1 ] .hh .v.RH = 0 ;
       mem [ s ] .hh .v.RH = 0 ;
     }
     else if ( hyfsi [ j ] == haupt3 )
     {
       hyfpen [ j - 1 ] = eqtb [ 12666 ] .cint ;
       s = getnode ( 2 ) ;
       mem [ s ] .hh.b0 = 7 ;
       hyfdisc [ j - 1 ] = s ;
       mem [ s + 1 ] .hh .v.LH = newpenalty ( eqtb [ 12666 ] .cint ) ;
       s = mem [ s + 1 ] .hh .v.LH ;
       mem [ s ] .hh.b1 = 1 ;
       mem [ s ] .hh .v.RH = newcharacter ( hf , hu [ j ] ) ;
       mem [ mem [ s ] .hh .v.RH ] .hh .v.RH = 0 ;
       s = hyfdisc [ j - 1 ] ;
       mem [ s + 1 ] .hh .v.RH = 0 ;
       mem [ s ] .hh .v.RH = 0 ;
     }
   }
 while ( j++ < for_end ) ; }
 if ( odd ( eqtb [ 12719 ] .cint / 8 ) )
 {
   if ( ! odd ( eqtb [ 12720 ] .cint / 8 ) )
   {
     println () ;
     {
       if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
       println () ;
       if ( selector != 18 )
       (void) fprintf( stdout , "%s%ld%s\n",  "    <*  debugging output section #" , (long)8 , "  *>" )
       ;
       if ( ( selector == 18 ) || ( selector == 19 ) )
       (void) fprintf( logfile , "%s%ld%s\n",  "    <*  debugging output section #" , (long)8 , "  *>"         ) ;
     }
   }
   if ( funktioniert )
   {
     {register integer for_end; j = 0 ; for_end = hn ; if ( j <= for_end) do
       if ( hyfpen [ j ] != 10000 )
       {
         if ( hyfdisc [ j ] != 0 )
         {
           if ( mem [ mem [ hyfdisc [ j ] + 1 ] .hh .v.LH ] .hh.b1 == 0 )
           {
             if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
             println () ;
             if ( selector != 18 )
             (void) fprintf( stdout , "%c%c",  Xchr ( hu [ j + 1 ] ) , '-' ) ;
             if ( ( selector == 18 ) || ( selector == 19 ) )
             (void) fprintf( logfile , "%c%c",  Xchr ( hu [ j + 1 ] ) , '-' ) ;
           }
           else {

             if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
             println () ;
             if ( selector != 18 )
             (void) fprintf( stdout , "%c%c%c",  Xchr ( hu [ j + 1 ] ) , Xchr ( hu [ j + 1 ] ) ,               '=' ) ;
             if ( ( selector == 18 ) || ( selector == 19 ) )
             (void) fprintf( logfile , "%c%c%c",  Xchr ( hu [ j + 1 ] ) , Xchr ( hu [ j + 1 ] )               , '=' ) ;
           }
         }
         else {

           {
             if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
             println () ;
             if ( selector != 18 )
             (void) putc( Xchr ( hu [ j ] ) ,  stdout );
             if ( ( selector == 18 ) || ( selector == 19 ) )
             (void) putc( Xchr ( hu [ j ] ) ,  logfile );
           }
           if ( hyfpen [ j ] == eqtb [ 12666 ] .cint )
           {
             if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
             println () ;
             if ( selector != 18 )
             (void) putc( '=' ,  stdout );
             if ( ( selector == 18 ) || ( selector == 19 ) )
             (void) putc( '=' ,  logfile );
           }
           else {

             if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
             println () ;
             if ( selector != 18 )
             (void) putc( '-' ,  stdout );
             if ( ( selector == 18 ) || ( selector == 19 ) )
             (void) putc( '-' ,  logfile );
           }
         }
       }
       else {

         {
           if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
           println () ;
           if ( selector != 18 )
           (void) putc( Xchr ( hu [ j ] ) ,  stdout );
           if ( ( selector == 18 ) || ( selector == 19 ) )
           (void) putc( Xchr ( hu [ j ] ) ,  logfile );
         }
       }
     while ( j++ < for_end ) ; }
   }
   else {

     {
       if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
       println () ;
       if ( selector != 18 )
       (void) fprintf( stdout , "%s\n",  "  no hyphens were found in this word!" ) ;
       if ( ( selector == 18 ) || ( selector == 19 ) )
       (void) fprintf( logfile , "%s\n",  "  no hyphens were found in this word!" ) ;
     }
   }
   println () ;
 }
 goto lab31 ;
 lab40: hyfpen [ 0 ] = 10000 ;
 {register integer for_end; j = 1 ; for_end = hn ; if ( j <= for_end) do
   if ( odd ( hyf [ j ] ) )
   hyfpen [ j ] = eqtb [ 12666 ] .cint ;
   else hyfpen [ j ] = 10000 ;
 while ( j++ < for_end ) ; }
 lab31: ;
 {register integer for_end; j = lhyf ; for_end = hn - rhyf ; if ( j <=
 for_end) do
   if ( hyfpen [ j ] != 10000 )
   goto lab41 ;
 while ( j++ < for_end ) ; }
 return ;
 lab41: ;
 q = mem [ hb ] .hh .v.RH ;
 mem [ hb ] .hh .v.RH = 0 ;
 r = mem [ ha ] .hh .v.RH ;
 mem [ ha ] .hh .v.RH = 0 ;
 bchar = 256 ;
 holdr = newkern ( 1235 ) ;
 mem [ holdr ] .hh .v.RH = r ;
 if ( ! ( hb >= himemmin ) )
 if ( mem [ hb ] .hh.b0 == 6 )
 if ( odd ( mem [ hb ] .hh.b1 ) )
 bchar = fontbchar [ hf ] ;
 if ( ( ha >= himemmin ) )
 if ( mem [ ha ] .hh.b0 != hf )
 goto lab42 ;
 else {

   initlist = ha ;
   initlig = false ;
   hu [ 0 ] = mem [ ha ] .hh.b1 ;
 }
 else if ( isdirtyumlaut ( ha ) )
 {
   if ( getfontof ( ha ) != hf )
   goto lab42 ;
   else {

     initlist = ha ;
     initlig = false ;
     hu [ 0 ] = getcharof ( ha ) ;
   }
 }
 else if ( mem [ ha ] .hh.b0 == 6 )
 if ( mem [ ha + 1 ] .hh.b0 != hf )
 goto lab42 ;
 else {

   initlist = mem [ ha + 1 ] .hh .v.RH ;
   initlig = true ;
   initlft = ( mem [ ha ] .hh.b1 > 1 ) ;
   hu [ 0 ] = mem [ ha + 1 ] .hh.b1 ;
   if ( initlist == 0 )
   if ( initlft )
   {
     hu [ 0 ] = 256 ;
     initlig = false ;
   }
   freenode ( ha , 2 ) ;
 }
 else {

   if ( ! ( r >= himemmin ) )
   if ( mem [ r ] .hh.b0 == 6 )
   if ( mem [ r ] .hh.b1 > 1 )
   goto lab42 ;
   j = 1 ;
   s = ha ;
   initlist = 0 ;
   goto lab50 ;
 }
 s = curp ;
 while ( mem [ s ] .hh .v.RH != ha ) s = mem [ s ] .hh .v.RH ;
 j = 0 ;
 goto lab50 ;
 lab42: s = ha ;
 j = 0 ;
 hu [ 0 ] = 256 ;
 initlig = false ;
 initlist = 0 ;
 lab50: qq = holdr ;
 {register integer for_end; kk = j ; for_end = hn ; if ( kk <= for_end) do
   if ( dirtyumlaut [ kk ] != 0 )
   {
     while ( mem [ qq ] .hh .v.RH != dirtyumlaut [ kk ] ) qq = mem [ qq ] .hh
     .v.RH ;
     qr = mem [ qq ] .hh .v.RH ;
     {register integer for_end; i = 1 ; for_end = mem [ qr ] .hh.b1 ; if ( i
     <= for_end) do
       if ( qr != 0 )
       qr = mem [ qr ] .hh .v.RH ;
       else {

         {
           if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
           println () ;
           if ( selector != 18 )
           (void) fprintf( stdout , "%s\n",  "...??..X --> ????? !" ) ;
           if ( ( selector == 18 ) || ( selector == 19 ) )
           (void) fprintf( logfile , "%s\n",  "...??..X --> ????? !" ) ;
         }
       }
     while ( i++ < for_end ) ; }
     if ( qr != 0 )
     {
       mem [ qq ] .hh .v.RH = mem [ qr ] .hh .v.RH ;
       mem [ qr ] .hh .v.RH = 0 ;
     }
     else mem [ qq ] .hh .v.RH = 0 ;
   }
 while ( kk++ < for_end ) ; }
 if ( dirtyumlaut [ -1 ] != 0 )
 {
   qq = holdr ;
   while ( ( mem [ qq ] .hh .v.RH != dirtyumlaut [ -1 ] ) && ( mem [ qq ] .hh
   .v.RH != 0 ) ) qq = mem [ qq ] .hh .v.RH ;
   if ( mem [ qq ] .hh .v.RH == dirtyumlaut [ -1 ] )
   {
     mem [ qq ] .hh .v.RH = mem [ dirtyumlaut [ -1 ] ] .hh .v.RH ;
     mem [ dirtyumlaut [ -1 ] ] .hh .v.RH = 0 ;
   }
   else {

     {
       if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
       println () ;
       if ( selector != 18 )
       (void) Fputs( stdout ,  " *** ERROR: node list is damaged! " ) ;
       if ( ( selector == 18 ) || ( selector == 19 ) )
       (void) Fputs( logfile ,  " *** ERROR: node list is damaged! " ) ;
     }
     {
       if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
       println () ;
       if ( selector != 18 )
       (void) fprintf( stdout , "%s\n",  "(post hyphenation - unhinge a whatsit node)" ) ;
       if ( ( selector == 18 ) || ( selector == 19 ) )
       (void) fprintf( logfile , "%s\n",  "(post hyphenation - unhinge a whatsit node)" ) ;
     }
   }
 }
 r = holdr ;
 while ( mem [ r ] .hh .v.RH != 0 ) {

   if ( ( memmin <= mem [ r ] .hh .v.RH ) && ( mem [ r ] .hh .v.RH <= memmax
   ) )
   r = mem [ r ] .hh .v.RH ;
   else {

     (void) putc('\n',  logfile );
     (void) putc('\n',  stdout );
     (void) fprintf( logfile , "%s\n",  "???$ - ERROR in node list!" ) ;
     (void) fprintf( stdout , "%s\n",  "???$ - ERROR in node list!" ) ;
     kk = depththreshold ;
     l = breadthmax ;
     depththreshold = 100 ;
     breadthmax = 100 ;
     shownodelist ( holdr ) ;
     mem [ r ] .hh .v.RH = 0 ;
     depththreshold = kk ;
     breadthmax = l ;
   }
 }
 flushnodelist ( holdr ) ;
 if ( dirtyumlaut [ -1 ] != 0 )
 {
   mem [ s ] .hh .v.RH = dirtyumlaut [ -1 ] ;
   s = mem [ s ] .hh .v.RH ;
 }
 do {
     if ( dirtyumlaut [ j ] != 0 )
   {
     mem [ s ] .hh .v.RH = dirtyumlaut [ j ] ;
     while ( mem [ s ] .hh .v.RH > 0 ) s = mem [ s ] .hh .v.RH ;
     mem [ memtop - 4 ] .hh .v.RH = 0 ;
     j = j + 1 ;
     hyphenpassed = 0 ;
     if ( hyfpen [ j - 1 ] != 10000 )
     {
       l = j ;
       hyphenpassed = j - 1 ;
       if ( odd ( eqtb [ 12719 ] .cint / 16 ) )
       {
         if ( ! odd ( eqtb [ 12720 ] .cint / 16 ) )
         {
           println () ;
           {
             if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
             println () ;
             if ( selector != 18 )
             (void) fprintf( stdout , "%s%ld%s\n",  "    <*  debugging output section #" , (long)16 ,               "  *>" ) ;
             if ( ( selector == 18 ) || ( selector == 19 ) )
             (void) fprintf( logfile , "%s%ld%s\n",  "    <*  debugging output section #" , (long)16 ,               "  *>" ) ;
           }
         }
         {
           if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
           println () ;
           if ( selector != 18 )
           (void) fprintf( stdout , "%s\n",              " *** append a hyphen immediatly after a dirty umlaut!" ) ;
           if ( ( selector == 18 ) || ( selector == 19 ) )
           (void) fprintf( logfile , "%s\n",              " *** append a hyphen immediatly after a dirty umlaut!" ) ;
         }
       }
     }
   }
   else {

     l = j ;
     j = reconstitute ( j , hn , bchar , hyfchar ) + 1 ;
     if ( hyphenpassed == 0 )
     {
       mem [ s ] .hh .v.RH = mem [ memtop - 4 ] .hh .v.RH ;
       while ( mem [ s ] .hh .v.RH > 0 ) s = mem [ s ] .hh .v.RH ;
       if ( hyfpen [ j - 1 ] != 10000 )
       {
         l = j ;
         hyphenpassed = j - 1 ;
         mem [ memtop - 4 ] .hh .v.RH = 0 ;
       }
     }
   }
   if ( hyphenpassed > 0 )
   do {
       r = getnode ( 2 ) ;
     mem [ r ] .hh .v.RH = mem [ memtop - 4 ] .hh .v.RH ;
     mem [ r ] .hh.b0 = 7 ;
     majortail = r ;
     rcount = 0 ;
     while ( mem [ majortail ] .hh .v.RH > 0 ) {

       majortail = mem [ majortail ] .hh .v.RH ;
       incr ( rcount ) ;
     }
     i = hyphenpassed ;
     hyf [ i ] = 0 ;
     if ( ( hyfpen [ i ] != 10000 ) && ( hyfpen [ i ] != eqtb [ 12666 ] .cint
     ) )
     minortail = newpenalty ( hyfpen [ i ] ) ;
     else minortail = 0 ;
     hyfpen [ i ] = 10000 ;
     mem [ r + 1 ] .hh .v.LH = minortail ;
     hyfnode = newcharacter ( hf , hyfchar ) ;
     xchgk = i ;
     if ( hyfdisc [ xchgk ] != 0 )
     {
       spechyf = mem [ hyfdisc [ xchgk ] + 1 ] .hh .v.LH ;
       addchar = mem [ spechyf ] .hh.b1 ;
       xchgi = 1 ;
       do {
           spechyf = mem [ spechyf ] .hh .v.RH ;
         if ( spechyf != 0 )
         {
           xchgchar [ xchgi ] = mem [ spechyf ] .hh.b1 ;
           incr ( xchgi ) ;
         }
       } while ( ! ( spechyf == 0 ) ) ;
       if ( hyfnode != 0 )
       {
         xchgchar [ xchgi ] = hyfchar ;
         {
           mem [ hyfnode ] .hh .v.RH = avail ;
           avail = hyfnode ;
       ;
#ifdef STAT
           decr ( dynused ) ;
#endif /* STAT */
         }
       }
       else decr ( xchgi ) ;
       xchghu = i - xchgi + addchar + 2 ;
       {register integer for_end; xchgk = 1 ; for_end = xchgi ; if ( xchgk
       <= for_end) do
         {
           xchgchar [ 0 ] = hu [ xchghu ] ;
           hu [ xchghu ] = xchgchar [ xchgk ] ;
           xchgchar [ xchgk ] = xchgchar [ 0 ] ;
           incr ( xchghu ) ;
         }
       while ( xchgk++ < for_end ) ; }
       xchgk = i ;
       i = xchghu - 1 ;
       xchghu = xchghu - xchgi ;
     }
     else if ( hyfnode != 0 )
     {
       incr ( i ) ;
       c = hu [ i ] ;
       hu [ i ] = hyfchar ;
       {
         mem [ hyfnode ] .hh .v.RH = avail ;
         avail = hyfnode ;
       ;
#ifdef STAT
         decr ( dynused ) ;
#endif /* STAT */
       }
     }
     while ( l <= i ) {

       l = reconstitute ( l , i , fontbchar [ hf ] , 256 ) + 1 ;
       if ( mem [ memtop - 4 ] .hh .v.RH > 0 )
       {
         if ( minortail == 0 )
         mem [ r + 1 ] .hh .v.LH = mem [ memtop - 4 ] .hh .v.RH ;
         else mem [ minortail ] .hh .v.RH = mem [ memtop - 4 ] .hh .v.RH ;
         minortail = mem [ memtop - 4 ] .hh .v.RH ;
         while ( mem [ minortail ] .hh .v.RH > 0 ) minortail = mem [
         minortail ] .hh .v.RH ;
       }
     }
     if ( hyfdisc [ xchgk ] != 0 )
     {
       i = xchgk ;
       l = i + 1 ;
       {register integer for_end; xchgk = 1 ; for_end = xchgi ; if ( xchgk
       <= for_end) do
         {
           hu [ xchghu ] = xchgchar [ xchgk ] ;
           incr ( xchghu ) ;
         }
       while ( xchgk++ < for_end ) ; }
     }
     else if ( hyfnode != 0 )
     {
       hu [ i ] = c ;
       l = i ;
       decr ( i ) ;
     }
     minortail = 0 ;
     mem [ r + 1 ] .hh .v.RH = 0 ;
     cloc = 0 ;
     if ( bcharlabel [ hf ] < fontmemsize )
     {
       decr ( l ) ;
       c = hu [ l ] ;
       cloc = l ;
       hu [ l ] = 256 ;
     }
     while ( l < j ) {

       do {
           l = reconstitute ( l , hn , bchar , 256 ) + 1 ;
         if ( cloc > 0 )
         {
           hu [ cloc ] = c ;
           cloc = 0 ;
         }
         if ( mem [ memtop - 4 ] .hh .v.RH > 0 )
         {
           if ( minortail == 0 )
           mem [ r + 1 ] .hh .v.RH = mem [ memtop - 4 ] .hh .v.RH ;
           else mem [ minortail ] .hh .v.RH = mem [ memtop - 4 ] .hh .v.RH ;
           minortail = mem [ memtop - 4 ] .hh .v.RH ;
           while ( mem [ minortail ] .hh .v.RH > 0 ) minortail = mem [
           minortail ] .hh .v.RH ;
         }
       } while ( ! ( l >= j ) ) ;
       while ( l > j ) {

         j = reconstitute ( j , hn , bchar , 256 ) + 1 ;
         mem [ majortail ] .hh .v.RH = mem [ memtop - 4 ] .hh .v.RH ;
         while ( mem [ majortail ] .hh .v.RH > 0 ) {

           majortail = mem [ majortail ] .hh .v.RH ;
           incr ( rcount ) ;
         }
       }
     }
     if ( rcount > 127 )
     {
       mem [ s ] .hh .v.RH = mem [ r ] .hh .v.RH ;
       mem [ r ] .hh .v.RH = 0 ;
       flushnodelist ( r ) ;
     }
     else {

       mem [ s ] .hh .v.RH = r ;
       mem [ r ] .hh.b1 = rcount ;
     }
     s = majortail ;
     hyphenpassed = j - 1 ;
     mem [ memtop - 4 ] .hh .v.RH = 0 ;
   } while ( ! ( ( hyfpen [ j - 1 ] == 10000 ) ) ) ;
 } while ( ! ( j > hn ) ) ;
 mem [ s ] .hh .v.RH = q ;
 siq = s ;
 {register integer for_end; j = 0 ; for_end = 64 ; if ( j <= for_end) do
   if ( hyfdisc [ j ] != 0 )
   {
     flushnodelist ( hyfdisc [ j ] ) ;
   }
 while ( j++ < for_end ) ; }
 flushlist ( initlist ) ;
}
void newhyphexceptions ( )
{/* 21 10 40 45 */ newhyphexceptions_regmem
 smallnumber n  ;
 smallnumber j  ;
 hyphpointer h  ;
 strnumber k  ;
 halfword p  ;
 halfword q  ;
 strnumber s, t  ;
 poolpointer u, v  ;
 scanleftbrace () ;
 if ( eqtb [ 12713 ] .cint <= 0 )
 curlang = 0 ;
 else if ( eqtb [ 12713 ] .cint > 255 )
 curlang = 0 ;
 else curlang = eqtb [ 12713 ] .cint ;
 n = 0 ;
 p = 0 ;
 while ( true ) {

   getxtoken () ;
   lab21: switch ( curcmd )
   {case 11 :
   case 12 :
   case 68 :
     if ( curchr == 45 )
     {
       if ( n < 63 )
       {
         q = getavail () ;
         mem [ q ] .hh .v.RH = p ;
         mem [ q ] .hh .v.LH = n ;
         p = q ;
       }
     }
     else {

       if ( eqtb [ 11639 + curchr ] .hh .v.RH == 0 )
       {
         {
           if ( interaction == 3 )
           ;
           printnl ( 262 ) ;
           print ( 941 ) ;
         }
         {
           helpptr = 2 ;
           helpline [ 1 ] = 942 ;
           helpline [ 0 ] = 943 ;
         }
         error () ;
       }
       else if ( n < 63 )
       {
         incr ( n ) ;
         hc [ n ] = eqtb [ 11639 + curchr ] .hh .v.RH ;
       }
     }
     break ;
   case 16 :
     {
       scancharnum () ;
       curchr = curval ;
       curcmd = 68 ;
       goto lab21 ;
     }
     break ;
   case 10 :
   case 2 :
     {
       if ( n > 1 )
       {
         incr ( n ) ;
         hc [ n ] = curlang ;
         {
           if ( poolptr + n > poolsize )
           overflow ( 257 , poolsize - initpoolptr ) ;
         }
         h = 0 ;
         {register integer for_end; j = 1 ; for_end = n ; if ( j <= for_end)
         do
           {
             h = ( h + h + hc [ j ] ) % 607 ;
             {
               strpool [ poolptr ] = hc [ j ] ;
               incr ( poolptr ) ;
             }
           }
         while ( j++ < for_end ) ; }
         s = makestring () ;
         if ( hyphcount == 607 )
         overflow ( 944 , 607 ) ;
         incr ( hyphcount ) ;
         while ( hyphword [ h ] != 0 ) {

           k = hyphword [ h ] ;
           if ( ( strstart [ k + 1 ] - strstart [ k ] ) < ( strstart [ s + 1
           ] - strstart [ s ] ) )
           goto lab40 ;
           if ( ( strstart [ k + 1 ] - strstart [ k ] ) > ( strstart [ s + 1
           ] - strstart [ s ] ) )
           goto lab45 ;
           u = strstart [ k ] ;
           v = strstart [ s ] ;
           do {
               if ( strpool [ u ] < strpool [ v ] )
             goto lab40 ;
             if ( strpool [ u ] > strpool [ v ] )
             goto lab45 ;
             incr ( u ) ;
             incr ( v ) ;
           } while ( ! ( u == strstart [ k + 1 ] ) ) ;
           lab40: q = hyphlist [ h ] ;
           hyphlist [ h ] = p ;
           p = q ;
           t = hyphword [ h ] ;
           hyphword [ h ] = s ;
           s = t ;
           lab45: ;
           if ( h > 0 )
           decr ( h ) ;
           else h = 607 ;
         }
         hyphword [ h ] = s ;
         hyphlist [ h ] = p ;
       }
       if ( curcmd == 2 )
       return ;
       n = 0 ;
       p = 0 ;
     }
     break ;
     default:
     {
       {
         if ( interaction == 3 )
         ;
         printnl ( 262 ) ;
         print ( 679 ) ;
       }
       printesc ( 937 ) ;
       print ( 938 ) ;
       {
         helpptr = 2 ;
         helpline [ 1 ] = 939 ;
         helpline [ 0 ] = 940 ;
       }
       error () ;
     }
     break ;
   }
 }
}
halfword zprunepagetop ( p )
halfword p ;
{register halfword Result; prunepagetop_regmem
 halfword prevp  ;
 halfword q  ;
 prevp = memtop - 3 ;
 mem [ memtop - 3 ] .hh .v.RH = p ;
 while ( p != 0 ) switch ( mem [ p ] .hh.b0 )
 {case 0 :
 case 1 :
 case 2 :
   {
     q = newskipparam ( 10 ) ;
     mem [ prevp ] .hh .v.RH = q ;
     mem [ q ] .hh .v.RH = p ;
     if ( mem [ tempptr + 1 ] .cint > mem [ p + 3 ] .cint )
     mem [ tempptr + 1 ] .cint = mem [ tempptr + 1 ] .cint - mem [ p + 3 ]
     .cint ;
     else mem [ tempptr + 1 ] .cint = 0 ;
     p = 0 ;
   }
   break ;
 case 8 :
 case 4 :
 case 3 :
   {
     prevp = p ;
     p = mem [ prevp ] .hh .v.RH ;
   }
   break ;
 case 10 :
 case 11 :
 case 12 :
   {
     q = p ;
     p = mem [ q ] .hh .v.RH ;
     mem [ q ] .hh .v.RH = 0 ;
     mem [ prevp ] .hh .v.RH = p ;
     flushnodelist ( q ) ;
   }
   break ;
   default:
   confusion ( 954 ) ;
   break ;
 }
 Result = mem [ memtop - 3 ] .hh .v.RH ;
 return(Result) ;
}
halfword zvertbreak ( p , h , d )
halfword p ;
scaled h ;
scaled d ;
{/* 30 45 90 */ register halfword Result; vertbreak_regmem
 halfword prevp  ;
 halfword q, r  ;
 integer pi  ;
 integer b  ;
 integer leastcost  ;
 halfword bestplace  ;
 scaled prevdp  ;
 smallnumber t  ;
 prevp = p ;
 leastcost = 1073741823L ;
 activewidth [ 1 ] = 0 ;
 activewidth [ 2 ] = 0 ;
 activewidth [ 3 ] = 0 ;
 activewidth [ 4 ] = 0 ;
 activewidth [ 5 ] = 0 ;
 activewidth [ 6 ] = 0 ;
 prevdp = 0 ;
 while ( true ) {

   if ( p == 0 )
   pi = -10000 ;
   else switch ( mem [ p ] .hh.b0 )
   {case 0 :
   case 1 :
   case 2 :
     {
       activewidth [ 1 ] = activewidth [ 1 ] + prevdp + mem [ p + 3 ] .cint ;
       prevdp = mem [ p + 2 ] .cint ;
       goto lab45 ;
     }
     break ;
   case 8 :
     goto lab45 ;
     break ;
   case 10 :
     if ( ( mem [ prevp ] .hh.b0 < 9 ) )
     pi = 0 ;
     else goto lab90 ;
     break ;
   case 11 :
     {
       if ( mem [ p ] .hh .v.RH == 0 )
       t = 12 ;
       else t = mem [ mem [ p ] .hh .v.RH ] .hh.b0 ;
       if ( t == 10 )
       pi = 0 ;
       else goto lab90 ;
     }
     break ;
   case 12 :
     pi = mem [ p + 1 ] .cint ;
     break ;
   case 4 :
   case 3 :
     goto lab45 ;
     break ;
     default:
     confusion ( 955 ) ;
     break ;
   }
   if ( pi < 10000 )
   {
     if ( activewidth [ 1 ] < h )
     if ( ( activewidth [ 3 ] != 0 ) || ( activewidth [ 4 ] != 0 ) || (
     activewidth [ 5 ] != 0 ) )
     b = 0 ;
     else b = badness ( h - activewidth [ 1 ] , activewidth [ 2 ] ) ;
     else if ( activewidth [ 1 ] - h > activewidth [ 6 ] )
     b = 1073741823L ;
     else b = badness ( activewidth [ 1 ] - h , activewidth [ 6 ] ) ;
     if ( b < 1073741823L )
     if ( pi <= -10000 )
     b = pi ;
     else if ( b < 10000 )
     b = b + pi ;
     else b = 100000L ;
     if ( b <= leastcost )
     {
       bestplace = p ;
       leastcost = b ;
       bestheightplusdepth = activewidth [ 1 ] + prevdp ;
     }
     if ( ( b == 1073741823L ) || ( pi <= -10000 ) )
     goto lab30 ;
   }
   if ( ( mem [ p ] .hh.b0 < 10 ) || ( mem [ p ] .hh.b0 > 11 ) )
   goto lab45 ;
   lab90: if ( mem [ p ] .hh.b0 == 11 )
   q = p ;
   else {

     q = mem [ p + 1 ] .hh .v.LH ;
     activewidth [ 2 + mem [ q ] .hh.b0 ] = activewidth [ 2 + mem [ q ]
     .hh.b0 ] + mem [ q + 2 ] .cint ;
     activewidth [ 6 ] = activewidth [ 6 ] + mem [ q + 3 ] .cint ;
     if ( ( mem [ q ] .hh.b1 != 0 ) && ( mem [ q + 3 ] .cint != 0 ) )
     {
       {
         if ( interaction == 3 )
         ;
         printnl ( 262 ) ;
         print ( 956 ) ;
       }
       {
         helpptr = 4 ;
         helpline [ 3 ] = 957 ;
         helpline [ 2 ] = 958 ;
         helpline [ 1 ] = 959 ;
         helpline [ 0 ] = 918 ;
       }
       error () ;
       r = newspec ( q ) ;
       mem [ r ] .hh.b1 = 0 ;
       deleteglueref ( q ) ;
       mem [ p + 1 ] .hh .v.LH = r ;
       q = r ;
     }
   }
   activewidth [ 1 ] = activewidth [ 1 ] + prevdp + mem [ q + 1 ] .cint ;
   prevdp = 0 ;
   lab45: if ( prevdp > d )
   {
     activewidth [ 1 ] = activewidth [ 1 ] + prevdp - d ;
     prevdp = d ;
   }
   prevp = p ;
   p = mem [ prevp ] .hh .v.RH ;
 }
 lab30: Result = bestplace ;
 return(Result) ;
}
halfword zvsplit ( n , h )
eightbits n ;
scaled h ;
{/* 10 30 */ register halfword Result; vsplit_regmem
 halfword v  ;
 halfword p  ;
 halfword q  ;
 v = eqtb [ 11078 + n ] .hh .v.RH ;
 if ( curmark [ 3 ] != 0 )
 {
   deletetokenref ( curmark [ 3 ] ) ;
   curmark [ 3 ] = 0 ;
   deletetokenref ( curmark [ 4 ] ) ;
   curmark [ 4 ] = 0 ;
 }
 if ( v == 0 )
 {
   Result = 0 ;
   return(Result) ;
 }
 if ( mem [ v ] .hh.b0 != 1 )
 {
   {
     if ( interaction == 3 )
     ;
     printnl ( 262 ) ;
     print ( 335 ) ;
   }
   printesc ( 960 ) ;
   print ( 961 ) ;
   printesc ( 962 ) ;
   {
     helpptr = 2 ;
     helpline [ 1 ] = 963 ;
     helpline [ 0 ] = 964 ;
   }
   error () ;
   Result = 0 ;
   return(Result) ;
 }
 q = vertbreak ( mem [ v + 5 ] .hh .v.RH , h , eqtb [ 13239 ] .cint ) ;
 p = mem [ v + 5 ] .hh .v.RH ;
 if ( p == q )
 mem [ v + 5 ] .hh .v.RH = 0 ;
 else while ( true ) {

   if ( mem [ p ] .hh.b0 == 4 )
   if ( curmark [ 3 ] == 0 )
   {
     curmark [ 3 ] = mem [ p + 1 ] .cint ;
     curmark [ 4 ] = curmark [ 3 ] ;
     mem [ curmark [ 3 ] ] .hh .v.LH = mem [ curmark [ 3 ] ] .hh .v.LH + 2 ;
   }
   else {

     deletetokenref ( curmark [ 4 ] ) ;
     curmark [ 4 ] = mem [ p + 1 ] .cint ;
     incr ( mem [ curmark [ 4 ] ] .hh .v.LH ) ;
   }
   if ( mem [ p ] .hh .v.RH == q )
   {
     mem [ p ] .hh .v.RH = 0 ;
     goto lab30 ;
   }
   p = mem [ p ] .hh .v.RH ;
 }
 lab30: ;
 q = prunepagetop ( q ) ;
 p = mem [ v + 5 ] .hh .v.RH ;
 freenode ( v , 7 ) ;
 if ( q == 0 )
 eqtb [ 11078 + n ] .hh .v.RH = 0 ;
 else eqtb [ 11078 + n ] .hh .v.RH = vpackage ( q , 0 , 1 , 1073741823L ) ;
 Result = vpackage ( p , h , 0 , eqtb [ 13239 ] .cint ) ;
 return(Result) ;
}
void printtotals ( )
{printtotals_regmem
 printscaled ( pagesofar [ 1 ] ) ;
 if ( pagesofar [ 2 ] != 0 )
 {
   print ( 310 ) ;
   printscaled ( pagesofar [ 2 ] ) ;
   print ( 335 ) ;
 }
 if ( pagesofar [ 3 ] != 0 )
 {
   print ( 310 ) ;
   printscaled ( pagesofar [ 3 ] ) ;
   print ( 309 ) ;
 }
 if ( pagesofar [ 4 ] != 0 )
 {
   print ( 310 ) ;
   printscaled ( pagesofar [ 4 ] ) ;
   print ( 973 ) ;
 }
 if ( pagesofar [ 5 ] != 0 )
 {
   print ( 310 ) ;
   printscaled ( pagesofar [ 5 ] ) ;
   print ( 974 ) ;
 }
 if ( pagesofar [ 6 ] != 0 )
 {
   print ( 311 ) ;
   printscaled ( pagesofar [ 6 ] ) ;
 }
}
void zfreezepagespecs ( s )
smallnumber s ;
{freezepagespecs_regmem
 pagecontents = s ;
 pagesofar [ 0 ] = eqtb [ 13237 ] .cint ;
 pagemaxdepth = eqtb [ 13238 ] .cint ;
 pagesofar [ 7 ] = 0 ;
 pagesofar [ 1 ] = 0 ;
 pagesofar [ 2 ] = 0 ;
 pagesofar [ 3 ] = 0 ;
 pagesofar [ 4 ] = 0 ;
 pagesofar [ 5 ] = 0 ;
 pagesofar [ 6 ] = 0 ;
 leastpagecost = 1073741823L ;
       ;
#ifdef STAT
 if ( eqtb [ 12696 ] .cint > 0 )
 {
   begindiagnostic () ;
   printnl ( 982 ) ;
   printscaled ( pagesofar [ 0 ] ) ;
   print ( 983 ) ;
   printscaled ( pagemaxdepth ) ;
   enddiagnostic ( false ) ;
 }
#endif /* STAT */
}
void zboxerror ( n )
eightbits n ;
{boxerror_regmem
 error () ;
 begindiagnostic () ;
 printnl ( 832 ) ;
 showbox ( eqtb [ 11078 + n ] .hh .v.RH ) ;
 enddiagnostic ( true ) ;
 flushnodelist ( eqtb [ 11078 + n ] .hh .v.RH ) ;
 eqtb [ 11078 + n ] .hh .v.RH = 0 ;
}
void zensurevbox ( n )
eightbits n ;
{ensurevbox_regmem
 halfword p  ;
 p = eqtb [ 11078 + n ] .hh .v.RH ;
 if ( p != 0 )
 if ( mem [ p ] .hh.b0 == 0 )
 {
   {
     if ( interaction == 3 )
     ;
     printnl ( 262 ) ;
     print ( 984 ) ;
   }
   {
     helpptr = 3 ;
     helpline [ 2 ] = 985 ;
     helpline [ 1 ] = 986 ;
     helpline [ 0 ] = 987 ;
   }
   boxerror ( n ) ;
 }
}
void zfireup ( c )
halfword c ;
{/* 10 */ fireup_regmem
 halfword p, q, r, s  ;
 halfword prevp  ;
 unsigned char n  ;
 boolean wait  ;
 integer savevbadness  ;
 scaled savevfuzz  ;
 halfword savesplittopskip  ;
 if ( mem [ bestpagebreak ] .hh.b0 == 12 )
 {
   geqworddefine ( 12702 , mem [ bestpagebreak + 1 ] .cint ) ;
   mem [ bestpagebreak + 1 ] .cint = 10000 ;
 }
 else geqworddefine ( 12702 , 10000 ) ;
 if ( curmark [ 2 ] != 0 )
 {
   if ( curmark [ 0 ] != 0 )
   deletetokenref ( curmark [ 0 ] ) ;
   curmark [ 0 ] = curmark [ 2 ] ;
   incr ( mem [ curmark [ 0 ] ] .hh .v.LH ) ;
   deletetokenref ( curmark [ 1 ] ) ;
   curmark [ 1 ] = 0 ;
 }
 if ( c == bestpagebreak )
 bestpagebreak = 0 ;
 if ( eqtb [ 11333 ] .hh .v.RH != 0 )
 {
   {
     if ( interaction == 3 )
     ;
     printnl ( 262 ) ;
     print ( 335 ) ;
   }
   printesc ( 405 ) ;
   print ( 998 ) ;
   {
     helpptr = 2 ;
     helpline [ 1 ] = 999 ;
     helpline [ 0 ] = 987 ;
   }
   boxerror ( 255 ) ;
 }
 insertpenalties = 0 ;
 savesplittopskip = eqtb [ 10292 ] .hh .v.RH ;
 if ( eqtb [ 12716 ] .cint <= 0 )
 {
   r = mem [ memtop ] .hh .v.RH ;
   while ( r != memtop ) {

     if ( mem [ r + 2 ] .hh .v.LH != 0 )
     {
       n = mem [ r ] .hh.b1 ;
       ensurevbox ( n ) ;
       if ( eqtb [ 11078 + n ] .hh .v.RH == 0 )
       eqtb [ 11078 + n ] .hh .v.RH = newnullbox () ;
       p = eqtb [ 11078 + n ] .hh .v.RH + 5 ;
       while ( mem [ p ] .hh .v.RH != 0 ) p = mem [ p ] .hh .v.RH ;
       mem [ r + 2 ] .hh .v.RH = p ;
     }
     r = mem [ r ] .hh .v.RH ;
   }
 }
 q = memtop - 4 ;
 mem [ q ] .hh .v.RH = 0 ;
 prevp = memtop - 2 ;
 p = mem [ prevp ] .hh .v.RH ;
 while ( p != bestpagebreak ) {

   if ( mem [ p ] .hh.b0 == 3 )
   {
     if ( eqtb [ 12716 ] .cint <= 0 )
     {
       r = mem [ memtop ] .hh .v.RH ;
       while ( mem [ r ] .hh.b1 != mem [ p ] .hh.b1 ) r = mem [ r ] .hh .v.RH
       ;
       if ( mem [ r + 2 ] .hh .v.LH == 0 )
       wait = true ;
       else {

         wait = false ;
         s = mem [ r + 2 ] .hh .v.RH ;
         mem [ s ] .hh .v.RH = mem [ p + 4 ] .hh .v.LH ;
         if ( mem [ r + 2 ] .hh .v.LH == p )
         {
           if ( mem [ r ] .hh.b0 == 1 )
           if ( ( mem [ r + 1 ] .hh .v.LH == p ) && ( mem [ r + 1 ] .hh .v.RH
           != 0 ) )
           {
             while ( mem [ s ] .hh .v.RH != mem [ r + 1 ] .hh .v.RH ) s = mem
             [ s ] .hh .v.RH ;
             mem [ s ] .hh .v.RH = 0 ;
             eqtb [ 10292 ] .hh .v.RH = mem [ p + 4 ] .hh .v.RH ;
             mem [ p + 4 ] .hh .v.LH = prunepagetop ( mem [ r + 1 ] .hh .v.RH
             ) ;
             if ( mem [ p + 4 ] .hh .v.LH != 0 )
             {
               tempptr = vpackage ( mem [ p + 4 ] .hh .v.LH , 0 , 1 ,
               1073741823L ) ;
               mem [ p + 3 ] .cint = mem [ tempptr + 3 ] .cint + mem [
               tempptr + 2 ] .cint ;
               freenode ( tempptr , 7 ) ;
               wait = true ;
             }
           }
           mem [ r + 2 ] .hh .v.LH = 0 ;
           n = mem [ r ] .hh.b1 ;
           tempptr = mem [ eqtb [ 11078 + n ] .hh .v.RH + 5 ] .hh .v.RH ;
           freenode ( eqtb [ 11078 + n ] .hh .v.RH , 7 ) ;
           eqtb [ 11078 + n ] .hh .v.RH = vpackage ( tempptr , 0 , 1 ,
           1073741823L ) ;
         }
         else {

           while ( mem [ s ] .hh .v.RH != 0 ) s = mem [ s ] .hh .v.RH ;
           mem [ r + 2 ] .hh .v.RH = s ;
         }
       }
       mem [ prevp ] .hh .v.RH = mem [ p ] .hh .v.RH ;
       mem [ p ] .hh .v.RH = 0 ;
       if ( wait )
       {
         mem [ q ] .hh .v.RH = p ;
         q = p ;
         incr ( insertpenalties ) ;
       }
       else {

         deleteglueref ( mem [ p + 4 ] .hh .v.RH ) ;
         freenode ( p , 5 ) ;
       }
       p = prevp ;
     }
   }
   else if ( mem [ p ] .hh.b0 == 4 )
   {
     if ( curmark [ 1 ] == 0 )
     {
       curmark [ 1 ] = mem [ p + 1 ] .cint ;
       incr ( mem [ curmark [ 1 ] ] .hh .v.LH ) ;
     }
     if ( curmark [ 2 ] != 0 )
     deletetokenref ( curmark [ 2 ] ) ;
     curmark [ 2 ] = mem [ p + 1 ] .cint ;
     incr ( mem [ curmark [ 2 ] ] .hh .v.LH ) ;
   }
   prevp = p ;
   p = mem [ prevp ] .hh .v.RH ;
 }
 eqtb [ 10292 ] .hh .v.RH = savesplittopskip ;
 if ( p != 0 )
 {
   if ( mem [ memtop - 1 ] .hh .v.RH == 0 )
   if ( nestptr == 0 )
   curlist .tailfield = pagetail ;
   else nest [ 0 ] .tailfield = pagetail ;
   mem [ pagetail ] .hh .v.RH = mem [ memtop - 1 ] .hh .v.RH ;
   mem [ memtop - 1 ] .hh .v.RH = p ;
   mem [ prevp ] .hh .v.RH = 0 ;
 }
 savevbadness = eqtb [ 12690 ] .cint ;
 eqtb [ 12690 ] .cint = 10000 ;
 savevfuzz = eqtb [ 13242 ] .cint ;
 eqtb [ 13242 ] .cint = 1073741823L ;
 eqtb [ 11333 ] .hh .v.RH = vpackage ( mem [ memtop - 2 ] .hh .v.RH ,
 bestsize , 0 , pagemaxdepth ) ;
 eqtb [ 12690 ] .cint = savevbadness ;
 eqtb [ 13242 ] .cint = savevfuzz ;
 if ( lastglue != 262143L )
 deleteglueref ( lastglue ) ;
 pagecontents = 0 ;
 pagetail = memtop - 2 ;
 mem [ memtop - 2 ] .hh .v.RH = 0 ;
 lastglue = 262143L ;
 lastpenalty = 0 ;
 lastkern = 0 ;
 pagesofar [ 7 ] = 0 ;
 pagemaxdepth = 0 ;
 if ( q != memtop - 4 )
 {
   mem [ memtop - 2 ] .hh .v.RH = mem [ memtop - 4 ] .hh .v.RH ;
   pagetail = q ;
 }
 r = mem [ memtop ] .hh .v.RH ;
 while ( r != memtop ) {

   q = mem [ r ] .hh .v.RH ;
   freenode ( r , 4 ) ;
   r = q ;
 }
 mem [ memtop ] .hh .v.RH = memtop ;
 if ( ( curmark [ 0 ] != 0 ) && ( curmark [ 1 ] == 0 ) )
 {
   curmark [ 1 ] = curmark [ 0 ] ;
   incr ( mem [ curmark [ 0 ] ] .hh .v.LH ) ;
 }
 if ( eqtb [ 10813 ] .hh .v.RH != 0 )
 if ( deadcycles >= eqtb [ 12703 ] .cint )
 {
   {
     if ( interaction == 3 )
     ;
     printnl ( 262 ) ;
     print ( 1000 ) ;
   }
   printint ( deadcycles ) ;
   print ( 1001 ) ;
   {
     helpptr = 3 ;
     helpline [ 2 ] = 1002 ;
     helpline [ 1 ] = 1003 ;
     helpline [ 0 ] = 1004 ;
   }
   error () ;
 }
 else {

   outputactive = true ;
   incr ( deadcycles ) ;
   pushnest () ;
   curlist .modefield = -1 ;
   curlist .auxfield .cint = -65536000L ;
   curlist .mlfield = - (integer) line ;
   begintokenlist ( eqtb [ 10813 ] .hh .v.RH , 6 ) ;
   newsavelevel ( 8 ) ;
   normalparagraph () ;
   scanleftbrace () ;
   return ;
 }
 {
   if ( mem [ memtop - 2 ] .hh .v.RH != 0 )
   {
     if ( mem [ memtop - 1 ] .hh .v.RH == 0 )
     if ( nestptr == 0 )
     curlist .tailfield = pagetail ;
     else nest [ 0 ] .tailfield = pagetail ;
     else mem [ pagetail ] .hh .v.RH = mem [ memtop - 1 ] .hh .v.RH ;
     mem [ memtop - 1 ] .hh .v.RH = mem [ memtop - 2 ] .hh .v.RH ;
     mem [ memtop - 2 ] .hh .v.RH = 0 ;
     pagetail = memtop - 2 ;
   }
   shipout ( eqtb [ 11333 ] .hh .v.RH ) ;
   eqtb [ 11333 ] .hh .v.RH = 0 ;
 }
}