#define EXTERN extern
#include "mfd.h"
void
#ifdef HAVE_PROTOTYPES
zsplitforoffset ( halfword p , fraction t )
#else
zsplitforoffset ( p , t )
halfword p ;
fraction t ;
#endif
{
halfword q ;
halfword r ;
q = mem [p ].hhfield .v.RH ;
splitcubic ( p , t , mem [q + 1 ].cint , mem [q + 2 ].cint ) ;
r = mem [p ].hhfield .v.RH ;
if ( mem [r + 2 ].cint < mem [p + 2 ].cint )
mem [r + 2 ].cint = mem [p + 2 ].cint ;
else if ( mem [r + 2 ].cint > mem [q + 2 ].cint )
mem [r + 2 ].cint = mem [q + 2 ].cint ;
if ( mem [r + 1 ].cint < mem [p + 1 ].cint )
mem [r + 1 ].cint = mem [p + 1 ].cint ;
else if ( mem [r + 1 ].cint > mem [q + 1 ].cint )
mem [r + 1 ].cint = mem [q + 1 ].cint ;
}
void
#ifdef HAVE_PROTOTYPES
zfinoffsetprep ( halfword p , halfword k , halfword w , integer x0 , integer
x1 , integer x2 , integer y0 , integer y1 , integer y2 , boolean rising ,
integer n )
#else
zfinoffsetprep ( p , k , w , x0 , x1 , x2 , y0 , y1 , y2 , rising , n )
halfword p ;
halfword k ;
halfword w ;
integer x0 ;
integer x1 ;
integer x2 ;
integer y0 ;
integer y1 ;
integer y2 ;
boolean rising ;
integer n ;
#endif
{
/* 10 */ halfword ww ;
scaled du, dv ;
integer t0, t1, t2 ;
fraction t ;
fraction s ;
integer v ;
while ( true ) {
mem [p ].hhfield .b1 = k ;
if ( rising )
if ( k == n )
goto lab10 ;
else ww = mem [w ].hhfield .v.RH ;
else if ( k == 1 )
goto lab10 ;
else ww = mem [w ].hhfield .lhfield ;
du = mem [ww + 1 ].cint - mem [w + 1 ].cint ;
dv = mem [ww + 2 ].cint - mem [w + 2 ].cint ;
if ( abs ( du ) >= abs ( dv ) )
{
s = makefraction ( dv , du ) ;
t0 = takefraction ( x0 , s ) - y0 ;
t1 = takefraction ( x1 , s ) - y1 ;
t2 = takefraction ( x2 , s ) - y2 ;
}
else {
s = makefraction ( du , dv ) ;
t0 = x0 - takefraction ( y0 , s ) ;
t1 = x1 - takefraction ( y1 , s ) ;
t2 = x2 - takefraction ( y2 , s ) ;
}
t = crossingpoint ( t0 , t1 , t2 ) ;
if ( t >= 268435456L )
goto lab10 ;
{
splitforoffset ( p , t ) ;
mem [p ].hhfield .b1 = k ;
p = mem [p ].hhfield .v.RH ;
v = x0 - takefraction ( x0 - x1 , t ) ;
x1 = x1 - takefraction ( x1 - x2 , t ) ;
x0 = v - takefraction ( v - x1 , t ) ;
v = y0 - takefraction ( y0 - y1 , t ) ;
y1 = y1 - takefraction ( y1 - y2 , t ) ;
y0 = v - takefraction ( v - y1 , t ) ;
t1 = t1 - takefraction ( t1 - t2 , t ) ;
if ( t1 > 0 )
t1 = 0 ;
t = crossingpoint ( 0 , - (integer) t1 , - (integer) t2 ) ;
if ( t < 268435456L )
{
splitforoffset ( p , t ) ;
mem [mem [p ].hhfield .v.RH ].hhfield .b1 = k ;
v = x1 - takefraction ( x1 - x2 , t ) ;
x1 = x0 - takefraction ( x0 - x1 , t ) ;
x2 = x1 - takefraction ( x1 - v , t ) ;
v = y1 - takefraction ( y1 - y2 , t ) ;
y1 = y0 - takefraction ( y0 - y1 , t ) ;
y2 = y1 - takefraction ( y1 - v , t ) ;
}
}
if ( rising )
incr ( k ) ;
else decr ( k ) ;
w = ww ;
}
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zoffsetprep ( halfword c , halfword h )
#else
zoffsetprep ( c , h )
halfword c ;
halfword h ;
#endif
{
/* 30 45 */ halfword n ;
halfword p, q, r, lh, ww ;
halfword k ;
halfword w ;
integer x0, x1, x2, y0, y1, y2 ;
integer t0, t1, t2 ;
integer du, dv, dx, dy ;
integer lmaxcoef ;
integer x0a, x1a, x2a, y0a, y1a, y2a ;
fraction t ;
fraction s ;
p = c ;
n = mem [h ].hhfield .lhfield ;
lh = mem [h ].hhfield .v.RH ;
while ( mem [p ].hhfield .b1 != 0 ) {
q = mem [p ].hhfield .v.RH ;
if ( n <= 1 )
mem [p ].hhfield .b1 = 1 ;
else {
x0 = mem [p + 5 ].cint - mem [p + 1 ].cint ;
x2 = mem [q + 1 ].cint - mem [q + 3 ].cint ;
x1 = mem [q + 3 ].cint - mem [p + 5 ].cint ;
y0 = mem [p + 6 ].cint - mem [p + 2 ].cint ;
y2 = mem [q + 2 ].cint - mem [q + 4 ].cint ;
y1 = mem [q + 4 ].cint - mem [p + 6 ].cint ;
lmaxcoef = abs ( x0 ) ;
if ( abs ( x1 ) > lmaxcoef )
lmaxcoef = abs ( x1 ) ;
if ( abs ( x2 ) > lmaxcoef )
lmaxcoef = abs ( x2 ) ;
if ( abs ( y0 ) > lmaxcoef )
lmaxcoef = abs ( y0 ) ;
if ( abs ( y1 ) > lmaxcoef )
lmaxcoef = abs ( y1 ) ;
if ( abs ( y2 ) > lmaxcoef )
lmaxcoef = abs ( y2 ) ;
if ( lmaxcoef == 0 )
goto lab45 ;
while ( lmaxcoef < 134217728L ) {
lmaxcoef = lmaxcoef + lmaxcoef ;
x0 = x0 + x0 ;
x1 = x1 + x1 ;
x2 = x2 + x2 ;
y0 = y0 + y0 ;
y1 = y1 + y1 ;
y2 = y2 + y2 ;
}
dx = x0 ;
dy = y0 ;
if ( dx == 0 )
if ( dy == 0 )
{
dx = x1 ;
dy = y1 ;
if ( dx == 0 )
if ( dy == 0 )
{
dx = x2 ;
dy = y2 ;
}
}
if ( dx == 0 )
finoffsetprep ( p , n , mem [mem [lh ].hhfield .lhfield ].hhfield
.lhfield , - (integer) x0 , - (integer) x1 , - (integer) x2 ,
- (integer) y0 , - (integer) y1 , - (integer) y2 , false , n ) ;
else {
k = 1 ;
w = mem [lh ].hhfield .v.RH ;
while ( true ) {
if ( k == n )
goto lab30 ;
ww = mem [w ].hhfield .v.RH ;
if ( abvscd ( dy , abs ( mem [ww + 1 ].cint - mem [w + 1 ].cint
) , dx , abs ( mem [ww + 2 ].cint - mem [w + 2 ].cint ) ) >= 0 )
{
incr ( k ) ;
w = ww ;
}
else goto lab30 ;
}
lab30: ;
if ( k == 1 )
t = 268435457L ;
else {
ww = mem [w ].hhfield .lhfield ;
du = mem [ww + 1 ].cint - mem [w + 1 ].cint ;
dv = mem [ww + 2 ].cint - mem [w + 2 ].cint ;
if ( abs ( du ) >= abs ( dv ) )
{
s = makefraction ( dv , du ) ;
t0 = takefraction ( x0 , s ) - y0 ;
t1 = takefraction ( x1 , s ) - y1 ;
t2 = takefraction ( x2 , s ) - y2 ;
}
else {
s = makefraction ( du , dv ) ;
t0 = x0 - takefraction ( y0 , s ) ;
t1 = x1 - takefraction ( y1 , s ) ;
t2 = x2 - takefraction ( y2 , s ) ;
}
t = crossingpoint ( - (integer) t0 , - (integer) t1 , - (integer) t2
) ;
}
if ( t >= 268435456L )
finoffsetprep ( p , k , w , x0 , x1 , x2 , y0 , y1 , y2 , true , n ) ;
else {
splitforoffset ( p , t ) ;
r = mem [p ].hhfield .v.RH ;
x1a = x0 - takefraction ( x0 - x1 , t ) ;
x1 = x1 - takefraction ( x1 - x2 , t ) ;
x2a = x1a - takefraction ( x1a - x1 , t ) ;
y1a = y0 - takefraction ( y0 - y1 , t ) ;
y1 = y1 - takefraction ( y1 - y2 , t ) ;
y2a = y1a - takefraction ( y1a - y1 , t ) ;
finoffsetprep ( p , k , w , x0 , x1a , x2a , y0 , y1a , y2a , true ,
n ) ;
x0 = x2a ;
y0 = y2a ;
t1 = t1 - takefraction ( t1 - t2 , t ) ;
if ( t1 < 0 )
t1 = 0 ;
t = crossingpoint ( 0 , t1 , t2 ) ;
if ( t < 268435456L )
{
splitforoffset ( r , t ) ;
x1a = x1 - takefraction ( x1 - x2 , t ) ;
x1 = x0 - takefraction ( x0 - x1 , t ) ;
x0a = x1 - takefraction ( x1 - x1a , t ) ;
y1a = y1 - takefraction ( y1 - y2 , t ) ;
y1 = y0 - takefraction ( y0 - y1 , t ) ;
y0a = y1 - takefraction ( y1 - y1a , t ) ;
finoffsetprep ( mem [r ].hhfield .v.RH , k , w , x0a , x1a , x2
, y0a , y1a , y2 , true , n ) ;
x2 = x0a ;
y2 = y0a ;
}
finoffsetprep ( r , k - 1 , ww , - (integer) x0 , - (integer) x1 ,
- (integer) x2 , - (integer) y0 , - (integer) y1 , - (integer) y2 ,
false , n ) ;
}
}
lab45: ;
}
do {
r = mem [p ].hhfield .v.RH ;
if ( mem [p + 1 ].cint == mem [p + 5 ].cint )
if ( mem [p + 2 ].cint == mem [p + 6 ].cint )
if ( mem [p + 1 ].cint == mem [r + 3 ].cint )
if ( mem [p + 2 ].cint == mem [r + 4 ].cint )
if ( mem [p + 1 ].cint == mem [r + 1 ].cint )
if ( mem [p + 2 ].cint == mem [r + 2 ].cint )
{
removecubic ( p ) ;
if ( r == q )
q = p ;
r = p ;
}
p = r ;
} while ( ! ( p == q ) ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zskewlineedges ( halfword p , halfword w , halfword ww )
#else
zskewlineedges ( p , w , ww )
halfword p ;
halfword w ;
halfword ww ;
#endif
{
scaled x0, y0, x1, y1 ;
if ( ( mem [w + 1 ].cint != mem [ww + 1 ].cint ) || ( mem [w + 2 ]
.cint != mem [ww + 2 ].cint ) )
{
x0 = mem [p + 1 ].cint + mem [w + 1 ].cint ;
y0 = mem [p + 2 ].cint + mem [w + 2 ].cint ;
x1 = mem [p + 1 ].cint + mem [ww + 1 ].cint ;
y1 = mem [p + 2 ].cint + mem [ww + 2 ].cint ;
unskew ( x0 , y0 , octant ) ;
x0 = curx ;
y0 = cury ;
unskew ( x1 , y1 , octant ) ;
;
#ifdef STAT
if ( internal [10 ]> 65536L )
{
printnl ( 583 ) ;
printtwo ( x0 , y0 ) ;
print ( 582 ) ;
printtwo ( curx , cury ) ;
printnl ( 283 ) ;
}
#endif /* STAT */
lineedges ( x0 , y0 , curx , cury ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zdualmoves ( halfword h , halfword p , halfword q )
#else
zdualmoves ( h , p , q )
halfword h ;
halfword p ;
halfword q ;
#endif
{
/* 30 31 */ halfword r, s ;
integer m, n ;
integer mm0, mm1 ;
integer k ;
halfword w, ww ;
integer smoothbot, smoothtop ;
scaled xx, yy, xp, yp, delx, dely, tx, ty ;
k = mem [h ].hhfield .lhfield + 1 ;
ww = mem [h ].hhfield .v.RH ;
w = mem [ww ].hhfield .lhfield ;
mm0 = floorunscaled ( mem [p + 1 ].cint + mem [w + 1 ].cint - xycorr [
octant ]) ;
mm1 = floorunscaled ( mem [q + 1 ].cint + mem [ww + 1 ].cint - xycorr [
octant ]) ;
{register integer for_end; n = 1 ;for_end = n1 - n0 + 1 ; if ( n <=
for_end) do
envmove [n ]= mm1 ;
while ( n++ < for_end ) ;}
envmove [0 ]= mm0 ;
moveptr = 0 ;
m = mm0 ;
r = p ;
while ( true ) {
if ( r == q )
smoothtop = moveptr ;
while ( mem [r ].hhfield .b1 != k ) {
xx = mem [r + 1 ].cint + mem [w + 1 ].cint ;
yy = mem [r + 2 ].cint + mem [w + 2 ].cint + 32768L ;
;
#ifdef STAT
if ( internal [10 ]> 65536L )
{
printnl ( 584 ) ;
printint ( k ) ;
print ( 585 ) ;
unskew ( xx , yy - 32768L , octant ) ;
printtwo ( curx , cury ) ;
}
#endif /* STAT */
if ( mem [r ].hhfield .b1 < k )
{
decr ( k ) ;
w = mem [w ].hhfield .lhfield ;
xp = mem [r + 1 ].cint + mem [w + 1 ].cint ;
yp = mem [r + 2 ].cint + mem [w + 2 ].cint + 32768L ;
if ( yp != yy )
{
ty = floorscaled ( yy - ycorr [octant ]) ;
dely = yp - yy ;
yy = yy - ty ;
ty = yp - ycorr [octant ]- ty ;
if ( ty >= 65536L )
{
delx = xp - xx ;
yy = 65536L - yy ;
while ( true ) {
if ( m < envmove [moveptr ])
envmove [moveptr ]= m ;
tx = takefraction ( delx , makefraction ( yy , dely ) ) ;
if ( abvscd ( tx , dely , delx , yy ) + xycorr [octant ]> 0 )
decr ( tx ) ;
m = floorunscaled ( xx + tx ) ;
ty = ty - 65536L ;
incr ( moveptr ) ;
if ( ty < 65536L )
goto lab31 ;
yy = yy + 65536L ;
}
lab31: if ( m < envmove [moveptr ])
envmove [moveptr ]= m ;
}
}
}
else {
incr ( k ) ;
w = mem [w ].hhfield .v.RH ;
xp = mem [r + 1 ].cint + mem [w + 1 ].cint ;
yp = mem [r + 2 ].cint + mem [w + 2 ].cint + 32768L ;
}
;
#ifdef STAT
if ( internal [10 ]> 65536L )
{
print ( 582 ) ;
unskew ( xp , yp - 32768L , octant ) ;
printtwo ( curx , cury ) ;
printnl ( 283 ) ;
}
#endif /* STAT */
m = floorunscaled ( xp - xycorr [octant ]) ;
moveptr = floorunscaled ( yp - ycorr [octant ]) - n0 ;
if ( m < envmove [moveptr ])
envmove [moveptr ]= m ;
}
if ( r == p )
smoothbot = moveptr ;
if ( r == q )
goto lab30 ;
move [moveptr ]= 1 ;
n = moveptr ;
s = mem [r ].hhfield .v.RH ;
makemoves ( mem [r + 1 ].cint + mem [w + 1 ].cint , mem [r + 5 ]
.cint + mem [w + 1 ].cint , mem [s + 3 ].cint + mem [w + 1 ].cint ,
mem [s + 1 ].cint + mem [w + 1 ].cint , mem [r + 2 ].cint + mem [w
+ 2 ].cint + 32768L , mem [r + 6 ].cint + mem [w + 2 ].cint + 32768L
, mem [s + 4 ].cint + mem [w + 2 ].cint + 32768L , mem [s + 2 ].cint
+ mem [w + 2 ].cint + 32768L , xycorr [octant ], ycorr [octant ]) ;
do {
if ( m < envmove [n ])
envmove [n ]= m ;
m = m + move [n ]- 1 ;
incr ( n ) ;
} while ( ! ( n > moveptr ) ) ;
r = s ;
}
lab30:
;
#ifdef TEXMF_DEBUG
if ( ( m != mm1 ) || ( moveptr != n1 - n0 ) )
confusion ( 50 ) ;
#endif /* TEXMF_DEBUG */
move [0 ]= d0 + envmove [1 ]- mm0 ;
{register integer for_end; n = 1 ;for_end = moveptr ; if ( n <= for_end)
do
move [n ]= envmove [n + 1 ]- envmove [n ]+ 1 ;
while ( n++ < for_end ) ;}
move [moveptr ]= move [moveptr ]- d1 ;
if ( internal [35 ]> 0 )
smoothmoves ( smoothbot , smoothtop ) ;
movetoedges ( m0 , n0 , m1 , n1 ) ;
if ( mem [q + 6 ].cint == 1 )
{
w = mem [h ].hhfield .v.RH ;
skewlineedges ( q , w , mem [w ].hhfield .lhfield ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zfillenvelope ( halfword spechead )
#else
zfillenvelope ( spechead )
halfword spechead ;
#endif
{
/* 30 31 */ halfword p, q, r, s ;
halfword h ;
halfword www ;
integer m, n ;
integer mm0, mm1 ;
integer k ;
halfword w, ww ;
integer smoothbot, smoothtop ;
scaled xx, yy, xp, yp, delx, dely, tx, ty ;
if ( internal [10 ]> 0 )
beginedgetracing () ;
p = spechead ;
do {
octant = mem [p + 3 ].cint ;
h = curpen + octant ;
q = p ;
while ( mem [q ].hhfield .b1 != 0 ) q = mem [q ].hhfield .v.RH ;
w = mem [h ].hhfield .v.RH ;
if ( mem [p + 4 ].cint == 1 )
w = mem [w ].hhfield .lhfield ;
;
#ifdef STAT
if ( internal [10 ]> 65536L )
{
printnl ( 579 ) ;
print ( octantdir [octant ]) ;
print ( 557 ) ;
printint ( mem [h ].hhfield .lhfield ) ;
print ( 580 ) ;
if ( mem [h ].hhfield .lhfield != 1 )
printchar ( 115 ) ;
print ( 581 ) ;
unskew ( mem [p + 1 ].cint + mem [w + 1 ].cint , mem [p + 2 ].cint
+ mem [w + 2 ].cint , octant ) ;
printtwo ( curx , cury ) ;
ww = mem [h ].hhfield .v.RH ;
if ( mem [q + 6 ].cint == 1 )
ww = mem [ww ].hhfield .lhfield ;
print ( 582 ) ;
unskew ( mem [q + 1 ].cint + mem [ww + 1 ].cint , mem [q + 2 ]
.cint + mem [ww + 2 ].cint , octant ) ;
printtwo ( curx , cury ) ;
}
#endif /* STAT */
ww = mem [h ].hhfield .v.RH ;
www = ww ;
if ( odd ( octantnumber [octant ]) )
www = mem [www ].hhfield .lhfield ;
else ww = mem [ww ].hhfield .lhfield ;
if ( w != ww )
skewlineedges ( p , w , ww ) ;
endround ( mem [p + 1 ].cint + mem [ww + 1 ].cint , mem [p + 2 ]
.cint + mem [ww + 2 ].cint ) ;
m0 = m1 ;
n0 = n1 ;
d0 = d1 ;
endround ( mem [q + 1 ].cint + mem [www + 1 ].cint , mem [q + 2 ]
.cint + mem [www + 2 ].cint ) ;
if ( n1 - n0 >= movesize )
overflow ( 539 , movesize ) ;
offsetprep ( p , h ) ;
q = p ;
while ( mem [q ].hhfield .b1 != 0 ) q = mem [q ].hhfield .v.RH ;
if ( odd ( octantnumber [octant ]) )
{
k = 0 ;
w = mem [h ].hhfield .v.RH ;
ww = mem [w ].hhfield .lhfield ;
mm0 = floorunscaled ( mem [p + 1 ].cint + mem [w + 1 ].cint - xycorr
[octant ]) ;
mm1 = floorunscaled ( mem [q + 1 ].cint + mem [ww + 1 ].cint -
xycorr [octant ]) ;
{register integer for_end; n = 0 ;for_end = n1 - n0 ; if ( n <=
for_end) do
envmove [n ]= mm0 ;
while ( n++ < for_end ) ;}
envmove [n1 - n0 ]= mm1 ;
moveptr = 0 ;
m = mm0 ;
r = p ;
mem [q ].hhfield .b1 = mem [h ].hhfield .lhfield + 1 ;
while ( true ) {
if ( r == q )
smoothtop = moveptr ;
while ( mem [r ].hhfield .b1 != k ) {
xx = mem [r + 1 ].cint + mem [w + 1 ].cint ;
yy = mem [r + 2 ].cint + mem [w + 2 ].cint + 32768L ;
;
#ifdef STAT
if ( internal [10 ]> 65536L )
{
printnl ( 584 ) ;
printint ( k ) ;
print ( 585 ) ;
unskew ( xx , yy - 32768L , octant ) ;
printtwo ( curx , cury ) ;
}
#endif /* STAT */
if ( mem [r ].hhfield .b1 > k )
{
incr ( k ) ;
w = mem [w ].hhfield .v.RH ;
xp = mem [r + 1 ].cint + mem [w + 1 ].cint ;
yp = mem [r + 2 ].cint + mem [w + 2 ].cint + 32768L ;
if ( yp != yy )
{
ty = floorscaled ( yy - ycorr [octant ]) ;
dely = yp - yy ;
yy = yy - ty ;
ty = yp - ycorr [octant ]- ty ;
if ( ty >= 65536L )
{
delx = xp - xx ;
yy = 65536L - yy ;
while ( true ) {
tx = takefraction ( delx , makefraction ( yy , dely ) ) ;
if ( abvscd ( tx , dely , delx , yy ) + xycorr [octant ]>
0 )
decr ( tx ) ;
m = floorunscaled ( xx + tx ) ;
if ( m > envmove [moveptr ])
envmove [moveptr ]= m ;
ty = ty - 65536L ;
if ( ty < 65536L )
goto lab31 ;
yy = yy + 65536L ;
incr ( moveptr ) ;
}
lab31: ;
}
}
}
else {
decr ( k ) ;
w = mem [w ].hhfield .lhfield ;
xp = mem [r + 1 ].cint + mem [w + 1 ].cint ;
yp = mem [r + 2 ].cint + mem [w + 2 ].cint + 32768L ;
}
;
#ifdef STAT
if ( internal [10 ]> 65536L )
{
print ( 582 ) ;
unskew ( xp , yp - 32768L , octant ) ;
printtwo ( curx , cury ) ;
printnl ( 283 ) ;
}
#endif /* STAT */
m = floorunscaled ( xp - xycorr [octant ]) ;
moveptr = floorunscaled ( yp - ycorr [octant ]) - n0 ;
if ( m > envmove [moveptr ])
envmove [moveptr ]= m ;
}
if ( r == p )
smoothbot = moveptr ;
if ( r == q )
goto lab30 ;
move [moveptr ]= 1 ;
n = moveptr ;
s = mem [r ].hhfield .v.RH ;
makemoves ( mem [r + 1 ].cint + mem [w + 1 ].cint , mem [r + 5 ]
.cint + mem [w + 1 ].cint , mem [s + 3 ].cint + mem [w + 1 ]
.cint , mem [s + 1 ].cint + mem [w + 1 ].cint , mem [r + 2 ]
.cint + mem [w + 2 ].cint + 32768L , mem [r + 6 ].cint + mem [w +
2 ].cint + 32768L , mem [s + 4 ].cint + mem [w + 2 ].cint +
32768L , mem [s + 2 ].cint + mem [w + 2 ].cint + 32768L , xycorr [
octant ], ycorr [octant ]) ;
do {
m = m + move [n ]- 1 ;
if ( m > envmove [n ])
envmove [n ]= m ;
incr ( n ) ;
} while ( ! ( n > moveptr ) ) ;
r = s ;
}
lab30:
;
#ifdef TEXMF_DEBUG
if ( ( m != mm1 ) || ( moveptr != n1 - n0 ) )
confusion ( 49 ) ;
#endif /* TEXMF_DEBUG */
move [0 ]= d0 + envmove [0 ]- mm0 ;
{register integer for_end; n = 1 ;for_end = moveptr ; if ( n <=
for_end) do
move [n ]= envmove [n ]- envmove [n - 1 ]+ 1 ;
while ( n++ < for_end ) ;}
move [moveptr ]= move [moveptr ]- d1 ;
if ( internal [35 ]> 0 )
smoothmoves ( smoothbot , smoothtop ) ;
movetoedges ( m0 , n0 , m1 , n1 ) ;
if ( mem [q + 6 ].cint == 0 )
{
w = mem [h ].hhfield .v.RH ;
skewlineedges ( q , mem [w ].hhfield .lhfield , w ) ;
}
}
else dualmoves ( h , p , q ) ;
mem [q ].hhfield .b1 = 0 ;
p = mem [q ].hhfield .v.RH ;
} while ( ! ( p == spechead ) ) ;
if ( internal [10 ]> 0 )
endedgetracing () ;
tossknotlist ( spechead ) ;
}
halfword
#ifdef HAVE_PROTOTYPES
zmakeellipse ( scaled majoraxis , scaled minoraxis , angle theta )
#else
zmakeellipse ( majoraxis , minoraxis , theta )
scaled majoraxis ;
scaled minoraxis ;
angle theta ;
#endif
{
/* 30 31 40 */ register halfword Result; halfword p, q, r, s ;
halfword h ;
integer alpha, beta, gamma, delta ;
integer c, d ;
integer u, v ;
boolean symmetric ;
if ( ( majoraxis == minoraxis ) || ( theta % 94371840L == 0 ) )
{
symmetric = true ;
alpha = 0 ;
if ( odd ( theta / 94371840L ) )
{
beta = majoraxis ;
gamma = minoraxis ;
nsin = 268435456L ;
ncos = 0 ;
}
else {
beta = minoraxis ;
gamma = majoraxis ;
}
}
else {
symmetric = false ;
nsincos ( theta ) ;
gamma = takefraction ( majoraxis , nsin ) ;
delta = takefraction ( minoraxis , ncos ) ;
beta = pythadd ( gamma , delta ) ;
alpha = makefraction ( gamma , beta ) ;
alpha = takefraction ( majoraxis , alpha ) ;
alpha = takefraction ( alpha , ncos ) ;
alpha = ( alpha + 32768L ) / 65536L ;
gamma = takefraction ( minoraxis , nsin ) ;
gamma = pythadd ( takefraction ( majoraxis , ncos ) , gamma ) ;
}
beta = ( beta + 32768L ) / 65536L ;
gamma = ( gamma + 32768L ) / 65536L ;
p = getnode ( 7 ) ;
q = getnode ( 7 ) ;
r = getnode ( 7 ) ;
if ( symmetric )
s = 0 ;
else s = getnode ( 7 ) ;
h = p ;
mem [p ].hhfield .v.RH = q ;
mem [q ].hhfield .v.RH = r ;
mem [r ].hhfield .v.RH = s ;
if ( beta == 0 )
beta = 1 ;
if ( gamma == 0 )
gamma = 1 ;
if ( gamma <= abs ( alpha ) )
if ( alpha > 0 )
alpha = gamma - 1 ;
else alpha = 1 - gamma ;
mem [p + 1 ].cint = - (integer) alpha * 32768L ;
mem [p + 2 ].cint = - (integer) beta * 32768L ;
mem [q + 1 ].cint = gamma * 32768L ;
mem [q + 2 ].cint = mem [p + 2 ].cint ;
mem [r + 1 ].cint = mem [q + 1 ].cint ;
mem [p + 5 ].cint = 0 ;
mem [q + 3 ].cint = -32768L ;
mem [q + 5 ].cint = 32768L ;
mem [r + 3 ].cint = 0 ;
mem [r + 5 ].cint = 0 ;
mem [p + 6 ].cint = beta ;
mem [q + 6 ].cint = gamma ;
mem [r + 6 ].cint = beta ;
mem [q + 4 ].cint = gamma + alpha ;
if ( symmetric )
{
mem [r + 2 ].cint = 0 ;
mem [r + 4 ].cint = beta ;
}
else {
mem [r + 2 ].cint = - (integer) mem [p + 2 ].cint ;
mem [r + 4 ].cint = beta + beta ;
mem [s + 1 ].cint = - (integer) mem [p + 1 ].cint ;
mem [s + 2 ].cint = mem [r + 2 ].cint ;
mem [s + 3 ].cint = 32768L ;
mem [s + 4 ].cint = gamma - alpha ;
}
while ( true ) {
u = mem [p + 5 ].cint + mem [q + 5 ].cint ;
v = mem [q + 3 ].cint + mem [r + 3 ].cint ;
c = mem [p + 6 ].cint + mem [q + 6 ].cint ;
delta = pythadd ( u , v ) ;
if ( majoraxis == minoraxis )
d = majoraxis ;
else {
if ( theta == 0 )
{
alpha = u ;
beta = v ;
}
else {
alpha = takefraction ( u , ncos ) + takefraction ( v , nsin ) ;
beta = takefraction ( v , ncos ) - takefraction ( u , nsin ) ;
}
alpha = makefraction ( alpha , delta ) ;
beta = makefraction ( beta , delta ) ;
d = pythadd ( takefraction ( majoraxis , alpha ) , takefraction (
minoraxis , beta ) ) ;
}
alpha = abs ( u ) ;
beta = abs ( v ) ;
if ( alpha < beta )
{
alpha = abs ( v ) ;
beta = abs ( u ) ;
}
if ( internal [38 ]!= 0 )
d = d - takefraction ( internal [38 ], makefraction ( beta + beta ,
delta ) ) ;
d = takefraction ( ( d + 4 ) / 8 , delta ) ;
alpha = alpha / 32768L ;
if ( d < alpha )
d = alpha ;
delta = c - d ;
if ( delta > 0 )
{
if ( delta > mem [r + 4 ].cint )
delta = mem [r + 4 ].cint ;
if ( delta >= mem [q + 4 ].cint )
{
delta = mem [q + 4 ].cint ;
mem [p + 6 ].cint = c - delta ;
mem [p + 5 ].cint = u ;
mem [q + 3 ].cint = v ;
mem [q + 1 ].cint = mem [q + 1 ].cint - delta * mem [r + 3 ]
.cint ;
mem [q + 2 ].cint = mem [q + 2 ].cint + delta * mem [q + 5 ]
.cint ;
mem [r + 4 ].cint = mem [r + 4 ].cint - delta ;
}
else {
s = getnode ( 7 ) ;
mem [p ].hhfield .v.RH = s ;
mem [s ].hhfield .v.RH = q ;
mem [s + 1 ].cint = mem [q + 1 ].cint + delta * mem [q + 3 ]
.cint ;
mem [s + 2 ].cint = mem [q + 2 ].cint - delta * mem [p + 5 ]
.cint ;
mem [q + 1 ].cint = mem [q + 1 ].cint - delta * mem [r + 3 ]
.cint ;
mem [q + 2 ].cint = mem [q + 2 ].cint + delta * mem [q + 5 ]
.cint ;
mem [s + 3 ].cint = mem [q + 3 ].cint ;
mem [s + 5 ].cint = u ;
mem [q + 3 ].cint = v ;
mem [s + 6 ].cint = c - delta ;
mem [s + 4 ].cint = mem [q + 4 ].cint - delta ;
mem [q + 4 ].cint = delta ;
mem [r + 4 ].cint = mem [r + 4 ].cint - delta ;
}
}
else p = q ;
while ( true ) {
q = mem [p ].hhfield .v.RH ;
if ( q == 0 )
goto lab30 ;
if ( mem [q + 4 ].cint == 0 )
{
mem [p ].hhfield .v.RH = mem [q ].hhfield .v.RH ;
mem [p + 6 ].cint = mem [q + 6 ].cint ;
mem [p + 5 ].cint = mem [q + 5 ].cint ;
freenode ( q , 7 ) ;
}
else {
r = mem [q ].hhfield .v.RH ;
if ( r == 0 )
goto lab30 ;
if ( mem [r + 4 ].cint == 0 )
{
mem [p ].hhfield .v.RH = r ;
freenode ( q , 7 ) ;
p = r ;
}
else goto lab40 ;
}
}
lab40: ;
}
lab30: ;
if ( symmetric )
{
s = 0 ;
q = h ;
while ( true ) {
r = getnode ( 7 ) ;
mem [r ].hhfield .v.RH = s ;
s = r ;
mem [s + 1 ].cint = mem [q + 1 ].cint ;
mem [s + 2 ].cint = - (integer) mem [q + 2 ].cint ;
if ( q == p )
goto lab31 ;
q = mem [q ].hhfield .v.RH ;
if ( mem [q + 2 ].cint == 0 )
goto lab31 ;
}
lab31: mem [p ].hhfield .v.RH = s ;
beta = - (integer) mem [h + 2 ].cint ;
while ( mem [p + 2 ].cint != beta ) p = mem [p ].hhfield .v.RH ;
q = mem [p ].hhfield .v.RH ;
}
if ( q != 0 )
{
if ( mem [h + 5 ].cint == 0 )
{
p = h ;
h = mem [h ].hhfield .v.RH ;
freenode ( p , 7 ) ;
mem [q + 1 ].cint = - (integer) mem [h + 1 ].cint ;
}
p = q ;
}
else q = p ;
r = mem [h ].hhfield .v.RH ;
do {
s = getnode ( 7 ) ;
mem [p ].hhfield .v.RH = s ;
p = s ;
mem [p + 1 ].cint = - (integer) mem [r + 1 ].cint ;
mem [p + 2 ].cint = - (integer) mem [r + 2 ].cint ;
r = mem [r ].hhfield .v.RH ;
} while ( ! ( r == q ) ) ;
mem [p ].hhfield .v.RH = h ;
Result = h ;
return Result ;
}
scaled
#ifdef HAVE_PROTOTYPES
zfinddirectiontime ( scaled x , scaled y , halfword h )
#else
zfinddirectiontime ( x , y , h )
scaled x ;
scaled y ;
halfword h ;
#endif
{
/* 10 40 45 30 */ register scaled Result; scaled max ;
halfword p, q ;
scaled n ;
scaled tt ;
scaled x1, x2, x3, y1, y2, y3 ;
angle theta, phi ;
fraction t ;
if ( abs ( x ) < abs ( y ) )
{
x = makefraction ( x , abs ( y ) ) ;
if ( y > 0 )
y = 268435456L ;
else y = -268435456L ;
}
else if ( x == 0 )
{
Result = 0 ;
goto lab10 ;
}
else {
y = makefraction ( y , abs ( x ) ) ;
if ( x > 0 )
x = 268435456L ;
else x = -268435456L ;
}
n = 0 ;
p = h ;
while ( true ) {
if ( mem [p ].hhfield .b1 == 0 )
goto lab45 ;
q = mem [p ].hhfield .v.RH ;
tt = 0 ;
x1 = mem [p + 5 ].cint - mem [p + 1 ].cint ;
x2 = mem [q + 3 ].cint - mem [p + 5 ].cint ;
x3 = mem [q + 1 ].cint - mem [q + 3 ].cint ;
y1 = mem [p + 6 ].cint - mem [p + 2 ].cint ;
y2 = mem [q + 4 ].cint - mem [p + 6 ].cint ;
y3 = mem [q + 2 ].cint - mem [q + 4 ].cint ;
max = abs ( x1 ) ;
if ( abs ( x2 ) > max )
max = abs ( x2 ) ;
if ( abs ( x3 ) > max )
max = abs ( x3 ) ;
if ( abs ( y1 ) > max )
max = abs ( y1 ) ;
if ( abs ( y2 ) > max )
max = abs ( y2 ) ;
if ( abs ( y3 ) > max )
max = abs ( y3 ) ;
if ( max == 0 )
goto lab40 ;
while ( max < 134217728L ) {
max = max + max ;
x1 = x1 + x1 ;
x2 = x2 + x2 ;
x3 = x3 + x3 ;
y1 = y1 + y1 ;
y2 = y2 + y2 ;
y3 = y3 + y3 ;
}
t = x1 ;
x1 = takefraction ( x1 , x ) + takefraction ( y1 , y ) ;
y1 = takefraction ( y1 , x ) - takefraction ( t , y ) ;
t = x2 ;
x2 = takefraction ( x2 , x ) + takefraction ( y2 , y ) ;
y2 = takefraction ( y2 , x ) - takefraction ( t , y ) ;
t = x3 ;
x3 = takefraction ( x3 , x ) + takefraction ( y3 , y ) ;
y3 = takefraction ( y3 , x ) - takefraction ( t , y ) ;
if ( y1 == 0 )
if ( x1 >= 0 )
goto lab40 ;
if ( n > 0 )
{
theta = narg ( x1 , y1 ) ;
if ( theta >= 0 )
if ( phi <= 0 )
if ( phi >= theta - 188743680L )
goto lab40 ;
if ( theta <= 0 )
if ( phi >= 0 )
if ( phi <= theta + 188743680L )
goto lab40 ;
if ( p == h )
goto lab45 ;
}
if ( ( x3 != 0 ) || ( y3 != 0 ) )
phi = narg ( x3 , y3 ) ;
if ( x1 < 0 )
if ( x2 < 0 )
if ( x3 < 0 )
goto lab30 ;
if ( abvscd ( y1 , y3 , y2 , y2 ) == 0 )
{
if ( abvscd ( y1 , y2 , 0 , 0 ) < 0 )
{
t = makefraction ( y1 , y1 - y2 ) ;
x1 = x1 - takefraction ( x1 - x2 , t ) ;
x2 = x2 - takefraction ( x2 - x3 , t ) ;
if ( x1 - takefraction ( x1 - x2 , t ) >= 0 )
{
tt = ( t + 2048 ) / 4096 ;
goto lab40 ;
}
}
else if ( y3 == 0 )
if ( y1 == 0 )
{
t = crossingpoint ( - (integer) x1 , - (integer) x2 , - (integer) x3 )
;
if ( t <= 268435456L )
{
tt = ( t + 2048 ) / 4096 ;
goto lab40 ;
}
if ( abvscd ( x1 , x3 , x2 , x2 ) <= 0 )
{
t = makefraction ( x1 , x1 - x2 ) ;
{
tt = ( t + 2048 ) / 4096 ;
goto lab40 ;
}
}
}
else if ( x3 >= 0 )
{
tt = 65536L ;
goto lab40 ;
}
goto lab30 ;
}
if ( y1 <= 0 )
if ( y1 < 0 )
{
y1 = - (integer) y1 ;
y2 = - (integer) y2 ;
y3 = - (integer) y3 ;
}
else if ( y2 > 0 )
{
y2 = - (integer) y2 ;
y3 = - (integer) y3 ;
}
t = crossingpoint ( y1 , y2 , y3 ) ;
if ( t > 268435456L )
goto lab30 ;
y2 = y2 - takefraction ( y2 - y3 , t ) ;
x1 = x1 - takefraction ( x1 - x2 , t ) ;
x2 = x2 - takefraction ( x2 - x3 , t ) ;
x1 = x1 - takefraction ( x1 - x2 , t ) ;
if ( x1 >= 0 )
{
tt = ( t + 2048 ) / 4096 ;
goto lab40 ;
}
if ( y2 > 0 )
y2 = 0 ;
tt = t ;
t = crossingpoint ( 0 , - (integer) y2 , - (integer) y3 ) ;
if ( t > 268435456L )
goto lab30 ;
x1 = x1 - takefraction ( x1 - x2 , t ) ;
x2 = x2 - takefraction ( x2 - x3 , t ) ;
if ( x1 - takefraction ( x1 - x2 , t ) >= 0 )
{
t = tt - takefraction ( tt - 268435456L , t ) ;
{
tt = ( t + 2048 ) / 4096 ;
goto lab40 ;
}
}
lab30: ;
p = q ;
n = n + 65536L ;
}
lab45: Result = -65536L ;
goto lab10 ;
lab40: Result = n + tt ;
lab10: ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zcubicintersection ( halfword p , halfword pp )
#else
zcubicintersection ( p , pp )
halfword p ;
halfword pp ;
#endif
{
/* 22 45 10 */ halfword q, qq ;
timetogo = 5000 ;
maxt = 2 ;
q = mem [p ].hhfield .v.RH ;
qq = mem [pp ].hhfield .v.RH ;
bisectptr = 20 ;
bisectstack [bisectptr - 5 ]= mem [p + 5 ].cint - mem [p + 1 ].cint ;
bisectstack [bisectptr - 4 ]= mem [q + 3 ].cint - mem [p + 5 ].cint ;
bisectstack [bisectptr - 3 ]= mem [q + 1 ].cint - mem [q + 3 ].cint ;
if ( bisectstack [bisectptr - 5 ]< 0 )
if ( bisectstack [bisectptr - 3 ]>= 0 )
{
if ( bisectstack [bisectptr - 4 ]< 0 )
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ];
else bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ];
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ]+ bisectstack [bisectptr - 3 ];
if ( bisectstack [bisectptr - 1 ]< 0 )
bisectstack [bisectptr - 1 ]= 0 ;
}
else {
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ]+ bisectstack [bisectptr - 3 ];
if ( bisectstack [bisectptr - 2 ]> bisectstack [bisectptr - 5 ])
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ];
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ];
if ( bisectstack [bisectptr - 1 ]< 0 )
bisectstack [bisectptr - 1 ]= 0 ;
}
else if ( bisectstack [bisectptr - 3 ]<= 0 )
{
if ( bisectstack [bisectptr - 4 ]> 0 )
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ];
else bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ];
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ]+ bisectstack [bisectptr - 3 ];
if ( bisectstack [bisectptr - 2 ]> 0 )
bisectstack [bisectptr - 2 ]= 0 ;
}
else {
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ]+ bisectstack [bisectptr - 3 ];
if ( bisectstack [bisectptr - 1 ]< bisectstack [bisectptr - 5 ])
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ];
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ];
if ( bisectstack [bisectptr - 2 ]> 0 )
bisectstack [bisectptr - 2 ]= 0 ;
}
bisectstack [bisectptr - 10 ]= mem [p + 6 ].cint - mem [p + 2 ].cint ;
bisectstack [bisectptr - 9 ]= mem [q + 4 ].cint - mem [p + 6 ].cint ;
bisectstack [bisectptr - 8 ]= mem [q + 2 ].cint - mem [q + 4 ].cint ;
if ( bisectstack [bisectptr - 10 ]< 0 )
if ( bisectstack [bisectptr - 8 ]>= 0 )
{
if ( bisectstack [bisectptr - 9 ]< 0 )
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ];
else bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ];
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ]+ bisectstack [bisectptr - 8 ];
if ( bisectstack [bisectptr - 6 ]< 0 )
bisectstack [bisectptr - 6 ]= 0 ;
}
else {
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ]+ bisectstack [bisectptr - 8 ];
if ( bisectstack [bisectptr - 7 ]> bisectstack [bisectptr - 10 ])
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ];
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ];
if ( bisectstack [bisectptr - 6 ]< 0 )
bisectstack [bisectptr - 6 ]= 0 ;
}
else if ( bisectstack [bisectptr - 8 ]<= 0 )
{
if ( bisectstack [bisectptr - 9 ]> 0 )
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ];
else bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ];
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ]+ bisectstack [bisectptr - 8 ];
if ( bisectstack [bisectptr - 7 ]> 0 )
bisectstack [bisectptr - 7 ]= 0 ;
}
else {
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ]+ bisectstack [bisectptr - 8 ];
if ( bisectstack [bisectptr - 6 ]< bisectstack [bisectptr - 10 ])
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ];
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ];
if ( bisectstack [bisectptr - 7 ]> 0 )
bisectstack [bisectptr - 7 ]= 0 ;
}
bisectstack [bisectptr - 15 ]= mem [pp + 5 ].cint - mem [pp + 1 ].cint
;
bisectstack [bisectptr - 14 ]= mem [qq + 3 ].cint - mem [pp + 5 ].cint
;
bisectstack [bisectptr - 13 ]= mem [qq + 1 ].cint - mem [qq + 3 ].cint
;
if ( bisectstack [bisectptr - 15 ]< 0 )
if ( bisectstack [bisectptr - 13 ]>= 0 )
{
if ( bisectstack [bisectptr - 14 ]< 0 )
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ];
else bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ];
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ]+ bisectstack [bisectptr - 13 ];
if ( bisectstack [bisectptr - 11 ]< 0 )
bisectstack [bisectptr - 11 ]= 0 ;
}
else {
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ]+ bisectstack [bisectptr - 13 ];
if ( bisectstack [bisectptr - 12 ]> bisectstack [bisectptr - 15 ])
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ];
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ];
if ( bisectstack [bisectptr - 11 ]< 0 )
bisectstack [bisectptr - 11 ]= 0 ;
}
else if ( bisectstack [bisectptr - 13 ]<= 0 )
{
if ( bisectstack [bisectptr - 14 ]> 0 )
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ];
else bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ];
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ]+ bisectstack [bisectptr - 13 ];
if ( bisectstack [bisectptr - 12 ]> 0 )
bisectstack [bisectptr - 12 ]= 0 ;
}
else {
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ]+ bisectstack [bisectptr - 13 ];
if ( bisectstack [bisectptr - 11 ]< bisectstack [bisectptr - 15 ])
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ];
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ];
if ( bisectstack [bisectptr - 12 ]> 0 )
bisectstack [bisectptr - 12 ]= 0 ;
}
bisectstack [bisectptr - 20 ]= mem [pp + 6 ].cint - mem [pp + 2 ].cint
;
bisectstack [bisectptr - 19 ]= mem [qq + 4 ].cint - mem [pp + 6 ].cint
;
bisectstack [bisectptr - 18 ]= mem [qq + 2 ].cint - mem [qq + 4 ].cint
;
if ( bisectstack [bisectptr - 20 ]< 0 )
if ( bisectstack [bisectptr - 18 ]>= 0 )
{
if ( bisectstack [bisectptr - 19 ]< 0 )
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ];
else bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ];
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ]+ bisectstack [bisectptr - 18 ];
if ( bisectstack [bisectptr - 16 ]< 0 )
bisectstack [bisectptr - 16 ]= 0 ;
}
else {
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ]+ bisectstack [bisectptr - 18 ];
if ( bisectstack [bisectptr - 17 ]> bisectstack [bisectptr - 20 ])
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ];
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ];
if ( bisectstack [bisectptr - 16 ]< 0 )
bisectstack [bisectptr - 16 ]= 0 ;
}
else if ( bisectstack [bisectptr - 18 ]<= 0 )
{
if ( bisectstack [bisectptr - 19 ]> 0 )
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ];
else bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ];
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ]+ bisectstack [bisectptr - 18 ];
if ( bisectstack [bisectptr - 17 ]> 0 )
bisectstack [bisectptr - 17 ]= 0 ;
}
else {
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ]+ bisectstack [bisectptr - 18 ];
if ( bisectstack [bisectptr - 16 ]< bisectstack [bisectptr - 20 ])
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ];
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ];
if ( bisectstack [bisectptr - 17 ]> 0 )
bisectstack [bisectptr - 17 ]= 0 ;
}
delx = mem [p + 1 ].cint - mem [pp + 1 ].cint ;
dely = mem [p + 2 ].cint - mem [pp + 2 ].cint ;
tol = 0 ;
uv = bisectptr ;
xy = bisectptr ;
threel = 0 ;
curt = 1 ;
curtt = 1 ;
while ( true ) {
lab22: if ( delx - tol <= bisectstack [xy - 11 ]- bisectstack [uv - 2 ]
)
if ( delx + tol >= bisectstack [xy - 12 ]- bisectstack [uv - 1 ])
if ( dely - tol <= bisectstack [xy - 16 ]- bisectstack [uv - 7 ])
if ( dely + tol >= bisectstack [xy - 17 ]- bisectstack [uv - 6 ])
{
if ( curt >= maxt )
{
if ( maxt == 131072L )
{
curt = halfp ( curt + 1 ) ;
curtt = halfp ( curtt + 1 ) ;
goto lab10 ;
}
maxt = maxt + maxt ;
apprt = curt ;
apprtt = curtt ;
}
bisectstack [bisectptr ]= delx ;
bisectstack [bisectptr + 1 ]= dely ;
bisectstack [bisectptr + 2 ]= tol ;
bisectstack [bisectptr + 3 ]= uv ;
bisectstack [bisectptr + 4 ]= xy ;
bisectptr = bisectptr + 45 ;
curt = curt + curt ;
curtt = curtt + curtt ;
bisectstack [bisectptr - 25 ]= bisectstack [uv - 5 ];
bisectstack [bisectptr - 3 ]= bisectstack [uv - 3 ];
bisectstack [bisectptr - 24 ]= half ( bisectstack [bisectptr - 25 ]+
bisectstack [uv - 4 ]) ;
bisectstack [bisectptr - 4 ]= half ( bisectstack [bisectptr - 3 ]+
bisectstack [uv - 4 ]) ;
bisectstack [bisectptr - 23 ]= half ( bisectstack [bisectptr - 24 ]+
bisectstack [bisectptr - 4 ]) ;
bisectstack [bisectptr - 5 ]= bisectstack [bisectptr - 23 ];
if ( bisectstack [bisectptr - 25 ]< 0 )
if ( bisectstack [bisectptr - 23 ]>= 0 )
{
if ( bisectstack [bisectptr - 24 ]< 0 )
bisectstack [bisectptr - 22 ]= bisectstack [bisectptr - 25 ]+
bisectstack [bisectptr - 24 ];
else bisectstack [bisectptr - 22 ]= bisectstack [bisectptr - 25 ];
bisectstack [bisectptr - 21 ]= bisectstack [bisectptr - 25 ]+
bisectstack [bisectptr - 24 ]+ bisectstack [bisectptr - 23 ];
if ( bisectstack [bisectptr - 21 ]< 0 )
bisectstack [bisectptr - 21 ]= 0 ;
}
else {
bisectstack [bisectptr - 22 ]= bisectstack [bisectptr - 25 ]+
bisectstack [bisectptr - 24 ]+ bisectstack [bisectptr - 23 ];
if ( bisectstack [bisectptr - 22 ]> bisectstack [bisectptr - 25 ])
bisectstack [bisectptr - 22 ]= bisectstack [bisectptr - 25 ];
bisectstack [bisectptr - 21 ]= bisectstack [bisectptr - 25 ]+
bisectstack [bisectptr - 24 ];
if ( bisectstack [bisectptr - 21 ]< 0 )
bisectstack [bisectptr - 21 ]= 0 ;
}
else if ( bisectstack [bisectptr - 23 ]<= 0 )
{
if ( bisectstack [bisectptr - 24 ]> 0 )
bisectstack [bisectptr - 21 ]= bisectstack [bisectptr - 25 ]+
bisectstack [bisectptr - 24 ];
else bisectstack [bisectptr - 21 ]= bisectstack [bisectptr - 25 ];
bisectstack [bisectptr - 22 ]= bisectstack [bisectptr - 25 ]+
bisectstack [bisectptr - 24 ]+ bisectstack [bisectptr - 23 ];
if ( bisectstack [bisectptr - 22 ]> 0 )
bisectstack [bisectptr - 22 ]= 0 ;
}
else {
bisectstack [bisectptr - 21 ]= bisectstack [bisectptr - 25 ]+
bisectstack [bisectptr - 24 ]+ bisectstack [bisectptr - 23 ];
if ( bisectstack [bisectptr - 21 ]< bisectstack [bisectptr - 25 ])
bisectstack [bisectptr - 21 ]= bisectstack [bisectptr - 25 ];
bisectstack [bisectptr - 22 ]= bisectstack [bisectptr - 25 ]+
bisectstack [bisectptr - 24 ];
if ( bisectstack [bisectptr - 22 ]> 0 )
bisectstack [bisectptr - 22 ]= 0 ;
}
if ( bisectstack [bisectptr - 5 ]< 0 )
if ( bisectstack [bisectptr - 3 ]>= 0 )
{
if ( bisectstack [bisectptr - 4 ]< 0 )
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ];
else bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ];
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ]+ bisectstack [bisectptr - 3 ];
if ( bisectstack [bisectptr - 1 ]< 0 )
bisectstack [bisectptr - 1 ]= 0 ;
}
else {
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ]+ bisectstack [bisectptr - 3 ];
if ( bisectstack [bisectptr - 2 ]> bisectstack [bisectptr - 5 ])
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ];
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ];
if ( bisectstack [bisectptr - 1 ]< 0 )
bisectstack [bisectptr - 1 ]= 0 ;
}
else if ( bisectstack [bisectptr - 3 ]<= 0 )
{
if ( bisectstack [bisectptr - 4 ]> 0 )
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ];
else bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ];
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ]+ bisectstack [bisectptr - 3 ];
if ( bisectstack [bisectptr - 2 ]> 0 )
bisectstack [bisectptr - 2 ]= 0 ;
}
else {
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ]+ bisectstack [bisectptr - 3 ];
if ( bisectstack [bisectptr - 1 ]< bisectstack [bisectptr - 5 ])
bisectstack [bisectptr - 1 ]= bisectstack [bisectptr - 5 ];
bisectstack [bisectptr - 2 ]= bisectstack [bisectptr - 5 ]+
bisectstack [bisectptr - 4 ];
if ( bisectstack [bisectptr - 2 ]> 0 )
bisectstack [bisectptr - 2 ]= 0 ;
}
bisectstack [bisectptr - 30 ]= bisectstack [uv - 10 ];
bisectstack [bisectptr - 8 ]= bisectstack [uv - 8 ];
bisectstack [bisectptr - 29 ]= half ( bisectstack [bisectptr - 30 ]+
bisectstack [uv - 9 ]) ;
bisectstack [bisectptr - 9 ]= half ( bisectstack [bisectptr - 8 ]+
bisectstack [uv - 9 ]) ;
bisectstack [bisectptr - 28 ]= half ( bisectstack [bisectptr - 29 ]+
bisectstack [bisectptr - 9 ]) ;
bisectstack [bisectptr - 10 ]= bisectstack [bisectptr - 28 ];
if ( bisectstack [bisectptr - 30 ]< 0 )
if ( bisectstack [bisectptr - 28 ]>= 0 )
{
if ( bisectstack [bisectptr - 29 ]< 0 )
bisectstack [bisectptr - 27 ]= bisectstack [bisectptr - 30 ]+
bisectstack [bisectptr - 29 ];
else bisectstack [bisectptr - 27 ]= bisectstack [bisectptr - 30 ];
bisectstack [bisectptr - 26 ]= bisectstack [bisectptr - 30 ]+
bisectstack [bisectptr - 29 ]+ bisectstack [bisectptr - 28 ];
if ( bisectstack [bisectptr - 26 ]< 0 )
bisectstack [bisectptr - 26 ]= 0 ;
}
else {
bisectstack [bisectptr - 27 ]= bisectstack [bisectptr - 30 ]+
bisectstack [bisectptr - 29 ]+ bisectstack [bisectptr - 28 ];
if ( bisectstack [bisectptr - 27 ]> bisectstack [bisectptr - 30 ])
bisectstack [bisectptr - 27 ]= bisectstack [bisectptr - 30 ];
bisectstack [bisectptr - 26 ]= bisectstack [bisectptr - 30 ]+
bisectstack [bisectptr - 29 ];
if ( bisectstack [bisectptr - 26 ]< 0 )
bisectstack [bisectptr - 26 ]= 0 ;
}
else if ( bisectstack [bisectptr - 28 ]<= 0 )
{
if ( bisectstack [bisectptr - 29 ]> 0 )
bisectstack [bisectptr - 26 ]= bisectstack [bisectptr - 30 ]+
bisectstack [bisectptr - 29 ];
else bisectstack [bisectptr - 26 ]= bisectstack [bisectptr - 30 ];
bisectstack [bisectptr - 27 ]= bisectstack [bisectptr - 30 ]+
bisectstack [bisectptr - 29 ]+ bisectstack [bisectptr - 28 ];
if ( bisectstack [bisectptr - 27 ]> 0 )
bisectstack [bisectptr - 27 ]= 0 ;
}
else {
bisectstack [bisectptr - 26 ]= bisectstack [bisectptr - 30 ]+
bisectstack [bisectptr - 29 ]+ bisectstack [bisectptr - 28 ];
if ( bisectstack [bisectptr - 26 ]< bisectstack [bisectptr - 30 ])
bisectstack [bisectptr - 26 ]= bisectstack [bisectptr - 30 ];
bisectstack [bisectptr - 27 ]= bisectstack [bisectptr - 30 ]+
bisectstack [bisectptr - 29 ];
if ( bisectstack [bisectptr - 27 ]> 0 )
bisectstack [bisectptr - 27 ]= 0 ;
}
if ( bisectstack [bisectptr - 10 ]< 0 )
if ( bisectstack [bisectptr - 8 ]>= 0 )
{
if ( bisectstack [bisectptr - 9 ]< 0 )
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ];
else bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ];
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ]+ bisectstack [bisectptr - 8 ];
if ( bisectstack [bisectptr - 6 ]< 0 )
bisectstack [bisectptr - 6 ]= 0 ;
}
else {
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ]+ bisectstack [bisectptr - 8 ];
if ( bisectstack [bisectptr - 7 ]> bisectstack [bisectptr - 10 ])
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ];
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ];
if ( bisectstack [bisectptr - 6 ]< 0 )
bisectstack [bisectptr - 6 ]= 0 ;
}
else if ( bisectstack [bisectptr - 8 ]<= 0 )
{
if ( bisectstack [bisectptr - 9 ]> 0 )
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ];
else bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ];
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ]+ bisectstack [bisectptr - 8 ];
if ( bisectstack [bisectptr - 7 ]> 0 )
bisectstack [bisectptr - 7 ]= 0 ;
}
else {
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ]+ bisectstack [bisectptr - 8 ];
if ( bisectstack [bisectptr - 6 ]< bisectstack [bisectptr - 10 ])
bisectstack [bisectptr - 6 ]= bisectstack [bisectptr - 10 ];
bisectstack [bisectptr - 7 ]= bisectstack [bisectptr - 10 ]+
bisectstack [bisectptr - 9 ];
if ( bisectstack [bisectptr - 7 ]> 0 )
bisectstack [bisectptr - 7 ]= 0 ;
}
bisectstack [bisectptr - 35 ]= bisectstack [xy - 15 ];
bisectstack [bisectptr - 13 ]= bisectstack [xy - 13 ];
bisectstack [bisectptr - 34 ]= half ( bisectstack [bisectptr - 35 ]+
bisectstack [xy - 14 ]) ;
bisectstack [bisectptr - 14 ]= half ( bisectstack [bisectptr - 13 ]+
bisectstack [xy - 14 ]) ;
bisectstack [bisectptr - 33 ]= half ( bisectstack [bisectptr - 34 ]+
bisectstack [bisectptr - 14 ]) ;
bisectstack [bisectptr - 15 ]= bisectstack [bisectptr - 33 ];
if ( bisectstack [bisectptr - 35 ]< 0 )
if ( bisectstack [bisectptr - 33 ]>= 0 )
{
if ( bisectstack [bisectptr - 34 ]< 0 )
bisectstack [bisectptr - 32 ]= bisectstack [bisectptr - 35 ]+
bisectstack [bisectptr - 34 ];
else bisectstack [bisectptr - 32 ]= bisectstack [bisectptr - 35 ];
bisectstack [bisectptr - 31 ]= bisectstack [bisectptr - 35 ]+
bisectstack [bisectptr - 34 ]+ bisectstack [bisectptr - 33 ];
if ( bisectstack [bisectptr - 31 ]< 0 )
bisectstack [bisectptr - 31 ]= 0 ;
}
else {
bisectstack [bisectptr - 32 ]= bisectstack [bisectptr - 35 ]+
bisectstack [bisectptr - 34 ]+ bisectstack [bisectptr - 33 ];
if ( bisectstack [bisectptr - 32 ]> bisectstack [bisectptr - 35 ])
bisectstack [bisectptr - 32 ]= bisectstack [bisectptr - 35 ];
bisectstack [bisectptr - 31 ]= bisectstack [bisectptr - 35 ]+
bisectstack [bisectptr - 34 ];
if ( bisectstack [bisectptr - 31 ]< 0 )
bisectstack [bisectptr - 31 ]= 0 ;
}
else if ( bisectstack [bisectptr - 33 ]<= 0 )
{
if ( bisectstack [bisectptr - 34 ]> 0 )
bisectstack [bisectptr - 31 ]= bisectstack [bisectptr - 35 ]+
bisectstack [bisectptr - 34 ];
else bisectstack [bisectptr - 31 ]= bisectstack [bisectptr - 35 ];
bisectstack [bisectptr - 32 ]= bisectstack [bisectptr - 35 ]+
bisectstack [bisectptr - 34 ]+ bisectstack [bisectptr - 33 ];
if ( bisectstack [bisectptr - 32 ]> 0 )
bisectstack [bisectptr - 32 ]= 0 ;
}
else {
bisectstack [bisectptr - 31 ]= bisectstack [bisectptr - 35 ]+
bisectstack [bisectptr - 34 ]+ bisectstack [bisectptr - 33 ];
if ( bisectstack [bisectptr - 31 ]< bisectstack [bisectptr - 35 ])
bisectstack [bisectptr - 31 ]= bisectstack [bisectptr - 35 ];
bisectstack [bisectptr - 32 ]= bisectstack [bisectptr - 35 ]+
bisectstack [bisectptr - 34 ];
if ( bisectstack [bisectptr - 32 ]> 0 )
bisectstack [bisectptr - 32 ]= 0 ;
}
if ( bisectstack [bisectptr - 15 ]< 0 )
if ( bisectstack [bisectptr - 13 ]>= 0 )
{
if ( bisectstack [bisectptr - 14 ]< 0 )
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ];
else bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ];
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ]+ bisectstack [bisectptr - 13 ];
if ( bisectstack [bisectptr - 11 ]< 0 )
bisectstack [bisectptr - 11 ]= 0 ;
}
else {
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ]+ bisectstack [bisectptr - 13 ];
if ( bisectstack [bisectptr - 12 ]> bisectstack [bisectptr - 15 ])
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ];
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ];
if ( bisectstack [bisectptr - 11 ]< 0 )
bisectstack [bisectptr - 11 ]= 0 ;
}
else if ( bisectstack [bisectptr - 13 ]<= 0 )
{
if ( bisectstack [bisectptr - 14 ]> 0 )
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ];
else bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ];
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ]+ bisectstack [bisectptr - 13 ];
if ( bisectstack [bisectptr - 12 ]> 0 )
bisectstack [bisectptr - 12 ]= 0 ;
}
else {
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ]+ bisectstack [bisectptr - 13 ];
if ( bisectstack [bisectptr - 11 ]< bisectstack [bisectptr - 15 ])
bisectstack [bisectptr - 11 ]= bisectstack [bisectptr - 15 ];
bisectstack [bisectptr - 12 ]= bisectstack [bisectptr - 15 ]+
bisectstack [bisectptr - 14 ];
if ( bisectstack [bisectptr - 12 ]> 0 )
bisectstack [bisectptr - 12 ]= 0 ;
}
bisectstack [bisectptr - 40 ]= bisectstack [xy - 20 ];
bisectstack [bisectptr - 18 ]= bisectstack [xy - 18 ];
bisectstack [bisectptr - 39 ]= half ( bisectstack [bisectptr - 40 ]+
bisectstack [xy - 19 ]) ;
bisectstack [bisectptr - 19 ]= half ( bisectstack [bisectptr - 18 ]+
bisectstack [xy - 19 ]) ;
bisectstack [bisectptr - 38 ]= half ( bisectstack [bisectptr - 39 ]+
bisectstack [bisectptr - 19 ]) ;
bisectstack [bisectptr - 20 ]= bisectstack [bisectptr - 38 ];
if ( bisectstack [bisectptr - 40 ]< 0 )
if ( bisectstack [bisectptr - 38 ]>= 0 )
{
if ( bisectstack [bisectptr - 39 ]< 0 )
bisectstack [bisectptr - 37 ]= bisectstack [bisectptr - 40 ]+
bisectstack [bisectptr - 39 ];
else bisectstack [bisectptr - 37 ]= bisectstack [bisectptr - 40 ];
bisectstack [bisectptr - 36 ]= bisectstack [bisectptr - 40 ]+
bisectstack [bisectptr - 39 ]+ bisectstack [bisectptr - 38 ];
if ( bisectstack [bisectptr - 36 ]< 0 )
bisectstack [bisectptr - 36 ]= 0 ;
}
else {
bisectstack [bisectptr - 37 ]= bisectstack [bisectptr - 40 ]+
bisectstack [bisectptr - 39 ]+ bisectstack [bisectptr - 38 ];
if ( bisectstack [bisectptr - 37 ]> bisectstack [bisectptr - 40 ])
bisectstack [bisectptr - 37 ]= bisectstack [bisectptr - 40 ];
bisectstack [bisectptr - 36 ]= bisectstack [bisectptr - 40 ]+
bisectstack [bisectptr - 39 ];
if ( bisectstack [bisectptr - 36 ]< 0 )
bisectstack [bisectptr - 36 ]= 0 ;
}
else if ( bisectstack [bisectptr - 38 ]<= 0 )
{
if ( bisectstack [bisectptr - 39 ]> 0 )
bisectstack [bisectptr - 36 ]= bisectstack [bisectptr - 40 ]+
bisectstack [bisectptr - 39 ];
else bisectstack [bisectptr - 36 ]= bisectstack [bisectptr - 40 ];
bisectstack [bisectptr - 37 ]= bisectstack [bisectptr - 40 ]+
bisectstack [bisectptr - 39 ]+ bisectstack [bisectptr - 38 ];
if ( bisectstack [bisectptr - 37 ]> 0 )
bisectstack [bisectptr - 37 ]= 0 ;
}
else {
bisectstack [bisectptr - 36 ]= bisectstack [bisectptr - 40 ]+
bisectstack [bisectptr - 39 ]+ bisectstack [bisectptr - 38 ];
if ( bisectstack [bisectptr - 36 ]< bisectstack [bisectptr - 40 ])
bisectstack [bisectptr - 36 ]= bisectstack [bisectptr - 40 ];
bisectstack [bisectptr - 37 ]= bisectstack [bisectptr - 40 ]+
bisectstack [bisectptr - 39 ];
if ( bisectstack [bisectptr - 37 ]> 0 )
bisectstack [bisectptr - 37 ]= 0 ;
}
if ( bisectstack [bisectptr - 20 ]< 0 )
if ( bisectstack [bisectptr - 18 ]>= 0 )
{
if ( bisectstack [bisectptr - 19 ]< 0 )
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ];
else bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ];
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ]+ bisectstack [bisectptr - 18 ];
if ( bisectstack [bisectptr - 16 ]< 0 )
bisectstack [bisectptr - 16 ]= 0 ;
}
else {
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ]+ bisectstack [bisectptr - 18 ];
if ( bisectstack [bisectptr - 17 ]> bisectstack [bisectptr - 20 ])
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ];
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ];
if ( bisectstack [bisectptr - 16 ]< 0 )
bisectstack [bisectptr - 16 ]= 0 ;
}
else if ( bisectstack [bisectptr - 18 ]<= 0 )
{
if ( bisectstack [bisectptr - 19 ]> 0 )
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ];
else bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ];
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ]+ bisectstack [bisectptr - 18 ];
if ( bisectstack [bisectptr - 17 ]> 0 )
bisectstack [bisectptr - 17 ]= 0 ;
}
else {
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ]+ bisectstack [bisectptr - 18 ];
if ( bisectstack [bisectptr - 16 ]< bisectstack [bisectptr - 20 ])
bisectstack [bisectptr - 16 ]= bisectstack [bisectptr - 20 ];
bisectstack [bisectptr - 17 ]= bisectstack [bisectptr - 20 ]+
bisectstack [bisectptr - 19 ];
if ( bisectstack [bisectptr - 17 ]> 0 )
bisectstack [bisectptr - 17 ]= 0 ;
}
uv = bisectptr - 20 ;
xy = bisectptr - 20 ;
delx = delx + delx ;
dely = dely + dely ;
tol = tol - threel + tolstep ;
tol = tol + tol ;
threel = threel + tolstep ;
goto lab22 ;
}
if ( timetogo > 0 )
decr ( timetogo ) ;
else {
while ( apprt < 65536L ) {
apprt = apprt + apprt ;
apprtt = apprtt + apprtt ;
}
curt = apprt ;
curtt = apprtt ;
goto lab10 ;
}
lab45: if ( odd ( curtt ) )
if ( odd ( curt ) )
{
curt = halfp ( curt ) ;
curtt = halfp ( curtt ) ;
if ( curt == 0 )
goto lab10 ;
bisectptr = bisectptr - 45 ;
threel = threel - tolstep ;
delx = bisectstack [bisectptr ];
dely = bisectstack [bisectptr + 1 ];
tol = bisectstack [bisectptr + 2 ];
uv = bisectstack [bisectptr + 3 ];
xy = bisectstack [bisectptr + 4 ];
goto lab45 ;
}
else {
incr ( curt ) ;
delx = delx + bisectstack [uv - 5 ]+ bisectstack [uv - 4 ]+
bisectstack [uv - 3 ];
dely = dely + bisectstack [uv - 10 ]+ bisectstack [uv - 9 ]+
bisectstack [uv - 8 ];
uv = uv + 20 ;
decr ( curtt ) ;
xy = xy - 20 ;
delx = delx + bisectstack [xy - 15 ]+ bisectstack [xy - 14 ]+
bisectstack [xy - 13 ];
dely = dely + bisectstack [xy - 20 ]+ bisectstack [xy - 19 ]+
bisectstack [xy - 18 ];
}
else {
incr ( curtt ) ;
tol = tol + threel ;
delx = delx - bisectstack [xy - 15 ]- bisectstack [xy - 14 ]-
bisectstack [xy - 13 ];
dely = dely - bisectstack [xy - 20 ]- bisectstack [xy - 19 ]-
bisectstack [xy - 18 ];
xy = xy + 20 ;
}
}
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zpathintersection ( halfword h , halfword hh )
#else
zpathintersection ( h , hh )
halfword h ;
halfword hh ;
#endif
{
/* 10 */ halfword p, pp ;
integer n, nn ;
if ( mem [h ].hhfield .b1 == 0 )
{
mem [h + 5 ].cint = mem [h + 1 ].cint ;
mem [h + 3 ].cint = mem [h + 1 ].cint ;
mem [h + 6 ].cint = mem [h + 2 ].cint ;
mem [h + 4 ].cint = mem [h + 2 ].cint ;
mem [h ].hhfield .b1 = 1 ;
}
if ( mem [hh ].hhfield .b1 == 0 )
{
mem [hh + 5 ].cint = mem [hh + 1 ].cint ;
mem [hh + 3 ].cint = mem [hh + 1 ].cint ;
mem [hh + 6 ].cint = mem [hh + 2 ].cint ;
mem [hh + 4 ].cint = mem [hh + 2 ].cint ;
mem [hh ].hhfield .b1 = 1 ;
}
tolstep = 0 ;
do {
n = -65536L ;
p = h ;
do {
if ( mem [p ].hhfield .b1 != 0 )
{
nn = -65536L ;
pp = hh ;
do {
if ( mem [pp ].hhfield .b1 != 0 )
{
cubicintersection ( p , pp ) ;
if ( curt > 0 )
{
curt = curt + n ;
curtt = curtt + nn ;
goto lab10 ;
}
}
nn = nn + 65536L ;
pp = mem [pp ].hhfield .v.RH ;
} while ( ! ( pp == hh ) ) ;
}
n = n + 65536L ;
p = mem [p ].hhfield .v.RH ;
} while ( ! ( p == h ) ) ;
tolstep = tolstep + 3 ;
} while ( ! ( tolstep > 3 ) ) ;
curt = -65536L ;
curtt = -65536L ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zopenawindow ( windownumber k , scaled r0 , scaled c0 , scaled r1 , scaled c1
, scaled x , scaled y )
#else
zopenawindow ( k , r0 , c0 , r1 , c1 , x , y )
windownumber k ;
scaled r0 ;
scaled c0 ;
scaled r1 ;
scaled c1 ;
scaled x ;
scaled y ;
#endif
{
integer m, n ;
if ( r0 < 0 )
r0 = 0 ;
else r0 = roundunscaled ( r0 ) ;
r1 = roundunscaled ( r1 ) ;
if ( r1 > screendepth )
r1 = screendepth ;
if ( r1 < r0 )
if ( r0 > screendepth )
r0 = r1 ;
else r1 = r0 ;
if ( c0 < 0 )
c0 = 0 ;
else c0 = roundunscaled ( c0 ) ;
c1 = roundunscaled ( c1 ) ;
if ( c1 > screenwidth )
c1 = screenwidth ;
if ( c1 < c0 )
if ( c0 > screenwidth )
c0 = c1 ;
else c1 = c0 ;
windowopen [k ]= true ;
incr ( windowtime [k ]) ;
leftcol [k ]= c0 ;
rightcol [k ]= c1 ;
toprow [k ]= r0 ;
botrow [k ]= r1 ;
m = roundunscaled ( x ) ;
n = roundunscaled ( y ) - 1 ;
mwindow [k ]= c0 - m ;
nwindow [k ]= r0 + n ;
{
if ( ! screenstarted )
{
screenOK = initscreen () ;
screenstarted = true ;
}
}
if ( screenOK )
{
blankrectangle ( c0 , c1 , r0 , r1 ) ;
updatescreen () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zdispedges ( windownumber k )
#else
zdispedges ( k )
windownumber k ;
#endif
{
/* 30 40 */ halfword p, q ;
boolean alreadythere ;
integer r ;
screencol n ;
integer w, ww ;
pixelcolor b ;
integer m, mm ;
integer d ;
integer madjustment ;
integer rightedge ;
screencol mincol ;
if ( screenOK )
if ( leftcol [k ]< rightcol [k ])
if ( toprow [k ]< botrow [k ])
{
alreadythere = false ;
if ( mem [curedges + 3 ].hhfield .v.RH == k )
if ( mem [curedges + 4 ].cint == windowtime [k ])
alreadythere = true ;
if ( ! alreadythere )
blankrectangle ( leftcol [k ], rightcol [k ], toprow [k ], botrow [
k ]) ;
madjustment = mwindow [k ]- mem [curedges + 3 ].hhfield .lhfield ;
rightedge = 8 * ( rightcol [k ]- madjustment ) ;
mincol = leftcol [k ];
p = mem [curedges ].hhfield .v.RH ;
r = nwindow [k ]- ( mem [curedges + 1 ].hhfield .lhfield - 4096 ) ;
while ( ( p != curedges ) && ( r >= toprow [k ]) ) {
if ( r < botrow [k ])
{
if ( mem [p + 1 ].hhfield .lhfield > 1 )
sortedges ( p ) ;
else if ( mem [p + 1 ].hhfield .lhfield == 1 )
if ( alreadythere )
goto lab30 ;
mem [p + 1 ].hhfield .lhfield = 1 ;
n = 0 ;
ww = 0 ;
m = -1 ;
w = 0 ;
q = mem [p + 1 ].hhfield .v.RH ;
rowtransition [0 ]= mincol ;
while ( true ) {
if ( q == memtop )
d = rightedge ;
else d = mem [q ].hhfield .lhfield ;
mm = ( d / 8 ) + madjustment ;
if ( mm != m )
{
if ( w <= 0 )
{
if ( ww > 0 )
if ( m > mincol )
{
if ( n == 0 )
if ( alreadythere )
{
b = 0 ;
incr ( n ) ;
}
else b = 1 ;
else incr ( n ) ;
rowtransition [n ]= m ;
}
}
else if ( ww <= 0 )
if ( m > mincol )
{
if ( n == 0 )
b = 1 ;
incr ( n ) ;
rowtransition [n ]= m ;
}
m = mm ;
w = ww ;
}
if ( d >= rightedge )
goto lab40 ;
ww = ww + ( d % 8 ) - 4 ;
q = mem [q ].hhfield .v.RH ;
}
lab40: if ( alreadythere || ( ww > 0 ) )
{
if ( n == 0 )
if ( ww > 0 )
b = 1 ;
else b = 0 ;
incr ( n ) ;
rowtransition [n ]= rightcol [k ];
}
else if ( n == 0 )
goto lab30 ;
paintrow ( r , b , rowtransition , n ) ;
lab30: ;
}
p = mem [p ].hhfield .v.RH ;
decr ( r ) ;
}
updatescreen () ;
incr ( windowtime [k ]) ;
mem [curedges + 3 ].hhfield .v.RH = k ;
mem [curedges + 4 ].cint = windowtime [k ];
}
}
fraction
#ifdef HAVE_PROTOTYPES
zmaxcoef ( halfword p )
#else
zmaxcoef ( p )
halfword p ;
#endif
{
register fraction Result; fraction x ;
x = 0 ;
while ( mem [p ].hhfield .lhfield != 0 ) {
if ( abs ( mem [p + 1 ].cint ) > x )
x = abs ( mem [p + 1 ].cint ) ;
p = mem [p ].hhfield .v.RH ;
}
Result = x ;
return Result ;
}
halfword
#ifdef HAVE_PROTOTYPES
zpplusq ( halfword p , halfword q , smallnumber t )
#else
zpplusq ( p , q , t )
halfword p ;
halfword q ;
smallnumber t ;
#endif
{
/* 30 */ register halfword Result; halfword pp, qq ;
halfword r, s ;
integer threshold ;
integer v ;
if ( t == 17 )
threshold = 2685 ;
else threshold = 8 ;
r = memtop - 1 ;
pp = mem [p ].hhfield .lhfield ;
qq = mem [q ].hhfield .lhfield ;
while ( true ) if ( pp == qq )
if ( pp == 0 )
goto lab30 ;
else {
v = mem [p + 1 ].cint + mem [q + 1 ].cint ;
mem [p + 1 ].cint = v ;
s = p ;
p = mem [p ].hhfield .v.RH ;
pp = mem [p ].hhfield .lhfield ;
if ( abs ( v ) < threshold )
freenode ( s , 2 ) ;
else {
if ( abs ( v ) >= 626349397L )
if ( watchcoefs )
{
mem [qq ].hhfield .b0 = 0 ;
fixneeded = true ;
}
mem [r ].hhfield .v.RH = s ;
r = s ;
}
q = mem [q ].hhfield .v.RH ;
qq = mem [q ].hhfield .lhfield ;
}
else if ( mem [pp + 1 ].cint < mem [qq + 1 ].cint )
{
s = getnode ( 2 ) ;
mem [s ].hhfield .lhfield = qq ;
mem [s + 1 ].cint = mem [q + 1 ].cint ;
q = mem [q ].hhfield .v.RH ;
qq = mem [q ].hhfield .lhfield ;
mem [r ].hhfield .v.RH = s ;
r = s ;
}
else {
mem [r ].hhfield .v.RH = p ;
r = p ;
p = mem [p ].hhfield .v.RH ;
pp = mem [p ].hhfield .lhfield ;
}
lab30: mem [p + 1 ].cint = slowadd ( mem [p + 1 ].cint , mem [q + 1 ]
.cint ) ;
mem [r ].hhfield .v.RH = p ;
depfinal = p ;
Result = mem [memtop - 1 ].hhfield .v.RH ;
return Result ;
}
halfword
#ifdef HAVE_PROTOTYPES
zptimesv ( halfword p , integer v , smallnumber t0 , smallnumber t1 , boolean
visscaled )
#else
zptimesv ( p , v , t0 , t1 , visscaled )
halfword p ;
integer v ;
smallnumber t0 ;
smallnumber t1 ;
boolean visscaled ;
#endif
{
register halfword Result; halfword r, s ;
integer w ;
integer threshold ;
boolean scalingdown ;
if ( t0 != t1 )
scalingdown = true ;
else scalingdown = ! visscaled ;
if ( t1 == 17 )
threshold = 1342 ;
else threshold = 4 ;
r = memtop - 1 ;
while ( mem [p ].hhfield .lhfield != 0 ) {
if ( scalingdown )
w = takefraction ( v , mem [p + 1 ].cint ) ;
else w = takescaled ( v , mem [p + 1 ].cint ) ;
if ( abs ( w ) <= threshold )
{
s = mem [p ].hhfield .v.RH ;
freenode ( p , 2 ) ;
p = s ;
}
else {
if ( abs ( w ) >= 626349397L )
{
fixneeded = true ;
mem [mem [p ].hhfield .lhfield ].hhfield .b0 = 0 ;
}
mem [r ].hhfield .v.RH = p ;
r = p ;
mem [p + 1 ].cint = w ;
p = mem [p ].hhfield .v.RH ;
}
}
mem [r ].hhfield .v.RH = p ;
if ( visscaled )
mem [p + 1 ].cint = takescaled ( mem [p + 1 ].cint , v ) ;
else mem [p + 1 ].cint = takefraction ( mem [p + 1 ].cint , v ) ;
Result = mem [memtop - 1 ].hhfield .v.RH ;
return Result ;
}
halfword
#ifdef HAVE_PROTOTYPES
zpwithxbecomingq ( halfword p , halfword x , halfword q , smallnumber t )
#else
zpwithxbecomingq ( p , x , q , t )
halfword p ;
halfword x ;
halfword q ;
smallnumber t ;
#endif
{
register halfword Result; halfword r, s ;
integer v ;
integer sx ;
s = p ;
r = memtop - 1 ;
sx = mem [x + 1 ].cint ;
while ( mem [mem [s ].hhfield .lhfield + 1 ].cint > sx ) {
r = s ;
s = mem [s ].hhfield .v.RH ;
}
if ( mem [s ].hhfield .lhfield != x )
Result = p ;
else {
mem [memtop - 1 ].hhfield .v.RH = p ;
mem [r ].hhfield .v.RH = mem [s ].hhfield .v.RH ;
v = mem [s + 1 ].cint ;
freenode ( s , 2 ) ;
Result = pplusfq ( mem [memtop - 1 ].hhfield .v.RH , v , q , t , 17 ) ;
}
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
znewdep ( halfword q , halfword p )
#else
znewdep ( q , p )
halfword q ;
halfword p ;
#endif
{
halfword r ;
mem [q + 1 ].hhfield .v.RH = p ;
mem [q + 1 ].hhfield .lhfield = 13 ;
r = mem [13 ].hhfield .v.RH ;
mem [depfinal ].hhfield .v.RH = r ;
mem [r + 1 ].hhfield .lhfield = depfinal ;
mem [13 ].hhfield .v.RH = q ;
}
halfword
#ifdef HAVE_PROTOTYPES
zconstdependency ( scaled v )
#else
zconstdependency ( v )
scaled v ;
#endif
{
register halfword Result; depfinal = getnode ( 2 ) ;
mem [depfinal + 1 ].cint = v ;
mem [depfinal ].hhfield .lhfield = 0 ;
Result = depfinal ;
return Result ;
}
halfword
#ifdef HAVE_PROTOTYPES
zsingledependency ( halfword p )
#else
zsingledependency ( p )
halfword p ;
#endif
{
register halfword Result; halfword q ;
integer m ;
m = mem [p + 1 ].cint % 64 ;
if ( m > 28 )
Result = constdependency ( 0 ) ;
else {
q = getnode ( 2 ) ;
mem [q + 1 ].cint = twotothe [28 - m ];
mem [q ].hhfield .lhfield = p ;
mem [q ].hhfield .v.RH = constdependency ( 0 ) ;
Result = q ;
}
return Result ;
}
halfword
#ifdef HAVE_PROTOTYPES
zcopydeplist ( halfword p )
#else
zcopydeplist ( p )
halfword p ;
#endif
{
/* 30 */ register halfword Result; halfword q ;
q = getnode ( 2 ) ;
depfinal = q ;
while ( true ) {
mem [depfinal ].hhfield .lhfield = mem [p ].hhfield .lhfield ;
mem [depfinal + 1 ].cint = mem [p + 1 ].cint ;
if ( mem [depfinal ].hhfield .lhfield == 0 )
goto lab30 ;
mem [depfinal ].hhfield .v.RH = getnode ( 2 ) ;
depfinal = mem [depfinal ].hhfield .v.RH ;
p = mem [p ].hhfield .v.RH ;
}
lab30: Result = q ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zlineareq ( halfword p , smallnumber t )
#else
zlineareq ( p , t )
halfword p ;
smallnumber t ;
#endif
{
halfword q, r, s ;
halfword x ;
integer n ;
integer v ;
halfword prevr ;
halfword finalnode ;
integer w ;
q = p ;
r = mem [p ].hhfield .v.RH ;
v = mem [q + 1 ].cint ;
while ( mem [r ].hhfield .lhfield != 0 ) {
if ( abs ( mem [r + 1 ].cint ) > abs ( v ) )
{
q = r ;
v = mem [r + 1 ].cint ;
}
r = mem [r ].hhfield .v.RH ;
}
x = mem [q ].hhfield .lhfield ;
n = mem [x + 1 ].cint % 64 ;
s = memtop - 1 ;
mem [s ].hhfield .v.RH = p ;
r = p ;
do {
if ( r == q )
{
mem [s ].hhfield .v.RH = mem [r ].hhfield .v.RH ;
freenode ( r , 2 ) ;
}
else {
w = makefraction ( mem [r + 1 ].cint , v ) ;
if ( abs ( w ) <= 1342 )
{
mem [s ].hhfield .v.RH = mem [r ].hhfield .v.RH ;
freenode ( r , 2 ) ;
}
else {
mem [r + 1 ].cint = - (integer) w ;
s = r ;
}
}
r = mem [s ].hhfield .v.RH ;
} while ( ! ( mem [r ].hhfield .lhfield == 0 ) ) ;
if ( t == 18 )
mem [r + 1 ].cint = - (integer) makescaled ( mem [r + 1 ].cint , v ) ;
else if ( v != -268435456L )
mem [r + 1 ].cint = - (integer) makefraction ( mem [r + 1 ].cint , v ) ;
finalnode = r ;
p = mem [memtop - 1 ].hhfield .v.RH ;
if ( internal [2 ]> 0 )
if ( interesting ( x ) )
{
begindiagnostic () ;
printnl ( 594 ) ;
printvariablename ( x ) ;
w = n ;
while ( w > 0 ) {
print ( 587 ) ;
w = w - 2 ;
}
printchar ( 61 ) ;
printdependency ( p , 17 ) ;
enddiagnostic ( false ) ;
}
prevr = 13 ;
r = mem [13 ].hhfield .v.RH ;
while ( r != 13 ) {
s = mem [r + 1 ].hhfield .v.RH ;
q = pwithxbecomingq ( s , x , p , mem [r ].hhfield .b0 ) ;
if ( mem [q ].hhfield .lhfield == 0 )
makeknown ( r , q ) ;
else {
mem [r + 1 ].hhfield .v.RH = q ;
do {
q = mem [q ].hhfield .v.RH ;
} while ( ! ( mem [q ].hhfield .lhfield == 0 ) ) ;
prevr = q ;
}
r = mem [prevr ].hhfield .v.RH ;
}
if ( n > 0 )
{
s = memtop - 1 ;
mem [memtop - 1 ].hhfield .v.RH = p ;
r = p ;
do {
if ( n > 30 )
w = 0 ;
else w = mem [r + 1 ].cint / twotothe [n ];
if ( ( abs ( w ) <= 1342 ) && ( mem [r ].hhfield .lhfield != 0 ) )
{
mem [s ].hhfield .v.RH = mem [r ].hhfield .v.RH ;
freenode ( r , 2 ) ;
}
else {
mem [r + 1 ].cint = w ;
s = r ;
}
r = mem [s ].hhfield .v.RH ;
} while ( ! ( mem [s ].hhfield .lhfield == 0 ) ) ;
p = mem [memtop - 1 ].hhfield .v.RH ;
}
if ( mem [p ].hhfield .lhfield == 0 )
{
mem [x ].hhfield .b0 = 16 ;
mem [x + 1 ].cint = mem [p + 1 ].cint ;
if ( abs ( mem [x + 1 ].cint ) >= 268435456L )
valtoobig ( mem [x + 1 ].cint ) ;
freenode ( p , 2 ) ;
if ( curexp == x )
if ( curtype == 19 )
{
curexp = mem [x + 1 ].cint ;
curtype = 16 ;
freenode ( x , 2 ) ;
}
}
else {
mem [x ].hhfield .b0 = 17 ;
depfinal = finalnode ;
newdep ( x , p ) ;
if ( curexp == x )
if ( curtype == 19 )
curtype = 17 ;
}
if ( fixneeded )
fixdependencies () ;
}
halfword
#ifdef HAVE_PROTOTYPES
znewringentry ( halfword p )
#else
znewringentry ( p )
halfword p ;
#endif
{
register halfword Result; halfword q ;
q = getnode ( 2 ) ;
mem [q ].hhfield .b1 = 11 ;
mem [q ].hhfield .b0 = mem [p ].hhfield .b0 ;
if ( mem [p + 1 ].cint == 0 )
mem [q + 1 ].cint = p ;
else mem [q + 1 ].cint = mem [p + 1 ].cint ;
mem [p + 1 ].cint = q ;
Result = q ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
znonlineareq ( integer v , halfword p , boolean flushp )
#else
znonlineareq ( v , p , flushp )
integer v ;
halfword p ;
boolean flushp ;
#endif
{
smallnumber t ;
halfword q, r ;
t = mem [p ].hhfield .b0 - 1 ;
q = mem [p + 1 ].cint ;
if ( flushp )
mem [p ].hhfield .b0 = 1 ;
else p = q ;
do {
r = mem [q + 1 ].cint ;
mem [q ].hhfield .b0 = t ;
switch ( t )
{case 2 :
mem [q + 1 ].cint = v ;
break ;
case 4 :
{
mem [q + 1 ].cint = v ;
{
if ( strref [v ]< 127 )
incr ( strref [v ]) ;
}
}
break ;
case 6 :
{
mem [q + 1 ].cint = v ;
incr ( mem [v ].hhfield .lhfield ) ;
}
break ;
case 9 :
mem [q + 1 ].cint = copypath ( v ) ;
break ;
case 11 :
mem [q + 1 ].cint = copyedges ( v ) ;
break ;
}
q = r ;
} while ( ! ( q == p ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
zringmerge ( halfword p , halfword q )
#else
zringmerge ( p , q )
halfword p ;
halfword q ;
#endif
{
/* 10 */ halfword r ;
r = mem [p + 1 ].cint ;
while ( r != p ) {
if ( r == q )
{
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 597 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 598 ;
helpline [0 ]= 599 ;
}
putgeterror () ;
}
goto lab10 ;
}
r = mem [r + 1 ].cint ;
}
r = mem [p + 1 ].cint ;
mem [p + 1 ].cint = mem [q + 1 ].cint ;
mem [q + 1 ].cint = r ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zshowcmdmod ( integer c , integer m )
#else
zshowcmdmod ( c , m )
integer c ;
integer m ;
#endif
{
begindiagnostic () ;
printnl ( 123 ) ;
printcmdmod ( c , m ) ;
printchar ( 125 ) ;
enddiagnostic ( false ) ;
}
void
#ifdef HAVE_PROTOTYPES
showcontext ( void )
#else
showcontext ( )
#endif
{
/* 30 */ char oldsetting ;
integer i ;
integer l ;
integer m ;
integer n ;
integer p ;
integer q ;
fileptr = inputptr ;
inputstack [fileptr ]= curinput ;
while ( true ) {
curinput = inputstack [fileptr ];
if ( ( fileptr == inputptr ) || ( curinput .indexfield <= 15 ) || (
curinput .indexfield != 19 ) || ( curinput .locfield != 0 ) )
{
tally = 0 ;
oldsetting = selector ;
if ( ( curinput .indexfield <= 15 ) )
{
if ( curinput .namefield <= 1 )
if ( ( curinput .namefield == 0 ) && ( fileptr == 0 ) )
printnl ( 601 ) ;
else printnl ( 602 ) ;
else if ( curinput .namefield == 2 )
printnl ( 603 ) ;
else {
printnl ( curinput .namefield ) ;
print ( 58 ) ;
printint ( line ) ;
print ( 58 ) ;
}
printchar ( 32 ) ;
{
l = tally ;
tally = 0 ;
selector = 4 ;
trickcount = 1000000L ;
}
if ( curinput .limitfield > 0 )
{register integer for_end; i = curinput .startfield ;for_end =
curinput .limitfield - 1 ; if ( i <= for_end) do
{
if ( i == curinput .locfield )
{
firstcount = tally ;
trickcount = tally + 1 + errorline - halferrorline ;
if ( trickcount < errorline )
trickcount = errorline ;
}
print ( buffer [i ]) ;
}
while ( i++ < for_end ) ;}
}
else {
switch ( curinput .indexfield )
{case 16 :
printnl ( 604 ) ;
break ;
case 17 :
{
printnl ( 609 ) ;
p = paramstack [curinput .limitfield ];
if ( p != 0 )
if ( mem [p ].hhfield .v.RH == 1 )
printexp ( p , 0 ) ;
else showtokenlist ( p , 0 , 20 , tally ) ;
print ( 610 ) ;
}
break ;
case 18 :
printnl ( 605 ) ;
break ;
case 19 :
if ( curinput .locfield == 0 )
printnl ( 606 ) ;
else printnl ( 607 ) ;
break ;
case 20 :
printnl ( 608 ) ;
break ;
case 21 :
{
println () ;
if ( curinput .namefield != 0 )
print ( hash [curinput .namefield ].v.RH ) ;
else {
p = paramstack [curinput .limitfield ];
if ( p == 0 )
showtokenlist ( paramstack [curinput .limitfield + 1 ], 0 , 20
, tally ) ;
else {
q = p ;
while ( mem [q ].hhfield .v.RH != 0 ) q = mem [q ].hhfield
.v.RH ;
mem [q ].hhfield .v.RH = paramstack [curinput .limitfield +
1 ];
showtokenlist ( p , 0 , 20 , tally ) ;
mem [q ].hhfield .v.RH = 0 ;
}
}
print ( 500 ) ;
}
break ;
default:
printnl ( 63 ) ;
break ;
}
{
l = tally ;
tally = 0 ;
selector = 4 ;
trickcount = 1000000L ;
}
if ( curinput .indexfield != 21 )
showtokenlist ( curinput .startfield , curinput .locfield , 100000L ,
0 ) ;
else showmacro ( curinput .startfield , curinput .locfield , 100000L )
;
}
selector = oldsetting ;
if ( trickcount == 1000000L )
{
firstcount = tally ;
trickcount = tally + 1 + errorline - halferrorline ;
if ( trickcount < errorline )
trickcount = errorline ;
}
if ( tally < trickcount )
m = tally - firstcount ;
else m = trickcount - firstcount ;
if ( l + firstcount <= halferrorline )
{
p = 0 ;
n = l + firstcount ;
}
else {
print ( 274 ) ;
p = l + firstcount - halferrorline + 3 ;
n = halferrorline ;
}
{register integer for_end; q = p ;for_end = firstcount - 1 ; if ( q <=
for_end) do
printchar ( trickbuf [q % errorline ]) ;
while ( q++ < for_end ) ;}
println () ;
{register integer for_end; q = 1 ;for_end = n ; if ( q <= for_end) do
printchar ( 32 ) ;
while ( q++ < for_end ) ;}
if ( m + n <= errorline )
p = firstcount + m ;
else p = firstcount + ( errorline - n - 3 ) ;
{register integer for_end; q = firstcount ;for_end = p - 1 ; if ( q <=
for_end) do
printchar ( trickbuf [q % errorline ]) ;
while ( q++ < for_end ) ;}
if ( m + n > errorline )
print ( 274 ) ;
}
if ( ( curinput .indexfield <= 15 ) )
if ( ( curinput .namefield > 2 ) || ( fileptr == 0 ) )
goto lab30 ;
decr ( fileptr ) ;
}
lab30: curinput = inputstack [inputptr ];
}
void
#ifdef HAVE_PROTOTYPES
zbegintokenlist ( halfword p , quarterword t )
#else
zbegintokenlist ( p , t )
halfword p ;
quarterword t ;
#endif
{
{
if ( inputptr > maxinstack )
{
maxinstack = inputptr ;
if ( inputptr == stacksize )
overflow ( 611 , stacksize ) ;
}
inputstack [inputptr ]= curinput ;
incr ( inputptr ) ;
}
curinput .startfield = p ;
curinput .indexfield = t ;
curinput .limitfield = paramptr ;
curinput .locfield = p ;
}
void
#ifdef HAVE_PROTOTYPES
endtokenlist ( void )
#else
endtokenlist ( )
#endif
{
/* 30 */ halfword p ;
if ( curinput .indexfield >= 19 )
if ( curinput .indexfield <= 20 )
{
flushtokenlist ( curinput .startfield ) ;
goto lab30 ;
}
else deletemacref ( curinput .startfield ) ;
while ( paramptr > curinput .limitfield ) {
decr ( paramptr ) ;
p = paramstack [paramptr ];
if ( p != 0 )
if ( mem [p ].hhfield .v.RH == 1 )
{
recyclevalue ( p ) ;
freenode ( p , 2 ) ;
}
else flushtokenlist ( p ) ;
}
lab30: {
decr ( inputptr ) ;
curinput = inputstack [inputptr ];
}
{
if ( interrupt != 0 )
pauseforinstructions () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zencapsulate ( halfword p )
#else
zencapsulate ( p )
halfword p ;
#endif
{
curexp = getnode ( 2 ) ;
mem [curexp ].hhfield .b0 = curtype ;
mem [curexp ].hhfield .b1 = 11 ;
newdep ( curexp , p ) ;
}
void
#ifdef HAVE_PROTOTYPES
zinstall ( halfword r , halfword q )
#else
zinstall ( r , q )
halfword r ;
halfword q ;
#endif
{
halfword p ;
if ( mem [q ].hhfield .b0 == 16 )
{
mem [r + 1 ].cint = mem [q + 1 ].cint ;
mem [r ].hhfield .b0 = 16 ;
}
else if ( mem [q ].hhfield .b0 == 19 )
{
p = singledependency ( q ) ;
if ( p == depfinal )
{
mem [r ].hhfield .b0 = 16 ;
mem [r + 1 ].cint = 0 ;
freenode ( p , 2 ) ;
}
else {
mem [r ].hhfield .b0 = 17 ;
newdep ( r , p ) ;
}
}
else {
mem [r ].hhfield .b0 = mem [q ].hhfield .b0 ;
newdep ( r , copydeplist ( mem [q + 1 ].hhfield .v.RH ) ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zmakeexpcopy ( halfword p )
#else
zmakeexpcopy ( p )
halfword p ;
#endif
{
/* 20 */ halfword q, r, t ;
lab20: curtype = mem [p ].hhfield .b0 ;
switch ( curtype )
{case 1 :
case 2 :
case 16 :
curexp = mem [p + 1 ].cint ;
break ;
case 3 :
case 5 :
case 7 :
case 12 :
case 10 :
curexp = newringentry ( p ) ;
break ;
case 4 :
{
curexp = mem [p + 1 ].cint ;
{
if ( strref [curexp ]< 127 )
incr ( strref [curexp ]) ;
}
}
break ;
case 6 :
{
curexp = mem [p + 1 ].cint ;
incr ( mem [curexp ].hhfield .lhfield ) ;
}
break ;
case 11 :
curexp = copyedges ( mem [p + 1 ].cint ) ;
break ;
case 9 :
case 8 :
curexp = copypath ( mem [p + 1 ].cint ) ;
break ;
case 13 :
case 14 :
{
if ( mem [p + 1 ].cint == 0 )
initbignode ( p ) ;
t = getnode ( 2 ) ;
mem [t ].hhfield .b1 = 11 ;
mem [t ].hhfield .b0 = curtype ;
initbignode ( t ) ;
q = mem [p + 1 ].cint + bignodesize [curtype ];
r = mem [t + 1 ].cint + bignodesize [curtype ];
do {
q = q - 2 ;
r = r - 2 ;
install ( r , q ) ;
} while ( ! ( q == mem [p + 1 ].cint ) ) ;
curexp = t ;
}
break ;
case 17 :
case 18 :
encapsulate ( copydeplist ( mem [p + 1 ].hhfield .v.RH ) ) ;
break ;
case 15 :
{
{
mem [p ].hhfield .b0 = 19 ;
serialno = serialno + 64 ;
mem [p + 1 ].cint = serialno ;
}
goto lab20 ;
}
break ;
case 19 :
{
q = singledependency ( p ) ;
if ( q == depfinal )
{
curtype = 16 ;
curexp = 0 ;
freenode ( q , 2 ) ;
}
else {
curtype = 17 ;
encapsulate ( q ) ;
}
}
break ;
default:
confusion ( 796 ) ;
break ;
}
}
halfword
#ifdef HAVE_PROTOTYPES
curtok ( void )
#else
curtok ( )
#endif
{
register halfword Result; halfword p ;
smallnumber savetype ;
integer saveexp ;
if ( cursym == 0 )
if ( curcmd == 38 )
{
savetype = curtype ;
saveexp = curexp ;
makeexpcopy ( curmod ) ;
p = stashcurexp () ;
mem [p ].hhfield .v.RH = 0 ;
curtype = savetype ;
curexp = saveexp ;
}
else {
p = getnode ( 2 ) ;
mem [p + 1 ].cint = curmod ;
mem [p ].hhfield .b1 = 12 ;
if ( curcmd == 42 )
mem [p ].hhfield .b0 = 16 ;
else mem [p ].hhfield .b0 = 4 ;
}
else {
{
p = avail ;
if ( p == 0 )
p = getavail () ;
else {
avail = mem [p ].hhfield .v.RH ;
mem [p ].hhfield .v.RH = 0 ;
;
#ifdef STAT
incr ( dynused ) ;
#endif /* STAT */
}
}
mem [p ].hhfield .lhfield = cursym ;
}
Result = p ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
backinput ( void )
#else
backinput ( )
#endif
{
halfword p ;
p = curtok () ;
while ( ( curinput .indexfield > 15 ) && ( curinput .locfield == 0 ) )
endtokenlist () ;
begintokenlist ( p , 19 ) ;
}
void
#ifdef HAVE_PROTOTYPES
backerror ( void )
#else
backerror ( )
#endif
{
OKtointerrupt = false ;
backinput () ;
OKtointerrupt = true ;
error () ;
}
void
#ifdef HAVE_PROTOTYPES
inserror ( void )
#else
inserror ( )
#endif
{
OKtointerrupt = false ;
backinput () ;
curinput .indexfield = 20 ;
OKtointerrupt = true ;
error () ;
}
void
#ifdef HAVE_PROTOTYPES
beginfilereading ( void )
#else
beginfilereading ( )
#endif
{
if ( inopen == 15 )
overflow ( 612 , 15 ) ;
if ( first == bufsize )
overflow ( 256 , bufsize ) ;
incr ( inopen ) ;
{
if ( inputptr > maxinstack )
{
maxinstack = inputptr ;
if ( inputptr == stacksize )
overflow ( 611 , stacksize ) ;
}
inputstack [inputptr ]= curinput ;
incr ( inputptr ) ;
}
curinput .indexfield = inopen ;
linestack [curinput .indexfield ]= line ;
curinput .startfield = first ;
curinput .namefield = 0 ;
}
void
#ifdef HAVE_PROTOTYPES
endfilereading ( void )
#else
endfilereading ( )
#endif
{
first = curinput .startfield ;
line = linestack [curinput .indexfield ];
if ( curinput .indexfield != inopen )
confusion ( 613 ) ;
if ( curinput .namefield > 2 )
aclose ( inputfile [curinput .indexfield ]) ;
{
decr ( inputptr ) ;
curinput = inputstack [inputptr ];
}
decr ( inopen ) ;
}
void
#ifdef HAVE_PROTOTYPES
clearforerrorprompt ( void )
#else
clearforerrorprompt ( )
#endif
{
while ( ( curinput .indexfield <= 15 ) && ( curinput .namefield == 0 ) &&
( inputptr > 0 ) && ( curinput .locfield == curinput .limitfield ) )
endfilereading () ;
println () ;
}
boolean
#ifdef HAVE_PROTOTYPES
checkoutervalidity ( void )
#else
checkoutervalidity ( )
#endif
{
register boolean Result; halfword p ;
if ( scannerstatus == 0 )
Result = true ;
else {
deletionsallowed = false ;
if ( cursym != 0 )
{
p = getavail () ;
mem [p ].hhfield .lhfield = cursym ;
begintokenlist ( p , 19 ) ;
}
if ( scannerstatus > 1 )
{
runaway () ;
if ( cursym == 0 )
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 619 ) ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 620 ) ;
}
}
print ( 621 ) ;
{
helpptr = 4 ;
helpline [3 ]= 622 ;
helpline [2 ]= 623 ;
helpline [1 ]= 624 ;
helpline [0 ]= 625 ;
}
switch ( scannerstatus )
{case 2 :
{
print ( 626 ) ;
helpline [3 ]= 627 ;
cursym = 9763 ;
}
break ;
case 3 :
{
print ( 628 ) ;
helpline [3 ]= 629 ;
if ( warninginfo == 0 )
cursym = 9767 ;
else {
cursym = 9759 ;
eqtb [9759 ].v.RH = warninginfo ;
}
}
break ;
case 4 :
case 5 :
{
print ( 630 ) ;
if ( scannerstatus == 5 )
print ( hash [warninginfo ].v.RH ) ;
else printvariablename ( warninginfo ) ;
cursym = 9765 ;
}
break ;
case 6 :
{
print ( 631 ) ;
print ( hash [warninginfo ].v.RH ) ;
print ( 632 ) ;
helpline [3 ]= 633 ;
cursym = 9764 ;
}
break ;
}
inserror () ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 614 ) ;
}
printint ( warninginfo ) ;
{
helpptr = 3 ;
helpline [2 ]= 615 ;
helpline [1 ]= 616 ;
helpline [0 ]= 617 ;
}
if ( cursym == 0 )
helpline [2 ]= 618 ;
cursym = 9766 ;
inserror () ;
}
deletionsallowed = true ;
Result = false ;
}
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
getnext ( void )
#else
getnext ( )
#endif
{
/* 20 10 40 25 85 86 87 30 */ integer k ;
ASCIIcode c ;
ASCIIcode class ;
integer n, f ;
lab20: cursym = 0 ;
if ( ( curinput .indexfield <= 15 ) )
{
lab25: c = buffer [curinput .locfield ];
incr ( curinput .locfield ) ;
class = charclass [c ];
switch ( class )
{case 0 :
goto lab85 ;
break ;
case 1 :
{
class = charclass [buffer [curinput .locfield ]];
if ( class > 1 )
goto lab25 ;
else if ( class < 1 )
{
n = 0 ;
goto lab86 ;
}
}
break ;
case 2 :
goto lab25 ;
break ;
case 3 :
{
if ( curinput .namefield > 2 )
{
incr ( line ) ;
first = curinput .startfield ;
if ( ! forceeof )
{
if ( inputln ( inputfile [curinput .indexfield ], true ) )
firmuptheline () ;
else forceeof = true ;
}
if ( forceeof )
{
printchar ( 41 ) ;
decr ( openparens ) ;
fflush ( stdout ) ;
forceeof = false ;
endfilereading () ;
if ( checkoutervalidity () )
goto lab20 ;
else goto lab20 ;
}
buffer [curinput .limitfield ]= 37 ;
first = curinput .limitfield + 1 ;
curinput .locfield = curinput .startfield ;
}
else {
if ( inputptr > 0 )
{
endfilereading () ;
goto lab20 ;
}
if ( selector < 2 )
openlogfile () ;
if ( interaction > 1 )
{
if ( curinput .limitfield == curinput .startfield )
printnl ( 648 ) ;
println () ;
first = curinput .startfield ;
{
;
print ( 42 ) ;
terminput () ;
}
curinput .limitfield = last ;
buffer [curinput .limitfield ]= 37 ;
first = curinput .limitfield + 1 ;
curinput .locfield = curinput .startfield ;
}
else fatalerror ( 649 ) ;
}
{
if ( interrupt != 0 )
pauseforinstructions () ;
}
goto lab25 ;
}
break ;
case 4 :
{
if ( buffer [curinput .locfield ]== 34 )
curmod = 283 ;
else {
k = curinput .locfield ;
buffer [curinput .limitfield + 1 ]= 34 ;
do {
incr ( curinput .locfield ) ;
} while ( ! ( buffer [curinput .locfield ]== 34 ) ) ;
if ( curinput .locfield > curinput .limitfield )
{
curinput .locfield = curinput .limitfield ;
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 641 ) ;
}
{
helpptr = 3 ;
helpline [2 ]= 642 ;
helpline [1 ]= 643 ;
helpline [0 ]= 644 ;
}
deletionsallowed = false ;
error () ;
deletionsallowed = true ;
goto lab20 ;
}
if ( ( curinput .locfield == k + 1 ) && ( ( strstart [buffer [k ]
+ 1 ]- strstart [buffer [k ]]) == 1 ) )
curmod = buffer [k ];
else {
{
if ( poolptr + curinput .locfield - k > maxpoolptr )
{
if ( poolptr + curinput .locfield - k > poolsize )
overflow ( 257 , poolsize - initpoolptr ) ;
maxpoolptr = poolptr + curinput .locfield - k ;
}
}
do {
{
strpool [poolptr ]= buffer [k ];
incr ( poolptr ) ;
}
incr ( k ) ;
} while ( ! ( k == curinput .locfield ) ) ;
curmod = makestring () ;
}
}
incr ( curinput .locfield ) ;
curcmd = 39 ;
goto lab10 ;
}
break ;
case 5 :
case 6 :
case 7 :
case 8 :
{
k = curinput .locfield - 1 ;
goto lab40 ;
}
break ;
case 20 :
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 638 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 639 ;
helpline [0 ]= 640 ;
}
deletionsallowed = false ;
error () ;
deletionsallowed = true ;
goto lab20 ;
}
break ;
default:
;
break ;
}
k = curinput .locfield - 1 ;
while ( charclass [buffer [curinput .locfield ]]== class ) incr (
curinput .locfield ) ;
goto lab40 ;
lab85: n = c - 48 ;
while ( charclass [buffer [curinput .locfield ]]== 0 ) {
if ( n < 4096 )
n = 10 * n + buffer [curinput .locfield ]- 48 ;
incr ( curinput .locfield ) ;
}
if ( buffer [curinput .locfield ]== 46 )
if ( charclass [buffer [curinput .locfield + 1 ]]== 0 )
goto lab30 ;
f = 0 ;
goto lab87 ;
lab30: incr ( curinput .locfield ) ;
lab86: k = 0 ;
do {
if ( k < 17 )
{
dig [k ]= buffer [curinput .locfield ]- 48 ;
incr ( k ) ;
}
incr ( curinput .locfield ) ;
} while ( ! ( charclass [buffer [curinput .locfield ]]!= 0 ) ) ;
f = rounddecimals ( k ) ;
if ( f == 65536L )
{
incr ( n ) ;
f = 0 ;
}
lab87: if ( n < 4096 )
curmod = n * 65536L + f ;
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 645 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 646 ;
helpline [0 ]= 647 ;
}
deletionsallowed = false ;
error () ;
deletionsallowed = true ;
curmod = 268435455L ;
}
curcmd = 42 ;
goto lab10 ;
lab40: cursym = idlookup ( k , curinput .locfield - k ) ;
}
else if ( curinput .locfield >= himemmin )
{
cursym = mem [curinput .locfield ].hhfield .lhfield ;
curinput .locfield = mem [curinput .locfield ].hhfield .v.RH ;
if ( cursym >= 9770 )
if ( cursym >= 9920 )
{
if ( cursym >= 10070 )
cursym = cursym - 150 ;
begintokenlist ( paramstack [curinput .limitfield + cursym - ( 9920 ) ]
, 18 ) ;
goto lab20 ;
}
else {
curcmd = 38 ;
curmod = paramstack [curinput .limitfield + cursym - ( 9770 ) ];
cursym = 0 ;
goto lab10 ;
}
}
else if ( curinput .locfield > 0 )
{
if ( mem [curinput .locfield ].hhfield .b1 == 12 )
{
curmod = mem [curinput .locfield + 1 ].cint ;
if ( mem [curinput .locfield ].hhfield .b0 == 16 )
curcmd = 42 ;
else {
curcmd = 39 ;
{
if ( strref [curmod ]< 127 )
incr ( strref [curmod ]) ;
}
}
}
else {
curmod = curinput .locfield ;
curcmd = 38 ;
}
curinput .locfield = mem [curinput .locfield ].hhfield .v.RH ;
goto lab10 ;
}
else {
endtokenlist () ;
goto lab20 ;
}
curcmd = eqtb [cursym ].lhfield ;
curmod = eqtb [cursym ].v.RH ;
if ( curcmd >= 86 )
if ( checkoutervalidity () )
curcmd = curcmd - 86 ;
else goto lab20 ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
firmuptheline ( void )
#else
firmuptheline ( )
#endif
{
integer k ;
curinput .limitfield = last ;
if ( internal [31 ]> 0 )
if ( interaction > 1 )
{
;
println () ;
if ( curinput .startfield < curinput .limitfield )
{register integer for_end; k = curinput .startfield ;for_end = curinput
.limitfield - 1 ; if ( k <= for_end) do
print ( buffer [k ]) ;
while ( k++ < for_end ) ;}
first = curinput .limitfield ;
{
;
print ( 650 ) ;
terminput () ;
}
if ( last > first )
{
{register integer for_end; k = first ;for_end = last - 1 ; if ( k <=
for_end) do
buffer [k + curinput .startfield - first ]= buffer [k ];
while ( k++ < for_end ) ;}
curinput .limitfield = curinput .startfield + last - first ;
}
}
}
halfword
#ifdef HAVE_PROTOTYPES
zscantoks ( commandcode terminator , halfword substlist , halfword tailend ,
smallnumber suffixcount )
#else
zscantoks ( terminator , substlist , tailend , suffixcount )
commandcode terminator ;
halfword substlist ;
halfword tailend ;
smallnumber suffixcount ;
#endif
{
/* 30 40 */ register halfword Result; halfword p ;
halfword q ;
integer balance ;
p = memtop - 2 ;
balance = 1 ;
mem [memtop - 2 ].hhfield .v.RH = 0 ;
while ( true ) {
getnext () ;
if ( cursym > 0 )
{
{
q = substlist ;
while ( q != 0 ) {
if ( mem [q ].hhfield .lhfield == cursym )
{
cursym = mem [q + 1 ].cint ;
curcmd = 7 ;
goto lab40 ;
}
q = mem [q ].hhfield .v.RH ;
}
lab40: ;
}
if ( curcmd == terminator )
if ( curmod > 0 )
incr ( balance ) ;
else {
decr ( balance ) ;
if ( balance == 0 )
goto lab30 ;
}
else if ( curcmd == 61 )
{
if ( curmod == 0 )
getnext () ;
else if ( curmod <= suffixcount )
cursym = 9919 + curmod ;
}
}
mem [p ].hhfield .v.RH = curtok () ;
p = mem [p ].hhfield .v.RH ;
}
lab30: mem [p ].hhfield .v.RH = tailend ;
flushnodelist ( substlist ) ;
Result = mem [memtop - 2 ].hhfield .v.RH ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
getsymbol ( void )
#else
getsymbol ( )
#endif
{
/* 20 */ lab20: getnext () ;
if ( ( cursym == 0 ) || ( cursym > 9757 ) )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 662 ) ;
}
{
helpptr = 3 ;
helpline [2 ]= 663 ;
helpline [1 ]= 664 ;
helpline [0 ]= 665 ;
}
if ( cursym > 0 )
helpline [2 ]= 666 ;
else if ( curcmd == 39 )
{
if ( strref [curmod ]< 127 )
if ( strref [curmod ]> 1 )
decr ( strref [curmod ]) ;
else flushstring ( curmod ) ;
}
cursym = 9757 ;
inserror () ;
goto lab20 ;
}
}
void
#ifdef HAVE_PROTOTYPES
getclearsymbol ( void )
#else
getclearsymbol ( )
#endif
{
getsymbol () ;
clearsymbol ( cursym , false ) ;
}
void
#ifdef HAVE_PROTOTYPES
checkequals ( void )
#else
checkequals ( )
#endif
{
if ( curcmd != 51 )
if ( curcmd != 77 )
{
missingerr ( 61 ) ;
{
helpptr = 5 ;
helpline [4 ]= 667 ;
helpline [3 ]= 668 ;
helpline [2 ]= 669 ;
helpline [1 ]= 670 ;
helpline [0 ]= 671 ;
}
backerror () ;
}
}
void
#ifdef HAVE_PROTOTYPES
makeopdef ( void )
#else
makeopdef ( )
#endif
{
commandcode m ;
halfword p, q, r ;
m = curmod ;
getsymbol () ;
q = getnode ( 2 ) ;
mem [q ].hhfield .lhfield = cursym ;
mem [q + 1 ].cint = 9770 ;
getclearsymbol () ;
warninginfo = cursym ;
getsymbol () ;
p = getnode ( 2 ) ;
mem [p ].hhfield .lhfield = cursym ;
mem [p + 1 ].cint = 9771 ;
mem [p ].hhfield .v.RH = q ;
getnext () ;
checkequals () ;
scannerstatus = 5 ;
q = getavail () ;
mem [q ].hhfield .lhfield = 0 ;
r = getavail () ;
mem [q ].hhfield .v.RH = r ;
mem [r ].hhfield .lhfield = 0 ;
mem [r ].hhfield .v.RH = scantoks ( 16 , p , 0 , 0 ) ;
scannerstatus = 0 ;
eqtb [warninginfo ].lhfield = m ;
eqtb [warninginfo ].v.RH = q ;
getxnext () ;
}
void
#ifdef HAVE_PROTOTYPES
zcheckdelimiter ( halfword ldelim , halfword rdelim )
#else
zcheckdelimiter ( ldelim , rdelim )
halfword ldelim ;
halfword rdelim ;
#endif
{
/* 10 */ if ( curcmd == 62 )
if ( curmod == ldelim )
goto lab10 ;
if ( cursym != rdelim )
{
missingerr ( hash [rdelim ].v.RH ) ;
{
helpptr = 2 ;
helpline [1 ]= 918 ;
helpline [0 ]= 919 ;
}
backerror () ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 920 ) ;
}
print ( hash [rdelim ].v.RH ) ;
print ( 921 ) ;
{
helpptr = 3 ;
helpline [2 ]= 922 ;
helpline [1 ]= 923 ;
helpline [0 ]= 924 ;
}
error () ;
}
lab10: ;
}
halfword
#ifdef HAVE_PROTOTYPES
scandeclaredvariable ( void )
#else
scandeclaredvariable ( )
#endif
{
/* 30 */ register halfword Result; halfword x ;
halfword h, t ;
halfword l ;
getsymbol () ;
x = cursym ;
if ( curcmd != 41 )
clearsymbol ( x , false ) ;
h = getavail () ;
mem [h ].hhfield .lhfield = x ;
t = h ;
while ( true ) {
getxnext () ;
if ( cursym == 0 )
goto lab30 ;
if ( curcmd != 41 )
if ( curcmd != 40 )
if ( curcmd == 63 )
{
l = cursym ;
getxnext () ;
if ( curcmd != 64 )
{
backinput () ;
cursym = l ;
curcmd = 63 ;
goto lab30 ;
}
else cursym = 0 ;
}
else goto lab30 ;
mem [t ].hhfield .v.RH = getavail () ;
t = mem [t ].hhfield .v.RH ;
mem [t ].hhfield .lhfield = cursym ;
}
lab30: if ( eqtb [x ].lhfield != 41 )
clearsymbol ( x , false ) ;
if ( eqtb [x ].v.RH == 0 )
newroot ( x ) ;
Result = h ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
scandef ( void )
#else
scandef ( )
#endif
{
char m ;
char n ;
unsigned char k ;
char c ;
halfword r ;
halfword q ;
halfword p ;
halfword base ;
halfword ldelim, rdelim ;
m = curmod ;
c = 0 ;
mem [memtop - 2 ].hhfield .v.RH = 0 ;
q = getavail () ;
mem [q ].hhfield .lhfield = 0 ;
r = 0 ;
if ( m == 1 )
{
getclearsymbol () ;
warninginfo = cursym ;
getnext () ;
scannerstatus = 5 ;
n = 0 ;
eqtb [warninginfo ].lhfield = 10 ;
eqtb [warninginfo ].v.RH = q ;
}
else {
p = scandeclaredvariable () ;
flushvariable ( eqtb [mem [p ].hhfield .lhfield ].v.RH , mem [p ]
.hhfield .v.RH , true ) ;
warninginfo = findvariable ( p ) ;
flushlist ( p ) ;
if ( warninginfo == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 678 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 679 ;
helpline [0 ]= 680 ;
}
error () ;
warninginfo = 21 ;
}
scannerstatus = 4 ;
n = 2 ;
if ( curcmd == 61 )
if ( curmod == 3 )
{
n = 3 ;
getnext () ;
}
mem [warninginfo ].hhfield .b0 = 20 + n ;
mem [warninginfo + 1 ].cint = q ;
}
k = n ;
if ( curcmd == 31 )
do {
ldelim = cursym ;
rdelim = curmod ;
getnext () ;
if ( ( curcmd == 56 ) && ( curmod >= 9770 ) )
base = curmod ;
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 681 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 682 ;
}
backerror () ;
base = 9770 ;
}
do {
mem [q ].hhfield .v.RH = getavail () ;
q = mem [q ].hhfield .v.RH ;
mem [q ].hhfield .lhfield = base + k ;
getsymbol () ;
p = getnode ( 2 ) ;
mem [p + 1 ].cint = base + k ;
mem [p ].hhfield .lhfield = cursym ;
if ( k == 150 )
overflow ( 683 , 150 ) ;
incr ( k ) ;
mem [p ].hhfield .v.RH = r ;
r = p ;
getnext () ;
} while ( ! ( curcmd != 82 ) ) ;
checkdelimiter ( ldelim , rdelim ) ;
getnext () ;
} while ( ! ( curcmd != 31 ) ) ;
if ( curcmd == 56 )
{
p = getnode ( 2 ) ;
if ( curmod < 9770 )
{
c = curmod ;
mem [p + 1 ].cint = 9770 + k ;
}
else {
mem [p + 1 ].cint = curmod + k ;
if ( curmod == 9770 )
c = 4 ;
else if ( curmod == 9920 )
c = 6 ;
else c = 7 ;
}
if ( k == 150 )
overflow ( 683 , 150 ) ;
incr ( k ) ;
getsymbol () ;
mem [p ].hhfield .lhfield = cursym ;
mem [p ].hhfield .v.RH = r ;
r = p ;
getnext () ;
if ( c == 4 )
if ( curcmd == 69 )
{
c = 5 ;
p = getnode ( 2 ) ;
if ( k == 150 )
overflow ( 683 , 150 ) ;
mem [p + 1 ].cint = 9770 + k ;
getsymbol () ;
mem [p ].hhfield .lhfield = cursym ;
mem [p ].hhfield .v.RH = r ;
r = p ;
getnext () ;
}
}
checkequals () ;
p = getavail () ;
mem [p ].hhfield .lhfield = c ;
mem [q ].hhfield .v.RH = p ;
if ( m == 1 )
mem [p ].hhfield .v.RH = scantoks ( 16 , r , 0 , n ) ;
else {
q = getavail () ;
mem [q ].hhfield .lhfield = bgloc ;
mem [p ].hhfield .v.RH = q ;
p = getavail () ;
mem [p ].hhfield .lhfield = egloc ;
mem [q ].hhfield .v.RH = scantoks ( 16 , r , p , n ) ;
}
if ( warninginfo == 21 )
flushtokenlist ( mem [22 ].cint ) ;
scannerstatus = 0 ;
getxnext () ;
}
void
#ifdef HAVE_PROTOTYPES
zprintmacroname ( halfword a , halfword n )
#else
zprintmacroname ( a , n )
halfword a ;
halfword n ;
#endif
{
halfword p, q ;
if ( n != 0 )
print ( hash [n ].v.RH ) ;
else {
p = mem [a ].hhfield .lhfield ;
if ( p == 0 )
print ( hash [mem [mem [mem [a ].hhfield .v.RH ].hhfield .lhfield ]
.hhfield .lhfield ].v.RH ) ;
else {
q = p ;
while ( mem [q ].hhfield .v.RH != 0 ) q = mem [q ].hhfield .v.RH ;
mem [q ].hhfield .v.RH = mem [mem [a ].hhfield .v.RH ].hhfield
.lhfield ;
showtokenlist ( p , 0 , 1000 , 0 ) ;
mem [q ].hhfield .v.RH = 0 ;
}
}
}
void
#ifdef HAVE_PROTOTYPES
zprintarg ( halfword q , integer n , halfword b )
#else
zprintarg ( q , n , b )
halfword q ;
integer n ;
halfword b ;
#endif
{
if ( mem [q ].hhfield .v.RH == 1 )
printnl ( 497 ) ;
else if ( ( b < 10070 ) && ( b != 7 ) )
printnl ( 498 ) ;
else printnl ( 499 ) ;
printint ( n ) ;
print ( 699 ) ;
if ( mem [q ].hhfield .v.RH == 1 )
printexp ( q , 1 ) ;
else showtokenlist ( q , 0 , 1000 , 0 ) ;
}
void
#ifdef HAVE_PROTOTYPES
zscantextarg ( halfword ldelim , halfword rdelim )
#else
zscantextarg ( ldelim , rdelim )
halfword ldelim ;
halfword rdelim ;
#endif
{
/* 30 */ integer balance ;
halfword p ;
warninginfo = ldelim ;
scannerstatus = 3 ;
p = memtop - 2 ;
balance = 1 ;
mem [memtop - 2 ].hhfield .v.RH = 0 ;
while ( true ) {
getnext () ;
if ( ldelim == 0 )
{
if ( curcmd > 82 )
{
if ( balance == 1 )
goto lab30 ;
else if ( curcmd == 84 )
decr ( balance ) ;
}
else if ( curcmd == 32 )
incr ( balance ) ;
}
else {
if ( curcmd == 62 )
{
if ( curmod == ldelim )
{
decr ( balance ) ;
if ( balance == 0 )
goto lab30 ;
}
}
else if ( curcmd == 31 )
if ( curmod == rdelim )
incr ( balance ) ;
}
mem [p ].hhfield .v.RH = curtok () ;
p = mem [p ].hhfield .v.RH ;
}
lab30: curexp = mem [memtop - 2 ].hhfield .v.RH ;
curtype = 20 ;
scannerstatus = 0 ;
}
void
#ifdef HAVE_PROTOTYPES
zmacrocall ( halfword defref , halfword arglist , halfword macroname )
#else
zmacrocall ( defref , arglist , macroname )
halfword defref ;
halfword arglist ;
halfword macroname ;
#endif
{
/* 40 */ halfword r ;
halfword p, q ;
integer n ;
halfword ldelim, rdelim ;
halfword tail ;
r = mem [defref ].hhfield .v.RH ;
incr ( mem [defref ].hhfield .lhfield ) ;
if ( arglist == 0 )
n = 0 ;
else {
n = 1 ;
tail = arglist ;
while ( mem [tail ].hhfield .v.RH != 0 ) {
incr ( n ) ;
tail = mem [tail ].hhfield .v.RH ;
}
}
if ( internal [9 ]> 0 )
{
begindiagnostic () ;
println () ;
printmacroname ( arglist , macroname ) ;
if ( n == 3 )
print ( 661 ) ;
showmacro ( defref , 0 , 100000L ) ;
if ( arglist != 0 )
{
n = 0 ;
p = arglist ;
do {
q = mem [p ].hhfield .lhfield ;
printarg ( q , n , 0 ) ;
incr ( n ) ;
p = mem [p ].hhfield .v.RH ;
} while ( ! ( p == 0 ) ) ;
}
enddiagnostic ( false ) ;
}
curcmd = 83 ;
while ( mem [r ].hhfield .lhfield >= 9770 ) {
if ( curcmd != 82 )
{
getxnext () ;
if ( curcmd != 31 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 705 ) ;
}
printmacroname ( arglist , macroname ) ;
{
helpptr = 3 ;
helpline [2 ]= 706 ;
helpline [1 ]= 707 ;
helpline [0 ]= 708 ;
}
if ( mem [r ].hhfield .lhfield >= 9920 )
{
curexp = 0 ;
curtype = 20 ;
}
else {
curexp = 0 ;
curtype = 16 ;
}
backerror () ;
curcmd = 62 ;
goto lab40 ;
}
ldelim = cursym ;
rdelim = curmod ;
}
if ( mem [r ].hhfield .lhfield >= 10070 )
scantextarg ( ldelim , rdelim ) ;
else {
getxnext () ;
if ( mem [r ].hhfield .lhfield >= 9920 )
scansuffix () ;
else scanexpression () ;
}
if ( curcmd != 82 )
if ( ( curcmd != 62 ) || ( curmod != ldelim ) )
if ( mem [mem [r ].hhfield .v.RH ].hhfield .lhfield >= 9770 )
{
missingerr ( 44 ) ;
{
helpptr = 3 ;
helpline [2 ]= 709 ;
helpline [1 ]= 710 ;
helpline [0 ]= 704 ;
}
backerror () ;
curcmd = 82 ;
}
else {
missingerr ( hash [rdelim ].v.RH ) ;
{
helpptr = 2 ;
helpline [1 ]= 711 ;
helpline [0 ]= 704 ;
}
backerror () ;
}
lab40: {
p = getavail () ;
if ( curtype == 20 )
mem [p ].hhfield .lhfield = curexp ;
else mem [p ].hhfield .lhfield = stashcurexp () ;
if ( internal [9 ]> 0 )
{
begindiagnostic () ;
printarg ( mem [p ].hhfield .lhfield , n , mem [r ].hhfield
.lhfield ) ;
enddiagnostic ( false ) ;
}
if ( arglist == 0 )
arglist = p ;
else mem [tail ].hhfield .v.RH = p ;
tail = p ;
incr ( n ) ;
}
r = mem [r ].hhfield .v.RH ;
}
if ( curcmd == 82 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 700 ) ;
}
printmacroname ( arglist , macroname ) ;
printchar ( 59 ) ;
printnl ( 701 ) ;
print ( hash [rdelim ].v.RH ) ;
print ( 298 ) ;
{
helpptr = 3 ;
helpline [2 ]= 702 ;
helpline [1 ]= 703 ;
helpline [0 ]= 704 ;
}
error () ;
}
if ( mem [r ].hhfield .lhfield != 0 )
{
if ( mem [r ].hhfield .lhfield < 7 )
{
getxnext () ;
if ( mem [r ].hhfield .lhfield != 6 )
if ( ( curcmd == 51 ) || ( curcmd == 77 ) )
getxnext () ;
}
switch ( mem [r ].hhfield .lhfield )
{case 1 :
scanprimary () ;
break ;
case 2 :
scansecondary () ;
break ;
case 3 :
scantertiary () ;
break ;
case 4 :
scanexpression () ;
break ;
case 5 :
{
scanexpression () ;
p = getavail () ;
mem [p ].hhfield .lhfield = stashcurexp () ;
if ( internal [9 ]> 0 )
{
begindiagnostic () ;
printarg ( mem [p ].hhfield .lhfield , n , 0 ) ;
enddiagnostic ( false ) ;
}
if ( arglist == 0 )
arglist = p ;
else mem [tail ].hhfield .v.RH = p ;
tail = p ;
incr ( n ) ;
if ( curcmd != 69 )
{
missingerr ( 478 ) ;
print ( 712 ) ;
printmacroname ( arglist , macroname ) ;
{
helpptr = 1 ;
helpline [0 ]= 713 ;
}
backerror () ;
}
getxnext () ;
scanprimary () ;
}
break ;
case 6 :
{
if ( curcmd != 31 )
ldelim = 0 ;
else {
ldelim = cursym ;
rdelim = curmod ;
getxnext () ;
}
scansuffix () ;
if ( ldelim != 0 )
{
if ( ( curcmd != 62 ) || ( curmod != ldelim ) )
{
missingerr ( hash [rdelim ].v.RH ) ;
{
helpptr = 2 ;
helpline [1 ]= 711 ;
helpline [0 ]= 704 ;
}
backerror () ;
}
getxnext () ;
}
}
break ;
case 7 :
scantextarg ( 0 , 0 ) ;
break ;
}
backinput () ;
{
p = getavail () ;
if ( curtype == 20 )
mem [p ].hhfield .lhfield = curexp ;
else mem [p ].hhfield .lhfield = stashcurexp () ;
if ( internal [9 ]> 0 )
{
begindiagnostic () ;
printarg ( mem [p ].hhfield .lhfield , n , mem [r ].hhfield
.lhfield ) ;
enddiagnostic ( false ) ;
}
if ( arglist == 0 )
arglist = p ;
else mem [tail ].hhfield .v.RH = p ;
tail = p ;
incr ( n ) ;
}
}
r = mem [r ].hhfield .v.RH ;
while ( ( curinput .indexfield > 15 ) && ( curinput .locfield == 0 ) )
endtokenlist () ;
if ( paramptr + n > maxparamstack )
{
maxparamstack = paramptr + n ;
if ( maxparamstack > 150 )
overflow ( 683 , 150 ) ;
}
begintokenlist ( defref , 21 ) ;
curinput .namefield = macroname ;
curinput .locfield = r ;
if ( n > 0 )
{
p = arglist ;
do {
paramstack [paramptr ]= mem [p ].hhfield .lhfield ;
incr ( paramptr ) ;
p = mem [p ].hhfield .v.RH ;
} while ( ! ( p == 0 ) ) ;
flushlist ( arglist ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
expand ( void )
#else
expand ( )
#endif
{
halfword p ;
integer k ;
poolpointer j ;
if ( internal [7 ]> 65536L )
if ( curcmd != 10 )
showcmdmod ( curcmd , curmod ) ;
switch ( curcmd )
{case 1 :
conditional () ;
break ;
case 2 :
if ( curmod > iflimit )
if ( iflimit == 1 )
{
missingerr ( 58 ) ;
backinput () ;
cursym = 9762 ;
inserror () ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 720 ) ;
}
printcmdmod ( 2 , curmod ) ;
{
helpptr = 1 ;
helpline [0 ]= 721 ;
}
error () ;
}
else {
while ( curmod != 2 ) passtext () ;
{
p = condptr ;
ifline = mem [p + 1 ].cint ;
curif = mem [p ].hhfield .b1 ;
iflimit = mem [p ].hhfield .b0 ;
condptr = mem [p ].hhfield .v.RH ;
freenode ( p , 2 ) ;
}
}
break ;
case 3 :
if ( curmod > 0 )
forceeof = true ;
else startinput () ;
break ;
case 4 :
if ( curmod == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 684 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 685 ;
helpline [0 ]= 686 ;
}
error () ;
}
else beginiteration () ;
break ;
case 5 :
{
while ( ( curinput .indexfield > 15 ) && ( curinput .locfield == 0 ) )
endtokenlist () ;
if ( loopptr == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 688 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 689 ;
helpline [0 ]= 690 ;
}
error () ;
}
else resumeiteration () ;
}
break ;
case 6 :
{
getboolean () ;
if ( internal [7 ]> 65536L )
showcmdmod ( 33 , curexp ) ;
if ( curexp == 30 )
if ( loopptr == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 691 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 692 ;
}
if ( curcmd == 83 )
error () ;
else backerror () ;
}
else {
p = 0 ;
do {
if ( ( curinput .indexfield <= 15 ) )
endfilereading () ;
else {
if ( curinput .indexfield <= 17 )
p = curinput .startfield ;
endtokenlist () ;
}
} while ( ! ( p != 0 ) ) ;
if ( p != mem [loopptr ].hhfield .lhfield )
fatalerror ( 695 ) ;
stopiteration () ;
}
else if ( curcmd != 83 )
{
missingerr ( 59 ) ;
{
helpptr = 2 ;
helpline [1 ]= 693 ;
helpline [0 ]= 694 ;
}
backerror () ;
}
}
break ;
case 7 :
;
break ;
case 9 :
{
getnext () ;
p = curtok () ;
getnext () ;
if ( curcmd < 11 )
expand () ;
else backinput () ;
begintokenlist ( p , 19 ) ;
}
break ;
case 8 :
{
getxnext () ;
scanprimary () ;
if ( curtype != 4 )
{
disperr ( 0 , 696 ) ;
{
helpptr = 2 ;
helpline [1 ]= 697 ;
helpline [0 ]= 698 ;
}
putgetflusherror ( 0 ) ;
}
else {
backinput () ;
if ( ( strstart [curexp + 1 ]- strstart [curexp ]) > 0 )
{
beginfilereading () ;
curinput .namefield = 2 ;
k = first + ( strstart [curexp + 1 ]- strstart [curexp ]) ;
if ( k >= maxbufstack )
{
if ( k >= bufsize )
{
maxbufstack = bufsize ;
overflow ( 256 , bufsize ) ;
}
maxbufstack = k + 1 ;
}
j = strstart [curexp ];
curinput .limitfield = k ;
while ( first < curinput .limitfield ) {
buffer [first ]= strpool [j ];
incr ( j ) ;
incr ( first ) ;
}
buffer [curinput .limitfield ]= 37 ;
first = curinput .limitfield + 1 ;
curinput .locfield = curinput .startfield ;
flushcurexp ( 0 ) ;
}
}
}
break ;
case 10 :
macrocall ( curmod , 0 , cursym ) ;
break ;
}
}
void
#ifdef HAVE_PROTOTYPES
getxnext ( void )
#else
getxnext ( )
#endif
{
halfword saveexp ;
getnext () ;
if ( curcmd < 11 )
{
saveexp = stashcurexp () ;
do {
if ( curcmd == 10 )
macrocall ( curmod , 0 , cursym ) ;
else expand () ;
getnext () ;
} while ( ! ( curcmd >= 11 ) ) ;
unstashcurexp ( saveexp ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zstackargument ( halfword p )
#else
zstackargument ( p )
halfword p ;
#endif
{
if ( paramptr == maxparamstack )
{
incr ( maxparamstack ) ;
if ( maxparamstack > 150 )
overflow ( 683 , 150 ) ;
}
paramstack [paramptr ]= p ;
incr ( paramptr ) ;
}
void
#ifdef HAVE_PROTOTYPES
passtext ( void )
#else
passtext ( )
#endif
{
/* 30 */ integer l ;
scannerstatus = 1 ;
l = 0 ;
warninginfo = line ;
while ( true ) {
getnext () ;
if ( curcmd <= 2 )
if ( curcmd < 2 )
incr ( l ) ;
else {
if ( l == 0 )
goto lab30 ;
if ( curmod == 2 )
decr ( l ) ;
}
else if ( curcmd == 39 )
{
if ( strref [curmod ]< 127 )
if ( strref [curmod ]> 1 )
decr ( strref [curmod ]) ;
else flushstring ( curmod ) ;
}
}
lab30: scannerstatus = 0 ;
}
void
#ifdef HAVE_PROTOTYPES
zchangeiflimit ( smallnumber l , halfword p )
#else
zchangeiflimit ( l , p )
smallnumber l ;
halfword p ;
#endif
{
/* 10 */ halfword q ;
if ( p == condptr )
iflimit = l ;
else {
q = condptr ;
while ( true ) {
if ( q == 0 )
confusion ( 714 ) ;
if ( mem [q ].hhfield .v.RH == p )
{
mem [q ].hhfield .b0 = l ;
goto lab10 ;
}
q = mem [q ].hhfield .v.RH ;
}
}
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
checkcolon ( void )
#else
checkcolon ( )
#endif
{
if ( curcmd != 81 )
{
missingerr ( 58 ) ;
{
helpptr = 2 ;
helpline [1 ]= 717 ;
helpline [0 ]= 694 ;
}
backerror () ;
}
}
void
#ifdef HAVE_PROTOTYPES
conditional ( void )
#else
conditional ( )
#endif
{
/* 10 30 21 40 */ halfword savecondptr ;
char newiflimit ;
halfword p ;
{
p = getnode ( 2 ) ;
mem [p ].hhfield .v.RH = condptr ;
mem [p ].hhfield .b0 = iflimit ;
mem [p ].hhfield .b1 = curif ;
mem [p + 1 ].cint = ifline ;
condptr = p ;
iflimit = 1 ;
ifline = line ;
curif = 1 ;
}
savecondptr = condptr ;
lab21: getboolean () ;
newiflimit = 4 ;
if ( internal [7 ]> 65536L )
{
begindiagnostic () ;
if ( curexp == 30 )
print ( 718 ) ;
else print ( 719 ) ;
enddiagnostic ( false ) ;
}
lab40: checkcolon () ;
if ( curexp == 30 )
{
changeiflimit ( newiflimit , savecondptr ) ;
goto lab10 ;
}
while ( true ) {
passtext () ;
if ( condptr == savecondptr )
goto lab30 ;
else if ( curmod == 2 )
{
p = condptr ;
ifline = mem [p + 1 ].cint ;
curif = mem [p ].hhfield .b1 ;
iflimit = mem [p ].hhfield .b0 ;
condptr = mem [p ].hhfield .v.RH ;
freenode ( p , 2 ) ;
}
}
lab30: curif = curmod ;
ifline = line ;
if ( curmod == 2 )
{
p = condptr ;
ifline = mem [p + 1 ].cint ;
curif = mem [p ].hhfield .b1 ;
iflimit = mem [p ].hhfield .b0 ;
condptr = mem [p ].hhfield .v.RH ;
freenode ( p , 2 ) ;
}
else if ( curmod == 4 )
goto lab21 ;
else {
curexp = 30 ;
newiflimit = 2 ;
getxnext () ;
goto lab40 ;
}
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zbadfor ( strnumber s )
#else
zbadfor ( s )
strnumber s ;
#endif
{
disperr ( 0 , 722 ) ;
print ( s ) ;
print ( 305 ) ;
{
helpptr = 4 ;
helpline [3 ]= 723 ;
helpline [2 ]= 724 ;
helpline [1 ]= 725 ;
helpline [0 ]= 307 ;
}
putgetflusherror ( 0 ) ;
}
void
#ifdef HAVE_PROTOTYPES
beginiteration ( void )
#else
beginiteration ( )
#endif
{
/* 22 30 40 */ halfword m ;
halfword n ;
halfword p, q, s, pp ;
m = curmod ;
n = cursym ;
s = getnode ( 2 ) ;
if ( m == 1 )
{
mem [s + 1 ].hhfield .lhfield = 1 ;
p = 0 ;
getxnext () ;
goto lab40 ;
}
getsymbol () ;
p = getnode ( 2 ) ;
mem [p ].hhfield .lhfield = cursym ;
mem [p + 1 ].cint = m ;
getxnext () ;
if ( ( curcmd != 51 ) && ( curcmd != 77 ) )
{
missingerr ( 61 ) ;
{
helpptr = 3 ;
helpline [2 ]= 726 ;
helpline [1 ]= 669 ;
helpline [0 ]= 727 ;
}
backerror () ;
}
mem [s + 1 ].hhfield .lhfield = 0 ;
q = s + 1 ;
mem [q ].hhfield .v.RH = 0 ;
do {
getxnext () ;
if ( m != 9770 )
scansuffix () ;
else {
if ( curcmd >= 81 )
if ( curcmd <= 82 )
goto lab22 ;
scanexpression () ;
if ( curcmd == 74 )
if ( q == s + 1 )
{
if ( curtype != 16 )
badfor ( 733 ) ;
pp = getnode ( 4 ) ;
mem [pp + 1 ].cint = curexp ;
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
badfor ( 734 ) ;
mem [pp + 2 ].cint = curexp ;
if ( curcmd != 75 )
{
missingerr ( 489 ) ;
{
helpptr = 2 ;
helpline [1 ]= 735 ;
helpline [0 ]= 736 ;
}
backerror () ;
}
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
badfor ( 737 ) ;
mem [pp + 3 ].cint = curexp ;
mem [s + 1 ].hhfield .lhfield = pp ;
goto lab30 ;
}
curexp = stashcurexp () ;
}
mem [q ].hhfield .v.RH = getavail () ;
q = mem [q ].hhfield .v.RH ;
mem [q ].hhfield .lhfield = curexp ;
curtype = 1 ;
lab22: ;
} while ( ! ( curcmd != 82 ) ) ;
lab30: ;
lab40: if ( curcmd != 81 )
{
missingerr ( 58 ) ;
{
helpptr = 3 ;
helpline [2 ]= 728 ;
helpline [1 ]= 729 ;
helpline [0 ]= 730 ;
}
backerror () ;
}
q = getavail () ;
mem [q ].hhfield .lhfield = 9758 ;
scannerstatus = 6 ;
warninginfo = n ;
mem [s ].hhfield .lhfield = scantoks ( 4 , p , q , 0 ) ;
scannerstatus = 0 ;
mem [s ].hhfield .v.RH = loopptr ;
loopptr = s ;
resumeiteration () ;
}
void
#ifdef HAVE_PROTOTYPES
resumeiteration ( void )
#else
resumeiteration ( )
#endif
{
/* 45 10 */ halfword p, q ;
p = mem [loopptr + 1 ].hhfield .lhfield ;
if ( p > 1 )
{
curexp = mem [p + 1 ].cint ;
if ( ( ( mem [p + 2 ].cint > 0 ) && ( curexp > mem [p + 3 ].cint ) )
|| ( ( mem [p + 2 ].cint < 0 ) && ( curexp < mem [p + 3 ].cint ) ) )
goto lab45 ;
curtype = 16 ;
q = stashcurexp () ;
mem [p + 1 ].cint = curexp + mem [p + 2 ].cint ;
}
else if ( p < 1 )
{
p = mem [loopptr + 1 ].hhfield .v.RH ;
if ( p == 0 )
goto lab45 ;
mem [loopptr + 1 ].hhfield .v.RH = mem [p ].hhfield .v.RH ;
q = mem [p ].hhfield .lhfield ;
{
mem [p ].hhfield .v.RH = avail ;
avail = p ;
;
#ifdef STAT
decr ( dynused ) ;
#endif /* STAT */
}
}
else {
begintokenlist ( mem [loopptr ].hhfield .lhfield , 16 ) ;
goto lab10 ;
}
begintokenlist ( mem [loopptr ].hhfield .lhfield , 17 ) ;
stackargument ( q ) ;
if ( internal [7 ]> 65536L )
{
begindiagnostic () ;
printnl ( 732 ) ;
if ( ( q != 0 ) && ( mem [q ].hhfield .v.RH == 1 ) )
printexp ( q , 1 ) ;
else showtokenlist ( q , 0 , 50 , 0 ) ;
printchar ( 125 ) ;
enddiagnostic ( false ) ;
}
goto lab10 ;
lab45: stopiteration () ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
stopiteration ( void )
#else
stopiteration ( )
#endif
{
halfword p, q ;
p = mem [loopptr + 1 ].hhfield .lhfield ;
if ( p > 1 )
freenode ( p , 4 ) ;
else if ( p < 1 )
{
q = mem [loopptr + 1 ].hhfield .v.RH ;
while ( q != 0 ) {
p = mem [q ].hhfield .lhfield ;
if ( p != 0 )
if ( mem [p ].hhfield .v.RH == 1 )
{
recyclevalue ( p ) ;
freenode ( p , 2 ) ;
}
else flushtokenlist ( p ) ;
p = q ;
q = mem [q ].hhfield .v.RH ;
{
mem [p ].hhfield .v.RH = avail ;
avail = p ;
;
#ifdef STAT
decr ( dynused ) ;
#endif /* STAT */
}
}
}
p = loopptr ;
loopptr = mem [p ].hhfield .v.RH ;
flushtokenlist ( mem [p ].hhfield .lhfield ) ;
freenode ( p , 2 ) ;
}
void
#ifdef HAVE_PROTOTYPES
beginname ( void )
#else
beginname ( )
#endif
{
areadelimiter = 0 ;
extdelimiter = 0 ;
}
boolean
#ifdef HAVE_PROTOTYPES
zmorename ( ASCIIcode c )
#else
zmorename ( c )
ASCIIcode c ;
#endif
{
register boolean Result; if ( ( c == 32 ) || ( c == 9 ) )
Result = false ;
else {
if ( ISDIRSEP ( c ) )
{
areadelimiter = poolptr ;
extdelimiter = 0 ;
}
else if ( c == 46 )
extdelimiter = poolptr ;
{
if ( poolptr + 1 > maxpoolptr )
{
if ( poolptr + 1 > poolsize )
overflow ( 257 , poolsize - initpoolptr ) ;
maxpoolptr = poolptr + 1 ;
}
}
{
strpool [poolptr ]= c ;
incr ( poolptr ) ;
}
Result = true ;
}
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
endname ( void )
#else
endname ( )
#endif
{
if ( strptr + 3 > maxstrptr )
{
if ( strptr + 3 > maxstrings )
overflow ( 258 , maxstrings - initstrptr ) ;
maxstrptr = strptr + 3 ;
}
if ( areadelimiter == 0 )
curarea = 283 ;
else {
curarea = strptr ;
incr ( strptr ) ;
strstart [strptr ]= areadelimiter + 1 ;
}
if ( extdelimiter == 0 )
{
curext = 283 ;
curname = makestring () ;
}
else {
curname = strptr ;
incr ( strptr ) ;
strstart [strptr ]= extdelimiter ;
curext = makestring () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zpackfilename ( strnumber n , strnumber a , strnumber e )
#else
zpackfilename ( n , a , e )
strnumber n ;
strnumber a ;
strnumber e ;
#endif
{
integer k ;
ASCIIcode c ;
poolpointer j ;
k = 0 ;
if ( (char*) nameoffile )
libcfree ( (char*) nameoffile ) ;
nameoffile = xmalloc ( 1 + ( strstart [a + 1 ]- strstart [a ]) + (
strstart [n + 1 ]- strstart [n ]) + ( strstart [e + 1 ]- strstart [e
]) + 1 ) ;
{register integer for_end; j = strstart [a ];for_end = strstart [a + 1
]- 1 ; if ( j <= for_end) do
{
c = strpool [j ];
incr ( k ) ;
if ( k <= maxint )
nameoffile [k ]= xchr [c ];
}
while ( j++ < for_end ) ;}
{register integer for_end; j = strstart [n ];for_end = strstart [n + 1
]- 1 ; if ( j <= for_end) do
{
c = strpool [j ];
incr ( k ) ;
if ( k <= maxint )
nameoffile [k ]= xchr [c ];
}
while ( j++ < for_end ) ;}
{register integer for_end; j = strstart [e ];for_end = strstart [e + 1
]- 1 ; if ( j <= for_end) do
{
c = strpool [j ];
incr ( k ) ;
if ( k <= maxint )
nameoffile [k ]= xchr [c ];
}
while ( j++ < for_end ) ;}
if ( k <= maxint )
namelength = k ;
else namelength = maxint ;
nameoffile [namelength + 1 ]= 0 ;
}
void
#ifdef HAVE_PROTOTYPES
zpackbufferedname ( smallnumber n , integer a , integer b )
#else
zpackbufferedname ( n , a , b )
smallnumber n ;
integer a ;
integer b ;
#endif
{
integer k ;
ASCIIcode c ;
integer j ;
if ( n + b - a + 6 > maxint )
b = a + maxint - n - 6 ;
k = 0 ;
if ( (char*) nameoffile )
libcfree ( (char*) nameoffile ) ;
nameoffile = xmalloc ( 1 + n + ( b - a + 1 ) + 6 ) ;
{register integer for_end; j = 1 ;for_end = n ; if ( j <= for_end) do
{
c = xord [MFbasedefault [j ]];
incr ( k ) ;
if ( k <= maxint )
nameoffile [k ]= xchr [c ];
}
while ( j++ < for_end ) ;}
{register integer for_end; j = a ;for_end = b ; if ( j <= for_end) do
{
c = buffer [j ];
incr ( k ) ;
if ( k <= maxint )
nameoffile [k ]= xchr [c ];
}
while ( j++ < for_end ) ;}
{register integer for_end; j = basedefaultlength - 4 ;for_end =
basedefaultlength ; if ( j <= for_end) do
{
c = xord [MFbasedefault [j ]];
incr ( k ) ;
if ( k <= maxint )
nameoffile [k ]= xchr [c ];
}
while ( j++ < for_end ) ;}
if ( k <= maxint )
namelength = k ;
else namelength = maxint ;
nameoffile [namelength + 1 ]= 0 ;
}
strnumber
#ifdef HAVE_PROTOTYPES
makenamestring ( void )
#else
makenamestring ( )
#endif
{
register strnumber Result; integer k ;
if ( ( poolptr + namelength > poolsize ) || ( strptr == maxstrings ) )
Result = 63 ;
else {
{register integer for_end; k = 1 ;for_end = namelength ; if ( k <=
for_end) do
{
strpool [poolptr ]= xord [nameoffile [k ]];
incr ( poolptr ) ;
}
while ( k++ < for_end ) ;}
Result = makestring () ;
}
return Result ;
}
strnumber
#ifdef HAVE_PROTOTYPES
zamakenamestring ( alphafile f )
#else
zamakenamestring ( f )
alphafile f ;
#endif
{
register strnumber Result; Result = makenamestring () ;
return Result ;
}
strnumber
#ifdef HAVE_PROTOTYPES
zbmakenamestring ( bytefile f )
#else
zbmakenamestring ( f )
bytefile f ;
#endif
{
register strnumber Result; Result = makenamestring () ;
return Result ;
}
strnumber
#ifdef HAVE_PROTOTYPES
zwmakenamestring ( wordfile f )
#else
zwmakenamestring ( f )
wordfile f ;
#endif
{
register strnumber Result; Result = makenamestring () ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
scanfilename ( void )
#else
scanfilename ( )
#endif
{
/* 30 */ beginname () ;
while ( ( buffer [curinput .locfield ]== 32 ) || ( buffer [curinput
.locfield ]== 9 ) ) incr ( curinput .locfield ) ;
while ( true ) {
if ( ( buffer [curinput .locfield ]== 59 ) || ( buffer [curinput
.locfield ]== 37 ) )
goto lab30 ;
if ( ! morename ( buffer [curinput .locfield ]) )
goto lab30 ;
incr ( curinput .locfield ) ;
}
lab30: endname () ;
}
void
#ifdef HAVE_PROTOTYPES
zpackjobname ( strnumber s )
#else
zpackjobname ( s )
strnumber s ;
#endif
{
curarea = 283 ;
curext = s ;
curname = jobname ;
packfilename ( curname , curarea , curext ) ;
}
void
#ifdef HAVE_PROTOTYPES
zpromptfilename ( strnumber s , strnumber e )
#else
zpromptfilename ( s , e )
strnumber s ;
strnumber e ;
#endif
{
/* 30 */ integer k ;
if ( interaction == 2 )
;
if ( s == 739 )
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 740 ) ;
}
else {
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 741 ) ;
}
printfilename ( curname , curarea , curext ) ;
print ( 742 ) ;
if ( e == 743 )
showcontext () ;
printnl ( 744 ) ;
print ( s ) ;
if ( interaction < 2 )
fatalerror ( 745 ) ;
{
;
print ( 746 ) ;
terminput () ;
}
{
beginname () ;
k = first ;
while ( ( ( buffer [k ]== 32 ) || ( buffer [k ]== 9 ) ) && ( k < last
) ) incr ( k ) ;
while ( true ) {
if ( k == last )
goto lab30 ;
if ( ! morename ( buffer [k ]) )
goto lab30 ;
incr ( k ) ;
}
lab30: endname () ;
}
if ( curext == 283 )
curext = e ;
packfilename ( curname , curarea , curext ) ;
}
void
#ifdef HAVE_PROTOTYPES
openlogfile ( void )
#else
openlogfile ( )
#endif
{
char oldsetting ;
integer k ;
integer l ;
integer m ;
char * months ;
oldsetting = selector ;
if ( jobname == 0 )
jobname = 747 ;
packjobname ( 748 ) ;
while ( ! aopenout ( logfile ) ) {
selector = 1 ;
promptfilename ( 750 , 748 ) ;
}
texmflogname = amakenamestring ( logfile ) ;
selector = 2 ;
logopened = true ;
{
Fputs( logfile , "This is METAFONT, Version 2.7182" ) ;
Fputs( logfile , versionstring ) ;
print ( baseident ) ;
print ( 751 ) ;
printint ( roundunscaled ( internal [16 ]) ) ;
printchar ( 32 ) ;
months = " JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC" ;
m = roundunscaled ( internal [15 ]) ;
{register integer for_end; k = 3 * m - 2 ;for_end = 3 * m ; if ( k <=
for_end) do
putc ( months [k ], logfile );
while ( k++ < for_end ) ;}
printchar ( 32 ) ;
printint ( roundunscaled ( internal [14 ]) ) ;
printchar ( 32 ) ;
m = roundunscaled ( internal [17 ]) ;
printdd ( m / 60 ) ;
printchar ( 58 ) ;
printdd ( m % 60 ) ;
}
inputstack [inputptr ]= curinput ;
printnl ( 749 ) ;
l = inputstack [0 ].limitfield - 1 ;
{register integer for_end; k = 1 ;for_end = l ; if ( k <= for_end) do
print ( buffer [k ]) ;
while ( k++ < for_end ) ;}
println () ;
selector = oldsetting + 2 ;
}
void
#ifdef HAVE_PROTOTYPES
zbadexp ( strnumber s )
#else
zbadexp ( s )
strnumber s ;
#endif
{
char saveflag ;
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( s ) ;
}
print ( 766 ) ;
printcmdmod ( curcmd , curmod ) ;
printchar ( 39 ) ;
{
helpptr = 4 ;
helpline [3 ]= 767 ;
helpline [2 ]= 768 ;
helpline [1 ]= 769 ;
helpline [0 ]= 770 ;
}
backinput () ;
cursym = 0 ;
curcmd = 42 ;
curmod = 0 ;
inserror () ;
saveflag = varflag ;
varflag = 0 ;
getxnext () ;
varflag = saveflag ;
}
void
#ifdef HAVE_PROTOTYPES
zstashin ( halfword p )
#else
zstashin ( p )
halfword p ;
#endif
{
halfword q ;
mem [p ].hhfield .b0 = curtype ;
if ( curtype == 16 )
mem [p + 1 ].cint = curexp ;
else {
if ( curtype == 19 )
{
q = singledependency ( curexp ) ;
if ( q == depfinal )
{
mem [p ].hhfield .b0 = 16 ;
mem [p + 1 ].cint = 0 ;
freenode ( q , 2 ) ;
}
else {
mem [p ].hhfield .b0 = 17 ;
newdep ( p , q ) ;
}
recyclevalue ( curexp ) ;
}
else {
mem [p + 1 ]= mem [curexp + 1 ];
mem [mem [p + 1 ].hhfield .lhfield ].hhfield .v.RH = p ;
}
freenode ( curexp , 2 ) ;
}
curtype = 1 ;
}
void
#ifdef HAVE_PROTOTYPES
backexpr ( void )
#else
backexpr ( )
#endif
{
halfword p ;
p = stashcurexp () ;
mem [p ].hhfield .v.RH = 0 ;
begintokenlist ( p , 19 ) ;
}
void
#ifdef HAVE_PROTOTYPES
badsubscript ( void )
#else
badsubscript ( )
#endif
{
disperr ( 0 , 782 ) ;
{
helpptr = 3 ;
helpline [2 ]= 783 ;
helpline [1 ]= 784 ;
helpline [0 ]= 785 ;
}
flusherror ( 0 ) ;
}
void
#ifdef HAVE_PROTOTYPES
zobliterated ( halfword q )
#else
zobliterated ( q )
halfword q ;
#endif
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 786 ) ;
}
showtokenlist ( q , 0 , 1000 , 0 ) ;
print ( 787 ) ;
{
helpptr = 5 ;
helpline [4 ]= 788 ;
helpline [3 ]= 789 ;
helpline [2 ]= 790 ;
helpline [1 ]= 791 ;
helpline [0 ]= 792 ;
}
}
void
#ifdef HAVE_PROTOTYPES
zbinarymac ( halfword p , halfword c , halfword n )
#else
zbinarymac ( p , c , n )
halfword p ;
halfword c ;
halfword n ;
#endif
{
halfword q, r ;
q = getavail () ;
r = getavail () ;
mem [q ].hhfield .v.RH = r ;
mem [q ].hhfield .lhfield = p ;
mem [r ].hhfield .lhfield = stashcurexp () ;
macrocall ( c , q , n ) ;
}
void
#ifdef HAVE_PROTOTYPES
materializepen ( void )
#else
materializepen ( )
#endif
{
/* 50 */ scaled aminusb, aplusb, majoraxis, minoraxis ;
angle theta ;
halfword p ;
halfword q ;
q = curexp ;
if ( mem [q ].hhfield .b0 == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 802 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 803 ;
helpline [0 ]= 574 ;
}
putgeterror () ;
curexp = 3 ;
goto lab50 ;
}
else if ( mem [q ].hhfield .b0 == 4 )
{
tx = mem [q + 1 ].cint ;
ty = mem [q + 2 ].cint ;
txx = mem [q + 3 ].cint - tx ;
tyx = mem [q + 4 ].cint - ty ;
txy = mem [q + 5 ].cint - tx ;
tyy = mem [q + 6 ].cint - ty ;
aminusb = pythadd ( txx - tyy , tyx + txy ) ;
aplusb = pythadd ( txx + tyy , tyx - txy ) ;
majoraxis = halfp ( aminusb + aplusb ) ;
minoraxis = halfp ( abs ( aplusb - aminusb ) ) ;
if ( majoraxis == minoraxis )
theta = 0 ;
else theta = half ( narg ( txx - tyy , tyx + txy ) + narg ( txx + tyy ,
tyx - txy ) ) ;
freenode ( q , 7 ) ;
q = makeellipse ( majoraxis , minoraxis , theta ) ;
if ( ( tx != 0 ) || ( ty != 0 ) )
{
p = q ;
do {
mem [p + 1 ].cint = mem [p + 1 ].cint + tx ;
mem [p + 2 ].cint = mem [p + 2 ].cint + ty ;
p = mem [p ].hhfield .v.RH ;
} while ( ! ( p == q ) ) ;
}
}
curexp = makepen ( q ) ;
lab50: tossknotlist ( q ) ;
curtype = 6 ;
}
void
#ifdef HAVE_PROTOTYPES
knownpair ( void )
#else
knownpair ( )
#endif
{
halfword p ;
if ( curtype != 14 )
{
disperr ( 0 , 805 ) ;
{
helpptr = 5 ;
helpline [4 ]= 806 ;
helpline [3 ]= 807 ;
helpline [2 ]= 808 ;
helpline [1 ]= 809 ;
helpline [0 ]= 810 ;
}
putgetflusherror ( 0 ) ;
curx = 0 ;
cury = 0 ;
}
else {
p = mem [curexp + 1 ].cint ;
if ( mem [p ].hhfield .b0 == 16 )
curx = mem [p + 1 ].cint ;
else {
disperr ( p , 811 ) ;
{
helpptr = 5 ;
helpline [4 ]= 812 ;
helpline [3 ]= 807 ;
helpline [2 ]= 808 ;
helpline [1 ]= 809 ;
helpline [0 ]= 810 ;
}
putgeterror () ;
recyclevalue ( p ) ;
curx = 0 ;
}
if ( mem [p + 2 ].hhfield .b0 == 16 )
cury = mem [p + 3 ].cint ;
else {
disperr ( p + 2 , 813 ) ;
{
helpptr = 5 ;
helpline [4 ]= 814 ;
helpline [3 ]= 807 ;
helpline [2 ]= 808 ;
helpline [1 ]= 809 ;
helpline [0 ]= 810 ;
}
putgeterror () ;
recyclevalue ( p + 2 ) ;
cury = 0 ;
}
flushcurexp ( 0 ) ;
}
}
halfword
#ifdef HAVE_PROTOTYPES
newknot ( void )
#else
newknot ( )
#endif
{
register halfword Result; halfword q ;
q = getnode ( 7 ) ;
mem [q ].hhfield .b0 = 0 ;
mem [q ].hhfield .b1 = 0 ;
mem [q ].hhfield .v.RH = q ;
knownpair () ;
mem [q + 1 ].cint = curx ;
mem [q + 2 ].cint = cury ;
Result = q ;
return Result ;
}
smallnumber
#ifdef HAVE_PROTOTYPES
scandirection ( void )
#else
scandirection ( )
#endif
{
register smallnumber Result; char t ;
scaled x ;
getxnext () ;
if ( curcmd == 60 )
{
getxnext () ;
scanexpression () ;
if ( ( curtype != 16 ) || ( curexp < 0 ) )
{
disperr ( 0 , 817 ) ;
{
helpptr = 1 ;
helpline [0 ]= 818 ;
}
putgetflusherror ( 65536L ) ;
}
t = 3 ;
}
else {
scanexpression () ;
if ( curtype > 14 )
{
if ( curtype != 16 )
{
disperr ( 0 , 811 ) ;
{
helpptr = 5 ;
helpline [4 ]= 812 ;
helpline [3 ]= 807 ;
helpline [2 ]= 808 ;
helpline [1 ]= 809 ;
helpline [0 ]= 810 ;
}
putgetflusherror ( 0 ) ;
}
x = curexp ;
if ( curcmd != 82 )
{
missingerr ( 44 ) ;
{
helpptr = 2 ;
helpline [1 ]= 819 ;
helpline [0 ]= 820 ;
}
backerror () ;
}
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
{
disperr ( 0 , 813 ) ;
{
helpptr = 5 ;
helpline [4 ]= 814 ;
helpline [3 ]= 807 ;
helpline [2 ]= 808 ;
helpline [1 ]= 809 ;
helpline [0 ]= 810 ;
}
putgetflusherror ( 0 ) ;
}
cury = curexp ;
curx = x ;
}
else knownpair () ;
if ( ( curx == 0 ) && ( cury == 0 ) )
t = 4 ;
else {
t = 2 ;
curexp = narg ( curx , cury ) ;
}
}
if ( curcmd != 65 )
{
missingerr ( 125 ) ;
{
helpptr = 3 ;
helpline [2 ]= 815 ;
helpline [1 ]= 816 ;
helpline [0 ]= 694 ;
}
backerror () ;
}
getxnext () ;
Result = t ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zdonullary ( quarterword c )
#else
zdonullary ( c )
quarterword c ;
#endif
{
integer k ;
{
if ( aritherror )
cleararith () ;
}
if ( internal [7 ]> 131072L )
showcmdmod ( 33 , c ) ;
switch ( c )
{case 30 :
case 31 :
{
curtype = 2 ;
curexp = c ;
}
break ;
case 32 :
{
curtype = 11 ;
curexp = getnode ( 6 ) ;
initedges ( curexp ) ;
}
break ;
case 33 :
{
curtype = 6 ;
curexp = 3 ;
}
break ;
case 37 :
{
curtype = 16 ;
curexp = normrand () ;
}
break ;
case 36 :
{
curtype = 8 ;
curexp = getnode ( 7 ) ;
mem [curexp ].hhfield .b0 = 4 ;
mem [curexp ].hhfield .b1 = 4 ;
mem [curexp ].hhfield .v.RH = curexp ;
mem [curexp + 1 ].cint = 0 ;
mem [curexp + 2 ].cint = 0 ;
mem [curexp + 3 ].cint = 65536L ;
mem [curexp + 4 ].cint = 0 ;
mem [curexp + 5 ].cint = 0 ;
mem [curexp + 6 ].cint = 65536L ;
}
break ;
case 34 :
{
if ( jobname == 0 )
openlogfile () ;
curtype = 4 ;
curexp = jobname ;
}
break ;
case 35 :
{
if ( interaction <= 1 )
fatalerror ( 831 ) ;
beginfilereading () ;
curinput .namefield = 1 ;
{
;
print ( 283 ) ;
terminput () ;
}
{
if ( poolptr + last - curinput .startfield > maxpoolptr )
{
if ( poolptr + last - curinput .startfield > poolsize )
overflow ( 257 , poolsize - initpoolptr ) ;
maxpoolptr = poolptr + last - curinput .startfield ;
}
}
{register integer for_end; k = curinput .startfield ;for_end = last -
1 ; if ( k <= for_end) do
{
strpool [poolptr ]= buffer [k ];
incr ( poolptr ) ;
}
while ( k++ < for_end ) ;}
endfilereading () ;
curtype = 4 ;
curexp = makestring () ;
}
break ;
}
{
if ( aritherror )
cleararith () ;
}
}
boolean
#ifdef HAVE_PROTOTYPES
znicepair ( integer p , quarterword t )
#else
znicepair ( p , t )
integer p ;
quarterword t ;
#endif
{
/* 10 */ register boolean Result; if ( t == 14 )
{
p = mem [p + 1 ].cint ;
if ( mem [p ].hhfield .b0 == 16 )
if ( mem [p + 2 ].hhfield .b0 == 16 )
{
Result = true ;
goto lab10 ;
}
}
Result = false ;
lab10: ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zprintknownorunknowntype ( smallnumber t , integer v )
#else
zprintknownorunknowntype ( t , v )
smallnumber t ;
integer v ;
#endif
{
printchar ( 40 ) ;
if ( t < 17 )
if ( t != 14 )
printtype ( t ) ;
else if ( nicepair ( v , 14 ) )
print ( 335 ) ;
else print ( 832 ) ;
else print ( 833 ) ;
printchar ( 41 ) ;
}
void
#ifdef HAVE_PROTOTYPES
zbadunary ( quarterword c )
#else
zbadunary ( c )
quarterword c ;
#endif
{
disperr ( 0 , 834 ) ;
printop ( c ) ;
printknownorunknowntype ( curtype , curexp ) ;
{
helpptr = 3 ;
helpline [2 ]= 835 ;
helpline [1 ]= 836 ;
helpline [0 ]= 837 ;
}
putgeterror () ;
}
void
#ifdef HAVE_PROTOTYPES
znegatedeplist ( halfword p )
#else
znegatedeplist ( p )
halfword p ;
#endif
{
/* 10 */ while ( true ) {
mem [p + 1 ].cint = - (integer) mem [p + 1 ].cint ;
if ( mem [p ].hhfield .lhfield == 0 )
goto lab10 ;
p = mem [p ].hhfield .v.RH ;
}
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
pairtopath ( void )
#else
pairtopath ( )
#endif
{
curexp = newknot () ;
curtype = 9 ;
}
void
#ifdef HAVE_PROTOTYPES
ztakepart ( quarterword c )
#else
ztakepart ( c )
quarterword c ;
#endif
{
halfword p ;
p = mem [curexp + 1 ].cint ;
mem [18 ].cint = p ;
mem [17 ].hhfield .b0 = curtype ;
mem [p ].hhfield .v.RH = 17 ;
freenode ( curexp , 2 ) ;
makeexpcopy ( p + 2 * ( c - 53 ) ) ;
recyclevalue ( 17 ) ;
}
void
#ifdef HAVE_PROTOTYPES
zstrtonum ( quarterword c )
#else
zstrtonum ( c )
quarterword c ;
#endif
{
integer n ;
ASCIIcode m ;
poolpointer k ;
char b ;
boolean badchar ;
if ( c == 49 )
if ( ( strstart [curexp + 1 ]- strstart [curexp ]) == 0 )
n = -1 ;
else n = strpool [strstart [curexp ]];
else {
if ( c == 47 )
b = 8 ;
else b = 16 ;
n = 0 ;
badchar = false ;
{register integer for_end; k = strstart [curexp ];for_end = strstart [
curexp + 1 ]- 1 ; if ( k <= for_end) do
{
m = strpool [k ];
if ( ( m >= 48 ) && ( m <= 57 ) )
m = m - 48 ;
else if ( ( m >= 65 ) && ( m <= 70 ) )
m = m - 55 ;
else if ( ( m >= 97 ) && ( m <= 102 ) )
m = m - 87 ;
else {
badchar = true ;
m = 0 ;
}
if ( m >= b )
{
badchar = true ;
m = 0 ;
}
if ( n < 32768L / b )
n = n * b + m ;
else n = 32767 ;
}
while ( k++ < for_end ) ;}
if ( badchar )
{
disperr ( 0 , 839 ) ;
if ( c == 47 )
{
helpptr = 1 ;
helpline [0 ]= 840 ;
}
else {
helpptr = 1 ;
helpline [0 ]= 841 ;
}
putgeterror () ;
}
if ( n > 4095 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 842 ) ;
}
printint ( n ) ;
printchar ( 41 ) ;
{
helpptr = 1 ;
helpline [0 ]= 843 ;
}
putgeterror () ;
}
}
flushcurexp ( n * 65536L ) ;
}
scaled
#ifdef HAVE_PROTOTYPES
pathlength ( void )
#else
pathlength ( )
#endif
{
register scaled Result; scaled n ;
halfword p ;
p = curexp ;
if ( mem [p ].hhfield .b0 == 0 )
n = -65536L ;
else n = 0 ;
do {
p = mem [p ].hhfield .v.RH ;
n = n + 65536L ;
} while ( ! ( p == curexp ) ) ;
Result = n ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
ztestknown ( quarterword c )
#else
ztestknown ( c )
quarterword c ;
#endif
{
/* 30 */ char b ;
halfword p, q ;
b = 31 ;
switch ( curtype )
{case 1 :
case 2 :
case 4 :
case 6 :
case 8 :
case 9 :
case 11 :
case 16 :
b = 30 ;
break ;
case 13 :
case 14 :
{
p = mem [curexp + 1 ].cint ;
q = p + bignodesize [curtype ];
do {
q = q - 2 ;
if ( mem [q ].hhfield .b0 != 16 )
goto lab30 ;
} while ( ! ( q == p ) ) ;
b = 30 ;
lab30: ;
}
break ;
default:
;
break ;
}
if ( c == 39 )
flushcurexp ( b ) ;
else flushcurexp ( 61 - b ) ;
curtype = 2 ;
}
void
#ifdef HAVE_PROTOTYPES
zdounary ( quarterword c )
#else
zdounary ( c )
quarterword c ;
#endif
{
halfword p, q ;
integer x ;
{
if ( aritherror )
cleararith () ;
}
if ( internal [7 ]> 131072L )
{
begindiagnostic () ;
printnl ( 123 ) ;
printop ( c ) ;
printchar ( 40 ) ;
printexp ( 0 , 0 ) ;
print ( 838 ) ;
enddiagnostic ( false ) ;
}
switch ( c )
{case 69 :
if ( curtype < 14 )
if ( curtype != 11 )
badunary ( 69 ) ;
break ;
case 70 :
switch ( curtype )
{case 14 :
case 19 :
{
q = curexp ;
makeexpcopy ( q ) ;
if ( curtype == 17 )
negatedeplist ( mem [curexp + 1 ].hhfield .v.RH ) ;
else if ( curtype == 14 )
{
p = mem [curexp + 1 ].cint ;
if ( mem [p ].hhfield .b0 == 16 )
mem [p + 1 ].cint = - (integer) mem [p + 1 ].cint ;
else negatedeplist ( mem [p + 1 ].hhfield .v.RH ) ;
if ( mem [p + 2 ].hhfield .b0 == 16 )
mem [p + 3 ].cint = - (integer) mem [p + 3 ].cint ;
else negatedeplist ( mem [p + 3 ].hhfield .v.RH ) ;
}
recyclevalue ( q ) ;
freenode ( q , 2 ) ;
}
break ;
case 17 :
case 18 :
negatedeplist ( mem [curexp + 1 ].hhfield .v.RH ) ;
break ;
case 16 :
curexp = - (integer) curexp ;
break ;
case 11 :
negateedges ( curexp ) ;
break ;
default:
badunary ( 70 ) ;
break ;
}
break ;
case 41 :
if ( curtype != 2 )
badunary ( 41 ) ;
else curexp = 61 - curexp ;
break ;
case 59 :
case 60 :
case 61 :
case 62 :
case 63 :
case 64 :
case 65 :
case 38 :
case 66 :
if ( curtype != 16 )
badunary ( c ) ;
else switch ( c )
{case 59 :
curexp = squarert ( curexp ) ;
break ;
case 60 :
curexp = mexp ( curexp ) ;
break ;
case 61 :
curexp = mlog ( curexp ) ;
break ;
case 62 :
case 63 :
{
nsincos ( ( curexp % 23592960L ) * 16 ) ;
if ( c == 62 )
curexp = roundfraction ( nsin ) ;
else curexp = roundfraction ( ncos ) ;
}
break ;
case 64 :
curexp = floorscaled ( curexp ) ;
break ;
case 65 :
curexp = unifrand ( curexp ) ;
break ;
case 38 :
{
if ( odd ( roundunscaled ( curexp ) ) )
curexp = 30 ;
else curexp = 31 ;
curtype = 2 ;
}
break ;
case 66 :
{
curexp = roundunscaled ( curexp ) % 256 ;
if ( curexp < 0 )
curexp = curexp + 256 ;
if ( charexists [curexp ])
curexp = 30 ;
else curexp = 31 ;
curtype = 2 ;
}
break ;
}
break ;
case 67 :
if ( nicepair ( curexp , curtype ) )
{
p = mem [curexp + 1 ].cint ;
x = narg ( mem [p + 1 ].cint , mem [p + 3 ].cint ) ;
if ( x >= 0 )
flushcurexp ( ( x + 8 ) / 16 ) ;
else flushcurexp ( - (integer) ( ( - (integer) x + 8 ) / 16 ) ) ;
}
else badunary ( 67 ) ;
break ;
case 53 :
case 54 :
if ( ( curtype <= 14 ) && ( curtype >= 13 ) )
takepart ( c ) ;
else badunary ( c ) ;
break ;
case 55 :
case 56 :
case 57 :
case 58 :
if ( curtype == 13 )
takepart ( c ) ;
else badunary ( c ) ;
break ;
case 50 :
if ( curtype != 16 )
badunary ( 50 ) ;
else {
curexp = roundunscaled ( curexp ) % 256 ;
curtype = 4 ;
if ( curexp < 0 )
curexp = curexp + 256 ;
}
break ;
case 42 :
if ( curtype != 16 )
badunary ( 42 ) ;
else {
oldsetting = selector ;
selector = 5 ;
printscaled ( curexp ) ;
curexp = makestring () ;
selector = oldsetting ;
curtype = 4 ;
}
break ;
case 47 :
case 48 :
case 49 :
if ( curtype != 4 )
badunary ( c ) ;
else strtonum ( c ) ;
break ;
case 51 :
if ( curtype == 4 )
flushcurexp ( ( strstart [curexp + 1 ]- strstart [curexp ]) * 65536L )
;
else if ( curtype == 9 )
flushcurexp ( pathlength () ) ;
else if ( curtype == 16 )
curexp = abs ( curexp ) ;
else if ( nicepair ( curexp , curtype ) )
flushcurexp ( pythadd ( mem [mem [curexp + 1 ].cint + 1 ].cint , mem [
mem [curexp + 1 ].cint + 3 ].cint ) ) ;
else badunary ( c ) ;
break ;
case 52 :
if ( curtype == 14 )
flushcurexp ( 0 ) ;
else if ( curtype != 9 )
badunary ( 52 ) ;
else if ( mem [curexp ].hhfield .b0 == 0 )
flushcurexp ( 0 ) ;
else {
curpen = 3 ;
curpathtype = 1 ;
curexp = makespec ( curexp , -1879080960L , 0 ) ;
flushcurexp ( turningnumber * 65536L ) ;
}
break ;
case 2 :
{
if ( ( curtype >= 2 ) && ( curtype <= 3 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 4 :
{
if ( ( curtype >= 4 ) && ( curtype <= 5 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 6 :
{
if ( ( curtype >= 6 ) && ( curtype <= 8 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 9 :
{
if ( ( curtype >= 9 ) && ( curtype <= 10 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 11 :
{
if ( ( curtype >= 11 ) && ( curtype <= 12 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 13 :
case 14 :
{
if ( curtype == c )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 15 :
{
if ( ( curtype >= 16 ) && ( curtype <= 19 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 39 :
case 40 :
testknown ( c ) ;
break ;
case 68 :
{
if ( curtype != 9 )
flushcurexp ( 31 ) ;
else if ( mem [curexp ].hhfield .b0 != 0 )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 45 :
{
if ( curtype == 14 )
pairtopath () ;
if ( curtype == 9 )
curtype = 8 ;
else badunary ( 45 ) ;
}
break ;
case 44 :
{
if ( curtype == 8 )
materializepen () ;
if ( curtype != 6 )
badunary ( 44 ) ;
else {
flushcurexp ( makepath ( curexp ) ) ;
curtype = 9 ;
}
}
break ;
case 46 :
if ( curtype != 11 )
badunary ( 46 ) ;
else flushcurexp ( totalweight ( curexp ) ) ;
break ;
case 43 :
if ( curtype == 9 )
{
p = htapypoc ( curexp ) ;
if ( mem [p ].hhfield .b1 == 0 )
p = mem [p ].hhfield .v.RH ;
tossknotlist ( curexp ) ;
curexp = p ;
}
else if ( curtype == 14 )
pairtopath () ;
else badunary ( 43 ) ;
break ;
}
{
if ( aritherror )
cleararith () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zbadbinary ( halfword p , quarterword c )
#else
zbadbinary ( p , c )
halfword p ;
quarterword c ;
#endif
{
disperr ( p , 283 ) ;
disperr ( 0 , 834 ) ;
if ( c >= 94 )
printop ( c ) ;
printknownorunknowntype ( mem [p ].hhfield .b0 , p ) ;
if ( c >= 94 )
print ( 478 ) ;
else printop ( c ) ;
printknownorunknowntype ( curtype , curexp ) ;
{
helpptr = 3 ;
helpline [2 ]= 835 ;
helpline [1 ]= 844 ;
helpline [0 ]= 845 ;
}
putgeterror () ;
}
halfword
#ifdef HAVE_PROTOTYPES
ztarnished ( halfword p )
#else
ztarnished ( p )
halfword p ;
#endif
{
/* 10 */ register halfword Result; halfword q ;
halfword r ;
q = mem [p + 1 ].cint ;
r = q + bignodesize [mem [p ].hhfield .b0 ];
do {
r = r - 2 ;
if ( mem [r ].hhfield .b0 == 19 )
{
Result = 1 ;
goto lab10 ;
}
} while ( ! ( r == q ) ) ;
Result = 0 ;
lab10: ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zdepfinish ( halfword v , halfword q , smallnumber t )
#else
zdepfinish ( v , q , t )
halfword v ;
halfword q ;
smallnumber t ;
#endif
{
halfword p ;
scaled vv ;
if ( q == 0 )
p = curexp ;
else p = q ;
mem [p + 1 ].hhfield .v.RH = v ;
mem [p ].hhfield .b0 = t ;
if ( mem [v ].hhfield .lhfield == 0 )
{
vv = mem [v + 1 ].cint ;
if ( q == 0 )
flushcurexp ( vv ) ;
else {
recyclevalue ( p ) ;
mem [q ].hhfield .b0 = 16 ;
mem [q + 1 ].cint = vv ;
}
}
else if ( q == 0 )
curtype = t ;
if ( fixneeded )
fixdependencies () ;
}
void
#ifdef HAVE_PROTOTYPES
zaddorsubtract ( halfword p , halfword q , quarterword c )
#else
zaddorsubtract ( p , q , c )
halfword p ;
halfword q ;
quarterword c ;
#endif
{
/* 30 10 */ smallnumber s, t ;
halfword r ;
integer v ;
if ( q == 0 )
{
t = curtype ;
if ( t < 17 )
v = curexp ;
else v = mem [curexp + 1 ].hhfield .v.RH ;
}
else {
t = mem [q ].hhfield .b0 ;
if ( t < 17 )
v = mem [q + 1 ].cint ;
else v = mem [q + 1 ].hhfield .v.RH ;
}
if ( t == 16 )
{
if ( c == 70 )
v = - (integer) v ;
if ( mem [p ].hhfield .b0 == 16 )
{
v = slowadd ( mem [p + 1 ].cint , v ) ;
if ( q == 0 )
curexp = v ;
else mem [q + 1 ].cint = v ;
goto lab10 ;
}
r = mem [p + 1 ].hhfield .v.RH ;
while ( mem [r ].hhfield .lhfield != 0 ) r = mem [r ].hhfield .v.RH ;
mem [r + 1 ].cint = slowadd ( mem [r + 1 ].cint , v ) ;
if ( q == 0 )
{
q = getnode ( 2 ) ;
curexp = q ;
curtype = mem [p ].hhfield .b0 ;
mem [q ].hhfield .b1 = 11 ;
}
mem [q + 1 ].hhfield .v.RH = mem [p + 1 ].hhfield .v.RH ;
mem [q ].hhfield .b0 = mem [p ].hhfield .b0 ;
mem [q + 1 ].hhfield .lhfield = mem [p + 1 ].hhfield .lhfield ;
mem [mem [p + 1 ].hhfield .lhfield ].hhfield .v.RH = q ;
mem [p ].hhfield .b0 = 16 ;
}
else {
if ( c == 70 )
negatedeplist ( v ) ;
if ( mem [p ].hhfield .b0 == 16 )
{
while ( mem [v ].hhfield .lhfield != 0 ) v = mem [v ].hhfield .v.RH
;
mem [v + 1 ].cint = slowadd ( mem [p + 1 ].cint , mem [v + 1 ]
.cint ) ;
}
else {
s = mem [p ].hhfield .b0 ;
r = mem [p + 1 ].hhfield .v.RH ;
if ( t == 17 )
{
if ( s == 17 )
if ( maxcoef ( r ) + maxcoef ( v ) < 626349397L )
{
v = pplusq ( v , r , 17 ) ;
goto lab30 ;
}
t = 18 ;
v = poverv ( v , 65536L , 17 , 18 ) ;
}
if ( s == 18 )
v = pplusq ( v , r , 18 ) ;
else v = pplusfq ( v , 65536L , r , 18 , 17 ) ;
lab30: if ( q != 0 )
depfinish ( v , q , t ) ;
else {
curtype = t ;
depfinish ( v , 0 , t ) ;
}
}
}
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zdepmult ( halfword p , integer v , boolean visscaled )
#else
zdepmult ( p , v , visscaled )
halfword p ;
integer v ;
boolean visscaled ;
#endif
{
/* 10 */ halfword q ;
smallnumber s, t ;
if ( p == 0 )
q = curexp ;
else if ( mem [p ].hhfield .b0 != 16 )
q = p ;
else {
if ( visscaled )
mem [p + 1 ].cint = takescaled ( mem [p + 1 ].cint , v ) ;
else mem [p + 1 ].cint = takefraction ( mem [p + 1 ].cint , v ) ;
goto lab10 ;
}
t = mem [q ].hhfield .b0 ;
q = mem [q + 1 ].hhfield .v.RH ;
s = t ;
if ( t == 17 )
if ( visscaled )
if ( abvscd ( maxcoef ( q ) , abs ( v ) , 626349396L , 65536L ) >= 0 )
t = 18 ;
q = ptimesv ( q , v , s , t , visscaled ) ;
depfinish ( q , p , t ) ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zhardtimes ( halfword p )
#else
zhardtimes ( p )
halfword p ;
#endif
{
halfword q ;
halfword r ;
scaled u, v ;
if ( mem [p ].hhfield .b0 == 14 )
{
q = stashcurexp () ;
unstashcurexp ( p ) ;
p = q ;
}
r = mem [curexp + 1 ].cint ;
u = mem [r + 1 ].cint ;
v = mem [r + 3 ].cint ;
mem [r + 2 ].hhfield .b0 = mem [p ].hhfield .b0 ;
newdep ( r + 2 , copydeplist ( mem [p + 1 ].hhfield .v.RH ) ) ;
mem [r ].hhfield .b0 = mem [p ].hhfield .b0 ;
mem [r + 1 ]= mem [p + 1 ];
mem [mem [p + 1 ].hhfield .lhfield ].hhfield .v.RH = r ;
freenode ( p , 2 ) ;
depmult ( r , u , true ) ;
depmult ( r + 2 , v , true ) ;
}
void
#ifdef HAVE_PROTOTYPES
zdepdiv ( halfword p , scaled v )
#else
zdepdiv ( p , v )
halfword p ;
scaled v ;
#endif
{
/* 10 */ halfword q ;
smallnumber s, t ;
if ( p == 0 )
q = curexp ;
else if ( mem [p ].hhfield .b0 != 16 )
q = p ;
else {
mem [p + 1 ].cint = makescaled ( mem [p + 1 ].cint , v ) ;
goto lab10 ;
}
t = mem [q ].hhfield .b0 ;
q = mem [q + 1 ].hhfield .v.RH ;
s = t ;
if ( t == 17 )
if ( abvscd ( maxcoef ( q ) , 65536L , 626349396L , abs ( v ) ) >= 0 )
t = 18 ;
q = poverv ( q , v , s , t ) ;
depfinish ( q , p , t ) ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zsetuptrans ( quarterword c )
#else
zsetuptrans ( c )
quarterword c ;
#endif
{
/* 30 10 */ halfword p, q, r ;
if ( ( c != 88 ) || ( curtype != 13 ) )
{
p = stashcurexp () ;
curexp = idtransform () ;
curtype = 13 ;
q = mem [curexp + 1 ].cint ;
switch ( c )
{case 84 :
if ( mem [p ].hhfield .b0 == 16 )
{
nsincos ( ( mem [p + 1 ].cint % 23592960L ) * 16 ) ;
mem [q + 5 ].cint = roundfraction ( ncos ) ;
mem [q + 9 ].cint = roundfraction ( nsin ) ;
mem [q + 7 ].cint = - (integer) mem [q + 9 ].cint ;
mem [q + 11 ].cint = mem [q + 5 ].cint ;
goto lab30 ;
}
break ;
case 85 :
if ( mem [p ].hhfield .b0 > 14 )
{
install ( q + 6 , p ) ;
goto lab30 ;
}
break ;
case 86 :
if ( mem [p ].hhfield .b0 > 14 )
{
install ( q + 4 , p ) ;
install ( q + 10 , p ) ;
goto lab30 ;
}
break ;
case 87 :
if ( mem [p ].hhfield .b0 == 14 )
{
r = mem [p + 1 ].cint ;
install ( q , r ) ;
install ( q + 2 , r + 2 ) ;
goto lab30 ;
}
break ;
case 89 :
if ( mem [p ].hhfield .b0 > 14 )
{
install ( q + 4 , p ) ;
goto lab30 ;
}
break ;
case 90 :
if ( mem [p ].hhfield .b0 > 14 )
{
install ( q + 10 , p ) ;
goto lab30 ;
}
break ;
case 91 :
if ( mem [p ].hhfield .b0 == 14 )
{
r = mem [p + 1 ].cint ;
install ( q + 4 , r ) ;
install ( q + 10 , r ) ;
install ( q + 8 , r + 2 ) ;
if ( mem [r + 2 ].hhfield .b0 == 16 )
mem [r + 3 ].cint = - (integer) mem [r + 3 ].cint ;
else negatedeplist ( mem [r + 3 ].hhfield .v.RH ) ;
install ( q + 6 , r + 2 ) ;
goto lab30 ;
}
break ;
case 88 :
;
break ;
}
disperr ( p , 854 ) ;
{
helpptr = 3 ;
helpline [2 ]= 855 ;
helpline [1 ]= 856 ;
helpline [0 ]= 537 ;
}
putgeterror () ;
lab30: recyclevalue ( p ) ;
freenode ( p , 2 ) ;
}
q = mem [curexp + 1 ].cint ;
r = q + 12 ;
do {
r = r - 2 ;
if ( mem [r ].hhfield .b0 != 16 )
goto lab10 ;
} while ( ! ( r == q ) ) ;
txx = mem [q + 5 ].cint ;
txy = mem [q + 7 ].cint ;
tyx = mem [q + 9 ].cint ;
tyy = mem [q + 11 ].cint ;
tx = mem [q + 1 ].cint ;
ty = mem [q + 3 ].cint ;
flushcurexp ( 0 ) ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zsetupknowntrans ( quarterword c )
#else
zsetupknowntrans ( c )
quarterword c ;
#endif
{
setuptrans ( c ) ;
if ( curtype != 16 )
{
disperr ( 0 , 857 ) ;
{
helpptr = 3 ;
helpline [2 ]= 858 ;
helpline [1 ]= 859 ;
helpline [0 ]= 537 ;
}
putgetflusherror ( 0 ) ;
txx = 65536L ;
txy = 0 ;
tyx = 0 ;
tyy = 65536L ;
tx = 0 ;
ty = 0 ;
}
}
void
#ifdef HAVE_PROTOTYPES
ztrans ( halfword p , halfword q )
#else
ztrans ( p , q )
halfword p ;
halfword q ;
#endif
{
scaled v ;
v = takescaled ( mem [p ].cint , txx ) + takescaled ( mem [q ].cint ,
txy ) + tx ;
mem [q ].cint = takescaled ( mem [p ].cint , tyx ) + takescaled ( mem [
q ].cint , tyy ) + ty ;
mem [p ].cint = v ;
}
void
#ifdef HAVE_PROTOTYPES
zpathtrans ( halfword p , quarterword c )
#else
zpathtrans ( p , c )
halfword p ;
quarterword c ;
#endif
{
/* 10 */ halfword q ;
setupknowntrans ( c ) ;
unstashcurexp ( p ) ;
if ( curtype == 6 )
{
if ( mem [curexp + 9 ].cint == 0 )
if ( tx == 0 )
if ( ty == 0 )
goto lab10 ;
flushcurexp ( makepath ( curexp ) ) ;
curtype = 8 ;
}
q = curexp ;
do {
if ( mem [q ].hhfield .b0 != 0 )
trans ( q + 3 , q + 4 ) ;
trans ( q + 1 , q + 2 ) ;
if ( mem [q ].hhfield .b1 != 0 )
trans ( q + 5 , q + 6 ) ;
q = mem [q ].hhfield .v.RH ;
} while ( ! ( q == curexp ) ) ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zedgestrans ( halfword p , quarterword c )
#else
zedgestrans ( p , c )
halfword p ;
quarterword c ;
#endif
{
/* 10 */ setupknowntrans ( c ) ;
unstashcurexp ( p ) ;
curedges = curexp ;
if ( mem [curedges ].hhfield .v.RH == curedges )
goto lab10 ;
if ( txx == 0 )
if ( tyy == 0 )
if ( txy % 65536L == 0 )
if ( tyx % 65536L == 0 )
{
xyswapedges () ;
txx = txy ;
tyy = tyx ;
txy = 0 ;
tyx = 0 ;
if ( mem [curedges ].hhfield .v.RH == curedges )
goto lab10 ;
}
if ( txy == 0 )
if ( tyx == 0 )
if ( txx % 65536L == 0 )
if ( tyy % 65536L == 0 )
{
if ( ( txx == 0 ) || ( tyy == 0 ) )
{
tossedges ( curedges ) ;
curexp = getnode ( 6 ) ;
initedges ( curexp ) ;
}
else {
if ( txx < 0 )
{
xreflectedges () ;
txx = - (integer) txx ;
}
if ( tyy < 0 )
{
yreflectedges () ;
tyy = - (integer) tyy ;
}
if ( txx != 65536L )
xscaleedges ( txx / 65536L ) ;
if ( tyy != 65536L )
yscaleedges ( tyy / 65536L ) ;
tx = roundunscaled ( tx ) ;
ty = roundunscaled ( ty ) ;
if ( ( toint ( mem [curedges + 2 ].hhfield .lhfield ) + tx <= 0 ) || (
mem [curedges + 2 ].hhfield .v.RH + tx >= 8192 ) || ( toint ( mem [
curedges + 1 ].hhfield .lhfield ) + ty <= 0 ) || ( mem [curedges + 1 ]
.hhfield .v.RH + ty >= 8191 ) || ( abs ( tx ) >= 4096 ) || ( abs ( ty )
>= 4096 ) )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 863 ) ;
}
{
helpptr = 3 ;
helpline [2 ]= 864 ;
helpline [1 ]= 536 ;
helpline [0 ]= 537 ;
}
putgeterror () ;
}
else {
if ( tx != 0 )
{
if ( ! ( abs ( mem [curedges + 3 ].hhfield .lhfield - tx - 4096 )
< 4096 ) )
fixoffset () ;
mem [curedges + 2 ].hhfield .lhfield = mem [curedges + 2 ]
.hhfield .lhfield + tx ;
mem [curedges + 2 ].hhfield .v.RH = mem [curedges + 2 ].hhfield
.v.RH + tx ;
mem [curedges + 3 ].hhfield .lhfield = mem [curedges + 3 ]
.hhfield .lhfield - tx ;
mem [curedges + 4 ].cint = 0 ;
}
if ( ty != 0 )
{
mem [curedges + 1 ].hhfield .lhfield = mem [curedges + 1 ]
.hhfield .lhfield + ty ;
mem [curedges + 1 ].hhfield .v.RH = mem [curedges + 1 ].hhfield
.v.RH + ty ;
mem [curedges + 5 ].hhfield .lhfield = mem [curedges + 5 ]
.hhfield .lhfield + ty ;
mem [curedges + 4 ].cint = 0 ;
}
}
}
goto lab10 ;
}
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 860 ) ;
}
{
helpptr = 3 ;
helpline [2 ]= 861 ;
helpline [1 ]= 862 ;
helpline [0 ]= 537 ;
}
putgeterror () ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zbilin1 ( halfword p , scaled t , halfword q , scaled u , scaled delta )
#else
zbilin1 ( p , t , q , u , delta )
halfword p ;
scaled t ;
halfword q ;
scaled u ;
scaled delta ;
#endif
{
halfword r ;
if ( t != 65536L )
depmult ( p , t , true ) ;
if ( u != 0 )
if ( mem [q ].hhfield .b0 == 16 )
delta = delta + takescaled ( mem [q + 1 ].cint , u ) ;
else {
if ( mem [p ].hhfield .b0 != 18 )
{
if ( mem [p ].hhfield .b0 == 16 )
newdep ( p , constdependency ( mem [p + 1 ].cint ) ) ;
else mem [p + 1 ].hhfield .v.RH = ptimesv ( mem [p + 1 ].hhfield
.v.RH , 65536L , 17 , 18 , true ) ;
mem [p ].hhfield .b0 = 18 ;
}
mem [p + 1 ].hhfield .v.RH = pplusfq ( mem [p + 1 ].hhfield .v.RH , u
, mem [q + 1 ].hhfield .v.RH , 18 , mem [q ].hhfield .b0 ) ;
}
if ( mem [p ].hhfield .b0 == 16 )
mem [p + 1 ].cint = mem [p + 1 ].cint + delta ;
else {
r = mem [p + 1 ].hhfield .v.RH ;
while ( mem [r ].hhfield .lhfield != 0 ) r = mem [r ].hhfield .v.RH ;
delta = mem [r + 1 ].cint + delta ;
if ( r != mem [p + 1 ].hhfield .v.RH )
mem [r + 1 ].cint = delta ;
else {
recyclevalue ( p ) ;
mem [p ].hhfield .b0 = 16 ;
mem [p + 1 ].cint = delta ;
}
}
if ( fixneeded )
fixdependencies () ;
}
void
#ifdef HAVE_PROTOTYPES
zaddmultdep ( halfword p , scaled v , halfword r )
#else
zaddmultdep ( p , v , r )
halfword p ;
scaled v ;
halfword r ;
#endif
{
if ( mem [r ].hhfield .b0 == 16 )
mem [depfinal + 1 ].cint = mem [depfinal + 1 ].cint + takescaled ( mem [
r + 1 ].cint , v ) ;
else {
mem [p + 1 ].hhfield .v.RH = pplusfq ( mem [p + 1 ].hhfield .v.RH , v
, mem [r + 1 ].hhfield .v.RH , 18 , mem [r ].hhfield .b0 ) ;
if ( fixneeded )
fixdependencies () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zbilin2 ( halfword p , halfword t , scaled v , halfword u , halfword q )
#else
zbilin2 ( p , t , v , u , q )
halfword p ;
halfword t ;
scaled v ;
halfword u ;
halfword q ;
#endif
{
scaled vv ;
vv = mem [p + 1 ].cint ;
mem [p ].hhfield .b0 = 18 ;
newdep ( p , constdependency ( 0 ) ) ;
if ( vv != 0 )
addmultdep ( p , vv , t ) ;
if ( v != 0 )
addmultdep ( p , v , u ) ;
if ( q != 0 )
addmultdep ( p , 65536L , q ) ;
if ( mem [p + 1 ].hhfield .v.RH == depfinal )
{
vv = mem [depfinal + 1 ].cint ;
recyclevalue ( p ) ;
mem [p ].hhfield .b0 = 16 ;
mem [p + 1 ].cint = vv ;
}
}
void
#ifdef HAVE_PROTOTYPES
zbilin3 ( halfword p , scaled t , scaled v , scaled u , scaled delta )
#else
zbilin3 ( p , t , v , u , delta )
halfword p ;
scaled t ;
scaled v ;
scaled u ;
scaled delta ;
#endif
{
if ( t != 65536L )
delta = delta + takescaled ( mem [p + 1 ].cint , t ) ;
else delta = delta + mem [p + 1 ].cint ;
if ( u != 0 )
mem [p + 1 ].cint = delta + takescaled ( v , u ) ;
else mem [p + 1 ].cint = delta ;
}
void
#ifdef HAVE_PROTOTYPES
zbigtrans ( halfword p , quarterword c )
#else
zbigtrans ( p , c )
halfword p ;
quarterword c ;
#endif
{
/* 10 */ halfword q, r, pp, qq ;
smallnumber s ;
s = bignodesize [mem [p ].hhfield .b0 ];
q = mem [p + 1 ].cint ;
r = q + s ;
do {
r = r - 2 ;
if ( mem [r ].hhfield .b0 != 16 )
{
setupknowntrans ( c ) ;
makeexpcopy ( p ) ;
r = mem [curexp + 1 ].cint ;
if ( curtype == 13 )
{
bilin1 ( r + 10 , tyy , q + 6 , tyx , 0 ) ;
bilin1 ( r + 8 , tyy , q + 4 , tyx , 0 ) ;
bilin1 ( r + 6 , txx , q + 10 , txy , 0 ) ;
bilin1 ( r + 4 , txx , q + 8 , txy , 0 ) ;
}
bilin1 ( r + 2 , tyy , q , tyx , ty ) ;
bilin1 ( r , txx , q + 2 , txy , tx ) ;
goto lab10 ;
}
} while ( ! ( r == q ) ) ;
setuptrans ( c ) ;
if ( curtype == 16 )
{
makeexpcopy ( p ) ;
r = mem [curexp + 1 ].cint ;
if ( curtype == 13 )
{
bilin3 ( r + 10 , tyy , mem [q + 7 ].cint , tyx , 0 ) ;
bilin3 ( r + 8 , tyy , mem [q + 5 ].cint , tyx , 0 ) ;
bilin3 ( r + 6 , txx , mem [q + 11 ].cint , txy , 0 ) ;
bilin3 ( r + 4 , txx , mem [q + 9 ].cint , txy , 0 ) ;
}
bilin3 ( r + 2 , tyy , mem [q + 1 ].cint , tyx , ty ) ;
bilin3 ( r , txx , mem [q + 3 ].cint , txy , tx ) ;
}
else {
pp = stashcurexp () ;
qq = mem [pp + 1 ].cint ;
makeexpcopy ( p ) ;
r = mem [curexp + 1 ].cint ;
if ( curtype == 13 )
{
bilin2 ( r + 10 , qq + 10 , mem [q + 7 ].cint , qq + 8 , 0 ) ;
bilin2 ( r + 8 , qq + 10 , mem [q + 5 ].cint , qq + 8 , 0 ) ;
bilin2 ( r + 6 , qq + 4 , mem [q + 11 ].cint , qq + 6 , 0 ) ;
bilin2 ( r + 4 , qq + 4 , mem [q + 9 ].cint , qq + 6 , 0 ) ;
}
bilin2 ( r + 2 , qq + 10 , mem [q + 1 ].cint , qq + 8 , qq + 2 ) ;
bilin2 ( r , qq + 4 , mem [q + 3 ].cint , qq + 6 , qq ) ;
recyclevalue ( pp ) ;
freenode ( pp , 2 ) ;
}
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zcat ( halfword p )
#else
zcat ( p )
halfword p ;
#endif
{
strnumber a, b ;
poolpointer k ;
a = mem [p + 1 ].cint ;
b = curexp ;
{
if ( poolptr + ( strstart [a + 1 ]- strstart [a ]) + ( strstart [b +
1 ]- strstart [b ]) > maxpoolptr )
{
if ( poolptr + ( strstart [a + 1 ]- strstart [a ]) + ( strstart [b
+ 1 ]- strstart [b ]) > poolsize )
overflow ( 257 , poolsize - initpoolptr ) ;
maxpoolptr = poolptr + ( strstart [a + 1 ]- strstart [a ]) + (
strstart [b + 1 ]- strstart [b ]) ;
}
}
{register integer for_end; k = strstart [a ];for_end = strstart [a + 1
]- 1 ; if ( k <= for_end) do
{
strpool [poolptr ]= strpool [k ];
incr ( poolptr ) ;
}
while ( k++ < for_end ) ;}
{register integer for_end; k = strstart [b ];for_end = strstart [b + 1
]- 1 ; if ( k <= for_end) do
{
strpool [poolptr ]= strpool [k ];
incr ( poolptr ) ;
}
while ( k++ < for_end ) ;}
curexp = makestring () ;
{
if ( strref [b ]< 127 )
if ( strref [b ]> 1 )
decr ( strref [b ]) ;
else flushstring ( b ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zchopstring ( halfword p )
#else
zchopstring ( p )
halfword p ;
#endif
{
integer a, b ;
integer l ;
integer k ;
strnumber s ;
boolean reversed ;
a = roundunscaled ( mem [p + 1 ].cint ) ;
b = roundunscaled ( mem [p + 3 ].cint ) ;
if ( a <= b )
reversed = false ;
else {
reversed = true ;
k = a ;
a = b ;
b = k ;
}
s = curexp ;
l = ( strstart [s + 1 ]- strstart [s ]) ;
if ( a < 0 )
{
a = 0 ;
if ( b < 0 )
b = 0 ;
}
if ( b > l )
{
b = l ;
if ( a > l )
a = l ;
}
{
if ( poolptr + b - a > maxpoolptr )
{
if ( poolptr + b - a > poolsize )
overflow ( 257 , poolsize - initpoolptr ) ;
maxpoolptr = poolptr + b - a ;
}
}
if ( reversed )
{register integer for_end; k = strstart [s ]+ b - 1 ;for_end = strstart
[s ]+ a ; if ( k >= for_end) do
{
strpool [poolptr ]= strpool [k ];
incr ( poolptr ) ;
}
while ( k-- > for_end ) ;}
else {
register integer for_end; k = strstart [s ]+ a ;for_end = strstart
[s ]+ b - 1 ; if ( k <= for_end) do
{
strpool [poolptr ]= strpool [k ];
incr ( poolptr ) ;
}
while ( k++ < for_end ) ;}
curexp = makestring () ;
{
if ( strref [s ]< 127 )
if ( strref [s ]> 1 )
decr ( strref [s ]) ;
else flushstring ( s ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zchoppath ( halfword p )
#else
zchoppath ( p )
halfword p ;
#endif
{
halfword q ;
halfword pp, qq, rr, ss ;
scaled a, b, k, l ;
boolean reversed ;
l = pathlength () ;
a = mem [p + 1 ].cint ;
b = mem [p + 3 ].cint ;
if ( a <= b )
reversed = false ;
else {
reversed = true ;
k = a ;
a = b ;
b = k ;
}
if ( a < 0 )
if ( mem [curexp ].hhfield .b0 == 0 )
{
a = 0 ;
if ( b < 0 )
b = 0 ;
}
else do {
a = a + l ;
b = b + l ;
} while ( ! ( a >= 0 ) ) ;
if ( b > l )
if ( mem [curexp ].hhfield .b0 == 0 )
{
b = l ;
if ( a > l )
a = l ;
}
else while ( a >= l ) {
a = a - l ;
b = b - l ;
}
q = curexp ;
while ( a >= 65536L ) {
q = mem [q ].hhfield .v.RH ;
a = a - 65536L ;
b = b - 65536L ;
}
if ( b == a )
{
if ( a > 0 )
{
qq = mem [q ].hhfield .v.RH ;
splitcubic ( q , a * 4096 , mem [qq + 1 ].cint , mem [qq + 2 ].cint
) ;
q = mem [q ].hhfield .v.RH ;
}
pp = copyknot ( q ) ;
qq = pp ;
}
else {
pp = copyknot ( q ) ;
qq = pp ;
do {
q = mem [q ].hhfield .v.RH ;
rr = qq ;
qq = copyknot ( q ) ;
mem [rr ].hhfield .v.RH = qq ;
b = b - 65536L ;
} while ( ! ( b <= 0 ) ) ;
if ( a > 0 )
{
ss = pp ;
pp = mem [pp ].hhfield .v.RH ;
splitcubic ( ss , a * 4096 , mem [pp + 1 ].cint , mem [pp + 2 ].cint
) ;
pp = mem [ss ].hhfield .v.RH ;
freenode ( ss , 7 ) ;
if ( rr == ss )
{
b = makescaled ( b , 65536L - a ) ;
rr = pp ;
}
}
if ( b < 0 )
{
splitcubic ( rr , ( b + 65536L ) * 4096 , mem [qq + 1 ].cint , mem [
qq + 2 ].cint ) ;
freenode ( qq , 7 ) ;
qq = mem [rr ].hhfield .v.RH ;
}
}
mem [pp ].hhfield .b0 = 0 ;
mem [qq ].hhfield .b1 = 0 ;
mem [qq ].hhfield .v.RH = pp ;
tossknotlist ( curexp ) ;
if ( reversed )
{
curexp = mem [htapypoc ( pp ) ].hhfield .v.RH ;
tossknotlist ( pp ) ;
}
else curexp = pp ;
}
void
#ifdef HAVE_PROTOTYPES
zpairvalue ( scaled x , scaled y )
#else
zpairvalue ( x , y )
scaled x ;
scaled y ;
#endif
{
halfword p ;
p = getnode ( 2 ) ;
flushcurexp ( p ) ;
curtype = 14 ;
mem [p ].hhfield .b0 = 14 ;
mem [p ].hhfield .b1 = 11 ;
initbignode ( p ) ;
p = mem [p + 1 ].cint ;
mem [p ].hhfield .b0 = 16 ;
mem [p + 1 ].cint = x ;
mem [p + 2 ].hhfield .b0 = 16 ;
mem [p + 3 ].cint = y ;
}
void
#ifdef HAVE_PROTOTYPES
zsetupoffset ( halfword p )
#else
zsetupoffset ( p )
halfword p ;
#endif
{
findoffset ( mem [p + 1 ].cint , mem [p + 3 ].cint , curexp ) ;
pairvalue ( curx , cury ) ;
}
void
#ifdef HAVE_PROTOTYPES
zsetupdirectiontime ( halfword p )
#else
zsetupdirectiontime ( p )
halfword p ;
#endif
{
flushcurexp ( finddirectiontime ( mem [p + 1 ].cint , mem [p + 3 ]
.cint , curexp ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
zfindpoint ( scaled v , quarterword c )
#else
zfindpoint ( v , c )
scaled v ;
quarterword c ;
#endif
{
halfword p ;
scaled n ;
halfword q ;
p = curexp ;
if ( mem [p ].hhfield .b0 == 0 )
n = -65536L ;
else n = 0 ;
do {
p = mem [p ].hhfield .v.RH ;
n = n + 65536L ;
} while ( ! ( p == curexp ) ) ;
if ( n == 0 )
v = 0 ;
else if ( v < 0 )
if ( mem [p ].hhfield .b0 == 0 )
v = 0 ;
else v = n - 1 - ( ( - (integer) v - 1 ) % n ) ;
else if ( v > n )
if ( mem [p ].hhfield .b0 == 0 )
v = n ;
else v = v % n ;
p = curexp ;
while ( v >= 65536L ) {
p = mem [p ].hhfield .v.RH ;
v = v - 65536L ;
}
if ( v != 0 )
{
q = mem [p ].hhfield .v.RH ;
splitcubic ( p , v * 4096 , mem [q + 1 ].cint , mem [q + 2 ].cint ) ;
p = mem [p ].hhfield .v.RH ;
}
switch ( c )
{case 97 :
pairvalue ( mem [p + 1 ].cint , mem [p + 2 ].cint ) ;
break ;
case 98 :
if ( mem [p ].hhfield .b0 == 0 )
pairvalue ( mem [p + 1 ].cint , mem [p + 2 ].cint ) ;
else pairvalue ( mem [p + 3 ].cint , mem [p + 4 ].cint ) ;
break ;
case 99 :
if ( mem [p ].hhfield .b1 == 0 )
pairvalue ( mem [p + 1 ].cint , mem [p + 2 ].cint ) ;
else pairvalue ( mem [p + 5 ].cint , mem [p + 6 ].cint ) ;
break ;
}
}
void
#ifdef HAVE_PROTOTYPES
zdobinary ( halfword p , quarterword c )
#else
zdobinary ( p , c )
halfword p ;
quarterword c ;
#endif
{
/* 30 31 10 */ halfword q, r, rr ;
halfword oldp, oldexp ;
integer v ;
{
if ( aritherror )
cleararith () ;
}
if ( internal [7 ]> 131072L )
{
begindiagnostic () ;
printnl ( 846 ) ;
printexp ( p , 0 ) ;
printchar ( 41 ) ;
printop ( c ) ;
printchar ( 40 ) ;
printexp ( 0 , 0 ) ;
print ( 838 ) ;
enddiagnostic ( false ) ;
}
switch ( mem [p ].hhfield .b0 )
{case 13 :
case 14 :
oldp = tarnished ( p ) ;
break ;
case 19 :
oldp = 1 ;
break ;
default:
oldp = 0 ;
break ;
}
if ( oldp != 0 )
{
q = stashcurexp () ;
oldp = p ;
makeexpcopy ( oldp ) ;
p = stashcurexp () ;
unstashcurexp ( q ) ;
}
switch ( curtype )
{case 13 :
case 14 :
oldexp = tarnished ( curexp ) ;
break ;
case 19 :
oldexp = 1 ;
break ;
default:
oldexp = 0 ;
break ;
}
if ( oldexp != 0 )
{
oldexp = curexp ;
makeexpcopy ( oldexp ) ;
}
switch ( c )
{case 69 :
case 70 :
if ( ( curtype < 14 ) || ( mem [p ].hhfield .b0 < 14 ) )
if ( ( curtype == 11 ) && ( mem [p ].hhfield .b0 == 11 ) )
{
if ( c == 70 )
negateedges ( curexp ) ;
curedges = curexp ;
mergeedges ( mem [p + 1 ].cint ) ;
}
else badbinary ( p , c ) ;
else if ( curtype == 14 )
if ( mem [p ].hhfield .b0 != 14 )
badbinary ( p , c ) ;
else {
q = mem [p + 1 ].cint ;
r = mem [curexp + 1 ].cint ;
addorsubtract ( q , r , c ) ;
addorsubtract ( q + 2 , r + 2 , c ) ;
}
else if ( mem [p ].hhfield .b0 == 14 )
badbinary ( p , c ) ;
else addorsubtract ( p , 0 , c ) ;
break ;
case 77 :
case 78 :
case 79 :
case 80 :
case 81 :
case 82 :
{
if ( ( curtype > 14 ) && ( mem [p ].hhfield .b0 > 14 ) )
addorsubtract ( p , 0 , 70 ) ;
else if ( curtype != mem [p ].hhfield .b0 )
{
badbinary ( p , c ) ;
goto lab30 ;
}
else if ( curtype == 4 )
flushcurexp ( strvsstr ( mem [p + 1 ].cint , curexp ) ) ;
else if ( ( curtype == 5 ) || ( curtype == 3 ) )
{
q = mem [curexp + 1 ].cint ;
while ( ( q != curexp ) && ( q != p ) ) q = mem [q + 1 ].cint ;
if ( q == p )
flushcurexp ( 0 ) ;
}
else if ( ( curtype == 14 ) || ( curtype == 13 ) )
{
q = mem [p + 1 ].cint ;
r = mem [curexp + 1 ].cint ;
rr = r + bignodesize [curtype ]- 2 ;
while ( true ) {
addorsubtract ( q , r , 70 ) ;
if ( mem [r ].hhfield .b0 != 16 )
goto lab31 ;
if ( mem [r + 1 ].cint != 0 )
goto lab31 ;
if ( r == rr )
goto lab31 ;
q = q + 2 ;
r = r + 2 ;
}
lab31: takepart ( 53 + half ( r - mem [curexp + 1 ].cint ) ) ;
}
else if ( curtype == 2 )
flushcurexp ( curexp - mem [p + 1 ].cint ) ;
else {
badbinary ( p , c ) ;
goto lab30 ;
}
if ( curtype != 16 )
{
if ( curtype < 16 )
{
disperr ( p , 283 ) ;
{
helpptr = 1 ;
helpline [0 ]= 847 ;
}
}
else {
helpptr = 2 ;
helpline [1 ]= 848 ;
helpline [0 ]= 849 ;
}
disperr ( 0 , 850 ) ;
putgetflusherror ( 31 ) ;
}
else switch ( c )
{case 77 :
if ( curexp < 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 78 :
if ( curexp <= 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 79 :
if ( curexp > 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 80 :
if ( curexp >= 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 81 :
if ( curexp == 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 82 :
if ( curexp != 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
}
curtype = 2 ;
lab30: ;
}
break ;
case 76 :
case 75 :
if ( ( mem [p ].hhfield .b0 != 2 ) || ( curtype != 2 ) )
badbinary ( p , c ) ;
else if ( mem [p + 1 ].cint == c - 45 )
curexp = mem [p + 1 ].cint ;
break ;
case 71 :
if ( ( curtype < 14 ) || ( mem [p ].hhfield .b0 < 14 ) )
badbinary ( p , 71 ) ;
else if ( ( curtype == 16 ) || ( mem [p ].hhfield .b0 == 16 ) )
{
if ( mem [p ].hhfield .b0 == 16 )
{
v = mem [p + 1 ].cint ;
freenode ( p , 2 ) ;
}
else {
v = curexp ;
unstashcurexp ( p ) ;
}
if ( curtype == 16 )
curexp = takescaled ( curexp , v ) ;
else if ( curtype == 14 )
{
p = mem [curexp + 1 ].cint ;
depmult ( p , v , true ) ;
depmult ( p + 2 , v , true ) ;
}
else depmult ( 0 , v , true ) ;
goto lab10 ;
}
else if ( ( nicepair ( p , mem [p ].hhfield .b0 ) && ( curtype > 14 ) )
|| ( nicepair ( curexp , curtype ) && ( mem [p ].hhfield .b0 > 14 ) ) )
{
hardtimes ( p ) ;
goto lab10 ;
}
else badbinary ( p , 71 ) ;
break ;
case 72 :
if ( ( curtype != 16 ) || ( mem [p ].hhfield .b0 < 14 ) )
badbinary ( p , 72 ) ;
else {
v = curexp ;
unstashcurexp ( p ) ;
if ( v == 0 )
{
disperr ( 0 , 780 ) ;
{
helpptr = 2 ;
helpline [1 ]= 852 ;
helpline [0 ]= 853 ;
}
putgeterror () ;
}
else {
if ( curtype == 16 )
curexp = makescaled ( curexp , v ) ;
else if ( curtype == 14 )
{
p = mem [curexp + 1 ].cint ;
depdiv ( p , v ) ;
depdiv ( p + 2 , v ) ;
}
else depdiv ( 0 , v ) ;
}
goto lab10 ;
}
break ;
case 73 :
case 74 :
if ( ( curtype == 16 ) && ( mem [p ].hhfield .b0 == 16 ) )
if ( c == 73 )
curexp = pythadd ( mem [p + 1 ].cint , curexp ) ;
else curexp = pythsub ( mem [p + 1 ].cint , curexp ) ;
else badbinary ( p , c ) ;
break ;
case 84 :
case 85 :
case 86 :
case 87 :
case 88 :
case 89 :
case 90 :
case 91 :
if ( ( mem [p ].hhfield .b0 == 9 ) || ( mem [p ].hhfield .b0 == 8 ) ||
( mem [p ].hhfield .b0 == 6 ) )
{
pathtrans ( p , c ) ;
goto lab10 ;
}
else if ( ( mem [p ].hhfield .b0 == 14 ) || ( mem [p ].hhfield .b0 ==
13 ) )
bigtrans ( p , c ) ;
else if ( mem [p ].hhfield .b0 == 11 )
{
edgestrans ( p , c ) ;
goto lab10 ;
}
else badbinary ( p , c ) ;
break ;
case 83 :
if ( ( curtype == 4 ) && ( mem [p ].hhfield .b0 == 4 ) )
cat ( p ) ;
else badbinary ( p , 83 ) ;
break ;
case 94 :
if ( nicepair ( p , mem [p ].hhfield .b0 ) && ( curtype == 4 ) )
chopstring ( mem [p + 1 ].cint ) ;
else badbinary ( p , 94 ) ;
break ;
case 95 :
{
if ( curtype == 14 )
pairtopath () ;
if ( nicepair ( p , mem [p ].hhfield .b0 ) && ( curtype == 9 ) )
choppath ( mem [p + 1 ].cint ) ;
else badbinary ( p , 95 ) ;
}
break ;
case 97 :
case 98 :
case 99 :
{
if ( curtype == 14 )
pairtopath () ;
if ( ( curtype == 9 ) && ( mem [p ].hhfield .b0 == 16 ) )
findpoint ( mem [p + 1 ].cint , c ) ;
else badbinary ( p , c ) ;
}
break ;
case 100 :
{
if ( curtype == 8 )
materializepen () ;
if ( ( curtype == 6 ) && nicepair ( p , mem [p ].hhfield .b0 ) )
setupoffset ( mem [p + 1 ].cint ) ;
else badbinary ( p , 100 ) ;
}
break ;
case 96 :
{
if ( curtype == 14 )
pairtopath () ;
if ( ( curtype == 9 ) && nicepair ( p , mem [p ].hhfield .b0 ) )
setupdirectiontime ( mem [p + 1 ].cint ) ;
else badbinary ( p , 96 ) ;
}
break ;
case 92 :
{
if ( mem [p ].hhfield .b0 == 14 )
{
q = stashcurexp () ;
unstashcurexp ( p ) ;
pairtopath () ;
p = stashcurexp () ;
unstashcurexp ( q ) ;
}
if ( curtype == 14 )
pairtopath () ;
if ( ( curtype == 9 ) && ( mem [p ].hhfield .b0 == 9 ) )
{
pathintersection ( mem [p + 1 ].cint , curexp ) ;
pairvalue ( curt , curtt ) ;
}
else badbinary ( p , 92 ) ;
}
break ;
}
recyclevalue ( p ) ;
freenode ( p , 2 ) ;
lab10: {
if ( aritherror )
cleararith () ;
}
if ( oldp != 0 )
{
recyclevalue ( oldp ) ;
freenode ( oldp , 2 ) ;
}
if ( oldexp != 0 )
{
recyclevalue ( oldexp ) ;
freenode ( oldexp , 2 ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zfracmult ( scaled n , scaled d )
#else
zfracmult ( n , d )
scaled n ;
scaled d ;
#endif
{
halfword p ;
halfword oldexp ;
fraction v ;
if ( internal [7 ]> 131072L )
{
begindiagnostic () ;
printnl ( 846 ) ;
printscaled ( n ) ;
printchar ( 47 ) ;
printscaled ( d ) ;
print ( 851 ) ;
printexp ( 0 , 0 ) ;
print ( 838 ) ;
enddiagnostic ( false ) ;
}
switch ( curtype )
{case 13 :
case 14 :
oldexp = tarnished ( curexp ) ;
break ;
case 19 :
oldexp = 1 ;
break ;
default:
oldexp = 0 ;
break ;
}
if ( oldexp != 0 )
{
oldexp = curexp ;
makeexpcopy ( oldexp ) ;
}
v = makefraction ( n , d ) ;
if ( curtype == 16 )
curexp = takefraction ( curexp , v ) ;
else if ( curtype == 14 )
{
p = mem [curexp + 1 ].cint ;
depmult ( p , v , false ) ;
depmult ( p + 2 , v , false ) ;
}
else depmult ( 0 , v , false ) ;
if ( oldexp != 0 )
{
recyclevalue ( oldexp ) ;
freenode ( oldexp , 2 ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
gfswap ( void )
#else
gfswap ( )
#endif
{
if ( gflimit == gfbufsize )
{
writegf ( 0 , halfbuf - 1 ) ;
gflimit = halfbuf ;
gfoffset = gfoffset + gfbufsize ;
gfptr = 0 ;
}
else {
writegf ( halfbuf , gfbufsize - 1 ) ;
gflimit = gfbufsize ;
}
}
void
#ifdef HAVE_PROTOTYPES
zgffour ( integer x )
#else
zgffour ( x )
integer x ;
#endif
{
if ( x >= 0 )
{
gfbuf [gfptr ]= x / 16777216L ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
else {
x = x + 1073741824L ;
x = x + 1073741824L ;
{
gfbuf [gfptr ]= ( x / 16777216L ) + 128 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
}
x = x % 16777216L ;
{
gfbuf [gfptr ]= x / 65536L ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
x = x % 65536L ;
{
gfbuf [gfptr ]= x / 256 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= x % 256 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zgftwo ( integer x )
#else
zgftwo ( x )
integer x ;
#endif
{
{
gfbuf [gfptr ]= x / 256 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= x % 256 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zgfthree ( integer x )
#else
zgfthree ( x )
integer x ;
#endif
{
{
gfbuf [gfptr ]= x / 65536L ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= ( x % 65536L ) / 256 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= x % 256 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zgfpaint ( integer d )
#else
zgfpaint ( d )
integer d ;
#endif
{
if ( d < 64 )
{
gfbuf [gfptr ]= 0 + d ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
else if ( d < 256 )
{
{
gfbuf [gfptr ]= 64 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= d ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
}
else {
{
gfbuf [gfptr ]= 65 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
gftwo ( d ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zgfstring ( strnumber s , strnumber t )
#else
zgfstring ( s , t )
strnumber s ;
strnumber t ;
#endif
{
poolpointer k ;
integer l ;
if ( s != 0 )
{
l = ( strstart [s + 1 ]- strstart [s ]) ;
if ( t != 0 )
l = l + ( strstart [t + 1 ]- strstart [t ]) ;
if ( l <= 255 )
{
{
gfbuf [gfptr ]= 239 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= l ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
}
else {
{
gfbuf [gfptr ]= 241 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
gfthree ( l ) ;
}
{register integer for_end; k = strstart [s ];for_end = strstart [s +
1 ]- 1 ; if ( k <= for_end) do
{
gfbuf [gfptr ]= strpool [k ];
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
while ( k++ < for_end ) ;}
}
if ( t != 0 )
{register integer for_end; k = strstart [t ];for_end = strstart [t + 1
]- 1 ; if ( k <= for_end) do
{
gfbuf [gfptr ]= strpool [k ];
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
while ( k++ < for_end ) ;}
}
void
#ifdef HAVE_PROTOTYPES
zgfboc ( integer minm , integer maxm , integer minn , integer maxn )
#else
zgfboc ( minm , maxm , minn , maxn )
integer minm ;
integer maxm ;
integer minn ;
integer maxn ;
#endif
{
/* 10 */ if ( minm < gfminm )
gfminm = minm ;
if ( maxn > gfmaxn )
gfmaxn = maxn ;
if ( bocp == -1 )
if ( bocc >= 0 )
if ( bocc < 256 )
if ( maxm - minm >= 0 )
if ( maxm - minm < 256 )
if ( maxm >= 0 )
if ( maxm < 256 )
if ( maxn - minn >= 0 )
if ( maxn - minn < 256 )
if ( maxn >= 0 )
if ( maxn < 256 )
{
{
gfbuf [gfptr ]= 68 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= bocc ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= maxm - minm ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= maxm ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= maxn - minn ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= maxn ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
goto lab10 ;
}
{
gfbuf [gfptr ]= 67 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
gffour ( bocc ) ;
gffour ( bocp ) ;
gffour ( minm ) ;
gffour ( maxm ) ;
gffour ( minn ) ;
gffour ( maxn ) ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
initgf ( void )
#else
initgf ( )
#endif
{
short k ;
integer t ;
gfminm = 4096 ;
gfmaxm = -4096 ;
gfminn = 4096 ;
gfmaxn = -4096 ;
{register integer for_end; k = 0 ;for_end = 255 ; if ( k <= for_end) do
charptr [k ]= -1 ;
while ( k++ < for_end ) ;}
if ( internal [27 ]<= 0 )
gfext = 1050 ;
else {
oldsetting = selector ;
selector = 5 ;
printchar ( 46 ) ;
printint ( makescaled ( internal [27 ], 59429463L ) ) ;
print ( 1051 ) ;
gfext = makestring () ;
selector = oldsetting ;
}
{
if ( jobname == 0 )
openlogfile () ;
packjobname ( gfext ) ;
while ( ! bopenout ( gffile ) ) promptfilename ( 752 , gfext ) ;
outputfilename = bmakenamestring ( gffile ) ;
}
{
gfbuf [gfptr ]= 247 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= 131 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
oldsetting = selector ;
selector = 5 ;
print ( 1049 ) ;
printint ( roundunscaled ( internal [14 ]) ) ;
printchar ( 46 ) ;
printdd ( roundunscaled ( internal [15 ]) ) ;
printchar ( 46 ) ;
printdd ( roundunscaled ( internal [16 ]) ) ;
printchar ( 58 ) ;
t = roundunscaled ( internal [17 ]) ;
printdd ( t / 60 ) ;
printdd ( t % 60 ) ;
selector = oldsetting ;
{
gfbuf [gfptr ]= ( poolptr - strstart [strptr ]) ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
strstart [strptr + 1 ]= poolptr ;
gfstring ( 0 , strptr ) ;
poolptr = strstart [strptr ];
gfprevptr = gfoffset + gfptr ;
}
void
#ifdef HAVE_PROTOTYPES
zshipout ( eightbits c )
#else
zshipout ( c )
eightbits c ;
#endif
{
/* 30 */ integer f ;
integer prevm, m, mm ;
integer prevn, n ;
halfword p, q ;
integer prevw, w, ww ;
integer d ;
integer delta ;
integer curminm ;
integer xoff, yoff ;
if ( outputfilename == 0 )
initgf () ;
f = roundunscaled ( internal [19 ]) ;
xoff = roundunscaled ( internal [29 ]) ;
yoff = roundunscaled ( internal [30 ]) ;
if ( termoffset > maxprintline - 9 )
println () ;
else if ( ( termoffset > 0 ) || ( fileoffset > 0 ) )
printchar ( 32 ) ;
printchar ( 91 ) ;
printint ( c ) ;
if ( f != 0 )
{
printchar ( 46 ) ;
printint ( f ) ;
}
fflush ( stdout ) ;
bocc = 256 * f + c ;
bocp = charptr [c ];
charptr [c ]= gfprevptr ;
if ( internal [34 ]> 0 )
{
if ( xoff != 0 )
{
gfstring ( 436 , 0 ) ;
{
gfbuf [gfptr ]= 243 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
gffour ( xoff * 65536L ) ;
}
if ( yoff != 0 )
{
gfstring ( 437 , 0 ) ;
{
gfbuf [gfptr ]= 243 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
gffour ( yoff * 65536L ) ;
}
}
prevn = 4096 ;
p = mem [curedges ].hhfield .lhfield ;
n = mem [curedges + 1 ].hhfield .v.RH - 4096 ;
while ( p != curedges ) {
if ( mem [p + 1 ].hhfield .lhfield > 1 )
sortedges ( p ) ;
q = mem [p + 1 ].hhfield .v.RH ;
w = 0 ;
prevm = -268435456L ;
ww = 0 ;
prevw = 0 ;
m = prevm ;
do {
if ( q == memtop )
mm = 268435456L ;
else {
d = mem [q ].hhfield .lhfield ;
mm = d / 8 ;
ww = ww + ( d % 8 ) - 4 ;
}
if ( mm != m )
{
if ( prevw <= 0 )
{
if ( w > 0 )
{
if ( prevm == -268435456L )
{
if ( prevn == 4096 )
{
gfboc ( mem [curedges + 2 ].hhfield .lhfield + xoff - 4096 ,
mem [curedges + 2 ].hhfield .v.RH + xoff - 4096 , mem [
curedges + 1 ].hhfield .lhfield + yoff - 4096 , n + yoff ) ;
curminm = mem [curedges + 2 ].hhfield .lhfield - 4096 + mem
[curedges + 3 ].hhfield .lhfield ;
}
else if ( prevn > n + 1 )
{
delta = prevn - n - 1 ;
if ( delta < 256 )
{
{
gfbuf [gfptr ]= 71 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
{
gfbuf [gfptr ]= delta ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
}
else {
{
gfbuf [gfptr ]= 72 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
gftwo ( delta ) ;
}
}
else {
delta = m - curminm ;
if ( delta > 164 )
{
gfbuf [gfptr ]= 70 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
else {
{
gfbuf [gfptr ]= 74 + delta ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
goto lab30 ;
}
}
gfpaint ( m - curminm ) ;
lab30: prevn = n ;
}
else gfpaint ( m - prevm ) ;
prevm = m ;
prevw = w ;
}
}
else if ( w <= 0 )
{
gfpaint ( m - prevm ) ;
prevm = m ;
prevw = w ;
}
m = mm ;
}
w = ww ;
q = mem [q ].hhfield .v.RH ;
} while ( ! ( mm == 268435456L ) ) ;
if ( w != 0 )
printnl ( 1053 ) ;
if ( prevm - toint ( mem [curedges + 3 ].hhfield .lhfield ) + xoff >
gfmaxm )
gfmaxm = prevm - mem [curedges + 3 ].hhfield .lhfield + xoff ;
p = mem [p ].hhfield .lhfield ;
decr ( n ) ;
}
if ( prevn == 4096 )
{
gfboc ( 0 , 0 , 0 , 0 ) ;
if ( gfmaxm < 0 )
gfmaxm = 0 ;
if ( gfminn > 0 )
gfminn = 0 ;
}
else if ( prevn + yoff < gfminn )
gfminn = prevn + yoff ;
{
gfbuf [gfptr ]= 69 ;
incr ( gfptr ) ;
if ( gfptr == gflimit )
gfswap () ;
}
gfprevptr = gfoffset + gfptr ;
incr ( totalchars ) ;
printchar ( 93 ) ;
fflush ( stdout ) ;
if ( internal [11 ]> 0 )
printedges ( 1052 , true , xoff , yoff ) ;
}
void
#ifdef HAVE_PROTOTYPES
ztryeq ( halfword l , halfword r )
#else
ztryeq ( l , r )
halfword l ;
halfword r ;
#endif
{
/* 30 31 */ halfword p ;
char t ;
halfword q ;
halfword pp ;
char tt ;
boolean copied ;
t = mem [l ].hhfield .b0 ;
if ( t == 16 )
{
t = 17 ;
p = constdependency ( - (integer) mem [l + 1 ].cint ) ;
q = p ;
}
else if ( t == 19 )
{
t = 17 ;
p = singledependency ( l ) ;
mem [p + 1 ].cint = - (integer) mem [p + 1 ].cint ;
q = depfinal ;
}
else {
p = mem [l + 1 ].hhfield .v.RH ;
q = p ;
while ( true ) {
mem [q + 1 ].cint = - (integer) mem [q + 1 ].cint ;
if ( mem [q ].hhfield .lhfield == 0 )
goto lab30 ;
q = mem [q ].hhfield .v.RH ;
}
lab30: mem [mem [l + 1 ].hhfield .lhfield ].hhfield .v.RH = mem [q ]
.hhfield .v.RH ;
mem [mem [q ].hhfield .v.RH + 1 ].hhfield .lhfield = mem [l + 1 ]
.hhfield .lhfield ;
mem [l ].hhfield .b0 = 16 ;
}
if ( r == 0 )
if ( curtype == 16 )
{
mem [q + 1 ].cint = mem [q + 1 ].cint + curexp ;
goto lab31 ;
}
else {
tt = curtype ;
if ( tt == 19 )
pp = singledependency ( curexp ) ;
else pp = mem [curexp + 1 ].hhfield .v.RH ;
}
else if ( mem [r ].hhfield .b0 == 16 )
{
mem [q + 1 ].cint = mem [q + 1 ].cint + mem [r + 1 ].cint ;
goto lab31 ;
}
else {
tt = mem [r ].hhfield .b0 ;
if ( tt == 19 )
pp = singledependency ( r ) ;
else pp = mem [r + 1 ].hhfield .v.RH ;
}
if ( tt != 19 )
copied = false ;
else {
copied = true ;
tt = 17 ;
}
watchcoefs = false ;
if ( t == tt )
p = pplusq ( p , pp , t ) ;
else if ( t == 18 )
p = pplusfq ( p , 65536L , pp , 18 , 17 ) ;
else {
q = p ;
while ( mem [q ].hhfield .lhfield != 0 ) {
mem [q + 1 ].cint = roundfraction ( mem [q + 1 ].cint ) ;
q = mem [q ].hhfield .v.RH ;
}
t = 18 ;
p = pplusq ( p , pp , t ) ;
}
watchcoefs = true ;
if ( copied )
flushnodelist ( pp ) ;
lab31: ;
if ( mem [p ].hhfield .lhfield == 0 )
{
if ( abs ( mem [p + 1 ].cint ) > 64 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 893 ) ;
}
print ( 895 ) ;
printscaled ( mem [p + 1 ].cint ) ;
printchar ( 41 ) ;
{
helpptr = 2 ;
helpline [1 ]= 894 ;
helpline [0 ]= 892 ;
}
putgeterror () ;
}
else if ( r == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 597 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 598 ;
helpline [0 ]= 599 ;
}
putgeterror () ;
}
freenode ( p , 2 ) ;
}
else {
lineareq ( p , t ) ;
if ( r == 0 )
if ( curtype != 16 )
if ( mem [curexp ].hhfield .b0 == 16 )
{
pp = curexp ;
curexp = mem [curexp + 1 ].cint ;
curtype = 16 ;
freenode ( pp , 2 ) ;
}
}
}
void
#ifdef HAVE_PROTOTYPES
zmakeeq ( halfword lhs )
#else
zmakeeq ( lhs )
halfword lhs ;
#endif
{
/* 20 30 45 */ smallnumber t ;
integer v ;
halfword p, q ;
lab20: t = mem [lhs ].hhfield .b0 ;
if ( t <= 14 )
v = mem [lhs + 1 ].cint ;
switch ( t )
{case 2 :
case 4 :
case 6 :
case 9 :
case 11 :
if ( curtype == t + 1 )
{
nonlineareq ( v , curexp , false ) ;
goto lab30 ;
}
else if ( curtype == t )
{
if ( curtype <= 4 )
{
if ( curtype == 4 )
{
if ( strvsstr ( v , curexp ) != 0 )
goto lab45 ;
}
else if ( v != curexp )
goto lab45 ;
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 597 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 598 ;
helpline [0 ]= 599 ;
}
putgeterror () ;
}
goto lab30 ;
}
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 890 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 891 ;
helpline [0 ]= 892 ;
}
putgeterror () ;
goto lab30 ;
lab45: {
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 893 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 894 ;
helpline [0 ]= 892 ;
}
putgeterror () ;
goto lab30 ;
}
break ;
case 3 :
case 5 :
case 7 :
case 12 :
case 10 :
if ( curtype == t - 1 )
{
nonlineareq ( curexp , lhs , true ) ;
goto lab30 ;
}
else if ( curtype == t )
{
ringmerge ( lhs , curexp ) ;
goto lab30 ;
}
else if ( curtype == 14 )
if ( t == 10 )
{
pairtopath () ;
goto lab20 ;
}
break ;
case 13 :
case 14 :
if ( curtype == t )
{
p = v + bignodesize [t ];
q = mem [curexp + 1 ].cint + bignodesize [t ];
do {
p = p - 2 ;
q = q - 2 ;
tryeq ( p , q ) ;
} while ( ! ( p == v ) ) ;
goto lab30 ;
}
break ;
case 16 :
case 17 :
case 18 :
case 19 :
if ( curtype >= 16 )
{
tryeq ( lhs , 0 ) ;
goto lab30 ;
}
break ;
case 1 :
;
break ;
}
disperr ( lhs , 283 ) ;
disperr ( 0 , 887 ) ;
if ( mem [lhs ].hhfield .b0 <= 14 )
printtype ( mem [lhs ].hhfield .b0 ) ;
else print ( 339 ) ;
printchar ( 61 ) ;
if ( curtype <= 14 )
printtype ( curtype ) ;
else print ( 339 ) ;
printchar ( 41 ) ;
{
helpptr = 2 ;
helpline [1 ]= 888 ;
helpline [0 ]= 889 ;
}
putgeterror () ;
lab30: {
if ( aritherror )
cleararith () ;
}
recyclevalue ( lhs ) ;
freenode ( lhs , 2 ) ;
}
void
#ifdef HAVE_PROTOTYPES
doequation ( void )
#else
doequation ( )
#endif
{
halfword lhs ;
halfword p ;
lhs = stashcurexp () ;
getxnext () ;
varflag = 77 ;
scanexpression () ;
if ( curcmd == 51 )
doequation () ;
else if ( curcmd == 77 )
doassignment () ;
if ( internal [7 ]> 131072L )
{
begindiagnostic () ;
printnl ( 846 ) ;
printexp ( lhs , 0 ) ;
print ( 882 ) ;
printexp ( 0 , 0 ) ;
print ( 838 ) ;
enddiagnostic ( false ) ;
}
if ( curtype == 10 )
if ( mem [lhs ].hhfield .b0 == 14 )
{
p = stashcurexp () ;
unstashcurexp ( lhs ) ;
lhs = p ;
}
makeeq ( lhs ) ;
}
void
#ifdef HAVE_PROTOTYPES
doassignment ( void )
#else
doassignment ( )
#endif
{
halfword lhs ;
halfword p ;
halfword q ;
if ( curtype != 20 )
{
disperr ( 0 , 879 ) ;
{
helpptr = 2 ;
helpline [1 ]= 880 ;
helpline [0 ]= 881 ;
}
error () ;
doequation () ;
}
else {
lhs = curexp ;
curtype = 1 ;
getxnext () ;
varflag = 77 ;
scanexpression () ;
if ( curcmd == 51 )
doequation () ;
else if ( curcmd == 77 )
doassignment () ;
if ( internal [7 ]> 131072L )
{
begindiagnostic () ;
printnl ( 123 ) ;
if ( mem [lhs ].hhfield .lhfield > 9769 )
print ( intname [mem [lhs ].hhfield .lhfield - ( 9769 ) ]) ;
else showtokenlist ( lhs , 0 , 1000 , 0 ) ;
print ( 460 ) ;
printexp ( 0 , 0 ) ;
printchar ( 125 ) ;
enddiagnostic ( false ) ;
}
if ( mem [lhs ].hhfield .lhfield > 9769 )
if ( curtype == 16 )
internal [mem [lhs ].hhfield .lhfield - ( 9769 ) ]= curexp ;
else {
disperr ( 0 , 883 ) ;
print ( intname [mem [lhs ].hhfield .lhfield - ( 9769 ) ]) ;
print ( 884 ) ;
{
helpptr = 2 ;
helpline [1 ]= 885 ;
helpline [0 ]= 886 ;
}
putgeterror () ;
}
else {
p = findvariable ( lhs ) ;
if ( p != 0 )
{
q = stashcurexp () ;
curtype = undtype ( p ) ;
recyclevalue ( p ) ;
mem [p ].hhfield .b0 = curtype ;
mem [p + 1 ].cint = 0 ;
makeexpcopy ( p ) ;
p = stashcurexp () ;
unstashcurexp ( q ) ;
makeeq ( p ) ;
}
else {
obliterated ( lhs ) ;
putgeterror () ;
}
}
flushnodelist ( lhs ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
dotypedeclaration ( void )
#else
dotypedeclaration ( )
#endif
{
smallnumber t ;
halfword p ;
halfword q ;
if ( curmod >= 13 )
t = curmod ;
else t = curmod + 1 ;
do {
p = scandeclaredvariable () ;
flushvariable ( eqtb [mem [p ].hhfield .lhfield ].v.RH , mem [p ]
.hhfield .v.RH , false ) ;
q = findvariable ( p ) ;
if ( q != 0 )
{
mem [q ].hhfield .b0 = t ;
mem [q + 1 ].cint = 0 ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 896 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 897 ;
helpline [0 ]= 898 ;
}
putgeterror () ;
}
flushlist ( p ) ;
if ( curcmd < 82 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 899 ) ;
}
{
helpptr = 5 ;
helpline [4 ]= 900 ;
helpline [3 ]= 901 ;
helpline [2 ]= 902 ;
helpline [1 ]= 903 ;
helpline [0 ]= 904 ;
}
if ( curcmd == 42 )
helpline [2 ]= 905 ;
putgeterror () ;
scannerstatus = 2 ;
do {
getnext () ;
if ( curcmd == 39 )
{
if ( strref [curmod ]< 127 )
if ( strref [curmod ]> 1 )
decr ( strref [curmod ]) ;
else flushstring ( curmod ) ;
}
} while ( ! ( curcmd >= 82 ) ) ;
scannerstatus = 0 ;
}
} while ( ! ( curcmd > 82 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
dorandomseed ( void )
#else
dorandomseed ( )
#endif
{
getxnext () ;
if ( curcmd != 77 )
{
missingerr ( 460 ) ;
{
helpptr = 1 ;
helpline [0 ]= 910 ;
}
backerror () ;
}
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
{
disperr ( 0 , 911 ) ;
{
helpptr = 2 ;
helpline [1 ]= 912 ;
helpline [0 ]= 913 ;
}
putgetflusherror ( 0 ) ;
}
else {
initrandoms ( curexp ) ;
if ( selector >= 2 )
{
oldsetting = selector ;
selector = 2 ;
printnl ( 914 ) ;
printscaled ( curexp ) ;
printchar ( 125 ) ;
printnl ( 283 ) ;
selector = oldsetting ;
}
}
}
void
#ifdef HAVE_PROTOTYPES
doprotection ( void )
#else
doprotection ( )
#endif
{
char m ;
halfword t ;
m = curmod ;
do {
getsymbol () ;
t = eqtb [cursym ].lhfield ;
if ( m == 0 )
{
if ( t >= 86 )
eqtb [cursym ].lhfield = t - 86 ;
}
else if ( t < 86 )
eqtb [cursym ].lhfield = t + 86 ;
getxnext () ;
} while ( ! ( curcmd != 82 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
defdelims ( void )
#else
defdelims ( )
#endif
{
halfword ldelim, rdelim ;
getclearsymbol () ;
ldelim = cursym ;
getclearsymbol () ;
rdelim = cursym ;
eqtb [ldelim ].lhfield = 31 ;
eqtb [ldelim ].v.RH = rdelim ;
eqtb [rdelim ].lhfield = 62 ;
eqtb [rdelim ].v.RH = ldelim ;
getxnext () ;
}
void
#ifdef HAVE_PROTOTYPES
dointerim ( void )
#else
dointerim ( )
#endif
{
getxnext () ;
if ( curcmd != 40 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 920 ) ;
}
if ( cursym == 0 )
print ( 925 ) ;
else print ( hash [cursym ].v.RH ) ;
print ( 926 ) ;
{
helpptr = 1 ;
helpline [0 ]= 927 ;
}
backerror () ;
}
else {
saveinternal ( curmod ) ;
backinput () ;
}
dostatement () ;
}
void
#ifdef HAVE_PROTOTYPES
dolet ( void )
#else
dolet ( )
#endif
{
halfword l ;
getsymbol () ;
l = cursym ;
getxnext () ;
if ( curcmd != 51 )
if ( curcmd != 77 )
{
missingerr ( 61 ) ;
{
helpptr = 3 ;
helpline [2 ]= 928 ;
helpline [1 ]= 669 ;
helpline [0 ]= 929 ;
}
backerror () ;
}
getsymbol () ;
switch ( curcmd )
{case 10 :
case 53 :
case 44 :
case 49 :
incr ( mem [curmod ].hhfield .lhfield ) ;
break ;
default:
;
break ;
}
clearsymbol ( l , false ) ;
eqtb [l ].lhfield = curcmd ;
if ( curcmd == 41 )
eqtb [l ].v.RH = 0 ;
else eqtb [l ].v.RH = curmod ;
getxnext () ;
}
void
#ifdef HAVE_PROTOTYPES
donewinternal ( void )
#else
donewinternal ( )
#endif
{
do {
if ( intptr == maxinternal )
overflow ( 930 , maxinternal ) ;
getclearsymbol () ;
incr ( intptr ) ;
eqtb [cursym ].lhfield = 40 ;
eqtb [cursym ].v.RH = intptr ;
intname [intptr ]= hash [cursym ].v.RH ;
internal [intptr ]= 0 ;
getxnext () ;
} while ( ! ( curcmd != 82 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
doshow ( void )
#else
doshow ( )
#endif
{
do {
getxnext () ;
scanexpression () ;
printnl ( 761 ) ;
printexp ( 0 , 2 ) ;
flushcurexp ( 0 ) ;
} while ( ! ( curcmd != 82 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
disptoken ( void )
#else
disptoken ( )
#endif
{
printnl ( 936 ) ;
if ( cursym == 0 )
{
if ( curcmd == 42 )
printscaled ( curmod ) ;
else if ( curcmd == 38 )
{
gpointer = curmod ;
printcapsule () ;
}
else {
printchar ( 34 ) ;
print ( curmod ) ;
printchar ( 34 ) ;
{
if ( strref [curmod ]< 127 )
if ( strref [curmod ]> 1 )
decr ( strref [curmod ]) ;
else flushstring ( curmod ) ;
}
}
}
else {
print ( hash [cursym ].v.RH ) ;
printchar ( 61 ) ;
if ( eqtb [cursym ].lhfield >= 86 )
print ( 937 ) ;
printcmdmod ( curcmd , curmod ) ;
if ( curcmd == 10 )
{
println () ;
showmacro ( curmod , 0 , 100000L ) ;
}
}
}
void
#ifdef HAVE_PROTOTYPES
doshowtoken ( void )
#else
doshowtoken ( )
#endif
{
do {
getnext () ;
disptoken () ;
getxnext () ;
} while ( ! ( curcmd != 82 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
doshowstats ( void )
#else
doshowstats ( )
#endif
{
printnl ( 946 ) ;
;
#ifdef STAT
printint ( varused ) ;
printchar ( 38 ) ;
printint ( dynused ) ;
if ( false )
#endif /* STAT */
print ( 356 ) ;
print ( 557 ) ;
printint ( himemmin - lomemmax - 1 ) ;
print ( 947 ) ;
println () ;
printnl ( 948 ) ;
printint ( strptr - initstrptr ) ;
printchar ( 38 ) ;
printint ( poolptr - initpoolptr ) ;
print ( 557 ) ;
printint ( maxstrings - maxstrptr ) ;
printchar ( 38 ) ;
printint ( poolsize - maxpoolptr ) ;
print ( 947 ) ;
println () ;
getxnext () ;
}
void
#ifdef HAVE_PROTOTYPES
zdispvar ( halfword p )
#else
zdispvar ( p )
halfword p ;
#endif
{
halfword q ;
integer n ;
if ( mem [p ].hhfield .b0 == 21 )
{
q = mem [p + 1 ].hhfield .lhfield ;
do {
dispvar ( q ) ;
q = mem [q ].hhfield .v.RH ;
} while ( ! ( q == 17 ) ) ;
q = mem [p + 1 ].hhfield .v.RH ;
while ( mem [q ].hhfield .b1 == 3 ) {
dispvar ( q ) ;
q = mem [q ].hhfield .v.RH ;
}
}
else if ( mem [p ].hhfield .b0 >= 22 )
{
printnl ( 283 ) ;
printvariablename ( p ) ;
if ( mem [p ].hhfield .b0 > 22 )
print ( 661 ) ;
print ( 949 ) ;
if ( fileoffset >= maxprintline - 20 )
n = 5 ;
else n = maxprintline - fileoffset - 15 ;
showmacro ( mem [p + 1 ].cint , 0 , n ) ;
}
else if ( mem [p ].hhfield .b0 != 0 )
{
printnl ( 283 ) ;
printvariablename ( p ) ;
printchar ( 61 ) ;
printexp ( p , 0 ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
doshowvar ( void )
#else
doshowvar ( )
#endif
{
/* 30 */ do {
getnext () ;
if ( cursym > 0 )
if ( cursym <= 9769 )
if ( curcmd == 41 )
if ( curmod != 0 )
{
dispvar ( curmod ) ;
goto lab30 ;
}
disptoken () ;
lab30: getxnext () ;
} while ( ! ( curcmd != 82 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
doshowdependencies ( void )
#else
doshowdependencies ( )
#endif
{
halfword p ;
p = mem [13 ].hhfield .v.RH ;
while ( p != 13 ) {
if ( interesting ( p ) )
{
printnl ( 283 ) ;
printvariablename ( p ) ;
if ( mem [p ].hhfield .b0 == 17 )
printchar ( 61 ) ;
else print ( 764 ) ;
printdependency ( mem [p + 1 ].hhfield .v.RH , mem [p ].hhfield .b0
) ;
}
p = mem [p + 1 ].hhfield .v.RH ;
while ( mem [p ].hhfield .lhfield != 0 ) p = mem [p ].hhfield .v.RH ;
p = mem [p ].hhfield .v.RH ;
}
getxnext () ;
}
void
#ifdef HAVE_PROTOTYPES
doshowwhatever ( void )
#else
doshowwhatever ( )
#endif
{
if ( interaction == 3 )
;
switch ( curmod )
{case 0 :
doshowtoken () ;
break ;
case 1 :
doshowstats () ;
break ;
case 2 :
doshow () ;
break ;
case 3 :
doshowvar () ;
break ;
case 4 :
doshowdependencies () ;
break ;
}
if ( internal [32 ]> 0 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 950 ) ;
}
if ( interaction < 3 )
{
helpptr = 0 ;
decr ( errorcount ) ;
}
else {
helpptr = 1 ;
helpline [0 ]= 951 ;
}
if ( curcmd == 83 )
error () ;
else putgeterror () ;
}
}
boolean
#ifdef HAVE_PROTOTYPES
scanwith ( void )
#else
scanwith ( )
#endif
{
register boolean Result; smallnumber t ;
boolean result ;
t = curmod ;
curtype = 1 ;
getxnext () ;
scanexpression () ;
result = false ;
if ( curtype != t )
{
disperr ( 0 , 959 ) ;
{
helpptr = 2 ;
helpline [1 ]= 960 ;
helpline [0 ]= 961 ;
}
if ( t == 6 )
helpline [1 ]= 962 ;
putgetflusherror ( 0 ) ;
}
else if ( curtype == 6 )
result = true ;
else {
curexp = roundunscaled ( curexp ) ;
if ( ( abs ( curexp ) < 4 ) && ( curexp != 0 ) )
result = true ;
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 963 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 961 ;
}
putgetflusherror ( 0 ) ;
}
}
Result = result ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zfindedgesvar ( halfword t )
#else
zfindedgesvar ( t )
halfword t ;
#endif
{
halfword p ;
p = findvariable ( t ) ;
curedges = 0 ;
if ( p == 0 )
{
obliterated ( t ) ;
putgeterror () ;
}
else if ( mem [p ].hhfield .b0 != 11 )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 786 ) ;
}
showtokenlist ( t , 0 , 1000 , 0 ) ;
print ( 964 ) ;
printtype ( mem [p ].hhfield .b0 ) ;
printchar ( 41 ) ;
{
helpptr = 2 ;
helpline [1 ]= 965 ;
helpline [0 ]= 966 ;
}
putgeterror () ;
}
else curedges = mem [p + 1 ].cint ;
flushnodelist ( t ) ;
}
void
#ifdef HAVE_PROTOTYPES
doaddto ( void )
#else
doaddto ( )
#endif
{
/* 30 45 */ halfword lhs, rhs ;
integer w ;
halfword p ;
halfword q ;
char addtotype ;
getxnext () ;
varflag = 68 ;
scanprimary () ;
if ( curtype != 20 )
{
disperr ( 0 , 967 ) ;
{
helpptr = 4 ;
helpline [3 ]= 968 ;
helpline [2 ]= 969 ;
helpline [1 ]= 970 ;
helpline [0 ]= 966 ;
}
putgetflusherror ( 0 ) ;
}
else {
lhs = curexp ;
addtotype = curmod ;
curtype = 1 ;
getxnext () ;
scanexpression () ;
if ( addtotype == 2 )
{
findedgesvar ( lhs ) ;
if ( curedges == 0 )
flushcurexp ( 0 ) ;
else if ( curtype != 11 )
{
disperr ( 0 , 971 ) ;
{
helpptr = 2 ;
helpline [1 ]= 972 ;
helpline [0 ]= 966 ;
}
putgetflusherror ( 0 ) ;
}
else {
mergeedges ( curexp ) ;
flushcurexp ( 0 ) ;
}
}
else {
if ( curtype == 14 )
pairtopath () ;
if ( curtype != 9 )
{
disperr ( 0 , 971 ) ;
{
helpptr = 2 ;
helpline [1 ]= 973 ;
helpline [0 ]= 966 ;
}
putgetflusherror ( 0 ) ;
flushtokenlist ( lhs ) ;
}
else {
rhs = curexp ;
w = 1 ;
curpen = 3 ;
while ( curcmd == 66 ) if ( scanwith () )
if ( curtype == 16 )
w = curexp ;
else {
if ( mem [curpen ].hhfield .lhfield == 0 )
tosspen ( curpen ) ;
else decr ( mem [curpen ].hhfield .lhfield ) ;
curpen = curexp ;
}
findedgesvar ( lhs ) ;
if ( curedges == 0 )
tossknotlist ( rhs ) ;
else {
lhs = 0 ;
curpathtype = addtotype ;
if ( mem [rhs ].hhfield .b0 == 0 )
if ( curpathtype == 0 )
if ( mem [rhs ].hhfield .v.RH == rhs )
{
mem [rhs + 5 ].cint = mem [rhs + 1 ].cint ;
mem [rhs + 6 ].cint = mem [rhs + 2 ].cint ;
mem [rhs + 3 ].cint = mem [rhs + 1 ].cint ;
mem [rhs + 4 ].cint = mem [rhs + 2 ].cint ;
mem [rhs ].hhfield .b0 = 1 ;
mem [rhs ].hhfield .b1 = 1 ;
}
else {
p = htapypoc ( rhs ) ;
q = mem [p ].hhfield .v.RH ;
mem [pathtail + 5 ].cint = mem [q + 5 ].cint ;
mem [pathtail + 6 ].cint = mem [q + 6 ].cint ;
mem [pathtail ].hhfield .b1 = mem [q ].hhfield .b1 ;
mem [pathtail ].hhfield .v.RH = mem [q ].hhfield .v.RH ;
freenode ( q , 7 ) ;
mem [p + 5 ].cint = mem [rhs + 5 ].cint ;
mem [p + 6 ].cint = mem [rhs + 6 ].cint ;
mem [p ].hhfield .b1 = mem [rhs ].hhfield .b1 ;
mem [p ].hhfield .v.RH = mem [rhs ].hhfield .v.RH ;
freenode ( rhs , 7 ) ;
rhs = p ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 974 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 975 ;
helpline [0 ]= 966 ;
}
putgeterror () ;
tossknotlist ( rhs ) ;
goto lab45 ;
}
else if ( curpathtype == 0 )
lhs = htapypoc ( rhs ) ;
curwt = w ;
rhs = makespec ( rhs , mem [curpen + 9 ].cint , internal [5 ]) ;
if ( turningnumber <= 0 )
if ( curpathtype != 0 )
if ( internal [39 ]> 0 )
if ( ( turningnumber < 0 ) && ( mem [curpen ].hhfield .v.RH == 0 )
)
curwt = - (integer) curwt ;
else {
if ( turningnumber == 0 )
if ( ( internal [39 ]<= 65536L ) && ( mem [curpen ].hhfield
.v.RH == 0 ) )
goto lab30 ;
else printstrange ( 976 ) ;
else printstrange ( 977 ) ;
{
helpptr = 3 ;
helpline [2 ]= 978 ;
helpline [1 ]= 979 ;
helpline [0 ]= 980 ;
}
putgeterror () ;
}
lab30: ;
if ( mem [curpen + 9 ].cint == 0 )
fillspec ( rhs ) ;
else fillenvelope ( rhs ) ;
if ( lhs != 0 )
{
revturns = true ;
lhs = makespec ( lhs , mem [curpen + 9 ].cint , internal [5 ])
;
revturns = false ;
if ( mem [curpen + 9 ].cint == 0 )
fillspec ( lhs ) ;
else fillenvelope ( lhs ) ;
}
lab45: ;
}
if ( mem [curpen ].hhfield .lhfield == 0 )
tosspen ( curpen ) ;
else decr ( mem [curpen ].hhfield .lhfield ) ;
}
}
}
}
scaled
#ifdef HAVE_PROTOTYPES
ztfmcheck ( smallnumber m )
#else
ztfmcheck ( m )
smallnumber m ;
#endif
{
register scaled Result; if ( abs ( internal [m ]) >= 134217728L )
{
{
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 997 ) ;
}
print ( intname [m ]) ;
print ( 998 ) ;
{
helpptr = 1 ;
helpline [0 ]= 999 ;
}
putgeterror () ;
if ( internal [m ]> 0 )
Result = 134217727L ;
else Result = -134217727L ;
}
else Result = internal [m ];
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
doshipout ( void )
#else
doshipout ( )
#endif
{
/* 10 */ integer c ;
getxnext () ;
varflag = 83 ;
scanexpression () ;
if ( curtype != 20 )
if ( curtype == 11 )
curedges = curexp ;
else {
{
disperr ( 0 , 967 ) ;
{
helpptr = 4 ;
helpline [3 ]= 968 ;
helpline [2 ]= 969 ;
helpline [1 ]= 970 ;
helpline [0 ]= 966 ;
}
putgetflusherror ( 0 ) ;
}
goto lab10 ;
}
else {
findedgesvar ( curexp ) ;
curtype = 1 ;
}
if ( curedges != 0 )
{
c = roundunscaled ( internal [18 ]) % 256 ;
if ( c < 0 )
c = c + 256 ;
if ( c < bc )
bc = c ;
if ( c > ec )
ec = c ;
charexists [c ]= true ;
gfdx [c ]= internal [24 ];
gfdy [c ]= internal [25 ];
tfmwidth [c ]= tfmcheck ( 20 ) ;
tfmheight [c ]= tfmcheck ( 21 ) ;
tfmdepth [c ]= tfmcheck ( 22 ) ;
tfmitalcorr [c ]= tfmcheck ( 23 ) ;
if ( internal [34 ]>= 0 )
shipout ( c ) ;
}
flushcurexp ( 0 ) ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
dodisplay ( void )
#else
dodisplay ( )
#endif
{
/* 45 50 10 */ halfword e ;
getxnext () ;
varflag = 73 ;
scanprimary () ;
if ( curtype != 20 )
{
disperr ( 0 , 967 ) ;
{
helpptr = 4 ;
helpline [3 ]= 968 ;
helpline [2 ]= 969 ;
helpline [1 ]= 970 ;
helpline [0 ]= 966 ;
}
putgetflusherror ( 0 ) ;
}
else {
e = curexp ;
curtype = 1 ;
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
goto lab50 ;
curexp = roundunscaled ( curexp ) ;
if ( curexp < 0 )
goto lab45 ;
if ( curexp > 15 )
goto lab45 ;
if ( ! windowopen [curexp ])
goto lab45 ;
findedgesvar ( e ) ;
if ( curedges != 0 )
dispedges ( curexp ) ;
goto lab10 ;
lab45: curexp = curexp * 65536L ;
lab50: disperr ( 0 , 981 ) ;
{
helpptr = 1 ;
helpline [0 ]= 982 ;
}
putgetflusherror ( 0 ) ;
flushtokenlist ( e ) ;
}
lab10: ;
}
boolean
#ifdef HAVE_PROTOTYPES
zgetpair ( commandcode c )
#else
zgetpair ( c )
commandcode c ;
#endif
{
register boolean Result; halfword p ;
boolean b ;
if ( curcmd != c )
Result = false ;
else {
getxnext () ;
scanexpression () ;
if ( nicepair ( curexp , curtype ) )
{
p = mem [curexp + 1 ].cint ;
curx = mem [p + 1 ].cint ;
cury = mem [p + 3 ].cint ;
b = true ;
}
else b = false ;
flushcurexp ( 0 ) ;
Result = b ;
}
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
doopenwindow ( void )
#else
doopenwindow ( )
#endif
{
/* 45 10 */ integer k ;
scaled r0, c0, r1, c1 ;
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
goto lab45 ;
k = roundunscaled ( curexp ) ;
if ( k < 0 )
goto lab45 ;
if ( k > 15 )
goto lab45 ;
if ( ! getpair ( 70 ) )
goto lab45 ;
r0 = curx ;
c0 = cury ;
if ( ! getpair ( 71 ) )
goto lab45 ;
r1 = curx ;
c1 = cury ;
if ( ! getpair ( 72 ) )
goto lab45 ;
openawindow ( k , r0 , c0 , r1 , c1 , curx , cury ) ;
goto lab10 ;
lab45: {
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 983 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 984 ;
helpline [0 ]= 985 ;
}
putgeterror () ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
docull ( void )
#else
docull ( )
#endif
{
/* 45 10 */ halfword e ;
char keeping ;
integer w, win, wout ;
w = 1 ;
getxnext () ;
varflag = 67 ;
scanprimary () ;
if ( curtype != 20 )
{
disperr ( 0 , 967 ) ;
{
helpptr = 4 ;
helpline [3 ]= 968 ;
helpline [2 ]= 969 ;
helpline [1 ]= 970 ;
helpline [0 ]= 966 ;
}
putgetflusherror ( 0 ) ;
}
else {
e = curexp ;
curtype = 1 ;
keeping = curmod ;
if ( ! getpair ( 67 ) )
goto lab45 ;
while ( ( curcmd == 66 ) && ( curmod == 16 ) ) if ( scanwith () )
w = curexp ;
if ( curx > cury )
goto lab45 ;
if ( keeping == 0 )
{
if ( ( curx > 0 ) || ( cury < 0 ) )
goto lab45 ;
wout = w ;
win = 0 ;
}
else {
if ( ( curx <= 0 ) && ( cury >= 0 ) )
goto lab45 ;
wout = 0 ;
win = w ;
}
findedgesvar ( e ) ;
if ( curedges != 0 )
culledges ( floorunscaled ( curx + 65535L ) , floorunscaled ( cury ) ,
wout , win ) ;
goto lab10 ;
lab45: {
if ( interaction == 3 )
;
printnl ( 261 ) ;
print ( 986 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 987 ;
}
putgeterror () ;
flushtokenlist ( e ) ;
}
lab10: ;
}
|