|
-
- Bywater BASIC Interpreter, version 3.20
- ---------------------------------------------
-
- Copyright (c) 1993, Ted A. Campbell
- for bwBASIC version 2.10, 11 October 1993
-
- Copyright (c) 2014-2015, Howatd Wulf, AF5NE
- for bwBASIC version 3.00, 12 May 2015
-
- Copyright (c) 2015-2016, Howatd Wulf, AF5NE
- for bwBASIC version 3.10, 27 July 2016
-
- Copyright (c) 2016-2017, Howatd Wulf, AF5NE
- for bwBASIC version 3.20, 4 June 2017
-
- CONTENTS:
-
-
- 1. DESCRIPTION
- 2. TERMS OF USE
- 3. QUICK REFERENCE LIST OF COMMANDS, FUNCTIONS AND OPERATORS
- 4. GENERAL NOTES ON USAGE
- 5. PREDEFINED VARIABLES
- 6. UNIMPLEMENTED COMMANDS AND FUNCTIONS
- and AGENDA FOR DEVELOPMENT
- 7. THE STORY OF Bywater BASIC
- 8. COMMUNICATIONS
- 9. EXPANDED REFERENCE FOR COMMANDS, FUNCTIONS AND OPERATORS
-
- The author wishes to express his thanks to Mr. David MacKenzie,
- who assisted in the development Unix installation and configuration
- for this version.
-
- 1. DESCRIPTION
-
-
- The Bywater BASIC Interpreter (bwBASIC) implements a large superset
- of the ANSI Standard for Minimal BASIC (X3.60-1978) and a significant
- subset of the ANSI Standard for Full BASIC (X3.113-1987), and many
- classic BASIC dialects in C.
-
- bwBASIC can be configured to enable commands, functions, operators
- and punctuation characters available in many classic dialects of BASIC;
- these are controlled by various OPTION commands. bwBASIC does not attempt
- bug-level compatibility with any particular BASIC dialect nor does it
- currently support graphics. bwBASIC seeks to be as portable as possible.
-
- The interpreter is fairly slow. Whenever faced with a choice
- between conceptual clarity and speed, I have consistently chosen the
- former. The interpreter is the simplest design available, and
- utilizes no system of intermediate code, which could speed up
- considerably its operation. As it is, each line has only one
- command. Multi-statement lines are internally broken into distinct
- lines as they are loaded.
-
-
- 2. TERMS OF USE:
-
-
- This version of Bywater BASIC is released under the terms of the
- GNU General Public License (GPL), which is distributed with this
- software in the file "COPYING". The GPL specifies the terms under
- which users may copy and use the software in this distribution.
-
- A separate license is available for commercial distribution,
- for information on which you should contact the author.
-
-
- 3. QUICK REFERENCE LIST OF COMMANDS, FUNCTIONS AND OPERATORS
-
-
- The complete list of over 500 commands, functions and operators is
- in the file "ALL.txt" in the DOCS directory. Documentation for each
- BASIC dialect is in the other text files in the DOCS directory.
-
- A BASIC dialect is a selection of commands, functions, operators,
- punctuation characters and other behaviors. The OPTION VERSION
- command is used to choose a specific BASIC dialect. Additional
- OPTION commands are available to fine-tune the behavior.
-
- In bwBASIC, any function can be executed as a command. For example,
- the function "OUT(X, Y)" can be executed as the command "OUT X, Y".
- You can overload functions by parameter signature (the number
- and types of parameters), and user defined functions can replace
- any instrinsic function, including INP, OUT, PEEK, POKE, and WAIT.
-
-
- 4. GENERAL NOTES ON USAGE:
-
-
- 4.a. Interactive Environment
-
-
- An interactive environment is provided if the flag INTERACTIVE
- is defined as TRUE in bwBASIC.h, so that a line with a
- line number can be entered at the bwBASIC prompt and it will be
- added to the program in memory.
-
- Line numbers are not strictly required, but are useful if the
- interactive enviroment is used for programming. For longer
- program entry one might prefer to use an ASCII text editor, and
- in this case lines can be entered without numbers. See also the
- documentation below for the pseudo-command EDIT, in section 5.
-
-
- 4.b. Naming Conventions
-
-
- Command, function, label, and variable names are not case sensitive,
- so that "Run" and "RUN" and "run" are equivalent.
-
- The characters allowed in variable names depends upon the specific
- BASIC dialect selected with the OPTION VERSION command. Usually,
- variable names can use any alphabetic characters, the period
- and underscore characters and decimal digits (but not in the
- first position) and they can be terminated with the various numeric
- type characters (!,@,#,%,&,~) or the string type character ($).
-
-
- 4.c. Numerical Constants
-
-
- Numerical constants may begin with a digit 0-9 (decimal), with
- the "&H" or "&h" (hexadecimal) or the "&o" or "&O" (octal).
- Numerical constants may include 'E' or 'e' followed by an
- exponent number to denote exponential notation. Numerical
- constants may also be terminated by the various numeric type
- characters (!,@,#,%,&,~).
-
-
- 4.d. Command-Line Execution
-
-
- A filename can be specified on the command line and will be
- loaded and executed immediately, so that the command line
-
- bwBASIC prog.bas
-
- will load and execute "prog.bas". If a program is executed
- from the command line, control is returned to the operating
- system when the program terminates.
-
-
- 4.e. Program Storage
-
-
- All programs are stored as ASCII text files.
-
-
- 4.f. TRUE and FALSE
-
-
- TRUE is defined as -1 and FALSE is defined as 0 in the default
- distribution of bwBASIC. Alhtough these definitions can be changed
- by those compiling bwBASIC (see file bwBASIC.h), any other values
- are not supported.
-
-
- 4.g. Assignments
-
-
- Assignment must be made to variables. This differs from some
- implementations of BASIC where assignment can be made to a
- function. Implication: "INSTR( 3, x$, y$ ) = z$" will not
- work under bwBASIC. The command "MID$(X$,...) = ..." is
- implemented and should be used instead.
-
- Some BASIC dialects allow the multiple variable assignments,
- such as:
- 100 LET A = B = C = 0
- In bwBASIC, only the first '=' is considered an assignment.
- All other '=' are considered comparison operators. To resolve
- this issue, use commas to seperate the variables, such as:
- 100 LET A, B, C = 0
- If these statements are only used to initialize the variable
- values, then they may not needed in bwBASIC, since all numeric
- variables are initialized to zero (0) and all string variables
- are initialized to the empty string ("").
-
-
- 4.h. Operators and Precedence
-
-
- The available operators are determined by the OPTION VERSION
- setting. bwBASIC recognizes many operators, with their level of
- precedence fixed. The precedence levels chosen for the various
- operators in bwBASIC were selected to be compatible with many
- dialects of BASIC. If your application requires a specific order
- of evaluation, then use parentheses.
-
- The collating sequence (ASCII, EBCDIC, and so on) is determined
- by the C compiler. As a consequenece, the results of string
- comparisons may vary. A simple check for collating sequence is
- shown in the following example:
-
- 100 REM Purpose: Verify collating sequence (sort order)
- 110 REM Author: Howard Wulf, AF5NE
- 120 REM Date: 2015-11-28
- 130 REM
- 200 IF "1" < "A" THEN 300
- 210 PRINT "EBCDIC"
- 220 GOTO 999
- 300 PRINT "ASCII"
- 999 END
-
-
- 4.i. Numerical Precision (NOT)
-
-
- bwBASIC utilizes numbers with only one level of precision.
- All numbers are internally represented using a C double.
-
- The various numeric type suffix characters (!,@,#,%,&,~),
- just like the string type suffix character ($), are part
- of the variable name.
-
- This version also supports type declarations, such as:
- 100 DIM X AS INTEGER
- 110 FUNCTION ABC( X AS INTEGER ) AS INTEGER
- 120 LET ABC = X * 2
- 130 END FUNCTION
-
- For each type character there is an equivalent type declaration.
- Type Equivalent
- Char declaration
- ==== ===========
- $ STRING
- # DOUBLE
- ! SINGLE
- @ CURRENCY
- & LONG
- % INTEGER
- ~ BYTE
-
- However, combining both a type suffix character and a type
- declaration in the same statement is not supported.
- 100 DIM A$ AS INTEGER ' this is not supported
-
- The type of a variable is used to range-check the values.
- This allows many programs to run correctly, but does not
- handle all possible cases. The current implementation is not
- complete for all possible uses of numeric type declarations.
-
- In the current version, the type of numeric values is used
- to select the appropriate operation. As a consequence,
- integer division is used when dividing two integer values.
- The MOD and \ operators use the rounded integer values of
- their parameters and return a rounded integer result.
-
- Within an expression, the result of an operation is promoted
- to the greater of:
- the type of the left parameter,
- the type of the right parameter, and
- the type required to hold the result.
-
- In bwBASIC, numeric constants are DOUBLE by default. If you
- wish to coerce a numeric constant, then add the appropriate
- numeric type character immediately after the numeric digits.
- Many BASIC dialects that allow numeric constants to have a
- numeric type character adopt this convention.
-
-
- 4.j. OPTION VERSION and so on
-
-
- OPTION commands change how a BASIC program is parsed. All OPTION commands
- should be in "profile.bas" so they are effective when a BASIC program
- is loaded. The first OPTION command should be OPTION VERSION to select a
- specific BASIC dialect. Additional OPTION commands fine-tune the available
- commands, functions, operators, punctuation characters and so on to support
- programs written in many different BASIC dialects. All other OPTION commands
- must follow the OPTION VERSION command. Conflicting and pathological OPTION
- combinations are not supported.
-
- The OPTION VERSION command selects a specific BASIC dialect.
- OPTION VERSION "BYWATER" ' Bywater BASIC 3
- OPTION VERSION "BYWATER-2" ' Bywater BASIC 2
- OPTION VERSION "CALL/360" ' SBC CALL/360 Mainframe BASIC
- OPTION VERSION "CBASIC-II" ' CBASIC-II for CP/M
- OPTION VERSION "DARTMOUTH" ' Dartmouth DTSS BASIC
- OPTION VERSION "ECMA-55" ' ANSI Minimal BASIC
- OPTION VERSION "ECMA-116" ' ANSI Full BASIC
- OPTION VERSION "GCOS" ' GE 600 Mainframe BASIC
- OPTION VERSION "HAARDT" ' bas 2.4 by Michael Haardt
- OPTION VERSION "HANDBOOK1" ' The BASIC Handbook, 1st Edition
- OPTION VERSION "HANDBOOK2" ' The BASIC Handbook, 2nd Edition
- OPTION VERSION "HEATH" ' Heath Benton Harbor BASIC
- OPTION VERSION "MARK-I" ' GE 265 Mainframe BASIC
- OPTION VERSION "MARK-II" ' GE 435 Mainframe BASIC
- OPTION VERSION "MBASIC" ' Microsoft BASIC-80 for Xenix
- OPTION VERSION "PDP-8" ' DEC PDP-8 BASIC
- OPTION VERSION "PDP-11" ' DEC PDP-11 BASIC
- OPTION VERSION "RBASIC" ' Micronics RBASIC for 6809 FLEX
- OPTION VERSION "RSTS-11" ' DEC RSTS-11 BASIC-PLUS
- OPTION VERSION "SYSTEM/360" ' IBM System/360 Mainframe BASIC
- OPTION VERSION "SYSTEM/370" ' IBM System/370 Mainframe BASIC
- OPTION VERSION "TRS-80" ' TRS-80 Model I/III/4 LBASIC
- OPTION VERSION "VINTAGE" ' Vintage BASIC 1.0.1
- OPTION VERSION "XBASIC" ' TSC XBASIC for 6800 FLEX
-
- For example, MOD is a function in OPTION VERSION "ECMA-116",
- MOD is an operator in OPTION VERSION "MBASIC", and
- MOD is a valid variable name in OPTION VERSION "CALL/360".
-
- The OPTION VERSION command also sets the following OPTION commands:
- OPTION STRICT ON | OFF
- OPTION ANGLE DEGREES | RADIANS | GRADIANS
- OPTION BUGS ON | OFF
- OPTION LABELS ON | OFF
- OPTION COMPARE BINARY | DATABASE | TEXT
- OPTION BASE integer
- OPTION RECLEN integer
- OPTION COVERAGE ON | OFF
- OPTION TRACE ON | OFF
- OPTION ERROR GOTO | GOSUB
- OPTION DATE "format"
- OPTION TIME "format"
- OPTION PUNCT COMMENT "char"
- OPTION PUNCT STATEMENT "char"
- OPTION PUNCT PRINT "char"
- OPTION PUNCT IMAGE "char"
- OPTION PUNCT INPUT "char"
- OPTION USING DIGIT "char"
- OPTION USING COMMA "char"
- OPTION USING PERIOD "char"
- OPTION USING PLUS "char"
- OPTION USING MINUS "char"
- OPTION USING EXRAD "char"
- OPTION USING DOLLAR "char"
- OPTION USING FILLER "char"
- OPTION USING LITERAL "char"
- OPTION USING FIRST "char"
- OPTION USING ALL "char"
- OPTION USING LENGTH "char"
- OPTION PUNCT QUOTE "char"
- OPTION PUNCT STRING "char"
- OPTION PUNCT DOUBLE "char"
- OPTION PUNCT SINGLE "char"
- OPTION PUNCT CURRENCY "char"
- OPTION PUNCT LONG "char"
- OPTION PUNCT INTEGER "char"
- OPTION PUNCT BYTE "char"
- OPTION PUNCT LPAREN "char"
- OPTION PUNCT RPAREN "char"
- OPTION PUNCT FILENUM "char"
- OPTION PUNCT AT "char"
-
- The commands, functions, operators and settings for each BASIC dialect
- is documented in the text files in the DOCS directory.
-
- OPTION DISABLE COMMAND
- Disable a specific command.
-
- OPTION DISABLE FUNCTION
- Disable a specific function.
-
- OPTION DISABLE OPERATOR
- Disable a specific operator.
-
- OPTION ENABLE COMMAND
- Enable a specific command.
-
- OPTION ENABLE FUNCTION
- Enable a specific function.
-
- OPTION ENABLE OPERATOR
- Enable a specific operator.
-
- OPTION ERROR GOSUB
- The program will GOSUB to the error handler.
- The error handler exits with the RETURN command.
-
- OPTION ERROR GOTO
- The program will GOTO to the error handler.
- The error handler exits with the RESUME command.
-
- OPTION LABELS OFF
- Disables textual labels.
-
- OPTION LABELS ON
- Enables textual labels.
-
- Regardless of the OPTION LABELS setting, statements of the form
- IF x THEN label
- are not allowed, instead use the form
- IF x THEN GOTO label
- The reason for this rule is because
- IF x THEN y
- is considered to be the same as
- IF x THEN
- y
- END IF
- where "y" is a command, function, or subroutine. Many BASIC dialects
- that allow textual labels adopt this convention.
-
- OPTION ROUND controls how floating point values are converted to
- whole number values. OPTION ROUNG MATH rounds toward the nearest
- whole number, with halves rounding up to the next larger whole number,
- as commonly expected by many scientific applications. OPTION ROUND
- BANK rounds halves to the even whole numbers, as commonly expected
- by many financial applications. OPTION ROUND TRUNCATE truncates to
- the next smaller whole number, as commonly expected by many
- applications written for an integer BASIC. The selected rounding
- method is used whenever a whole number is required, including:
- a) selection value for ON ... GOTO and ON ... GOSUB
- b) any function parameter requiring a whole number
- c) array subscripts and dimensions
- d) string positions and lengths
- e) CINT() and similar
- The OPTION ROUND command does not change the results of INT() or FIX().
- The default rounding method is OPTION ROUND BANK.
-
- A comparison of the different OPTION ROUND settings upon the results of CINT()
-
- BANK MATH TRUNCATE
- X int(X) fix(X) cint(X) cint(X) cint(X)
- -2.0 -2 -2 -2 -2 -2
- -1.6 -2 -1 -2 -2 -1
- -1.5 -2 -1 -2 -2 -1
- -1.4 -2 -1 -1 -1 -1
- -1.0 -1 -1 -1 -1 -1
- -0.6 -1 0 -1 -1 0
- -0.5 -1 0 0 -1 0
- -0.4 -1 0 0 0 0
- 0.0 0 0 0 0 0
- 0.4 0 0 0 0 0
- 0.5 0 0 0 1 0
- 0.6 0 0 1 1 0
- 1.0 1 1 1 1 1
- 1.4 1 1 1 1 1
- 1.5 1 1 2 2 1
- 1.6 1 1 2 2 1
- 2.0 2 2 2 2 2
-
- The OPTION BUGS command determines the behavior of a number of BASIC keywords.
- BASIC programs which rely on these behaviors are non-portable and non-standard.
- I have considered several different names for this command, but have not yet
- thought of a better short name.
-
- OPTION BUGS ON disables the ANSI/ECMA/ISO standard behavior:
-
- FOR ... ' values are evaluated left-to-right
- GOTO X OF ... ' an invalid value for X falls thru without ERROR
- GOSUB X OF ... ' an invalid value for X falls thru without ERROR
- ON X GOTO ... ' an invalid value for X falls thru without ERROR
- ON X GOSUB ... ' an invalid value for X falls thru without ERROR
- X = VAL("X") ' returns zero without ERROR
- INPUT X ' empty string returns zero without ERROR
- INPUT X$ ' empty string returns "" without ERROR
- INPUT X$ ' allows unquoted character strings
- variable names ' period and underscore are allowed
- variable types ' the type characters #!@&% are allowed
- PRINT "a" X ' string concatenation is implied
- 1.2% is 1 ' the type characters #!@&% are allowed
- 1D1 is ERROR ' 'D' is not allowed as exponent seperator
-
- OPTION BUGS OFF enables the ANSI/ECMA/ISO standard behavior:
-
- FOR ... ' values are evaluated according to standard
- GOTO X OF ... ' an invalid value for X is an ERROR
- GOSUB X OF ... ' an invalid value for X is an ERROR
- ON X GOTO ... ' an invalid value for X is an ERROR
- ON X GOSUB ... ' an invalid value for X is an ERROR
- X = VAL("X") ' raises an illegal function call (ERROR 5)
- INPUT X ' empty string retries input
- INPUT X$ ' empty string retries input
- INPUT X$ ' unquoted character strings retries input
- variable names ' period and underscore are not allowed
- variable types ' the type characters #!@&% are not allowed
- PRINT "a";X ' string concatenation is not implied
- 1.2% is ERROR ' the type characters #!@&% are not allowed
- 1D1 is ERROR ' 'D' is not allowed as exponent seperator
-
-
- 4.k. ERROR handling
-
-
- bwBASIC implements a simplified error handling strategy.
- Errors are seperated into two categories:
-
- a) Fatal errors. These errors include:
- - Unknown command
- - FOR without NEXT
- - NEXT without FOR
- - WHILE without WEND
- - WEND without WHILE
- - and so on.
- The program is scanned prior to running and if any of these errors is
- detected, then the program is not allowed to run. If these errors
- occur as the result of a DELETE or MERGE in a running program, then the
- program is terminated.
-
- b) Non-fatal errors. If an error handler exists, then it is executed,
- otherwise the default behaivor is performed. The correct action to
- take in an error handler depends upon the specific application.
- - Overflow (ERROR 6)
- - the default behavior is to display a warning message.
- - Division by zero (ERROR 11)
- - the default behavior is to display a warning message.
- - String too long (ERROR 15)
- - the default behavior is to display a warning message.
- - All other non-fatal errors
- - the default behavior is to terminate the program.
-
- bwBASIC 2.61 used ON ERROR GOSUB for error trapping.
- This version defaults to ON ERROR GOTO instead.
-
-
- 4.l. Implementation rules for functions and commands
-
-
- In many BASIC dialects, keywords are seperated into three distinct groups:
- Commands, Statements, and Functions. In bwBASIC, keywords are seperated
- into only two groups: Commands and Functions. A keyword documented as a
- Command or Statament in a specific BASIC dialect may have been implemented
- in bwBASIC as a Function. This is merely an implementation decision, which
- may change in the future. Each keyword should only be used as described in
- the reference document. The following rules are considered when deciding
- whether a BASIC keyword is implemented as a command or a function:
-
- a) If the keyword requires significant parsing,
- then it is implemented as a command. An example is "PRINT".
-
- b) If the keyword requires access to variables BYREF,
- then it is implemented as a command. An example is "SWAP".
-
- c) If the keyword changes the flow of control,
- then it is implemented as a command. An example is "GOTO".
-
- d) A function may be used as though it were a command,
- but a command cannot be used as though it were a function.
-
- e) The BASIC program can redefine a function,
- but the BASIC program cannot redefine a command.
-
- f) The BASIC program can overload a function,
- but the BASIC program cannot overload a command.
-
- g) Other than semantics, there is no practical difference
- between a BASIC function and a BASIC subroutine. The
- return value of a BASIC subroutine, when called as a
- function, is zero. Calling a BASIC function as if it
- were a subroutine simply discards the return value.
-
- These rules were chosen to maintain compatibility with
- many BASIC dialects.
-
- An example of the results of the above rules is "OUT".
- Since "OUT" is implemented as a function, you may:
- a) call it as a subroutine like this:
- 100 OUT X, Y
- b) call it as a function like this:
- 100 LET N = OUT( X, Y ) ' N = 0
- c) redefine it as a subroutine like this:
- SUB OUT( X, Y )
- REM ...
- END SUB
- d) redefine it as a function like this:
- FUNCTION OUT( X, Y )
- REM ...
- END FUNCTION
- e) overload it using subroutines like these:
- SUB OUT( X, Y )
- REM ...
- END SUB
- SUB OUT( X, A$ )
- REM ...
- END SUB
- SUB OUT( A$, X )
- REM ...
- END SUB
- SUB OUT( A$, B$ )
- REM ...
- END SUB
- f) overload it using functions like these:
- FUNCTION OUT( X, Y )
- REM ...
- END FUNCTION
- FUNCTION OUT( X, A$ )
- REM ...
- END FUNCTION
- FUNCTION OUT( A$, X )
- REM ...
- END FUNCTION
- FUNCTION OUT( A$, B$ )
- REM ...
- END FUNCTION
-
-
- 4.m. Reference documentation
-
-
- bwBASIC is preconfigured to support a number of specific BASIC dialects which were
- implemented using the following references, however bwBASIC does not attempt to be
- bug-level compatible and does not implement non-portable design choices. A manual
- for each dialect is in the DOCS directory to make you aware that a specific keyword
- is implemented, however you should refer to the reference document for a proper
- understanding of how to use each keyword. There are many other good books which
- describe these BASIC dialects in detail.
-
- OPTION VERSION "BYWATER" ' Bywater BASIC 3
- MANUAL:
- BYWATER.TXT
-
- OPTION VERSION "BYWATER-2" ' Bywater BASIC 2
- MANUAL:
- BYWATER-2.TXT
- NOT IMPLEMENTED:
- DO NUM, DO UNNUM
- NOTES:
- SUB MAIN is not automatically called.
- CALL requires parentheses around the function/subroutine parameters,
- so instead of
- CALL abc 1, 2, 3
- use
- CALL abc( 1, 2, 3 )
-
- OPTION VERSION "CALL/360" ' SBC CALL/360 Mainframe BASIC
- MANUAL:
- CALL-360.TXT
- NOT IMPLEMENTED:
- MAT PRINT USING.
- NOTES:
- The APPENDIXES are implementation specific and are not supported.
-
- OPTION VERSION "CBASIC-II" ' CBASIC-II for CP/M
- MANUAL:
- CBASIC-II.TXT
- ADDITIONAL INFORMATION:
- "CBASIC Language Reference Manual, 2nd Edition"
- by Diigital Research
- (c) 1982, Diigital Research
- http://bitsavers.trailing-edge.com/pdf/digitalResearch/cb80/
- CBASIC_Language_Reference_Manual_Oct82.pdf
- NOT IMPLEMENTED:
- CONSTAT%, CONCHAR% and compiler directives.
- NOTES:
- The APPENDIXES are implementation specific and are not supported.
- The %INCLUDE directive is implemented, but only supports literal
- unquoted filesnames without drive or directory, such as:
- %INCLUDE LIBRARY.BAS
- Note that the %INCLUDE directive is executed as a file is being loaded,
- and as a result the %INCLUDE does not appear in the resulting listing.
- Machine language functions and commands are not supported.
- The parsing of command line parameters is implementation defined.
- The specification of an array in a COMMON statement is the same as
- the specification in a DIM statement.
- The SIZE() function assumes 1024 bytes and does not support wild-cards;
- if the file does not exist then SIZE() returns zero, otherwise SIZE()
- returns the number of 1024 bytes blocks required to contain the file;
- an existing file of zero bytes returns a value of 1.
-
- OPTION VERSION "DARTMOUTH" ' Dartmouth DTSS BASIC
- MANUAL:
- DARTMOUTH.TXT
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- Sections 4.2 and 4.3 are implementation specific and are not supported.
- Lines containing data to be READ must have a line number and a DATA command.
- NOT IMPLEMENTED:
- Card punch codes are not supported, use a comma or semicolon instead.
-
- OPTION VERSION "ECMA-55" ' ANSI Minimal BASIC
- MANUAL:
- ECMA-55.TXT
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- DIM is an executed statement in bwBASIC.
- This is a design decision to support the following example.
- 100 INPUT "How many?"; N
- 110 DIM A$(N)
-
- OPTION VERSION "ECMA-116" ' ANSI Full BASIC
- MANUAL:
- ECMA-116.TXT
- NOT IMPLEMENTED:
- Graphic commands, chapters 11 thru 15.
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- WORK-IN-PROGRESS.
-
- OPTION VERSION "GCOS" ' GE 600 Mainframe BASIC
- MANUAL:
- GCOS.TXT
- NOT IMPLEMENTED:
- HPS, LIN, RESTORE*, RESTORE$, VPS and binary files.
- NOTES:
- The APPENDIXES are implementation specific and are not supported.
- Local variables in a multiline DEF are declared using DIM.
- Line numbers are not written to, nor read from, data files.
- FILES does not support passwords.
- Literal values for file names are not supported, use string values instead.
- This is a design decision to support the following:
- 100 INPUT "Which files?"; A$, B$, C$
- 110 FILES A$, B$, C$
-
- OPTION VERSION "HAARDT" ' bas 2.4 by Michael Haardt
- MANUAL:
- HAARDT.TXT
- NOT IMPLEMENTED:
- BBC syntax, use ANSI syntax instead.
- ON ERROR statement(s) is not supported, use ON ERROR GOTO instead.
- ON ERROR OFF, use ON ERROR GOTO 0 instead.
- MAT REDIM, OPTION RUN, OPTION STOP, TRUNCATE, UNNUM and XREF.
- DEC$(X,A$), ENVIRON$(X), FIND$(A$[,X]) and INSTR(A$,B$,X,Y).
- NOTES:
- POS and TAB are 1-based instead of 0-based.
- ON ERROR GOTO 0 does not cause any error to occur, instead
- ON ERROR GOTO 0 removes the current error handler and clears
- ERL, ERR and ERROR$.
-
- OPTION VERSION "HANDBOOK1" ' The BASIC Handbook, 1st Edition
- MANUAL:
- HANDBOOK1.TXT
- NOT IMPLEMENTED:
- Abbreviated commands (such as A.) and graphic commands.
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- The ERR function returns different values.
-
- OPTION VERSION "HANDBOOK2" ' The BASIC Handbook, 2nd Edition
- MANUAL:
- HANDBOOK2.TXT
- NOT IMPLEMENTED:
- Abbreviated commands (such as A.) and graphic commands.
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- The ERR function returns different values.
-
- OPTION VERSION "HEATH" ' Heath Benton Harbor BASIC
- NOT IMPLEMENTED:
- FREEZE, UNFREEZE, LOCK, UNLOCK, STEP
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- PRINT #-1 is sent to the printer.
- INPUT #-1 is an ERROR.
-
- OPTION VERSION "MARK-I" ' GE 265 Mainframe BASIC
- MANUAL:
- MARK-I.TXT
- ADDITIONAL REFERENCE:
- "Time-Sharing Service BASIC LANGUAGE EXTENSIONS Reference Manual"
- by Time-Sharing Service, Information Service Department, General Electric
- (c) 1968, General Electric Company and Trustees of Dartmouth College
- http://www.bitsavers.org/pdf/ge/MarkI_Timesharing/
- 802207A_Time-SharingServiceBASICLanguageExtensionsReferenceManual_Feb1968.pdf
- NOTES:
- The APPENDIXES are implementation specific and are not supported.
- NOT IMPLEMENTED:
- A series of variables seperated by equal signs is not supported,
- use a series of variables seperated by commas instead.
- Literal values for file names are not supported, use string values instead.
- This is a design decision to support the following:
- 100 INPUT "Which files?"; A$, B$, C$
- 110 FILES A$, B$, C$
- CALL, to execute another compiled program, is not supported, use SHELL instead.
-
- OPTION VERSION "MARK-II" ' GE 435 Mainframe BASIC
- MANUAL:
- MARK-II.TXT
- ADDITIONAL INFORMATION:
- "Basic Software Library" (Volumes 1 to 8)
- by R. W. Brown
- (c) 1977, Scientific Research Inst.
- NOT IMPLEMENTED:
- HPS, LIN, RESTORE*, RESTORE$, VPS and binary files.
- NOTES:
- The APPENDIXES are implementation specific and are not supported.
- Local variables in a multiline DEF are declared using DIM.
- Line numbers are not written to, nor read from, data files.
- Literal values for file names are not supported, use string values instead.
- This is a design decision to support the following:
- 100 INPUT "Which files?"; A$, B$, C$
- 110 FILES A$, B$, C$
- FILES does not support passwords.
-
- OPTION VERSION "MBASIC" ' Microsoft BASIC-80 for Xenix
- MANUAL:
- MBASIC.TXT
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- The ERR function returns different values.
- Specifying "D" in the exponent is not supported, instead use "E".
-
- OPTION VERSION "PDP-8" ' DEC PDP-8 BASIC
- MANUAL:
- PDP-8.TXT
- NOT IMPLEMENTED:
- NO RUBOUTS, RUBOUTS
- NOTES:
- The APPENDICES are implementation specific and are not supported.
-
- OPTION VERSION "PDP-11" ' DEC PDP-11 BASIC
- MANUAL:
- PDP-11.TXT
- NOTES:
- The APPENDICES are implementation specific and are not supported.
-
- OPTION VERSION "RBASIC" ' Micronics RBASIC for 6809 FLEX
- MANUAL:
- RBASIC.TXT
- NOT IMPLEMENTED:
- "+" command, COMPILE, CVT$, CVTF$, CVT$%, CVT$F
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- The ERR function returns different values.
-
- OPTION VERSION "RSTS-11" ' DEC RSTS-11 BASIC-PLUS
- MANUAL:
- RSTS-11.TXT
- ADDITIONAL INFORMATION:
- "BASIC-PLUS Language Manual : for use with RSTS-11 (PDP-11 Resource Time-Sharing System)"
- by Digital Equipment Corporation
- (c) 1972, Digital Equipment Corporation
- http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsts/V04/
- DEC-11-ORBPA-A-D_BASIC-PLUS_LangMan_Oct72.pdf
- ADDITIONAL INFORMATION:
- "PDP-11 : BASIC-PLUS Language Manual"
- by Digital Equipment Corporation
- (c) 1975, Digital Equipment Corporation
- http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsts/V06/
- DEC-11-ORBPB-A-D_BASIC-PLUS_LangMan_Jul75.pdf
- NOT IMPLEMENTED:
- HELLO, RENAME, REPLACE, COMPILE, LENGTH, TAPE, KEY, ASSIGN, DEASSIGN.
- FOR ... WHILE, FOR ... UNTIL, statement modifiers.
- NOTES:
- The APPENDIXES are implementation specific and are not supported.
- The ERR function returns different values.
- The statemnet NAME ... AS does not support the <protection> specifier.
-
- OPTION VERSION "SYSTEM/360" ' IBM System/360 Mainframe BASIC
- MANUAL:
- SYSTEM-360.TXT
- ADDITIONAL INFORMATION:
- "IBM System/360 0S(TS0) ITF:BASIC Terminal User's Guide"
- by International Business Machines Corporation
- (c) 1971, International Business Machines Corporation
- http://bitsavers.org/pdf/ibm/360/os/tso/
- SC28-6840-0_TSO_ITF_BASIC_Terminal_UG_Apr71.pdf
- NOT IMPLEMENTED:
- MAT PRINT USING.
- NOTES:
- The APPENDIXES are implementation specific and are not supported.
-
- OPTION VERSION "SYSTEM/370" ' IBM System/370 Mainframe BASIC
- MANUAL:
- SYSTEM-370.TXT
- NOT IMPLEMENTED:
- MAT PRINT USING.
- NOTES:
- The APPENDIXES are implementation specific and are not supported.
-
- OPTION VERSION "TRS-80" ' TRS-80 Model I/III/4 LBASIC
- MANUAL:
- TRS-80.TXT
- NOT IMPLEMENTED:
- CMD, SET EOF, cassette I/O.
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- The ERR function returns different values.
- For the TRS-80 Model I use "WIDTH 16,64" in "profile.bas".
- For the TRS-80 Model III use "WIDTH 16,64" in "profile.bas".
- For the TRS-80 Model 4 use "WIDTH 24,80" in "profile.bas".
- bwBASIC requires a space around all keywords, so the LINEINPUT
- command must be written as LINE INPUT, and so on.
- PRINT #-1 is sent to the printer.
- INPUT #-1 is an ERROR.
-
- OPTION VERSION "VINTAGE" ' Vintage BASIC 1.0.1
- MANUAL:
- VINTAGE.TXT
- NOTES:
- The APPENDICES are implementation specific and are not supported.
-
- OPTION VERSION "XBASIC" ' TSC XBASIC for 6800 FLEX
- MANUAL:
- XBASIC.TXT
- NOT IMPLEMENTED:
- "+" command, COMPILE, CVT$, CVTF$, CVT$%, CVT$F
- NOTES:
- The APPENDICES are implementation specific and are not supported.
- The ERR function returns different values.
-
-
- 5. PREDEFINED VARIABLES - no longer exist
-
-
- BWB.EDITOR$
- BWB.FILES$
- BWB.PROMPT$
- BWB.IMPLEMENTATION$
-
- These preset variables no longer exist in bwBASIC. They have
- been replaced with OPTION EDIT, OPTION FILES and OPTION PROMPT
- commands.
-
- The commands EDIT and FILES are pseudo-commands that launch
- shell programs set by OPTION EDIT and OPTION FILES commands,
- respectively. The default values for these commands can
- be changed in bwBASIC.h (DEF_EDITOR and DEF_FILES), and they
- can be changed on the fly by the user. It is expected that
- the user will add the appropriate commands to "profile.bas"
- for their specific implementation; OPTION FILES "ls -l" on Unix
- systems and OPTION FILES "dir" on DOS systems.
-
- The command OPTION PROMPT can be used to set the prompt
- string for bwBASIC. Again, it is suggested that a user-
- selected prompt can be set up in a "profile.bas" to be
- initialized each time bwBASIC starts. Note that special
- characters can be added to the prompt string, e.g.,
-
- OPTION PROMPT "Ok"+CHR$(10)
-
- will give an "Ok" prompt followed by a linefeed.
-
- In previous versions, the preset variable BWB.IMPLEMENTATION$
- would return "TTY" (IMP_IDSTRING) for the bwx_tty implementation.
- In previous versions of bwBASIC, the existance of the keywords CLS,
- COLOR and LOCATE were determined at compile and BWB.IMPLEMENTATION$
- was used at runtime to determine whether these keywords existed.
- In the current version, these keywords always exist and are now
- controlled at runtime using the OPTION TERMINAL commands. With
- OPTION TERMINAL NONE these keywords output nothing.
-
-
- 6. UNIMPLEMENTED COMMANDS AND FUNCTIONS, and AGENDA FOR DEVELOPMENT
-
-
- There are some items not implemented that have been so long
- a part of some BASIC dialects that their absence may seem surprising.
- In each case, though, their implementation would require
- operating-system-specific functions or terminal-specific functions
- that cannot be universally provided. Some specific examples are
- detailed below.
-
-
- INP reads a value from a hardware port. In the current version,
- using INP() will generate ERROR 73. It is expected that you will
- provide a suitable implementation for your specific application.
- For example:
- FUNCTION INP( X )
- REM Return whatever value your application requires
- INP = 0
- END FUNCTION
-
-
- OUT writes a value to a hardware port. In the current version,
- using OUT() will generate ERROR 73. It is expected that you will
- provide a suitable implementation for your specific application.
- For example:
- SUB OUT( X, Y )
- REM do whatever your application requires
- END SUB
-
-
- PEEK reads a value from a memory location. In the current version,
- using PEEK() will generate ERROR 73. It is expected that you will
- provide a suitable implementation for your specific application.
- For example:
- FUNCTION PEEK( X )
- REM Return whatever value your application requires
- PEEK = 0
- END FUNCTION
-
-
- POKE writes a value to a memory location. In the current version,
- using POKE() will generate ERROR 73. It is expected that you will
- provide a suitable implementation for your specific application.
- For example:
- SUB POKE( X, Y )
- REM do whatever your application requires
- END SUB
-
-
- WAIT reads a value from a hardware port. In the current version,
- using WAIT() will generate ERROR 73. It is expected that you will
- provide a suitable implementation for your specific application.
- For example:
- SUB WAIT( X, Y )
- REM do whatever your application requires
- END SUB
- SUB WAIT( X, Y, Z )
- REM do whatever your application requires
- END SUB
-
-
- USR executes a machine code routine. In the current version,
- using USR() will generate ERROR 73. It is expected that you will
- provide a suitable implementation for your specific application.
- For example:
- FUNCTION USR( ... )
- REM Return whatever value your application requires
- USR = 0
- END FUNCTION
-
-
- VARPTR reads a value from a memory location. In the current version,
- using VARPTR() will generate ERROR 73. It is expected that you will
- provide a suitable implementation for your specific application.
- For example:
- FUNCTION VARPTR( ... )
- REM Return whatever value your application requires
- VARPTR = 0
- END FUNCTION
-
-
- There are other commands, functions, and implementation details
- that I am working on, and which are on the agenda list for future
- versions of bwBASIC. These agenda include:
-
-
- PARACT i.e., the ability to execute PARallel ACTions. This
- is described in ANSI BASIC, although I have not seen it
- implemented before. It will offer a rough, non-preemptive
- form of multitasking within the scope of a BASIC program.
- Programmers will note that the global My pointer provides
- one possible hook mechanism for PARACT in bwBASIC. In the
- interim, you might use the "ON TIMER" command to implement
- a simple multitasking BASIC program.
-
-
- XMEM PC-type computers usually are able to use extended
- memory. If we could use extended memory for program
- lines, variables, and function defitions, we could
- write much longer programs. This would entail,
- however, a fairly serious rewriting of the program
- to utilize memory handles for these storage features
- instead of direct memory pointers. In the interim,
- you might use a "DOS Extender" which hooks calloc()
- and free() to enable transparent access to EMS or XMS
- memory.
-
-
- Windows The addition of memory handles in addition to the
- non-preemptive execution of program lines (in a
- crude form, already present) will make it possible
- to develop implementations for Windows and perhaps
- for other graphical user interfaces. But what form
- should this take? I have in mind presently a BASIC
- that would run in the background, appearing only
- as an icon in the GUI space, with pop-up editors
- and output windows. Thus, the interpreted language
- would serve a purpose something like 'cron' (a task
- scheduler) under Unix systems. You may have some
- reflections that would help me in this.
-
-
- Graphics Here we face fairly critical differences in different
- styles and implementations of graphics, e.g., between
- GWBASIC, ANSI BASIC, VisualBASIC, etc. But it's
- possible that Graphics commands and functions could
- be added. These would all be OPTION VERSION specific.
- In the interim, you might consider using ReGIS or Tektronix
- graphics (ESC codes) with xterm.
-
-
- The ANSI Standard for full BASIC does not specify which particular
- commands or functions must be implemented, and in fact the standard
- is very robust. Perhaps no implementation of BASIC would ever
- include all of the items, but some ANSI commands and functions which
- remain unimplemented are:
-
- ACCESS
- AREA
- ARRAY
- ASK
- BSTR
- BVAL
- CELLS
- CLIP
- COLLATE
- CONNECT
- DATUM
- DEBUG
- DECLARE
- DEVICE
- DISCONNECT
- DISPLAY
- DOT
- DRAW
- ERASE
- EVENT
- EXCEPTION
- GRAPH
- HANDLER
- IMAGE
- KEY
- LINES
- MIX
- MULTIPOINT
- OUTIN
- OUTPUT
- PARACT
- PICTURE
- PIXEL
- PLOT
- POINTS
- RECEIVE
- RENUMBER
- REWRITE
- ROTATE
- SEIZE
- SEND
- SHIFT
- TIMEOUT
- TRACE
- TRANSFORM
- VIEWPORT
- WAIT
- VIEWPORT
- ZONEWIDTH
-
-
- 7. THE STORY OF Bywater BASIC
-
-
- This program was originally begun in 1982 by my grandmother, Mrs.
- Verda Spell of Beaumont, TX. She was writing the program using
- an ANSI C compiler on an Osborne I CP/M computer and although my
- grandfather (Lockwood Spell) had bought an IBM PC with 256k of
- RAM my grandmother would not use it, paraphrasing George Herbert
- to the effect that "He who cannot in 64k program, cannot in 512k."
- She had used Microsoft BASIC and although she had nothing against
- it she said repeatedly that she didn't understand why Digital
- Research didn't "sue the socks off of Microsoft" for version 1.0
- of MSDOS and so I reckon that she hoped to undercut Microsoft's
- entire market and eventually build a new software empire on
- the North End of Beaumont. Her programming efforts were cut
- tragically short when she was thrown from a Beaumont to Port
- Arthur commuter train in the summer of 1986. I found the source
- code to bwBASIC on a single-density Osborne diskette in her knitting
- bag and eventually managed to have it all copied over to a PC
- diskette. I have revised it slightly prior to this release. You
- should know, though, that I myself am an historian, not a programmer.
-
-
- 8. COMMUNICATIONS:
-
-
- email: tcamp@delphi.com
-
-
- 9. EXPANDED REFERENCE FOR COMMANDS, FUNCTIONS AND OPERATORS
-
-
- bwBASIC provides a simple "HELP" command to refresh your memory
- regarding the appropriate syntax for a specific command or function.
- In the DOCS directory are text files which provide brief descriptions
- of every intrinsic command, function and operator available in BASIC
- dialect available in bwBASIC; these files are not intented to be an
- authoritative or exhaustive reference. Refer to the reference document
- for each dialect for details regarding each keyword.
-
-
- THE END
|