home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Tex / texsrc.arc / TEX5.C < prev    next >
C/C++ Source or Header  |  1988-09-14  |  64KB  |  2,090 lines

  1. overlay "tex5"
  2. #define EXTERN extern
  3. #include "texd.h"
  4.  
  5. zappendtovlis ( b ) 
  6. halfword b ; 
  7. {r_appendtovlis 
  8.   scaled d ; 
  9.   halfword p ; 
  10.   if ( curlist .auxfield > - 65536000 ) 
  11.   {
  12.     d = mem [(long) eqtb [ 3527 ] .hh .v.RH + 1 ] .cint - curlist .auxfield - mem [(long) 
  13.     b + 3 ] .cint ; 
  14.     if ( d < eqtb [ 5703 ] .cint ) 
  15.     p = newparamglue ( 0 ) ; 
  16.     else { 
  17.       p = newskipparam ( 1 ) ; 
  18.       mem [(long) tempptr + 1 ] .cint = d ; 
  19.     } 
  20.     mem [(long) curlist .tailfield ] .hh .v.RH = p ; 
  21.     curlist .tailfield = p ; 
  22.   } 
  23.   mem [(long) curlist .tailfield ] .hh .v.RH = b ; 
  24.   curlist .tailfield = b ; 
  25.   curlist .auxfield = mem [(long) b + 2 ] .cint ; 
  26. halfword newnoad () { register halfword Result; r_newnoad 
  27.   long p ; 
  28.   p = getnode ( 4 ) ; 
  29.   mem [  p ] .hh.b0 = 16 ; 
  30.   mem [  p ] .hh.b1 = 0 ; 
  31.   mem [  p + 1 ] .hh = emptyfield ; 
  32.   mem [  p + 3 ] .hh = emptyfield ; 
  33.   mem [  p + 2 ] .hh = emptyfield ; 
  34.   Result = p ; 
  35.   return(Result) ; 
  36. halfword znewstyle ( s ) 
  37. smallnumber s ; 
  38. {register halfword Result; r_newstyle 
  39.  long p ; 
  40.   p = getnode ( 3 ) ; 
  41.   mem [  p ] .hh.b0 = 14 ; 
  42.   mem [  p ] .hh.b1 = s ; 
  43.   mem [  p + 1 ] .cint = 0 ; 
  44.   mem [  p + 2 ] .cint = 0 ; 
  45.   Result = p ; 
  46.   return(Result) ; 
  47. halfword newchoice () { register halfword Result; r_newchoice 
  48.   long p ; 
  49.   p = getnode ( 3 ) ; 
  50.   mem [  p ] .hh.b0 = 15 ; 
  51.   mem [  p ] .hh.b1 = 0 ; 
  52.   mem [  p + 1 ] .hh .v.LH = 0 ; 
  53.   mem [  p + 1 ] .hh .v.RH = 0 ; 
  54.   mem [  p + 2 ] .hh .v.LH = 0 ; 
  55.   mem [  p + 2 ] .hh .v.RH = 0 ; 
  56.   Result = p ; 
  57.   return(Result) ; 
  58. showinfo () { r_showinfo 
  59.   shownodelist ( mem [(long) tempptr ] .hh .v.LH ) ; 
  60. halfword zfractionrule ( t ) 
  61. scaled t ; 
  62. {register halfword Result; r_fractionrule 
  63.   halfword p ; 
  64.   p = newrule () ; 
  65.   mem [(long) p + 3 ] .cint = t ; 
  66.   mem [(long) p + 2 ] .cint = 0 ; 
  67.   Result = p ; 
  68.   return(Result) ; 
  69. halfword zoverbar ( b , k , t ) 
  70. halfword b ; 
  71. scaled k , t ; 
  72. {register halfword Result; r_overbar 
  73.   halfword p, q ; 
  74.   p = newkern ( k ) ; 
  75.   mem [(long) p ] .hh .v.RH = b ; 
  76.   q = fractionrule ( t ) ; 
  77.   mem [(long) q ] .hh .v.RH = p ; 
  78.   p = newkern ( t ) ; 
  79.   mem [(long) p ] .hh .v.RH = q ; 
  80.   Result = vpackage ( p , 0 , 1 , 1073741823 ) ; 
  81.   return(Result) ; 
  82. halfword zcharbox ( f , c ) 
  83. internalfont f ; 
  84. quarterword c ; 
  85. {register halfword Result; r_charbox 
  86.   fourquarters q ; 
  87.   eightbits hd ; 
  88.   halfword b, p ; 
  89.   q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
  90.   hd = q .b1 ; 
  91.   b = newnullbox () ; 
  92.   mem [(long) b + 1 ] .cint = fontinfo [ widthbase [ f ] + q .b0 ] .cint + fontinfo 
  93.   [ italicbase [ f ] + ( q .b2 ) / 4 ] .cint ; 
  94.   mem [(long) b + 3 ] .cint = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint ; 
  95.   mem [(long) b + 2 ] .cint = fontinfo [ depthbase [ f ] + ( hd ) % 16 ] .cint ; 
  96.   p = getavail () ; 
  97.   mem [(long) p ] .hh.b1 = c ; 
  98.   mem [(long) p ] .hh.b0 = f ; 
  99.   mem [(long) b + 5 ] .hh .v.RH = p ; 
  100.   Result = b ; 
  101.   return(Result) ; 
  102. zstackintobox ( b , f , c ) 
  103. halfword b ; 
  104. internalfont f ; 
  105. quarterword c ; 
  106. {r_stackintobox 
  107.   halfword p ; 
  108.   p = charbox ( f , c ) ; 
  109.   mem [(long) p ] .hh .v.RH = mem [(long) b + 5 ] .hh .v.RH ; 
  110.   mem [(long) b + 5 ] .hh .v.RH = p ; 
  111.   mem [(long) b + 3 ] .cint = mem [(long) p + 3 ] .cint ; 
  112. scaled zheightplusde ( f , c ) 
  113. internalfont f ; 
  114. quarterword c ; 
  115. {register scaled Result; r_heightplusde 
  116.   fourquarters q ; 
  117.   eightbits hd ; 
  118.   q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
  119.   hd = q .b1 ; 
  120.   Result = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint + fontinfo [ 
  121.   depthbase [ f ] + ( hd ) % 16 ] .cint ; 
  122.   return(Result) ; 
  123. halfword zvardelimiter ( d , s , v ) 
  124. halfword d ; 
  125. smallnumber s ; 
  126. scaled v ; 
  127. {/* 40 22 */ register halfword Result; r_vardelimiter 
  128.   halfword b ; 
  129.   internalfont f, g ; 
  130.   quarterword c, x, y ; 
  131.   integer m, n ; 
  132.   scaled u ; 
  133.   scaled w ; 
  134.   fourquarters q ; 
  135.   eightbits hd ; 
  136.   fourquarters r ; 
  137.   smallnumber z ; 
  138.   boolean largeattempt ; 
  139.   f = 0 ; 
  140.   w = 0 ; 
  141.   largeattempt = false ; 
  142.   z = mem [(long) d ] .qqqq .b0 ; 
  143.   x = mem [(long) d ] .qqqq .b1 ; 
  144.   while ( true ) { 
  145.     if ( ( z != 0 ) || ( x != 0 ) ) 
  146.     {
  147.       z = z + s + 16 ; 
  148.       do { z = z - 16 ; 
  149.     g = eqtb [ 4579 + z ] .hh .v.RH ; 
  150.     if ( g != 0 ) 
  151.     {
  152.       y = x ; 
  153.       lab22: if ( ( y >= fontbc [ g ] ) && ( y <= fontec [ g ] ) ) 
  154.       {
  155.         q = fontinfo [ charbase [ g ] + y ] .qqqq ; 
  156.         if ( ( q .b0 > 0 ) ) 
  157.         {
  158.           if ( ( ( q .b2 ) % 4 ) == 3 ) 
  159.           {
  160.         f = g ; 
  161.         c = y ; 
  162.         goto lab40 ; 
  163.           } 
  164.           hd = q .b1 ; 
  165.           u = fontinfo [ heightbase [ g ] + ( hd ) / 16 ] .cint + fontinfo 
  166.           [ depthbase [ g ] + ( hd ) % 16 ] .cint ; 
  167.           if ( u > w ) 
  168.           {
  169.         f = g ; 
  170.         c = y ; 
  171.         w = u ; 
  172.         if ( u >= v ) 
  173.         goto lab40 ; 
  174.           } 
  175.           if ( ( ( q .b2 ) % 4 ) == 2 ) 
  176.           {
  177.         y = q .b3 ; 
  178.         goto lab22 ; 
  179.           } 
  180.         } 
  181.       } 
  182.     } 
  183.       } while ( ! ( z < 16 ) ) ; 
  184.     } 
  185.     if ( largeattempt ) 
  186.     goto lab40 ; 
  187.     largeattempt = true ; 
  188.     z = mem [(long) d ] .qqqq .b2 ; 
  189.     x = mem [(long) d ] .qqqq .b3 ; 
  190.   } 
  191.   lab40: if ( f != 0 ) 
  192.   if ( ( ( q .b2 ) % 4 ) == 3 ) 
  193.   {
  194.     b = newnullbox () ; 
  195.     mem [(long) b ] .hh.b0 = 1 ; 
  196.     r = fontinfo [ extenbase [ f ] + q .b3 ] .qqqq ; 
  197.     c = r .b3 ; 
  198.     u = heightplusde ( f , c ) ; 
  199.     w = 0 ; 
  200.     q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
  201.     mem [(long) b + 1 ] .cint = fontinfo [ widthbase [ f ] + q .b0 ] .cint + 
  202.     fontinfo [ italicbase [ f ] + ( q .b2 ) / 4 ] .cint ; 
  203.     c = r .b2 ; 
  204.     if ( c != 0 ) 
  205.     w = w + heightplusde ( f , c ) ; 
  206.     c = r .b1 ; 
  207.     if ( c != 0 ) 
  208.     w = w + heightplusde ( f , c ) ; 
  209.     c = r .b0 ; 
  210.     if ( c != 0 ) 
  211.     w = w + heightplusde ( f , c ) ; 
  212.     n = 0 ; 
  213.     if ( u > 0 ) 
  214.     while ( w < v ) { 
  215.       w = w + u ; 
  216.       incr ( n ) ; 
  217.       if ( r .b1 != 0 ) 
  218.       w = w + u ; 
  219.     } 
  220.     c = r .b2 ; 
  221.     if ( c != 0 ) 
  222.     stackintobox ( b , f , c ) ; 
  223.     c = r .b3 ; 
  224.     for ( m = 1 ; m <= n ; m ++ ) 
  225.     stackintobox ( b , f , c ) ; 
  226.     c = r .b1 ; 
  227.     if ( c != 0 ) 
  228.     {
  229.       stackintobox ( b , f , c ) ; 
  230.       c = r .b3 ; 
  231.       for ( m = 1 ; m <= n ; m ++ ) 
  232.       stackintobox ( b , f , c ) ; 
  233.     } 
  234.     c = r .b0 ; 
  235.     if ( c != 0 ) 
  236.     stackintobox ( b , f , c ) ; 
  237.     mem [(long) b + 2 ] .cint = w - mem [(long) b + 3 ] .cint ; 
  238.   } 
  239.   else b = charbox ( f , c ) ; 
  240.   else { 
  241.     b = newnullbox () ; 
  242.     mem [(long) b + 1 ] .cint = eqtb [ 5712 ] .cint ; 
  243.   } 
  244.   mem [(long) b + 4 ] .cint = half ( mem [(long) b + 3 ] .cint - mem [(long) b + 2 ] .cint ) - 
  245.   fontinfo [ 22 + parambase [ eqtb [ 4581 + s ] .hh .v.RH ] ] .cint ; 
  246.   Result = b ; 
  247.   return(Result) ; 
  248. halfword zrebox ( b , w ) 
  249. halfword b ; 
  250. scaled w ; 
  251. {register halfword Result; r_rebox 
  252.   halfword p ; 
  253.   internalfont f ; 
  254.   scaled v ; 
  255. fourquarters qi;
  256.   if ( ( mem [(long) b + 1 ] .cint != w ) && ( mem [(long) b + 5 ] .hh .v.RH != 0 ) ) 
  257.   {
  258.     if ( mem [(long) b ] .hh.b0 == 1 ) 
  259.     b = hpack ( b , 0 , 1 ) ; 
  260.     p = mem [(long) b + 5 ] .hh .v.RH ; 
  261.     if ( ( ( p >= himemmin ) ) && ( mem [(long) p ] .hh .v.RH == 0 ) ) 
  262.     {
  263.       f = mem [(long) p ] .hh.b0 ; 
  264. /*      v = fontinfo [ widthbase [ f ] + fontinfo [ charbase [ f ] + mem [(long) p ] 
  265.       .hh.b1 ] .qqqq .b0 ] .cint ; */
  266.   qi = fontinfo [ charbase [ f ] + mem [(long) p ]  .hh.b1 ] .qqqq;
  267.       v = fontinfo [ widthbase [ f ] +qi.b0 ] .cint ;
  268.       if ( v != mem [(long) b + 1 ] .cint ) 
  269.       mem [(long) p ] .hh .v.RH = newkern ( mem [(long) b + 1 ] .cint - v ) ; 
  270.     } 
  271.     freenode ( b , 7 ) ; 
  272.     b = newglue ( 12 ) ; 
  273.     mem [(long) b ] .hh .v.RH = p ; 
  274.     while ( mem [(long) p ] .hh .v.RH != 0 ) p = mem [(long) p ] .hh .v.RH ; 
  275.     mem [(long) p ] .hh .v.RH = newglue ( 12 ) ; 
  276.     Result = hpack ( b , w , 0 ) ; 
  277.   } 
  278.   else { 
  279.     mem [(long) b + 1 ] .cint = w ; 
  280.     Result = b ; 
  281.   } 
  282.   return(Result) ; 
  283. halfword zmathglue ( g , m ) 
  284. halfword g ; 
  285. scaled m ; 
  286. {register halfword Result; r_mathglue 
  287.   halfword p ; 
  288.   integer n ; 
  289.   scaled f ; 
  290.   n = xovern ( m , 65536 ) ; 
  291.   f = remainder ; 
  292.   p = getnode ( 4 ) ; 
  293.   mem [(long) p + 1 ] .cint = nxplusy ( n , mem [(long) g + 1 ] .cint , xnoverd ( mem [(long) g 
  294.   + 1 ] .cint , f , 65536 ) ) ; 
  295.   mem [(long) p ] .hh.b0 = mem [(long) g ] .hh.b0 ; 
  296.   if ( mem [(long) p ] .hh.b0 == 0 ) 
  297.   mem [(long) p + 2 ] .cint = nxplusy ( n , mem [(long) g + 2 ] .cint , xnoverd ( mem [(long) g 
  298.   + 2 ] .cint , f , 65536 ) ) ; 
  299.   else mem [(long) p + 2 ] .cint = mem [(long) g + 2 ] .cint ; 
  300.   mem [(long) p ] .hh.b1 = mem [(long) g ] .hh.b1 ; 
  301.   if ( mem [(long) p ] .hh.b1 == 0 ) 
  302.   mem [(long) p + 3 ] .cint = nxplusy ( n , mem [(long) g + 3 ] .cint , xnoverd ( mem [(long) g 
  303.   + 3 ] .cint , f , 65536 ) ) ; 
  304.   else mem [(long) p + 3 ] .cint = mem [(long) g + 3 ] .cint ; 
  305.   Result = p ; 
  306.   return(Result) ; 
  307. zmathkern ( p , m ) 
  308. halfword p ; 
  309. scaled m ; 
  310. {r_mathkern 
  311.   integer n ; 
  312.   scaled f ; 
  313.   if ( mem [(long) p ] .hh.b1 == 99 ) 
  314.   {
  315.     n = xovern ( m , 65536 ) ; 
  316.     f = remainder ; 
  317.     mem [(long) p + 1 ] .cint = nxplusy ( n , mem [(long) p + 1 ] .cint , xnoverd ( mem [(long) 
  318.     p + 1 ] .cint , f , 65536 ) ) ; 
  319.     mem [(long) p ] .hh.b1 = 0 ; 
  320.   } 
  321. flushmath () { r_flushmath 
  322.   flushnodelis ( mem [(long) curlist .headfield ] .hh .v.RH ) ; 
  323.   flushnodelis ( curlist .auxfield ) ; 
  324.   mem [(long) curlist .headfield ] .hh .v.RH = 0 ; 
  325.   curlist .tailfield = curlist .headfield ; 
  326.   curlist .auxfield = 0 ; 
  327. halfword zcleanbox ( p , s ) 
  328. halfword p ; 
  329. smallnumber s ; 
  330. {/* 40 */ register halfword Result; r_cleanbox 
  331.   halfword q ; 
  332.   smallnumber savestyle ; 
  333.   halfword x ; 
  334.   halfword r ; 
  335.   switch ( mem [(long) p ] .hh .v.RH ) 
  336.   {case 1 : 
  337.     {
  338.       curmlist = newnoad () ; 
  339.       mem [(long) curmlist + 1 ] = mem [(long) p ] ; 
  340.     } 
  341.     break ; 
  342.   case 2 : 
  343.     {
  344.       q = mem [(long) p ] .hh .v.LH ; 
  345.       goto lab40 ; 
  346.     } 
  347.     break ; 
  348.   case 3 : 
  349.     curmlist = mem [(long) p ] .hh .v.LH ; 
  350.     break ; 
  351.   default : 
  352.     {
  353.       q = newnullbox () ; 
  354.       goto lab40 ; 
  355.     } 
  356.     break ; 
  357.   } 
  358.   savestyle = curstyle ; 
  359.   curstyle = s ; 
  360.   mlistpenalti = false ; 
  361.   mlisttohlist () ; 
  362.   q = mem [(long) memtop - 3 ] .hh .v.RH ; 
  363.   curstyle = savestyle ; 
  364.   {
  365.     if ( curstyle < 4 ) 
  366.     cursize = 0 ; 
  367.     else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  368.     curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4581 + cursize ] .hh 
  369.     .v.RH ] ] .cint , 18 ) ; 
  370.   } 
  371.   lab40: if ( ( q >= himemmin ) || ( q == 0 ) ) 
  372.   x = hpack ( q , 0 , 1 ) ; 
  373.   else if ( ( mem [(long) q ] .hh .v.RH == 0 ) && ( mem [(long) q ] .hh.b0 <= 1 ) && ( mem 
  374.   [ q + 4 ] .cint == 0 ) ) 
  375.   x = q ; 
  376.   else x = hpack ( q , 0 , 1 ) ; 
  377.   q = mem [(long) x + 5 ] .hh .v.RH ; 
  378.   if ( ( q >= himemmin ) ) 
  379.   {
  380.     r = mem [(long) q ] .hh .v.RH ; 
  381.     if ( r != 0 ) 
  382.     if ( mem [(long) r ] .hh .v.RH == 0 ) 
  383.     if ( ! ( r >= himemmin ) ) 
  384.     if ( mem [(long) r ] .hh.b0 == 11 ) 
  385.     {
  386.       freenode ( r , 2 ) ; 
  387.       mem [(long) q ] .hh .v.RH = 0 ; 
  388.     } 
  389.   } 
  390.   Result = x ; 
  391.   return(Result) ; 
  392. zfetch ( a ) 
  393. halfword a ; 
  394. {r_fetch 
  395.   curc = mem [(long) a ] .hh.b1 ; 
  396.   curf = eqtb [ 4579 + mem [(long) a ] .hh.b0 + cursize ] .hh .v.RH ; 
  397.   if ( curf == 0 ) 
  398.   {
  399.     {
  400.       if ( interaction == 3 ) 
  401.       wakeuptermin () ; 
  402.       printnl ( 133 ) ; 
  403.       print ( 206 ) ; 
  404.     } 
  405.     printsize ( cursize ) ; 
  406.     printchar ( 32 ) ; 
  407.     printint ( mem [(long) a ] .hh.b0 ) ; 
  408.     print ( 737 ) ; 
  409.     printASCII ( curc ) ; 
  410.     printchar ( 41 ) ; 
  411.     {
  412.       helpptr = 4 ; 
  413.       helpline [ 3 ] = 738 ; 
  414.       helpline [ 2 ] = 739 ; 
  415.       helpline [ 1 ] = 740 ; 
  416.       helpline [ 0 ] = 741 ; 
  417.     } 
  418.     error () ; 
  419.     curi = nullcharacte ; 
  420.     mem [(long) a ] .hh .v.RH = 0 ; 
  421.   } 
  422.   else { 
  423.     if ( ( curc >= fontbc [ curf ] ) && ( curc <= fontec [ curf ] ) ) 
  424.     curi = fontinfo [ charbase [ curf ] + curc ] .qqqq ; 
  425.     else curi = nullcharacte ; 
  426.     if ( ! ( ( curi .b0 > 0 ) ) ) 
  427.     {
  428.       charwarning ( curf , curc ) ; 
  429.       mem [(long) a ] .hh .v.RH = 0 ; 
  430.     } 
  431.   } 
  432. zmakeover ( q ) 
  433. halfword q ; 
  434. {r_makeover 
  435.   mem [(long) q + 1 ] .hh .v.LH = overbar ( cleanbox ( q + 1 , 2 * ( curstyle / 2 ) 
  436.   + 1 ) , 3 * fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH ] ] 
  437.   .cint , fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH ] ] 
  438.   .cint ) ; 
  439.   mem [(long) q + 1 ] .hh .v.RH = 2 ; 
  440. zmakeunder ( q ) 
  441. halfword q ; 
  442. {r_makeunder 
  443.   halfword p, x, y ; 
  444.   scaled delta ; 
  445.   x = cleanbox ( q + 1 , curstyle ) ; 
  446.   p = newkern ( 3 * fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh 
  447.   .v.RH ] ] .cint ) ; 
  448.   mem [(long) x ] .hh .v.RH = p ; 
  449.   mem [(long) p ] .hh .v.RH = fractionrule ( fontinfo [ 8 + parambase [ eqtb [ 4582 
  450.   + cursize ] .hh .v.RH ] ] .cint ) ; 
  451.   y = vpackage ( x , 0 , 1 , 1073741823 ) ; 
  452.   delta = mem [(long) y + 3 ] .cint + mem [(long) y + 2 ] .cint + fontinfo [ 8 + parambase 
  453.   [ eqtb [ 4582 + cursize ] .hh .v.RH ] ] .cint ; 
  454.   mem [(long) y + 3 ] .cint = mem [(long) x + 3 ] .cint ; 
  455.   mem [(long) y + 2 ] .cint = delta - mem [(long) y + 3 ] .cint ; 
  456.   mem [(long) q + 1 ] .hh .v.LH = y ; 
  457.   mem [(long) q + 1 ] .hh .v.RH = 2 ; 
  458. zmakevcenter ( q ) 
  459. halfword q ; 
  460. {r_makevcenter 
  461.   halfword v ; 
  462.   scaled delta ; 
  463.   v = mem [(long) q + 1 ] .hh .v.LH ; 
  464.   if ( mem [(long) v ] .hh.b0 != 1 ) 
  465.   confusion ( 397 ) ; 
  466.   delta = mem [(long) v + 3 ] .cint + mem [(long) v + 2 ] .cint ; 
  467.   mem [(long) v + 3 ] .cint = fontinfo [ 22 + parambase [ eqtb [ 4581 + cursize ] 
  468.   .hh .v.RH ] ] .cint + half ( delta ) ; 
  469.   mem [(long) v + 2 ] .cint = delta - mem [(long) v + 3 ] .cint ; 
  470. zmakeradical ( q ) 
  471. halfword q ; 
  472. {r_makeradical 
  473.   halfword x, y ; 
  474.   scaled delta, clr ; 
  475.   x = cleanbox ( q + 1 , 2 * ( curstyle / 2 ) + 1 ) ; 
  476.   if ( curstyle < 2 ) 
  477.   clr = fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH ] ] .cint 
  478.   + ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] 
  479.   .cint ) / 4 ) ; 
  480.   else { 
  481.     clr = fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH ] ] 
  482.     .cint ; 
  483.     clr = clr + ( abs ( clr ) / 4 ) ; 
  484.   } 
  485.   y = vardelimiter ( q + 4 , cursize , mem [(long) x + 3 ] .cint + mem [(long) x + 2 ] 
  486.   .cint + clr + fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH ] 
  487.   ] .cint ) ; 
  488.   delta = mem [(long) y + 2 ] .cint - ( mem [(long) x + 3 ] .cint + mem [(long) x + 2 ] .cint + 
  489.   clr ) ; 
  490.   if ( delta > 0 ) 
  491.   clr = clr + half ( delta ) ; 
  492.   mem [(long) y + 4 ] .cint = - ( mem [(long) x + 3 ] .cint + clr ) ; 
  493.   mem [(long) y ] .hh .v.RH = overbar ( x , clr , mem [(long) y + 3 ] .cint ) ; 
  494.   mem [(long) q + 1 ] .hh .v.LH = hpack ( y , 0 , 1 ) ; 
  495.   mem [(long) q + 1 ] .hh .v.RH = 2 ; 
  496. zmakemathacce ( q ) 
  497. halfword q ; 
  498. {/* 30 31 */ r_makemathacce 
  499.   halfword p, x, y ; 
  500.   integer a ; 
  501.   quarterword c ; 
  502.   internalfont f ; 
  503.   fourquarters i ; 
  504.   scaled s ; 
  505.   scaled h ; 
  506.   scaled delta ; 
  507.   scaled w ; 
  508.   fetch ( q + 4 ) ; 
  509.   if ( ( curi .b0 > 0 ) ) 
  510.   {
  511.     i = curi ; 
  512.     c = curc ; 
  513.     f = curf ; 
  514.     s = 0 ; 
  515.     if ( mem [(long) q + 1 ] .hh .v.RH == 1 ) 
  516.     {
  517.       fetch ( q + 1 ) ; 
  518.       if ( ( ( curi .b2 ) % 4 ) == 1 ) 
  519.       {
  520.     a = ligkernbase [ curf ] + curi .b3 ; 
  521.     do { curi = fontinfo [ a ] .qqqq ; 
  522.       if ( curi .b1 == skewchar [ curf ] ) 
  523.       {
  524.         if ( curi .b2 >= 128 ) 
  525.         s = fontinfo [ kernbase [ curf ] + curi .b3 ] .cint ; 
  526.         goto lab31 ; 
  527.       } 
  528.       incr ( a ) ; 
  529.     } while ( ! ( curi .b0 >= 128 ) ) ; 
  530.       } 
  531.     } 
  532.     lab31: ; 
  533.     x = cleanbox ( q + 1 , 2 * ( curstyle / 2 ) + 1 ) ; 
  534.     w = mem [(long) x + 1 ] .cint ; 
  535.     h = mem [(long) x + 3 ] .cint ; 
  536.     while ( true ) { 
  537.       if ( ( ( i .b2 ) % 4 ) != 2 ) 
  538.       goto lab30 ; 
  539.       y = i .b3 ; 
  540.       i = fontinfo [ charbase [ f ] + y ] .qqqq ; 
  541.       if ( fontinfo [ widthbase [ f ] + i .b0 ] .cint > w ) 
  542.       goto lab30 ; 
  543.       c = y ; 
  544.     } 
  545.     lab30: ; 
  546.     if ( h < fontinfo [ 5 + parambase [ f ] ] .cint ) 
  547.     delta = h ; 
  548.     else delta = fontinfo [ 5 + parambase [ f ] ] .cint ; 
  549.     if ( ( mem [(long) q + 2 ] .hh .v.RH != 0 ) || ( mem [(long) q + 3 ] .hh .v.RH != 0 ) 
  550.     ) 
  551.     if ( mem [(long) q + 1 ] .hh .v.RH == 1 ) 
  552.     {
  553.       flushnodelis ( x ) ; 
  554.       x = newnoad () ; 
  555.       mem [(long) x + 1 ] = mem [(long) q + 1 ] ; 
  556.       mem [(long) x + 2 ] = mem [(long) q + 2 ] ; 
  557.       mem [(long) x + 3 ] = mem [(long) q + 3 ] ; 
  558.       mem [(long) q + 2 ] .hh = emptyfield ; 
  559.       mem [(long) q + 3 ] .hh = emptyfield ; 
  560.       mem [(long) q + 1 ] .hh .v.RH = 3 ; 
  561.       mem [(long) q + 1 ] .hh .v.LH = x ; 
  562.       x = cleanbox ( q + 1 , curstyle ) ; 
  563.       delta = delta + mem [(long) x + 3 ] .cint - h ; 
  564.       h = mem [(long) x + 3 ] .cint ; 
  565.     } 
  566.     y = charbox ( f , c ) ; 
  567.     mem [(long) y + 4 ] .cint = s + half ( w - mem [(long) y + 1 ] .cint ) ; 
  568.     mem [(long) y + 1 ] .cint = 0 ; 
  569.     p = newkern ( - delta ) ; 
  570.     mem [(long) p ] .hh .v.RH = x ; 
  571.     mem [(long) y ] .hh .v.RH = p ; 
  572.     y = vpackage ( y , 0 , 1 , 1073741823 ) ; 
  573.     mem [(long) y + 1 ] .cint = mem [(long) x + 1 ] .cint ; 
  574.     if ( mem [(long) y + 3 ] .cint < h ) 
  575.     {
  576.       p = newkern ( h - mem [(long) y + 3 ] .cint ) ; 
  577.       mem [(long) p ] .hh .v.RH = mem [(long) y + 5 ] .hh .v.RH ; 
  578.       mem [(long) y + 5 ] .hh .v.RH = p ; 
  579.       mem [(long) y + 3 ] .cint = h ; 
  580.     } 
  581.     mem [(long) q + 1 ] .hh .v.LH = y ; 
  582.     mem [(long) q + 1 ] .hh .v.RH = 2 ; 
  583.   } 
  584. zmakefraction ( q ) 
  585. halfword q ; 
  586. {r_makefraction 
  587.   halfword p, v, x, y, z ; 
  588.   scaled delta, delta1, delta2, shiftup, shiftdown, clr ; 
  589.   if ( mem [(long) q + 1 ] .cint == 1073741824 ) 
  590.   mem [(long) q + 1 ] .cint = fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh 
  591.   .v.RH ] ] .cint ; 
  592.   x = cleanbox ( q + 2 , curstyle + 2 - 2 * ( curstyle / 6 ) ) ; 
  593.   z = cleanbox ( q + 3 , 2 * ( curstyle / 2 ) + 3 - 2 * ( curstyle / 6 ) ) ; 
  594.   if ( mem [(long) x + 1 ] .cint < mem [(long) z + 1 ] .cint ) 
  595.   x = rebox ( x , mem [(long) z + 1 ] .cint ) ; 
  596.   else z = rebox ( z , mem [(long) x + 1 ] .cint ) ; 
  597.   if ( curstyle < 2 ) 
  598.   {
  599.     shiftup = fontinfo [ 8 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] 
  600.     .cint ; 
  601.     shiftdown = fontinfo [ 11 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH 
  602.     ] ] .cint ; 
  603.   } 
  604.   else { 
  605.     shiftdown = fontinfo [ 12 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH 
  606.     ] ] .cint ; 
  607.     if ( mem [(long) q + 1 ] .cint != 0 ) 
  608.     shiftup = fontinfo [ 9 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] 
  609.     .cint ; 
  610.     else shiftup = fontinfo [ 10 + parambase [ eqtb [ 4581 + cursize ] .hh 
  611.     .v.RH ] ] .cint ; 
  612.   } 
  613.   if ( mem [(long) q + 1 ] .cint == 0 ) 
  614.   {
  615.     if ( curstyle < 2 ) 
  616.     clr = 7 * fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH ] ] 
  617.     .cint ; 
  618.     else clr = 3 * fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh 
  619.     .v.RH ] ] .cint ; 
  620.     delta = half ( clr - ( ( shiftup - mem [(long) x + 2 ] .cint ) - ( mem [(long) z + 3 ] 
  621.     .cint - shiftdown ) ) ) ; 
  622.     if ( delta > 0 ) 
  623.     {
  624.       shiftup = shiftup + delta ; 
  625.       shiftdown = shiftdown + delta ; 
  626.     } 
  627.   } 
  628.   else { 
  629.     if ( curstyle < 2 ) 
  630.     clr = 3 * mem [(long) q + 1 ] .cint ; 
  631.     else clr = mem [(long) q + 1 ] .cint ; 
  632.     delta = half ( mem [(long) q + 1 ] .cint ) ; 
  633.     delta1 = clr - ( ( shiftup - mem [(long) x + 2 ] .cint ) - ( fontinfo [ 22 + 
  634.     parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] .cint + delta ) ) ; 
  635.     delta2 = clr - ( ( fontinfo [ 22 + parambase [ eqtb [ 4581 + cursize ] .hh 
  636.     .v.RH ] ] .cint - delta ) - ( mem [(long) z + 3 ] .cint - shiftdown ) ) ; 
  637.     if ( delta1 > 0 ) 
  638.     shiftup = shiftup + delta1 ; 
  639.     if ( delta2 > 0 ) 
  640.     shiftdown = shiftdown + delta2 ; 
  641.   } 
  642.   v = newnullbox () ; 
  643.   mem [(long) v ] .hh.b0 = 1 ; 
  644.   mem [(long) v + 3 ] .cint = shiftup + mem [(long) x + 3 ] .cint ; 
  645.   mem [(long) v + 2 ] .cint = mem [(long) z + 2 ] .cint + shiftdown ; 
  646.   mem [(long) v + 1 ] .cint = mem [(long) x + 1 ] .cint ; 
  647.   if ( mem [(long) q + 1 ] .cint == 0 ) 
  648.   {
  649.     p = newkern ( ( shiftup - mem [(long) x + 2 ] .cint ) - ( mem [(long) z + 3 ] .cint - 
  650.     shiftdown ) ) ; 
  651.     mem [(long) p ] .hh .v.RH = z ; 
  652.   } 
  653.   else { 
  654.     y = fractionrule ( mem [(long) q + 1 ] .cint ) ; 
  655.     p = newkern ( ( fontinfo [ 22 + parambase [ eqtb [ 4581 + cursize ] .hh 
  656.     .v.RH ] ] .cint - delta ) - ( mem [(long) z + 3 ] .cint - shiftdown ) ) ; 
  657.     mem [(long) y ] .hh .v.RH = p ; 
  658.     mem [(long) p ] .hh .v.RH = z ; 
  659.     p = newkern ( ( shiftup - mem [(long) x + 2 ] .cint ) - ( fontinfo [ 22 + 
  660.     parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] .cint + delta ) ) ; 
  661.     mem [(long) p ] .hh .v.RH = y ; 
  662.   } 
  663.   mem [(long) x ] .hh .v.RH = p ; 
  664.   mem [(long) v + 5 ] .hh .v.RH = x ; 
  665.   if ( curstyle < 2 ) 
  666.   delta = fontinfo [ 20 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] 
  667.   .cint ; 
  668.   else delta = fontinfo [ 21 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] 
  669.   ] .cint ; 
  670.   x = vardelimiter ( q + 4 , cursize , delta ) ; 
  671.   mem [(long) x ] .hh .v.RH = v ; 
  672.   z = vardelimiter ( q + 5 , cursize , delta ) ; 
  673.   mem [(long) v ] .hh .v.RH = z ; 
  674.   mem [(long) q + 1 ] .cint = hpack ( x , 0 , 1 ) ; 
  675. scaled zmakeop ( q ) 
  676. halfword q ; 
  677. {register scaled Result; r_makeop 
  678.   scaled delta ; 
  679.   halfword p, v, x, y, z ; 
  680.   scaled shiftup, shiftdown ; 
  681.   if ( ( mem [(long) q ] .hh.b1 == 0 ) && ( curstyle < 2 ) ) 
  682.   mem [(long) q ] .hh.b1 = 1 ; 
  683.   if ( mem [(long) q + 1 ] .hh .v.RH == 1 ) 
  684.   {
  685.     fetch ( q + 1 ) ; 
  686.     if ( ( curstyle < 2 ) && ( ( ( curi .b2 ) % 4 ) == 2 ) ) 
  687.     {
  688.       curc = curi .b3 ; 
  689.       mem [(long) q + 1 ] .hh.b1 = curc ; 
  690.       curi = fontinfo [ charbase [ curf ] + curc ] .qqqq ; 
  691.     } 
  692.     delta = fontinfo [ italicbase [ curf ] + ( curi .b2 ) / 4 ] .cint ; 
  693.     x = cleanbox ( q + 1 , curstyle ) ; 
  694.     if ( ( mem [(long) q + 3 ] .hh .v.RH != 0 ) && ( mem [(long) q ] .hh.b1 != 1 ) ) 
  695.     mem [(long) x + 1 ] .cint = mem [(long) x + 1 ] .cint - delta ; 
  696.     mem [(long) x + 4 ] .cint = half ( mem [(long) x + 3 ] .cint - mem [(long) x + 2 ] .cint ) - 
  697.     fontinfo [ 22 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] .cint ; 
  698.     mem [(long) q + 1 ] .hh .v.RH = 2 ; 
  699.     mem [(long) q + 1 ] .hh .v.LH = x ; 
  700.   } 
  701.   else delta = 0 ; 
  702.   if ( mem [(long) q ] .hh.b1 == 1 ) 
  703.   {
  704.     x = cleanbox ( q + 2 , 2 * ( curstyle / 4 ) + 4 + ( curstyle % 2 ) ) ; 
  705.     y = cleanbox ( q + 1 , curstyle ) ; 
  706.     z = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ; 
  707.     v = newnullbox () ; 
  708.     mem [(long) v ] .hh.b0 = 1 ; 
  709.     mem [(long) v + 1 ] .cint = mem [(long) y + 1 ] .cint ; 
  710.     if ( mem [(long) x + 1 ] .cint > mem [(long) v + 1 ] .cint ) 
  711.     mem [(long) v + 1 ] .cint = mem [(long) x + 1 ] .cint ; 
  712.     if ( mem [(long) z + 1 ] .cint > mem [(long) v + 1 ] .cint ) 
  713.     mem [(long) v + 1 ] .cint = mem [(long) z + 1 ] .cint ; 
  714.     x = rebox ( x , mem [(long) v + 1 ] .cint ) ; 
  715.     y = rebox ( y , mem [(long) v + 1 ] .cint ) ; 
  716.     z = rebox ( z , mem [(long) v + 1 ] .cint ) ; 
  717.     mem [(long) x + 4 ] .cint = half ( delta ) ; 
  718.     mem [(long) z + 4 ] .cint = - mem [(long) x + 4 ] .cint ; 
  719.     mem [(long) v + 3 ] .cint = mem [(long) y + 3 ] .cint ; 
  720.     mem [(long) v + 2 ] .cint = mem [(long) y + 2 ] .cint ; 
  721.     if ( mem [(long) q + 2 ] .hh .v.RH == 0 ) 
  722.     {
  723.       freenode ( x , 7 ) ; 
  724.       mem [(long) v + 5 ] .hh .v.RH = y ; 
  725.     } 
  726.     else { 
  727.       shiftup = fontinfo [ 11 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH 
  728.       ] ] .cint - mem [(long) x + 2 ] .cint ; 
  729.       if ( shiftup < fontinfo [ 9 + parambase [ eqtb [ 4582 + cursize ] .hh 
  730.       .v.RH ] ] .cint ) 
  731.       shiftup = fontinfo [ 9 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH ] 
  732.       ] .cint ; 
  733.       p = newkern ( shiftup ) ; 
  734.       mem [(long) p ] .hh .v.RH = y ; 
  735.       mem [(long) x ] .hh .v.RH = p ; 
  736.       p = newkern ( fontinfo [ 13 + parambase [ eqtb [ 4582 + cursize ] .hh 
  737.       .v.RH ] ] .cint ) ; 
  738.       mem [(long) p ] .hh .v.RH = x ; 
  739.       mem [(long) v + 5 ] .hh .v.RH = p ; 
  740.       mem [(long) v + 3 ] .cint = mem [(long) v + 3 ] .cint + fontinfo [ 13 + parambase [ 
  741.       eqtb [ 4582 + cursize ] .hh .v.RH ] ] .cint + mem [(long) x + 3 ] .cint + mem 
  742.       [ x + 2 ] .cint + shiftup ; 
  743.     } 
  744.     if ( mem [(long) q + 3 ] .hh .v.RH == 0 ) 
  745.     freenode ( z , 7 ) ; 
  746.     else { 
  747.       shiftdown = fontinfo [ 12 + parambase [ eqtb [ 4582 + cursize ] .hh 
  748.       .v.RH ] ] .cint - mem [(long) z + 3 ] .cint ; 
  749.       if ( shiftdown < fontinfo [ 10 + parambase [ eqtb [ 4582 + cursize ] .hh 
  750.       .v.RH ] ] .cint ) 
  751.       shiftdown = fontinfo [ 10 + parambase [ eqtb [ 4582 + cursize ] .hh 
  752.       .v.RH ] ] .cint ; 
  753.       p = newkern ( shiftdown ) ; 
  754.       mem [(long) y ] .hh .v.RH = p ; 
  755.       mem [(long) p ] .hh .v.RH = z ; 
  756.       p = newkern ( fontinfo [ 13 + parambase [ eqtb [ 4582 + cursize ] .hh 
  757.       .v.RH ] ] .cint ) ; 
  758.       mem [(long) z ] .hh .v.RH = p ; 
  759.       mem [(long) v + 2 ] .cint = mem [(long) v + 2 ] .cint + fontinfo [ 13 + parambase [ 
  760.       eqtb [ 4582 + cursize ] .hh .v.RH ] ] .cint + mem [(long) z + 3 ] .cint + mem 
  761.       [ z + 2 ] .cint + shiftdown ; 
  762.     } 
  763.     mem [(long) q + 1 ] .cint = v ; 
  764.   } 
  765.   Result = delta ; 
  766.   return(Result) ; 
  767. zmakeord ( q ) 
  768. halfword q ; 
  769. {/* 20 10 */ r_makeord 
  770.   integer a ; 
  771.   halfword p ; 
  772.   lab20: if ( ( mem [(long) q + 3 ] .hh .v.RH == 0 ) && ( mem [(long) q + 2 ] .hh .v.RH == 
  773.   0 ) && ( mem [(long) q + 1 ] .hh .v.RH == 1 ) ) 
  774.   {
  775.     p = mem [(long) q ] .hh .v.RH ; 
  776.     if ( p != 0 ) 
  777.     if ( ( mem [(long) p ] .hh.b0 >= 16 ) && ( mem [(long) p ] .hh.b0 <= 22 ) ) 
  778.     if ( mem [(long) p + 1 ] .hh .v.RH == 1 ) 
  779.     if ( mem [(long) p + 1 ] .hh.b0 == mem [(long) q + 1 ] .hh.b0 ) 
  780.     {
  781.       mem [(long) q + 1 ] .hh .v.RH = 4 ; 
  782.       fetch ( q + 1 ) ; 
  783.       if ( ( ( curi .b2 ) % 4 ) == 1 ) 
  784.       {
  785.     a = ligkernbase [ curf ] + curi .b3 ; 
  786.     curc = mem [(long) p + 1 ] .hh.b1 ; 
  787.     do { curi = fontinfo [ a ] .qqqq ; 
  788.       if ( curi .b1 == curc ) 
  789.       if ( curi .b2 >= 128 ) 
  790.       {
  791.         p = newkern ( fontinfo [ kernbase [ curf ] + curi .b3 ] .cint ) ; 
  792.         mem [(long) p ] .hh .v.RH = mem [(long) q ] .hh .v.RH ; 
  793.         mem [(long) q ] .hh .v.RH = p ; 
  794.         return ; 
  795.       } 
  796.       else { 
  797.         mem [(long) q ] .hh .v.RH = mem [(long) p ] .hh .v.RH ; 
  798.         mem [(long) q + 1 ] .hh .v.RH = 1 ; 
  799.         mem [(long) q + 1 ] .hh.b1 = curi .b3 ; 
  800.         mem [(long) q + 3 ] = mem [(long) p + 3 ] ; 
  801.         mem [(long) q + 2 ] = mem [(long) p + 2 ] ; 
  802.         freenode ( p , 4 ) ; 
  803.         goto lab20 ; 
  804.       } 
  805.       incr ( a ) ; 
  806.     } while ( ! ( curi .b0 >= 128 ) ) ; 
  807.       } 
  808.     } 
  809.   } 
  810. zmakescripts ( q , delta ) 
  811. halfword q ; 
  812. scaled delta ; 
  813. {r_makescripts 
  814.   halfword p, x, y, z ; 
  815.   scaled shiftup, shiftdown, clr ; 
  816.   smallnumber t ; 
  817.   p = mem [(long) q + 1 ] .cint ; 
  818.   if ( ( p >= himemmin ) ) 
  819.   {
  820.     shiftup = 0 ; 
  821.     shiftdown = 0 ; 
  822.   } 
  823.   else { 
  824.     z = hpack ( p , 0 , 1 ) ; 
  825.     if ( curstyle < 4 ) 
  826.     t = 16 ; 
  827.     else t = 32 ; 
  828.     shiftup = mem [(long) z + 3 ] .cint - fontinfo [ 18 + parambase [ eqtb [ 4581 + 
  829.     t ] .hh .v.RH ] ] .cint ; 
  830.     shiftdown = mem [(long) z + 2 ] .cint + fontinfo [ 19 + parambase [ eqtb [ 4581 
  831.     + t ] .hh .v.RH ] ] .cint ; 
  832.     freenode ( z , 7 ) ; 
  833.   } 
  834.   if ( mem [(long) q + 2 ] .hh .v.RH == 0 ) 
  835.   {
  836.     x = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ; 
  837.     mem [(long) x + 1 ] .cint = mem [(long) x + 1 ] .cint + eqtb [ 5713 ] .cint ; 
  838.     if ( shiftdown < fontinfo [ 16 + parambase [ eqtb [ 4581 + cursize ] .hh 
  839.     .v.RH ] ] .cint ) 
  840.     shiftdown = fontinfo [ 16 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH 
  841.     ] ] .cint ; 
  842.     clr = mem [(long) x + 3 ] .cint - ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4581 
  843.     + cursize ] .hh .v.RH ] ] .cint * 4 ) / 5 ) ; 
  844.     if ( shiftdown < clr ) 
  845.     shiftdown = clr ; 
  846.     mem [(long) x + 4 ] .cint = shiftdown ; 
  847.   } 
  848.   else { 
  849.     {
  850.       x = cleanbox ( q + 2 , 2 * ( curstyle / 4 ) + 4 + ( curstyle % 2 ) ) ; 
  851.       mem [(long) x + 1 ] .cint = mem [(long) x + 1 ] .cint + eqtb [ 5713 ] .cint ; 
  852.       if ( odd ( curstyle ) ) 
  853.       clr = fontinfo [ 15 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] 
  854.       .cint ; 
  855.       else if ( curstyle < 2 ) 
  856.       clr = fontinfo [ 13 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH ] ] 
  857.       .cint ; 
  858.       else clr = fontinfo [ 14 + parambase [ eqtb [ 4581 + cursize ] .hh .v.RH 
  859.       ] ] .cint ; 
  860.       if ( shiftup < clr ) 
  861.       shiftup = clr ; 
  862.       clr = mem [(long) x + 2 ] .cint + ( abs ( fontinfo [ 5 + parambase [ eqtb [ 
  863.       4581 + cursize ] .hh .v.RH ] ] .cint ) / 4 ) ; 
  864.       if ( shiftup < clr ) 
  865.       shiftup = clr ; 
  866.     } 
  867.     if ( mem [(long) q + 3 ] .hh .v.RH == 0 ) 
  868.     mem [(long) x + 4 ] .cint = - shiftup ; 
  869.     else { 
  870.       y = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ; 
  871.       mem [(long) y + 1 ] .cint = mem [(long) y + 1 ] .cint + eqtb [ 5713 ] .cint ; 
  872.       if ( shiftdown < fontinfo [ 17 + parambase [ eqtb [ 4581 + cursize ] .hh 
  873.       .v.RH ] ] .cint ) 
  874.       shiftdown = fontinfo [ 17 + parambase [ eqtb [ 4581 + cursize ] .hh 
  875.       .v.RH ] ] .cint ; 
  876.       clr = 4 * fontinfo [ 8 + parambase [ eqtb [ 4582 + cursize ] .hh .v.RH ] 
  877.       ] .cint - ( ( shiftup - mem [(long) x + 2 ] .cint ) - ( mem [(long) y + 3 ] .cint - 
  878.       shiftdown ) ) ; 
  879.       if ( clr > 0 ) 
  880.       {
  881.     shiftdown = shiftdown + clr ; 
  882.     clr = ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4581 + cursize ] .hh 
  883.     .v.RH ] ] .cint * 4 ) / 5 ) - ( shiftup - mem [(long) x + 2 ] .cint ) ; 
  884.     if ( clr > 0 ) 
  885.     {
  886.       shiftup = shiftup + clr ; 
  887.       shiftdown = shiftdown - clr ; 
  888.     } 
  889.       } 
  890.       mem [(long) x + 4 ] .cint = delta ; 
  891.       p = newkern ( ( shiftup - mem [(long) x + 2 ] .cint ) - ( mem [(long) y + 3 ] .cint 
  892.       - shiftdown ) ) ; 
  893.       mem [(long) x ] .hh .v.RH = p ; 
  894.       mem [(long) p ] .hh .v.RH = y ; 
  895.       x = vpackage ( x , 0 , 1 , 1073741823 ) ; 
  896.       mem [(long) x + 4 ] .cint = shiftdown ; 
  897.     } 
  898.   } 
  899.   if ( mem [(long) q + 1 ] .cint == 0 ) 
  900.   mem [(long) q + 1 ] .cint = x ; 
  901.   else { 
  902.     p = mem [(long) q + 1 ] .cint ; 
  903.     while ( mem [(long) p ] .hh .v.RH != 0 ) p = mem [(long) p ] .hh .v.RH ; 
  904.     mem [(long) p ] .hh .v.RH = x ; 
  905.   } 
  906. smallnumber zmakeleftrigh ( q , style , maxd , maxh ) 
  907. halfword q ; 
  908. smallnumber style ; 
  909. scaled maxd , maxh ; 
  910. {register smallnumber Result; r_makeleftrigh 
  911.   scaled delta, delta1, delta2 ; 
  912.   if ( style < 4 ) 
  913.   cursize = 0 ; 
  914.   else cursize = 16 * ( ( style - 2 ) / 2 ) ; 
  915.   delta2 = maxd + fontinfo [ 22 + parambase [ eqtb [ 4581 + cursize ] .hh 
  916.   .v.RH ] ] .cint ; 
  917.   delta1 = maxh + maxd - delta2 ; 
  918.   if ( delta2 > delta1 ) 
  919.   delta1 = delta2 ; 
  920.   delta = ( delta1 / 500 ) * eqtb [ 5285 ] .cint ; 
  921.   delta2 = delta1 + delta1 - eqtb [ 5711 ] .cint ; 
  922.   if ( delta < delta2 ) 
  923.   delta = delta2 ; 
  924.   mem [(long) q + 1 ] .cint = vardelimiter ( q + 1 , cursize , delta ) ; 
  925.   Result = mem [(long) q ] .hh.b0 - ( 10 ) ; 
  926.   return(Result) ; 
  927. mlisttohlist () { /* 21 82 80 81 83 30 */ r_mlisttohlist 
  928.   halfword mlist ; 
  929.   boolean penalties ; 
  930.   smallnumber style ; 
  931.   smallnumber savestyle ; 
  932.   halfword q ; 
  933.   halfword r ; 
  934.   smallnumber rtype ; 
  935.   smallnumber t ; 
  936.   halfword p, x, y, z ; 
  937.   integer pen ; 
  938.   smallnumber s ; 
  939.   scaled maxh, maxd ; 
  940.   scaled delta ; 
  941.   mlist = curmlist ; 
  942.   penalties = mlistpenalti ; 
  943.   style = curstyle ; 
  944.   q = mlist ; 
  945.   r = 0 ; 
  946.   rtype = 17 ; 
  947.   maxh = 0 ; 
  948.   maxd = 0 ; 
  949.   {
  950.     if ( curstyle < 4 ) 
  951.     cursize = 0 ; 
  952.     else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  953.     curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4581 + cursize ] .hh 
  954.     .v.RH ] ] .cint , 18 ) ; 
  955.   } 
  956.   while ( q != 0 ) { 
  957.     lab21: delta = 0 ; 
  958.     switch ( mem [(long) q ] .hh.b0 ) 
  959.     {case 18 : 
  960.       switch ( rtype ) 
  961.       {case 18 : 
  962.       case 17 : 
  963.       case 19 : 
  964.       case 20 : 
  965.       case 22 : 
  966.       case 30 : 
  967.     {
  968.       mem [(long) q ] .hh.b0 = 16 ; 
  969.       goto lab21 ; 
  970.     } 
  971.     break ; 
  972.       default : 
  973.  
  974.     break ; 
  975.       } 
  976.       break ; 
  977.     case 19 : 
  978.     case 21 : 
  979.     case 22 : 
  980.     case 31 : 
  981.       {
  982.     if ( rtype == 18 ) 
  983.     mem [(long) r ] .hh.b0 = 16 ; 
  984.     if ( mem [(long) q ] .hh.b0 == 31 ) 
  985.     goto lab80 ; 
  986.       } 
  987.       break ; 
  988.     case 30 : 
  989.       goto lab80 ; 
  990.       break ; 
  991.     case 25 : 
  992.       {
  993.     makefraction ( q ) ; 
  994.     goto lab82 ; 
  995.       } 
  996.       break ; 
  997.     case 17 : 
  998.       {
  999.     delta = makeop ( q ) ; 
  1000.     if ( mem [(long) q ] .hh.b1 == 1 ) 
  1001.     goto lab82 ; 
  1002.       } 
  1003.       break ; 
  1004.     case 16 : 
  1005.       makeord ( q ) ; 
  1006.       break ; 
  1007.     case 20 : 
  1008.     case 23 : 
  1009.       ; 
  1010.       break ; 
  1011.     case 24 : 
  1012.       makeradical ( q ) ; 
  1013.       break ; 
  1014.     case 27 : 
  1015.       makeover ( q ) ; 
  1016.       break ; 
  1017.     case 26 : 
  1018.       makeunder ( q ) ; 
  1019.       break ; 
  1020.     case 28 : 
  1021.       makemathacce ( q ) ; 
  1022.       break ; 
  1023.     case 29 : 
  1024.       makevcenter ( q ) ; 
  1025.       break ; 
  1026.     case 14 : 
  1027.       {
  1028.     curstyle = mem [(long) q ] .hh.b1 ; 
  1029.     {
  1030.       if ( curstyle < 4 ) 
  1031.       cursize = 0 ; 
  1032.       else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  1033.       curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4581 + cursize ] 
  1034.       .hh .v.RH ] ] .cint , 18 ) ; 
  1035.     } 
  1036.     goto lab81 ; 
  1037.       } 
  1038.       break ; 
  1039.     case 15 : 
  1040.       {
  1041.     switch ( curstyle / 2 ) 
  1042.     {case 0 : 
  1043.       {
  1044.         p = mem [(long) q + 1 ] .hh .v.LH ; 
  1045.         mem [(long) q + 1 ] .hh .v.LH = 0 ; 
  1046.       } 
  1047.       break ; 
  1048.     case 1 : 
  1049.       {
  1050.         p = mem [(long) q + 1 ] .hh .v.RH ; 
  1051.         mem [(long) q + 1 ] .hh .v.RH = 0 ; 
  1052.       } 
  1053.       break ; 
  1054.     case 2 : 
  1055.       {
  1056.         p = mem [(long) q + 2 ] .hh .v.LH ; 
  1057.         mem [(long) q + 2 ] .hh .v.LH = 0 ; 
  1058.       } 
  1059.       break ; 
  1060.     case 3 : 
  1061.       {
  1062.         p = mem [(long) q + 2 ] .hh .v.RH ; 
  1063.         mem [(long) q + 2 ] .hh .v.RH = 0 ; 
  1064.       } 
  1065.       break ; 
  1066.     } 
  1067.     flushnodelis ( mem [(long) q + 1 ] .hh .v.LH ) ; 
  1068.     flushnodelis ( mem [(long) q + 1 ] .hh .v.RH ) ; 
  1069.     flushnodelis ( mem [(long) q + 2 ] .hh .v.LH ) ; 
  1070.     flushnodelis ( mem [(long) q + 2 ] .hh .v.RH ) ; 
  1071.     mem [(long) q ] .hh.b0 = 14 ; 
  1072.     mem [(long) q ] .hh.b1 = curstyle ; 
  1073.     mem [(long) q + 1 ] .cint = 0 ; 
  1074.     mem [(long) q + 2 ] .cint = 0 ; 
  1075.     if ( p != 0 ) 
  1076.     {
  1077.       z = mem [(long) q ] .hh .v.RH ; 
  1078.       mem [(long) q ] .hh .v.RH = p ; 
  1079.       while ( mem [(long) p ] .hh .v.RH != 0 ) p = mem [(long) p ] .hh .v.RH ; 
  1080.       mem [(long) p ] .hh .v.RH = z ; 
  1081.     } 
  1082.     goto lab81 ; 
  1083.       } 
  1084.       break ; 
  1085.     case 3 : 
  1086.     case 4 : 
  1087.     case 5 : 
  1088.     case 8 : 
  1089.     case 12 : 
  1090.     case 7 : 
  1091.       goto lab81 ; 
  1092.       break ; 
  1093.     case 2 : 
  1094.       {
  1095.     if ( mem [(long) q + 3 ] .cint > maxh ) 
  1096.     maxh = mem [(long) q + 3 ] .cint ; 
  1097.     if ( mem [(long) q + 2 ] .cint > maxd ) 
  1098.     maxd = mem [(long) q + 2 ] .cint ; 
  1099.     goto lab81 ; 
  1100.       } 
  1101.       break ; 
  1102.     case 10 : 
  1103.       {
  1104.     if ( mem [(long) q ] .hh.b1 == 99 ) 
  1105.     {
  1106.       x = mem [(long) q + 1 ] .hh .v.LH ; 
  1107.       y = mathglue ( x , curmu ) ; 
  1108.       deletegluere ( x ) ; 
  1109.       mem [(long) q + 1 ] .hh .v.LH = y ; 
  1110.       mem [(long) q ] .hh.b1 = 0 ; 
  1111.     } 
  1112.     else if ( ( cursize != 0 ) && ( mem [(long) q ] .hh.b1 == 98 ) ) 
  1113.     {
  1114.       p = mem [(long) q ] .hh .v.RH ; 
  1115.       if ( p != 0 ) 
  1116.       if ( ( mem [(long) p ] .hh.b0 == 10 ) || ( mem [(long) p ] .hh.b0 == 11 ) ) 
  1117.       {
  1118.         mem [(long) q ] .hh .v.RH = mem [(long) p ] .hh .v.RH ; 
  1119.         mem [(long) p ] .hh .v.RH = 0 ; 
  1120.         flushnodelis ( p ) ; 
  1121.       } 
  1122.     } 
  1123.     goto lab81 ; 
  1124.       } 
  1125.       break ; 
  1126.     case 11 : 
  1127.       {
  1128.     mathkern ( q , curmu ) ; 
  1129.     goto lab81 ; 
  1130.       } 
  1131.       break ; 
  1132.     default : 
  1133.       confusion ( 742 ) ; 
  1134.       break ; 
  1135.     } 
  1136.     switch ( mem [(long) q + 1 ] .hh .v.RH ) 
  1137.     {case 1 : 
  1138.     case 4 : 
  1139.       {
  1140.     fetch ( q + 1 ) ; 
  1141.     if ( ( curi .b0 > 0 ) ) 
  1142.     {
  1143.       delta = fontinfo [ italicbase [ curf ] + ( curi .b2 ) / 4 ] .cint ; 
  1144.       p = newcharacter ( curf , curc ) ; 
  1145.       if ( ( mem [(long) q + 1 ] .hh .v.RH == 4 ) && ( fontinfo [ 2 + parambase 
  1146.       [ curf ] ] .cint != 0 ) ) 
  1147.       delta = 0 ; 
  1148.       if ( ( mem [(long) q + 3 ] .hh .v.RH == 0 ) && ( delta != 0 ) ) 
  1149.       {
  1150.         mem [(long) p ] .hh .v.RH = newkern ( delta ) ; 
  1151.         delta = 0 ; 
  1152.       } 
  1153.     } 
  1154.     else p = 0 ; 
  1155.       } 
  1156.       break ; 
  1157.     case 0 : 
  1158.       p = 0 ; 
  1159.       break ; 
  1160.     case 2 : 
  1161.       p = mem [(long) q + 1 ] .hh .v.LH ; 
  1162.       break ; 
  1163.     case 3 : 
  1164.       {
  1165.     curmlist = mem [(long) q + 1 ] .hh .v.LH ; 
  1166.     savestyle = curstyle ; 
  1167.     mlistpenalti = false ; 
  1168.     mlisttohlist () ; 
  1169.     curstyle = savestyle ; 
  1170.     {
  1171.       if ( curstyle < 4 ) 
  1172.       cursize = 0 ; 
  1173.       else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  1174.       curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4581 + cursize ] 
  1175.       .hh .v.RH ] ] .cint , 18 ) ; 
  1176.     } 
  1177.     p = hpack ( mem [(long) memtop - 3 ] .hh .v.RH , 0 , 1 ) ; 
  1178.       } 
  1179.       break ; 
  1180.     default : 
  1181.       confusion ( 743 ) ; 
  1182.       break ; 
  1183.     } 
  1184.     mem [(long) q + 1 ] .cint = p ; 
  1185.     if ( ( mem [(long) q + 3 ] .hh .v.RH == 0 ) && ( mem [(long) q + 2 ] .hh .v.RH == 0 ) 
  1186.     ) 
  1187.     goto lab82 ; 
  1188.     makescripts ( q , delta ) ; 
  1189.     lab82: z = hpack ( mem [(long) q + 1 ] .cint , 0 , 1 ) ; 
  1190.     if ( mem [(long) z + 3 ] .cint > maxh ) 
  1191.     maxh = mem [(long) z + 3 ] .cint ; 
  1192.     if ( mem [(long) z + 2 ] .cint > maxd ) 
  1193.     maxd = mem [(long) z + 2 ] .cint ; 
  1194.     freenode ( z , 7 ) ; 
  1195.     lab80: r = q ; 
  1196.     rtype = mem [(long) r ] .hh.b0 ; 
  1197.     lab81: q = mem [(long) q ] .hh .v.RH ; 
  1198.   } 
  1199.   if ( rtype == 18 ) 
  1200.   mem [(long) r ] .hh.b0 = 16 ; 
  1201.   p = memtop - 3 ; 
  1202.   mem [(long) p ] .hh .v.RH = 0 ; 
  1203.   q = mlist ; 
  1204.   rtype = 0 ; 
  1205.   curstyle = style ; 
  1206.   {
  1207.     if ( curstyle < 4 ) 
  1208.     cursize = 0 ; 
  1209.     else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  1210.     curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4581 + cursize ] .hh 
  1211.     .v.RH ] ] .cint , 18 ) ; 
  1212.   } 
  1213.   while ( q != 0 ) { 
  1214.     t = 16 ; 
  1215.     s = 4 ; 
  1216.     pen = 10000 ; 
  1217.     switch ( mem [(long) q ] .hh.b0 ) 
  1218.     {case 17 : 
  1219.     case 20 : 
  1220.     case 21 : 
  1221.     case 22 : 
  1222.     case 23 : 
  1223.       t = mem [(long) q ] .hh.b0 ; 
  1224.       break ; 
  1225.     case 18 : 
  1226.       {
  1227.     t = 18 ; 
  1228.     pen = eqtb [ 5276 ] .cint ; 
  1229.       } 
  1230.       break ; 
  1231.     case 19 : 
  1232.       {
  1233.     t = 19 ; 
  1234.     pen = eqtb [ 5277 ] .cint ; 
  1235.       } 
  1236.       break ; 
  1237.     case 16 : 
  1238.     case 29 : 
  1239.     case 27 : 
  1240.     case 26 : 
  1241.       ; 
  1242.       break ; 
  1243.     case 24 : 
  1244.       s = 5 ; 
  1245.       break ; 
  1246.     case 28 : 
  1247.       s = 5 ; 
  1248.       break ; 
  1249.     case 25 : 
  1250.       {
  1251.     t = 23 ; 
  1252.     s = 6 ; 
  1253.       } 
  1254.       break ; 
  1255.     case 30 : 
  1256.     case 31 : 
  1257.       t = makeleftrigh ( q , style , maxd , maxh ) ; 
  1258.       break ; 
  1259.     case 14 : 
  1260.       {
  1261.     curstyle = mem [(long) q ] .hh.b1 ; 
  1262.     s = 3 ; 
  1263.     {
  1264.       if ( curstyle < 4 ) 
  1265.       cursize = 0 ; 
  1266.       else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ; 
  1267.       curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4581 + cursize ] 
  1268.       .hh .v.RH ] ] .cint , 18 ) ; 
  1269.     } 
  1270.     goto lab83 ; 
  1271.       } 
  1272.       break ; 
  1273.     case 8 : 
  1274.     case 12 : 
  1275.     case 2 : 
  1276.     case 7 : 
  1277.     case 5 : 
  1278.     case 3 : 
  1279.     case 4 : 
  1280.     case 10 : 
  1281.     case 11 : 
  1282.       {
  1283.     mem [(long) p ] .hh .v.RH = q ; 
  1284.     p = q ; 
  1285.     q = mem [(long) q ] .hh .v.RH ; 
  1286.     mem [(long) p ] .hh .v.RH = 0 ; 
  1287.     goto lab30 ; 
  1288.       } 
  1289.       break ; 
  1290.     default : 
  1291.       confusion ( 744 ) ; 
  1292.       break ; 
  1293.     } 
  1294.     if ( rtype > 0 ) 
  1295.     {
  1296.       switch ( strpool [ rtype * 8 + t + magicoffset ] ) 
  1297.       {case 48 : 
  1298.     x = 0 ; 
  1299.     break ; 
  1300.       case 49 : 
  1301.     if ( curstyle < 4 ) 
  1302.     x = 15 ; 
  1303.     else x = 0 ; 
  1304.     break ; 
  1305.       case 50 : 
  1306.     x = 15 ; 
  1307.     break ; 
  1308.       case 51 : 
  1309.     if ( curstyle < 4 ) 
  1310.     x = 16 ; 
  1311.     else x = 0 ; 
  1312.     break ; 
  1313.       case 52 : 
  1314.     if ( curstyle < 4 ) 
  1315.     x = 17 ; 
  1316.     else x = 0 ; 
  1317.     break ; 
  1318.       default : 
  1319.     confusion ( 746 ) ; 
  1320.     break ; 
  1321.       } 
  1322.       if ( x != 0 ) 
  1323.       {
  1324.     y = mathglue ( eqtb [ 3526 + x ] .hh .v.RH , curmu ) ; 
  1325.     z = newglue ( y ) ; 
  1326.     mem [(long) y ] .hh .v.RH = 0 ; 
  1327.     mem [(long) p ] .hh .v.RH = z ; 
  1328.     p = z ; 
  1329.     mem [(long) z ] .hh.b1 = x + 1 ; 
  1330.       } 
  1331.     } 
  1332.     if ( mem [(long) q + 1 ] .cint != 0 ) 
  1333.     {
  1334.       mem [(long) p ] .hh .v.RH = mem [(long) q + 1 ] .cint ; 
  1335.       do { p = mem [(long) p ] .hh .v.RH ; 
  1336.       } while ( ! ( mem [(long) p ] .hh .v.RH == 0 ) ) ; 
  1337.     } 
  1338.     if ( penalties ) 
  1339.     if ( mem [(long) q ] .hh .v.RH != 0 ) 
  1340.     if ( pen < 10000 ) 
  1341.     {
  1342.       rtype = mem [(long) mem [(long) q ] .hh .v.RH ] .hh.b0 ; 
  1343.       if ( rtype != 12 ) 
  1344.       if ( rtype != 19 ) 
  1345.       {
  1346.     z = newpenalty ( pen ) ; 
  1347.     mem [(long) p ] .hh .v.RH = z ; 
  1348.     p = z ; 
  1349.       } 
  1350.     } 
  1351.     rtype = t ; 
  1352.     lab83: r = q ; 
  1353.     q = mem [(long) q ] .hh .v.RH ; 
  1354.     freenode ( r , s ) ; 
  1355.     lab30: ; 
  1356.   } 
  1357. pushalignmen () { r_pushalignmen 
  1358.   halfword p ; 
  1359.   p = getnode ( 5 ) ; 
  1360.   mem [(long) p ] .hh .v.RH = alignptr ; 
  1361.   mem [(long) p ] .hh .v.LH = curalign ; 
  1362.   mem [(long) p + 1 ] .hh .v.LH = mem [(long) memtop - 8 ] .hh .v.RH ; 
  1363.   mem [(long) p + 1 ] .hh .v.RH = curspan ; 
  1364.   mem [(long) p + 2 ] .cint = curloop ; 
  1365.   mem [(long) p + 3 ] .cint = alignstate ; 
  1366.   mem [(long) p + 4 ] .hh .v.LH = curhead ; 
  1367.   mem [(long) p + 4 ] .hh .v.RH = curtail ; 
  1368.   alignptr = p ; 
  1369.   curhead = getavail () ; 
  1370. popalignment () { r_popalignment 
  1371.   halfword p ; 
  1372.   {
  1373.     mem [(long) curhead ] .hh .v.RH = avail ; 
  1374.     avail = curhead ; 
  1375.  
  1376. #ifdef STAT
  1377.     decr ( dynused ) ; 
  1378. #endif /* STAT */
  1379.   } 
  1380.   p = alignptr ; 
  1381.   curtail = mem [(long) p + 4 ] .hh .v.RH ; 
  1382.   curhead = mem [(long) p + 4 ] .hh .v.LH ; 
  1383.   alignstate = mem [(long) p + 3 ] .cint ; 
  1384.   curloop = mem [(long) p + 2 ] .cint ; 
  1385.   curspan = mem [(long) p + 1 ] .hh .v.RH ; 
  1386.   mem [(long) memtop - 8 ] .hh .v.RH = mem [(long) p + 1 ] .hh .v.LH ; 
  1387.   curalign = mem [(long) p ] .hh .v.LH ; 
  1388.   alignptr = mem [(long) p ] .hh .v.RH ; 
  1389.   freenode ( p , 5 ) ; 
  1390. getpreamblet () { /* 20 */ r_getpreamblet 
  1391.   lab20: gettoken () ; 
  1392.   while ( ( curchr == 128 ) && ( curcmd == 4 ) ) { 
  1393.     gettoken () ; 
  1394.     if ( curcmd > 99 ) 
  1395.     {
  1396.       expand () ; 
  1397.       gettoken () ; 
  1398.     } 
  1399.   } 
  1400.   if ( ( curcmd == 74 ) && ( curchr == 3537 ) ) 
  1401.   {
  1402.     scanoptional () ; 
  1403.     scanglue ( 2 ) ; 
  1404.     if ( eqtb [ 5310 ] .cint > 0 ) 
  1405.     geqdefine ( 3537 , 116 , curval ) ; 
  1406.     else eqdefine ( 3537 , 116 , curval ) ; 
  1407.     goto lab20 ; 
  1408.   } 
  1409. initalign () { /* 30 31 32 22 */ r_initalign 
  1410.   halfword savecsptr ; 
  1411.   halfword p ; 
  1412.   savecsptr = curcs ; 
  1413.   pushalignmen () ; 
  1414.   alignstate = - 1000000 ; 
  1415.   if ( ( curlist .modefield == 201 ) && ( ( curlist .tailfield != curlist 
  1416.   .headfield ) || ( curlist .auxfield != 0 ) ) ) 
  1417.   {
  1418.     {
  1419.       if ( interaction == 3 ) 
  1420.       wakeuptermin () ; 
  1421.       printnl ( 133 ) ; 
  1422.       print ( 536 ) ; 
  1423.     } 
  1424.     printesc ( 379 ) ; 
  1425.     print ( 747 ) ; 
  1426.     {
  1427.       helpptr = 3 ; 
  1428.       helpline [ 2 ] = 748 ; 
  1429.       helpline [ 1 ] = 749 ; 
  1430.       helpline [ 0 ] = 750 ; 
  1431.     } 
  1432.     error () ; 
  1433.     flushmath () ; 
  1434.   } 
  1435.   pushnest () ; 
  1436.   if ( curlist .modefield == 201 ) 
  1437.   {
  1438.     curlist .modefield = - 1 ; 
  1439.     curlist .auxfield = nest [ nestptr - 2 ] .auxfield ; 
  1440.   } 
  1441.   else if ( curlist .modefield > 0 ) 
  1442.   curlist .modefield = - curlist .modefield ; 
  1443.   scanspec () ; 
  1444.   newsavelevel ( 6 ) ; 
  1445.   mem [(long) memtop - 8 ] .hh .v.RH = 0 ; 
  1446.   curalign = memtop - 8 ; 
  1447.   curloop = 0 ; 
  1448.   scannerstatu = 4 ; 
  1449.   warningindex = savecsptr ; 
  1450.   alignstate = - 1000000 ; 
  1451.   while ( true ) { 
  1452.     mem [(long) curalign ] .hh .v.RH = newparamglue ( 11 ) ; 
  1453.     curalign = mem [(long) curalign ] .hh .v.RH ; 
  1454.     if ( curcmd == 5 ) 
  1455.     goto lab30 ; 
  1456.     p = memtop - 4 ; 
  1457.     mem [(long) p ] .hh .v.RH = 0 ; 
  1458.     while ( true ) { 
  1459.       getpreamblet () ; 
  1460.       if ( curcmd == 6 ) 
  1461.       goto lab31 ; 
  1462.       if ( ( curcmd <= 5 ) && ( curcmd >= 4 ) && ( alignstate == - 1000000 ) ) 
  1463.       if ( ( p == memtop - 4 ) && ( curloop == 0 ) && ( curcmd == 4 ) ) 
  1464.       curloop = curalign ; 
  1465.       else { 
  1466.     {
  1467.       if ( interaction == 3 ) 
  1468.       wakeuptermin () ; 
  1469.       printnl ( 133 ) ; 
  1470.       print ( 756 ) ; 
  1471.     } 
  1472.     {
  1473.       helpptr = 3 ; 
  1474.       helpline [ 2 ] = 757 ; 
  1475.       helpline [ 1 ] = 758 ; 
  1476.       helpline [ 0 ] = 759 ; 
  1477.     } 
  1478.     backerror () ; 
  1479.     goto lab31 ; 
  1480.       } 
  1481.       else if ( ( curcmd != 10 ) || ( p != memtop - 4 ) ) 
  1482.       {
  1483.     mem [(long) p ] .hh .v.RH = getavail () ; 
  1484.     p = mem [(long) p ] .hh .v.RH ; 
  1485.     mem [(long) p ] .hh .v.LH = curtok ; 
  1486.       } 
  1487.     } 
  1488.     lab31: ; 
  1489.     mem [(long) curalign ] .hh .v.RH = newnullbox () ; 
  1490.     curalign = mem [(long) curalign ] .hh .v.RH ; 
  1491.     mem [(long) curalign ] .hh .v.LH = memtop - 9 ; 
  1492.     mem [(long) curalign + 1 ] .cint = - 1073741824 ; 
  1493.     mem [(long) curalign + 3 ] .cint = mem [(long) memtop - 4 ] .hh .v.RH ; 
  1494.     p = memtop - 4 ; 
  1495.     mem [(long) p ] .hh .v.RH = 0 ; 
  1496.     while ( true ) { 
  1497.       lab22: getpreamblet () ; 
  1498.       if ( ( curcmd <= 5 ) && ( curcmd >= 4 ) && ( alignstate == - 1000000 ) ) 
  1499.       goto lab32 ; 
  1500.       if ( curcmd == 6 ) 
  1501.       {
  1502.     {
  1503.       if ( interaction == 3 ) 
  1504.       wakeuptermin () ; 
  1505.       printnl ( 133 ) ; 
  1506.       print ( 760 ) ; 
  1507.     } 
  1508.     {
  1509.       helpptr = 3 ; 
  1510.       helpline [ 2 ] = 757 ; 
  1511.       helpline [ 1 ] = 758 ; 
  1512.       helpline [ 0 ] = 761 ; 
  1513.     } 
  1514.     error () ; 
  1515.     goto lab22 ; 
  1516.       } 
  1517.       mem [(long) p ] .hh .v.RH = getavail () ; 
  1518.       p = mem [(long) p ] .hh .v.RH ; 
  1519.       mem [(long) p ] .hh .v.LH = curtok ; 
  1520.     } 
  1521.     lab32: mem [(long) p ] .hh .v.RH = getavail () ; 
  1522.     p = mem [(long) p ] .hh .v.RH ; 
  1523.     mem [(long) p ] .hh .v.LH = 7359 ; 
  1524.     mem [(long) curalign + 2 ] .cint = mem [(long) memtop - 4 ] .hh .v.RH ; 
  1525.   } 
  1526.   lab30: scannerstatu = 0 ; 
  1527.   newsavelevel ( 6 ) ; 
  1528.   if ( eqtb [ 4064 ] .hh .v.RH != 0 ) 
  1529.   begintokenli ( eqtb [ 4064 ] .hh .v.RH , 13 ) ; 
  1530.   alignpeek () ; 
  1531. zinitspan ( p ) 
  1532. halfword p ; 
  1533. {r_initspan 
  1534.   pushnest () ; 
  1535.   if ( curlist .modefield == - 101 ) 
  1536.   curlist .auxfield = 1000 ; 
  1537.   else { 
  1538.     curlist .auxfield = - 65536000 ; 
  1539.     normalparagr () ; 
  1540.   } 
  1541.   curspan = p ; 
  1542. initrow () { r_initrow 
  1543.   pushnest () ; 
  1544.   curlist .modefield = ( - 102 ) - curlist .modefield ; 
  1545.   curlist .auxfield = 0 ; 
  1546.   {
  1547.     mem [(long) curlist .tailfield ] .hh .v.RH = newglue ( mem [(long) mem [(long) memtop - 8 ] 
  1548.     .hh .v.RH + 1 ] .hh .v.LH ) ; 
  1549.     curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ; 
  1550.   } 
  1551.   mem [(long) curlist .tailfield ] .hh.b1 = 12 ; 
  1552.   curalign = mem [(long) mem [(long) memtop - 8 ] .hh .v.RH ] .hh .v.RH ; 
  1553.   curtail = curhead ; 
  1554.   initspan ( curalign ) ; 
  1555. initcol () { r_initcol 
  1556.   mem [(long) curalign + 5 ] .hh .v.LH = curcmd ; 
  1557.   if ( curcmd == 63 ) 
  1558.   alignstate = 0 ; 
  1559.   else { 
  1560.     backinput () ; 
  1561.     begintokenli ( mem [(long) curalign + 3 ] .cint , 1 ) ; 
  1562.   } 
  1563. boolean fincol () { /* 10 */ register boolean Result; r_fincol 
  1564.   halfword p ; 
  1565.   halfword q, r ; 
  1566.   halfword s ; 
  1567.   halfword u ; 
  1568.   scaled w ; 
  1569.   glueord o ; 
  1570.   halfword n ; 
  1571.   q = mem [(long) curalign ] .hh .v.RH ; 
  1572.   if ( ( curalign == 0 ) || ( q == 0 ) ) 
  1573.   confusion ( 763 ) ; 
  1574.   p = mem [(long) q ] .hh .v.RH ; 
  1575.   if ( ( p == 0 ) && ( mem [(long) curalign + 5 ] .hh .v.LH < 129 ) ) 
  1576.   if ( curloop != 0 ) 
  1577.   {
  1578.     mem [(long) q ] .hh .v.RH = newnullbox () ; 
  1579.     p = mem [(long) q ] .hh .v.RH ; 
  1580.     mem [(long) p ] .hh .v.LH = memtop - 9 ; 
  1581.     mem [(long) p + 1 ] .cint = - 1073741824 ; 
  1582.     curloop = mem [(long) curloop ] .hh .v.RH ; 
  1583.     q = memtop - 4 ; 
  1584.     r = mem [(long) curloop + 3 ] .cint ; 
  1585.     while ( r != 0 ) { 
  1586.       mem [(long) q ] .hh .v.RH = getavail () ; 
  1587.       q = mem [(long) q ] .hh .v.RH ; 
  1588.       mem [(long) q ] .hh .v.LH = mem [(long) r ] .hh .v.LH ; 
  1589.       r = mem [(long) r ] .hh .v.RH ; 
  1590.     } 
  1591.     mem [(long) q ] .hh .v.RH = 0 ; 
  1592.     mem [(long) p + 3 ] .cint = mem [(long) memtop - 4 ] .hh .v.RH ; 
  1593.     q = memtop - 4 ; 
  1594.     r = mem [(long) curloop + 2 ] .cint ; 
  1595.     while ( r != 0 ) { 
  1596.       mem [(long) q ] .hh .v.RH = getavail () ; 
  1597.       q = mem [(long) q ] .hh .v.RH ; 
  1598.       mem [(long) q ] .hh .v.LH = mem [(long) r ] .hh .v.LH ; 
  1599.       r = mem [(long) r ] .hh .v.RH ; 
  1600.     } 
  1601.     mem [(long) q ] .hh .v.RH = 0 ; 
  1602.     mem [(long) p + 2 ] .cint = mem [(long) memtop - 4 ] .hh .v.RH ; 
  1603.     curloop = mem [(long) curloop ] .hh .v.RH ; 
  1604.     mem [(long) p ] .hh .v.RH = newglue ( mem [(long) curloop + 1 ] .hh .v.LH ) ; 
  1605.   } 
  1606.   else { 
  1607.     {
  1608.       if ( interaction == 3 ) 
  1609.       wakeuptermin () ; 
  1610.       printnl ( 133 ) ; 
  1611.       print ( 764 ) ; 
  1612.     } 
  1613.     printesc ( 752 ) ; 
  1614.     {
  1615.       helpptr = 3 ; 
  1616.       helpline [ 2 ] = 765 ; 
  1617.       helpline [ 1 ] = 766 ; 
  1618.       helpline [ 0 ] = 767 ; 
  1619.     } 
  1620.     mem [(long) curalign + 5 ] .hh .v.LH = 129 ; 
  1621.     error () ; 
  1622.   } 
  1623.   if ( mem [(long) curalign + 5 ] .hh .v.LH != 128 ) 
  1624.   {
  1625.     unsave () ; 
  1626.     newsavelevel ( 6 ) ; 
  1627.     {
  1628.       if ( curlist .modefield == - 101 ) 
  1629.       {
  1630.     adjusttail = curtail ; 
  1631.     u = hpack ( mem [(long) curlist .headfield ] .hh .v.RH , 0 , 1 ) ; 
  1632.     w = mem [(long) u + 1 ] .cint ; 
  1633.     curtail = adjusttail ; 
  1634.     adjusttail = 0 ; 
  1635.       } 
  1636.       else { 
  1637.     u = vpackage ( mem [(long) curlist .headfield ] .hh .v.RH , 0 , 1 , 0 ) ; 
  1638.     w = mem [(long) u + 3 ] .cint ; 
  1639.       } 
  1640.       n = 0 ; 
  1641.       if ( curspan != curalign ) 
  1642.       {
  1643.     q = curspan ; 
  1644.     do { incr ( n ) ; 
  1645.       q = mem [(long) mem [(long) q ] .hh .v.RH ] .hh .v.RH ; 
  1646.     } while ( ! ( q == curalign ) ) ; 
  1647.     if ( n > 255 ) 
  1648.     confusion ( 768 ) ; 
  1649.     q = curspan ; 
  1650.     while ( mem [(long) mem [(long) q ] .hh .v.LH ] .hh .v.RH < n ) q = mem [(long) q ] .hh 
  1651.     .v.LH ; 
  1652.     if ( mem [(long) mem [(long) q ] .hh .v.LH ] .hh .v.RH > n ) 
  1653.     {
  1654.       s = getnode ( 2 ) ; 
  1655.       mem [(long) s ] .hh .v.LH = mem [(long) q ] .hh .v.LH ; 
  1656.       mem [(long) s ] .hh .v.RH = n ; 
  1657.       mem [(long) q ] .hh .v.LH = s ; 
  1658.       mem [(long) s + 1 ] .cint = w ; 
  1659.     } 
  1660.     else if ( mem [(long) mem [(long) q ] .hh .v.LH + 1 ] .cint < w ) 
  1661.     mem [(long) mem [(long) q ] .hh .v.LH + 1 ] .cint = w ; 
  1662.       } 
  1663.       else if ( w > mem [(long) curalign + 1 ] .cint ) 
  1664.       mem [(long) curalign + 1 ] .cint = w ; 
  1665.       mem [(long) u ] .hh.b0 = 13 ; 
  1666.       mem [(long) u ] .hh.b1 = n ; 
  1667.       if ( totalstretch [ 3 ] != 0 ) 
  1668.       o = 3 ; 
  1669.       else if ( totalstretch [ 2 ] != 0 ) 
  1670.       o = 2 ; 
  1671.       else if ( totalstretch [ 1 ] != 0 ) 
  1672.       o = 1 ; 
  1673.       else o = 0 ; 
  1674.       mem [(long) u + 5 ] .hh.b1 = o ; 
  1675.       mem [(long) u + 6 ] .cint = totalstretch [ o ] ; 
  1676.       if ( totalshrink [ 3 ] != 0 ) 
  1677.       o = 3 ; 
  1678.       else if ( totalshrink [ 2 ] != 0 ) 
  1679.       o = 2 ; 
  1680.       else if ( totalshrink [ 1 ] != 0 ) 
  1681.       o = 1 ; 
  1682.       else o = 0 ; 
  1683.       mem [(long) u + 5 ] .hh.b0 = o ; 
  1684.       mem [(long) u + 4 ] .cint = totalshrink [ o ] ; 
  1685.       popnest () ; 
  1686.       mem [(long) curlist .tailfield ] .hh .v.RH = u ; 
  1687.       curlist .tailfield = u ; 
  1688.     } 
  1689.     {
  1690.       mem [(long) curlist .tailfield ] .hh .v.RH = newglue ( mem [(long) mem [(long) curalign ] 
  1691.       .hh .v.RH + 1 ] .hh .v.LH ) ; 
  1692.       curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ; 
  1693.     } 
  1694.     mem [(long) curlist .tailfield ] .hh.b1 = 12 ; 
  1695.     if ( mem [(long) curalign + 5 ] .hh .v.LH >= 129 ) 
  1696.     {
  1697.       Result = true ; 
  1698.       return(Result) ; 
  1699.     } 
  1700.     initspan ( p ) ; 
  1701.   } 
  1702.   alignstate = 1000000 ; 
  1703.   do { getxtoken () ; 
  1704.   } while ( ! ( curcmd != 10 ) ) ; 
  1705.   curalign = p ; 
  1706.   initcol () ; 
  1707.   Result = false ; 
  1708.   return(Result) ; 
  1709. finrow () { r_finrow 
  1710.   halfword p ; 
  1711.   if ( curlist .modefield == - 101 ) 
  1712.   {
  1713.     p = hpack ( mem [(long) curlist .headfield ] .hh .v.RH , 0 , 1 ) ; 
  1714.     popnest () ; 
  1715.     appendtovlis ( p ) ; 
  1716.     if ( curhead != curtail ) 
  1717.     {
  1718.       mem [(long) curlist .tailfield ] .hh .v.RH = mem [(long) curhead ] .hh .v.RH ; 
  1719.       curlist .tailfield = curtail ; 
  1720.     } 
  1721.   } 
  1722.   else { 
  1723.     p = vpackage ( mem [(long) curlist .headfield ] .hh .v.RH , 0 , 1 , 1073741823 ) 
  1724.     ; 
  1725.     popnest () ; 
  1726.     mem [(long) curlist .tailfield ] .hh .v.RH = p ; 
  1727.     curlist .tailfield = p ; 
  1728.     curlist .auxfield = 1000 ; 
  1729.   } 
  1730.   mem [(long) p ] .hh.b0 = 13 ; 
  1731.   mem [(long) p + 6 ] .cint = 0 ; 
  1732.   if ( eqtb [ 4064 ] .hh .v.RH != 0 ) 
  1733.   begintokenli ( eqtb [ 4064 ] .hh .v.RH , 13 ) ; 
  1734.   alignpeek () ; 
  1735. finalign () { r_finalign 
  1736.   halfword p, q, r, s, u, v ; 
  1737.   scaled t, w ; 
  1738.   scaled o ; 
  1739.   halfword n ; 
  1740.   scaled rulesave ; 
  1741.   if ( curgroup != 6 ) 
  1742.   confusion ( 769 ) ; 
  1743.   unsave () ; 
  1744.   if ( curgroup != 6 ) 
  1745.   confusion ( 770 ) ; 
  1746.   unsave () ; 
  1747.   if ( nest [ nestptr - 1 ] .modefield == 201 ) 
  1748.   o = eqtb [ 5716 ] .cint ; 
  1749.   else o = 0 ; 
  1750.   q = mem [(long) mem [(long) memtop - 8 ] .hh .v.RH ] .hh .v.RH ; 
  1751.   do { flushlist ( mem [(long) q + 3 ] .cint ) ; 
  1752.     flushlist ( mem [(long) q + 2 ] .cint ) ; 
  1753.     p = mem [(long) mem [(long) q ] .hh .v.RH ] .hh .v.RH ; 
  1754.     if ( mem [(long) q + 1 ] .cint == - 1073741824 ) 
  1755.     {
  1756.       mem [(long) q + 1 ] .cint = 0 ; 
  1757.       r = mem [(long) q ] .hh .v.RH ; 
  1758.       s = mem [(long) r + 1 ] .hh .v.LH ; 
  1759.       if ( s != 0 ) 
  1760.       {
  1761.     incr ( mem [(long) 0 ] .hh .v.RH ) ; 
  1762.     deletegluere ( s ) ; 
  1763.     mem [(long) r + 1 ] .hh .v.LH = 0 ; 
  1764.       } 
  1765.     } 
  1766.     if ( mem [(long) q ] .hh .v.LH != memtop - 9 ) 
  1767.     {
  1768.       t = mem [(long) q + 1 ] .cint + mem [(long) mem [(long) mem [(long) q ] .hh .v.RH + 1 ] .hh 
  1769.       .v.LH + 1 ] .cint ; 
  1770.       r = mem [(long) q ] .hh .v.LH ; 
  1771.       s = memtop - 9 ; 
  1772.       mem [(long) s ] .hh .v.LH = p ; 
  1773.       n = 1 ; 
  1774.       do { mem [(long) r + 1 ] .cint = mem [(long) r + 1 ] .cint - t ; 
  1775.     u = mem [(long) r ] .hh .v.LH ; 
  1776.     while ( mem [(long) r ] .hh .v.RH > n ) { 
  1777.       s = mem [(long) s ] .hh .v.LH ; 
  1778.       n = mem [(long) mem [(long) s ] .hh .v.LH ] .hh .v.RH + 1 ; 
  1779.     } 
  1780.     if ( mem [(long) r ] .hh .v.RH < n ) 
  1781.     {
  1782.       mem [(long) r ] .hh .v.LH = mem [(long) s ] .hh .v.LH ; 
  1783.       mem [(long) s ] .hh .v.LH = r ; 
  1784.       decr ( mem [(long) r ] .hh .v.RH ) ; 
  1785.       s = r ; 
  1786.     } 
  1787.     else { 
  1788.       if ( mem [(long) r + 1 ] .cint > mem [(long) mem [(long) s ] .hh .v.LH + 1 ] .cint ) 
  1789.       mem [(long) mem [(long) s ] .hh .v.LH + 1 ] .cint = mem [(long) r + 1 ] .cint ; 
  1790.       freenode ( r , 2 ) ; 
  1791.     } 
  1792.     r = u ; 
  1793.       } while ( ! ( r == memtop - 9 ) ) ; 
  1794.     } 
  1795.     mem [(long) q ] .hh.b0 = 13 ; 
  1796.     mem [(long) q ] .hh.b1 = 0 ; 
  1797.     mem [(long) q + 3 ] .cint = 0 ; 
  1798.     mem [(long) q + 2 ] .cint = 0 ; 
  1799.     mem [(long) q + 5 ] .hh.b1 = 0 ; 
  1800.     mem [(long) q + 5 ] .hh.b0 = 0 ; 
  1801.     mem [(long) q + 6 ] .cint = 0 ; 
  1802.     mem [(long) q + 4 ] .cint = 0 ; 
  1803.     q = p ; 
  1804.   } while ( ! ( q == 0 ) ) ; 
  1805.   saveptr = saveptr - 2 ; 
  1806.   packbeginlin = - curlist .mlfield ; 
  1807.   if ( curlist .modefield == - 1 ) 
  1808.   {
  1809.     rulesave = eqtb [ 5717 ] .cint ; 
  1810.     eqtb [ 5717 ] .cint = 0 ; 
  1811.     p = hpack ( mem [(long) memtop - 8 ] .hh .v.RH , savestack [ saveptr + 1 ] .cint 
  1812.     , savestack [ saveptr + 0 ] .cint ) ; 
  1813.     eqtb [ 5717 ] .cint = rulesave ; 
  1814.   } 
  1815.   else { 
  1816.     q = mem [(long) mem [(long) memtop - 8 ] .hh .v.RH ] .hh .v.RH ; 
  1817.     do { mem [(long) q + 3 ] .cint = mem [(long) q + 1 ] .cint ; 
  1818.       mem [(long) q + 1 ] .cint = 0 ; 
  1819.       q = mem [(long) mem [(long) q ] .hh .v.RH ] .hh .v.RH ; 
  1820.     } while ( ! ( q == 0 ) ) ; 
  1821.     p = vpackage ( mem [(long) memtop - 8 ] .hh .v.RH , savestack [ saveptr + 1 ] 
  1822.     .cint , savestack [ saveptr + 0 ] .cint , 1073741823 ) ; 
  1823.     q = mem [(long) mem [(long) memtop - 8 ] .hh .v.RH ] .hh .v.RH ; 
  1824.     do { mem [(long) q + 1 ] .cint = mem [(long) q + 3 ] .cint ; 
  1825.       mem [(long) q + 3 ] .cint = 0 ; 
  1826.       q = mem [(long) mem [(long) q ] .hh .v.RH ] .hh .v.RH ; 
  1827.     } while ( ! ( q == 0 ) ) ; 
  1828.   } 
  1829.   packbeginlin = 0 ; 
  1830.   q = mem [(long) curlist .headfield ] .hh .v.RH ; 
  1831.   s = curlist .headfield ; 
  1832.   while ( q != 0 ) { 
  1833.     if ( mem [(long) q ] .hh.b0 == 13 ) 
  1834.     {
  1835.       if ( curlist .modefield == - 1 ) 
  1836.       {
  1837.     mem [(long) q ] .hh.b0 = 0 ; 
  1838.     mem [(long) q + 1 ] .cint = mem [(long) p + 1 ] .cint ; 
  1839.       } 
  1840.       else { 
  1841.     mem [(long) q ] .hh.b0 = 1 ; 
  1842.     mem [(long) q + 3 ] .cint = mem [(long) p + 3 ] .cint ; 
  1843.       } 
  1844.       mem [(long) q + 5 ] .hh.b1 = mem [(long) p + 5 ] .hh.b1 ; 
  1845.       mem [(long) q + 5 ] .hh.b0 = mem [(long) p + 5 ] .hh.b0 ; 
  1846.       mem [(long) q + 6 ] .gr = mem [(long) p + 6 ] .gr ; 
  1847.       mem [(long) q + 4 ] .cint = o ; 
  1848.       r = mem [(long) mem [(long) q + 5 ] .hh .v.RH ] .hh .v.RH ; 
  1849.       s = mem [(long) mem [(long) p + 5 ] .hh .v.RH ] .hh .v.RH ; 
  1850.       do { n = mem [(long) r ] .hh.b1 ; 
  1851.     t = mem [(long) s + 1 ] .cint ; 
  1852.     w = t ; 
  1853.     u = memtop - 4 ; 
  1854.     while ( n > 0 ) { 
  1855.       decr ( n ) ; 
  1856.       s = mem [(long) s ] .hh .v.RH ; 
  1857.       v = mem [(long) s + 1 ] .hh .v.LH ; 
  1858.       mem [(long) u ] .hh .v.RH = newglue ( v ) ; 
  1859.       u = mem [(long) u ] .hh .v.RH ; 
  1860.       mem [(long) u ] .hh.b1 = 12 ; 
  1861.       t = t + mem [(long) v + 1 ] .cint ; 
  1862.       if ( mem [(long) p + 5 ] .hh.b0 == 1 ) 
  1863.       {
  1864.         if ( mem [(long) v ] .hh.b0 == mem [(long) p + 5 ] .hh.b1 ) 
  1865.         t = t + round ( mem [(long) p + 6 ] .gr * mem [(long) v + 2 ] .cint ) ; 
  1866.       } 
  1867.       else if ( mem [(long) p + 5 ] .hh.b0 == 2 ) 
  1868.       {
  1869.         if ( mem [(long) v ] .hh.b1 == mem [(long) p + 5 ] .hh.b1 ) 
  1870.         t = t - round ( mem [(long) p + 6 ] .gr * mem [(long) v + 3 ] .cint ) ; 
  1871.       } 
  1872.       s = mem [(long) s ] .hh .v.RH ; 
  1873.       mem [(long) u ] .hh .v.RH = newnullbox () ; 
  1874.       u = mem [(long) u ] .hh .v.RH ; 
  1875.       t = t + mem [(long) s + 1 ] .cint ; 
  1876.       if ( curlist .modefield == - 1 ) 
  1877.       mem [(long) u + 1 ] .cint = mem [(long) s + 1 ] .cint ; 
  1878.       else { 
  1879.         mem [(long) u ] .hh.b0 = 1 ; 
  1880.         mem [(long) u + 3 ] .cint = mem [(long) s + 1 ] .cint ; 
  1881.       } 
  1882.     } 
  1883.     if ( curlist .modefield == - 1 ) 
  1884.     {
  1885.       mem [(long) r + 3 ] .cint = mem [(long) q + 3 ] .cint ; 
  1886.       mem [(long) r + 2 ] .cint = mem [(long) q + 2 ] .cint ; 
  1887.       if ( t == mem [(long) r + 1 ] .cint ) 
  1888.       {
  1889.         mem [(long) r + 5 ] .hh.b0 = 0 ; 
  1890.         mem [(long) r + 5 ] .hh.b1 = 0 ; 
  1891.         mem [(long) r + 6 ] .gr = 0.0 ; 
  1892.       } 
  1893.       else if ( t > mem [(long) r + 1 ] .cint ) 
  1894.       {
  1895.         mem [(long) r + 5 ] .hh.b0 = 1 ; 
  1896.         if ( mem [(long) r + 6 ] .cint == 0 ) 
  1897.         mem [(long) r + 6 ] .gr = 0.0 ; 
  1898.         else mem [(long) r + 6 ] .gr = ( t - mem [(long) r + 1 ] .cint ) / ((double) 
  1899.         mem [(long) r + 6 ] .cint ) ; 
  1900.       } 
  1901.       else { 
  1902.         mem [(long) r + 5 ] .hh.b1 = mem [(long) r + 5 ] .hh.b0 ; 
  1903.         mem [(long) r + 5 ] .hh.b0 = 2 ; 
  1904.         if ( mem [(long) r + 4 ] .cint == 0 ) 
  1905.         mem [(long) r + 6 ] .gr = 0.0 ; 
  1906.         else if ( ( mem [(long) r + 5 ] .hh.b1 == 0 ) && ( mem [(long) r + 1 ] .cint - 
  1907.         t > mem [(long) r + 4 ] .cint ) ) 
  1908.         mem [(long) r + 6 ] .gr = 1.0 ; 
  1909.         else mem [(long) r + 6 ] .gr = ( mem [(long) r + 1 ] .cint - t ) / ((double) 
  1910.         mem [(long) r + 4 ] .cint ) ; 
  1911.       } 
  1912.       mem [(long) r + 1 ] .cint = w ; 
  1913.       mem [(long) r ] .hh.b0 = 0 ; 
  1914.     } 
  1915.     else { 
  1916.       mem [(long) r + 1 ] .cint = mem [(long) q + 1 ] .cint ; 
  1917.       if ( t == mem [(long) r + 3 ] .cint ) 
  1918.       {
  1919.         mem [(long) r + 5 ] .hh.b0 = 0 ; 
  1920.         mem [(long) r + 5 ] .hh.b1 = 0 ; 
  1921.         mem [(long) r + 6 ] .gr = 0.0 ; 
  1922.       } 
  1923.       else if ( t > mem [(long) r + 3 ] .cint ) 
  1924.       {
  1925.         mem [(long) r + 5 ] .hh.b0 = 1 ; 
  1926.         if ( mem [(long) r + 6 ] .cint == 0 ) 
  1927.         mem [(long) r + 6 ] .gr = 0.0 ; 
  1928.         else mem [(long) r + 6 ] .gr = ( t - mem [(long) r + 3 ] .cint ) / ((double) 
  1929.         mem [(long) r + 6 ] .cint ) ; 
  1930.       } 
  1931.       else { 
  1932.         mem [(long) r + 5 ] .hh.b1 = mem [(long) r + 5 ] .hh.b0 ; 
  1933.         mem [(long) r + 5 ] .hh.b0 = 2 ; 
  1934.         if ( mem [(long) r + 4 ] .cint == 0 ) 
  1935.         mem [(long) r + 6 ] .gr = 0.0 ; 
  1936.         else if ( ( mem [(long) r + 5 ] .hh.b1 == 0 ) && ( mem [(long) r + 3 ] .cint - 
  1937.         t > mem [(long) r + 4 ] .cint ) ) 
  1938.         mem [(long) r + 6 ] .gr = 1.0 ; 
  1939.         else mem [(long) r + 6 ] .gr = ( mem [(long) r + 3 ] .cint - t ) / ((double) 
  1940.         mem [(long) r + 4 ] .cint ) ; 
  1941.       } 
  1942.       mem [(long) r + 3 ] .cint = w ; 
  1943.       mem [(long) r ] .hh.b0 = 1 ; 
  1944.     } 
  1945.     mem [(long) r + 4 ] .cint = 0 ; 
  1946.     if ( u != memtop - 4 ) 
  1947.     {
  1948.       mem [(long) u ] .hh .v.RH = mem [(long) r ] .hh .v.RH ; 
  1949.       mem [(long) r ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ; 
  1950.       r = u ; 
  1951.     } 
  1952.     r = mem [(long) mem [(long) r ] .hh .v.RH ] .hh .v.RH ; 
  1953.     s = mem [(long) mem [(long) s ] .hh .v.RH ] .hh .v.RH ; 
  1954.       } while ( ! ( r == 0 ) ) ; 
  1955.     } 
  1956.     else if ( mem [(long) q ] .hh.b0 == 2 ) 
  1957.     {
  1958.       if ( ( mem [(long) q + 1 ] .cint == - 1073741824 ) ) 
  1959.       mem [(long) q + 1 ] .cint = mem [(long) p + 1 ] .cint ; 
  1960.       if ( ( mem [(long) q + 3 ] .cint == - 1073741824 ) ) 
  1961.       mem [(long) q + 3 ] .cint = mem [(long) p + 3 ] .cint ; 
  1962.       if ( ( mem [(long) q + 2 ] .cint == - 1073741824 ) ) 
  1963.       mem [(long) q + 2 ] .cint = mem [(long) p + 2 ] .cint ; 
  1964.       if ( o != 0 ) 
  1965.       {
  1966.     r = mem [(long) q ] .hh .v.RH ; 
  1967.     mem [(long) q ] .hh .v.RH = 0 ; 
  1968.     q = hpack ( q , 0 , 1 ) ; 
  1969.     mem [(long) q + 4 ] .cint = o ; 
  1970.     mem [(long) q ] .hh .v.RH = r ; 
  1971.     mem [(long) s ] .hh .v.RH = q ; 
  1972.       } 
  1973.     } 
  1974.     s = q ; 
  1975.     q = mem [(long) q ] .hh .v.RH ; 
  1976.   } 
  1977.   flushnodelis ( p ) ; 
  1978.   popalignment () ; 
  1979.   t = curlist .auxfield ; 
  1980.   p = mem [(long) curlist .headfield ] .hh .v.RH ; 
  1981.   q = curlist .tailfield ; 
  1982.   popnest () ; 
  1983.   if ( curlist .modefield == 201 ) 
  1984.   {
  1985.     doassignment () ; 
  1986.     if ( curcmd != 3 ) 
  1987.     {
  1988.       {
  1989.     if ( interaction == 3 ) 
  1990.     wakeuptermin () ; 
  1991.     printnl ( 133 ) ; 
  1992.     print ( 1018 ) ; 
  1993.       } 
  1994.       {
  1995.     helpptr = 2 ; 
  1996.     helpline [ 1 ] = 748 ; 
  1997.     helpline [ 0 ] = 749 ; 
  1998.       } 
  1999.       backerror () ; 
  2000.     } 
  2001.     else { 
  2002.       getxtoken () ; 
  2003.       if ( curcmd != 3 ) 
  2004.       {
  2005.     {
  2006.       if ( interaction == 3 ) 
  2007.       wakeuptermin () ; 
  2008.       printnl ( 133 ) ; 
  2009.       print ( 1014 ) ; 
  2010.     } 
  2011.     {
  2012.       helpptr = 2 ; 
  2013.       helpline [ 1 ] = 1015 ; 
  2014.       helpline [ 0 ] = 1016 ; 
  2015.     } 
  2016.     backerror () ; 
  2017.       } 
  2018.     } 
  2019.     popnest () ; 
  2020.     {
  2021.       mem [(long) curlist .tailfield ] .hh .v.RH = newpenalty ( eqtb [ 5278 ] .cint 
  2022.       ) ; 
  2023.       curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ; 
  2024.     } 
  2025.     {
  2026.       mem [(long) curlist .tailfield ] .hh .v.RH = newparamglue ( 3 ) ; 
  2027.       curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ; 
  2028.     } 
  2029.     mem [(long) curlist .tailfield ] .hh .v.RH = p ; 
  2030.     if ( p != 0 ) 
  2031.     curlist .tailfield = q ; 
  2032.     {
  2033.       mem [(long) curlist .tailfield ] .hh .v.RH = newpenalty ( eqtb [ 5279 ] .cint 
  2034.       ) ; 
  2035.       curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ; 
  2036.     } 
  2037.     {
  2038.       mem [(long) curlist .tailfield ] .hh .v.RH = newparamglue ( 4 ) ; 
  2039.       curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ; 
  2040.     } 
  2041.     curlist .auxfield = t ; 
  2042.     resumeafterd () ; 
  2043.   } 
  2044.   else { 
  2045.     curlist .auxfield = t ; 
  2046.     mem [(long) curlist .tailfield ] .hh .v.RH = p ; 
  2047.     if ( p != 0 ) 
  2048.     curlist .tailfield = q ; 
  2049.     if ( curlist .modefield == 1 ) 
  2050.     buildpage () ; 
  2051.   } 
  2052.