TITLE:Back-to-Basics: Differences in FlashBASIC and Pick/BASIC
ISSUE:Multi-Value Solutions Dec'98
This article will describe the differences between Pick/BASIC and FlashBASIC.
FlashBASIC is supported on the AIX, the DG/UX, and the SCO Unix implementations on releases of 6.0 and higher. It also available in all D3 implementaitons, both on NT and the Unixs.
Mixing FlashBASIC and Interpreted Code:
If a mainline program is compiled with the "o" option, all its subroutines must also have been produced with the FlashBASIC compiler. (see "compile").
FlashBASIC code is never run when called directly from a dictionary definition when running Advanced Pick version 6.x. D3 version will allow FlashBASIC routines to be run from dictionary definitions.
The "chain" statement:
The Pick/BASIC "chain" may be used freely to transfer control to other programs, but variables will NOT be restored if a "run" with the "i" option is attempted later. This restriction holds if a FlashBASIC application is involved with the "chain" in any way.
"%" (Percent) calls:
FlashBASIC currently supports calling C routines, but NOT assembly routines with the percent call. (see the various functions in Pick/BASIC that begin with "%").
FlashBASIC code allows a maximum of 62 parameters on an external subroutine call.
The Pick/BASIC Debugger:
The FlashBASIC debugger does not support logical conditions on breaks.
The FlashBASIC debugger does not allow any arguments on the "g" command.
The FlashBASIC debugger does not actually do anything when it prints "object verifies" on the "$" command.
The FlashBASIC debugger does not allow continuing after an abort.
The practice of patching variables in the debugger after a warning message does not work.
Arithmetic functions may give slightly different results in FlashBASIC. Addition, subtraction, multiplication, division, and remainder (modulo) will give the EXACT results with FlashBASIC as R83. Otherwise, the FlashBASIC compiler results are based on the host machine's internal arithmetic. Any arithmetic functions not listed above use the host machine's arithmetic. If using the (f option, all arithmetic operations use the host machines arithmetic.
Note also, that comparison will not function properly in FlashBASIC if two numbers are compared whose total precision is equal to or excedes 14 digits. Note that one must subtract the current precision from this so that the total precision limit is 10 digits at precision 4.
FlashBASIC passes parameters by reference, rather than copy-restore (except for constants and expressions which are passed by copy). This could cause some problems in certain exception cases. For example, if a subroutine is called with the statement "call x(y, y(10))", where "y" is an array, and within that subroutine y(10) is modified, the current interpreter may restore the value differently than in the compiler.
FlashBASIC allows a maximum of 62 arguments on subroutines.
FlashBASIC does not complain when the number of parameters passed does not equal the number of parameters contained in the subroutine. However, this is NOT supported and can cause subsequent program failure and data corruption.
Array bounds checking is absent in FlashBASIC by default. The "b" option invokes this when compiling. This must be used with caution, as it is easy to destroy other program data due to application bugs.