#define EXTERN extern
#include "mpd.h"
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: ;
}
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 = 5 ;
r = mem [5 ].hhfield .v.RH ;
mem [depfinal ].hhfield .v.RH = r ;
mem [r + 1 ].hhfield .lhfield = depfinal ;
mem [5 ].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 ( 608 ) ;
printvariablename ( x ) ;
w = n ;
while ( w > 0 ) {
print ( 601 ) ;
w = w - 2 ;
}
printchar ( 61 ) ;
printdependency ( p , 17 ) ;
enddiagnostic ( false ) ;
}
prevr = 5 ;
r = mem [5 ].hhfield .v.RH ;
while ( r != 5 ) {
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 = 14 ;
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 = makepen ( copypath ( v ) , false ) ;
break ;
case 8 :
mem [q + 1 ].cint = copypath ( v ) ;
break ;
case 10 :
{
mem [q + 1 ].cint = v ;
incr ( mem [v ].hhfield .lhfield ) ;
}
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 ( 262 ) ;
print ( 611 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 612 ;
helpline [0 ]= 613 ;
}
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 > 2 )
{
printnl ( curinput .namefield ) ;
print ( 58 ) ;
printint ( trueline () ) ;
print ( 58 ) ;
}
else if ( ( curinput .namefield == 0 ) )
if ( fileptr == 0 )
printnl ( 615 ) ;
else printnl ( 616 ) ;
else if ( curinput .namefield == 2 )
printnl ( 617 ) ;
else printnl ( 618 ) ;
printchar ( 32 ) ;
{
l = tally ;
tally = 0 ;
selector = 6 ;
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 ( 619 ) ;
break ;
case 17 :
{
printnl ( 624 ) ;
p = paramstack [curinput .limitfield ];
if ( p != 0 )
if ( mem [p ].hhfield .v.RH == 1 )
printexp ( p , 0 ) ;
else showtokenlist ( p , 0 , 20 , tally ) ;
print ( 625 ) ;
}
break ;
case 18 :
printnl ( 620 ) ;
break ;
case 19 :
if ( curinput .locfield == 0 )
printnl ( 621 ) ;
else printnl ( 622 ) ;
break ;
case 20 :
printnl ( 623 ) ;
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 ( 513 ) ;
}
break ;
default:
printnl ( 63 ) ;
break ;
}
{
l = tally ;
tally = 0 ;
selector = 6 ;
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 ( 275 ) ;
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 ( 275 ) ;
}
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 ( 626 , 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 = 14 ;
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 11 :
case 9 :
curexp = newringentry ( p ) ;
break ;
case 4 :
{
curexp = mem [p + 1 ].cint ;
{
if ( strref [curexp ]< 127 )
incr ( strref [curexp ]) ;
}
}
break ;
case 10 :
{
curexp = mem [p + 1 ].cint ;
incr ( mem [curexp ].hhfield .lhfield ) ;
}
break ;
case 6 :
curexp = makepen ( copypath ( mem [p + 1 ].cint ) , false ) ;
break ;
case 8 :
curexp = copypath ( mem [p + 1 ].cint ) ;
break ;
case 12 :
case 13 :
case 14 :
{
if ( mem [p + 1 ].cint == 0 )
initbignode ( p ) ;
t = getnode ( 2 ) ;
mem [t ].hhfield .b1 = 14 ;
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 ( 851 ) ;
break ;
}
}
halfword
#ifdef HAVE_PROTOTYPES
curtok ( void )
#else
curtok ( )
#endif
{
register halfword Result; halfword p ;
smallnumber savetype ;
integer saveexp ;
if ( cursym == 0 )
if ( curcmd == 40 )
{
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 = 15 ;
if ( curcmd == 44 )
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 ( 627 , 15 ) ;
if ( first == bufsize )
overflow ( 256 , bufsize ) ;
incr ( inopen ) ;
{
if ( inputptr > maxinstack )
{
maxinstack = inputptr ;
if ( inputptr == stacksize )
overflow ( 626 , stacksize ) ;
}
inputstack [inputptr ]= curinput ;
incr ( inputptr ) ;
}
curinput .indexfield = inopen ;
mpxname [curinput .indexfield ]= 1 ;
curinput .startfield = first ;
curinput .namefield = 0 ;
}
void
#ifdef HAVE_PROTOTYPES
endfilereading ( void )
#else
endfilereading ( )
#endif
{
if ( inopen > curinput .indexfield )
if ( ( mpxname [inopen ]== 1 ) || ( curinput .namefield <= 2 ) )
confusion ( 628 ) ;
else {
aclose ( inputfile [inopen ]) ;
{
if ( strref [mpxname [inopen ]]< 127 )
if ( strref [mpxname [inopen ]]> 1 )
decr ( strref [mpxname [inopen ]]) ;
else flushstring ( mpxname [inopen ]) ;
}
decr ( inopen ) ;
}
first = curinput .startfield ;
if ( curinput .indexfield != inopen )
confusion ( 628 ) ;
if ( curinput .namefield > 2 )
{
aclose ( inputfile [curinput .indexfield ]) ;
{
if ( strref [curinput .namefield ]< 127 )
if ( strref [curinput .namefield ]> 1 )
decr ( strref [curinput .namefield ]) ;
else flushstring ( curinput .namefield ) ;
}
{
if ( strref [inamestack [curinput .indexfield ]]< 127 )
if ( strref [inamestack [curinput .indexfield ]]> 1 )
decr ( strref [inamestack [curinput .indexfield ]]) ;
else flushstring ( inamestack [curinput .indexfield ]) ;
}
{
if ( strref [iareastack [curinput .indexfield ]]< 127 )
if ( strref [iareastack [curinput .indexfield ]]> 1 )
decr ( strref [iareastack [curinput .indexfield ]]) ;
else flushstring ( iareastack [curinput .indexfield ]) ;
}
}
{
decr ( inputptr ) ;
curinput = inputstack [inputptr ];
}
decr ( inopen ) ;
}
boolean
#ifdef HAVE_PROTOTYPES
beginmpxreading ( void )
#else
beginmpxreading ( )
#endif
{
register boolean Result; if ( inopen != curinput .indexfield + 1 )
Result = false ;
else {
if ( mpxname [inopen ]<= 1 )
confusion ( 629 ) ;
if ( first == bufsize )
overflow ( 256 , bufsize ) ;
{
if ( inputptr > maxinstack )
{
maxinstack = inputptr ;
if ( inputptr == stacksize )
overflow ( 626 , stacksize ) ;
}
inputstack [inputptr ]= curinput ;
incr ( inputptr ) ;
}
curinput .indexfield = inopen ;
curinput .startfield = first ;
curinput .namefield = mpxname [inopen ];
{
if ( strref [curinput .namefield ]< 127 )
incr ( strref [curinput .namefield ]) ;
}
last = first ;
curinput .limitfield = last ;
buffer [curinput .limitfield ]= 37 ;
first = curinput .limitfield + 1 ;
curinput .locfield = curinput .startfield ;
Result = true ;
}
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
endmpxreading ( void )
#else
endmpxreading ( )
#endif
{
if ( inopen != curinput .indexfield )
confusion ( 629 ) ;
if ( curinput .locfield < curinput .limitfield )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 630 ) ;
}
{
helpptr = 4 ;
helpline [3 ]= 631 ;
helpline [2 ]= 632 ;
helpline [1 ]= 633 ;
helpline [0 ]= 634 ;
}
error () ;
}
first = curinput .startfield ;
{
decr ( inputptr ) ;
curinput = inputstack [inputptr ];
}
}
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 if ( scannerstatus == 7 )
if ( cursym != 0 )
Result = true ;
else {
deletionsallowed = false ;
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 640 ) ;
}
printint ( warninginfo ) ;
{
helpptr = 2 ;
helpline [1 ]= 641 ;
helpline [0 ]= 642 ;
}
cursym = 9768 ;
inserror () ;
deletionsallowed = true ;
Result = false ;
}
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 ( 262 ) ;
print ( 643 ) ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 644 ) ;
}
}
print ( 645 ) ;
{
helpptr = 4 ;
helpline [3 ]= 646 ;
helpline [2 ]= 647 ;
helpline [1 ]= 648 ;
helpline [0 ]= 649 ;
}
switch ( scannerstatus )
{case 2 :
{
print ( 650 ) ;
helpline [3 ]= 651 ;
cursym = 9763 ;
}
break ;
case 3 :
{
print ( 652 ) ;
helpline [3 ]= 653 ;
if ( warninginfo == 0 )
cursym = 9767 ;
else {
cursym = 9759 ;
eqtb [9759 ].v.RH = warninginfo ;
}
}
break ;
case 4 :
case 5 :
{
print ( 654 ) ;
if ( scannerstatus == 5 )
print ( hash [warninginfo ].v.RH ) ;
else printvariablename ( warninginfo ) ;
cursym = 9765 ;
}
break ;
case 6 :
{
print ( 655 ) ;
print ( hash [warninginfo ].v.RH ) ;
print ( 656 ) ;
helpline [3 ]= 657 ;
cursym = 9764 ;
}
break ;
}
inserror () ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 635 ) ;
}
printint ( warninginfo ) ;
{
helpptr = 3 ;
helpline [2 ]= 636 ;
helpline [1 ]= 637 ;
helpline [0 ]= 638 ;
}
if ( cursym == 0 )
helpline [2 ]= 639 ;
cursym = 9766 ;
inserror () ;
}
deletionsallowed = true ;
Result = false ;
}
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
getnext ( void )
#else
getnext ( )
#endif
{
/* 20 10 50 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 ( scannerstatus == 7 )
if ( curinput .locfield < curinput .limitfield )
goto lab25 ;
if ( curinput .namefield > 2 )
{
incr ( linestack [curinput .indexfield ]) ;
first = curinput .startfield ;
if ( ! forceeof )
{
if ( inputln ( inputfile [curinput .indexfield ], true ) )
firmuptheline () ;
else forceeof = true ;
}
if ( forceeof )
{
forceeof = false ;
decr ( curinput .locfield ) ;
if ( ( mpxname [curinput .indexfield ]> 1 ) )
{
mpxname [curinput .indexfield ]= 0 ;
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 676 ) ;
}
{
helpptr = 4 ;
helpline [3 ]= 677 ;
helpline [2 ]= 632 ;
helpline [1 ]= 678 ;
helpline [0 ]= 679 ;
}
deletionsallowed = false ;
error () ;
deletionsallowed = true ;
cursym = 9769 ;
goto lab50 ;
}
else {
printchar ( 41 ) ;
decr ( openparens ) ;
fflush ( stdout ) ;
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 < 9 )
openlogfile () ;
if ( interaction > 1 )
{
if ( curinput .limitfield == curinput .startfield )
printnl ( 674 ) ;
println () ;
first = curinput .startfield ;
{
;
print ( 42 ) ;
terminput () ;
}
curinput .limitfield = last ;
buffer [curinput .limitfield ]= 37 ;
first = curinput .limitfield + 1 ;
curinput .locfield = curinput .startfield ;
}
else fatalerror ( 675 ) ;
}
{
if ( interrupt != 0 )
pauseforinstructions () ;
}
goto lab25 ;
}
break ;
case 4 :
if ( scannerstatus == 7 )
goto lab25 ;
else {
if ( buffer [curinput .locfield ]== 34 )
curmod = 284 ;
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 ( 262 ) ;
print ( 665 ) ;
}
{
helpptr = 3 ;
helpline [2 ]= 666 ;
helpline [1 ]= 667 ;
helpline [0 ]= 668 ;
}
deletionsallowed = false ;
error () ;
deletionsallowed = true ;
goto lab20 ;
}
if ( curinput .locfield == k + 1 )
curmod = buffer [k ];
else {
{
if ( poolptr + curinput .locfield - k > maxpoolptr )
if ( poolptr + curinput .locfield - k > poolsize )
docompaction ( curinput .locfield - k ) ;
else maxpoolptr = poolptr + curinput .locfield - k ;
}
do {
{
strpool [poolptr ]= buffer [k ];
incr ( poolptr ) ;
}
incr ( k ) ;
} while ( ! ( k == curinput .locfield ) ) ;
curmod = makestring () ;
}
}
incr ( curinput .locfield ) ;
curcmd = 41 ;
goto lab10 ;
}
break ;
case 5 :
case 6 :
case 7 :
case 8 :
{
k = curinput .locfield - 1 ;
goto lab40 ;
}
break ;
case 20 :
if ( scannerstatus == 7 )
goto lab25 ;
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 662 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 663 ;
helpline [0 ]= 664 ;
}
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 < 32768L )
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 < 32768L )
{
curmod = n * 65536L + f ;
if ( curmod >= 268435456L )
if ( ( internal [30 ]> 0 ) && ( scannerstatus != 7 ) )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 672 ) ;
}
printscaled ( curmod ) ;
printchar ( 41 ) ;
{
helpptr = 3 ;
helpline [2 ]= 673 ;
helpline [1 ]= 605 ;
helpline [0 ]= 606 ;
}
error () ;
}
}
else if ( scannerstatus != 7 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 669 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 670 ;
helpline [0 ]= 671 ;
}
deletionsallowed = false ;
error () ;
deletionsallowed = true ;
curmod = 2147483647L ;
}
curcmd = 44 ;
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 >= 9772 )
if ( cursym >= 9922 )
{
if ( cursym >= 10072 )
cursym = cursym - 150 ;
begintokenlist ( paramstack [curinput .limitfield + cursym - ( 9922 ) ]
, 18 ) ;
goto lab20 ;
}
else {
curcmd = 40 ;
curmod = paramstack [curinput .limitfield + cursym - ( 9772 ) ];
cursym = 0 ;
goto lab10 ;
}
}
else if ( curinput .locfield > 0 )
{
if ( mem [curinput .locfield ].hhfield .b1 == 15 )
{
curmod = mem [curinput .locfield + 1 ].cint ;
if ( mem [curinput .locfield ].hhfield .b0 == 16 )
curcmd = 44 ;
else {
curcmd = 41 ;
{
if ( strref [curmod ]< 127 )
incr ( strref [curmod ]) ;
}
}
}
else {
curmod = curinput .locfield ;
curcmd = 40 ;
}
curinput .locfield = mem [curinput .locfield ].hhfield .v.RH ;
goto lab10 ;
}
else {
endtokenlist () ;
goto lab20 ;
}
lab50: curcmd = eqtb [cursym ].lhfield ;
curmod = eqtb [cursym ].v.RH ;
if ( curcmd >= 85 )
if ( checkoutervalidity () )
curcmd = curcmd - 85 ;
else goto lab20 ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
firmuptheline ( void )
#else
firmuptheline ( )
#endif
{
integer k ;
curinput .limitfield = last ;
if ( internal [24 ]> 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 ( 680 ) ;
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 ;
}
}
}
void
#ifdef HAVE_PROTOTYPES
tnext ( void )
#else
tnext ( )
#endif
{
/* 65 50 */ char oldstatus ;
integer oldinfo ;
while ( curcmd <= 3 ) {
if ( curcmd == 3 )
if ( ! ( curinput .indexfield <= 15 ) || ( mpxname [curinput .indexfield
]== 1 ) )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 690 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 691 ;
helpline [0 ]= 692 ;
}
error () ;
}
else {
endmpxreading () ;
goto lab65 ;
}
else if ( curcmd == 1 )
if ( ( curinput .indexfield > 15 ) || ( curinput .namefield <= 2 ) )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 686 ) ;
}
{
helpptr = 3 ;
helpline [2 ]= 687 ;
helpline [1 ]= 688 ;
helpline [0 ]= 689 ;
}
error () ;
}
else if ( ( mpxname [curinput .indexfield ]> 1 ) )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 683 ) ;
}
{
helpptr = 4 ;
helpline [3 ]= 631 ;
helpline [2 ]= 632 ;
helpline [1 ]= 684 ;
helpline [0 ]= 685 ;
}
error () ;
}
else if ( ( curmod != 1 ) && ( mpxname [curinput .indexfield ]!= 0 ) )
{
if ( ! beginmpxreading () )
startmpxinput () ;
}
else goto lab65 ;
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 693 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 694 ;
}
error () ;
}
goto lab50 ;
lab65: oldstatus = scannerstatus ;
oldinfo = warninginfo ;
scannerstatus = 7 ;
warninginfo = linestack [curinput .indexfield ];
do {
getnext () ;
} while ( ! ( curcmd == 2 ) ) ;
scannerstatus = oldstatus ;
warninginfo = oldinfo ;
lab50: getnext () ;
}
}
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 ( curcmd <= 3 )
tnext () ;
}
if ( cursym > 0 )
{
{
q = substlist ;
while ( q != 0 ) {
if ( mem [q ].hhfield .lhfield == cursym )
{
cursym = mem [q + 1 ].cint ;
curcmd = 10 ;
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 == 63 )
{
if ( curmod == 0 )
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
else if ( curmod <= suffixcount )
cursym = 9921 + 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 ( curcmd <= 3 )
tnext () ;
}
if ( ( cursym == 0 ) || ( cursym > 9757 ) )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 706 ) ;
}
{
helpptr = 3 ;
helpline [2 ]= 707 ;
helpline [1 ]= 708 ;
helpline [0 ]= 709 ;
}
if ( cursym > 0 )
helpline [2 ]= 710 ;
else if ( curcmd == 41 )
{
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 != 53 )
if ( curcmd != 76 )
{
missingerr ( 61 ) ;
{
helpptr = 5 ;
helpline [4 ]= 711 ;
helpline [3 ]= 712 ;
helpline [2 ]= 713 ;
helpline [1 ]= 714 ;
helpline [0 ]= 715 ;
}
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 = 9772 ;
getclearsymbol () ;
warninginfo = cursym ;
getsymbol () ;
p = getnode ( 2 ) ;
mem [p ].hhfield .lhfield = cursym ;
mem [p + 1 ].cint = 9773 ;
mem [p ].hhfield .v.RH = q ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
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 ( 18 , 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 == 64 )
if ( curmod == ldelim )
goto lab10 ;
if ( cursym != rdelim )
{
missingerr ( hash [rdelim ].v.RH ) ;
{
helpptr = 2 ;
helpline [1 ]= 970 ;
helpline [0 ]= 971 ;
}
backerror () ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 972 ) ;
}
print ( hash [rdelim ].v.RH ) ;
print ( 973 ) ;
{
helpptr = 3 ;
helpline [2 ]= 974 ;
helpline [1 ]= 975 ;
helpline [0 ]= 976 ;
}
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 != 43 )
clearsymbol ( x , false ) ;
h = getavail () ;
mem [h ].hhfield .lhfield = x ;
t = h ;
while ( true ) {
getxnext () ;
if ( cursym == 0 )
goto lab30 ;
if ( curcmd != 43 )
if ( curcmd != 42 )
if ( curcmd == 65 )
{
l = cursym ;
getxnext () ;
if ( curcmd != 66 )
{
backinput () ;
cursym = l ;
curcmd = 65 ;
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 != 43 )
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 () ;
if ( curcmd <= 3 )
tnext () ;
}
scannerstatus = 5 ;
n = 0 ;
eqtb [warninginfo ].lhfield = 13 ;
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 ( 262 ) ;
print ( 722 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 723 ;
helpline [0 ]= 724 ;
}
error () ;
warninginfo = 22 ;
}
scannerstatus = 4 ;
n = 2 ;
if ( curcmd == 63 )
if ( curmod == 3 )
{
n = 3 ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
}
mem [warninginfo ].hhfield .b0 = 20 + n ;
mem [warninginfo + 1 ].cint = q ;
}
k = n ;
if ( curcmd == 33 )
do {
ldelim = cursym ;
rdelim = curmod ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
if ( ( curcmd == 58 ) && ( curmod >= 9772 ) )
base = curmod ;
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 725 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 726 ;
}
backerror () ;
base = 9772 ;
}
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 ( 727 , 150 ) ;
incr ( k ) ;
mem [p ].hhfield .v.RH = r ;
r = p ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
} while ( ! ( curcmd != 81 ) ) ;
checkdelimiter ( ldelim , rdelim ) ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
} while ( ! ( curcmd != 33 ) ) ;
if ( curcmd == 58 )
{
p = getnode ( 2 ) ;
if ( curmod < 9772 )
{
c = curmod ;
mem [p + 1 ].cint = 9772 + k ;
}
else {
mem [p + 1 ].cint = curmod + k ;
if ( curmod == 9772 )
c = 4 ;
else if ( curmod == 9922 )
c = 6 ;
else c = 7 ;
}
if ( k == 150 )
overflow ( 727 , 150 ) ;
incr ( k ) ;
getsymbol () ;
mem [p ].hhfield .lhfield = cursym ;
mem [p ].hhfield .v.RH = r ;
r = p ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
if ( c == 4 )
if ( curcmd == 70 )
{
c = 5 ;
p = getnode ( 2 ) ;
if ( k == 150 )
overflow ( 727 , 150 ) ;
mem [p + 1 ].cint = 9772 + k ;
getsymbol () ;
mem [p ].hhfield .lhfield = cursym ;
mem [p ].hhfield .v.RH = r ;
r = p ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
}
}
checkequals () ;
p = getavail () ;
mem [p ].hhfield .lhfield = c ;
mem [q ].hhfield .v.RH = p ;
if ( m == 1 )
mem [p ].hhfield .v.RH = scantoks ( 18 , 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 ( 18 , r , p , n ) ;
}
if ( warninginfo == 22 )
flushtokenlist ( mem [23 ].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 ( 510 ) ;
else if ( ( b < 10072 ) && ( b != 7 ) )
printnl ( 511 ) ;
else printnl ( 512 ) ;
printint ( n ) ;
print ( 743 ) ;
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 ( curcmd <= 3 )
tnext () ;
}
if ( ldelim == 0 )
{
if ( curcmd > 81 )
{
if ( balance == 1 )
goto lab30 ;
else if ( curcmd == 83 )
decr ( balance ) ;
}
else if ( curcmd == 34 )
incr ( balance ) ;
}
else {
if ( curcmd == 64 )
{
if ( curmod == ldelim )
{
decr ( balance ) ;
if ( balance == 0 )
goto lab30 ;
}
}
else if ( curcmd == 33 )
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 [8 ]> 0 )
{
begindiagnostic () ;
println () ;
printmacroname ( arglist , macroname ) ;
if ( n == 3 )
print ( 705 ) ;
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 = 82 ;
while ( mem [r ].hhfield .lhfield >= 9772 ) {
if ( curcmd != 81 )
{
getxnext () ;
if ( curcmd != 33 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 749 ) ;
}
printmacroname ( arglist , macroname ) ;
{
helpptr = 3 ;
helpline [2 ]= 750 ;
helpline [1 ]= 751 ;
helpline [0 ]= 752 ;
}
if ( mem [r ].hhfield .lhfield >= 9922 )
{
curexp = 0 ;
curtype = 20 ;
}
else {
curexp = 0 ;
curtype = 16 ;
}
backerror () ;
curcmd = 64 ;
goto lab40 ;
}
ldelim = cursym ;
rdelim = curmod ;
}
if ( mem [r ].hhfield .lhfield >= 10072 )
scantextarg ( ldelim , rdelim ) ;
else {
getxnext () ;
if ( mem [r ].hhfield .lhfield >= 9922 )
scansuffix () ;
else scanexpression () ;
}
if ( curcmd != 81 )
if ( ( curcmd != 64 ) || ( curmod != ldelim ) )
if ( mem [mem [r ].hhfield .v.RH ].hhfield .lhfield >= 9772 )
{
missingerr ( 44 ) ;
{
helpptr = 3 ;
helpline [2 ]= 753 ;
helpline [1 ]= 754 ;
helpline [0 ]= 748 ;
}
backerror () ;
curcmd = 81 ;
}
else {
missingerr ( hash [rdelim ].v.RH ) ;
{
helpptr = 2 ;
helpline [1 ]= 755 ;
helpline [0 ]= 748 ;
}
backerror () ;
}
lab40: {
p = getavail () ;
if ( curtype == 20 )
mem [p ].hhfield .lhfield = curexp ;
else mem [p ].hhfield .lhfield = stashcurexp () ;
if ( internal [8 ]> 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 == 81 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 744 ) ;
}
printmacroname ( arglist , macroname ) ;
printchar ( 59 ) ;
printnl ( 745 ) ;
print ( hash [rdelim ].v.RH ) ;
print ( 299 ) ;
{
helpptr = 3 ;
helpline [2 ]= 746 ;
helpline [1 ]= 747 ;
helpline [0 ]= 748 ;
}
error () ;
}
if ( mem [r ].hhfield .lhfield != 0 )
{
if ( mem [r ].hhfield .lhfield < 7 )
{
getxnext () ;
if ( mem [r ].hhfield .lhfield != 6 )
if ( ( curcmd == 53 ) || ( curcmd == 76 ) )
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 [8 ]> 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 != 70 )
{
missingerr ( 489 ) ;
print ( 756 ) ;
printmacroname ( arglist , macroname ) ;
{
helpptr = 1 ;
helpline [0 ]= 757 ;
}
backerror () ;
}
getxnext () ;
scanprimary () ;
}
break ;
case 6 :
{
if ( curcmd != 33 )
ldelim = 0 ;
else {
ldelim = cursym ;
rdelim = curmod ;
getxnext () ;
}
scansuffix () ;
if ( ldelim != 0 )
{
if ( ( curcmd != 64 ) || ( curmod != ldelim ) )
{
missingerr ( hash [rdelim ].v.RH ) ;
{
helpptr = 2 ;
helpline [1 ]= 755 ;
helpline [0 ]= 748 ;
}
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 [8 ]> 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 ( 727 , 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 [6 ]> 65536L )
if ( curcmd != 13 )
showcmdmod ( curcmd , curmod ) ;
switch ( curcmd )
{case 4 :
conditional () ;
break ;
case 5 :
if ( curmod > iflimit )
if ( iflimit == 1 )
{
missingerr ( 58 ) ;
backinput () ;
cursym = 9762 ;
inserror () ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 764 ) ;
}
printcmdmod ( 5 , curmod ) ;
{
helpptr = 1 ;
helpline [0 ]= 765 ;
}
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 6 :
if ( curmod > 0 )
forceeof = true ;
else startinput () ;
break ;
case 7 :
if ( curmod == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 728 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 729 ;
helpline [0 ]= 730 ;
}
error () ;
}
else beginiteration () ;
break ;
case 8 :
{
while ( ( curinput .indexfield > 15 ) && ( curinput .locfield == 0 ) )
endtokenlist () ;
if ( loopptr == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 732 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 733 ;
helpline [0 ]= 734 ;
}
error () ;
}
else resumeiteration () ;
}
break ;
case 9 :
{
getboolean () ;
if ( internal [6 ]> 65536L )
showcmdmod ( 35 , curexp ) ;
if ( curexp == 30 )
if ( loopptr == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 735 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 736 ;
}
if ( curcmd == 82 )
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 ( 739 ) ;
stopiteration () ;
}
else if ( curcmd != 82 )
{
missingerr ( 59 ) ;
{
helpptr = 2 ;
helpline [1 ]= 737 ;
helpline [0 ]= 738 ;
}
backerror () ;
}
}
break ;
case 10 :
;
break ;
case 12 :
{
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
p = curtok () ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
if ( curcmd < 14 )
expand () ;
else backinput () ;
begintokenlist ( p , 19 ) ;
}
break ;
case 11 :
{
getxnext () ;
scanprimary () ;
if ( curtype != 4 )
{
disperr ( 0 , 740 ) ;
{
helpptr = 2 ;
helpline [1 ]= 741 ;
helpline [0 ]= 742 ;
}
putgetflusherror ( 0 ) ;
}
else {
backinput () ;
if ( ( strstart [nextstr [curexp ]]- strstart [curexp ]) > 0 )
{
beginfilereading () ;
curinput .namefield = 2 ;
k = first + ( strstart [nextstr [curexp ]]- 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 13 :
macrocall ( curmod , 0 , cursym ) ;
break ;
}
}
void
#ifdef HAVE_PROTOTYPES
getxnext ( void )
#else
getxnext ( )
#endif
{
halfword saveexp ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
if ( curcmd < 14 )
{
saveexp = stashcurexp () ;
do {
if ( curcmd == 13 )
macrocall ( curmod , 0 , cursym ) ;
else expand () ;
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
} while ( ! ( curcmd >= 14 ) ) ;
unstashcurexp ( saveexp ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zstackargument ( halfword p )
#else
zstackargument ( p )
halfword p ;
#endif
{
if ( paramptr == maxparamstack )
{
incr ( maxparamstack ) ;
if ( maxparamstack > 150 )
overflow ( 727 , 150 ) ;
}
paramstack [paramptr ]= p ;
incr ( paramptr ) ;
}
void
#ifdef HAVE_PROTOTYPES
passtext ( void )
#else
passtext ( )
#endif
{
/* 30 */ integer l ;
scannerstatus = 1 ;
l = 0 ;
warninginfo = trueline () ;
while ( true ) {
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
if ( curcmd <= 5 )
if ( curcmd < 5 )
incr ( l ) ;
else {
if ( l == 0 )
goto lab30 ;
if ( curmod == 2 )
decr ( l ) ;
}
else if ( curcmd == 41 )
{
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 ( 758 ) ;
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 != 80 )
{
missingerr ( 58 ) ;
{
helpptr = 2 ;
helpline [1 ]= 761 ;
helpline [0 ]= 738 ;
}
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 = trueline () ;
curif = 1 ;
}
savecondptr = condptr ;
lab21: getboolean () ;
newiflimit = 4 ;
if ( internal [6 ]> 65536L )
{
begindiagnostic () ;
if ( curexp == 30 )
print ( 762 ) ;
else print ( 763 ) ;
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 = trueline () ;
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 , 766 ) ;
print ( s ) ;
print ( 306 ) ;
{
helpptr = 4 ;
helpline [3 ]= 767 ;
helpline [2 ]= 768 ;
helpline [1 ]= 769 ;
helpline [0 ]= 308 ;
}
putgetflusherror ( 0 ) ;
}
void
#ifdef HAVE_PROTOTYPES
beginiteration ( void )
#else
beginiteration ( )
#endif
{
/* 22 30 */ halfword m ;
halfword n ;
halfword s ;
halfword p ;
halfword q ;
halfword pp ;
m = curmod ;
n = cursym ;
s = getnode ( 2 ) ;
if ( m == 1 )
{
mem [s + 1 ].hhfield .lhfield = 1 ;
p = 0 ;
getxnext () ;
}
else {
getsymbol () ;
p = getnode ( 2 ) ;
mem [p ].hhfield .lhfield = cursym ;
mem [p + 1 ].cint = m ;
getxnext () ;
if ( curcmd == 74 )
{
getxnext () ;
scanexpression () ;
if ( curtype != 10 )
{
disperr ( 0 , 782 ) ;
{
helpptr = 1 ;
helpline [0 ]= 783 ;
}
putgetflusherror ( getnode ( 8 ) ) ;
initedges ( curexp ) ;
curtype = 10 ;
}
mem [s + 1 ].hhfield .lhfield = curexp ;
curtype = 1 ;
q = mem [curexp + 7 ].hhfield .v.RH ;
if ( q != 0 )
if ( ( mem [q ].hhfield .b0 >= 4 ) )
if ( skip1component ( q ) == 0 )
q = mem [q ].hhfield .v.RH ;
mem [s + 1 ].hhfield .v.RH = q ;
}
else {
if ( ( curcmd != 53 ) && ( curcmd != 76 ) )
{
missingerr ( 61 ) ;
{
helpptr = 3 ;
helpline [2 ]= 770 ;
helpline [1 ]= 713 ;
helpline [0 ]= 771 ;
}
backerror () ;
}
mem [s + 1 ].hhfield .lhfield = 0 ;
q = s + 1 ;
mem [q ].hhfield .v.RH = 0 ;
do {
getxnext () ;
if ( m != 9772 )
scansuffix () ;
else {
if ( curcmd >= 80 )
if ( curcmd <= 81 )
goto lab22 ;
scanexpression () ;
if ( curcmd == 72 )
if ( q == s + 1 )
{
if ( curtype != 16 )
badfor ( 777 ) ;
pp = getnode ( 4 ) ;
mem [pp + 1 ].cint = curexp ;
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
badfor ( 778 ) ;
mem [pp + 2 ].cint = curexp ;
if ( curcmd != 73 )
{
missingerr ( 500 ) ;
{
helpptr = 2 ;
helpline [1 ]= 779 ;
helpline [0 ]= 780 ;
}
backerror () ;
}
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
badfor ( 781 ) ;
mem [pp + 3 ].cint = curexp ;
mem [s + 1 ].hhfield .v.RH = pp ;
mem [s + 1 ].hhfield .lhfield = 2 ;
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 != 81 ) ) ;
lab30: ;
}
}
if ( curcmd != 80 )
{
missingerr ( 58 ) ;
{
helpptr = 3 ;
helpline [2 ]= 772 ;
helpline [1 ]= 773 ;
helpline [0 ]= 774 ;
}
backerror () ;
}
q = getavail () ;
mem [q ].hhfield .lhfield = 9758 ;
scannerstatus = 6 ;
warninginfo = n ;
mem [s ].hhfield .lhfield = scantoks ( 7 , 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 == 2 )
{
p = mem [loopptr + 1 ].hhfield .v.RH ;
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 == 0 )
{
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 if ( p == 1 )
{
begintokenlist ( mem [loopptr ].hhfield .lhfield , 16 ) ;
goto lab10 ;
}
else {
q = mem [loopptr + 1 ].hhfield .v.RH ;
if ( q == 0 )
goto lab45 ;
if ( ! ( mem [q ].hhfield .b0 >= 4 ) )
q = mem [q ].hhfield .v.RH ;
else if ( ! ( mem [q ].hhfield .b0 >= 6 ) )
q = skip1component ( q ) ;
else goto lab45 ;
curexp = copyobjects ( mem [loopptr + 1 ].hhfield .v.RH , q ) ;
initbbox ( curexp ) ;
curtype = 10 ;
mem [loopptr + 1 ].hhfield .v.RH = q ;
q = stashcurexp () ;
}
begintokenlist ( mem [loopptr ].hhfield .lhfield , 17 ) ;
stackargument ( q ) ;
if ( internal [6 ]> 65536L )
{
begindiagnostic () ;
printnl ( 776 ) ;
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 == 2 )
freenode ( mem [loopptr + 1 ].hhfield .v.RH , 4 ) ;
else if ( p == 0 )
{
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 */
}
}
}
else if ( p > 2 )
if ( mem [p ].hhfield .lhfield == 0 )
tossedges ( p ) ;
else decr ( mem [p ].hhfield .lhfield ) ;
p = loopptr ;
loopptr = mem [p ].hhfield .v.RH ;
flushtokenlist ( mem [p ].hhfield .lhfield ) ;
freenode ( p , 2 ) ;
}
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 + 5 > maxint )
b = a + maxint - n - 5 ;
k = 0 ;
if ( (char*) nameoffile )
libcfree ( (char*) nameoffile ) ;
nameoffile = xmalloc ( 1 + n + ( b - a + 1 ) + 5 ) ;
{register integer for_end; j = 1 ;for_end = n ; if ( j <= for_end) do
{
c = xord [MPmemdefault [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 = memdefaultlength - 3 ;for_end =
memdefaultlength ; if ( j <= for_end) do
{
c = xord [MPmemdefault [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 ( stroverflowed )
Result = 63 ;
else {
{
if ( poolptr + namelength > maxpoolptr )
if ( poolptr + namelength > poolsize )
docompaction ( namelength ) ;
else maxpoolptr = poolptr + namelength ;
}
{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
{
{
if ( strref [s ]< 127 )
incr ( strref [s ]) ;
}
{
if ( strref [curname ]< 127 )
if ( strref [curname ]> 1 )
decr ( strref [curname ]) ;
else flushstring ( curname ) ;
}
{
if ( strref [curarea ]< 127 )
if ( strref [curarea ]> 1 )
decr ( strref [curarea ]) ;
else flushstring ( curarea ) ;
}
{
if ( strref [curext ]< 127 )
if ( strref [curext ]> 1 )
decr ( strref [curext ]) ;
else flushstring ( curext ) ;
}
curarea = 284 ;
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 == 785 )
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 786 ) ;
}
else {
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 787 ) ;
}
printfilename ( curname , curarea , curext ) ;
print ( 788 ) ;
if ( e == 284 )
showcontext () ;
printnl ( 789 ) ;
print ( s ) ;
if ( interaction < 2 )
fatalerror ( 790 ) ;
{
;
print ( 791 ) ;
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 == 284 )
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 = 792 ;
packjobname ( 793 ) ;
while ( ! aopenout ( logfile ) ) {
selector = 8 ;
promptfilename ( 795 , 793 ) ;
}
texmflogname = amakenamestring ( logfile ) ;
selector = 9 ;
logopened = true ;
{
Fputs( logfile , "This is MetaPost, Version 0.641" ) ;
Fputs( logfile , versionstring ) ;
print ( memident ) ;
print ( 796 ) ;
printint ( roundunscaled ( internal [15 ]) ) ;
printchar ( 32 ) ;
months = " JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC" ;
m = roundunscaled ( internal [14 ]) ;
{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 [13 ]) ) ;
printchar ( 32 ) ;
m = roundunscaled ( internal [16 ]) ;
printdd ( m / 60 ) ;
printchar ( 58 ) ;
printdd ( m % 60 ) ;
}
inputstack [inputptr ]= curinput ;
printnl ( 794 ) ;
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 ;
}
boolean
#ifdef HAVE_PROTOTYPES
ztryextension ( strnumber ext )
#else
ztryextension ( ext )
strnumber ext ;
#endif
{
register boolean Result; packfilename ( curname , curarea , curext ) ;
inamestack [curinput .indexfield ]= curname ;
iareastack [curinput .indexfield ]= curarea ;
if ( strvsstr ( ext , 797 ) == 0 )
Result = aopenin ( inputfile [curinput .indexfield ], kpsemfformat ) ;
else Result = aopenin ( inputfile [curinput .indexfield ], kpsempformat )
;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zcopyoldname ( strnumber s )
#else
zcopyoldname ( s )
strnumber s ;
#endif
{
integer k ;
poolpointer j ;
k = 0 ;
if ( oldfilename )
libcfree ( oldfilename ) ;
oldfilename = xmalloc ( 1 + ( strstart [nextstr [s ]]- strstart [s ])
+ 1 ) ;
{register integer for_end; j = strstart [s ];for_end = strstart [
nextstr [s ]]- 1 ; if ( j <= for_end) do
{
incr ( k ) ;
if ( k <= maxint )
oldfilename [k ]= xchr [strpool [j ]];
}
while ( j++ < for_end ) ;}
if ( k <= maxint )
oldnamelength = k ;
else oldnamelength = maxint ;
oldfilename [oldnamelength + 1 ]= 0 ;
}
void
#ifdef HAVE_PROTOTYPES
startmpxinput ( void )
#else
startmpxinput ( )
#endif
{
/* 10 45 */ integer k ;
packfilename ( inamestack [curinput .indexfield ], iareastack [curinput
.indexfield ], 803 ) ;
copyoldname ( curinput .namefield ) ;
if ( ! callmakempx ( oldfilename + 1 , (char*) nameoffile + 1 ) )
goto lab45 ;
beginfilereading () ;
if ( ! aopenin ( inputfile [curinput .indexfield ], -1 ) )
{
endfilereading () ;
goto lab45 ;
}
curinput .namefield = amakenamestring ( inputfile [curinput .indexfield ])
;
mpxname [curinput .indexfield ]= curinput .namefield ;
{
if ( strref [curinput .namefield ]< 127 )
incr ( strref [curinput .namefield ]) ;
}
{
linestack [curinput .indexfield ]= 1 ;
if ( inputln ( inputfile [curinput .indexfield ], false ) )
;
firmuptheline () ;
buffer [curinput .limitfield ]= 37 ;
first = curinput .limitfield + 1 ;
curinput .locfield = curinput .startfield ;
}
goto lab10 ;
lab45: if ( interaction == 3 )
;
printnl ( 804 ) ;
{register integer for_end; k = 1 ;for_end = oldnamelength ; if ( k <=
for_end) do
print ( xord [oldfilename [k ]]) ;
while ( k++ < for_end ) ;}
printnl ( 804 ) ;
{register integer for_end; k = 1 ;for_end = namelength ; if ( k <=
for_end) do
print ( xord [nameoffile [k ]]) ;
while ( k++ < for_end ) ;}
printnl ( 805 ) ;
{
helpptr = 4 ;
helpline [3 ]= 806 ;
helpline [2 ]= 807 ;
helpline [1 ]= 808 ;
helpline [0 ]= 809 ;
}
{
if ( interaction == 3 )
interaction = 2 ;
if ( logopened )
error () ;
;
#ifdef TEXMF_DEBUG
if ( interaction > 0 )
debughelp () ;
#endif /* TEXMF_DEBUG */
history = 3 ;
jumpout () ;
}
lab10: ;
}
boolean
#ifdef HAVE_PROTOTYPES
zstartreadinput ( strnumber s , readfindex n )
#else
zstartreadinput ( s , n )
strnumber s ;
readfindex n ;
#endif
{
/* 10 45 */ register boolean Result; strscanfile ( s ) ;
packfilename ( curname , curarea , curext ) ;
beginfilereading () ;
if ( ! aopenin ( rdfile [n ], -1 ) )
goto lab45 ;
if ( ! inputln ( rdfile [n ], false ) )
{
aclose ( rdfile [n ]) ;
goto lab45 ;
}
rdfname [n ]= s ;
{
if ( strref [s ]< 127 )
incr ( strref [s ]) ;
}
Result = true ;
goto lab10 ;
lab45: endfilereading () ;
Result = false ;
lab10: ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zopenwritefile ( strnumber s , readfindex n )
#else
zopenwritefile ( s , n )
strnumber s ;
readfindex n ;
#endif
{
#ifdef AMIGA
/* 30 */ readfindex n0 ;
#endif /* AMIGA */
strscanfile ( s ) ;
packfilename ( curname , curarea , curext ) ;
;
#ifdef AMIGA
{register integer for_end; n0 = 0 ;for_end = readfiles - 1 ; if ( n0 <=
for_end) do
{
if ( rdfname [n0 ]!= 0 )
{
if ( strvsstr ( s , rdfname [n0 ]) == 0 )
{
aclose ( rdfile [n0 ]) ;
{
if ( strref [rdfname [n0 ]]< 127 )
if ( strref [rdfname [n0 ]]> 1 )
decr ( strref [rdfname [n0 ]]) ;
else flushstring ( rdfname [n0 ]) ;
}
rdfname [n0 ]= 0 ;
if ( n0 == readfiles - 1 )
readfiles = n0 ;
goto lab30 ;
}
}
}
while ( n0++ < for_end ) ;}
lab30: ;
#endif /* AMIGA */
while ( ! openoutnameok ( (char*) nameoffile + 1 ) || ! aopenout ( wrfile [n ]) )
promptfilename ( 810 , 284 ) ;
wrfname [n ]= s ;
{
if ( strref [s ]< 127 )
incr ( strref [s ]) ;
}
if ( logopened )
{
oldsetting = selector ;
if ( ( internal [12 ]<= 0 ) )
selector = 9 ;
else selector = 10 ;
printnl ( 502 ) ;
printint ( n ) ;
print ( 811 ) ;
printfilename ( curname , curarea , curext ) ;
print ( 788 ) ;
printnl ( 284 ) ;
println () ;
selector = oldsetting ;
}
}
void
#ifdef HAVE_PROTOTYPES
zbadexp ( strnumber s )
#else
zbadexp ( s )
strnumber s ;
#endif
{
char saveflag ;
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( s ) ;
}
print ( 819 ) ;
printcmdmod ( curcmd , curmod ) ;
printchar ( 39 ) ;
{
helpptr = 4 ;
helpline [3 ]= 820 ;
helpline [2 ]= 821 ;
helpline [1 ]= 822 ;
helpline [0 ]= 823 ;
}
backinput () ;
cursym = 0 ;
curcmd = 44 ;
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 , 837 ) ;
{
helpptr = 3 ;
helpline [2 ]= 838 ;
helpline [1 ]= 839 ;
helpline [0 ]= 840 ;
}
flusherror ( 0 ) ;
}
void
#ifdef HAVE_PROTOTYPES
zobliterated ( halfword q )
#else
zobliterated ( q )
halfword q ;
#endif
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 841 ) ;
}
showtokenlist ( q , 0 , 1000 , 0 ) ;
print ( 842 ) ;
{
helpptr = 5 ;
helpline [4 ]= 843 ;
helpline [3 ]= 844 ;
helpline [2 ]= 845 ;
helpline [1 ]= 846 ;
helpline [0 ]= 847 ;
}
}
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
knownpair ( void )
#else
knownpair ( )
#endif
{
halfword p ;
if ( curtype != 14 )
{
disperr ( 0 , 858 ) ;
{
helpptr = 5 ;
helpline [4 ]= 859 ;
helpline [3 ]= 860 ;
helpline [2 ]= 861 ;
helpline [1 ]= 862 ;
helpline [0 ]= 863 ;
}
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 , 864 ) ;
{
helpptr = 5 ;
helpline [4 ]= 865 ;
helpline [3 ]= 860 ;
helpline [2 ]= 861 ;
helpline [1 ]= 862 ;
helpline [0 ]= 863 ;
}
putgeterror () ;
recyclevalue ( p ) ;
curx = 0 ;
}
if ( mem [p + 2 ].hhfield .b0 == 16 )
cury = mem [p + 3 ].cint ;
else {
disperr ( p + 2 , 866 ) ;
{
helpptr = 5 ;
helpline [4 ]= 867 ;
helpline [3 ]= 860 ;
helpline [2 ]= 861 ;
helpline [1 ]= 862 ;
helpline [0 ]= 863 ;
}
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 == 62 )
{
getxnext () ;
scanexpression () ;
if ( ( curtype != 16 ) || ( curexp < 0 ) )
{
disperr ( 0 , 870 ) ;
{
helpptr = 1 ;
helpline [0 ]= 871 ;
}
putgetflusherror ( 65536L ) ;
}
t = 3 ;
}
else {
scanexpression () ;
if ( curtype > 14 )
{
if ( curtype != 16 )
{
disperr ( 0 , 864 ) ;
{
helpptr = 5 ;
helpline [4 ]= 865 ;
helpline [3 ]= 860 ;
helpline [2 ]= 861 ;
helpline [1 ]= 862 ;
helpline [0 ]= 863 ;
}
putgetflusherror ( 0 ) ;
}
x = curexp ;
if ( curcmd != 81 )
{
missingerr ( 44 ) ;
{
helpptr = 2 ;
helpline [1 ]= 872 ;
helpline [0 ]= 873 ;
}
backerror () ;
}
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
{
disperr ( 0 , 866 ) ;
{
helpptr = 5 ;
helpline [4 ]= 867 ;
helpline [3 ]= 860 ;
helpline [2 ]= 861 ;
helpline [1 ]= 862 ;
helpline [0 ]= 863 ;
}
putgetflusherror ( 0 ) ;
}
cury = curexp ;
curx = x ;
}
else knownpair () ;
if ( ( curx == 0 ) && ( cury == 0 ) )
t = 4 ;
else {
t = 2 ;
curexp = narg ( curx , cury ) ;
}
}
if ( curcmd != 67 )
{
missingerr ( 125 ) ;
{
helpptr = 3 ;
helpline [2 ]= 868 ;
helpline [1 ]= 869 ;
helpline [0 ]= 738 ;
}
backerror () ;
}
getxnext () ;
Result = t ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
finishread ( void )
#else
finishread ( )
#endif
{
poolpointer k ;
{
if ( poolptr + last - curinput .startfield > maxpoolptr )
if ( poolptr + last - curinput .startfield > poolsize )
docompaction ( last - curinput .startfield ) ;
else 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 () ;
}
void
#ifdef HAVE_PROTOTYPES
zdonullary ( quarterword c )
#else
zdonullary ( c )
quarterword c ;
#endif
{
{
if ( aritherror )
cleararith () ;
}
if ( internal [6 ]> 131072L )
showcmdmod ( 35 , c ) ;
switch ( c )
{case 30 :
case 31 :
{
curtype = 2 ;
curexp = c ;
}
break ;
case 32 :
{
curtype = 10 ;
curexp = getnode ( 8 ) ;
initedges ( curexp ) ;
}
break ;
case 33 :
{
curtype = 6 ;
curexp = getpencircle ( 0 ) ;
}
break ;
case 37 :
{
curtype = 16 ;
curexp = normrand () ;
}
break ;
case 36 :
{
curtype = 6 ;
curexp = getpencircle ( 65536L ) ;
}
break ;
case 34 :
{
if ( jobname == 0 )
openlogfile () ;
curtype = 4 ;
curexp = jobname ;
}
break ;
case 35 :
{
if ( interaction <= 1 )
fatalerror ( 884 ) ;
beginfilereading () ;
curinput .namefield = 1 ;
curinput .limitfield = curinput .startfield ;
{
;
print ( 284 ) ;
terminput () ;
}
finishread () ;
}
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 ;
}
boolean
#ifdef HAVE_PROTOTYPES
znicecolororpair ( integer p , quarterword t )
#else
znicecolororpair ( p , t )
integer p ;
quarterword t ;
#endif
{
/* 10 */ register boolean Result; halfword q, r ;
if ( ( t != 14 ) && ( t != 13 ) )
Result = false ;
else {
q = mem [p + 1 ].cint ;
r = q + bignodesize [mem [p ].hhfield .b0 ];
do {
r = r - 2 ;
if ( mem [r ].hhfield .b0 != 16 )
{
Result = false ;
goto lab10 ;
}
} while ( ! ( r == q ) ) ;
Result = true ;
}
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 > 16 )
print ( 885 ) ;
else {
if ( ( t == 14 ) || ( t == 13 ) )
if ( ! nicecolororpair ( v , t ) )
print ( 886 ) ;
printtype ( t ) ;
}
printchar ( 41 ) ;
}
void
#ifdef HAVE_PROTOTYPES
zbadunary ( quarterword c )
#else
zbadunary ( c )
quarterword c ;
#endif
{
disperr ( 0 , 887 ) ;
printop ( c ) ;
printknownorunknowntype ( curtype , curexp ) ;
{
helpptr = 3 ;
helpline [2 ]= 888 ;
helpline [1 ]= 889 ;
helpline [0 ]= 890 ;
}
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 = 8 ;
}
void
#ifdef HAVE_PROTOTYPES
ztakepart ( quarterword c )
#else
ztakepart ( c )
quarterword c ;
#endif
{
halfword p ;
p = mem [curexp + 1 ].cint ;
mem [10 ].cint = p ;
mem [9 ].hhfield .b0 = curtype ;
mem [p ].hhfield .v.RH = 9 ;
freenode ( curexp , 2 ) ;
makeexpcopy ( p + sectoroffset [c - 49 ]) ;
recyclevalue ( 9 ) ;
}
void
#ifdef HAVE_PROTOTYPES
ztakepictpart ( quarterword c )
#else
ztakepictpart ( c )
quarterword c ;
#endif
{
/* 10 45 */ halfword p ;
p = mem [curexp + 7 ].hhfield .v.RH ;
if ( p != 0 )
{
switch ( c )
{case 54 :
case 55 :
case 56 :
case 57 :
case 58 :
case 59 :
if ( mem [p ].hhfield .b0 == 3 )
flushcurexp ( mem [p + c - 46 ].cint ) ;
else goto lab45 ;
break ;
case 60 :
case 61 :
case 62 :
if ( ( mem [p ].hhfield .b0 < 4 ) )
flushcurexp ( mem [p + c - 58 ].cint ) ;
else goto lab45 ;
break ;
case 64 :
if ( mem [p ].hhfield .b0 != 3 )
goto lab45 ;
else {
flushcurexp ( mem [p + 1 ].hhfield .v.RH ) ;
{
if ( strref [curexp ]< 127 )
incr ( strref [curexp ]) ;
}
curtype = 4 ;
}
break ;
case 63 :
if ( mem [p ].hhfield .b0 != 3 )
goto lab45 ;
else {
flushcurexp ( fontname [mem [p + 1 ].hhfield .lhfield ]) ;
{
if ( strref [curexp ]< 127 )
incr ( strref [curexp ]) ;
}
curtype = 4 ;
}
break ;
case 65 :
if ( mem [p ].hhfield .b0 == 3 )
goto lab45 ;
else if ( ( mem [p ].hhfield .b0 >= 6 ) )
confusion ( 892 ) ;
else {
flushcurexp ( copypath ( mem [p + 1 ].hhfield .v.RH ) ) ;
curtype = 8 ;
}
break ;
case 66 :
if ( ! ( mem [p ].hhfield .b0 < 3 ) )
goto lab45 ;
else if ( mem [p + 1 ].hhfield .lhfield == 0 )
goto lab45 ;
else {
flushcurexp ( makepen ( copypath ( mem [p + 1 ].hhfield .lhfield ) ,
false ) ) ;
curtype = 6 ;
}
break ;
case 67 :
if ( mem [p ].hhfield .b0 != 2 )
goto lab45 ;
else if ( mem [p + 6 ].hhfield .v.RH == 0 )
goto lab45 ;
else {
incr ( mem [mem [p + 6 ].hhfield .v.RH ].hhfield .lhfield ) ;
sesf = mem [p + 7 ].cint ;
sepic = mem [p + 6 ].hhfield .v.RH ;
scaleedges () ;
flushcurexp ( sepic ) ;
curtype = 10 ;
}
break ;
}
goto lab10 ;
}
lab45: switch ( c )
{case 64 :
case 63 :
{
flushcurexp ( 284 ) ;
curtype = 4 ;
}
break ;
case 65 :
{
flushcurexp ( getnode ( 7 ) ) ;
mem [curexp ].hhfield .b0 = 0 ;
mem [curexp ].hhfield .b1 = 0 ;
mem [curexp ].hhfield .v.RH = curexp ;
mem [curexp + 1 ].cint = 0 ;
mem [curexp + 2 ].cint = 0 ;
curtype = 8 ;
}
break ;
case 66 :
{
flushcurexp ( getpencircle ( 0 ) ) ;
curtype = 6 ;
}
break ;
case 67 :
{
flushcurexp ( getnode ( 8 ) ) ;
initedges ( curexp ) ;
curtype = 10 ;
}
break ;
default:
flushcurexp ( 0 ) ;
break ;
}
lab10: ;
}
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 == 50 )
if ( ( strstart [nextstr [curexp ]]- strstart [curexp ]) == 0 )
n = -1 ;
else n = strpool [strstart [curexp ]];
else {
if ( c == 48 )
b = 8 ;
else b = 16 ;
n = 0 ;
badchar = false ;
{register integer for_end; k = strstart [curexp ];for_end = strstart [
nextstr [curexp ]]- 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 , 893 ) ;
if ( c == 48 )
{
helpptr = 1 ;
helpline [0 ]= 894 ;
}
else {
helpptr = 1 ;
helpline [0 ]= 895 ;
}
putgeterror () ;
}
if ( ( n > 4095 ) )
if ( internal [30 ]> 0 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 896 ) ;
}
printint ( n ) ;
printchar ( 41 ) ;
{
helpptr = 2 ;
helpline [1 ]= 897 ;
helpline [0 ]= 606 ;
}
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 ;
}
scaled
#ifdef HAVE_PROTOTYPES
pictlength ( void )
#else
pictlength ( )
#endif
{
/* 40 */ register scaled Result; scaled n ;
halfword p ;
n = 0 ;
p = mem [curexp + 7 ].hhfield .v.RH ;
if ( p != 0 )
{
if ( ( mem [p ].hhfield .b0 >= 4 ) )
if ( skip1component ( p ) == 0 )
p = mem [p ].hhfield .v.RH ;
while ( p != 0 ) {
if ( ! ( mem [p ].hhfield .b0 >= 4 ) )
p = mem [p ].hhfield .v.RH ;
else if ( ! ( mem [p ].hhfield .b0 >= 6 ) )
p = skip1component ( p ) ;
else goto lab40 ;
n = n + 65536L ;
}
}
lab40: Result = n ;
return Result ;
}
scaled
#ifdef HAVE_PROTOTYPES
zcountturns ( halfword c )
#else
zcountturns ( c )
halfword c ;
#endif
{
register scaled Result; halfword p ;
integer t ;
t = 0 ;
p = c ;
do {
t = t + mem [p ].hhfield .lhfield - 16384 ;
p = mem [p ].hhfield .v.RH ;
} while ( ! ( p == c ) ) ;
Result = ( t / 3 ) * 65536L ;
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 10 :
case 16 :
b = 30 ;
break ;
case 12 :
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 == 41 )
flushcurexp ( b ) ;
else flushcurexp ( 61 - b ) ;
curtype = 2 ;
}
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 = 14 ;
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 ;
}
boolean
#ifdef HAVE_PROTOTYPES
getcurbbox ( void )
#else
getcurbbox ( )
#endif
{
/* 10 */ register boolean Result; switch ( curtype )
{case 10 :
{
setbbox ( curexp , true ) ;
if ( mem [curexp + 2 ].cint > mem [curexp + 4 ].cint )
{
bbmin [0 ]= 0 ;
bbmax [0 ]= 0 ;
bbmin [1 ]= 0 ;
bbmax [1 ]= 0 ;
}
else {
bbmin [0 ]= mem [curexp + 2 ].cint ;
bbmax [0 ]= mem [curexp + 4 ].cint ;
bbmin [1 ]= mem [curexp + 3 ].cint ;
bbmax [1 ]= mem [curexp + 5 ].cint ;
}
}
break ;
case 8 :
pathbbox ( curexp ) ;
break ;
case 6 :
penbbox ( curexp ) ;
break ;
default:
{
Result = false ;
goto lab10 ;
}
break ;
}
Result = true ;
lab10: ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zdoreadorclose ( quarterword c )
#else
zdoreadorclose ( c )
quarterword c ;
#endif
{
/* 10 22 40 45 46 */ readfindex n, n0 ;
n = readfiles ;
n0 = readfiles ;
do {
lab22: if ( n > 0 )
decr ( n ) ;
else if ( c == 39 )
goto lab46 ;
else {
if ( n0 == readfiles )
if ( readfiles < maxreadfiles )
incr ( readfiles ) ;
else overflow ( 899 , maxreadfiles ) ;
n = n0 ;
if ( startreadinput ( curexp , n ) )
goto lab40 ;
else goto lab45 ;
}
if ( rdfname [n ]== 0 )
{
n0 = n ;
goto lab22 ;
}
} while ( ! ( strvsstr ( curexp , rdfname [n ]) == 0 ) ) ;
if ( c == 39 )
{
aclose ( rdfile [n ]) ;
goto lab45 ;
}
beginfilereading () ;
curinput .namefield = 1 ;
if ( inputln ( rdfile [n ], true ) )
goto lab40 ;
endfilereading () ;
lab45: {
if ( strref [rdfname [n ]]< 127 )
if ( strref [rdfname [n ]]> 1 )
decr ( strref [rdfname [n ]]) ;
else flushstring ( rdfname [n ]) ;
}
rdfname [n ]= 0 ;
if ( n == readfiles - 1 )
readfiles = n ;
if ( c == 39 )
goto lab46 ;
if ( eofline == 0 )
{
{
strpool [poolptr ]= 0 ;
incr ( poolptr ) ;
}
eofline = makestring () ;
strref [eofline ]= 127 ;
}
flushcurexp ( eofline ) ;
curtype = 4 ;
goto lab10 ;
lab46: flushcurexp ( 0 ) ;
curtype = 1 ;
goto lab10 ;
lab40: flushcurexp ( 0 ) ;
finishread () ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zdounary ( quarterword c )
#else
zdounary ( c )
quarterword c ;
#endif
{
halfword p, q, r ;
integer x ;
{
if ( aritherror )
cleararith () ;
}
if ( internal [6 ]> 131072L )
{
begindiagnostic () ;
printnl ( 123 ) ;
printop ( c ) ;
printchar ( 40 ) ;
printexp ( 0 , 0 ) ;
print ( 891 ) ;
enddiagnostic ( false ) ;
}
switch ( c )
{case 89 :
if ( curtype < 13 )
badunary ( 89 ) ;
break ;
case 90 :
switch ( curtype )
{case 13 :
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 ;
r = p + bignodesize [curtype ];
do {
r = r - 2 ;
if ( mem [r ].hhfield .b0 == 16 )
mem [r + 1 ].cint = - (integer) mem [r + 1 ].cint ;
else negatedeplist ( mem [r + 1 ].hhfield .v.RH ) ;
} while ( ! ( r == p ) ) ;
}
recyclevalue ( q ) ;
freenode ( q , 2 ) ;
}
break ;
case 17 :
case 18 :
negatedeplist ( mem [curexp + 1 ].hhfield .v.RH ) ;
break ;
case 16 :
curexp = - (integer) curexp ;
break ;
default:
badunary ( 90 ) ;
break ;
}
break ;
case 43 :
if ( curtype != 2 )
badunary ( 43 ) ;
else curexp = 61 - curexp ;
break ;
case 68 :
case 69 :
case 70 :
case 71 :
case 72 :
case 73 :
case 74 :
case 40 :
case 75 :
if ( curtype != 16 )
badunary ( c ) ;
else switch ( c )
{case 68 :
curexp = squarert ( curexp ) ;
break ;
case 69 :
curexp = mexp ( curexp ) ;
break ;
case 70 :
curexp = mlog ( curexp ) ;
break ;
case 71 :
case 72 :
{
nsincos ( ( curexp % 23592960L ) * 16 ) ;
if ( c == 71 )
curexp = roundfraction ( nsin ) ;
else curexp = roundfraction ( ncos ) ;
}
break ;
case 73 :
curexp = floorscaled ( curexp ) ;
break ;
case 74 :
curexp = unifrand ( curexp ) ;
break ;
case 40 :
{
if ( odd ( roundunscaled ( curexp ) ) )
curexp = 30 ;
else curexp = 31 ;
curtype = 2 ;
}
break ;
case 75 :
{
curexp = roundunscaled ( curexp ) % 256 ;
if ( curexp < 0 )
curexp = curexp + 256 ;
if ( charexists [curexp ])
curexp = 30 ;
else curexp = 31 ;
curtype = 2 ;
}
break ;
}
break ;
case 82 :
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 ( 82 ) ;
break ;
case 54 :
case 55 :
if ( ( curtype == 14 ) || ( curtype == 12 ) )
takepart ( c ) ;
else if ( curtype == 10 )
takepictpart ( c ) ;
else badunary ( c ) ;
break ;
case 56 :
case 57 :
case 58 :
case 59 :
if ( curtype == 12 )
takepart ( c ) ;
else if ( curtype == 10 )
takepictpart ( c ) ;
else badunary ( c ) ;
break ;
case 60 :
case 61 :
case 62 :
if ( curtype == 13 )
takepart ( c ) ;
else if ( curtype == 10 )
takepictpart ( c ) ;
else badunary ( c ) ;
break ;
case 63 :
case 64 :
case 65 :
case 66 :
case 67 :
if ( curtype == 10 )
takepictpart ( c ) ;
else badunary ( c ) ;
break ;
case 51 :
if ( curtype != 16 )
badunary ( 51 ) ;
else {
curexp = roundunscaled ( curexp ) % 256 ;
curtype = 4 ;
if ( curexp < 0 )
curexp = curexp + 256 ;
}
break ;
case 44 :
if ( curtype != 16 )
badunary ( 44 ) ;
else {
oldsetting = selector ;
selector = 4 ;
printscaled ( curexp ) ;
curexp = makestring () ;
selector = oldsetting ;
curtype = 4 ;
}
break ;
case 48 :
case 49 :
case 50 :
if ( curtype != 4 )
badunary ( c ) ;
else strtonum ( c ) ;
break ;
case 76 :
if ( curtype != 4 )
badunary ( 76 ) ;
else flushcurexp ( ( fontdsize [findfont ( curexp ) ]+ 8 ) / 16 ) ;
break ;
case 52 :
switch ( curtype )
{case 4 :
flushcurexp ( ( strstart [nextstr [curexp ]]- strstart [curexp ])
* 65536L ) ;
break ;
case 8 :
flushcurexp ( pathlength () ) ;
break ;
case 16 :
curexp = abs ( curexp ) ;
break ;
case 10 :
flushcurexp ( pictlength () ) ;
break ;
default:
if ( nicepair ( curexp , curtype ) )
flushcurexp ( pythadd ( mem [mem [curexp + 1 ].cint + 1 ].cint , mem
[mem [curexp + 1 ].cint + 3 ].cint ) ) ;
else badunary ( c ) ;
break ;
}
break ;
case 53 :
if ( curtype == 14 )
flushcurexp ( 0 ) ;
else if ( curtype != 8 )
badunary ( 53 ) ;
else if ( mem [curexp ].hhfield .b0 == 0 )
flushcurexp ( 0 ) ;
else {
curexp = offsetprep ( curexp , 13 ) ;
if ( internal [5 ]> 65536L )
printspec ( curexp , 13 , 898 ) ;
flushcurexp ( countturns ( curexp ) ) ;
}
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 <= 7 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 8 :
{
if ( ( curtype >= 8 ) && ( curtype <= 9 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 10 :
{
if ( ( curtype >= 10 ) && ( curtype <= 11 ) )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 12 :
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 41 :
case 42 :
testknown ( c ) ;
break ;
case 83 :
{
if ( curtype != 8 )
flushcurexp ( 31 ) ;
else if ( mem [curexp ].hhfield .b0 != 0 )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 81 :
{
if ( curtype == 14 )
pairtopath () ;
if ( curtype != 8 )
badunary ( 81 ) ;
else flushcurexp ( getarclength ( curexp ) ) ;
}
break ;
case 84 :
case 85 :
case 86 :
case 87 :
case 88 :
{
if ( curtype != 10 )
flushcurexp ( 31 ) ;
else if ( mem [curexp + 7 ].hhfield .v.RH == 0 )
flushcurexp ( 31 ) ;
else if ( mem [mem [curexp + 7 ].hhfield .v.RH ].hhfield .b0 == c -
83 )
flushcurexp ( 30 ) ;
else flushcurexp ( 31 ) ;
curtype = 2 ;
}
break ;
case 47 :
{
if ( curtype == 14 )
pairtopath () ;
if ( curtype != 8 )
badunary ( 47 ) ;
else {
curtype = 6 ;
curexp = makepen ( curexp , true ) ;
}
}
break ;
case 46 :
if ( curtype != 6 )
badunary ( 46 ) ;
else {
curtype = 8 ;
makepath ( curexp ) ;
}
break ;
case 45 :
if ( curtype == 8 )
{
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 ( 45 ) ;
break ;
case 77 :
if ( ! getcurbbox () )
badunary ( 77 ) ;
else pairvalue ( bbmin [0 ], bbmin [1 ]) ;
break ;
case 78 :
if ( ! getcurbbox () )
badunary ( 78 ) ;
else pairvalue ( bbmax [0 ], bbmin [1 ]) ;
break ;
case 79 :
if ( ! getcurbbox () )
badunary ( 79 ) ;
else pairvalue ( bbmin [0 ], bbmax [1 ]) ;
break ;
case 80 :
if ( ! getcurbbox () )
badunary ( 80 ) ;
else pairvalue ( bbmax [0 ], bbmax [1 ]) ;
break ;
case 38 :
case 39 :
if ( curtype != 4 )
badunary ( c ) ;
else doreadorclose ( c ) ;
break ;
}
{
if ( aritherror )
cleararith () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zbadbinary ( halfword p , quarterword c )
#else
zbadbinary ( p , c )
halfword p ;
quarterword c ;
#endif
{
disperr ( p , 284 ) ;
disperr ( 0 , 887 ) ;
if ( c >= 115 )
printop ( c ) ;
printknownorunknowntype ( mem [p ].hhfield .b0 , p ) ;
if ( c >= 115 )
print ( 489 ) ;
else printop ( c ) ;
printknownorunknowntype ( curtype , curexp ) ;
{
helpptr = 3 ;
helpline [2 ]= 888 ;
helpline [1 ]= 900 ;
helpline [0 ]= 901 ;
}
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 == 90 )
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 = 14 ;
}
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 == 90 )
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
{
/* 30 */ halfword q ;
halfword r ;
scaled v ;
if ( mem [p ].hhfield .b0 <= 14 )
{
q = stashcurexp () ;
unstashcurexp ( p ) ;
p = q ;
}
r = mem [curexp + 1 ].cint + bignodesize [curtype ];
while ( true ) {
r = r - 2 ;
v = mem [r + 1 ].cint ;
mem [r ].hhfield .b0 = mem [p ].hhfield .b0 ;
if ( r == mem [curexp + 1 ].cint )
goto lab30 ;
newdep ( r , copydeplist ( mem [p + 1 ].hhfield .v.RH ) ) ;
depmult ( r , v , true ) ;
}
lab30: mem [r + 1 ]= mem [p + 1 ];
mem [mem [p + 1 ].hhfield .lhfield ].hhfield .v.RH = r ;
freenode ( p , 2 ) ;
depmult ( r , 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 != 108 ) || ( curtype != 12 ) )
{
p = stashcurexp () ;
curexp = idtransform () ;
curtype = 12 ;
q = mem [curexp + 1 ].cint ;
switch ( c )
{case 104 :
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 105 :
if ( mem [p ].hhfield .b0 > 14 )
{
install ( q + 6 , p ) ;
goto lab30 ;
}
break ;
case 106 :
if ( mem [p ].hhfield .b0 > 14 )
{
install ( q + 4 , p ) ;
install ( q + 10 , p ) ;
goto lab30 ;
}
break ;
case 107 :
if ( mem [p ].hhfield .b0 == 14 )
{
r = mem [p + 1 ].cint ;
install ( q , r ) ;
install ( q + 2 , r + 2 ) ;
goto lab30 ;
}
break ;
case 109 :
if ( mem [p ].hhfield .b0 > 14 )
{
install ( q + 4 , p ) ;
goto lab30 ;
}
break ;
case 110 :
if ( mem [p ].hhfield .b0 > 14 )
{
install ( q + 10 , p ) ;
goto lab30 ;
}
break ;
case 111 :
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 108 :
;
break ;
}
disperr ( p , 910 ) ;
{
helpptr = 3 ;
helpline [2 ]= 911 ;
helpline [1 ]= 912 ;
helpline [0 ]= 913 ;
}
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 , 914 ) ;
{
helpptr = 3 ;
helpline [2 ]= 915 ;
helpline [1 ]= 916 ;
helpline [0 ]= 913 ;
}
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
zdopathtrans ( halfword p )
#else
zdopathtrans ( p )
halfword p ;
#endif
{
/* 10 */ halfword q ;
q = p ;
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 == p ) ) ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zdopentrans ( halfword p )
#else
zdopentrans ( p )
halfword p ;
#endif
{
/* 10 */ halfword q ;
if ( ( p == mem [p ].hhfield .v.RH ) )
{
trans ( p + 3 , p + 4 ) ;
trans ( p + 5 , p + 6 ) ;
}
q = p ;
do {
trans ( q + 1 , q + 2 ) ;
q = mem [q ].hhfield .v.RH ;
} while ( ! ( q == p ) ) ;
lab10: ;
}
halfword
#ifdef HAVE_PROTOTYPES
zedgestrans ( halfword h )
#else
zedgestrans ( h )
halfword h ;
#endif
{
/* 31 */ register halfword Result; halfword q ;
halfword r, s ;
scaled sx, sy ;
scaled sqdet ;
integer sgndet ;
scaled v ;
h = privateedges ( h ) ;
sqdet = sqrtdet ( txx , txy , tyx , tyy ) ;
sgndet = abvscd ( txx , tyy , txy , tyx ) ;
if ( mem [h ].hhfield .v.RH != 2 )
if ( ( txy != 0 ) || ( tyx != 0 ) || ( ty != 0 ) || ( abs ( txx ) != abs (
tyy ) ) )
flushdashlist ( h ) ;
else {
if ( txx < 0 )
{
r = mem [h ].hhfield .v.RH ;
mem [h ].hhfield .v.RH = 2 ;
while ( r != 2 ) {
s = r ;
r = mem [r ].hhfield .v.RH ;
v = mem [s + 1 ].cint ;
mem [s + 1 ].cint = mem [s + 2 ].cint ;
mem [s + 2 ].cint = v ;
mem [s ].hhfield .v.RH = mem [h ].hhfield .v.RH ;
mem [h ].hhfield .v.RH = s ;
}
}
r = mem [h ].hhfield .v.RH ;
while ( r != 2 ) {
mem [r + 1 ].cint = takescaled ( mem [r + 1 ].cint , txx ) + tx ;
mem [r + 2 ].cint = takescaled ( mem [r + 2 ].cint , txx ) + tx ;
r = mem [r ].hhfield .v.RH ;
}
mem [h + 1 ].cint = takescaled ( mem [h + 1 ].cint , abs ( tyy ) ) ;
}
if ( ( txx == 0 ) && ( tyy == 0 ) )
{
v = mem [h + 2 ].cint ;
mem [h + 2 ].cint = mem [h + 3 ].cint ;
mem [h + 3 ].cint = v ;
v = mem [h + 4 ].cint ;
mem [h + 4 ].cint = mem [h + 5 ].cint ;
mem [h + 5 ].cint = v ;
}
else if ( ( txy != 0 ) || ( tyx != 0 ) )
{
initbbox ( h ) ;
goto lab31 ;
}
if ( mem [h + 2 ].cint <= mem [h + 4 ].cint )
{
mem [h + 2 ].cint = takescaled ( mem [h + 2 ].cint , txx + txy ) + tx
;
mem [h + 4 ].cint = takescaled ( mem [h + 4 ].cint , txx + txy ) + tx
;
mem [h + 3 ].cint = takescaled ( mem [h + 3 ].cint , tyx + tyy ) + ty
;
mem [h + 5 ].cint = takescaled ( mem [h + 5 ].cint , tyx + tyy ) + ty
;
if ( txx + txy < 0 )
{
v = mem [h + 2 ].cint ;
mem [h + 2 ].cint = mem [h + 4 ].cint ;
mem [h + 4 ].cint = v ;
}
if ( tyx + tyy < 0 )
{
v = mem [h + 3 ].cint ;
mem [h + 3 ].cint = mem [h + 5 ].cint ;
mem [h + 5 ].cint = v ;
}
}
lab31: ;
q = mem [h + 7 ].hhfield .v.RH ;
while ( q != 0 ) {
switch ( mem [q ].hhfield .b0 )
{case 1 :
case 2 :
{
dopathtrans ( mem [q + 1 ].hhfield .v.RH ) ;
if ( mem [q + 1 ].hhfield .lhfield != 0 )
{
sx = tx ;
sy = ty ;
tx = 0 ;
ty = 0 ;
dopentrans ( mem [q + 1 ].hhfield .lhfield ) ;
if ( ( ( mem [q ].hhfield .b0 == 2 ) && ( mem [q + 6 ].hhfield
.v.RH != 0 ) ) )
mem [q + 7 ].cint = takescaled ( mem [q + 7 ].cint , sqdet ) ;
if ( ! ( mem [q + 1 ].hhfield .lhfield == mem [mem [q + 1 ]
.hhfield .lhfield ].hhfield .v.RH ) )
if ( sgndet < 0 )
mem [q + 1 ].hhfield .lhfield = makepen ( copypath ( mem [q + 1 ]
.hhfield .lhfield ) , true ) ;
tx = sx ;
ty = sy ;
}
}
break ;
case 4 :
case 5 :
dopathtrans ( mem [q + 1 ].hhfield .v.RH ) ;
break ;
case 3 :
{
r = q + 8 ;
trans ( r , r + 1 ) ;
sx = tx ;
sy = ty ;
tx = 0 ;
ty = 0 ;
trans ( r + 2 , r + 4 ) ;
trans ( r + 3 , r + 5 ) ;
tx = sx ;
ty = sy ;
}
break ;
case 6 :
case 7 :
;
break ;
}
q = mem [q ].hhfield .v.RH ;
}
Result = h ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zdoedgestrans ( halfword p , quarterword c )
#else
zdoedgestrans ( p , c )
halfword p ;
quarterword c ;
#endif
{
setupknowntrans ( c ) ;
mem [p + 1 ].cint = edgestrans ( mem [p + 1 ].cint ) ;
unstashcurexp ( p ) ;
}
void
#ifdef HAVE_PROTOTYPES
scaleedges ( void )
#else
scaleedges ( )
#endif
{
txx = sesf ;
tyy = sesf ;
txy = 0 ;
tyx = 0 ;
tx = 0 ;
ty = 0 ;
sepic = edgestrans ( sepic ) ;
}
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 == 12 )
{
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 == 12 )
{
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 == 12 )
{
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 [nextstr [a ]]- strstart [a ]) + (
strstart [nextstr [b ]]- strstart [b ]) > maxpoolptr )
if ( poolptr + ( strstart [nextstr [a ]]- strstart [a ]) + (
strstart [nextstr [b ]]- strstart [b ]) > poolsize )
docompaction ( ( strstart [nextstr [a ]]- strstart [a ]) + (
strstart [nextstr [b ]]- strstart [b ]) ) ;
else maxpoolptr = poolptr + ( strstart [nextstr [a ]]- strstart [a ]
) + ( strstart [nextstr [b ]]- strstart [b ]) ;
}
{register integer for_end; k = strstart [a ];for_end = strstart [
nextstr [a ]]- 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 [
nextstr [b ]]- 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 [nextstr [s ]]- 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 )
docompaction ( b - a ) ;
else 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 )
{
splitcubic ( q , a * 4096 ) ;
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 ) ;
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 ) ;
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
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 ;
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 )
{
splitcubic ( p , v * 4096 ) ;
p = mem [p ].hhfield .v.RH ;
}
switch ( c )
{case 118 :
pairvalue ( mem [p + 1 ].cint , mem [p + 2 ].cint ) ;
break ;
case 119 :
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 120 :
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
zdoinfont ( halfword p )
#else
zdoinfont ( p )
halfword p ;
#endif
{
halfword q ;
q = getnode ( 8 ) ;
initedges ( q ) ;
mem [mem [q + 7 ].hhfield .lhfield ].hhfield .v.RH = newtextnode (
curexp , mem [p + 1 ].cint ) ;
mem [q + 7 ].hhfield .lhfield = mem [mem [q + 7 ].hhfield .lhfield ]
.hhfield .v.RH ;
freenode ( p , 2 ) ;
flushcurexp ( q ) ;
curtype = 10 ;
}
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 [6 ]> 131072L )
{
begindiagnostic () ;
printnl ( 902 ) ;
printexp ( p , 0 ) ;
printchar ( 41 ) ;
printop ( c ) ;
printchar ( 40 ) ;
printexp ( 0 , 0 ) ;
print ( 891 ) ;
enddiagnostic ( false ) ;
}
switch ( mem [p ].hhfield .b0 )
{case 12 :
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 12 :
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 89 :
case 90 :
if ( ( curtype < 13 ) || ( mem [p ].hhfield .b0 < 13 ) )
badbinary ( p , c ) ;
else if ( ( curtype > 14 ) && ( mem [p ].hhfield .b0 > 14 ) )
addorsubtract ( p , 0 , c ) ;
else if ( curtype != mem [p ].hhfield .b0 )
badbinary ( p , c ) ;
else {
q = mem [p + 1 ].cint ;
r = mem [curexp + 1 ].cint ;
rr = r + bignodesize [curtype ];
while ( r < rr ) {
addorsubtract ( q , r , c ) ;
q = q + 2 ;
r = r + 2 ;
}
}
break ;
case 97 :
case 98 :
case 99 :
case 100 :
case 101 :
case 102 :
{
{
if ( aritherror )
cleararith () ;
}
if ( ( curtype > 14 ) && ( mem [p ].hhfield .b0 > 14 ) )
addorsubtract ( p , 0 , 90 ) ;
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 >= 12 ) )
{
q = mem [p + 1 ].cint ;
r = mem [curexp + 1 ].cint ;
rr = r + bignodesize [curtype ]- 2 ;
while ( true ) {
addorsubtract ( q , r , 90 ) ;
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 ( mem [r ].hhfield .b1 + 49 ) ;
}
else if ( curtype == 2 )
flushcurexp ( curexp - mem [p + 1 ].cint ) ;
else {
badbinary ( p , c ) ;
goto lab30 ;
}
if ( curtype != 16 )
{
if ( curtype < 16 )
{
disperr ( p , 284 ) ;
{
helpptr = 1 ;
helpline [0 ]= 903 ;
}
}
else {
helpptr = 2 ;
helpline [1 ]= 904 ;
helpline [0 ]= 905 ;
}
disperr ( 0 , 906 ) ;
putgetflusherror ( 31 ) ;
}
else switch ( c )
{case 97 :
if ( curexp < 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 98 :
if ( curexp <= 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 99 :
if ( curexp > 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 100 :
if ( curexp >= 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 101 :
if ( curexp == 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
case 102 :
if ( curexp != 0 )
curexp = 30 ;
else curexp = 31 ;
break ;
}
curtype = 2 ;
lab30: aritherror = false ;
}
break ;
case 96 :
case 95 :
if ( ( mem [p ].hhfield .b0 != 2 ) || ( curtype != 2 ) )
badbinary ( p , c ) ;
else if ( mem [p + 1 ].cint == c - 65 )
curexp = mem [p + 1 ].cint ;
break ;
case 91 :
if ( ( curtype < 13 ) || ( mem [p ].hhfield .b0 < 13 ) )
badbinary ( p , 91 ) ;
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 ) || ( curtype == 13 ) )
{
p = mem [curexp + 1 ].cint + bignodesize [curtype ];
do {
p = p - 2 ;
depmult ( p , v , true ) ;
} while ( ! ( p == mem [curexp + 1 ].cint ) ) ;
}
else depmult ( 0 , v , true ) ;
goto lab10 ;
}
else if ( ( nicecolororpair ( p , mem [p ].hhfield .b0 ) && ( curtype >
14 ) ) || ( nicecolororpair ( curexp , curtype ) && ( mem [p ].hhfield
.b0 > 14 ) ) )
{
hardtimes ( p ) ;
goto lab10 ;
}
else badbinary ( p , 91 ) ;
break ;
case 92 :
if ( ( curtype != 16 ) || ( mem [p ].hhfield .b0 < 13 ) )
badbinary ( p , 92 ) ;
else {
v = curexp ;
unstashcurexp ( p ) ;
if ( v == 0 )
{
disperr ( 0 , 835 ) ;
{
helpptr = 2 ;
helpline [1 ]= 908 ;
helpline [0 ]= 909 ;
}
putgeterror () ;
}
else {
if ( curtype == 16 )
curexp = makescaled ( curexp , v ) ;
else if ( curtype <= 14 )
{
p = mem [curexp + 1 ].cint + bignodesize [curtype ];
do {
p = p - 2 ;
depdiv ( p , v ) ;
} while ( ! ( p == mem [curexp + 1 ].cint ) ) ;
}
else depdiv ( 0 , v ) ;
}
goto lab10 ;
}
break ;
case 93 :
case 94 :
if ( ( curtype == 16 ) && ( mem [p ].hhfield .b0 == 16 ) )
if ( c == 93 )
curexp = pythadd ( mem [p + 1 ].cint , curexp ) ;
else curexp = pythsub ( mem [p + 1 ].cint , curexp ) ;
else badbinary ( p , c ) ;
break ;
case 104 :
case 105 :
case 106 :
case 107 :
case 108 :
case 109 :
case 110 :
case 111 :
if ( mem [p ].hhfield .b0 == 8 )
{
{
setupknowntrans ( c ) ;
unstashcurexp ( p ) ;
dopathtrans ( curexp ) ;
}
goto lab10 ;
}
else if ( mem [p ].hhfield .b0 == 6 )
{
{
setupknowntrans ( c ) ;
unstashcurexp ( p ) ;
dopentrans ( curexp ) ;
}
curexp = convexhull ( curexp ) ;
goto lab10 ;
}
else if ( ( mem [p ].hhfield .b0 == 14 ) || ( mem [p ].hhfield .b0 ==
12 ) )
bigtrans ( p , c ) ;
else if ( mem [p ].hhfield .b0 == 10 )
{
doedgestrans ( p , c ) ;
goto lab10 ;
}
else badbinary ( p , c ) ;
break ;
case 103 :
if ( ( curtype == 4 ) && ( mem [p ].hhfield .b0 == 4 ) )
cat ( p ) ;
else badbinary ( p , 103 ) ;
break ;
case 115 :
if ( nicepair ( p , mem [p ].hhfield .b0 ) && ( curtype == 4 ) )
chopstring ( mem [p + 1 ].cint ) ;
else badbinary ( p , 115 ) ;
break ;
case 116 :
{
if ( curtype == 14 )
pairtopath () ;
if ( nicepair ( p , mem [p ].hhfield .b0 ) && ( curtype == 8 ) )
choppath ( mem [p + 1 ].cint ) ;
else badbinary ( p , 116 ) ;
}
break ;
case 118 :
case 119 :
case 120 :
{
if ( curtype == 14 )
pairtopath () ;
if ( ( curtype == 8 ) && ( mem [p ].hhfield .b0 == 16 ) )
findpoint ( mem [p + 1 ].cint , c ) ;
else badbinary ( p , c ) ;
}
break ;
case 121 :
if ( ( curtype == 6 ) && nicepair ( p , mem [p ].hhfield .b0 ) )
setupoffset ( mem [p + 1 ].cint ) ;
else badbinary ( p , 121 ) ;
break ;
case 117 :
{
if ( curtype == 14 )
pairtopath () ;
if ( ( curtype == 8 ) && nicepair ( p , mem [p ].hhfield .b0 ) )
setupdirectiontime ( mem [p + 1 ].cint ) ;
else badbinary ( p , 117 ) ;
}
break ;
case 122 :
{
if ( curtype == 14 )
pairtopath () ;
if ( ( curtype == 8 ) && ( mem [p ].hhfield .b0 == 16 ) )
flushcurexp ( getarctime ( curexp , mem [p + 1 ].cint ) ) ;
else badbinary ( p , c ) ;
}
break ;
case 113 :
{
if ( mem [p ].hhfield .b0 == 14 )
{
q = stashcurexp () ;
unstashcurexp ( p ) ;
pairtopath () ;
p = stashcurexp () ;
unstashcurexp ( q ) ;
}
if ( curtype == 14 )
pairtopath () ;
if ( ( curtype == 8 ) && ( mem [p ].hhfield .b0 == 8 ) )
{
pathintersection ( mem [p + 1 ].cint , curexp ) ;
pairvalue ( curt , curtt ) ;
}
else badbinary ( p , 113 ) ;
}
break ;
case 112 :
if ( ( curtype != 4 ) || ( mem [p ].hhfield .b0 != 4 ) )
badbinary ( p , 112 ) ;
else {
doinfont ( p ) ;
goto lab10 ;
}
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 [6 ]> 131072L )
{
begindiagnostic () ;
printnl ( 902 ) ;
printscaled ( n ) ;
printchar ( 47 ) ;
printscaled ( d ) ;
print ( 907 ) ;
printexp ( 0 , 0 ) ;
print ( 891 ) ;
enddiagnostic ( false ) ;
}
switch ( curtype )
{case 12 :
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 + bignodesize [curtype ];
do {
p = p - 2 ;
depmult ( p , v , false ) ;
} while ( ! ( p == mem [curexp + 1 ].cint ) ) ;
}
else depmult ( 0 , v , false ) ;
if ( oldexp != 0 )
{
recyclevalue ( oldexp ) ;
freenode ( oldexp , 2 ) ;
}
}
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 ( 262 ) ;
print ( 945 ) ;
}
print ( 947 ) ;
printscaled ( mem [p + 1 ].cint ) ;
printchar ( 41 ) ;
{
helpptr = 2 ;
helpline [1 ]= 946 ;
helpline [0 ]= 944 ;
}
putgeterror () ;
}
else if ( r == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 611 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 612 ;
helpline [0 ]= 613 ;
}
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 8 :
case 10 :
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 ( 262 ) ;
print ( 611 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 612 ;
helpline [0 ]= 613 ;
}
putgeterror () ;
}
goto lab30 ;
}
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 942 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 943 ;
helpline [0 ]= 944 ;
}
putgeterror () ;
goto lab30 ;
lab45: {
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 945 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 946 ;
helpline [0 ]= 944 ;
}
putgeterror () ;
goto lab30 ;
}
break ;
case 3 :
case 5 :
case 7 :
case 11 :
case 9 :
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 == 9 )
{
pairtopath () ;
goto lab20 ;
}
break ;
case 12 :
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 , 284 ) ;
disperr ( 0 , 939 ) ;
if ( mem [lhs ].hhfield .b0 <= 14 )
printtype ( mem [lhs ].hhfield .b0 ) ;
else print ( 340 ) ;
printchar ( 61 ) ;
if ( curtype <= 14 )
printtype ( curtype ) ;
else print ( 340 ) ;
printchar ( 41 ) ;
{
helpptr = 2 ;
helpline [1 ]= 940 ;
helpline [0 ]= 941 ;
}
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 = 76 ;
scanexpression () ;
if ( curcmd == 53 )
doequation () ;
else if ( curcmd == 76 )
doassignment () ;
if ( internal [6 ]> 131072L )
{
begindiagnostic () ;
printnl ( 902 ) ;
printexp ( lhs , 0 ) ;
print ( 934 ) ;
printexp ( 0 , 0 ) ;
print ( 891 ) ;
enddiagnostic ( false ) ;
}
if ( curtype == 9 )
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 , 931 ) ;
{
helpptr = 2 ;
helpline [1 ]= 932 ;
helpline [0 ]= 933 ;
}
error () ;
doequation () ;
}
else {
lhs = curexp ;
curtype = 1 ;
getxnext () ;
varflag = 76 ;
scanexpression () ;
if ( curcmd == 53 )
doequation () ;
else if ( curcmd == 76 )
doassignment () ;
if ( internal [6 ]> 131072L )
{
begindiagnostic () ;
printnl ( 123 ) ;
if ( mem [lhs ].hhfield .lhfield > 9771 )
print ( intname [mem [lhs ].hhfield .lhfield - ( 9771 ) ]) ;
else showtokenlist ( lhs , 0 , 1000 , 0 ) ;
print ( 476 ) ;
printexp ( 0 , 0 ) ;
printchar ( 125 ) ;
enddiagnostic ( false ) ;
}
if ( mem [lhs ].hhfield .lhfield > 9771 )
if ( curtype == 16 )
internal [mem [lhs ].hhfield .lhfield - ( 9771 ) ]= curexp ;
else {
disperr ( 0 , 935 ) ;
print ( intname [mem [lhs ].hhfield .lhfield - ( 9771 ) ]) ;
print ( 936 ) ;
{
helpptr = 2 ;
helpline [1 ]= 937 ;
helpline [0 ]= 938 ;
}
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 >= 12 )
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 ( 262 ) ;
print ( 948 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 949 ;
helpline [0 ]= 950 ;
}
putgeterror () ;
}
flushlist ( p ) ;
if ( curcmd < 81 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 951 ) ;
}
{
helpptr = 5 ;
helpline [4 ]= 952 ;
helpline [3 ]= 953 ;
helpline [2 ]= 954 ;
helpline [1 ]= 955 ;
helpline [0 ]= 956 ;
}
if ( curcmd == 44 )
helpline [2 ]= 957 ;
putgeterror () ;
scannerstatus = 2 ;
do {
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
if ( curcmd == 41 )
{
if ( strref [curmod ]< 127 )
if ( strref [curmod ]> 1 )
decr ( strref [curmod ]) ;
else flushstring ( curmod ) ;
}
} while ( ! ( curcmd >= 81 ) ) ;
scannerstatus = 0 ;
}
} while ( ! ( curcmd > 81 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
dorandomseed ( void )
#else
dorandomseed ( )
#endif
{
getxnext () ;
if ( curcmd != 76 )
{
missingerr ( 476 ) ;
{
helpptr = 1 ;
helpline [0 ]= 962 ;
}
backerror () ;
}
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
{
disperr ( 0 , 963 ) ;
{
helpptr = 2 ;
helpline [1 ]= 964 ;
helpline [0 ]= 965 ;
}
putgetflusherror ( 0 ) ;
}
else {
initrandoms ( curexp ) ;
if ( selector >= 9 )
{
oldsetting = selector ;
selector = 9 ;
printnl ( 966 ) ;
printscaled ( curexp ) ;
printchar ( 125 ) ;
printnl ( 284 ) ;
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 >= 85 )
eqtb [cursym ].lhfield = t - 85 ;
}
else if ( t < 85 )
eqtb [cursym ].lhfield = t + 85 ;
getxnext () ;
} while ( ! ( curcmd != 81 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
defdelims ( void )
#else
defdelims ( )
#endif
{
halfword ldelim, rdelim ;
getclearsymbol () ;
ldelim = cursym ;
getclearsymbol () ;
rdelim = cursym ;
eqtb [ldelim ].lhfield = 33 ;
eqtb [ldelim ].v.RH = rdelim ;
eqtb [rdelim ].lhfield = 64 ;
eqtb [rdelim ].v.RH = ldelim ;
getxnext () ;
}
void
#ifdef HAVE_PROTOTYPES
dointerim ( void )
#else
dointerim ( )
#endif
{
getxnext () ;
if ( curcmd != 42 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 972 ) ;
}
if ( cursym == 0 )
print ( 977 ) ;
else print ( hash [cursym ].v.RH ) ;
print ( 978 ) ;
{
helpptr = 1 ;
helpline [0 ]= 979 ;
}
backerror () ;
}
else {
saveinternal ( curmod ) ;
backinput () ;
}
dostatement () ;
}
void
#ifdef HAVE_PROTOTYPES
dolet ( void )
#else
dolet ( )
#endif
{
halfword l ;
getsymbol () ;
l = cursym ;
getxnext () ;
if ( curcmd != 53 )
if ( curcmd != 76 )
{
missingerr ( 61 ) ;
{
helpptr = 3 ;
helpline [2 ]= 980 ;
helpline [1 ]= 713 ;
helpline [0 ]= 981 ;
}
backerror () ;
}
getsymbol () ;
switch ( curcmd )
{case 13 :
case 55 :
case 46 :
case 51 :
incr ( mem [curmod ].hhfield .lhfield ) ;
break ;
default:
;
break ;
}
clearsymbol ( l , false ) ;
eqtb [l ].lhfield = curcmd ;
if ( curcmd == 43 )
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 ( 982 , maxinternal ) ;
getclearsymbol () ;
incr ( intptr ) ;
eqtb [cursym ].lhfield = 42 ;
eqtb [cursym ].v.RH = intptr ;
intname [intptr ]= hash [cursym ].v.RH ;
internal [intptr ]= 0 ;
getxnext () ;
} while ( ! ( curcmd != 81 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
doshow ( void )
#else
doshow ( )
#endif
{
do {
getxnext () ;
scanexpression () ;
printnl ( 804 ) ;
printexp ( 0 , 2 ) ;
flushcurexp ( 0 ) ;
} while ( ! ( curcmd != 81 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
disptoken ( void )
#else
disptoken ( )
#endif
{
printnl ( 988 ) ;
if ( cursym == 0 )
{
if ( curcmd == 44 )
printscaled ( curmod ) ;
else if ( curcmd == 40 )
{
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 >= 85 )
print ( 989 ) ;
printcmdmod ( curcmd , curmod ) ;
if ( curcmd == 13 )
{
println () ;
showmacro ( curmod , 0 , 100000L ) ;
}
}
}
void
#ifdef HAVE_PROTOTYPES
doshowtoken ( void )
#else
doshowtoken ( )
#endif
{
do {
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
disptoken () ;
getxnext () ;
} while ( ! ( curcmd != 81 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
doshowstats ( void )
#else
doshowstats ( )
#endif
{
printnl ( 998 ) ;
;
#ifdef STAT
printint ( varused ) ;
printchar ( 38 ) ;
printint ( dynused ) ;
if ( false )
#endif /* STAT */
print ( 359 ) ;
print ( 999 ) ;
printint ( himemmin - lomemmax - 1 ) ;
print ( 1000 ) ;
println () ;
printnl ( 1001 ) ;
;
#ifdef STAT
printint ( strsinuse - initstruse ) ;
printchar ( 38 ) ;
printint ( poolinuse - initpoolptr ) ;
if ( false )
#endif /* STAT */
print ( 359 ) ;
print ( 999 ) ;
printint ( maxstrings - 1 - strsusedup ) ;
printchar ( 38 ) ;
printint ( poolsize - poolptr ) ;
print ( 1002 ) ;
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 == 9 ) ) ;
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 ( 284 ) ;
printvariablename ( p ) ;
if ( mem [p ].hhfield .b0 > 22 )
print ( 705 ) ;
print ( 1003 ) ;
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 ( 284 ) ;
printvariablename ( p ) ;
printchar ( 61 ) ;
printexp ( p , 0 ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
doshowvar ( void )
#else
doshowvar ( )
#endif
{
/* 30 */ do {
{
getnext () ;
if ( curcmd <= 3 )
tnext () ;
}
if ( cursym > 0 )
if ( cursym <= 9771 )
if ( curcmd == 43 )
if ( curmod != 0 )
{
dispvar ( curmod ) ;
goto lab30 ;
}
disptoken () ;
lab30: getxnext () ;
} while ( ! ( curcmd != 81 ) ) ;
}
void
#ifdef HAVE_PROTOTYPES
doshowdependencies ( void )
#else
doshowdependencies ( )
#endif
{
halfword p ;
p = mem [5 ].hhfield .v.RH ;
while ( p != 5 ) {
if ( interesting ( p ) )
{
printnl ( 284 ) ;
printvariablename ( p ) ;
if ( mem [p ].hhfield .b0 == 17 )
printchar ( 61 ) ;
else print ( 817 ) ;
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 [25 ]> 0 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 1004 ) ;
}
if ( interaction < 3 )
{
helpptr = 0 ;
decr ( errorcount ) ;
}
else {
helpptr = 1 ;
helpline [0 ]= 1005 ;
}
if ( curcmd == 82 )
error () ;
else putgeterror () ;
}
}
void
#ifdef HAVE_PROTOTYPES
zscanwithlist ( halfword p )
#else
zscanwithlist ( p )
halfword p ;
#endif
{
/* 30 31 32 */ smallnumber t ;
halfword q ;
halfword cp, pp, dp ;
cp = 1 ;
pp = 1 ;
dp = 1 ;
while ( curcmd == 68 ) {
t = curmod ;
getxnext () ;
scanexpression () ;
if ( curtype != t )
{
disperr ( 0 , 1012 ) ;
{
helpptr = 2 ;
helpline [1 ]= 1013 ;
helpline [0 ]= 1014 ;
}
if ( t == 10 )
helpline [1 ]= 1015 ;
else if ( t == 13 )
helpline [1 ]= 1016 ;
putgetflusherror ( 0 ) ;
}
else if ( t == 13 )
{
if ( cp == 1 )
{
cp = p ;
while ( cp != 0 ) {
if ( ( mem [cp ].hhfield .b0 < 4 ) )
goto lab30 ;
cp = mem [cp ].hhfield .v.RH ;
}
lab30: ;
}
if ( cp != 0 )
{
q = mem [curexp + 1 ].cint ;
mem [cp + 2 ].cint = mem [q + 1 ].cint ;
mem [cp + 3 ].cint = mem [q + 3 ].cint ;
mem [cp + 4 ].cint = mem [q + 5 ].cint ;
if ( mem [cp + 2 ].cint < 0 )
mem [cp + 2 ].cint = 0 ;
if ( mem [cp + 3 ].cint < 0 )
mem [cp + 3 ].cint = 0 ;
if ( mem [cp + 4 ].cint < 0 )
mem [cp + 4 ].cint = 0 ;
if ( mem [cp + 2 ].cint > 65536L )
mem [cp + 2 ].cint = 65536L ;
if ( mem [cp + 3 ].cint > 65536L )
mem [cp + 3 ].cint = 65536L ;
if ( mem [cp + 4 ].cint > 65536L )
mem [cp + 4 ].cint = 65536L ;
}
flushcurexp ( 0 ) ;
}
else if ( t == 6 )
{
if ( pp == 1 )
{
pp = p ;
while ( pp != 0 ) {
if ( ( mem [pp ].hhfield .b0 < 3 ) )
goto lab31 ;
pp = mem [pp ].hhfield .v.RH ;
}
lab31: ;
}
if ( pp != 0 )
{
if ( mem [pp + 1 ].hhfield .lhfield != 0 )
tossknotlist ( mem [pp + 1 ].hhfield .lhfield ) ;
mem [pp + 1 ].hhfield .lhfield = curexp ;
curtype = 1 ;
}
}
else {
if ( dp == 1 )
{
dp = p ;
while ( dp != 0 ) {
if ( mem [dp ].hhfield .b0 == 2 )
goto lab32 ;
dp = mem [dp ].hhfield .v.RH ;
}
lab32: ;
}
if ( dp != 0 )
{
if ( mem [dp + 6 ].hhfield .v.RH != 0 )
if ( mem [mem [dp + 6 ].hhfield .v.RH ].hhfield .lhfield == 0 )
tossedges ( mem [dp + 6 ].hhfield .v.RH ) ;
else decr ( mem [mem [dp + 6 ].hhfield .v.RH ].hhfield .lhfield )
;
mem [dp + 6 ].hhfield .v.RH = makedashes ( curexp ) ;
mem [dp + 7 ].cint = 65536L ;
curtype = 1 ;
}
}
}
if ( cp > 1 )
{
q = mem [cp ].hhfield .v.RH ;
while ( q != 0 ) {
if ( ( mem [q ].hhfield .b0 < 4 ) )
{
mem [q + 2 ].cint = mem [cp + 2 ].cint ;
mem [q + 3 ].cint = mem [cp + 3 ].cint ;
mem [q + 4 ].cint = mem [cp + 4 ].cint ;
}
q = mem [q ].hhfield .v.RH ;
}
}
if ( pp > 1 )
{
q = mem [pp ].hhfield .v.RH ;
while ( q != 0 ) {
if ( ( mem [q ].hhfield .b0 < 3 ) )
{
if ( mem [q + 1 ].hhfield .lhfield != 0 )
tossknotlist ( mem [q + 1 ].hhfield .lhfield ) ;
mem [q + 1 ].hhfield .lhfield = makepen ( copypath ( mem [pp + 1 ]
.hhfield .lhfield ) , false ) ;
}
q = mem [q ].hhfield .v.RH ;
}
}
if ( dp > 1 )
{
q = mem [dp ].hhfield .v.RH ;
while ( q != 0 ) {
if ( mem [q ].hhfield .b0 == 2 )
{
if ( mem [q + 6 ].hhfield .v.RH != 0 )
if ( mem [mem [q + 6 ].hhfield .v.RH ].hhfield .lhfield == 0 )
tossedges ( mem [q + 6 ].hhfield .v.RH ) ;
else decr ( mem [mem [q + 6 ].hhfield .v.RH ].hhfield .lhfield ) ;
mem [q + 6 ].hhfield .v.RH = mem [dp + 6 ].hhfield .v.RH ;
mem [q + 7 ].cint = 65536L ;
if ( mem [q + 6 ].hhfield .v.RH != 0 )
incr ( mem [mem [q + 6 ].hhfield .v.RH ].hhfield .lhfield ) ;
}
q = mem [q ].hhfield .v.RH ;
}
}
}
halfword
#ifdef HAVE_PROTOTYPES
zfindedgesvar ( halfword t )
#else
zfindedgesvar ( t )
halfword t ;
#endif
{
register halfword Result; halfword p ;
halfword curedges ;
p = findvariable ( t ) ;
curedges = 0 ;
if ( p == 0 )
{
obliterated ( t ) ;
putgeterror () ;
}
else if ( mem [p ].hhfield .b0 != 10 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 841 ) ;
}
showtokenlist ( t , 0 , 1000 , 0 ) ;
print ( 1017 ) ;
printtype ( mem [p ].hhfield .b0 ) ;
printchar ( 41 ) ;
{
helpptr = 2 ;
helpline [1 ]= 1018 ;
helpline [0 ]= 1019 ;
}
putgeterror () ;
}
else {
mem [p + 1 ].cint = privateedges ( mem [p + 1 ].cint ) ;
curedges = mem [p + 1 ].cint ;
}
flushnodelist ( t ) ;
Result = curedges ;
return Result ;
}
halfword
#ifdef HAVE_PROTOTYPES
zstartdrawcmd ( quarterword sep )
#else
zstartdrawcmd ( sep )
quarterword sep ;
#endif
{
register halfword Result; halfword lhv ;
quarterword addtype ;
lhv = 0 ;
getxnext () ;
varflag = sep ;
scanprimary () ;
if ( curtype != 20 )
{
disperr ( 0 , 1022 ) ;
{
helpptr = 4 ;
helpline [3 ]= 1023 ;
helpline [2 ]= 1024 ;
helpline [1 ]= 1025 ;
helpline [0 ]= 1019 ;
}
putgetflusherror ( 0 ) ;
}
else {
lhv = curexp ;
addtype = curmod ;
curtype = 1 ;
getxnext () ;
scanexpression () ;
}
lastaddtype = addtype ;
Result = lhv ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
dobounds ( void )
#else
dobounds ( )
#endif
{
halfword lhv, lhe ;
halfword p ;
integer m ;
m = curmod ;
lhv = startdrawcmd ( 71 ) ;
if ( lhv != 0 )
{
lhe = findedgesvar ( lhv ) ;
if ( lhe == 0 )
flushcurexp ( 0 ) ;
else if ( curtype != 8 )
{
disperr ( 0 , 1026 ) ;
{
helpptr = 2 ;
helpline [1 ]= 1027 ;
helpline [0 ]= 1019 ;
}
putgetflusherror ( 0 ) ;
}
else if ( mem [curexp ].hhfield .b0 == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 1028 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 1029 ;
helpline [0 ]= 1019 ;
}
putgeterror () ;
}
else {
p = newboundsnode ( curexp , m ) ;
mem [p ].hhfield .v.RH = mem [lhe + 7 ].hhfield .v.RH ;
mem [lhe + 7 ].hhfield .v.RH = p ;
if ( mem [lhe + 7 ].hhfield .lhfield == lhe + 7 )
mem [lhe + 7 ].hhfield .lhfield = p ;
p = getnode ( grobjectsize [( m + 2 ) ]) ;
mem [p ].hhfield .b0 = ( m + 2 ) ;
mem [mem [lhe + 7 ].hhfield .lhfield ].hhfield .v.RH = p ;
mem [lhe + 7 ].hhfield .lhfield = p ;
initbbox ( lhe ) ;
}
}
}
void
#ifdef HAVE_PROTOTYPES
doaddto ( void )
#else
doaddto ( )
#endif
{
halfword lhv, lhe ;
halfword p ;
halfword e ;
quarterword addtype ;
lhv = startdrawcmd ( 69 ) ;
addtype = lastaddtype ;
if ( lhv != 0 )
{
if ( addtype == 2 )
{
p = 0 ;
e = 0 ;
if ( curtype != 10 )
{
disperr ( 0 , 1030 ) ;
{
helpptr = 2 ;
helpline [1 ]= 1031 ;
helpline [0 ]= 1019 ;
}
putgetflusherror ( 0 ) ;
}
else {
e = privateedges ( curexp ) ;
curtype = 1 ;
p = mem [e + 7 ].hhfield .v.RH ;
}
}
else {
e = 0 ;
p = 0 ;
if ( curtype == 14 )
pairtopath () ;
if ( curtype != 8 )
{
disperr ( 0 , 1030 ) ;
{
helpptr = 2 ;
helpline [1 ]= 1027 ;
helpline [0 ]= 1019 ;
}
putgetflusherror ( 0 ) ;
}
else if ( addtype == 1 )
if ( mem [curexp ].hhfield .b0 == 0 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 1028 ) ;
}
{
helpptr = 2 ;
helpline [1 ]= 1029 ;
helpline [0 ]= 1019 ;
}
putgeterror () ;
}
else {
p = newfillnode ( curexp ) ;
curtype = 1 ;
}
else {
p = newstrokednode ( curexp ) ;
curtype = 1 ;
}
}
scanwithlist ( p ) ;
lhe = findedgesvar ( lhv ) ;
if ( lhe == 0 )
{
if ( ( e == 0 ) && ( p != 0 ) )
e = tossgrobject ( p ) ;
if ( e != 0 )
if ( mem [e ].hhfield .lhfield == 0 )
tossedges ( e ) ;
else decr ( mem [e ].hhfield .lhfield ) ;
}
else if ( addtype == 2 )
if ( e != 0 )
{
if ( mem [e + 7 ].hhfield .v.RH != 0 )
{
mem [mem [lhe + 7 ].hhfield .lhfield ].hhfield .v.RH = mem [e + 7
].hhfield .v.RH ;
mem [lhe + 7 ].hhfield .lhfield = mem [e + 7 ].hhfield .lhfield ;
mem [e + 7 ].hhfield .lhfield = e + 7 ;
mem [e + 7 ].hhfield .v.RH = 0 ;
flushdashlist ( lhe ) ;
}
tossedges ( e ) ;
}
else ;
else if ( p != 0 )
{
mem [mem [lhe + 7 ].hhfield .lhfield ].hhfield .v.RH = p ;
mem [lhe + 7 ].hhfield .lhfield = p ;
if ( addtype == 0 )
if ( mem [p + 1 ].hhfield .lhfield == 0 )
mem [p + 1 ].hhfield .lhfield = getpencircle ( 0 ) ;
}
}
}
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 ( 262 ) ;
print ( 1048 ) ;
}
print ( intname [m ]) ;
print ( 1049 ) ;
{
helpptr = 1 ;
helpline [0 ]= 1050 ;
}
putgeterror () ;
if ( internal [m ]> 0 )
Result = 134217727L ;
else Result = -134217727L ;
}
else Result = internal [m ];
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
readpsnametable ( void )
#else
readpsnametable ( )
#endif
{
/* 50 30 */ fontnumber k ;
integer lmax ;
integer j ;
ASCIIcode c ;
strnumber s ;
namelength = strlen ( pstabname ) ;
nameoffile = xmalloc ( 1 + namelength + 1 ) ;
strcpy ( (char*) nameoffile + 1 , pstabname ) ;
if ( aopenin ( pstabfile , kpsedvipsconfigformat ) )
{
lmax = 0 ;
{register integer for_end; k = lastpsfnum + 1 ;for_end = lastfnum ; if (
k <= for_end) do
if ( ( strstart [nextstr [fontname [k ]]]- strstart [fontname [k
]]) > lmax )
lmax = ( strstart [nextstr [fontname [k ]]]- strstart [fontname [
k ]]) ;
while ( k++ < for_end ) ;}
while ( ! eof ( pstabfile ) ) {
{
if ( poolptr + lmax > maxpoolptr )
if ( poolptr + lmax > poolsize )
docompaction ( lmax ) ;
else maxpoolptr = poolptr + lmax ;
}
j = lmax ;
while ( true ) {
if ( eoln ( pstabfile ) )
if ( j == lmax )
{
poolptr = strstart [strptr ];
goto lab50 ;
}
else fatalerror ( 1113 ) ;
read ( pstabfile , c ) ;
if ( ( ( c == '%' ) || ( c == '*' ) || ( c == ';' ) || ( c == '#' ) )
)
{
poolptr = strstart [strptr ];
goto lab50 ;
}
if ( ( ( c == ' ' ) || ( c == 9 ) ) )
goto lab30 ;
decr ( j ) ;
if ( j >= 0 )
{
strpool [poolptr ]= xord [c ];
incr ( poolptr ) ;
}
else {
poolptr = strstart [strptr ];
goto lab50 ;
}
}
lab30: s = makestring () ;
{register integer for_end; k = lastpsfnum + 1 ;for_end = lastfnum
; if ( k <= for_end) do
if ( strvsstr ( s , fontname [k ]) == 0 )
{
flushstring ( s ) ;
j = 32 ;
{
if ( poolptr + j > maxpoolptr )
if ( poolptr + j > poolsize )
docompaction ( j ) ;
else maxpoolptr = poolptr + j ;
}
do {
if ( eoln ( pstabfile ) )
fatalerror ( 1113 ) ;
read ( pstabfile , c ) ;
} while ( ! ( ( ( c != ' ' ) && ( c != 9 ) ) ) ) ;
do {
decr ( j ) ;
if ( j < 0 )
fatalerror ( 1113 ) ;
{
strpool [poolptr ]= xord [c ];
incr ( poolptr ) ;
}
if ( eoln ( pstabfile ) )
c = ' ' ;
else read ( pstabfile , c ) ;
} while ( ! ( ( ( c == ' ' ) || ( c == 9 ) ) ) ) ;
{
if ( strref [fontpsname [k ]]< 127 )
if ( strref [fontpsname [k ]]> 1 )
decr ( strref [fontpsname [k ]]) ;
else flushstring ( fontpsname [k ]) ;
}
fontpsname [k ]= makestring () ;
goto lab50 ;
}
while ( k++ < for_end ) ;}
flushstring ( s ) ;
lab50: readln ( pstabfile ) ;
}
lastpsfnum = lastfnum ;
aclose ( pstabfile ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
openoutputfile ( void )
#else
openoutputfile ( )
#endif
{
integer c ;
char oldsetting ;
strnumber s ;
if ( jobname == 0 )
openlogfile () ;
c = roundunscaled ( internal [17 ]) ;
if ( c < 0 )
s = 1114 ;
else {
oldsetting = selector ;
selector = 4 ;
printchar ( 46 ) ;
printint ( c ) ;
s = makestring () ;
selector = oldsetting ;
}
packjobname ( s ) ;
while ( ! aopenout ( psfile ) ) promptfilename ( 1115 , s ) ;
{
if ( strref [s ]< 127 )
if ( strref [s ]> 1 )
decr ( strref [s ]) ;
else flushstring ( s ) ;
}
if ( ( c < firstoutputcode ) && ( firstoutputcode >= 0 ) )
{
firstoutputcode = c ;
{
if ( strref [firstfilename ]< 127 )
if ( strref [firstfilename ]> 1 )
decr ( strref [firstfilename ]) ;
else flushstring ( firstfilename ) ;
}
firstfilename = amakenamestring ( psfile ) ;
}
if ( c >= lastoutputcode )
{
lastoutputcode = c ;
{
if ( strref [lastfilename ]< 127 )
if ( strref [lastfilename ]> 1 )
decr ( strref [lastfilename ]) ;
else flushstring ( lastfilename ) ;
}
lastfilename = amakenamestring ( psfile ) ;
}
if ( termoffset > maxprintline - 6 )
println () ;
else if ( ( termoffset > 0 ) || ( fileoffset > 0 ) )
printchar ( 32 ) ;
printchar ( 91 ) ;
if ( c >= 0 )
printint ( c ) ;
}
void
#ifdef HAVE_PROTOTYPES
zpspairout ( scaled x , scaled y )
#else
zpspairout ( x , y )
scaled x ;
scaled y ;
#endif
{
if ( psoffset + 26 > maxprintline )
println () ;
printscaled ( x ) ;
printchar ( 32 ) ;
printscaled ( y ) ;
printchar ( 32 ) ;
}
void
#ifdef HAVE_PROTOTYPES
zpsprint ( strnumber s )
#else
zpsprint ( s )
strnumber s ;
#endif
{
if ( psoffset + ( strstart [nextstr [s ]]- strstart [s ]) >
maxprintline )
println () ;
print ( s ) ;
}
void
#ifdef HAVE_PROTOTYPES
zpspathout ( halfword h )
#else
zpspathout ( h )
halfword h ;
#endif
{
/* 10 */ halfword p, q ;
scaled d ;
boolean curved ;
if ( psoffset + 40 > maxprintline )
println () ;
if ( neednewpath )
print ( 1118 ) ;
neednewpath = true ;
pspairout ( mem [h + 1 ].cint , mem [h + 2 ].cint ) ;
print ( 1119 ) ;
p = h ;
do {
if ( mem [p ].hhfield .b1 == 0 )
{
if ( p == h )
psprint ( 1120 ) ;
goto lab10 ;
}
q = mem [p ].hhfield .v.RH ;
curved = true ;
if ( mem [p + 5 ].cint == mem [p + 1 ].cint )
if ( mem [p + 6 ].cint == mem [p + 2 ].cint )
if ( mem [q + 3 ].cint == mem [q + 1 ].cint )
if ( mem [q + 4 ].cint == mem [q + 2 ].cint )
curved = false ;
d = mem [q + 3 ].cint - mem [p + 5 ].cint ;
if ( abs ( mem [p + 5 ].cint - mem [p + 1 ].cint - d ) <= 131 )
if ( abs ( mem [q + 1 ].cint - mem [q + 3 ].cint - d ) <= 131 )
{
d = mem [q + 4 ].cint - mem [p + 6 ].cint ;
if ( abs ( mem [p + 6 ].cint - mem [p + 2 ].cint - d ) <= 131 )
if ( abs ( mem [q + 2 ].cint - mem [q + 4 ].cint - d ) <= 131 )
curved = false ;
}
println () ;
if ( curved )
{
pspairout ( mem [p + 5 ].cint , mem [p + 6 ].cint ) ;
pspairout ( mem [q + 3 ].cint , mem [q + 4 ].cint ) ;
pspairout ( mem [q + 1 ].cint , mem [q + 2 ].cint ) ;
psprint ( 1122 ) ;
}
else if ( q != h )
{
pspairout ( mem [q + 1 ].cint , mem [q + 2 ].cint ) ;
psprint ( 1123 ) ;
}
p = q ;
} while ( ! ( p == h ) ) ;
psprint ( 1121 ) ;
lab10: ;
}
void
#ifdef HAVE_PROTOTYPES
zunknowngraphicsstate ( scaled c )
#else
zunknowngraphicsstate ( c )
scaled c ;
#endif
{
gsred = c ;
gsgreen = c ;
gsblue = c ;
gsljoin = 3 ;
gslcap = 3 ;
gsmiterlim = 0 ;
gsdashp = 1 ;
gsdashsc = 0 ;
gswidth = -1 ;
}
boolean
#ifdef HAVE_PROTOTYPES
zcoordrangeOK ( halfword h , smallnumber zoff , scaled dz )
#else
zcoordrangeOK ( h , zoff , dz )
halfword h ;
smallnumber zoff ;
scaled dz ;
#endif
{
/* 40 45 10 */ register boolean Result; halfword p ;
scaled zlo, zhi ;
scaled z ;
zlo = mem [h + zoff ].cint ;
zhi = zlo ;
p = h ;
while ( mem [p ].hhfield .b1 != 0 ) {
z = mem [p + zoff + 4 ].cint ;
if ( z < zlo )
zlo = z ;
else if ( z > zhi )
zhi = z ;
if ( zhi - zlo > dz )
goto lab40 ;
p = mem [p ].hhfield .v.RH ;
z = mem [p + zoff + 2 ].cint ;
if ( z < zlo )
zlo = z ;
else if ( z > zhi )
zhi = z ;
if ( zhi - zlo > dz )
goto lab40 ;
z = mem [p + zoff ].cint ;
if ( z < zlo )
zlo = z ;
else if ( z > zhi )
zhi = z ;
if ( zhi - zlo > dz )
goto lab40 ;
if ( p == h )
goto lab45 ;
}
lab45: Result = true ;
goto lab10 ;
lab40: Result = false ;
lab10: ;
return Result ;
}
boolean
#ifdef HAVE_PROTOTYPES
zsamedashes ( halfword h , halfword hh )
#else
zsamedashes ( h , hh )
halfword h ;
halfword hh ;
#endif
{
/* 30 */ register boolean Result; halfword p, pp ;
if ( h == hh )
Result = true ;
else if ( ( h <= 1 ) || ( hh <= 1 ) )
Result = false ;
else if ( mem [h + 1 ].cint != mem [hh + 1 ].cint )
Result = false ;
else {
p = mem [h ].hhfield .v.RH ;
pp = mem [hh ].hhfield .v.RH ;
while ( ( p != 2 ) && ( pp != 2 ) ) if ( ( mem [p + 1 ].cint != mem [pp
+ 1 ].cint ) || ( mem [p + 2 ].cint != mem [pp + 2 ].cint ) )
goto lab30 ;
else {
p = mem [p ].hhfield .v.RH ;
pp = mem [pp ].hhfield .v.RH ;
}
lab30: Result = p == pp ;
}
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zfixgraphicsstate ( halfword p )
#else
zfixgraphicsstate ( p )
halfword p ;
#endif
{
halfword hh, pp ;
scaled wx, wy, ww ;
boolean adjwx ;
integer tx, ty ;
scaled scf ;
if ( ( mem [p ].hhfield .b0 < 4 ) )
if ( ( gsred != mem [p + 2 ].cint ) || ( gsgreen != mem [p + 3 ].cint )
|| ( gsblue != mem [p + 4 ].cint ) )
{
gsred = mem [p + 2 ].cint ;
gsgreen = mem [p + 3 ].cint ;
gsblue = mem [p + 4 ].cint ;
if ( ( gsred == gsgreen ) && ( gsgreen == gsblue ) )
{
if ( psoffset + 16 > maxprintline )
println () ;
printchar ( 32 ) ;
printscaled ( gsred ) ;
print ( 1127 ) ;
}
else {
if ( psoffset + 36 > maxprintline )
println () ;
printchar ( 32 ) ;
printscaled ( gsred ) ;
printchar ( 32 ) ;
printscaled ( gsgreen ) ;
printchar ( 32 ) ;
printscaled ( gsblue ) ;
print ( 1128 ) ;
}
}
if ( ( mem [p ].hhfield .b0 == 1 ) || ( mem [p ].hhfield .b0 == 2 ) )
if ( mem [p + 1 ].hhfield .lhfield != 0 )
if ( ( mem [p + 1 ].hhfield .lhfield == mem [mem [p + 1 ].hhfield
.lhfield ].hhfield .v.RH ) )
{
pp = mem [p + 1 ].hhfield .lhfield ;
if ( ( mem [pp + 5 ].cint == mem [pp + 1 ].cint ) && ( mem [pp + 4 ]
.cint == mem [pp + 2 ].cint ) )
{
wx = abs ( mem [pp + 3 ].cint - mem [pp + 1 ].cint ) ;
wy = abs ( mem [pp + 6 ].cint - mem [pp + 2 ].cint ) ;
}
else {
wx = pythadd ( mem [pp + 3 ].cint - mem [pp + 1 ].cint , mem [pp +
5 ].cint - mem [pp + 1 ].cint ) ;
wy = pythadd ( mem [pp + 4 ].cint - mem [pp + 2 ].cint , mem [pp +
6 ].cint - mem [pp + 2 ].cint ) ;
}
tx = 1 ;
ty = 1 ;
if ( coordrangeOK ( mem [p + 1 ].hhfield .v.RH , 2 , wy ) )
tx = 10 ;
else if ( coordrangeOK ( mem [p + 1 ].hhfield .v.RH , 1 , wx ) )
ty = 10 ;
if ( wy / ty >= wx / tx )
{
ww = wy ;
adjwx = false ;
}
else {
ww = wx ;
adjwx = true ;
}
if ( ( ww != gswidth ) || ( adjwx != gsadjwx ) )
{
if ( adjwx )
{
if ( psoffset + 13 > maxprintline )
println () ;
printchar ( 32 ) ;
printscaled ( ww ) ;
psprint ( 1129 ) ;
}
else {
if ( psoffset + 15 > maxprintline )
println () ;
print ( 1130 ) ;
printscaled ( ww ) ;
psprint ( 1131 ) ;
}
gswidth = ww ;
gsadjwx = adjwx ;
}
if ( mem [p ].hhfield .b0 == 1 )
hh = 0 ;
else {
hh = mem [p + 6 ].hhfield .v.RH ;
scf = getpenscale ( mem [p + 1 ].hhfield .lhfield ) ;
if ( scf == 0 )
if ( gswidth == 0 )
scf = mem [p + 7 ].cint ;
else hh = 0 ;
else {
scf = makescaled ( gswidth , scf ) ;
scf = takescaled ( scf , mem [p + 7 ].cint ) ;
}
}
if ( hh == 0 )
{
if ( gsdashp != 0 )
{
psprint ( 1132 ) ;
gsdashp = 0 ;
}
}
else if ( ( gsdashsc != scf ) || ! samedashes ( gsdashp , hh ) )
{
gsdashp = hh ;
gsdashsc = scf ;
if ( ( mem [hh + 1 ].cint == 0 ) || ( abs ( mem [hh + 1 ].cint ) /
65536L >= 2147483647L / scf ) )
psprint ( 1132 ) ;
else {
pp = mem [hh ].hhfield .v.RH ;
mem [3 ].cint = mem [pp + 1 ].cint + mem [hh + 1 ].cint ;
if ( psoffset + 28 > maxprintline )
println () ;
print ( 1133 ) ;
while ( pp != 2 ) {
pspairout ( takescaled ( mem [pp + 2 ].cint - mem [pp + 1 ].cint
, scf ) , takescaled ( mem [mem [pp ].hhfield .v.RH + 1 ].cint -
mem [pp + 2 ].cint , scf ) ) ;
pp = mem [pp ].hhfield .v.RH ;
}
if ( psoffset + 22 > maxprintline )
println () ;
print ( 1134 ) ;
printscaled ( takescaled ( dashoffset ( hh ) , scf ) ) ;
print ( 1135 ) ;
}
}
if ( mem [p ].hhfield .b0 == 2 )
if ( ( mem [mem [p + 1 ].hhfield .v.RH ].hhfield .b0 == 0 ) || ( mem [
p + 6 ].hhfield .v.RH != 0 ) )
if ( gslcap != mem [p + 6 ].hhfield .b0 )
{
if ( psoffset + 13 > maxprintline )
println () ;
printchar ( 32 ) ;
printchar ( 48 + mem [p + 6 ].hhfield .b0 ) ;
print ( 1124 ) ;
gslcap = mem [p + 6 ].hhfield .b0 ;
}
if ( gsljoin != mem [p ].hhfield .b1 )
{
if ( psoffset + 14 > maxprintline )
println () ;
printchar ( 32 ) ;
printchar ( 48 + mem [p ].hhfield .b1 ) ;
print ( 1125 ) ;
gsljoin = mem [p ].hhfield .b1 ;
}
if ( gsmiterlim != mem [p + 5 ].cint )
{
if ( psoffset + 27 > maxprintline )
println () ;
printchar ( 32 ) ;
printscaled ( mem [p + 5 ].cint ) ;
print ( 1126 ) ;
gsmiterlim = mem [p + 5 ].cint ;
}
}
if ( psoffset > 0 )
println () ;
}
void
#ifdef HAVE_PROTOTYPES
zstrokeellipse ( halfword h , boolean fillalso )
#else
zstrokeellipse ( h , fillalso )
halfword h ;
boolean fillalso ;
#endif
{
scaled txx, txy, tyx, tyy ;
halfword p ;
scaled d1, det ;
integer s ;
boolean transformed ;
transformed = false ;
p = mem [h + 1 ].hhfield .lhfield ;
txx = mem [p + 3 ].cint ;
tyx = mem [p + 4 ].cint ;
txy = mem [p + 5 ].cint ;
tyy = mem [p + 6 ].cint ;
if ( ( mem [p + 1 ].cint != 0 ) || ( mem [p + 2 ].cint != 0 ) )
{
printnl ( 1139 ) ;
pspairout ( mem [p + 1 ].cint , mem [p + 2 ].cint ) ;
psprint ( 1140 ) ;
txx = txx - mem [p + 1 ].cint ;
tyx = tyx - mem [p + 2 ].cint ;
txy = txy - mem [p + 1 ].cint ;
tyy = tyy - mem [p + 2 ].cint ;
transformed = true ;
}
else printnl ( 284 ) ;
if ( gswidth != 65536L )
if ( gswidth == 0 )
{
txx = 65536L ;
tyy = 65536L ;
}
else {
txx = makescaled ( txx , gswidth ) ;
txy = makescaled ( txy , gswidth ) ;
tyx = makescaled ( tyx , gswidth ) ;
tyy = makescaled ( tyy , gswidth ) ;
}
if ( ( txy != 0 ) || ( tyx != 0 ) || ( txx != 65536L ) || ( tyy != 65536L )
)
if ( ( ! transformed ) )
{
psprint ( 1139 ) ;
transformed = true ;
}
det = takescaled ( txx , tyy ) - takescaled ( txy , tyx ) ;
d1 = 4 * 10 + 1 ;
if ( abs ( det ) < d1 )
{
if ( det >= 0 )
{
d1 = d1 - det ;
s = 1 ;
}
else {
d1 = - (integer) d1 - det ;
s = -1 ;
}
d1 = d1 * 65536L ;
if ( abs ( txx ) + abs ( tyy ) >= abs ( txy ) + abs ( tyy ) )
if ( abs ( txx ) > abs ( tyy ) )
tyy = tyy + ( d1 + s * abs ( txx ) ) / txx ;
else txx = txx + ( d1 + s * abs ( tyy ) ) / tyy ;
else if ( abs ( txy ) > abs ( tyx ) )
tyx = tyx + ( d1 + s * abs ( txy ) ) / txy ;
else txy = txy + ( d1 + s * abs ( tyx ) ) / tyx ;
}
pspathout ( mem [h + 1 ].hhfield .v.RH ) ;
if ( fillalso )
printnl ( 1136 ) ;
if ( ( txy != 0 ) || ( tyx != 0 ) )
{
println () ;
printchar ( 91 ) ;
pspairout ( txx , tyx ) ;
pspairout ( txy , tyy ) ;
psprint ( 1141 ) ;
}
else if ( ( txx != 65536L ) || ( tyy != 65536L ) )
{
println () ;
pspairout ( txx , tyy ) ;
print ( 1142 ) ;
}
psprint ( 1137 ) ;
if ( transformed )
psprint ( 1138 ) ;
println () ;
}
void
#ifdef HAVE_PROTOTYPES
zpsfillout ( halfword p )
#else
zpsfillout ( p )
halfword p ;
#endif
{
pspathout ( p ) ;
psprint ( 1143 ) ;
println () ;
}
void
#ifdef HAVE_PROTOTYPES
zdoouterenvelope ( halfword p , halfword h )
#else
zdoouterenvelope ( p , h )
halfword p ;
halfword h ;
#endif
{
p = makeenvelope ( p , mem [h + 1 ].hhfield .lhfield , mem [h ]
.hhfield .b1 , 0 , mem [h + 5 ].cint ) ;
psfillout ( p ) ;
tossknotlist ( p ) ;
}
scaled
#ifdef HAVE_PROTOTYPES
zchoosescale ( halfword p )
#else
zchoosescale ( p )
halfword p ;
#endif
{
register scaled Result; scaled a, b, c, d, ad, bc ;
a = mem [p + 10 ].cint ;
b = mem [p + 11 ].cint ;
c = mem [p + 12 ].cint ;
d = mem [p + 13 ].cint ;
if ( ( a < 0 ) )
a = - (integer) a ;
if ( ( b < 0 ) )
b = - (integer) b ;
if ( ( c < 0 ) )
c = - (integer) c ;
if ( ( d < 0 ) )
d = - (integer) d ;
ad = half ( a - d ) ;
bc = half ( b - c ) ;
Result = pythadd ( pythadd ( d + ad , ad ) , pythadd ( c + bc , bc ) ) ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zpsstringout ( strnumber s )
#else
zpsstringout ( s )
strnumber s ;
#endif
{
poolpointer i ;
ASCIIcode k ;
print ( 40 ) ;
i = strstart [s ];
while ( i < strstart [nextstr [s ]]) {
if ( psoffset + 5 > maxprintline )
{
printchar ( 92 ) ;
println () ;
}
k = strpool [i ];
if ( ( ( k < 32 ) || ( k > 126 ) ) )
{
printchar ( 92 ) ;
printchar ( 48 + ( k / 64 ) ) ;
printchar ( 48 + ( ( k / 8 ) % 8 ) ) ;
printchar ( 48 + ( k % 8 ) ) ;
}
else {
if ( ( k == 40 ) || ( k == 41 ) || ( k == 92 ) )
printchar ( 92 ) ;
printchar ( k ) ;
}
incr ( i ) ;
}
print ( 41 ) ;
}
boolean
#ifdef HAVE_PROTOTYPES
zispsname ( strnumber s )
#else
zispsname ( s )
strnumber s ;
#endif
{
/* 45 10 */ register boolean Result; poolpointer i ;
ASCIIcode k ;
i = strstart [s ];
while ( i < strstart [nextstr [s ]]) {
k = strpool [i ];
if ( ( k <= 32 ) || ( k > 126 ) )
goto lab45 ;
if ( ( k == 40 ) || ( k == 41 ) || ( k == 60 ) || ( k == 62 ) || ( k ==
123 ) || ( k == 125 ) || ( k == 47 ) || ( k == 37 ) )
goto lab45 ;
incr ( i ) ;
}
Result = true ;
goto lab10 ;
lab45: Result = false ;
lab10: ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zpsnameout ( strnumber s , boolean lit )
#else
zpsnameout ( s , lit )
strnumber s ;
boolean lit ;
#endif
{
if ( psoffset + ( strstart [nextstr [s ]]- strstart [s ]) + 2 >
maxprintline )
println () ;
printchar ( 32 ) ;
if ( ispsname ( s ) )
{
if ( lit )
printchar ( 47 ) ;
print ( s ) ;
}
else {
psstringout ( s ) ;
if ( ! lit )
psprint ( 1144 ) ;
psprint ( 1145 ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
zunmarkfont ( fontnumber f )
#else
zunmarkfont ( f )
fontnumber f ;
#endif
{
integer k ;
{register integer for_end; k = charbase [f ]+ fontbc [f ];for_end =
charbase [f ]+ fontec [f ]; if ( k <= for_end) do
fontinfo [k ].qqqq .b3 = 0 ;
while ( k++ < for_end ) ;}
}
void
#ifdef HAVE_PROTOTYPES
zmarkstringchars ( fontnumber f , strnumber s )
#else
zmarkstringchars ( f , s )
fontnumber f ;
strnumber s ;
#endif
{
integer b ;
poolASCIIcode bc, ec ;
poolpointer k ;
b = charbase [f ];
bc = fontbc [f ];
ec = fontec [f ];
k = strstart [nextstr [s ]];
while ( k > strstart [s ]) {
decr ( k ) ;
if ( ( strpool [k ]>= bc ) && ( strpool [k ]<= ec ) )
fontinfo [b + strpool [k ]].qqqq .b3 = 1 ;
}
}
void
#ifdef HAVE_PROTOTYPES
zhexdigitout ( smallnumber d )
#else
zhexdigitout ( d )
smallnumber d ;
#endif
{
if ( d < 10 )
printchar ( d + 48 ) ;
else printchar ( d + 87 ) ;
}
halfword
#ifdef HAVE_PROTOTYPES
zpsmarksout ( fontnumber f , eightbits c )
#else
zpsmarksout ( f , c )
fontnumber f ;
eightbits c ;
#endif
{
register halfword Result; eightbits bc, ec ;
integer lim ;
integer p ;
char d, b ;
lim = 4 * ( emergencylinelength - psoffset - 4 ) ;
bc = fontbc [f ];
ec = fontec [f ];
if ( c > bc )
bc = c ;
p = charbase [f ]+ bc ;
while ( ( fontinfo [p ].qqqq .b3 == 0 ) && ( bc < ec ) ) {
incr ( p ) ;
incr ( bc ) ;
}
if ( ec >= bc + lim )
ec = bc + lim - 1 ;
p = charbase [f ]+ ec ;
while ( ( fontinfo [p ].qqqq .b3 == 0 ) && ( bc < ec ) ) {
decr ( p ) ;
decr ( ec ) ;
}
printchar ( 32 ) ;
hexdigitout ( bc / 16 ) ;
hexdigitout ( bc % 16 ) ;
printchar ( 58 ) ;
b = 8 ;
d = 0 ;
{register integer for_end; p = charbase [f ]+ bc ;for_end = charbase [f
]+ ec ; if ( p <= for_end) do
{
if ( b == 0 )
{
hexdigitout ( d ) ;
d = 0 ;
b = 8 ;
}
if ( fontinfo [p ].qqqq .b3 != 0 )
d = d + b ;
b = halfp ( b ) ;
}
while ( p++ < for_end ) ;}
hexdigitout ( d ) ;
while ( ( ec < fontec [f ]) && ( fontinfo [p ].qqqq .b3 == 0 ) ) {
incr ( p ) ;
incr ( ec ) ;
}
Result = ec + 1 ;
return Result ;
}
boolean
#ifdef HAVE_PROTOTYPES
zcheckpsmarks ( fontnumber f , integer c )
#else
zcheckpsmarks ( f , c )
fontnumber f ;
integer c ;
#endif
{
/* 10 */ register boolean Result; integer p ;
{register integer for_end; p = charbase [f ]+ c ;for_end = charbase [f
]+ fontec [f ]; if ( p <= for_end) do
if ( fontinfo [p ].qqqq .b3 == 1 )
{
Result = true ;
goto lab10 ;
}
while ( p++ < for_end ) ;}
Result = false ;
lab10: ;
return Result ;
}
quarterword
#ifdef HAVE_PROTOTYPES
zsizeindex ( fontnumber f , scaled s )
#else
zsizeindex ( f , s )
fontnumber f ;
scaled s ;
#endif
{
/* 40 */ register quarterword Result; halfword p, q ;
quarterword i ;
q = fontsizes [f ];
i = 0 ;
while ( q != 0 ) {
if ( abs ( s - mem [q + 1 ].cint ) <= 65 )
goto lab40 ;
else {
p = q ;
q = mem [q ].hhfield .v.RH ;
incr ( i ) ;
}
if ( i == 255 )
overflow ( 1146 , 255 ) ;
}
q = getnode ( 2 ) ;
mem [q + 1 ].cint = s ;
if ( i == 0 )
fontsizes [f ]= q ;
else mem [p ].hhfield .v.RH = q ;
lab40: Result = i ;
return Result ;
}
scaled
#ifdef HAVE_PROTOTYPES
zindexedsize ( fontnumber f , quarterword j )
#else
zindexedsize ( f , j )
fontnumber f ;
quarterword j ;
#endif
{
register scaled Result; halfword p ;
quarterword i ;
p = fontsizes [f ];
i = 0 ;
if ( p == 0 )
confusion ( 1147 ) ;
while ( ( i != j ) ) {
incr ( i ) ;
p = mem [p ].hhfield .v.RH ;
if ( p == 0 )
confusion ( 1147 ) ;
}
Result = mem [p + 1 ].cint ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
clearsizes ( void )
#else
clearsizes ( )
#endif
{
fontnumber f ;
halfword p ;
{register integer for_end; f = 1 ;for_end = lastfnum ; if ( f <= for_end)
do
while ( fontsizes [f ]!= 0 ) {
p = fontsizes [f ];
fontsizes [f ]= mem [p ].hhfield .v.RH ;
freenode ( p , 2 ) ;
}
while ( f++ < for_end ) ;}
}
void
#ifdef HAVE_PROTOTYPES
zshipout ( halfword h )
#else
zshipout ( h )
halfword h ;
#endif
{
/* 30 40 */ halfword p ;
halfword q ;
integer t ;
fontnumber f, ff ;
fontnumber ldf ;
boolean donefonts ;
quarterword nextsize ;
halfword curfsize[fontmax + 1] ;
scaled ds, scf ;
boolean transformed ;
openoutputfile () ;
if ( ( internal [32 ]> 0 ) && ( lastpsfnum < lastfnum ) )
readpsnametable () ;
nonpssetting = selector ;
selector = 5 ;
print ( 1156 ) ;
if ( internal [32 ]> 0 )
print ( 1157 ) ;
printnl ( 1158 ) ;
setbbox ( h , true ) ;
if ( mem [h + 2 ].cint > mem [h + 4 ].cint )
print ( 1159 ) ;
else if ( internal [32 ]< 0 )
{
pspairout ( mem [h + 2 ].cint , mem [h + 3 ].cint ) ;
pspairout ( mem [h + 4 ].cint , mem [h + 5 ].cint ) ;
}
else {
pspairout ( floorscaled ( mem [h + 2 ].cint ) , floorscaled ( mem [h +
3 ].cint ) ) ;
pspairout ( - (integer) floorscaled ( - (integer) mem [h + 4 ].cint ) ,
- (integer) floorscaled ( - (integer) mem [h + 5 ].cint ) ) ;
}
printnl ( 1160 ) ;
printnl ( 1161 ) ;
printint ( roundunscaled ( internal [13 ]) ) ;
printchar ( 46 ) ;
printdd ( roundunscaled ( internal [14 ]) ) ;
printchar ( 46 ) ;
printdd ( roundunscaled ( internal [15 ]) ) ;
printchar ( 58 ) ;
t = roundunscaled ( internal [16 ]) ;
printdd ( t / 60 ) ;
printdd ( t % 60 ) ;
printnl ( 1162 ) ;
{register integer for_end; f = 1 ;for_end = lastfnum ; if ( f <= for_end)
do
fontsizes [f ]= 0 ;
while ( f++ < for_end ) ;}
p = mem [h + 7 ].hhfield .v.RH ;
while ( p != 0 ) {
if ( mem [p ].hhfield .b0 == 3 )
if ( mem [p + 1 ].hhfield .lhfield != 0 )
{
f = mem [p + 1 ].hhfield .lhfield ;
if ( internal [32 ]> 0 )
fontsizes [f ]= 1 ;
else {
if ( fontsizes [f ]== 0 )
unmarkfont ( f ) ;
mem [p ].hhfield .b1 = sizeindex ( f , choosescale ( p ) ) ;
if ( mem [p ].hhfield .b1 == 0 )
markstringchars ( f , mem [p + 1 ].hhfield .v.RH ) ;
}
}
p = mem [p ].hhfield .v.RH ;
}
if ( internal [32 ]> 0 )
{
ldf = 0 ;
{register integer for_end; f = 1 ;for_end = lastfnum ; if ( f <=
for_end) do
if ( fontsizes [f ]!= 0 )
{
if ( ldf == 0 )
printnl ( 1163 ) ;
{register integer for_end; ff = ldf ;for_end = 0 ; if ( ff >=
for_end) do
if ( fontsizes [ff ]!= 0 )
if ( strvsstr ( fontpsname [f ], fontpsname [ff ]) == 0 )
goto lab40 ;
while ( ff-- > for_end ) ;}
if ( psoffset + 1 + ( strstart [nextstr [fontpsname [f ]]]-
strstart [fontpsname [f ]]) > maxprintline )
printnl ( 1164 ) ;
printchar ( 32 ) ;
print ( fontpsname [f ]) ;
ldf = f ;
lab40: ;
}
while ( f++ < for_end ) ;}
}
else {
nextsize = 0 ;
{register integer for_end; f = 1 ;for_end = lastfnum ; if ( f <=
for_end) do
curfsize [f ]= fontsizes [f ];
while ( f++ < for_end ) ;}
do {
donefonts = true ;
{register integer for_end; f = 1 ;for_end = lastfnum ; if ( f <=
for_end) do
{
if ( curfsize [f ]!= 0 )
{
t = 0 ;
while ( checkpsmarks ( f , t ) ) {
printnl ( 1165 ) ;
if ( psoffset + ( strstart [nextstr [fontname [f ]]]-
strstart [fontname [f ]]) + 12 > emergencylinelength )
goto lab30 ;
print ( fontname [f ]) ;
printchar ( 32 ) ;
ds = ( fontdsize [f ]+ 8 ) / 16 ;
printscaled ( takescaled ( ds , mem [curfsize [f ]+ 1 ].cint
) ) ;
if ( psoffset + 12 > emergencylinelength )
goto lab30 ;
printchar ( 32 ) ;
printscaled ( ds ) ;
if ( psoffset + 5 > emergencylinelength )
goto lab30 ;
t = psmarksout ( f , t ) ;
}
lab30: curfsize [f ]= mem [curfsize [f ]].hhfield .v.RH ;
}
if ( curfsize [f ]!= 0 )
{
unmarkfont ( f ) ;
donefonts = false ;
}
}
while ( f++ < for_end ) ;}
if ( ! donefonts )
{
incr ( nextsize ) ;
p = mem [h + 7 ].hhfield .v.RH ;
while ( p != 0 ) {
if ( mem [p ].hhfield .b0 == 3 )
if ( mem [p + 1 ].hhfield .lhfield != 0 )
if ( mem [p ].hhfield .b1 == nextsize )
markstringchars ( mem [p + 1 ].hhfield .lhfield , mem [p + 1 ]
.hhfield .v.RH ) ;
p = mem [p ].hhfield .v.RH ;
}
}
} while ( ! ( donefonts ) ) ;
}
println () ;
if ( internal [32 ]> 0 )
{
if ( ldf != 0 )
{
{register integer for_end; f = 1 ;for_end = lastfnum ; if ( f <=
for_end) do
if ( fontsizes [f ]!= 0 )
{
psnameout ( fontname [f ], true ) ;
psnameout ( fontpsname [f ], true ) ;
psprint ( 1166 ) ;
println () ;
}
while ( f++ < for_end ) ;}
print ( 1167 ) ;
println () ;
}
}
print ( 1151 ) ;
printnl ( 1152 ) ;
println () ;
t = mem [memtop - 3 ].hhfield .v.RH ;
while ( t != 0 ) {
if ( ( strstart [nextstr [mem [t + 1 ].cint ]]- strstart [mem [t +
1 ].cint ]) <= emergencylinelength )
print ( mem [t + 1 ].cint ) ;
else overflow ( 1150 , emergencylinelength ) ;
println () ;
t = mem [t ].hhfield .v.RH ;
}
flushtokenlist ( mem [memtop - 3 ].hhfield .v.RH ) ;
mem [memtop - 3 ].hhfield .v.RH = 0 ;
lastpending = memtop - 3 ;
unknowngraphicsstate ( 0 ) ;
neednewpath = true ;
p = mem [h + 7 ].hhfield .v.RH ;
while ( p != 0 ) {
fixgraphicsstate ( p ) ;
switch ( mem [p ].hhfield .b0 )
{case 4 :
{
printnl ( 1139 ) ;
pspathout ( mem [p + 1 ].hhfield .v.RH ) ;
psprint ( 1168 ) ;
println () ;
}
break ;
case 6 :
{
printnl ( 1169 ) ;
println () ;
unknowngraphicsstate ( -1 ) ;
}
break ;
case 1 :
if ( mem [p + 1 ].hhfield .lhfield == 0 )
psfillout ( mem [p + 1 ].hhfield .v.RH ) ;
else if ( ( mem [p + 1 ].hhfield .lhfield == mem [mem [p + 1 ]
.hhfield .lhfield ].hhfield .v.RH ) )
strokeellipse ( p , true ) ;
else {
doouterenvelope ( copypath ( mem [p + 1 ].hhfield .v.RH ) , p ) ;
doouterenvelope ( htapypoc ( mem [p + 1 ].hhfield .v.RH ) , p ) ;
}
break ;
case 2 :
if ( ( mem [p + 1 ].hhfield .lhfield == mem [mem [p + 1 ].hhfield
.lhfield ].hhfield .v.RH ) )
strokeellipse ( p , false ) ;
else {
q = copypath ( mem [p + 1 ].hhfield .v.RH ) ;
t = mem [p + 6 ].hhfield .b0 ;
if ( mem [q ].hhfield .b0 != 0 )
{
mem [insertknot ( q , mem [q + 1 ].cint , mem [q + 2 ].cint ) ]
.hhfield .b0 = 0 ;
mem [q ].hhfield .b1 = 0 ;
q = mem [q ].hhfield .v.RH ;
t = 1 ;
}
q = makeenvelope ( q , mem [p + 1 ].hhfield .lhfield , mem [p ]
.hhfield .b1 , t , mem [p + 5 ].cint ) ;
psfillout ( q ) ;
tossknotlist ( q ) ;
}
break ;
case 3 :
if ( ( mem [p + 1 ].hhfield .lhfield != 0 ) && ( ( strstart [nextstr
[mem [p + 1 ].hhfield .v.RH ]]- strstart [mem [p + 1 ].hhfield
.v.RH ]) > 0 ) )
{
if ( internal [32 ]> 0 )
scf = choosescale ( p ) ;
else scf = indexedsize ( mem [p + 1 ].hhfield .lhfield , mem [p ]
.hhfield .b1 ) ;
transformed = ( mem [p + 10 ].cint != scf ) || ( mem [p + 13 ]
.cint != scf ) || ( mem [p + 11 ].cint != 0 ) || ( mem [p + 12 ]
.cint != 0 ) ;
if ( transformed )
{
print ( 1171 ) ;
pspairout ( makescaled ( mem [p + 10 ].cint , scf ) , makescaled (
mem [p + 12 ].cint , scf ) ) ;
pspairout ( makescaled ( mem [p + 11 ].cint , scf ) , makescaled (
mem [p + 13 ].cint , scf ) ) ;
pspairout ( mem [p + 8 ].cint , mem [p + 9 ].cint ) ;
psprint ( 1172 ) ;
}
else {
pspairout ( mem [p + 8 ].cint , mem [p + 9 ].cint ) ;
psprint ( 1119 ) ;
}
println () ;
psstringout ( mem [p + 1 ].hhfield .v.RH ) ;
psnameout ( fontname [mem [p + 1 ].hhfield .lhfield ], false ) ;
if ( psoffset + 18 > maxprintline )
println () ;
printchar ( 32 ) ;
ds = ( fontdsize [mem [p + 1 ].hhfield .lhfield ]+ 8 ) / 16 ;
printscaled ( takescaled ( ds , scf ) ) ;
print ( 1170 ) ;
if ( transformed )
psprint ( 1138 ) ;
println () ;
}
break ;
case 5 :
case 7 :
;
break ;
}
p = mem [p ].hhfield .v.RH ;
}
print ( 1153 ) ;
println () ;
print ( 1154 ) ;
println () ;
aclose ( psfile ) ;
selector = nonpssetting ;
if ( internal [32 ]<= 0 )
clearsizes () ;
printchar ( 93 ) ;
fflush ( stdout ) ;
incr ( totalshipped ) ;
if ( internal [9 ]> 0 )
printedges ( h , 1155 , true ) ;
}
void
#ifdef HAVE_PROTOTYPES
doshipout ( void )
#else
doshipout ( )
#endif
{
integer c ;
getxnext () ;
scanexpression () ;
if ( curtype != 10 )
{
disperr ( 0 , 1032 ) ;
{
helpptr = 1 ;
helpline [0 ]= 1033 ;
}
putgetflusherror ( 0 ) ;
}
else {
c = roundunscaled ( internal [17 ]) % 256 ;
if ( c < 0 )
c = c + 256 ;
if ( c < bc )
bc = c ;
if ( c > ec )
ec = c ;
charexists [c ]= true ;
tfmwidth [c ]= tfmcheck ( 19 ) ;
tfmheight [c ]= tfmcheck ( 20 ) ;
tfmdepth [c ]= tfmcheck ( 21 ) ;
tfmitalcorr [c ]= tfmcheck ( 22 ) ;
shipout ( curexp ) ;
flushcurexp ( 0 ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
znostringerr ( strnumber s )
#else
znostringerr ( s )
strnumber s ;
#endif
{
disperr ( 0 , 740 ) ;
{
helpptr = 1 ;
helpline [0 ]= s ;
}
putgeterror () ;
}
void
#ifdef HAVE_PROTOTYPES
domessage ( void )
#else
domessage ( )
#endif
{
char m ;
m = curmod ;
getxnext () ;
scanexpression () ;
if ( curtype != 4 )
nostringerr ( 1037 ) ;
else switch ( m )
{case 0 :
{
printnl ( 284 ) ;
print ( curexp ) ;
}
break ;
case 1 :
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 284 ) ;
}
print ( curexp ) ;
if ( errhelp != 0 )
useerrhelp = true ;
else if ( longhelpseen )
{
helpptr = 1 ;
helpline [0 ]= 1038 ;
}
else {
if ( interaction < 3 )
longhelpseen = true ;
{
helpptr = 4 ;
helpline [3 ]= 1039 ;
helpline [2 ]= 1040 ;
helpline [1 ]= 1041 ;
helpline [0 ]= 1042 ;
}
}
putgeterror () ;
useerrhelp = false ;
}
break ;
case 2 :
{
if ( errhelp != 0 )
{
if ( strref [errhelp ]< 127 )
if ( strref [errhelp ]> 1 )
decr ( strref [errhelp ]) ;
else flushstring ( errhelp ) ;
}
if ( ( strstart [nextstr [curexp ]]- strstart [curexp ]) == 0 )
errhelp = 0 ;
else {
errhelp = curexp ;
{
if ( strref [errhelp ]< 127 )
incr ( strref [errhelp ]) ;
}
}
}
break ;
}
flushcurexp ( 0 ) ;
}
void
#ifdef HAVE_PROTOTYPES
dowrite ( void )
#else
dowrite ( )
#endif
{
/* 22 */ strnumber t ;
writeindex n, n0 ;
char oldsetting ;
getxnext () ;
scanexpression () ;
if ( curtype != 4 )
nostringerr ( 1043 ) ;
else if ( curcmd != 71 )
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 1044 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 1045 ;
}
putgeterror () ;
}
else {
t = curexp ;
curtype = 1 ;
getxnext () ;
scanexpression () ;
if ( curtype != 4 )
nostringerr ( 1046 ) ;
else {
n = writefiles ;
n0 = writefiles ;
do {
lab22: if ( n == 0 )
{
if ( n0 == writefiles )
if ( writefiles < 4 )
incr ( writefiles ) ;
else overflow ( 1047 , 4 ) ;
n = n0 ;
openwritefile ( curexp , n ) ;
}
else {
decr ( n ) ;
if ( wrfname [n ]== 0 )
{
n0 = n ;
goto lab22 ;
}
}
} while ( ! ( strvsstr ( curexp , wrfname [n ]) == 0 ) ) ;
if ( eofline == 0 )
{
{
strpool [poolptr ]= 0 ;
incr ( poolptr ) ;
}
eofline = makestring () ;
strref [eofline ]= 127 ;
}
if ( strvsstr ( t , eofline ) == 0 )
{
aclose ( wrfile [n ]) ;
{
if ( strref [wrfname [n ]]< 127 )
if ( strref [wrfname [n ]]> 1 )
decr ( strref [wrfname [n ]]) ;
else flushstring ( wrfname [n ]) ;
}
wrfname [n ]= 0 ;
if ( n == writefiles - 1 )
writefiles = n ;
}
else {
oldsetting = selector ;
selector = n ;
print ( t ) ;
println () ;
selector = oldsetting ;
}
}
{
if ( strref [t ]< 127 )
if ( strref [t ]> 1 )
decr ( strref [t ]) ;
else flushstring ( t ) ;
}
}
flushcurexp ( 0 ) ;
}
eightbits
#ifdef HAVE_PROTOTYPES
getcode ( void )
#else
getcode ( )
#endif
{
/* 40 */ register eightbits Result; integer c ;
getxnext () ;
scanexpression () ;
if ( curtype == 16 )
{
c = roundunscaled ( curexp ) ;
if ( c >= 0 )
if ( c < 256 )
goto lab40 ;
}
else if ( curtype == 4 )
if ( ( strstart [nextstr [curexp ]]- strstart [curexp ]) == 1 )
{
c = strpool [strstart [curexp ]];
goto lab40 ;
}
disperr ( 0 , 1056 ) ;
{
helpptr = 2 ;
helpline [1 ]= 1057 ;
helpline [0 ]= 1058 ;
}
putgetflusherror ( 0 ) ;
c = 0 ;
lab40: Result = c ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zsettag ( halfword c , smallnumber t , halfword r )
#else
zsettag ( c , t , r )
halfword c ;
smallnumber t ;
halfword r ;
#endif
{
if ( chartag [c ]== 0 )
{
chartag [c ]= t ;
charremainder [c ]= r ;
if ( t == 1 )
{
incr ( labelptr ) ;
labelloc [labelptr ]= r ;
labelchar [labelptr ]= c ;
}
}
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 1059 ) ;
}
if ( ( c > 32 ) && ( c < 127 ) )
print ( c ) ;
else if ( c == 256 )
print ( 1060 ) ;
else {
print ( 1061 ) ;
printint ( c ) ;
}
print ( 1062 ) ;
switch ( chartag [c ])
{case 1 :
print ( 1063 ) ;
break ;
case 2 :
print ( 1064 ) ;
break ;
case 3 :
print ( 1053 ) ;
break ;
}
{
helpptr = 2 ;
helpline [1 ]= 1065 ;
helpline [0 ]= 1019 ;
}
putgeterror () ;
}
}
void
#ifdef HAVE_PROTOTYPES
dotfmcommand ( void )
#else
dotfmcommand ( )
#endif
{
/* 22 30 */ short c, cc ;
integer k ;
integer j ;
switch ( curmod )
{case 0 :
{
c = getcode () ;
while ( curcmd == 80 ) {
cc = getcode () ;
settag ( c , 2 , cc ) ;
c = cc ;
}
}
break ;
case 1 :
{
lkstarted = false ;
lab22: getxnext () ;
if ( ( curcmd == 77 ) && lkstarted )
{
c = getcode () ;
if ( nl - skiptable [c ]> 128 )
{
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 1082 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 1083 ;
}
error () ;
ll = skiptable [c ];
do {
lll = ligkern [ll ].b0 ;
ligkern [ll ].b0 = 128 ;
ll = ll - lll ;
} while ( ! ( lll == 0 ) ) ;
}
skiptable [c ]= ligtablesize ;
}
if ( skiptable [c ]== ligtablesize )
ligkern [nl - 1 ].b0 = 0 ;
else ligkern [nl - 1 ].b0 = nl - skiptable [c ]- 1 ;
skiptable [c ]= nl - 1 ;
goto lab30 ;
}
if ( curcmd == 78 )
{
c = 256 ;
curcmd = 80 ;
}
else {
backinput () ;
c = getcode () ;
}
if ( ( curcmd == 80 ) || ( curcmd == 79 ) )
{
if ( curcmd == 80 )
if ( c == 256 )
bchlabel = nl ;
else settag ( c , 1 , nl ) ;
else if ( skiptable [c ]< ligtablesize )
{
ll = skiptable [c ];
skiptable [c ]= ligtablesize ;
do {
lll = ligkern [ll ].b0 ;
if ( nl - ll > 128 )
{
{
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 1082 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 1083 ;
}
error () ;
ll = ll ;
do {
lll = ligkern [ll ].b0 ;
ligkern [ll ].b0 = 128 ;
ll = ll - lll ;
} while ( ! ( lll == 0 ) ) ;
}
goto lab22 ;
}
ligkern [ll ].b0 = nl - ll - 1 ;
ll = ll - lll ;
} while ( ! ( lll == 0 ) ) ;
}
goto lab22 ;
}
if ( curcmd == 75 )
{
ligkern [nl ].b1 = c ;
ligkern [nl ].b0 = 0 ;
if ( curmod < 128 )
{
ligkern [nl ].b2 = curmod ;
ligkern [nl ].b3 = getcode () ;
}
else {
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
{
disperr ( 0 , 1084 ) ;
{
helpptr = 2 ;
helpline [1 ]= 1085 ;
helpline [0 ]= 308 ;
}
putgetflusherror ( 0 ) ;
}
kern [nk ]= curexp ;
k = 0 ;
while ( kern [k ]!= curexp ) incr ( k ) ;
if ( k == nk )
{
if ( nk == maxkerns )
overflow ( 1081 , maxkerns ) ;
incr ( nk ) ;
}
ligkern [nl ].b2 = 128 + ( k / 256 ) ;
ligkern [nl ].b3 = ( k % 256 ) ;
}
lkstarted = true ;
}
else {
{
if ( interaction == 3 )
;
printnl ( 262 ) ;
print ( 1070 ) ;
}
{
helpptr = 1 ;
helpline [0 ]= 1071 ;
}
backerror () ;
ligkern [nl ].b1 = 0 ;
ligkern [nl ].b2 = 0 ;
ligkern [nl ].b3 = 0 ;
ligkern [nl ].b0 = 129 ;
}
if ( nl == ligtablesize )
overflow ( 1072 , ligtablesize ) ;
incr ( nl ) ;
if ( curcmd == 81 )
goto lab22 ;
if ( ligkern [nl - 1 ].b0 < 128 )
ligkern [nl - 1 ].b0 = 128 ;
lab30: ;
}
break ;
case 2 :
{
if ( ne == 256 )
overflow ( 1053 , 256 ) ;
c = getcode () ;
settag ( c , 3 , ne ) ;
if ( curcmd != 80 )
{
missingerr ( 58 ) ;
{
helpptr = 1 ;
helpline [0 ]= 1086 ;
}
backerror () ;
}
exten [ne ].b0 = getcode () ;
if ( curcmd != 81 )
{
missingerr ( 44 ) ;
{
helpptr = 1 ;
helpline [0 ]= 1086 ;
}
backerror () ;
}
exten [ne ].b1 = getcode () ;
if ( curcmd != 81 )
{
missingerr ( 44 ) ;
{
helpptr = 1 ;
helpline [0 ]= 1086 ;
}
backerror () ;
}
exten [ne ].b2 = getcode () ;
if ( curcmd != 81 )
{
missingerr ( 44 ) ;
{
helpptr = 1 ;
helpline [0 ]= 1086 ;
}
backerror () ;
}
exten [ne ].b3 = getcode () ;
incr ( ne ) ;
}
break ;
case 3 :
case 4 :
{
c = curmod ;
getxnext () ;
scanexpression () ;
if ( ( curtype != 16 ) || ( curexp < 32768L ) )
{
disperr ( 0 , 1066 ) ;
{
helpptr = 2 ;
helpline [1 ]= 1067 ;
helpline [0 ]= 1068 ;
}
putgeterror () ;
}
else {
j = roundunscaled ( curexp ) ;
if ( curcmd != 80 )
{
missingerr ( 58 ) ;
{
helpptr = 1 ;
helpline [0 ]= 1069 ;
}
backerror () ;
}
if ( c == 3 )
do {
if ( j > headersize )
overflow ( 1054 , headersize ) ;
headerbyte [j ]= getcode () ;
incr ( j ) ;
} while ( ! ( curcmd != 81 ) ) ;
else do {
if ( j > maxfontdimen )
overflow ( 1055 , maxfontdimen ) ;
while ( j > np ) {
incr ( np ) ;
param [np ]= 0 ;
}
getxnext () ;
scanexpression () ;
if ( curtype != 16 )
{
disperr ( 0 , 1087 ) ;
{
helpptr = 1 ;
helpline [0 ]= 308 ;
}
putgetflusherror ( 0 ) ;
}
param [j ]= curexp ;
incr ( j ) ;
} while ( ! ( curcmd != 81 ) ) ;
}
}
break ;
}
}
|