{2:}{4:}{$C-,A+,D-}{[$C+,D+]}{:4} PROGRAM WEAVE(WEB_FILE,CHANGE_FILE,TEX_FILE);LABEL 9999;CONST{8:} MAX_BYTES=45000;MAX_NAMES=5000;MAX_MODULES=2000;HASH_SIZE=353; BUF_SIZE=5000;LONGEST_NAME=400;LONG_BUF_SIZE=5400;LINE_LENGTH=80; MAX_REFS=25000;MAX_TOKS=20000;MAX_TEXTS=2000;MAX_SCRAPS=1000; STACK_SIZE=200;{:8}TYPE{11:}ASCII_CODE=0..127;{:11}{12:} TEXT_FILE=PACKED FILE OF CHAR;{:12}{36:}EIGHT_BITS=0..255; SIXTEEN_BITS=0..65535;{:36}{38:}NAME_POINTER=0..MAX_NAMES;{:38}{47:} XREF_NUMBER=0..MAX_REFS;{:47}{48:} XMEM_RECORD=PACKED RECORD NUM_FIELD:SIXTEEN_BITS; XLINK_FIELD:SIXTEEN_BITS;END;{:48}{53:}TEXT_POINTER=0..MAX_TEXTS;{:53} {202:}MODE=0..1;OUTPUT_STATE=RECORD END_FIELD:SIXTEEN_BITS; TOK_FIELD:SIXTEEN_BITS;MODE_FIELD:MODE;END;{:202}VAR{9:}HISTORY:0..3; {:9}{13:}XORD:ARRAY[CHAR]OF ASCII_CODE;XCHR:ARRAY[ASCII_CODE]OF CHAR; {:13}{20:}TERM_OUT:TEXT_FILE;{:20}{23:}WEB_FILE:TEXT_FILE; CHANGE_FILE:TEXT_FILE;{:23}{25:}TEX_FILE:TEXT_FILE;{:25}{27:} BUFFER:ARRAY[0..LONG_BUF_SIZE]OF ASCII_CODE;{:27}{29:}PHASE_ONE:BOOLEAN; PHASE_THREE:BOOLEAN;{:29}{37:} BYTE_MEM:PACKED ARRAY[0..1,0..MAX_BYTES]OF ASCII_CODE; BYTE_START:ARRAY[0..MAX_NAMES]OF SIXTEEN_BITS; LINK:ARRAY[0..MAX_NAMES]OF SIXTEEN_BITS; ILK:ARRAY[0..MAX_NAMES]OF SIXTEEN_BITS; XREF:ARRAY[0..MAX_NAMES]OF SIXTEEN_BITS;{:37}{39:}NAME_PTR:NAME_POINTER; BYTE_PTR:ARRAY[0..1]OF 0..MAX_BYTES;{:39}{45:} MODULE_COUNT:0..MAX_MODULES; CHANGED_MODULE:PACKED ARRAY[0..MAX_MODULES]OF BOOLEAN; CHANGE_EXISTS:BOOLEAN;{:45}{49:}XMEM:ARRAY[XREF_NUMBER]OF XMEM_RECORD; XREF_PTR:XREF_NUMBER;XREF_SWITCH,MOD_XREF_SWITCH:0..10240;{:49}{54:} TOK_MEM:PACKED ARRAY[0..MAX_TOKS]OF SIXTEEN_BITS; TOK_START:ARRAY[TEXT_POINTER]OF SIXTEEN_BITS;TEXT_PTR:TEXT_POINTER; TOK_PTR:0..MAX_TOKS;{MAX_TOK_PTR,MAX_TXT_PTR:0..MAX_TOKS;}{:54}{56:} ID_FIRST:0..LONG_BUF_SIZE;ID_LOC:0..LONG_BUF_SIZE; HASH:ARRAY[0..HASH_SIZE]OF SIXTEEN_BITS;{:56}{64:}CUR_NAME:NAME_POINTER; {:64}{66:}MOD_TEXT:ARRAY[0..LONGEST_NAME]OF ASCII_CODE;{:66}{72:} LINE:INTEGER;OTHER_LINE:INTEGER;TEMP_LINE:INTEGER; LIMIT:0..LONG_BUF_SIZE;LOC:0..LONG_BUF_SIZE;INPUT_HAS_ENDED:BOOLEAN; CHANGING:BOOLEAN;{:72}{74:} CHANGE_BUFFER:ARRAY[0..BUF_SIZE]OF ASCII_CODE;CHANGE_LIMIT:0..BUF_SIZE; {:74}{94:}CUR_MODULE:NAME_POINTER;SCANNING_HEX:BOOLEAN;{:94}{109:} NEXT_CONTROL:EIGHT_BITS;{:109}{115:}LHS,RHS:NAME_POINTER;{:115}{119:} CUR_XREF:XREF_NUMBER;{:119}{122:} OUT_BUF:ARRAY[0..LINE_LENGTH]OF ASCII_CODE;OUT_PTR:0..LINE_LENGTH; OUT_LINE:INTEGER;{:122}{130:}DIG:ARRAY[0..4]OF 0..9;{:130}{145:} CAT:ARRAY[0..MAX_SCRAPS]OF EIGHT_BITS; TRANS:ARRAY[0..MAX_SCRAPS]OF 0..10239;PP:0..MAX_SCRAPS; SCRAP_BASE:0..MAX_SCRAPS;SCRAP_PTR:0..MAX_SCRAPS;LO_PTR:0..MAX_SCRAPS; HI_PTR:0..MAX_SCRAPS;{MAX_SCR_PTR:0..MAX_SCRAPS;}{:145}{178:} {TRACING:0..2;}{:178}{203:}CUR_STATE:OUTPUT_STATE; STACK:ARRAY[1..STACK_SIZE]OF OUTPUT_STATE;STACK_PTR:0..STACK_SIZE; {MAX_STACK_PTR:0..STACK_SIZE;}{:203}{220:}SAVE_LINE:INTEGER; SAVE_PLACE:SIXTEEN_BITS;{:220}{230:}THIS_MODULE:NAME_POINTER;{:230} {235:}NEXT_XREF,THIS_XREF,FIRST_XREF,MID_XREF:XREF_NUMBER;{:235}{241:} K_MODULE:0..MAX_MODULES;{:241}{243:} BUCKET:ARRAY[ASCII_CODE]OF NAME_POINTER;NEXT_NAME:NAME_POINTER; C:ASCII_CODE;H:0..HASH_SIZE;BLINK:ARRAY[0..MAX_NAMES]OF SIXTEEN_BITS; {:243}{245:}CUR_DEPTH:EIGHT_BITS;CUR_BYTE:0..MAX_BYTES;CUR_BANK:0..1; CUR_VAL:SIXTEEN_BITS;{MAX_SORT_PTR:0..MAX_SCRAPS;}{:245}{247:} COLLATE:ARRAY[0..100]OF ASCII_CODE;{:247}{259:} {TROUBLE_SHOOTING:BOOLEAN;DDT:SIXTEEN_BITS;DD:SIXTEEN_BITS; DEBUG_CYCLE:INTEGER;DEBUG_SKIPPED:INTEGER;TERM_IN:TEXT_FILE;}{:259} {265:}PROCEDURE TTY_REWRITE(VAR F:TEXT_FILE);EXTERNAL; PROCEDURE FILE_RESET(VAR F:TEXT_FILE;EXT:ALFA);EXTERNAL; PROCEDURE FILE_REWRITE(VAR F:TEXT_FILE;EXT:ALFA);EXTERNAL; PROCEDURE FILE_CLOSE(VAR F:TEXT_FILE);EXTERNAL; FUNCTION FILE_GET_POS(VAR F:TEXT_FILE):INTEGER;EXTERNAL;{:265}{30:} {PROCEDURE DEBUG_HELP;FORWARD;}{:30}{31:}PROCEDURE ERROR; VAR K,L:0..LONG_BUF_SIZE;BEGIN{32:} BEGIN IF LOC>=LIMIT THEN L:=LIMIT ELSE L:=LOC; IF CHANGING THEN WRITELN(TERM_OUT,'. (change file pos:',FILE_GET_POS( CHANGE_FILE)-(LIMIT-L)-2:1,')')ELSE WRITELN(TERM_OUT,'. (pos:', FILE_GET_POS(WEB_FILE)-(LIMIT-L)-2:1,')'); FOR K:=1 TO L DO IF BUFFER[K-1]=9 THEN WRITE(TERM_OUT,' ')ELSE WRITE( TERM_OUT,XCHR[BUFFER[K-1]]);WRITELN(TERM_OUT); FOR K:=1 TO L DO WRITE(TERM_OUT,' '); FOR K:=L+1 TO LIMIT DO WRITE(TERM_OUT,XCHR[BUFFER[K-1]]); IF BUFFER[LIMIT]=124 THEN WRITE(TERM_OUT,XCHR[124]);WRITE(TERM_OUT,' '); END{:32};BREAK(TERM_OUT);HISTORY:=2;{DEBUG_SKIPPED:=DEBUG_CYCLE; DEBUG_HELP;}END;{:31}{33:}PROCEDURE JUMP_OUT;BEGIN GOTO 9999;END;{:33} PROCEDURE INITIALIZE;VAR{16:}I:0..255;{:16}{40:}WI:0..1;{:40}{57:} H:0..HASH_SIZE;{:57}{248:}C:ASCII_CODE;{:248}BEGIN{10:}HISTORY:=0;{:10} {14:}XCHR[32]:=' ';XCHR[33]:='!';XCHR[34]:='"';XCHR[35]:='#'; XCHR[36]:='$';XCHR[37]:='%';XCHR[38]:='&';XCHR[39]:='''';XCHR[40]:='('; XCHR[41]:=')';XCHR[42]:='*';XCHR[43]:='+';XCHR[44]:=',';XCHR[45]:='-'; XCHR[46]:='.';XCHR[47]:='/';XCHR[48]:='0';XCHR[49]:='1';XCHR[50]:='2'; XCHR[51]:='3';XCHR[52]:='4';XCHR[53]:='5';XCHR[54]:='6';XCHR[55]:='7'; XCHR[56]:='8';XCHR[57]:='9';XCHR[58]:=':';XCHR[59]:=';';XCHR[60]:='<'; XCHR[61]:='=';XCHR[62]:='>';XCHR[63]:='?';XCHR[64]:='@';XCHR[65]:='A'; XCHR[66]:='B';XCHR[67]:='C';XCHR[68]:='D';XCHR[69]:='E';XCHR[70]:='F'; XCHR[71]:='G';XCHR[72]:='H';XCHR[73]:='I';XCHR[74]:='J';XCHR[75]:='K'; XCHR[76]:='L';XCHR[77]:='M';XCHR[78]:='N';XCHR[79]:='O';XCHR[80]:='P'; XCHR[81]:='Q';XCHR[82]:='R';XCHR[83]:='S';XCHR[84]:='T';XCHR[85]:='U'; XCHR[86]:='V';XCHR[87]:='W';XCHR[88]:='X';XCHR[89]:='Y';XCHR[90]:='Z'; XCHR[91]:='[';XCHR[92]:='\';XCHR[93]:=']';XCHR[94]:='^';XCHR[95]:='_'; XCHR[96]:='`';XCHR[97]:='a';XCHR[98]:='b';XCHR[99]:='c';XCHR[100]:='d'; XCHR[101]:='e';XCHR[102]:='f';XCHR[103]:='g';XCHR[104]:='h'; XCHR[105]:='i';XCHR[106]:='j';XCHR[107]:='k';XCHR[108]:='l'; XCHR[109]:='m';XCHR[110]:='n';XCHR[111]:='o';XCHR[112]:='p'; XCHR[113]:='q';XCHR[114]:='r';XCHR[115]:='s';XCHR[116]:='t'; XCHR[117]:='u';XCHR[118]:='v';XCHR[119]:='w';XCHR[120]:='x'; XCHR[121]:='y';XCHR[122]:='z';XCHR[123]:='{';XCHR[124]:='|'; XCHR[125]:='}';XCHR[126]:='~';XCHR[0]:=' ';XCHR[127]:=' ';{:14}{17:} FOR I:=1 TO 31 DO XCHR[I]:=CHR(I);{:17}{18:} FOR I:=0 TO 255 DO XORD[CHR(I)]:=32;FOR I:=1 TO 126 DO XORD[XCHR[I]]:=I; {:18}{21:}TTY_REWRITE(TERM_OUT);{:21}{26:} FILE_REWRITE(TEX_FILE,'tex ');{:26}{41:} FOR WI:=0 TO 1 DO BEGIN BYTE_START[WI]:=0;BYTE_PTR[WI]:=0;END; BYTE_START[2]:=0;NAME_PTR:=1;{:41}{43:}ILK[0]:=0;{:43}{50:}XREF_PTR:=0; XREF_SWITCH:=0;MOD_XREF_SWITCH:=0;XMEM[0].NUM_FIELD:=0;XREF[0]:=0;{:50} {55:}TOK_PTR:=1;TEXT_PTR:=1;TOK_START[0]:=1;TOK_START[1]:=1; {MAX_TOK_PTR:=1;MAX_TXT_PTR:=1;}{:55}{58:} FOR H:=0 TO HASH_SIZE-1 DO HASH[H]:=0;{:58}{95:}SCANNING_HEX:=FALSE; {:95}{103:}MOD_TEXT[0]:=32;{:103}{125:}OUT_PTR:=1;OUT_LINE:=1; OUT_BUF[1]:=99;WRITE(TEX_FILE,'\input webma');{:125}{127:} OUT_BUF[0]:=92;{:127}{146:}SCRAP_BASE:=1;SCRAP_PTR:=0;{MAX_SCR_PTR:=0;} {:146}{204:}{MAX_STACK_PTR:=0;}{:204}{246:}{MAX_SORT_PTR:=0;}{:246} {249:}COLLATE[0]:=0;COLLATE[1]:=32;FOR C:=1 TO 31 DO COLLATE[C+1]:=C; FOR C:=33 TO 47 DO COLLATE[C]:=C;FOR C:=58 TO 64 DO COLLATE[C-10]:=C; FOR C:=91 TO 94 DO COLLATE[C-36]:=C;COLLATE[59]:=96; FOR C:=123 TO 126 DO COLLATE[C-63]:=C;COLLATE[64]:=95; FOR C:=97 TO 122 DO COLLATE[C-32]:=C; FOR C:=48 TO 57 DO COLLATE[C+43]:=C;{:249}{260:}{TROUBLE_SHOOTING:=TRUE; DEBUG_CYCLE:=1;DEBUG_SKIPPED:=0;TRACING:=0;TROUBLE_SHOOTING:=FALSE; DEBUG_CYCLE:=99999;RESET(TERM_IN,'TTY:','/I');}{:260}END;{:2}{24:} PROCEDURE OPEN_INPUT;BEGIN FILE_RESET(WEB_FILE,'web '); FILE_RESET(CHANGE_FILE,'changes ');END;{:24}{28:} FUNCTION INPUT_LN(VAR F:TEXT_FILE):BOOLEAN;VAR FINAL_LIMIT:0..BUF_SIZE; BEGIN LIMIT:=0;FINAL_LIMIT:=0; IF EOF(F)THEN INPUT_LN:=FALSE ELSE BEGIN WHILE NOT EOLN(F)DO BEGIN BUFFER[LIMIT]:=XORD[F^];GET(F);LIMIT:=LIMIT+1; IF BUFFER[LIMIT-1]<>32 THEN FINAL_LIMIT:=LIMIT; IF LIMIT=BUF_SIZE THEN BEGIN WHILE NOT EOLN(F)DO GET(F);LIMIT:=LIMIT-1; BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! Input line too long');END; LOC:=0;ERROR;END;END;READLN(F);LIMIT:=FINAL_LIMIT;INPUT_LN:=TRUE;END; END;{:28}{44:}PROCEDURE PRINT_ID(P:NAME_POINTER);VAR K:0..MAX_BYTES; W:0..1; BEGIN IF P>=NAME_PTR THEN WRITE(TERM_OUT,'IMPOSSIBLE')ELSE BEGIN W:=P MOD 2; FOR K:=BYTE_START[P]TO BYTE_START[P+2]-1 DO WRITE(TERM_OUT,XCHR[BYTE_MEM [W,K]]);END;END;{:44}{51:}PROCEDURE NEW_XREF(P:NAME_POINTER);LABEL 10; VAR Q:XREF_NUMBER;M,N:SIXTEEN_BITS; BEGIN IF((ILK[P]>3)OR(BYTE_START[P]+1=BYTE_START[P+2]))AND(XREF_SWITCH=0 )THEN GOTO 10;M:=MODULE_COUNT+XREF_SWITCH;XREF_SWITCH:=0;Q:=XREF[P]; IF Q>0 THEN BEGIN N:=XMEM[Q].NUM_FIELD; IF(N=M)OR(N=M+10240)THEN GOTO 10 ELSE IF M=N+10240 THEN BEGIN XMEM[Q]. NUM_FIELD:=M;GOTO 10;END;END; IF XREF_PTR=MAX_REFS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','cross reference',' capacity exceeded'); ERROR;HISTORY:=3;JUMP_OUT;END ELSE BEGIN XREF_PTR:=XREF_PTR+1; XMEM[XREF_PTR].NUM_FIELD:=M;END;XMEM[XREF_PTR].XLINK_FIELD:=Q; XREF[P]:=XREF_PTR;10:END;{:51}{52:} PROCEDURE NEW_MOD_XREF(P:NAME_POINTER);VAR Q,R:XREF_NUMBER; BEGIN Q:=XREF[P];R:=0; IF Q>0 THEN BEGIN IF MOD_XREF_SWITCH=0 THEN WHILE XMEM[Q].NUM_FIELD>= 10240 DO BEGIN R:=Q;Q:=XMEM[Q].XLINK_FIELD; END ELSE IF XMEM[Q].NUM_FIELD>=10240 THEN BEGIN R:=Q; Q:=XMEM[Q].XLINK_FIELD;END;END; IF XREF_PTR=MAX_REFS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','cross reference',' capacity exceeded'); ERROR;HISTORY:=3;JUMP_OUT;END ELSE BEGIN XREF_PTR:=XREF_PTR+1; XMEM[XREF_PTR].NUM_FIELD:=MODULE_COUNT+MOD_XREF_SWITCH;END; XMEM[XREF_PTR].XLINK_FIELD:=Q;MOD_XREF_SWITCH:=0; IF R=0 THEN XREF[P]:=XREF_PTR ELSE XMEM[R].XLINK_FIELD:=XREF_PTR;END; {:52}{59:}FUNCTION ID_LOOKUP(T:EIGHT_BITS):NAME_POINTER;LABEL 31; VAR I:0..LONG_BUF_SIZE;H:0..HASH_SIZE;K:0..MAX_BYTES;W:0..1; L:0..LONG_BUF_SIZE;P:NAME_POINTER;BEGIN L:=ID_LOC-ID_FIRST;{60:} H:=BUFFER[ID_FIRST];I:=ID_FIRST+1; WHILE I0 DO BEGIN IF(BYTE_START[P+2]-BYTE_START[P]=L)AND((ILK[P]=T)OR( (T=0)AND(ILK[P]>3)))THEN{62:}BEGIN I:=ID_FIRST;K:=BYTE_START[P]; W:=P MOD 2;WHILE(IMAX_BYTES THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','byte memory',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END; IF NAME_PTR+2>MAX_NAMES THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','name',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;I:=ID_FIRST;K:=BYTE_PTR[W]; WHILE I0 DO BEGIN{69:} BEGIN K:=BYTE_START[P];W:=P MOD 2;C:=1;J:=1; WHILE(KL THEN C:=1 ELSE C:=4 ELSE IF J>L THEN C:= 3 ELSE IF MOD_TEXT[J]MAX_BYTES THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','byte memory',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END; IF NAME_PTR>MAX_NAMES-2 THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','name',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;P:=NAME_PTR; IF C=0 THEN LINK[Q]:=P ELSE ILK[Q]:=P;LINK[P]:=0;ILK[P]:=0;XREF[P]:=0; C:=1;FOR J:=1 TO L DO BYTE_MEM[W,K+J-1]:=MOD_TEXT[J];BYTE_PTR[W]:=K+L; BYTE_START[NAME_PTR+2]:=K+L;NAME_PTR:=NAME_PTR+1;{:68}; 31:IF C<>1 THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT );WRITE(TERM_OUT,'! Incompatible section names');ERROR;END;END;P:=0;END; MOD_LOOKUP:=P;END;{:67}{70:} FUNCTION PREFIX_LOOKUP(L:SIXTEEN_BITS):NAME_POINTER;VAR C:0..4; COUNT:0..MAX_NAMES;J:0..LONGEST_NAME;K:0..MAX_BYTES;W:0..1; P:NAME_POINTER;Q:NAME_POINTER;R:NAME_POINTER;BEGIN Q:=0;P:=ILK[0]; COUNT:=0;R:=0;WHILE P<>0 DO BEGIN{69:}BEGIN K:=BYTE_START[P];W:=P MOD 2; C:=1;J:=1; WHILE(KL THEN C:=1 ELSE C:=4 ELSE IF J>L THEN C:= 3 ELSE IF MOD_TEXT[J]1 THEN IF COUNT=0 THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! Name does not match');ERROR;END; END ELSE BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Ambiguous prefix');ERROR;END;END;PREFIX_LOOKUP:=R;END; {:70}{75:}FUNCTION LINES_DONT_MATCH:BOOLEAN;LABEL 10;VAR K:0..BUF_SIZE; BEGIN LINES_DONT_MATCH:=TRUE;IF CHANGE_LIMIT<>LIMIT THEN GOTO 10; IF LIMIT>0 THEN FOR K:=0 TO LIMIT-1 DO IF CHANGE_BUFFER[K]<>BUFFER[K] THEN GOTO 10;LINES_DONT_MATCH:=FALSE;10:END;{:75}{76:} PROCEDURE PRIME_THE_CHANGE_BUFFER;LABEL 22,30,10;VAR K:0..BUF_SIZE; BEGIN CHANGE_LIMIT:=0;{77:}WHILE TRUE DO BEGIN LINE:=LINE+1; IF NOT INPUT_LN(CHANGE_FILE)THEN GOTO 10;IF LIMIT<2 THEN GOTO 22; IF BUFFER[0]<>64 THEN GOTO 22; IF(BUFFER[1]>=88)AND(BUFFER[1]<=90)THEN BUFFER[1]:=BUFFER[1]+32; IF BUFFER[1]=120 THEN GOTO 30; IF(BUFFER[1]=121)OR(BUFFER[1]=122)THEN BEGIN LOC:=2; BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Where is the matching @x?');ERROR;END;END;END;22:END; 30:{:77};{78:}REPEAT LINE:=LINE+1; IF NOT INPUT_LN(CHANGE_FILE)THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! Change file ended after @x');ERROR; END;END;GOTO 10;END;UNTIL LIMIT>0;{:78};{79:}BEGIN CHANGE_LIMIT:=LIMIT; FOR K:=0 TO LIMIT DO CHANGE_BUFFER[K]:=BUFFER[K];END{:79};10:END;{:76} {80:}PROCEDURE CHECK_CHANGE;LABEL 10;VAR N:INTEGER;K:0..BUF_SIZE; BEGIN IF LINES_DONT_MATCH THEN GOTO 10;N:=0; WHILE TRUE DO BEGIN CHANGING:=NOT CHANGING;TEMP_LINE:=OTHER_LINE; OTHER_LINE:=LINE;LINE:=TEMP_LINE;LINE:=LINE+1; IF NOT INPUT_LN(CHANGE_FILE)THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! Change file ended before @y');ERROR; END;END;CHANGE_LIMIT:=0;CHANGING:=NOT CHANGING;TEMP_LINE:=OTHER_LINE; OTHER_LINE:=LINE;LINE:=TEMP_LINE;GOTO 10;END;{81:} IF LIMIT>1 THEN IF BUFFER[0]=64 THEN BEGIN IF(BUFFER[1]>=88)AND(BUFFER[1 ]<=90)THEN BUFFER[1]:=BUFFER[1]+32; IF(BUFFER[1]=120)OR(BUFFER[1]=122)THEN BEGIN LOC:=2; BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Where is the matching @y?');ERROR;END;END; END ELSE IF BUFFER[1]=121 THEN BEGIN IF N>0 THEN BEGIN LOC:=2; BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Hmm... ',N:1,' of the preceding lines failed to match' );ERROR;END;END;END;GOTO 10;END;END{:81};{79:}BEGIN CHANGE_LIMIT:=LIMIT; FOR K:=0 TO LIMIT DO CHANGE_BUFFER[K]:=BUFFER[K];END{:79}; CHANGING:=NOT CHANGING;TEMP_LINE:=OTHER_LINE;OTHER_LINE:=LINE; LINE:=TEMP_LINE;LINE:=LINE+1; IF NOT INPUT_LN(WEB_FILE)THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! WEB file ended during a change'); ERROR;END;END;INPUT_HAS_ENDED:=TRUE;GOTO 10;END; IF LINES_DONT_MATCH THEN N:=N+1;END;10:END;{:80}{82:} PROCEDURE RESET_INPUT;BEGIN OPEN_INPUT;LINE:=0;OTHER_LINE:=0; CHANGING:=TRUE;PRIME_THE_CHANGE_BUFFER;CHANGING:=NOT CHANGING; TEMP_LINE:=OTHER_LINE;OTHER_LINE:=LINE;LINE:=TEMP_LINE;LIMIT:=0;LOC:=1; BUFFER[0]:=32;INPUT_HAS_ENDED:=FALSE;END;{:82}{83:}PROCEDURE GET_LINE; LABEL 20; BEGIN 20:IF CHANGING THEN CHANGED_MODULE[MODULE_COUNT]:=TRUE ELSE{84:} BEGIN LINE:=LINE+1; IF NOT INPUT_LN(WEB_FILE)THEN INPUT_HAS_ENDED:=TRUE ELSE IF LIMIT= CHANGE_LIMIT THEN IF BUFFER[0]=CHANGE_BUFFER[0]THEN IF CHANGE_LIMIT>0 THEN CHECK_CHANGE;END{:84};IF CHANGING THEN BEGIN{85:} BEGIN LINE:=LINE+1; IF NOT INPUT_LN(CHANGE_FILE)THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! Change file ended without @z'); ERROR;END;END;BUFFER[0]:=64;BUFFER[1]:=122;LIMIT:=2;END; IF LIMIT>1 THEN IF BUFFER[0]=64 THEN BEGIN IF(BUFFER[1]>=88)AND(BUFFER[1 ]<=90)THEN BUFFER[1]:=BUFFER[1]+32; IF(BUFFER[1]=120)OR(BUFFER[1]=121)THEN BEGIN LOC:=2; BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Where is the matching @z?');ERROR;END;END; END ELSE IF BUFFER[1]=122 THEN BEGIN PRIME_THE_CHANGE_BUFFER; CHANGING:=NOT CHANGING;TEMP_LINE:=OTHER_LINE;OTHER_LINE:=LINE; LINE:=TEMP_LINE;END;END;END{:85}; IF NOT CHANGING THEN BEGIN CHANGED_MODULE[MODULE_COUNT]:=TRUE;GOTO 20; END;END;LOC:=0;BUFFER[LIMIT]:=32;END;{:83}{88:} FUNCTION CONTROL_CODE(C:ASCII_CODE):EIGHT_BITS; BEGIN CASE C OF 64:CONTROL_CODE:=64;39:CONTROL_CODE:=12; 34:CONTROL_CODE:=13;36:CONTROL_CODE:=135;32,9,42:CONTROL_CODE:=147; 61:CONTROL_CODE:=2;92:CONTROL_CODE:=3;68,100:CONTROL_CODE:=144; 70,102:CONTROL_CODE:=143;123:CONTROL_CODE:=9;125:CONTROL_CODE:=10; 80,112:CONTROL_CODE:=145;38:CONTROL_CODE:=136;60:CONTROL_CODE:=146; 62:BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Extra @>');ERROR;END;END;CONTROL_CODE:=0;END; 84,116:CONTROL_CODE:=134;33:CONTROL_CODE:=126;63:CONTROL_CODE:=125; 94:CONTROL_CODE:=131;58:CONTROL_CODE:=132;46:CONTROL_CODE:=133; 44:CONTROL_CODE:=137;124:CONTROL_CODE:=138;47:CONTROL_CODE:=139; 35:CONTROL_CODE:=140;43:CONTROL_CODE:=141;59:CONTROL_CODE:=142;{89:} {48,49,50:BEGIN TRACING:=C-48;CONTROL_CODE:=0;END;}{:89} OTHERS:BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Unknown control code');ERROR;END;END;CONTROL_CODE:=0; END END;END;{:88}{90:}PROCEDURE SKIP_LIMBO;LABEL 10;VAR C:ASCII_CODE; BEGIN WHILE TRUE DO IF LOC>LIMIT THEN BEGIN GET_LINE; IF INPUT_HAS_ENDED THEN GOTO 10;END ELSE BEGIN BUFFER[LIMIT+1]:=64; WHILE BUFFER[LOC]<>64 DO LOC:=LOC+1;IF LOC<=LIMIT THEN BEGIN LOC:=LOC+2; C:=BUFFER[LOC-1];IF(C=32)OR(C=9)OR(C=42)THEN GOTO 10;END;END;10:END; {:90}{91:}FUNCTION SKIP_TEX:EIGHT_BITS;LABEL 30;VAR C:EIGHT_BITS; BEGIN WHILE TRUE DO BEGIN IF LOC>LIMIT THEN BEGIN GET_LINE; IF INPUT_HAS_ENDED THEN BEGIN C:=147;GOTO 30;END;END; BUFFER[LIMIT+1]:=64;REPEAT C:=BUFFER[LOC];LOC:=LOC+1; IF C=124 THEN GOTO 30;UNTIL C=64; IF LOC<=LIMIT THEN BEGIN C:=CONTROL_CODE(BUFFER[LOC]);LOC:=LOC+1; GOTO 30;END;END;30:SKIP_TEX:=C;END;{:91}{92:} FUNCTION SKIP_COMMENT(BAL:EIGHT_BITS):EIGHT_BITS;LABEL 30; VAR C:ASCII_CODE; BEGIN WHILE TRUE DO BEGIN IF LOC>LIMIT THEN BEGIN GET_LINE; IF INPUT_HAS_ENDED THEN BEGIN BAL:=0;GOTO 30;END;END;C:=BUFFER[LOC]; LOC:=LOC+1;IF C=124 THEN GOTO 30;{93:}IF C=64 THEN BEGIN C:=BUFFER[LOC]; IF(C<>32)AND(C<>9)AND(C<>42)THEN LOC:=LOC+1 ELSE BEGIN LOC:=LOC-1; BAL:=0;GOTO 30; END END ELSE IF(C=92)AND(BUFFER[LOC]<>64)THEN LOC:=LOC+1 ELSE IF C=123 THEN BAL:=BAL+1 ELSE IF C=125 THEN BEGIN BAL:=BAL-1; IF BAL=0 THEN GOTO 30;END{:93};END;30:SKIP_COMMENT:=BAL;END;{:92}{96:} FUNCTION GET_NEXT:EIGHT_BITS;LABEL 20,30,31;VAR C:EIGHT_BITS; D:EIGHT_BITS;J,K:0..LONGEST_NAME; BEGIN 20:IF LOC>LIMIT THEN BEGIN GET_LINE; IF INPUT_HAS_ENDED THEN BEGIN C:=147;GOTO 31;END;END;C:=BUFFER[LOC]; LOC:=LOC+1;IF SCANNING_HEX THEN{97:} IF((C>=48)AND(C<=57))OR((C>=65)AND(C<=70))THEN GOTO 31 ELSE SCANNING_HEX :=FALSE{:97}; CASE C OF 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85 ,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 ,112,113,114,115,116,117,118,119,120,121,122:{99:} BEGIN IF((C=69)OR(C=101))AND(LOC>1)THEN IF(BUFFER[LOC-2]<=57)AND(BUFFER[ LOC-2]>=48)THEN C:=128;IF C<>128 THEN BEGIN LOC:=LOC-1;ID_FIRST:=LOC; REPEAT LOC:=LOC+1;D:=BUFFER[LOC]; UNTIL((D<48)OR((D>57)AND(D<65))OR((D>90)AND(D<97))OR(D>122))AND(D<>95); C:=130;ID_LOC:=LOC;END;END{:99};39,34:{100:}BEGIN ID_FIRST:=LOC-1; REPEAT D:=BUFFER[LOC];LOC:=LOC+1; IF LOC>LIMIT THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN( TERM_OUT);WRITE(TERM_OUT,'! String constant didn''t end');ERROR;END;END; LOC:=LIMIT;D:=C;END;UNTIL D=C;ID_LOC:=LOC;C:=129;END{:100};64:{101:} BEGIN C:=CONTROL_CODE(BUFFER[LOC]);LOC:=LOC+1; IF C=126 THEN BEGIN XREF_SWITCH:=10240;GOTO 20; END ELSE IF C=125 THEN BEGIN XREF_SWITCH:=0;GOTO 20; END ELSE IF(C<=134)AND(C>=131)THEN{107:}BEGIN ID_FIRST:=LOC; BUFFER[LIMIT+1]:=64;WHILE BUFFER[LOC]<>64 DO LOC:=LOC+1;ID_LOC:=LOC; IF LOC>LIMIT THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN( TERM_OUT);WRITE(TERM_OUT,'! Control text didn''t end');ERROR;END;END; LOC:=LIMIT;END ELSE BEGIN LOC:=LOC+2; IF BUFFER[LOC-1]<>62 THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN( TERM_OUT); WRITE(TERM_OUT,'! Control codes are forbidden in control text');ERROR; END;END;END;END{:107} ELSE IF C=13 THEN SCANNING_HEX:=TRUE ELSE IF C=146 THEN{102:}BEGIN{104:} K:=0;WHILE TRUE DO BEGIN IF LOC>LIMIT THEN BEGIN GET_LINE; IF INPUT_HAS_ENDED THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN( TERM_OUT);WRITE(TERM_OUT,'! Input ended in section name');ERROR;END;END; LOC:=1;GOTO 30;END;END;D:=BUFFER[LOC];{105:} IF D=64 THEN BEGIN D:=BUFFER[LOC+1];IF D=62 THEN BEGIN LOC:=LOC+2; GOTO 30;END; IF(D=32)OR(D=9)OR(D=42)THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! Section name didn''t end');ERROR; END;END;GOTO 30;END;K:=K+1;MOD_TEXT[K]:=64;LOC:=LOC+1;END{:105}; LOC:=LOC+1;IF K=LONGEST_NAME-2 THEN BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Section name too long: ');END; FOR J:=1 TO 25 DO WRITE(TERM_OUT,XCHR[MOD_TEXT[J]]); WRITE(TERM_OUT,'...');IF HISTORY=0 THEN HISTORY:=1;END{:106}; IF(MOD_TEXT[K]=32)AND(K>0)THEN K:=K-1{:104}; IF K>3 THEN BEGIN IF(MOD_TEXT[K]=46)AND(MOD_TEXT[K-1]=46)AND(MOD_TEXT[K -2]=46)THEN CUR_MODULE:=PREFIX_LOOKUP(K-3)ELSE CUR_MODULE:=MOD_LOOKUP(K) ;END ELSE CUR_MODULE:=MOD_LOOKUP(K);XREF_SWITCH:=0;END{:102} ELSE IF C=2 THEN{108:}BEGIN ID_FIRST:=LOC;LOC:=LOC+1; BUFFER[LIMIT+1]:=64;BUFFER[LIMIT+2]:=62; WHILE(BUFFER[LOC]<>64)OR(BUFFER[LOC+1]<>62)DO LOC:=LOC+1; IF LOC>=LIMIT THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Verbatim string didn''t end');ERROR;END;END; ID_LOC:=LOC;LOC:=LOC+2;END{:108};END{:101};{98:} 46:IF BUFFER[LOC]=46 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=32; LOC:=LOC+1;END; END ELSE IF BUFFER[LOC]=41 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=93; LOC:=LOC+1;END;END; 58:IF BUFFER[LOC]=61 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=24; LOC:=LOC+1;END;END; 61:IF BUFFER[LOC]=61 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=30; LOC:=LOC+1;END;END; 62:IF BUFFER[LOC]=61 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=29; LOC:=LOC+1;END;END; 60:IF BUFFER[LOC]=61 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=28; LOC:=LOC+1;END; END ELSE IF BUFFER[LOC]=62 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=26; LOC:=LOC+1;END;END; 40:IF BUFFER[LOC]=42 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=9; LOC:=LOC+1;END; END ELSE IF BUFFER[LOC]=46 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=91; LOC:=LOC+1;END;END; 42:IF BUFFER[LOC]=41 THEN BEGIN IF LOC<=LIMIT THEN BEGIN C:=10; LOC:=LOC+1;END;END;{:98}32,9:GOTO 20;OTHERS:END; 31:{IF TROUBLE_SHOOTING THEN DEBUG_HELP;}GET_NEXT:=C;END;{:96}{112:} PROCEDURE PASCAL_XREF;LABEL 10;VAR P:NAME_POINTER; BEGIN WHILE NEXT_CONTROL<143 DO BEGIN IF(NEXT_CONTROL>=130)AND( NEXT_CONTROL<=133)THEN BEGIN P:=ID_LOOKUP(NEXT_CONTROL-130);NEW_XREF(P); IF(ILK[P]=17)OR(ILK[P]=22)THEN XREF_SWITCH:=10240;END; NEXT_CONTROL:=GET_NEXT; IF(NEXT_CONTROL=124)OR(NEXT_CONTROL=123)THEN GOTO 10;END;10:END;{:112} {113:}PROCEDURE OUTER_XREF;VAR BAL:EIGHT_BITS; BEGIN WHILE NEXT_CONTROL<143 DO IF NEXT_CONTROL<>123 THEN PASCAL_XREF ELSE BEGIN BAL:=SKIP_COMMENT(1);NEXT_CONTROL:=124; WHILE BAL>0 DO BEGIN PASCAL_XREF; IF NEXT_CONTROL=124 THEN BAL:=SKIP_COMMENT(BAL)ELSE BAL:=0;END;END;END; {:113}{120:}PROCEDURE MOD_CHECK(P:NAME_POINTER); BEGIN IF P>0 THEN BEGIN MOD_CHECK(LINK[P]);CUR_XREF:=XREF[P]; IF XMEM[CUR_XREF].NUM_FIELD<10240 THEN BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Never defined: <');END;PRINT_ID(P); WRITE(TERM_OUT,'>');IF HISTORY=0 THEN HISTORY:=1;END; WHILE XMEM[CUR_XREF].NUM_FIELD>=10240 DO CUR_XREF:=XMEM[CUR_XREF]. XLINK_FIELD;IF CUR_XREF=0 THEN BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Never used: <');END;PRINT_ID(P);WRITE(TERM_OUT,'>'); IF HISTORY=0 THEN HISTORY:=1;END;MOD_CHECK(ILK[P]);END;END;{:120}{123:} PROCEDURE FLUSH_BUFFER(B:EIGHT_BITS;PER_CENT:BOOLEAN);LABEL 30; VAR J,K:0..LINE_LENGTH;BEGIN J:=B; IF NOT PER_CENT THEN WHILE TRUE DO BEGIN IF J=0 THEN GOTO 30; IF OUT_BUF[J]<>32 THEN GOTO 30;J:=J-1;END; 30:FOR K:=1 TO J DO WRITE(TEX_FILE,XCHR[OUT_BUF[K]]); IF PER_CENT THEN WRITE(TEX_FILE,XCHR[37]);WRITELN(TEX_FILE); OUT_LINE:=OUT_LINE+1; IF B0 THEN FLUSH_BUFFER(OUT_PTR,FALSE)ELSE BEGIN FOR K:=0 TO LIMIT DO IF(BUFFER[K]<>32)AND(BUFFER[K]<>9)THEN GOTO 10; FLUSH_BUFFER(0,FALSE);END;10:END;{:124}{128:}PROCEDURE BREAK_OUT; LABEL 10;VAR K:0..LINE_LENGTH;D:ASCII_CODE;BEGIN K:=OUT_PTR; WHILE TRUE DO BEGIN IF K=0 THEN{129:}BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Line had to be broken (output l.',OUT_LINE:1);END; WRITELN(TERM_OUT,'):'); FOR K:=1 TO OUT_PTR-1 DO WRITE(TERM_OUT,XCHR[OUT_BUF[K]]); WRITELN(TERM_OUT);IF HISTORY=0 THEN HISTORY:=1; FLUSH_BUFFER(OUT_PTR-1,TRUE);GOTO 10;END{:129};D:=OUT_BUF[K]; IF D=32 THEN BEGIN FLUSH_BUFFER(K,FALSE);GOTO 10;END; IF(D=92)AND(OUT_BUF[K-1]<>92)THEN BEGIN FLUSH_BUFFER(K-1,TRUE);GOTO 10; END;K:=K-1;END;10:END;{:128}{131:}PROCEDURE OUT_MOD(M:INTEGER); VAR K:0..5;A:INTEGER;BEGIN K:=0;A:=M;REPEAT DIG[K]:=A MOD 10; A:=A DIV 10;K:=K+1;UNTIL A=0;REPEAT K:=K-1; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=DIG[K]+48;END;UNTIL K=0; IF CHANGED_MODULE[M]THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=92; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=42;END;END;{:131}{132:} PROCEDURE OUT_NAME(P:NAME_POINTER);VAR K:0..MAX_BYTES;W:0..1; BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=123;END;W:=P MOD 2; FOR K:=BYTE_START[P]TO BYTE_START[P+2]-1 DO BEGIN IF BYTE_MEM[W,K]=95 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;END;BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=BYTE_MEM[W,K];END;END; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=125;END;END;{:132}{133:}PROCEDURE COPY_LIMBO;LABEL 10; VAR C:ASCII_CODE; BEGIN WHILE TRUE DO IF LOC>LIMIT THEN BEGIN FINISH_LINE;GET_LINE; IF INPUT_HAS_ENDED THEN GOTO 10;END ELSE BEGIN BUFFER[LIMIT+1]:=64; {134:}WHILE BUFFER[LOC]<>64 DO BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=BUFFER[LOC];END; LOC:=LOC+1;END;IF LOC<=LIMIT THEN BEGIN LOC:=LOC+2;C:=BUFFER[LOC-1]; IF(C=32)OR(C=9)OR(C=42)THEN GOTO 10; IF(C<>122)AND(C<>90)THEN BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=64;END; IF C<>64 THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Double @ required outside of sections');ERROR;END;END; END;END{:134};END;10:END;{:133}{135:}FUNCTION COPY_TEX:EIGHT_BITS; LABEL 30;VAR C:EIGHT_BITS; BEGIN WHILE TRUE DO BEGIN IF LOC>LIMIT THEN BEGIN FINISH_LINE;GET_LINE; IF INPUT_HAS_ENDED THEN BEGIN C:=147;GOTO 30;END;END; BUFFER[LIMIT+1]:=64;{136:}REPEAT C:=BUFFER[LOC];LOC:=LOC+1; IF C=124 THEN GOTO 30; IF C<>64 THEN BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=C;END; IF(OUT_PTR=1)AND((C=32)OR(C=9))THEN OUT_PTR:=OUT_PTR-1;END;UNTIL C=64; IF LOC<=LIMIT THEN BEGIN C:=CONTROL_CODE(BUFFER[LOC]);LOC:=LOC+1; GOTO 30;END{:136};END;30:COPY_TEX:=C;END;{:135}{137:} FUNCTION COPY_COMMENT(BAL:EIGHT_BITS):EIGHT_BITS;LABEL 30; VAR C:ASCII_CODE; BEGIN WHILE TRUE DO BEGIN IF LOC>LIMIT THEN BEGIN GET_LINE; IF INPUT_HAS_ENDED THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN( TERM_OUT);WRITE(TERM_OUT,'! Input ended in mid-comment');ERROR;END;END; LOC:=1;{139:}BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1;END; REPEAT BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1;END; BAL:=BAL-1;UNTIL BAL=0;GOTO 30;{:139};END;END;C:=BUFFER[LOC];LOC:=LOC+1; IF C=124 THEN GOTO 30; BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=C;TOK_PTR:=TOK_PTR+1;END; {138:}IF C=64 THEN BEGIN LOC:=LOC+1; IF BUFFER[LOC-1]<>64 THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! Illegal use of @ in comment');ERROR; END;END;LOC:=LOC-2;TOK_PTR:=TOK_PTR-1;{139:} BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1;END; REPEAT BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1;END; BAL:=BAL-1;UNTIL BAL=0;GOTO 30;{:139};END; END ELSE IF(C=92)AND(BUFFER[LOC]<>64)THEN BEGIN BEGIN IF TOK_PTR+2> MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=BUFFER[LOC]; TOK_PTR:=TOK_PTR+1;END;LOC:=LOC+1; END ELSE IF C=123 THEN BAL:=BAL+1 ELSE IF C=125 THEN BEGIN BAL:=BAL-1; IF BAL=0 THEN GOTO 30;END{:138};END;30:COPY_COMMENT:=BAL;END;{:137} {141:}{PROCEDURE PRINT_CAT(C:EIGHT_BITS); BEGIN CASE C OF 1:WRITE(TERM_OUT,'simp');2:WRITE(TERM_OUT,'math'); 3:WRITE(TERM_OUT,'intro');4:WRITE(TERM_OUT,'open'); 5:WRITE(TERM_OUT,'beginning');6:WRITE(TERM_OUT,'close'); 7:WRITE(TERM_OUT,'alpha');8:WRITE(TERM_OUT,'omega'); 9:WRITE(TERM_OUT,'semi');10:WRITE(TERM_OUT,'terminator'); 11:WRITE(TERM_OUT,'stmt');12:WRITE(TERM_OUT,'cond'); 13:WRITE(TERM_OUT,'clause');14:WRITE(TERM_OUT,'colon'); 15:WRITE(TERM_OUT,'exp');16:WRITE(TERM_OUT,'proc'); 17:WRITE(TERM_OUT,'casehead');18:WRITE(TERM_OUT,'recordhead'); 19:WRITE(TERM_OUT,'varhead');20:WRITE(TERM_OUT,'elsie'); 21:WRITE(TERM_OUT,'casey');22:WRITE(TERM_OUT,'module'); OTHERS:WRITE(TERM_OUT,'UNKNOWN')END;END;}{:141}{147:} {PROCEDURE PRINT_TEXT(P:TEXT_POINTER);VAR J:0..MAX_TOKS;R:0..10239; BEGIN IF P>=TEXT_PTR THEN WRITE(TERM_OUT,'BAD')ELSE FOR J:=TOK_START[P] TO TOK_START[P+1]-1 DO BEGIN R:=TOK_MEM[J]MOD 10240; CASE TOK_MEM[J]DIV 10240 OF 1:BEGIN WRITE(TERM_OUT,'\\',XCHR[123]); PRINT_ID(R);WRITE(TERM_OUT,XCHR[125]);END; 2:BEGIN WRITE(TERM_OUT,'\&',XCHR[123]);PRINT_ID(R); WRITE(TERM_OUT,XCHR[125]);END;3:BEGIN WRITE(TERM_OUT,'<');PRINT_ID(R); WRITE(TERM_OUT,'>');END;4:WRITE(TERM_OUT,'[[',R:1,']]'); 5:WRITE(TERM_OUT,'|[[',R:1,']]|'); OTHERS:[148:]CASE R OF 131:WRITE(TERM_OUT,'\mathbin',XCHR[123]); 132:WRITE(TERM_OUT,'\mathrel',XCHR[123]); 133:WRITE(TERM_OUT,'\mathop',XCHR[123]);134:WRITE(TERM_OUT,'[ccancel]'); 135:WRITE(TERM_OUT,'[cancel]');136:WRITE(TERM_OUT,'[indent]'); 137:WRITE(TERM_OUT,'[outdent]');139:WRITE(TERM_OUT,'[backup]'); 138:WRITE(TERM_OUT,'[opt]');140:WRITE(TERM_OUT,'[break]'); 141:WRITE(TERM_OUT,'[force]');142:WRITE(TERM_OUT,'[fforce]'); 143:WRITE(TERM_OUT,'[quit]');OTHERS:WRITE(TERM_OUT,XCHR[R])END[:148]END; END;END;}{:147}{173:}PROCEDURE RED(J:SIXTEEN_BITS;K:EIGHT_BITS; C:EIGHT_BITS;D:INTEGER);VAR I:0..MAX_SCRAPS;BEGIN CAT[J]:=C; TRANS[J]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR; IF K>1 THEN BEGIN FOR I:=J+K TO LO_PTR DO BEGIN CAT[I-K+1]:=CAT[I]; TRANS[I-K+1]:=TRANS[I];END;LO_PTR:=LO_PTR-K+1;END;{174:} IF PP+D>=SCRAP_BASE THEN PP:=PP+D ELSE PP:=SCRAP_BASE{:174};END;{:173} {175:}PROCEDURE SQ(J:SIXTEEN_BITS;K:EIGHT_BITS;C:EIGHT_BITS;D:INTEGER); VAR I:0..MAX_SCRAPS;BEGIN IF K=1 THEN BEGIN CAT[J]:=C;{174:} IF PP+D>=SCRAP_BASE THEN PP:=PP+D ELSE PP:=SCRAP_BASE{:174}; END ELSE BEGIN FOR I:=J TO J+K-1 DO BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[ I];TOK_PTR:=TOK_PTR+1;END;RED(J,K,C,D);END;END;{:175}{179:} {PROCEDURE PROD(N:EIGHT_BITS);VAR K:1..MAX_SCRAPS; BEGIN IF TRACING=2 THEN BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,N:1,':');END; FOR K:=SCRAP_BASE TO LO_PTR DO BEGIN IF K=PP THEN WRITE(TERM_OUT,'*') ELSE WRITE(TERM_OUT,' ');PRINT_CAT(CAT[K]);END; IF HI_PTR<=SCRAP_PTR THEN WRITE(TERM_OUT,'...');END;END;}{:179}{180:} {151:}PROCEDURE FIVE_CASES;LABEL 31;BEGIN CASE CAT[PP]OF 5:{153:} IF CAT[PP+1]=6 THEN BEGIN IF(CAT[PP+2]=10)OR(CAT[PP+2]=11)THEN BEGIN SQ( PP,3,11,-2);{PROD(5)};GOTO 31;END; END ELSE IF CAT[PP+1]=11 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=140;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,5,-1); {PROD(6)};GOTO 31;END{:153};3:{160:} IF CAT[PP+1]=11 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=138;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=55; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,11,-2); {PROD(17)};GOTO 31;END{:160};2:{161:} IF CAT[PP+1]=6 THEN BEGIN TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1;RED(PP,1,11,-2);{PROD(18)}; GOTO 31;END ELSE IF CAT[PP+1]=14 THEN BEGIN TOK_MEM[TOK_PTR]:=141; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=139;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,3,-3); {PROD(19)};GOTO 31;END ELSE IF CAT[PP+1]=2 THEN BEGIN SQ(PP,2,2,-1); {PROD(20)};GOTO 31;END ELSE IF CAT[PP+1]=1 THEN BEGIN SQ(PP,2,2,-1); {PROD(21)};GOTO 31; END ELSE IF CAT[PP+1]=11 THEN BEGIN TOK_MEM[TOK_PTR]:=36; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=136; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=140;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=137; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; RED(PP,2,11,-2);{PROD(22)};GOTO 31; END ELSE IF CAT[PP+1]=10 THEN BEGIN TOK_MEM[TOK_PTR]:=36; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,11,-2); {PROD(23)};GOTO 31;END{:161};4:{163:} IF(CAT[PP+1]=17)AND(CAT[PP+2]=6)THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS [PP];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=137; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1;RED(PP,3,2,-1); {PROD(26)};GOTO 31; END ELSE IF CAT[PP+1]=6 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=44;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,2,-1); {PROD(27)};GOTO 31;END ELSE IF CAT[PP+1]=2 THEN{164:} BEGIN IF(CAT[PP+2]=17)AND(CAT[PP+3]=6)THEN BEGIN TOK_MEM[TOK_PTR]:= 40960+TRANS[PP];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=137; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+3];TOK_PTR:=TOK_PTR+1;RED(PP,4,2,-1); {PROD(28)};GOTO 31;END ELSE IF CAT[PP+2]=6 THEN BEGIN SQ(PP,3,2,-1); {PROD(29)};GOTO 31;END ELSE IF CAT[PP+2]=14 THEN BEGIN SQ(PP+1,2,2,0); {PROD(30)};GOTO 31; END ELSE IF CAT[PP+2]=16 THEN BEGIN IF CAT[PP+3]=3 THEN BEGIN TOK_MEM[ TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=133; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1;RED(PP+1,3,2,0);{PROD(31)}; GOTO 31;END; END ELSE IF CAT[PP+2]=9 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=44;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=138; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=53;TOK_PTR:=TOK_PTR+1; RED(PP+1,2,2,0);{PROD(32)};GOTO 31; END ELSE IF CAT[PP+2]=19 THEN BEGIN IF CAT[PP+3]=3 THEN BEGIN TOK_MEM[ TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=133; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1;RED(PP+1,3,2,0);{PROD(31)}; GOTO 31;END;END;END{:164} ELSE IF CAT[PP+1]=16 THEN BEGIN IF CAT[PP+2]=3 THEN BEGIN TOK_MEM[ TOK_PTR]:=133;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1; RED(PP+1,2,2,0);{PROD(34)};GOTO 31;END; END ELSE IF CAT[PP+1]=1 THEN BEGIN SQ(PP+1,1,2,0);{PROD(35)};GOTO 31; END ELSE IF(CAT[PP+1]=11)AND(CAT[PP+2]=6)THEN BEGIN TOK_MEM[TOK_PTR]:= 40960+TRANS[PP];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=36; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=36; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2]; TOK_PTR:=TOK_PTR+1;RED(PP,3,2,-1);{PROD(36)};GOTO 31; END ELSE IF CAT[PP+1]=19 THEN BEGIN IF CAT[PP+2]=3 THEN BEGIN TOK_MEM[ TOK_PTR]:=133;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1; RED(PP+1,2,2,0);{PROD(37)};GOTO 31;END;END{:163};1:{168:} IF CAT[PP+1]=6 THEN BEGIN SQ(PP,1,11,-2);{PROD(43)};GOTO 31; END ELSE IF CAT[PP+1]=14 THEN BEGIN TOK_MEM[TOK_PTR]:=141; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=139;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,3,-3); {PROD(44)};GOTO 31;END ELSE IF CAT[PP+1]=2 THEN BEGIN SQ(PP,2,2,-1); {PROD(45)};GOTO 31;END ELSE IF CAT[PP+1]=22 THEN BEGIN SQ(PP,2,22,0); {PROD(46)};GOTO 31;END ELSE IF CAT[PP+1]=1 THEN BEGIN SQ(PP,2,1,-2); {PROD(47)};GOTO 31;END ELSE IF CAT[PP+1]=10 THEN BEGIN SQ(PP,2,11,-2); {PROD(48)};GOTO 31;END{:168};OTHERS:END;PP:=PP+1;31:END; PROCEDURE ALPHA_CASES;LABEL 31;BEGIN{152:} IF CAT[PP+1]=2 THEN BEGIN IF CAT[PP+2]=14 THEN BEGIN SQ(PP+1,2,2,0); {PROD(1)};GOTO 31; END ELSE IF CAT[PP+2]=8 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=32; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=136;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1;RED(PP,3,13,-2); {PROD(2)};GOTO 31;END; END ELSE IF CAT[PP+1]=8 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=136;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,13,-2); {PROD(3)};GOTO 31;END ELSE IF CAT[PP+1]=1 THEN BEGIN SQ(PP+1,1,2,0); {PROD(4)};GOTO 31;END{:152};PP:=PP+1;31:END;{:151} FUNCTION TRANSLATE:TEXT_POINTER;LABEL 30,31;VAR I:1..MAX_SCRAPS; J:0..MAX_SCRAPS;BEGIN PP:=SCRAP_BASE;LO_PTR:=PP-1;HI_PTR:=PP;{183:} {IF TRACING=2 THEN BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'Tracing after l.',LINE:1,':');END; IF HISTORY=0 THEN HISTORY:=1;IF LOC>50 THEN BEGIN WRITE(TERM_OUT,'...'); FOR K:=LOC-50 TO LOC DO WRITE(TERM_OUT,XCHR[BUFFER[K-1]]); END ELSE FOR K:=1 TO LOC DO WRITE(TERM_OUT,XCHR[BUFFER[K-1]]);END}{:183} ;{176:}WHILE TRUE DO BEGIN{177:} IF LO_PTRSCRAP_PTR)OR(LO_PTR=PP+3); FOR I:=LO_PTR+1 TO PP+3 DO CAT[I]:=0;END{:177}; IF(TOK_PTR+8>MAX_TOKS)OR(TEXT_PTR+4>MAX_TEXTS)THEN BEGIN{IF TOK_PTR> MAX_TOK_PTR THEN MAX_TOK_PTR:=TOK_PTR; IF TEXT_PTR>MAX_TXT_PTR THEN MAX_TXT_PTR:=TEXT_PTR;} BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token/text',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;END;IF PP>LO_PTR THEN GOTO 30;{150:} IF CAT[PP]<=7 THEN IF CAT[PP]<7 THEN FIVE_CASES ELSE ALPHA_CASES ELSE BEGIN CASE CAT[PP]OF 17:{154:} IF CAT[PP+1]=21 THEN BEGIN IF CAT[PP+2]=13 THEN BEGIN TOK_MEM[TOK_PTR]:= 40960+TRANS[PP];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=137; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2]; TOK_PTR:=TOK_PTR+1;RED(PP,3,17,0);{PROD(7)};GOTO 31;END; END ELSE IF CAT[PP+1]=6 THEN BEGIN IF CAT[PP+2]=10 THEN BEGIN TOK_MEM[ TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=137;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1;RED(PP,3,11,-2); {PROD(8)};GOTO 31;END; END ELSE IF CAT[PP+1]=11 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,17,0); {PROD(9)};GOTO 31;END{:154};21:{155:} IF CAT[PP+1]=13 THEN BEGIN SQ(PP,2,17,0);{PROD(10)};GOTO 31;END{:155}; 13:{156:}IF CAT[PP+1]=11 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=140;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=137; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; RED(PP,2,11,-2);{PROD(11)};GOTO 31;END{:156};12:{157:} IF(CAT[PP+1]=13)AND(CAT[PP+2]=11)THEN IF CAT[PP+3]=20 THEN BEGIN TOK_MEM [TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=140;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+3];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135; TOK_PTR:=TOK_PTR+1;RED(PP,4,13,-2);{PROD(12)};GOTO 31; END ELSE BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=140;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=137; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; RED(PP,3,11,-2);{PROD(13)};GOTO 31;END{:157};20:{158:} BEGIN SQ(PP,1,3,-3);{PROD(14)};GOTO 31;END{:158};15:{159:} IF CAT[PP+1]=2 THEN BEGIN IF CAT[PP+2]=1 THEN IF CAT[PP+3]<>1 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1;RED(PP,3,2,-1);{PROD(15)}; GOTO 31;END; END ELSE IF CAT[PP+1]=1 THEN IF CAT[PP+2]<>1 THEN BEGIN TOK_MEM[TOK_PTR] :=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1;RED(PP,2,2,-1);{PROD(16)}; GOTO 31;END{:159};22:{162:} IF(CAT[PP+1]=10)OR(CAT[PP+1]=9)THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[ PP];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; RED(PP,2,11,-2);{PROD(24)};GOTO 31;END ELSE BEGIN SQ(PP,1,1,-2); {PROD(25)};GOTO 31;END{:162};16:{165:} IF CAT[PP+1]=5 THEN BEGIN IF(CAT[PP+2]=6)AND(CAT[PP+3]=10)THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=137; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+3]; TOK_PTR:=TOK_PTR+1;RED(PP,4,11,-2);{PROD(38)};GOTO 31;END; END ELSE IF CAT[PP+1]=11 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=140;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,16,-2); {PROD(39)};GOTO 31;END{:165};18:{166:} IF(CAT[PP+1]=3)AND(CAT[PP+2]=21)THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS [PP];TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1;RED(PP,3,21,-2); {PROD(40)};GOTO 31;END ELSE BEGIN TOK_MEM[TOK_PTR]:=136; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP];TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;RED(PP,1,17,0);{PROD(41)}; GOTO 31;END{:166};9:{167:}BEGIN SQ(PP,1,10,-3);{PROD(42)};GOTO 31; END{:167};11:{169:} IF CAT[PP+1]=11 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=140;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,11,-2); {PROD(49)};GOTO 31;END{:169};10:{170:}BEGIN SQ(PP,1,11,-2);{PROD(50)}; GOTO 31;END{:170};19:{171:}IF CAT[PP+1]=5 THEN BEGIN SQ(PP,1,11,-2); {PROD(51)};GOTO 31; END ELSE IF CAT[PP+1]=2 THEN BEGIN IF CAT[PP+2]=14 THEN BEGIN TOK_MEM[ TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+2];TOK_PTR:=TOK_PTR+1;RED(PP+1,2,3,+1); {PROD(52)};GOTO 31;END; END ELSE IF CAT[PP+1]=1 THEN BEGIN IF CAT[PP+2]=14 THEN BEGIN SQ(PP+1,2, 3,+1);{PROD(53)};GOTO 31;END; END ELSE IF CAT[PP+1]=11 THEN BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[PP]; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=140;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=40960+TRANS[PP+1];TOK_PTR:=TOK_PTR+1;RED(PP,2,19,-2); {PROD(54)};GOTO 31;END{:171};OTHERS:END;PP:=PP+1;31:END{:150};END; 30:{:176}; IF(LO_PTR=SCRAP_BASE)AND(CAT[LO_PTR]<>2)THEN TRANSLATE:=TRANS[LO_PTR] ELSE{181:}BEGIN{182:} {IF(LO_PTR>SCRAP_BASE)AND(TRACING=1)THEN BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'Irreducible scrap sequence in section ',MODULE_COUNT:1); END;WRITELN(TERM_OUT,':');IF HISTORY=0 THEN HISTORY:=1; FOR J:=SCRAP_BASE TO LO_PTR DO BEGIN WRITE(TERM_OUT,' '); PRINT_CAT(CAT[J]);END;END;}{:182}; FOR J:=SCRAP_BASE TO LO_PTR DO BEGIN IF J<>SCRAP_BASE THEN BEGIN TOK_MEM [TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1;END; IF CAT[J]=2 THEN BEGIN TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1;END; TOK_MEM[TOK_PTR]:=40960+TRANS[J];TOK_PTR:=TOK_PTR+1; IF CAT[J]=2 THEN BEGIN TOK_MEM[TOK_PTR]:=36;TOK_PTR:=TOK_PTR+1;END; IF TOK_PTR+6>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;END;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;TRANSLATE:=TEXT_PTR-1;END{:181};END;{:180} {184:}{196:}PROCEDURE APP_COMMENT;BEGIN TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR; IF(SCRAP_PTR10)THEN BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=10;TRANS[SCRAP_PTR]:=0; END ELSE BEGIN TOK_MEM[TOK_PTR]:=40960+TRANS[SCRAP_PTR]; TOK_PTR:=TOK_PTR+1;END;TOK_MEM[TOK_PTR]:=TEXT_PTR+40959; TOK_PTR:=TOK_PTR+1;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;{:196}{197:}PROCEDURE APP_OCTAL; BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=79; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=123;TOK_PTR:=TOK_PTR+1; WHILE(BUFFER[LOC]>=48)AND(BUFFER[LOC]<=55)DO BEGIN BEGIN IF TOK_PTR+2> MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=BUFFER[LOC]; TOK_PTR:=TOK_PTR+1;END;LOC:=LOC+1;END;BEGIN TOK_MEM[TOK_PTR]:=125; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;END;PROCEDURE APP_HEX; BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=72; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=123;TOK_PTR:=TOK_PTR+1; WHILE((BUFFER[LOC]>=48)AND(BUFFER[LOC]<=57))OR((BUFFER[LOC]>=65)AND( BUFFER[LOC]<=70))DO BEGIN BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN (TERM_OUT);WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded'); ERROR;HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=BUFFER[LOC]; TOK_PTR:=TOK_PTR+1;END;LOC:=LOC+1;END;BEGIN TOK_MEM[TOK_PTR]:=125; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;END;{:197}{187:}PROCEDURE EASY_CASES; BEGIN CASE NEXT_CONTROL OF 6:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=105;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=110;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;32:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=116;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=111;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END; 35,36,37,94,95:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=NEXT_CONTROL;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 0,124,131,132,133:;40,91:BEGIN TOK_MEM[TOK_PTR]:=NEXT_CONTROL; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=4; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END; 41,93:BEGIN TOK_MEM[TOK_PTR]:=NEXT_CONTROL;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=6;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 42:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=97; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=115;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=116;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;44:BEGIN TOK_MEM[TOK_PTR]:=44; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=138;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=57;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END; 46,48,49,50,51,52,53,54,55,56,57:BEGIN TOK_MEM[TOK_PTR]:=NEXT_CONTROL; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;59:BEGIN TOK_MEM[TOK_PTR]:=59; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=9; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;58:BEGIN TOK_MEM[TOK_PTR]:=58; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=14; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;{189:}26:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=73;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 28:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=76; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;29:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=71;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 30:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=83; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;4:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=87;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 31:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=86; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;5:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=82;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 24:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=75; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;{:189}128:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=69;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=123;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=15;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;9:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=66;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 10:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=84; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;12:APP_OCTAL;13:APP_HEX; 135:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=41; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;3:BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=93;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 137:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=44; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;138:BEGIN TOK_MEM[TOK_PTR]:=138; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=48;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 139:BEGIN TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1;APP_COMMENT;END; 140:BEGIN TOK_MEM[TOK_PTR]:=142;TOK_PTR:=TOK_PTR+1;APP_COMMENT;END; 141:BEGIN TOK_MEM[TOK_PTR]:=134;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1; BEGIN TOK_MEM[TOK_PTR]:=134;TOK_PTR:=TOK_PTR+1;APP_COMMENT;END;END; 142:BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=9;TRANS[SCRAP_PTR]:=0; END;136:BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=74;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END; OTHERS:BEGIN TOK_MEM[TOK_PTR]:=NEXT_CONTROL;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END END;END;{:187} {193:}PROCEDURE SUB_CASES(P:NAME_POINTER); BEGIN CASE ILK[P]OF 0:BEGIN TOK_MEM[TOK_PTR]:=10240+P; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;4:BEGIN TOK_MEM[TOK_PTR]:=20480+P; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=7; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;7:BEGIN TOK_MEM[TOK_PTR]:=141; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=139;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;8:BEGIN TOK_MEM[TOK_PTR]:=131; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;9:BEGIN TOK_MEM[TOK_PTR]:=20480+P; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=8; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;12:BEGIN TOK_MEM[TOK_PTR]:=141; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=7;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 13:BEGIN TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 16:BEGIN TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; 20:BEGIN TOK_MEM[TOK_PTR]:=132;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=125; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;END;END;{:193}PROCEDURE PASCAL_PARSE; LABEL 21,10;VAR J:0..LONG_BUF_SIZE;P:NAME_POINTER; BEGIN WHILE NEXT_CONTROL<143 DO BEGIN{186:}{188:} IF(SCRAP_PTR+4>MAX_SCRAPS)OR(TOK_PTR+6>MAX_TOKS)OR(TEXT_PTR+4>MAX_TEXTS) THEN BEGIN{IF SCRAP_PTR>MAX_SCR_PTR THEN MAX_SCR_PTR:=SCRAP_PTR; IF TOK_PTR>MAX_TOK_PTR THEN MAX_TOK_PTR:=TOK_PTR; IF TEXT_PTR>MAX_TXT_PTR THEN MAX_TXT_PTR:=TEXT_PTR;} BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','scrap/token/text',' capacity exceeded'); ERROR;HISTORY:=3;JUMP_OUT;END;END{:188}; 21:CASE NEXT_CONTROL OF 129,2:{190:}BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;IF NEXT_CONTROL=2 THEN BEGIN TOK_MEM[TOK_PTR]:=61; TOK_PTR:=TOK_PTR+1;END ELSE BEGIN TOK_MEM[TOK_PTR]:=46; TOK_PTR:=TOK_PTR+1;END;TOK_MEM[TOK_PTR]:=123;TOK_PTR:=TOK_PTR+1; J:=ID_FIRST; WHILE JMAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=BUFFER[J];TOK_PTR:=TOK_PTR+1; END;J:=J+1;END;BEGIN TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END;END{:190}; 130:{192:}BEGIN P:=ID_LOOKUP(0); CASE ILK[P]OF 0,4,7,8,9,12,13,16,20:SUB_CASES(P);{194:} 5:BEGIN BEGIN TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=5; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;BEGIN SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=0;END;END; 6:BEGIN BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=21; TRANS[SCRAP_PTR]:=0;END;BEGIN TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=7;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;END;10:BEGIN{195:} IF(SCRAP_PTR10)AND(CAT[SCRAP_PTR]<>9)) THEN BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=10; TRANS[SCRAP_PTR]:=0;END{:195};BEGIN TOK_MEM[TOK_PTR]:=141; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=139;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=20;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;END;11:BEGIN{195:} IF(SCRAP_PTR10)AND(CAT[SCRAP_PTR]<>9)) THEN BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=10; TRANS[SCRAP_PTR]:=0;END{:195};BEGIN TOK_MEM[TOK_PTR]:=141; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=6;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END;END; 14:BEGIN BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=12; TRANS[SCRAP_PTR]:=0;END;BEGIN TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=7;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;END; 23:BEGIN BEGIN TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=126; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=7; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;BEGIN TOK_MEM[TOK_PTR]:=20480+P; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=8; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;END; 17:BEGIN BEGIN TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=139;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=20480+P; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=16;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; BEGIN TOK_MEM[TOK_PTR]:=136;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=32;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END;END; 18:BEGIN BEGIN TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=18;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=0;END; END;19:BEGIN BEGIN TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=136;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=20480+P; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=5;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=0;END; END;21:BEGIN{195:} IF(SCRAP_PTR10)AND(CAT[SCRAP_PTR]<>9)) THEN BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=10; TRANS[SCRAP_PTR]:=0;END{:195};BEGIN TOK_MEM[TOK_PTR]:=141; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=139;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=20480+P;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=6;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;BEGIN SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=13;TRANS[SCRAP_PTR]:=0;END;END; 22:BEGIN BEGIN TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=139;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=20480+P; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=19;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; BEGIN SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=0;END; END;{:194}OTHERS:BEGIN NEXT_CONTROL:=ILK[P]-24;GOTO 21;END END;END{:192} ;134:{191:}BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=104;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=98; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=111;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=120;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=123; TOK_PTR:=TOK_PTR+1; FOR J:=ID_FIRST TO ID_LOC-1 DO BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=BUFFER[J];TOK_PTR:=TOK_PTR+1; END;BEGIN TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=1;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END;END{:191}; OTHERS:EASY_CASES END{:186};NEXT_CONTROL:=GET_NEXT; IF(NEXT_CONTROL=124)OR(NEXT_CONTROL=123)THEN GOTO 10;END;10:END;{:184} {198:}FUNCTION PASCAL_TRANSLATE:TEXT_POINTER;VAR P:TEXT_POINTER; SAVE_BASE:0..MAX_SCRAPS;BEGIN SAVE_BASE:=SCRAP_BASE; SCRAP_BASE:=SCRAP_PTR+1;PASCAL_PARSE; IF NEXT_CONTROL<>124 THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN( TERM_OUT);WRITE(TERM_OUT,'! Missing "|" after Pascal text');ERROR;END; END;BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=135;TOK_PTR:=TOK_PTR+1;END; APP_COMMENT;P:=TRANSLATE; {IF SCRAP_PTR>MAX_SCR_PTR THEN MAX_SCR_PTR:=SCRAP_PTR;} SCRAP_PTR:=SCRAP_BASE-1;SCRAP_BASE:=SAVE_BASE;PASCAL_TRANSLATE:=P;END; {:198}{199:}PROCEDURE OUTER_PARSE;VAR BAL:EIGHT_BITS;P,Q:TEXT_POINTER; BEGIN WHILE NEXT_CONTROL<143 DO IF NEXT_CONTROL<>123 THEN PASCAL_PARSE ELSE BEGIN{200:} IF(TOK_PTR+7>MAX_TOKS)OR(TEXT_PTR+3>MAX_TEXTS)OR(SCRAP_PTR>=MAX_SCRAPS) THEN BEGIN{IF SCRAP_PTR>MAX_SCR_PTR THEN MAX_SCR_PTR:=SCRAP_PTR; IF TOK_PTR>MAX_TOK_PTR THEN MAX_TOK_PTR:=TOK_PTR; IF TEXT_PTR>MAX_TXT_PTR THEN MAX_TXT_PTR:=TEXT_PTR;} BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token/text/scrap',' capacity exceeded'); ERROR;HISTORY:=3;JUMP_OUT;END;END{:200};TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=67;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=123;TOK_PTR:=TOK_PTR+1;BAL:=COPY_COMMENT(1); NEXT_CONTROL:=124;WHILE BAL>0 DO BEGIN P:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;Q:=PASCAL_TRANSLATE; TOK_MEM[TOK_PTR]:=40960+P;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=51200+Q; TOK_PTR:=TOK_PTR+1; IF NEXT_CONTROL=124 THEN BAL:=COPY_COMMENT(BAL)ELSE BAL:=0;END; TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1;APP_COMMENT;END;END;{:199} {205:}PROCEDURE PUSH_LEVEL(P:TEXT_POINTER); BEGIN IF STACK_PTR=STACK_SIZE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','stack',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT; END ELSE BEGIN IF STACK_PTR>0 THEN STACK[STACK_PTR]:=CUR_STATE; STACK_PTR:=STACK_PTR+1; {IF STACK_PTR>MAX_STACK_PTR THEN MAX_STACK_PTR:=STACK_PTR;} CUR_STATE.TOK_FIELD:=TOK_START[P];CUR_STATE.END_FIELD:=TOK_START[P+1]; END;END;{:205}{207:}FUNCTION GET_OUTPUT:EIGHT_BITS;LABEL 20; VAR A:SIXTEEN_BITS; BEGIN 20:WHILE CUR_STATE.TOK_FIELD=CUR_STATE.END_FIELD DO BEGIN STACK_PTR:=STACK_PTR-1;CUR_STATE:=STACK[STACK_PTR];END; A:=TOK_MEM[CUR_STATE.TOK_FIELD]; CUR_STATE.TOK_FIELD:=CUR_STATE.TOK_FIELD+1; IF A>=256 THEN BEGIN CUR_NAME:=A MOD 10240;CASE A DIV 10240 OF 2:A:=129; 3:A:=128;4:BEGIN PUSH_LEVEL(CUR_NAME);GOTO 20;END; 5:BEGIN PUSH_LEVEL(CUR_NAME);CUR_STATE.MODE_FIELD:=0;GOTO 20;END; OTHERS:A:=130 END;END;{IF TROUBLE_SHOOTING THEN DEBUG_HELP;} GET_OUTPUT:=A;END;{:207}{208:}PROCEDURE MAKE_OUTPUT;FORWARD; PROCEDURE OUTPUT_PASCAL; VAR SAVE_TOK_PTR,SAVE_TEXT_PTR,SAVE_NEXT_CONTROL:SIXTEEN_BITS; P:TEXT_POINTER;BEGIN SAVE_TOK_PTR:=TOK_PTR;SAVE_TEXT_PTR:=TEXT_PTR; SAVE_NEXT_CONTROL:=NEXT_CONTROL;NEXT_CONTROL:=124;P:=PASCAL_TRANSLATE; TOK_MEM[TOK_PTR]:=P+51200;TOK_PTR:=TOK_PTR+1;MAKE_OUTPUT; {IF TEXT_PTR>MAX_TXT_PTR THEN MAX_TXT_PTR:=TEXT_PTR; IF TOK_PTR>MAX_TOK_PTR THEN MAX_TOK_PTR:=TOK_PTR;} TEXT_PTR:=SAVE_TEXT_PTR;TOK_PTR:=SAVE_TOK_PTR; NEXT_CONTROL:=SAVE_NEXT_CONTROL;END;{:208}{209:}PROCEDURE MAKE_OUTPUT; LABEL 21,10,31;VAR A:EIGHT_BITS;B:EIGHT_BITS;K,K_LIMIT:0..MAX_BYTES; W:0..1;J:0..LONG_BUF_SIZE;STRING_DELIMITER:ASCII_CODE; SAVE_LOC,SAVE_LIMIT:0..LONG_BUF_SIZE;CUR_MOD_NAME:NAME_POINTER; SAVE_MODE:MODE;BEGIN TOK_MEM[TOK_PTR]:=143;TOK_PTR:=TOK_PTR+1; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR; PUSH_LEVEL(TEXT_PTR-1);WHILE TRUE DO BEGIN A:=GET_OUTPUT; 21:CASE A OF 143:GOTO 10;130,129:{210:} BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;END; IF A=130 THEN IF BYTE_START[CUR_NAME+2]-BYTE_START[CUR_NAME]=1 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=124; END ELSE BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92; END ELSE BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=38;END; IF BYTE_START[CUR_NAME+2]-BYTE_START[CUR_NAME]=1 THEN BEGIN IF OUT_PTR= LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=BYTE_MEM[CUR_NAME MOD 2,BYTE_START[CUR_NAME]]; END ELSE OUT_NAME(CUR_NAME);END{:210};128:{214:} BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=88;END;CUR_XREF:=XREF[CUR_NAME]; IF XMEM[CUR_XREF].NUM_FIELD>=10240 THEN BEGIN OUT_MOD(XMEM[CUR_XREF]. NUM_FIELD-10240); IF PHASE_THREE THEN BEGIN CUR_XREF:=XMEM[CUR_XREF].XLINK_FIELD; WHILE XMEM[CUR_XREF].NUM_FIELD>=10240 DO BEGIN BEGIN IF OUT_PTR= LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=44; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=32;END;OUT_MOD(XMEM[CUR_XREF].NUM_FIELD-10240); CUR_XREF:=XMEM[CUR_XREF].XLINK_FIELD;END;END; END ELSE BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=48;END;BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=58;END;{215:} K:=BYTE_START[CUR_NAME];W:=CUR_NAME MOD 2; K_LIMIT:=BYTE_START[CUR_NAME+2];CUR_MOD_NAME:=CUR_NAME; WHILE K64 THEN BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Illegal control code in section name:');END; BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'<');END;PRINT_ID(CUR_MOD_NAME); WRITE(TERM_OUT,'> ');HISTORY:=2;END;K:=K+1;END{:216}; IF B<>124 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=B;END ELSE BEGIN{217:}J:=LIMIT+1; BUFFER[J]:=124;STRING_DELIMITER:=0; WHILE TRUE DO BEGIN IF K>=K_LIMIT THEN BEGIN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Pascal text in section name didn''t end:');END; BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'<');END;PRINT_ID(CUR_MOD_NAME); WRITE(TERM_OUT,'> ');HISTORY:=2;GOTO 31;END;B:=BYTE_MEM[W,K];K:=K+1; IF B=64 THEN{218:} BEGIN IF J>LONG_BUF_SIZE-4 THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','buffer',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;BUFFER[J+1]:=64;BUFFER[J+2]:=BYTE_MEM[W,K]; J:=J+2;K:=K+1;END{:218} ELSE BEGIN IF(B=34)OR(B=39)THEN IF STRING_DELIMITER=0 THEN STRING_DELIMITER:=B ELSE IF STRING_DELIMITER=B THEN STRING_DELIMITER:=0; IF(B<>124)OR(STRING_DELIMITER<>0)THEN BEGIN IF J>LONG_BUF_SIZE-3 THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','buffer',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;J:=J+1;BUFFER[J]:=B;END ELSE GOTO 31;END;END; 31:{:217};SAVE_LOC:=LOC;SAVE_LIMIT:=LIMIT;LOC:=LIMIT+2;LIMIT:=J+1; BUFFER[LIMIT]:=124;OUTPUT_PASCAL;LOC:=SAVE_LOC;LIMIT:=SAVE_LIMIT;END; END{:215};BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=92; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=88;END;END{:214};131,133,132:{211:} BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=109; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=97;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=116; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=104;END; IF A=131 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=98; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=105;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=110; END ELSE IF A=132 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=114; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=101;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=108; END ELSE BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=111;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=112;END; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=123;END;END{:211};135:BEGIN REPEAT A:=GET_OUTPUT; UNTIL(A<139)OR(A>142);GOTO 21;END;134:BEGIN REPEAT A:=GET_OUTPUT; UNTIL((A<139)AND(A<>32))OR(A>142);GOTO 21;END; 136,137,138,139,140,141,142:{212:} IF A<140 THEN BEGIN IF CUR_STATE.MODE_FIELD=1 THEN BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=A-87;END; IF A=138 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=GET_OUTPUT; END END ELSE IF A=138 THEN B:=GET_OUTPUT END ELSE{213:}BEGIN B:=A; SAVE_MODE:=CUR_STATE.MODE_FIELD;WHILE TRUE DO BEGIN A:=GET_OUTPUT; IF(A=135)OR(A=134)THEN GOTO 21; IF((A<>32)AND(A<140))OR(A>142)THEN BEGIN IF SAVE_MODE=1 THEN BEGIN IF OUT_PTR>3 THEN IF(OUT_BUF[OUT_PTR]=80)AND(OUT_BUF[OUT_PTR-1]=92)AND( OUT_BUF[OUT_PTR-2]=89)AND(OUT_BUF[OUT_PTR-3]=92)THEN GOTO 21; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=B-87;END; IF A<>143 THEN FINISH_LINE; END ELSE IF(A<>143)AND(CUR_STATE.MODE_FIELD=0)THEN BEGIN IF OUT_PTR= LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=32;END; GOTO 21;END;IF A>B THEN B:=A;END;END{:213}{:212}; OTHERS:BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=A;END END;END;10:END;{:209}{227:} PROCEDURE FINISH_PASCAL;VAR P:TEXT_POINTER; BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=80;END; BEGIN IF TOK_PTR+2>MAX_TOKS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','token',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;TOK_MEM[TOK_PTR]:=141;TOK_PTR:=TOK_PTR+1;END; APP_COMMENT;P:=TRANSLATE;TOK_MEM[TOK_PTR]:=P+40960;TOK_PTR:=TOK_PTR+1; MAKE_OUTPUT; IF OUT_PTR>1 THEN IF OUT_BUF[OUT_PTR-1]=92 THEN IF OUT_BUF[OUT_PTR]=54 THEN OUT_PTR:=OUT_PTR-2 ELSE IF OUT_BUF[OUT_PTR]=55 THEN OUT_BUF[OUT_PTR ]:=89;BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=112; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=97;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=114;END;FINISH_LINE; {IF TEXT_PTR>MAX_TXT_PTR THEN MAX_TXT_PTR:=TEXT_PTR; IF TOK_PTR>MAX_TOK_PTR THEN MAX_TOK_PTR:=TOK_PTR; IF SCRAP_PTR>MAX_SCR_PTR THEN MAX_SCR_PTR:=SCRAP_PTR;}TOK_PTR:=1; TEXT_PTR:=1;SCRAP_PTR:=0;END;{:227}{237:} PROCEDURE FOOTNOTE(FLAG:SIXTEEN_BITS);LABEL 30,10;VAR Q:XREF_NUMBER; BEGIN IF XMEM[CUR_XREF].NUM_FIELD<=FLAG THEN GOTO 10;FINISH_LINE; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;END; IF FLAG=0 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=85; END ELSE BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=65;END;BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=32; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=115;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=101; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=99;END;BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=116; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=105;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=111; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=110;END;{238:}Q:=CUR_XREF; IF XMEM[XMEM[Q].XLINK_FIELD].NUM_FIELD>FLAG THEN BEGIN IF OUT_PTR= LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=115;END; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=126;END; WHILE TRUE DO BEGIN OUT_MOD(XMEM[CUR_XREF].NUM_FIELD-FLAG); CUR_XREF:=XMEM[CUR_XREF].XLINK_FIELD; IF XMEM[CUR_XREF].NUM_FIELD<=FLAG THEN GOTO 30; IF(XMEM[XMEM[CUR_XREF].XLINK_FIELD].NUM_FIELD>FLAG)OR(CUR_XREF<>XMEM[Q]. XLINK_FIELD)THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=44;END; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=32;END; IF XMEM[XMEM[CUR_XREF].XLINK_FIELD].NUM_FIELD<=FLAG THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=97;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=110; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=100;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=126;END;END;30:{:238}; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=46;END;10:END;{:237}{250:} PROCEDURE UNBUCKET(D:EIGHT_BITS);VAR C:ASCII_CODE; BEGIN FOR C:=100 DOWNTO 0 DO IF BUCKET[COLLATE[C]]>0 THEN BEGIN IF SCRAP_PTR>MAX_SCRAPS THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Sorry, ','sorting',' capacity exceeded');ERROR; HISTORY:=3;JUMP_OUT;END;SCRAP_PTR:=SCRAP_PTR+1; {IF SCRAP_PTR>MAX_SORT_PTR THEN MAX_SORT_PTR:=SCRAP_PTR;} IF C=0 THEN CAT[SCRAP_PTR]:=255 ELSE CAT[SCRAP_PTR]:=D; TRANS[SCRAP_PTR]:=BUCKET[COLLATE[C]];BUCKET[COLLATE[C]]:=0;END;END; {:250}{257:}PROCEDURE MOD_PRINT(P:NAME_POINTER); BEGIN IF P>0 THEN BEGIN MOD_PRINT(LINK[P]); BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=58;END;TOK_PTR:=1;TEXT_PTR:=1; SCRAP_PTR:=0;STACK_PTR:=0;CUR_STATE.MODE_FIELD:=1; TOK_MEM[TOK_PTR]:=P+30720;TOK_PTR:=TOK_PTR+1;MAKE_OUTPUT;FOOTNOTE(0); FINISH_LINE;MOD_PRINT(ILK[P]);END;END;{:257}{261:}{PROCEDURE DEBUG_HELP; LABEL 888,10;VAR K:SIXTEEN_BITS;BEGIN DEBUG_SKIPPED:=DEBUG_SKIPPED+1; IF DEBUG_SKIPPED146 THEN NEW_XREF(ID_LOOKUP(NEXT_CONTROL-130));END; OTHERS:END;UNTIL NEXT_CONTROL>=143{:114};{116:} WHILE NEXT_CONTROL<=144 DO BEGIN XREF_SWITCH:=10240; IF NEXT_CONTROL=144 THEN NEXT_CONTROL:=GET_NEXT ELSE{117:} BEGIN NEXT_CONTROL:=GET_NEXT; IF NEXT_CONTROL=130 THEN BEGIN LHS:=ID_LOOKUP(0);ILK[LHS]:=0; NEW_XREF(LHS);NEXT_CONTROL:=GET_NEXT; IF NEXT_CONTROL=30 THEN BEGIN NEXT_CONTROL:=GET_NEXT; IF NEXT_CONTROL=130 THEN BEGIN RHS:=ID_LOOKUP(0);ILK[LHS]:=ILK[RHS]; ILK[RHS]:=0;NEW_XREF(RHS);ILK[RHS]:=ILK[LHS];NEXT_CONTROL:=GET_NEXT;END; END;END;END{:117};OUTER_XREF;END{:116};{118:} IF NEXT_CONTROL<=146 THEN BEGIN IF NEXT_CONTROL=145 THEN MOD_XREF_SWITCH :=0 ELSE MOD_XREF_SWITCH:=10240; REPEAT IF NEXT_CONTROL=146 THEN NEW_MOD_XREF(CUR_MODULE); NEXT_CONTROL:=GET_NEXT;OUTER_XREF;UNTIL NEXT_CONTROL>146;END{:118}; IF CHANGED_MODULE[MODULE_COUNT]THEN CHANGE_EXISTS:=TRUE;END{:111}; CHANGED_MODULE[MODULE_COUNT]:=CHANGE_EXISTS;PHASE_ONE:=FALSE;{121:} MOD_CHECK(ILK[0]){:121};{:110};END;PROCEDURE PHASE_II; VAR MOD_COUNT_PLUS_DEF_FLAG:SIXTEEN_BITS;BEGIN{219:}RESET_INPUT; BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'Writing the output file...'); END;MODULE_COUNT:=0;COPY_LIMBO;FINISH_LINE;FLUSH_BUFFER(0,FALSE); WHILE NOT INPUT_HAS_ENDED DO{221:}BEGIN MODULE_COUNT:=MODULE_COUNT+1; {222:}BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;END; IF BUFFER[LOC-1]<>42 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=77; END ELSE BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=78;END; WRITE(TERM_OUT,'*',MODULE_COUNT:1);BREAK(TERM_OUT);END; OUT_MOD(MODULE_COUNT);BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=46; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=32;END{:222};SAVE_LINE:=OUT_LINE;SAVE_PLACE:=OUT_PTR; {223:}REPEAT NEXT_CONTROL:=COPY_TEX; CASE NEXT_CONTROL OF 124:BEGIN STACK_PTR:=0;CUR_STATE.MODE_FIELD:=1; OUTPUT_PASCAL;END;64:BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=64;END;12:{224:} BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=79; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=123;END; WHILE(BUFFER[LOC]>=48)AND(BUFFER[LOC]<=55)DO BEGIN BEGIN IF OUT_PTR= LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=BUFFER[LOC];END;LOC:=LOC+1;END; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=125;END;END{:224};13:{225:} BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=72; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=123;END; WHILE((BUFFER[LOC]>=48)AND(BUFFER[LOC]<=57))OR((BUFFER[LOC]>=65)AND( BUFFER[LOC]<=70))DO BEGIN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=BUFFER[LOC];END;LOC:=LOC+1;END; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=125;END;END{:225}; 134,131,132,133,146:BEGIN LOC:=LOC-2;NEXT_CONTROL:=GET_NEXT; IF NEXT_CONTROL=134 THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN( TERM_OUT);WRITE(TERM_OUT,'! TeX string should be in Pascal text only'); ERROR;END;END;END; 9,10,135,137,138,139,140,141,136,142:BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,'! You can''t do that in TeX text'); ERROR;END;END;OTHERS:END;UNTIL NEXT_CONTROL>=143{:223};{226:} IF NEXT_CONTROL<=144 THEN BEGIN IF(SAVE_LINE<>OUT_LINE)OR(SAVE_PLACE<> OUT_PTR)THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=92; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=89;END;SAVE_LINE:=OUT_LINE;SAVE_PLACE:=OUT_PTR;END; WHILE NEXT_CONTROL<=144 DO BEGIN STACK_PTR:=0;CUR_STATE.MODE_FIELD:=1; IF NEXT_CONTROL=144 THEN{228:}BEGIN BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=68;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; NEXT_CONTROL:=GET_NEXT; IF NEXT_CONTROL<>130 THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN( TERM_OUT);WRITE(TERM_OUT,'! Improper macro definition');ERROR;END; END ELSE BEGIN TOK_MEM[TOK_PTR]:=10240+ID_LOOKUP(0);TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; NEXT_CONTROL:=GET_NEXT;END{:228}ELSE{229:} BEGIN BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1; TOK_MEM[TOK_PTR]:=70;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=3;TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;NEXT_CONTROL:=GET_NEXT; IF NEXT_CONTROL=130 THEN BEGIN BEGIN TOK_MEM[TOK_PTR]:=10240+ID_LOOKUP(0 );TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;NEXT_CONTROL:=GET_NEXT; IF NEXT_CONTROL=30 THEN BEGIN BEGIN TOK_MEM[TOK_PTR]:=92; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=83;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; NEXT_CONTROL:=GET_NEXT; IF NEXT_CONTROL=130 THEN BEGIN BEGIN TOK_MEM[TOK_PTR]:=10240+ID_LOOKUP(0 );TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;BEGIN SCRAP_PTR:=SCRAP_PTR+1; CAT[SCRAP_PTR]:=9;TRANS[SCRAP_PTR]:=0;END;NEXT_CONTROL:=GET_NEXT;END; END;END; IF SCRAP_PTR<>5 THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT) ;WRITE(TERM_OUT,'! Improper format definition');ERROR;END;END;END{:229}; OUTER_PARSE;FINISH_PASCAL;END{:226};{231:}THIS_MODULE:=0; IF NEXT_CONTROL<=146 THEN BEGIN IF(SAVE_LINE<>OUT_LINE)OR(SAVE_PLACE<> OUT_PTR)THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=92; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=89;END;STACK_PTR:=0;CUR_STATE.MODE_FIELD:=1; IF NEXT_CONTROL=145 THEN NEXT_CONTROL:=GET_NEXT ELSE BEGIN THIS_MODULE:= CUR_MODULE;{232:}REPEAT NEXT_CONTROL:=GET_NEXT;UNTIL NEXT_CONTROL<>43; IF(NEXT_CONTROL<>61)AND(NEXT_CONTROL<>30)THEN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! You need an = sign after the section name');ERROR;END; END ELSE NEXT_CONTROL:=GET_NEXT; IF OUT_PTR>1 THEN IF(OUT_BUF[OUT_PTR]=89)AND(OUT_BUF[OUT_PTR-1]=92)THEN BEGIN TOK_MEM[TOK_PTR]:=139;TOK_PTR:=TOK_PTR+1;END; BEGIN TOK_MEM[TOK_PTR]:=30720+THIS_MODULE;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=22;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END; CUR_XREF:=XREF[THIS_MODULE];MOD_COUNT_PLUS_DEF_FLAG:=MODULE_COUNT+10240; IF XMEM[CUR_XREF].NUM_FIELD<>MOD_COUNT_PLUS_DEF_FLAG THEN BEGIN BEGIN TOK_MEM[TOK_PTR]:=132;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=43; TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=125;TOK_PTR:=TOK_PTR+1; SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2;TRANS[SCRAP_PTR]:=TEXT_PTR; TEXT_PTR:=TEXT_PTR+1;TOK_START[TEXT_PTR]:=TOK_PTR;END;THIS_MODULE:=0; END;BEGIN TOK_MEM[TOK_PTR]:=92;TOK_PTR:=TOK_PTR+1;TOK_MEM[TOK_PTR]:=83; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=2; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;BEGIN TOK_MEM[TOK_PTR]:=141; TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=9; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;{:232};END; WHILE NEXT_CONTROL<=146 DO BEGIN OUTER_PARSE;{233:} IF NEXT_CONTROL<146 THEN BEGIN BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN (TERM_OUT);WRITE(TERM_OUT,'! You can''t do that in Pascal text');ERROR; END;END;NEXT_CONTROL:=GET_NEXT; END ELSE IF NEXT_CONTROL=146 THEN BEGIN BEGIN TOK_MEM[TOK_PTR]:=30720+ CUR_MODULE;TOK_PTR:=TOK_PTR+1;SCRAP_PTR:=SCRAP_PTR+1;CAT[SCRAP_PTR]:=22; TRANS[SCRAP_PTR]:=TEXT_PTR;TEXT_PTR:=TEXT_PTR+1; TOK_START[TEXT_PTR]:=TOK_PTR;END;NEXT_CONTROL:=GET_NEXT;END{:233};END; FINISH_PASCAL;END{:231};{234:}IF THIS_MODULE>0 THEN BEGIN{236:} FIRST_XREF:=XREF[THIS_MODULE];THIS_XREF:=XMEM[FIRST_XREF].XLINK_FIELD; IF XMEM[THIS_XREF].NUM_FIELD>10240 THEN BEGIN MID_XREF:=THIS_XREF; CUR_XREF:=0;REPEAT NEXT_XREF:=XMEM[THIS_XREF].XLINK_FIELD; XMEM[THIS_XREF].XLINK_FIELD:=CUR_XREF;CUR_XREF:=THIS_XREF; THIS_XREF:=NEXT_XREF;UNTIL XMEM[THIS_XREF].NUM_FIELD<=10240; XMEM[FIRST_XREF].XLINK_FIELD:=CUR_XREF;END ELSE MID_XREF:=0;CUR_XREF:=0; WHILE THIS_XREF<>0 DO BEGIN NEXT_XREF:=XMEM[THIS_XREF].XLINK_FIELD; XMEM[THIS_XREF].XLINK_FIELD:=CUR_XREF;CUR_XREF:=THIS_XREF; THIS_XREF:=NEXT_XREF;END; IF MID_XREF>0 THEN XMEM[MID_XREF].XLINK_FIELD:=CUR_XREF ELSE XMEM[ FIRST_XREF].XLINK_FIELD:=CUR_XREF; CUR_XREF:=XMEM[FIRST_XREF].XLINK_FIELD{:236};FOOTNOTE(10240); FOOTNOTE(0);END{:234};{239:}BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=92; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=102;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=105;END;FINISH_LINE; FLUSH_BUFFER(0,FALSE);{:239};END{:221}{:219};END;PROCEDURE PHASE_III; BEGIN{240:}PHASE_THREE:=TRUE;BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'Writing the index...');END; IF CHANGE_EXISTS THEN BEGIN FINISH_LINE;{242:}BEGIN K_MODULE:=1; WHILE NOT CHANGED_MODULE[K_MODULE]DO K_MODULE:=K_MODULE+1; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=99; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=104;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=32;END;OUT_MOD(K_MODULE); REPEAT REPEAT K_MODULE:=K_MODULE+1 UNTIL CHANGED_MODULE[K_MODULE]; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=44;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=32;END;OUT_MOD(K_MODULE); UNTIL K_MODULE=MODULE_COUNT;BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=46;END;END{:242};END;FINISH_LINE; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=105; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=110;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=120;END;FINISH_LINE;{244:} FOR C:=0 TO 127 DO BUCKET[C]:=0; FOR H:=0 TO HASH_SIZE-1 DO BEGIN NEXT_NAME:=HASH[H]; WHILE NEXT_NAME<>0 DO BEGIN CUR_NAME:=NEXT_NAME; NEXT_NAME:=LINK[CUR_NAME]; IF XREF[CUR_NAME]<>0 THEN BEGIN C:=BYTE_MEM[CUR_NAME MOD 2,BYTE_START[ CUR_NAME]];IF(C<=90)AND(C>=65)THEN C:=C+32;BLINK[CUR_NAME]:=BUCKET[C]; BUCKET[C]:=CUR_NAME;END;END;END{:244};{251:}SCRAP_PTR:=0;UNBUCKET(1); WHILE SCRAP_PTR>0 DO BEGIN CUR_DEPTH:=CAT[SCRAP_PTR]; IF(BLINK[TRANS[SCRAP_PTR]]=0)OR(CUR_DEPTH=255)THEN{253:} BEGIN CUR_NAME:=TRANS[SCRAP_PTR];{IF TROUBLE_SHOOTING THEN DEBUG_HELP;} REPEAT BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=58;END;{254:} CASE ILK[CUR_NAME]OF 0:IF BYTE_START[CUR_NAME+2]-BYTE_START[CUR_NAME]=1 THEN BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=124; END ELSE BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=92;END;1:; 2:BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=57;END; 3:BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=46;END; OTHERS:BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=38;END END;OUT_NAME(CUR_NAME){:254} ;{255:}{256:}THIS_XREF:=XREF[CUR_NAME];CUR_XREF:=0; REPEAT NEXT_XREF:=XMEM[THIS_XREF].XLINK_FIELD; XMEM[THIS_XREF].XLINK_FIELD:=CUR_XREF;CUR_XREF:=THIS_XREF; THIS_XREF:=NEXT_XREF;UNTIL THIS_XREF=0{:256}; REPEAT BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=44;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=32;END; CUR_VAL:=XMEM[CUR_XREF].NUM_FIELD; IF CUR_VAL<10240 THEN OUT_MOD(CUR_VAL)ELSE BEGIN BEGIN IF OUT_PTR= LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=92; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=91;END;OUT_MOD(CUR_VAL-10240); BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=93;END;END;CUR_XREF:=XMEM[CUR_XREF].XLINK_FIELD; UNTIL CUR_XREF=0;BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=46;END;FINISH_LINE{:255}; CUR_NAME:=BLINK[CUR_NAME];UNTIL CUR_NAME=0;SCRAP_PTR:=SCRAP_PTR-1; END{:253}ELSE{252:}BEGIN NEXT_NAME:=TRANS[SCRAP_PTR]; REPEAT CUR_NAME:=NEXT_NAME;NEXT_NAME:=BLINK[CUR_NAME]; CUR_BYTE:=BYTE_START[CUR_NAME]+CUR_DEPTH;CUR_BANK:=CUR_NAME MOD 2; IF CUR_BYTE=BYTE_START[CUR_NAME+2]THEN C:=0 ELSE BEGIN C:=BYTE_MEM[ CUR_BANK,CUR_BYTE];IF(C<=90)AND(C>=65)THEN C:=C+32;END; BLINK[CUR_NAME]:=BUCKET[C];BUCKET[C]:=CUR_NAME;UNTIL NEXT_NAME=0; SCRAP_PTR:=SCRAP_PTR-1;UNBUCKET(CUR_DEPTH+1);END{:252};END{:251}; BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=92;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=102; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=105;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=110;END;FINISH_LINE;{258:} MOD_PRINT(ILK[0]){:258};BEGIN IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=92; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=99;IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT; OUT_PTR:=OUT_PTR+1;OUT_BUF[OUT_PTR]:=111; IF OUT_PTR=LINE_LENGTH THEN BREAK_OUT;OUT_PTR:=OUT_PTR+1; OUT_BUF[OUT_PTR]:=110;END;FINISH_LINE;WRITE(TERM_OUT,'Done.');{:240}; END;BEGIN INITIALIZE; WRITELN(TERM_OUT,'This is Weave 2.7 for Cedar 6.0');{65:}ID_LOC:=10; ID_FIRST:=7;BUFFER[7]:=97;BUFFER[8]:=110;BUFFER[9]:=100; CUR_NAME:=ID_LOOKUP(28);ID_FIRST:=5;BUFFER[5]:=97;BUFFER[6]:=114; BUFFER[7]:=114;BUFFER[8]:=97;BUFFER[9]:=121;CUR_NAME:=ID_LOOKUP(4); ID_FIRST:=5;BUFFER[5]:=98;BUFFER[6]:=101;BUFFER[7]:=103;BUFFER[8]:=105; BUFFER[9]:=110;CUR_NAME:=ID_LOOKUP(5);ID_FIRST:=6;BUFFER[6]:=99; BUFFER[7]:=97;BUFFER[8]:=115;BUFFER[9]:=101;CUR_NAME:=ID_LOOKUP(6); ID_FIRST:=5;BUFFER[5]:=99;BUFFER[6]:=111;BUFFER[7]:=110;BUFFER[8]:=115; BUFFER[9]:=116;CUR_NAME:=ID_LOOKUP(7);ID_FIRST:=7;BUFFER[7]:=100; BUFFER[8]:=105;BUFFER[9]:=118;CUR_NAME:=ID_LOOKUP(8);ID_FIRST:=8; BUFFER[8]:=100;BUFFER[9]:=111;CUR_NAME:=ID_LOOKUP(9);ID_FIRST:=4; BUFFER[4]:=100;BUFFER[5]:=111;BUFFER[6]:=119;BUFFER[7]:=110; BUFFER[8]:=116;BUFFER[9]:=111;CUR_NAME:=ID_LOOKUP(20);ID_FIRST:=6; BUFFER[6]:=101;BUFFER[7]:=108;BUFFER[8]:=115;BUFFER[9]:=101; CUR_NAME:=ID_LOOKUP(10);ID_FIRST:=7;BUFFER[7]:=101;BUFFER[8]:=110; BUFFER[9]:=100;CUR_NAME:=ID_LOOKUP(11);ID_FIRST:=6;BUFFER[6]:=102; BUFFER[7]:=105;BUFFER[8]:=108;BUFFER[9]:=101;CUR_NAME:=ID_LOOKUP(4); ID_FIRST:=7;BUFFER[7]:=102;BUFFER[8]:=111;BUFFER[9]:=114; CUR_NAME:=ID_LOOKUP(12);ID_FIRST:=2;BUFFER[2]:=102;BUFFER[3]:=117; BUFFER[4]:=110;BUFFER[5]:=99;BUFFER[6]:=116;BUFFER[7]:=105; BUFFER[8]:=111;BUFFER[9]:=110;CUR_NAME:=ID_LOOKUP(17);ID_FIRST:=6; BUFFER[6]:=103;BUFFER[7]:=111;BUFFER[8]:=116;BUFFER[9]:=111; CUR_NAME:=ID_LOOKUP(13);ID_FIRST:=8;BUFFER[8]:=105;BUFFER[9]:=102; CUR_NAME:=ID_LOOKUP(14);ID_FIRST:=8;BUFFER[8]:=105;BUFFER[9]:=110; CUR_NAME:=ID_LOOKUP(30);ID_FIRST:=5;BUFFER[5]:=108;BUFFER[6]:=97; BUFFER[7]:=98;BUFFER[8]:=101;BUFFER[9]:=108;CUR_NAME:=ID_LOOKUP(7); ID_FIRST:=7;BUFFER[7]:=109;BUFFER[8]:=111;BUFFER[9]:=100; CUR_NAME:=ID_LOOKUP(8);ID_FIRST:=7;BUFFER[7]:=110;BUFFER[8]:=105; BUFFER[9]:=108;CUR_NAME:=ID_LOOKUP(16);ID_FIRST:=7;BUFFER[7]:=110; BUFFER[8]:=111;BUFFER[9]:=116;CUR_NAME:=ID_LOOKUP(29);ID_FIRST:=8; BUFFER[8]:=111;BUFFER[9]:=102;CUR_NAME:=ID_LOOKUP(9);ID_FIRST:=8; BUFFER[8]:=111;BUFFER[9]:=114;CUR_NAME:=ID_LOOKUP(55);ID_FIRST:=4; BUFFER[4]:=112;BUFFER[5]:=97;BUFFER[6]:=99;BUFFER[7]:=107; BUFFER[8]:=101;BUFFER[9]:=100;CUR_NAME:=ID_LOOKUP(13);ID_FIRST:=1; BUFFER[1]:=112;BUFFER[2]:=114;BUFFER[3]:=111;BUFFER[4]:=99; BUFFER[5]:=101;BUFFER[6]:=100;BUFFER[7]:=117;BUFFER[8]:=114; BUFFER[9]:=101;CUR_NAME:=ID_LOOKUP(17);ID_FIRST:=3;BUFFER[3]:=112; BUFFER[4]:=114;BUFFER[5]:=111;BUFFER[6]:=103;BUFFER[7]:=114; BUFFER[8]:=97;BUFFER[9]:=109;CUR_NAME:=ID_LOOKUP(17);ID_FIRST:=4; BUFFER[4]:=114;BUFFER[5]:=101;BUFFER[6]:=99;BUFFER[7]:=111; BUFFER[8]:=114;BUFFER[9]:=100;CUR_NAME:=ID_LOOKUP(18);ID_FIRST:=4; BUFFER[4]:=114;BUFFER[5]:=101;BUFFER[6]:=112;BUFFER[7]:=101; BUFFER[8]:=97;BUFFER[9]:=116;CUR_NAME:=ID_LOOKUP(19);ID_FIRST:=7; BUFFER[7]:=115;BUFFER[8]:=101;BUFFER[9]:=116;CUR_NAME:=ID_LOOKUP(4); ID_FIRST:=6;BUFFER[6]:=116;BUFFER[7]:=104;BUFFER[8]:=101;BUFFER[9]:=110; CUR_NAME:=ID_LOOKUP(9);ID_FIRST:=8;BUFFER[8]:=116;BUFFER[9]:=111; CUR_NAME:=ID_LOOKUP(20);ID_FIRST:=6;BUFFER[6]:=116;BUFFER[7]:=121; BUFFER[8]:=112;BUFFER[9]:=101;CUR_NAME:=ID_LOOKUP(7);ID_FIRST:=5; BUFFER[5]:=117;BUFFER[6]:=110;BUFFER[7]:=116;BUFFER[8]:=105; BUFFER[9]:=108;CUR_NAME:=ID_LOOKUP(21);ID_FIRST:=7;BUFFER[7]:=118; BUFFER[8]:=97;BUFFER[9]:=114;CUR_NAME:=ID_LOOKUP(22);ID_FIRST:=5; BUFFER[5]:=119;BUFFER[6]:=104;BUFFER[7]:=105;BUFFER[8]:=108; BUFFER[9]:=101;CUR_NAME:=ID_LOOKUP(12);ID_FIRST:=6;BUFFER[6]:=119; BUFFER[7]:=105;BUFFER[8]:=116;BUFFER[9]:=104;CUR_NAME:=ID_LOOKUP(12); ID_FIRST:=3;BUFFER[3]:=120;BUFFER[4]:=99;BUFFER[5]:=108;BUFFER[6]:=97; BUFFER[7]:=117;BUFFER[8]:=115;BUFFER[9]:=101;CUR_NAME:=ID_LOOKUP(23); {:65};PHASE_I;PHASE_II;PHASE_III;{86:} IF CHANGE_LIMIT<>0 THEN BEGIN FOR LOC:=0 TO CHANGE_LIMIT DO BUFFER[LOC] :=CHANGE_BUFFER[LOC];LIMIT:=CHANGE_LIMIT;CHANGING:=TRUE; LINE:=OTHER_LINE;LOC:=CHANGE_LIMIT; BEGIN IF NOT PHASE_ONE THEN BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'! Change file entry did not match');ERROR;END;END; END{:86};9999:{[263:]BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'Memory usage statistics: ',NAME_PTR:1,' names, ', XREF_PTR:1,' cross references, ',BYTE_PTR[0]:1);END; FOR CUR_BANK:=1 TO 1 DO WRITE(TERM_OUT,'+',BYTE_PTR[CUR_BANK]:1); WRITE(TERM_OUT,' bytes;');BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'parsing required ',MAX_SCR_PTR:1,' scraps, ',MAX_TXT_PTR :1,' texts, ',MAX_TOK_PTR:1,' tokens, ',MAX_STACK_PTR:1,' levels;');END; BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'sorting required ',MAX_SORT_PTR:1,' levels.');END[:263]; }FILE_CLOSE(WEB_FILE);FILE_CLOSE(CHANGE_FILE);FILE_CLOSE(TEX_FILE); {264:}CASE HISTORY OF 0:BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'(No errors were found.)');END;1:BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'(Did you see the warning message above?)');END; 2:BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'(Pardon me, but I think I spotted something wrong.)'); END;3:BEGIN WRITELN(TERM_OUT); WRITE(TERM_OUT,'(That was a fatal error, my friend.)');END;END{:264}; WRITELN(TERM_OUT);END.{:262}