10 REM > BLib.Generic.ProgEnv 1.06 20Apr2020
   20 REM v1.06 Reads PDP11, Z80hi, optimisations
   30 :
   40 REM Universal Program Environment Functions
   50 REM =======================================
   60 :
   70 REM Return command line tail, sets run$ to execution filename
   80 REM Works on BBCIO,BBC09,T6502,T6809,TZ80,ZX80,PDP11,ARMEval,ARMCoPro,RISCOS,DOS,Windows,Brandy
   90 REM -------------------------------------------------------------------------------------------
  100 DEFFNOS_GetEnv:LOCALA$,A%,X%,Y%:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
  110 IF!PAGE=&D7C1C7C5:run$=ARGV$(0):FORA%=1TOARGC:A$=A$+ARGV$(A%)+" ":NEXT:=A$
  120 IFos%>31:IFPAGE>&FFFFF:DIMX%LOCAL256:SYS"GetModuleFileName",0,X%,255:run$=$$X%:=@cmd$
  130 A%=&600-&7B00*(PAGE>&8000)-&3F00*(PAGE>&C000):IF!(PAGE-&100)=@%:A%=PAGE-&300
  140 IF?(TOP-3)=0:A%=&100:IFHIMEM<&FFFF:A%=PAGE-&300:IF!(HIMEM+512)=@%:A%=HIMEM
  150 A$=$A%:IFPAGE=&8F00:run$=A$:SYS16TOA$,,A%:SYS72,"",A%:A$=MID$(A$,1+INSTR(A$+" "," ",1+INSTR(A$," "))):IFLENA$=0:A$=run$
  160 FORY%=-1TO0:A$=" "+A$:REPEATA$=MID$(A$,2):UNTILASCA$<>32:IFASCA$=34:A%=INSTR(A$,"""",2)+1 ELSE A%=INSTR(A$+" "," ")
  170   IFY%:run$=MID$(A$,1-(ASCA$=34),A%-1+2*(ASCA$=34)):A$=MID$(A$,A%+1)
  180 NEXT:=A$
  190 :
  200 REM Run a program, passing it a command line
  210 REM If program is *Command, called with OSCLI, else CHAINed
  220 REM -------------------------------------------------------
  230 DEFPROCos(A$):IFASCA$=42:OSCLIA$ ELSE IFLENA$:CHAINA$
  240 ENDPROC
  250 :
  260 REM Exit program, setting return value
  270 REM ----------------------------------
  280 DEFPROCexit(A%):OSCLI"FX1,"+STR$(A%AND255):quit$=quit$:A$=quit$:quit$="":PROCos(A$)
  290 IFPAGE>&FFFFF:QUIT A% ELSE END
  300 ENDPROC
  310 :