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