home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari FTP
/
ATARI_FTP_0693.zip
/
ATARI_FTP_0693
/
Tex
/
texsrc.arc
/
TEX6.C
< prev
next >
Wrap
C/C++ Source or Header
|
1988-09-14
|
60KB
|
2,134 lines
overlay "tex6"
#define EXTERN extern
#include "texd.h"
alignpeek () { /* 20 */ r_alignpeek
lab20: alignstate = 1000000 ;
do { getxtoken () ;
} while ( ! ( curcmd != 10 ) ) ;
if ( curcmd == 34 )
{
scanleftbrac () ;
newsavelevel ( 7 ) ;
if ( curlist .modefield == - 1 )
normalparagr () ;
}
else if ( curcmd == 2 )
finalign () ;
else if ( ( curcmd == 5 ) && ( curchr == 130 ) )
goto lab20 ;
else {
initrow () ;
initcol () ;
}
}
halfword zfiniteshrink ( p )
halfword p ;
{register halfword Result; r_finiteshrink
halfword q ;
if ( noshrinkerro )
{
noshrinkerro = false ;
{
if ( interaction == 3 )
wakeuptermin () ;
printnl ( 133 ) ;
print ( 771 ) ;
}
{
helpptr = 5 ;
helpline [ 4 ] = 772 ;
helpline [ 3 ] = 773 ;
helpline [ 2 ] = 774 ;
helpline [ 1 ] = 775 ;
helpline [ 0 ] = 776 ;
}
error () ;
}
q = newspec ( p ) ;
mem [(long) q ] .hh.b1 = 0 ;
deletegluere ( p ) ;
Result = q ;
return(Result) ;
}
ztrybreak ( pi , breaktype )
integer pi ;
smallnumber breaktype ;
{/* 10 30 31 22 60 */ r_trybreak
halfword r ;
halfword prevr ;
halfword oldl ;
boolean nobreakyet ;
halfword prevprevr ;
halfword s ;
halfword q ;
halfword v ;
integer t ;
internalfont f ;
halfword l ;
boolean noderstaysac ;
scaled linewidth ;
quarterword fitclass ;
halfword b ;
integer d ;
boolean artificialba ;
halfword savelink ;
scaled shortfall ;
fourquarters qi;
if ( abs ( pi ) >= 10000 )
if ( pi > 0 )
goto lab10 ;
else pi = - 10000 ;
nobreakyet = true ;
prevr = memtop - 7 ;
oldl = 0 ;
curactivewid [ 1 ] = activewidth [ 1 ] ;
curactivewid [ 2 ] = activewidth [ 2 ] ;
curactivewid [ 3 ] = activewidth [ 3 ] ;
curactivewid [ 4 ] = activewidth [ 4 ] ;
curactivewid [ 5 ] = activewidth [ 5 ] ;
curactivewid [ 6 ] = activewidth [ 6 ] ;
while ( true ) {
lab22: r = mem [(long) prevr ] .hh .v.RH ;
if ( mem [(long) r ] .hh.b0 == 2 )
{
curactivewid [ 1 ] = curactivewid [ 1 ] + mem [(long) r + 1 ] .cint ;
curactivewid [ 2 ] = curactivewid [ 2 ] + mem [(long) r + 2 ] .cint ;
curactivewid [ 3 ] = curactivewid [ 3 ] + mem [(long) r + 3 ] .cint ;
curactivewid [ 4 ] = curactivewid [ 4 ] + mem [(long) r + 4 ] .cint ;
curactivewid [ 5 ] = curactivewid [ 5 ] + mem [(long) r + 5 ] .cint ;
curactivewid [ 6 ] = curactivewid [ 6 ] + mem [(long) r + 6 ] .cint ;
prevprevr = prevr ;
prevr = r ;
goto lab22 ;
}
{
l = mem [(long) r + 1 ] .hh .v.LH ;
if ( l > oldl )
{
if ( ( minimumdemer < 1073741823 ) && ( ( oldl != easyline ) || ( r ==
memtop - 7 ) ) )
{
if ( nobreakyet )
{
nobreakyet = false ;
breakwidth [ 1 ] = background [ 1 ] ;
breakwidth [ 2 ] = background [ 2 ] ;
breakwidth [ 3 ] = background [ 3 ] ;
breakwidth [ 4 ] = background [ 4 ] ;
breakwidth [ 5 ] = background [ 5 ] ;
breakwidth [ 6 ] = background [ 6 ] ;
s = curp ;
if ( breaktype > 0 )
if ( curp != 0 )
{
t = mem [(long) curp ] .hh.b1 ;
v = curp ;
s = mem [(long) curp + 1 ] .hh .v.RH ;
while ( t > 0 ) {
decr ( t ) ;
v = mem [(long) v ] .hh .v.RH ;
if ( ( v >= himemmin ) )
{
f = mem [(long) v ] .hh.b0 ;
/* breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase [
f ] + fontinfo [ charbase [ f ] + mem [(long) v ] .hh.b1 ] .qqqq
.b0 ] .cint ;
*/
qi = fontinfo [ charbase [ f ] + mem [(long) v ] .hh.b1 ] .qqqq;
breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase [ f ]
+ qi .b0 ] .cint ;
}
else switch ( mem [(long) v ] .hh.b0 )
{case 6 :
{
f = mem [(long) v + 1 ] .hh.b0 ;
/* breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase
[ f ] + fontinfo [ charbase [ f ] + mem [(long) v + 1 ] .hh.b1 ]
.qqqq .b0 ] .cint ;
*/
qi = fontinfo [ charbase [ f ] + mem [(long) v + 1 ] .hh.b1 ].qqqq;
breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase
[ f ] +qi.b0 ] .cint ;
}
break ;
case 0 :
case 1 :
case 2 :
case 11 :
breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) v + 1 ] .cint ;
break ;
default :
confusion ( 777 ) ;
break ;
}
}
while ( s != 0 ) {
if ( ( s >= himemmin ) )
{
f = mem [(long) s ] .hh.b0 ;
/* breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase [
f ] + fontinfo [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq
.b0 ] .cint ;
*/
qi = fontinfo [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq;
breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase [ f ]
+ qi .b0 ] .cint ;
}
else switch ( mem [(long) s ] .hh.b0 )
{case 6 :
{
f = mem [(long) s + 1 ] .hh.b0 ;
/* breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase
[ f ] + fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ]
.qqqq .b0 ] .cint ;
*/
qi = fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ].qqqq;
breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase
[ f ] +qi.b0 ] .cint ;
}
break ;
case 0 :
case 1 :
case 2 :
breakwidth [ 1 ] = breakwidth [ 1 ] + mem [(long) s + 1 ] .cint ;
break ;
case 11 :
if ( ( t == 0 ) && ( mem [(long) s ] .hh.b1 != 2 ) )
t = - 1 ;
else breakwidth [ 1 ] = breakwidth [ 1 ] + mem [(long) s + 1 ]
.cint ;
break ;
default :
confusion ( 778 ) ;
break ;
}
incr ( t ) ;
s = mem [(long) s ] .hh .v.RH ;
}
breakwidth [ 1 ] = breakwidth [ 1 ] + discwidth ;
if ( t == 0 )
s = mem [(long) v ] .hh .v.RH ;
}
while ( s != 0 ) {
if ( ( s >= himemmin ) )
goto lab30 ;
switch ( mem [(long) s ] .hh.b0 )
{case 10 :
{
v = mem [(long) s + 1 ] .hh .v.LH ;
breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) v + 1 ] .cint ;
breakwidth [ 2 + mem [(long) v ] .hh.b0 ] = breakwidth [ 2 + mem [(long)
v ] .hh.b0 ] - mem [(long) v + 2 ] .cint ;
breakwidth [ 6 ] = breakwidth [ 6 ] - mem [(long) v + 3 ] .cint ;
}
break ;
case 12 :
;
break ;
case 9 :
case 11 :
if ( mem [(long) s ] .hh.b1 == 2 )
goto lab30 ;
else breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) s + 1 ] .cint
;
break ;
default :
goto lab30 ;
break ;
}
s = mem [(long) s ] .hh .v.RH ;
}
lab30: ;
}
if ( mem [(long) prevr ] .hh.b0 == 2 )
{
mem [(long) prevr + 1 ] .cint = mem [(long) prevr + 1 ] .cint - curactivewid [
1 ] + breakwidth [ 1 ] ;
mem [(long) prevr + 2 ] .cint = mem [(long) prevr + 2 ] .cint - curactivewid [
2 ] + breakwidth [ 2 ] ;
mem [(long) prevr + 3 ] .cint = mem [(long) prevr + 3 ] .cint - curactivewid [
3 ] + breakwidth [ 3 ] ;
mem [(long) prevr + 4 ] .cint = mem [(long) prevr + 4 ] .cint - curactivewid [
4 ] + breakwidth [ 4 ] ;
mem [(long) prevr + 5 ] .cint = mem [(long) prevr + 5 ] .cint - curactivewid [
5 ] + breakwidth [ 5 ] ;
mem [(long) prevr + 6 ] .cint = mem [(long) prevr + 6 ] .cint - curactivewid [
6 ] + breakwidth [ 6 ] ;
}
else if ( prevr == memtop - 7 )
{
activewidth [ 1 ] = breakwidth [ 1 ] ;
activewidth [ 2 ] = breakwidth [ 2 ] ;
activewidth [ 3 ] = breakwidth [ 3 ] ;
activewidth [ 4 ] = breakwidth [ 4 ] ;
activewidth [ 5 ] = breakwidth [ 5 ] ;
activewidth [ 6 ] = breakwidth [ 6 ] ;
}
else {
q = getnode ( 7 ) ;
mem [(long) q ] .hh .v.RH = r ;
mem [(long) q ] .hh.b0 = 2 ;
mem [(long) q ] .hh.b1 = 0 ;
mem [(long) q + 1 ] .cint = breakwidth [ 1 ] - curactivewid [ 1 ] ;
mem [(long) q + 2 ] .cint = breakwidth [ 2 ] - curactivewid [ 2 ] ;
mem [(long) q + 3 ] .cint = breakwidth [ 3 ] - curactivewid [ 3 ] ;
mem [(long) q + 4 ] .cint = breakwidth [ 4 ] - curactivewid [ 4 ] ;
mem [(long) q + 5 ] .cint = breakwidth [ 5 ] - curactivewid [ 5 ] ;
mem [(long) q + 6 ] .cint = breakwidth [ 6 ] - curactivewid [ 6 ] ;
mem [(long) prevr ] .hh .v.RH = q ;
prevprevr = prevr ;
prevr = q ;
}
minimumdemer = minimumdemer + abs ( eqtb [ 5283 ] .cint ) ;
for ( fitclass = 0 ; fitclass <= 3 ; fitclass ++ )
{
if ( minimaldemer [ fitclass ] <= minimumdemer )
{
q = getnode ( 2 ) ;
mem [(long) q ] .hh .v.RH = passive ;
passive = q ;
mem [(long) q + 1 ] .hh .v.RH = curp ;
#ifdef STAT
incr ( passnumber ) ;
mem [(long) q ] .hh .v.LH = passnumber ;
#endif /* STAT */
mem [(long) q + 1 ] .hh .v.LH = bestplace [ fitclass ] ;
q = getnode ( 3 ) ;
mem [(long) q + 1 ] .hh .v.RH = passive ;
mem [(long) q + 1 ] .hh .v.LH = bestplline [ fitclass ] + 1 ;
mem [(long) q ] .hh.b1 = fitclass ;
mem [(long) q ] .hh.b0 = breaktype ;
mem [(long) q + 2 ] .cint = minimaldemer [ fitclass ] ;
mem [(long) q ] .hh .v.RH = r ;
mem [(long) prevr ] .hh .v.RH = q ;
prevr = q ;
#ifdef STAT
if ( eqtb [ 5299 ] .cint > 0 )
{
printnl ( 779 ) ;
printint ( mem [(long) passive ] .hh .v.LH ) ;
print ( 780 ) ;
printint ( mem [(long) q + 1 ] .hh .v.LH - 1 ) ;
printchar ( 46 ) ;
printint ( fitclass ) ;
if ( breaktype == 1 )
printchar ( 45 ) ;
print ( 781 ) ;
printint ( mem [(long) q + 2 ] .cint ) ;
print ( 782 ) ;
if ( mem [(long) passive + 1 ] .hh .v.LH == 0 )
printchar ( 48 ) ;
else printint ( mem [(long) mem [(long) passive + 1 ] .hh .v.LH ] .hh
.v.LH ) ;
}
#endif /* STAT */
}
minimaldemer [ fitclass ] = 1073741823 ;
}
minimumdemer = 1073741823 ;
if ( r != memtop - 7 )
{
q = getnode ( 7 ) ;
mem [(long) q ] .hh .v.RH = r ;
mem [(long) q ] .hh.b0 = 2 ;
mem [(long) q ] .hh.b1 = 0 ;
mem [(long) q + 1 ] .cint = curactivewid [ 1 ] - breakwidth [ 1 ] ;
mem [(long) q + 2 ] .cint = curactivewid [ 2 ] - breakwidth [ 2 ] ;
mem [(long) q + 3 ] .cint = curactivewid [ 3 ] - breakwidth [ 3 ] ;
mem [(long) q + 4 ] .cint = curactivewid [ 4 ] - breakwidth [ 4 ] ;
mem [(long) q + 5 ] .cint = curactivewid [ 5 ] - breakwidth [ 5 ] ;
mem [(long) q + 6 ] .cint = curactivewid [ 6 ] - breakwidth [ 6 ] ;
mem [(long) prevr ] .hh .v.RH = q ;
prevprevr = prevr ;
prevr = q ;
}
}
if ( r == memtop - 7 )
goto lab10 ;
if ( l > easyline )
{
linewidth = secondwidth ;
oldl = 65534 ;
}
else {
oldl = l ;
if ( l > lastspeciall )
linewidth = secondwidth ;
else if ( eqtb [ 4056 ] .hh .v.RH == 0 )
linewidth = firstwidth ;
else linewidth = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * l ] .cint ;
}
}
}
{
#ifdef STAT
artificialba = false ;
#endif /* STAT */
shortfall = linewidth - curactivewid [ 1 ] ;
if ( shortfall > 0 )
if ( ( curactivewid [ 3 ] != 0 ) || ( curactivewid [ 4 ] != 0 ) || (
curactivewid [ 5 ] != 0 ) )
{
b = 0 ;
fitclass = 2 ;
}
else {
if ( shortfall > 7230584 )
if ( curactivewid [ 2 ] < 1663497 )
{
b = 10000 ;
fitclass = 0 ;
goto lab31 ;
}
b = badness ( shortfall , curactivewid [ 2 ] ) ;
if ( b > 12 )
if ( b > 99 )
fitclass = 0 ;
else fitclass = 1 ;
else fitclass = 2 ;
lab31: ;
}
else {
if ( - shortfall > curactivewid [ 6 ] )
b = 10001 ;
else b = badness ( - shortfall , curactivewid [ 6 ] ) ;
if ( b > 12 )
fitclass = 3 ;
else fitclass = 2 ;
}
if ( ( b > 10000 ) || ( pi == - 10000 ) )
{
if ( secondpass && ( minimumdemer == 1073741823 ) && ( mem [(long) r ] .hh
.v.RH == memtop - 7 ) && ( prevr == memtop - 7 ) )
{
b = 0 ;
#ifdef STAT
artificialba = true ;
#endif /* STAT */
}
else if ( b > threshold )
goto lab60 ;
noderstaysac = false ;
}
else {
prevr = r ;
if ( b > threshold )
goto lab22 ;
noderstaysac = true ;
}
d = eqtb [ 5269 ] .cint + b ;
d = d * d ;
if ( pi != 0 )
if ( pi > 0 )
d = d + pi * pi ;
else if ( pi > - 10000 )
d = d - pi * pi ;
if ( ( breaktype == 1 ) && ( mem [(long) r ] .hh.b0 == 1 ) )
if ( curp != 0 )
d = d + eqtb [ 5281 ] .cint ;
else d = d + eqtb [ 5282 ] .cint ;
if ( abs ( toint ( fitclass ) - toint ( mem [(long) r ] .hh.b1 ) ) > 1 )
d = d + eqtb [ 5283 ] .cint ;
#ifdef STAT
if ( eqtb [ 5299 ] .cint > 0 )
{
if ( printednode != curp )
{
printnl ( 206 ) ;
if ( curp == 0 )
shortdisplay ( mem [(long) printednode ] .hh .v.RH ) ;
else {
savelink = mem [(long) curp ] .hh .v.RH ;
mem [(long) curp ] .hh .v.RH = 0 ;
printnl ( 206 ) ;
shortdisplay ( mem [(long) printednode ] .hh .v.RH ) ;
mem [(long) curp ] .hh .v.RH = savelink ;
}
printednode = curp ;
}
printnl ( 64 ) ;
if ( curp == 0 )
printesc ( 455 ) ;
else if ( mem [(long) curp ] .hh.b0 != 10 )
{
if ( mem [(long) curp ] .hh.b0 == 12 )
printesc ( 389 ) ;
else if ( mem [(long) curp ] .hh.b0 == 7 )
printesc ( 217 ) ;
else if ( mem [(long) curp ] .hh.b0 == 11 )
printesc ( 208 ) ;
else printesc ( 211 ) ;
}
print ( 783 ) ;
if ( mem [(long) r + 1 ] .hh .v.RH == 0 )
printchar ( 48 ) ;
else printint ( mem [(long) mem [(long) r + 1 ] .hh .v.RH ] .hh .v.LH ) ;
print ( 784 ) ;
if ( artificialba )
printchar ( 42 ) ;
else printint ( b ) ;
print ( 785 ) ;
printint ( pi ) ;
print ( 786 ) ;
printint ( d ) ;
}
#endif /* STAT */
d = d + mem [(long) r + 2 ] .cint ;
if ( d <= minimaldemer [ fitclass ] )
{
minimaldemer [ fitclass ] = d ;
bestplace [ fitclass ] = mem [(long) r + 1 ] .hh .v.RH ;
bestplline [ fitclass ] = l ;
if ( d < minimumdemer )
minimumdemer = d ;
}
if ( noderstaysac )
goto lab22 ;
lab60: mem [(long) prevr ] .hh .v.RH = mem [(long) r ] .hh .v.RH ;
freenode ( r , 3 ) ;
if ( prevr == memtop - 7 )
{
r = mem [(long) memtop - 7 ] .hh .v.RH ;
if ( mem [(long) r ] .hh.b0 == 2 )
{
activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) r + 1 ] .cint ;
activewidth [ 2 ] = activewidth [ 2 ] + mem [(long) r + 2 ] .cint ;
activewidth [ 3 ] = activewidth [ 3 ] + mem [(long) r + 3 ] .cint ;
activewidth [ 4 ] = activewidth [ 4 ] + mem [(long) r + 4 ] .cint ;
activewidth [ 5 ] = activewidth [ 5 ] + mem [(long) r + 5 ] .cint ;
activewidth [ 6 ] = activewidth [ 6 ] + mem [(long) r + 6 ] .cint ;
curactivewid [ 1 ] = activewidth [ 1 ] ;
curactivewid [ 2 ] = activewidth [ 2 ] ;
curactivewid [ 3 ] = activewidth [ 3 ] ;
curactivewid [ 4 ] = activewidth [ 4 ] ;
curactivewid [ 5 ] = activewidth [ 5 ] ;
curactivewid [ 6 ] = activewidth [ 6 ] ;
mem [(long) memtop - 7 ] .hh .v.RH = mem [(long) r ] .hh .v.RH ;
freenode ( r , 7 ) ;
}
}
else if ( mem [(long) prevr ] .hh.b0 == 2 )
{
r = mem [(long) prevr ] .hh .v.RH ;
if ( r == memtop - 7 )
{
curactivewid [ 1 ] = curactivewid [ 1 ] - mem [(long) prevr + 1 ] .cint ;
curactivewid [ 2 ] = curactivewid [ 2 ] - mem [(long) prevr + 2 ] .cint ;
curactivewid [ 3 ] = curactivewid [ 3 ] - mem [(long) prevr + 3 ] .cint ;
curactivewid [ 4 ] = curactivewid [ 4 ] - mem [(long) prevr + 4 ] .cint ;
curactivewid [ 5 ] = curactivewid [ 5 ] - mem [(long) prevr + 5 ] .cint ;
curactivewid [ 6 ] = curactivewid [ 6 ] - mem [(long) prevr + 6 ] .cint ;
mem [(long) prevprevr ] .hh .v.RH = memtop - 7 ;
freenode ( prevr , 7 ) ;
prevr = prevprevr ;
}
else if ( mem [(long) r ] .hh.b0 == 2 )
{
curactivewid [ 1 ] = curactivewid [ 1 ] + mem [(long) r + 1 ] .cint ;
curactivewid [ 2 ] = curactivewid [ 2 ] + mem [(long) r + 2 ] .cint ;
curactivewid [ 3 ] = curactivewid [ 3 ] + mem [(long) r + 3 ] .cint ;
curactivewid [ 4 ] = curactivewid [ 4 ] + mem [(long) r + 4 ] .cint ;
curactivewid [ 5 ] = curactivewid [ 5 ] + mem [(long) r + 5 ] .cint ;
curactivewid [ 6 ] = curactivewid [ 6 ] + mem [(long) r + 6 ] .cint ;
mem [(long) prevr + 1 ] .cint = mem [(long) prevr + 1 ] .cint + mem [(long) r + 1 ]
.cint ;
mem [(long) prevr + 2 ] .cint = mem [(long) prevr + 2 ] .cint + mem [(long) r + 2 ]
.cint ;
mem [(long) prevr + 3 ] .cint = mem [(long) prevr + 3 ] .cint + mem [(long) r + 3 ]
.cint ;
mem [(long) prevr + 4 ] .cint = mem [(long) prevr + 4 ] .cint + mem [(long) r + 4 ]
.cint ;
mem [(long) prevr + 5 ] .cint = mem [(long) prevr + 5 ] .cint + mem [(long) r + 5 ]
.cint ;
mem [(long) prevr + 6 ] .cint = mem [(long) prevr + 6 ] .cint + mem [(long) r + 6 ]
.cint ;
mem [(long) prevr ] .hh .v.RH = mem [(long) r ] .hh .v.RH ;
freenode ( r , 7 ) ;
}
}
}
}
lab10:
#ifdef STAT
if ( curp == printednode )
if ( curp != 0 )
if ( mem [(long) curp ] .hh.b0 == 7 )
{
t = mem [(long) curp ] .hh.b1 ;
while ( t > 0 ) {
decr ( t ) ;
printednode = mem [(long) printednode ] .hh .v.RH ;
}
}
#endif /* STAT */
;
}
zpostlinebrea ( finalwidowpe )
integer finalwidowpe ;
{/* 30 31 */ r_postlinebrea
halfword q, r, s ;
boolean discbreak ;
scaled curwidth ;
scaled curindent ;
quarterword t ;
integer pen ;
halfword curline ;
q = mem [(long) bestbet + 1 ] .hh .v.RH ;
curp = 0 ;
do { r = q ;
q = mem [(long) q + 1 ] .hh .v.LH ;
mem [(long) r + 1 ] .hh .v.LH = curp ;
curp = r ;
} while ( ! ( q == 0 ) ) ;
curline = curlist .pgfield + 1 ;
do { q = mem [(long) curp + 1 ] .hh .v.RH ;
discbreak = false ;
if ( q != 0 )
if ( mem [(long) q ] .hh.b0 == 10 )
{
deletegluere ( mem [(long) q + 1 ] .hh .v.LH ) ;
mem [(long) q + 1 ] .hh .v.LH = eqtb [ 3534 ] .hh .v.RH ;
mem [(long) q ] .hh.b1 = 9 ;
incr ( mem [(long) eqtb [ 3534 ] .hh .v.RH ] .hh .v.RH ) ;
goto lab30 ;
}
else {
if ( mem [(long) q ] .hh.b0 == 7 )
{
t = mem [(long) q ] .hh.b1 ;
if ( t == 0 )
r = mem [(long) q ] .hh .v.RH ;
else {
r = q ;
while ( t > 1 ) {
r = mem [(long) r ] .hh .v.RH ;
decr ( t ) ;
}
s = mem [(long) r ] .hh .v.RH ;
if ( ! ( s >= himemmin ) )
if ( mem [(long) curp + 1 ] .hh .v.LH != 0 )
if ( mem [(long) mem [(long) curp + 1 ] .hh .v.LH + 1 ] .hh .v.RH == s )
s = r ;
r = mem [(long) s ] .hh .v.RH ;
mem [(long) s ] .hh .v.RH = 0 ;
flushnodelis ( mem [(long) q ] .hh .v.RH ) ;
mem [(long) q ] .hh.b1 = 0 ;
}
if ( mem [(long) q + 1 ] .hh .v.RH != 0 )
{
s = mem [(long) q + 1 ] .hh .v.RH ;
while ( mem [(long) s ] .hh .v.RH != 0 ) s = mem [(long) s ] .hh .v.RH ;
mem [(long) s ] .hh .v.RH = r ;
r = mem [(long) q + 1 ] .hh .v.RH ;
mem [(long) q + 1 ] .hh .v.RH = 0 ;
}
if ( mem [(long) q + 1 ] .hh .v.LH != 0 )
{
s = mem [(long) q + 1 ] .hh .v.LH ;
mem [(long) q ] .hh .v.RH = s ;
while ( mem [(long) s ] .hh .v.RH != 0 ) s = mem [(long) s ] .hh .v.RH ;
mem [(long) q + 1 ] .hh .v.LH = 0 ;
q = s ;
}
mem [(long) q ] .hh .v.RH = r ;
discbreak = true ;
}
else if ( ( mem [(long) q ] .hh.b0 == 9 ) || ( mem [(long) q ] .hh.b0 == 11 ) )
mem [(long) q + 1 ] .cint = 0 ;
}
else {
q = memtop - 3 ;
while ( mem [(long) q ] .hh .v.RH != 0 ) q = mem [(long) q ] .hh .v.RH ;
}
r = newparamglue ( 8 ) ;
mem [(long) r ] .hh .v.RH = mem [(long) q ] .hh .v.RH ;
mem [(long) q ] .hh .v.RH = r ;
q = r ;
lab30: ;
r = mem [(long) q ] .hh .v.RH ;
mem [(long) q ] .hh .v.RH = 0 ;
q = mem [(long) memtop - 3 ] .hh .v.RH ;
mem [(long) memtop - 3 ] .hh .v.RH = r ;
if ( eqtb [ 3533 ] .hh .v.RH != 0 )
{
r = newparamglue ( 7 ) ;
mem [(long) r ] .hh .v.RH = q ;
q = r ;
}
if ( curline > lastspeciall )
{
curwidth = secondwidth ;
curindent = secondindent ;
}
else if ( eqtb [ 4056 ] .hh .v.RH == 0 )
{
curwidth = firstwidth ;
curindent = firstindent ;
}
else {
curwidth = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * curline ] .cint ;
curindent = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * curline - 1 ] .cint ;
}
adjusttail = memtop - 5 ;
justbox = hpack ( q , curwidth , 0 ) ;
mem [(long) justbox + 4 ] .cint = curindent ;
appendtovlis ( justbox ) ;
if ( memtop - 5 != adjusttail )
{
mem [(long) curlist .tailfield ] .hh .v.RH = mem [(long) memtop - 5 ] .hh .v.RH ;
curlist .tailfield = adjusttail ;
}
adjusttail = 0 ;
if ( curline + 1 != bestline )
{
pen = eqtb [ 5280 ] .cint ;
if ( curline == curlist .pgfield + 1 )
pen = pen + eqtb [ 5272 ] .cint ;
if ( curline + 2 == bestline )
pen = pen + finalwidowpe ;
if ( discbreak )
pen = pen + eqtb [ 5275 ] .cint ;
if ( pen != 0 )
{
r = newpenalty ( pen ) ;
mem [(long) curlist .tailfield ] .hh .v.RH = r ;
curlist .tailfield = r ;
}
}
incr ( curline ) ;
curp = mem [(long) curp + 1 ] .hh .v.LH ;
if ( curp != 0 )
{
r = memtop - 3 ;
while ( true ) {
q = mem [(long) r ] .hh .v.RH ;
if ( q == mem [(long) curp + 1 ] .hh .v.RH )
goto lab31 ;
if ( ( q >= himemmin ) )
goto lab31 ;
if ( ( mem [(long) q ] .hh.b0 < 9 ) )
goto lab31 ;
if ( mem [(long) q ] .hh.b1 == 2 )
if ( mem [(long) q ] .hh.b0 == 11 )
goto lab31 ;
r = q ;
}
lab31: if ( r != memtop - 3 )
{
mem [(long) r ] .hh .v.RH = 0 ;
flushnodelis ( mem [(long) memtop - 3 ] .hh .v.RH ) ;
mem [(long) memtop - 3 ] .hh .v.RH = q ;
}
}
} while ( ! ( curp == 0 ) ) ;
if ( ( curline != bestline ) || ( mem [(long) memtop - 3 ] .hh .v.RH != 0 ) )
confusion ( 791 ) ;
curlist .pgfield = bestline - 1 ;
}
smallnumber zreconstitute ( j , n )
smallnumber j , n ;
{/* 22 30 */ register smallnumber Result; r_reconstitute
halfword p ;
halfword s ;
fourquarters q ;
quarterword c ;
quarterword d ;
scaled w ;
integer r ;
hyphenpassed = 0 ;
s = memtop - 4 ;
w = 0 ;
d = hu [ j ] ;
c = d ;
while ( true ) {
lab22: p = getavail () ;
mem [(long) p ] .hh.b0 = hf ;
mem [(long) p ] .hh.b1 = c ;
mem [(long) s ] .hh .v.RH = p ;
if ( j == n )
goto lab30 ;
q = fontinfo [ charbase [ hf ] + d ] .qqqq ;
if ( ( ( q .b2 ) % 4 ) != 1 )
goto lab30 ;
r = ligkernbase [ hf ] + q .b3 ;
c = hu [ j + 1 ] ;
while ( true ) {
q = fontinfo [ r ] .qqqq ;
if ( q .b1 == c )
{
if ( odd ( hyf [ j ] ) && ( hyphenpassed == 0 ) )
hyphenpassed = j ;
if ( q .b2 < 128 )
{
d = q .b3 ;
incr ( j ) ;
s = p ;
goto lab22 ;
}
else {
w = fontinfo [ kernbase [ hf ] + q .b3 ] .cint ;
goto lab30 ;
}
}
else if ( q .b0 < 128 )
incr ( r ) ;
else goto lab30 ;
}
}
lab30: ;
if ( s != memtop - 4 )
{
p = newligature ( hf , d , mem [(long) memtop - 4 ] .hh .v.RH ) ;
mem [(long) memtop - 4 ] .hh .v.RH = p ;
}
if ( w != 0 )
mem [(long) mem [(long) memtop - 4 ] .hh .v.RH ] .hh .v.RH = newkern ( w ) ;
Result = j ;
return(Result) ;
}
hyphenate () { /* 30 40 45 41 10 */ r_hyphenate
quarterword i, j, l ;
halfword q, r, s ;
halfword majortail, minortail ;
ASCIIcode c ;
halfword hyfnode ;
triepointer z ;
quarterword v ;
hyphpointer h ;
strnumber k ;
poolpointer u ;
for ( j = 0 ; j <= hn ; j ++ )
hyf [ j ] = 0 ;
h = hc [ 1 ] ;
for ( j = 2 ; j <= hn ; j ++ )
h = ( h + h + hc [ j ] ) % 307 ;
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 [(long) s ] .hh .v.LH ] = 1 ;
s = mem [(long) s ] .hh .v.RH ;
}
goto lab40 ;
}
lab30: ;
if ( h > 0 )
decr ( h ) ;
else h = 307 ;
}
lab45: ;
hc [ 0 ] = 127 ;
hc [ hn + 1 ] = 127 ;
hc [ hn + 2 ] = 256 ;
for ( j = 0 ; j <= hn - 2 ; j ++ )
{
z = hc [ j ] ;
l = j ;
while ( hc [ l ] == trie [ z ] .b1 ) {
if ( trie [ z ] .b0 != 0 )
{
v = trie [ z ] .b0 ;
do { i = l - hyfdistance [ v ] ;
if ( hyfnum [ v ] > hyf [ i ] )
hyf [ i ] = hyfnum [ v ] ;
v = hyfnext [ v ] ;
} while ( ! ( v == 0 ) ) ;
}
incr ( l ) ;
z = trie [ z ] .v.RH + hc [ l ] ;
}
}
lab40: hyf [ 1 ] = 0 ;
hyf [ hn - 2 ] = 0 ;
hyf [ hn - 1 ] = 0 ;
hyf [ hn ] = 0 ;
for ( j = 2 ; j <= hn - 3 ; j ++ )
if ( odd ( hyf [ j ] ) )
goto lab41 ;
return ;
lab41: ;
q = mem [(long) hb ] .hh .v.RH ;
mem [(long) hb ] .hh .v.RH = 0 ;
s = curp ;
while ( mem [(long) s ] .hh .v.RH != ha ) s = mem [(long) s ] .hh .v.RH ;
mem [(long) s ] .hh .v.RH = 0 ;
flushnodelis ( ha ) ;
j = 0 ;
do { l = j ;
j = reconstitute ( j + 1 , hn ) ;
if ( hyphenpassed != 0 )
{
r = getnode ( 2 ) ;
mem [(long) s ] .hh .v.RH = r ;
mem [(long) r ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
mem [(long) r ] .hh.b0 = 7 ;
majortail = mem [(long) memtop - 4 ] .hh .v.RH ;
if ( mem [(long) majortail ] .hh .v.RH != 0 )
majortail = mem [(long) majortail ] .hh .v.RH ;
i = hyphenpassed ;
minortail = 0 ;
hyfnode = newcharacter ( hf , hyfchar ) ;
if ( hyfnode != 0 )
{
incr ( i ) ;
c = hu [ i ] ;
hu [ i ] = hyfchar ;
}
do { l = reconstitute ( l + 1 , i ) ;
if ( minortail == 0 )
mem [(long) r + 1 ] .hh .v.LH = mem [(long) memtop - 4 ] .hh .v.RH ;
else mem [(long) minortail ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
minortail = mem [(long) memtop - 4 ] .hh .v.RH ;
if ( mem [(long) minortail ] .hh .v.RH != 0 )
minortail = mem [(long) minortail ] .hh .v.RH ;
} while ( ! ( l == i ) ) ;
if ( hyfnode != 0 )
{
hu [ i ] = c ;
{
mem [(long) hyfnode ] .hh .v.RH = avail ;
avail = hyfnode ;
#ifdef STAT
decr ( dynused ) ;
#endif /* STAT */
}
decr ( i ) ;
l = i ;
}
hyf [ i ] = 0 ;
minortail = 0 ;
mem [(long) r + 1 ] .hh .v.RH = 0 ;
while ( l < j ) {
do { l = reconstitute ( l + 1 , hn ) ;
if ( minortail == 0 )
mem [(long) r + 1 ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
else mem [(long) minortail ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
minortail = mem [(long) memtop - 4 ] .hh .v.RH ;
if ( mem [(long) minortail ] .hh .v.RH != 0 )
{
hyf [ l ] = 0 ;
minortail = mem [(long) minortail ] .hh .v.RH ;
}
} while ( ! ( l >= j ) ) ;
while ( l > j ) {
j = reconstitute ( j + 1 , hn ) ;
mem [(long) majortail ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
majortail = mem [(long) memtop - 4 ] .hh .v.RH ;
if ( mem [(long) majortail ] .hh .v.RH != 0 )
{
hyf [ j ] = 0 ;
majortail = mem [(long) majortail ] .hh .v.RH ;
}
}
}
i = 0 ;
s = r ;
while ( mem [(long) s ] .hh .v.RH != 0 ) {
incr ( i ) ;
s = mem [(long) s ] .hh .v.RH ;
}
mem [(long) r ] .hh.b1 = i ;
}
else {
mem [(long) s ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
s = mem [(long) s ] .hh .v.RH ;
if ( mem [(long) s ] .hh .v.RH != 0 )
s = mem [(long) s ] .hh .v.RH ;
}
if ( odd ( hyf [ j ] ) )
{
r = newdisc () ;
mem [(long) r + 1 ] .hh .v.LH = newcharacter ( hf , hyfchar ) ;
mem [(long) s ] .hh .v.RH = r ;
s = r ;
}
} while ( ! ( j == hn ) ) ;
mem [(long) s ] .hh .v.RH = q ;
}
zlinebreak ( finalwidowpe )
integer finalwidowpe ;
{/* 30 31 32 33 34 */ r_linebreak
boolean autobreaking ;
halfword prevp ;
halfword q, r, s ;
internalfont f ;
smallnumber j ;
quarterword c ;
fourquarters qi;
packbeginlin = curlist .mlfield ;
mem [(long) memtop - 3 ] .hh .v.RH = mem [(long) curlist .headfield ] .hh .v.RH ;
if ( ( curlist .tailfield >= himemmin ) )
{
mem [(long) curlist .tailfield ] .hh .v.RH = newpenalty ( 10000 ) ;
curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ;
}
else if ( mem [(long) curlist .tailfield ] .hh.b0 != 10 )
{
mem [(long) curlist .tailfield ] .hh .v.RH = newpenalty ( 10000 ) ;
curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ;
}
else {
mem [(long) curlist .tailfield ] .hh.b0 = 12 ;
deletegluere ( mem [(long) curlist .tailfield + 1 ] .hh .v.LH ) ;
flushnodelis ( mem [(long) curlist .tailfield + 1 ] .hh .v.RH ) ;
mem [(long) curlist .tailfield + 1 ] .cint = 10000 ;
}
mem [(long) curlist .tailfield ] .hh .v.RH = newparamglue ( 14 ) ;
popnest () ;
noshrinkerro = true ;
if ( ( mem [(long) eqtb [ 3533 ] .hh .v.RH ] .hh.b1 != 0 ) && ( mem [(long) eqtb [ 3533
] .hh .v.RH + 3 ] .cint != 0 ) )
{
eqtb [ 3533 ] .hh .v.RH = finiteshrink ( eqtb [ 3533 ] .hh .v.RH ) ;
}
if ( ( mem [(long) eqtb [ 3534 ] .hh .v.RH ] .hh.b1 != 0 ) && ( mem [(long) eqtb [ 3534
] .hh .v.RH + 3 ] .cint != 0 ) )
{
eqtb [ 3534 ] .hh .v.RH = finiteshrink ( eqtb [ 3534 ] .hh .v.RH ) ;
}
q = eqtb [ 3533 ] .hh .v.RH ;
r = eqtb [ 3534 ] .hh .v.RH ;
background [ 1 ] = mem [(long) q + 1 ] .cint + mem [(long) r + 1 ] .cint ;
background [ 2 ] = 0 ;
background [ 3 ] = 0 ;
background [ 4 ] = 0 ;
background [ 5 ] = 0 ;
background [ 2 + mem [(long) q ] .hh.b0 ] = mem [(long) q + 2 ] .cint ;
background [ 2 + mem [(long) r ] .hh.b0 ] = background [ 2 + mem [(long) r ] .hh.b0 ] +
mem [(long) r + 2 ] .cint ;
background [ 6 ] = mem [(long) q + 3 ] .cint + mem [(long) r + 3 ] .cint ;
minimumdemer = 1073741823 ;
minimaldemer [ 3 ] = 1073741823 ;
minimaldemer [ 2 ] = 1073741823 ;
minimaldemer [ 1 ] = 1073741823 ;
minimaldemer [ 0 ] = 1073741823 ;
if ( eqtb [ 4056 ] .hh .v.RH == 0 )
if ( eqtb [ 5718 ] .cint == 0 )
{
lastspeciall = 0 ;
secondwidth = eqtb [ 5704 ] .cint ;
secondindent = 0 ;
}
else {
lastspeciall = abs ( eqtb [ 5308 ] .cint ) ;
if ( eqtb [ 5308 ] .cint < 0 )
{
firstwidth = eqtb [ 5704 ] .cint - abs ( eqtb [ 5718 ] .cint ) ;
if ( eqtb [ 5718 ] .cint >= 0 )
firstindent = eqtb [ 5718 ] .cint ;
else firstindent = 0 ;
secondwidth = eqtb [ 5704 ] .cint ;
secondindent = 0 ;
}
else {
firstwidth = eqtb [ 5704 ] .cint ;
firstindent = 0 ;
secondwidth = eqtb [ 5704 ] .cint - abs ( eqtb [ 5718 ] .cint ) ;
if ( eqtb [ 5718 ] .cint >= 0 )
secondindent = eqtb [ 5718 ] .cint ;
else secondindent = 0 ;
}
}
else {
lastspeciall = mem [(long) eqtb [ 4056 ] .hh .v.RH ] .hh .v.LH - 1 ;
secondwidth = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * ( lastspeciall + 1 ) ]
.cint ;
secondindent = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * lastspeciall + 1 ]
.cint ;
}
if ( eqtb [ 5286 ] .cint == 0 )
easyline = lastspeciall ;
else easyline = 65535L ;
threshold = eqtb [ 5267 ] .cint ;
if ( threshold >= 0 )
{
#ifdef STAT
if ( eqtb [ 5299 ] .cint > 0 )
{
begindiagnos () ;
printnl ( 787 ) ;
}
#endif /* STAT */
secondpass = false ;
}
else {
threshold = eqtb [ 5268 ] .cint ;
secondpass = true ;
#ifdef STAT
if ( eqtb [ 5299 ] .cint > 0 )
begindiagnos () ;
#endif /* STAT */
}
while ( true ) {
q = getnode ( 3 ) ;
mem [(long) q ] .hh.b0 = 0 ;
mem [(long) q ] .hh.b1 = 2 ;
mem [(long) q ] .hh .v.RH = memtop - 7 ;
mem [(long) q + 1 ] .hh .v.RH = 0 ;
mem [(long) q + 1 ] .hh .v.LH = curlist .pgfield + 1 ;
mem [(long) q + 2 ] .cint = 0 ;
mem [(long) memtop - 7 ] .hh .v.RH = q ;
activewidth [ 1 ] = background [ 1 ] ;
activewidth [ 2 ] = background [ 2 ] ;
activewidth [ 3 ] = background [ 3 ] ;
activewidth [ 4 ] = background [ 4 ] ;
activewidth [ 5 ] = background [ 5 ] ;
activewidth [ 6 ] = background [ 6 ] ;
passive = 0 ;
printednode = memtop - 3 ;
passnumber = 0 ;
fontinshortd = 0 ;
curp = mem [(long) memtop - 3 ] .hh .v.RH ;
autobreaking = true ;
prevp = curp ;
while ( ( curp != 0 ) && ( mem [(long) memtop - 7 ] .hh .v.RH != memtop - 7 ) )
{
if ( ( curp >= himemmin ) )
{
prevp = curp ;
do { f = mem [(long) curp ] .hh.b0 ;
/* activewidth [ 1 ] = activewidth [ 1 ] + fontinfo [ widthbase [ f ] +
fontinfo [ charbase [ f ] + mem [(long) curp ] .hh.b1 ] .qqqq .b0 ] .cint
*/
qi = fontinfo [ charbase [ f ] + mem [(long) curp ] .hh.b1 ] .qqqq ;
activewidth [ 1 ] = activewidth [ 1 ] + fontinfo [ widthbase [ f ] +
qi .b0 ] .cint
;
curp = mem [(long) curp ] .hh .v.RH ;
} while ( ! ( ! ( curp >= himemmin ) ) ) ;
}
switch ( mem [(long) curp ] .hh.b0 )
{case 0 :
case 1 :
case 2 :
activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) curp + 1 ] .cint ;
break ;
case 8 :
break ;
case 10 :
{
if ( autobreaking )
{
if ( ( prevp >= himemmin ) )
trybreak ( 0 , 0 ) ;
else if ( ( mem [(long) prevp ] .hh.b0 < 9 ) )
trybreak ( 0 , 0 ) ;
}
{
if ( ( mem [(long) mem [(long) curp + 1 ] .hh .v.LH ] .hh.b1 != 0 ) && ( mem [(long)
mem [(long) curp + 1 ] .hh .v.LH + 3 ] .cint != 0 ) )
{
mem [(long) curp + 1 ] .hh .v.LH = finiteshrink ( mem [(long) curp + 1 ] .hh
.v.LH ) ;
}
q = mem [(long) curp + 1 ] .hh .v.LH ;
activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) q + 1 ] .cint ;
activewidth [ 2 + mem [(long) q ] .hh.b0 ] = activewidth [ 2 + mem [(long) q ]
.hh.b0 ] + mem [(long) q + 2 ] .cint ;
activewidth [ 6 ] = activewidth [ 6 ] + mem [(long) q + 3 ] .cint ;
}
if ( secondpass && autobreaking )
{
s = mem [(long) curp ] .hh .v.RH ;
if ( s != 0 )
{
while ( true ) {
if ( ( s >= himemmin ) )
{
c = mem [(long) s ] .hh.b1 ;
hf = mem [(long) s ] .hh.b0 ;
}
else if ( mem [(long) s ] .hh.b0 == 6 )
{
q = mem [(long) s + 1 ] .hh .v.RH ;
c = mem [(long) q ] .hh.b1 ;
hf = mem [(long) q ] .hh.b0 ;
}
else if ( ( mem [(long) s ] .hh.b0 == 11 ) && ( mem [(long) s ] .hh.b1 ==
0 ) )
c = 128 ;
else if ( mem [(long) s ] .hh.b0 == 8 )
c = 128 ;
else goto lab31 ;
if ( c < 128 )
if ( eqtb [ 4755 + c ] .hh .v.RH != 0 )
if ( ( eqtb [ 4755 + c ] .hh .v.RH == c ) || ( eqtb [ 5305 ]
.cint > 0 ) )
goto lab32 ;
else goto lab31 ;
s = mem [(long) s ] .hh .v.RH ;
}
lab32: hyfchar = hyphenchar [ hf ] ;
if ( hyfchar < 0 )
goto lab31 ;
if ( hyfchar > 255 )
goto lab31 ;
ha = s ;
hn = 0 ;
while ( true ) {
if ( ( s >= himemmin ) )
{
if ( mem [(long) s ] .hh.b0 != hf )
goto lab33 ;
c = mem [(long) s ] .hh.b1 ;
if ( c >= 128 )
goto lab33 ;
if ( ( eqtb [ 4755 + c ] .hh .v.RH == 0 ) || ( hn == 63 ) )
goto lab33 ;
hb = s ;
incr ( hn ) ;
hu [ hn ] = c ;
hc [ hn ] = eqtb [ 4755 + c ] .hh .v.RH - 1 ;
}
else if ( mem [(long) s ] .hh.b0 == 6 )
{
j = hn ;
q = mem [(long) s + 1 ] .hh .v.RH ;
if ( mem [(long) q ] .hh.b0 != hf )
goto lab33 ;
do { c = mem [(long) q ] .hh.b1 ;
if ( c >= 128 )
goto lab33 ;
if ( ( eqtb [ 4755 + c ] .hh .v.RH == 0 ) || ( j == 63 ) )
goto lab33 ;
incr ( j ) ;
hu [ j ] = c ;
hc [ j ] = eqtb [ 4755 + c ] .hh .v.RH - 1 ;
q = mem [(long) q ] .hh .v.RH ;
} while ( ! ( q == 0 ) ) ;
hb = s ;
hn = j ;
}
else if ( ( mem [(long) s ] .hh.b0 != 11 ) || ( mem [(long) s ] .hh.b1 !=
0 ) )
goto lab33 ;
s = mem [(long) s ] .hh .v.RH ;
}
lab33: ;
if ( hn < 5 )
goto lab31 ;
while ( true ) {
if ( ! ( ( s >= himemmin ) ) )
switch ( mem [(long) s ] .hh.b0 )
{case 6 :
;
break ;
case 11 :
if ( mem [(long) s ] .hh.b1 != 0 )
goto lab34 ;
break ;
case 8 :
case 10 :
case 12 :
case 3 :
case 5 :
case 4 :
goto lab34 ;
break ;
default :
goto lab31 ;
break ;
}
s = mem [(long) s ] .hh .v.RH ;
}
lab34: ;
hyphenate () ;
}
lab31: ;
}
}
break ;
case 11 :
{
if ( ! ( mem [(long) curp ] .hh .v.RH >= himemmin ) && autobreaking )
if ( mem [(long) mem [(long) curp ] .hh .v.RH ] .hh.b0 == 10 )
trybreak ( 0 , 0 ) ;
activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) curp + 1 ] .cint ;
}
break ;
case 6 :
{
f = mem [(long) curp + 1 ] .hh.b0 ;
/* activewidth [ 1 ] = activewidth [ 1 ] + fontinfo [ widthbase [ f ] +
fontinfo [ charbase [ f ] + mem [(long) curp + 1 ] .hh.b1 ] .qqqq .b0 ]
.cint ;
*/
qi = fontinfo [ charbase [ f ] + mem [(long) curp + 1 ] .hh.b1 ] .qqqq;
activewidth [ 1 ] = activewidth [ 1 ] + fontinfo [ widthbase [ f ] +
qi.b0 ] .cint ;
}
break ;
case 7 :
{
s = mem [(long) curp + 1 ] .hh .v.LH ;
discwidth = 0 ;
if ( s == 0 )
trybreak ( eqtb [ 5271 ] .cint , 1 ) ;
else {
do { if ( ( s >= himemmin ) )
{
f = mem [(long) s ] .hh.b0 ;
/* discwidth = discwidth + fontinfo [ widthbase [ f ] + fontinfo
[ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq .b0 ] .cint ;
*/
qi = fontinfo [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq;
discwidth = discwidth + fontinfo [ widthbase [ f ] + qi .b0 ] .cint ;
}
else switch ( mem [(long) s ] .hh.b0 )
{case 6 :
{
f = mem [(long) s + 1 ] .hh.b0 ;
/* discwidth = discwidth + fontinfo [ widthbase [ f ] +
fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ] .qqqq .b0
] .cint ;
*/
qi = fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ] .qqqq;
discwidth = discwidth + fontinfo [ widthbase [ f ] +
qi .b0 ] .cint ;
}
break ;
case 0 :
case 1 :
case 2 :
case 11 :
discwidth = discwidth + mem [(long) s + 1 ] .cint ;
break ;
default :
confusion ( 790 ) ;
break ;
}
s = mem [(long) s ] .hh .v.RH ;
} while ( ! ( s == 0 ) ) ;
activewidth [ 1 ] = activewidth [ 1 ] + discwidth ;
trybreak ( eqtb [ 5270 ] .cint , 1 ) ;
activewidth [ 1 ] = activewidth [ 1 ] - discwidth ;
}
}
break ;
case 9 :
{
autobreaking = ( mem [(long) curp ] .hh.b1 == 1 ) ;
{
if ( ! ( mem [(long) curp ] .hh .v.RH >= himemmin ) && autobreaking )
if ( mem [(long) mem [(long) curp ] .hh .v.RH ] .hh.b0 == 10 )
trybreak ( 0 , 0 ) ;
activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) curp + 1 ] .cint ;
}
}
break ;
case 12 :
trybreak ( mem [(long) curp + 1 ] .cint , 0 ) ;
break ;
case 4 :
case 3 :
case 5 :
break ;
default :
confusion ( 789 ) ;
break ;
}
prevp = curp ;
curp = mem [(long) curp ] .hh .v.RH ;
}
if ( curp == 0 )
{
trybreak ( - 10000 , 1 ) ;
if ( mem [(long) memtop - 7 ] .hh .v.RH != memtop - 7 )
{
r = mem [(long) memtop - 7 ] .hh .v.RH ;
fewestdemeri = 1073741823 ;
do { if ( mem [(long) r ] .hh.b0 != 2 )
if ( mem [(long) r + 2 ] .cint < fewestdemeri )
{
fewestdemeri = mem [(long) r + 2 ] .cint ;
bestbet = r ;
}
r = mem [(long) r ] .hh .v.RH ;
} while ( ! ( r == memtop - 7 ) ) ;
bestline = mem [(long) bestbet + 1 ] .hh .v.LH ;
if ( eqtb [ 5286 ] .cint == 0 )
goto lab30 ;
{
r = mem [(long) memtop - 7 ] .hh .v.RH ;
actualloosen = 0 ;
do { if ( mem [(long) r ] .hh.b0 != 2 )
{
linediff = (long)mem [(long) r + 1 ] .hh .v.LH -(long)bestline ;
if ( ( ( linediff < actualloosen ) && ( eqtb [ 5286 ] .cint <=
linediff ) ) || ( ( linediff > actualloosen ) && ( eqtb [ 5286 ]
.cint >= linediff ) ) )
{
bestbet = r ;
actualloosen = linediff ;
fewestdemeri = mem [(long) r + 2 ] .cint ;
}
else if ( ( linediff == actualloosen ) && ( mem [(long) r + 2 ] .cint
< fewestdemeri ) )
{
bestbet = r ;
fewestdemeri = mem [(long) r + 2 ] .cint ;
}
}
r = mem [(long) r ] .hh .v.RH ;
} while ( ! ( r == memtop - 7 ) ) ;
bestline = mem [(long) bestbet + 1 ] .hh .v.LH ;
}
if ( ( actualloosen == eqtb [ 5286 ] .cint ) || secondpass )
goto lab30 ;
}
}
q = mem [(long) memtop - 7 ] .hh .v.RH ;
while ( q != memtop - 7 ) {
curp = mem [(long) q ] .hh .v.RH ;
if ( mem [(long) q ] .hh.b0 == 2 )
freenode ( q , 7 ) ;
else freenode ( q , 3 ) ;
q = curp ;
}
q = passive ;
while ( q != 0 ) {
curp = mem [(long) q ] .hh .v.RH ;
freenode ( q , 2 ) ;
q = curp ;
}
#ifdef STAT
if ( eqtb [ 5299 ] .cint > 0 )
printnl ( 788 ) ;
#endif /* STAT */
threshold = eqtb [ 5268 ] .cint ;
secondpass = true ;
}
lab30:
#ifdef STAT
if ( eqtb [ 5299 ] .cint > 0 )
enddiagnosti ( true ) ;
#endif /* STAT */
postlinebrea ( finalwidowpe ) ;
q = mem [(long) memtop - 7 ] .hh .v.RH ;
while ( q != memtop - 7 ) {
curp = mem [(long) q ] .hh .v.RH ;
if ( mem [(long) q ] .hh.b0 == 2 )
freenode ( q , 7 ) ;
else freenode ( q , 3 ) ;
q = curp ;
}
q = passive ;
while ( q != 0 ) {
curp = mem [(long) q ] .hh .v.RH ;
freenode ( q , 2 ) ;
q = curp ;
}
packbeginlin = 0 ;
}
newhyphexcep () { /* 21 10 40 45 30 */ r_newhyphexcep
smallnumber n ;
smallnumber j ;
hyphpointer h ;
strnumber k ;
halfword p ;
halfword q ;
strnumber s, t ;
poolpointer u, v ;
scanleftbrac () ;
n = 0 ;
p = 0 ;
while ( true ) {
getxtoken () ;
lab21: switch ( curcmd )
{case 11 :
case 12 :
case 67 :
if ( curchr == 45 )
{
if ( n > 1 )
{
q = getavail () ;
mem [(long) q ] .hh .v.RH = p ;
mem [(long) q ] .hh .v.LH = n ;
p = q ;
}
}
else {
if ( ( curchr > 127 ) || ( eqtb [ 4755 + curchr ] .hh .v.RH == 0 ) )
{
{
if ( interaction == 3 )
wakeuptermin () ;
printnl ( 133 ) ;
print ( 797 ) ;
}
{
helpptr = 2 ;
helpline [ 1 ] = 798 ;
helpline [ 0 ] = 799 ;
}
error () ;
}
else if ( n < 63 )
{
incr ( n ) ;
hc [ n ] = eqtb [ 4755 + curchr ] .hh .v.RH - 1 ;
}
}
break ;
case 16 :
{
scancharnum () ;
curchr = curval ;
curcmd = 67 ;
goto lab21 ;
}
break ;
case 10 :
case 2 :
{
if ( n > 4 )
{
{
if ( poolptr + n > poolsize )
overflow ( 128 , poolsize - initpoolptr ) ;
}
h = 0 ;
for ( j = 1 ; j <= n ; j ++ )
{
h = ( h + h + hc [ j ] ) % 307 ;
{
strpool [ poolptr ] = hc [ j ] ;
incr ( poolptr ) ;
}
}
s = makestring () ;
while ( true ) {
if ( p == 0 )
goto lab30 ;
if ( mem [(long) p ] .hh .v.LH < n - 2 )
goto lab30 ;
q = mem [(long) p ] .hh .v.RH ;
{
mem [(long) p ] .hh .v.RH = avail ;
avail = p ;
#ifdef STAT
decr ( dynused ) ;
#endif /* STAT */
}
p = q ;
}
lab30: if ( hyphcount == 307 )
overflow ( 800 , 307 ) ;
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 = 307 ;
}
hyphword [ h ] = s ;
hyphlist [ h ] = p ;
}
if ( curcmd == 2 )
return ;
n = 0 ;
p = 0 ;
}
break ;
default :
{
{
if ( interaction == 3 )
wakeuptermin () ;
printnl ( 133 ) ;
print ( 536 ) ;
}
printesc ( 793 ) ;
print ( 794 ) ;
{
helpptr = 2 ;
helpline [ 1 ] = 795 ;
helpline [ 0 ] = 796 ;
}
error () ;
}
break ;
}
}
}
#ifdef INITEX
quarterword znewtrieop ( d , n , v )
smallnumber d , n ;
quarterword v ;
{/* 10 */ register quarterword Result; r_newtrieop
halfword h ;
quarterword u ;
h = abs ( toint ( n ) + 313 * toint ( d ) + 361 * toint ( v ) ) % 510 ;
while ( true ) {
u = trieophash [ h ] ;
if ( u == 0 )
{
if ( trieopptr == 255 )
{
Result = 0 ;
return(Result) ;
}
incr ( trieopptr ) ;
hyfdistance [ trieopptr ] = d ;
hyfnum [ trieopptr ] = n ;
hyfnext [ trieopptr ] = v ;
trieophash [ h ] = trieopptr ;
Result = trieopptr ;
return(Result) ;
}
if ( ( hyfdistance [ u ] == d ) && ( hyfnum [ u ] == n ) && ( hyfnext [ u
] == v ) )
{
Result = u ;
return(Result) ;
}
if ( h > 0 )
decr ( h ) ;
else h = 510 ;
}
return(Result) ;
}
triepointer ztrienode ( p )
triepointer p ;
{/* 10 */ register triepointer Result; r_trienode
triepointer h ;
triepointer q ;
h = abs ( toint ( triec [ p ] ) + 1009 * toint ( trieo [ p ] ) + 2718 *
toint ( triel [ p ] ) + 3142 * toint ( trier [ p ] ) ) % triesize ;
while ( true ) {
q = triehash [ h ] ;
if ( q == 0 )
{
triehash [ h ] = p ;
Result = p ;
return(Result) ;
}
if ( ( triec [ q ] == triec [ p ] ) && ( trieo [ q ] == trieo [ p ] ) && (
triel [ q ] == triel [ p ] ) && ( trier [ q ] == trier [ p ] ) )
{
Result = q ;
return(Result) ;
}
if ( h > 0 )
decr ( h ) ;
else h = triesize ;
}
return(Result) ;
}
triepointer zcompresstrie ( p )
triepointer p ;
{register triepointer Result; r_compresstrie
if ( p == 0 )
Result = 0 ;
else {
triel [ p ] = compresstrie ( triel [ p ] ) ;
trier [ p ] = compresstrie ( trier [ p ] ) ;
Result = trienode ( p ) ;
}
return(Result) ;
}
initpatternm () { r_initpatternm
halfword h ;
triepointer p ;
for ( h = 0 ; h <= 510 ; h ++ )
trieophash [ h ] = 0 ;
trieopptr = 0 ;
triel [ 0 ] = 0 ;
triec [ 0 ] = 0 ;
trieptr = 0 ;
for ( p = 0 ; p <= triesize ; p ++ )
triehash [ p ] = 0 ;
}
inittriememo () { r_inittriememo
triepointer p ;
for ( p = 0 ; p <= trieptr ; p ++ )
triehash [ p ] = 0 ;
triemax = 128 ;
triemin = 128 ;
trie [ 0 ] .v.RH = 1 ;
trietaken [ 0 ] = false ;
for ( p = 1 ; p <= 128 ; p ++ )
{
trie [ p ] .v.LH = p - 1 ;
trie [ p ] .v.RH = p + 1 ;
trietaken [ p ] = false ;
}
}
zfirstfit ( p )
triepointer p ;
{/* 45 40 */ r_firstfit
triepointer h ;
triepointer z ;
triepointer q ;
ASCIIcode c ;
c = triec [ p ] ;
if ( c < triemin )
triemin = c ;
z = trie [ triemin - 1 ] .v.RH ;
while ( true ) {
if ( z < c )
goto lab45 ;
h = z - c ;
if ( triemax < h + 128 )
{
if ( triesize <= h + 128 )
overflow ( 801 , triesize ) ;
do { incr ( triemax ) ;
trietaken [ triemax ] = false ;
trie [ triemax ] .v.RH = triemax + 1 ;
trie [ triemax ] .v.LH = triemax - 1 ;
} while ( ! ( triemax == h + 128 ) ) ;
}
if ( trietaken [ h ] )
goto lab45 ;
q = trier [ p ] ;
while ( q > 0 ) {
if ( trie [ h + triec [ q ] ] .v.RH == 0 )
goto lab45 ;
q = trier [ q ] ;
}
goto lab40 ;
lab45: z = trie [ z ] .v.RH ;
}
lab40: trietaken [ h ] = true ;
triehash [ p ] = h ;
q = p ;
do { z = h + triec [ q ] ;
trie [ trie [ z ] .v.RH ] .v.LH = trie [ z ] .v.LH ;
trie [ trie [ z ] .v.LH ] .v.RH = trie [ z ] .v.RH ;
trie [ z ] .v.RH = 0 ;
q = trier [ q ] ;
} while ( ! ( q == 0 ) ) ;
}
ztriepack ( p )
triepointer p ;
{r_triepack
triepointer q ;
do { q = triel [ p ] ;
if ( ( q > 0 ) && ( triehash [ q ] == 0 ) )
{
firstfit ( q ) ;
triepack ( q ) ;
}
p = trier [ p ] ;
} while ( ! ( p == 0 ) ) ;
}
ztriefix ( p )
triepointer p ;
{r_triefix
triepointer q ;
ASCIIcode c ;
triepointer z ;
z = triehash [ p ] ;
while ( p != 0 ) {
q = triel [ p ] ;
c = triec [ p ] ;
trie [ z + c ] .v.RH = triehash [ q ] ;
trie [ z + c ] .b1 = c ;
trie [ z + c ] .b0 = trieo [ p ] ;
if ( q > 0 )
triefix ( q ) ;
p = trier [ p ] ;
}
}
newpatterns () { /* 30 31 */ r_newpatterns
smallnumber k, l ;
boolean digitsensed ;
quarterword v ;
triepointer p, q ;
boolean firstchild ;
ASCIIcode c ;
triepointer r, s ;
twohalves h ;
scanleftbrac () ;
initpatternm () ;
k = 0 ;
hyf [ 0 ] = 0 ;
digitsensed = false ;
while ( true ) {
getxtoken () ;
switch ( curcmd )
{case 11 :
case 12 :
if ( digitsensed || ( curchr < 48 ) || ( curchr > 57 ) )
{
if ( curchr == 46 )
curchr = 128 ;
else {
curchr = eqtb [ 4755 + curchr ] .hh .v.RH ;
if ( curchr == 0 )
{
{
if ( interaction == 3 )
wakeuptermin () ;
printnl ( 133 ) ;
print ( 805 ) ;
}
{
helpptr = 1 ;
helpline [ 0 ] = 804 ;
}
error () ;
curchr = 128 ;
}
}
if ( k < 63 )
{
incr ( k ) ;
hc [ k ] = curchr - 1 ;
hyf [ k ] = 0 ;
digitsensed = false ;
}
}
else {
hyf [ k ] = curchr - 48 ;
if ( k < 63 )
digitsensed = true ;
}
break ;
case 10 :
case 2 :
{
if ( k > 0 )
{
if ( hc [ 1 ] == 127 )
hyf [ 0 ] = 0 ;
if ( hc [ k ] == 127 )
hyf [ k ] = 0 ;
l = k ;
v = 0 ;
while ( true ) {
if ( hyf [ l ] != 0 )
v = newtrieop ( k - l , hyf [ l ] , v ) ;
if ( l > 0 )
decr ( l ) ;
else goto lab31 ;
}
lab31: ;
q = 0 ;
while ( l < k ) {
incr ( l ) ;
c = hc [ l ] ;
p = triel [ q ] ;
firstchild = true ;
while ( ( p > 0 ) && ( c > triec [ p ] ) ) {
q = p ;
p = trier [ q ] ;
firstchild = false ;
}
if ( ( p == 0 ) || ( c < triec [ p ] ) )
{
if ( trieptr == triesize )
overflow ( 801 , triesize ) ;
incr ( trieptr ) ;
trier [ trieptr ] = p ;
p = trieptr ;
triel [ p ] = 0 ;
if ( firstchild )
triel [ q ] = p ;
else trier [ q ] = p ;
triec [ p ] = c ;
trieo [ p ] = 0 ;
}
q = p ;
}
if ( trieo [ q ] != 0 )
{
{
if ( interaction == 3 )
wakeuptermin () ;
printnl ( 133 ) ;
print ( 806 ) ;
}
{
helpptr = 1 ;
helpline [ 0 ] = 804 ;
}
error () ;
}
trieo [ q ] = v ;
}
if ( curcmd == 2 )
goto lab30 ;
k = 0 ;
hyf [ 0 ] = 0 ;
digitsensed = false ;
}
break ;
default :
{
{
if ( interaction == 3 )
wakeuptermin () ;
printnl ( 133 ) ;
print ( 802 ) ;
}
printesc ( 803 ) ;
{
helpptr = 1 ;
helpline [ 0 ] = 804 ;
}
error () ;
}
break ;
}
}
lab30: ;
triel [ 0 ] = compresstrie ( triel [ 0 ] ) ;
inittriememo () ;
if ( triel [ 0 ] != 0 )
{
firstfit ( triel [ 0 ] ) ;
triepack ( triel [ 0 ] ) ;
}
r = 0 ;
while ( trietaken [ r ] ) incr ( r ) ;
triehash [ 0 ] = r ;
triefix ( triel [ 0 ] ) ;
r = 0 ;
h .v.RH = 0 ;
h .b0 = 0 ;
h .b1 = 0 ;
do { s = trie [ r ] .v.RH ;
trie [ r ] = h ;
r = s ;
} while ( ! ( r > triemax ) ) ;
}
#endif /* INITEX */
halfword zprunepagetop ( p )
halfword p ;
{register halfword Result; r_prunepagetop
halfword prevp ;
halfword q ;
prevp = memtop - 3 ;
mem [(long) memtop - 3 ] .hh .v.RH = p ;
while ( p != 0 ) switch ( mem [(long) p ] .hh.b0 )
{case 0 :
case 1 :
case 2 :
{
q = newskipparam ( 10 ) ;
mem [(long) prevp ] .hh .v.RH = q ;
mem [(long) q ] .hh .v.RH = p ;
if ( mem [(long) tempptr + 1 ] .cint > mem [(long) p + 3 ] .cint )
mem [(long) tempptr + 1 ] .cint = mem [(long) tempptr + 1 ] .cint - mem [(long) p + 3 ]
.cint ;
else mem [(long) tempptr + 1 ] .cint = 0 ;
p = 0 ;
}
break ;
case 8 :
case 4 :
case 3 :
{
prevp = p ;
p = mem [(long) prevp ] .hh .v.RH ;
}
break ;
case 10 :
case 11 :
case 12 :
{
q = p ;
p = mem [(long) q ] .hh .v.RH ;
mem [(long) q ] .hh .v.RH = 0 ;
mem [(long) prevp ] .hh .v.RH = p ;
flushnodelis ( q ) ;
}
break ;
default :
confusion ( 807 ) ;
break ;
}
Result = mem [(long) memtop - 3 ] .hh .v.RH ;
return(Result) ;
}
halfword zvertbreak ( p , h , d )
halfword p ;
scaled h , d ;
{/* 30 45 90 */ register halfword Result; r_vertbreak
halfword prevp ;
halfword q, r ;
integer pi ;
integer b ;
integer leastcost ;
halfword bestplace ;
scaled prevdp ;
smallnumber t ;
prevp = p ;
leastcost = 1073741823 ;
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 [(long) p ] .hh.b0 )
{case 0 :
case 1 :
case 2 :
{
activewidth [ 1 ] = activewidth [ 1 ] + prevdp + mem [(long) p + 3 ] .cint ;
prevdp = mem [(long) p + 2 ] .cint ;
goto lab45 ;
}
break ;
case 8 :
goto lab45 ;
break ;
case 10 :
if ( ( mem [(long) prevp ] .hh.b0 < 9 ) )
pi = 0 ;
else goto lab90 ;
break ;
case 11 :
{
if ( mem [(long) p ] .hh .v.RH == 0 )
t = 12 ;
else t = mem [(long) mem [(long) p ] .hh .v.RH ] .hh.b0 ;
if ( t == 10 )
pi = 0 ;
else goto lab90 ;
}
break ;
case 12 :
pi = mem [(long) p + 1 ] .cint ;
break ;
case 4 :
case 3 :
goto lab45 ;
break ;
default :
confusion ( 808 ) ;
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 = 1073741823 ;
else b = badness ( activewidth [ 1 ] - h , activewidth [ 6 ] ) ;
if ( b < 1073741823 )
if ( pi <= - 10000 )
b = pi ;
else if ( b < 10000 )
b = b + pi ;
else b = 100000 ;
if ( b <= leastcost )
{
bestplace = p ;
leastcost = b ;
bestheightpl = activewidth [ 1 ] + prevdp ;
}
if ( ( b == 1073741823 ) || ( pi <= - 10000 ) )
goto lab30 ;
}
if ( ( mem [(long) p ] .hh.b0 < 10 ) || ( mem [(long) p ] .hh.b0 > 11 ) )
goto lab45 ;
lab90: if ( mem [(long) p ] .hh.b0 == 11 )
q = p ;
else {
q = mem [(long) p + 1 ] .hh .v.LH ;
activewidth [ 2 + mem [(long) q ] .hh.b0 ] = activewidth [ 2 + mem [(long) q ]
.hh.b0 ] + mem [(long) q + 2 ] .cint ;
activewidth [ 6 ] = activewidth [ 6 ] + mem [(long) q + 3 ] .cint ;
if ( ( mem [(long) q ] .hh.b1 != 0 ) && ( mem [(long) q + 3 ] .cint != 0 ) )
{
{
if ( interaction == 3 )
wakeuptermin () ;
printnl ( 133 ) ;
print ( 809 ) ;
}
{
helpptr = 4 ;
helpline [ 3 ] = 810 ;
helpline [ 2 ] = 811 ;
helpline [ 1 ] = 812 ;
helpline [ 0 ] = 776 ;
}
error () ;
r = newspec ( q ) ;
mem [(long) r ] .hh.b1 = 0 ;
deletegluere ( q ) ;
mem [(long) p + 1 ] .hh .v.LH = r ;
}
}
activewidth [ 1 ] = activewidth [ 1 ] + prevdp + mem [(long) q + 1 ] .cint ;
prevdp = 0 ;
lab45: if ( prevdp > d )
{
activewidth [ 1 ] = activewidth [ 1 ] + prevdp - d ;
prevdp = d ;
}
prevp = p ;
p = mem [(long) prevp ] .hh .v.RH ;
}
lab30: Result = bestplace ;
return(Result) ;
}