1 REM Ins{nd av Bo Kullmar <1789> 1985-05-05 14.32.17
2 ! **********************************************************************
3 ! Program KOMMANDO.BAS Utg}va 1.0 1985-05-05
4 ! av Bo Kullmar
5 ! Ins{nd av Bo Kullmar
6 ! F|r ABC800M ABC800C ABC802 ABC806
8 ! Testad p} ABC802 ABC806
9 ! Funktionen {r avsedd f|r att anv{ndas n{r man vill anv{nda ett kommando i
10 ! ett program. Alla kommando som finns i datorns kommandolist finns med.
11 ! Man m}ste merga in funktionen i ett program. Vill d} t ex lista rad 2-24
12 ! i programmet s} skriver man Z=FNCOM('LIST 2-24'). Observera att om man
13 ! f|rs|ker att utf|ra vissa kommandon i program s} kan det orsaka dyk. Jag
14 ! har observerat att f|ljande kommadon kan orsaka problem:
15 !
16 ! CON, GOTO och RESUME orsakar felmeddelande "Kan ej forts{tta.". RESUME
17 ! {r inget kommando i BASIC II, men det skulle kanske ha blivit det. Kanske
18 ! {r det ett kommando i OS8, som ju {r f|rebilden f|r systemet.
19 !
20 ! MERGE orsakar dyk. Jag tror inte att det {r s} konstigt att det inte
21 ! fungerar alls. Det {r v{l n{stan som att boota sig sj{lv och det kan
22 ! inte g}.
23 !
24 ! **********************************************************************
100 EXTEND : INTEGER
110 Z=FNCom('LIST 2-24')
65000 DEF FNCom(In$) LOCAL Cmd$=160,Cmdin$=160,Par$=160,Par,Com$=8,Comadr,Blank,Adr,Tolk$=0
65010 DATA RUN,0,SCR,2,NEW,2,LOAD,4,CON,6,LIST,8,CLEAR,10,MERGE,12,RENUMBER,14
65020 DATA REN,14,ERASE,16,AUTO,18,ED,20,SAVE,22,UNSAVE,24,GOTO,26,RESUME,28,EOF,0
65030 Cmdin$=FNVersal$(In$)
65040 WHILE LEN(Cmdin$) : IF LEFT$(Cmdin$,1)=' ' Cmdin$=RIGHT$(Cmdin$,2) : WEND
65050 Blank=INSTR(1,Cmdin$,' ')
65060 IF Blank>0 AND LEN(Cmdin$)>Blank Par$=MID$(Cmdin$,Blank+1,LEN(Cmdin$)-Blank)+CHR$(13) : Cmd$=LEFT$(Cmdin$,Blank-1)
65070 IF Blank=0 Cmd$=Cmdin$ : Par$=CHR$(13)
65080 Par=VARPTR(Par$) : RESTORE 65010
65090 READ Com$,Comadr
65100 IF Com$=Cmd$ GOTO 65160
65110 WHILE Com$<>'EOF'
65120 READ Com$,Comadr
65130 IF Com$=Cmd$ GOTO 65160
65140 WEND
65150 ; 'Felaktigt kommando!' : RETURN 0
65160 POKE VAROOT(Tolk$),0,96,0,0,0,96
65170 Adr=INSTR(1,Tolk$,"UNSAVE")
65180 Adr=INSTR(Adr,Tolk$,CHR$(255))+VARPTR(Tolk$)
65190 POKE 7*16-703,194 ! Sp{rra dosbuffert 7
65200 POKE 64512,213,33,Par,SWAP%(Par),201
65210 RETURN CALL(64512,PEEK2(Adr+Comadr))
65220 FNEND
65230 DEF FNVersal$(Ord$) LOCAL I
65240 WHILE I