1 ! PAHBAS.800
1000 INTEGER : EXTEND
1010 DIM Inline$=160,Utstr$=160
1020 IF PEEK(65364)>40 THEN Bredd=80 ELSE Bredd=40
1030 POKE 65364,Bredd
1040 DEF FNInput$(X,Y,Def1$,Def2$) LOCAL Inps$=50,Z
1050 ON ERROR GOTO 1150
1060 ; CUR(X,Y) Def1$ TAB(Bredd) CUR(X,Y);
1070 GET Inps$
1080 IF Inps$=CHR$(13) THEN RETURN Def1$
1090 IF Inps$<" " THEN 1070
1100 Z=SYS(6) : ; CUR(X,Y) TAB(Bredd) CUR(X,Y);
1110 INPUT ""Inps$ : IF Inps$="" OR LEN(Inps$)>40 THEN 1060
1120 IF INSTR(1,Inps$,".")=0 THEN Inps$=Inps$+Def2$
1130 ; CUR(X,Y) Inps$;
1140 RETURN Inps$
1150 IF ERRCODE=53 OR ERRCODE=148 OR ERRCODE=150 THEN RESUME 1060
1160 ; CHR$(7);
1170 RESUME
1180 FNEND
1190 DEF FNSysrad$(Exe$) LOCAL Utstr$=161
1200 Utstr$=CHR$(12)+" PAHBAS ver 2.4 (C) Peter ""HPA"" Anvin <4642> "+FNLeft$(Exe$+SPACE$(28),28)+" "+STRING$(80,61)
1210 IF Bredd<80 THEN Utstr$=CHR$(12)+" PAHBAS ver 2.4 "+FNLeft$(Exe$+SPACE$(19),19)+" "+STRING$(40,61) ! 40 tkn
1220 RETURN Utstr$
1230 FNEND
1240 DEF FNLeft$(Str$,Wid)=LEFT$(Str$+STRING$(Wid,255),Wid) ! LEFT$ utan ERR 134
1250 DEF FNMid$(Str$,Pos,Wid)=RIGHT$(FNLeft$(Str$,Pos+Wid-1),Pos)
1260 DEF FNRight$(Str$,Wid)
1270 IF LEN(Str$)" TAB(21-Prtoff) "Infil:"
1330 ; CUR(11,0) "<*.BAS>" TAB(21-Prtoff) "Utfil:"
1340 Infil$=FNInput$(9,30-Prtoff,"",".PAH")
1350 IF Infil$="" THEN 1300
1360 Defut$=LEFT$(Infil$,INSTR(1,Infil$,"."))+"BAS"
1370 Utfil$=FNInput$(11,30-Prtoff,Defut$,".BAS")
1380 ON ERROR GOTO 1960
1390 ; FNSysrad$("Ange adressuttryck")
1400 OPEN Infil$ AS FILE 1
1410 PREPARE Utfil$ AS FILE 2
1420 ON ERROR GOTO
1430 INPUT LINE #1,Inline$ : Inline$=LEFT$(Inline$,LEN(Inline$)-2)
1440 IF Inline$<>"PAH 2.4" THEN ; CUR(5,20-Prtoff) "Felaktig PAH fil version" : CLOSE : STOP
1450 ; #2 "1 INTEGER : EXTEND" : Lin=2
1460 INPUT LINE #1,Inline$ : Vilka=FNNohex(MID$(Inline$,2,4))
1470 ; CUR(4,20-Prtoff) "OBS! Alla giltiga BASIC-uttryck {r OK"
1480 FOR I=0 TO 15
1490 IF Vilka AND 2^I THEN ; CUR(6+I,20-Prtoff*2) "Ange basuttryck f|r %" HEX$(I) ":";
1500 NEXT I
1510 FOR I=0 TO 15
1520 IF (Vilka AND 2^I)=0 THEN 1560
1530 ; CUR(6+I,45-Prtoff*2);
1540 INPUT ""Uttr$
1550 ; #2 NUM$(Lin) " Bas" NUM$(I) "=" Uttr$ : Lin=Lin+1
1560 NEXT I
1570 ; FNSysrad$("Konverterar...")
1580 INPUT LINE #1,Inline$ : Inline$=LEFT$(Inline$,LEN(Inline$)-2)
1590 IF LEFT$(Inline$,1)="!" THEN 1870 ! Sista raden?
1600 Utstr$=FNUns$(Lin)+" POKE "
1610 Add=FNNohex(LEFT$(Inline$,4))
1620 Rl=INSTR(1,":0123456789ABCDEF",MID$(Inline$,5,1))-2
1630 Inline$=RIGHT$(Inline$,6)
1640 IF Rl>=0 THEN Utstr$=Utstr$+"Bas"+NUM$(Rl)+"+"
1650 Utstr$=Utstr$+FNUns$(Add)
1660 ; CUR(12,Bredd/2-5) "Rad nr " FNUns$(Lin)
1670 IF Inline$="" THEN ; #2 Utstr$ : Lin=Lin+1 : GOTO 1580
1680 IF LEN(Utstr$)>100 THEN ; #2 Utstr$ : Lin=Lin+1 : Utstr$=FNUns$(Lin)+" POKE " : GOTO 1640
1690 ON INSTR(1,"rhl",LEFT$(Inline$,1))+1 GOTO 1700,1740,1790,1830
1700 Utstr$=Utstr$+","+NUM$(FNNohex(LEFT$(Inline$,2)))
1710 Add=Add+1
1720 Inline$=RIGHT$(Inline$,3)
1730 GOTO 1670
1740 Adr=FNNohex(MID$(Inline$,3,4)) : Rel=FNNohex(MID$(Inline$,2,1))
1750 Utstr$=Utstr$+",Bas"+NUM$(Rel)+"+"+FNUns$(Adr)+",SWAP%(Bas"+NUM$(Rel)+"+"+FNUns$(Adr)+")"
1760 Add=Add+2
1770 Inline$=RIGHT$(Inline$,7)
1780 GOTO 1670
1790 Adr=FNNohex(MID$(Inline$,3,4)) : Rel=FNNohex(MID$(Inline$,2,1))
1800 Utstr$=Utstr$+",SWAP%(Bas"+NUM$(Rel)+"+"+FNUns$(Adr)+")"
1810 Add=Add+1
1820 GOTO 1670
1830 Adr=FNNohex(MID$(Inline$,3,2)) : Rel=FNNohex(MID$(Inline$,2,1))
1840 Utstr$=Utstr$+",Bas"+NUM$(Rel)+"+"+FNUns$(Adr)
1850 Add=Add+1
1860 GOTO 1670
1870 IF Inline$="!" THEN 1920
1880 IF MID$(Inline$,2,1)="r" THEN 1910
1890 ; #2 NUM$(Lin) " Z=CALL(" FNUns$(FNNohex(RIGHT$(Inline$,2))) ")"
1900 GOTO 1920
1910 ; #2 NUM$(Lin) " Z=CALL(Bas" NUM$(FNNohex(MID$(Inline$,3,1))) "+" FNUns$(FNNohex(RIGHT$(Inline$,4))) ")"
1920 CLOSE
1930 ; FNSysrad$("Allt klart!")
1940 ; CUR(5,0);
1950 END
1960 RESUME 1300
1970 DEF FNNohex(Hx$) LOCAL Siff$=16,Hxx$=4,V{rde
1980 Hxx$=Hx$
1990 Siff$="0123456789ABCDEF"
2000 V{rde=0
2010 V{rde=V{rde*16+INSTR(1,Siff$,LEFT$(Hxx$,1))-1
2020 Hxx$=RIGHT$(Hxx$,2)
2030 IF Hxx$<>"" THEN 2010
2040 RETURN V{rde
2050 FNEND
2060 DEF FNUns$(N)
2070 IF N<0 THEN RETURN NUM$(N+65536.) ELSE RETURN NUM$(N)
2080 FNEND