README file for Bywater BASIC Interpreter/Shell, version 2.20 --------------------------------------------- Copyright (c) 1993, Ted A. Campbell for bwBASIC version 2.10, 11 October 1993 Version 2.20 modifications by Jon B. Volkoff, 25 November 1995 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) in C. It also offers shell programming facilities as an extension of BASIC. bwBASIC seeks to be as portable as possible. 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. IMPROVEMENTS OVER PREVIOUS VERSION (2.10): * Plugged numerous memory leaks, resolved memory overruns and allocation difficulties. * General cleanup and bug fixes, too many to list in detail here. The major problem areas addressed were: - RUN command with file name argument - nested and cascaded FOR-NEXT loops - PRINT USING - EOF, LOF functions - string concatenation - operator hierarchy - multi-level expression evaluation - hex constant interpretation - hex and octal constants in INPUT and DATA statements * Added a CLOSE all files feature (when no argument supplied). * Added a unary minus sign operator. * Added a MID$ command to complement the MID$ function. * Added a RENUM facility in a standalone program. * Added checking in configure for unistd.h (important on Sun systems). OBTAINING THE SOURCE CODE: The source code for bwBASIC 2.20 is available immediately by anonymous ftp. To obtain the source code, ftp to site ftp.netcom.com, cd to pub/rh/rhn and get the file bwbasic-2.20.uu. Or you may receive a copy by e-mail by writing to Jon Volkoff at eidetics@cerf.net. COMMUNICATIONS: email: tcamp@delphi.com (for Ted Campbell) eidetics@cerf.net (for Jon Volkoff) A LIST OF BASIC COMMANDS AND FUNCTIONS IMPLEMENTED in bwBASIC 2.20: Be aware that many of these commands and functions will not be available unless you have set certain flags in the header files. ABS( number ) ASC( string$ ) ATN( number ) CALL subroutine-name CASE constant | IF partial-expression | ELSE CHAIN file-name CHDIR pathname CHR$( number ) CINT( number ) CLEAR CLOSE [[#]file-number]... CLS COMMON variable [, variable...] COS( number ) CSNG( number ) CVD( string$ ) CVI( string$ ) CVS( string$ ) DATA constant[,constant]... DATE$ DEF FNname(arg...)] = expression DEFDBL letter[-letter](, letter[-letter])... DEFINT letter[-letter](, letter[-letter])... DEFSNG letter[-letter](, letter[-letter])... DEFSTR letter[-letter](, letter[-letter])... DELETE line[-line] DIM variable(elements...)[variable(elements...)]... DO NUM|UNNUM DO [WHILE expression] EDIT (* depends on variable BWB.EDITOR$) ELSE ELSEIF END FUNCTION | IF | SELECT | SUB ENVIRON variable-string$ = string$ ENVIRON$( variable-string ) EOF( device-number ) ERASE variable[, variable]... ERL ERR ERROR number EXIT FOR|DO EXP( number ) FIELD [#] device-number, number AS string-variable [, number AS string-variable...] FILES filespec$ (* depends on variable BWB.FILES$) FOR counter = start TO finish [STEP increment] FUNCTION function-definition GET [#] device-number [, record-number] GOSUB line | label GOTO line | label HEX$( number ) IF expression THEN [statement [ELSE statement]] INKEY$ INPUT [# device-number]|[;]["prompt string";]list of variables INSTR( [start-position,] string-searched$, string-pattern$ ) INT( number ) KILL file-name LEFT$( string$, number-of-spaces ) LEN( string$ ) LET variable = expression LINE INPUT [[#] device-number,]["prompt string";] string-variable$ LIST line[-line] LOAD file-name LOC( device-number ) LOCATE LOF( device-number ) LOG( number ) LOOP [UNTIL expression] LSET string-variable$ = expression MERGE file-name MID$( string$, start-position-in-string[, number-of-spaces ] ) MKD$( number ) MKDIR pathname MKI$( number ) MKS$( number ) NAME old-file-name AS new-file-name NEW NEXT counter OCT$( number ) ON variable GOTO|GOSUB line[,line,line,...] ON ERROR GOSUB line | label OPEN O|I|R, [#]device-number, file-name [,record length] file-name FOR INPUT|OUTPUT|APPEND AS [#]device-number [LEN = record-length] OPTION BASE number POS PRINT [# device-number,][USING format-string$;] expressions... PUT [#] device-number [, record-number] RANDOMIZE number READ variable[, variable]... REM string RENUM RESTORE line RETURN RIGHT$( string$, number-of-spaces ) RMDIR pathname RND( number ) RSET string-variable$ = expression RUN [line]|[file-name] SAVE file-name SELECT CASE expression SGN( number ) SIN( number ) SPACE$( number ) SPC( number ) SQR( number ) STOP STR$( number ) STRING$( number, ascii-value|string$ ) SUB subroutine-name SWAP variable, variable SYSTEM TAB( number ) TAN( number ) TIME$ TIMER TROFF TRON VAL( string$ ) WEND WHILE expression WIDTH [# device-number,] number WRITE [# device-number,] element [, element ]....