Lars Gjörling
<6825>
· Text 9497 · w8 · kommentar
1990-05-16 22:43
Ärende: Frågor: - Att skicka med parametrar till RUN .....
Man kan alltid, när man anropar ett program, skriva ett kommatecken
efter programnamnet och skicka med en eller flera parametrar.
T.ex. RUN MITTPROG,KALLE
Datorn kör programmet MITTPROG. Parametern KALLE blir helt oanvänd
om man inte har någon snutt i programmet, som tar hand om den och
använder den till något. Hela uttrycket 'MITTPROG,KALLE' kallas för
'kommandosträngen'. Adressen till kommandosträngen kommer man åt
genom CALL(81). Detta kan utnyttjas till att lägga dataarean för
en variabel till kommandosträngen och sedan analysera den. Här
följer utdrag av ett tidigare brev jag har skickat till någon.
Du kan säkert förstå demoprogrammet och utnyttja principerna.
5 ! PARAMET.BAC - program för att demonstrera medsändning av
6 ! parametrar vid RUN och CHAIN.
7 ! Anropa programmet exempelvis med: RUN PARAMET,Magnus
8 !
10 INTEGER : EXTEND : ; CHR¤(12);
20 Par¤=FNCmdline¤
30 ; "Detta är programmet PARAMET"
40 ; "Hej då " Par¤
50 END
70 !
80 !
90 !
10000 DEF FNCmdline¤ LOCAL P,S¤=0 ! Sök kommandosträngen!
10010 P=CALL(81) ! Adressen till kommandosträngen läggs i P
10015 ! *********** Dataarean för S¤ flyttas till kommandosträngen!
10020 POKE VAROOT(S¤),160,0,P,SWAP%(P),160,0
10025 ! *********** Sök cmdsträngens slut (=CHR¤(13))!
10030 P=INSTR(1,S¤,CHR¤(13))
10035 ! *********** Kapa bort cmdsträngen f.o.m. CHR¤(13).
10040 IF P THEN S¤=LEFT¤(S¤,P-1) ELSE S¤=""
10050 RETURN FNParam¤(S¤)
10060 FNEND
10070 !
10100 DEF FNParam¤(S¤) LOCAL P
10105 ! Kapar bort allt före kommatecken och returnerar parametern.
10106 ! Det som är FÖRE kommatecken lagras i Temp¤ (för ev. anv.)
10110 P=INSTR(1,S¤,",")
10120 IF P>0 AND LEN(S¤)>P Temp¤=LEFT¤(S¤,P-1) : RETURN RIGHT¤(S¤,P+1)
10125 ! *********** Temp¤ lagrar det som är FÖRE kommatecken.
10126 ! *********** Detta används, om FLERA parametrar medsänts.
10130 Temp¤=S¤ : RETURN ""
10140 FNEND
Du kan köra det med olika namn, t ex RUN PARAMET,Pelle etc.
Mycket vanligt är att man använder detta för att anropa ett program
som sedan skall chaina vidare (eller tillbaka till det anropande
programmet). Ändra rad 40 till:
40 ; "Tryck på någon tangent" : GET W¤ : IF Par¤<>"" CHAIN Par¤
och lagra programmet i detta skick. Om du sedan anropar det med
RUN PARAMET,LIB så kommer programmet självt att automatiskt chaina
till LIB.BAC. (Om parameter ej skickas med, så blir det END).
Man kan också som parameter skicka med filnamn på fil som skall
öppnas.
Om FLERA parametrar skickas med (med kommatecken emellan) så kan
man dela upp Par¤ genom upprepad användning av FNParam¤(S¤):
40 WHILE Par¤<>"" : Par¤=FNParam¤(Par¤) : ; Temp¤ : WEND
Anropa detta med t. ex: RUN PARAMET,Anders,Bertil,Calle,David
Parametrarna lagras i tur och ordning i Temp¤.