15 REM Till ABC-klubben fr}n Scandia-Metric
20 DEFFNM%(I%,J%)=I%-I%/J%*J%
30 DEFFNL%(I%)=SWAP%(I%) AND 255%
40 DEFFNR%(I%)=I% AND 255%
100 GOTO 12000
900 P0%=0% : E%=0% : F3%=0% : P5%=-1%
1000 GOSUB 10000 : IF R% THEN RETURN
1020 E%=0% : B1%=0% : F2%=0% : F6%=0% : GOSUB 2000 : GOSUB 3000 : IF R% THEN 1300
1060 V%=P0% : GOSUB 6000 : IF E% THEN 1300
1080 P2%=0% : F1%=0% : L2%=L1%
1100 L1%=L2% : E%=0% : IF O%=0% THEN 1300
1110 GOSUB 4000 : IF R% THEN 1200
1130 IF F1% THEN E%=9% ELSE E%=3%
1140 GOTO 1300
1200 F1%=-1% : B5%=B1% : I0%=0% : X1%=0% : O0%=FNL%(O1%) : GOSUB 4500 : IF NOT R% THEN 1100
1240 IF E% THEN 1300
1250 O0%=FNR%(O1%) : GOSUB 4500 : IF NOT R% THEN 1100
1270 IF E% THEN 1300
1280 IF X1% THEN GOSUB 1500
1285 GOSUB 2500 : IF E%=0% AND B%<>0% THEN E%=9%
1300 GOSUB 10500 : GOSUB 11000 : IF F3% THEN RETURN
1330 GOTO 1000
1500 B1%(4%)=B1%(3%) : B1%(3%)=B1%(2%) : B1%(2%)=B1%(1%) : B1%(1%)=253%-FNM%(X1%,2%)*32% : B1%=B1%+1%
1520 IF X1%>2% THEN B1%(4%)=B1%(3%) : B1%(3%)=D% AND 255% : B1%=B1%+1%
1530 RETURN
2000 L1%=1% : L$="" : GOSUB 2500 : IF B% THEN IF RIGHT$(B$,B%)=":" THEN B%=B%-1% : B$=LEFT$(B$,B%) : GOTO 2050
2040 IF LEFT$(L1$,1%)=" " THEN 2070
2050 IF B%95% THEN C$=CHR$(ASC(C$) AND 223%)
2602 GOSUB 2800 : IF 0%=INSTR(1%,C1$,C$) THEN 2600
2620 IF C$<>'"' THEN 2750
2650 GOSUB 2800 : IF C$='"' THEN 2600
2662 IF C$<>CHR$(13%) THEN 2650
2700 E%=13%
2750 B%=LEN(B$) : RETURN
2800 B$=B$+C$
2810 L1%=L1%+1% : C$=MID$(L1$,L1%,1%) : RETURN
3000 R%=0% : IF O%=0% THEN RETURN
3030 I%=INSTR(1%," ORG EQU END DEFB DEFW DEFS DEFM "," "+O$+" ") : IF I%=0% THEN RETURN
3050 R%=-1% : GOSUB 2500 : ON (I%+4%)/5% GOTO 3070,3100,3130,3150,3180,3230,3260
3070 F6%=-1% : GOSUB 7010 : P0%=V% : GOTO 3700
3100 F6%=-1% : GOSUB 7010 : S$=L$ : S%=V% : F2%=1% : GOSUB 6010 : R%=-1% : RETURN
3130 F3%=-1% : P0%=0% : GOTO 3700
3150 GOSUB 7000 : B1%(1%)=V% : B1%=1% : GOTO 3700
3180 GOSUB 7010 : B1%(1%)=FNR%(V%) : B1%(2%)=FNL%(V%) : B1%=2% : GOTO 3700
3230 F6%=-1% : GOSUB 7010 : B1%=V% : F2%=2% : GOTO 3700
3260 IF B%=0% THEN E%=9% : RETURN
3261 IF LEFT$(B$,1%)<>'"' OR RIGHT$(B$,B%)<>'"' THEN E%=13% : RETURN
3270 B%=B%-2% : B$=MID$(B$,2%,B%) : FOR I%=1% TO B% : C$=MID$(B$,I%,1%) : IF C$<>'"' THEN 3360
3320 I%=I%+1% : IF I%>B% THEN E%=13% : RETURN
3340 C$=MID$(B$,I%,1%) : IF C$<>'"' THEN E%=13% : RETURN
3360 IF B1%=20% THEN E%=6% : RETURN
3370 B1%=B1%+1% : B1%(B1%)=ASC(C$) : NEXT I%
3700 V%=P0% : GOSUB 6000 : R%=-1% : RETURN
4000 R%=0% : IF O%>4% THEN RETURN
4020 O$=LEFT$(O$+" ",4%)
4050 P2%=INSTR(P2%+1%,T1$,O$) : IF P2%=0% THEN RETURN
4070 IF FNM%(P2%,4%)<>1% THEN 4050
4080 I%=P2%/4% : B1%(1%)=FNL%(T1%(I%)) : B1%(2%)=FNR%(T1%(I%)) : B1%=2%+(B1%(2%)=255%) : R%=-1%
4120 IF I%=128%)*6%-(O0%>=192%)*7% : O0%=O0% AND 63% : IF O0%=0% THEN R%=-1% : RETURN
4546 GOSUB 2500 : IF O0%>14% THEN 4680
4550 IF B%=0% THEN R%=0% : RETURN
4560 ON O0% GOSUB 4750,4800,4850,4900,4950,5000,5050,5050,5100,5150,5200 : GOTO 4700
4680 IF O0%<32% THEN GOSUB 5400 : GOTO 4700
4690 ON O0%-39% GOSUB 5450,5500,5550,5600,5650,5670,5750,5800,5850
4700 B1%(B5%)=B1%(B5%) OR R2%*M2% : IF R2%<>-1% THEN R%=-1%
4720 RETURN
4750 IF B%=1% THEN R2%=INSTR(1%,"BCDEHL A",B$)-1%
4760 RETURN
4800 GOSUB 4750 : IF R2%<>-1% THEN RETURN
4810 GOSUB 5900 : IF I0%=0% OR B%<2% THEN RETURN
4820 IF B$="HL" THEN R2%=6% : RETURN
4825 C$=LEFT$(B$,2%) : IF C$="IX" THEN R2%=6% : X1%=3%
4827 IF C$="IY" THEN R2%=6% : X1%=4%
4830 B%=B%-2% : IF B%=0% OR R2%=-1% THEN D%=0% : RETURN
4837 B$=RIGHT$(B$,3%) : GOSUB 7010 : IF V%<-128% OR V%>127% THEN E%=10%
4838 D%=V% : RETURN
4850 GOSUB 4800 : IF I0% OR R2%<>-1% THEN RETURN
4870 B1%(1%)=B1%(1%) XOR 70% : GOTO 5470
4900 IF B%=2% THEN R2%=INSTR(1%," BC DE HL SP",B$)/3%-1%
4910 RETURN
4950 GOSUB 4900 : GOTO 5490
5000 GOSUB 4900 : IF R2%=3% THEN R2%=-1%
5020 IF B$="AF" THEN R2%=3%
5030 GOTO 5490
5050 GOSUB 4950
5060 IF R2%=2% AND X1%<>O0%-6% THEN R2%=-1%
5070 X1%=0% : RETURN
5100 IF B$="HL" THEN R2%=2%
5110 GOTO 5490
5150 GOSUB 5900 : IF I0%=0% THEN RETURN
5170 GOTO 5100
5200 I%=INSTR(1%," (BC) (DE) "," "+B$+" ") : IF I%<>0% THEN R2%=I%/6% : RETURN
5220 GOSUB 5650 : R2%=3% : RETURN
5400 I%=INSTR(1%," A I R (C) HL IX IY DE AF AF' SP (SP) "," "+B$+" ")
5410 IF O0%=I%/4%+19% THEN R2%=0%
5420 RETURN
5450 GOSUB 5900
5455 IF NOT I0% OR E% THEN R2%=-1% : RETURN
5465 GOSUB 7000 : B1%(2%)=V% : B1%=2% : R2%=0% : RETURN
5470 GOSUB 5900 : I0%= NOT I0% : GOTO 5455
5490 IF B$="IX" THEN R2%=2% : X1%=1%
5491 IF B$="IY" THEN R2%=2% : X1%=2%
5493 RETURN
5500 GOSUB 7000 : R2%=V% : IF V%>7% THEN E%=10%
5530 RETURN
5550 GOSUB 7010 : V%=V%-P0%-2% : IF V%<-128% OR V%>127% THEN E%=10%
5580 B1%(2%)=FNR%(V%) : B1%=2% : R2%=0% : RETURN
5600 GOSUB 7000 : IF FNM%(V%,8%) OR (V%>56%) THEN E%=10%
5620 R2%=V% : RETURN
5650 GOSUB 5900
5655 IF NOT I0% OR E% THEN R2%=-1% : RETURN
5660 GOSUB 7010 : B1%(B1%+1%)=FNR%(V%) : B1%=B1%+2% : B1%(B1%)=FNL%(V%) : R2%=0% : RETURN
5670 GOSUB 5900 : I0%= NOT I0% : GOTO 5655
5750 R2%=INSTR(1%," NZ Z NC C PO PE P M "," "+B$+" ")/3%-1% : RETURN
5800 GOSUB 5750 : IF R%>3% THEN R2%=-1%
5820 RETURN
5850 GOSUB 7000 : IF V%>2% THEN E%=10% : RETURN
5870 R2%=0% : B1%(2%)=70%-(V%>0%)*16%-(V%>1%)*8% : RETURN
5900 IF LEFT$(B$,1%)<>"(" OR RIGHT$(B$,B%)<>")" THEN I0%=0% : RETURN
5915 IF I0% THEN E%=9%
5920 I0%=-1% : B%=B%-2% : B$=MID$(B$,2%,B%) : RETURN
6000 S$=L$ : S%=V%
6010 IF LEN(S$)=0 THEN RETURN
6020 GOSUB 6500 : IF E% THEN RETURN
6040 IF P%=2% THEN 6100
6050 S1%=S1%+1% : IF S1%>S8% THEN E%=20% : RETURN
6080 S1$=S1$+S$ : S1%(S1%)=S% : RETURN
6100 GOSUB 6300 : GOSUB 6300 : IF R% THEN E%=11%
6130 RETURN
6300 R%=R%*S9%
6310 R%=INSTR(R%+1,S1$,S$) : IF R%=0% THEN RETURN
6330 IF FNM%(R%,S9%)<>1% THEN 6310
6340 R%=R%/S9%+1% : RETURN
6400 GOSUB 6500 : IF R% THEN R%=0% : RETURN
6415 IF P%=1% AND F6%=0% THEN R%=-1% : S%=0% : RETURN
6420 GOSUB 6300 : IF R%=0% THEN E%=8% : RETURN
6440 S%=S1%(R%) : RETURN
6500 R%=-1% : IF LEN(S$)>S9% THEN E%=2% : RETURN
6520 IF INSTR(1%,C5$,MID$(S$,1%,1%))=0% THEN 6600
6530 FOR I%=2% TO LEN(S$) : IF INSTR(1%,C5$+C6$+"_?",MID$(S$,I%,1%))=0% THEN 6600
6550 NEXT I% : S$=S$+SPACE$(S9%-LEN(S$)) : R%=0% : RETURN
6600 E%=2% : RETURN
7000 GOSUB 7010 : IF V% AND 65280% THEN E%=10%
7004 RETURN
7010 GOSUB 7100 : IF E<-32768% OR E>65535 THEN E%=10% ELSE V%=E
7030 RETURN
7100 B2%=1% : E0%=-1% : E1%=1% : E=0% : E1%(0%,1%)=6% : E1%(0%,0%)=8%
7110 GOSUB 7500 : IF E2%<>5% AND E2%<>6% THEN 7150
7131 E2%=E2%-4% : E3%=0%
7140 E1%(E1%,0%)=E2% : E1%(E1%,1%)=E3% : E1%=E1%+1% : GOTO 7110
7141 E1%(E1%,0%)=E2% : E1%(E1%,1%)=E3% : E1%=E1%+1% : GOTO 7110
7150 IF E2%=9% THEN E0%=E0%+1% : E0(E0%)=E3% : GOTO 7180
7160 IF E2%=0% THEN 7140
7170 E%=6% : RETURN
7180 GOSUB 7500
7190 IF E2%<3% OR E2%>8% THEN 7170
7200 IF E3%65535 THEN E0(E0%)=E0(E0%)-65536 : GOTO 7350
7355 GOTO 7200
7500 S$="" : IF B2%>B% THEN E2%=8% : E3%=7% : RETURN
7520 C$=MID$(B$,B2%,1%) : B2%=B2%+1% : IF INSTR(1%,C5$,C$) THEN 7600
7540 IF INSTR(1%,C6$,C$) THEN 7700
7550 IF C$='"' THEN 7660
7560 I%=INSTR(1%,"*/+-)($",C$) : IF I%=0% THEN E%=5% : RETURN
7580 IF I%=7% THEN E2%=9% : E3%=P0% : RETURN
7590 E2%=I%+2% : E3%=(I%-1%)/2%+2% : IF E2%=8% THEN E2%=0%
7593 IF E2%=7% THEN E3%=5%
7594 RETURN
7600 S$=S$+C$ : IF B2%>B% THEN 7640
7620 C$=MID$(B$,B2%,1%) : IF INSTR(1%,C5$+C6$+"?_",C$) THEN B2%=B2%+1% : GOTO 7600
7640 GOSUB 6400 : E2%=9% : E3%=S% : RETURN
7660 E2%=9% : E3%=ASC(MID$(B$,B2%,1%))
7680 IF MID$(B$,B2%+1%,1%)<>'"' THEN E%=13%
7690 B2%=B2%+2% : RETURN
7700 S$=S$+C$ : E2%=9%
7710 IF B2%>B% THEN 7740
7720 C$=MID$(B$,B2%,1%) : IF INSTR(1%,C3$+"QOH",C$) THEN B2%=B2%+1% : GOTO 7700
7740 I%=INSTR(1%,"DHBOQ",RIGHT$(S$,LEN(S$)))
7750 IF I% THEN S$=LEFT$(S$,LEN(S$)-1%)
7760 I%=10%+I%/2%*6%+14%*(I%>2%) : E=0% : FOR J%=1% TO LEN(S$)
7790 J1%=INSTR(1%,C3$,MID$(S$,J%,1%)) : IF J1%=0% OR J1%>I% THEN E%=4% : RETURN
7810 E=J1%-1%+E*I% : NEXT J% : IF E>65535 OR E<-32768% THEN E%=10% ELSE E3%=E
7840 RETURN
9000 I1%=10% : P6%=-1%
9010 P6%=P6%+1% : IF P6%>P5% THEN RETURN
9020 P7%=P5%(P6%,0%) : P8%=P5%(P6%,1%)
9030 FOR I%=1% TO 15% : IF I%>P8% THEN ; #3% : GOTO 9010
9040 IF I%=1% THEN ; #3%,I1%;"POKE"P7%"%"; : I1%=I1%+10%
9050 ; #3%;",";ASC(O5$)"%"; : O5$=RIGHT$(O5$,2%) : NEXT I%
9060 P8%=P8%-15% : P7%=P7%+15% : ; #3% : GOTO 9030
10000 R%=0% : ONERRORGOTO 10020
10010 INPUTLINE #1%L1$ : OUT 58%,INP(58%) AND 223% : GOTO 10030
10020 IF ERRCODE=42 THEN OUT 58%,INP(58%) OR 32% : GOTO 10000
10025 IF ERRCODE=34 THEN R%=-1% : RETURN ELSE CLOSE 1% : STOP
10030 ONERRORGOTO 0 : IF LEN(L1$)=2% THEN R%=-1%
10050 RETURN
10500 IF P%=1% AND E%=10% THEN E%=0%
10502 IF E% THEN E9%=E9%+1%
10504 IF F7% AND P%=1% AND E%=0% THEN 10640
10505 IF E% OR F2%=1% THEN 10620
10510 R%=FNL%(P0%) : GOSUB 10660 : R%=FNR%(P0%) : GOSUB 10660
10550 ; #F9%TAB(6%); : IF F2% THEN 10620
10570 FOR I5%=1% TO B1% : IF I5%>4% THEN 10620
10580 R%=B1%(I5%) : GOSUB 10660 : NEXT I5%
10620 ; #F9%TAB(16%)L1$;
10640 IF E% THEN ; #F9%"Fel nr:"E%
10645 IF E%>=20% THEN ; "Fatalt Fel" : RETURN ELSE RETURN
10660 R%=R% AND 255% : ; #F9%MID$(C3$,R%/16%+1%,1%)MID$(C3$,FNM%(R%,16%)+1%,1%); : RETURN
11000 IF P%=2% THEN 11030
11010 IF E%=0% THEN P0%=P0%+B1%
11020 RETURN
11030 IF F2%=2% THEN P0%=P0%+B1% : RETURN
11050 IF P5%=-1% THEN GOSUB 11140
11060 IF P5%(P5%,0%)+P5%(P5%,1%)<>P0% THEN GOSUB 11140 : IF E% THEN 10500
11090 P0%=P0%+B1% : P5%(P5%,1%)=P5%(P5%,1%)+B1%
11110 FOR I%=1% TO B1% : O5$=O5$+CHR$(B1%(I%)) : NEXT I% : RETURN
11140 P5%=P5%+1% : IF P5%>P9% THEN E%=21% : E3%=-1% : RETURN
11160 P5%(P5%,0%)=P0% : P5%(P5%,1%)=0% : RETURN
12000 S1%=0% : S1$="" : E9%=0% : O5$="" : IF T1%<>0% THEN 12200
12010 DIM C$=16%,C1$=16%,C3$=16%,C5$=31%,C6$=10%
12020 C1$=" ,;"""+CHR$(9%,13%) : OPEN "ASMCON" ASFILE 1%
12030 INPUT #1%,T1%,T1%,T2%,C5$,C6$,C3$ : T2%=T2%+1% : DIM T1$=4%*(T1%+1%),T1%(T1%),T2%(T2%)
12040 FOR I%=0% TO T1% : IF I%