1 REM Ins{nt av 1789 2 ! ********************************************************************** 3 ! Program LISTKOD.800 Utg}va 1.1 1984-04-28 4 ! av Bo Kullmar 5 ! Ins{nd av Bo Kullmar, 1789 6 ! F|r ABC800M ABC800C ABC802 ABC806 8 ! Testad p} ABC800C ABC806 9 ! Man m}ste l{gga in adressen till listrutinen f|r sin dator. Hur man 10 ! tar reda p} detta framg}r av en artikel i ABC-Bladet nr 1 1984. Adressen 11 ! skall skrivas in i funktionen FNList$ p} rad 65470 d{r det nu st}r 4907. 12 ! Programmet skall MERGAS ihop med det program vars internkod man vill 13 ! unders|ka. Den f|rsa byte i programmet {r antalet bytes per rad. Sedan 14 ! kommer radnummer i tv} byte och sista byten {r alltid 135. Dessa fyra 15 ! bytes visas alldrig p} sk{rmen. 16 ! ********************************************************************** 17 ; 'Kolla informationen i proammets b|rjan innan du k|r programmet. Ta' 18 ; 'sedan bort programhuvud och nummer{ndra l{mpligen rad nr 100 till nr 1.' 19 STOP 100 EXTEND : INTEGER : Z=FNListkod ! Detta anropet skall st}r f|rst i programmet. 65000 DEF FNListkod LOCAL Rad,Rad.,R$=10 65010 ! Program b|rar alltid med en byte som talar om hur l}ngt programmet 65020 ! {r och tv} byte med radnr samt avslutas med 135. Dessa visas ej av programmet 65030 INPUT 'Lista rad (avsluta med BYE) ? 'R$ 65040 R=PEEK(-173)-1 65050 ; CUR(R,0) SPACE$(40) 65060 IF R$='BYE' OR R$='bye' OR R$='Bye' THEN Z=FNEnd ELSE Rad.=VAL(R$) 65070 Rad=Rad. 65080 Z=FNL{skod(Rad,Rad.) 65090 GOTO 65030 65100 FNEND 65110 DEF FNL{skod(Rad,Rad.) LOCAL Adr,L{ngd,Radnr,Radnr.,Slutm1,Slutm2 65120 Adr=SYS(11)+20 65130 IF PEEK(Adr)<>135 THEN STOP 65140 L{ngd=PEEK(Adr+1) 65150 Radnr=PEEK2(Adr+2) 65160 IF Radnr<0 THEN Radnr.=Radnr+65536. ELSE Radnr.=Radnr 65170 IF Rad=Radnr THEN Z=FNListarad(Adr,Radnr.,L{ngd) : RETURN 0 65180 Adr=Adr+L{ngd 65190 Slutm1=PEEK(Adr) : Slutm2=PEEK(Adr+1) 65200 IF Slutm1=135 AND Slutm2=1 THEN 65210 ELSE 65140 65210 ; 'Radnummer' Rad. 'finns ej i programmet!' 65220 ; 65230 RETURN 0 65240 FNEND 65250 DEF FNListarad(Adr,Radnr.,L{ngd) LOCAL Adress.,A 65260 Adress.=Adr+4 65270 IF Adress.<0 THEN Adress.=Adress.+65536. 65280 ; FNList$(NUM$(Radnr.)) 65290 ; 'Adress till f|rsta byten =' Adress. 65300 ; 65310 FOR I=1 TO L{ngd-4 65320 A=PEEK(Adr+I+3) 65330 ; USING '_ ###_ ' A; 65340 IF A>31 AND A<128 THEN ; '(' CHR$(A) ')'; ELSE ; ' '; 65350 NEXT I 65360 ; : ; 65370 RETURN 0 65380 FNEND 65390 DEF FNEnd 65400 END 65410 RETURN 0 65420 FNEND 65430 DEF FNList$(P$) LOCAL Par$=20,Par 65440 Par$=P$+CHR$(13) 65450 Par=VARPTR(Par$) 65460 POKE -512,213,33,Par,SWAP%(Par),201 65470 Z=CALL(-512,4907) 65480 RETURN '' 65490 FNEND