home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / unixtex-6.1b-src.tgz / tar.out / contrib / unixtex / web2c / web / tangleboot.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  69KB  |  3,196 lines

  1. #include "cpascal.h"
  2. /* 9999 */ 
  3. #define bufsize 100 
  4. #define maxbytes 45000L 
  5. #define maxtoks 50000L 
  6. #define maxnames 5000 
  7. #define maxtexts 2000 
  8. #define hashsize 353 
  9. #define longestname 400 
  10. #define linelength 72 
  11. #define outbufsize 144 
  12. #define stacksize 100 
  13. #define maxidlength 50 
  14. #define unambiglength 20 
  15. typedef unsigned char ASCIIcode  ; 
  16. typedef file_ptr /* of  ASCIIcode */ textfile  ; 
  17. typedef unsigned char eightbits  ; 
  18. typedef unsigned short sixteenbits  ; 
  19. typedef integer namepointer  ; 
  20. typedef integer textpointer  ; 
  21. typedef struct {
  22.     sixteenbits endfield ; 
  23.   sixteenbits bytefield ; 
  24.   namepointer namefield ; 
  25.   textpointer replfield ; 
  26.   short modfield ; 
  27. } outputstate  ; 
  28. char history  ; 
  29. ASCIIcode xord[256]  ; 
  30. ASCIIcode xchr[256]  ; 
  31. textfile webfile  ; 
  32. textfile changefile  ; 
  33. textfile Pascalfile  ; 
  34. textfile pool  ; 
  35. ASCIIcode buffer[bufsize + 1]  ; 
  36. boolean phaseone  ; 
  37. ASCIIcode bytemem[3][maxbytes + 1]  ; 
  38. eightbits tokmem[4][maxtoks + 1]  ; 
  39. sixteenbits bytestart[maxnames + 1]  ; 
  40. sixteenbits tokstart[maxtexts + 1]  ; 
  41. sixteenbits link[maxnames + 1]  ; 
  42. sixteenbits ilk[maxnames + 1]  ; 
  43. sixteenbits equiv[maxnames + 1]  ; 
  44. sixteenbits textlink[maxtexts + 1]  ; 
  45. namepointer nameptr  ; 
  46. namepointer stringptr  ; 
  47. integer byteptr[3]  ; 
  48. integer poolchecksum  ; 
  49. textpointer textptr  ; 
  50. integer tokptr[4]  ; 
  51. char z  ; 
  52. integer idfirst  ; 
  53. integer idloc  ; 
  54. integer doublechars  ; 
  55. sixteenbits hash[hashsize + 1], chophash[hashsize + 1]  ; 
  56. ASCIIcode choppedid[unambiglength + 1]  ; 
  57. ASCIIcode modtext[longestname + 1]  ; 
  58. textpointer lastunnamed  ; 
  59. outputstate curstate  ; 
  60. outputstate stack[stacksize + 1]  ; 
  61. integer stackptr  ; 
  62. char zo  ; 
  63. eightbits bracelevel  ; 
  64. integer curval  ; 
  65. ASCIIcode outbuf[outbufsize + 1]  ; 
  66. integer outptr  ; 
  67. integer breakptr  ; 
  68. integer semiptr  ; 
  69. eightbits outstate  ; 
  70. integer outval, outapp  ; 
  71. ASCIIcode outsign  ; 
  72. schar lastsign  ; 
  73. ASCIIcode outcontrib[linelength + 1]  ; 
  74. integer ii  ; 
  75. integer line  ; 
  76. integer otherline  ; 
  77. integer templine  ; 
  78. integer limit  ; 
  79. integer loc  ; 
  80. boolean inputhasended  ; 
  81. boolean changing  ; 
  82. ASCIIcode changebuffer[bufsize + 1]  ; 
  83. integer changelimit  ; 
  84. namepointer curmodule  ; 
  85. boolean scanninghex  ; 
  86. eightbits nextcontrol  ; 
  87. textpointer currepltext  ; 
  88. short modulecount  ; 
  89. char webname[PATHMAX + 1], chgname[PATHMAX + 1], pascalfilename[PATHMAX + 1], 
  90. poolfilename[PATHMAX + 1]  ; 
  91.  
  92. #include "tangleboot.h"
  93. void error ( ) 
  94. {integer j  ; 
  95.   integer k, l  ; 
  96.   if ( phaseone ) 
  97.   {
  98.     if ( changing ) 
  99.     Fputs( stdout ,  ". (change file " ) ; 
  100.     else
  101.     Fputs( stdout ,  ". (" ) ; 
  102.     fprintf( stdout , "%s%ld%c\n",  "l." , (long)line , ')' ) ; 
  103.     if ( loc >= limit ) 
  104.     l = limit ; 
  105.     else l = loc ; 
  106.     {register integer for_end; k = 1 ; for_end = l ; if ( k <= for_end) do 
  107.       if ( buffer [ k - 1 ] == 9 ) 
  108.       putc ( ' ' ,  stdout );
  109.       else
  110.       putc ( xchr [ buffer [ k - 1 ] ] ,  stdout );
  111.     while ( k++ < for_end ) ; } 
  112.     putc ('\n',  stdout );
  113.     {register integer for_end; k = 1 ; for_end = l ; if ( k <= for_end) do 
  114.       putc ( ' ' ,  stdout );
  115.     while ( k++ < for_end ) ; } 
  116.     {register integer for_end; k = l + 1 ; for_end = limit ; if ( k <= 
  117.     for_end) do 
  118.       putc ( xchr [ buffer [ k - 1 ] ] ,  stdout );
  119.     while ( k++ < for_end ) ; } 
  120.     putc ( ' ' ,  stdout );
  121.   } 
  122.   else {
  123.       
  124.     fprintf( stdout , "%s%ld%c\n",  ". (l." , (long)line , ')' ) ; 
  125.     {register integer for_end; j = 1 ; for_end = outptr ; if ( j <= for_end) 
  126.     do 
  127.       putc ( xchr [ outbuf [ j - 1 ] ] ,  stdout );
  128.     while ( j++ < for_end ) ; } 
  129.     Fputs( stdout ,  "... " ) ; 
  130.   } 
  131.   flush ( stdout ) ; 
  132.   history = 2 ; 
  133. void scanargs ( ) 
  134. {integer dotpos, slashpos, i, a  ; 
  135.   char c  ; 
  136.   char fname[PATHMAX + 1]  ; 
  137.   boolean foundweb, foundchange  ; 
  138.   foundweb = false ; 
  139.   foundchange = false ; 
  140.   {register integer for_end; a = 1 ; for_end = argc - 1 ; if ( a <= for_end) 
  141.   do 
  142.     {
  143.       argv ( a , fname ) ; 
  144.       if ( fname [ 1 ] != '-' ) 
  145.       {
  146.     if ( ! foundweb ) 
  147.     {
  148.       dotpos = -1 ; 
  149.       slashpos = -1 ; 
  150.       i = 1 ; 
  151.       while ( ( fname [ i ] != ' ' ) && ( i <= PATHMAX - 5 ) ) {
  152.           
  153.         webname [ i ] = fname [ i ] ; 
  154.         if ( fname [ i ] == '.' ) 
  155.         dotpos = i ; 
  156.         if ( fname [ i ] == '/' ) 
  157.         slashpos = i ; 
  158.         i = i + 1 ; 
  159.       } 
  160.       webname [ i ] = ' ' ; 
  161.       if ( ( dotpos == -1 ) || ( dotpos < slashpos ) ) 
  162.       {
  163.         dotpos = i ; 
  164.         webname [ dotpos ] = '.' ; 
  165.         webname [ dotpos + 1 ] = 'w' ; 
  166.         webname [ dotpos + 2 ] = 'e' ; 
  167.         webname [ dotpos + 3 ] = 'b' ; 
  168.         webname [ dotpos + 4 ] = ' ' ; 
  169.       } 
  170.       {register integer for_end; i = 1 ; for_end = dotpos ; if ( i <= 
  171.       for_end) do 
  172.         {
  173.           c = webname [ i ] ; 
  174.           pascalfilename [ i ] = c ; 
  175.           poolfilename [ i ] = c ; 
  176.         } 
  177.       while ( i++ < for_end ) ; } 
  178.       pascalfilename [ dotpos + 1 ] = 'p' ; 
  179.       pascalfilename [ dotpos + 2 ] = ' ' ; 
  180.       poolfilename [ dotpos + 1 ] = 'p' ; 
  181.       poolfilename [ dotpos + 2 ] = 'o' ; 
  182.       poolfilename [ dotpos + 3 ] = 'o' ; 
  183.       poolfilename [ dotpos + 4 ] = 'l' ; 
  184.       poolfilename [ dotpos + 5 ] = ' ' ; 
  185.       foundweb = true ; 
  186.     } 
  187.     else if ( ! foundchange ) 
  188.     {
  189.       dotpos = -1 ; 
  190.       slashpos = -1 ; 
  191.       i = 1 ; 
  192.       while ( ( fname [ i ] != ' ' ) && ( i <= PATHMAX - 5 ) ) {
  193.           
  194.         chgname [ i ] = fname [ i ] ; 
  195.         if ( fname [ i ] == '.' ) 
  196.         dotpos = i ; 
  197.         if ( fname [ i ] == '/' ) 
  198.         slashpos = i ; 
  199.         i = i + 1 ; 
  200.       } 
  201.       chgname [ i ] = ' ' ; 
  202.       if ( ( dotpos == -1 ) || ( dotpos < slashpos ) ) 
  203.       {
  204.         dotpos = i ; 
  205.         chgname [ dotpos ] = '.' ; 
  206.         chgname [ dotpos + 1 ] = 'c' ; 
  207.         chgname [ dotpos + 2 ] = 'h' ; 
  208.         chgname [ dotpos + 3 ] = ' ' ; 
  209.       } 
  210.       foundchange = true ; 
  211.     } 
  212.     else {
  213.         
  214.       fprintf( stdout , "%s\n",  "Usage: tangle webfile[.web] [changefile[.ch]]."           ) ; 
  215.       uexit ( 1 ) ; 
  216.     } 
  217.       } 
  218.       else {
  219.       
  220.     {
  221.       fprintf( stdout , "%s\n",  "Usage: tangle webfile[.web] [changefile[.ch]]."           ) ; 
  222.       uexit ( 1 ) ; 
  223.     } 
  224.       } 
  225.     } 
  226.   while ( a++ < for_end ) ; } 
  227.   if ( ! foundweb ) 
  228.   {
  229.     fprintf( stdout , "%s\n",  "Usage: tangle webfile[.web] [changefile[.ch]]." ) ; 
  230.     uexit ( 1 ) ; 
  231.   } 
  232.   if ( ! foundchange ) 
  233.   {
  234.     chgname [ 1 ] = '/' ; 
  235.     chgname [ 2 ] = 'd' ; 
  236.     chgname [ 3 ] = 'e' ; 
  237.     chgname [ 4 ] = 'v' ; 
  238.     chgname [ 5 ] = '/' ; 
  239.     chgname [ 6 ] = 'n' ; 
  240.     chgname [ 7 ] = 'u' ; 
  241.     chgname [ 8 ] = 'l' ; 
  242.     chgname [ 9 ] = 'l' ; 
  243.     chgname [ 10 ] = ' ' ; 
  244.   } 
  245. void initialize ( ) 
  246. {unsigned char i  ; 
  247.   char wi  ; 
  248.   char zi  ; 
  249.   integer h  ; 
  250.   history = 0 ; 
  251.   xchr [ 32 ] = ' ' ; 
  252.   xchr [ 33 ] = '!' ; 
  253.   xchr [ 34 ] = '"' ; 
  254.   xchr [ 35 ] = '#' ; 
  255.   xchr [ 36 ] = '$' ; 
  256.   xchr [ 37 ] = '%' ; 
  257.   xchr [ 38 ] = '&' ; 
  258.   xchr [ 39 ] = '\'' ; 
  259.   xchr [ 40 ] = '(' ; 
  260.   xchr [ 41 ] = ')' ; 
  261.   xchr [ 42 ] = '*' ; 
  262.   xchr [ 43 ] = '+' ; 
  263.   xchr [ 44 ] = ',' ; 
  264.   xchr [ 45 ] = '-' ; 
  265.   xchr [ 46 ] = '.' ; 
  266.   xchr [ 47 ] = '/' ; 
  267.   xchr [ 48 ] = '0' ; 
  268.   xchr [ 49 ] = '1' ; 
  269.   xchr [ 50 ] = '2' ; 
  270.   xchr [ 51 ] = '3' ; 
  271.   xchr [ 52 ] = '4' ; 
  272.   xchr [ 53 ] = '5' ; 
  273.   xchr [ 54 ] = '6' ; 
  274.   xchr [ 55 ] = '7' ; 
  275.   xchr [ 56 ] = '8' ; 
  276.   xchr [ 57 ] = '9' ; 
  277.   xchr [ 58 ] = ':' ; 
  278.   xchr [ 59 ] = ';' ; 
  279.   xchr [ 60 ] = '<' ; 
  280.   xchr [ 61 ] = '=' ; 
  281.   xchr [ 62 ] = '>' ; 
  282.   xchr [ 63 ] = '?' ; 
  283.   xchr [ 64 ] = '@' ; 
  284.   xchr [ 65 ] = 'A' ; 
  285.   xchr [ 66 ] = 'B' ; 
  286.   xchr [ 67 ] = 'C' ; 
  287.   xchr [ 68 ] = 'D' ; 
  288.   xchr [ 69 ] = 'E' ; 
  289.   xchr [ 70 ] = 'F' ; 
  290.   xchr [ 71 ] = 'G' ; 
  291.   xchr [ 72 ] = 'H' ; 
  292.   xchr [ 73 ] = 'I' ; 
  293.   xchr [ 74 ] = 'J' ; 
  294.   xchr [ 75 ] = 'K' ; 
  295.   xchr [ 76 ] = 'L' ; 
  296.   xchr [ 77 ] = 'M' ; 
  297.   xchr [ 78 ] = 'N' ; 
  298.   xchr [ 79 ] = 'O' ; 
  299.   xchr [ 80 ] = 'P' ; 
  300.   xchr [ 81 ] = 'Q' ; 
  301.   xchr [ 82 ] = 'R' ; 
  302.   xchr [ 83 ] = 'S' ; 
  303.   xchr [ 84 ] = 'T' ; 
  304.   xchr [ 85 ] = 'U' ; 
  305.   xchr [ 86 ] = 'V' ; 
  306.   xchr [ 87 ] = 'W' ; 
  307.   xchr [ 88 ] = 'X' ; 
  308.   xchr [ 89 ] = 'Y' ; 
  309.   xchr [ 90 ] = 'Z' ; 
  310.   xchr [ 91 ] = '[' ; 
  311.   xchr [ 92 ] = '\\' ; 
  312.   xchr [ 93 ] = ']' ; 
  313.   xchr [ 94 ] = '^' ; 
  314.   xchr [ 95 ] = '_' ; 
  315.   xchr [ 96 ] = '`' ; 
  316.   xchr [ 97 ] = 'a' ; 
  317.   xchr [ 98 ] = 'b' ; 
  318.   xchr [ 99 ] = 'c' ; 
  319.   xchr [ 100 ] = 'd' ; 
  320.   xchr [ 101 ] = 'e' ; 
  321.   xchr [ 102 ] = 'f' ; 
  322.   xchr [ 103 ] = 'g' ; 
  323.   xchr [ 104 ] = 'h' ; 
  324.   xchr [ 105 ] = 'i' ; 
  325.   xchr [ 106 ] = 'j' ; 
  326.   xchr [ 107 ] = 'k' ; 
  327.   xchr [ 108 ] = 'l' ; 
  328.   xchr [ 109 ] = 'm' ; 
  329.   xchr [ 110 ] = 'n' ; 
  330.   xchr [ 111 ] = 'o' ; 
  331.   xchr [ 112 ] = 'p' ; 
  332.   xchr [ 113 ] = 'q' ; 
  333.   xchr [ 114 ] = 'r' ; 
  334.   xchr [ 115 ] = 's' ; 
  335.   xchr [ 116 ] = 't' ; 
  336.   xchr [ 117 ] = 'u' ; 
  337.   xchr [ 118 ] = 'v' ; 
  338.   xchr [ 119 ] = 'w' ; 
  339.   xchr [ 120 ] = 'x' ; 
  340.   xchr [ 121 ] = 'y' ; 
  341.   xchr [ 122 ] = 'z' ; 
  342.   xchr [ 123 ] = '{' ; 
  343.   xchr [ 124 ] = '|' ; 
  344.   xchr [ 125 ] = '}' ; 
  345.   xchr [ 126 ] = '~' ; 
  346.   xchr [ 0 ] = ' ' ; 
  347.   xchr [ 127 ] = ' ' ; 
  348.   {register integer for_end; i = 1 ; for_end = 31 ; if ( i <= for_end) do 
  349.     xchr [ i ] = chr ( i ) ; 
  350.   while ( i++ < for_end ) ; } 
  351.   {register integer for_end; i = 128 ; for_end = 255 ; if ( i <= for_end) do 
  352.     xchr [ i ] = chr ( i ) ; 
  353.   while ( i++ < for_end ) ; } 
  354.   {register integer for_end; i = 0 ; for_end = 255 ; if ( i <= for_end) do 
  355.     xord [ chr ( i ) ] = 32 ; 
  356.   while ( i++ < for_end ) ; } 
  357.   {register integer for_end; i = 1 ; for_end = 255 ; if ( i <= for_end) do 
  358.     xord [ xchr [ i ] ] = i ; 
  359.   while ( i++ < for_end ) ; } 
  360.   xord [ ' ' ] = 32 ; 
  361.   scanargs () ; 
  362.   rewrite ( Pascalfile , pascalfilename ) ; 
  363.   {register integer for_end; wi = 0 ; for_end = 2 ; if ( wi <= for_end) do 
  364.     {
  365.       bytestart [ wi ] = 0 ; 
  366.       byteptr [ wi ] = 0 ; 
  367.     } 
  368.   while ( wi++ < for_end ) ; } 
  369.   bytestart [ 3 ] = 0 ; 
  370.   nameptr = 1 ; 
  371.   stringptr = 256 ; 
  372.   poolchecksum = 271828L ; 
  373.   {register integer for_end; zi = 0 ; for_end = 3 ; if ( zi <= for_end) do 
  374.     {
  375.       tokstart [ zi ] = 0 ; 
  376.       tokptr [ zi ] = 0 ; 
  377.     } 
  378.   while ( zi++ < for_end ) ; } 
  379.   tokstart [ 4 ] = 0 ; 
  380.   textptr = 1 ; 
  381.   z = 1 % 4 ; 
  382.   ilk [ 0 ] = 0 ; 
  383.   equiv [ 0 ] = 0 ; 
  384.   {register integer for_end; h = 0 ; for_end = hashsize - 1 ; if ( h <= 
  385.   for_end) do 
  386.     {
  387.       hash [ h ] = 0 ; 
  388.       chophash [ h ] = 0 ; 
  389.     } 
  390.   while ( h++ < for_end ) ; } 
  391.   lastunnamed = 0 ; 
  392.   textlink [ 0 ] = 0 ; 
  393.   scanninghex = false ; 
  394.   modtext [ 0 ] = 32 ; 
  395. void openinput ( ) 
  396. {reset ( webfile , webname ) ; 
  397.   reset ( changefile , chgname ) ; 
  398. boolean zinputln ( f ) 
  399. textfile f ; 
  400. {register boolean Result; integer finallimit  ; 
  401.   limit = 0 ; 
  402.   finallimit = 0 ; 
  403.   if ( eof ( f ) ) 
  404.   Result = false ; 
  405.   else {
  406.       
  407.     while ( ! eoln ( f ) ) {
  408.     
  409.       buffer [ limit ] = xord [ getc ( f ) ] ; 
  410.       limit = limit + 1 ; 
  411.       if ( buffer [ limit - 1 ] != 32 ) 
  412.       finallimit = limit ; 
  413.       if ( limit == bufsize ) 
  414.       {
  415.     while ( ! eoln ( f ) ) vgetc ( f ) ; 
  416.     limit = limit - 1 ; 
  417.     if ( finallimit > limit ) 
  418.     finallimit = limit ; 
  419.     {
  420.       putc ('\n',  stdout );
  421.       Fputs( stdout ,  "! Input line too long" ) ; 
  422.     } 
  423.     loc = 0 ; 
  424.     error () ; 
  425.       } 
  426.     } 
  427.     readln ( f ) ; 
  428.     limit = finallimit ; 
  429.     Result = true ; 
  430.   } 
  431.   return(Result) ; 
  432. void zprintid ( p ) 
  433. namepointer p ; 
  434. {integer k  ; 
  435.   char w  ; 
  436.   if ( p >= nameptr ) 
  437.   Fputs( stdout ,  "IMPOSSIBLE" ) ; 
  438.   else {
  439.       
  440.     w = p % 3 ; 
  441.     {register integer for_end; k = bytestart [ p ] ; for_end = bytestart [ p 
  442.     + 3 ] - 1 ; if ( k <= for_end) do 
  443.       putc ( xchr [ bytemem [ w ][ k ] ] ,  stdout );
  444.     while ( k++ < for_end ) ; } 
  445.   } 
  446. namepointer zidlookup ( t ) 
  447. eightbits t ; 
  448. {/* 31 32 */ register namepointer Result; eightbits c  ; 
  449.   integer i  ; 
  450.   integer h  ; 
  451.   integer k  ; 
  452.   char w  ; 
  453.   integer l  ; 
  454.   namepointer p, q  ; 
  455.   integer s  ; 
  456.   l = idloc - idfirst ; 
  457.   h = buffer [ idfirst ] ; 
  458.   i = idfirst + 1 ; 
  459.   while ( i < idloc ) {
  460.       
  461.     h = ( h + h + buffer [ i ] ) % hashsize ; 
  462.     i = i + 1 ; 
  463.   } 
  464.   p = hash [ h ] ; 
  465.   while ( p != 0 ) {
  466.       
  467.     if ( bytestart [ p + 3 ] - bytestart [ p ] == l ) 
  468.     {
  469.       i = idfirst ; 
  470.       k = bytestart [ p ] ; 
  471.       w = p % 3 ; 
  472.       while ( ( i < idloc ) && ( buffer [ i ] == bytemem [ w ][ k ] ) ) {
  473.       
  474.     i = i + 1 ; 
  475.     k = k + 1 ; 
  476.       } 
  477.       if ( i == idloc ) 
  478.       goto lab31 ; 
  479.     } 
  480.     p = link [ p ] ; 
  481.   } 
  482.   p = nameptr ; 
  483.   link [ p ] = hash [ h ] ; 
  484.   hash [ h ] = p ; 
  485.   lab31: ; 
  486.   if ( ( p == nameptr ) || ( t != 0 ) ) 
  487.   {
  488.     if ( ( ( p != nameptr ) && ( t != 0 ) && ( ilk [ p ] == 0 ) ) || ( ( p == 
  489.     nameptr ) && ( t == 0 ) && ( buffer [ idfirst ] != 34 ) ) ) 
  490.     {
  491.       i = idfirst ; 
  492.       s = 0 ; 
  493.       h = 0 ; 
  494.       while ( ( i < idloc ) && ( s < unambiglength ) ) {
  495.       
  496.     if ( buffer [ i ] != 95 ) 
  497.     {
  498.       if ( buffer [ i ] >= 97 ) 
  499.       choppedid [ s ] = buffer [ i ] - 32 ; 
  500.       else choppedid [ s ] = buffer [ i ] ; 
  501.       h = ( h + h + choppedid [ s ] ) % hashsize ; 
  502.       s = s + 1 ; 
  503.     } 
  504.     i = i + 1 ; 
  505.       } 
  506.       choppedid [ s ] = 0 ; 
  507.     } 
  508.     if ( p != nameptr ) 
  509.     {
  510.       if ( ilk [ p ] == 0 ) 
  511.       {
  512.     if ( t == 1 ) 
  513.     {
  514.       putc ('\n',  stdout );
  515.       Fputs( stdout ,  "! This identifier has already appeared" ) ; 
  516.       error () ; 
  517.     } 
  518.     q = chophash [ h ] ; 
  519.     if ( q == p ) 
  520.     chophash [ h ] = equiv [ p ] ; 
  521.     else {
  522.         
  523.       while ( equiv [ q ] != p ) q = equiv [ q ] ; 
  524.       equiv [ q ] = equiv [ p ] ; 
  525.     } 
  526.       } 
  527.       else {
  528.       
  529.     putc ('\n',  stdout );
  530.     Fputs( stdout ,  "! This identifier was defined before" ) ; 
  531.     error () ; 
  532.       } 
  533.       ilk [ p ] = t ; 
  534.     } 
  535.     else {
  536.     
  537.       if ( ( t == 0 ) && ( buffer [ idfirst ] != 34 ) ) 
  538.       {
  539.     q = chophash [ h ] ; 
  540.     while ( q != 0 ) {
  541.         
  542.       {
  543.         k = bytestart [ q ] ; 
  544.         s = 0 ; 
  545.         w = q % 3 ; 
  546.         while ( ( k < bytestart [ q + 3 ] ) && ( s < unambiglength ) ) {
  547.         
  548.           c = bytemem [ w ][ k ] ; 
  549.           if ( c != 95 ) 
  550.           {
  551.         if ( choppedid [ s ] != c ) 
  552.         goto lab32 ; 
  553.         s = s + 1 ; 
  554.           } 
  555.           k = k + 1 ; 
  556.         } 
  557.         if ( ( k == bytestart [ q + 3 ] ) && ( choppedid [ s ] != 0 ) ) 
  558.         goto lab32 ; 
  559.         {
  560.           putc ('\n',  stdout );
  561.           Fputs( stdout ,  "! Identifier conflict with " ) ; 
  562.         } 
  563.         {register integer for_end; k = bytestart [ q ] ; for_end = 
  564.         bytestart [ q + 3 ] - 1 ; if ( k <= for_end) do 
  565.           putc ( xchr [ bytemem [ w ][ k ] ] ,  stdout );
  566.         while ( k++ < for_end ) ; } 
  567.         error () ; 
  568.         q = 0 ; 
  569.         lab32: ; 
  570.       } 
  571.       q = equiv [ q ] ; 
  572.     } 
  573.     equiv [ p ] = chophash [ h ] ; 
  574.     chophash [ h ] = p ; 
  575.       } 
  576.       w = nameptr % 3 ; 
  577.       k = byteptr [ w ] ; 
  578.       if ( k + l > maxbytes ) 
  579.       {
  580.     putc ('\n',  stdout );
  581.     fprintf( stdout , "%s%s%s",  "! Sorry, " , "byte memory" , " capacity exceeded" ) 
  582.     ; 
  583.     error () ; 
  584.     history = 3 ; 
  585.     uexit ( 1 ) ; 
  586.       } 
  587.       if ( nameptr > maxnames - 3 ) 
  588.       {
  589.     putc ('\n',  stdout );
  590.     fprintf( stdout , "%s%s%s",  "! Sorry, " , "name" , " capacity exceeded" ) ; 
  591.     error () ; 
  592.     history = 3 ; 
  593.     uexit ( 1 ) ; 
  594.       } 
  595.       i = idfirst ; 
  596.       while ( i < idloc ) {
  597.       
  598.     bytemem [ w ][ k ] = buffer [ i ] ; 
  599.     k = k + 1 ; 
  600.     i = i + 1 ; 
  601.       } 
  602.       byteptr [ w ] = k ; 
  603.       bytestart [ nameptr + 3 ] = k ; 
  604.       nameptr = nameptr + 1 ; 
  605.       if ( buffer [ idfirst ] != 34 ) 
  606.       ilk [ p ] = t ; 
  607.       else {
  608.       
  609.     ilk [ p ] = 1 ; 
  610.     if ( l - doublechars == 2 ) 
  611.     equiv [ p ] = buffer [ idfirst + 1 ] + 32768L ; 
  612.     else {
  613.         
  614.       if ( stringptr == 256 ) 
  615.       rewrite ( pool , poolfilename ) ; 
  616.       equiv [ p ] = stringptr + 32768L ; 
  617.       l = l - doublechars - 1 ; 
  618.       if ( l > 99 ) 
  619.       {
  620.         putc ('\n',  stdout );
  621.         Fputs( stdout ,  "! Preprocessed string is too long" ) ; 
  622.         error () ; 
  623.       } 
  624.       stringptr = stringptr + 1 ; 
  625.       fprintf( pool , "%c%c",  xchr [ 48 + l / 10 ] , xchr [ 48 + l % 10 ] ) ; 
  626.       poolchecksum = poolchecksum + poolchecksum + l ; 
  627.       while ( poolchecksum > 536870839L ) poolchecksum = poolchecksum - 
  628.       536870839L ; 
  629.       i = idfirst + 1 ; 
  630.       while ( i < idloc ) {
  631.           
  632.         putc ( xchr [ buffer [ i ] ] ,  pool );
  633.         poolchecksum = poolchecksum + poolchecksum + buffer [ i ] ; 
  634.         while ( poolchecksum > 536870839L ) poolchecksum = poolchecksum - 
  635.         536870839L ; 
  636.         if ( ( buffer [ i ] == 34 ) || ( buffer [ i ] == 64 ) ) 
  637.         i = i + 2 ; 
  638.         else i = i + 1 ; 
  639.       } 
  640.       putc ('\n',  pool );
  641.     } 
  642.       } 
  643.     } 
  644.   } 
  645.   Result = p ; 
  646.   return(Result) ; 
  647. namepointer zmodlookup ( l ) 
  648. sixteenbits l ; 
  649. {/* 31 */ register namepointer Result; char c  ; 
  650.   integer j  ; 
  651.   integer k  ; 
  652.   char w  ; 
  653.   namepointer p  ; 
  654.   namepointer q  ; 
  655.   c = 2 ; 
  656.   q = 0 ; 
  657.   p = ilk [ 0 ] ; 
  658.   while ( p != 0 ) {
  659.       
  660.     {
  661.       k = bytestart [ p ] ; 
  662.       w = p % 3 ; 
  663.       c = 1 ; 
  664.       j = 1 ; 
  665.       while ( ( k < bytestart [ p + 3 ] ) && ( j <= l ) && ( modtext [ j ] == 
  666.       bytemem [ w ][ k ] ) ) {
  667.       
  668.     k = k + 1 ; 
  669.     j = j + 1 ; 
  670.       } 
  671.       if ( k == bytestart [ p + 3 ] ) 
  672.       if ( j > l ) 
  673.       c = 1 ; 
  674.       else c = 4 ; 
  675.       else if ( j > l ) 
  676.       c = 3 ; 
  677.       else if ( modtext [ j ] < bytemem [ w ][ k ] ) 
  678.       c = 0 ; 
  679.       else c = 2 ; 
  680.     } 
  681.     q = p ; 
  682.     if ( c == 0 ) 
  683.     p = link [ q ] ; 
  684.     else if ( c == 2 ) 
  685.     p = ilk [ q ] ; 
  686.     else goto lab31 ; 
  687.   } 
  688.   w = nameptr % 3 ; 
  689.   k = byteptr [ w ] ; 
  690.   if ( k + l > maxbytes ) 
  691.   {
  692.     putc ('\n',  stdout );
  693.     fprintf( stdout , "%s%s%s",  "! Sorry, " , "byte memory" , " capacity exceeded" ) ; 
  694.     error () ; 
  695.     history = 3 ; 
  696.     uexit ( 1 ) ; 
  697.   } 
  698.   if ( nameptr > maxnames - 3 ) 
  699.   {
  700.     putc ('\n',  stdout );
  701.     fprintf( stdout , "%s%s%s",  "! Sorry, " , "name" , " capacity exceeded" ) ; 
  702.     error () ; 
  703.     history = 3 ; 
  704.     uexit ( 1 ) ; 
  705.   } 
  706.   p = nameptr ; 
  707.   if ( c == 0 ) 
  708.   link [ q ] = p ; 
  709.   else ilk [ q ] = p ; 
  710.   link [ p ] = 0 ; 
  711.   ilk [ p ] = 0 ; 
  712.   c = 1 ; 
  713.   equiv [ p ] = 0 ; 
  714.   {register integer for_end; j = 1 ; for_end = l ; if ( j <= for_end) do 
  715.     bytemem [ w ][ k + j - 1 ] = modtext [ j ] ; 
  716.   while ( j++ < for_end ) ; } 
  717.   byteptr [ w ] = k + l ; 
  718.   bytestart [ nameptr + 3 ] = k + l ; 
  719.   nameptr = nameptr + 1 ; 
  720.   lab31: if ( c != 1 ) 
  721.   {
  722.     {
  723.       putc ('\n',  stdout );
  724.       Fputs( stdout ,  "! Incompatible section names" ) ; 
  725.       error () ; 
  726.     } 
  727.     p = 0 ; 
  728.   } 
  729.   Result = p ; 
  730.   return(Result) ; 
  731. namepointer zprefixlookup ( l ) 
  732. sixteenbits l ; 
  733. {register namepointer Result; char c  ; 
  734.   integer count  ; 
  735.   integer j  ; 
  736.   integer k  ; 
  737.   char w  ; 
  738.   namepointer p  ; 
  739.   namepointer q  ; 
  740.   namepointer r  ; 
  741.   q = 0 ; 
  742.   p = ilk [ 0 ] ; 
  743.   count = 0 ; 
  744.   r = 0 ; 
  745.   while ( p != 0 ) {
  746.       
  747.     {
  748.       k = bytestart [ p ] ; 
  749.       w = p % 3 ; 
  750.       c = 1 ; 
  751.       j = 1 ; 
  752.       while ( ( k < bytestart [ p + 3 ] ) && ( j <= l ) && ( modtext [ j ] == 
  753.       bytemem [ w ][ k ] ) ) {
  754.       
  755.     k = k + 1 ; 
  756.     j = j + 1 ; 
  757.       } 
  758.       if ( k == bytestart [ p + 3 ] ) 
  759.       if ( j > l ) 
  760.       c = 1 ; 
  761.       else c = 4 ; 
  762.       else if ( j > l ) 
  763.       c = 3 ; 
  764.       else if ( modtext [ j ] < bytemem [ w ][ k ] ) 
  765.       c = 0 ; 
  766.       else c = 2 ; 
  767.     } 
  768.     if ( c == 0 ) 
  769.     p = link [ p ] ; 
  770.     else if ( c == 2 ) 
  771.     p = ilk [ p ] ; 
  772.     else {
  773.     
  774.       r = p ; 
  775.       count = count + 1 ; 
  776.       q = ilk [ p ] ; 
  777.       p = link [ p ] ; 
  778.     } 
  779.     if ( p == 0 ) 
  780.     {
  781.       p = q ; 
  782.       q = 0 ; 
  783.     } 
  784.   } 
  785.   if ( count != 1 ) 
  786.   if ( count == 0 ) 
  787.   {
  788.     putc ('\n',  stdout );
  789.     Fputs( stdout ,  "! Name does not match" ) ; 
  790.     error () ; 
  791.   } 
  792.   else {
  793.       
  794.     putc ('\n',  stdout );
  795.     Fputs( stdout ,  "! Ambiguous prefix" ) ; 
  796.     error () ; 
  797.   } 
  798.   Result = r ; 
  799.   return(Result) ; 
  800. void zstoretwobytes ( x ) 
  801. sixteenbits x ; 
  802. {if ( tokptr [ z ] + 2 > maxtoks ) 
  803.   {
  804.     putc ('\n',  stdout );
  805.     fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded" ) ; 
  806.     error () ; 
  807.     history = 3 ; 
  808.     uexit ( 1 ) ; 
  809.   } 
  810.   tokmem [ z ][ tokptr [ z ] ] = x / 256 ; 
  811.   tokmem [ z ][ tokptr [ z ] + 1 ] = x % 256 ; 
  812.   tokptr [ z ] = tokptr [ z ] + 2 ; 
  813. void zpushlevel ( p ) 
  814. namepointer p ; 
  815. {if ( stackptr == stacksize ) 
  816.   {
  817.     putc ('\n',  stdout );
  818.     fprintf( stdout , "%s%s%s",  "! Sorry, " , "stack" , " capacity exceeded" ) ; 
  819.     error () ; 
  820.     history = 3 ; 
  821.     uexit ( 1 ) ; 
  822.   } 
  823.   else {
  824.       
  825.     stack [ stackptr ] = curstate ; 
  826.     stackptr = stackptr + 1 ; 
  827.     curstate .namefield = p ; 
  828.     curstate .replfield = equiv [ p ] ; 
  829.     zo = curstate .replfield % 4 ; 
  830.     curstate .bytefield = tokstart [ curstate .replfield ] ; 
  831.     curstate .endfield = tokstart [ curstate .replfield + 4 ] ; 
  832.     curstate .modfield = 0 ; 
  833.   } 
  834. void poplevel ( ) 
  835. {/* 10 */ if ( textlink [ curstate .replfield ] == 0 ) 
  836.   {
  837.     if ( ilk [ curstate .namefield ] == 3 ) 
  838.     {
  839.       nameptr = nameptr - 1 ; 
  840.       textptr = textptr - 1 ; 
  841.       z = textptr % 4 ; 
  842.       tokptr [ z ] = tokstart [ textptr ] ; 
  843.     } 
  844.   } 
  845.   else if ( textlink [ curstate .replfield ] < maxtexts ) 
  846.   {
  847.     curstate .replfield = textlink [ curstate .replfield ] ; 
  848.     zo = curstate .replfield % 4 ; 
  849.     curstate .bytefield = tokstart [ curstate .replfield ] ; 
  850.     curstate .endfield = tokstart [ curstate .replfield + 4 ] ; 
  851.     goto lab10 ; 
  852.   } 
  853.   stackptr = stackptr - 1 ; 
  854.   if ( stackptr > 0 ) 
  855.   {
  856.     curstate = stack [ stackptr ] ; 
  857.     zo = curstate .replfield % 4 ; 
  858.   } 
  859.   lab10: ; 
  860. sixteenbits getoutput ( ) 
  861. {/* 20 30 31 */ register sixteenbits Result; sixteenbits a  ; 
  862.   eightbits b  ; 
  863.   sixteenbits bal  ; 
  864.   integer k  ; 
  865.   char w  ; 
  866.   lab20: if ( stackptr == 0 ) 
  867.   {
  868.     a = 0 ; 
  869.     goto lab31 ; 
  870.   } 
  871.   if ( curstate .bytefield == curstate .endfield ) 
  872.   {
  873.     curval = - (integer) curstate .modfield ; 
  874.     poplevel () ; 
  875.     if ( curval == 0 ) 
  876.     goto lab20 ; 
  877.     a = 129 ; 
  878.     goto lab31 ; 
  879.   } 
  880.   a = tokmem [ zo ][ curstate .bytefield ] ; 
  881.   curstate .bytefield = curstate .bytefield + 1 ; 
  882.   if ( a < 128 ) 
  883.   if ( a == 0 ) 
  884.   {
  885.     pushlevel ( nameptr - 1 ) ; 
  886.     goto lab20 ; 
  887.   } 
  888.   else goto lab31 ; 
  889.   a = ( a - 128 ) * 256 + tokmem [ zo ][ curstate .bytefield ] ; 
  890.   curstate .bytefield = curstate .bytefield + 1 ; 
  891.   if ( a < 10240 ) 
  892.   {
  893.     switch ( ilk [ a ] ) 
  894.     {case 0 : 
  895.       {
  896.     curval = a ; 
  897.     a = 130 ; 
  898.       } 
  899.       break ; 
  900.     case 1 : 
  901.       {
  902.     curval = equiv [ a ] - 32768L ; 
  903.     a = 128 ; 
  904.       } 
  905.       break ; 
  906.     case 2 : 
  907.       {
  908.     pushlevel ( a ) ; 
  909.     goto lab20 ; 
  910.       } 
  911.       break ; 
  912.     case 3 : 
  913.       {
  914.     while ( ( curstate .bytefield == curstate .endfield ) && ( stackptr > 
  915.     0 ) ) poplevel () ; 
  916.     if ( ( stackptr == 0 ) || ( tokmem [ zo ][ curstate .bytefield ] != 40 
  917.     ) ) 
  918.     {
  919.       {
  920.         putc ('\n',  stdout );
  921.         Fputs( stdout ,  "! No parameter given for " ) ; 
  922.       } 
  923.       printid ( a ) ; 
  924.       error () ; 
  925.       goto lab20 ; 
  926.     } 
  927.     bal = 1 ; 
  928.     curstate .bytefield = curstate .bytefield + 1 ; 
  929.     while ( true ) {
  930.         
  931.       b = tokmem [ zo ][ curstate .bytefield ] ; 
  932.       curstate .bytefield = curstate .bytefield + 1 ; 
  933.       if ( b == 0 ) 
  934.       storetwobytes ( nameptr + 32767 ) ; 
  935.       else {
  936.           
  937.         if ( b >= 128 ) 
  938.         {
  939.           {
  940.         if ( tokptr [ z ] == maxtoks ) 
  941.         {
  942.           putc ('\n',  stdout );
  943.           fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" ,                   " capacity exceeded" ) ; 
  944.           error () ; 
  945.           history = 3 ; 
  946.           uexit ( 1 ) ; 
  947.         } 
  948.         tokmem [ z ][ tokptr [ z ] ] = b ; 
  949.         tokptr [ z ] = tokptr [ z ] + 1 ; 
  950.           } 
  951.           b = tokmem [ zo ][ curstate .bytefield ] ; 
  952.           curstate .bytefield = curstate .bytefield + 1 ; 
  953.         } 
  954.         else switch ( b ) 
  955.         {case 40 : 
  956.           bal = bal + 1 ; 
  957.           break ; 
  958.         case 41 : 
  959.           {
  960.         bal = bal - 1 ; 
  961.         if ( bal == 0 ) 
  962.         goto lab30 ; 
  963.           } 
  964.           break ; 
  965.         case 39 : 
  966.           do {
  967.           { 
  968.           if ( tokptr [ z ] == maxtoks ) 
  969.           {
  970.             putc ('\n',  stdout );
  971.             fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" ,                     " capacity exceeded" ) ; 
  972.             error () ; 
  973.             history = 3 ; 
  974.             uexit ( 1 ) ; 
  975.           } 
  976.           tokmem [ z ][ tokptr [ z ] ] = b ; 
  977.           tokptr [ z ] = tokptr [ z ] + 1 ; 
  978.         } 
  979.         b = tokmem [ zo ][ curstate .bytefield ] ; 
  980.         curstate .bytefield = curstate .bytefield + 1 ; 
  981.           } while ( ! ( b == 39 ) ) ; 
  982.           break ; 
  983.           default: 
  984.           ; 
  985.           break ; 
  986.         } 
  987.         {
  988.           if ( tokptr [ z ] == maxtoks ) 
  989.           {
  990.         putc ('\n',  stdout );
  991.         fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded"                 ) ; 
  992.         error () ; 
  993.         history = 3 ; 
  994.         uexit ( 1 ) ; 
  995.           } 
  996.           tokmem [ z ][ tokptr [ z ] ] = b ; 
  997.           tokptr [ z ] = tokptr [ z ] + 1 ; 
  998.         } 
  999.       } 
  1000.     } 
  1001.     lab30: ; 
  1002.     equiv [ nameptr ] = textptr ; 
  1003.     ilk [ nameptr ] = 2 ; 
  1004.     w = nameptr % 3 ; 
  1005.     k = byteptr [ w ] ; 
  1006.     if ( nameptr > maxnames - 3 ) 
  1007.     {
  1008.       putc ('\n',  stdout );
  1009.       fprintf( stdout , "%s%s%s",  "! Sorry, " , "name" , " capacity exceeded" ) ; 
  1010.       error () ; 
  1011.       history = 3 ; 
  1012.       uexit ( 1 ) ; 
  1013.     } 
  1014.     bytestart [ nameptr + 3 ] = k ; 
  1015.     nameptr = nameptr + 1 ; 
  1016.     if ( textptr > maxtexts - 4 ) 
  1017.     {
  1018.       putc ('\n',  stdout );
  1019.       fprintf( stdout , "%s%s%s",  "! Sorry, " , "text" , " capacity exceeded" ) ; 
  1020.       error () ; 
  1021.       history = 3 ; 
  1022.       uexit ( 1 ) ; 
  1023.     } 
  1024.     textlink [ textptr ] = 0 ; 
  1025.     tokstart [ textptr + 4 ] = tokptr [ z ] ; 
  1026.     textptr = textptr + 1 ; 
  1027.     z = textptr % 4 ; 
  1028.     pushlevel ( a ) ; 
  1029.     goto lab20 ; 
  1030.       } 
  1031.       break ; 
  1032.       default: 
  1033.       {
  1034.     putc ('\n',  stdout );
  1035.     fprintf( stdout , "%s%s%c",  "! This can't happen (" , "output" , ')' ) ; 
  1036.     error () ; 
  1037.     history = 3 ; 
  1038.     uexit ( 1 ) ; 
  1039.       } 
  1040.       break ; 
  1041.     } 
  1042.     goto lab31 ; 
  1043.   } 
  1044.   if ( a < 20480 ) 
  1045.   {
  1046.     a = a - 10240 ; 
  1047.     if ( equiv [ a ] != 0 ) 
  1048.     pushlevel ( a ) ; 
  1049.     else if ( a != 0 ) 
  1050.     {
  1051.       {
  1052.     putc ('\n',  stdout );
  1053.     Fputs( stdout ,  "! Not present: <" ) ; 
  1054.       } 
  1055.       printid ( a ) ; 
  1056.       putc ( '>' ,  stdout );
  1057.       error () ; 
  1058.     } 
  1059.     goto lab20 ; 
  1060.   } 
  1061.   curval = a - 20480 ; 
  1062.   a = 129 ; 
  1063.   curstate .modfield = curval ; 
  1064.   lab31: Result = a ; 
  1065.   return(Result) ; 
  1066. void flushbuffer ( ) 
  1067. {integer k  ; 
  1068.   integer b  ; 
  1069.   b = breakptr ; 
  1070.   if ( ( semiptr != 0 ) && ( outptr - semiptr <= linelength ) ) 
  1071.   breakptr = semiptr ; 
  1072.   {register integer for_end; k = 1 ; for_end = breakptr ; if ( k <= for_end) 
  1073.   do 
  1074.     putc ( xchr [ outbuf [ k - 1 ] ] ,  Pascalfile );
  1075.   while ( k++ < for_end ) ; } 
  1076.   putc ('\n',  Pascalfile );
  1077.   line = line + 1 ; 
  1078.   if ( line % 100 == 0 ) 
  1079.   {
  1080.     putc ( '.' ,  stdout );
  1081.     if ( line % 500 == 0 ) 
  1082.     fprintf( stdout , "%ld",  (long)line ) ; 
  1083.     flush ( stdout ) ; 
  1084.   } 
  1085.   if ( breakptr < outptr ) 
  1086.   {
  1087.     if ( outbuf [ breakptr ] == 32 ) 
  1088.     {
  1089.       breakptr = breakptr + 1 ; 
  1090.       if ( breakptr > b ) 
  1091.       b = breakptr ; 
  1092.     } 
  1093.     {register integer for_end; k = breakptr ; for_end = outptr - 1 ; if ( k 
  1094.     <= for_end) do 
  1095.       outbuf [ k - breakptr ] = outbuf [ k ] ; 
  1096.     while ( k++ < for_end ) ; } 
  1097.   } 
  1098.   outptr = outptr - breakptr ; 
  1099.   breakptr = b - breakptr ; 
  1100.   semiptr = 0 ; 
  1101.   if ( outptr > linelength ) 
  1102.   {
  1103.     {
  1104.       putc ('\n',  stdout );
  1105.       Fputs( stdout ,  "! Long line must be truncated" ) ; 
  1106.       error () ; 
  1107.     } 
  1108.     outptr = linelength ; 
  1109.   } 
  1110. void zappval ( v ) 
  1111. integer v ; 
  1112. {integer k  ; 
  1113.   k = outbufsize ; 
  1114.   do {
  1115.       outbuf [ k ] = v % 10 ; 
  1116.     v = v / 10 ; 
  1117.     k = k - 1 ; 
  1118.   } while ( ! ( v == 0 ) ) ; 
  1119.   do {
  1120.       k = k + 1 ; 
  1121.     {
  1122.       outbuf [ outptr ] = outbuf [ k ] + 48 ; 
  1123.       outptr = outptr + 1 ; 
  1124.     } 
  1125.   } while ( ! ( k == outbufsize ) ) ; 
  1126. void zsendout ( t , v ) 
  1127. eightbits t ; 
  1128. sixteenbits v ; 
  1129. {/* 20 */ integer k  ; 
  1130.   lab20: switch ( outstate ) 
  1131.   {case 1 : 
  1132.     if ( t != 3 ) 
  1133.     {
  1134.       breakptr = outptr ; 
  1135.       if ( t == 2 ) 
  1136.       {
  1137.     outbuf [ outptr ] = 32 ; 
  1138.     outptr = outptr + 1 ; 
  1139.       } 
  1140.     } 
  1141.     break ; 
  1142.   case 2 : 
  1143.     {
  1144.       {
  1145.     outbuf [ outptr ] = 44 - outapp ; 
  1146.     outptr = outptr + 1 ; 
  1147.       } 
  1148.       if ( outptr > linelength ) 
  1149.       flushbuffer () ; 
  1150.       breakptr = outptr ; 
  1151.     } 
  1152.     break ; 
  1153.   case 3 : 
  1154.   case 4 : 
  1155.     {
  1156.       if ( ( outval < 0 ) || ( ( outval == 0 ) && ( lastsign < 0 ) ) ) 
  1157.       {
  1158.     outbuf [ outptr ] = 45 ; 
  1159.     outptr = outptr + 1 ; 
  1160.       } 
  1161.       else if ( outsign > 0 ) 
  1162.       {
  1163.     outbuf [ outptr ] = outsign ; 
  1164.     outptr = outptr + 1 ; 
  1165.       } 
  1166.       appval ( abs ( outval ) ) ; 
  1167.       if ( outptr > linelength ) 
  1168.       flushbuffer () ; 
  1169.       outstate = outstate - 2 ; 
  1170.       goto lab20 ; 
  1171.     } 
  1172.     break ; 
  1173.   case 5 : 
  1174.     {
  1175.       if ( ( t == 3 ) || ( ( ( t == 2 ) && ( v == 3 ) && ( ( ( outcontrib [ 1 
  1176.       ] == 68 ) && ( outcontrib [ 2 ] == 73 ) && ( outcontrib [ 3 ] == 86 ) ) 
  1177.       || ( ( outcontrib [ 1 ] == 100 ) && ( outcontrib [ 2 ] == 105 ) && ( 
  1178.       outcontrib [ 3 ] == 118 ) ) || ( ( outcontrib [ 1 ] == 77 ) && ( 
  1179.       outcontrib [ 2 ] == 79 ) && ( outcontrib [ 3 ] == 68 ) ) || ( ( 
  1180.       outcontrib [ 1 ] == 109 ) && ( outcontrib [ 2 ] == 111 ) && ( outcontrib 
  1181.       [ 3 ] == 100 ) ) ) ) || ( ( t == 0 ) && ( ( v == 42 ) || ( v == 47 ) ) ) 
  1182.       ) ) 
  1183.       {
  1184.     if ( ( outval < 0 ) || ( ( outval == 0 ) && ( lastsign < 0 ) ) ) 
  1185.     {
  1186.       outbuf [ outptr ] = 45 ; 
  1187.       outptr = outptr + 1 ; 
  1188.     } 
  1189.     else if ( outsign > 0 ) 
  1190.     {
  1191.       outbuf [ outptr ] = outsign ; 
  1192.       outptr = outptr + 1 ; 
  1193.     } 
  1194.     appval ( abs ( outval ) ) ; 
  1195.     if ( outptr > linelength ) 
  1196.     flushbuffer () ; 
  1197.     outsign = 43 ; 
  1198.     outval = outapp ; 
  1199.       } 
  1200.       else outval = outval + outapp ; 
  1201.       outstate = 3 ; 
  1202.       goto lab20 ; 
  1203.     } 
  1204.     break ; 
  1205.   case 0 : 
  1206.     if ( t != 3 ) 
  1207.     breakptr = outptr ; 
  1208.     break ; 
  1209.     default: 
  1210.     ; 
  1211.     break ; 
  1212.   } 
  1213.   if ( t != 0 ) 
  1214.   {register integer for_end; k = 1 ; for_end = v ; if ( k <= for_end) do 
  1215.     {
  1216.       outbuf [ outptr ] = outcontrib [ k ] ; 
  1217.       outptr = outptr + 1 ; 
  1218.     } 
  1219.   while ( k++ < for_end ) ; } 
  1220.   else {
  1221.       
  1222.     outbuf [ outptr ] = v ; 
  1223.     outptr = outptr + 1 ; 
  1224.   } 
  1225.   if ( outptr > linelength ) 
  1226.   flushbuffer () ; 
  1227.   if ( ( t == 0 ) && ( ( v == 59 ) || ( v == 125 ) ) ) 
  1228.   {
  1229.     semiptr = outptr ; 
  1230.     breakptr = outptr ; 
  1231.   } 
  1232.   if ( t >= 2 ) 
  1233.   outstate = 1 ; 
  1234.   else outstate = 0 ; 
  1235. void zsendsign ( v ) 
  1236. integer v ; 
  1237. {switch ( outstate ) 
  1238.   {case 2 : 
  1239.   case 4 : 
  1240.     outapp = outapp * v ; 
  1241.     break ; 
  1242.   case 3 : 
  1243.     {
  1244.       outapp = v ; 
  1245.       outstate = 4 ; 
  1246.     } 
  1247.     break ; 
  1248.   case 5 : 
  1249.     {
  1250.       outval = outval + outapp ; 
  1251.       outapp = v ; 
  1252.       outstate = 4 ; 
  1253.     } 
  1254.     break ; 
  1255.     default: 
  1256.     {
  1257.       breakptr = outptr ; 
  1258.       outapp = v ; 
  1259.       outstate = 2 ; 
  1260.     } 
  1261.     break ; 
  1262.   } 
  1263.   lastsign = outapp ; 
  1264. void zsendval ( v ) 
  1265. integer v ; 
  1266. {/* 666 10 */ switch ( outstate ) 
  1267.   {case 1 : 
  1268.     {
  1269.       if ( ( outptr == breakptr + 3 ) || ( ( outptr == breakptr + 4 ) && ( 
  1270.       outbuf [ breakptr ] == 32 ) ) ) 
  1271.       if ( ( ( outbuf [ outptr - 3 ] == 68 ) && ( outbuf [ outptr - 2 ] == 73 
  1272.       ) && ( outbuf [ outptr - 1 ] == 86 ) ) || ( ( outbuf [ outptr - 3 ] == 
  1273.       100 ) && ( outbuf [ outptr - 2 ] == 105 ) && ( outbuf [ outptr - 1 ] == 
  1274.       118 ) ) || ( ( outbuf [ outptr - 3 ] == 77 ) && ( outbuf [ outptr - 2 ] 
  1275.       == 79 ) && ( outbuf [ outptr - 1 ] == 68 ) ) || ( ( outbuf [ outptr - 3 
  1276.       ] == 109 ) && ( outbuf [ outptr - 2 ] == 111 ) && ( outbuf [ outptr - 1 
  1277.       ] == 100 ) ) ) 
  1278.       goto lab666 ; 
  1279.       outsign = 32 ; 
  1280.       outstate = 3 ; 
  1281.       outval = v ; 
  1282.       breakptr = outptr ; 
  1283.       lastsign = 1 ; 
  1284.     } 
  1285.     break ; 
  1286.   case 0 : 
  1287.     {
  1288.       if ( ( outptr == breakptr + 1 ) && ( ( outbuf [ breakptr ] == 42 ) || ( 
  1289.       outbuf [ breakptr ] == 47 ) ) ) 
  1290.       goto lab666 ; 
  1291.       outsign = 0 ; 
  1292.       outstate = 3 ; 
  1293.       outval = v ; 
  1294.       breakptr = outptr ; 
  1295.       lastsign = 1 ; 
  1296.     } 
  1297.     break ; 
  1298.   case 2 : 
  1299.     {
  1300.       outsign = 43 ; 
  1301.       outstate = 3 ; 
  1302.       outval = outapp * v ; 
  1303.     } 
  1304.     break ; 
  1305.   case 3 : 
  1306.     {
  1307.       outstate = 5 ; 
  1308.       outapp = v ; 
  1309.       {
  1310.     putc ('\n',  stdout );
  1311.     Fputs( stdout ,  "! Two numbers occurred without a sign between them"         ) ; 
  1312.     error () ; 
  1313.       } 
  1314.     } 
  1315.     break ; 
  1316.   case 4 : 
  1317.     {
  1318.       outstate = 5 ; 
  1319.       outapp = outapp * v ; 
  1320.     } 
  1321.     break ; 
  1322.   case 5 : 
  1323.     {
  1324.       outval = outval + outapp ; 
  1325.       outapp = v ; 
  1326.       {
  1327.     putc ('\n',  stdout );
  1328.     Fputs( stdout ,  "! Two numbers occurred without a sign between them"         ) ; 
  1329.     error () ; 
  1330.       } 
  1331.     } 
  1332.     break ; 
  1333.     default: 
  1334.     goto lab666 ; 
  1335.     break ; 
  1336.   } 
  1337.   goto lab10 ; 
  1338.   lab666: if ( v >= 0 ) 
  1339.   {
  1340.     if ( outstate == 1 ) 
  1341.     {
  1342.       breakptr = outptr ; 
  1343.       {
  1344.     outbuf [ outptr ] = 32 ; 
  1345.     outptr = outptr + 1 ; 
  1346.       } 
  1347.     } 
  1348.     appval ( v ) ; 
  1349.     if ( outptr > linelength ) 
  1350.     flushbuffer () ; 
  1351.     outstate = 1 ; 
  1352.   } 
  1353.   else {
  1354.       
  1355.     {
  1356.       outbuf [ outptr ] = 40 ; 
  1357.       outptr = outptr + 1 ; 
  1358.     } 
  1359.     {
  1360.       outbuf [ outptr ] = 45 ; 
  1361.       outptr = outptr + 1 ; 
  1362.     } 
  1363.     appval ( - (integer) v ) ; 
  1364.     {
  1365.       outbuf [ outptr ] = 41 ; 
  1366.       outptr = outptr + 1 ; 
  1367.     } 
  1368.     if ( outptr > linelength ) 
  1369.     flushbuffer () ; 
  1370.     outstate = 0 ; 
  1371.   } 
  1372.   lab10: ; 
  1373. void sendtheoutput ( ) 
  1374. {/* 2 21 22 */ eightbits curchar  ; 
  1375.   integer k  ; 
  1376.   integer j  ; 
  1377.   char w  ; 
  1378.   integer n  ; 
  1379.   while ( stackptr > 0 ) {
  1380.       
  1381.     curchar = getoutput () ; 
  1382.     lab21: switch ( curchar ) 
  1383.     {case 0 : 
  1384.       ; 
  1385.       break ; 
  1386.     case 65 : 
  1387.     case 66 : 
  1388.     case 67 : 
  1389.     case 68 : 
  1390.     case 69 : 
  1391.     case 70 : 
  1392.     case 71 : 
  1393.     case 72 : 
  1394.     case 73 : 
  1395.     case 74 : 
  1396.     case 75 : 
  1397.     case 76 : 
  1398.     case 77 : 
  1399.     case 78 : 
  1400.     case 79 : 
  1401.     case 80 : 
  1402.     case 81 : 
  1403.     case 82 : 
  1404.     case 83 : 
  1405.     case 84 : 
  1406.     case 85 : 
  1407.     case 86 : 
  1408.     case 87 : 
  1409.     case 88 : 
  1410.     case 89 : 
  1411.     case 90 : 
  1412.     case 97 : 
  1413.     case 98 : 
  1414.     case 99 : 
  1415.     case 100 : 
  1416.     case 101 : 
  1417.     case 102 : 
  1418.     case 103 : 
  1419.     case 104 : 
  1420.     case 105 : 
  1421.     case 106 : 
  1422.     case 107 : 
  1423.     case 108 : 
  1424.     case 109 : 
  1425.     case 110 : 
  1426.     case 111 : 
  1427.     case 112 : 
  1428.     case 113 : 
  1429.     case 114 : 
  1430.     case 115 : 
  1431.     case 116 : 
  1432.     case 117 : 
  1433.     case 118 : 
  1434.     case 119 : 
  1435.     case 120 : 
  1436.     case 121 : 
  1437.     case 122 : 
  1438.       {
  1439.     outcontrib [ 1 ] = curchar ; 
  1440.     sendout ( 2 , 1 ) ; 
  1441.       } 
  1442.       break ; 
  1443.     case 130 : 
  1444.       {
  1445.     k = 0 ; 
  1446.     j = bytestart [ curval ] ; 
  1447.     w = curval % 3 ; 
  1448.     while ( ( k < maxidlength ) && ( j < bytestart [ curval + 3 ] ) ) {
  1449.         
  1450.       k = k + 1 ; 
  1451.       outcontrib [ k ] = bytemem [ w ][ j ] ; 
  1452.       j = j + 1 ; 
  1453.       if ( outcontrib [ k ] == 95 ) 
  1454.       k = k - 1 ; 
  1455.     } 
  1456.     sendout ( 2 , k ) ; 
  1457.       } 
  1458.       break ; 
  1459.     case 48 : 
  1460.     case 49 : 
  1461.     case 50 : 
  1462.     case 51 : 
  1463.     case 52 : 
  1464.     case 53 : 
  1465.     case 54 : 
  1466.     case 55 : 
  1467.     case 56 : 
  1468.     case 57 : 
  1469.       {
  1470.     n = 0 ; 
  1471.     do {
  1472.         curchar = curchar - 48 ; 
  1473.       if ( n >= 214748364L ) 
  1474.       {
  1475.         putc ('\n',  stdout );
  1476.         Fputs( stdout ,  "! Constant too big" ) ; 
  1477.         error () ; 
  1478.       } 
  1479.       else n = 10 * n + curchar ; 
  1480.       curchar = getoutput () ; 
  1481.     } while ( ! ( ( curchar > 57 ) || ( curchar < 48 ) ) ) ; 
  1482.     sendval ( n ) ; 
  1483.     k = 0 ; 
  1484.     if ( curchar == 101 ) 
  1485.     curchar = 69 ; 
  1486.     if ( curchar == 69 ) 
  1487.     goto lab2 ; 
  1488.     else goto lab21 ; 
  1489.       } 
  1490.       break ; 
  1491.     case 125 : 
  1492.       sendval ( poolchecksum ) ; 
  1493.       break ; 
  1494.     case 12 : 
  1495.       {
  1496.     n = 0 ; 
  1497.     curchar = 48 ; 
  1498.     do {
  1499.         curchar = curchar - 48 ; 
  1500.       if ( n >= 268435456L ) 
  1501.       {
  1502.         putc ('\n',  stdout );
  1503.         Fputs( stdout ,  "! Constant too big" ) ; 
  1504.         error () ; 
  1505.       } 
  1506.       else n = 8 * n + curchar ; 
  1507.       curchar = getoutput () ; 
  1508.     } while ( ! ( ( curchar > 55 ) || ( curchar < 48 ) ) ) ; 
  1509.     sendval ( n ) ; 
  1510.     goto lab21 ; 
  1511.       } 
  1512.       break ; 
  1513.     case 13 : 
  1514.       {
  1515.     n = 0 ; 
  1516.     curchar = 48 ; 
  1517.     do {
  1518.         if ( curchar >= 65 ) 
  1519.       curchar = curchar - 55 ; 
  1520.       else curchar = curchar - 48 ; 
  1521.       if ( n >= 134217728L ) 
  1522.       {
  1523.         putc ('\n',  stdout );
  1524.         Fputs( stdout ,  "! Constant too big" ) ; 
  1525.         error () ; 
  1526.       } 
  1527.       else n = 16 * n + curchar ; 
  1528.       curchar = getoutput () ; 
  1529.     } while ( ! ( ( curchar > 70 ) || ( curchar < 48 ) || ( ( curchar > 57 
  1530.     ) && ( curchar < 65 ) ) ) ) ; 
  1531.     sendval ( n ) ; 
  1532.     goto lab21 ; 
  1533.       } 
  1534.       break ; 
  1535.     case 128 : 
  1536.       sendval ( curval ) ; 
  1537.       break ; 
  1538.     case 46 : 
  1539.       {
  1540.     k = 1 ; 
  1541.     outcontrib [ 1 ] = 46 ; 
  1542.     curchar = getoutput () ; 
  1543.     if ( curchar == 46 ) 
  1544.     {
  1545.       outcontrib [ 2 ] = 46 ; 
  1546.       sendout ( 1 , 2 ) ; 
  1547.     } 
  1548.     else if ( ( curchar >= 48 ) && ( curchar <= 57 ) ) 
  1549.     goto lab2 ; 
  1550.     else {
  1551.         
  1552.       sendout ( 0 , 46 ) ; 
  1553.       goto lab21 ; 
  1554.     } 
  1555.       } 
  1556.       break ; 
  1557.     case 43 : 
  1558.     case 45 : 
  1559.       sendsign ( 44 - curchar ) ; 
  1560.       break ; 
  1561.     case 4 : 
  1562.       {
  1563.     outcontrib [ 1 ] = 97 ; 
  1564.     outcontrib [ 2 ] = 110 ; 
  1565.     outcontrib [ 3 ] = 100 ; 
  1566.     sendout ( 2 , 3 ) ; 
  1567.       } 
  1568.       break ; 
  1569.     case 5 : 
  1570.       {
  1571.     outcontrib [ 1 ] = 110 ; 
  1572.     outcontrib [ 2 ] = 111 ; 
  1573.     outcontrib [ 3 ] = 116 ; 
  1574.     sendout ( 2 , 3 ) ; 
  1575.       } 
  1576.       break ; 
  1577.     case 6 : 
  1578.       {
  1579.     outcontrib [ 1 ] = 105 ; 
  1580.     outcontrib [ 2 ] = 110 ; 
  1581.     sendout ( 2 , 2 ) ; 
  1582.       } 
  1583.       break ; 
  1584.     case 31 : 
  1585.       {
  1586.     outcontrib [ 1 ] = 111 ; 
  1587.     outcontrib [ 2 ] = 114 ; 
  1588.     sendout ( 2 , 2 ) ; 
  1589.       } 
  1590.       break ; 
  1591.     case 24 : 
  1592.       {
  1593.     outcontrib [ 1 ] = 58 ; 
  1594.     outcontrib [ 2 ] = 61 ; 
  1595.     sendout ( 1 , 2 ) ; 
  1596.       } 
  1597.       break ; 
  1598.     case 26 : 
  1599.       {
  1600.     outcontrib [ 1 ] = 60 ; 
  1601.     outcontrib [ 2 ] = 62 ; 
  1602.     sendout ( 1 , 2 ) ; 
  1603.       } 
  1604.       break ; 
  1605.     case 28 : 
  1606.       {
  1607.     outcontrib [ 1 ] = 60 ; 
  1608.     outcontrib [ 2 ] = 61 ; 
  1609.     sendout ( 1 , 2 ) ; 
  1610.       } 
  1611.       break ; 
  1612.     case 29 : 
  1613.       {
  1614.     outcontrib [ 1 ] = 62 ; 
  1615.     outcontrib [ 2 ] = 61 ; 
  1616.     sendout ( 1 , 2 ) ; 
  1617.       } 
  1618.       break ; 
  1619.     case 30 : 
  1620.       {
  1621.     outcontrib [ 1 ] = 61 ; 
  1622.     outcontrib [ 2 ] = 61 ; 
  1623.     sendout ( 1 , 2 ) ; 
  1624.       } 
  1625.       break ; 
  1626.     case 32 : 
  1627.       {
  1628.     outcontrib [ 1 ] = 46 ; 
  1629.     outcontrib [ 2 ] = 46 ; 
  1630.     sendout ( 1 , 2 ) ; 
  1631.       } 
  1632.       break ; 
  1633.     case 39 : 
  1634.       {
  1635.     k = 1 ; 
  1636.     outcontrib [ 1 ] = 39 ; 
  1637.     do {
  1638.         if ( k < linelength ) 
  1639.       k = k + 1 ; 
  1640.       outcontrib [ k ] = getoutput () ; 
  1641.     } while ( ! ( ( outcontrib [ k ] == 39 ) || ( stackptr == 0 ) ) ) ; 
  1642.     if ( k == linelength ) 
  1643.     {
  1644.       putc ('\n',  stdout );
  1645.       Fputs( stdout ,  "! String too long" ) ; 
  1646.       error () ; 
  1647.     } 
  1648.     sendout ( 1 , k ) ; 
  1649.     curchar = getoutput () ; 
  1650.     if ( curchar == 39 ) 
  1651.     outstate = 6 ; 
  1652.     goto lab21 ; 
  1653.       } 
  1654.       break ; 
  1655.     case 33 : 
  1656.     case 34 : 
  1657.     case 35 : 
  1658.     case 36 : 
  1659.     case 37 : 
  1660.     case 38 : 
  1661.     case 40 : 
  1662.     case 41 : 
  1663.     case 42 : 
  1664.     case 44 : 
  1665.     case 47 : 
  1666.     case 58 : 
  1667.     case 59 : 
  1668.     case 60 : 
  1669.     case 61 : 
  1670.     case 62 : 
  1671.     case 63 : 
  1672.     case 64 : 
  1673.     case 91 : 
  1674.     case 92 : 
  1675.     case 93 : 
  1676.     case 94 : 
  1677.     case 95 : 
  1678.     case 96 : 
  1679.     case 123 : 
  1680.     case 124 : 
  1681.       sendout ( 0 , curchar ) ; 
  1682.       break ; 
  1683.     case 9 : 
  1684.       {
  1685.     if ( bracelevel == 0 ) 
  1686.     sendout ( 0 , 123 ) ; 
  1687.     else sendout ( 0 , 91 ) ; 
  1688.     bracelevel = bracelevel + 1 ; 
  1689.       } 
  1690.       break ; 
  1691.     case 10 : 
  1692.       if ( bracelevel > 0 ) 
  1693.       {
  1694.     bracelevel = bracelevel - 1 ; 
  1695.     if ( bracelevel == 0 ) 
  1696.     sendout ( 0 , 125 ) ; 
  1697.     else sendout ( 0 , 93 ) ; 
  1698.       } 
  1699.       else {
  1700.       
  1701.     putc ('\n',  stdout );
  1702.     Fputs( stdout ,  "! Extra @}" ) ; 
  1703.     error () ; 
  1704.       } 
  1705.       break ; 
  1706.     case 129 : 
  1707.       {
  1708.     if ( bracelevel == 0 ) 
  1709.     sendout ( 0 , 123 ) ; 
  1710.     else sendout ( 0 , 91 ) ; 
  1711.     if ( curval < 0 ) 
  1712.     {
  1713.       sendout ( 0 , 58 ) ; 
  1714.       sendval ( - (integer) curval ) ; 
  1715.     } 
  1716.     else {
  1717.         
  1718.       sendval ( curval ) ; 
  1719.       sendout ( 0 , 58 ) ; 
  1720.     } 
  1721.     if ( bracelevel == 0 ) 
  1722.     sendout ( 0 , 125 ) ; 
  1723.     else sendout ( 0 , 93 ) ; 
  1724.       } 
  1725.       break ; 
  1726.     case 127 : 
  1727.       {
  1728.     sendout ( 3 , 0 ) ; 
  1729.     outstate = 6 ; 
  1730.       } 
  1731.       break ; 
  1732.     case 2 : 
  1733.       {
  1734.     k = 0 ; 
  1735.     do {
  1736.         if ( k < linelength ) 
  1737.       k = k + 1 ; 
  1738.       outcontrib [ k ] = getoutput () ; 
  1739.     } while ( ! ( ( outcontrib [ k ] == 2 ) || ( stackptr == 0 ) ) ) ; 
  1740.     if ( k == linelength ) 
  1741.     {
  1742.       putc ('\n',  stdout );
  1743.       Fputs( stdout ,  "! Verbatim string too long" ) ; 
  1744.       error () ; 
  1745.     } 
  1746.     sendout ( 1 , k - 1 ) ; 
  1747.       } 
  1748.       break ; 
  1749.     case 3 : 
  1750.       {
  1751.     sendout ( 1 , 0 ) ; 
  1752.     while ( outptr > 0 ) {
  1753.         
  1754.       if ( outptr <= linelength ) 
  1755.       breakptr = outptr ; 
  1756.       flushbuffer () ; 
  1757.     } 
  1758.     outstate = 0 ; 
  1759.       } 
  1760.       break ; 
  1761.       default: 
  1762.       {
  1763.     putc ('\n',  stdout );
  1764.     fprintf( stdout , "%s%ld",  "! Can't output ASCII code " , (long)curchar ) ; 
  1765.     error () ; 
  1766.       } 
  1767.       break ; 
  1768.     } 
  1769.     goto lab22 ; 
  1770.     lab2: do {
  1771.     if ( k < linelength ) 
  1772.       k = k + 1 ; 
  1773.       outcontrib [ k ] = curchar ; 
  1774.       curchar = getoutput () ; 
  1775.       if ( ( outcontrib [ k ] == 69 ) && ( ( curchar == 43 ) || ( curchar == 
  1776.       45 ) ) ) 
  1777.       {
  1778.     if ( k < linelength ) 
  1779.     k = k + 1 ; 
  1780.     outcontrib [ k ] = curchar ; 
  1781.     curchar = getoutput () ; 
  1782.       } 
  1783.       else if ( curchar == 101 ) 
  1784.       curchar = 69 ; 
  1785.     } while ( ! ( ( curchar != 69 ) && ( ( curchar < 48 ) || ( curchar > 57 ) 
  1786.     ) ) ) ; 
  1787.     if ( k == linelength ) 
  1788.     {
  1789.       putc ('\n',  stdout );
  1790.       Fputs( stdout ,  "! Fraction too long" ) ; 
  1791.       error () ; 
  1792.     } 
  1793.     sendout ( 3 , k ) ; 
  1794.     goto lab21 ; 
  1795.     lab22: ; 
  1796.   } 
  1797. boolean linesdontmatch ( ) 
  1798. {/* 10 */ register boolean Result; integer k  ; 
  1799.   Result = true ; 
  1800.   if ( changelimit != limit ) 
  1801.   goto lab10 ; 
  1802.   if ( limit > 0 ) 
  1803.   {register integer for_end; k = 0 ; for_end = limit - 1 ; if ( k <= for_end) 
  1804.   do 
  1805.     if ( changebuffer [ k ] != buffer [ k ] ) 
  1806.     goto lab10 ; 
  1807.   while ( k++ < for_end ) ; } 
  1808.   Result = false ; 
  1809.   lab10: ; 
  1810.   return(Result) ; 
  1811. void primethechangebuffer ( ) 
  1812. {/* 22 30 10 */ integer k  ; 
  1813.   changelimit = 0 ; 
  1814.   while ( true ) {
  1815.       
  1816.     line = line + 1 ; 
  1817.     if ( ! inputln ( changefile ) ) 
  1818.     goto lab10 ; 
  1819.     if ( limit < 2 ) 
  1820.     goto lab22 ; 
  1821.     if ( buffer [ 0 ] != 64 ) 
  1822.     goto lab22 ; 
  1823.     if ( ( buffer [ 1 ] >= 88 ) && ( buffer [ 1 ] <= 90 ) ) 
  1824.     buffer [ 1 ] = buffer [ 1 ] + 32 ; 
  1825.     if ( buffer [ 1 ] == 120 ) 
  1826.     goto lab30 ; 
  1827.     if ( ( buffer [ 1 ] == 121 ) || ( buffer [ 1 ] == 122 ) ) 
  1828.     {
  1829.       loc = 2 ; 
  1830.       {
  1831.     putc ('\n',  stdout );
  1832.     Fputs( stdout ,  "! Where is the matching @x?" ) ; 
  1833.     error () ; 
  1834.       } 
  1835.     } 
  1836.     lab22: ; 
  1837.   } 
  1838.   lab30: ; 
  1839.   do {
  1840.       line = line + 1 ; 
  1841.     if ( ! inputln ( changefile ) ) 
  1842.     {
  1843.       {
  1844.     putc ('\n',  stdout );
  1845.     Fputs( stdout ,  "! Change file ended after @x" ) ; 
  1846.     error () ; 
  1847.       } 
  1848.       goto lab10 ; 
  1849.     } 
  1850.   } while ( ! ( limit > 0 ) ) ; 
  1851.   {
  1852.     changelimit = limit ; 
  1853.     if ( limit > 0 ) 
  1854.     {register integer for_end; k = 0 ; for_end = limit - 1 ; if ( k <= 
  1855.     for_end) do 
  1856.       changebuffer [ k ] = buffer [ k ] ; 
  1857.     while ( k++ < for_end ) ; } 
  1858.   } 
  1859.   lab10: ; 
  1860. void checkchange ( ) 
  1861. {/* 10 */ integer n  ; 
  1862.   integer k  ; 
  1863.   if ( linesdontmatch () ) 
  1864.   goto lab10 ; 
  1865.   n = 0 ; 
  1866.   while ( true ) {
  1867.       
  1868.     changing = ! changing ; 
  1869.     templine = otherline ; 
  1870.     otherline = line ; 
  1871.     line = templine ; 
  1872.     line = line + 1 ; 
  1873.     if ( ! inputln ( changefile ) ) 
  1874.     {
  1875.       {
  1876.     putc ('\n',  stdout );
  1877.     Fputs( stdout ,  "! Change file ended before @y" ) ; 
  1878.     error () ; 
  1879.       } 
  1880.       changelimit = 0 ; 
  1881.       changing = ! changing ; 
  1882.       templine = otherline ; 
  1883.       otherline = line ; 
  1884.       line = templine ; 
  1885.       goto lab10 ; 
  1886.     } 
  1887.     if ( limit > 1 ) 
  1888.     if ( buffer [ 0 ] == 64 ) 
  1889.     {
  1890.       if ( ( buffer [ 1 ] >= 88 ) && ( buffer [ 1 ] <= 90 ) ) 
  1891.       buffer [ 1 ] = buffer [ 1 ] + 32 ; 
  1892.       if ( ( buffer [ 1 ] == 120 ) || ( buffer [ 1 ] == 122 ) ) 
  1893.       {
  1894.     loc = 2 ; 
  1895.     {
  1896.       putc ('\n',  stdout );
  1897.       Fputs( stdout ,  "! Where is the matching @y?" ) ; 
  1898.       error () ; 
  1899.     } 
  1900.       } 
  1901.       else if ( buffer [ 1 ] == 121 ) 
  1902.       {
  1903.     if ( n > 0 ) 
  1904.     {
  1905.       loc = 2 ; 
  1906.       {
  1907.         putc ('\n',  stdout );
  1908.         fprintf( stdout , "%s%ld%s",  "! Hmm... " , (long)n ,             " of the preceding lines failed to match" ) ; 
  1909.         error () ; 
  1910.       } 
  1911.     } 
  1912.     goto lab10 ; 
  1913.       } 
  1914.     } 
  1915.     {
  1916.       changelimit = limit ; 
  1917.       if ( limit > 0 ) 
  1918.       {register integer for_end; k = 0 ; for_end = limit - 1 ; if ( k <= 
  1919.       for_end) do 
  1920.     changebuffer [ k ] = buffer [ k ] ; 
  1921.       while ( k++ < for_end ) ; } 
  1922.     } 
  1923.     changing = ! changing ; 
  1924.     templine = otherline ; 
  1925.     otherline = line ; 
  1926.     line = templine ; 
  1927.     line = line + 1 ; 
  1928.     if ( ! inputln ( webfile ) ) 
  1929.     {
  1930.       {
  1931.     putc ('\n',  stdout );
  1932.     Fputs( stdout ,  "! WEB file ended during a change" ) ; 
  1933.     error () ; 
  1934.       } 
  1935.       inputhasended = true ; 
  1936.       goto lab10 ; 
  1937.     } 
  1938.     if ( linesdontmatch () ) 
  1939.     n = n + 1 ; 
  1940.   } 
  1941.   lab10: ; 
  1942. void getline ( ) 
  1943. {/* 20 */ lab20: if ( changing ) 
  1944.   {
  1945.     line = line + 1 ; 
  1946.     if ( ! inputln ( changefile ) ) 
  1947.     {
  1948.       {
  1949.     putc ('\n',  stdout );
  1950.     Fputs( stdout ,  "! Change file ended without @z" ) ; 
  1951.     error () ; 
  1952.       } 
  1953.       buffer [ 0 ] = 64 ; 
  1954.       buffer [ 1 ] = 122 ; 
  1955.       limit = 2 ; 
  1956.     } 
  1957.     if ( limit > 1 ) 
  1958.     if ( buffer [ 0 ] == 64 ) 
  1959.     {
  1960.       if ( ( buffer [ 1 ] >= 88 ) && ( buffer [ 1 ] <= 90 ) ) 
  1961.       buffer [ 1 ] = buffer [ 1 ] + 32 ; 
  1962.       if ( ( buffer [ 1 ] == 120 ) || ( buffer [ 1 ] == 121 ) ) 
  1963.       {
  1964.     loc = 2 ; 
  1965.     {
  1966.       putc ('\n',  stdout );
  1967.       Fputs( stdout ,  "! Where is the matching @z?" ) ; 
  1968.       error () ; 
  1969.     } 
  1970.       } 
  1971.       else if ( buffer [ 1 ] == 122 ) 
  1972.       {
  1973.     primethechangebuffer () ; 
  1974.     changing = ! changing ; 
  1975.     templine = otherline ; 
  1976.     otherline = line ; 
  1977.     line = templine ; 
  1978.       } 
  1979.     } 
  1980.   } 
  1981.   if ( ! changing ) 
  1982.   {
  1983.     {
  1984.       line = line + 1 ; 
  1985.       if ( ! inputln ( webfile ) ) 
  1986.       inputhasended = true ; 
  1987.       else if ( limit == changelimit ) 
  1988.       if ( buffer [ 0 ] == changebuffer [ 0 ] ) 
  1989.       if ( changelimit > 0 ) 
  1990.       checkchange () ; 
  1991.     } 
  1992.     if ( changing ) 
  1993.     goto lab20 ; 
  1994.   } 
  1995.   loc = 0 ; 
  1996.   buffer [ limit ] = 32 ; 
  1997. eightbits zcontrolcode ( c ) 
  1998. ASCIIcode c ; 
  1999. {register eightbits Result; switch ( c ) 
  2000.   {case 64 : 
  2001.     Result = 64 ; 
  2002.     break ; 
  2003.   case 39 : 
  2004.     Result = 12 ; 
  2005.     break ; 
  2006.   case 34 : 
  2007.     Result = 13 ; 
  2008.     break ; 
  2009.   case 36 : 
  2010.     Result = 125 ; 
  2011.     break ; 
  2012.   case 32 : 
  2013.   case 9 : 
  2014.     Result = 136 ; 
  2015.     break ; 
  2016.   case 42 : 
  2017.     {
  2018.       fprintf( stdout , "%c%ld",  '*' , (long)modulecount + 1 ) ; 
  2019.       flush ( stdout ) ; 
  2020.       Result = 136 ; 
  2021.     } 
  2022.     break ; 
  2023.   case 68 : 
  2024.   case 100 : 
  2025.     Result = 133 ; 
  2026.     break ; 
  2027.   case 70 : 
  2028.   case 102 : 
  2029.     Result = 132 ; 
  2030.     break ; 
  2031.   case 123 : 
  2032.     Result = 9 ; 
  2033.     break ; 
  2034.   case 125 : 
  2035.     Result = 10 ; 
  2036.     break ; 
  2037.   case 80 : 
  2038.   case 112 : 
  2039.     Result = 134 ; 
  2040.     break ; 
  2041.   case 84 : 
  2042.   case 116 : 
  2043.   case 94 : 
  2044.   case 46 : 
  2045.   case 58 : 
  2046.     Result = 131 ; 
  2047.     break ; 
  2048.   case 38 : 
  2049.     Result = 127 ; 
  2050.     break ; 
  2051.   case 60 : 
  2052.     Result = 135 ; 
  2053.     break ; 
  2054.   case 61 : 
  2055.     Result = 2 ; 
  2056.     break ; 
  2057.   case 92 : 
  2058.     Result = 3 ; 
  2059.     break ; 
  2060.     default: 
  2061.     Result = 0 ; 
  2062.     break ; 
  2063.   } 
  2064.   return(Result) ; 
  2065. eightbits skipahead ( ) 
  2066. {/* 30 */ register eightbits Result; eightbits c  ; 
  2067.   while ( true ) {
  2068.       
  2069.     if ( loc > limit ) 
  2070.     {
  2071.       getline () ; 
  2072.       if ( inputhasended ) 
  2073.       {
  2074.     c = 136 ; 
  2075.     goto lab30 ; 
  2076.       } 
  2077.     } 
  2078.     buffer [ limit + 1 ] = 64 ; 
  2079.     while ( buffer [ loc ] != 64 ) loc = loc + 1 ; 
  2080.     if ( loc <= limit ) 
  2081.     {
  2082.       loc = loc + 2 ; 
  2083.       c = controlcode ( buffer [ loc - 1 ] ) ; 
  2084.       if ( ( c != 0 ) || ( buffer [ loc - 1 ] == 62 ) ) 
  2085.       goto lab30 ; 
  2086.     } 
  2087.   } 
  2088.   lab30: Result = c ; 
  2089.   return(Result) ; 
  2090. void skipcomment ( ) 
  2091. {/* 10 */ eightbits bal  ; 
  2092.   ASCIIcode c  ; 
  2093.   bal = 0 ; 
  2094.   while ( true ) {
  2095.       
  2096.     if ( loc > limit ) 
  2097.     {
  2098.       getline () ; 
  2099.       if ( inputhasended ) 
  2100.       {
  2101.     {
  2102.       putc ('\n',  stdout );
  2103.       Fputs( stdout ,  "! Input ended in mid-comment" ) ; 
  2104.       error () ; 
  2105.     } 
  2106.     goto lab10 ; 
  2107.       } 
  2108.     } 
  2109.     c = buffer [ loc ] ; 
  2110.     loc = loc + 1 ; 
  2111.     if ( c == 64 ) 
  2112.     {
  2113.       c = buffer [ loc ] ; 
  2114.       if ( ( c != 32 ) && ( c != 9 ) && ( c != 42 ) && ( c != 122 ) && ( c != 
  2115.       90 ) ) 
  2116.       loc = loc + 1 ; 
  2117.       else {
  2118.       
  2119.     {
  2120.       putc ('\n',  stdout );
  2121.       Fputs( stdout ,  "! Section ended in mid-comment" ) ; 
  2122.       error () ; 
  2123.     } 
  2124.     loc = loc - 1 ; 
  2125.     goto lab10 ; 
  2126.       } 
  2127.     } 
  2128.     else if ( ( c == 92 ) && ( buffer [ loc ] != 64 ) ) 
  2129.     loc = loc + 1 ; 
  2130.     else if ( c == 123 ) 
  2131.     bal = bal + 1 ; 
  2132.     else if ( c == 125 ) 
  2133.     {
  2134.       if ( bal == 0 ) 
  2135.       goto lab10 ; 
  2136.       bal = bal - 1 ; 
  2137.     } 
  2138.   } 
  2139.   lab10: ; 
  2140. eightbits getnext ( ) 
  2141. {/* 20 30 31 */ register eightbits Result; eightbits c  ; 
  2142.   eightbits d  ; 
  2143.   integer j, k  ; 
  2144.   lab20: if ( loc > limit ) 
  2145.   {
  2146.     getline () ; 
  2147.     if ( inputhasended ) 
  2148.     {
  2149.       c = 136 ; 
  2150.       goto lab31 ; 
  2151.     } 
  2152.   } 
  2153.   c = buffer [ loc ] ; 
  2154.   loc = loc + 1 ; 
  2155.   if ( scanninghex ) 
  2156.   if ( ( ( c >= 48 ) && ( c <= 57 ) ) || ( ( c >= 65 ) && ( c <= 70 ) ) ) 
  2157.   goto lab31 ; 
  2158.   else scanninghex = false ; 
  2159.   switch ( c ) 
  2160.   {case 65 : 
  2161.   case 66 : 
  2162.   case 67 : 
  2163.   case 68 : 
  2164.   case 69 : 
  2165.   case 70 : 
  2166.   case 71 : 
  2167.   case 72 : 
  2168.   case 73 : 
  2169.   case 74 : 
  2170.   case 75 : 
  2171.   case 76 : 
  2172.   case 77 : 
  2173.   case 78 : 
  2174.   case 79 : 
  2175.   case 80 : 
  2176.   case 81 : 
  2177.   case 82 : 
  2178.   case 83 : 
  2179.   case 84 : 
  2180.   case 85 : 
  2181.   case 86 : 
  2182.   case 87 : 
  2183.   case 88 : 
  2184.   case 89 : 
  2185.   case 90 : 
  2186.   case 97 : 
  2187.   case 98 : 
  2188.   case 99 : 
  2189.   case 100 : 
  2190.   case 101 : 
  2191.   case 102 : 
  2192.   case 103 : 
  2193.   case 104 : 
  2194.   case 105 : 
  2195.   case 106 : 
  2196.   case 107 : 
  2197.   case 108 : 
  2198.   case 109 : 
  2199.   case 110 : 
  2200.   case 111 : 
  2201.   case 112 : 
  2202.   case 113 : 
  2203.   case 114 : 
  2204.   case 115 : 
  2205.   case 116 : 
  2206.   case 117 : 
  2207.   case 118 : 
  2208.   case 119 : 
  2209.   case 120 : 
  2210.   case 121 : 
  2211.   case 122 : 
  2212.     {
  2213.       if ( ( ( c == 101 ) || ( c == 69 ) ) && ( loc > 1 ) ) 
  2214.       if ( ( buffer [ loc - 2 ] <= 57 ) && ( buffer [ loc - 2 ] >= 48 ) ) 
  2215.       c = 0 ; 
  2216.       if ( c != 0 ) 
  2217.       {
  2218.     loc = loc - 1 ; 
  2219.     idfirst = loc ; 
  2220.     do {
  2221.         loc = loc + 1 ; 
  2222.       d = buffer [ loc ] ; 
  2223.     } while ( ! ( ( ( d < 48 ) || ( ( d > 57 ) && ( d < 65 ) ) || ( ( d > 
  2224.     90 ) && ( d < 97 ) ) || ( d > 122 ) ) && ( d != 95 ) ) ) ; 
  2225.     if ( loc > idfirst + 1 ) 
  2226.     {
  2227.       c = 130 ; 
  2228.       idloc = loc ; 
  2229.     } 
  2230.       } 
  2231.       else c = 69 ; 
  2232.     } 
  2233.     break ; 
  2234.   case 34 : 
  2235.     {
  2236.       doublechars = 0 ; 
  2237.       idfirst = loc - 1 ; 
  2238.       do {
  2239.       d = buffer [ loc ] ; 
  2240.     loc = loc + 1 ; 
  2241.     if ( ( d == 34 ) || ( d == 64 ) ) 
  2242.     if ( buffer [ loc ] == d ) 
  2243.     {
  2244.       loc = loc + 1 ; 
  2245.       d = 0 ; 
  2246.       doublechars = doublechars + 1 ; 
  2247.     } 
  2248.     else {
  2249.         
  2250.       if ( d == 64 ) 
  2251.       {
  2252.         putc ('\n',  stdout );
  2253.         Fputs( stdout ,  "! Double @ sign missing" ) ; 
  2254.         error () ; 
  2255.       } 
  2256.     } 
  2257.     else if ( loc > limit ) 
  2258.     {
  2259.       {
  2260.         putc ('\n',  stdout );
  2261.         Fputs( stdout ,  "! String constant didn't end" ) ; 
  2262.         error () ; 
  2263.       } 
  2264.       d = 34 ; 
  2265.     } 
  2266.       } while ( ! ( d == 34 ) ) ; 
  2267.       idloc = loc - 1 ; 
  2268.       c = 130 ; 
  2269.     } 
  2270.     break ; 
  2271.   case 64 : 
  2272.     {
  2273.       c = controlcode ( buffer [ loc ] ) ; 
  2274.       loc = loc + 1 ; 
  2275.       if ( c == 0 ) 
  2276.       goto lab20 ; 
  2277.       else if ( c == 13 ) 
  2278.       scanninghex = true ; 
  2279.       else if ( c == 135 ) 
  2280.       {
  2281.     k = 0 ; 
  2282.     while ( true ) {
  2283.         
  2284.       if ( loc > limit ) 
  2285.       {
  2286.         getline () ; 
  2287.         if ( inputhasended ) 
  2288.         {
  2289.           {
  2290.         putc ('\n',  stdout );
  2291.         Fputs( stdout ,  "! Input ended in section name" ) ; 
  2292.         error () ; 
  2293.           } 
  2294.           goto lab30 ; 
  2295.         } 
  2296.       } 
  2297.       d = buffer [ loc ] ; 
  2298.       if ( d == 64 ) 
  2299.       {
  2300.         d = buffer [ loc + 1 ] ; 
  2301.         if ( d == 62 ) 
  2302.         {
  2303.           loc = loc + 2 ; 
  2304.           goto lab30 ; 
  2305.         } 
  2306.         if ( ( d == 32 ) || ( d == 9 ) || ( d == 42 ) ) 
  2307.         {
  2308.           {
  2309.         putc ('\n',  stdout );
  2310.         Fputs( stdout ,  "! Section name didn't end" ) ; 
  2311.         error () ; 
  2312.           } 
  2313.           goto lab30 ; 
  2314.         } 
  2315.         k = k + 1 ; 
  2316.         modtext [ k ] = 64 ; 
  2317.         loc = loc + 1 ; 
  2318.       } 
  2319.       loc = loc + 1 ; 
  2320.       if ( k < longestname - 1 ) 
  2321.       k = k + 1 ; 
  2322.       if ( ( d == 32 ) || ( d == 9 ) ) 
  2323.       {
  2324.         d = 32 ; 
  2325.         if ( modtext [ k - 1 ] == 32 ) 
  2326.         k = k - 1 ; 
  2327.       } 
  2328.       modtext [ k ] = d ; 
  2329.     } 
  2330.     lab30: if ( k >= longestname - 2 ) 
  2331.     {
  2332.       {
  2333.         putc ('\n',  stdout );
  2334.         Fputs( stdout ,  "! Section name too long: " ) ; 
  2335.       } 
  2336.       {register integer for_end; j = 1 ; for_end = 25 ; if ( j <= 
  2337.       for_end) do 
  2338.         putc ( xchr [ modtext [ j ] ] ,  stdout );
  2339.       while ( j++ < for_end ) ; } 
  2340.       Fputs( stdout ,  "..." ) ; 
  2341.       if ( history == 0 ) 
  2342.       history = 1 ; 
  2343.     } 
  2344.     if ( ( modtext [ k ] == 32 ) && ( k > 0 ) ) 
  2345.     k = k - 1 ; 
  2346.     if ( k > 3 ) 
  2347.     {
  2348.       if ( ( modtext [ k ] == 46 ) && ( modtext [ k - 1 ] == 46 ) && ( 
  2349.       modtext [ k - 2 ] == 46 ) ) 
  2350.       curmodule = prefixlookup ( k - 3 ) ; 
  2351.       else curmodule = modlookup ( k ) ; 
  2352.     } 
  2353.     else curmodule = modlookup ( k ) ; 
  2354.       } 
  2355.       else if ( c == 131 ) 
  2356.       {
  2357.     do {
  2358.         c = skipahead () ; 
  2359.     } while ( ! ( c != 64 ) ) ; 
  2360.     if ( buffer [ loc - 1 ] != 62 ) 
  2361.     {
  2362.       putc ('\n',  stdout );
  2363.       Fputs( stdout ,  "! Improper @ within control text" ) ; 
  2364.       error () ; 
  2365.     } 
  2366.     goto lab20 ; 
  2367.       } 
  2368.     } 
  2369.     break ; 
  2370.   case 46 : 
  2371.     if ( buffer [ loc ] == 46 ) 
  2372.     {
  2373.       if ( loc <= limit ) 
  2374.       {
  2375.     c = 32 ; 
  2376.     loc = loc + 1 ; 
  2377.       } 
  2378.     } 
  2379.     else if ( buffer [ loc ] == 41 ) 
  2380.     {
  2381.       if ( loc <= limit ) 
  2382.       {
  2383.     c = 93 ; 
  2384.     loc = loc + 1 ; 
  2385.       } 
  2386.     } 
  2387.     break ; 
  2388.   case 58 : 
  2389.     if ( buffer [ loc ] == 61 ) 
  2390.     {
  2391.       if ( loc <= limit ) 
  2392.       {
  2393.     c = 24 ; 
  2394.     loc = loc + 1 ; 
  2395.       } 
  2396.     } 
  2397.     break ; 
  2398.   case 61 : 
  2399.     if ( buffer [ loc ] == 61 ) 
  2400.     {
  2401.       if ( loc <= limit ) 
  2402.       {
  2403.     c = 30 ; 
  2404.     loc = loc + 1 ; 
  2405.       } 
  2406.     } 
  2407.     break ; 
  2408.   case 62 : 
  2409.     if ( buffer [ loc ] == 61 ) 
  2410.     {
  2411.       if ( loc <= limit ) 
  2412.       {
  2413.     c = 29 ; 
  2414.     loc = loc + 1 ; 
  2415.       } 
  2416.     } 
  2417.     break ; 
  2418.   case 60 : 
  2419.     if ( buffer [ loc ] == 61 ) 
  2420.     {
  2421.       if ( loc <= limit ) 
  2422.       {
  2423.     c = 28 ; 
  2424.     loc = loc + 1 ; 
  2425.       } 
  2426.     } 
  2427.     else if ( buffer [ loc ] == 62 ) 
  2428.     {
  2429.       if ( loc <= limit ) 
  2430.       {
  2431.     c = 26 ; 
  2432.     loc = loc + 1 ; 
  2433.       } 
  2434.     } 
  2435.     break ; 
  2436.   case 40 : 
  2437.     if ( buffer [ loc ] == 42 ) 
  2438.     {
  2439.       if ( loc <= limit ) 
  2440.       {
  2441.     c = 9 ; 
  2442.     loc = loc + 1 ; 
  2443.       } 
  2444.     } 
  2445.     else if ( buffer [ loc ] == 46 ) 
  2446.     {
  2447.       if ( loc <= limit ) 
  2448.       {
  2449.     c = 91 ; 
  2450.     loc = loc + 1 ; 
  2451.       } 
  2452.     } 
  2453.     break ; 
  2454.   case 42 : 
  2455.     if ( buffer [ loc ] == 41 ) 
  2456.     {
  2457.       if ( loc <= limit ) 
  2458.       {
  2459.     c = 10 ; 
  2460.     loc = loc + 1 ; 
  2461.       } 
  2462.     } 
  2463.     break ; 
  2464.   case 32 : 
  2465.   case 9 : 
  2466.     goto lab20 ; 
  2467.     break ; 
  2468.   case 123 : 
  2469.     {
  2470.       skipcomment () ; 
  2471.       goto lab20 ; 
  2472.     } 
  2473.     break ; 
  2474.   case 125 : 
  2475.     {
  2476.       {
  2477.     putc ('\n',  stdout );
  2478.     Fputs( stdout ,  "! Extra }" ) ; 
  2479.     error () ; 
  2480.       } 
  2481.       goto lab20 ; 
  2482.     } 
  2483.     break ; 
  2484.     default: 
  2485.     if ( c >= 128 ) 
  2486.     goto lab20 ; 
  2487.     else ; 
  2488.     break ; 
  2489.   } 
  2490.   lab31: Result = c ; 
  2491.   return(Result) ; 
  2492. void zscannumeric ( p ) 
  2493. namepointer p ; 
  2494. {/* 21 30 */ integer accumulator  ; 
  2495.   schar nextsign  ; 
  2496.   namepointer q  ; 
  2497.   integer val  ; 
  2498.   accumulator = 0 ; 
  2499.   nextsign = 1 ; 
  2500.   while ( true ) {
  2501.       
  2502.     nextcontrol = getnext () ; 
  2503.     lab21: switch ( nextcontrol ) 
  2504.     {case 48 : 
  2505.     case 49 : 
  2506.     case 50 : 
  2507.     case 51 : 
  2508.     case 52 : 
  2509.     case 53 : 
  2510.     case 54 : 
  2511.     case 55 : 
  2512.     case 56 : 
  2513.     case 57 : 
  2514.       {
  2515.     val = 0 ; 
  2516.     do {
  2517.         val = 10 * val + nextcontrol - 48 ; 
  2518.       nextcontrol = getnext () ; 
  2519.     } while ( ! ( ( nextcontrol > 57 ) || ( nextcontrol < 48 ) ) ) ; 
  2520.     {
  2521.       accumulator = accumulator + nextsign * toint ( val ) ; 
  2522.       nextsign = 1 ; 
  2523.     } 
  2524.     goto lab21 ; 
  2525.       } 
  2526.       break ; 
  2527.     case 12 : 
  2528.       {
  2529.     val = 0 ; 
  2530.     nextcontrol = 48 ; 
  2531.     do {
  2532.         val = 8 * val + nextcontrol - 48 ; 
  2533.       nextcontrol = getnext () ; 
  2534.     } while ( ! ( ( nextcontrol > 55 ) || ( nextcontrol < 48 ) ) ) ; 
  2535.     {
  2536.       accumulator = accumulator + nextsign * toint ( val ) ; 
  2537.       nextsign = 1 ; 
  2538.     } 
  2539.     goto lab21 ; 
  2540.       } 
  2541.       break ; 
  2542.     case 13 : 
  2543.       {
  2544.     val = 0 ; 
  2545.     nextcontrol = 48 ; 
  2546.     do {
  2547.         if ( nextcontrol >= 65 ) 
  2548.       nextcontrol = nextcontrol - 7 ; 
  2549.       val = 16 * val + nextcontrol - 48 ; 
  2550.       nextcontrol = getnext () ; 
  2551.     } while ( ! ( ( nextcontrol > 70 ) || ( nextcontrol < 48 ) || ( ( 
  2552.     nextcontrol > 57 ) && ( nextcontrol < 65 ) ) ) ) ; 
  2553.     {
  2554.       accumulator = accumulator + nextsign * toint ( val ) ; 
  2555.       nextsign = 1 ; 
  2556.     } 
  2557.     goto lab21 ; 
  2558.       } 
  2559.       break ; 
  2560.     case 130 : 
  2561.       {
  2562.     q = idlookup ( 0 ) ; 
  2563.     if ( ilk [ q ] != 1 ) 
  2564.     {
  2565.       nextcontrol = 42 ; 
  2566.       goto lab21 ; 
  2567.     } 
  2568.     {
  2569.       accumulator = accumulator + nextsign * toint ( equiv [ q ] - 32768L 
  2570.       ) ; 
  2571.       nextsign = 1 ; 
  2572.     } 
  2573.       } 
  2574.       break ; 
  2575.     case 43 : 
  2576.       ; 
  2577.       break ; 
  2578.     case 45 : 
  2579.       nextsign = - (integer) nextsign ; 
  2580.       break ; 
  2581.     case 132 : 
  2582.     case 133 : 
  2583.     case 135 : 
  2584.     case 134 : 
  2585.     case 136 : 
  2586.       goto lab30 ; 
  2587.       break ; 
  2588.     case 59 : 
  2589.       {
  2590.     putc ('\n',  stdout );
  2591.     Fputs( stdout ,  "! Omit semicolon in numeric definition" ) ; 
  2592.     error () ; 
  2593.       } 
  2594.       break ; 
  2595.       default: 
  2596.       {
  2597.     {
  2598.       putc ('\n',  stdout );
  2599.       Fputs( stdout ,  "! Improper numeric definition will be flushed" ) ; 
  2600.       error () ; 
  2601.     } 
  2602.     do {
  2603.         nextcontrol = skipahead () ; 
  2604.     } while ( ! ( ( nextcontrol >= 132 ) ) ) ; 
  2605.     if ( nextcontrol == 135 ) 
  2606.     {
  2607.       loc = loc - 2 ; 
  2608.       nextcontrol = getnext () ; 
  2609.     } 
  2610.     accumulator = 0 ; 
  2611.     goto lab30 ; 
  2612.       } 
  2613.       break ; 
  2614.     } 
  2615.   } 
  2616.   lab30: ; 
  2617.   if ( abs ( accumulator ) >= 32768L ) 
  2618.   {
  2619.     {
  2620.       putc ('\n',  stdout );
  2621.       fprintf( stdout , "%s%ld",  "! Value too big: " , (long)accumulator ) ; 
  2622.       error () ; 
  2623.     } 
  2624.     accumulator = 0 ; 
  2625.   } 
  2626.   equiv [ p ] = accumulator + 32768L ; 
  2627. void zscanrepl ( t ) 
  2628. eightbits t ; 
  2629. {/* 22 30 31 21 */ sixteenbits a  ; 
  2630.   ASCIIcode b  ; 
  2631.   eightbits bal  ; 
  2632.   bal = 0 ; 
  2633.   while ( true ) {
  2634.       
  2635.     lab22: a = getnext () ; 
  2636.     switch ( a ) 
  2637.     {case 40 : 
  2638.       bal = bal + 1 ; 
  2639.       break ; 
  2640.     case 41 : 
  2641.       if ( bal == 0 ) 
  2642.       {
  2643.     putc ('\n',  stdout );
  2644.     Fputs( stdout ,  "! Extra )" ) ; 
  2645.     error () ; 
  2646.       } 
  2647.       else bal = bal - 1 ; 
  2648.       break ; 
  2649.     case 39 : 
  2650.       {
  2651.     b = 39 ; 
  2652.     while ( true ) {
  2653.         
  2654.       {
  2655.         if ( tokptr [ z ] == maxtoks ) 
  2656.         {
  2657.           putc ('\n',  stdout );
  2658.           fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded" ) 
  2659.           ; 
  2660.           error () ; 
  2661.           history = 3 ; 
  2662.           uexit ( 1 ) ; 
  2663.         } 
  2664.         tokmem [ z ][ tokptr [ z ] ] = b ; 
  2665.         tokptr [ z ] = tokptr [ z ] + 1 ; 
  2666.       } 
  2667.       if ( b == 64 ) 
  2668.       if ( buffer [ loc ] == 64 ) 
  2669.       loc = loc + 1 ; 
  2670.       else {
  2671.           
  2672.         putc ('\n',  stdout );
  2673.         Fputs( stdout ,  "! You should double @ signs in strings" ) ; 
  2674.         error () ; 
  2675.       } 
  2676.       if ( loc == limit ) 
  2677.       {
  2678.         {
  2679.           putc ('\n',  stdout );
  2680.           Fputs( stdout ,  "! String didn't end" ) ; 
  2681.           error () ; 
  2682.         } 
  2683.         buffer [ loc ] = 39 ; 
  2684.         buffer [ loc + 1 ] = 0 ; 
  2685.       } 
  2686.       b = buffer [ loc ] ; 
  2687.       loc = loc + 1 ; 
  2688.       if ( b == 39 ) 
  2689.       {
  2690.         if ( buffer [ loc ] != 39 ) 
  2691.         goto lab31 ; 
  2692.         else {
  2693.         
  2694.           loc = loc + 1 ; 
  2695.           {
  2696.         if ( tokptr [ z ] == maxtoks ) 
  2697.         {
  2698.           putc ('\n',  stdout );
  2699.           fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" ,                   " capacity exceeded" ) ; 
  2700.           error () ; 
  2701.           history = 3 ; 
  2702.           uexit ( 1 ) ; 
  2703.         } 
  2704.         tokmem [ z ][ tokptr [ z ] ] = 39 ; 
  2705.         tokptr [ z ] = tokptr [ z ] + 1 ; 
  2706.           } 
  2707.         } 
  2708.       } 
  2709.     } 
  2710.     lab31: ; 
  2711.       } 
  2712.       break ; 
  2713.     case 35 : 
  2714.       if ( t == 3 ) 
  2715.       a = 0 ; 
  2716.       break ; 
  2717.     case 130 : 
  2718.       {
  2719.     a = idlookup ( 0 ) ; 
  2720.     {
  2721.       if ( tokptr [ z ] == maxtoks ) 
  2722.       {
  2723.         putc ('\n',  stdout );
  2724.         fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded" ) ; 
  2725.         error () ; 
  2726.         history = 3 ; 
  2727.         uexit ( 1 ) ; 
  2728.       } 
  2729.       tokmem [ z ][ tokptr [ z ] ] = ( a / 256 ) + 128 ; 
  2730.       tokptr [ z ] = tokptr [ z ] + 1 ; 
  2731.     } 
  2732.     a = a % 256 ; 
  2733.       } 
  2734.       break ; 
  2735.     case 135 : 
  2736.       if ( t != 135 ) 
  2737.       goto lab30 ; 
  2738.       else {
  2739.       
  2740.     {
  2741.       if ( tokptr [ z ] == maxtoks ) 
  2742.       {
  2743.         putc ('\n',  stdout );
  2744.         fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded" ) ; 
  2745.         error () ; 
  2746.         history = 3 ; 
  2747.         uexit ( 1 ) ; 
  2748.       } 
  2749.       tokmem [ z ][ tokptr [ z ] ] = ( curmodule / 256 ) + 168 ; 
  2750.       tokptr [ z ] = tokptr [ z ] + 1 ; 
  2751.     } 
  2752.     a = curmodule % 256 ; 
  2753.       } 
  2754.       break ; 
  2755.     case 2 : 
  2756.       {
  2757.     {
  2758.       if ( tokptr [ z ] == maxtoks ) 
  2759.       {
  2760.         putc ('\n',  stdout );
  2761.         fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded" ) ; 
  2762.         error () ; 
  2763.         history = 3 ; 
  2764.         uexit ( 1 ) ; 
  2765.       } 
  2766.       tokmem [ z ][ tokptr [ z ] ] = 2 ; 
  2767.       tokptr [ z ] = tokptr [ z ] + 1 ; 
  2768.     } 
  2769.     buffer [ limit + 1 ] = 64 ; 
  2770.     lab21: if ( buffer [ loc ] == 64 ) 
  2771.     {
  2772.       if ( loc < limit ) 
  2773.       if ( buffer [ loc + 1 ] == 64 ) 
  2774.       {
  2775.         {
  2776.           if ( tokptr [ z ] == maxtoks ) 
  2777.           {
  2778.         putc ('\n',  stdout );
  2779.         fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded"                 ) ; 
  2780.         error () ; 
  2781.         history = 3 ; 
  2782.         uexit ( 1 ) ; 
  2783.           } 
  2784.           tokmem [ z ][ tokptr [ z ] ] = 64 ; 
  2785.           tokptr [ z ] = tokptr [ z ] + 1 ; 
  2786.         } 
  2787.         loc = loc + 2 ; 
  2788.         goto lab21 ; 
  2789.       } 
  2790.     } 
  2791.     else {
  2792.         
  2793.       {
  2794.         if ( tokptr [ z ] == maxtoks ) 
  2795.         {
  2796.           putc ('\n',  stdout );
  2797.           fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded" ) 
  2798.           ; 
  2799.           error () ; 
  2800.           history = 3 ; 
  2801.           uexit ( 1 ) ; 
  2802.         } 
  2803.         tokmem [ z ][ tokptr [ z ] ] = buffer [ loc ] ; 
  2804.         tokptr [ z ] = tokptr [ z ] + 1 ; 
  2805.       } 
  2806.       loc = loc + 1 ; 
  2807.       goto lab21 ; 
  2808.     } 
  2809.     if ( loc >= limit ) 
  2810.     {
  2811.       putc ('\n',  stdout );
  2812.       Fputs( stdout ,  "! Verbatim string didn't end" ) ; 
  2813.       error () ; 
  2814.     } 
  2815.     else if ( buffer [ loc + 1 ] != 62 ) 
  2816.     {
  2817.       putc ('\n',  stdout );
  2818.       Fputs( stdout ,  "! You should double @ signs in verbatim strings" ) 
  2819.       ; 
  2820.       error () ; 
  2821.     } 
  2822.     loc = loc + 2 ; 
  2823.       } 
  2824.       break ; 
  2825.     case 133 : 
  2826.     case 132 : 
  2827.     case 134 : 
  2828.       if ( t != 135 ) 
  2829.       goto lab30 ; 
  2830.       else {
  2831.       
  2832.     {
  2833.       putc ('\n',  stdout );
  2834.       fprintf( stdout , "%s%c%s",  "! @" , xchr [ buffer [ loc - 1 ] ] ,           " is ignored in Pascal text" ) ; 
  2835.       error () ; 
  2836.     } 
  2837.     goto lab22 ; 
  2838.       } 
  2839.       break ; 
  2840.     case 136 : 
  2841.       goto lab30 ; 
  2842.       break ; 
  2843.       default: 
  2844.       ; 
  2845.       break ; 
  2846.     } 
  2847.     {
  2848.       if ( tokptr [ z ] == maxtoks ) 
  2849.       {
  2850.     putc ('\n',  stdout );
  2851.     fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded" ) ; 
  2852.     error () ; 
  2853.     history = 3 ; 
  2854.     uexit ( 1 ) ; 
  2855.       } 
  2856.       tokmem [ z ][ tokptr [ z ] ] = a ; 
  2857.       tokptr [ z ] = tokptr [ z ] + 1 ; 
  2858.     } 
  2859.   } 
  2860.   lab30: nextcontrol = a ; 
  2861.   if ( bal > 0 ) 
  2862.   {
  2863.     if ( bal == 1 ) 
  2864.     {
  2865.       putc ('\n',  stdout );
  2866.       Fputs( stdout ,  "! Missing )" ) ; 
  2867.       error () ; 
  2868.     } 
  2869.     else {
  2870.     
  2871.       putc ('\n',  stdout );
  2872.       fprintf( stdout , "%s%ld%s",  "! Missing " , (long)bal , " )'s" ) ; 
  2873.       error () ; 
  2874.     } 
  2875.     while ( bal > 0 ) {
  2876.     
  2877.       {
  2878.     if ( tokptr [ z ] == maxtoks ) 
  2879.     {
  2880.       putc ('\n',  stdout );
  2881.       fprintf( stdout , "%s%s%s",  "! Sorry, " , "token" , " capacity exceeded" ) ; 
  2882.       error () ; 
  2883.       history = 3 ; 
  2884.       uexit ( 1 ) ; 
  2885.     } 
  2886.     tokmem [ z ][ tokptr [ z ] ] = 41 ; 
  2887.     tokptr [ z ] = tokptr [ z ] + 1 ; 
  2888.       } 
  2889.       bal = bal - 1 ; 
  2890.     } 
  2891.   } 
  2892.   if ( textptr > maxtexts - 4 ) 
  2893.   {
  2894.     putc ('\n',  stdout );
  2895.     fprintf( stdout , "%s%s%s",  "! Sorry, " , "text" , " capacity exceeded" ) ; 
  2896.     error () ; 
  2897.     history = 3 ; 
  2898.     uexit ( 1 ) ; 
  2899.   } 
  2900.   currepltext = textptr ; 
  2901.   tokstart [ textptr + 4 ] = tokptr [ z ] ; 
  2902.   textptr = textptr + 1 ; 
  2903.   if ( z == 3 ) 
  2904.   z = 0 ; 
  2905.   else z = z + 1 ; 
  2906. void zdefinemacro ( t ) 
  2907. eightbits t ; 
  2908. {namepointer p  ; 
  2909.   p = idlookup ( t ) ; 
  2910.   scanrepl ( t ) ; 
  2911.   equiv [ p ] = currepltext ; 
  2912.   textlink [ currepltext ] = 0 ; 
  2913. void scanmodule ( ) 
  2914. {/* 22 30 10 */ namepointer p  ; 
  2915.   modulecount = modulecount + 1 ; 
  2916.   nextcontrol = 0 ; 
  2917.   while ( true ) {
  2918.       
  2919.     lab22: while ( nextcontrol <= 132 ) {
  2920.     
  2921.       nextcontrol = skipahead () ; 
  2922.       if ( nextcontrol == 135 ) 
  2923.       {
  2924.     loc = loc - 2 ; 
  2925.     nextcontrol = getnext () ; 
  2926.       } 
  2927.     } 
  2928.     if ( nextcontrol != 133 ) 
  2929.     goto lab30 ; 
  2930.     nextcontrol = getnext () ; 
  2931.     if ( nextcontrol != 130 ) 
  2932.     {
  2933.       {
  2934.     putc ('\n',  stdout );
  2935.     fprintf( stdout , "%s%s",  "! Definition flushed, must start with " ,         "identifier of length > 1" ) ; 
  2936.     error () ; 
  2937.       } 
  2938.       goto lab22 ; 
  2939.     } 
  2940.     nextcontrol = getnext () ; 
  2941.     if ( nextcontrol == 61 ) 
  2942.     {
  2943.       scannumeric ( idlookup ( 1 ) ) ; 
  2944.       goto lab22 ; 
  2945.     } 
  2946.     else if ( nextcontrol == 30 ) 
  2947.     {
  2948.       definemacro ( 2 ) ; 
  2949.       goto lab22 ; 
  2950.     } 
  2951.     else if ( nextcontrol == 40 ) 
  2952.     {
  2953.       nextcontrol = getnext () ; 
  2954.       if ( nextcontrol == 35 ) 
  2955.       {
  2956.     nextcontrol = getnext () ; 
  2957.     if ( nextcontrol == 41 ) 
  2958.     {
  2959.       nextcontrol = getnext () ; 
  2960.       if ( nextcontrol == 61 ) 
  2961.       {
  2962.         {
  2963.           putc ('\n',  stdout );
  2964.           Fputs( stdout ,  "! Use == for macros" ) ; 
  2965.           error () ; 
  2966.         } 
  2967.         nextcontrol = 30 ; 
  2968.       } 
  2969.       if ( nextcontrol == 30 ) 
  2970.       {
  2971.         definemacro ( 3 ) ; 
  2972.         goto lab22 ; 
  2973.       } 
  2974.     } 
  2975.       } 
  2976.     } 
  2977.     {
  2978.       putc ('\n',  stdout );
  2979.       Fputs( stdout ,  "! Definition flushed since it starts badly" ) ; 
  2980.       error () ; 
  2981.     } 
  2982.   } 
  2983.   lab30: ; 
  2984.   switch ( nextcontrol ) 
  2985.   {case 134 : 
  2986.     p = 0 ; 
  2987.     break ; 
  2988.   case 135 : 
  2989.     {
  2990.       p = curmodule ; 
  2991.       do {
  2992.       nextcontrol = getnext () ; 
  2993.       } while ( ! ( nextcontrol != 43 ) ) ; 
  2994.       if ( ( nextcontrol != 61 ) && ( nextcontrol != 30 ) ) 
  2995.       {
  2996.     {
  2997.       putc ('\n',  stdout );
  2998.       Fputs( stdout ,  "! Pascal text flushed, = sign is missing" ) ; 
  2999.       error () ; 
  3000.     } 
  3001.     do {
  3002.         nextcontrol = skipahead () ; 
  3003.     } while ( ! ( nextcontrol == 136 ) ) ; 
  3004.     goto lab10 ; 
  3005.       } 
  3006.     } 
  3007.     break ; 
  3008.     default: 
  3009.     goto lab10 ; 
  3010.     break ; 
  3011.   } 
  3012.   storetwobytes ( 53248L + modulecount ) ; 
  3013.   scanrepl ( 135 ) ; 
  3014.   if ( p == 0 ) 
  3015.   {
  3016.     textlink [ lastunnamed ] = currepltext ; 
  3017.     lastunnamed = currepltext ; 
  3018.   } 
  3019.   else if ( equiv [ p ] == 0 ) 
  3020.   equiv [ p ] = currepltext ; 
  3021.   else {
  3022.       
  3023.     p = equiv [ p ] ; 
  3024.     while ( textlink [ p ] < maxtexts ) p = textlink [ p ] ; 
  3025.     textlink [ p ] = currepltext ; 
  3026.   } 
  3027.   textlink [ currepltext ] = maxtexts ; 
  3028.   lab10: ; 
  3029. void main_body() {
  3030.     
  3031.   initialize () ; 
  3032.   openinput () ; 
  3033.   line = 0 ; 
  3034.   otherline = 0 ; 
  3035.   changing = true ; 
  3036.   primethechangebuffer () ; 
  3037.   changing = ! changing ; 
  3038.   templine = otherline ; 
  3039.   otherline = line ; 
  3040.   line = templine ; 
  3041.   limit = 0 ; 
  3042.   loc = 1 ; 
  3043.   buffer [ 0 ] = 32 ; 
  3044.   inputhasended = false ; 
  3045.   Fputs( stdout ,  "This is TANGLE, Version 4.3" ) ; 
  3046.   fprintf( stdout , "%s\n",  versionstring ) ; 
  3047.   phaseone = true ; 
  3048.   modulecount = 0 ; 
  3049.   do {
  3050.       nextcontrol = skipahead () ; 
  3051.   } while ( ! ( nextcontrol == 136 ) ) ; 
  3052.   while ( ! inputhasended ) scanmodule () ; 
  3053.   if ( changelimit != 0 ) 
  3054.   {
  3055.     {register integer for_end; ii = 0 ; for_end = changelimit ; if ( ii <= 
  3056.     for_end) do 
  3057.       buffer [ ii ] = changebuffer [ ii ] ; 
  3058.     while ( ii++ < for_end ) ; } 
  3059.     limit = changelimit ; 
  3060.     changing = true ; 
  3061.     line = otherline ; 
  3062.     loc = changelimit ; 
  3063.     {
  3064.       putc ('\n',  stdout );
  3065.       Fputs( stdout ,  "! Change file entry did not match" ) ; 
  3066.       error () ; 
  3067.     } 
  3068.   } 
  3069.   phaseone = false ; 
  3070.   if ( textlink [ 0 ] == 0 ) 
  3071.   {
  3072.     {
  3073.       putc ('\n',  stdout );
  3074.       Fputs( stdout ,  "! No output was specified." ) ; 
  3075.     } 
  3076.     if ( history == 0 ) 
  3077.     history = 1 ; 
  3078.   } 
  3079.   else {
  3080.       
  3081.     {
  3082.       putc ('\n',  stdout );
  3083.       Fputs( stdout ,  "Writing the output file" ) ; 
  3084.     } 
  3085.     flush ( stdout ) ; 
  3086.     stackptr = 1 ; 
  3087.     bracelevel = 0 ; 
  3088.     curstate .namefield = 0 ; 
  3089.     curstate .replfield = textlink [ 0 ] ; 
  3090.     zo = curstate .replfield % 4 ; 
  3091.     curstate .bytefield = tokstart [ curstate .replfield ] ; 
  3092.     curstate .endfield = tokstart [ curstate .replfield + 4 ] ; 
  3093.     curstate .modfield = 0 ; 
  3094.     outstate = 0 ; 
  3095.     outptr = 0 ; 
  3096.     breakptr = 0 ; 
  3097.     semiptr = 0 ; 
  3098.     outbuf [ 0 ] = 0 ; 
  3099.     line = 1 ; 
  3100.     sendtheoutput () ; 
  3101.     breakptr = outptr ; 
  3102.     semiptr = 0 ; 
  3103.     flushbuffer () ; 
  3104.     if ( bracelevel != 0 ) 
  3105.     {
  3106.       putc ('\n',  stdout );
  3107.       fprintf( stdout , "%s%ld",  "! Program ended at brace level " , (long)bracelevel ) ; 
  3108.       error () ; 
  3109.     } 
  3110.     {
  3111.       putc ('\n',  stdout );
  3112.       Fputs( stdout ,  "Done." ) ; 
  3113.     } 
  3114.   } 
  3115.   lab9999: if ( stringptr > 256 ) 
  3116.   {
  3117.     {
  3118.       putc ('\n',  stdout );
  3119.       fprintf( stdout , "%ld%s",  (long)stringptr - 256 ,       " strings written to string pool file." ) ; 
  3120.     } 
  3121.     putc ( '*' ,  pool );
  3122.     {register integer for_end; ii = 1 ; for_end = 9 ; if ( ii <= for_end) do 
  3123.       {
  3124.     outbuf [ ii ] = poolchecksum % 10 ; 
  3125.     poolchecksum = poolchecksum / 10 ; 
  3126.       } 
  3127.     while ( ii++ < for_end ) ; } 
  3128.     {register integer for_end; ii = 9 ; for_end = 1 ; if ( ii >= for_end) do 
  3129.       putc ( xchr [ 48 + outbuf [ ii ] ] ,  pool );
  3130.     while ( ii-- > for_end ) ; } 
  3131.     putc ('\n',  pool );
  3132.   } 
  3133.   switch ( history ) 
  3134.   {case 0 : 
  3135.     {
  3136.       putc ('\n',  stdout );
  3137.       Fputs( stdout ,  "(No errors were found.)" ) ; 
  3138.     } 
  3139.     break ; 
  3140.   case 1 : 
  3141.     {
  3142.       putc ('\n',  stdout );
  3143.       Fputs( stdout ,  "(Did you see the warning message above?)" ) ; 
  3144.     } 
  3145.     break ; 
  3146.   case 2 : 
  3147.     {
  3148.       putc ('\n',  stdout );
  3149.       Fputs( stdout ,  "(Pardon me, but I think I spotted something wrong.)" ) 
  3150.       ; 
  3151.     } 
  3152.     break ; 
  3153.   case 3 : 
  3154.     {
  3155.       putc ('\n',  stdout );
  3156.       Fputs( stdout ,  "(That was a fatal error, my friend.)" ) ; 
  3157.     } 
  3158.     break ; 
  3159.   } 
  3160.   putc ('\n',  stdout );
  3161.   if ( ( history != 0 ) && ( history != 1 ) ) 
  3162.   uexit ( 1 ) ; 
  3163.   else uexit ( 0 ) ; 
  3164.