10 REM > Environ 0.17
   20 REM Display various environment settings
   30 :
   40 REM Read command line, run path and host
   50 cmd$=FNOS_GetEnv
   60 :
   70 REM CPU test fails with 32016 and 68000
   80 A%=-1:IF os%>31:IF HIMEM>&FFFF:cpu%=86
   90 IF HIMEM>&FFFF:IF PAGE>&8000:IF PAGE<&FFFF:cpu%=44
  100 IF PAGE<&20000:IF HIMEM<&20001:DIM A%-1:!A%=0:P%=A%:[OPT 0:NOP:]:A%=!A%
  110 IF A%=&EA:cpu%=65 ELSE IF A%=&00:cpu%=80 ELSE IF A%=&12:cpu%=09
  120 IF A%=&A0:cpu%=11 ELSE IF A%=&90:cpu%=86
  130 :
  140 PRINT"BBC BASIC program environment"'STRING$(29,"-")
  150 PRINT"Program name: >";run$"<"
  160 PRINT"Command line: >";cmd$"<"'
  170 VDU8:txW%=POS+1:IFPOS:PRINT
  180 :
  190 PRINT"Host:          ";LEFT$(STR$os%+"   ",4);
  200 IF os%>27:PRINTMID$("Commodore 64/128TI Calculator   Amstrad CPC     ZX Spectrum     DOS/Windows     ",os%*16-447,16);
  210 IF os%<11:PRINTMID$("ElectronBBC B   BBC B+  Master  MasterETCompact RISC OS SpringbdUnix    6809UnixApple  ",os%*8+1,8);
  220 IF os%=17:PRINT"6809Beeb"ELSE IF os%=24:PRINT"CP/M"ELSE IF os%=43:PRINT"RT11/RSTS/RSX"ELSE IF os%=57:PRINT"6809DOS";
  230 IF os%=8 :IF (INKEY-256AND&F0)=&B0:PRINT "v";INKEY-256AND15;
  240 IF os%=10:IF (INKEY-256AND&F0)=&20:PRINT ;~INKEY-256;
  250 PRINT
  260 :
  270 IF os%=32:fs%=29 ELSE IF PAGE<&FFFF:A%=0:Y%=0:E%=0:fs%=(USR&FFDA)AND&FF ELSE IF os%=8:fs%=24 ELSE fs%=0
  280 PRINT"Filing System: ";LEFT$(STR$fs%+"   ",4);
  290 IF fs%=29:PRINT"DOSFS" ELSE IF fs%=24:PRINT"UNIXFS"
  300 IF fs%<>29:IF fs%<>24:PRINT MID$("NONE  TAPE12TAPE3 ROM   DISK  NET   TSOFT IEEEFSADFS  HOSTFSVIDEO COPRO RAM   NULL  PRINT SERIALHADFS VDFS  ",fs%*6+1,6)
  310 :
  320 d$=".":s$="/":IF (os%AND-24):d$="/":s$=".":IF (os%AND-32):d$="\"
  330 PRINT"Filenames are: ";
  340 IF (os%AND-32):PRINT "DOS"ELSE PRINTMID$("BBC UnixBBC CP/M",(os%AND24)DIV2+1,3+(os%AND8)DIV8);
  350 PRINT"-like"'SPC15;
  360 IF (os%AND-24):PRINT"d:"ELSE PRINT":d";
  370 IF (os%AND24)=24:PRINT "filename";s$;"ext"'SPC6"also:    d:";
  380 PRINT d$;"directory";d$;"filename";s$;"ext";CHR$8
  390 :
  400 kbd%=(os%<8):IF(INKEY-256AND&DB)=&53:kbd%=1
  410 PRINT "Keyboard type: ";MID$("Acorn  RegularRussell",kbd%*7+8,7)
  420 PRINT SPC15;"f1=&";8-(kbd%>0);"1  f10=&";MID$("C89",kbd%+2,1);"A";
  430 IF txW%<60:PRINT'SPC13;
  440 PRINT"  Cursors=&";MID$("8CCC88",kbd%*2+3,2);"+"
  450 PRINT
  460 :
  470 PRINT "CPU:";SPC11;
  480 IF cpu%=09:PRINT"6809";
  490 IF cpu%=11:PRINT"PDP11";
  500 IF cpu%=44:PRINT"ARM";
  510 IF cpu%=65:PRINT"6502";
  520 IF cpu%=80:PRINT"Z80";
  530 IF cpu%=86:PRINT"80x86";
  540 PRINT
  550 :
  560 PRINT"CALL &FFxx:    ";
  570 IF PAGE<&FFFF:PRINT"Yes"SPC(3-8*(txW%>32));"PAGE<&FFFF" ELSE PRINT"No";SPC(4-8*(txW%>32));"PAGE>&FFFF"
  580 PRINT"Program text:  ";
  590 IF !PAGE=&D7C1C7C5:PRINT "Brandy"ELSE IF ?(TOP-3):PRINT"Acorn/Wilson"ELSE PRINT"Russell";SPC5;
  600 IF txW%<40:PRINT'SPC13;
  610 IF ?(TOP-3):PRINT"  ?(TOP-3)<>0";CHR$ELSE PRINT"  ?(TOP-3)=0";CHR$8
  620 REM PRINT"PAGE=&";~PAGE;SPC(9-LENSTR$~PAGE);"HIMEM=&";~HIMEM
  630 REM PRINT"?(TOP-3)=";?(TOP-3);SPC(6-LENSTR$?(TOP-3));"!(TOP-3)=&";~!(TOP-3)
  640 REM PRINT"QUIT    =";:IF cpu%=11 OR cpu%=44:PRINT;QUIT ELSE PRINT"<???>"
  650 :
  660 END
  670 :
  680 REM Universal Program Environment Functions
  690 DEFFNOS_GetEnv:LOCALA$,A%,X%,Y%:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
  700 IF!PAGE=&D7C1C7C5:run$=ARGV$(0):FORA%=1TOARGC:A$=A$+ARGV$(A%)+" ":NEXT:=A$
  710 IFos%>31:IFPAGE>&FFFFF:DIMX%LOCAL256:SYS"GetModuleFileName",0,X%,255:run$=$$X%:=@cmd$
  720 A%=&600-&7B00*(PAGE>&8000)-&3F00*(PAGE>&C000):IF!(PAGE-&100)=@%:A%=PAGE-&300
  730 IF?(TOP-3)=0:A%=&100:IFHIMEM<&FFFF:A%=PAGE-&300:IF!(HIMEM+512)=@%:A%=HIMEM
  740 A$=$A%:IFPAGE=&8F00:run$=A$:SYS16TOA$,,A%:SYS72,"",A%:A$=MID$(A$,1+INSTR(A$+" "," ",1+INSTR(A$," "))):IFLENA$=0:A$=run$
  750 FORY%=-1TO0:A$=" "+A$:REPEATA$=MID$(A$,2):UNTILASCA$<>32:IFASCA$=34:A%=INSTR(A$,"""",2)+1 ELSE A%=INSTR(A$+" "," ")
  760   IFY%:run$=MID$(A$,1-(ASCA$=34),A%-1+2*(ASCA$=34)):A$=MID$(A$,A%+1)
  770 NEXT:=A$