10 SUB MAIN(C,V$())@IF C<>4 THEN END 20 DIM B$[400],S9(30),S2(20),S3(60)@GOSUB 'LOADOPC'@ASSIGN #1 TO V$(1) 30 'RL':READ #1;S$@IF S$="EOF" THEN 'SEOF' 40 IF S$[1,1]="#" THEN DISP S$;@GOTO 30 50 S$[1,5]="LABEL" THEN GOSUB 'SETSYM'@GOTO 30 60 IF S$[1,4]="GOTO" THEN B$=B$&"6"@GOSUB 'REQSYM3'@B$=B$&"FFF"@GOTO 30 70 IF S$[1,5]="GOYES" THEN GOSUB 'REQSYM2'@B$=B$&"FF"@GOTO 30 80 P1=POS(S$," ")@IF P1 THEN GOSUB 'OPT' ELSE GOSUB 'SIMPLE' 90 GOTO 'RL' 100 'SIMPLE':F=0@FOR I=1 TO O0@IF O$(I)[1,3]<>S$[1,3] THEN 120 110 IF FNC$(O$(I),1)=S$ THEN B$=B$&FNC$(O$(I),3)@F=1 120 NEXT I@IF NOT F THEN DISP "S";S$;" not found"@END 130 RETURN 140 'OPT':S2$=S$[P+1,LEN(S$)] 150 S=0@F=0@E=0@D=0@FOR I=1 TO O0 160 IF S$[1,3]<>O$(I)[1,3] THEN 220 170 IF FNC$(O$(I),1)<>FNC$(S$,1) THEN 220 180 IF FNC$(O$(I),2)=S2$ THEN S=I 190 IF FNC$(O$(I),2)="fs" THEN F=I 200 IF FNC$(O$(I),2)="expr" THEN E=I 210 IF FNC$(O$(I),2)="d" THEN D=I 220 NEXT I 230 IF S THEN B$=B$&FNC$(O$(S),3)@RETURN 240 IF F THEN 'FS' 250 IF E THEN 'EXPR' 260 IF D THEN 'D' 270 DISP "UNK";S$;S2$;S;F;E@END 280 'FS':C3$=FNC$(O$(F),3)@DISP "code3";C3$;@X=MIN(1,POS(C3$,"b"))*8 290 X=X+(POS("P WPXSX S M B W A ",S2$)-1)/2 300 A=POS(C3$,"a") 310 B=POS(C3$,"b") 320 IF A THEN C3$[A,A]=DTH$(X)[5,5] 330 IF B THEN C3$[B,B]=DTH$(X)[5,5] 340 B$=B$&C3$@RETURN 350 'EXPR':C3$=FNC$(O$(E),3) 360 P=POS(C3$,"n") 370 FOR I=1TO LEN(S2$) 380 C3$[P+LEN(S2$)-I,P+LEN(S2$)-I]=S2$[I,I] 390 NEXT I@B$=B$&C3$@RETURN 400 'D':C3$=FNC$(O$(D),3) 410 P=POS(C3$,"m") 420 C3$[P,P]=DTH$(VAL(S2$)-1)[5,5] 430 B$=B$&C3$@RETURN 440 'SEOF':GOSUB 'FIXSYMS'@B$=B$&"E0F"@ASSIGN #1 TO * 450 PURGE V$(3)@CREATE TEXT V$(3),LEN(B$)+15 460 POKE DTH$(HTD(ADDR$(V$(3)))+16),"402E" 470 POKE DTH$(HTD(ADDR$(V$(3)))+47),B$@GOTO 'END' 480 'LOADOPC':ASSIGN #1 TO V$(2)@DIM O$(90)@O0=1 490 READ #1;O$(O0)@IF O$(O0)<>"EOF" THEN O0=O0+1@GOTO 490 ELSE O0=O0-1@ASSIGN #1 TO * 500 RETURN 510 'SETSYM':S9(VAL(FNC$(S$,2)))=LEN(B$)@RETURN 520 'REQSYM2':S2(VAL(FNC$(S$,2)))=LEN(B$)@RETURN 530 'REQSYM3':S3(VAL(FNC$(S$,2)))=LEN(B$)@RETURN 540 'FIXSYMS':FOR I=1 TO 60 550 IF NOT S2(I) THEN 580 560 A$=DTH$(253+S9(I)-S2(I)+3)[4,5] 570 B$[S2(I)+1,S2(I)+2]=A$[2,2]&A$[1,1] 580 IF NOT S3(I) THEN 610 590 A$=DTH$(4095+S9(I)-S3(I)+1)[3,5] 600 B$[S3(I)+1,S3(I)+3]=A[3,3]&A$[2,2]&A$[1,1] 610 NEXT I@RETURN 620 DEF FNC(B$,C) 630 IF C=0 THEN FNC=0 ELSE FNC=POS(B$," ",FNC(B$,C-1)+1) 640 END DEF 650 DEF FNC$(B$,C)=B$[FNC(B$&" ",MAX(0,C-1))+1,FNC(B$&" ",MAX(0,C))-1] 660 'END': 670 END SUB