10
20
30 :
40
50 cmd$=FNOS_GetEnv
60 :
70
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$8 ELSE PRINT" ?(TOP-3)=0";CHR$8
620
630
640
650 :
660 END
670 :
680
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$