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

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