[gnu.gcc.bug] GCC 1.29: cc1 dumps core while compiling TeX in C

hrp%cerf.CRAY.COM@UC.MSC.UMN.EDU (Hal Peterson) (10/12/88)

GCC version 1.29

(input file appended, after my .signature.)

command:  gcc -g -O -msoft-float -c core.c

configuration:	md	-> m68k.md
		tm.h	-> tm-sun3.h

Running on a Sun-3/280 running SunOS 3.5.

cc1 dies with a signal 11 (sigsegv).

--
Hal Peterson / Cray Research / 1440 Northland Dr. / Mendota Hts, MN  55120
hrp%hall.cray.com@uc.msc.umn.edu	bungia!cray!hrp	    (612) 681-3145

============================================================
extern	struct	_iobuf {
	int	_cnt;
	unsigned char *_ptr;
	unsigned char *_base;
	int	_bufsiz;
	short	_flag;
	char	_file;		 
} _iob[];
extern struct _iobuf 	*fopen();
extern struct _iobuf 	*fdopen();
extern struct _iobuf 	*freopen();
extern struct _iobuf 	*popen();
extern struct _iobuf 	*tmpfile();
extern long	ftell();
extern char	*fgets();
extern char	*gets();
extern char	*ctermid();
extern char	*cuserid();
extern char	*tempnam();
extern char	*tmpnam();
typedef	char schar;
typedef long integer;
typedef char boolean;
typedef float glueratio;
typedef double real;
extern char *strcpy(), *strcat();	 
typedef struct _iobuf 	*alphafile, *bytefile, *wordfile, *file_ptr;
typedef char	*ccharpointer;
char zinputln();	 
typedef unsigned char ASCIIcode  ; 
typedef unsigned char eightbits  ; 
typedef integer poolpointer  ; 
typedef integer strnumber  ; 
typedef integer scaled  ; 
typedef integer nonnegativeinteger  ; 
typedef schar smallnumber  ; 
typedef unsigned char quarterword  ; 
typedef unsigned short halfword  ; 
typedef schar twochoices  ; 
typedef schar fourchoices  ; 
typedef union {
    struct {
	halfword RH, LH;
    } v;
    struct {
	halfword junk_space;	 
	quarterword B0, B1;
    } u;
} twohalves;
typedef struct {
    struct {
	quarterword B0;
	quarterword B1;
    } u;
    quarterword b2;
    quarterword b3;
} fourquarters;
typedef union {
    integer cint;
    glueratio gr;
    twohalves hh;
    fourquarters qqqq;
} memoryword;
typedef schar glueord  ; 
typedef struct {
    short modefield ; 
  halfword headfield, tailfield ; 
  integer pgfield, auxfield, mlfield ; 
} liststaterecord  ; 
typedef schar groupcode  ; 
typedef struct {
    quarterword statefield, indexfield ; 
  halfword startfield, locfield, limitfield, namefield ; 
} instaterecord  ; 
typedef integer internalfontnumber  ; 
typedef integer dviindex  ; 
typedef integer triepointer  ; 
typedef short hyphpointer  ; 
extern  integer bad  ; 
extern  ASCIIcode xord[128]  ; 
extern  char xchr[256]  ; 
extern  char nameoffile[1024  + 1], realnameoffile[1024  + 1]  ; 
extern  integer namelength  ; 
extern  ASCIIcode buffer[500  + 1]  ; 
extern  integer first  ; 
extern  integer last  ; 
extern  integer maxbufstack  ; 
extern  ASCIIcode strpool[32000L  + 1]  ; 
extern  poolpointer strstart[3000  + 1]  ; 
extern  poolpointer poolptr  ; 
extern  strnumber strptr  ; 
extern  poolpointer initpoolptr  ; 
extern  strnumber initstrptr  ; 
extern  alphafile logfile  ; 
extern  schar selector  ; 
extern  schar dig[23]  ; 
extern  integer tally  ; 
extern  integer termoffset  ; 
extern  integer fileoffset  ; 
extern  ASCIIcode trickbuf[64  + 1]  ; 
extern  integer trickcount  ; 
extern  integer firstcount  ; 
extern  schar interaction  ; 
extern  boolean deletionsallowed  ; 
extern  schar history  ; 
extern  schar errorcount  ; 
extern  strnumber helpline[6]  ; 
extern  schar helpptr  ; 
extern  boolean useerrhelp  ; 
extern  integer interrupt  ; 
extern  boolean OKtointerrupt  ; 
extern  boolean aritherror  ; 
extern  scaled remainder  ; 
extern  halfword tempptr  ; 
extern  memoryword 
  zzzaa[2999L  - 0  + 1]  ; 
extern  halfword lomemmax  ; 
extern  halfword himemmin  ; 
extern  integer varused, dynused  ; 
extern  halfword avail  ; 
extern  halfword memend  ; 
extern  halfword rover  ; 
extern  integer fontinshortdisplay  ; 
extern  integer depththreshold  ; 
extern  integer breadthmax  ; 
extern  liststaterecord nest[40  + 1]  ; 
extern  integer nestptr  ; 
extern  integer maxneststack  ; 
extern  liststaterecord curlist  ; 
extern  short shownmode  ; 
extern  schar oldsetting  ; 
extern  memoryword zeqtb[5977]  ; 
extern  quarterword 
  zzzad[710]  ; 
extern  twohalves 
  zzzae[3267]  ; 
extern  halfword hashused  ; 
extern  boolean nonewcontrolsequence  ; 
extern  integer cscount  ; 
extern  memoryword savestack[600  + 1]  ; 
extern  integer saveptr  ; 
extern  integer maxsavestack  ; 
extern  quarterword curlevel  ; 
extern  groupcode curgroup  ; 
extern  integer curboundary  ; 
extern  integer magset  ; 
extern  eightbits curcmd  ; 
extern  halfword curchr  ; 
extern  halfword curcs  ; 
extern  halfword curtok  ; 
extern  instaterecord inputstack[200  + 1]  ; 
extern  integer inputptr  ; 
extern  integer maxinstack  ; 
extern  instaterecord curinput  ; 
extern  integer inopen  ; 
extern  alphafile inputfile[6  + 1]  ; 
extern  integer line  ; 
extern  integer linestack[6  + 1]  ; 
extern  schar scannerstatus  ; 
extern  halfword warningindex  ; 
extern  halfword defref  ; 
extern  halfword paramstack[60  + 1]  ; 
extern  integer paramptr  ; 
extern  integer maxparamstack  ; 
extern  integer alignstate  ; 
extern  integer baseptr  ; 
extern  halfword parloc  ; 
extern  halfword partoken  ; 
extern  boolean forceeof  ; 
extern  halfword curmark[5]  ; 
extern  schar longstate  ; 
extern  halfword pstack[9]  ; 
extern  integer curval  ; 
extern  schar curvallevel  ; 
extern  smallnumber radix  ; 
extern  glueord curorder  ; 
extern  alphafile readfile[16]  ; 
extern  schar readopen[17]  ; 
extern  halfword condptr  ; 
extern  schar iflimit  ; 
extern  smallnumber curif  ; 
extern  integer ifline  ; 
extern  integer skipline  ; 
extern  strnumber curname  ; 
extern  strnumber curarea  ; 
extern  strnumber curext  ; 
extern  poolpointer areadelimiter  ; 
extern  poolpointer extdelimiter  ; 
extern  ccharpointer TEXformatdefault  ; 
extern  boolean nameinprogress  ; 
extern  strnumber jobname  ; 
extern  bytefile dvifile  ; 
extern  strnumber outputfilename  ; 
extern  strnumber logname  ; 
extern  bytefile tfmfile  ; 
extern  memoryword fontinfo[20000L  + 1]  ; 
extern  integer fmemptr  ; 
extern  internalfontnumber fontptr  ; 
extern  fourquarters fontcheck[75  + 1]  ; 
extern  scaled fontsize[75  + 1]  ; 
extern  scaled fontdsize[75  + 1]  ; 
extern  halfword fontparams[75  + 1]  ; 
extern  strnumber fontname[75  + 1]  ; 
extern  strnumber fontarea[75  + 1]  ; 
extern  eightbits fontbc[75  + 1]  ; 
extern  eightbits fontec[75  + 1]  ; 
extern  halfword fontglue[75  + 1]  ; 
extern  boolean fontused[75  + 1]  ; 
extern  integer hyphenchar[75  + 1]  ; 
extern  integer skewchar[75  + 1]  ; 
extern  integer charbase[75  + 1]  ; 
extern  integer widthbase[75  + 1]  ; 
extern  integer heightbase[75  + 1]  ; 
extern  integer depthbase[75  + 1]  ; 
extern  integer italicbase[75  + 1]  ; 
extern  integer ligkernbase[75  + 1]  ; 
extern  integer kernbase[75  + 1]  ; 
extern  integer extenbase[75  + 1]  ; 
extern  integer parambase[75  + 1]  ; 
extern  fourquarters nullcharacter  ; 
extern  integer totalpages  ; 
extern  scaled maxv  ; 
extern  scaled maxh  ; 
extern  integer maxpush  ; 
extern  integer lastbop  ; 
extern  integer deadcycles  ; 
extern  boolean doingleaders  ; 
extern  quarterword c, f  ; 
extern  scaled ruleht, ruledp, rulewd  ; 
extern  halfword g  ; 
extern  integer lq, lr  ; 
extern  eightbits dvibuf[16384  + 1]  ; 
extern  dviindex halfbuf  ; 
extern  dviindex dvilimit  ; 
extern  dviindex dviptr  ; 
extern  integer dvioffset  ; 
extern  integer dvigone  ; 
extern  halfword downptr, rightptr  ; 
extern  scaled dvih, dviv  ; 
extern  scaled curh, curv  ; 
extern  internalfontnumber dvif  ; 
extern  integer curs  ; 
extern  scaled totalstretch[4], totalshrink[4]  ; 
extern  halfword adjusttail  ; 
extern  integer packbeginline  ; 
extern  twohalves emptyfield  ; 
extern  fourquarters nulldelimiter  ; 
extern  halfword curmlist  ; 
extern  smallnumber curstyle  ; 
extern  smallnumber cursize  ; 
extern  scaled curmu  ; 
extern  boolean mlistpenalties  ; 
extern  internalfontnumber curf  ; 
extern  quarterword curc  ; 
extern  fourquarters curi  ; 
extern  integer magicoffset  ; 
extern  halfword curalign  ; 
extern  halfword curspan  ; 
extern  halfword curloop  ; 
extern  halfword alignptr  ; 
extern  halfword curhead, curtail  ; 
extern  halfword justbox  ; 
extern  halfword passive  ; 
extern  halfword printednode  ; 
extern  halfword passnumber  ; 
extern  scaled activewidth[7]  ; 
extern  scaled curactivewidth[7]  ; 
extern  scaled background[7]  ; 
extern  scaled breakwidth[7]  ; 
extern  boolean noshrinkerroryet  ; 
extern  halfword curp  ; 
extern  boolean secondpass  ; 
extern  integer threshold  ; 
extern  scaled minimaldemerits[4]  ; 
extern  scaled minimumdemerits  ; 
extern  halfword bestplace[4]  ; 
extern  halfword bestplline[4]  ; 
extern  scaled discwidth  ; 
extern  halfword easyline  ; 
extern  halfword lastspecialline  ; 
extern  scaled firstwidth  ; 
extern  scaled secondwidth  ; 
extern  scaled firstindent  ; 
extern  scaled secondindent  ; 
extern  halfword bestbet  ; 
extern  integer fewestdemerits  ; 
extern  halfword bestline  ; 
extern  integer actuallooseness  ; 
extern  integer linediff  ; 
extern  halfword hc[66]  ; 
extern  smallnumber hn  ; 
extern  halfword ha, hb  ; 
extern  internalfontnumber hf  ; 
extern  ASCIIcode hu[64]  ; 
extern  integer hyfchar  ; 
extern  schar hyf[65]  ; 
extern  smallnumber hyphenpassed  ; 
extern  twohalves trie[8000  + 1]  ; 
extern  smallnumber hyfdistance[256]  ; 
extern  smallnumber hyfnum[256]  ; 
extern  quarterword hyfnext[256]  ; 
extern  strnumber hyphword[308]  ; 
extern  halfword hyphlist[308]  ; 
extern  hyphpointer hyphcount  ; 
extern  quarterword trieopptr  ; 
extern  triepointer triemax  ; 
extern  scaled bestheightplusdepth  ; 
extern  halfword pagetail  ; 
extern  schar pagecontents  ; 
extern  scaled pagemaxdepth  ; 
extern  halfword bestpagebreak  ; 
extern  integer leastpagecost  ; 
extern  scaled bestsize  ; 
extern  scaled pagesofar[8]  ; 
extern  halfword lastglue  ; 
extern  integer lastpenalty  ; 
extern  scaled lastkern  ; 
extern  integer insertpenalties  ; 
extern  boolean outputactive  ; 
extern  halfword curbox  ; 
extern  halfword aftertoken  ; 
extern  boolean longhelpseen  ; 
extern  strnumber formatident  ; 
extern  wordfile fmtfile  ; 
extern  integer readyalready  ; 
extern  alphafile writefile[16]  ; 
extern  boolean writeopen[18]  ; 
extern  halfword writeloc  ; 
extern  poolpointer editnamestart  ; 
extern  integer editnamelength, editline, tfmtemp  ; 
boolean initterminal();
strnumber makestring();
boolean zstreqbuf();
boolean zstreqstr();
boolean getstringsstarted();
integer zhalf();
scaled zrounddecimals();
scaled znxplusy();
scaled zxovern();
scaled zxnoverd();
halfword zbadness();
halfword getavail();
halfword zgetnode();
halfword newnullbox();
halfword newrule();
halfword znewligature();
halfword newdisc();
halfword znewmath();
halfword znewspec();
halfword znewparamglue();
halfword znewglue();
halfword znewskipparam();
halfword znewkern();
halfword znewpenalty();
halfword zcopynodelist();
halfword zidlookup();
boolean zscankeyword();
halfword scanrulespec();
halfword strtoks();
halfword thetoks();
halfword zscantoks();
boolean zmorename();
strnumber makenamestring();
internalfontnumber zreadfontinfo();
halfword znewcharacter();
halfword zhpack();
halfword zvpackage();
halfword newnoad();
halfword znewstyle();
halfword newchoice();
halfword zfractionrule();
halfword zoverbar();
halfword zcharbox();
scaled zheightplusdepth();
halfword zvardelimiter();
halfword zrebox();
halfword zmathglue();
halfword zcleanbox();
scaled zmakeop();
smallnumber zmakeleftright();
boolean fincol();
halfword zfiniteshrink();
smallnumber zreconstitute();
quarterword znewtrieop();
triepointer ztrienode();
triepointer zcompresstrie();
halfword zprunepagetop();
halfword zvertbreak();
halfword zvsplit();
boolean privileged();
boolean itsallover();
halfword zfinmlist();
boolean openfmtfile();
boolean loadfmtfile();
zcharwarning ( f , c ) 
internalfontnumber f ; 
eightbits c ; 
{register memoryword *eqtb=zeqtb;  
  if ( eqtb [ 5302 ] .cint > 0 ) 
  {
    begindiagnostic () ; 
    zprintnl((strnumber)( 678 ))  ; 
    zprintASCII((integer)( c ))  ; 
    zprint((integer)( 679 ))  ; 
    zprint((integer)( fontname [ f ] ))  ; 
    zprintchar((ASCIIcode)( 33 ))  ; 
    zenddiagnostic((boolean)( 	0  ))  ; 
  } 
} 
halfword znewcharacter ( f , c ) 
internalfontnumber f ; 
eightbits c ; 
{  register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  if ( fontbc [ f ] <= c ) 
  if ( fontec [ f ] >= c ) 
  if ( ( fontinfo [ charbase [ f ] + c ] .qqqq .u.B0  > 0 ) ) 
  {
    p = getavail () ; 
    mem [ p ] .hh.u.B0  = f ; 
    mem [ p ] .hh.u.B1  = c ; 
    Result = p ; 
    return(Result) ; 
  } 
  zcharwarning((internalfontnumber)( f ),(eightbits)( c ))  ; 
  Result = 0 ; 
  return(Result) ; 
} 
dviswap () {
  if ( dvilimit == 16384  ) 
  {
    (void) write(((dvifile)->_file) , (char *) &dvibuf[ 0 ], (int)( halfbuf - 1 - 0 +1))  ; 
    dvilimit = halfbuf ; 
    dvioffset = dvioffset + 16384  ; 
    dviptr = 0 ; 
  } 
  else {
    (void) write(((dvifile)->_file) , (char *) &dvibuf[ halfbuf ], (int)( 16384  - 1 - halfbuf +1))  ; 
    dvilimit = 16384  ; 
  } 
  dvigone = dvigone + halfbuf ; 
} 
zdvifour ( x ) 
integer x ; 
{  
  if ( x >= 0 ) 
  {
    dvibuf [ dviptr ] = x / 16777216L ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  else {
    x = x + 1073741824L ; 
    x = x + 1073741824L ; 
    {
      dvibuf [ dviptr ] = ( x / 16777216L ) + 128 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
  } 
  x = x % 16777216L ; 
  {
    dvibuf [ dviptr ] = x / 65536L ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  x = x % 65536L ; 
  {
    dvibuf [ dviptr ] = x / 256 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {
    dvibuf [ dviptr ] = x % 256 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
} 
zdvipop ( l ) 
integer l ; 
{  
  if ( ( l == dvioffset + dviptr ) && ( dviptr > 0 ) ) 
  	--( dviptr )  ; 
  else {
    dvibuf [ dviptr ] = 142 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
} 
zdvifontdef ( f ) 
internalfontnumber f ; 
{  
  poolpointer k  ; 
  {
    dvibuf [ dviptr ] = 243 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {
    dvibuf [ dviptr ] = f - 1 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {
    dvibuf [ dviptr ] = fontcheck [ f ] .u.B0  ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {
    dvibuf [ dviptr ] = fontcheck [ f ] .u.B1  ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {
    dvibuf [ dviptr ] = fontcheck [ f ] .b2 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {
    dvibuf [ dviptr ] = fontcheck [ f ] .b3 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  zdvifour((integer)( fontsize [ f ] ))  ; 
  zdvifour((integer)( fontdsize [ f ] ))  ; 
  {
    dvibuf [ dviptr ] = ( strstart [ fontarea [ f ] + 1 ] - strstart [ 
    fontarea [ f ] ] ) ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {
    dvibuf [ dviptr ] = ( strstart [ fontname [ f ] + 1 ] - strstart [ 
    fontname [ f ] ] ) ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {register integer for_end; k = strstart [ fontarea [ f ] ] ; for_end = 
  strstart [ fontarea [ f ] + 1 ] - 1 ; if ( k <= for_end) do 
    {
      dvibuf [ dviptr ] = strpool [ k ] ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
  while ( k++ < for_end ) ; } 
  {register integer for_end; k = strstart [ fontname [ f ] ] ; for_end = 
  strstart [ fontname [ f ] + 1 ] - 1 ; if ( k <= for_end) do 
    {
      dvibuf [ dviptr ] = strpool [ k ] ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
  while ( k++ < for_end ) ; } 
} 
zmovement ( w , o ) 
scaled w ; 
eightbits o ; 
{  register memoryword *mem=(zzzaa - (int)(0 )) ;  
  smallnumber mstate  ; 
  halfword p, q  ; 
  integer k  ; 
  q = zgetnode((integer)( 3 ))  ; 
  mem [ q + 1 ] .cint = w ; 
  mem [ q + 2 ] .cint = dvioffset + dviptr ; 
  if ( o == 157 ) 
  {
    mem [ q ] .hh .v.RH = downptr ; 
    downptr = q ; 
  } 
  else {
    mem [ q ] .hh .v.RH = rightptr ; 
    rightptr = q ; 
  } 
  p = mem [ q ] .hh .v.RH ; 
  mstate = 0 ; 
  while ( p != 0 ) {
    if ( mem [ p + 1 ] .cint == w ) 
    switch ( mstate + mem [ p ] .hh .v.LH ) 
    {case 3 : 
    case 4 : 
    case 15 : 
    case 16 : 
      if ( mem [ p + 2 ] .cint < dvigone ) 
      goto lab45 ; 
      else {
	k = mem [ p + 2 ] .cint - dvioffset ; 
	if ( k < 0 ) 
	k = k + 16384  ; 
	dvibuf [ k ] = dvibuf [ k ] + 5 ; 
	mem [ p ] .hh .v.LH = 1 ; 
	goto lab40 ; 
      } 
      break ; 
    case 5 : 
    case 9 : 
    case 11 : 
      if ( mem [ p + 2 ] .cint < dvigone ) 
      goto lab45 ; 
      else {
	k = mem [ p + 2 ] .cint - dvioffset ; 
	if ( k < 0 ) 
	k = k + 16384  ; 
	dvibuf [ k ] = dvibuf [ k ] + 10 ; 
	mem [ p ] .hh .v.LH = 2 ; 
	goto lab40 ; 
      } 
      break ; 
    case 1 : 
    case 2 : 
    case 8 : 
    case 13 : 
      goto lab40 ; 
      break ; 
      default: 
      ; 
      break ; 
    } 
    else switch ( mstate + mem [ p ] .hh .v.LH ) 
    {case 1 : 
      mstate = 6 ; 
      break ; 
    case 2 : 
      mstate = 12 ; 
      break ; 
    case 8 : 
    case 13 : 
      goto lab45 ; 
      break ; 
      default: 
      ; 
      break ; 
    } 
    p = mem [ p ] .hh .v.RH ; 
  } 
  lab45: ; 
  mem [ q ] .hh .v.LH = 3 ; 
  if ( 	(( w >=0)?( w ):(-( w )))  >= 8388608L ) 
  {
    {
      dvibuf [ dviptr ] = o + 3 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    zdvifour((integer)( w ))  ; 
    return ; 
  } 
  if ( 	(( w >=0)?( w ):(-( w )))  >= 32768L ) 
  {
    {
      dvibuf [ dviptr ] = o + 2 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    if ( w < 0 ) 
    w = w + 16777216L ; 
    {
      dvibuf [ dviptr ] = w / 65536L ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    w = w % 65536L ; 
    goto lab2 ; 
  } 
  if ( 	(( w >=0)?( w ):(-( w )))  >= 128 ) 
  {
    {
      dvibuf [ dviptr ] = o + 1 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    if ( w < 0 ) 
    w = w + 65536L ; 
    goto lab2 ; 
  } 
  {
    dvibuf [ dviptr ] = o ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  if ( w < 0 ) 
  w = w + 256 ; 
  goto lab1 ; 
  lab2: {
    dvibuf [ dviptr ] = w / 256 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  lab1: {
    dvibuf [ dviptr ] = w % 256 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  return ; 
  lab40: mem [ q ] .hh .v.LH = mem [ p ] .hh .v.LH ; 
  if ( mem [ q ] .hh .v.LH == 1 ) 
  {
    {
      dvibuf [ dviptr ] = o + 4 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    while ( mem [ q ] .hh .v.RH != p ) {
      q = mem [ q ] .hh .v.RH ; 
      switch ( mem [ q ] .hh .v.LH ) 
      {case 3 : 
	mem [ q ] .hh .v.LH = 5 ; 
	break ; 
      case 4 : 
	mem [ q ] .hh .v.LH = 6 ; 
	break ; 
	default: 
	; 
	break ; 
      } 
    } 
  } 
  else {
    {
      dvibuf [ dviptr ] = o + 9 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    while ( mem [ q ] .hh .v.RH != p ) {
      q = mem [ q ] .hh .v.RH ; 
      switch ( mem [ q ] .hh .v.LH ) 
      {case 3 : 
	mem [ q ] .hh .v.LH = 4 ; 
	break ; 
      case 5 : 
	mem [ q ] .hh .v.LH = 6 ; 
	break ; 
	default: 
	; 
	break ; 
      } 
    } 
  } 
} 
zprunemovements ( l ) 
integer l ; 
{  register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  while ( downptr != 0 ) {
    if ( mem [ downptr + 2 ] .cint < l ) 
    goto lab30 ; 
    p = downptr ; 
    downptr = mem [ p ] .hh .v.RH ; 
    zfreenode((halfword)( p ),(halfword)( 3 ))  ; 
  } 
  lab30: while ( rightptr != 0 ) {
    if ( mem [ rightptr + 2 ] .cint < l ) 
    return ; 
    p = rightptr ; 
    rightptr = mem [ p ] .hh .v.RH ; 
    zfreenode((halfword)( p ),(halfword)( 3 ))  ; 
  } 
} 
zspecialout ( p ) 
halfword p ; 
{register memoryword *mem=(zzzaa - (int)(0 )) ;  
  schar oldsetting  ; 
  poolpointer k  ; 
  if ( curh != dvih ) 
  {
    zmovement((scaled)( curh - dvih ),(eightbits)( 143 ))  ; 
    dvih = curh ; 
  } 
  if ( curv != dviv ) 
  {
    zmovement((scaled)( curv - dviv ),(eightbits)( 157 ))  ; 
    dviv = curv ; 
  } 
  oldsetting = selector ; 
  selector = 21 ; 
  zshowtokenlist((integer)( mem [ mem [ p + 1 ] .hh .v.RH ] .hh .v.RH ),(integer)( 0 ),(integer)( 32000L  - 
  poolptr ))  ; 
  selector = oldsetting ; 
  {
    if ( poolptr + 1 > 32000L  ) 
    zoverflow((strnumber)( 128 ),(integer)( 32000L  - initpoolptr ))  ; 
  } 
  if ( ( poolptr - strstart [ strptr ] ) < 256 ) 
  {
    {
      dvibuf [ dviptr ] = 239 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    {
      dvibuf [ dviptr ] = ( poolptr - strstart [ strptr ] ) ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
  } 
  else {
    {
      dvibuf [ dviptr ] = 242 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    zdvifour((integer)( ( poolptr - strstart [ strptr ] ) ))  ; 
  } 
  {register integer for_end; k = strstart [ strptr ] ; for_end = poolptr - 1 
  ; if ( k <= for_end) do 
    {
      dvibuf [ dviptr ] = strpool [ k ] ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
  while ( k++ < for_end ) ; } 
  poolptr = strstart [ strptr ] ; 
} 
zwriteout ( p ) 
halfword p ; 
{register memoryword *mem=(zzzaa - (int)(0 )) ;  
  schar oldsetting  ; 
  integer oldmode  ; 
  smallnumber j  ; 
  halfword q, r  ; 
  q = getavail () ; 
  mem [ q ] .hh .v.LH = 637 ; 
  r = getavail () ; 
  mem [ q ] .hh .v.RH = r ; 
  mem [ r ] .hh .v.LH = 7362 ; 
  zbegintokenlist((halfword)( q ),(quarterword)( 4 ))  ; 
  zbegintokenlist((halfword)( mem [ p + 1 ] .hh .v.RH ),(quarterword)( 15 ))  ; 
  q = getavail () ; 
  mem [ q ] .hh .v.LH = 379 ; 
  zbegintokenlist((halfword)( q ),(quarterword)( 4 ))  ; 
  oldmode = curlist .modefield ; 
  curlist .modefield = 0 ; 
  curcs = writeloc ; 
  q = zscantoks((boolean)( 	0  ),(boolean)( 	1  ))  ; 
  gettoken () ; 
  if ( curtok != 7362 ) 
  {
    {
      if ( interaction == 3 ) 
      wakeupterminal () ; 
      zprintnl((strnumber)( 133 ))  ; 
      zprint((integer)( 1139 ))  ; 
    } 
    {
      helpptr = 2 ; 
      helpline [ 1 ] = 1140 ; 
      helpline [ 0 ] = 860 ; 
    } 
    error () ; 
    do {
	gettoken () ; 
    } while ( ! ( curtok == 7362 ) ) ; 
  } 
  curlist .modefield = oldmode ; 
  endtokenlist () ; 
  oldsetting = selector ; 
  j = mem [ p + 1 ] .hh .v.LH ; 
  if ( writeopen [ j ] ) 
  selector = j ; 
  else {
    if ( ( j == 17 ) && ( selector == 19 ) ) 
    selector = 18 ; 
    zprintnl((strnumber)( 206 ))  ; 
  } 
  zshowtokenlist((integer)( mem [ defref ] .hh .v.RH ),(integer)( 0 ),(integer)( 10000000L ))  ; 
  println () ; 
  zflushlist((halfword)( defref ))  ; 
  selector = oldsetting ; 
} 
zoutwhat ( p ) 
halfword p ; 
{register memoryword *mem=(zzzaa - (int)(0 )) ;  
  smallnumber j  ; 
  switch ( mem [ p ] .hh.u.B1  ) 
  {case 0 : 
  case 1 : 
  case 2 : 
    if ( ! doingleaders ) 
    {
      j = mem [ p + 1 ] .hh .v.LH ; 
      if ( mem [ p ] .hh.u.B1  == 1 ) 
      zwriteout((halfword)( p ))  ; 
      else {
	if ( writeopen [ j ] ) 
	if ( writefile [ j ] ) (void) fclose( writefile [ j ] )  ; 
	if ( mem [ p ] .hh.u.B1  == 2 ) 
	writeopen [ j ] = 	0  ; 
	else if ( j < 16 ) 
	{
	  curname = mem [ p + 1 ] .hh .v.RH ; 
	  curarea = mem [ p + 2 ] .hh .v.LH ; 
	  curext = mem [ p + 2 ] .hh .v.RH ; 
	  if ( curext == 206 ) 
	  curext = 644 ; 
	  zpackfilename((strnumber)( curname ),(strnumber)( curarea ),(strnumber)( curext ))  ; 
	  while ( ! Openout(&( writefile [ j ] ))  ) zpromptfilename((strnumber)( 1142 ),(strnumber)( 644 
	  ))  ; 
	  writeopen [ j ] = 	1  ; 
	} 
      } 
    } 
    break ; 
  case 3 : 
    zspecialout((halfword)( p ))  ; 
    break ; 
    default: 
    zconfusion((strnumber)( 1141 ))  ; 
    break ; 
  } 
} 
hlistout () {
      register memoryword *mem=(zzzaa - (int)(0 )) ;  
  scaled baseline  ; 
  scaled leftedge  ; 
  scaled saveh, savev  ; 
  halfword thisbox  ; 
  glueord gorder  ; 
  schar gsign  ; 
  halfword p  ; 
  integer saveloc  ; 
  halfword leaderbox  ; 
  scaled leaderwd  ; 
  scaled lx  ; 
  boolean outerdoingleaders  ; 
  scaled edge  ; 
  thisbox = tempptr ; 
  gorder = mem [ thisbox + 5 ] .hh.u.B1  ; 
  gsign = mem [ thisbox + 5 ] .hh.u.B0  ; 
  p = mem [ thisbox + 5 ] .hh .v.RH ; 
  	++( curs )  ; 
  if ( curs > 0 ) 
  {
    dvibuf [ dviptr ] = 141 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  if ( curs > maxpush ) 
  maxpush = curs ; 
  saveloc = dvioffset + dviptr ; 
  baseline = curv ; 
  leftedge = curh ; 
  while ( p != 0 ) lab21: if ( ( p >= himemmin ) ) 
  {
    if ( curh != dvih ) 
    {
      zmovement((scaled)( curh - dvih ),(eightbits)( 143 ))  ; 
      dvih = curh ; 
    } 
    if ( curv != dviv ) 
    {
      zmovement((scaled)( curv - dviv ),(eightbits)( 157 ))  ; 
      dviv = curv ; 
    } 
    do {
	f = mem [ p ] .hh.u.B0  ; 
      c = mem [ p ] .hh.u.B1  ; 
      if ( f != dvif ) 
      {
	if ( ! fontused [ f ] ) 
	{
	  zdvifontdef((internalfontnumber)( f ))  ; 
	  fontused [ f ] = 	1  ; 
	} 
	if ( f <= 64 ) 
	{
	  dvibuf [ dviptr ] = f + 170 ; 
	  	++( dviptr )  ; 
	  if ( dviptr == dvilimit ) 
	  dviswap () ; 
	} 
	else {
	  {
	    dvibuf [ dviptr ] = 235 ; 
	    	++( dviptr )  ; 
	    if ( dviptr == dvilimit ) 
	    dviswap () ; 
	  } 
	  {
	    dvibuf [ dviptr ] = f - 1 ; 
	    	++( dviptr )  ; 
	    if ( dviptr == dvilimit ) 
	    dviswap () ; 
	  } 
	} 
	dvif = f ; 
      } 
      if ( c >= 128 ) 
      {
	dvibuf [ dviptr ] = 128 ; 
		++( dviptr )  ; 
	if ( dviptr == dvilimit ) 
	dviswap () ; 
      } 
      {
	dvibuf [ dviptr ] = c ; 
		++( dviptr )  ; 
	if ( dviptr == dvilimit ) 
	dviswap () ; 
      } 
      curh = curh + fontinfo [ widthbase [ f ] + fontinfo [ charbase [ f ] + c 
      ] .qqqq .u.B0  ] .cint ; 
      p = mem [ p ] .hh .v.RH ; 
    } while ( ! ( ! ( p >= himemmin ) ) ) ; 
    dvih = curh ; 
  } 
  else {
    switch ( mem [ p ] .hh.u.B0  ) 
    {case 0 : 
    case 1 : 
      if ( mem [ p + 5 ] .hh .v.RH == 0 ) 
      curh = curh + mem [ p + 1 ] .cint ; 
      else {
	saveh = dvih ; 
	savev = dviv ; 
	curv = baseline + mem [ p + 4 ] .cint ; 
	tempptr = p ; 
	edge = curh ; 
	if ( mem [ p ] .hh.u.B0  == 1 ) 
	vlistout () ; 
	else hlistout () ; 
	dvih = saveh ; 
	dviv = savev ; 
	curh = edge + mem [ p + 1 ] .cint ; 
	curv = baseline ; 
      } 
      break ; 
    case 2 : 
      {
	ruleht = mem [ p + 3 ] .cint ; 
	ruledp = mem [ p + 2 ] .cint ; 
	rulewd = mem [ p + 1 ] .cint ; 
	goto lab14 ; 
      } 
      break ; 
    case 8 : 
      zoutwhat((halfword)( p ))  ; 
      break ; 
    case 10 : 
      {
	g = mem [ p + 1 ] .hh .v.LH ; 
	rulewd = mem [ g + 1 ] .cint ; 
	if ( gsign != 0 ) 
	{
	  if ( gsign == 1 ) 
	  {
	    if ( mem [ g ] .hh.u.B0  == gorder ) 
	    rulewd = rulewd + ((integer) ( mem [ thisbox + 6 ] .gr * mem [ g + 2 ] 
	    .cint  + 0.5))   ; 
	  } 
	  else {
	    if ( mem [ g ] .hh.u.B1  == gorder ) 
	    rulewd = rulewd - ((integer) ( mem [ thisbox + 6 ] .gr * mem [ g + 3 ] 
	    .cint  + 0.5))   ; 
	  } 
	} 
	if ( mem [ p ] .hh.u.B1  >= 100 ) 
	{
	  leaderbox = mem [ p + 1 ] .hh .v.RH ; 
	  if ( mem [ leaderbox ] .hh.u.B0  == 2 ) 
	  {
	    ruleht = mem [ leaderbox + 3 ] .cint ; 
	    ruledp = mem [ leaderbox + 2 ] .cint ; 
	    goto lab14 ; 
	  } 
	  leaderwd = mem [ leaderbox + 1 ] .cint ; 
	  if ( ( leaderwd > 0 ) && ( rulewd > 0 ) ) 
	  {
	    rulewd = rulewd + 10 ; 
	    edge = curh + rulewd ; 
	    lx = 0 ; 
	    if ( mem [ p ] .hh.u.B1  == 100 ) 
	    {
	      saveh = curh ; 
	      curh = leftedge + leaderwd * ( ( curh - leftedge ) / leaderwd ) 
	      ; 
	      if ( curh < saveh ) 
	      curh = curh + leaderwd ; 
	    } 
	    else {
	      lq = rulewd / leaderwd ; 
	      lr = rulewd % leaderwd ; 
	      if ( mem [ p ] .hh.u.B1  == 101 ) 
	      curh = curh + ( lr / 2 ) ; 
	      else {
		lx = ( 2 * lr + lq + 1 ) / ( 2 * lq + 2 ) ; 
		curh = curh + ( ( lr - ( lq - 1 ) * lx ) / 2 ) ; 
	      } 
	    } 
	    while ( curh + leaderwd <= edge ) {
	      curv = baseline + mem [ leaderbox + 4 ] .cint ; 
	      if ( curv != dviv ) 
	      {
		zmovement((scaled)( curv - dviv ),(eightbits)( 157 ))  ; 
		dviv = curv ; 
	      } 
	      savev = dviv ; 
	      if ( curh != dvih ) 
	      {
		zmovement((scaled)( curh - dvih ),(eightbits)( 143 ))  ; 
		dvih = curh ; 
	      } 
	      saveh = dvih ; 
	      tempptr = leaderbox ; 
	      outerdoingleaders = doingleaders ; 
	      doingleaders = 	1  ; 
	      if ( mem [ leaderbox ] .hh.u.B0  == 1 ) 
	      vlistout () ; 
	      else hlistout () ; 
	      doingleaders = outerdoingleaders ; 
	      dviv = savev ; 
	      dvih = saveh ; 
	      curv = savev ; 
	      curh = saveh + leaderwd + lx ; 
	    } 
	    curh = edge - 10 ; 
	    goto lab15 ; 
	  } 
	} 
	goto lab13 ; 
      } 
      break ; 
    case 11 : 
    case 9 : 
      curh = curh + mem [ p + 1 ] .cint ; 
      break ; 
    case 6 : 
      {
	mem [ 2999L  - 12 ] = mem [ p + 1 ] ; 
	mem [ 2999L  - 12 ] .hh .v.RH = mem [ p ] .hh .v.RH ; 
	p = 2999L  - 12 ; 
	goto lab21 ; 
      } 
      break ; 
      default: 
      ; 
      break ; 
    } 
    goto lab15 ; 
    lab14: if ( ( ruleht == -1073741824L ) ) 
    ruleht = mem [ thisbox + 3 ] .cint ; 
    if ( ( ruledp == -1073741824L ) ) 
    ruledp = mem [ thisbox + 2 ] .cint ; 
    ruleht = ruleht + ruledp ; 
    if ( ( ruleht > 0 ) && ( rulewd > 0 ) ) 
    {
      if ( curh != dvih ) 
      {
	zmovement((scaled)( curh - dvih ),(eightbits)( 143 ))  ; 
	dvih = curh ; 
      } 
      curv = baseline + ruledp ; 
      if ( curv != dviv ) 
      {
	zmovement((scaled)( curv - dviv ),(eightbits)( 157 ))  ; 
	dviv = curv ; 
      } 
      {
	dvibuf [ dviptr ] = 132 ; 
		++( dviptr )  ; 
	if ( dviptr == dvilimit ) 
	dviswap () ; 
      } 
      zdvifour((integer)( ruleht ))  ; 
      zdvifour((integer)( rulewd ))  ; 
      curv = baseline ; 
      dvih = dvih + rulewd ; 
    } 
    lab13: curh = curh + rulewd ; 
    lab15: p = mem [ p ] .hh .v.RH ; 
  } 
  zprunemovements((integer)( saveloc ))  ; 
  if ( curs > 0 ) 
  zdvipop((integer)( saveloc ))  ; 
  	--( curs )  ; 
} 
vlistout () {
      register memoryword *mem=(zzzaa - (int)(0 )) ;  
  scaled leftedge  ; 
  scaled topedge  ; 
  scaled saveh, savev  ; 
  halfword thisbox  ; 
  glueord gorder  ; 
  schar gsign  ; 
  halfword p  ; 
  integer saveloc  ; 
  halfword leaderbox  ; 
  scaled leaderht  ; 
  scaled lx  ; 
  boolean outerdoingleaders  ; 
  scaled edge  ; 
  thisbox = tempptr ; 
  gorder = mem [ thisbox + 5 ] .hh.u.B1  ; 
  gsign = mem [ thisbox + 5 ] .hh.u.B0  ; 
  p = mem [ thisbox + 5 ] .hh .v.RH ; 
  	++( curs )  ; 
  if ( curs > 0 ) 
  {
    dvibuf [ dviptr ] = 141 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  if ( curs > maxpush ) 
  maxpush = curs ; 
  saveloc = dvioffset + dviptr ; 
  leftedge = curh ; 
  curv = curv - mem [ thisbox + 3 ] .cint ; 
  topedge = curv ; 
  while ( p != 0 ) {
    if ( ( p >= himemmin ) ) 
    zconfusion((strnumber)( 681 ))  ; 
    else {
      switch ( mem [ p ] .hh.u.B0  ) 
      {case 0 : 
      case 1 : 
	if ( mem [ p + 5 ] .hh .v.RH == 0 ) 
	curv = curv + mem [ p + 3 ] .cint + mem [ p + 2 ] .cint ; 
	else {
	  curv = curv + mem [ p + 3 ] .cint ; 
	  if ( curv != dviv ) 
	  {
	    zmovement((scaled)( curv - dviv ),(eightbits)( 157 ))  ; 
	    dviv = curv ; 
	  } 
	  saveh = dvih ; 
	  savev = dviv ; 
	  curh = leftedge + mem [ p + 4 ] .cint ; 
	  tempptr = p ; 
	  if ( mem [ p ] .hh.u.B0  == 1 ) 
	  vlistout () ; 
	  else hlistout () ; 
	  dvih = saveh ; 
	  dviv = savev ; 
	  curv = savev + mem [ p + 2 ] .cint ; 
	  curh = leftedge ; 
	} 
	break ; 
      case 2 : 
	{
	  ruleht = mem [ p + 3 ] .cint ; 
	  ruledp = mem [ p + 2 ] .cint ; 
	  rulewd = mem [ p + 1 ] .cint ; 
	  goto lab14 ; 
	} 
	break ; 
      case 8 : 
	zoutwhat((halfword)( p ))  ; 
	break ; 
      case 10 : 
	{
	  g = mem [ p + 1 ] .hh .v.LH ; 
	  ruleht = mem [ g + 1 ] .cint ; 
	  if ( gsign != 0 ) 
	  {
	    if ( gsign == 1 ) 
	    {
	      if ( mem [ g ] .hh.u.B0  == gorder ) 
	      ruleht = ruleht + ((integer) ( mem [ thisbox + 6 ] .gr * mem [ g + 2 
	      ] .cint  + 0.5))   ; 
	    } 
	    else {
	      if ( mem [ g ] .hh.u.B1  == gorder ) 
	      ruleht = ruleht - ((integer) ( mem [ thisbox + 6 ] .gr * mem [ g + 3 
	      ] .cint  + 0.5))   ; 
	    } 
	  } 
	  if ( mem [ p ] .hh.u.B1  >= 100 ) 
	  {
	    leaderbox = mem [ p + 1 ] .hh .v.RH ; 
	    if ( mem [ leaderbox ] .hh.u.B0  == 2 ) 
	    {
	      rulewd = mem [ leaderbox + 1 ] .cint ; 
	      ruledp = 0 ; 
	      goto lab14 ; 
	    } 
	    leaderht = mem [ leaderbox + 3 ] .cint + mem [ leaderbox + 2 ] 
	    .cint ; 
	    if ( ( leaderht > 0 ) && ( ruleht > 0 ) ) 
	    {
	      ruleht = ruleht + 10 ; 
	      edge = curv + ruleht ; 
	      lx = 0 ; 
	      if ( mem [ p ] .hh.u.B1  == 100 ) 
	      {
		savev = curv ; 
		curv = topedge + leaderht * ( ( curv - topedge ) / leaderht ) 
		; 
		if ( curv < savev ) 
		curv = curv + leaderht ; 
	      } 
	      else {
		lq = ruleht / leaderht ; 
		lr = ruleht % leaderht ; 
		if ( mem [ p ] .hh.u.B1  == 101 ) 
		curv = curv + ( lr / 2 ) ; 
		else {
		  lx = ( 2 * lr + lq + 1 ) / ( 2 * lq + 2 ) ; 
		  curv = curv + ( ( lr - ( lq - 1 ) * lx ) / 2 ) ; 
		} 
	      } 
	      while ( curv + leaderht <= edge ) {
		curh = leftedge + mem [ leaderbox + 4 ] .cint ; 
		if ( curh != dvih ) 
		{
		  zmovement((scaled)( curh - dvih ),(eightbits)( 143 ))  ; 
		  dvih = curh ; 
		} 
		saveh = dvih ; 
		curv = curv + mem [ leaderbox + 3 ] .cint ; 
		if ( curv != dviv ) 
		{
		  zmovement((scaled)( curv - dviv ),(eightbits)( 157 ))  ; 
		  dviv = curv ; 
		} 
		savev = dviv ; 
		tempptr = leaderbox ; 
		outerdoingleaders = doingleaders ; 
		doingleaders = 	1  ; 
		if ( mem [ leaderbox ] .hh.u.B0  == 1 ) 
		vlistout () ; 
		else hlistout () ; 
		doingleaders = outerdoingleaders ; 
		dviv = savev ; 
		dvih = saveh ; 
		curh = saveh ; 
		curv = savev - mem [ leaderbox + 3 ] .cint + leaderht + lx ; 
	      } 
	      curv = edge - 10 ; 
	      goto lab15 ; 
	    } 
	  } 
	  goto lab13 ; 
	} 
	break ; 
      case 11 : 
	curv = curv + mem [ p + 1 ] .cint ; 
	break ; 
	default: 
	; 
	break ; 
      } 
      goto lab15 ; 
      lab14: if ( ( rulewd == -1073741824L ) ) 
      rulewd = mem [ thisbox + 1 ] .cint ; 
      ruleht = ruleht + ruledp ; 
      curv = curv + ruleht ; 
      if ( ( ruleht > 0 ) && ( rulewd > 0 ) ) 
      {
	if ( curh != dvih ) 
	{
	  zmovement((scaled)( curh - dvih ),(eightbits)( 143 ))  ; 
	  dvih = curh ; 
	} 
	if ( curv != dviv ) 
	{
	  zmovement((scaled)( curv - dviv ),(eightbits)( 157 ))  ; 
	  dviv = curv ; 
	} 
	{
	  dvibuf [ dviptr ] = 137 ; 
	  	++( dviptr )  ; 
	  if ( dviptr == dvilimit ) 
	  dviswap () ; 
	} 
	zdvifour((integer)( ruleht ))  ; 
	zdvifour((integer)( rulewd ))  ; 
      } 
      goto lab15 ; 
      lab13: curv = curv + ruleht ; 
    } 
    lab15: p = mem [ p ] .hh .v.RH ; 
  } 
  zprunemovements((integer)( saveloc ))  ; 
  if ( curs > 0 ) 
  zdvipop((integer)( saveloc ))  ; 
  	--( curs )  ; 
} 
zshipout ( p ) 
halfword p ; 
{  register memoryword *mem=(zzzaa - (int)(0 )) , *eqtb=zeqtb;  
  integer pageloc  ; 
  schar j, k  ; 
  poolpointer s  ; 
  schar oldsetting  ; 
  if ( eqtb [ 5301 ] .cint > 0 ) 
  {
    zprintnl((strnumber)( 206 ))  ; 
    println () ; 
    zprint((integer)( 682 ))  ; 
  } 
  if ( termoffset > 72  - 9 ) 
  println () ; 
  else if ( ( termoffset > 0 ) || ( fileoffset > 0 ) ) 
  zprintchar((ASCIIcode)( 32 ))  ; 
  zprintchar((ASCIIcode)( 91 ))  ; 
  j = 9 ; 
  while ( ( eqtb [ 5317 + j ] .cint == 0 ) && ( j > 0 ) ) 	--( j )  ; 
  {register integer for_end; k = 0 ; for_end = j ; if ( k <= for_end) do 
    {
      zprintint((integer)( eqtb [ 5317 + k ] .cint ))  ; 
      if ( k < j ) 
      zprintchar((ASCIIcode)( 46 ))  ; 
    } 
  while ( k++ < for_end ) ; } 
  (void) fflush( (&_iob[1])  )  ; 
  if ( eqtb [ 5301 ] .cint > 0 ) 
  {
    zprintchar((ASCIIcode)( 93 ))  ; 
    begindiagnostic () ; 
    zshowbox((halfword)( p ))  ; 
    zenddiagnostic((boolean)( 	1  ))  ; 
  } 
  if ( ( mem [ p + 3 ] .cint > 1073741823L ) || ( mem [ p + 2 ] .cint > 
  1073741823L ) || ( mem [ p + 3 ] .cint + mem [ p + 2 ] .cint + eqtb [ 5720 ] 
  .cint > 1073741823L ) || ( mem [ p + 1 ] .cint + eqtb [ 5719 ] .cint > 
  1073741823L ) ) 
  {
    {
      if ( interaction == 3 ) 
      wakeupterminal () ; 
      zprintnl((strnumber)( 133 ))  ; 
      zprint((integer)( 686 ))  ; 
    } 
    {
      helpptr = 2 ; 
      helpline [ 1 ] = 687 ; 
      helpline [ 0 ] = 688 ; 
    } 
    error () ; 
    if ( eqtb [ 5301 ] .cint <= 0 ) 
    {
      begindiagnostic () ; 
      zprintnl((strnumber)( 689 ))  ; 
      zshowbox((halfword)( p ))  ; 
      zenddiagnostic((boolean)( 	1  ))  ; 
    } 
    goto lab30 ; 
  } 
  if ( mem [ p + 3 ] .cint + mem [ p + 2 ] .cint + eqtb [ 5720 ] .cint > maxv 
  ) 
  maxv = mem [ p + 3 ] .cint + mem [ p + 2 ] .cint + eqtb [ 5720 ] .cint ; 
  if ( mem [ p + 1 ] .cint + eqtb [ 5719 ] .cint > maxh ) 
  maxh = mem [ p + 1 ] .cint + eqtb [ 5719 ] .cint ; 
  dvih = 0 ; 
  dviv = 0 ; 
  curh = eqtb [ 5719 ] .cint ; 
  dvif = 0 ; 
  if ( outputfilename == 0 ) 
  {
    if ( jobname == 0 ) 
    openlogfile () ; 
    zpackjobname((strnumber)( 647 ))  ; 
    while ( ! Openout(&( dvifile ))  ) zpromptfilename((strnumber)( 648 ),(strnumber)( 647 ))  ; 
    outputfilename = makenamestring()  ; 
  } 
  if ( totalpages == 0 ) 
  {
    {
      dvibuf [ dviptr ] = 247 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    {
      dvibuf [ dviptr ] = 2 ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    zdvifour((integer)( 25400000L ))  ; 
    zdvifour((integer)( 473628672L ))  ; 
    preparemag () ; 
    zdvifour((integer)( eqtb [ 5284 ] .cint ))  ; 
    oldsetting = selector ; 
    selector = 21 ; 
    zprint((integer)( 680 ))  ; 
    zprintint((integer)( eqtb [ 5290 ] .cint ))  ; 
    zprintchar((ASCIIcode)( 46 ))  ; 
    zprinttwo((integer)( eqtb [ 5289 ] .cint ))  ; 
    zprintchar((ASCIIcode)( 46 ))  ; 
    zprinttwo((integer)( eqtb [ 5288 ] .cint ))  ; 
    zprintchar((ASCIIcode)( 58 ))  ; 
    zprinttwo((integer)( eqtb [ 5287 ] .cint / 60 ))  ; 
    zprinttwo((integer)( eqtb [ 5287 ] .cint % 60 ))  ; 
    selector = oldsetting ; 
    {
      dvibuf [ dviptr ] = ( poolptr - strstart [ strptr ] ) ; 
      	++( dviptr )  ; 
      if ( dviptr == dvilimit ) 
      dviswap () ; 
    } 
    {register integer for_end; s = strstart [ strptr ] ; for_end = poolptr - 
    1 ; if ( s <= for_end) do 
      {
	dvibuf [ dviptr ] = strpool [ s ] ; 
		++( dviptr )  ; 
	if ( dviptr == dvilimit ) 
	dviswap () ; 
      } 
    while ( s++ < for_end ) ; } 
    poolptr = strstart [ strptr ] ; 
  } 
  pageloc = dvioffset + dviptr ; 
  {
    dvibuf [ dviptr ] = 139 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  {register integer for_end; k = 0 ; for_end = 9 ; if ( k <= for_end) do 
    zdvifour((integer)( eqtb [ 5317 + k ] .cint ))  ; 
  while ( k++ < for_end ) ; } 
  zdvifour((integer)( lastbop ))  ; 
  lastbop = pageloc ; 
  curv = mem [ p + 3 ] .cint + eqtb [ 5720 ] .cint ; 
  tempptr = p ; 
  if ( mem [ p ] .hh.u.B0  == 1 ) 
  vlistout () ; 
  else hlistout () ; 
  {
    dvibuf [ dviptr ] = 140 ; 
    	++( dviptr )  ; 
    if ( dviptr == dvilimit ) 
    dviswap () ; 
  } 
  	++( totalpages )  ; 
  curs = -1 ; 
  lab30: ; 
  if ( eqtb [ 5301 ] .cint <= 0 ) 
  zprintchar((ASCIIcode)( 93 ))  ; 
  deadcycles = 0 ; 
  (void) fflush( (&_iob[1])  )  ; 
	;
  if ( eqtb [ 5298 ] .cint > 1 ) 
  {
    zprintnl((strnumber)( 683 ))  ; 
    zprintint((integer)( varused ))  ; 
    zprintchar((ASCIIcode)( 38 ))  ; 
    zprintint((integer)( dynused ))  ; 
    zprintchar((ASCIIcode)( 59 ))  ; 
  } 
  zflushnodelist((halfword)( p ))  ; 
	;
  if ( eqtb [ 5298 ] .cint > 1 ) 
  {
    zprint((integer)( 684 ))  ; 
    zprintint((integer)( varused ))  ; 
    zprintchar((ASCIIcode)( 38 ))  ; 
    zprintint((integer)( dynused ))  ; 
    zprint((integer)( 685 ))  ; 
    zprintint((integer)( himemmin - lomemmax - 1 ))  ; 
    println () ; 
  } 
} 
scanspec () {
  if ( zscankeyword((strnumber)( 695 ))  ) 
  savestack [ saveptr + 0 ] .cint = 0 ; 
  else if ( zscankeyword((strnumber)( 696 ))  ) 
  savestack [ saveptr + 0 ] .cint = 1 ; 
  else {
    savestack [ saveptr + 0 ] .cint = 1 ; 
    savestack [ saveptr + 1 ] .cint = 0 ; 
    goto lab40 ; 
  } 
  zscandimen((boolean)( 	0  ),(boolean)( 	0  ),(boolean)( 	0  ))  ; 
  savestack [ saveptr + 1 ] .cint = curval ; 
  lab40: saveptr = saveptr + 2 ; 
  scanleftbrace () ; 
} 
halfword zhpack ( p , w , m ) 
halfword p ; 
scaled w ; 
smallnumber m ; 
{  register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) , *eqtb=zeqtb;  
  halfword r  ; 
  halfword q  ; 
  scaled h, d, x  ; 
  scaled s  ; 
  halfword g  ; 
  glueord o  ; 
  internalfontnumber f  ; 
  fourquarters i  ; 
  eightbits hd  ; 
  integer b  ; 
  r = zgetnode((integer)( 7 ))  ; 
  mem [ r ] .hh.u.B0  = 0 ; 
  mem [ r ] .hh.u.B1  = 0 ; 
  mem [ r + 4 ] .cint = 0 ; 
  q = r + 5 ; 
  mem [ q ] .hh .v.RH = p ; 
  h = 0 ; 
  d = 0 ; 
  x = 0 ; 
  totalstretch [ 0 ] = 0 ; 
  totalshrink [ 0 ] = 0 ; 
  totalstretch [ 1 ] = 0 ; 
  totalshrink [ 1 ] = 0 ; 
  totalstretch [ 2 ] = 0 ; 
  totalshrink [ 2 ] = 0 ; 
  totalstretch [ 3 ] = 0 ; 
  totalshrink [ 3 ] = 0 ; 
  while ( p != 0 ) {
    lab21: while ( ( p >= himemmin ) ) {
      f = mem [ p ] .hh.u.B0  ; 
      i = fontinfo [ charbase [ f ] + mem [ p ] .hh.u.B1  ] .qqqq ; 
      hd = i .u.B1  ; 
      x = x + fontinfo [ widthbase [ f ] + i .u.B0  ] .cint ; 
      s = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint ; 
      if ( s > h ) 
      h = s ; 
      s = fontinfo [ depthbase [ f ] + ( hd ) % 16 ] .cint ; 
      if ( s > d ) 
      d = s ; 
      p = mem [ p ] .hh .v.RH ; 
    } 
    if ( p != 0 ) 
    {
      switch ( mem [ p ] .hh.u.B0  ) 
      {case 0 : 
      case 1 : 
      case 2 : 
      case 13 : 
	{
	  x = x + mem [ p + 1 ] .cint ; 
	  if ( mem [ p ] .hh.u.B0  >= 2 ) 
	  s = 0 ; 
	  else s = mem [ p + 4 ] .cint ; 
	  if ( mem [ p + 3 ] .cint - s > h ) 
	  h = mem [ p + 3 ] .cint - s ; 
	  if ( mem [ p + 2 ] .cint + s > d ) 
	  d = mem [ p + 2 ] .cint + s ; 
	} 
	break ; 
      case 3 : 
      case 4 : 
      case 5 : 
	if ( adjusttail != 0 ) 
	{
	  while ( mem [ q ] .hh .v.RH != p ) q = mem [ q ] .hh .v.RH ; 
	  if ( mem [ p ] .hh.u.B0  == 5 ) 
	  {
	    mem [ adjusttail ] .hh .v.RH = mem [ p + 1 ] .cint ; 
	    while ( mem [ adjusttail ] .hh .v.RH != 0 ) adjusttail = mem [ 
	    adjusttail ] .hh .v.RH ; 
	    p = mem [ p ] .hh .v.RH ; 
	    zfreenode((halfword)( mem [ q ] .hh .v.RH ),(halfword)( 2 ))  ; 
	  } 
	  else {
	    mem [ adjusttail ] .hh .v.RH = p ; 
	    adjusttail = p ; 
	    p = mem [ p ] .hh .v.RH ; 
	  } 
	  mem [ q ] .hh .v.RH = p ; 
	  p = q ; 
	} 
	break ; 
      case 8 : 
	; 
	break ; 
      case 10 : 
	{
	  g = mem [ p + 1 ] .hh .v.LH ; 
	  x = x + mem [ g + 1 ] .cint ; 
	  o = mem [ g ] .hh.u.B0  ; 
	  totalstretch [ o ] = totalstretch [ o ] + mem [ g + 2 ] .cint ; 
	  o = mem [ g ] .hh.u.B1  ; 
	  totalshrink [ o ] = totalshrink [ o ] + mem [ g + 3 ] .cint ; 
	  if ( mem [ p ] .hh.u.B1  >= 100 ) 
	  {
	    g = mem [ p + 1 ] .hh .v.RH ; 
	    if ( mem [ g + 3 ] .cint > h ) 
	    h = mem [ g + 3 ] .cint ; 
	    if ( mem [ g + 2 ] .cint > d ) 
	    d = mem [ g + 2 ] .cint ; 
	  } 
	} 
	break ; 
      case 11 : 
      case 9 : 
	x = x + mem [ p + 1 ] .cint ; 
	break ; 
      case 6 : 
	{
	  mem [ 2999L  - 12 ] = mem [ p + 1 ] ; 
	  mem [ 2999L  - 12 ] .hh .v.RH = mem [ p ] .hh .v.RH ; 
	  p = 2999L  - 12 ; 
	  goto lab21 ; 
	} 
	break ; 
	default: 
	; 
	break ; 
      } 
      p = mem [ p ] .hh .v.RH ; 
    } 
  } 
  if ( adjusttail != 0 ) 
  mem [ adjusttail ] .hh .v.RH = 0 ; 
  mem [ r + 3 ] .cint = h ; 
  mem [ r + 2 ] .cint = d ; 
  if ( m == 1 ) 
  w = x + w ; 
  mem [ r + 1 ] .cint = w ; 
  x = w - x ; 
  if ( x == 0 ) 
  {
    mem [ r + 5 ] .hh.u.B0  = 0 ; 
    mem [ r + 5 ] .hh.u.B1  = 0 ; 
    mem [ r + 6 ] .gr = 0.0 ; 
    goto lab10 ; 
  } 
  else if ( x > 0 ) 
  {
    if ( totalstretch [ 3 ] != 0 ) 
    o = 3 ; 
    else if ( totalstretch [ 2 ] != 0 ) 
    o = 2 ; 
    else if ( totalstretch [ 1 ] != 0 ) 
    o = 1 ; 
    else o = 0 ; 
    mem [ r + 5 ] .hh.u.B1  = o ; 
    mem [ r + 5 ] .hh.u.B0  = 1 ; 
    if ( totalstretch [ o ] != 0 ) 
    mem [ r + 6 ] .gr = x / ((double) totalstretch [ o ] ) ; 
    else {
      mem [ r + 5 ] .hh.u.B0  = 0 ; 
      mem [ r + 6 ] .gr = 0.0 ; 
    } 
    if ( ( eqtb [ 5293 ] .cint < 10000 ) && ( o == 0 ) && ( mem [ r + 5 ] .hh 
    .v.RH != 0 ) ) 
    {
      b = zbadness((scaled)( x ),(scaled)( totalstretch [ 0 ] ))  ; 
      if ( b > eqtb [ 5293 ] .cint ) 
      {
	println () ; 
	if ( b > 100 ) 
	zprintnl((strnumber)( 697 ))  ; 
	else zprintnl((strnumber)( 698 ))  ; 
	zprint((integer)( 699 ))  ; 
	zprintint((integer)( b ))  ; 
	goto lab50 ; 
      } 
    } 
    goto lab10 ; 
  } 
  else {
    if ( totalshrink [ 3 ] != 0 ) 
    o = 3 ; 
    else if ( totalshrink [ 2 ] != 0 ) 
    o = 2 ; 
    else if ( totalshrink [ 1 ] != 0 ) 
    o = 1 ; 
    else o = 0 ; 
    mem [ r + 5 ] .hh.u.B1  = o ; 
    mem [ r + 5 ] .hh.u.B0  = 2 ; 
    if ( totalshrink [ o ] != 0 ) 
    mem [ r + 6 ] .gr = ( - (integer) x ) / ((double) totalshrink [ o ] ) ; 
    else {
      mem [ r + 5 ] .hh.u.B0  = 0 ; 
      mem [ r + 6 ] .gr = 0.0 ; 
    } 
    if ( ( totalshrink [ o ] < - (integer) x ) && ( o == 0 ) && ( mem [ r + 5 
    ] .hh .v.RH != 0 ) ) 
    {
      mem [ r + 6 ] .gr = 1.0 ; 
      if ( ( - (integer) x - totalshrink [ 0 ] > eqtb [ 5709 ] .cint ) || ( 
      eqtb [ 5293 ] .cint < 100 ) ) 
      {
	if ( ( eqtb [ 5717 ] .cint > 0 ) && ( - (integer) x - totalshrink [ 0 
	] > eqtb [ 5709 ] .cint ) ) 
	{
	  while ( mem [ q ] .hh .v.RH != 0 ) q = mem [ q ] .hh .v.RH ; 
	  mem [ q ] .hh .v.RH = newrule () ; 
	  mem [ mem [ q ] .hh .v.RH + 1 ] .cint = eqtb [ 5717 ] .cint ; 
	} 
	println () ; 
	zprintnl((strnumber)( 705 ))  ; 
	zprintscaled((scaled)( - (integer) x - totalshrink [ 0 ] ))  ; 
	zprint((integer)( 706 ))  ; 
	goto lab50 ; 
      } 
    } 
    else if ( ( eqtb [ 5293 ] .cint < 100 ) && ( o == 0 ) && ( mem [ r + 5 ] 
    .hh .v.RH != 0 ) ) 
    {
      b = zbadness((scaled)( - (integer) x ),(scaled)( totalshrink [ 0 ] ))  ; 
      if ( b > eqtb [ 5293 ] .cint ) 
      {
	println () ; 
	zprintnl((strnumber)( 707 ))  ; 
	zprintint((integer)( b ))  ; 
	goto lab50 ; 
      } 
    } 
    goto lab10 ; 
  } 
  lab50: if ( outputactive ) 
  zprint((integer)( 700 ))  ; 
  else {
    if ( packbeginline != 0 ) 
    {
      if ( packbeginline > 0 ) 
      zprint((integer)( 701 ))  ; 
      else zprint((integer)( 702 ))  ; 
      zprintint((integer)( 	(( packbeginline >=0)?( packbeginline ):(-( packbeginline )))  ))  ; 
      zprint((integer)( 703 ))  ; 
    } 
    else zprint((integer)( 704 ))  ; 
    zprintint((integer)( line ))  ; 
  } 
  println () ; 
  fontinshortdisplay = 0 ; 
  zshortdisplay((integer)( mem [ r + 5 ] .hh .v.RH ))  ; 
  println () ; 
  begindiagnostic () ; 
  zshowbox((halfword)( r ))  ; 
  zenddiagnostic((boolean)( 	1  ))  ; 
  lab10: Result = r ; 
  return(Result) ; 
} 
halfword zvpackage ( p , h , m , l ) 
halfword p ; 
scaled h ; 
smallnumber m ; 
scaled l ; 
{  register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) , *eqtb=zeqtb;  
  halfword r  ; 
  scaled w, d, x  ; 
  scaled s  ; 
  halfword g  ; 
  glueord o  ; 
  integer b  ; 
  r = zgetnode((integer)( 7 ))  ; 
  mem [ r ] .hh.u.B0  = 1 ; 
  mem [ r ] .hh.u.B1  = 0 ; 
  mem [ r + 4 ] .cint = 0 ; 
  mem [ r + 5 ] .hh .v.RH = p ; 
  w = 0 ; 
  d = 0 ; 
  x = 0 ; 
  totalstretch [ 0 ] = 0 ; 
  totalshrink [ 0 ] = 0 ; 
  totalstretch [ 1 ] = 0 ; 
  totalshrink [ 1 ] = 0 ; 
  totalstretch [ 2 ] = 0 ; 
  totalshrink [ 2 ] = 0 ; 
  totalstretch [ 3 ] = 0 ; 
  totalshrink [ 3 ] = 0 ; 
  while ( p != 0 ) {
    if ( ( p >= himemmin ) ) 
    zconfusion((strnumber)( 708 ))  ; 
    else switch ( mem [ p ] .hh.u.B0  ) 
    {case 0 : 
    case 1 : 
    case 2 : 
    case 13 : 
      {
	x = x + d + mem [ p + 3 ] .cint ; 
	d = mem [ p + 2 ] .cint ; 
	if ( mem [ p ] .hh.u.B0  >= 2 ) 
	s = 0 ; 
	else s = mem [ p + 4 ] .cint ; 
	if ( mem [ p + 1 ] .cint + s > w ) 
	w = mem [ p + 1 ] .cint + s ; 
      } 
      break ; 
    case 8 : 
      ; 
      break ; 
    case 10 : 
      {
	x = x + d ; 
	d = 0 ; 
	g = mem [ p + 1 ] .hh .v.LH ; 
	x = x + mem [ g + 1 ] .cint ; 
	o = mem [ g ] .hh.u.B0  ; 
	totalstretch [ o ] = totalstretch [ o ] + mem [ g + 2 ] .cint ; 
	o = mem [ g ] .hh.u.B1  ; 
	totalshrink [ o ] = totalshrink [ o ] + mem [ g + 3 ] .cint ; 
	if ( mem [ p ] .hh.u.B1  >= 100 ) 
	{
	  g = mem [ p + 1 ] .hh .v.RH ; 
	  if ( mem [ g + 1 ] .cint > w ) 
	  w = mem [ g + 1 ] .cint ; 
	} 
      } 
      break ; 
    case 11 : 
      {
	x = x + d + mem [ p + 1 ] .cint ; 
	d = 0 ; 
      } 
      break ; 
      default: 
      ; 
      break ; 
    } 
    p = mem [ p ] .hh .v.RH ; 
  } 
  mem [ r + 1 ] .cint = w ; 
  if ( d > l ) 
  {
    x = x + d - l ; 
    mem [ r + 2 ] .cint = l ; 
  } 
  else mem [ r + 2 ] .cint = d ; 
  if ( m == 1 ) 
  h = x + h ; 
  mem [ r + 3 ] .cint = h ; 
  x = h - x ; 
  if ( x == 0 ) 
  {
    mem [ r + 5 ] .hh.u.B0  = 0 ; 
    mem [ r + 5 ] .hh.u.B1  = 0 ; 
    mem [ r + 6 ] .gr = 0.0 ; 
    goto lab10 ; 
  } 
  else if ( x > 0 ) 
  {
    if ( totalstretch [ 3 ] != 0 ) 
    o = 3 ; 
    else if ( totalstretch [ 2 ] != 0 ) 
    o = 2 ; 
    else if ( totalstretch [ 1 ] != 0 ) 
    o = 1 ; 
    else o = 0 ; 
    mem [ r + 5 ] .hh.u.B1  = o ; 
    mem [ r + 5 ] .hh.u.B0  = 1 ; 
    if ( totalstretch [ o ] != 0 ) 
    mem [ r + 6 ] .gr = x / ((double) totalstretch [ o ] ) ; 
    else {
      mem [ r + 5 ] .hh.u.B0  = 0 ; 
      mem [ r + 6 ] .gr = 0.0 ; 
    } 
    if ( ( eqtb [ 5294 ] .cint < 10000 ) && ( o == 0 ) && ( mem [ r + 5 ] .hh 
    .v.RH != 0 ) ) 
    {
      b = zbadness((scaled)( x ),(scaled)( totalstretch [ 0 ] ))  ; 
      if ( b > eqtb [ 5294 ] .cint ) 
      {
	println () ; 
	if ( b > 100 ) 
	zprintnl((strnumber)( 697 ))  ; 
	else zprintnl((strnumber)( 698 ))  ; 
	zprint((integer)( 709 ))  ; 
	zprintint((integer)( b ))  ; 
	goto lab50 ; 
      } 
    } 
    goto lab10 ; 
  } 
  else {
    if ( totalshrink [ 3 ] != 0 ) 
    o = 3 ; 
    else if ( totalshrink [ 2 ] != 0 ) 
    o = 2 ; 
    else if ( totalshrink [ 1 ] != 0 ) 
    o = 1 ; 
    else o = 0 ; 
    mem [ r + 5 ] .hh.u.B1  = o ; 
    mem [ r + 5 ] .hh.u.B0  = 2 ; 
    if ( totalshrink [ o ] != 0 ) 
    mem [ r + 6 ] .gr = ( - (integer) x ) / ((double) totalshrink [ o ] ) ; 
    else {
      mem [ r + 5 ] .hh.u.B0  = 0 ; 
      mem [ r + 6 ] .gr = 0.0 ; 
    } 
    if ( ( totalshrink [ o ] < - (integer) x ) && ( o == 0 ) && ( mem [ r + 5 
    ] .hh .v.RH != 0 ) ) 
    {
      mem [ r + 6 ] .gr = 1.0 ; 
      if ( ( - (integer) x - totalshrink [ 0 ] > eqtb [ 5710 ] .cint ) || ( 
      eqtb [ 5294 ] .cint < 100 ) ) 
      {
	println () ; 
	zprintnl((strnumber)( 710 ))  ; 
	zprintscaled((scaled)( - (integer) x - totalshrink [ 0 ] ))  ; 
	zprint((integer)( 711 ))  ; 
	goto lab50 ; 
      } 
    } 
    else if ( ( eqtb [ 5294 ] .cint < 100 ) && ( o == 0 ) && ( mem [ r + 5 ] 
    .hh .v.RH != 0 ) ) 
    {
      b = zbadness((scaled)( - (integer) x ),(scaled)( totalshrink [ 0 ] ))  ; 
      if ( b > eqtb [ 5294 ] .cint ) 
      {
	println () ; 
	zprintnl((strnumber)( 712 ))  ; 
	zprintint((integer)( b ))  ; 
	goto lab50 ; 
      } 
    } 
    goto lab10 ; 
  } 
  lab50: if ( outputactive ) 
  zprint((integer)( 700 ))  ; 
  else {
    if ( packbeginline != 0 ) 
    {
      zprint((integer)( 702 ))  ; 
      zprintint((integer)( 	(( packbeginline >=0)?( packbeginline ):(-( packbeginline )))  ))  ; 
      zprint((integer)( 703 ))  ; 
    } 
    else zprint((integer)( 704 ))  ; 
    zprintint((integer)( line ))  ; 
    println () ; 
  } 
  begindiagnostic () ; 
  zshowbox((halfword)( r ))  ; 
  zenddiagnostic((boolean)( 	1  ))  ; 
  lab10: Result = r ; 
  return(Result) ; 
} 
zappendtovlist ( b ) 
halfword b ; 
{register memoryword *mem=(zzzaa - (int)(0 )) , *eqtb=zeqtb;  
  scaled d  ; 
  halfword p  ; 
  if ( curlist .auxfield > -65536000L ) 
  {
    d = mem [ eqtb [ 3527 ] .hh .v.RH + 1 ] .cint - curlist .auxfield - mem [ 
    b + 3 ] .cint ; 
    if ( d < eqtb [ 5703 ] .cint ) 
    p = znewparamglue((smallnumber)( 0 ))  ; 
    else {
      p = znewskipparam((smallnumber)( 1 ))  ; 
      mem [ tempptr + 1 ] .cint = d ; 
    } 
    mem [ curlist .tailfield ] .hh .v.RH = p ; 
    curlist .tailfield = p ; 
  } 
  mem [ curlist .tailfield ] .hh .v.RH = b ; 
  curlist .tailfield = b ; 
  curlist .auxfield = mem [ b + 2 ] .cint ; 
} 
halfword newnoad () {
    register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  p = zgetnode((integer)( 4 ))  ; 
  mem [ p ] .hh.u.B0  = 16 ; 
  mem [ p ] .hh.u.B1  = 0 ; 
  mem [ p + 1 ] .hh = emptyfield ; 
  mem [ p + 3 ] .hh = emptyfield ; 
  mem [ p + 2 ] .hh = emptyfield ; 
  Result = p ; 
  return(Result) ; 
} 
halfword znewstyle ( s ) 
smallnumber s ; 
{register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  p = zgetnode((integer)( 3 ))  ; 
  mem [ p ] .hh.u.B0  = 14 ; 
  mem [ p ] .hh.u.B1  = s ; 
  mem [ p + 1 ] .cint = 0 ; 
  mem [ p + 2 ] .cint = 0 ; 
  Result = p ; 
  return(Result) ; 
} 
halfword newchoice () {
    register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  p = zgetnode((integer)( 3 ))  ; 
  mem [ p ] .hh.u.B0  = 15 ; 
  mem [ p ] .hh.u.B1  = 0 ; 
  mem [ p + 1 ] .hh .v.LH = 0 ; 
  mem [ p + 1 ] .hh .v.RH = 0 ; 
  mem [ p + 2 ] .hh .v.LH = 0 ; 
  mem [ p + 2 ] .hh .v.RH = 0 ; 
  Result = p ; 
  return(Result) ; 
} 
showinfo () {
    register memoryword *mem=(zzzaa - (int)(0 )) ;  
  zshownodelist((integer)( mem [ tempptr ] .hh .v.LH ))  ; 
} 
halfword zfractionrule ( t ) 
scaled t ; 
{register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  p = newrule () ; 
  mem [ p + 3 ] .cint = t ; 
  mem [ p + 2 ] .cint = 0 ; 
  Result = p ; 
  return(Result) ; 
} 
halfword zoverbar ( b , k , t ) 
halfword b ; 
scaled k , t ; 
{register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p, q  ; 
  p = znewkern((scaled)( k ))  ; 
  mem [ p ] .hh .v.RH = b ; 
  q = zfractionrule((scaled)( t ))  ; 
  mem [ q ] .hh .v.RH = p ; 
  p = znewkern((scaled)( t ))  ; 
  mem [ p ] .hh .v.RH = q ; 
  Result = zvpackage((halfword)( p ),(scaled)( 0 ),(smallnumber)( 1 ),(scaled)( 1073741823L ))  ; 
  return(Result) ; 
} 
halfword zcharbox ( f , c ) 
internalfontnumber f ; 
quarterword c ; 
{register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  fourquarters q  ; 
  eightbits hd  ; 
  halfword b, p  ; 
  q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
  hd = q .u.B1  ; 
  b = newnullbox () ; 
  mem [ b + 1 ] .cint = fontinfo [ widthbase [ f ] + q .u.B0  ] .cint + fontinfo 
  [ italicbase [ f ] + ( q .b2 ) / 4 ] .cint ; 
  mem [ b + 3 ] .cint = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint ; 
  mem [ b + 2 ] .cint = fontinfo [ depthbase [ f ] + ( hd ) % 16 ] .cint ; 
  p = getavail () ; 
  mem [ p ] .hh.u.B1  = c ; 
  mem [ p ] .hh.u.B0  = f ; 
  mem [ b + 5 ] .hh .v.RH = p ; 
  Result = b ; 
  return(Result) ; 
} 
zstackintobox ( b , f , c ) 
halfword b ; 
internalfontnumber f ; 
quarterword c ; 
{register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  p = zcharbox((internalfontnumber)( f ),(quarterword)( c ))  ; 
  mem [ p ] .hh .v.RH = mem [ b + 5 ] .hh .v.RH ; 
  mem [ b + 5 ] .hh .v.RH = p ; 
  mem [ b + 3 ] .cint = mem [ p + 3 ] .cint ; 
} 
scaled zheightplusdepth ( f , c ) 
internalfontnumber f ; 
quarterword c ; 
{register scaled Result;   
  fourquarters q  ; 
  eightbits hd  ; 
  q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
  hd = q .u.B1  ; 
  Result = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint + fontinfo [ 
  depthbase [ f ] + ( hd ) % 16 ] .cint ; 
  return(Result) ; 
} 
halfword zvardelimiter ( d , s , v ) 
halfword d ; 
smallnumber s ; 
scaled v ; 
{  register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) , *eqtb=zeqtb;  
  halfword b  ; 
  internalfontnumber f, g  ; 
  quarterword c, x, y  ; 
  integer m, n  ; 
  scaled u  ; 
  scaled w  ; 
  fourquarters q  ; 
  eightbits hd  ; 
  fourquarters r  ; 
  smallnumber z  ; 
  boolean largeattempt  ; 
  f = 0 ; 
  w = 0 ; 
  largeattempt = 	0  ; 
  z = mem [ d ] .qqqq .u.B0  ; 
  x = mem [ d ] .qqqq .u.B1  ; 
  while ( 	1  ) {
    if ( ( z != 0 ) || ( x != 0 ) ) 
    {
      z = z + s + 16 ; 
      do {
	  z = z - 16 ; 
	g = eqtb [ 4579 + z ] .hh .v.RH ; 
	if ( g != 0 ) 
	{
	  y = x ; 
	  lab22: if ( ( y >= fontbc [ g ] ) && ( y <= fontec [ g ] ) ) 
	  {
	    q = fontinfo [ charbase [ g ] + y ] .qqqq ; 
	    if ( ( q .u.B0  > 0 ) ) 
	    {
	      if ( ( ( q .b2 ) % 4 ) == 3 ) 
	      {
		f = g ; 
		c = y ; 
		goto lab40 ; 
	      } 
	      hd = q .u.B1  ; 
	      u = fontinfo [ heightbase [ g ] + ( hd ) / 16 ] .cint + fontinfo 
	      [ depthbase [ g ] + ( hd ) % 16 ] .cint ; 
	      if ( u > w ) 
	      {
		f = g ; 
		c = y ; 
		w = u ; 
		if ( u >= v ) 
		goto lab40 ; 
	      } 
	      if ( ( ( q .b2 ) % 4 ) == 2 ) 
	      {
		y = q .b3 ; 
		goto lab22 ; 
	      } 
	    } 
	  } 
	} 
      } while ( ! ( z < 16 ) ) ; 
    } 
    if ( largeattempt ) 
    goto lab40 ; 
    largeattempt = 	1  ; 
    z = mem [ d ] .qqqq .b2 ; 
    x = mem [ d ] .qqqq .b3 ; 
  } 
  lab40: if ( f != 0 ) 
  if ( ( ( q .b2 ) % 4 ) == 3 ) 
  {
    b = newnullbox () ; 
    mem [ b ] .hh.u.B0  = 1 ; 
    r = fontinfo [ extenbase [ f ] + q .b3 ] .qqqq ; 
    c = r .b3 ; 
    u = zheightplusdepth((internalfontnumber)( f ),(quarterword)( c ))  ; 
    w = 0 ; 
    q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
    mem [ b + 1 ] .cint = fontinfo [ widthbase [ f ] + q .u.B0  ] .cint + 
    fontinfo [ italicbase [ f ] + ( q .b2 ) / 4 ] .cint ; 
    c = r .b2 ; 
    if ( c != 0 ) 
    w = w + zheightplusdepth((internalfontnumber)( f ),(quarterword)( c ))  ; 
    c = r .u.B1  ; 
    if ( c != 0 ) 
    w = w + zheightplusdepth((internalfontnumber)( f ),(quarterword)( c ))  ; 
    c = r .u.B0  ; 
    if ( c != 0 ) 
    w = w + zheightplusdepth((internalfontnumber)( f ),(quarterword)( c ))  ; 
    n = 0 ; 
    if ( u > 0 ) 
    while ( w < v ) {
      w = w + u ; 
      	++( n )  ; 
      if ( r .u.B1  != 0 ) 
      w = w + u ; 
    } 
    c = r .b2 ; 
    if ( c != 0 ) 
    zstackintobox((halfword)( b ),(internalfontnumber)( f ),(quarterword)( c ))  ; 
    c = r .b3 ; 
    {register integer for_end; m = 1 ; for_end = n ; if ( m <= for_end) do 
      zstackintobox((halfword)( b ),(internalfontnumber)( f ),(quarterword)( c ))  ; 
    while ( m++ < for_end ) ; } 
    c = r .u.B1  ; 
    if ( c != 0 ) 
    {
      zstackintobox((halfword)( b ),(internalfontnumber)( f ),(quarterword)( c ))  ; 
      c = r .b3 ; 
      {register integer for_end; m = 1 ; for_end = n ; if ( m <= for_end) do 
	zstackintobox((halfword)( b ),(internalfontnumber)( f ),(quarterword)( c ))  ; 
      while ( m++ < for_end ) ; } 
    } 
    c = r .u.B0  ; 
    if ( c != 0 ) 
    zstackintobox((halfword)( b ),(internalfontnumber)( f ),(quarterword)( c ))  ; 
    mem [ b + 2 ] .cint = w - mem [ b + 3 ] .cint ; 
  } 
  else b = zcharbox((internalfontnumber)( f ),(quarterword)( c ))  ; 
  else {
    b = newnullbox () ; 
    mem [ b + 1 ] .cint = eqtb [ 5712 ] .cint ; 
  } 
  mem [ b + 4 ] .cint = zhalf((integer)( mem [ b + 3 ] .cint - mem [ b + 2 ] .cint ))  - 
  fontinfo [ 22 + parambase [ eqtb [ 4581 + s ] .hh .v.RH ] ] .cint ; 
  Result = b ; 
  return(Result) ; 
} 
halfword zrebox ( b , w ) 
halfword b ; 
scaled w ; 
{register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  internalfontnumber f  ; 
  scaled v  ; 
  if ( ( mem [ b + 1 ] .cint != w ) && ( mem [ b + 5 ] .hh .v.RH != 0 ) ) 
  {
    if ( mem [ b ] .hh.u.B0  == 1 ) 
    b = zhpack((halfword)( b ),(scaled)( 0 ),(smallnumber)( 1 ))  ; 
    p = mem [ b + 5 ] .hh .v.RH ; 
    if ( ( ( p >= himemmin ) ) && ( mem [ p ] .hh .v.RH == 0 ) ) 
    {
      f = mem [ p ] .hh.u.B0  ; 
      v = fontinfo [ widthbase [ f ] + fontinfo [ charbase [ f ] + mem [ p ] 
      .hh.u.B1  ] .qqqq .u.B0  ] .cint ; 
      if ( v != mem [ b + 1 ] .cint ) 
      mem [ p ] .hh .v.RH = znewkern((scaled)( mem [ b + 1 ] .cint - v ))  ; 
    } 
    zfreenode((halfword)( b ),(halfword)( 7 ))  ; 
    b = znewglue((halfword)( 12 ))  ; 
    mem [ b ] .hh .v.RH = p ; 
    while ( mem [ p ] .hh .v.RH != 0 ) p = mem [ p ] .hh .v.RH ; 
    mem [ p ] .hh .v.RH = znewglue((halfword)( 12 ))  ; 
    Result = zhpack((halfword)( b ),(scaled)( w ),(smallnumber)( 0 ))  ; 
  } 
  else {
    mem [ b + 1 ] .cint = w ; 
    Result = b ; 
  } 
  return(Result) ; 
} 
halfword zmathglue ( g , m ) 
halfword g ; 
scaled m ; 
{register halfword Result; register memoryword *mem=(zzzaa - (int)(0 )) ;  
  halfword p  ; 
  integer n  ; 
  scaled f  ; 
  n = zxovern((scaled)( m ),(integer)( 65536L ))  ; 
  f = remainder ; 
  p = zgetnode((integer)( 4 ))  ; 
  mem [ p + 1 ] .cint = znxplusy((integer)( n ),(scaled)( mem [ g + 1 ] .cint ),(scaled)( zxnoverd((scaled)( mem [ g 
  + 1 ] .cint ),(integer)( f ),(integer)( 65536L ))  ))  ; 
  mem [ p ] .hh.u.B0  = mem [ g ] .hh.u.B0  ; 
  if ( mem [ p ] .hh.u.B0  == 0 ) 
  mem [ p + 2 ] .cint = znxplusy((integer)( n ),(scaled)( mem [ g + 2 ] .cint ),(scaled)( zxnoverd((scaled)( mem [ g 
  + 2 ] .cint ),(integer)( f ),(integer)( 65536L ))  ))  ; 
  else mem [ p + 2 ] .cint = mem [ g + 2 ] .cint ; 
  mem [ p ] .hh.u.B1  = mem [ g ] .hh.u.B1  ; 
  if ( mem [ p ] .hh.u.B1  == 0 ) 
  mem [ p + 3 ] .cint = znxplusy((integer)( n ),(scaled)( mem [ g + 3 ] .cint ),(scaled)( zxnoverd((scaled)( mem [ g 
  + 3 ] .cint ),(integer)( f ),(integer)( 65536L ))  ))  ; 
  else mem [ p + 3 ] .cint = mem [ g + 3 ] .cint ; 
  Result = p ; 
  return(Result) ; 
}