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