home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / tex31 / texsrc.lzh / TEXSRC.LZH / tex15.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-28  |  35.2 KB  |  1,704 lines

  1. #define EXTERN extern
  2. #include "texd.h"
  3.  
  4. void alterprevgraf ( ) 
  5. {alterprevgraf_regmem 
  6.   integer p  ; 
  7.   nest [ nestptr ] = curlist ; 
  8.   p = nestptr ; 
  9.   while ( abs ( nest [ p ] .modefield ) != 1 ) decr ( p ) ; 
  10.   scanoptionalequals () ; 
  11.   scanint () ; 
  12.   if ( curval < 0 ) 
  13.   {
  14.     {
  15.       if ( interaction == 3 ) 
  16.       wakeupterminal () ; 
  17.       printnl ( 262 ) ; 
  18.       print ( 948 ) ; 
  19.     } 
  20.     printesc ( 528 ) ; 
  21.     {
  22.       helpptr = 1 ; 
  23.       helpline [ 0 ] = 1206 ; 
  24.     } 
  25.     interror ( curval ) ; 
  26.   } 
  27.   else {
  28.       
  29.     nest [ p ] .pgfield = curval ; 
  30.     curlist = nest [ nestptr ] ; 
  31.   } 
  32. void alterpagesofar ( ) 
  33. {alterpagesofar_regmem 
  34.   schar c  ; 
  35.   c = curchr ; 
  36.   scanoptionalequals () ; 
  37.   scandimen ( false , false , false ) ; 
  38.   pagesofar [ c ] = curval ; 
  39. void alterinteger ( ) 
  40. {alterinteger_regmem 
  41.   schar c  ; 
  42.   c = curchr ; 
  43.   scanoptionalequals () ; 
  44.   scanint () ; 
  45.   if ( c == 0 ) 
  46.   deadcycles = curval ; 
  47.   else insertpenalties = curval ; 
  48. void alterboxdimen ( ) 
  49. {alterboxdimen_regmem 
  50.   smallnumber c  ; 
  51.   eightbits b  ; 
  52.   c = curchr ; 
  53.   scaneightbitint () ; 
  54.   b = curval ; 
  55.   scanoptionalequals () ; 
  56.   scandimen ( false , false , false ) ; 
  57.   if ( eqtb [ 4578 + b ] .hh .v.RH != 0 ) 
  58.   mem [ eqtb [ 4578 + b ] .hh .v.RH + c ] .cint = curval ; 
  59. void znewfont ( a ) 
  60. smallnumber a ; 
  61. {/* 50 */ newfont_regmem 
  62.   halfword u  ; 
  63.   scaled s  ; 
  64.   internalfontnumber f  ; 
  65.   strnumber t  ; 
  66.   schar oldsetting  ; 
  67.   if ( jobname == 0 ) 
  68.   openlogfile () ; 
  69.   getrtoken () ; 
  70.   u = curcs ; 
  71.   if ( u >= 514 ) 
  72.   t = hash [ u ] .v.RH ; 
  73.   else if ( u >= 257 ) 
  74.   if ( u == 513 ) 
  75.   t = 1210 ; 
  76.   else t = u - 257 ; 
  77.   else {
  78.       
  79.     oldsetting = selector ; 
  80.     selector = 21 ; 
  81.     print ( 1210 ) ; 
  82.     print ( u - 1 ) ; 
  83.     selector = oldsetting ; 
  84.     {
  85.       if ( poolptr + 1 > poolsize ) 
  86.       overflow ( 257 , poolsize - initpoolptr ) ; 
  87.     } 
  88.     t = makestring () ; 
  89.   } 
  90.   if ( ( a >= 4 ) ) 
  91.   geqdefine ( u , 87 , 0 ) ; 
  92.   else eqdefine ( u , 87 , 0 ) ; 
  93.   scanoptionalequals () ; 
  94.   scanfilename () ; 
  95.   nameinprogress = true ; 
  96.   if ( scankeyword ( 1211 ) ) 
  97.   {
  98.     scandimen ( false , false , false ) ; 
  99.     s = curval ; 
  100.     if ( ( s <= 0 ) || ( s >= 134217728L ) ) 
  101.     {
  102.       {
  103.     if ( interaction == 3 ) 
  104.     wakeupterminal () ; 
  105.     printnl ( 262 ) ; 
  106.     print ( 1213 ) ; 
  107.       } 
  108.       printscaled ( s ) ; 
  109.       print ( 1214 ) ; 
  110.       {
  111.     helpptr = 2 ; 
  112.     helpline [ 1 ] = 1215 ; 
  113.     helpline [ 0 ] = 1216 ; 
  114.       } 
  115.       error () ; 
  116.       s = 10 * 65536L ; 
  117.     } 
  118.   } 
  119.   else if ( scankeyword ( 1212 ) ) 
  120.   {
  121.     scanint () ; 
  122.     s = - (integer) curval ; 
  123.     if ( ( curval <= 0 ) || ( curval > 32768L ) ) 
  124.     {
  125.       {
  126.     if ( interaction == 3 ) 
  127.     wakeupterminal () ; 
  128.     printnl ( 262 ) ; 
  129.     print ( 548 ) ; 
  130.       } 
  131.       {
  132.     helpptr = 1 ; 
  133.     helpline [ 0 ] = 549 ; 
  134.       } 
  135.       interror ( curval ) ; 
  136.       s = -1000 ; 
  137.     } 
  138.   } 
  139.   else s = -1000 ; 
  140.   nameinprogress = false ; 
  141.   {register integer for_end; f = 1 ; for_end = fontptr ; if ( f <= for_end) 
  142.   do 
  143.     if ( streqstr ( fontname [ f ] , curname ) && streqstr ( fontarea [ f ] , 
  144.     curarea ) ) 
  145.     {
  146.       if ( s > 0 ) 
  147.       {
  148.     if ( s == fontsize [ f ] ) 
  149.     goto lab50 ; 
  150.       } 
  151.       else if ( fontsize [ f ] == xnoverd ( fontdsize [ f ] , - (integer) s , 
  152.       1000 ) ) 
  153.       goto lab50 ; 
  154.     } 
  155.   while ( f++ < for_end ) ; } 
  156.   f = readfontinfo ( u , curname , curarea , s ) ; 
  157.   lab50: eqtb [ u ] .hh .v.RH = f ; 
  158.   eqtb [ 3524 + f ] = eqtb [ u ] ; 
  159.   hash [ 3524 + f ] .v.RH = t ; 
  160. void newinteraction ( ) 
  161. {newinteraction_regmem 
  162.   println () ; 
  163.   interaction = curchr ; 
  164.   if ( interaction == 0 ) 
  165.   selector = 16 ; 
  166.   else selector = 17 ; 
  167.   if ( logopened ) 
  168.   selector = selector + 2 ; 
  169. void doassignments ( ) 
  170. {/* 10 */ doassignments_regmem 
  171.   while ( true ) {
  172.       
  173.     do {
  174.     getxtoken () ; 
  175.     } while ( ! ( ( curcmd != 10 ) && ( curcmd != 0 ) ) ) ; 
  176.     if ( curcmd <= 70 ) 
  177.     return ; 
  178.     prefixedcommand () ; 
  179.   } 
  180. void openorclosein ( ) 
  181. {openorclosein_regmem 
  182.   schar c  ; 
  183.   schar n  ; 
  184.   c = curchr ; 
  185.   scanfourbitint () ; 
  186.   n = curval ; 
  187.   if ( readopen [ n ] != 2 ) 
  188.   {
  189.     aclose ( readfile [ n ] ) ; 
  190.     readopen [ n ] = 2 ; 
  191.   } 
  192.   if ( c != 0 ) 
  193.   {
  194.     scanoptionalequals () ; 
  195.     scanfilename () ; 
  196.     if ( curext == 335 ) 
  197.     curext = 784 ; 
  198.     packfilename ( curname , curarea , curext ) ; 
  199.     if ( aopenin ( readfile [ n ] , TEXINPUTPATH ) ) 
  200.     readopen [ n ] = 1 ; 
  201.   } 
  202. void issuemessage ( ) 
  203. {issuemessage_regmem 
  204.   schar oldsetting  ; 
  205.   schar c  ; 
  206.   strnumber s  ; 
  207.   c = curchr ; 
  208.   mem [ memtop - 12 ] .hh .v.RH = scantoks ( false , true ) ; 
  209.   oldsetting = selector ; 
  210.   selector = 21 ; 
  211.   tokenshow ( defref ) ; 
  212.   selector = oldsetting ; 
  213.   flushlist ( defref ) ; 
  214.   {
  215.     if ( poolptr + 1 > poolsize ) 
  216.     overflow ( 257 , poolsize - initpoolptr ) ; 
  217.   } 
  218.   s = makestring () ; 
  219.   if ( c == 0 ) 
  220.   {
  221.     if ( termoffset + ( strstart [ s + 1 ] - strstart [ s ] ) > maxprintline - 
  222.     2 ) 
  223.     println () ; 
  224.     else if ( ( termoffset > 0 ) || ( fileoffset > 0 ) ) 
  225.     printchar ( 32 ) ; 
  226.     print ( s ) ; 
  227.     flush ( stdout ) ; 
  228.   } 
  229.   else {
  230.       
  231.     {
  232.       if ( interaction == 3 ) 
  233.       wakeupterminal () ; 
  234.       printnl ( 262 ) ; 
  235.       print ( s ) ; 
  236.     } 
  237.     if ( eqtb [ 4321 ] .hh .v.RH != 0 ) 
  238.     useerrhelp = true ; 
  239.     else if ( longhelpseen ) 
  240.     {
  241.       helpptr = 1 ; 
  242.       helpline [ 0 ] = 1223 ; 
  243.     } 
  244.     else {
  245.     
  246.       if ( interaction < 3 ) 
  247.       longhelpseen = true ; 
  248.       {
  249.     helpptr = 4 ; 
  250.     helpline [ 3 ] = 1224 ; 
  251.     helpline [ 2 ] = 1225 ; 
  252.     helpline [ 1 ] = 1226 ; 
  253.     helpline [ 0 ] = 1227 ; 
  254.       } 
  255.     } 
  256.     error () ; 
  257.     useerrhelp = false ; 
  258.   } 
  259.   {
  260.     decr ( strptr ) ; 
  261.     poolptr = strstart [ strptr ] ; 
  262.   } 
  263. void shiftcase ( ) 
  264. {shiftcase_regmem 
  265.   halfword b  ; 
  266.   halfword p  ; 
  267.   halfword t  ; 
  268.   eightbits c  ; 
  269.   b = curchr ; 
  270.   p = scantoks ( false , false ) ; 
  271.   p = mem [ defref ] .hh .v.RH ; 
  272.   while ( p != 0 ) {
  273.       
  274.     t = mem [ p ] .hh .v.LH ; 
  275.     if ( t < 4352 ) 
  276.     {
  277.       c = t % 256 ; 
  278.       if ( eqtb [ b + c ] .hh .v.RH != 0 ) 
  279.       mem [ p ] .hh .v.LH = t - c + eqtb [ b + c ] .hh .v.RH ; 
  280.     } 
  281.     p = mem [ p ] .hh .v.RH ; 
  282.   } 
  283.   begintokenlist ( mem [ defref ] .hh .v.RH , 3 ) ; 
  284.   {
  285.     mem [ defref ] .hh .v.RH = avail ; 
  286.     avail = defref ; 
  287.     ;
  288. #ifdef STAT
  289.     decr ( dynused ) ; 
  290. #endif /* STAT */
  291.   } 
  292. void showwhatever ( ) 
  293. {/* 50 */ showwhatever_regmem 
  294.   halfword p  ; 
  295.   switch ( curchr ) 
  296.   {case 3 : 
  297.     {
  298.       begindiagnostic () ; 
  299.       showactivities () ; 
  300.     } 
  301.     break ; 
  302.   case 1 : 
  303.     {
  304.       scaneightbitint () ; 
  305.       begindiagnostic () ; 
  306.       printnl ( 1245 ) ; 
  307.       printint ( curval ) ; 
  308.       printchar ( 61 ) ; 
  309.       if ( eqtb [ 4578 + curval ] .hh .v.RH == 0 ) 
  310.       print ( 406 ) ; 
  311.       else showbox ( eqtb [ 4578 + curval ] .hh .v.RH ) ; 
  312.     } 
  313.     break ; 
  314.   case 0 : 
  315.     {
  316.       gettoken () ; 
  317.       if ( interaction == 3 ) 
  318.       wakeupterminal () ; 
  319.       printnl ( 1239 ) ; 
  320.       if ( curcs != 0 ) 
  321.       {
  322.     sprintcs ( curcs ) ; 
  323.     printchar ( 61 ) ; 
  324.       } 
  325.       printmeaning () ; 
  326.       goto lab50 ; 
  327.     } 
  328.     break ; 
  329.     default: 
  330.     {
  331.       p = thetoks () ; 
  332.       if ( interaction == 3 ) 
  333.       wakeupterminal () ; 
  334.       printnl ( 1239 ) ; 
  335.       tokenshow ( memtop - 3 ) ; 
  336.       flushlist ( mem [ memtop - 3 ] .hh .v.RH ) ; 
  337.       goto lab50 ; 
  338.     } 
  339.     break ; 
  340.   } 
  341.   enddiagnostic ( true ) ; 
  342.   {
  343.     if ( interaction == 3 ) 
  344.     wakeupterminal () ; 
  345.     printnl ( 262 ) ; 
  346.     print ( 1246 ) ; 
  347.   } 
  348.   if ( selector == 19 ) 
  349.   if ( eqtb [ 6192 ] .cint <= 0 ) 
  350.   {
  351.     selector = 17 ; 
  352.     print ( 1247 ) ; 
  353.     selector = 19 ; 
  354.   } 
  355.   lab50: if ( interaction < 3 ) 
  356.   {
  357.     helpptr = 0 ; 
  358.     decr ( errorcount ) ; 
  359.   } 
  360.   else if ( eqtb [ 6192 ] .cint > 0 ) 
  361.   {
  362.     {
  363.       helpptr = 3 ; 
  364.       helpline [ 2 ] = 1234 ; 
  365.       helpline [ 1 ] = 1235 ; 
  366.       helpline [ 0 ] = 1236 ; 
  367.     } 
  368.   } 
  369.   else {
  370.       
  371.     {
  372.       helpptr = 5 ; 
  373.       helpline [ 4 ] = 1234 ; 
  374.       helpline [ 3 ] = 1235 ; 
  375.       helpline [ 2 ] = 1236 ; 
  376.       helpline [ 1 ] = 1237 ; 
  377.       helpline [ 0 ] = 1238 ; 
  378.     } 
  379.   } 
  380.   error () ; 
  381. void znewwhatsit ( s , w ) 
  382. smallnumber s ; 
  383. smallnumber w ; 
  384. {newwhatsit_regmem 
  385.   halfword p  ; 
  386.   p = getnode ( w ) ; 
  387.   mem [ p ] .hh.b0 = 8 ; 
  388.   mem [ p ] .hh.b1 = s ; 
  389.   mem [ curlist .tailfield ] .hh .v.RH = p ; 
  390.   curlist .tailfield = p ; 
  391. void znewwritewhatsit ( w ) 
  392. smallnumber w ; 
  393. {newwritewhatsit_regmem 
  394.   newwhatsit ( curchr , w ) ; 
  395.   if ( w != 2 ) 
  396.   scanfourbitint () ; 
  397.   else {
  398.       
  399.     scanint () ; 
  400.     if ( curval < 0 ) 
  401.     curval = 17 ; 
  402.     else if ( curval > 15 ) 
  403.     curval = 16 ; 
  404.   } 
  405.   mem [ curlist .tailfield + 1 ] .hh .v.LH = curval ; 
  406. void doextension ( ) 
  407. {doextension_regmem 
  408.   integer i, j, k  ; 
  409.   halfword p, q, r  ; 
  410.   switch ( curchr ) 
  411.   {case 0 : 
  412.     {
  413.       newwritewhatsit ( 3 ) ; 
  414.       scanoptionalequals () ; 
  415.       scanfilename () ; 
  416.       mem [ curlist .tailfield + 1 ] .hh .v.RH = curname ; 
  417.       mem [ curlist .tailfield + 2 ] .hh .v.LH = curarea ; 
  418.       mem [ curlist .tailfield + 2 ] .hh .v.RH = curext ; 
  419.     } 
  420.     break ; 
  421.   case 1 : 
  422.     {
  423.       k = curcs ; 
  424.       newwritewhatsit ( 2 ) ; 
  425.       curcs = k ; 
  426.       p = scantoks ( false , false ) ; 
  427.       mem [ curlist .tailfield + 1 ] .hh .v.RH = defref ; 
  428.     } 
  429.     break ; 
  430.   case 2 : 
  431.     {
  432.       newwritewhatsit ( 2 ) ; 
  433.       mem [ curlist .tailfield + 1 ] .hh .v.RH = 0 ; 
  434.     } 
  435.     break ; 
  436.   case 3 : 
  437.     {
  438.       newwhatsit ( 3 , 2 ) ; 
  439.       mem [ curlist .tailfield + 1 ] .hh .v.LH = 0 ; 
  440.       p = scantoks ( false , true ) ; 
  441.       mem [ curlist .tailfield + 1 ] .hh .v.RH = defref ; 
  442.     } 
  443.     break ; 
  444.   case 4 : 
  445.     {
  446.       getxtoken () ; 
  447.       if ( ( curcmd == 59 ) && ( curchr <= 2 ) ) 
  448.       {
  449.     p = curlist .tailfield ; 
  450.     doextension () ; 
  451.     outwhat ( curlist .tailfield ) ; 
  452.     flushnodelist ( curlist .tailfield ) ; 
  453.     curlist .tailfield = p ; 
  454.     mem [ p ] .hh .v.RH = 0 ; 
  455.       } 
  456.       else backinput () ; 
  457.     } 
  458.     break ; 
  459.   case 5 : 
  460.     if ( abs ( curlist .modefield ) != 102 ) 
  461.     reportillegalcase () ; 
  462.     else {
  463.     
  464.       newwhatsit ( 4 , 2 ) ; 
  465.       scanint () ; 
  466.       if ( curval <= 0 ) 
  467.       curlist .auxfield .hh .v.RH = 0 ; 
  468.       else if ( curval > 255 ) 
  469.       curlist .auxfield .hh .v.RH = 0 ; 
  470.       else curlist .auxfield .hh .v.RH = curval ; 
  471.       mem [ curlist .tailfield + 1 ] .hh .v.RH = curlist .auxfield .hh .v.RH ; 
  472.       mem [ curlist .tailfield + 1 ] .hh.b0 = normmin ( eqtb [ 6214 ] .cint ) 
  473.       ; 
  474.       mem [ curlist .tailfield + 1 ] .hh.b1 = normmin ( eqtb [ 6215 ] .cint ) 
  475.       ; 
  476.     } 
  477.     break ; 
  478.     default: 
  479.     confusion ( 1282 ) ; 
  480.     break ; 
  481.   } 
  482. void fixlanguage ( ) 
  483. {fixlanguage_regmem 
  484.   ASCIIcode l  ; 
  485.   if ( eqtb [ 6213 ] .cint <= 0 ) 
  486.   l = 0 ; 
  487.   else if ( eqtb [ 6213 ] .cint > 255 ) 
  488.   l = 0 ; 
  489.   else l = eqtb [ 6213 ] .cint ; 
  490.   if ( l != curlist .auxfield .hh .v.RH ) 
  491.   {
  492.     newwhatsit ( 4 , 2 ) ; 
  493.     mem [ curlist .tailfield + 1 ] .hh .v.RH = l ; 
  494.     curlist .auxfield .hh .v.RH = l ; 
  495.     mem [ curlist .tailfield + 1 ] .hh.b0 = normmin ( eqtb [ 6214 ] .cint ) ; 
  496.     mem [ curlist .tailfield + 1 ] .hh.b1 = normmin ( eqtb [ 6215 ] .cint ) ; 
  497.   } 
  498. void handlerightbrace ( ) 
  499. {handlerightbrace_regmem 
  500.   halfword p, q  ; 
  501.   scaled d  ; 
  502.   integer f  ; 
  503.   switch ( curgroup ) 
  504.   {case 1 : 
  505.     unsave () ; 
  506.     break ; 
  507.   case 0 : 
  508.     {
  509.       {
  510.     if ( interaction == 3 ) 
  511.     wakeupterminal () ; 
  512.     printnl ( 262 ) ; 
  513.     print ( 1037 ) ; 
  514.       } 
  515.       {
  516.     helpptr = 2 ; 
  517.     helpline [ 1 ] = 1038 ; 
  518.     helpline [ 0 ] = 1039 ; 
  519.       } 
  520.       error () ; 
  521.     } 
  522.     break ; 
  523.   case 14 : 
  524.   case 15 : 
  525.   case 16 : 
  526.     extrarightbrace () ; 
  527.     break ; 
  528.   case 2 : 
  529.     package ( 0 ) ; 
  530.     break ; 
  531.   case 3 : 
  532.     {
  533.       adjusttail = memtop - 5 ; 
  534.       package ( 0 ) ; 
  535.     } 
  536.     break ; 
  537.   case 4 : 
  538.     {
  539.       endgraf () ; 
  540.       package ( 0 ) ; 
  541.     } 
  542.     break ; 
  543.   case 5 : 
  544.     {
  545.       endgraf () ; 
  546.       package ( 4 ) ; 
  547.     } 
  548.     break ; 
  549.   case 11 : 
  550.     {
  551.       endgraf () ; 
  552.       q = eqtb [ 3792 ] .hh .v.RH ; 
  553.       incr ( mem [ q ] .hh .v.RH ) ; 
  554.       d = eqtb [ 6736 ] .cint ; 
  555.       f = eqtb [ 6205 ] .cint ; 
  556.       unsave () ; 
  557.       decr ( saveptr ) ; 
  558.       p = vpackage ( mem [ curlist .headfield ] .hh .v.RH , 0 , 1 , 
  559.       1073741823L ) ; 
  560.       popnest () ; 
  561.       if ( savestack [ saveptr + 0 ] .cint < 255 ) 
  562.       {
  563.     {
  564.       mem [ curlist .tailfield ] .hh .v.RH = getnode ( 5 ) ; 
  565.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  566.     } 
  567.     mem [ curlist .tailfield ] .hh.b0 = 3 ; 
  568.     mem [ curlist .tailfield ] .hh.b1 = savestack [ saveptr + 0 ] .cint ; 
  569.     mem [ curlist .tailfield + 3 ] .cint = mem [ p + 3 ] .cint + mem [ p + 
  570.     2 ] .cint ; 
  571.     mem [ curlist .tailfield + 4 ] .hh .v.LH = mem [ p + 5 ] .hh .v.RH ; 
  572.     mem [ curlist .tailfield + 4 ] .hh .v.RH = q ; 
  573.     mem [ curlist .tailfield + 2 ] .cint = d ; 
  574.     mem [ curlist .tailfield + 1 ] .cint = f ; 
  575.       } 
  576.       else {
  577.       
  578.     {
  579.       mem [ curlist .tailfield ] .hh .v.RH = getnode ( 2 ) ; 
  580.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  581.     } 
  582.     mem [ curlist .tailfield ] .hh.b0 = 5 ; 
  583.     mem [ curlist .tailfield ] .hh.b1 = 0 ; 
  584.     mem [ curlist .tailfield + 1 ] .cint = mem [ p + 5 ] .hh .v.RH ; 
  585.     deleteglueref ( q ) ; 
  586.       } 
  587.       freenode ( p , 7 ) ; 
  588.       if ( nestptr == 0 ) 
  589.       buildpage () ; 
  590.     } 
  591.     break ; 
  592.   case 8 : 
  593.     {
  594.       if ( ( curinput .locfield != 0 ) || ( ( curinput .indexfield != 6 ) && ( 
  595.       curinput .indexfield != 3 ) ) ) 
  596.       {
  597.     {
  598.       if ( interaction == 3 ) 
  599.       wakeupterminal () ; 
  600.       printnl ( 262 ) ; 
  601.       print ( 1003 ) ; 
  602.     } 
  603.     {
  604.       helpptr = 2 ; 
  605.       helpline [ 1 ] = 1004 ; 
  606.       helpline [ 0 ] = 1005 ; 
  607.     } 
  608.     error () ; 
  609.     do {
  610.         gettoken () ; 
  611.     } while ( ! ( curinput .locfield == 0 ) ) ; 
  612.       } 
  613.       endtokenlist () ; 
  614.       endgraf () ; 
  615.       unsave () ; 
  616.       outputactive = false ; 
  617.       insertpenalties = 0 ; 
  618.       if ( eqtb [ 4833 ] .hh .v.RH != 0 ) 
  619.       {
  620.     {
  621.       if ( interaction == 3 ) 
  622.       wakeupterminal () ; 
  623.       printnl ( 262 ) ; 
  624.       print ( 1006 ) ; 
  625.     } 
  626.     printesc ( 405 ) ; 
  627.     printint ( 255 ) ; 
  628.     {
  629.       helpptr = 3 ; 
  630.       helpline [ 2 ] = 1007 ; 
  631.       helpline [ 1 ] = 1008 ; 
  632.       helpline [ 0 ] = 1009 ; 
  633.     } 
  634.     boxerror ( 255 ) ; 
  635.       } 
  636.       if ( curlist .tailfield != curlist .headfield ) 
  637.       {
  638.     mem [ pagetail ] .hh .v.RH = mem [ curlist .headfield ] .hh .v.RH ; 
  639.     pagetail = curlist .tailfield ; 
  640.       } 
  641.       if ( mem [ memtop - 2 ] .hh .v.RH != 0 ) 
  642.       {
  643.     if ( mem [ memtop - 1 ] .hh .v.RH == 0 ) 
  644.     nest [ 0 ] .tailfield = pagetail ; 
  645.     mem [ pagetail ] .hh .v.RH = mem [ memtop - 1 ] .hh .v.RH ; 
  646.     mem [ memtop - 1 ] .hh .v.RH = mem [ memtop - 2 ] .hh .v.RH ; 
  647.     mem [ memtop - 2 ] .hh .v.RH = 0 ; 
  648.     pagetail = memtop - 2 ; 
  649.       } 
  650.       popnest () ; 
  651.       buildpage () ; 
  652.     } 
  653.     break ; 
  654.   case 10 : 
  655.     builddiscretionary () ; 
  656.     break ; 
  657.   case 6 : 
  658.     {
  659.       backinput () ; 
  660.       curtok = 7610 ; 
  661.       {
  662.     if ( interaction == 3 ) 
  663.     wakeupterminal () ; 
  664.     printnl ( 262 ) ; 
  665.     print ( 621 ) ; 
  666.       } 
  667.       printesc ( 892 ) ; 
  668.       print ( 622 ) ; 
  669.       {
  670.     helpptr = 1 ; 
  671.     helpline [ 0 ] = 1118 ; 
  672.       } 
  673.       inserror () ; 
  674.     } 
  675.     break ; 
  676.   case 7 : 
  677.     {
  678.       endgraf () ; 
  679.       unsave () ; 
  680.       alignpeek () ; 
  681.     } 
  682.     break ; 
  683.   case 12 : 
  684.     {
  685.       endgraf () ; 
  686.       unsave () ; 
  687.       saveptr = saveptr - 2 ; 
  688.       p = vpackage ( mem [ curlist .headfield ] .hh .v.RH , savestack [ 
  689.       saveptr + 1 ] .cint , savestack [ saveptr + 0 ] .cint , 1073741823L ) ; 
  690.       popnest () ; 
  691.       {
  692.     mem [ curlist .tailfield ] .hh .v.RH = newnoad () ; 
  693.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  694.       } 
  695.       mem [ curlist .tailfield ] .hh.b0 = 29 ; 
  696.       mem [ curlist .tailfield + 1 ] .hh .v.RH = 2 ; 
  697.       mem [ curlist .tailfield + 1 ] .hh .v.LH = p ; 
  698.     } 
  699.     break ; 
  700.   case 13 : 
  701.     buildchoices () ; 
  702.     break ; 
  703.   case 9 : 
  704.     {
  705.       unsave () ; 
  706.       decr ( saveptr ) ; 
  707.       mem [ savestack [ saveptr + 0 ] .cint ] .hh .v.RH = 3 ; 
  708.       p = finmlist ( 0 ) ; 
  709.       mem [ savestack [ saveptr + 0 ] .cint ] .hh .v.LH = p ; 
  710.       if ( p != 0 ) 
  711.       if ( mem [ p ] .hh .v.RH == 0 ) 
  712.       if ( mem [ p ] .hh.b0 == 16 ) 
  713.       {
  714.     if ( mem [ p + 3 ] .hh .v.RH == 0 ) 
  715.     if ( mem [ p + 2 ] .hh .v.RH == 0 ) 
  716.     {
  717.       mem [ savestack [ saveptr + 0 ] .cint ] .hh = mem [ p + 1 ] .hh ; 
  718.       freenode ( p , 4 ) ; 
  719.     } 
  720.       } 
  721.       else if ( mem [ p ] .hh.b0 == 28 ) 
  722.       if ( savestack [ saveptr + 0 ] .cint == curlist .tailfield + 1 ) 
  723.       if ( mem [ curlist .tailfield ] .hh.b0 == 16 ) 
  724.       {
  725.     q = curlist .headfield ; 
  726.     while ( mem [ q ] .hh .v.RH != curlist .tailfield ) q = mem [ q ] .hh 
  727.     .v.RH ; 
  728.     mem [ q ] .hh .v.RH = p ; 
  729.     freenode ( curlist .tailfield , 4 ) ; 
  730.     curlist .tailfield = p ; 
  731.       } 
  732.     } 
  733.     break ; 
  734.     default: 
  735.     confusion ( 1040 ) ; 
  736.     break ; 
  737.   } 
  738. void maincontrol ( ) 
  739. {/* 60 21 70 80 90 91 92 95 100 101 110 111 112 120 10 */ maincontrol_regmem 
  740.   integer t  ; 
  741.   if ( eqtb [ 4319 ] .hh .v.RH != 0 ) 
  742.   begintokenlist ( eqtb [ 4319 ] .hh .v.RH , 12 ) ; 
  743.   lab60: getxtoken () ; 
  744.   lab21: if ( interrupt != 0 ) 
  745.   if ( OKtointerrupt ) 
  746.   {
  747.     backinput () ; 
  748.     {
  749.       if ( interrupt != 0 ) 
  750.       pauseforinstructions () ; 
  751.     } 
  752.     goto lab60 ; 
  753.   } 
  754.     ;
  755. #ifdef DEBUG
  756.   if ( panicking ) 
  757.   checkmem ( false ) ; 
  758. #endif /* DEBUG */
  759.   if ( eqtb [ 6199 ] .cint > 0 ) 
  760.   showcurcmdchr () ; 
  761.   switch ( abs ( curlist .modefield ) + curcmd ) 
  762.   {case 113 : 
  763.   case 114 : 
  764.   case 170 : 
  765.     goto lab70 ; 
  766.     break ; 
  767.   case 118 : 
  768.     {
  769.       scancharnum () ; 
  770.       curchr = curval ; 
  771.       goto lab70 ; 
  772.     } 
  773.     break ; 
  774.   case 167 : 
  775.     {
  776.       getxtoken () ; 
  777.       if ( ( curcmd == 11 ) || ( curcmd == 12 ) || ( curcmd == 68 ) || ( 
  778.       curcmd == 16 ) ) 
  779.       cancelboundary = true ; 
  780.       goto lab21 ; 
  781.     } 
  782.     break ; 
  783.   case 112 : 
  784.     if ( curlist .auxfield .hh .v.LH == 1000 ) 
  785.     goto lab120 ; 
  786.     else appspace () ; 
  787.     break ; 
  788.   case 166 : 
  789.   case 267 : 
  790.     goto lab120 ; 
  791.     break ; 
  792.   case 1 : 
  793.   case 102 : 
  794.   case 203 : 
  795.   case 11 : 
  796.   case 213 : 
  797.   case 268 : 
  798.     ; 
  799.     break ; 
  800.   case 40 : 
  801.   case 141 : 
  802.   case 242 : 
  803.     {
  804.       do {
  805.       getxtoken () ; 
  806.       } while ( ! ( curcmd != 10 ) ) ; 
  807.       goto lab21 ; 
  808.     } 
  809.     break ; 
  810.   case 15 : 
  811.     if ( itsallover () ) 
  812.     return ; 
  813.     break ; 
  814.   case 23 : 
  815.   case 123 : 
  816.   case 224 : 
  817.   case 71 : 
  818.   case 172 : 
  819.   case 273 : 
  820.   case 39 : 
  821.   case 45 : 
  822.   case 49 : 
  823.   case 150 : 
  824.   case 7 : 
  825.   case 108 : 
  826.   case 209 : 
  827.     reportillegalcase () ; 
  828.     break ; 
  829.   case 8 : 
  830.   case 109 : 
  831.   case 9 : 
  832.   case 110 : 
  833.   case 18 : 
  834.   case 119 : 
  835.   case 70 : 
  836.   case 171 : 
  837.   case 51 : 
  838.   case 152 : 
  839.   case 16 : 
  840.   case 117 : 
  841.   case 50 : 
  842.   case 151 : 
  843.   case 53 : 
  844.   case 154 : 
  845.   case 67 : 
  846.   case 168 : 
  847.   case 54 : 
  848.   case 155 : 
  849.   case 55 : 
  850.   case 156 : 
  851.   case 57 : 
  852.   case 158 : 
  853.   case 56 : 
  854.   case 157 : 
  855.   case 31 : 
  856.   case 132 : 
  857.   case 52 : 
  858.   case 153 : 
  859.   case 29 : 
  860.   case 130 : 
  861.   case 47 : 
  862.   case 148 : 
  863.   case 212 : 
  864.   case 216 : 
  865.   case 217 : 
  866.   case 230 : 
  867.   case 227 : 
  868.   case 236 : 
  869.   case 239 : 
  870.     insertdollarsign () ; 
  871.     break ; 
  872.   case 37 : 
  873.   case 137 : 
  874.   case 238 : 
  875.     {
  876.       {
  877.     mem [ curlist .tailfield ] .hh .v.RH = scanrulespec () ; 
  878.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  879.       } 
  880.       if ( abs ( curlist .modefield ) == 1 ) 
  881.       curlist .auxfield .cint = -65536000L ; 
  882.       else if ( abs ( curlist .modefield ) == 102 ) 
  883.       curlist .auxfield .hh .v.LH = 1000 ; 
  884.     } 
  885.     break ; 
  886.   case 28 : 
  887.   case 128 : 
  888.   case 229 : 
  889.   case 231 : 
  890.     appendglue () ; 
  891.     break ; 
  892.   case 30 : 
  893.   case 131 : 
  894.   case 232 : 
  895.   case 233 : 
  896.     appendkern () ; 
  897.     break ; 
  898.   case 2 : 
  899.   case 103 : 
  900.     newsavelevel ( 1 ) ; 
  901.     break ; 
  902.   case 62 : 
  903.   case 163 : 
  904.   case 264 : 
  905.     newsavelevel ( 14 ) ; 
  906.     break ; 
  907.   case 63 : 
  908.   case 164 : 
  909.   case 265 : 
  910.     if ( curgroup == 14 ) 
  911.     unsave () ; 
  912.     else offsave () ; 
  913.     break ; 
  914.   case 3 : 
  915.   case 104 : 
  916.   case 205 : 
  917.     handlerightbrace () ; 
  918.     break ; 
  919.   case 22 : 
  920.   case 124 : 
  921.   case 225 : 
  922.     {
  923.       t = curchr ; 
  924.       scandimen ( false , false , false ) ; 
  925.       if ( t == 0 ) 
  926.       scanbox ( curval ) ; 
  927.       else scanbox ( - (integer) curval ) ; 
  928.     } 
  929.     break ; 
  930.   case 32 : 
  931.   case 133 : 
  932.   case 234 : 
  933.     scanbox ( 1073742237L + curchr ) ; 
  934.     break ; 
  935.   case 21 : 
  936.   case 122 : 
  937.   case 223 : 
  938.     beginbox ( 0 ) ; 
  939.     break ; 
  940.   case 44 : 
  941.     newgraf ( curchr > 0 ) ; 
  942.     break ; 
  943.   case 12 : 
  944.   case 13 : 
  945.   case 17 : 
  946.   case 69 : 
  947.   case 4 : 
  948.   case 24 : 
  949.   case 36 : 
  950.   case 46 : 
  951.   case 48 : 
  952.   case 27 : 
  953.   case 34 : 
  954.   case 65 : 
  955.   case 66 : 
  956.     {
  957.       backinput () ; 
  958.       newgraf ( true ) ; 
  959.     } 
  960.     break ; 
  961.   case 145 : 
  962.   case 246 : 
  963.     indentinhmode () ; 
  964.     break ; 
  965.   case 14 : 
  966.     {
  967.       normalparagraph () ; 
  968.       if ( curlist .modefield > 0 ) 
  969.       buildpage () ; 
  970.     } 
  971.     break ; 
  972.   case 115 : 
  973.     {
  974.       if ( alignstate < 0 ) 
  975.       offsave () ; 
  976.       endgraf () ; 
  977.       if ( curlist .modefield == 1 ) 
  978.       buildpage () ; 
  979.     } 
  980.     break ; 
  981.   case 116 : 
  982.   case 129 : 
  983.   case 138 : 
  984.   case 126 : 
  985.   case 134 : 
  986.     headforvmode () ; 
  987.     break ; 
  988.   case 38 : 
  989.   case 139 : 
  990.   case 240 : 
  991.   case 140 : 
  992.   case 241 : 
  993.     begininsertoradjust () ; 
  994.     break ; 
  995.   case 19 : 
  996.   case 120 : 
  997.   case 221 : 
  998.     makemark () ; 
  999.     break ; 
  1000.   case 43 : 
  1001.   case 144 : 
  1002.   case 245 : 
  1003.     appendpenalty () ; 
  1004.     break ; 
  1005.   case 26 : 
  1006.   case 127 : 
  1007.   case 228 : 
  1008.     deletelast () ; 
  1009.     break ; 
  1010.   case 25 : 
  1011.   case 125 : 
  1012.   case 226 : 
  1013.     unpackage () ; 
  1014.     break ; 
  1015.   case 146 : 
  1016.     appenditaliccorrection () ; 
  1017.     break ; 
  1018.   case 247 : 
  1019.     {
  1020.       mem [ curlist .tailfield ] .hh .v.RH = newkern ( 0 ) ; 
  1021.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1022.     } 
  1023.     break ; 
  1024.   case 149 : 
  1025.   case 250 : 
  1026.     appenddiscretionary () ; 
  1027.     break ; 
  1028.   case 147 : 
  1029.     makeaccent () ; 
  1030.     break ; 
  1031.   case 6 : 
  1032.   case 107 : 
  1033.   case 208 : 
  1034.   case 5 : 
  1035.   case 106 : 
  1036.   case 207 : 
  1037.     alignerror () ; 
  1038.     break ; 
  1039.   case 35 : 
  1040.   case 136 : 
  1041.   case 237 : 
  1042.     noalignerror () ; 
  1043.     break ; 
  1044.   case 64 : 
  1045.   case 165 : 
  1046.   case 266 : 
  1047.     omiterror () ; 
  1048.     break ; 
  1049.   case 33 : 
  1050.   case 135 : 
  1051.     initalign () ; 
  1052.     break ; 
  1053.   case 235 : 
  1054.     if ( privileged () ) 
  1055.     if ( curgroup == 15 ) 
  1056.     initalign () ; 
  1057.     else offsave () ; 
  1058.     break ; 
  1059.   case 10 : 
  1060.   case 111 : 
  1061.     doendv () ; 
  1062.     break ; 
  1063.   case 68 : 
  1064.   case 169 : 
  1065.   case 270 : 
  1066.     cserror () ; 
  1067.     break ; 
  1068.   case 105 : 
  1069.     initmath () ; 
  1070.     break ; 
  1071.   case 251 : 
  1072.     if ( privileged () ) 
  1073.     if ( curgroup == 15 ) 
  1074.     starteqno () ; 
  1075.     else offsave () ; 
  1076.     break ; 
  1077.   case 204 : 
  1078.     {
  1079.       {
  1080.     mem [ curlist .tailfield ] .hh .v.RH = newnoad () ; 
  1081.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1082.       } 
  1083.       backinput () ; 
  1084.       scanmath ( curlist .tailfield + 1 ) ; 
  1085.     } 
  1086.     break ; 
  1087.   case 214 : 
  1088.   case 215 : 
  1089.   case 271 : 
  1090.     setmathchar ( eqtb [ 5907 + curchr ] .hh .v.RH ) ; 
  1091.     break ; 
  1092.   case 219 : 
  1093.     {
  1094.       scancharnum () ; 
  1095.       curchr = curval ; 
  1096.       setmathchar ( eqtb [ 5907 + curchr ] .hh .v.RH ) ; 
  1097.     } 
  1098.     break ; 
  1099.   case 220 : 
  1100.     {
  1101.       scanfifteenbitint () ; 
  1102.       setmathchar ( curval ) ; 
  1103.     } 
  1104.     break ; 
  1105.   case 272 : 
  1106.     setmathchar ( curchr ) ; 
  1107.     break ; 
  1108.   case 218 : 
  1109.     {
  1110.       scantwentysevenbitint () ; 
  1111.       setmathchar ( curval / 4096 ) ; 
  1112.     } 
  1113.     break ; 
  1114.   case 253 : 
  1115.     {
  1116.       {
  1117.     mem [ curlist .tailfield ] .hh .v.RH = newnoad () ; 
  1118.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1119.       } 
  1120.       mem [ curlist .tailfield ] .hh.b0 = curchr ; 
  1121.       scanmath ( curlist .tailfield + 1 ) ; 
  1122.     } 
  1123.     break ; 
  1124.   case 254 : 
  1125.     mathlimitswitch () ; 
  1126.     break ; 
  1127.   case 269 : 
  1128.     mathradical () ; 
  1129.     break ; 
  1130.   case 248 : 
  1131.   case 249 : 
  1132.     mathac () ; 
  1133.     break ; 
  1134.   case 259 : 
  1135.     {
  1136.       scanspec ( 12 , false ) ; 
  1137.       normalparagraph () ; 
  1138.       pushnest () ; 
  1139.       curlist .modefield = -1 ; 
  1140.       curlist .auxfield .cint = -65536000L ; 
  1141.       if ( eqtb [ 4318 ] .hh .v.RH != 0 ) 
  1142.       begintokenlist ( eqtb [ 4318 ] .hh .v.RH , 11 ) ; 
  1143.     } 
  1144.     break ; 
  1145.   case 256 : 
  1146.     {
  1147.       mem [ curlist .tailfield ] .hh .v.RH = newstyle ( curchr ) ; 
  1148.       curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1149.     } 
  1150.     break ; 
  1151.   case 258 : 
  1152.     {
  1153.       {
  1154.     mem [ curlist .tailfield ] .hh .v.RH = newglue ( 0 ) ; 
  1155.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1156.       } 
  1157.       mem [ curlist .tailfield ] .hh.b1 = 98 ; 
  1158.     } 
  1159.     break ; 
  1160.   case 257 : 
  1161.     appendchoices () ; 
  1162.     break ; 
  1163.   case 211 : 
  1164.   case 210 : 
  1165.     subsup () ; 
  1166.     break ; 
  1167.   case 255 : 
  1168.     mathfraction () ; 
  1169.     break ; 
  1170.   case 252 : 
  1171.     mathleftright () ; 
  1172.     break ; 
  1173.   case 206 : 
  1174.     if ( curgroup == 15 ) 
  1175.     aftermath () ; 
  1176.     else offsave () ; 
  1177.     break ; 
  1178.   case 72 : 
  1179.   case 173 : 
  1180.   case 274 : 
  1181.   case 73 : 
  1182.   case 174 : 
  1183.   case 275 : 
  1184.   case 74 : 
  1185.   case 175 : 
  1186.   case 276 : 
  1187.   case 75 : 
  1188.   case 176 : 
  1189.   case 277 : 
  1190.   case 76 : 
  1191.   case 177 : 
  1192.   case 278 : 
  1193.   case 77 : 
  1194.   case 178 : 
  1195.   case 279 : 
  1196.   case 78 : 
  1197.   case 179 : 
  1198.   case 280 : 
  1199.   case 79 : 
  1200.   case 180 : 
  1201.   case 281 : 
  1202.   case 80 : 
  1203.   case 181 : 
  1204.   case 282 : 
  1205.   case 81 : 
  1206.   case 182 : 
  1207.   case 283 : 
  1208.   case 82 : 
  1209.   case 183 : 
  1210.   case 284 : 
  1211.   case 83 : 
  1212.   case 184 : 
  1213.   case 285 : 
  1214.   case 84 : 
  1215.   case 185 : 
  1216.   case 286 : 
  1217.   case 85 : 
  1218.   case 186 : 
  1219.   case 287 : 
  1220.   case 86 : 
  1221.   case 187 : 
  1222.   case 288 : 
  1223.   case 87 : 
  1224.   case 188 : 
  1225.   case 289 : 
  1226.   case 88 : 
  1227.   case 189 : 
  1228.   case 290 : 
  1229.   case 89 : 
  1230.   case 190 : 
  1231.   case 291 : 
  1232.   case 90 : 
  1233.   case 191 : 
  1234.   case 292 : 
  1235.   case 91 : 
  1236.   case 192 : 
  1237.   case 293 : 
  1238.   case 92 : 
  1239.   case 193 : 
  1240.   case 294 : 
  1241.   case 93 : 
  1242.   case 194 : 
  1243.   case 295 : 
  1244.   case 94 : 
  1245.   case 195 : 
  1246.   case 296 : 
  1247.   case 95 : 
  1248.   case 196 : 
  1249.   case 297 : 
  1250.   case 96 : 
  1251.   case 197 : 
  1252.   case 298 : 
  1253.   case 97 : 
  1254.   case 198 : 
  1255.   case 299 : 
  1256.   case 98 : 
  1257.   case 199 : 
  1258.   case 300 : 
  1259.   case 99 : 
  1260.   case 200 : 
  1261.   case 301 : 
  1262.   case 100 : 
  1263.   case 201 : 
  1264.   case 302 : 
  1265.   case 101 : 
  1266.   case 202 : 
  1267.   case 303 : 
  1268.     prefixedcommand () ; 
  1269.     break ; 
  1270.   case 41 : 
  1271.   case 142 : 
  1272.   case 243 : 
  1273.     {
  1274.       gettoken () ; 
  1275.       aftertoken = curtok ; 
  1276.     } 
  1277.     break ; 
  1278.   case 42 : 
  1279.   case 143 : 
  1280.   case 244 : 
  1281.     {
  1282.       gettoken () ; 
  1283.       saveforafter ( curtok ) ; 
  1284.     } 
  1285.     break ; 
  1286.   case 61 : 
  1287.   case 162 : 
  1288.   case 263 : 
  1289.     openorclosein () ; 
  1290.     break ; 
  1291.   case 59 : 
  1292.   case 160 : 
  1293.   case 261 : 
  1294.     issuemessage () ; 
  1295.     break ; 
  1296.   case 58 : 
  1297.   case 159 : 
  1298.   case 260 : 
  1299.     shiftcase () ; 
  1300.     break ; 
  1301.   case 20 : 
  1302.   case 121 : 
  1303.   case 222 : 
  1304.     showwhatever () ; 
  1305.     break ; 
  1306.   case 60 : 
  1307.   case 161 : 
  1308.   case 262 : 
  1309.     doextension () ; 
  1310.     break ; 
  1311.   } 
  1312.   goto lab60 ; 
  1313.   lab70: mains = eqtb [ 5651 + curchr ] .hh .v.RH ; 
  1314.   if ( mains == 1000 ) 
  1315.   curlist .auxfield .hh .v.LH = 1000 ; 
  1316.   else if ( mains < 1000 ) 
  1317.   {
  1318.     if ( mains > 0 ) 
  1319.     curlist .auxfield .hh .v.LH = mains ; 
  1320.   } 
  1321.   else if ( curlist .auxfield .hh .v.LH < 1000 ) 
  1322.   curlist .auxfield .hh .v.LH = 1000 ; 
  1323.   else curlist .auxfield .hh .v.LH = mains ; 
  1324.   mainf = eqtb [ 4834 ] .hh .v.RH ; 
  1325.   bchar = fontbchar [ mainf ] ; 
  1326.   falsebchar = fontfalsebchar [ mainf ] ; 
  1327.   if ( curlist .modefield > 0 ) 
  1328.   if ( eqtb [ 6213 ] .cint != curlist .auxfield .hh .v.RH ) 
  1329.   fixlanguage () ; 
  1330.   {
  1331.     ligstack = avail ; 
  1332.     if ( ligstack == 0 ) 
  1333.     ligstack = getavail () ; 
  1334.     else {
  1335.     
  1336.       avail = mem [ ligstack ] .hh .v.RH ; 
  1337.       mem [ ligstack ] .hh .v.RH = 0 ; 
  1338.     ;
  1339. #ifdef STAT
  1340.       incr ( dynused ) ; 
  1341. #endif /* STAT */
  1342.     } 
  1343.   } 
  1344.   mem [ ligstack ] .hh.b0 = mainf ; 
  1345.   curl = curchr ; 
  1346.   mem [ ligstack ] .hh.b1 = curl ; 
  1347.   curq = curlist .tailfield ; 
  1348.   if ( cancelboundary ) 
  1349.   {
  1350.     cancelboundary = false ; 
  1351.     maink = fontmemsize ; 
  1352.   } 
  1353.   else maink = bcharlabel [ mainf ] ; 
  1354.   if ( maink == fontmemsize ) 
  1355.   goto lab92 ; 
  1356.   curr = curl ; 
  1357.   curl = 256 ; 
  1358.   goto lab111 ; 
  1359.   lab80: if ( curl < 256 ) 
  1360.   {
  1361.     if ( mem [ curlist .tailfield ] .hh.b1 == hyphenchar [ mainf ] ) 
  1362.     if ( mem [ curq ] .hh .v.RH > 0 ) 
  1363.     insdisc = true ; 
  1364.     if ( ligaturepresent ) 
  1365.     {
  1366.       mainp = newligature ( mainf , curl , mem [ curq ] .hh .v.RH ) ; 
  1367.       if ( lfthit ) 
  1368.       {
  1369.     mem [ mainp ] .hh.b1 = 2 ; 
  1370.     lfthit = false ; 
  1371.       } 
  1372.       if ( rthit ) 
  1373.       if ( ligstack == 0 ) 
  1374.       {
  1375.     incr ( mem [ mainp ] .hh.b1 ) ; 
  1376.     rthit = false ; 
  1377.       } 
  1378.       mem [ curq ] .hh .v.RH = mainp ; 
  1379.       curlist .tailfield = mainp ; 
  1380.       ligaturepresent = false ; 
  1381.     } 
  1382.     if ( insdisc ) 
  1383.     {
  1384.       insdisc = false ; 
  1385.       if ( curlist .modefield > 0 ) 
  1386.       {
  1387.     mem [ curlist .tailfield ] .hh .v.RH = newdisc () ; 
  1388.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1389.       } 
  1390.     } 
  1391.   } 
  1392.   lab90: if ( ligstack == 0 ) 
  1393.   goto lab21 ; 
  1394.   curq = curlist .tailfield ; 
  1395.   curl = curr ; 
  1396.   lab91: if ( ! ( ligstack >= himemmin ) ) 
  1397.   goto lab95 ; 
  1398.   lab92: if ( ( curchr < fontbc [ mainf ] ) || ( curchr > fontec [ mainf ] ) ) 
  1399.   {
  1400.     charwarning ( mainf , curchr ) ; 
  1401.     {
  1402.       mem [ ligstack ] .hh .v.RH = avail ; 
  1403.       avail = ligstack ; 
  1404.     ;
  1405. #ifdef STAT
  1406.       decr ( dynused ) ; 
  1407. #endif /* STAT */
  1408.     } 
  1409.     goto lab60 ; 
  1410.   } 
  1411.   maini = fontinfo [ charbase [ mainf ] + curl ] .qqqq ; 
  1412.   if ( ! ( maini .b0 > 0 ) ) 
  1413.   {
  1414.     charwarning ( mainf , curchr ) ; 
  1415.     {
  1416.       mem [ ligstack ] .hh .v.RH = avail ; 
  1417.       avail = ligstack ; 
  1418.     ;
  1419. #ifdef STAT
  1420.       decr ( dynused ) ; 
  1421. #endif /* STAT */
  1422.     } 
  1423.     goto lab60 ; 
  1424.   } 
  1425.   {
  1426.     mem [ curlist .tailfield ] .hh .v.RH = ligstack ; 
  1427.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1428.   } 
  1429.   lab100: getnext () ; 
  1430.   if ( curcmd == 11 ) 
  1431.   goto lab101 ; 
  1432.   if ( curcmd == 12 ) 
  1433.   goto lab101 ; 
  1434.   if ( curcmd == 68 ) 
  1435.   goto lab101 ; 
  1436.   xtoken () ; 
  1437.   if ( curcmd == 11 ) 
  1438.   goto lab101 ; 
  1439.   if ( curcmd == 12 ) 
  1440.   goto lab101 ; 
  1441.   if ( curcmd == 68 ) 
  1442.   goto lab101 ; 
  1443.   if ( curcmd == 16 ) 
  1444.   {
  1445.     scancharnum () ; 
  1446.     curchr = curval ; 
  1447.     goto lab101 ; 
  1448.   } 
  1449.   if ( curcmd == 65 ) 
  1450.   bchar = 256 ; 
  1451.   curr = bchar ; 
  1452.   ligstack = 0 ; 
  1453.   goto lab110 ; 
  1454.   lab101: mains = eqtb [ 5651 + curchr ] .hh .v.RH ; 
  1455.   if ( mains == 1000 ) 
  1456.   curlist .auxfield .hh .v.LH = 1000 ; 
  1457.   else if ( mains < 1000 ) 
  1458.   {
  1459.     if ( mains > 0 ) 
  1460.     curlist .auxfield .hh .v.LH = mains ; 
  1461.   } 
  1462.   else if ( curlist .auxfield .hh .v.LH < 1000 ) 
  1463.   curlist .auxfield .hh .v.LH = 1000 ; 
  1464.   else curlist .auxfield .hh .v.LH = mains ; 
  1465.   {
  1466.     ligstack = avail ; 
  1467.     if ( ligstack == 0 ) 
  1468.     ligstack = getavail () ; 
  1469.     else {
  1470.     
  1471.       avail = mem [ ligstack ] .hh .v.RH ; 
  1472.       mem [ ligstack ] .hh .v.RH = 0 ; 
  1473.     ;
  1474. #ifdef STAT
  1475.       incr ( dynused ) ; 
  1476. #endif /* STAT */
  1477.     } 
  1478.   } 
  1479.   mem [ ligstack ] .hh.b0 = mainf ; 
  1480.   curr = curchr ; 
  1481.   mem [ ligstack ] .hh.b1 = curr ; 
  1482.   if ( curr == falsebchar ) 
  1483.   curr = 256 ; 
  1484.   lab110: if ( ( ( maini .b2 ) % 4 ) != 1 ) 
  1485.   goto lab80 ; 
  1486.   maink = ligkernbase [ mainf ] + maini .b3 ; 
  1487.   mainj = fontinfo [ maink ] .qqqq ; 
  1488.   if ( mainj .b0 <= 128 ) 
  1489.   goto lab112 ; 
  1490.   maink = ligkernbase [ mainf ] + 256 * mainj .b2 + mainj .b3 + 32768L - 256 * 
  1491.   ( 128 ) ; 
  1492.   lab111: mainj = fontinfo [ maink ] .qqqq ; 
  1493.   lab112: if ( mainj .b1 == curr ) 
  1494.   if ( mainj .b0 <= 128 ) 
  1495.   {
  1496.     if ( mainj .b2 >= 128 ) 
  1497.     {
  1498.       if ( curl < 256 ) 
  1499.       {
  1500.     if ( mem [ curlist .tailfield ] .hh.b1 == hyphenchar [ mainf ] ) 
  1501.     if ( mem [ curq ] .hh .v.RH > 0 ) 
  1502.     insdisc = true ; 
  1503.     if ( ligaturepresent ) 
  1504.     {
  1505.       mainp = newligature ( mainf , curl , mem [ curq ] .hh .v.RH ) ; 
  1506.       if ( lfthit ) 
  1507.       {
  1508.         mem [ mainp ] .hh.b1 = 2 ; 
  1509.         lfthit = false ; 
  1510.       } 
  1511.       if ( rthit ) 
  1512.       if ( ligstack == 0 ) 
  1513.       {
  1514.         incr ( mem [ mainp ] .hh.b1 ) ; 
  1515.         rthit = false ; 
  1516.       } 
  1517.       mem [ curq ] .hh .v.RH = mainp ; 
  1518.       curlist .tailfield = mainp ; 
  1519.       ligaturepresent = false ; 
  1520.     } 
  1521.     if ( insdisc ) 
  1522.     {
  1523.       insdisc = false ; 
  1524.       if ( curlist .modefield > 0 ) 
  1525.       {
  1526.         mem [ curlist .tailfield ] .hh .v.RH = newdisc () ; 
  1527.         curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1528.       } 
  1529.     } 
  1530.       } 
  1531.       {
  1532.     mem [ curlist .tailfield ] .hh .v.RH = newkern ( fontinfo [ kernbase [ 
  1533.     mainf ] + 256 * mainj .b2 + mainj .b3 ] .cint ) ; 
  1534.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1535.       } 
  1536.       goto lab90 ; 
  1537.     } 
  1538.     if ( curl == 256 ) 
  1539.     lfthit = true ; 
  1540.     else if ( ligstack == 0 ) 
  1541.     rthit = true ; 
  1542.     {
  1543.       if ( interrupt != 0 ) 
  1544.       pauseforinstructions () ; 
  1545.     } 
  1546.     switch ( mainj .b2 ) 
  1547.     {case 1 : 
  1548.     case 5 : 
  1549.       {
  1550.     curl = mainj .b3 ; 
  1551.     maini = fontinfo [ charbase [ mainf ] + curl ] .qqqq ; 
  1552.     ligaturepresent = true ; 
  1553.       } 
  1554.       break ; 
  1555.     case 2 : 
  1556.     case 6 : 
  1557.       {
  1558.     curr = mainj .b3 ; 
  1559.     if ( ligstack == 0 ) 
  1560.     {
  1561.       ligstack = newligitem ( curr ) ; 
  1562.       bchar = 256 ; 
  1563.     } 
  1564.     else if ( ( ligstack >= himemmin ) ) 
  1565.     {
  1566.       mainp = ligstack ; 
  1567.       ligstack = newligitem ( curr ) ; 
  1568.       mem [ ligstack + 1 ] .hh .v.RH = mainp ; 
  1569.     } 
  1570.     else mem [ ligstack ] .hh.b1 = curr ; 
  1571.       } 
  1572.       break ; 
  1573.     case 3 : 
  1574.       {
  1575.     curr = mainj .b3 ; 
  1576.     mainp = ligstack ; 
  1577.     ligstack = newligitem ( curr ) ; 
  1578.     mem [ ligstack ] .hh .v.RH = mainp ; 
  1579.       } 
  1580.       break ; 
  1581.     case 7 : 
  1582.     case 11 : 
  1583.       {
  1584.     if ( curl < 256 ) 
  1585.     {
  1586.       if ( mem [ curlist .tailfield ] .hh.b1 == hyphenchar [ mainf ] ) 
  1587.       if ( mem [ curq ] .hh .v.RH > 0 ) 
  1588.       insdisc = true ; 
  1589.       if ( ligaturepresent ) 
  1590.       {
  1591.         mainp = newligature ( mainf , curl , mem [ curq ] .hh .v.RH ) ; 
  1592.         if ( lfthit ) 
  1593.         {
  1594.           mem [ mainp ] .hh.b1 = 2 ; 
  1595.           lfthit = false ; 
  1596.         } 
  1597.         if ( false ) 
  1598.         if ( ligstack == 0 ) 
  1599.         {
  1600.           incr ( mem [ mainp ] .hh.b1 ) ; 
  1601.           rthit = false ; 
  1602.         } 
  1603.         mem [ curq ] .hh .v.RH = mainp ; 
  1604.         curlist .tailfield = mainp ; 
  1605.         ligaturepresent = false ; 
  1606.       } 
  1607.       if ( insdisc ) 
  1608.       {
  1609.         insdisc = false ; 
  1610.         if ( curlist .modefield > 0 ) 
  1611.         {
  1612.           mem [ curlist .tailfield ] .hh .v.RH = newdisc () ; 
  1613.           curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1614.         } 
  1615.       } 
  1616.     } 
  1617.     curq = curlist .tailfield ; 
  1618.     curl = mainj .b3 ; 
  1619.     maini = fontinfo [ charbase [ mainf ] + curl ] .qqqq ; 
  1620.     ligaturepresent = true ; 
  1621.       } 
  1622.       break ; 
  1623.       default: 
  1624.       {
  1625.     curl = mainj .b3 ; 
  1626.     ligaturepresent = true ; 
  1627.     if ( ligstack == 0 ) 
  1628.     goto lab80 ; 
  1629.     else goto lab91 ; 
  1630.       } 
  1631.       break ; 
  1632.     } 
  1633.     if ( mainj .b2 > 4 ) 
  1634.     if ( mainj .b2 != 7 ) 
  1635.     goto lab80 ; 
  1636.     if ( curl < 256 ) 
  1637.     goto lab110 ; 
  1638.     maink = bcharlabel [ mainf ] ; 
  1639.     goto lab111 ; 
  1640.   } 
  1641.   if ( mainj .b0 == 0 ) 
  1642.   incr ( maink ) ; 
  1643.   else {
  1644.       
  1645.     if ( mainj .b0 >= 128 ) 
  1646.     goto lab80 ; 
  1647.     maink = maink + mainj .b0 + 1 ; 
  1648.   } 
  1649.   goto lab111 ; 
  1650.   lab95: mainp = mem [ ligstack + 1 ] .hh .v.RH ; 
  1651.   if ( mainp > 0 ) 
  1652.   {
  1653.     mem [ curlist .tailfield ] .hh .v.RH = mainp ; 
  1654.     curlist .tailfield = mem [ curlist .tailfield ] .hh .v.RH ; 
  1655.   } 
  1656.   tempptr = ligstack ; 
  1657.   ligstack = mem [ tempptr ] .hh .v.RH ; 
  1658.   freenode ( tempptr , 2 ) ; 
  1659.   maini = fontinfo [ charbase [ mainf ] + curl ] .qqqq ; 
  1660.   ligaturepresent = true ; 
  1661.   if ( ligstack == 0 ) 
  1662.   if ( mainp > 0 ) 
  1663.   goto lab100 ; 
  1664.   else curr = bchar ; 
  1665.   else curr = mem [ ligstack ] .hh.b1 ; 
  1666.   goto lab110 ; 
  1667.   lab120: if ( eqtb [ 3794 ] .hh .v.RH == 0 ) 
  1668.   {
  1669.     {
  1670.       mainp = fontglue [ eqtb [ 4834 ] .hh .v.RH ] ; 
  1671.       if ( mainp == 0 ) 
  1672.       {
  1673.     mainp = newspec ( 0 ) ; 
  1674.     maink = parambase [ eqtb [ 4834 ] .hh .v.RH ] + 2 ; 
  1675.     mem [ mainp + 1 ] .cint = fontinfo [ maink ] .cint ; 
  1676.     mem [ mainp + 2 ] .cint = fontinfo [ maink + 1 ] .cint ; 
  1677.     mem [ mainp + 3 ] .cint = fontinfo [ maink + 2 ] .cint ; 
  1678.     fontglue [ eqtb [ 4834 ] .hh .v.RH ] = mainp ; 
  1679.       } 
  1680.     } 
  1681.     tempptr = newglue ( mainp ) ; 
  1682.   } 
  1683.   else tempptr = newparamglue ( 12 ) ; 
  1684.   mem [ curlist .tailfield ] .hh .v.RH = tempptr ; 
  1685.   curlist .tailfield = tempptr ; 
  1686.   goto lab60 ; 
  1687.