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'_' AND MID$(Ord$,I,1)<'' THEN MID$(Ord$,I,1)=CHR$(ASCII(MID$(Ord$,I,1)) AND 223) 65270 WEND 65280 RETURN Ord$ 65290 FNEND