10 REM > BLib.BASIC 1.01 29-Dec-2005
   20 REM v1.01 29-Dec-2005 JGH: Added RunAs()
   30 REM v1.00 12-Nov-1998 JGH: Type, SizeOfReal, Ver
   40 :
   50 REM BASIC interpreter functions
   60 REM ===========================
   70 :
   80 REM BASIC_Ver
   90 REM ---------
  100 REM Discover BASIC interpreter version
  110 REM Returns: 1 if BASIC I or equivalent
  120 REM          Offset assembly, OSCLI, OPENUP not available
  130 REM Returns: >1 if BASIC II or equivalent or later
  140 REM          Offset assembly, OSCLI, OPENUP available
  150 REM Returns: >3 if BASIC IV or equivalent or later
  160 REM          TIME$, ON x PROC available
  170 REM Returns: >4 if BASIC V or equivalent or later
  180 REM          SYS, WHILE, CASE, multiline IF/ENDIF available
  190 REM ---------------------------------------------------------
  200 DEFFNBASIC_Ver:LOCAL O%,P%
  210 IF FALSE THEN
  220   DIM P%-1:O%=P%:[OPT 4:NOP:]IFP%<>O%:=1
  230   IFHIMEM=&8000 OR HIMEM=&B800:IF!(HIMEM+9)=&49534142:=?(HIMEM+8)
  240   =2
  250 ENDIF
  260 =5
  270 :
  280 :
  290 REM BASIC_Type
  300 REM ---------
  310 REM Discover interpreter type
  320 REM Returns: 65 if Wilson/Acorn BASIC
  330 REM          86 if Russell BASIC
  340 REM ---------------------------------------------------------
  350 DEFFNBASIC_Type:IF?(TOP-3):=65 ELSE =86
  360 :
  370 :
  380 REM FNBASIC_SizeOfReal
  390 REM -----------------
  400 REM Returns the size of real variables being used by the program
  410 REM Knows about 4, 5, 8 and 12-byte reals by forcing underflows in
  420 REM   accuracy, using IEEE definintions of floating point numbers.
  430 REM Returns 0 if size unknown
  440 REM ---------------------------------------------------------------
  450 DEFFNBASIC_SizeOfReal
  460   IF 2^-129=0:IF 1+2^-25=1:=4 :REM 8-bit exponent, 23-bit mantissa
  470   IF 2^-129=0:=5              :REM 8-bit exponent, assume 31-bit mantissa
  480   IF 2^-1025=0:=8             :REM 11 bit exponent, assume 52-bit mantissa
  490   IF 2^-32769=0:=12           :REM 15 bit exponent, assume 63-bit mantissa
  500 =0:REM Unknown
  510 :
  520 :
  530 REM FNBASIC_RunAs
  540 REM -------------
  550 REM Returns how the BBFW program has been run
  560 REM Returns: 0 if unknown
  570 REM          1 if run from the IDE (selected 'RUN')
  580 REM          2 if run via the interpreter (CHAIN "file.bbc")
  590 REM          3 if run as a compiled executable (run file.exe)
  600 REM ---------------------------------------------------------------
  610 DEFFNBASIC_RunAs
  620 LOCAL cmd%:SYS "GetCommandLine" TO cmd%
  630 IF INSTR($$cmd%,"bbcwin.exe"):=1
  640 IF INSTR($$cmd%,"bbcwrun.exe"):=2
  650 =3
  660 :