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 / weave.p < prev    next >
Encoding:
Text File  |  1996-09-28  |  93.9 KB  |  1,607 lines

  1. {2:}{4:}{:4}program WEAVE;const{8:}maxbytes=45000;maxnames=5000;
  2. maxmodules=2000;hashsize=353;bufsize=100;longestname=400;
  3. longbufsize=500;linelength=80;maxrefs=30000;maxtoks=30000;maxtexts=2000;
  4. maxscraps=1000;stacksize=400;{:8}type{11:}ASCIIcode=0..255;{:11}{12:}
  5. textfile=packed file of ASCIIcode;{:12}{36:}eightbits=0..255;
  6. sixteenbits=0..65535;{:36}{38:}namepointer=0..maxnames;{:38}{47:}
  7. xrefnumber=0..maxrefs;{:47}{52:}textpointer=0..maxtexts;{:52}{201:}
  8. mode=0..1;outputstate=record endfield:sixteenbits;tokfield:sixteenbits;
  9. modefield:mode;end;{:201}var{9:}history:0..3;{:9}{13:}
  10. xord:array[ASCIIcode]of ASCIIcode;xchr:array[ASCIIcode]of ASCIIcode;
  11. {:13}{23:}webfile:textfile;changefile:textfile;{:23}{25:}
  12. texfile:textfile;{:25}{27:}buffer:array[0..longbufsize]of ASCIIcode;
  13. {:27}{29:}phaseone:boolean;phasethree:boolean;{:29}{37:}
  14. bytemem:packed array[0..1,0..maxbytes]of ASCIIcode;
  15. bytestart:array[0..maxnames]of sixteenbits;
  16. link:array[0..maxnames]of sixteenbits;
  17. ilk:array[0..maxnames]of sixteenbits;
  18. xref:array[0..maxnames]of sixteenbits;{:37}{39:}nameptr:namepointer;
  19. byteptr:array[0..1]of 0..maxbytes;{:39}{45:}modulecount:0..maxmodules;
  20. changedmodule:packed array[0..maxmodules]of boolean;
  21. changeexists:boolean;{:45}{48:}
  22. xmem:array[xrefnumber]of packed record numfield:sixteenbits;
  23. xlinkfield:sixteenbits;end;xrefptr:xrefnumber;
  24. xrefswitch,modxrefswitch:0..10240;{:48}{53:}
  25. tokmem:packed array[0..maxtoks]of sixteenbits;
  26. tokstart:array[textpointer]of sixteenbits;textptr:textpointer;
  27. tokptr:0..maxtoks;{maxtokptr,maxtxtptr:0..maxtoks;}{:53}{55:}
  28. idfirst:0..longbufsize;idloc:0..longbufsize;
  29. hash:array[0..hashsize]of sixteenbits;{:55}{63:}curname:namepointer;
  30. {:63}{65:}modtext:array[0..longestname]of ASCIIcode;{:65}{71:}
  31. ii:integer;line:integer;otherline:integer;templine:integer;
  32. limit:0..longbufsize;loc:0..longbufsize;inputhasended:boolean;
  33. changing:boolean;changepending:boolean;{:71}{73:}
  34. changebuffer:array[0..bufsize]of ASCIIcode;changelimit:0..bufsize;{:73}
  35. {93:}curmodule:namepointer;scanninghex:boolean;{:93}{108:}
  36. nextcontrol:eightbits;{:108}{114:}lhs,rhs:namepointer;{:114}{118:}
  37. curxref:xrefnumber;{:118}{121:}outbuf:array[0..linelength]of ASCIIcode;
  38. outptr:0..linelength;outline:integer;{:121}{129:}dig:array[0..4]of 0..9;
  39. {:129}{144:}cat:array[0..maxscraps]of eightbits;
  40. trans:array[0..maxscraps]of 0..10239;pp:0..maxscraps;
  41. scrapbase:0..maxscraps;scrapptr:0..maxscraps;loptr:0..maxscraps;
  42. hiptr:0..maxscraps;{maxscrptr:0..maxscraps;}{:144}{177:}{tracing:0..2;}
  43. {:177}{202:}curstate:outputstate;
  44. stack:array[1..stacksize]of outputstate;stackptr:0..stacksize;
  45. {maxstackptr:0..stacksize;}{:202}{219:}saveline:integer;
  46. saveplace:sixteenbits;{:219}{229:}thismodule:namepointer;{:229}{234:}
  47. nextxref,thisxref,firstxref,midxref:xrefnumber;{:234}{240:}
  48. kmodule:0..maxmodules;{:240}{242:}bucket:array[ASCIIcode]of namepointer;
  49. nextname:namepointer;c:ASCIIcode;h:0..hashsize;
  50. blink:array[0..maxnames]of sixteenbits;{:242}{244:}curdepth:eightbits;
  51. curbyte:0..maxbytes;curbank:0..1;curval:sixteenbits;
  52. {maxsortptr:0..maxscraps;}{:244}{246:}collate:array[0..229]of ASCIIcode;
  53. {:246}{258:}{troubleshooting:boolean;ddt:integer;dd:integer;
  54. debugcycle:integer;debugskipped:integer;}{:258}{264:}
  55. webfilename,changefilename,texfilename:array[1..100]of char;
  56. noxref:boolean;{:264}
  57. {30:}{procedure debughelp;forward;}{:30}{31:}procedure error;
  58. var k,l:0..longbufsize;begin{32:}
  59. begin if changing then write(stdout,'. (change file ')else write(stdout,
  60. '. (');writeln(stdout,'l.',line:1,')');
  61. if loc>=limit then l:=limit else l:=loc;
  62. for k:=1 to l do if buffer[k-1]=9 then write(stdout,' ')else write(
  63. stdout,xchr[buffer[k-1]]);writeln(stdout);
  64. for k:=1 to l do write(stdout,' ');
  65. for k:=l+1 to limit do write(stdout,xchr[buffer[k-1]]);
  66. if buffer[limit]=124 then write(stdout,xchr[124]);write(stdout,' ');
  67. end{:32};flush(stdout);history:=2;{debugskipped:=debugcycle;debughelp;}
  68. end;{:31}{33:}procedure jumpout;begin{[262:]begin writeln(stdout);
  69. write(stdout,'Memory usage statistics: ',nameptr:1,' names, ',xrefptr:1,
  70. ' cross references, ',byteptr[0]:1);end;
  71. for curbank:=1 to 1 do write(stdout,'+',byteptr[curbank]:1);
  72. write(stdout,' bytes;');begin writeln(stdout);
  73. write(stdout,'parsing required ',maxscrptr:1,' scraps, ',maxtxtptr:1,
  74. ' texts, ',maxtokptr:1,' tokens, ',maxstackptr:1,' levels;');end;
  75. begin writeln(stdout);
  76. write(stdout,'sorting required ',maxsortptr:1,' levels.');end[:262];}
  77. {263:}case history of 0:begin writeln(stdout);
  78. write(stdout,'(No errors were found.)');end;1:begin writeln(stdout);
  79. write(stdout,'(Did you see the warning message above?)');end;
  80. 2:begin writeln(stdout);
  81. write(stdout,'(Pardon me, but I think I spotted something wrong.)');end;
  82. 3:begin writeln(stdout);
  83. write(stdout,'(That was a fatal error, my friend.)');end;end{:263};
  84. writeln(stdout);if(history<>0)and(history<>1)then uexit(1)else uexit(0);
  85. end;{:33}{265:}procedure scanargs;var slashpos,dotpos,i,a:integer;
  86. fname:array[1..95]of char;foundweb,foundchange:boolean;
  87. begin foundweb:=false;foundchange:=false;noxref:=false;
  88. for a:=1 to argc-1 do begin argv(a,fname);
  89. if fname[1]<>'-'then begin if not foundweb then{266:}begin dotpos:=-1;
  90. slashpos:=-1;i:=1;
  91. while(fname[i]<>' ')and(i<=95)do begin webfilename[i]:=fname[i];
  92. if fname[i]='.'then dotpos:=i;if fname[i]='/'then slashpos:=i;i:=i+1;
  93. end;webfilename[i]:=' ';
  94. if(dotpos=-1)or(dotpos<slashpos)then begin dotpos:=i;
  95. webfilename[dotpos]:='.';webfilename[dotpos+1]:='w';
  96. webfilename[dotpos+2]:='e';webfilename[dotpos+3]:='b';
  97. webfilename[dotpos+4]:=' ';end;
  98. for i:=1 to dotpos do texfilename[i]:=webfilename[i];
  99. texfilename[dotpos+1]:='t';texfilename[dotpos+2]:='e';
  100. texfilename[dotpos+3]:='x';texfilename[dotpos+4]:=' ';foundweb:=true;
  101. end{:266}else if not foundchange then{267:}begin dotpos:=-1;
  102. slashpos:=-1;i:=1;
  103. while(fname[i]<>' ')and(i<=95)do begin changefilename[i]:=fname[i];
  104. if fname[i]='.'then dotpos:=i;if fname[i]='/'then slashpos:=i;i:=i+1;
  105. end;changefilename[i]:=' ';
  106. if(dotpos=-1)or(dotpos<slashpos)then begin dotpos:=i;
  107. changefilename[dotpos]:='.';changefilename[dotpos+1]:='c';
  108. changefilename[dotpos+2]:='h';changefilename[dotpos+3]:=' ';end;
  109. foundchange:=true;end{:267}else{270:}begin writeln(stdout,
  110. 'Usage: weave webfile[.web] [changefile[.ch]] [-x].');uexit(1);end{:270}
  111. ;end else{269:}begin i:=2;
  112. while(fname[i]<>' ')and(i<=95)do begin if fname[i]='x'then noxref:=true;
  113. i:=i+1;end;end{:269};end;if not foundweb then{270:}begin writeln(stdout,
  114. 'Usage: weave webfile[.web] [changefile[.ch]] [-x].');uexit(1);end{:270}
  115. ;if not foundchange then{268:}begin changefilename[1]:='/';
  116. changefilename[2]:='d';changefilename[3]:='e';changefilename[4]:='v';
  117. changefilename[5]:='/';changefilename[6]:='n';changefilename[7]:='u';
  118. changefilename[8]:='l';changefilename[9]:='l';changefilename[10]:=' ';
  119. end{:268};end;{:265}procedure initialize;var{16:}i:0..255;{:16}{40:}
  120. wi:0..1;{:40}{56:}h:0..hashsize;{:56}{247:}c:ASCIIcode;{:247}begin{10:}
  121. history:=0;{:10}{14:}xchr[32]:=' ';xchr[33]:='!';xchr[34]:='"';
  122. xchr[35]:='#';xchr[36]:='$';xchr[37]:='%';xchr[38]:='&';xchr[39]:='''';
  123. xchr[40]:='(';xchr[41]:=')';xchr[42]:='*';xchr[43]:='+';xchr[44]:=',';
  124. xchr[45]:='-';xchr[46]:='.';xchr[47]:='/';xchr[48]:='0';xchr[49]:='1';
  125. xchr[50]:='2';xchr[51]:='3';xchr[52]:='4';xchr[53]:='5';xchr[54]:='6';
  126. xchr[55]:='7';xchr[56]:='8';xchr[57]:='9';xchr[58]:=':';xchr[59]:=';';
  127. xchr[60]:='<';xchr[61]:='=';xchr[62]:='>';xchr[63]:='?';xchr[64]:='@';
  128. xchr[65]:='A';xchr[66]:='B';xchr[67]:='C';xchr[68]:='D';xchr[69]:='E';
  129. xchr[70]:='F';xchr[71]:='G';xchr[72]:='H';xchr[73]:='I';xchr[74]:='J';
  130. xchr[75]:='K';xchr[76]:='L';xchr[77]:='M';xchr[78]:='N';xchr[79]:='O';
  131. xchr[80]:='P';xchr[81]:='Q';xchr[82]:='R';xchr[83]:='S';xchr[84]:='T';
  132. xchr[85]:='U';xchr[86]:='V';xchr[87]:='W';xchr[88]:='X';xchr[89]:='Y';
  133. xchr[90]:='Z';xchr[91]:='[';xchr[92]:='\';xchr[93]:=']';xchr[94]:='^';
  134. xchr[95]:='_';xchr[96]:='`';xchr[97]:='a';xchr[98]:='b';xchr[99]:='c';
  135. xchr[100]:='d';xchr[101]:='e';xchr[102]:='f';xchr[103]:='g';
  136. xchr[104]:='h';xchr[105]:='i';xchr[106]:='j';xchr[107]:='k';
  137. xchr[108]:='l';xchr[109]:='m';xchr[110]:='n';xchr[111]:='o';
  138. xchr[112]:='p';xchr[113]:='q';xchr[114]:='r';xchr[115]:='s';
  139. xchr[116]:='t';xchr[117]:='u';xchr[118]:='v';xchr[119]:='w';
  140. xchr[120]:='x';xchr[121]:='y';xchr[122]:='z';xchr[123]:='{';
  141. xchr[124]:='|';xchr[125]:='}';xchr[126]:='~';xchr[0]:=' ';
  142. xchr[127]:=' ';{:14}{17:}for i:=1 to 31 do xchr[i]:=chr(i);
  143. for i:=128 to 255 do xchr[i]:=chr(i);{:17}{18:}
  144. for i:=0 to 255 do xord[chr(i)]:=32;for i:=1 to 255 do xord[xchr[i]]:=i;
  145. xord[' ']:=32;{:18}{21:}{:21}{26:}scanargs;rewrite(texfile,texfilename);
  146. {:26}{41:}for wi:=0 to 1 do begin bytestart[wi]:=0;byteptr[wi]:=0;end;
  147. bytestart[2]:=0;nameptr:=1;{:41}{43:}ilk[0]:=0;{:43}{49:}xrefptr:=0;
  148. xrefswitch:=0;modxrefswitch:=0;xmem[0].numfield:=0;xref[0]:=0;{:49}{54:}
  149. tokptr:=1;textptr:=1;tokstart[0]:=1;tokstart[1]:=1;{maxtokptr:=1;
  150. maxtxtptr:=1;}{:54}{57:}for h:=0 to hashsize-1 do hash[h]:=0;{:57}{94:}
  151. scanninghex:=false;{:94}{102:}modtext[0]:=32;{:102}{124:}outptr:=1;
  152. outline:=1;outbuf[1]:=99;write(texfile,'\input webma');{:124}{126:}
  153. outbuf[0]:=92;{:126}{145:}scrapbase:=1;scrapptr:=0;{maxscrptr:=0;}{:145}
  154. {203:}{maxstackptr:=0;}{:203}{245:}{maxsortptr:=0;}{:245}{248:}
  155. collate[0]:=0;collate[1]:=32;for c:=1 to 31 do collate[c+1]:=c;
  156. for c:=33 to 47 do collate[c]:=c;for c:=58 to 64 do collate[c-10]:=c;
  157. for c:=91 to 94 do collate[c-36]:=c;collate[59]:=96;
  158. for c:=123 to 255 do collate[c-63]:=c;collate[193]:=95;
  159. for c:=97 to 122 do collate[c+97]:=c;
  160. for c:=48 to 57 do collate[c+172]:=c;{:248}{259:}{troubleshooting:=true;
  161. debugcycle:=1;debugskipped:=0;tracing:=0;troubleshooting:=false;
  162. debugcycle:=99999;}{:259}end;{:2}{24:}procedure openinput;
  163. begin reset(webfile,webfilename);reset(changefile,changefilename);end;
  164. {:24}{28:}function inputln(var f:textfile):boolean;
  165. var finallimit:0..bufsize;begin limit:=0;finallimit:=0;
  166. if eof(f)then inputln:=false else begin while not eoln(f)do begin buffer
  167. [limit]:=xord[getc(f)];limit:=limit+1;
  168. if buffer[limit-1]<>32 then finallimit:=limit;
  169. if limit=bufsize then begin while not eoln(f)do vgetc(f);limit:=limit-1;
  170. if finallimit>limit then finallimit:=limit;begin writeln(stdout);
  171. write(stdout,'! Input line too long');end;loc:=0;error;end;end;
  172. readln(f);limit:=finallimit;inputln:=true;end;end;{:28}{44:}
  173. procedure printid(p:namepointer);var k:0..maxbytes;w:0..1;
  174. begin if p>=nameptr then write(stdout,'IMPOSSIBLE')else begin w:=p mod 2
  175. ;
  176. for k:=bytestart[p]to bytestart[p+2]-1 do write(stdout,xchr[bytemem[w,k]
  177. ]);end;end;{:44}{50:}procedure newxref(p:namepointer);label 10;
  178. var q:xrefnumber;m,n:sixteenbits;begin if noxref then goto 10;
  179. if((ilk[p]>3)or(bytestart[p]+1=bytestart[p+2]))and(xrefswitch=0)then
  180. goto 10;m:=modulecount+xrefswitch;xrefswitch:=0;q:=xref[p];
  181. if q>0 then begin n:=xmem[q].numfield;
  182. if(n=m)or(n=m+10240)then goto 10 else if m=n+10240 then begin xmem[q].
  183. numfield:=m;goto 10;end;end;
  184. if xrefptr=maxrefs then begin writeln(stdout);
  185. write(stdout,'! Sorry, ','cross reference',' capacity exceeded');error;
  186. history:=3;jumpout;end else begin xrefptr:=xrefptr+1;
  187. xmem[xrefptr].numfield:=m;end;xmem[xrefptr].xlinkfield:=q;
  188. xref[p]:=xrefptr;10:end;{:50}{51:}procedure newmodxref(p:namepointer);
  189. var q,r:xrefnumber;begin q:=xref[p];r:=0;
  190. if q>0 then begin if modxrefswitch=0 then while xmem[q].numfield>=10240
  191. do begin r:=q;q:=xmem[q].xlinkfield;
  192. end else if xmem[q].numfield>=10240 then begin r:=q;
  193. q:=xmem[q].xlinkfield;end;end;
  194. if xrefptr=maxrefs then begin writeln(stdout);
  195. write(stdout,'! Sorry, ','cross reference',' capacity exceeded');error;
  196. history:=3;jumpout;end else begin xrefptr:=xrefptr+1;
  197. xmem[xrefptr].numfield:=modulecount+modxrefswitch;end;
  198. xmem[xrefptr].xlinkfield:=q;modxrefswitch:=0;
  199. if r=0 then xref[p]:=xrefptr else xmem[r].xlinkfield:=xrefptr;end;{:51}
  200. {58:}function idlookup(t:eightbits):namepointer;label 31;
  201. var i:0..longbufsize;h:0..hashsize;k:0..maxbytes;w:0..1;
  202. l:0..longbufsize;p:namepointer;begin l:=idloc-idfirst;{59:}
  203. h:=buffer[idfirst];i:=idfirst+1;
  204. while i<idloc do begin h:=(h+h+buffer[i])mod hashsize;i:=i+1;end{:59};
  205. {60:}p:=hash[h];
  206. while p<>0 do begin if(bytestart[p+2]-bytestart[p]=l)and((ilk[p]=t)or((t
  207. =0)and(ilk[p]>3)))then{61:}begin i:=idfirst;k:=bytestart[p];w:=p mod 2;
  208. while(i<idloc)and(buffer[i]=bytemem[w,k])do begin i:=i+1;k:=k+1;end;
  209. if i=idloc then goto 31;end{:61};p:=link[p];end;p:=nameptr;
  210. link[p]:=hash[h];hash[h]:=p;31:{:60};if p=nameptr then{62:}
  211. begin w:=nameptr mod 2;
  212. if byteptr[w]+l>maxbytes then begin writeln(stdout);
  213. write(stdout,'! Sorry, ','byte memory',' capacity exceeded');error;
  214. history:=3;jumpout;end;if nameptr+2>maxnames then begin writeln(stdout);
  215. write(stdout,'! Sorry, ','name',' capacity exceeded');error;history:=3;
  216. jumpout;end;i:=idfirst;k:=byteptr[w];
  217. while i<idloc do begin bytemem[w,k]:=buffer[i];k:=k+1;i:=i+1;end;
  218. byteptr[w]:=k;bytestart[nameptr+2]:=k;nameptr:=nameptr+1;ilk[p]:=t;
  219. xref[p]:=0;end{:62};idlookup:=p;end;{:58}{66:}
  220. function modlookup(l:sixteenbits):namepointer;label 31;var c:0..4;
  221. j:0..longestname;k:0..maxbytes;w:0..1;p:namepointer;q:namepointer;
  222. begin c:=2;q:=0;p:=ilk[0];while p<>0 do begin{68:}begin k:=bytestart[p];
  223. w:=p mod 2;c:=1;j:=1;
  224. while(k<bytestart[p+2])and(j<=l)and(modtext[j]=bytemem[w,k])do begin k:=
  225. k+1;j:=j+1;end;
  226. if k=bytestart[p+2]then if j>l then c:=1 else c:=4 else if j>l then c:=3
  227. else if modtext[j]<bytemem[w,k]then c:=0 else c:=2;end{:68};q:=p;
  228. if c=0 then p:=link[q]else if c=2 then p:=ilk[q]else goto 31;end;{67:}
  229. w:=nameptr mod 2;k:=byteptr[w];
  230. if k+l>maxbytes then begin writeln(stdout);
  231. write(stdout,'! Sorry, ','byte memory',' capacity exceeded');error;
  232. history:=3;jumpout;end;if nameptr>maxnames-2 then begin writeln(stdout);
  233. write(stdout,'! Sorry, ','name',' capacity exceeded');error;history:=3;
  234. jumpout;end;p:=nameptr;if c=0 then link[q]:=p else ilk[q]:=p;link[p]:=0;
  235. ilk[p]:=0;xref[p]:=0;c:=1;for j:=1 to l do bytemem[w,k+j-1]:=modtext[j];
  236. byteptr[w]:=k+l;bytestart[nameptr+2]:=k+l;nameptr:=nameptr+1;{:67};
  237. 31:if c<>1 then begin begin if not phaseone then begin writeln(stdout);
  238. write(stdout,'! Incompatible section names');error;end;end;p:=0;end;
  239. modlookup:=p;end;{:66}{69:}
  240. function prefixlookup(l:sixteenbits):namepointer;var c:0..4;
  241. count:0..maxnames;j:0..longestname;k:0..maxbytes;w:0..1;p:namepointer;
  242. q:namepointer;r:namepointer;begin q:=0;p:=ilk[0];count:=0;r:=0;
  243. while p<>0 do begin{68:}begin k:=bytestart[p];w:=p mod 2;c:=1;j:=1;
  244. while(k<bytestart[p+2])and(j<=l)and(modtext[j]=bytemem[w,k])do begin k:=
  245. k+1;j:=j+1;end;
  246. if k=bytestart[p+2]then if j>l then c:=1 else c:=4 else if j>l then c:=3
  247. else if modtext[j]<bytemem[w,k]then c:=0 else c:=2;end{:68};
  248. if c=0 then p:=link[p]else if c=2 then p:=ilk[p]else begin r:=p;
  249. count:=count+1;q:=ilk[p];p:=link[p];end;if p=0 then begin p:=q;q:=0;end;
  250. end;if count<>1 then if count=0 then begin if not phaseone then begin
  251. writeln(stdout);write(stdout,'! Name does not match');error;end;
  252. end else begin if not phaseone then begin writeln(stdout);
  253. write(stdout,'! Ambiguous prefix');error;end;end;prefixlookup:=r;end;
  254. {:69}{74:}function linesdontmatch:boolean;label 10;var k:0..bufsize;
  255. begin linesdontmatch:=true;if changelimit<>limit then goto 10;
  256. if limit>0 then for k:=0 to limit-1 do if changebuffer[k]<>buffer[k]then
  257. goto 10;linesdontmatch:=false;10:end;{:74}{75:}
  258. procedure primethechangebuffer;label 22,30,10;var k:0..bufsize;
  259. begin changelimit:=0;{76:}while true do begin line:=line+1;
  260. if not inputln(changefile)then goto 10;if limit<2 then goto 22;
  261. if buffer[0]<>64 then goto 22;
  262. if(buffer[1]>=88)and(buffer[1]<=90)then buffer[1]:=buffer[1]+32;
  263. if buffer[1]=120 then goto 30;
  264. if(buffer[1]=121)or(buffer[1]=122)then begin loc:=2;
  265. begin if not phaseone then begin writeln(stdout);
  266. write(stdout,'! Where is the matching @x?');error;end;end;end;22:end;
  267. 30:{:76};{77:}repeat line:=line+1;
  268. if not inputln(changefile)then begin begin if not phaseone then begin
  269. writeln(stdout);write(stdout,'! Change file ended after @x');error;end;
  270. end;goto 10;end;until limit>0;{:77};{78:}begin changelimit:=limit;
  271. if limit>0 then for k:=0 to limit-1 do changebuffer[k]:=buffer[k];
  272. end{:78};10:end;{:75}{79:}procedure checkchange;label 10;var n:integer;
  273. k:0..bufsize;begin if linesdontmatch then goto 10;changepending:=false;
  274. if not changedmodule[modulecount]then begin loc:=0;buffer[limit]:=33;
  275. while(buffer[loc]=32)or(buffer[loc]=9)do loc:=loc+1;buffer[limit]:=32;
  276. if buffer[loc]=64 then if(buffer[loc+1]=42)or(buffer[loc+1]=32)or(buffer
  277. [loc+1]=9)then changepending:=true;
  278. if not changepending then changedmodule[modulecount]:=true;end;n:=0;
  279. while true do begin changing:=not changing;templine:=otherline;
  280. otherline:=line;line:=templine;line:=line+1;
  281. if not inputln(changefile)then begin begin if not phaseone then begin
  282. writeln(stdout);write(stdout,'! Change file ended before @y');error;end;
  283. end;changelimit:=0;changing:=not changing;templine:=otherline;
  284. otherline:=line;line:=templine;goto 10;end;{80:}
  285. if limit>1 then if buffer[0]=64 then begin if(buffer[1]>=88)and(buffer[1
  286. ]<=90)then buffer[1]:=buffer[1]+32;
  287. if(buffer[1]=120)or(buffer[1]=122)then begin loc:=2;
  288. begin if not phaseone then begin writeln(stdout);
  289. write(stdout,'! Where is the matching @y?');error;end;end;
  290. end else if buffer[1]=121 then begin if n>0 then begin loc:=2;
  291. begin if not phaseone then begin writeln(stdout);
  292. write(stdout,'! Hmm... ',n:1,' of the preceding lines failed to match');
  293. error;end;end;end;goto 10;end;end{:80};{78:}begin changelimit:=limit;
  294. if limit>0 then for k:=0 to limit-1 do changebuffer[k]:=buffer[k];
  295. end{:78};changing:=not changing;templine:=otherline;otherline:=line;
  296. line:=templine;line:=line+1;
  297. if not inputln(webfile)then begin begin if not phaseone then begin
  298. writeln(stdout);write(stdout,'! WEB file ended during a change');error;
  299. end;end;inputhasended:=true;goto 10;end;if linesdontmatch then n:=n+1;
  300. end;10:end;{:79}{81:}procedure resetinput;begin openinput;line:=0;
  301. otherline:=0;changing:=true;primethechangebuffer;changing:=not changing;
  302. templine:=otherline;otherline:=line;line:=templine;limit:=0;loc:=1;
  303. buffer[0]:=32;inputhasended:=false;end;{:81}{82:}procedure getline;
  304. label 20;begin 20:if changing then{84:}begin line:=line+1;
  305. if not inputln(changefile)then begin begin if not phaseone then begin
  306. writeln(stdout);write(stdout,'! Change file ended without @z');error;
  307. end;end;buffer[0]:=64;buffer[1]:=122;limit:=2;end;
  308. if limit>0 then begin if changepending then begin loc:=0;
  309. buffer[limit]:=33;while(buffer[loc]=32)or(buffer[loc]=9)do loc:=loc+1;
  310. buffer[limit]:=32;
  311. if buffer[loc]=64 then if(buffer[loc+1]=42)or(buffer[loc+1]=32)or(buffer
  312. [loc+1]=9)then changepending:=false;
  313. if changepending then begin changedmodule[modulecount]:=true;
  314. changepending:=false;end;end;buffer[limit]:=32;
  315. if buffer[0]=64 then begin if(buffer[1]>=88)and(buffer[1]<=90)then
  316. buffer[1]:=buffer[1]+32;
  317. if(buffer[1]=120)or(buffer[1]=121)then begin loc:=2;
  318. begin if not phaseone then begin writeln(stdout);
  319. write(stdout,'! Where is the matching @z?');error;end;end;
  320. end else if buffer[1]=122 then begin primethechangebuffer;
  321. changing:=not changing;templine:=otherline;otherline:=line;
  322. line:=templine;end;end;end;end{:84};if not changing then begin{83:}
  323. begin line:=line+1;
  324. if not inputln(webfile)then inputhasended:=true else if limit=
  325. changelimit then if buffer[0]=changebuffer[0]then if changelimit>0 then
  326. checkchange;end{:83};if changing then goto 20;end;loc:=0;
  327. buffer[limit]:=32;end;{:82}{87:}
  328. function controlcode(c:ASCIIcode):eightbits;
  329. begin case c of 64:controlcode:=64;39:controlcode:=12;
  330. 34:controlcode:=13;36:controlcode:=135;32,9,42:controlcode:=147;
  331. 61:controlcode:=2;92:controlcode:=3;68,100:controlcode:=144;
  332. 70,102:controlcode:=143;123:controlcode:=9;125:controlcode:=10;
  333. 80,112:controlcode:=145;38:controlcode:=136;60:controlcode:=146;
  334. 62:begin begin if not phaseone then begin writeln(stdout);
  335. write(stdout,'! Extra @>');error;end;end;controlcode:=0;end;
  336. 84,116:controlcode:=134;33:controlcode:=126;63:controlcode:=125;
  337. 94:controlcode:=131;58:controlcode:=132;46:controlcode:=133;
  338. 44:controlcode:=137;124:controlcode:=138;47:controlcode:=139;
  339. 35:controlcode:=140;43:controlcode:=141;59:controlcode:=142;{88:}
  340. {48,49,50:begin tracing:=c-48;controlcode:=0;end;}{:88}
  341. others:begin begin if not phaseone then begin writeln(stdout);
  342. write(stdout,'! Unknown control code');error;end;end;controlcode:=0;
  343. end end;end;{:87}{89:}procedure skiplimbo;label 10;var c:ASCIIcode;
  344. begin while true do if loc>limit then begin getline;
  345. if inputhasended then goto 10;end else begin buffer[limit+1]:=64;
  346. while buffer[loc]<>64 do loc:=loc+1;if loc<=limit then begin loc:=loc+2;
  347. c:=buffer[loc-1];if(c=32)or(c=9)or(c=42)then goto 10;end;end;10:end;
  348. {:89}{90:}function skipTeX:eightbits;label 30;var c:eightbits;
  349. begin while true do begin if loc>limit then begin getline;
  350. if inputhasended then begin c:=147;goto 30;end;end;buffer[limit+1]:=64;
  351. repeat c:=buffer[loc];loc:=loc+1;if c=124 then goto 30;until c=64;
  352. if loc<=limit then begin c:=controlcode(buffer[loc]);loc:=loc+1;goto 30;
  353. end;end;30:skipTeX:=c;end;{:90}{91:}
  354. function skipcomment(bal:eightbits):eightbits;label 30;var c:ASCIIcode;
  355. begin while true do begin if loc>limit then begin getline;
  356. if inputhasended then begin bal:=0;goto 30;end;end;c:=buffer[loc];
  357. loc:=loc+1;if c=124 then goto 30;{92:}if c=64 then begin c:=buffer[loc];
  358. if(c<>32)and(c<>9)and(c<>42)then loc:=loc+1 else begin loc:=loc-1;
  359. bal:=0;goto 30;
  360. end end else if(c=92)and(buffer[loc]<>64)then loc:=loc+1 else if c=123
  361. then bal:=bal+1 else if c=125 then begin bal:=bal-1;
  362. if bal=0 then goto 30;end{:92};end;30:skipcomment:=bal;end;{:91}{95:}
  363. function getnext:eightbits;label 20,30,31;var c:eightbits;d:eightbits;
  364. j,k:0..longestname;begin 20:if loc>limit then begin getline;
  365. if inputhasended then begin c:=147;goto 31;end;end;c:=buffer[loc];
  366. loc:=loc+1;if scanninghex then{96:}
  367. if((c>=48)and(c<=57))or((c>=65)and(c<=70))then goto 31 else scanninghex
  368. :=false{:96};
  369. case c of 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85
  370. ,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111
  371. ,112,113,114,115,116,117,118,119,120,121,122:{98:}
  372. begin if((c=69)or(c=101))and(loc>1)then if(buffer[loc-2]<=57)and(buffer[
  373. loc-2]>=48)then c:=128;if c<>128 then begin loc:=loc-1;idfirst:=loc;
  374. repeat loc:=loc+1;d:=buffer[loc];
  375. until((d<48)or((d>57)and(d<65))or((d>90)and(d<97))or(d>122))and(d<>95);
  376. c:=130;idloc:=loc;end;end{:98};39,34:{99:}begin idfirst:=loc-1;
  377. repeat d:=buffer[loc];loc:=loc+1;
  378. if loc>limit then begin begin if not phaseone then begin writeln(stdout)
  379. ;write(stdout,'! String constant didn''t end');error;end;end;loc:=limit;
  380. d:=c;end;until d=c;idloc:=loc;c:=129;end{:99};64:{100:}
  381. begin c:=controlcode(buffer[loc]);loc:=loc+1;
  382. if c=126 then begin xrefswitch:=10240;goto 20;
  383. end else if c=125 then begin xrefswitch:=0;goto 20;
  384. end else if(c<=134)and(c>=131)then{106:}begin idfirst:=loc;
  385. buffer[limit+1]:=64;while buffer[loc]<>64 do loc:=loc+1;idloc:=loc;
  386. if loc>limit then begin begin if not phaseone then begin writeln(stdout)
  387. ;write(stdout,'! Control text didn''t end');error;end;end;loc:=limit;
  388. end else begin loc:=loc+2;
  389. if buffer[loc-1]<>62 then begin if not phaseone then begin writeln(
  390. stdout);write(stdout,'! Control codes are forbidden in control text');
  391. error;end;end;end;end{:106}
  392. else if c=13 then scanninghex:=true else if c=146 then{101:}begin{103:}
  393. k:=0;while true do begin if loc>limit then begin getline;
  394. if inputhasended then begin begin if not phaseone then begin writeln(
  395. stdout);write(stdout,'! Input ended in section name');error;end;end;
  396. loc:=1;goto 30;end;end;d:=buffer[loc];{104:}
  397. if d=64 then begin d:=buffer[loc+1];if d=62 then begin loc:=loc+2;
  398. goto 30;end;
  399. if(d=32)or(d=9)or(d=42)then begin begin if not phaseone then begin
  400. writeln(stdout);write(stdout,'! Section name didn''t end');error;end;
  401. end;goto 30;end;k:=k+1;modtext[k]:=64;loc:=loc+1;end{:104};loc:=loc+1;
  402. if k<longestname-1 then k:=k+1;if(d=32)or(d=9)then begin d:=32;
  403. if modtext[k-1]=32 then k:=k-1;end;modtext[k]:=d;end;30:{105:}
  404. if k>=longestname-2 then begin begin writeln(stdout);
  405. write(stdout,'! Section name too long: ');end;
  406. for j:=1 to 25 do write(stdout,xchr[modtext[j]]);write(stdout,'...');
  407. if history=0 then history:=1;end{:105};
  408. if(modtext[k]=32)and(k>0)then k:=k-1{:103};
  409. if k>3 then begin if(modtext[k]=46)and(modtext[k-1]=46)and(modtext[k-2]=
  410. 46)then curmodule:=prefixlookup(k-3)else curmodule:=modlookup(k);
  411. end else curmodule:=modlookup(k);xrefswitch:=0;end{:101}
  412. else if c=2 then{107:}begin idfirst:=loc;loc:=loc+1;buffer[limit+1]:=64;
  413. buffer[limit+2]:=62;
  414. while(buffer[loc]<>64)or(buffer[loc+1]<>62)do loc:=loc+1;
  415. if loc>=limit then begin if not phaseone then begin writeln(stdout);
  416. write(stdout,'! Verbatim string didn''t end');error;end;end;idloc:=loc;
  417. loc:=loc+2;end{:107};end{:100};{97:}
  418. 46:if buffer[loc]=46 then begin if loc<=limit then begin c:=32;
  419. loc:=loc+1;end;
  420. end else if buffer[loc]=41 then begin if loc<=limit then begin c:=93;
  421. loc:=loc+1;end;end;
  422. 58:if buffer[loc]=61 then begin if loc<=limit then begin c:=24;
  423. loc:=loc+1;end;end;
  424. 61:if buffer[loc]=61 then begin if loc<=limit then begin c:=30;
  425. loc:=loc+1;end;end;
  426. 62:if buffer[loc]=61 then begin if loc<=limit then begin c:=29;
  427. loc:=loc+1;end;end;
  428. 60:if buffer[loc]=61 then begin if loc<=limit then begin c:=28;
  429. loc:=loc+1;end;
  430. end else if buffer[loc]=62 then begin if loc<=limit then begin c:=26;
  431. loc:=loc+1;end;end;
  432. 40:if buffer[loc]=42 then begin if loc<=limit then begin c:=9;
  433. loc:=loc+1;end;
  434. end else if buffer[loc]=46 then begin if loc<=limit then begin c:=91;
  435. loc:=loc+1;end;end;
  436. 42:if buffer[loc]=41 then begin if loc<=limit then begin c:=10;
  437. loc:=loc+1;end;end;{:97}32,9:goto 20;
  438. 125:begin begin if not phaseone then begin writeln(stdout);
  439. write(stdout,'! Extra }');error;end;end;goto 20;end;
  440. others:if c>=128 then goto 20 else end;
  441. 31:{if troubleshooting then debughelp;}getnext:=c;end;{:95}{111:}
  442. procedure Pascalxref;label 10;var p:namepointer;
  443. begin while nextcontrol<143 do begin if(nextcontrol>=130)and(nextcontrol
  444. <=133)then begin p:=idlookup(nextcontrol-130);newxref(p);
  445. if(ilk[p]=17)or(ilk[p]=22)then xrefswitch:=10240;end;
  446. nextcontrol:=getnext;if(nextcontrol=124)or(nextcontrol=123)then goto 10;
  447. end;10:end;{:111}{112:}procedure outerxref;var bal:eightbits;
  448. begin while nextcontrol<143 do if nextcontrol<>123 then Pascalxref else
  449. begin bal:=skipcomment(1);nextcontrol:=124;
  450. while bal>0 do begin Pascalxref;
  451. if nextcontrol=124 then bal:=skipcomment(bal)else bal:=0;end;end;end;
  452. {:112}{119:}procedure modcheck(p:namepointer);
  453. begin if p>0 then begin modcheck(link[p]);curxref:=xref[p];
  454. if xmem[curxref].numfield<10240 then begin begin writeln(stdout);
  455. write(stdout,'! Never defined: <');end;printid(p);write(stdout,'>');
  456. if history=0 then history:=1;end;
  457. while xmem[curxref].numfield>=10240 do curxref:=xmem[curxref].xlinkfield
  458. ;if curxref=0 then begin begin writeln(stdout);
  459. write(stdout,'! Never used: <');end;printid(p);write(stdout,'>');
  460. if history=0 then history:=1;end;modcheck(ilk[p]);end;end;{:119}{122:}
  461. procedure flushbuffer(b:eightbits;percent,carryover:boolean);
  462. label 30,31;var j,k:0..linelength;begin j:=b;
  463. if not percent then while true do begin if j=0 then goto 30;
  464. if outbuf[j]<>32 then goto 30;j:=j-1;end;
  465. 30:for k:=1 to j do write(texfile,xchr[outbuf[k]]);
  466. if percent then write(texfile,xchr[37]);writeln(texfile);
  467. outline:=outline+1;
  468. if carryover then for k:=1 to j do if outbuf[k]=37 then if(k=1)or(outbuf
  469. [k-1]<>92)then begin outbuf[b]:=37;b:=b-1;goto 31;end;
  470. 31:if(b<outptr)then for k:=b+1 to outptr do outbuf[k-b]:=outbuf[k];
  471. outptr:=outptr-b;end;{:122}{123:}procedure finishline;label 10;
  472. var k:0..bufsize;
  473. begin if outptr>0 then flushbuffer(outptr,false,false)else begin for k:=
  474. 0 to limit do if(buffer[k]<>32)and(buffer[k]<>9)then goto 10;
  475. flushbuffer(0,false,false);end;10:end;{:123}{127:}procedure breakout;
  476. label 10;var k:0..linelength;d:ASCIIcode;begin k:=outptr;
  477. while true do begin if k=0 then{128:}begin begin writeln(stdout);
  478. write(stdout,'! Line had to be broken (output l.',outline:1);end;
  479. writeln(stdout,'):');
  480. for k:=1 to outptr-1 do write(stdout,xchr[outbuf[k]]);writeln(stdout);
  481. if history=0 then history:=1;flushbuffer(outptr-1,true,true);goto 10;
  482. end{:128};d:=outbuf[k];if d=32 then begin flushbuffer(k,false,true);
  483. goto 10;end;
  484. if(d=92)and(outbuf[k-1]<>92)then begin flushbuffer(k-1,true,true);
  485. goto 10;end;k:=k-1;end;10:end;{:127}{130:}procedure outmod(m:integer);
  486. var k:0..5;a:integer;begin k:=0;a:=m;repeat dig[k]:=a mod 10;
  487. a:=a div 10;k:=k+1;until a=0;repeat k:=k-1;
  488. begin if outptr=linelength then breakout;outptr:=outptr+1;
  489. outbuf[outptr]:=dig[k]+48;end;until k=0;
  490. if changedmodule[m]then begin if outptr=linelength then breakout;
  491. outptr:=outptr+1;outbuf[outptr]:=92;if outptr=linelength then breakout;
  492. outptr:=outptr+1;outbuf[outptr]:=42;end;end;{:130}{131:}
  493. procedure outname(p:namepointer);var k:0..maxbytes;w:0..1;
  494. begin begin if outptr=linelength then breakout;outptr:=outptr+1;
  495. outbuf[outptr]:=123;end;w:=p mod 2;
  496. for k:=bytestart[p]to bytestart[p+2]-1 do begin if bytemem[w,k]=95 then
  497. begin if outptr=linelength then breakout;outptr:=outptr+1;
  498. outbuf[outptr]:=92;end;begin if outptr=linelength then breakout;
  499. outptr:=outptr+1;outbuf[outptr]:=bytemem[w,k];end;end;
  500. begin if outptr=linelength then breakout;outptr:=outptr+1;
  501. outbuf[outptr]:=125;end;end;{:131}{132:}procedure copylimbo;label 10;
  502. var c:ASCIIcode;begin while true do if loc>limit then begin finishline;
  503. getline;if inputhasended then goto 10;
  504. end else begin buffer[limit+1]:=64;{133:}
  505. while buffer[loc]<>64 do begin begin if outptr=linelength then breakout;
  506. outptr:=outptr+1;outbuf[outptr]:=buffer[loc];end;loc:=loc+1;end;
  507. if loc<=limit then begin loc:=loc+2;c:=buffer[loc-1];
  508. if(c=32)or(c=9)or(c=42)then goto 10;
  509. if(c<>122)and(c<>90)then begin begin if outptr=linelength then breakout;
  510. outptr:=outptr+1;outbuf[outptr]:=64;end;
  511. if c<>64 then begin if not phaseone then begin writeln(stdout);
  512. write(stdout,'! Double @ required outside of sections');error;end;end;
  513. end;end{:133};end;10:end;{:132}{134:}function copyTeX:eightbits;
  514. label 30;var c:eightbits;
  515. begin while true do begin if loc>limit then begin finishline;getline;
  516. if inputhasended then begin c:=147;goto 30;end;end;buffer[limit+1]:=64;
  517. {135:}repeat c:=buffer[loc];loc:=loc+1;if c=124 then goto 30;
  518. if c<>64 then begin begin if outptr=linelength then breakout;
  519. outptr:=outptr+1;outbuf[outptr]:=c;end;
  520. if(outptr=1)and((c=32)or(c=9))then outptr:=outptr-1;end;until c=64;
  521. if loc<=limit then begin c:=controlcode(buffer[loc]);loc:=loc+1;goto 30;
  522. end{:135};end;30:copyTeX:=c;end;{:134}{136:}
  523. function copycomment(bal:eightbits):eightbits;label 30;var c:ASCIIcode;
  524. begin while true do begin if loc>limit then begin getline;
  525. if inputhasended then begin begin if not phaseone then begin writeln(
  526. stdout);write(stdout,'! Input ended in mid-comment');error;end;end;
  527. loc:=1;{138:}begin if tokptr+2>maxtoks then begin writeln(stdout);
  528. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  529. jumpout;end;tokmem[tokptr]:=32;tokptr:=tokptr+1;end;
  530. repeat begin if tokptr+2>maxtoks then begin writeln(stdout);
  531. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  532. jumpout;end;tokmem[tokptr]:=125;tokptr:=tokptr+1;end;bal:=bal-1;
  533. until bal=0;goto 30;{:138};end;end;c:=buffer[loc];loc:=loc+1;
  534. if c=124 then goto 30;
  535. begin if tokptr+2>maxtoks then begin writeln(stdout);
  536. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  537. jumpout;end;tokmem[tokptr]:=c;tokptr:=tokptr+1;end;{137:}
  538. if c=64 then begin loc:=loc+1;
  539. if buffer[loc-1]<>64 then begin begin if not phaseone then begin writeln
  540. (stdout);write(stdout,'! Illegal use of @ in comment');error;end;end;
  541. loc:=loc-2;tokptr:=tokptr-1;{138:}
  542. begin if tokptr+2>maxtoks then begin writeln(stdout);
  543. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  544. jumpout;end;tokmem[tokptr]:=32;tokptr:=tokptr+1;end;
  545. repeat begin if tokptr+2>maxtoks then begin writeln(stdout);
  546. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  547. jumpout;end;tokmem[tokptr]:=125;tokptr:=tokptr+1;end;bal:=bal-1;
  548. until bal=0;goto 30;{:138};end;
  549. end else if(c=92)and(buffer[loc]<>64)then begin begin if tokptr+2>
  550. maxtoks then begin writeln(stdout);
  551. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  552. jumpout;end;tokmem[tokptr]:=buffer[loc];tokptr:=tokptr+1;end;loc:=loc+1;
  553. end else if c=123 then bal:=bal+1 else if c=125 then begin bal:=bal-1;
  554. if bal=0 then goto 30;end{:137};end;30:copycomment:=bal;end;{:136}{140:}
  555. {procedure printcat(c:eightbits);begin case c of 1:write(stdout,'simp');
  556. 2:write(stdout,'math');3:write(stdout,'intro');4:write(stdout,'open');
  557. 5:write(stdout,'beginning');6:write(stdout,'close');
  558. 7:write(stdout,'alpha');8:write(stdout,'omega');9:write(stdout,'semi');
  559. 10:write(stdout,'terminator');11:write(stdout,'stmt');
  560. 12:write(stdout,'cond');13:write(stdout,'clause');
  561. 14:write(stdout,'colon');15:write(stdout,'exp');16:write(stdout,'proc');
  562. 17:write(stdout,'casehead');18:write(stdout,'recordhead');
  563. 19:write(stdout,'varhead');20:write(stdout,'elsie');
  564. 21:write(stdout,'casey');22:write(stdout,'module');
  565. others:write(stdout,'UNKNOWN')end;end;}{:140}{146:}
  566. {procedure printtext(p:textpointer);var j:0..maxtoks;r:0..10239;
  567. begin if p>=textptr then write(stdout,'BAD')else for j:=tokstart[p]to
  568. tokstart[p+1]-1 do begin r:=tokmem[j]mod 10240;
  569. case tokmem[j]div 10240 of 1:begin write(stdout,'\\',xchr[123]);
  570. printid(r);write(stdout,xchr[125]);end;
  571. 2:begin write(stdout,'\&',xchr[123]);printid(r);write(stdout,xchr[125]);
  572. end;3:begin write(stdout,'<');printid(r);write(stdout,'>');end;
  573. 4:write(stdout,'[[',r:1,']]');5:write(stdout,'|[[',r:1,']]|');
  574. others:[147:]case r of 131:write(stdout,'\mathbin',xchr[123]);
  575. 132:write(stdout,'\mathrel',xchr[123]);
  576. 133:write(stdout,'\mathop',xchr[123]);134:write(stdout,'[ccancel]');
  577. 135:write(stdout,'[cancel]');136:write(stdout,'[indent]');
  578. 137:write(stdout,'[outdent]');139:write(stdout,'[backup]');
  579. 138:write(stdout,'[opt]');140:write(stdout,'[break]');
  580. 141:write(stdout,'[force]');142:write(stdout,'[fforce]');
  581. 143:write(stdout,'[quit]');others:write(stdout,xchr[r])end[:147]end;end;
  582. end;}{:146}{172:}procedure red(j:sixteenbits;k:eightbits;c:eightbits;
  583. d:integer);var i:0..maxscraps;begin cat[j]:=c;trans[j]:=textptr;
  584. textptr:=textptr+1;tokstart[textptr]:=tokptr;
  585. if k>1 then begin for i:=j+k to loptr do begin cat[i-k+1]:=cat[i];
  586. trans[i-k+1]:=trans[i];end;loptr:=loptr-k+1;end;{173:}
  587. if pp+d>=scrapbase then pp:=pp+d else pp:=scrapbase{:173};end;{:172}
  588. {174:}procedure sq(j:sixteenbits;k:eightbits;c:eightbits;d:integer);
  589. var i:0..maxscraps;begin if k=1 then begin cat[j]:=c;{173:}
  590. if pp+d>=scrapbase then pp:=pp+d else pp:=scrapbase{:173};
  591. end else begin for i:=j to j+k-1 do begin tokmem[tokptr]:=40960+trans[i]
  592. ;tokptr:=tokptr+1;end;red(j,k,c,d);end;end;{:174}{178:}
  593. {procedure prod(n:eightbits);var k:1..maxscraps;
  594. begin if tracing=2 then begin begin writeln(stdout);
  595. write(stdout,n:1,':');end;
  596. for k:=scrapbase to loptr do begin if k=pp then write(stdout,'*')else
  597. write(stdout,' ');printcat(cat[k]);end;
  598. if hiptr<=scrapptr then write(stdout,'...');end;end;}{:178}{179:}{150:}
  599. procedure fivecases;label 31;begin case cat[pp]of 5:{152:}
  600. if cat[pp+1]=6 then begin if(cat[pp+2]=10)or(cat[pp+2]=11)then begin sq(
  601. pp,3,11,-2);{prod(5)};goto 31;end;
  602. end else if cat[pp+1]=11 then begin tokmem[tokptr]:=40960+trans[pp];
  603. tokptr:=tokptr+1;tokmem[tokptr]:=140;tokptr:=tokptr+1;
  604. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;red(pp,2,5,-1);
  605. {prod(6)};goto 31;end{:152};3:{159:}
  606. if cat[pp+1]=11 then begin tokmem[tokptr]:=40960+trans[pp];
  607. tokptr:=tokptr+1;tokmem[tokptr]:=32;tokptr:=tokptr+1;
  608. tokmem[tokptr]:=138;tokptr:=tokptr+1;tokmem[tokptr]:=55;
  609. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  610. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;red(pp,2,11,-2);
  611. {prod(17)};goto 31;end{:159};2:{160:}
  612. if cat[pp+1]=6 then begin tokmem[tokptr]:=36;tokptr:=tokptr+1;
  613. tokmem[tokptr]:=40960+trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=36;
  614. tokptr:=tokptr+1;red(pp,1,11,-2);{prod(18)};goto 31;
  615. end else if cat[pp+1]=14 then begin tokmem[tokptr]:=141;
  616. tokptr:=tokptr+1;tokmem[tokptr]:=139;tokptr:=tokptr+1;
  617. tokmem[tokptr]:=36;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp];
  618. tokptr:=tokptr+1;tokmem[tokptr]:=36;tokptr:=tokptr+1;
  619. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;red(pp,2,3,-3);
  620. {prod(19)};goto 31;end else if cat[pp+1]=2 then begin sq(pp,2,2,-1);
  621. {prod(20)};goto 31;end else if cat[pp+1]=1 then begin sq(pp,2,2,-1);
  622. {prod(21)};goto 31;
  623. end else if cat[pp+1]=11 then begin tokmem[tokptr]:=36;tokptr:=tokptr+1;
  624. tokmem[tokptr]:=40960+trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=36;
  625. tokptr:=tokptr+1;tokmem[tokptr]:=136;tokptr:=tokptr+1;
  626. tokmem[tokptr]:=140;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];
  627. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  628. tokmem[tokptr]:=137;tokptr:=tokptr+1;tokmem[tokptr]:=141;
  629. tokptr:=tokptr+1;red(pp,2,11,-2);{prod(22)};goto 31;
  630. end else if cat[pp+1]=10 then begin tokmem[tokptr]:=36;tokptr:=tokptr+1;
  631. tokmem[tokptr]:=40960+trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=36;
  632. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  633. red(pp,2,11,-2);{prod(23)};goto 31;end{:160};4:{162:}
  634. if(cat[pp+1]=17)and(cat[pp+2]=6)then begin tokmem[tokptr]:=40960+trans[
  635. pp];tokptr:=tokptr+1;tokmem[tokptr]:=36;tokptr:=tokptr+1;
  636. tokmem[tokptr]:=135;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];
  637. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  638. tokmem[tokptr]:=137;tokptr:=tokptr+1;tokmem[tokptr]:=36;
  639. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;
  640. red(pp,3,2,-1);{prod(26)};goto 31;
  641. end else if cat[pp+1]=6 then begin tokmem[tokptr]:=40960+trans[pp];
  642. tokptr:=tokptr+1;tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=44;
  643. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  644. red(pp,2,2,-1);{prod(27)};goto 31;end else if cat[pp+1]=2 then{163:}
  645. begin if(cat[pp+2]=17)and(cat[pp+3]=6)then begin tokmem[tokptr]:=40960+
  646. trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];
  647. tokptr:=tokptr+1;tokmem[tokptr]:=36;tokptr:=tokptr+1;
  648. tokmem[tokptr]:=135;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+2];
  649. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  650. tokmem[tokptr]:=137;tokptr:=tokptr+1;tokmem[tokptr]:=36;
  651. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+3];tokptr:=tokptr+1;
  652. red(pp,4,2,-1);{prod(28)};goto 31;
  653. end else if cat[pp+2]=6 then begin sq(pp,3,2,-1);{prod(29)};goto 31;
  654. end else if cat[pp+2]=14 then begin sq(pp+1,2,2,0);{prod(30)};goto 31;
  655. end else if cat[pp+2]=16 then begin if cat[pp+3]=3 then begin tokmem[
  656. tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;tokmem[tokptr]:=133;
  657. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  658. tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;tokmem[tokptr]:=125;
  659. tokptr:=tokptr+1;red(pp+1,3,2,0);{prod(31)};goto 31;end;
  660. end else if cat[pp+2]=9 then begin tokmem[tokptr]:=40960+trans[pp+1];
  661. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;
  662. tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=44;tokptr:=tokptr+1;
  663. tokmem[tokptr]:=138;tokptr:=tokptr+1;tokmem[tokptr]:=53;
  664. tokptr:=tokptr+1;red(pp+1,2,2,0);{prod(32)};goto 31;
  665. end else if cat[pp+2]=19 then begin if cat[pp+3]=3 then begin tokmem[
  666. tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;tokmem[tokptr]:=133;
  667. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  668. tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;tokmem[tokptr]:=125;
  669. tokptr:=tokptr+1;red(pp+1,3,2,0);{prod(31)};goto 31;end;end;end{:163}
  670. else if cat[pp+1]=16 then begin if cat[pp+2]=3 then begin tokmem[tokptr]
  671. :=133;tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  672. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;tokmem[tokptr]:=125;
  673. tokptr:=tokptr+1;red(pp+1,2,2,0);{prod(34)};goto 31;end;
  674. end else if cat[pp+1]=1 then begin sq(pp+1,1,2,0);{prod(35)};goto 31;
  675. end else if(cat[pp+1]=11)and(cat[pp+2]=6)then begin tokmem[tokptr]:=
  676. 40960+trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=36;tokptr:=tokptr+1;
  677. tokmem[tokptr]:=135;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];
  678. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  679. tokmem[tokptr]:=36;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+2];
  680. tokptr:=tokptr+1;red(pp,3,2,-1);{prod(36)};goto 31;
  681. end else if cat[pp+1]=19 then begin if cat[pp+2]=3 then begin tokmem[
  682. tokptr]:=133;tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  683. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;tokmem[tokptr]:=125;
  684. tokptr:=tokptr+1;red(pp+1,2,2,0);{prod(37)};goto 31;end;end{:162};
  685. 1:{167:}if cat[pp+1]=6 then begin sq(pp,1,11,-2);{prod(43)};goto 31;
  686. end else if cat[pp+1]=14 then begin tokmem[tokptr]:=141;
  687. tokptr:=tokptr+1;tokmem[tokptr]:=139;tokptr:=tokptr+1;
  688. tokmem[tokptr]:=40960+trans[pp];tokptr:=tokptr+1;
  689. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;red(pp,2,3,-3);
  690. {prod(44)};goto 31;end else if cat[pp+1]=2 then begin sq(pp,2,2,-1);
  691. {prod(45)};goto 31;end else if cat[pp+1]=22 then begin sq(pp,2,22,0);
  692. {prod(46)};goto 31;end else if cat[pp+1]=1 then begin sq(pp,2,1,-2);
  693. {prod(47)};goto 31;end else if cat[pp+1]=10 then begin sq(pp,2,11,-2);
  694. {prod(48)};goto 31;end{:167};others:end;pp:=pp+1;31:end;
  695. procedure alphacases;label 31;begin{151:}
  696. if cat[pp+1]=2 then begin if cat[pp+2]=14 then begin sq(pp+1,2,2,0);
  697. {prod(1)};goto 31;
  698. end else if cat[pp+2]=8 then begin tokmem[tokptr]:=40960+trans[pp];
  699. tokptr:=tokptr+1;tokmem[tokptr]:=32;tokptr:=tokptr+1;tokmem[tokptr]:=36;
  700. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  701. tokmem[tokptr]:=36;tokptr:=tokptr+1;tokmem[tokptr]:=32;tokptr:=tokptr+1;
  702. tokmem[tokptr]:=136;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+2];
  703. tokptr:=tokptr+1;red(pp,3,13,-2);{prod(2)};goto 31;end;
  704. end else if cat[pp+1]=8 then begin tokmem[tokptr]:=40960+trans[pp];
  705. tokptr:=tokptr+1;tokmem[tokptr]:=32;tokptr:=tokptr+1;
  706. tokmem[tokptr]:=136;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];
  707. tokptr:=tokptr+1;red(pp,2,13,-2);{prod(3)};goto 31;
  708. end else if cat[pp+1]=1 then begin sq(pp+1,1,2,0);{prod(4)};goto 31;
  709. end{:151};pp:=pp+1;31:end;{:150}function translate:textpointer;
  710. label 30,31;var i:1..maxscraps;j:0..maxscraps;k:0..longbufsize;
  711. begin pp:=scrapbase;loptr:=pp-1;hiptr:=pp;{182:}
  712. {if tracing=2 then begin begin writeln(stdout);
  713. write(stdout,'Tracing after l.',line:1,':');end;
  714. if history=0 then history:=1;if loc>50 then begin write(stdout,'...');
  715. for k:=loc-50 to loc do write(stdout,xchr[buffer[k-1]]);
  716. end else for k:=1 to loc do write(stdout,xchr[buffer[k-1]]);end}{:182};
  717. {175:}while true do begin{176:}
  718. if loptr<pp+3 then begin repeat if hiptr<=scrapptr then begin loptr:=
  719. loptr+1;cat[loptr]:=cat[hiptr];trans[loptr]:=trans[hiptr];
  720. hiptr:=hiptr+1;end;until(hiptr>scrapptr)or(loptr=pp+3);
  721. for i:=loptr+1 to pp+3 do cat[i]:=0;end{:176};
  722. if(tokptr+8>maxtoks)or(textptr+4>maxtexts)then begin{if tokptr>maxtokptr
  723. then maxtokptr:=tokptr;if textptr>maxtxtptr then maxtxtptr:=textptr;}
  724. begin writeln(stdout);
  725. write(stdout,'! Sorry, ','token/text',' capacity exceeded');error;
  726. history:=3;jumpout;end;end;if pp>loptr then goto 30;{149:}
  727. if cat[pp]<=7 then if cat[pp]<7 then fivecases else alphacases else
  728. begin case cat[pp]of 17:{153:}
  729. if cat[pp+1]=21 then begin if cat[pp+2]=13 then begin tokmem[tokptr]:=
  730. 40960+trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=137;tokptr:=tokptr+1;
  731. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  732. tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;red(pp,3,17,0);
  733. {prod(7)};goto 31;end;
  734. end else if cat[pp+1]=6 then begin if cat[pp+2]=10 then begin tokmem[
  735. tokptr]:=40960+trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=135;
  736. tokptr:=tokptr+1;tokmem[tokptr]:=137;tokptr:=tokptr+1;
  737. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  738. tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;red(pp,3,11,-2);
  739. {prod(8)};goto 31;end;
  740. end else if cat[pp+1]=11 then begin tokmem[tokptr]:=40960+trans[pp];
  741. tokptr:=tokptr+1;tokmem[tokptr]:=141;tokptr:=tokptr+1;
  742. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;red(pp,2,17,0);
  743. {prod(9)};goto 31;end{:153};21:{154:}
  744. if cat[pp+1]=13 then begin sq(pp,2,17,0);{prod(10)};goto 31;end{:154};
  745. 13:{155:}if cat[pp+1]=11 then begin tokmem[tokptr]:=40960+trans[pp];
  746. tokptr:=tokptr+1;tokmem[tokptr]:=140;tokptr:=tokptr+1;
  747. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;tokmem[tokptr]:=135;
  748. tokptr:=tokptr+1;tokmem[tokptr]:=137;tokptr:=tokptr+1;
  749. tokmem[tokptr]:=141;tokptr:=tokptr+1;red(pp,2,11,-2);{prod(11)};goto 31;
  750. end{:155};12:{156:}
  751. if(cat[pp+1]=13)and(cat[pp+2]=11)then if cat[pp+3]=20 then begin tokmem[
  752. tokptr]:=40960+trans[pp];tokptr:=tokptr+1;
  753. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;tokmem[tokptr]:=140;
  754. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;
  755. tokmem[tokptr]:=40960+trans[pp+3];tokptr:=tokptr+1;tokmem[tokptr]:=32;
  756. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;red(pp,4,13,-2);
  757. {prod(12)};goto 31;end else begin tokmem[tokptr]:=40960+trans[pp];
  758. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  759. tokmem[tokptr]:=140;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+2];
  760. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  761. tokmem[tokptr]:=137;tokptr:=tokptr+1;tokmem[tokptr]:=141;
  762. tokptr:=tokptr+1;red(pp,3,11,-2);{prod(13)};goto 31;end{:156};20:{157:}
  763. begin sq(pp,1,3,-3);{prod(14)};goto 31;end{:157};15:{158:}
  764. if cat[pp+1]=2 then begin if cat[pp+2]=1 then if cat[pp+3]<>1 then begin
  765. tokmem[tokptr]:=40960+trans[pp];tokptr:=tokptr+1;
  766. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  767. tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;tokmem[tokptr]:=125;
  768. tokptr:=tokptr+1;red(pp,3,2,-1);{prod(15)};goto 31;end;
  769. end else if cat[pp+1]=1 then if cat[pp+2]<>1 then begin tokmem[tokptr]:=
  770. 40960+trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];
  771. tokptr:=tokptr+1;tokmem[tokptr]:=125;tokptr:=tokptr+1;red(pp,2,2,-1);
  772. {prod(16)};goto 31;end{:158};22:{161:}
  773. if(cat[pp+1]=10)or(cat[pp+1]=9)then begin tokmem[tokptr]:=40960+trans[pp
  774. ];tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  775. tokmem[tokptr]:=141;tokptr:=tokptr+1;red(pp,2,11,-2);{prod(24)};goto 31;
  776. end else begin sq(pp,1,1,-2);{prod(25)};goto 31;end{:161};16:{164:}
  777. if cat[pp+1]=5 then begin if(cat[pp+2]=6)and(cat[pp+3]=10)then begin
  778. tokmem[tokptr]:=40960+trans[pp];tokptr:=tokptr+1;tokmem[tokptr]:=135;
  779. tokptr:=tokptr+1;tokmem[tokptr]:=137;tokptr:=tokptr+1;
  780. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  781. tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;
  782. tokmem[tokptr]:=40960+trans[pp+3];tokptr:=tokptr+1;red(pp,4,11,-2);
  783. {prod(38)};goto 31;end;
  784. end else if cat[pp+1]=11 then begin tokmem[tokptr]:=40960+trans[pp];
  785. tokptr:=tokptr+1;tokmem[tokptr]:=140;tokptr:=tokptr+1;
  786. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;red(pp,2,16,-2);
  787. {prod(39)};goto 31;end{:164};18:{165:}
  788. if(cat[pp+1]=3)and(cat[pp+2]=21)then begin tokmem[tokptr]:=40960+trans[
  789. pp];tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;
  790. tokmem[tokptr]:=32;tokptr:=tokptr+1;tokmem[tokptr]:=135;
  791. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;
  792. red(pp,3,21,-2);{prod(40)};goto 31;end else begin tokmem[tokptr]:=136;
  793. tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp];tokptr:=tokptr+1;
  794. tokmem[tokptr]:=135;tokptr:=tokptr+1;red(pp,1,17,0);{prod(41)};goto 31;
  795. end{:165};9:{166:}begin sq(pp,1,10,-3);{prod(42)};goto 31;end{:166};
  796. 11:{168:}if cat[pp+1]=11 then begin tokmem[tokptr]:=40960+trans[pp];
  797. tokptr:=tokptr+1;tokmem[tokptr]:=140;tokptr:=tokptr+1;
  798. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;red(pp,2,11,-2);
  799. {prod(49)};goto 31;end{:168};10:{169:}begin sq(pp,1,11,-2);{prod(50)};
  800. goto 31;end{:169};19:{170:}if cat[pp+1]=5 then begin sq(pp,1,11,-2);
  801. {prod(51)};goto 31;
  802. end else if cat[pp+1]=2 then begin if cat[pp+2]=14 then begin tokmem[
  803. tokptr]:=36;tokptr:=tokptr+1;tokmem[tokptr]:=40960+trans[pp+1];
  804. tokptr:=tokptr+1;tokmem[tokptr]:=36;tokptr:=tokptr+1;
  805. tokmem[tokptr]:=40960+trans[pp+2];tokptr:=tokptr+1;red(pp+1,2,3,+1);
  806. {prod(52)};goto 31;end;
  807. end else if cat[pp+1]=1 then begin if cat[pp+2]=14 then begin sq(pp+1,2,
  808. 3,+1);{prod(53)};goto 31;end;
  809. end else if cat[pp+1]=11 then begin tokmem[tokptr]:=40960+trans[pp];
  810. tokptr:=tokptr+1;tokmem[tokptr]:=140;tokptr:=tokptr+1;
  811. tokmem[tokptr]:=40960+trans[pp+1];tokptr:=tokptr+1;red(pp,2,19,-2);
  812. {prod(54)};goto 31;end{:170};others:end;pp:=pp+1;31:end{:149};end;
  813. 30:{:175};
  814. if(loptr=scrapbase)and(cat[loptr]<>2)then translate:=trans[loptr]else{
  815. 180:}begin{181:}
  816. {if(loptr>scrapbase)and(tracing=1)then begin begin writeln(stdout);
  817. write(stdout,'Irreducible scrap sequence in section ',modulecount:1);
  818. end;writeln(stdout,':');if history=0 then history:=1;
  819. for j:=scrapbase to loptr do begin write(stdout,' ');printcat(cat[j]);
  820. end;end;}{:181};
  821. for j:=scrapbase to loptr do begin if j<>scrapbase then begin tokmem[
  822. tokptr]:=32;tokptr:=tokptr+1;end;
  823. if cat[j]=2 then begin tokmem[tokptr]:=36;tokptr:=tokptr+1;end;
  824. tokmem[tokptr]:=40960+trans[j];tokptr:=tokptr+1;
  825. if cat[j]=2 then begin tokmem[tokptr]:=36;tokptr:=tokptr+1;end;
  826. if tokptr+6>maxtoks then begin writeln(stdout);
  827. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  828. jumpout;end;end;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  829. translate:=textptr-1;end{:180};end;{:179}{183:}{195:}
  830. procedure appcomment;begin textptr:=textptr+1;tokstart[textptr]:=tokptr;
  831. if(scrapptr<scrapbase)or(cat[scrapptr]<8)or(cat[scrapptr]>10)then begin
  832. scrapptr:=scrapptr+1;cat[scrapptr]:=10;trans[scrapptr]:=0;
  833. end else begin tokmem[tokptr]:=40960+trans[scrapptr];tokptr:=tokptr+1;
  834. end;tokmem[tokptr]:=textptr+40959;tokptr:=tokptr+1;
  835. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  836. end;{:195}{196:}procedure appoctal;begin tokmem[tokptr]:=92;
  837. tokptr:=tokptr+1;tokmem[tokptr]:=79;tokptr:=tokptr+1;
  838. tokmem[tokptr]:=123;tokptr:=tokptr+1;
  839. while(buffer[loc]>=48)and(buffer[loc]<=55)do begin begin if tokptr+2>
  840. maxtoks then begin writeln(stdout);
  841. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  842. jumpout;end;tokmem[tokptr]:=buffer[loc];tokptr:=tokptr+1;end;loc:=loc+1;
  843. end;begin tokmem[tokptr]:=125;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  844. cat[scrapptr]:=1;trans[scrapptr]:=textptr;textptr:=textptr+1;
  845. tokstart[textptr]:=tokptr;end;end;procedure apphex;
  846. begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=72;
  847. tokptr:=tokptr+1;tokmem[tokptr]:=123;tokptr:=tokptr+1;
  848. while((buffer[loc]>=48)and(buffer[loc]<=57))or((buffer[loc]>=65)and(
  849. buffer[loc]<=70))do begin begin if tokptr+2>maxtoks then begin writeln(
  850. stdout);write(stdout,'! Sorry, ','token',' capacity exceeded');error;
  851. history:=3;jumpout;end;tokmem[tokptr]:=buffer[loc];tokptr:=tokptr+1;end;
  852. loc:=loc+1;end;begin tokmem[tokptr]:=125;tokptr:=tokptr+1;
  853. scrapptr:=scrapptr+1;cat[scrapptr]:=1;trans[scrapptr]:=textptr;
  854. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;end;{:196}{186:}
  855. procedure easycases;
  856. begin case nextcontrol of 6:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;
  857. tokmem[tokptr]:=105;tokptr:=tokptr+1;tokmem[tokptr]:=110;
  858. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  859. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  860. end;32:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=116;
  861. tokptr:=tokptr+1;tokmem[tokptr]:=111;tokptr:=tokptr+1;
  862. scrapptr:=scrapptr+1;cat[scrapptr]:=2;trans[scrapptr]:=textptr;
  863. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  864. 35,36,37,94,95:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;
  865. tokmem[tokptr]:=nextcontrol;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  866. cat[scrapptr]:=2;trans[scrapptr]:=textptr;textptr:=textptr+1;
  867. tokstart[textptr]:=tokptr;end;0,124,131,132,133:;
  868. 40,91:begin tokmem[tokptr]:=nextcontrol;tokptr:=tokptr+1;
  869. scrapptr:=scrapptr+1;cat[scrapptr]:=4;trans[scrapptr]:=textptr;
  870. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  871. 41,93:begin tokmem[tokptr]:=nextcontrol;tokptr:=tokptr+1;
  872. scrapptr:=scrapptr+1;cat[scrapptr]:=6;trans[scrapptr]:=textptr;
  873. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  874. 42:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=97;
  875. tokptr:=tokptr+1;tokmem[tokptr]:=115;tokptr:=tokptr+1;
  876. tokmem[tokptr]:=116;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  877. cat[scrapptr]:=2;trans[scrapptr]:=textptr;textptr:=textptr+1;
  878. tokstart[textptr]:=tokptr;end;44:begin tokmem[tokptr]:=44;
  879. tokptr:=tokptr+1;tokmem[tokptr]:=138;tokptr:=tokptr+1;
  880. tokmem[tokptr]:=57;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  881. cat[scrapptr]:=2;trans[scrapptr]:=textptr;textptr:=textptr+1;
  882. tokstart[textptr]:=tokptr;end;
  883. 46,48,49,50,51,52,53,54,55,56,57:begin tokmem[tokptr]:=nextcontrol;
  884. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=1;
  885. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  886. end;59:begin tokmem[tokptr]:=59;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  887. cat[scrapptr]:=9;trans[scrapptr]:=textptr;textptr:=textptr+1;
  888. tokstart[textptr]:=tokptr;end;58:begin tokmem[tokptr]:=58;
  889. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=14;
  890. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  891. end;{188:}26:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;
  892. tokmem[tokptr]:=73;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  893. cat[scrapptr]:=2;trans[scrapptr]:=textptr;textptr:=textptr+1;
  894. tokstart[textptr]:=tokptr;end;28:begin tokmem[tokptr]:=92;
  895. tokptr:=tokptr+1;tokmem[tokptr]:=76;tokptr:=tokptr+1;
  896. scrapptr:=scrapptr+1;cat[scrapptr]:=2;trans[scrapptr]:=textptr;
  897. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  898. 29:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=71;
  899. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  900. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  901. end;30:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=83;
  902. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  903. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  904. end;4:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=87;
  905. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  906. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  907. end;31:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=86;
  908. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  909. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  910. end;5:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=82;
  911. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  912. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  913. end;24:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=75;
  914. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  915. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  916. end;{:188}128:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;
  917. tokmem[tokptr]:=69;tokptr:=tokptr+1;tokmem[tokptr]:=123;
  918. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=15;
  919. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  920. end;9:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=66;
  921. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  922. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  923. end;10:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=84;
  924. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  925. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  926. end;12:appoctal;13:apphex;135:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;
  927. tokmem[tokptr]:=41;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  928. cat[scrapptr]:=1;trans[scrapptr]:=textptr;textptr:=textptr+1;
  929. tokstart[textptr]:=tokptr;end;3:begin tokmem[tokptr]:=92;
  930. tokptr:=tokptr+1;tokmem[tokptr]:=93;tokptr:=tokptr+1;
  931. scrapptr:=scrapptr+1;cat[scrapptr]:=1;trans[scrapptr]:=textptr;
  932. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  933. 137:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=44;
  934. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  935. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  936. end;138:begin tokmem[tokptr]:=138;tokptr:=tokptr+1;tokmem[tokptr]:=48;
  937. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=1;
  938. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  939. end;139:begin tokmem[tokptr]:=141;tokptr:=tokptr+1;appcomment;end;
  940. 140:begin tokmem[tokptr]:=142;tokptr:=tokptr+1;appcomment;end;
  941. 141:begin tokmem[tokptr]:=134;tokptr:=tokptr+1;tokmem[tokptr]:=92;
  942. tokptr:=tokptr+1;tokmem[tokptr]:=32;tokptr:=tokptr+1;
  943. begin tokmem[tokptr]:=134;tokptr:=tokptr+1;appcomment;end;end;
  944. 142:begin scrapptr:=scrapptr+1;cat[scrapptr]:=9;trans[scrapptr]:=0;end;
  945. 136:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=74;
  946. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  947. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  948. end;others:begin tokmem[tokptr]:=nextcontrol;tokptr:=tokptr+1;
  949. scrapptr:=scrapptr+1;cat[scrapptr]:=2;trans[scrapptr]:=textptr;
  950. textptr:=textptr+1;tokstart[textptr]:=tokptr;end end;end;{:186}{192:}
  951. procedure subcases(p:namepointer);
  952. begin case ilk[p]of 0:begin tokmem[tokptr]:=10240+p;tokptr:=tokptr+1;
  953. scrapptr:=scrapptr+1;cat[scrapptr]:=1;trans[scrapptr]:=textptr;
  954. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  955. 4:begin tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  956. cat[scrapptr]:=7;trans[scrapptr]:=textptr;textptr:=textptr+1;
  957. tokstart[textptr]:=tokptr;end;7:begin tokmem[tokptr]:=141;
  958. tokptr:=tokptr+1;tokmem[tokptr]:=139;tokptr:=tokptr+1;
  959. tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  960. cat[scrapptr]:=3;trans[scrapptr]:=textptr;textptr:=textptr+1;
  961. tokstart[textptr]:=tokptr;end;8:begin tokmem[tokptr]:=131;
  962. tokptr:=tokptr+1;tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;
  963. tokmem[tokptr]:=125;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  964. cat[scrapptr]:=2;trans[scrapptr]:=textptr;textptr:=textptr+1;
  965. tokstart[textptr]:=tokptr;end;9:begin tokmem[tokptr]:=20480+p;
  966. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=8;
  967. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  968. end;12:begin tokmem[tokptr]:=141;tokptr:=tokptr+1;
  969. tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  970. cat[scrapptr]:=7;trans[scrapptr]:=textptr;textptr:=textptr+1;
  971. tokstart[textptr]:=tokptr;end;13:begin tokmem[tokptr]:=20480+p;
  972. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=3;
  973. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  974. end;16:begin tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;
  975. scrapptr:=scrapptr+1;cat[scrapptr]:=1;trans[scrapptr]:=textptr;
  976. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  977. 20:begin tokmem[tokptr]:=132;tokptr:=tokptr+1;tokmem[tokptr]:=20480+p;
  978. tokptr:=tokptr+1;tokmem[tokptr]:=125;tokptr:=tokptr+1;
  979. scrapptr:=scrapptr+1;cat[scrapptr]:=2;trans[scrapptr]:=textptr;
  980. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;end;end;{:192}
  981. procedure Pascalparse;label 21,10;var j:0..longbufsize;p:namepointer;
  982. begin while nextcontrol<143 do begin{185:}{187:}
  983. if(scrapptr+4>maxscraps)or(tokptr+6>maxtoks)or(textptr+4>maxtexts)then
  984. begin{if scrapptr>maxscrptr then maxscrptr:=scrapptr;
  985. if tokptr>maxtokptr then maxtokptr:=tokptr;
  986. if textptr>maxtxtptr then maxtxtptr:=textptr;}begin writeln(stdout);
  987. write(stdout,'! Sorry, ','scrap/token/text',' capacity exceeded');error;
  988. history:=3;jumpout;end;end{:187};21:case nextcontrol of 129,2:{189:}
  989. begin tokmem[tokptr]:=92;tokptr:=tokptr+1;
  990. if nextcontrol=2 then begin tokmem[tokptr]:=61;tokptr:=tokptr+1;
  991. end else begin tokmem[tokptr]:=46;tokptr:=tokptr+1;end;
  992. tokmem[tokptr]:=123;tokptr:=tokptr+1;j:=idfirst;
  993. while j<idloc do begin case buffer[j]of 32,92,35,37,36,94,39,96,123,125,
  994. 126,38,95:begin tokmem[tokptr]:=92;tokptr:=tokptr+1;end;
  995. 64:if buffer[j+1]=64 then j:=j+1 else begin if not phaseone then begin
  996. writeln(stdout);write(stdout,'! Double @ should be used in strings');
  997. error;end;end;others:end;
  998. begin if tokptr+2>maxtoks then begin writeln(stdout);
  999. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  1000. jumpout;end;tokmem[tokptr]:=buffer[j];tokptr:=tokptr+1;end;j:=j+1;end;
  1001. begin tokmem[tokptr]:=125;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1002. cat[scrapptr]:=1;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1003. tokstart[textptr]:=tokptr;end;end{:189};130:{191:}begin p:=idlookup(0);
  1004. case ilk[p]of 0,4,7,8,9,12,13,16,20:subcases(p);{193:}
  1005. 5:begin begin tokmem[tokptr]:=141;tokptr:=tokptr+1;
  1006. tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;tokmem[tokptr]:=135;
  1007. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=5;
  1008. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  1009. end;begin scrapptr:=scrapptr+1;cat[scrapptr]:=3;trans[scrapptr]:=0;end;
  1010. end;6:begin begin scrapptr:=scrapptr+1;cat[scrapptr]:=21;
  1011. trans[scrapptr]:=0;end;begin tokmem[tokptr]:=141;tokptr:=tokptr+1;
  1012. tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1013. cat[scrapptr]:=7;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1014. tokstart[textptr]:=tokptr;end;end;10:begin{194:}
  1015. if(scrapptr<scrapbase)or((cat[scrapptr]<>10)and(cat[scrapptr]<>9))then
  1016. begin scrapptr:=scrapptr+1;cat[scrapptr]:=10;trans[scrapptr]:=0;
  1017. end{:194};begin tokmem[tokptr]:=141;tokptr:=tokptr+1;
  1018. tokmem[tokptr]:=139;tokptr:=tokptr+1;tokmem[tokptr]:=20480+p;
  1019. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=20;
  1020. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  1021. end;end;11:begin{194:}
  1022. if(scrapptr<scrapbase)or((cat[scrapptr]<>10)and(cat[scrapptr]<>9))then
  1023. begin scrapptr:=scrapptr+1;cat[scrapptr]:=10;trans[scrapptr]:=0;
  1024. end{:194};begin tokmem[tokptr]:=141;tokptr:=tokptr+1;
  1025. tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1026. cat[scrapptr]:=6;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1027. tokstart[textptr]:=tokptr;end;end;14:begin begin scrapptr:=scrapptr+1;
  1028. cat[scrapptr]:=12;trans[scrapptr]:=0;end;begin tokmem[tokptr]:=141;
  1029. tokptr:=tokptr+1;tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;
  1030. scrapptr:=scrapptr+1;cat[scrapptr]:=7;trans[scrapptr]:=textptr;
  1031. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;end;
  1032. 23:begin begin tokmem[tokptr]:=141;tokptr:=tokptr+1;tokmem[tokptr]:=92;
  1033. tokptr:=tokptr+1;tokmem[tokptr]:=126;tokptr:=tokptr+1;
  1034. scrapptr:=scrapptr+1;cat[scrapptr]:=7;trans[scrapptr]:=textptr;
  1035. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  1036. begin tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1037. cat[scrapptr]:=8;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1038. tokstart[textptr]:=tokptr;end;end;17:begin begin tokmem[tokptr]:=141;
  1039. tokptr:=tokptr+1;tokmem[tokptr]:=139;tokptr:=tokptr+1;
  1040. tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;tokmem[tokptr]:=135;
  1041. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=16;
  1042. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  1043. end;begin tokmem[tokptr]:=136;tokptr:=tokptr+1;tokmem[tokptr]:=92;
  1044. tokptr:=tokptr+1;tokmem[tokptr]:=32;tokptr:=tokptr+1;
  1045. scrapptr:=scrapptr+1;cat[scrapptr]:=3;trans[scrapptr]:=textptr;
  1046. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;end;
  1047. 18:begin begin tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;
  1048. scrapptr:=scrapptr+1;cat[scrapptr]:=18;trans[scrapptr]:=textptr;
  1049. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  1050. begin scrapptr:=scrapptr+1;cat[scrapptr]:=3;trans[scrapptr]:=0;end;end;
  1051. 19:begin begin tokmem[tokptr]:=141;tokptr:=tokptr+1;tokmem[tokptr]:=136;
  1052. tokptr:=tokptr+1;tokmem[tokptr]:=20480+p;tokptr:=tokptr+1;
  1053. tokmem[tokptr]:=135;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1054. cat[scrapptr]:=5;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1055. tokstart[textptr]:=tokptr;end;begin scrapptr:=scrapptr+1;
  1056. cat[scrapptr]:=3;trans[scrapptr]:=0;end;end;21:begin{194:}
  1057. if(scrapptr<scrapbase)or((cat[scrapptr]<>10)and(cat[scrapptr]<>9))then
  1058. begin scrapptr:=scrapptr+1;cat[scrapptr]:=10;trans[scrapptr]:=0;
  1059. end{:194};begin tokmem[tokptr]:=141;tokptr:=tokptr+1;
  1060. tokmem[tokptr]:=139;tokptr:=tokptr+1;tokmem[tokptr]:=20480+p;
  1061. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=6;
  1062. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  1063. end;begin scrapptr:=scrapptr+1;cat[scrapptr]:=13;trans[scrapptr]:=0;end;
  1064. end;22:begin begin tokmem[tokptr]:=141;tokptr:=tokptr+1;
  1065. tokmem[tokptr]:=139;tokptr:=tokptr+1;tokmem[tokptr]:=20480+p;
  1066. tokptr:=tokptr+1;tokmem[tokptr]:=135;tokptr:=tokptr+1;
  1067. scrapptr:=scrapptr+1;cat[scrapptr]:=19;trans[scrapptr]:=textptr;
  1068. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  1069. begin scrapptr:=scrapptr+1;cat[scrapptr]:=3;trans[scrapptr]:=0;end;end;
  1070. {:193}others:begin nextcontrol:=ilk[p]-24;goto 21;end end;end{:191};
  1071. 134:{190:}begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=104;
  1072. tokptr:=tokptr+1;tokmem[tokptr]:=98;tokptr:=tokptr+1;
  1073. tokmem[tokptr]:=111;tokptr:=tokptr+1;tokmem[tokptr]:=120;
  1074. tokptr:=tokptr+1;tokmem[tokptr]:=123;tokptr:=tokptr+1;
  1075. for j:=idfirst to idloc-1 do begin if tokptr+2>maxtoks then begin
  1076. writeln(stdout);write(stdout,'! Sorry, ','token',' capacity exceeded');
  1077. error;history:=3;jumpout;end;tokmem[tokptr]:=buffer[j];tokptr:=tokptr+1;
  1078. end;begin tokmem[tokptr]:=125;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1079. cat[scrapptr]:=1;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1080. tokstart[textptr]:=tokptr;end;end{:190};others:easycases end{:185};
  1081. nextcontrol:=getnext;if(nextcontrol=124)or(nextcontrol=123)then goto 10;
  1082. end;10:end;{:183}{197:}function Pascaltranslate:textpointer;
  1083. var p:textpointer;savebase:0..maxscraps;begin savebase:=scrapbase;
  1084. scrapbase:=scrapptr+1;Pascalparse;
  1085. if nextcontrol<>124 then begin if not phaseone then begin writeln(stdout
  1086. );write(stdout,'! Missing "|" after Pascal text');error;end;end;
  1087. begin if tokptr+2>maxtoks then begin writeln(stdout);
  1088. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  1089. jumpout;end;tokmem[tokptr]:=135;tokptr:=tokptr+1;end;appcomment;
  1090. p:=translate;{if scrapptr>maxscrptr then maxscrptr:=scrapptr;}
  1091. scrapptr:=scrapbase-1;scrapbase:=savebase;Pascaltranslate:=p;end;{:197}
  1092. {198:}procedure outerparse;var bal:eightbits;p,q:textpointer;
  1093. begin while nextcontrol<143 do if nextcontrol<>123 then Pascalparse else
  1094. begin{199:}
  1095. if(tokptr+7>maxtoks)or(textptr+3>maxtexts)or(scrapptr>=maxscraps)then
  1096. begin{if scrapptr>maxscrptr then maxscrptr:=scrapptr;
  1097. if tokptr>maxtokptr then maxtokptr:=tokptr;
  1098. if textptr>maxtxtptr then maxtxtptr:=textptr;}begin writeln(stdout);
  1099. write(stdout,'! Sorry, ','token/text/scrap',' capacity exceeded');error;
  1100. history:=3;jumpout;end;end{:199};tokmem[tokptr]:=92;tokptr:=tokptr+1;
  1101. tokmem[tokptr]:=67;tokptr:=tokptr+1;tokmem[tokptr]:=123;
  1102. tokptr:=tokptr+1;bal:=copycomment(1);nextcontrol:=124;
  1103. while bal>0 do begin p:=textptr;textptr:=textptr+1;
  1104. tokstart[textptr]:=tokptr;q:=Pascaltranslate;tokmem[tokptr]:=40960+p;
  1105. tokptr:=tokptr+1;tokmem[tokptr]:=51200+q;tokptr:=tokptr+1;
  1106. if nextcontrol=124 then bal:=copycomment(bal)else bal:=0;end;
  1107. tokmem[tokptr]:=141;tokptr:=tokptr+1;appcomment;end;end;{:198}{204:}
  1108. procedure pushlevel(p:textpointer);
  1109. begin if stackptr=stacksize then begin writeln(stdout);
  1110. write(stdout,'! Sorry, ','stack',' capacity exceeded');error;history:=3;
  1111. jumpout;end else begin if stackptr>0 then stack[stackptr]:=curstate;
  1112. stackptr:=stackptr+1;
  1113. {if stackptr>maxstackptr then maxstackptr:=stackptr;}
  1114. curstate.tokfield:=tokstart[p];curstate.endfield:=tokstart[p+1];end;end;
  1115. {:204}{206:}function getoutput:eightbits;label 20;var a:sixteenbits;
  1116. begin 20:while curstate.tokfield=curstate.endfield do begin stackptr:=
  1117. stackptr-1;curstate:=stack[stackptr];end;a:=tokmem[curstate.tokfield];
  1118. curstate.tokfield:=curstate.tokfield+1;
  1119. if a>=256 then begin curname:=a mod 10240;case a div 10240 of 2:a:=129;
  1120. 3:a:=128;4:begin pushlevel(curname);goto 20;end;
  1121. 5:begin pushlevel(curname);curstate.modefield:=0;goto 20;end;
  1122. others:a:=130 end;end;{if troubleshooting then debughelp;}getoutput:=a;
  1123. end;{:206}{207:}procedure makeoutput;forward;procedure outputPascal;
  1124. var savetokptr,savetextptr,savenextcontrol:sixteenbits;p:textpointer;
  1125. begin savetokptr:=tokptr;savetextptr:=textptr;
  1126. savenextcontrol:=nextcontrol;nextcontrol:=124;p:=Pascaltranslate;
  1127. tokmem[tokptr]:=p+51200;tokptr:=tokptr+1;makeoutput;
  1128. {if textptr>maxtxtptr then maxtxtptr:=textptr;
  1129. if tokptr>maxtokptr then maxtokptr:=tokptr;}textptr:=savetextptr;
  1130. tokptr:=savetokptr;nextcontrol:=savenextcontrol;end;{:207}{208:}
  1131. procedure makeoutput;label 21,10,31;var a:eightbits;b:eightbits;
  1132. k,klimit:0..maxbytes;w:0..1;j:0..longbufsize;stringdelimiter:ASCIIcode;
  1133. saveloc,savelimit:0..longbufsize;curmodname:namepointer;savemode:mode;
  1134. begin tokmem[tokptr]:=143;tokptr:=tokptr+1;textptr:=textptr+1;
  1135. tokstart[textptr]:=tokptr;pushlevel(textptr-1);
  1136. while true do begin a:=getoutput;21:case a of 143:goto 10;130,129:{209:}
  1137. begin begin if outptr=linelength then breakout;outptr:=outptr+1;
  1138. outbuf[outptr]:=92;end;
  1139. if a=130 then if bytestart[curname+2]-bytestart[curname]=1 then begin if
  1140. outptr=linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=124;
  1141. end else begin if outptr=linelength then breakout;outptr:=outptr+1;
  1142. outbuf[outptr]:=92;end else begin if outptr=linelength then breakout;
  1143. outptr:=outptr+1;outbuf[outptr]:=38;end;
  1144. if bytestart[curname+2]-bytestart[curname]=1 then begin if outptr=
  1145. linelength then breakout;outptr:=outptr+1;
  1146. outbuf[outptr]:=bytemem[curname mod 2,bytestart[curname]];
  1147. end else outname(curname);end{:209};128:{213:}
  1148. begin begin if outptr=linelength then breakout;outptr:=outptr+1;
  1149. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1150. outbuf[outptr]:=88;end;curxref:=xref[curname];
  1151. if xmem[curxref].numfield>=10240 then begin outmod(xmem[curxref].
  1152. numfield-10240);
  1153. if phasethree then begin curxref:=xmem[curxref].xlinkfield;
  1154. while xmem[curxref].numfield>=10240 do begin begin if outptr=linelength
  1155. then breakout;outptr:=outptr+1;outbuf[outptr]:=44;
  1156. if outptr=linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=32;
  1157. end;outmod(xmem[curxref].numfield-10240);
  1158. curxref:=xmem[curxref].xlinkfield;end;end;
  1159. end else begin if outptr=linelength then breakout;outptr:=outptr+1;
  1160. outbuf[outptr]:=48;end;begin if outptr=linelength then breakout;
  1161. outptr:=outptr+1;outbuf[outptr]:=58;end;{214:}k:=bytestart[curname];
  1162. w:=curname mod 2;klimit:=bytestart[curname+2];curmodname:=curname;
  1163. while k<klimit do begin b:=bytemem[w,k];k:=k+1;if b=64 then{215:}
  1164. begin if bytemem[w,k]<>64 then begin begin writeln(stdout);
  1165. write(stdout,'! Illegal control code in section name:');end;
  1166. begin writeln(stdout);write(stdout,'<');end;printid(curmodname);
  1167. write(stdout,'> ');history:=2;end;k:=k+1;end{:215};
  1168. if b<>124 then begin if outptr=linelength then breakout;
  1169. outptr:=outptr+1;outbuf[outptr]:=b;end else begin{216:}j:=limit+1;
  1170. buffer[j]:=124;stringdelimiter:=0;
  1171. while true do begin if k>=klimit then begin begin writeln(stdout);
  1172. write(stdout,'! Pascal text in section name didn''t end:');end;
  1173. begin writeln(stdout);write(stdout,'<');end;printid(curmodname);
  1174. write(stdout,'> ');history:=2;goto 31;end;b:=bytemem[w,k];k:=k+1;
  1175. if b=64 then{217:}begin if j>longbufsize-4 then begin writeln(stdout);
  1176. write(stdout,'! Sorry, ','buffer',' capacity exceeded');error;
  1177. history:=3;jumpout;end;buffer[j+1]:=64;buffer[j+2]:=bytemem[w,k];j:=j+2;
  1178. k:=k+1;end{:217}
  1179. else begin if(b=34)or(b=39)then if stringdelimiter=0 then
  1180. stringdelimiter:=b else if stringdelimiter=b then stringdelimiter:=0;
  1181. if(b<>124)or(stringdelimiter<>0)then begin if j>longbufsize-3 then begin
  1182. writeln(stdout);write(stdout,'! Sorry, ','buffer',' capacity exceeded');
  1183. error;history:=3;jumpout;end;j:=j+1;buffer[j]:=b;end else goto 31;end;
  1184. end;31:{:216};saveloc:=loc;savelimit:=limit;loc:=limit+2;limit:=j+1;
  1185. buffer[limit]:=124;outputPascal;loc:=saveloc;limit:=savelimit;end;
  1186. end{:214};begin if outptr=linelength then breakout;outptr:=outptr+1;
  1187. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1188. outbuf[outptr]:=88;end;end{:213};131,133,132:{210:}
  1189. begin begin if outptr=linelength then breakout;outptr:=outptr+1;
  1190. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1191. outbuf[outptr]:=109;if outptr=linelength then breakout;outptr:=outptr+1;
  1192. outbuf[outptr]:=97;if outptr=linelength then breakout;outptr:=outptr+1;
  1193. outbuf[outptr]:=116;if outptr=linelength then breakout;outptr:=outptr+1;
  1194. outbuf[outptr]:=104;end;
  1195. if a=131 then begin if outptr=linelength then breakout;outptr:=outptr+1;
  1196. outbuf[outptr]:=98;if outptr=linelength then breakout;outptr:=outptr+1;
  1197. outbuf[outptr]:=105;if outptr=linelength then breakout;outptr:=outptr+1;
  1198. outbuf[outptr]:=110;
  1199. end else if a=132 then begin if outptr=linelength then breakout;
  1200. outptr:=outptr+1;outbuf[outptr]:=114;if outptr=linelength then breakout;
  1201. outptr:=outptr+1;outbuf[outptr]:=101;if outptr=linelength then breakout;
  1202. outptr:=outptr+1;outbuf[outptr]:=108;
  1203. end else begin if outptr=linelength then breakout;outptr:=outptr+1;
  1204. outbuf[outptr]:=111;if outptr=linelength then breakout;outptr:=outptr+1;
  1205. outbuf[outptr]:=112;end;begin if outptr=linelength then breakout;
  1206. outptr:=outptr+1;outbuf[outptr]:=123;end;end{:210};
  1207. 135:begin repeat a:=getoutput;until(a<139)or(a>142);goto 21;end;
  1208. 134:begin repeat a:=getoutput;until((a<139)and(a<>32))or(a>142);goto 21;
  1209. end;136,137,138,139,140,141,142:{211:}
  1210. if a<140 then begin if curstate.modefield=1 then begin begin if outptr=
  1211. linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=92;
  1212. if outptr=linelength then breakout;outptr:=outptr+1;
  1213. outbuf[outptr]:=a-87;end;
  1214. if a=138 then begin if outptr=linelength then breakout;outptr:=outptr+1;
  1215. outbuf[outptr]:=getoutput;
  1216. end end else if a=138 then b:=getoutput end else{212:}begin b:=a;
  1217. savemode:=curstate.modefield;while true do begin a:=getoutput;
  1218. if(a=135)or(a=134)then goto 21;
  1219. if((a<>32)and(a<140))or(a>142)then begin if savemode=1 then begin if
  1220. outptr>3 then if(outbuf[outptr]=80)and(outbuf[outptr-1]=92)and(outbuf[
  1221. outptr-2]=89)and(outbuf[outptr-3]=92)then goto 21;
  1222. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1223. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1224. outbuf[outptr]:=b-87;end;if a<>143 then finishline;
  1225. end else if(a<>143)and(curstate.modefield=0)then begin if outptr=
  1226. linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=32;end;
  1227. goto 21;end;if a>b then b:=a;end;end{:212}{:211};
  1228. others:begin if outptr=linelength then breakout;outptr:=outptr+1;
  1229. outbuf[outptr]:=a;end end;end;10:end;{:208}{226:}procedure finishPascal;
  1230. var p:textpointer;begin begin if outptr=linelength then breakout;
  1231. outptr:=outptr+1;outbuf[outptr]:=92;if outptr=linelength then breakout;
  1232. outptr:=outptr+1;outbuf[outptr]:=80;end;
  1233. begin if tokptr+2>maxtoks then begin writeln(stdout);
  1234. write(stdout,'! Sorry, ','token',' capacity exceeded');error;history:=3;
  1235. jumpout;end;tokmem[tokptr]:=141;tokptr:=tokptr+1;end;appcomment;
  1236. p:=translate;tokmem[tokptr]:=p+40960;tokptr:=tokptr+1;makeoutput;
  1237. if outptr>1 then if outbuf[outptr-1]=92 then if outbuf[outptr]=54 then
  1238. outptr:=outptr-2 else if outbuf[outptr]=55 then outbuf[outptr]:=89;
  1239. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1240. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1241. outbuf[outptr]:=112;if outptr=linelength then breakout;outptr:=outptr+1;
  1242. outbuf[outptr]:=97;if outptr=linelength then breakout;outptr:=outptr+1;
  1243. outbuf[outptr]:=114;end;finishline;
  1244. {if textptr>maxtxtptr then maxtxtptr:=textptr;
  1245. if tokptr>maxtokptr then maxtokptr:=tokptr;
  1246. if scrapptr>maxscrptr then maxscrptr:=scrapptr;}tokptr:=1;textptr:=1;
  1247. scrapptr:=0;end;{:226}{236:}procedure footnote(flag:sixteenbits);
  1248. label 30,10;var q:xrefnumber;
  1249. begin if xmem[curxref].numfield<=flag then goto 10;finishline;
  1250. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1251. outbuf[outptr]:=92;end;
  1252. if flag=0 then begin if outptr=linelength then breakout;
  1253. outptr:=outptr+1;outbuf[outptr]:=85;
  1254. end else begin if outptr=linelength then breakout;outptr:=outptr+1;
  1255. outbuf[outptr]:=65;end;{237:}q:=curxref;
  1256. if xmem[xmem[q].xlinkfield].numfield>flag then begin if outptr=
  1257. linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=115;end;
  1258. while true do begin outmod(xmem[curxref].numfield-flag);
  1259. curxref:=xmem[curxref].xlinkfield;
  1260. if xmem[curxref].numfield<=flag then goto 30;
  1261. if xmem[xmem[curxref].xlinkfield].numfield>flag then begin if outptr=
  1262. linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=44;
  1263. if outptr=linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=32;
  1264. end else begin begin if outptr=linelength then breakout;
  1265. outptr:=outptr+1;outbuf[outptr]:=92;if outptr=linelength then breakout;
  1266. outptr:=outptr+1;outbuf[outptr]:=69;if outptr=linelength then breakout;
  1267. outptr:=outptr+1;outbuf[outptr]:=84;end;
  1268. if curxref<>xmem[q].xlinkfield then begin if outptr=linelength then
  1269. breakout;outptr:=outptr+1;outbuf[outptr]:=115;end;end;end;30:{:237};
  1270. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1271. outbuf[outptr]:=46;end;10:end;{:236}{249:}
  1272. procedure unbucket(d:eightbits);var c:ASCIIcode;
  1273. begin for c:=229 downto 0 do if bucket[collate[c]]>0 then begin if
  1274. scrapptr>maxscraps then begin writeln(stdout);
  1275. write(stdout,'! Sorry, ','sorting',' capacity exceeded');error;
  1276. history:=3;jumpout;end;scrapptr:=scrapptr+1;
  1277. {if scrapptr>maxsortptr then maxsortptr:=scrapptr;}
  1278. if c=0 then cat[scrapptr]:=255 else cat[scrapptr]:=d;
  1279. trans[scrapptr]:=bucket[collate[c]];bucket[collate[c]]:=0;end;end;{:249}
  1280. {256:}procedure modprint(p:namepointer);
  1281. begin if p>0 then begin modprint(link[p]);
  1282. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1283. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1284. outbuf[outptr]:=58;end;tokptr:=1;textptr:=1;scrapptr:=0;stackptr:=0;
  1285. curstate.modefield:=1;tokmem[tokptr]:=p+30720;tokptr:=tokptr+1;
  1286. makeoutput;footnote(0);finishline;modprint(ilk[p]);end;end;{:256}{260:}
  1287. {procedure debughelp;label 888,10;var k:integer;
  1288. begin debugskipped:=debugskipped+1;
  1289. if debugskipped<debugcycle then goto 10;debugskipped:=0;
  1290. while true do begin write(stdout,'#');flush(stdout);read(stdin,ddt);
  1291. if ddt<0 then goto 10 else if ddt=0 then begin goto 888;
  1292. 888:ddt:=0;
  1293. end else begin read(stdin,dd);case ddt of 1:printid(dd);2:printtext(dd);
  1294. 3:for k:=1 to dd do write(stdout,xchr[buffer[k]]);
  1295. 4:for k:=1 to dd do write(stdout,xchr[modtext[k]]);
  1296. 5:for k:=1 to outptr do write(stdout,xchr[outbuf[k]]);
  1297. 6:for k:=1 to dd do begin printcat(cat[k]);write(stdout,' ');end;
  1298. others:write(stdout,'?')end;end;end;10:end;}{:260}{261:}
  1299. procedure PhaseI;begin{109:}phaseone:=true;phasethree:=false;resetinput;
  1300. modulecount:=0;skiplimbo;changeexists:=false;
  1301. while not inputhasended do{110:}begin modulecount:=modulecount+1;
  1302. if modulecount=maxmodules then begin writeln(stdout);
  1303. write(stdout,'! Sorry, ','section number',' capacity exceeded');error;
  1304. history:=3;jumpout;end;changedmodule[modulecount]:=changing;
  1305. if buffer[loc-1]=42 then begin write(stdout,'*',modulecount:1);
  1306. flush(stdout);end;{113:}repeat nextcontrol:=skipTeX;
  1307. case nextcontrol of 126:xrefswitch:=10240;125:xrefswitch:=0;
  1308. 124:Pascalxref;131,132,133,146:begin loc:=loc-2;nextcontrol:=getnext;
  1309. if nextcontrol<>146 then newxref(idlookup(nextcontrol-130));end;
  1310. others:end;until nextcontrol>=143{:113};{115:}
  1311. while nextcontrol<=144 do begin xrefswitch:=10240;
  1312. if nextcontrol=144 then nextcontrol:=getnext else{116:}
  1313. begin nextcontrol:=getnext;
  1314. if nextcontrol=130 then begin lhs:=idlookup(0);ilk[lhs]:=0;newxref(lhs);
  1315. nextcontrol:=getnext;if nextcontrol=30 then begin nextcontrol:=getnext;
  1316. if nextcontrol=130 then begin rhs:=idlookup(0);ilk[lhs]:=ilk[rhs];
  1317. ilk[rhs]:=0;newxref(rhs);ilk[rhs]:=ilk[lhs];nextcontrol:=getnext;end;
  1318. end;end;end{:116};outerxref;end{:115};{117:}
  1319. if nextcontrol<=146 then begin if nextcontrol=145 then modxrefswitch:=0
  1320. else modxrefswitch:=10240;
  1321. repeat if nextcontrol=146 then newmodxref(curmodule);
  1322. nextcontrol:=getnext;outerxref;until nextcontrol>146;end{:117};
  1323. if changedmodule[modulecount]then changeexists:=true;end{:110};
  1324. changedmodule[modulecount]:=changeexists;phaseone:=false;{120:}
  1325. modcheck(ilk[0]){:120};{:109};end;procedure PhaseII;begin{218:}
  1326. resetinput;begin writeln(stdout);
  1327. write(stdout,'Writing the output file...');end;modulecount:=0;copylimbo;
  1328. finishline;flushbuffer(0,false,false);while not inputhasended do{220:}
  1329. begin modulecount:=modulecount+1;{221:}
  1330. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1331. outbuf[outptr]:=92;end;
  1332. if buffer[loc-1]<>42 then begin if outptr=linelength then breakout;
  1333. outptr:=outptr+1;outbuf[outptr]:=77;
  1334. end else begin begin if outptr=linelength then breakout;
  1335. outptr:=outptr+1;outbuf[outptr]:=78;end;write(stdout,'*',modulecount:1);
  1336. flush(stdout);end;outmod(modulecount);
  1337. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1338. outbuf[outptr]:=46;if outptr=linelength then breakout;outptr:=outptr+1;
  1339. outbuf[outptr]:=32;end{:221};saveline:=outline;saveplace:=outptr;{222:}
  1340. repeat nextcontrol:=copyTeX;case nextcontrol of 124:begin stackptr:=0;
  1341. curstate.modefield:=1;outputPascal;end;
  1342. 64:begin if outptr=linelength then breakout;outptr:=outptr+1;
  1343. outbuf[outptr]:=64;end;12:{223:}
  1344. begin begin if outptr=linelength then breakout;outptr:=outptr+1;
  1345. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1346. outbuf[outptr]:=79;if outptr=linelength then breakout;outptr:=outptr+1;
  1347. outbuf[outptr]:=123;end;
  1348. while(buffer[loc]>=48)and(buffer[loc]<=55)do begin begin if outptr=
  1349. linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=buffer[loc];
  1350. end;loc:=loc+1;end;begin if outptr=linelength then breakout;
  1351. outptr:=outptr+1;outbuf[outptr]:=125;end;end{:223};13:{224:}
  1352. begin begin if outptr=linelength then breakout;outptr:=outptr+1;
  1353. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1354. outbuf[outptr]:=72;if outptr=linelength then breakout;outptr:=outptr+1;
  1355. outbuf[outptr]:=123;end;
  1356. while((buffer[loc]>=48)and(buffer[loc]<=57))or((buffer[loc]>=65)and(
  1357. buffer[loc]<=70))do begin begin if outptr=linelength then breakout;
  1358. outptr:=outptr+1;outbuf[outptr]:=buffer[loc];end;loc:=loc+1;end;
  1359. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1360. outbuf[outptr]:=125;end;end{:224};134,131,132,133,146:begin loc:=loc-2;
  1361. nextcontrol:=getnext;
  1362. if nextcontrol=134 then begin if not phaseone then begin writeln(stdout)
  1363. ;write(stdout,'! TeX string should be in Pascal text only');error;end;
  1364. end;end;
  1365. 9,10,135,137,138,139,140,141,136,142:begin if not phaseone then begin
  1366. writeln(stdout);write(stdout,'! You can''t do that in TeX text');error;
  1367. end;end;others:end;until nextcontrol>=143{:222};{225:}
  1368. if nextcontrol<=144 then begin if(saveline<>outline)or(saveplace<>outptr
  1369. )then begin if outptr=linelength then breakout;outptr:=outptr+1;
  1370. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1371. outbuf[outptr]:=89;end;saveline:=outline;saveplace:=outptr;end;
  1372. while nextcontrol<=144 do begin stackptr:=0;curstate.modefield:=1;
  1373. if nextcontrol=144 then{227:}begin begin tokmem[tokptr]:=92;
  1374. tokptr:=tokptr+1;tokmem[tokptr]:=68;tokptr:=tokptr+1;
  1375. scrapptr:=scrapptr+1;cat[scrapptr]:=3;trans[scrapptr]:=textptr;
  1376. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;nextcontrol:=getnext;
  1377. if nextcontrol<>130 then begin if not phaseone then begin writeln(stdout
  1378. );write(stdout,'! Improper macro definition');error;end;
  1379. end else begin tokmem[tokptr]:=10240+idlookup(0);tokptr:=tokptr+1;
  1380. scrapptr:=scrapptr+1;cat[scrapptr]:=2;trans[scrapptr]:=textptr;
  1381. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;nextcontrol:=getnext;
  1382. end{:227}else{228:}begin begin tokmem[tokptr]:=92;tokptr:=tokptr+1;
  1383. tokmem[tokptr]:=70;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1384. cat[scrapptr]:=3;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1385. tokstart[textptr]:=tokptr;end;nextcontrol:=getnext;
  1386. if nextcontrol=130 then begin begin tokmem[tokptr]:=10240+idlookup(0);
  1387. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  1388. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  1389. end;nextcontrol:=getnext;
  1390. if nextcontrol=30 then begin begin tokmem[tokptr]:=92;tokptr:=tokptr+1;
  1391. tokmem[tokptr]:=83;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1392. cat[scrapptr]:=2;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1393. tokstart[textptr]:=tokptr;end;nextcontrol:=getnext;
  1394. if nextcontrol=130 then begin begin tokmem[tokptr]:=10240+idlookup(0);
  1395. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  1396. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  1397. end;begin scrapptr:=scrapptr+1;cat[scrapptr]:=9;trans[scrapptr]:=0;end;
  1398. nextcontrol:=getnext;end;end;end;
  1399. if scrapptr<>5 then begin if not phaseone then begin writeln(stdout);
  1400. write(stdout,'! Improper format definition');error;end;end;end{:228};
  1401. outerparse;finishPascal;end{:225};{230:}thismodule:=0;
  1402. if nextcontrol<=146 then begin if(saveline<>outline)or(saveplace<>outptr
  1403. )then begin if outptr=linelength then breakout;outptr:=outptr+1;
  1404. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1405. outbuf[outptr]:=89;end;stackptr:=0;curstate.modefield:=1;
  1406. if nextcontrol=145 then nextcontrol:=getnext else begin thismodule:=
  1407. curmodule;{231:}repeat nextcontrol:=getnext;until nextcontrol<>43;
  1408. if(nextcontrol<>61)and(nextcontrol<>30)then begin if not phaseone then
  1409. begin writeln(stdout);
  1410. write(stdout,'! You need an = sign after the section name');error;end;
  1411. end else nextcontrol:=getnext;
  1412. if outptr>1 then if(outbuf[outptr]=89)and(outbuf[outptr-1]=92)then begin
  1413. tokmem[tokptr]:=139;tokptr:=tokptr+1;end;
  1414. begin tokmem[tokptr]:=30720+thismodule;tokptr:=tokptr+1;
  1415. scrapptr:=scrapptr+1;cat[scrapptr]:=22;trans[scrapptr]:=textptr;
  1416. textptr:=textptr+1;tokstart[textptr]:=tokptr;end;
  1417. curxref:=xref[thismodule];
  1418. if xmem[curxref].numfield<>modulecount+10240 then begin begin tokmem[
  1419. tokptr]:=132;tokptr:=tokptr+1;tokmem[tokptr]:=43;tokptr:=tokptr+1;
  1420. tokmem[tokptr]:=125;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1421. cat[scrapptr]:=2;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1422. tokstart[textptr]:=tokptr;end;thismodule:=0;end;
  1423. begin tokmem[tokptr]:=92;tokptr:=tokptr+1;tokmem[tokptr]:=83;
  1424. tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=2;
  1425. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  1426. end;begin tokmem[tokptr]:=141;tokptr:=tokptr+1;scrapptr:=scrapptr+1;
  1427. cat[scrapptr]:=9;trans[scrapptr]:=textptr;textptr:=textptr+1;
  1428. tokstart[textptr]:=tokptr;end;{:231};end;
  1429. while nextcontrol<=146 do begin outerparse;{232:}
  1430. if nextcontrol<146 then begin begin if not phaseone then begin writeln(
  1431. stdout);write(stdout,'! You can''t do that in Pascal text');error;end;
  1432. end;nextcontrol:=getnext;
  1433. end else if nextcontrol=146 then begin begin tokmem[tokptr]:=30720+
  1434. curmodule;tokptr:=tokptr+1;scrapptr:=scrapptr+1;cat[scrapptr]:=22;
  1435. trans[scrapptr]:=textptr;textptr:=textptr+1;tokstart[textptr]:=tokptr;
  1436. end;nextcontrol:=getnext;end{:232};end;finishPascal;end{:230};{233:}
  1437. if thismodule>0 then begin{235:}firstxref:=xref[thismodule];
  1438. thisxref:=xmem[firstxref].xlinkfield;
  1439. if xmem[thisxref].numfield>10240 then begin midxref:=thisxref;
  1440. curxref:=0;repeat nextxref:=xmem[thisxref].xlinkfield;
  1441. xmem[thisxref].xlinkfield:=curxref;curxref:=thisxref;thisxref:=nextxref;
  1442. until xmem[thisxref].numfield<=10240;
  1443. xmem[firstxref].xlinkfield:=curxref;end else midxref:=0;curxref:=0;
  1444. while thisxref<>0 do begin nextxref:=xmem[thisxref].xlinkfield;
  1445. xmem[thisxref].xlinkfield:=curxref;curxref:=thisxref;thisxref:=nextxref;
  1446. end;
  1447. if midxref>0 then xmem[midxref].xlinkfield:=curxref else xmem[firstxref]
  1448. .xlinkfield:=curxref;curxref:=xmem[firstxref].xlinkfield{:235};
  1449. footnote(10240);footnote(0);end{:233};{238:}
  1450. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1451. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1452. outbuf[outptr]:=102;if outptr=linelength then breakout;outptr:=outptr+1;
  1453. outbuf[outptr]:=105;end;finishline;flushbuffer(0,false,false);{:238};
  1454. end{:220}{:218};end;begin initialize;
  1455. write(stdout,'This is WEAVE, Version 4.4');
  1456. writeln(stdout,versionstring);{64:}idloc:=10;idfirst:=7;buffer[7]:=97;
  1457. buffer[8]:=110;buffer[9]:=100;curname:=idlookup(28);idfirst:=5;
  1458. buffer[5]:=97;buffer[6]:=114;buffer[7]:=114;buffer[8]:=97;
  1459. buffer[9]:=121;curname:=idlookup(4);idfirst:=5;buffer[5]:=98;
  1460. buffer[6]:=101;buffer[7]:=103;buffer[8]:=105;buffer[9]:=110;
  1461. curname:=idlookup(5);idfirst:=6;buffer[6]:=99;buffer[7]:=97;
  1462. buffer[8]:=115;buffer[9]:=101;curname:=idlookup(6);idfirst:=5;
  1463. buffer[5]:=99;buffer[6]:=111;buffer[7]:=110;buffer[8]:=115;
  1464. buffer[9]:=116;curname:=idlookup(7);idfirst:=7;buffer[7]:=100;
  1465. buffer[8]:=105;buffer[9]:=118;curname:=idlookup(8);idfirst:=8;
  1466. buffer[8]:=100;buffer[9]:=111;curname:=idlookup(9);idfirst:=4;
  1467. buffer[4]:=100;buffer[5]:=111;buffer[6]:=119;buffer[7]:=110;
  1468. buffer[8]:=116;buffer[9]:=111;curname:=idlookup(20);idfirst:=6;
  1469. buffer[6]:=101;buffer[7]:=108;buffer[8]:=115;buffer[9]:=101;
  1470. curname:=idlookup(10);idfirst:=7;buffer[7]:=101;buffer[8]:=110;
  1471. buffer[9]:=100;curname:=idlookup(11);idfirst:=6;buffer[6]:=102;
  1472. buffer[7]:=105;buffer[8]:=108;buffer[9]:=101;curname:=idlookup(4);
  1473. idfirst:=7;buffer[7]:=102;buffer[8]:=111;buffer[9]:=114;
  1474. curname:=idlookup(12);idfirst:=2;buffer[2]:=102;buffer[3]:=117;
  1475. buffer[4]:=110;buffer[5]:=99;buffer[6]:=116;buffer[7]:=105;
  1476. buffer[8]:=111;buffer[9]:=110;curname:=idlookup(17);idfirst:=6;
  1477. buffer[6]:=103;buffer[7]:=111;buffer[8]:=116;buffer[9]:=111;
  1478. curname:=idlookup(13);idfirst:=8;buffer[8]:=105;buffer[9]:=102;
  1479. curname:=idlookup(14);idfirst:=8;buffer[8]:=105;buffer[9]:=110;
  1480. curname:=idlookup(30);idfirst:=5;buffer[5]:=108;buffer[6]:=97;
  1481. buffer[7]:=98;buffer[8]:=101;buffer[9]:=108;curname:=idlookup(7);
  1482. idfirst:=7;buffer[7]:=109;buffer[8]:=111;buffer[9]:=100;
  1483. curname:=idlookup(8);idfirst:=7;buffer[7]:=110;buffer[8]:=105;
  1484. buffer[9]:=108;curname:=idlookup(16);idfirst:=7;buffer[7]:=110;
  1485. buffer[8]:=111;buffer[9]:=116;curname:=idlookup(29);idfirst:=8;
  1486. buffer[8]:=111;buffer[9]:=102;curname:=idlookup(9);idfirst:=8;
  1487. buffer[8]:=111;buffer[9]:=114;curname:=idlookup(55);idfirst:=4;
  1488. buffer[4]:=112;buffer[5]:=97;buffer[6]:=99;buffer[7]:=107;
  1489. buffer[8]:=101;buffer[9]:=100;curname:=idlookup(13);idfirst:=1;
  1490. buffer[1]:=112;buffer[2]:=114;buffer[3]:=111;buffer[4]:=99;
  1491. buffer[5]:=101;buffer[6]:=100;buffer[7]:=117;buffer[8]:=114;
  1492. buffer[9]:=101;curname:=idlookup(17);idfirst:=3;buffer[3]:=112;
  1493. buffer[4]:=114;buffer[5]:=111;buffer[6]:=103;buffer[7]:=114;
  1494. buffer[8]:=97;buffer[9]:=109;curname:=idlookup(17);idfirst:=4;
  1495. buffer[4]:=114;buffer[5]:=101;buffer[6]:=99;buffer[7]:=111;
  1496. buffer[8]:=114;buffer[9]:=100;curname:=idlookup(18);idfirst:=4;
  1497. buffer[4]:=114;buffer[5]:=101;buffer[6]:=112;buffer[7]:=101;
  1498. buffer[8]:=97;buffer[9]:=116;curname:=idlookup(19);idfirst:=7;
  1499. buffer[7]:=115;buffer[8]:=101;buffer[9]:=116;curname:=idlookup(4);
  1500. idfirst:=6;buffer[6]:=116;buffer[7]:=104;buffer[8]:=101;buffer[9]:=110;
  1501. curname:=idlookup(9);idfirst:=8;buffer[8]:=116;buffer[9]:=111;
  1502. curname:=idlookup(20);idfirst:=6;buffer[6]:=116;buffer[7]:=121;
  1503. buffer[8]:=112;buffer[9]:=101;curname:=idlookup(7);idfirst:=5;
  1504. buffer[5]:=117;buffer[6]:=110;buffer[7]:=116;buffer[8]:=105;
  1505. buffer[9]:=108;curname:=idlookup(21);idfirst:=7;buffer[7]:=118;
  1506. buffer[8]:=97;buffer[9]:=114;curname:=idlookup(22);idfirst:=5;
  1507. buffer[5]:=119;buffer[6]:=104;buffer[7]:=105;buffer[8]:=108;
  1508. buffer[9]:=101;curname:=idlookup(12);idfirst:=6;buffer[6]:=119;
  1509. buffer[7]:=105;buffer[8]:=116;buffer[9]:=104;curname:=idlookup(12);
  1510. idfirst:=3;buffer[3]:=120;buffer[4]:=99;buffer[5]:=108;buffer[6]:=97;
  1511. buffer[7]:=117;buffer[8]:=115;buffer[9]:=101;curname:=idlookup(23);{:64}
  1512. ;PhaseI;PhaseII;{239:}if noxref then begin finishline;
  1513. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1514. outbuf[outptr]:=92;end;begin if outptr=linelength then breakout;
  1515. outptr:=outptr+1;outbuf[outptr]:=118;if outptr=linelength then breakout;
  1516. outptr:=outptr+1;outbuf[outptr]:=102;if outptr=linelength then breakout;
  1517. outptr:=outptr+1;outbuf[outptr]:=105;if outptr=linelength then breakout;
  1518. outptr:=outptr+1;outbuf[outptr]:=108;if outptr=linelength then breakout;
  1519. outptr:=outptr+1;outbuf[outptr]:=108;end;
  1520. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1521. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1522. outbuf[outptr]:=101;if outptr=linelength then breakout;outptr:=outptr+1;
  1523. outbuf[outptr]:=110;if outptr=linelength then breakout;outptr:=outptr+1;
  1524. outbuf[outptr]:=100;end;finishline;end else begin phasethree:=true;
  1525. begin writeln(stdout);write(stdout,'Writing the index...');end;
  1526. if changeexists then begin finishline;{241:}begin kmodule:=1;
  1527. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1528. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1529. outbuf[outptr]:=99;if outptr=linelength then breakout;outptr:=outptr+1;
  1530. outbuf[outptr]:=104;if outptr=linelength then breakout;outptr:=outptr+1;
  1531. outbuf[outptr]:=32;end;
  1532. while kmodule<modulecount do begin if changedmodule[kmodule]then begin
  1533. outmod(kmodule);begin if outptr=linelength then breakout;
  1534. outptr:=outptr+1;outbuf[outptr]:=44;if outptr=linelength then breakout;
  1535. outptr:=outptr+1;outbuf[outptr]:=32;end;end;kmodule:=kmodule+1;end;
  1536. outmod(kmodule);begin if outptr=linelength then breakout;
  1537. outptr:=outptr+1;outbuf[outptr]:=46;end;end{:241};end;finishline;
  1538. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1539. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1540. outbuf[outptr]:=105;if outptr=linelength then breakout;outptr:=outptr+1;
  1541. outbuf[outptr]:=110;if outptr=linelength then breakout;outptr:=outptr+1;
  1542. outbuf[outptr]:=120;end;finishline;{243:}
  1543. for c:=0 to 255 do bucket[c]:=0;
  1544. for h:=0 to hashsize-1 do begin nextname:=hash[h];
  1545. while nextname<>0 do begin curname:=nextname;nextname:=link[curname];
  1546. if xref[curname]<>0 then begin c:=bytemem[curname mod 2,bytestart[
  1547. curname]];if(c<=90)and(c>=65)then c:=c+32;blink[curname]:=bucket[c];
  1548. bucket[c]:=curname;end;end;end{:243};{250:}scrapptr:=0;unbucket(1);
  1549. while scrapptr>0 do begin curdepth:=cat[scrapptr];
  1550. if(blink[trans[scrapptr]]=0)or(curdepth=255)then{252:}
  1551. begin curname:=trans[scrapptr];{if troubleshooting then debughelp;}
  1552. repeat begin if outptr=linelength then breakout;outptr:=outptr+1;
  1553. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1554. outbuf[outptr]:=58;end;{253:}
  1555. case ilk[curname]of 0:if bytestart[curname+2]-bytestart[curname]=1 then
  1556. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1557. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1558. outbuf[outptr]:=124;end else begin if outptr=linelength then breakout;
  1559. outptr:=outptr+1;outbuf[outptr]:=92;if outptr=linelength then breakout;
  1560. outptr:=outptr+1;outbuf[outptr]:=92;end;1:;
  1561. 2:begin if outptr=linelength then breakout;outptr:=outptr+1;
  1562. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1563. outbuf[outptr]:=57;end;3:begin if outptr=linelength then breakout;
  1564. outptr:=outptr+1;outbuf[outptr]:=92;if outptr=linelength then breakout;
  1565. outptr:=outptr+1;outbuf[outptr]:=46;end;
  1566. others:begin if outptr=linelength then breakout;outptr:=outptr+1;
  1567. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1568. outbuf[outptr]:=38;end end;outname(curname){:253};{254:}{255:}
  1569. thisxref:=xref[curname];curxref:=0;
  1570. repeat nextxref:=xmem[thisxref].xlinkfield;
  1571. xmem[thisxref].xlinkfield:=curxref;curxref:=thisxref;thisxref:=nextxref;
  1572. until thisxref=0{:255};repeat begin if outptr=linelength then breakout;
  1573. outptr:=outptr+1;outbuf[outptr]:=44;if outptr=linelength then breakout;
  1574. outptr:=outptr+1;outbuf[outptr]:=32;end;curval:=xmem[curxref].numfield;
  1575. if curval<10240 then outmod(curval)else begin begin if outptr=linelength
  1576. then breakout;outptr:=outptr+1;outbuf[outptr]:=92;
  1577. if outptr=linelength then breakout;outptr:=outptr+1;outbuf[outptr]:=91;
  1578. end;outmod(curval-10240);begin if outptr=linelength then breakout;
  1579. outptr:=outptr+1;outbuf[outptr]:=93;end;end;
  1580. curxref:=xmem[curxref].xlinkfield;until curxref=0;
  1581. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1582. outbuf[outptr]:=46;end;finishline{:254};curname:=blink[curname];
  1583. until curname=0;scrapptr:=scrapptr-1;end{:252}else{251:}
  1584. begin nextname:=trans[scrapptr];repeat curname:=nextname;
  1585. nextname:=blink[curname];curbyte:=bytestart[curname]+curdepth;
  1586. curbank:=curname mod 2;
  1587. if curbyte=bytestart[curname+2]then c:=0 else begin c:=bytemem[curbank,
  1588. curbyte];if(c<=90)and(c>=65)then c:=c+32;end;blink[curname]:=bucket[c];
  1589. bucket[c]:=curname;until nextname=0;scrapptr:=scrapptr-1;
  1590. unbucket(curdepth+1);end{:251};end{:250};
  1591. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1592. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1593. outbuf[outptr]:=102;if outptr=linelength then breakout;outptr:=outptr+1;
  1594. outbuf[outptr]:=105;if outptr=linelength then breakout;outptr:=outptr+1;
  1595. outbuf[outptr]:=110;end;finishline;{257:}modprint(ilk[0]){:257};
  1596. begin if outptr=linelength then breakout;outptr:=outptr+1;
  1597. outbuf[outptr]:=92;if outptr=linelength then breakout;outptr:=outptr+1;
  1598. outbuf[outptr]:=99;if outptr=linelength then breakout;outptr:=outptr+1;
  1599. outbuf[outptr]:=111;if outptr=linelength then breakout;outptr:=outptr+1;
  1600. outbuf[outptr]:=110;end;finishline;end;write(stdout,'Done.');{:239};
  1601. {85:}
  1602. if changelimit<>0 then begin for ii:=0 to changelimit do buffer[ii]:=
  1603. changebuffer[ii];limit:=changelimit;changing:=true;line:=otherline;
  1604. loc:=changelimit;begin if not phaseone then begin writeln(stdout);
  1605. write(stdout,'! Change file entry did not match');error;end;end;end{:85}
  1606. ;jumpout;end.{:261}
  1607.