if ( hchar < 256 )
if ( hyfpen [ j ] != 10000 )
{
hyphenpassed = j ;
hchar = 256 ;
}
if ( q .b2 < 128 )
{
if ( curl == 256 )
lfthit = true ;
if ( j == n )
if ( ligstack == 0 )
rthit = true ;
{
if ( interrupt != 0 )
pauseforinstructions () ;
}
switch ( q .b2 )
{case 1 :
case 5 :
{
curl = q .b3 ;
ligaturepresent = true ;
}
break ;
case 2 :
case 6 :
{
curr = q .b3 ;
if ( ligstack > 0 )
mem [ ligstack ] .hh.b1 = curr ;
else {
ligstack = newligitem ( curr ) ;
if ( j == n )
bchar = 256 ;
else {
p = getavail () ;
mem [ ligstack + 1 ] .hh .v.RH = p ;
mem [ p ] .hh.b1 = hu [ j + 1 ] ;
mem [ p ] .hh.b0 = hf ;
}
}
}
break ;
case 3 :
{
curr = q .b3 ;
p = ligstack ;
ligstack = newligitem ( curr ) ;
mem [ ligstack ] .hh .v.RH = p ;
}
break ;
case 7 :
case 11 :
{
if ( ligaturepresent )
{
p = newligature ( hf , curl , mem [ curq ] .hh .v.RH ) ;
if ( lfthit )
{
mem [ p ] .hh.b1 = 2 ;
lfthit = false ;
}
if ( false )
if ( ligstack == 0 )
{
incr ( mem [ p ] .hh.b1 ) ;
rthit = false ;
}
mem [ curq ] .hh .v.RH = p ;
t = p ;
ligaturepresent = false ;
}
curq = t ;
curl = q .b3 ;
ligaturepresent = true ;
}
break ;
default:
{
curl = q .b3 ;
ligaturepresent = true ;
if ( ligstack > 0 )
{
if ( mem [ ligstack + 1 ] .hh .v.RH > 0 )
{
mem [ t ] .hh .v.RH = mem [ ligstack + 1 ] .hh .v.RH ;
t = mem [ t ] .hh .v.RH ;
incr ( j ) ;
}
p = ligstack ;
ligstack = mem [ p ] .hh .v.RH ;
freenode ( p , 2 ) ;
if ( ligstack == 0 )
{
if ( j < n )
curr = hu [ j + 1 ] ;
else curr = bchar ;
if ( hyfpen [ j ] != 10000 )
currh = hchar ;
else currh = 256 ;
}
else curr = mem [ ligstack ] .hh.b1 ;
}
else if ( j == n )
goto lab30 ;
else {
{
mem [ t ] .hh .v.RH = getavail () ;
t = mem [ t ] .hh .v.RH ;
mem [ t ] .hh.b0 = hf ;
mem [ t ] .hh.b1 = curr ;
}
incr ( j ) ;
{
if ( j < n )
curr = hu [ j + 1 ] ;
else curr = bchar ;
if ( hyfpen [ j ] != 10000 )
currh = hchar ;
else currh = 256 ;
}
}
}
break ;
}
if ( q .b2 > 4 )
if ( q .b2 != 7 )
goto lab30 ;
goto lab22 ;
}
w = fontinfo [ kernbase [ hf ] + 256 * q .b2 + q .b3 ] .cint ;
goto lab30 ;
}
if ( q .b0 >= 128 )
if ( currh == 256 )
goto lab30 ;
else {
currh = 256 ;
goto lab22 ;
}
k = k + q .b0 + 1 ;
q = fontinfo [ k ] .qqqq ;
}
lab30: ;
if ( ligaturepresent )
{
p = newligature ( hf , curl , mem [ curq ] .hh .v.RH ) ;
if ( lfthit )
{
mem [ p ] .hh.b1 = 2 ;
lfthit = false ;
}
if ( rthit )
if ( ligstack == 0 )
{
incr ( mem [ p ] .hh.b1 ) ;
rthit = false ;
}
mem [ curq ] .hh .v.RH = p ;
t = p ;
ligaturepresent = false ;
}
if ( w != 0 )
{
mem [ t ] .hh .v.RH = newkern ( w ) ;
t = mem [ t ] .hh .v.RH ;
w = 0 ;
}
if ( ligstack > 0 )
{
curq = t ;
curl = mem [ ligstack ] .hh.b1 ;
ligaturepresent = true ;
{
if ( mem [ ligstack + 1 ] .hh .v.RH > 0 )
{
mem [ t ] .hh .v.RH = mem [ ligstack + 1 ] .hh .v.RH ;
t = mem [ t ] .hh .v.RH ;
incr ( j ) ;
}
p = ligstack ;
ligstack = mem [ p ] .hh .v.RH ;
freenode ( p , 2 ) ;
if ( ligstack == 0 )
{
if ( j < n )
curr = hu [ j + 1 ] ;
else curr = bchar ;
if ( hyfpen [ j ] != 10000 )
currh = hchar ;
else currh = 256 ;
}
else curr = mem [ ligstack ] .hh.b1 ;
}
goto lab22 ;
}
Result = j ;
return(Result) ;
}
void zhashfunk ( w , anfang , ende , v , ind , k )
wort w ;
integer anfang ;
integer ende ;
varr v ;
intarr ind ;
intarr k ;
{hashfunk_regmem
long vacc, indacc, kacc ;
integer i ;
vacc = 31415L ;
indacc = 152L ;
kacc = 271L ;
{register integer for_end; i = anfang ; for_end = ende ; if ( i <= for_end)
do
{
;
vacc = ( vacc * 31 + w [ i ] ) % 8388648L ;
v [ i ] = vacc ;
indacc = ( indacc * 33 + w [ i ] ) % ( tabsize + 1 ) ;
ind [ i ] = indacc ;
kacc = ( kacc * 15 + w [ i ] ) % ( ( tabsize + 1 ) / 2 ) ;
k [ i ] = 2 * kacc + 1 ;
}
while ( i++ < for_end ) ; }
}
void zunpackinfo ( b , iausnahme , iuntrennbar , ierste , izweite , iendung ,
ivorsilbe , istamm , iehervor , istammallein )
infobyte b ;
boolean * iausnahme ;
boolean * iuntrennbar ;
integer * ierste ;
integer * izweite ;
boolean * iendung ;
boolean * ivorsilbe ;
boolean * istamm ;
boolean * iehervor ;
boolean * istammallein ;
{unpackinfo_regmem
if ( odd ( b ) )
{
(* iausnahme )= true ;
b = b / 2 ;
if ( odd ( b ) )
(* iuntrennbar )= true ;
else (*iuntrennbar )= false ;
b = b / 2 ;
(* ierste )= b % 8 ;
(* izweite )= b / 8 ;
}
else {
(* iausnahme )= false ;
b = b / 2 ;
if ( odd ( b ) )
(* iendung )= true ;
else (*iendung )= false ;
b = b / 2 ;
if ( odd ( b ) )
(* ivorsilbe )= true ;
else (*ivorsilbe )= false ;
b = b / 2 ;
if ( odd ( b ) )
(* istamm )= true ;
else (*istamm )= false ;
b = b / 2 ;
if ( odd ( b ) )
(* iehervor )= true ;
else (*iehervor )= false ;
b = b / 2 ;
if ( odd ( b ) )
(* istammallein )= true ;
else (*istammallein )= false ;
}
}
void zunpackentry ( h , etabv , etabb , efrei , ewiederfrei )
hashelement h ;
verdschlue * etabv ;
infobyte * etabb ;
boolean * efrei ;
boolean * ewiederfrei ;
{unpackentry_regmem
;
(* etabv )= h [ 0 ] + h [ 1 ] * 256 + h [ 2 ] * 256 * 256 ;
if ( odd ( h [ 3 ] ) )
{
;
(* etabb )= h [ 3 ] ;
(* efrei )= false ;
(* ewiederfrei )= false ;
}
else {
;
(* etabb )= h [ 3 ] % 64 ;
if ( odd ( h [ 3 ] / 64 ) )
(* efrei )= true ;
else (*efrei )= false ;
if ( odd ( h [ 3 ] / 128 ) )
(* ewiederfrei )= true ;
else (*ewiederfrei )= false ;
}
}
void zhashsuch ( v , ind , k , iausnahme , iuntrennbar , ierste , izweite ,
iendung , ivorsilbe , istamm , iehervor , istammallein , g )
verdschlue v ;
integer ind ;
integer k ;
boolean * iausnahme ;
boolean * iuntrennbar ;
integer * ierste ;
integer * izweite ;
boolean * iendung ;
boolean * ivorsilbe ;
boolean * istamm ;
boolean * iehervor ;
boolean * istammallein ;
boolean * g ;
{hashsuch_regmem
boolean gef, ngef ;
integer j ;
tableentry entry ;
gef = false ;
ngef = false ;
j = ind ;
do {
unpackentry ( htab [ j ] , entry .tabv , entry .tabb , entry .frei ,
entry .wiederfrei ) ;
if ( entry .frei )
ngef = true ;
else if ( ( v == entry .tabv ) && ! entry .wiederfrei )
{
unpackinfo ( entry .tabb , (*iausnahme ), (*iuntrennbar ), (*ierste ), (*izweite ), (*
iendung ), (*ivorsilbe ), (*istamm ), (*iehervor ), (*istammallein )) ;
gef = true ;
}
else j = ( j + k ) % ( tabsize + 1 ) ;
} while ( ! ( gef || ngef ) ) ;
(* g )= gef ;
}
void zhashload ( status )
integer * status ;
{hashload_regmem
integer i ;
tableentry e ;
{register integer for_end; i = 1 ; for_end = FILENAMESIZE ; if ( i <=
for_end) do
nameoffile [ i ] = ' ' ;
while ( i++ < for_end ) ; }
nameoffile [ 1 ] = 'h' ;
nameoffile [ 2 ] = 'f' ;
nameoffile [ 3 ] = '3' ;
namelength = 3 ;
anzahl = 0 ;
if ( aopenin ( hashfile , TEXINPUTPATH ) )
{
{register integer for_end; i = 0 ; for_end = tabsize ; if ( i <= for_end)
do
{
int help;
fscanf ( hashfile, "%d", &help );
htab [i][0] = (eightbits) help;
fscanf ( hashfile, "%d", &help );
htab [i][1] = (eightbits) help;
fscanf ( hashfile, "%d", &help );
htab [i][2] = (eightbits) help;
fscanf ( hashfile, "%d", &help );
htab [i][3] = (eightbits) help;
unpackentry ( htab [ i ] , e .tabv , e .tabb , e .frei , e .wiederfrei
) ;
if ( ! e .frei && ! e .wiederfrei )
anzahl = anzahl + 1 ;
}
while ( i++ < for_end ) ; }
(* status )= 0 ;
aclose ( hashfile ) ;
}
else (*status )= 1 ;
}
void zpackinfo ( i , b )
infotype i ;
infobyte * b ;
{packinfo_regmem
(* b )= 0 ;
if ( i .ausnahme )
{
;
if ( i .untrennbar )
;
else ;
(* b )= 1 + 2 * ord ( i .untrennbar ) + 4 * i .erste + 32 * i .zweite ;
}
else {
;
(* b )= 2 * ord ( i .endung ) + 4 * ord ( i .vorsilbe ) + 8 * ord ( i .stamm )
+ 16 * ord ( i .ehervor ) + 32 * ord ( i .stammallein ) ;
}
}
void zpackentry ( e , h )
tableentry e ;
hashelement h ;
{packentry_regmem
;
h [ 0 ] = e .tabv % 256 ;
e .tabv = e .tabv / 256 ;
h [ 1 ] = e .tabv % 256 ;
h [ 2 ] = e .tabv / 256 ;
if ( odd ( e .tabb ) )
h [ 3 ] = e .tabb ;
else {
;
h [ 3 ] = e .tabb + 64 * ord ( e .frei ) + 128 * ord ( e .wiederfrei ) ;
}
}
void zhashetr ( w , laenge , i , g )
wort w ;
integer laenge ;
infotype i ;
boolean * g ;
{hashetr_regmem
varr v1 ;
intarr ind1, k1 ;
verdschlue v ;
integer ind, k, j, e ;
boolean gef, ngef ;
tableentry entry ;
hashelement helem ;
if ( anzahl >= tabsize )
{
;
(* g )= false ;
}
else {
ok = false ;
do {
switch ( b )
{case 22 :
(* informvorsilbe )= true ;
break ;
case 5 :
(* informendung )= true ;
break ;
case 19 :
(* informstamm )= true ;
break ;
case 2 :
(* informehervor )= true ;
break ;
case 20 :
(* informstammallein )= true ;
break ;
case 31 :
;
break ;
default:
fehler = true ;
break ;
}
if ( i == ende )
ok = true ;
else {
i = i + 1 ;
b = ktab [ line [ i ] ] ;
}
} while ( ! ( ok || fehler ) ) ;
if ( ! fehler )
(* g )= ( (*informvorsilbe )|| (*informendung )|| (*informstamm )) && ( ! (*
informehervor )|| (*informvorsilbe )&& (*informendung )) && ( ! (*
informstammallein )|| (*informstamm )) ;
}
}
}
void zeintragen ( line , l )
string80 line ;
integer l ;
{eintragen_regmem
integer i, laenge ;
infotype inform ;
wort w ;
boolean g ;
laenge = 1 ;
while ( line [ laenge ] != 46 ) laenge = laenge + 1 ;
laenge = laenge - 1 ;
if ( laenge >= 1 )
{
if ( laenge <= maxwl )
{
infobau ( line , laenge + 1 , l , inform .ausnahme , inform .untrennbar
, inform .erste , inform .zweite , inform .endung , inform .vorsilbe ,
inform .stamm , inform .ehervor , inform .stammallein , g ) ;
if ( ! g )
{
println () ;
{
if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
println () ;
if ( selector != 18 )
(void) Fputs( stdout , " Info falsch: " ) ;
if ( ( selector == 18 ) || ( selector == 19 ) )
(void) Fputs( logfile , " Info falsch: " ) ;
}
}
else {
{register integer for_end; i = 1 ; for_end = laenge ; if ( i <=
for_end) do
w [ i ] = ktab [ line [ i ] ] ;
while ( i++ < for_end ) ; }
hashetr ( w , laenge , inform , g ) ;
if ( ! g )
{
println () ;
{
if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
println () ;
if ( selector != 18 )
(void) Fputs( stdout , " Tabellenfehler: " ) ;
if ( ( selector == 18 ) || ( selector == 19 ) )
(void) Fputs( logfile , " Tabellenfehler: " ) ;
}
}
}
if ( ! g )
{
{register integer for_end; i = 1 ; for_end = l ; if ( i <= for_end)
do
{
if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
println () ;
if ( selector != 18 )
(void) putc( Xchr ( line [ i ] ) , stdout );
if ( ( selector == 18 ) || ( selector == 19 ) )
(void) putc( Xchr ( line [ i ] ) , logfile );
}
while ( i++ < for_end ) ; }
println () ;
}
}
else {
println () ;
{
if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
println () ;
if ( selector != 18 )
(void) fprintf( stdout , "%s\n", " zu langes Wort: " ) ;
if ( ( selector == 18 ) || ( selector == 19 ) )
(void) fprintf( logfile , "%s\n", " zu langes Wort: " ) ;
}
{register integer for_end; i = 1 ; for_end = l ; if ( i <= for_end) do
{
if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
println () ;
if ( selector != 18 )
(void) putc( Xchr ( line [ i ] ) , stdout );
if ( ( selector == 18 ) || ( selector == 19 ) )
(void) putc( Xchr ( line [ i ] ) , logfile );
}
while ( i++ < for_end ) ; }
println () ;
}
}
else {
println () ;
{
if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
println () ;
if ( selector != 18 )
(void) fprintf( stdout , "%s\n", " Falsche Zeile: " ) ;
if ( ( selector == 18 ) || ( selector == 19 ) )
(void) fprintf( logfile , "%s\n", " Falsche Zeile: " ) ;
}
{register integer for_end; i = 1 ; for_end = l ; if ( i <= for_end) do
{
if ( ( fileoffset != 0 ) || ( termoffset != 0 ) )
println () ;
if ( selector != 18 )
(void) putc( Xchr ( line [ i ] ) , stdout );
if ( ( selector == 18 ) || ( selector == 19 ) )
(void) putc( Xchr ( line [ i ] ) , logfile );
}
while ( i++ < for_end ) ; }
println () ;
}
}
void znaechsterbst ( i , tr , dudstop , b , w )
integer * i ;
trennvektor tr ;
sperrvektor dudstop ;
buchstabe * b ;
wort w ;
{naechsterbst_regmem
if ( ( (*i )> 0 ) && ( tr [ (*i )] == keine ) && ! dudstop [ (*i )] )
{
(* b )= w [ (*i )] ;
(* i )= (*i )- 1 ;
}
else (*b )= trennzeichen ;
}
void zduden ( tr , w , tr1 , dudtr , dud , dudstop , laenge , ok , zerlegungen
)
trennvektor tr ;
wort w ;
trennvektor tr1 ;
trennvektor dudtr ;
dudt dud ;
sperrvektor dudstop ;
integer laenge ;
boolean * ok ;
integer * zerlegungen ;
{duden_regmem
integer i ;
integer j ;
integer zust ;
boolean aus ;
integer tre ;
integer letzte ;
integer l, lalt ;
buchstabe b ;
i = laenge ;
{register integer for_end; j = 0 ; for_end = laenge ; if ( j <= for_end) do
dudtr [ j ] = tr [ j ] ;
while ( j++ < for_end ) ; }
while ( ( i > 0 ) && ! dud [ i ] ) i = i - 1 ;
while ( i > 0 ) {
zust = 1 ;
aus = false ;
letzte = 0 ;
l = kons ;
b = w [ i ] ;
i = i - 1 ;
do {
{
tre = i + 1 ;
lalt = l ;
switch ( b )
{case 1 :
{
l = voka ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 15 :
{
l = voko ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 29 :
{
l = vokue ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 28 :
{
l = vokoe ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 27 :
{
l = vokae ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 5 :
{
l = voke ;
naechsterbst ( i , tr , dudstop , b , w ) ;
if ( b == bsti )
{
l = vokie ;
naechsterbst ( i , tr , dudstop , b , w ) ;
if ( b == bste )
{
i = i + 1 ;
l = voke ;
b = bsti ;
}
}
}
break ;
case 9 :
{
l = voki ;
naechsterbst ( i , tr , dudstop , b , w ) ;
if ( b == bste )
{
l = vokei ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
else if ( b == bsta )
{
l = vokai ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
}
break ;
case 21 :
{
l = voku ;
naechsterbst ( i , tr , dudstop , b , w ) ;
if ( b == bste )
{
l = vokeu ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
else if ( b == bsta )
{
l = vokau ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
else if ( b == bstae )
{
l = vokaeu ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
else if ( b == bstq )
{
l = kons ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
}
break ;
case 20 :
{
l = kons ;
naechsterbst ( i , tr , dudstop , b , w ) ;
if ( b == bsts )
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 8 :
{
l = kons ;
naechsterbst ( i , tr , dudstop , b , w ) ;
if ( b == bstc )
{
naechsterbst ( i , tr , dudstop , b , w ) ;
if ( b == bsts )
naechsterbst ( i , tr , dudstop , b , w ) ;
}
else if ( b == bstp )
naechsterbst ( i , tr , dudstop , b , w ) ;
else if ( b == bstt )
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 2 :
case 3 :
case 4 :
case 6 :
case 7 :
case 10 :
case 11 :
case 12 :
case 13 :
case 14 :
case 16 :
case 17 :
case 18 :
case 19 :
case 22 :
case 23 :
case 24 :
case 26 :
case 30 :
{
l = kons ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 25 :
{
l = voky ;
naechsterbst ( i , tr , dudstop , b , w ) ;
}
break ;
case 31 :
case 0 :
aus = true ;
break ;
}
}
if ( ! aus )
switch ( zust )
{case 1 :
if ( l == kons )
zust = 2 ;
else zust = 4 ;
break ;
case 2 :
if ( l != kons )
zust = 3 ;
break ;
case 3 :
if ( l == kons )
zust = 6 ;
else if ( l != lalt )
{
zust = 4 ;
letzte = tre ;
dudtr [ letzte ] = neben ;
}
break ;
case 4 :
if ( l == kons )
zust = 6 ;
else zust = 3 ;
break ;
case 6 :
if ( l == kons )
{
zust = 2 ;
letzte = tre ;
if ( ( w [ tre ] == bstc ) && ( w [ tre + 1 ] == bstk ) )
dudtr [ letzte ] = nebenck ;
else dudtr [ letzte ] = neben ;
}
else {
zust = 4 ;
letzte = tre ;
dudtr [ letzte ] = neben ;
}
break ;
}
} while ( ! ( aus ) ) ;
if ( zust == 2 )
dudtr [ letzte ] = keine ;
else if ( zust == 4 )
if ( ( lalt < vokie ) || ( lalt > vokeu ) )
dudtr [ letzte ] = keine ;
while ( ( i > 0 ) && ! dud [ i ] ) i = i - 1 ;
}
}
void ztrennen ( zustand , anfang , spv , ok1 , alletr , tr , dudtr ,
zerlegungen , dud , v , ind , k , dudstop , w , tr1 , laenge )
integer zustand ;
integer anfang ;
sperrvektor spv ;
boolean * ok1 ;
trenn16 alletr ;
trennvektor tr ;
trennvektor dudtr ;
integer * zerlegungen ;
dudt dud ;
varr v ;
intarr ind ;
intarr k ;
sperrvektor dudstop ;
wort w ;
trennvektor tr1 ;
integer laenge ;
{trennen_regmem
boolean gef, nichtok ;
integer schnitt ;
infotype inform ;
integer i ;
boolean okstamm, okvor, okend, okhelp ;
integer tri ;
integer i1, tre ;
boolean ok ;
integer stopptr ;
sperrvektor spvtmp ;
trennvektor trlast ;
memcpy((void *)spvtmp, (void *)spv, sizeof(sperrvektor)) ;
(* ok1 )= false ;
if ( anfang == laenge + 1 )
if ( ( zustand == 2 ) || ( zustand == 4 ) )
{
dud [ anfang - 1 ] = true ;
duden ( tr , w , tr1 , dudtr , dud , dudstop , laenge , ok , (*zerlegungen ))
;
{register integer for_end; i = laenge ; for_end = 1 ; if ( i >= for_end)
do
{
if ( dudtr [ i - 1 ] == haupt3 )
{
dudtr [ i - 1 ] = keine ;
tri = haupt3 ;
}
else tri = dudtr [ i ] ;
if ( (*zerlegungen )== 0 )
tr1 [ i ] = tri ;
else tr1 [ i ] = kombtab [ tr1 [ i ] ][ tri ] ;
trlast [ i ] = tri ;
}
while ( i-- > for_end ) ; }
(* zerlegungen )= (*zerlegungen )+ 1 ;
memcpy((void *)alletr[(*zerlegungen)],(void *)trlast,sizeof(trennvektor));
(* ok1 )= true ;
}
else ;
else {
hashfunk ( w , anfang , laenge , v , ind , k ) ;
schnitt = laenge ;
nichtok = false ;
do {
do { if ( spv [ schnitt ] )
gef = false ;
else {
hashsuch ( v [ schnitt ] , ind [ schnitt ] , k [ schnitt ] , inform
.ausnahme , inform .untrennbar , inform .erste , inform .zweite ,
inform .endung , inform .vorsilbe , inform .stamm , inform .ehervor
, inform .stammallein , gef ) ;
}
if ( gef )
spv [ schnitt ] = true ;
else schnitt = schnitt - 1 ;
} while ( ! ( gef || ( schnitt == anfang - 1 ) ) ) ;
if ( gef )
{
if ( ! inform .ausnahme )
{
if ( inform .endung && ( zustand == 2 ) )
{
okend = false ;
if ( ( w [ anfang ] == bstc ) || ( w [ anfang ] == bsth ) )
{
dud [ anfang - 1 ] = true ;
tr [ anfang - 1 ] = neben ;
}
if ( schnitt < laenge )
if ( ( w [ schnitt + 1 ] == bsts ) && ! spv [ schnitt + 1 ] )
{
spv [ schnitt + 1 ] = true ;
trennen ( 2 , schnitt + 2 , spv , okhelp , alletr , tr , dudtr , (*
zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge ) ;
okend = okhelp ;
}
trennen ( 2 , schnitt + 1 , spv , okhelp , alletr , tr , dudtr , (*
zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge ) ;
okend = okend || okhelp ;
tr [ anfang - 1 ] = keine ;
dud [ anfang - 1 ] = false ;
(* ok1 )= (*ok1 )|| okend ;
}
else okend = false ;
if ( inform .vorsilbe )
{
if ( zustand == 1 )
tr [ anfang - 1 ] = neben ;
else {
dud [ anfang - 1 ] = true ;
if ( zustand == 5 )
tr [ anfang - 1 ] = haupt3 ;
else tr [ anfang - 1 ] = haupt ;
}
dud [ schnitt ] = true ;
trennen ( 1 , schnitt + 1 , spv , okvor , alletr , tr , dudtr , (*
zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge ) ;
tr [ anfang - 1 ] = keine ;
dud [ anfang - 1 ] = false ;
dud [ schnitt ] = false ;
(* ok1 )= (*ok1 )|| okvor ;
}
else okvor = false ;
if ( inform .stamm && ! okvor )
{
if ( ! inform .stammallein )
{
okstamm = false ;
stopptr = 0 ;
if ( zustand == 1 )
tr [ anfang - 1 ] = neben ;
else {
dud [ anfang - 1 ] = true ;
if ( zustand == 5 )
tr [ anfang - 1 ] = haupt3 ;
else tr [ anfang - 1 ] = haupt ;
}
if ( inform .ausnahme )
{
if ( inform .erste != 7 )
{
tre = anfang + inform .erste + 1 ;
tr [ tre ] = neben ;
if ( inform .zweite != 7 )
{
tre = tre + inform .zweite + 2 ;
if ( inform .untrennbar )
{
stopptr = tre ;
dudstop [ stopptr ] = true ;
}
else tr [ tre ] = neben ;
}
else {
if ( inform .untrennbar )
{
tr [ tre ] = keine ;
stopptr = tre ;
dudstop [ tre ] = true ;
}
}
}
else {
stopptr = schnitt - 1 ;
dudstop [ stopptr ] = true ;
}
}
if ( schnitt < laenge )
if ( ( w [ schnitt + 1 ] == bsts ) && ! spv [ schnitt + 1 ] )
{
spv [ schnitt + 1 ] = true ;
trennen ( 2 , schnitt + 2 , spv , okhelp , alletr , tr , dudtr
, (*zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge
) ;
okstamm = okhelp ;
}
if ( ( schnitt >= 2 ) && ( schnitt < laenge ) )
if ( konsonant [ w [ schnitt ] ] && ! konsonant [ w [ schnitt +
1 ] ] && ( w [ schnitt ] == w [ schnitt - 1 ] ) )
{
trennen ( 5 , schnitt , spv , okhelp , alletr , tr , dudtr , (*
zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge )
;
okstamm = okstamm || okhelp ;
}
trennen ( 2 , schnitt + 1 , spv , okhelp , alletr , tr , dudtr , (*
zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge ) ;
okstamm = okstamm || okhelp ;
if ( inform .ausnahme )
{register integer for_end; i1 = anfang - 1 ; for_end = schnitt
; if ( i1 <= for_end) do
{
tr [ i1 ] = keine ;
dud [ i1 ] = false ;
dudstop [ stopptr ] = false ;
}
while ( i1++ < for_end ) ; }
else {
tr [ anfang - 1 ] = keine ;
dud [ anfang - 1 ] = false ;
}
(* ok1 )= (*ok1 )|| okstamm ;
}
else if ( ( anfang == 1 ) && ( schnitt == laenge ) )
{
dud [ anfang - 1 ] = true ;
tr [ anfang - 1 ] = haupt ;
trennen ( 4 , schnitt + 1 , spv , okstamm , alletr , tr , dudtr
, (*zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge )
;
tr [ anfang - 1 ] = keine ;
dud [ anfang - 1 ] = false ;
(* ok1 )= (*ok1 )|| okstamm ;
}
}
}
else {
okstamm = false ;
stopptr = 0 ;
if ( zustand == 1 )
tr [ anfang - 1 ] = neben ;
else {
dud [ anfang - 1 ] = true ;
if ( zustand == 5 )
tr [ anfang - 1 ] = haupt3 ;
else tr [ anfang - 1 ] = haupt ;
}
if ( inform .ausnahme )
{
if ( inform .erste != 7 )
{
tre = anfang + inform .erste + 1 ;
tr [ tre ] = neben ;
if ( inform .zweite != 7 )
{
tre = tre + inform .zweite + 2 ;
if ( inform .untrennbar )
{
stopptr = tre ;
dudstop [ stopptr ] = true ;
}
else tr [ tre ] = neben ;
}
else {
if ( inform .untrennbar )
{
tr [ tre ] = keine ;
stopptr = tre ;
dudstop [ tre ] = true ;
}
}
}
else {
stopptr = schnitt - 1 ;
dudstop [ stopptr ] = true ;
}
}
if ( schnitt < laenge )
if ( ( w [ schnitt + 1 ] == bsts ) && ! spv [ schnitt + 1 ] )
{
spv [ schnitt + 1 ] = true ;
trennen ( 2 , schnitt + 2 , spv , okhelp , alletr , tr , dudtr , (*
zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge ) ;
okstamm = okhelp ;
}
if ( ( schnitt >= 2 ) && ( schnitt < laenge ) )
if ( konsonant [ w [ schnitt ] ] && ! konsonant [ w [ schnitt + 1 ]
] && ( w [ schnitt ] == w [ schnitt - 1 ] ) )
{
trennen ( 5 , schnitt , spv , okhelp , alletr , tr , dudtr , (*
zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge ) ;
okstamm = okstamm || okhelp ;
}
trennen ( 2 , schnitt + 1 , spv , okhelp , alletr , tr , dudtr , (*
zerlegungen ), dud , v , ind , k , dudstop , w , tr1 , laenge ) ;
okstamm = okstamm || okhelp ;
if ( inform .ausnahme )
{register integer for_end; i1 = anfang - 1 ; for_end = schnitt
; if ( i1 <= for_end) do
{
tr [ i1 ] = keine ;
dud [ i1 ] = false ;
dudstop [ stopptr ] = false ;
}
while ( i1++ < for_end ) ; }
else {
tr [ anfang - 1 ] = keine ;
dud [ anfang - 1 ] = false ;
}
(* ok1 )= (*ok1 )|| okstamm ;
}
schnitt = schnitt - 1 ;
nichtok = schnitt == anfang - 1 ;
}
else nichtok = true ;
} while ( ! ( nichtok ) ) ;
}
memcpy((void *)spv, (void *)spvtmp, sizeof(sperrvektor)) ;
}
void zwchar ( c )
halfword c ;
{wchar_regmem
if ( c == 27 )
{
(void) Fputs( stdout , "\"a" ) ;
}
else if ( c == 28 )
{
(void) Fputs( stdout , "\"o" ) ;
}
else if ( c == 29 )
{
(void) Fputs( stdout , "\"u" ) ;
}
else if ( c == 30 )
{
(void) Fputs( stdout , "\"s" ) ;
}
else {
(void) putc( Xchr ( c + 96 ) , stdout );
}
}
void zwwort ( w , l )
wort w ;
integer l ;
{wwort_regmem
integer i ;
{register integer for_end; i = 1 ; for_end = l ; if ( i <= for_end) do
{
wchar ( w [ i ] ) ;
}
while ( i++ < for_end ) ; }
}
void zwritewt ( w , l , tr )
wort w ;
integer l ;
trennvektor tr ;
{writewt_regmem
integer i ;
wchar ( w [ 1 ] ) ;
{register integer for_end; i = 2 ; for_end = l - 1 ; if ( i <= for_end) do
{
if ( ( tr [ i - 1 ] == nebenck ) )
{
(void) putc( 'k' , stdout );
(void) putc( '-' , stdout );
}
else if ( ( tr [ i ] == haupt3 ) )
{
(void) putc( Xchr ( w [ i ] + 96 ) , stdout );
(void) putc( '=' , stdout );
(void) putc( Xchr ( w [ i ] + 96 ) , stdout );
}
else if ( ( tr [ i ] == haupt ) )
{
wchar ( w [ i ] ) ;
(void) putc( '=' , stdout );
}
else if ( ( tr [ i ] == neben ) )
{
wchar ( w [ i ] ) ;
(void) putc( '-' , stdout );
}
else {
wchar ( w [ i ] ) ;
}
}
while ( i++ < for_end ) ; }
wchar ( w [ l ] ) ;
}
void wjob ( )
{wjob_regmem
integer i ;
{register integer for_end; i = strstart [ jobname ] ; for_end = strstart [
jobname + 1 ] - 1 ; if ( i <= for_end) do
{
(void) putc( Xchr ( strpool [ i ] ) , stdout );
}
while ( i++ < for_end ) ; }
}
integer zvergl ( wrt1 , l1 , wrt2 , l2 )
wort wrt1 ;
integer l1 ;
wort wrt2 ;
integer l2 ;
{/* 99 */ register integer Result; vergl_regmem
integer i ;
i = 1 ;
while ( ( i <= l1 ) && ( i <= l2 ) ) {
if ( wrt1 [ i ] < wrt2 [ i ] )
{
Result = -1 ;
goto lab99 ;
}
else if ( wrt1 [ i ] > wrt2 [ i ] )
{
Result = 1 ;
goto lab99 ;
}
i = i + 1 ;
}
if ( l1 < l2 )
{
Result = -1 ;
goto lab99 ;
}
else if ( l1 > l2 )
{
Result = 1 ;
goto lab99 ;
}
else {
Result = 0 ;
goto lab99 ;
}
lab99: ;
return(Result) ;
}
void zgleicheweg ( alletr , zerleg , laenge )
trenn16 alletr ;
integer * zerleg ;
integer laenge ;
{gleicheweg_regmem
integer i, j, k ;
boolean gleich ;
i = 1 ;
do {
j = i + 1 ;
do {
gleich = true ;
k = 1 ;
do {
if ( alletr [ i ] [ k ] == alletr [ j ] [ k ] )
{
k = k + 1 ;
}
else {
gleich = false ;
}
} while ( ! ( ( k > laenge ) || ( gleich == false ) ) ) ;
if ( gleich )
{
{register integer for_end; k = j ; for_end = (*zerleg )- 1 ; if ( k <=
for_end) do
{
memcpy((void *)alletr[k],(void *)alletr[k+1],sizeof(trennvektor));
}
while ( k++ < for_end ) ; }
(* zerleg )= (*zerleg )- 1 ;
}
else {
j = j + 1 ;
}
} while ( ! ( j > (*zerleg )) ) ;
i = i + 1 ;
} while ( ! ( i > (*zerleg )- 1 ) ) ;
}
void zmdbeintragen ( w , l , tr , neu , used , mdb )
wort w ;
integer l ;
trennvektor tr ;
boolean neu ;
boolean used ;
mdbknoten * mdb ;
{mdbeintragen_regmem
integer test ;
if ( (*mdb )== nil )
{
(* mdb )= (mdbknoten) malloc ( sizeof ( mdbschnuller ) ) ;
memcpy((void *)(* mdb )->w12 ,(void *) w ,sizeof(wort));
(* mdb )->l1 = l ;
memcpy((void *)(* mdb )->tr1 ,(void *) tr,sizeof(trennvektor)) ;
(* mdb )->neu1 = neu ;
(* mdb )->used1 = used ;
(* mdb )->del1 = false ;
(* mdb )->li = nil ;
(* mdb )->re = nil ;
if ( isidebug == 1 )
{
(void) putc('\n', stdout );
}
}
else {
test = vergl ( w , l , (*mdb )->w12 , (*mdb )->l1 ) ;
if ( test == -1 )
{
if ( isidebug == 1 )
{
(void) putc( '/' , stdout );
}
mdbeintragen ( w , l , tr , neu , used , (*mdb )->li ) ;
}
else if ( test == 1 )
{
if ( isidebug == 1 )
{
(void) putc( '\\' , stdout );
}
mdbeintragen ( w , l , tr , neu , used , (*mdb )->re ) ;
}
else {
test = vergl ( w , l , (*mdb )->w12 , (*mdb )->l1 ) ;
if ( test == -1 )
{
Result = mdsuchen ( w , l , (*mdb )->li , tr ) ;
}
else if ( test == 1 )
{
Result = mdsuchen ( w , l , (*mdb )->re , tr ) ;
}
else {