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