#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 ; 
  } 
}