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

  1. #define EXTERN extern
  2. #include "texd.h"
  3.  
  4. void scanint ( ) 
  5. {/* 30 */ scanint_regmem 
  6.   boolean negative  ; 
  7.   integer m  ; 
  8.   smallnumber d  ; 
  9.   boolean vacuous  ; 
  10.   boolean OKsofar  ; 
  11.   radix = 0 ; 
  12.   OKsofar = true ; 
  13.   negative = false ; 
  14.   do {
  15.       do { getxtoken () ; 
  16.     } while ( ! ( curcmd != 10 ) ) ; 
  17.     if ( curtok == 3117 ) 
  18.     {
  19.       negative = ! negative ; 
  20.       curtok = 3115 ; 
  21.     } 
  22.   } while ( ! ( curtok != 3115 ) ) ; 
  23.   if ( curtok == 3168 ) 
  24.   {
  25.     gettoken () ; 
  26.     if ( curtok < 4095 ) 
  27.     {
  28.       curval = curchr ; 
  29.       if ( curcmd <= 2 ) 
  30.       if ( curcmd == 2 ) 
  31.       incr ( alignstate ) ; 
  32.       else decr ( alignstate ) ; 
  33.     } 
  34.     else if ( curtok < 4352 ) 
  35.     curval = curtok - 4096 ; 
  36.     else curval = curtok - 4352 ; 
  37.     if ( curval > 255 ) 
  38.     {
  39.       {
  40.     if ( interaction == 3 ) 
  41.     wakeupterminal () ; 
  42.     printnl ( 262 ) ; 
  43.     print ( 694 ) ; 
  44.       } 
  45.       {
  46.     helpptr = 2 ; 
  47.     helpline [ 1 ] = 695 ; 
  48.     helpline [ 0 ] = 696 ; 
  49.       } 
  50.       curval = 48 ; 
  51.       backerror () ; 
  52.     } 
  53.     else {
  54.     
  55.       getxtoken () ; 
  56.       if ( curcmd != 10 ) 
  57.       backinput () ; 
  58.     } 
  59.   } 
  60.   else if ( ( curcmd >= 68 ) && ( curcmd <= 89 ) ) 
  61.   scansomethinginternal ( 0 , false ) ; 
  62.   else {
  63.       
  64.     radix = 10 ; 
  65.     m = 214748364L ; 
  66.     if ( curtok == 3111 ) 
  67.     {
  68.       radix = 8 ; 
  69.       m = 268435456L ; 
  70.       getxtoken () ; 
  71.     } 
  72.     else if ( curtok == 3106 ) 
  73.     {
  74.       radix = 16 ; 
  75.       m = 134217728L ; 
  76.       getxtoken () ; 
  77.     } 
  78.     vacuous = true ; 
  79.     curval = 0 ; 
  80.     while ( true ) {
  81.     
  82.       if ( ( curtok < 3120 + radix ) && ( curtok >= 3120 ) && ( curtok <= 3129 
  83.       ) ) 
  84.       d = curtok - 3120 ; 
  85.       else if ( radix == 16 ) 
  86.       if ( ( curtok <= 2886 ) && ( curtok >= 2881 ) ) 
  87.       d = curtok - 2871 ; 
  88.       else if ( ( curtok <= 3142 ) && ( curtok >= 3137 ) ) 
  89.       d = curtok - 3127 ; 
  90.       else goto lab30 ; 
  91.       else goto lab30 ; 
  92.       vacuous = false ; 
  93.       if ( ( curval >= m ) && ( ( curval > m ) || ( d > 7 ) || ( radix != 10 ) 
  94.       ) ) 
  95.       {
  96.     if ( OKsofar ) 
  97.     {
  98.       {
  99.         if ( interaction == 3 ) 
  100.         wakeupterminal () ; 
  101.         printnl ( 262 ) ; 
  102.         print ( 697 ) ; 
  103.       } 
  104.       {
  105.         helpptr = 2 ; 
  106.         helpline [ 1 ] = 698 ; 
  107.         helpline [ 0 ] = 699 ; 
  108.       } 
  109.       error () ; 
  110.       curval = 2147483647L ; 
  111.       OKsofar = false ; 
  112.     } 
  113.       } 
  114.       else curval = curval * radix + d ; 
  115.       getxtoken () ; 
  116.     } 
  117.     lab30: ; 
  118.     if ( vacuous ) 
  119.     {
  120.       {
  121.     if ( interaction == 3 ) 
  122.     wakeupterminal () ; 
  123.     printnl ( 262 ) ; 
  124.     print ( 660 ) ; 
  125.       } 
  126.       {
  127.     helpptr = 3 ; 
  128.     helpline [ 2 ] = 661 ; 
  129.     helpline [ 1 ] = 662 ; 
  130.     helpline [ 0 ] = 663 ; 
  131.       } 
  132.       backerror () ; 
  133.     } 
  134.     else if ( curcmd != 10 ) 
  135.     backinput () ; 
  136.   } 
  137.   if ( negative ) 
  138.   curval = - (integer) curval ; 
  139. void zscandimen ( mu , inf , shortcut ) 
  140. boolean mu ; 
  141. boolean inf ; 
  142. boolean shortcut ; 
  143. {/* 30 31 32 40 45 88 89 */ scandimen_regmem 
  144.   boolean negative  ; 
  145.   integer f  ; 
  146.   integer num, denom  ; 
  147.   smallnumber k, kk  ; 
  148.   halfword p, q  ; 
  149.   scaled v  ; 
  150.   integer savecurval  ; 
  151.   f = 0 ; 
  152.   aritherror = false ; 
  153.   curorder = 0 ; 
  154.   negative = false ; 
  155.   if ( ! shortcut ) 
  156.   {
  157.     negative = false ; 
  158.     do {
  159.     do { getxtoken () ; 
  160.       } while ( ! ( curcmd != 10 ) ) ; 
  161.       if ( curtok == 3117 ) 
  162.       {
  163.     negative = ! negative ; 
  164.     curtok = 3115 ; 
  165.       } 
  166.     } while ( ! ( curtok != 3115 ) ) ; 
  167.     if ( ( curcmd >= 68 ) && ( curcmd <= 89 ) ) 
  168.     if ( mu ) 
  169.     {
  170.       scansomethinginternal ( 3 , false ) ; 
  171.       if ( curvallevel >= 2 ) 
  172.       {
  173.     v = mem [ curval + 1 ] .cint ; 
  174.     deleteglueref ( curval ) ; 
  175.     curval = v ; 
  176.       } 
  177.       if ( curvallevel == 3 ) 
  178.       goto lab89 ; 
  179.       if ( curvallevel != 0 ) 
  180.       muerror () ; 
  181.     } 
  182.     else {
  183.     
  184.       scansomethinginternal ( 1 , false ) ; 
  185.       if ( curvallevel == 1 ) 
  186.       goto lab89 ; 
  187.     } 
  188.     else {
  189.     
  190.       backinput () ; 
  191.       if ( curtok == 3116 ) 
  192.       curtok = 3118 ; 
  193.       if ( curtok != 3118 ) 
  194.       scanint () ; 
  195.       else {
  196.       
  197.     radix = 10 ; 
  198.     curval = 0 ; 
  199.       } 
  200.       if ( curtok == 3116 ) 
  201.       curtok = 3118 ; 
  202.       if ( ( radix == 10 ) && ( curtok == 3118 ) ) 
  203.       {
  204.     k = 0 ; 
  205.     p = 0 ; 
  206.     gettoken () ; 
  207.     while ( true ) {
  208.         
  209.       getxtoken () ; 
  210.       if ( ( curtok > 3129 ) || ( curtok < 3120 ) ) 
  211.       goto lab31 ; 
  212.       if ( k < 17 ) 
  213.       {
  214.         q = getavail () ; 
  215.         mem [ q ] .hh .v.RH = p ; 
  216.         mem [ q ] .hh .v.LH = curtok - 3120 ; 
  217.         p = q ; 
  218.         incr ( k ) ; 
  219.       } 
  220.     } 
  221.     lab31: {
  222.         register integer for_end; kk = k ; for_end = 1 ; if ( kk >= 
  223.     for_end) do 
  224.       {
  225.         dig [ kk - 1 ] = mem [ p ] .hh .v.LH ; 
  226.         q = p ; 
  227.         p = mem [ p ] .hh .v.RH ; 
  228.         {
  229.           mem [ q ] .hh .v.RH = avail ; 
  230.           avail = q ; 
  231.     ;
  232. #ifdef STAT
  233.           decr ( dynused ) ; 
  234. #endif /* STAT */
  235.         } 
  236.       } 
  237.     while ( kk-- > for_end ) ; } 
  238.     f = rounddecimals ( k ) ; 
  239.     if ( curcmd != 10 ) 
  240.     backinput () ; 
  241.       } 
  242.     } 
  243.   } 
  244.   if ( curval < 0 ) 
  245.   {
  246.     negative = ! negative ; 
  247.     curval = - (integer) curval ; 
  248.   } 
  249.   if ( inf ) 
  250.   if ( scankeyword ( 309 ) ) 
  251.   {
  252.     curorder = 1 ; 
  253.     while ( scankeyword ( 108 ) ) {
  254.     
  255.       if ( curorder == 3 ) 
  256.       {
  257.     {
  258.       if ( interaction == 3 ) 
  259.       wakeupterminal () ; 
  260.       printnl ( 262 ) ; 
  261.       print ( 701 ) ; 
  262.     } 
  263.     print ( 702 ) ; 
  264.     {
  265.       helpptr = 1 ; 
  266.       helpline [ 0 ] = 703 ; 
  267.     } 
  268.     error () ; 
  269.       } 
  270.       else incr ( curorder ) ; 
  271.     } 
  272.     goto lab88 ; 
  273.   } 
  274.   savecurval = curval ; 
  275.   do {
  276.       getxtoken () ; 
  277.   } while ( ! ( curcmd != 10 ) ) ; 
  278.   if ( ( curcmd < 68 ) || ( curcmd > 89 ) ) 
  279.   backinput () ; 
  280.   else {
  281.       
  282.     if ( mu ) 
  283.     {
  284.       scansomethinginternal ( 3 , false ) ; 
  285.       if ( curvallevel >= 2 ) 
  286.       {
  287.     v = mem [ curval + 1 ] .cint ; 
  288.     deleteglueref ( curval ) ; 
  289.     curval = v ; 
  290.       } 
  291.       if ( curvallevel != 3 ) 
  292.       muerror () ; 
  293.     } 
  294.     else scansomethinginternal ( 1 , false ) ; 
  295.     v = curval ; 
  296.     goto lab40 ; 
  297.   } 
  298.   if ( mu ) 
  299.   goto lab45 ; 
  300.   if ( scankeyword ( 704 ) ) 
  301.   v = ( fontinfo [ 6 + parambase [ eqtb [ 4834 ] .hh .v.RH ] ] .cint ) ; 
  302.   else if ( scankeyword ( 705 ) ) 
  303.   v = ( fontinfo [ 5 + parambase [ eqtb [ 4834 ] .hh .v.RH ] ] .cint ) ; 
  304.   else goto lab45 ; 
  305.   {
  306.     getxtoken () ; 
  307.     if ( curcmd != 10 ) 
  308.     backinput () ; 
  309.   } 
  310.   lab40: curval = multandadd ( savecurval , v , xnoverd ( v , f , 65536L ) , 
  311.   1073741823L ) ; 
  312.   goto lab89 ; 
  313.   lab45: ; 
  314.   if ( mu ) 
  315.   if ( scankeyword ( 334 ) ) 
  316.   goto lab88 ; 
  317.   else {
  318.       
  319.     {
  320.       if ( interaction == 3 ) 
  321.       wakeupterminal () ; 
  322.       printnl ( 262 ) ; 
  323.       print ( 701 ) ; 
  324.     } 
  325.     print ( 706 ) ; 
  326.     {
  327.       helpptr = 4 ; 
  328.       helpline [ 3 ] = 707 ; 
  329.       helpline [ 2 ] = 708 ; 
  330.       helpline [ 1 ] = 709 ; 
  331.       helpline [ 0 ] = 710 ; 
  332.     } 
  333.     error () ; 
  334.     goto lab88 ; 
  335.   } 
  336.   if ( scankeyword ( 700 ) ) 
  337.   {
  338.     preparemag () ; 
  339.     if ( eqtb [ 6180 ] .cint != 1000 ) 
  340.     {
  341.       curval = xnoverd ( curval , 1000 , eqtb [ 6180 ] .cint ) ; 
  342.       f = ( 1000 * f + 65536L * remainder ) / eqtb [ 6180 ] .cint ; 
  343.       curval = curval + ( f / 65536L ) ; 
  344.       f = f % 65536L ; 
  345.     } 
  346.   } 
  347.   if ( scankeyword ( 393 ) ) 
  348.   goto lab88 ; 
  349.   if ( scankeyword ( 711 ) ) 
  350.   {
  351.     num = 7227 ; 
  352.     denom = 100 ; 
  353.   } 
  354.   else if ( scankeyword ( 712 ) ) 
  355.   {
  356.     num = 12 ; 
  357.     denom = 1 ; 
  358.   } 
  359.   else if ( scankeyword ( 713 ) ) 
  360.   {
  361.     num = 7227 ; 
  362.     denom = 254 ; 
  363.   } 
  364.   else if ( scankeyword ( 714 ) ) 
  365.   {
  366.     num = 7227 ; 
  367.     denom = 2540 ; 
  368.   } 
  369.   else if ( scankeyword ( 715 ) ) 
  370.   {
  371.     num = 7227 ; 
  372.     denom = 7200 ; 
  373.   } 
  374.   else if ( scankeyword ( 716 ) ) 
  375.   {
  376.     num = 1238 ; 
  377.     denom = 1157 ; 
  378.   } 
  379.   else if ( scankeyword ( 717 ) ) 
  380.   {
  381.     num = 14856 ; 
  382.     denom = 1157 ; 
  383.   } 
  384.   else if ( scankeyword ( 718 ) ) 
  385.   goto lab30 ; 
  386.   else {
  387.       
  388.     {
  389.       if ( interaction == 3 ) 
  390.       wakeupterminal () ; 
  391.       printnl ( 262 ) ; 
  392.       print ( 701 ) ; 
  393.     } 
  394.     print ( 719 ) ; 
  395.     {
  396.       helpptr = 6 ; 
  397.       helpline [ 5 ] = 720 ; 
  398.       helpline [ 4 ] = 721 ; 
  399.       helpline [ 3 ] = 722 ; 
  400.       helpline [ 2 ] = 708 ; 
  401.       helpline [ 1 ] = 709 ; 
  402.       helpline [ 0 ] = 710 ; 
  403.     } 
  404.     error () ; 
  405.     goto lab32 ; 
  406.   } 
  407.   curval = xnoverd ( curval , num , denom ) ; 
  408.   f = ( num * f + 65536L * remainder ) / denom ; 
  409.   curval = curval + ( f / 65536L ) ; 
  410.   f = f % 65536L ; 
  411.   lab32: ; 
  412.   lab88: if ( curval >= 16384 ) 
  413.   aritherror = true ; 
  414.   else curval = curval * 65536L + f ; 
  415.   lab30: ; 
  416.   {
  417.     getxtoken () ; 
  418.     if ( curcmd != 10 ) 
  419.     backinput () ; 
  420.   } 
  421.   lab89: if ( aritherror || ( abs ( curval ) >= 1073741824L ) ) 
  422.   {
  423.     {
  424.       if ( interaction == 3 ) 
  425.       wakeupterminal () ; 
  426.       printnl ( 262 ) ; 
  427.       print ( 723 ) ; 
  428.     } 
  429.     {
  430.       helpptr = 2 ; 
  431.       helpline [ 1 ] = 724 ; 
  432.       helpline [ 0 ] = 725 ; 
  433.     } 
  434.     error () ; 
  435.     curval = 1073741823L ; 
  436.     aritherror = false ; 
  437.   } 
  438.   if ( negative ) 
  439.   curval = - (integer) curval ; 
  440. void zscanglue ( level ) 
  441. smallnumber level ; 
  442. {/* 10 */ scanglue_regmem 
  443.   boolean negative  ; 
  444.   halfword q  ; 
  445.   boolean mu  ; 
  446.   mu = ( level == 3 ) ; 
  447.   negative = false ; 
  448.   do {
  449.       do { getxtoken () ; 
  450.     } while ( ! ( curcmd != 10 ) ) ; 
  451.     if ( curtok == 3117 ) 
  452.     {
  453.       negative = ! negative ; 
  454.       curtok = 3115 ; 
  455.     } 
  456.   } while ( ! ( curtok != 3115 ) ) ; 
  457.   if ( ( curcmd >= 68 ) && ( curcmd <= 89 ) ) 
  458.   {
  459.     scansomethinginternal ( level , negative ) ; 
  460.     if ( curvallevel >= 2 ) 
  461.     {
  462.       if ( curvallevel != level ) 
  463.       muerror () ; 
  464.       return ; 
  465.     } 
  466.     if ( curvallevel == 0 ) 
  467.     scandimen ( mu , false , true ) ; 
  468.     else if ( level == 3 ) 
  469.     muerror () ; 
  470.   } 
  471.   else {
  472.       
  473.     backinput () ; 
  474.     scandimen ( mu , false , false ) ; 
  475.     if ( negative ) 
  476.     curval = - (integer) curval ; 
  477.   } 
  478.   q = newspec ( 0 ) ; 
  479.   mem [ q + 1 ] .cint = curval ; 
  480.   if ( scankeyword ( 726 ) ) 
  481.   {
  482.     scandimen ( mu , true , false ) ; 
  483.     mem [ q + 2 ] .cint = curval ; 
  484.     mem [ q ] .hh.b0 = curorder ; 
  485.   } 
  486.   if ( scankeyword ( 727 ) ) 
  487.   {
  488.     scandimen ( mu , true , false ) ; 
  489.     mem [ q + 3 ] .cint = curval ; 
  490.     mem [ q ] .hh.b1 = curorder ; 
  491.   } 
  492.   curval = q ; 
  493. halfword scanrulespec ( ) 
  494. {/* 21 */ register halfword Result; scanrulespec_regmem 
  495.   halfword q  ; 
  496.   q = newrule () ; 
  497.   if ( curcmd == 35 ) 
  498.   mem [ q + 1 ] .cint = 26214 ; 
  499.   else {
  500.       
  501.     mem [ q + 3 ] .cint = 26214 ; 
  502.     mem [ q + 2 ] .cint = 0 ; 
  503.   } 
  504.   lab21: if ( scankeyword ( 728 ) ) 
  505.   {
  506.     scandimen ( false , false , false ) ; 
  507.     mem [ q + 1 ] .cint = curval ; 
  508.     goto lab21 ; 
  509.   } 
  510.   if ( scankeyword ( 729 ) ) 
  511.   {
  512.     scandimen ( false , false , false ) ; 
  513.     mem [ q + 3 ] .cint = curval ; 
  514.     goto lab21 ; 
  515.   } 
  516.   if ( scankeyword ( 730 ) ) 
  517.   {
  518.     scandimen ( false , false , false ) ; 
  519.     mem [ q + 2 ] .cint = curval ; 
  520.     goto lab21 ; 
  521.   } 
  522.   Result = q ; 
  523.   return(Result) ; 
  524. halfword zstrtoks ( b ) 
  525. poolpointer b ; 
  526. {register halfword Result; strtoks_regmem 
  527.   halfword p  ; 
  528.   halfword q  ; 
  529.   halfword t  ; 
  530.   poolpointer k  ; 
  531.   {
  532.     if ( poolptr + 1 > poolsize ) 
  533.     overflow ( 257 , poolsize - initpoolptr ) ; 
  534.   } 
  535.   p = memtop - 3 ; 
  536.   mem [ p ] .hh .v.RH = 0 ; 
  537.   k = b ; 
  538.   while ( k < poolptr ) {
  539.       
  540.     t = strpool [ k ] ; 
  541.     if ( t == 32 ) 
  542.     t = 2592 ; 
  543.     else t = 3072 + t ; 
  544.     {
  545.       {
  546.     q = avail ; 
  547.     if ( q == 0 ) 
  548.     q = getavail () ; 
  549.     else {
  550.         
  551.       avail = mem [ q ] .hh .v.RH ; 
  552.       mem [ q ] .hh .v.RH = 0 ; 
  553.     ;
  554. #ifdef STAT
  555.       incr ( dynused ) ; 
  556. #endif /* STAT */
  557.     } 
  558.       } 
  559.       mem [ p ] .hh .v.RH = q ; 
  560.       mem [ q ] .hh .v.LH = t ; 
  561.       p = q ; 
  562.     } 
  563.     incr ( k ) ; 
  564.   } 
  565.   poolptr = b ; 
  566.   Result = p ; 
  567.   return(Result) ; 
  568. halfword thetoks ( ) 
  569. {register halfword Result; thetoks_regmem 
  570.   schar oldsetting  ; 
  571.   halfword p, q, r  ; 
  572.   poolpointer b  ; 
  573.   getxtoken () ; 
  574.   scansomethinginternal ( 5 , false ) ; 
  575.   if ( curvallevel >= 4 ) 
  576.   {
  577.     p = memtop - 3 ; 
  578.     mem [ p ] .hh .v.RH = 0 ; 
  579.     if ( curvallevel == 4 ) 
  580.     {
  581.       q = getavail () ; 
  582.       mem [ p ] .hh .v.RH = q ; 
  583.       mem [ q ] .hh .v.LH = 4095 + curval ; 
  584.       p = q ; 
  585.     } 
  586.     else if ( curval != 0 ) 
  587.     {
  588.       r = mem [ curval ] .hh .v.RH ; 
  589.       while ( r != 0 ) {
  590.       
  591.     {
  592.       {
  593.         q = avail ; 
  594.         if ( q == 0 ) 
  595.         q = getavail () ; 
  596.         else {
  597.         
  598.           avail = mem [ q ] .hh .v.RH ; 
  599.           mem [ q ] .hh .v.RH = 0 ; 
  600.     ;
  601. #ifdef STAT
  602.           incr ( dynused ) ; 
  603. #endif /* STAT */
  604.         } 
  605.       } 
  606.       mem [ p ] .hh .v.RH = q ; 
  607.       mem [ q ] .hh .v.LH = mem [ r ] .hh .v.LH ; 
  608.       p = q ; 
  609.     } 
  610.     r = mem [ r ] .hh .v.RH ; 
  611.       } 
  612.     } 
  613.     Result = p ; 
  614.   } 
  615.   else {
  616.       
  617.     oldsetting = selector ; 
  618.     selector = 21 ; 
  619.     b = poolptr ; 
  620.     switch ( curvallevel ) 
  621.     {case 0 : 
  622.       printint ( curval ) ; 
  623.       break ; 
  624.     case 1 : 
  625.       {
  626.     printscaled ( curval ) ; 
  627.     print ( 393 ) ; 
  628.       } 
  629.       break ; 
  630.     case 2 : 
  631.       {
  632.     printspec ( curval , 393 ) ; 
  633.     deleteglueref ( curval ) ; 
  634.       } 
  635.       break ; 
  636.     case 3 : 
  637.       {
  638.     printspec ( curval , 334 ) ; 
  639.     deleteglueref ( curval ) ; 
  640.       } 
  641.       break ; 
  642.     } 
  643.     selector = oldsetting ; 
  644.     Result = strtoks ( b ) ; 
  645.   } 
  646.   return(Result) ; 
  647. void insthetoks ( ) 
  648. {insthetoks_regmem 
  649.   mem [ memtop - 12 ] .hh .v.RH = thetoks () ; 
  650.   begintokenlist ( mem [ memtop - 3 ] .hh .v.RH , 4 ) ; 
  651. void convtoks ( ) 
  652. {convtoks_regmem 
  653.   schar oldsetting  ; 
  654.   schar c  ; 
  655.   smallnumber savescannerstatus  ; 
  656.   poolpointer b  ; 
  657.   c = curchr ; 
  658.   switch ( c ) 
  659.   {case 0 : 
  660.   case 1 : 
  661.     scanint () ; 
  662.     break ; 
  663.   case 2 : 
  664.   case 3 : 
  665.     {
  666.       savescannerstatus = scannerstatus ; 
  667.       scannerstatus = 0 ; 
  668.       gettoken () ; 
  669.       scannerstatus = savescannerstatus ; 
  670.     } 
  671.     break ; 
  672.   case 4 : 
  673.     scanfontident () ; 
  674.     break ; 
  675.   case 5 : 
  676.     if ( jobname == 0 ) 
  677.     openlogfile () ; 
  678.     break ; 
  679.   } 
  680.   oldsetting = selector ; 
  681.   selector = 21 ; 
  682.   b = poolptr ; 
  683.   switch ( c ) 
  684.   {case 0 : 
  685.     printint ( curval ) ; 
  686.     break ; 
  687.   case 1 : 
  688.     printromanint ( curval ) ; 
  689.     break ; 
  690.   case 2 : 
  691.     if ( curcs != 0 ) 
  692.     sprintcs ( curcs ) ; 
  693.     else printchar ( curchr ) ; 
  694.     break ; 
  695.   case 3 : 
  696.     printmeaning () ; 
  697.     break ; 
  698.   case 4 : 
  699.     {
  700.       print ( fontname [ curval ] ) ; 
  701.       if ( fontsize [ curval ] != fontdsize [ curval ] ) 
  702.       {
  703.     print ( 737 ) ; 
  704.     printscaled ( fontsize [ curval ] ) ; 
  705.     print ( 393 ) ; 
  706.       } 
  707.     } 
  708.     break ; 
  709.   case 5 : 
  710.     print ( jobname ) ; 
  711.     break ; 
  712.   } 
  713.   selector = oldsetting ; 
  714.   mem [ memtop - 12 ] .hh .v.RH = strtoks ( b ) ; 
  715.   begintokenlist ( mem [ memtop - 3 ] .hh .v.RH , 4 ) ; 
  716. halfword zscantoks ( macrodef , xpand ) 
  717. boolean macrodef ; 
  718. boolean xpand ; 
  719. {/* 40 30 31 32 */ register halfword Result; scantoks_regmem 
  720.   halfword t  ; 
  721.   halfword s  ; 
  722.   halfword p  ; 
  723.   halfword q  ; 
  724.   halfword unbalance  ; 
  725.   halfword hashbrace  ; 
  726.   if ( macrodef ) 
  727.   scannerstatus = 2 ; 
  728.   else scannerstatus = 5 ; 
  729.   warningindex = curcs ; 
  730.   defref = getavail () ; 
  731.   mem [ defref ] .hh .v.LH = 0 ; 
  732.   p = defref ; 
  733.   hashbrace = 0 ; 
  734.   t = 3120 ; 
  735.   if ( macrodef ) 
  736.   {
  737.     while ( true ) {
  738.     
  739.       gettoken () ; 
  740.       if ( curtok < 768 ) 
  741.       goto lab31 ; 
  742.       if ( curcmd == 6 ) 
  743.       {
  744.     s = 3328 + curchr ; 
  745.     gettoken () ; 
  746.     if ( curcmd == 1 ) 
  747.     {
  748.       hashbrace = curtok ; 
  749.       {
  750.         q = getavail () ; 
  751.         mem [ p ] .hh .v.RH = q ; 
  752.         mem [ q ] .hh .v.LH = curtok ; 
  753.         p = q ; 
  754.       } 
  755.       {
  756.         q = getavail () ; 
  757.         mem [ p ] .hh .v.RH = q ; 
  758.         mem [ q ] .hh .v.LH = 3584 ; 
  759.         p = q ; 
  760.       } 
  761.       goto lab30 ; 
  762.     } 
  763.     if ( t == 3129 ) 
  764.     {
  765.       {
  766.         if ( interaction == 3 ) 
  767.         wakeupterminal () ; 
  768.         printnl ( 262 ) ; 
  769.         print ( 740 ) ; 
  770.       } 
  771.       {
  772.         helpptr = 1 ; 
  773.         helpline [ 0 ] = 741 ; 
  774.       } 
  775.       error () ; 
  776.     } 
  777.     else {
  778.         
  779.       incr ( t ) ; 
  780.       if ( curtok != t ) 
  781.       {
  782.         {
  783.           if ( interaction == 3 ) 
  784.           wakeupterminal () ; 
  785.           printnl ( 262 ) ; 
  786.           print ( 742 ) ; 
  787.         } 
  788.         {
  789.           helpptr = 2 ; 
  790.           helpline [ 1 ] = 743 ; 
  791.           helpline [ 0 ] = 744 ; 
  792.         } 
  793.         backerror () ; 
  794.       } 
  795.       curtok = s ; 
  796.     } 
  797.       } 
  798.       {
  799.     q = getavail () ; 
  800.     mem [ p ] .hh .v.RH = q ; 
  801.     mem [ q ] .hh .v.LH = curtok ; 
  802.     p = q ; 
  803.       } 
  804.     } 
  805.     lab31: {
  806.     
  807.       q = getavail () ; 
  808.       mem [ p ] .hh .v.RH = q ; 
  809.       mem [ q ] .hh .v.LH = 3584 ; 
  810.       p = q ; 
  811.     } 
  812.     if ( curcmd == 2 ) 
  813.     {
  814.       {
  815.     if ( interaction == 3 ) 
  816.     wakeupterminal () ; 
  817.     printnl ( 262 ) ; 
  818.     print ( 653 ) ; 
  819.       } 
  820.       incr ( alignstate ) ; 
  821.       {
  822.     helpptr = 2 ; 
  823.     helpline [ 1 ] = 738 ; 
  824.     helpline [ 0 ] = 739 ; 
  825.       } 
  826.       error () ; 
  827.       goto lab40 ; 
  828.     } 
  829.     lab30: ; 
  830.   } 
  831.   else scanleftbrace () ; 
  832.   unbalance = 1 ; 
  833.   while ( true ) {
  834.       
  835.     if ( xpand ) 
  836.     {
  837.       while ( true ) {
  838.       
  839.     getnext () ; 
  840.     if ( curcmd <= 100 ) 
  841.     goto lab32 ; 
  842.     if ( curcmd != 109 ) 
  843.     expand () ; 
  844.     else {
  845.         
  846.       q = thetoks () ; 
  847.       if ( mem [ memtop - 3 ] .hh .v.RH != 0 ) 
  848.       {
  849.         mem [ p ] .hh .v.RH = mem [ memtop - 3 ] .hh .v.RH ; 
  850.         p = q ; 
  851.       } 
  852.     } 
  853.       } 
  854.       lab32: xtoken () ; 
  855.     } 
  856.     else gettoken () ; 
  857.     if ( curtok < 768 ) 
  858.     if ( curcmd < 2 ) 
  859.     incr ( unbalance ) ; 
  860.     else {
  861.     
  862.       decr ( unbalance ) ; 
  863.       if ( unbalance == 0 ) 
  864.       goto lab40 ; 
  865.     } 
  866.     else if ( curcmd == 6 ) 
  867.     if ( macrodef ) 
  868.     {
  869.       s = curtok ; 
  870.       if ( xpand ) 
  871.       getxtoken () ; 
  872.       else gettoken () ; 
  873.       if ( curcmd != 6 ) 
  874.       if ( ( curtok <= 3120 ) || ( curtok > t ) ) 
  875.       {
  876.     {
  877.       if ( interaction == 3 ) 
  878.       wakeupterminal () ; 
  879.       printnl ( 262 ) ; 
  880.       print ( 745 ) ; 
  881.     } 
  882.     sprintcs ( warningindex ) ; 
  883.     {
  884.       helpptr = 3 ; 
  885.       helpline [ 2 ] = 746 ; 
  886.       helpline [ 1 ] = 747 ; 
  887.       helpline [ 0 ] = 748 ; 
  888.     } 
  889.     backerror () ; 
  890.     curtok = s ; 
  891.       } 
  892.       else curtok = 1232 + curchr ; 
  893.     } 
  894.     {
  895.       q = getavail () ; 
  896.       mem [ p ] .hh .v.RH = q ; 
  897.       mem [ q ] .hh .v.LH = curtok ; 
  898.       p = q ; 
  899.     } 
  900.   } 
  901.   lab40: scannerstatus = 0 ; 
  902.   if ( hashbrace != 0 ) 
  903.   {
  904.     q = getavail () ; 
  905.     mem [ p ] .hh .v.RH = q ; 
  906.     mem [ q ] .hh .v.LH = hashbrace ; 
  907.     p = q ; 
  908.   } 
  909.   Result = p ; 
  910.   return(Result) ; 
  911. void zreadtoks ( n , r ) 
  912. integer n ; 
  913. halfword r ; 
  914. {/* 30 */ readtoks_regmem 
  915.   halfword p  ; 
  916.   halfword q  ; 
  917.   integer s  ; 
  918.   smallnumber m  ; 
  919.   scannerstatus = 2 ; 
  920.   warningindex = r ; 
  921.   defref = getavail () ; 
  922.   mem [ defref ] .hh .v.LH = 0 ; 
  923.   p = defref ; 
  924.   {
  925.     q = getavail () ; 
  926.     mem [ p ] .hh .v.RH = q ; 
  927.     mem [ q ] .hh .v.LH = 3584 ; 
  928.     p = q ; 
  929.   } 
  930.   if ( ( n < 0 ) || ( n > 15 ) ) 
  931.   m = 16 ; 
  932.   else m = n ; 
  933.   s = alignstate ; 
  934.   alignstate = 1000000L ; 
  935.   do {
  936.       beginfilereading () ; 
  937.     curinput .namefield = m + 1 ; 
  938.     if ( readopen [ m ] == 2 ) 
  939.     if ( interaction > 1 ) 
  940.     if ( n < 0 ) 
  941.     {
  942.       wakeupterminal () ; 
  943.       print ( 335 ) ; 
  944.       terminput () ; 
  945.     } 
  946.     else {
  947.     
  948.       wakeupterminal () ; 
  949.       println () ; 
  950.       sprintcs ( r ) ; 
  951.       {
  952.     wakeupterminal () ; 
  953.     print ( 61 ) ; 
  954.     terminput () ; 
  955.       } 
  956.       n = -1 ; 
  957.     } 
  958.     else fatalerror ( 749 ) ; 
  959.     else if ( readopen [ m ] == 1 ) 
  960.     if ( inputln ( readfile [ m ] , false ) ) 
  961.     readopen [ m ] = 0 ; 
  962.     else {
  963.     
  964.       aclose ( readfile [ m ] ) ; 
  965.       readopen [ m ] = 2 ; 
  966.     } 
  967.     else {
  968.     
  969.       if ( ! inputln ( readfile [ m ] , true ) ) 
  970.       {
  971.     aclose ( readfile [ m ] ) ; 
  972.     readopen [ m ] = 2 ; 
  973.     if ( alignstate != 1000000L ) 
  974.     {
  975.       runaway () ; 
  976.       {
  977.         if ( interaction == 3 ) 
  978.         wakeupterminal () ; 
  979.         printnl ( 262 ) ; 
  980.         print ( 750 ) ; 
  981.       } 
  982.       printesc ( 530 ) ; 
  983.       {
  984.         helpptr = 1 ; 
  985.         helpline [ 0 ] = 751 ; 
  986.       } 
  987.       alignstate = 1000000L ; 
  988.       error () ; 
  989.     } 
  990.       } 
  991.     } 
  992.     curinput .limitfield = last ; 
  993.     if ( ( eqtb [ 6211 ] .cint < 0 ) || ( eqtb [ 6211 ] .cint > 255 ) ) 
  994.     decr ( curinput .limitfield ) ; 
  995.     else buffer [ curinput .limitfield ] = eqtb [ 6211 ] .cint ; 
  996.     first = curinput .limitfield + 1 ; 
  997.     curinput .locfield = curinput .startfield ; 
  998.     curinput .statefield = 33 ; 
  999.     while ( true ) {
  1000.     
  1001.       gettoken () ; 
  1002.       if ( curtok == 0 ) 
  1003.       goto lab30 ; 
  1004.       {
  1005.     q = getavail () ; 
  1006.     mem [ p ] .hh .v.RH = q ; 
  1007.     mem [ q ] .hh .v.LH = curtok ; 
  1008.     p = q ; 
  1009.       } 
  1010.     } 
  1011.     lab30: endfilereading () ; 
  1012.   } while ( ! ( alignstate == 1000000L ) ) ; 
  1013.   curval = defref ; 
  1014.   scannerstatus = 0 ; 
  1015.   alignstate = s ; 
  1016.