# > PrgEnvUniSrc 1.05 19Apr2020 : A$=OS_GetEnv ("run$=>"run$"<" 2"A$ =>"A$"<" <"os% =";os% F P: Z- Universal Program Environment Functions d- ======================================= n: x? Return command line tail, sets run$ to execution filename 1 Nearly universal version (exc. PDP11,32000) a Works on BBCIO,BBC09,T6502,T6809,TZ80,ZX80,PDP11,ARMEval,ARMCoPro,RISCOS,DOS,Windows,Brandy a ------------------------------------------------------------------------------------------- ݤOS_GetEnv  A$,A%,X%,Y% ,X%=1:os%=((&FFF4)&FF00)256: Get host : & Brandy: (returns trailing space) O !=&D7C1C7C5:run$=ARGV$(0):A%=0ARGC:A$=A$+ARGV$(A%)+" "::=A$,run$+1) :  Windows: Mos%>31:>&FFFFF:X%256:ș"GetModuleFileName",0,X%,255:run$=$$X%:=@cmd$ : ??(P-3)<>0:A%=&600: >&FFFF:A%=-&E00: >&C000:A%=-&500 (?(P-3)<>0: !(-&100)=@%:A%=-&200 : Crunched to: "7?(P-3)<>0:A%=&600-&7B00*(>&8000)-&3F00*(>&C000) ,(?(P-3)<>0: !(-&100)=@%:A%=-&200 6: Crunched to: @O?(P-3)<>0:A%=&600-&7B00*(>&8000)-&3F00*(>&C000):!(-&108)=@%:A%=-&208 J 6502: A%=&0600 T 6809: A%=&0600 ^ PDP11: A%=PAGE-&208 h ARMdev: A%=&C000 r ARM: A%=&8100 | 32016: A%=&0600 : V?(P-3)=0 :A%=-&300 : Z80 with low workspace L?(P-3)=0 : <&FFFF: !(+512)=@%:A%= : Z80 with high workspace C?(P-3)=0 : >&FFFF:A%=&100 : 80x86  Crunched to: ;?(P-3)=0:A%=&100:<&FFFF:A%=-&300:!(+512)=@%:A%=  Z80: A%=PAGE-&300  Z80: A%=HIMEM 4 80x86: A%=&100 (PAGE movable if font included)   Combined and crunched to: CA%=&600-&7B00*(>&8000)-&3F00*(>&C000):!(-&100)=@%:A%=-&200 ;?(P-3)=0:A%=&100:<&FFFF:A%=-&300:!(+512)=@%:A%=  6502: A%=&0600  6809: A%=&0600  ARMdev: A%=&C000 & ARM: A%=&8100 0 PDP11: A%=PAGE-&200 : 32016: A%=&0600 (wrong) D 80x86: A%=&100 N Z80lo: A%=PAGE-&300 X Z80hi: A%=HIMEM b A$=$A% l: v: Running from RISC OS command line drops command line \=&8F00:run$=A$:ș16A$,,A%:ș72,"",A%:A$=A$,1+A$+" "," ",1+A$," "))):A$=0:A$=run$  Y%=-10 OA$=" "+A$:A$=A$,2):A$<>32 : Strip leading spaces [A$=34:A%=A$,"""",2)+1 A%=A$+" "," ") : Look for quote or space seperator WY%:run$=A$,1-(A$=34),A%-1+2*(A$=34)):A$=A$,A%+1) : Strip first part into run$  :=A$ : . Run a program, passing it a command line = If program is *Command, called with OSCLI, else CHAINed = ------------------------------------------------------- &os(A$):A$=42:A$ A$<>"":A$  : ( Exit program, setting return value  ( ---------------------------------- Fexit(A%):"FX1,"+(A%255):quit$=quit$:A$=quit$:quit$="":os(A$)  >&FFFFF:Ș A% *os%<6: *Quit 4 >: