diff options
Diffstat (limited to 'bwbasic.h')
-rw-r--r-- | bwbasic.h | 3050 |
1 files changed, 3050 insertions, 0 deletions
diff --git a/bwbasic.h b/bwbasic.h new file mode 100644 index 0000000..57854d5 --- /dev/null +++ b/bwbasic.h @@ -0,0 +1,3050 @@ +/*************************************************************** + + bwbasic.h Header File + for Bywater BASIC Interpreter + + Copyright (c) 1993, Ted A. Campbell + Bywater Software + + email: tcamp@delphi.com + + Copyright and Permissions Information: + + All U.S. and international rights are claimed by the author, + Ted A. Campbell. + + This software 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. + +***************************************************************/ + +/*---------------------------------------------------------------*/ +/* NOTE: Modifications marked "JBV" were made by Jon B. Volkoff, */ +/* 11/1995 (eidetics@cerf.net). */ +/* */ +/* Those additionally marked with "DD" were at the suggestion of */ +/* Dale DePriest (daled@cadence.com). */ +/* */ +/* Version 3.00 by Howard Wulf, AF5NE */ +/* */ +/* Version 3.10 by Howard Wulf, AF5NE */ +/* */ +/* Version 3.20 by Howard Wulf, AF5NE */ +/* */ +/*---------------------------------------------------------------*/ + + +#define TRUE -1 +#define FALSE 0 +#define NDEBUG 1 + +#include <assert.h> +#include <ctype.h> +#include <errno.h> +#include <float.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <setjmp.h> +#include <signal.h> +#include <stdarg.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + + +/*************************************************************** + + Definitions + +***************************************************************/ + +/*************************************************************** + + Define Major Hardware Implementation + + TTY is the default implementation. + It is the most minimal, but the most + universal hardware implementation. + + If you use TTY then check the settings + in bwx_tty.c for your system. + + +***************************************************************/ + + + +/* +** +** Here is where you should #include any implementation +** specific files to #define your preferences +** +** +#include "bwb_user.h" +** +** +** +** +*/ + +/* +** +** Attempt to detect the Operating System +** +*/ +#if defined(HAVE_UNIX) +/* +** +** UNIX-style Operating Systems +** +*/ +#elif defined(HAVE_MSDOS) +/* +** +** MSDOS-style Operating Systems +** +*/ +#elif defined(HAVE_CMS) +/* +** +** GCC 3 for CMS on Hercules +** +*/ +#elif defined(HAVE_MVS) +/* +** +** GCC 3 for MVS on Hercules +** +*/ +#elif defined(__CMS__) + +#define HAVE_CMS TRUE + +#elif defined(__MVS__) + +#define HAVE_MVS TRUE + +#elif defined(_DOS) + +#define HAVE_MSDOS TRUE + +#elif defined(_WIN16) + +#define HAVE_MSDOS TRUE + +#elif defined(_WIN32) + +#define HAVE_MSDOS TRUE + +#elif defined(_WIN64) + +#define HAVE_MSDOS TRUE + +#elif defined(__unix__) + +#define HAVE_UNIX TRUE + +#elif defined(__unix) + +#define HAVE_UNIX TRUE + +#elif defined(__APPLE__) + +#define HAVE_UNIX TRUE + +#elif defined(__MACH__) + +#define HAVE_UNIX TRUE + +#elif defined(__BORLANDC__) + +#define HAVE_MSDOS TRUE + +#elif defined(__DMC__) + +#define HAVE_MSDOS TRUE + +#elif defined(__WATCOM__) + +#define HAVE_MSDOS TRUE + +#else +/* +** +** Unable to detect the operaating syystem +** +*/ +#endif + +/*------------------------------------------------------------- + ENVIRONMENT specific configuration +-------------------------------------------------------------*/ + +#if HAVE_UNIX +/* +** +** UNIX-style Operating Systems +** +*/ +/* +** +** If I understand correctly, my development environment is +** GCC 4.9 for Linux via CCTools for Android in a BusyBox +** environment under a Java simulation of an ARM processor +** on a Barnes & Noble $69 Nook Tablet. What could possibly +** go wrong? When you finish laughing, it actually works. +** +** I compile with: gcc -ansi -o bwbasic bw*.c +** +*/ +#include <unistd.h> +#include <sys/stat.h> + +#ifndef DIRECTORY_CMDS +#define DIRECTORY_CMDS TRUE +#endif /* DIRECTORY_CMDS */ + +#ifndef MKDIR_ONE_ARG +#define MKDIR_ONE_ARG FALSE +#endif /* MKDIR_ONE_ARG */ + +#ifndef PERMISSIONS +#define PERMISSIONS 0x0644 +#endif /* PERMISSIONS */ + +#ifndef DEF_EDITOR +#define DEF_EDITOR "nano" +#endif /* DEF_EDITOR */ + +#ifndef HAVE_UNIX_GCC +#if __GNUC__ +#define HAVE_UNIX_GCC TRUE +#else +#define HAVE_UNIX_GCC FALSE +#endif /* __GNUC__ */ +#endif /* HAVE_UNIX_GCC */ + +#endif /* HAVE_UNIX */ + +/*-----------------------------------------------------------*/ + +#if HAVE_MSDOS +/* +** +** MSDOS-style Operating Systems +** +*/ +#if __WATCOM__ +#include <direct.h> /* OpenWatcom 1.9 for DOS */ +#else +#include <dir.h> /* all others */ +#endif /* __WATCOM__ */ + +#ifndef DIRECTORY_CMDS +#define DIRECTORY_CMDS TRUE +#endif /* DIRECTORY_CMDS */ + +#ifndef MKDIR_ONE_ARG +#define MKDIR_ONE_ARG TRUE +#endif /* MKDIR_ONE_ARG */ + +#ifndef PERMISSIONS +#define PERMISSIONS 0 +#endif /* PERMISSIONS */ + +#ifndef DEF_EDITOR +#define DEF_EDITOR "edit" +#endif /* DEF_EDITOR */ + +#ifndef DEF_FILES +#define DEF_FILES "dir /w" +#endif /* DEF_FILES */ + +#ifndef HAVE_UNIX_GCC +#define HAVE_UNIX_GCC FALSE +#endif /* HAVE_UNIX_GCC */ + +#endif /* HAVE_MSDOS */ + +/*-----------------------------------------------------------*/ + +#if HAVE_CMS +/* +** +** GCC 3 for CMS on Hercules +** +*/ +#include "bwd_six.h" + +#ifndef PROFILENAME +#define PROFILENAME "PROFILE BAS" +#endif /* PROFILENAME */ + +#if FALSE +/* +** +** bwBASIC 3.10: OPTION STDERR "LPRINT OUT" +** +*/ +#ifndef LPRINTFILENAME +#define LPRINTFILENAME "LPRINT OUT" +#endif /* LPRINTFILENAME */ +#endif /* FALSE */ + +#if FALSE +/* +** +** bwBASIC 3.10: OPTION STDERR "ERROR OUT" +** +*/ +#ifndef ERRFILE +#define ERRFILE "ERROR OUT" +#endif /* ERRFILE */ +#endif /* FALSE */ + +#if FALSE +/* +** +** bwBASIC 3.20: OPTION PROMPT "bwBASIC:" + CHR$(10) +** +*/ +#ifndef DEF_PROMPT +#define DEF_PROMPT "bwBASIC:\n" +#endif /* DEF_PROMPT */ +#endif /* FALSE */ + +#ifndef DEF_EXTENSION +#define DEF_EXTENSION " BAS" +#endif /* DEF_EXTENSION */ + +#ifndef DIRECTORY_CMDS +#define DIRECTORY_CMDS FALSE +#endif /* DIRECTORY_CMDS */ + +#ifndef HAVE_UNIX_GCC +#define HAVE_UNIX_GCC FALSE +#endif /* HAVE_UNIX_GCC */ + +#endif /* HAVE_CMS */ + +/*---------------------------------------------------------------*/ + +#ifdef HAVE_MVS +/* +** +** GCC 3 for MVS on Hercules +** +*/ +#include "bwd_six.h" + +#ifndef PROFILENAME +#define PROFILENAME "dd:profile" +#endif /* PROFILENAME */ + +#if FALSE +/* +** +** bwBASIC 3.10: OPTION STDERR "dd:lprint" +** +*/ +#ifndef LPRINTFILENAME +#define LPRINTFILENAME "dd:lprint" +#endif /* LPRINTFILENAME */ +#endif /* FALSE */ + +#if FALSE +/* +** +** bwBASIC 3.10: OPTION STDERR "dd:errout" +** +*/ +#ifndef ERRFILE +#define ERRFILE "dd:errout" +#endif /* ERRFILE */ +#endif /* FALSE */ + +#if FALSE +/* +** +** bwBASIC 3.20: OPTION PROMPT "bwBASIC:" + CHR$(10) +** +*/ +#ifndef DEF_PROMPT +#define DEF_PROMPT "bwBASIC:\n" +#endif /* DEF_PROMPT */ +#endif /* FALSE */ + +#ifndef DEF_EXTENSION +#define DEF_EXTENSION "" +#endif /* DEF_EXTENSION */ + +#ifndef DIRECTORY_CMDS +#define DIRECTORY_CMDS FALSE +#endif /* DIRECTORY_CMDS */ + +#ifndef HAVE_UNIX_GCC +#define HAVE_UNIX_GCC FALSE +#endif /* HAVE_UNIX_GCC */ + +#endif /* HAVE_MVS */ + + +/*************************************************************** + + This ends the section of definitions that + users of bwBASIC might want to specify. + The following are internally defined. + + Note that you might want to #define the default + FILES command and the default EDITOR above. + +***************************************************************/ + + + +/* +** +** +** If you want to change any of these values, +** then you should #define them above. +** +** +*/ + +#ifndef HAVE_UNIX_GCC +/* +** TRUE: +** sleep() is an intrinsic C functions in GCC using -ansi +** FALSE: +** sleep() is defined in bwb_int.c to do nothing +** +*/ +#define HAVE_UNIX_GCC FALSE +#endif /* HAVE_UNIX_GCC */ + +#ifndef PROFILE +/* +** +** TRUE: +** automatically execute PROFILENAME line-by-line before parsing command line parameters +** FALSE: +** do not automatically execute PROFILENAME +** +*/ +#define PROFILE TRUE +#endif /* PROFILE */ + +#ifndef PROFILENAME +/* +** +** Filename for PROFILE, only used when PROFILE == TRUE +** This file contains the various OPTION commands +** +*/ +#define PROFILENAME "profile.bas" +#endif /* PROFILENAME */ + +#if FALSE +/* +** +** bwBASIC 3.10: OPTION STDERR "err.out" +** bwBASIC 3.10: OPTION STDERR "LPRINT.OUT" +** +*/ +#ifndef REDIRECT_STDERR +/* +** +** redirect STDERR +** +*/ +#define REDIRECT_STDERR FALSE +#endif /* REDIRECT_STDERR */ +#ifndef ERRFILE +/* +** +** Filename for redirected stderr +** +*/ +#define ERRFILE "err.out" +#endif /* ERRFILE */ +#ifndef LPRINTFILENAME +/* +** +** Filename for LPRINT output +** +*/ +#define LPRINTFILENAME "LPRINT.OUT" +#endif /* LPRINTFILENAME */ +#endif /* FALSE */ + +#ifndef DIRECTORY_CMDS +/* +** +** enable MKDIR, CHDIR, RMDIR +** +*/ +#define DIRECTORY_CMDS TRUE +#endif /* DIRECTORY_CMDS */ + +#ifndef MKDIR_ONE_ARG +/* +** +** TRUE if your mkdir has one argument +** only used when DIRECTORY_CMDS == TRUE +** +*/ +#define MKDIR_ONE_ARG FALSE +#endif /* MKDIR_ONE_ARG */ + +#ifndef PERMISSIONS +/* +** +** permissions to set in a Unix-type system +** only used when MKDIR_ONE_ARG == FALSE +** +*/ +#define PERMISSIONS 0x0644 +#endif /* PERMISSIONS */ + +#if FALSE +/* +** +** bwBASIC 3.20: OPTION PROMPT "bwBASIC: " +** +*/ +#ifndef DEFVNAME_PROMPT +/* +** +** variable name for PROMPT +** +*/ +#define DEFVNAME_PROMPT "BWB.PROMPT$" +#endif /* DEFVNAME_PROMPT */ +#endif /* FALSE */ + +#ifndef DEF_PROMPT +/* +** +** default value for OPTION PROMPT +** +*/ +#define DEF_PROMPT "bwBASIC: " +#endif /* DEF_PROMPT */ + +#ifndef DEF_EXTENSION +/* +** +** default value for OPTION EXTENSION +** +*/ +#define DEF_EXTENSION ".bas" +#endif /* DEF_EXTENSION */ + +#if FALSE +/* +** +** bwBASIC 3.20: OPTION EDIT "vi" +** +*/ +#ifndef DEFVNAME_EDITOR +/* +** +** variable name for EDIT command +** +*/ +#define DEFVNAME_EDITOR "BWB.EDITOR$" +#endif /* DEFVNAME_EDITOR */ +#endif /* FALSE */ + +#ifndef DEF_EDITOR +/* +** +** default value for OPTION EDIT +** +**/ +#define DEF_EDITOR "vi" +#endif /* DEF_EDITOR */ + +#if FALSE +/* +** +** bwBASIC 3.20: OPTION FILES "ls -Fx" +** +*/ +#ifndef DEFVNAME_FILES +/* +** +** variable name for FILES command +** +*/ +#define DEFVNAME_FILES "BWB.FILES$" +#endif /* DEFVNAME_FILES */ +#endif /* FALSE */ + +#ifndef DEF_FILES +/* +** +** default value for OPTION FILES +** +*/ +#define DEF_FILES "ls -Fx" +#endif /* DEF_FILES */ + +#if FALSE +/* +** +** bwBASIC 3.20: not used +** +*/ +#ifndef DEFVNAME_COLORS +/* +** +** variable name for COLORS +** +*/ +#define DEFVNAME_COLORS "BWB.COLORS" +#endif /* DEFVNAME_COLORS */ +#ifndef DEF_COLORS +/* +** +** default value for COLORS +** +*/ +#define DEF_COLORS 256 +#endif /* DEF_COLORS */ +#endif /* FALSE */ + +#if FALSE +/* +** +** bwBASIC 3.20: not used +** +*/ +#ifndef DEFVNAME_IMPL +/* +** +** variable name for IMPLEMENTATION +** +*/ +#define DEFVNAME_IMPL "BWB.IMPLEMENTATION$" +#endif /* DEFVNAME_IMPL */ +#ifndef IMP_IDSTRING +/* +** +** default value for IMPLEMENTATION +** +*/ +#define IMP_IDSTRING "TTY" +#endif /* IMP_IDSTRING */ +#endif /* FALSE */ + +#if FALSE +/* +** +** bwBASIC 3.20: OPTION RENUM "renum" +** +*/ +#ifndef DEFVNAME_RENUM +/* +** +** variable name for RENUM command +** +*/ +#define DEFVNAME_RENUM "BWB.RENUM$" +#endif /* DEFVNAME_RENUM */ +#endif /* FALSE */ + +#ifndef DEF_RENUM +/* +** +** default value for OPTION RENUM +** +*/ +#define DEF_RENUM "renum" +#endif /* DEF_RENUM */ + +#ifndef EXECLEVELS +/* +** +** maximum EXEC stack levels +** only used to prevent run away recursion, such as: +** 100 GOSUB 100 +** +*/ +#define EXECLEVELS 255 +#endif /* EXECLEVELS */ + +#ifndef MAX_DIMS +/* +** +** maximum number of array dimensions +** +*/ +#define MAX_DIMS 3 +#endif /* MAX_DIMS */ + +#if FALSE +/* +** +** bwBASIC 3.10: not used +** +*/ +#ifndef ESTACKSIZE +/* +** +** maximum number of elements in expression stack +** +*/ +#define ESTACKSIZE 64 +#endif /* ESTACKSIZE */ +#endif /* FALSE */ + +/* +** ============================================================ +** +** +** UNLESS YOU ARE WORKING ON THE INTERNALS, +** YOU SHOULD NOT GO BEYOND HERE. +** CHANGING ANY OF THESE VALUES IS NOT SUPPORTED. +** +** ============================================================ +*/ + + + +/* +The relationship of numeric values is REQUIRED to be: + + MAXDBL >= MAXSNG >= MAXCUR >= MAXLNG >= MAXINT > MAXLEN >= MAXBYT > 0 + MINDBL <= MINSNG <= MINCUR <= MINLNG <= MININT < 0 + MINLEN == MINBYT == MINDEV == 0 + + MAXDEV > 0 + MAXBYT == 255 + MAXINT >= 32000 + MININT <= -32000 + MAXSNG >= 1E37 + MINSNG <= -1E37 +*/ + +/* + + switch( TypeCode ) + { + case ByteTypeCode: + break; + case IntegerTypeCode: + break; + case LongTypeCode: + break; + case CurrencyTypeCode: + break; + case SingleTypeCode: + break; + case DoubleTypeCode: + break; + case StringTypeCode: + break; + default: + { WARN_INTERNAL_ERROR; return ...; } + } + +*/ + + +/*------------------------------------------------------------- + BASIC BYTE + OPTION PUNCT BYTE "~" +-------------------------------------------------------------*/ +#ifndef ByteTypeCode +typedef unsigned char ByteType; +#define MINBYT 0 +#define MAXBYT ( UCHAR_MAX ) +#define ByteTypeCode '1' +#endif /* ByteTypeCode */ + +/*------------------------------------------------------------- + BASIC INTEGER + OPTION PUNCT INTEGER "%" +-------------------------------------------------------------*/ +#ifndef IntegerTypeCode +typedef int IntegerType; +#define MININT ( INT_MIN ) +#define MAXINT ( INT_MAX ) +/* +** +** minimum USER line number +** must be > 0 +** +*/ +#define MINLIN 1 +/* +** +** maximum USER line number +** must be < MAXINT +** +*/ +#define MAXLIN ( MAXINT - 1 ) +/* +** +** number of digits for line numbers +** line numbers 1 to 99999 use 5 digits +** +*/ +#define LineNumberDigits 5 +/* +** +** default maximum line length, must be < MAXINT +** OPTION LINE 255 +** +*/ +#define MAX_LINE_LENGTH 255 +#define IntegerTypeCode '2' +#endif /* IntegerTypeCode */ + +/*------------------------------------------------------------- + BASIC LONG + OPTION PUNCT LONG "&" +-------------------------------------------------------------*/ +#ifndef LongTypeCode +typedef long LongType; +#define MINLNG ( LONG_MIN ) +#define MAXLNG ( LONG_MAX ) + +#define HexScanFormat "%lx%n" +#define OctScanFormat "%lo%n" +#define LongTypeCode '3' +#endif /* LongTypeCode */ + +/*------------------------------------------------------------- + BASIC CURRENCY + OPTION PUNCT CURRENCY "@" +-------------------------------------------------------------*/ +#ifndef CurrencyTypeCode +/* +** +** Deprecated, to be removed in bwBASIC 3.30 +** +*/ +typedef long CurrencyType; +#define MINCUR ( LONG_MIN ) +#define MAXCUR ( LONG_MAX ) +#define CurrencyTypeCode '4' +#endif /* CurrencyTypeCode */ + +/*------------------------------------------------------------- + BASIC SINGLE + OPTION PUNCT SINGLE "!" +-------------------------------------------------------------*/ +#ifndef SingleTypeCode +typedef float SingleType; +#define MINSNG ( -FLT_MAX ) +#define MAXSNG ( FLT_MAX ) +#define SingleTypeCode '5' +#endif /* SingleTypeCode */ + +/*------------------------------------------------------------- + BASIC DOUBLE + OPTION PUNCT DOUBLE "#" +-------------------------------------------------------------*/ +#ifndef DoubleTypeCode +typedef double DoubleType; +#define MINDBL ( -DBL_MAX ) +#define MAXDBL ( DBL_MAX ) +#define DecScanFormat "%lg%n" +#define DoubleTypeCode '6' +#endif /* DoubleTypeCode */ + +/*------------------------------------------------------------- + BASIC STRING + OPTION PUNCT STRING "$" +-------------------------------------------------------------*/ +#ifndef StringTypeCode +/* +** +** minimum length of a BASIC string +** must be zero +** +*/ +#define MINLEN 0 +/* +** +** maximum length of a BASIC string +** must be < MAXINT +*/ +#define MAXLEN 255 +#define StringTypeCode '7' +#endif /* StringTypeCode */ + + +/*------------------------------------------------------------- + BASIC DEVICE +-------------------------------------------------------------*/ +#ifndef MINDEV +/* +** +** minimum numbwe of OPEN files +** must be zero +** +*/ +#define MINDEV 0 +#endif /* MINDEV */ + +#ifndef MAXDEV +/* +** +** maximum numbwe of OPEN files +** not counting stdin, stdout, stderr +** +*/ +#define MAXDEV ( FOPEN_MAX - 3 ) +#endif /* MAXDEV */ + +#if FALSE +/* +** +** bwBASIC 3.20: OPTION PUNCT FILENUM "#" +** +*/ +#ifndef FileNumberPrefix +#define FileNumberPrefix '#' +#endif /* FileNumberPrefix */ +#endif /* FALSE */ + + +/*------------------------------------------------------------- + BASIC MISCELLANEOUS +-------------------------------------------------------------*/ + + +#ifndef NameLengthMax +/* +** +** maximum BASIC keyword length +** Applies to ALL keywords in BASIC, incuding: +** variables, functions, subroutines, commands and labels. +** +*/ +#define NameLengthMax 40 +#endif /* NameLengthMax */ + +#ifndef SIGNIFICANT_DIGITS +/* +** +** default setting for OPTION DIGITS +** minimum is 6 for BASIC +** OPTION DIGITS 6 +** +*/ +#define SIGNIFICANT_DIGITS 6 +#endif /* SIGNIFICANT_DIGITS */ + +#ifndef EXPONENT_DIGITS +/* +** +** number of exrad digits +** minimum value is 2 for BASIC +** +*/ +#if (DBL_MAX_10_EXP) < 100 +/* +** +** Exponenet range is within 1E-99 to 1E+99 +** ANSI C89 requires at least 1E-37 to 1E+37 +** +*/ +#define EXPONENT_DIGITS 2 +#elif (DBL_MAX_10_EXP) < 1000 +/* +** +** Exponenet range is within 1E-999 to 1E+999 +** includes ANSI/IEEE Std 754-1985 +** +*/ +#define EXPONENT_DIGITS 3 +#elif (DBL_MAX_10_EXP) < 10000 +/* +** +** Exponenet range is within 1E-9999 to 1E+9999 +** +*/ +#define EXPONENT_DIGITS 4 +#elif (DBL_MAX_10_EXP) < 100000 +/* +** +** Exponenet range is within 1E-99999 to 1E+99999 +** +*/ +#define EXPONENT_DIGITS 5 +#else +/* +** +** Exponenet range is within 1E-999999 to 1E+999999 +** +*/ +#define EXPONENT_DIGITS 6 +#endif +#endif /* EXPONENT_DIGITS */ + +#ifndef ZONE_WIDTH +/* +** +** default setting for OPTION ZONE +** ECMA-55, Section 14.4 +** +*/ +#define ZONE_WIDTH ( SIGNIFICANT_DIGITS + EXPONENT_DIGITS + 6 ) +#endif /* ZONE_WIDTH */ + +#ifndef MINIMUM_DIGITS +/* +** +** minimum setting for OPTION DIGITS +** +*/ +#define MINIMUM_DIGITS 1 +#endif /* MINIMUM_DIGITS */ + +#ifndef MAXIMUM_DIGITS +/* +** +** maximum setting for OPTION DIGITS +** +*/ +#define MAXIMUM_DIGITS ( DBL_DIG ) +#endif /* MAXIMUM_DIGITS */ + +#ifndef MINIMUM_SCALE +/* +** +** minimum setting for OPTION SCALE +** zero disables scaling +** +*/ +#define MINIMUM_SCALE 0 +#endif /* MINIMUM_SCALE */ + +#ifndef MAXIMUM_SCALE +/* +** +** maximum setting for OPTION SCALE +** +*/ +#define MAXIMUM_SCALE ( DBL_DIG ) +#endif /* MAXIMUM_SCALE */ + +#ifndef MINIMUM_ZONE +/* +** +** minimum setting for OPTION ZONE +** +*/ +#define MINIMUM_ZONE 1 +#endif /* MINIMUM_ZONE */ + +#ifndef MAXIMUM_ZONE +/* +** +** maximum setting for OPTION ZONE +** +*/ +#define MAXIMUM_ZONE 79 +#endif /* MAXIMUM_ZONE */ + +#ifndef NUMLEN +/* +** +** small buffer for converting numbers to strings +** FormatBasicNumber, sprintf("%f"), sprintf("%d") and so on +** +*/ +#define NUMLEN 64 +#endif /* NUMLEN */ + +#ifndef MAX_ERR_LENGTH +/* +** +** maximum length of ERROR$ +** +*/ +#define MAX_ERR_LENGTH 63 +#endif /* MAX_ERR_LENGTH */ + +#ifndef MIN +/* +** +** minimum of two numbers +** +*/ +#define MIN( X, Y ) ( (X) < (Y) ? (X) : (Y) ) +#endif /* MIN */ + +#ifndef MAX +/* +** +** maximum of two numbers +** +*/ +#define MAX( X, Y ) ( (X) > (Y) ? (X) : (Y) ) +#endif /* MAX */ + +#if FALSE +/* +** +** bwBASIC 3.20: not used +** +*/ +#ifndef PRN_SPC +/* +** +** internal code for SPC(X), next character is X. +** +*/ +#define PRN_SPC 0x01 +#endif /* PRN_SPC */ +#endif /* FALSE */ + +#if FALSE +/* +** +** bwBASIC 3.20: not used +** +*/ +#ifndef PRN_TAB +/* +** +** internal code for TAB(X), next character is X. +** +*/ +#define PRN_TAB 0x02 +#endif /* PRN_TAB */ +#endif /* FALSE */ + +#ifndef NulChar +/* +** +** the character that terminates a C string, commonly CHR$(0) +** +*/ +#define NulChar '\0' /* NUL */ +#endif /* NulChar */ + +#ifndef THE_PRICE_IS_RIGHT +/* +** +** enable various simple techinques to improve execution speed +** +*/ +#define THE_PRICE_IS_RIGHT TRUE +#endif /* THE_PRICE_IS_RIGHT */ + +#ifndef MAINTAINER_BUFFER_LENGTH +/* +** +** The length of buffers for MAINTINER commands +** +**/ +#define MAINTAINER_BUFFER_LENGTH 1023 +#endif /* MAINTAINER_BUFFER_LENGTH */ + +/*------------------------------------------------------------- + FUNCTION PARAMETER TYPES +-------------------------------------------------------------*/ +/* +** Bit 0 is the first parameter, bit 31 is the 32nd parameter. +** If the parameter is a string then the bit is set. +** If the parameter is a number then the bit is clear. +*/ +typedef unsigned long ParamBitsType; + +#ifndef MAX_FARGS +#define MAX_FARGS ( sizeof( ParamBitsType ) * CHAR_BIT / 1 ) +#endif /* MAX_FARGS */ + + +#define PSTR( N ) ( 1 << ( N - 1 ) ) /* STRING parameter # 1 is bit 0 SET */ +#define PNUM( N ) ( 0 ) /* NUMBER parameter # 1 is bit 0 CLR */ +#define PNONE ( 0 ) /* function has no parameters */ + +#define P1STR PSTR(1) +#define P2STR PSTR(2) +#define P3STR PSTR(3) +#define P4STR PSTR(4) + +#define P1NUM PNUM(1) +#define P2NUM PNUM(2) +#define P3NUM PNUM(3) +#define P4NUM PNUM(4) + + +/*------------------------------------------------------------- + FUNCTION PARAMETER TESTS +-------------------------------------------------------------*/ +/* +** Nibble 0 is the first parameter, +** Nibble 7 is the 8th parameter. +** Each nibble is P1ANY and so on. +*/ +typedef unsigned long ParamTestType; +#define MAX_TESTS ( sizeof( ParamTestType ) * CHAR_BIT / 4 ) + +/* 0x87654321 <- Parameter Number (max # of Range-Checked parameters to INTRINSIC functions is 8) */ +#define P1ERR 0X00000000 /* INTERNAL ERROR */ +#define P1ANY 0X00000001 /* X is any valid number , A$ is any valid string */ +#define P1BYT 0x00000002 /* MIN_BYT <= X <= MAX_BYT , LEN(A$) >= sizeof(char) */ +#define P1INT 0x00000003 /* SHRT_MIN <= X <= SHRT_MAX, LEN(A$) >= sizeof(int) */ +#define P1LNG 0x00000004 /* LONG_MIN <= X <= LONG_MAX, LEN(A$) >= sizeof(long) */ +#define P1CUR 0x00000005 /* LONG_MIN <= X <= LONG_MAX, LEN(A$) >= sizeof(long) */ +#define P1FLT 0x00000006 /* MIN_FLT <= X <= MAX_FLT , LEN(A$) >= sizeof(float) */ +#define P1DBL 0x00000007 /* MIN_DBL <= X <= MAX_DBL , LEN(A$) >= sizeof(double) */ +#define P1DEV 0x00000008 /* RESERVED , RESERVED */ +#define P1LEN 0x00000009 /* MIN_STR <= X <= MAX_STR , RESERVED */ +#define P1POS 0x0000000A /* MIN_STR < X <= MAX_STR , RESERVED */ +#define P1COM 0x0000000B /* X in (1,2,3,4) COMx , RESERVED */ +#define P1LPT 0x0000000C /* X in (0,1,2,3) PRN,LPTx , RESERVED */ +#define P1GTZ 0x0000000D /* X > 0 , RESERVED */ +#define P1GEZ 0x0000000E /* X >= 0 , RESERVED */ +#define P1NEZ 0x0000000F /* X <> 0 , RESERVED */ + +#define P2ERR (P1ERR << 4) +#define P2ANY (P1ANY << 4) +#define P2BYT (P1BYT << 4) +#define P2INT (P1INT << 4) +#define P2LNG (P1LNG << 4) +#define P2CUR (P1CUR << 4) +#define P2FLT (P1FLT << 4) +#define P2DBL (P1DBL << 4) +#define P2DEV (P1DEV << 4) +#define P2LEN (P1LEN << 4) +#define P2POS (P1POS << 4) +#define P2COM (P1COM << 4) +#define P2LPT (P1LPT << 4) +#define P2GTZ (P1GTZ << 4) +#define P2GEZ (P1GEZ << 4) +#define P2NEZ (P1NEZ << 4) + +#define P3ERR (P1ERR << 8) +#define P3ANY (P1ANY << 8) +#define P3BYT (P1BYT << 8) +#define P3INT (P1INT << 8) +#define P3LNG (P1LNG << 8) +#define P3CUR (P1CUR << 8) +#define P3FLT (P1FLT << 8) +#define P3DBL (P1DBL << 8) +#define P3DEV (P1DEV << 8) +#define P3LEN (P1LEN << 8) +#define P3POS (P1POS << 8) +#define P3COM (P1COM << 8) +#define P3LPT (P1LPT << 8) +#define P3GTZ (P1GTZ << 8) +#define P3GEZ (P1GEZ << 8) +#define P3NEZ (P1NEZ << 8) + +#define P4ERR (P1ERR << 12) +#define P4ANY (P1ANY << 12) +#define P4BYT (P1BYT << 12) +#define P4INT (P1INT << 12) +#define P4LNG (P1LNG << 12) +#define P4CUR (P1CUR << 12) +#define P4FLT (P1FLT << 12) +#define P4DBL (P1DBL << 12) +#define P4DEV (P1DEV << 12) +#define P4LEN (P1LEN << 12) +#define P4POS (P1POS << 12) +#define P4COM (P1COM << 12) +#define P4LPT (P1LPT << 12) +#define P4GTZ (P1GTZ << 12) +#define P4GEZ (P1GEZ << 12) +#define P4NEZ (P1NEZ << 12) + + + + + +/*************************************************************** + + Structures + +***************************************************************/ + +/*------------------------------------------------------------- + OPTION VERSION bitmask +-------------------------------------------------------------*/ +typedef unsigned long OptionVersionType; /* upto 32 BASIC dialects */ + +/*------------------------------------------------------------- + Result of attempt to parse +-------------------------------------------------------------*/ +typedef enum +{ + RESULT_UNPARSED = 1, + RESULT_ERROR, + RESULT_SUCCESS +} ResultType; + +/*------------------------------------------------------------- + STRINGS +-------------------------------------------------------------*/ +struct StringStructure +{ + size_t length; /* length of string */ + char *sbuffer; /* pointer to string buffer */ +}; +typedef struct StringStructure StringType; + + +/*------------------------------------------------------------- + VARIABLES +-------------------------------------------------------------*/ +union ValuePtrUnion +{ + DoubleType *Number; /* memory for number */ + StringType *String; /* memory for string */ +}; +typedef union ValuePtrUnion ValuePtrType; + +struct VariableStructure +{ + struct VariableStructure *next; /* next variable in chain */ + char name[NameLengthMax + 1]; /* name */ + ValuePtrType Value; /* memory for values */ + size_t array_units; /* total number of units of memory */ + int LBOUND[MAX_DIMS]; /* lower bound for each dimension */ + int UBOUND[MAX_DIMS]; /* upper bound for each dimension */ + int VINDEX[MAX_DIMS]; /* current index in each dimension */ + int dimensions; /* number of dimensions, 0 == scalar */ + unsigned char VariableFlags; /* VARIABLE_... */ + char VariableTypeCode; /* StringTypeCode and so on */ +}; +typedef struct VariableStructure VariableType; +#define VAR_IS_STRING( v ) ( v->VariableTypeCode == StringTypeCode ) +/* VariableFlags */ +#define VARIABLE_RESERVED_01 0x01 /* reserved for future use */ +#define VARIABLE_RESERVED_02 0x02 /* reserved for future use */ +#define VARIABLE_RESERVED_04 0x04 /* reserved for future use */ +#define VARIABLE_CONSTANT 0x08 /* CONST variable: value cannot be changed again */ +#define VARIABLE_VIRTUAL 0x10 /* VIRTUAL variable: values are stored in disk file */ +#define VARIABLE_DISPLAY 0x20 /* DSP variable: display every assignment */ +#define VARIABLE_PRESET 0x40 /* preset variable: CLEAR should not delete */ +#define VARIABLE_COMMON 0x80 /* COMMON variable: available to CHAINed program */ + + +/*------------------------------------------------------------- + LINES +-------------------------------------------------------------*/ +struct LineStructure +{ + struct LineStructure *next; /* pointer to next line in chain */ + struct LineStructure *OtherLine; /* pointer to other line in loops */ + char *buffer; /* buffer to hold the line */ + int number; /* line number */ + int position; /* current position in line */ + int cmdnum; /* C_... */ + int Startpos; /* start of rest of line read from buffer */ + int Indention; /* structure command indention level */ + int IncludeLevel; /* %INCLUDE file level */ + unsigned char LineFlags; /* LINE_... */ +}; +typedef struct LineStructure LineType; +/* LineFlags */ +#define LINE_EXECUTED 0x01 /* line was executed */ +#define LINE_NUMBERED 0x02 /* line was manually numbered */ +#define LINE_BREAK 0x04 /* BREAK line */ +#define LINE_USER 0x08 /* USER line executing from console */ +#define LINE_RESERVED_10 0x10 /* reserved for future use */ +#define LINE_RESERVED_20 0x20 /* reserved for future use */ +#define LINE_RESERVED_40 0x40 /* reserved for future use */ +#define LINE_RESERVED_80 0x80 /* reserved for future use */ + + +/*------------------------------------------------------------- + USER FUNCTIONS, SUBS and LABELS +-------------------------------------------------------------*/ +struct UserFunctionStructure +{ + struct UserFunctionStructure *next; + char *name; + char ReturnTypeCode; /* StringTypeCode and so on */ + unsigned char ParameterCount; /* 0..MAX_FARGS, 255 == VARIANT (...) */ + ParamBitsType ParameterTypes; /* parameter signature, must hold MAX_FARGS bits */ + LineType *line; /* points to the FUNCTION, SUB, or LABEL line */ + int startpos; /* starting position in line */ + VariableType *local_variable; /* local variables for this function or sub */ + OptionVersionType OptionVersionBitmask; /* OPTION VERSION bitmask */ +}; +typedef struct UserFunctionStructure UserFunctionType; + + +/*------------------------------------------------------------- + INTRINSIC FUNCTIONS +-------------------------------------------------------------*/ +struct IntrinsicFunctionStructure +{ + const int FunctionID; /* F_... */ + const char *Syntax; /* the syntax of the function */ + const char *Description; /* the description of the function */ + const char *Name; /* the name of the function, such as "MID$" */ + const char ReturnTypeCode; /* StringTypeCode and so on */ + const unsigned char ParameterCount; /* 0..MAX_FARGS, 255 == VARIANT (...) */ + const ParamBitsType ParameterTypes; /* parameter signature, holds MAX_FARGS bits */ + const ParamTestType ParameterTests; /* parameter checks, must hold 8 nibbles, only first 8 parameters */ + OptionVersionType OptionVersionBitmask; /* OPTION VERSION bitmask */ +}; +typedef struct IntrinsicFunctionStructure IntrinsicFunctionType; +extern IntrinsicFunctionType IntrinsicFunctionTable[ /* NUM_FUNCTIONS */ ]; +extern const size_t NUM_FUNCTIONS; + + +/*------------------------------------------------------------- + INTRINSIC COMMANDS +-------------------------------------------------------------*/ +struct CommandStructure +{ + const int CommandID; /* C_... */ + const char *Syntax; /* the syntax of the command */ + const char *Description; /* the description of the command */ + const char *name; /* the name of the command, such as "PRINT" */ + OptionVersionType OptionVersionBitmask; /* OPTION VERSION bitmask */ +}; +typedef struct CommandStructure CommandType; +extern CommandType IntrinsicCommandTable[ /* NUM_COMMANDS */ ]; +extern const size_t NUM_COMMANDS; + + +/*------------------------------------------------------------- + FILES +-------------------------------------------------------------*/ +struct FileStructure +{ + struct FileStructure *next; + int FileNumber; /* 1-based file number used to OPEN the file ( 0 for SYSIN/SYSOUT, -1 for SYSPRN */ + int DevMode; /* DEVMODE_... */ + int width; /* 1-based width for OUTPUT and APPEND; reclen for RANDOM; not used for INPUT or BINARY */ + int col; /* 1-based current column for OUTPUT and APPEND */ + int row; /* 1-based current row for OUTPUT and APPEND */ + int EOF_LineNumber; /* IF END # filenumber THEN EOF_linenumber */ + FILE *cfp; /* C file pointer for this device */ + char *buffer; /* pointer to character buffer for RANDOM */ + char delimit; /* DELIMIT for READ and WRITE */ + char *FileName; /* File Name */ +}; +typedef struct FileStructure FileType; +/* DevMode */ +#define DEVMODE_CLOSED 0x00 +#define DEVMODE_INPUT 0x01 +#define DEVMODE_OUTPUT 0x02 +#define DEVMODE_RANDOM 0x04 +#define DEVMODE_APPEND 0x08 +#define DEVMODE_VIRTUAL 0x10 +#define DEVMODE_BINARY 0x20 +#define DEVMODE_X40 0x40 /* reserved for future use */ +#define DEVMODE_X80 0x80 /* reserved for future use */ +#define DEVMODE_READ (DEVMODE_INPUT | DEVMODE_RANDOM | DEVMODE_BINARY ) +#define DEVMODE_WRITE (DEVMODE_OUTPUT | DEVMODE_RANDOM | DEVMODE_APPEND | DEVMODE_BINARY ) + + +/*------------------------------------------------------------- + FIELDS in a RANDOM file +-------------------------------------------------------------*/ +struct FieldStructure +{ + /* only used for RANDOM files in dialects with a FIELD command */ + struct FieldStructure *next; + FileType *File; + int FieldOffset; + int FieldLength; + VariableType *Var; + int VINDEX[MAX_DIMS]; /* current position in array */ +}; +typedef struct FieldStructure FieldType; + + +/*------------------------------------------------------------- + VIRTUAL VARIABLES +-------------------------------------------------------------*/ +struct VirtualStructure +{ + /* only used for VIRTUAL variables in dialects with a DIM # command */ + struct VirtualStructure *next; + int FileNumber; /* note: the file can be opened AFTER the variable is declared */ + size_t FileOffset; /* byte offset from the beginning of the file */ + int FileLength; /* sizeof( DoubleType ) or Fixed String Length */ + VariableType *Variable; /* the variable */ +}; +typedef struct VirtualStructure VirtualType; + + +/*------------------------------------------------------------- + STACK +-------------------------------------------------------------*/ +struct StackStructure +{ + struct StackStructure *next; + LineType *line; /* line for execution */ + int ExecCode; /* EXEC_... */ + VariableType *local_variable; /* local variables of FUNCTION and variable of FOR */ + DoubleType for_step; /* STEP value of FOR */ + DoubleType for_target; /* TO value of FOR */ + LineType *LoopTopLine; /* top line of FOR, DO, WHILE, UNTIL */ + int OnErrorGoto; /* ON ERROR GOTO line */ +}; +typedef struct StackStructure StackType; +/* ExecCode */ +#define EXEC_NORM 0 +#define EXEC_GOSUB 1 +#define EXEC_FOR 2 +#define EXEC_FUNCTION 3 +#define EXEC_POPPED 4 + + +/*------------------------------------------------------------- + VERSION +-------------------------------------------------------------*/ +struct VersionStructure +{ + const char *Name; /* OPTION VERSION name$ */ + const OptionVersionType OptionVersionValue; /* ( D64 ,...) */ + const char *ID; /* ("D64",...) */ + const char *Description; /* short description of this dialect */ + const char *ReferenceTitle; /* Reference document */ + const char *ReferenceAuthor; /* Reference document */ + const char *ReferenceCopyright; /* Reference document */ + const char *ReferenceURL1; /* Reference document */ + const char *ReferenceURL2; /* Reference document */ + unsigned short OptionFlags; + int OptionReclenInteger; /* OPTION RECLEN integer: Default RANDOM record length */ + int OptionBaseInteger; /* OPTION BASE integer: Default lower bound for arrays */ + char *OptionDateFormat; /* OPTION DATE format$: strftime() format for DATE$ */ + char *OptionTimeFormat; /* OPTION TIME format$: strftime() format for TIME$ */ + char OptionStringChar; /* OPTION STRING char$: Suffix for StringTypeCode , commonly '$' */ + char OptionDoubleChar; /* OPTION DOUBLE char$: Suffix for DoubleTypeCode , commonly '#' */ + char OptionSingleChar; /* OPTION SINGLE char$: Suffix for SingleTypeCode , commonly '!' */ + char OptionCurrencyChar; /* OPTION CURRENCY char$: Suffix for CurrencyTypeCode, commonly '@' */ + char OptionLongChar; /* OPTION LONG char$: Suffix for LongTypeCode , commonly '&' */ + char OptionIntegerChar; /* OPTION INTEGER char$: Suffix for IntegerTypeCode , commonly '%' */ + char OptionByteChar; /* OPTION BYTE char$: Suffix for ByteTypeCode , commonly '~' */ + char OptionQuoteChar; /* OPTION QUOTE char$: Quote, commonly a double-quote */ + char OptionCommentChar; /* OPTION COMMENT char$: Comment, commonly a single-quote */ + char OptionStatementChar; /* OPTION STATEMENT char$: Statement Seperator, commonly ':' */ + char OptionPrintChar; /* OPTION PRINT char$: PRINT Statement, commonly '?' */ + char OptionInputChar; /* OPTION INPUT char$: INPUT Statement, commonly '!' */ + char OptionImageChar; /* OPTION IMAGE char$: IMAGE Statement, commonly ':' */ + char OptionLparenChar; /* OPTION LPAREN char$: Left Parenthesis, commonly '(' */ + char OptionRparenChar; /* OPTION RPAREN char$: Right Parenthesis, commonly ')' */ + char OptionFilenumChar; /* OPTION FILENUM char$: File Number, commonly '#' */ + char OptionAtChar; /* OPTION AT char$: PRINT AT, commonly '@' */ + char OptionUsingDigit; /* OPTION USING DIGIT char$: PRINT USING Digit placeholder, commonly '#' */ + char OptionUsingComma; /* OPTION USING COMMA char$: PRINT USING Comma, such as thousands and millions, commonly ',' */ + char OptionUsingPeriod; /* OPTION USING PERIOD char$: PRINT USING Period, such as between dollars and cents, commonly '.' */ + char OptionUsingPlus; /* OPTION USING PLUS char$: PRINT USING Plus sign, positive value, commonly '+' */ + char OptionUsingMinus; /* OPTION USING MINUS char$: PRINT USING Minus sign, negative value, commonly '-' */ + char OptionUsingExrad; /* OPTION USING EXRAD char$: PRINT USING Exponential format, commonly '^' */ + char OptionUsingDollar; /* OPTION USING DOLLAR char$: PRINT USING Currency symbol, such as dollar, commonly '$' */ + char OptionUsingFiller; /* OPTION USING FILLER char$: PRINT USING Filler, such as payroll checks, commonly '*' */ + char OptionUsingLiteral; /* OPTION USING LITERAL char$: PRINT USING Literal, commonly '_' */ + char OptionUsingFirst; /* OPTION USING FIRST char$: PRINT USING First character of a string, commonly '!' */ + char OptionUsingAll; /* OPTION USING ALL char$: PRINT USING All of a string, commonly '&' */ + char OptionUsingLength; /* OPTION USING LENGTH char$: PRINT USING Length of a string, commonly '%' */ +}; +typedef struct VersionStructure VersionType; +extern VersionType bwb_vertable[ /* NUM_VERSIONS */ ]; /* table of predefined versions */ +extern const size_t NUM_VERSIONS; /* upto 32 BASIC dialects */ +/* OptionVersionValue */ +#define B15 (1UL<< 0) /* Bywater */ +#define S70 (1UL<< 1) /* CALL/360 */ +#define C77 (1UL<< 2) /* CBASIC-II */ +#define D64 (1UL<< 3) /* Dartmouth */ +#define E78 (1UL<< 4) /* ECMA-55 */ +#define E86 (1UL<< 5) /* ECMA-116 */ +#define G74 (1UL<< 6) /* GCOS */ +#define HB1 (1UL<< 7) /* Handbook1 */ +#define HB2 (1UL<< 8) /* Handbook2 */ +#define H80 (1UL<< 9) /* Heath */ +#define G65 (1UL<<10) /* Mark-I */ +#define G67 (1UL<<11) /* Mark-II */ +#define M80 (1UL<<12) /* MBASIC */ +#define D73 (1UL<<13) /* PDP-8 */ +#define D70 (1UL<<14) /* PDP-11 */ +#define R86 (1UL<<15) /* RBASIC */ +#define D71 (1UL<<16) /* RSTS-11 */ +#define I70 (1UL<<17) /* System/360 */ +#define I73 (1UL<<18) /* System/370 */ +#define T80 (1UL<<19) /* TRS-80 */ +#define V09 (1UL<<20) /* Vintage */ +#define T79 (1UL<<21) /* XBASIC */ +#define H14 (1UL<<22) /* Haart */ +#define B93 (1UL<<23) /* Bywater-2 */ + +/* OptionFlags */ +#define OPTION_STRICT_ON 0x0001 /* Do NOT allow implicit DIM */ +#define OPTION_ANGLE_DEGREES 0x0002 /* Use degrees instead of radians */ +#define OPTION_BUGS_ON 0x0004 /* ON ... , FOR ..., VAL("X") */ +#define OPTION_LABELS_ON 0x0008 /* Labels allowed */ +#define OPTION_COMPARE_TEXT 0x0010 /* Case-Insensitive string comparison */ +#define OPTION_BUGS_BOOLEAN 0x0020 /* Boolean returns 1 or 0 instead of bitwise */ +#define OPTION_COVERAGE_ON 0x0040 /* track BASIC lines actually executed */ +#define OPTION_TRACE_ON 0x0080 /* dump BASIC stack trace when FATAL error */ +#define OPTION_ERROR_GOSUB 0X0100 /* error causes GOSUB instead of GOTO */ +#define OPTION_EXPLICIT_ON 0x0200 /* all variables must be declared via DIM */ +#define OPTION_ANGLE_GRADIANS 0x0400 /* Use gradians instead of radians */ +#define OPTION_RESERVED_0800 0x0800 /* reserved for future use */ +#define OPTION_RESERVED_1000 0x1000 /* reserved for future use */ +#define OPTION_RESERVED_2000 0x2000 /* reserved for future use */ +#define OPTION_RESERVED_4000 0x4000 /* reserved for future use */ +#define OPTION_RESERVED_8000 0x8000 /* reserved for future use */ +#define IS_CHAR( X, Y ) ( (X) == (Y) && (Y) != NulChar ) /* used with the Option...Char settings */ + + +/*------------------------------------------------------------- + VARIANT +-------------------------------------------------------------*/ +struct VariantStructure +{ + char VariantTypeCode; /* StringTypeCode and so on, NulChar == unknown */ + DoubleType Number; /* only when VariamtTypeCode != StringTypeCode */ + size_t Length; /* only when VariantTypeCode == StringTypeCode */ + char *Buffer; /* only when VariantTypeCode == StringTypeCode */ +}; +typedef struct VariantStructure VariantType; +#define CLEAR_VARIANT( X ) bwb_memset( (X), 0, sizeof( VariantType ) ) +#define RELEASE_VARIANT( X ) if( (X)->Buffer != NULL ) { free( (X)->Buffer ); (X)->Buffer = NULL; (X)->Length = 0; } +/* +any routine changing the TypeCode is required to calloc() or free() the Buffer, +this is checked by is_string_type() and is_number_type() in bwb_exp.c +*/ + + +/*------------------------------------------------------------- + GLOBAL +-------------------------------------------------------------*/ +struct GlobalStruct +{ + /* these values are not changed by OPTION VERSION */ + jmp_buf mark; /* break_handler() jumps here */ + int program_run; /* has the command-line program been run? */ + VersionType *CurrentVersion; /* OPTION VERSION */ + LineType *ThisLine; /* currently executing line */ + int IsScanRequired; /* TRUE == program needs to be rescanned */ + int IsTraceOn; /* TRUE == TRON, FALSE == TROFF */ + int IsInteractive; /* always TRUE */ + int IsCommandLineFile; /* TRUE == executing a program from the Operating System command line */ + int IsErrorPending; /* TRUE == ERR, ERL and ERROR$ have been set */ + int IsTimerOn; /* TRUE == ON TIMER ... GOSUB ... enabled */ + int IsPrinter; /* CBASIC-II: LPRINTER sets to TRUE, CONSOLE sets to FALSE */ + int LPRINT_NULLS; /* LPRINT_FILE_NUMBER */ + int SCREEN_ROWS; /* CONSOLE_FILE_NUMBER */ + int AutomaticLineNumber; /* AUTO */ + int AutomaticLineIncrement; /* AUTO */ + int LastInputCount; /* 0 == none */ + int LastLineNumber; /* LIST, LLIST */ + int LastFileNumber; /* 0 == none */ + int StartTimeInteger; /* seconds after midnight when RUN was executed */ + int NextValidLineNumber; /* verify line number order */ + int StackDepthInteger; /* stack depth count */ + LineType *DataLine; /* current DATA line for READ */ + int DataPosition; /* current position in DataLine */ + int ERR; /* ERR */ + LineType *ERL; /* ERL */ + char *ERROR4; /* ERROR$ */ + DoubleType LastDeterminant; /* 0 == error */ + DoubleType RESIDUE; /* for RBASIC's RESIDUE function */ + FILE *ExternalInputFile; /* --TAPE tapefile.inp */ + int OnTimerLineNumber; /* ON TIMER ... GOSUB ... */ + DoubleType OnTimerCount; /* ON TIMER ... GOSUB ... */ + DoubleType OnTimerExpires; /* ON TIMER ... GOSUB ... */ + LineType *ContinueLine; /* CONT */ + int IncludeLevel; /* %INCLUDE */ + DoubleType OptionSleepDouble; /* OPTION SLEEP double */ + int OptionIndentInteger; /* OPTION INDENT integer */ + int OptionTerminalType; /* OPTION TERMINAL type */ + int OptionRoundType; /* OPTION ROUND type */ + char *OptionEditString; /* OPTION EDIT string$ */ + char *OptionFilesString; /* OPTION FILES string$ */ + char *OptionRenumString; /* OPTION RENUM string$ */ + char *OptionPromptString; /* OPTION PROMPT string$ */ + char *OptionExtensionString; /* OPTION EXTENSION string$ */ + int OptionScaleInteger; /* OPTION SCALE integer */ + int OptionDigitsInteger; /* OPTION DIGITS integer */ + int OptionZoneInteger; /* OPTION ZONE integer */ + LineType *StartMarker; /* BASIC program starting marker */ + LineType *UserMarker; /* USER (immediate mode) starting marker */ + LineType *EndMarker; /* ending marker for both StartMarker and UserMarker */ + char *MaxLenBuffer; /* MAXLEN, for bwb_exp.c */ + char *NumLenBuffer; /* NUMLEN, for FormatBasicNumber(), sprintf("%d") and so on */ + char *ConsoleOutput; /* MAX_LINE_LENGTH, usually prompts and error messages */ + char *ConsoleInput; /* MAX_LINE_LENGTH, usually console and INPUT */ + VariableType *VariableHead; /* USER Variable list */ + UserFunctionType *UserFunctionHead; /* USER function-sub-label list */ + StackType *StackHead; /* USER Stack list */ + FileType *FileHead; /* USER file list (not SYSIN, SYSOUT, or SYSPRN) */ + FieldType *FieldHead; /* USER field list */ + VirtualType *VirtualHead; /* USER Virtual cross-reference list */ + FileType *SYSIN; /* FileNumber = 0, INPUT, usually stdin, OPTION SYSIN */ + FileType *SYSOUT; /* FileNumber = 0, PRINT, usually stdout, OPTION SYSOUT */ + FileType *SYSPRN; /* FileNumber < 0, LPRINT, usually stderr, OPTION SYSPRN */ + FileType *CurrentFile; /* current file for PRINT or INPUT */ + char *UseParameterString; /* CHAIN ... USE */ + int DefaultVariableType[26]; /* VariableTypeCode, A-Z */ +#if THE_PRICE_IS_RIGHT + int CommandStart[26]; /* IntrinsicCommandTable->name[0], A-Z */ + int IntrinsicFunctionStart[26]; /* IntrinsicFunctionTable->name[0], A-Z */ +#endif /* THE_PRICE_IS_RIGHT */ + char *COMMAND4[10]; /* command line parameters, COMMAND$(0-9) */ + char *ProgramFilename; /* last BASIC program filename */ +}; +typedef struct GlobalStruct GlobalType; +extern GlobalType *My; + +#define PARAM_NUMBER *argn->Value.Number +#define PARAM_LENGTH argn->Value.String->length +#define PARAM_BUFFER argn->Value.String->sbuffer +#define RESULT_NUMBER *argv->Value.Number +#define RESULT_BUFFER argv->Value.String->sbuffer +#define RESULT_LENGTH argv->Value.String->length + + +/*************************************************************** + + Compiler Specific Prototypes + +***************************************************************/ + + +#if __WATCOM__ +/* +** +** OpenWatcom 1.9 for DOS does not declare putenv() +** +*/ +extern int putenv (const char *buffer); +#endif /* __WATCOM__ */ + +#if HAVE_UNIX_GCC +/* +** +** sleep() is an intrinsic C functions in GCC using -ansi +** +*/ +#else +/* +** +** sleep() is defined in bwb_int.c to do nothing +** +*/ +extern unsigned int sleep (unsigned int X); +#endif /* HAVE_UNIX_GCC */ + +#ifndef isnan +#define isnan(x) (x != x) +#endif + +#ifndef isinf +#define isinf(x) (!isnan(x) && isnan(x - x)) +#endif + +/*************************************************************** + + Function Prototypes + +***************************************************************/ + +/*------------------------------------------------------------- + BASIC COMMANDS +-------------------------------------------------------------*/ +extern LineType *bwb_APPEND (LineType * l); +extern LineType *bwb_AS (LineType * L); +extern LineType *bwb_AUTO (LineType * L); +extern LineType *bwb_BACKSPACE (LineType * Line); +extern LineType *bwb_BREAK (LineType * l); +extern LineType *bwb_BUILD (LineType * L); +extern LineType *bwb_BYE (LineType * l); +extern LineType *bwb_CALL (LineType * l); +extern LineType *bwb_CASE (LineType * l); +extern LineType *bwb_CASE_ELSE (LineType * l); +extern LineType *bwb_CHAIN (LineType * l); +extern LineType *bwb_CHANGE (LineType * l); +extern LineType *bwb_CLEAR (LineType * l); +extern LineType *bwb_CLOAD (LineType * Line); +extern LineType *bwb_CLOAD8 (LineType * l); +extern LineType *bwb_CLOSE (LineType * Line); +extern LineType *bwb_CLR (LineType * l); +extern LineType *bwb_CMDS (LineType * l); +extern LineType *bwb_COMMON (LineType * l); +extern LineType *bwb_CONSOLE (LineType * l); +extern LineType *bwb_CONST (LineType * L); +extern LineType *bwb_CONT (LineType * l); +extern LineType *bwb_CONTINUE (LineType * l); +extern LineType *bwb_COPY (LineType * Line); +extern LineType *bwb_CREATE (LineType * l); +extern LineType *bwb_CSAVE (LineType * Line); +extern LineType *bwb_CSAVE8 (LineType * l); +extern LineType *bwb_DATA (LineType * Line); +extern LineType *bwb_DEC (LineType * L); +extern LineType *bwb_DEF (LineType * l); +extern LineType *bwb_DEF8LBL (LineType * l); +extern LineType *bwb_DEFBYT (LineType * l); +extern LineType *bwb_DEFCUR (LineType * l); +extern LineType *bwb_DEFDBL (LineType * l); +extern LineType *bwb_DEFINT (LineType * l); +extern LineType *bwb_DEFLNG (LineType * l); +extern LineType *bwb_DEFSNG (LineType * l); +extern LineType *bwb_DEFSTR (LineType * l); +extern LineType *bwb_DELETE (LineType * l); +extern LineType *bwb_DELIMIT (LineType * l); +extern LineType *bwb_DIM (LineType * l); +extern LineType *bwb_DISPLAY (LineType * Line); +extern LineType *bwb_DO (LineType * l); +extern LineType *bwb_DOS (LineType * l); +extern LineType *bwb_DSP (LineType * l); +extern LineType *bwb_EDIT (LineType * Line); +extern LineType *bwb_ELSE (LineType * l); +extern LineType *bwb_ELSEIF (LineType * l); +extern LineType *bwb_END (LineType * l); +extern LineType *bwb_END_FUNCTION (LineType * l); +extern LineType *bwb_END_IF (LineType * l); +extern LineType *bwb_END_SELECT (LineType * l); +extern LineType *bwb_END_SUB (LineType * l); +extern LineType *bwb_ERASE (LineType * l); +extern LineType *bwb_EXCHANGE (LineType * l); +extern LineType *bwb_EXIT (LineType * l); +extern LineType *bwb_EXIT_DO (LineType * l); +extern LineType *bwb_EXIT_FOR (LineType * l); +extern LineType *bwb_EXIT_FUNCTION (LineType * l); +extern LineType *bwb_EXIT_REPEAT (LineType * l); +extern LineType *bwb_EXIT_SUB (LineType * l); +extern LineType *bwb_EXIT_WHILE (LineType * l); +extern LineType *bwb_FEND (LineType * l); +extern LineType *bwb_FIELD (LineType * l); +extern LineType *bwb_FILE (LineType * l); +extern LineType *bwb_FILES (LineType * l); +extern LineType *bwb_FLEX (LineType * l); +extern LineType *bwb_FNCS (LineType * l); +extern LineType *bwb_FNEND (LineType * l); +extern LineType *bwb_FOR (LineType * l); +extern LineType *bwb_FUNCTION (LineType * l); +extern LineType *bwb_GET (LineType * Line); +extern LineType *bwb_GO (LineType * L); +extern LineType *bwb_GOODBYE (LineType * l); +extern LineType *bwb_GOSUB (LineType * l); +extern LineType *bwb_GOTO (LineType * l); +extern LineType *bwb_GO_SUB (LineType * l); +extern LineType *bwb_GO_TO (LineType * l); +extern LineType *bwb_HELP (LineType * l); +extern LineType *bwb_IF (LineType * l); +extern LineType *bwb_IF8THEN (LineType * l); +extern LineType *bwb_IF_END (LineType * l); +extern LineType *bwb_IF_MORE (LineType * l); +extern LineType *bwb_IMAGE (LineType * L); +extern LineType *bwb_INC (LineType * L); +extern LineType *bwb_INPUT (LineType * Line); +extern LineType *bwb_INPUT_LINE (LineType * Line); +extern LineType *bwb_LET (LineType * L); +extern LineType *bwb_LINE (LineType * Line); +extern LineType *bwb_LINE_INPUT (LineType * Line); +extern LineType *bwb_LIST (LineType * l); +extern LineType *bwb_LISTNH (LineType * l); +extern LineType *bwb_LLIST (LineType * l); +extern LineType *bwb_LOAD (LineType * Line); +extern LineType *bwb_LOCAL (LineType * l); +extern LineType *bwb_LOOP (LineType * l); +extern LineType *bwb_LPRINT (LineType * l); +extern LineType *bwb_LPRINTER (LineType * l); +extern LineType *bwb_LPT (LineType * l); +extern LineType *bwb_LSET (LineType * l); +extern LineType *bwb_MAINTAINER (LineType * l); +extern LineType *bwb_MAINTAINER_CMDS (LineType * l); +extern LineType *bwb_MAINTAINER_CMDS_HTML (LineType * l); +extern LineType *bwb_MAINTAINER_CMDS_ID (LineType * l); +extern LineType *bwb_MAINTAINER_CMDS_MANUAL (LineType * l); +extern LineType *bwb_MAINTAINER_CMDS_SWITCH (LineType * l); +extern LineType *bwb_MAINTAINER_CMDS_TABLE (LineType * l); +extern LineType *bwb_MAINTAINER_DEBUG (LineType * l); +extern LineType *bwb_MAINTAINER_DEBUG_OFF (LineType * l); +extern LineType *bwb_MAINTAINER_DEBUG_ON (LineType * l); +extern LineType *bwb_MAINTAINER_FNCS (LineType * l); +extern LineType *bwb_MAINTAINER_FNCS_HTML (LineType * l); +extern LineType *bwb_MAINTAINER_FNCS_ID (LineType * l); +extern LineType *bwb_MAINTAINER_FNCS_MANUAL (LineType * l); +extern LineType *bwb_MAINTAINER_FNCS_SWITCH (LineType * l); +extern LineType *bwb_MAINTAINER_FNCS_TABLE (LineType * l); +extern LineType *bwb_MAINTAINER_MANUAL (LineType * l); +extern LineType *bwb_MAINTAINER_STACK (LineType * l); +extern LineType *bwb_MARGIN (LineType * l); +extern LineType *bwb_MAT (LineType * l); +extern LineType *bwb_MAT_GET (LineType * Line); +extern LineType *bwb_MAT_INPUT (LineType * Line); +extern LineType *bwb_MAT_PRINT (LineType * l); +extern LineType *bwb_MAT_PUT (LineType * l); +extern LineType *bwb_MAT_READ (LineType * Line); +extern LineType *bwb_MAT_WRITE (LineType * l); +extern LineType *bwb_MERGE (LineType * l); +extern LineType *bwb_MID4 (LineType * l); +extern LineType *bwb_MON (LineType * l); +extern LineType *bwb_NAME (LineType * l); +extern LineType *bwb_NEW (LineType * l); +extern LineType *bwb_NEXT (LineType * l); +extern LineType *bwb_OF (LineType * L); +extern LineType *bwb_OLD (LineType * Line); +extern LineType *bwb_ON (LineType * l); +extern LineType *bwb_ON_ERROR (LineType * l); +extern LineType *bwb_ON_ERROR_GOSUB (LineType * l); +extern LineType *bwb_ON_ERROR_GOTO (LineType * l); +extern LineType *bwb_ON_ERROR_RESUME (LineType * l); +extern LineType *bwb_ON_ERROR_RESUME_NEXT (LineType * l); +extern LineType *bwb_ON_ERROR_RETURN (LineType * l); +extern LineType *bwb_ON_ERROR_RETURN_NEXT (LineType * l); +extern LineType *bwb_ON_TIMER (LineType * l); +extern LineType *bwb_OPEN (LineType * l); +extern LineType *bwb_OPTION (LineType * l); +extern LineType *bwb_OPTION_ANGLE (LineType * l); +extern LineType *bwb_OPTION_ANGLE_DEGREES (LineType * l); +extern LineType *bwb_OPTION_ANGLE_GRADIANS (LineType * l); +extern LineType *bwb_OPTION_ANGLE_RADIANS (LineType * l); +extern LineType *bwb_OPTION_ARITHMETIC (LineType * l); +extern LineType *bwb_OPTION_ARITHMETIC_DECIMAL (LineType * l); +extern LineType *bwb_OPTION_ARITHMETIC_FIXED (LineType * l); +extern LineType *bwb_OPTION_ARITHMETIC_NATIVE (LineType * l); +extern LineType *bwb_OPTION_PUNCT_AT (LineType * l); +extern LineType *bwb_OPTION_BASE (LineType * l); +extern LineType *bwb_OPTION_BUGS (LineType * l); +extern LineType *bwb_OPTION_BUGS_BOOLEAN (LineType * l); +extern LineType *bwb_OPTION_BUGS_OFF (LineType * l); +extern LineType *bwb_OPTION_BUGS_ON (LineType * l); +extern LineType *bwb_OPTION_PUNCT_BYTE (LineType * l); +extern LineType *bwb_OPTION_PUNCT_COMMENT (LineType * l); +extern LineType *bwb_OPTION_COMPARE (LineType * l); +extern LineType *bwb_OPTION_COMPARE_BINARY (LineType * l); +extern LineType *bwb_OPTION_COMPARE_DATABASE (LineType * l); +extern LineType *bwb_OPTION_COMPARE_TEXT (LineType * l); +extern LineType *bwb_OPTION_COVERAGE (LineType * l); +extern LineType *bwb_OPTION_COVERAGE_OFF (LineType * l); +extern LineType *bwb_OPTION_COVERAGE_ON (LineType * l); +extern LineType *bwb_OPTION_PUNCT_CURRENCY (LineType * l); +extern LineType *bwb_OPTION_DATE (LineType * l); +extern LineType *bwb_OPTION_DIGITS (LineType * l); +extern LineType *bwb_OPTION_DISABLE (LineType * l); +extern LineType *bwb_OPTION_DISABLE_COMMAND (LineType * l); +extern LineType *bwb_OPTION_DISABLE_FUNCTION (LineType * l); +extern LineType *bwb_OPTION_DISABLE_OPERATOR (LineType * l); +extern LineType *bwb_OPTION_PUNCT_DOUBLE (LineType * l); +extern LineType *bwb_OPTION_EDIT (LineType * l); +extern LineType *bwb_OPTION_ENABLE (LineType * l); +extern LineType *bwb_OPTION_ENABLE_COMMAND (LineType * l); +extern LineType *bwb_OPTION_ENABLE_FUNCTION (LineType * l); +extern LineType *bwb_OPTION_ENABLE_OPERATOR (LineType * l); +extern LineType *bwb_OPTION_ERROR (LineType * l); +extern LineType *bwb_OPTION_ERROR_GOSUB (LineType * l); +extern LineType *bwb_OPTION_ERROR_GOTO (LineType * l); +extern LineType *bwb_OPTION_EXPLICIT (LineType * l); +extern LineType *bwb_OPTION_PUNCT_FILENUM (LineType * l); +extern LineType *bwb_OPTION_FILES (LineType * l); +extern LineType *bwb_OPTION_PUNCT_IMAGE (LineType * l); +extern LineType *bwb_OPTION_IMPLICIT (LineType * l); +extern LineType *bwb_OPTION_INDENT (LineType * l); +extern LineType *bwb_OPTION_PUNCT_INPUT (LineType * l); +extern LineType *bwb_OPTION_PUNCT_INTEGER (LineType * l); +extern LineType *bwb_OPTION_LABELS (LineType * l); +extern LineType *bwb_OPTION_LABELS_OFF (LineType * l); +extern LineType *bwb_OPTION_LABELS_ON (LineType * l); +extern LineType *bwb_OPTION_PUNCT_LONG (LineType * l); +extern LineType *bwb_OPTION_PUNCT_LPAREN (LineType * l); +extern LineType *bwb_OPTION_PUNCT_PRINT (LineType * l); +extern LineType *bwb_OPTION_PROMPT (LineType * l); +extern LineType *bwb_OPTION_PUNCT_QUOTE (LineType * l); +extern LineType *bwb_OPTION_RECLEN (LineType * l); +extern LineType *bwb_OPTION_RENUM (LineType * l); +extern LineType *bwb_OPTION_ROUND (LineType * l); +extern LineType *bwb_OPTION_ROUND_BANK (LineType * l); +extern LineType *bwb_OPTION_ROUND_MATH (LineType * l); +extern LineType *bwb_OPTION_ROUND_TRUNCATE (LineType * l); +extern LineType *bwb_OPTION_PUNCT_RPAREN (LineType * l); +extern LineType *bwb_OPTION_SCALE (LineType * l); +extern LineType *bwb_OPTION_PUNCT_SINGLE (LineType * l); +extern LineType *bwb_OPTION_SLEEP (LineType * l); +extern LineType *bwb_OPTION_PUNCT_STATEMENT (LineType * l); +extern LineType *bwb_OPTION_STDERR (LineType * l); +extern LineType *bwb_OPTION_STDIN (LineType * l); +extern LineType *bwb_OPTION_STDOUT (LineType * l); +extern LineType *bwb_OPTION_STRICT (LineType * l); +extern LineType *bwb_OPTION_STRICT_OFF (LineType * l); +extern LineType *bwb_OPTION_STRICT_ON (LineType * l); +extern LineType *bwb_OPTION_PUNCT_STRING (LineType * l); +extern LineType *bwb_OPTION_TERMINAL (LineType * l); +extern LineType *bwb_OPTION_TERMINAL_ADM (LineType * l); +extern LineType *bwb_OPTION_TERMINAL_ANSI (LineType * l); +extern LineType *bwb_OPTION_TERMINAL_NONE (LineType * l); +extern LineType *bwb_OPTION_TIME (LineType * l); +extern LineType *bwb_OPTION_TRACE (LineType * l); +extern LineType *bwb_OPTION_TRACE_OFF (LineType * l); +extern LineType *bwb_OPTION_TRACE_ON (LineType * l); +extern LineType *bwb_OPTION_USING (LineType * l); +extern LineType *bwb_OPTION_USING_ALL (LineType * l); +extern LineType *bwb_OPTION_USING_COMMA (LineType * l); +extern LineType *bwb_OPTION_USING_DIGIT (LineType * l); +extern LineType *bwb_OPTION_USING_DOLLAR (LineType * l); +extern LineType *bwb_OPTION_USING_EXRAD (LineType * l); +extern LineType *bwb_OPTION_USING_FILLER (LineType * l); +extern LineType *bwb_OPTION_USING_FIRST (LineType * l); +extern LineType *bwb_OPTION_USING_LENGTH (LineType * l); +extern LineType *bwb_OPTION_USING_LITERAL (LineType * l); +extern LineType *bwb_OPTION_USING_MINUS (LineType * l); +extern LineType *bwb_OPTION_USING_PERIOD (LineType * l); +extern LineType *bwb_OPTION_USING_PLUS (LineType * l); +extern LineType *bwb_OPTION_VERSION (LineType * l); +extern LineType *bwb_OPTION_ZONE (LineType * l); +extern LineType *bwb_PAUSE (LineType * l); +extern LineType *bwb_PDEL (LineType * l); +extern LineType *bwb_POP (LineType * l); +extern LineType *bwb_PRINT (LineType * l); +extern LineType *bwb_PTP (LineType * l); +extern LineType *bwb_PTR (LineType * l); +extern LineType *bwb_PUT (LineType * Line); +extern LineType *bwb_QUIT (LineType * l); +extern LineType *bwb_READ (LineType * Line); +extern LineType *bwb_RECALL (LineType * l); +extern LineType *bwb_REM (LineType * L); +extern LineType *bwb_RENAME (LineType * l); +extern LineType *bwb_RENUM (LineType * Line); +extern LineType *bwb_RENUMBER (LineType * Line); +extern LineType *bwb_REPEAT (LineType * l); +extern LineType *bwb_REPLACE (LineType * Line); +extern LineType *bwb_RESET (LineType * Line); +extern LineType *bwb_RESTORE (LineType * Line); +extern LineType *bwb_RESUME (LineType * l); +extern LineType *bwb_RETURN (LineType * l); +extern LineType *bwb_RSET (LineType * l); +extern LineType *bwb_RUN (LineType * L); +extern LineType *bwb_RUNNH (LineType * L); +extern LineType *bwb_SAVE (LineType * l); +extern LineType *bwb_SCRATCH (LineType * l); +extern LineType *bwb_SELECT (LineType * l); +extern LineType *bwb_SELECT_CASE (LineType * l); +extern LineType *bwb_STEP (LineType * L); +extern LineType *bwb_STOP (LineType * l); +extern LineType *bwb_STORE (LineType * l); +extern LineType *bwb_SUB (LineType * l); +extern LineType *bwb_SUBEND (LineType * l); +extern LineType *bwb_SUBEXIT (LineType * l); +extern LineType *bwb_SUB_END (LineType * l); +extern LineType *bwb_SUB_EXIT (LineType * l); +extern LineType *bwb_SWAP (LineType * l); +extern LineType *bwb_SYSTEM (LineType * l); +extern LineType *bwb_TEXT (LineType * l); +extern LineType *bwb_THEN (LineType * L); +extern LineType *bwb_TIMER (LineType * l); +extern LineType *bwb_TIMER_OFF (LineType * l); +extern LineType *bwb_TIMER_ON (LineType * l); +extern LineType *bwb_TIMER_STOP (LineType * l); +extern LineType *bwb_TLOAD (LineType * Line); +extern LineType *bwb_TO (LineType * L); +extern LineType *bwb_TRACE (LineType * l); +extern LineType *bwb_TRACE_OFF (LineType * l); +extern LineType *bwb_TRACE_ON (LineType * l); +extern LineType *bwb_TSAVE (LineType * Line); +extern LineType *bwb_TTY (LineType * l); +extern LineType *bwb_TTY_IN (LineType * l); +extern LineType *bwb_TTY_OUT (LineType * l); +extern LineType *bwb_UNTIL (LineType * l); +extern LineType *bwb_USE (LineType * l); +extern LineType *bwb_VARS (LineType * l); +extern LineType *bwb_vector (LineType * l); +extern LineType *bwb_WEND (LineType * l); +extern LineType *bwb_WHILE (LineType * l); +extern LineType *bwb_WRITE (LineType * l); +extern LineType *bwb_OPTION_PUNCT (LineType * l); +extern LineType *bwb_OPTION_EXTENSION (LineType * l); + +/*------------------------------------------------------------- + INTERNALS +-------------------------------------------------------------*/ +extern int binary_get_put (VariableType * Variable, int IsPUT); +extern int buff_is_eol (char *buffer, int *position); +extern int buff_peek_array_dimensions (char *buffer, int *position, + int *n_params); +extern int buff_peek_char (char *buffer, int *position, char find); +extern int buff_peek_EqualChar (char *buffer, int *position); +extern int buff_peek_LparenChar (char *buffer, int *position); +extern int buff_peek_QuoteChar (char *buffer, int *position); +#if FALSE /* kepp this ... */ +extern int buff_peek_word (char *buffer, int *position, char *find); +#endif +extern int buff_read_array_dimensions (char *buffer, int *position, + int *n_params, int params[]); +extern int buff_read_array_redim (char *buffer, int *position, + int *dimensions, int LBOUND[], + int UBOUND[]); +extern ResultType buff_read_decimal_constant (char *buffer, int *position, + VariantType * X, + int IsConsoleInput); +extern int buff_read_expression (char *buffer, int *position, + VariantType * X); +extern ResultType buff_read_hexadecimal_constant (char *buffer, int *position, + VariantType * X, + int IsConsoleInput); +extern int buff_read_index_item (char *buffer, int *position, int Index, + int *Value); +extern int buff_read_integer_expression (char *buffer, int *position, + int *Value); +extern int buff_read_label (char *buffer, int *position, char *label); +extern int buff_read_letter_sequence (char *buffer, int *position, char *head, + char *tail); +extern int buff_read_line_number (char *buffer, int *position, int *linenum); +extern int buff_read_line_sequence (char *buffer, int *position, int *head, + int *tail); +extern VariableType *buff_read_matrix (char *buffer, int *position); +extern int buff_read_numeric_expression (char *buffer, int *position, + DoubleType * Value); +extern ResultType buff_read_octal_constant (char *buffer, int *position, + VariantType * X, + int IsConsoleInput); +extern VariableType *buff_read_scalar (char *buffer, int *position); +extern int buff_read_string_expression (char *buffer, int *position, + char **Value); +extern char buff_read_type_declaration (char *buffer, int *position); +extern int buff_read_varname (char *buffer, int *position, char *varname); +extern int buff_skip_AtChar (char *buffer, int *position); +extern int buff_skip_char (char *buffer, int *position, char find); +extern int buff_skip_CommaChar (char *buffer, int *position); +extern void buff_skip_eol (char *buffer, int *position); +extern int buff_skip_EqualChar (char *buffer, int *position); +extern int buff_skip_FilenumChar (char *buffer, int *position); +extern int buff_skip_LparenChar (char *buffer, int *position); +extern int buff_skip_MinusChar (char *buffer, int *position); +extern int buff_skip_PlusChar (char *buffer, int *position); +extern int buff_skip_RparenChar (char *buffer, int *position); +extern int buff_skip_SemicolonChar (char *buffer, int *position); +extern char buff_skip_seperator (char *buffer, int *position); +extern void buff_skip_spaces (char *buffer, int *position); +extern int buff_skip_StarChar (char *buffer, int *position); +extern int buff_skip_word (char *buffer, int *position, char *find); +extern void bwb_clrexec (void); +extern void bwb_decexec (void); +extern void bwb_execline (void); +extern void bwb_fclose (FILE * file); +extern void bwb_file_open (char A, int x, char *B, int y); +extern int bwb_fload (char *FileName); +extern int bwb_freeline (LineType * l); +extern int bwb_incexec (void); +extern int bwb_isalnum (int C); +extern int bwb_isalpha (int C); +#if FALSE /* keep this ... */ +extern int bwb_iscntrl (int C); +#endif +extern int bwb_isdigit (int C); +extern int bwb_isgraph (int C); +#if FALSE /* keep this ... */ +extern int bwb_islower (int C); +#endif +extern int bwb_isprint (int C); +extern int bwb_ispunct (int C); +#if FALSE /* keep this ... */ +extern int bwb_isspace (int C); +#endif +#if FALSE /* keep this ... */ +extern int bwb_isupper (int C); +#endif +extern int bwb_isxdigit (int C); +extern int bwb_is_eof (FILE * fp); +extern void bwb_mainloop (void); +#if FALSE /* keep this ... */ +extern void *bwb_memchr (const void *s, int c, size_t n); +#endif +extern int bwb_memcmp (const void *s1, const void *s2, size_t n); +extern void *bwb_memcpy (void *s1, const void *s2, size_t n); +#if FALSE /* keep this ... */ +extern void *bwb_memmove (void *s1, const void *s2, size_t n); +#endif +extern void *bwb_memset (void *s, int c, size_t n); +extern LineType *bwb_option_punct_char (LineType * l, char *c); +extern LineType *bwb_option_range_integer (LineType * l, int *Integer, + int MinVal, int MaxVal); +extern double bwb_rint (double x); +extern int bwb_scan (void); +extern char *bwb_strcat (char *s1, const char *s2); +extern char *bwb_strchr (const char *s, int c); +extern int bwb_strcmp (const char *s1, const char *s2); +extern char *bwb_strcpy (char *s1, const char *s2); +extern char *bwb_strdup (char *s); +extern char *bwb_strdup2 (char *s, char *t); +extern int bwb_stricmp (const char *s1, const char *s2); +extern size_t bwb_strlen (const char *s); +#if FALSE /* keep this ... */ +extern char *bwb_strncat (char *s1, const char *s2, size_t n); +#endif +#if FALSE /* keep this ... */ +extern int bwb_strncmp (const char *s1, const char *s2, size_t n); +#endif +extern char *bwb_strncpy (char *s1, const char *s2, size_t n); +extern int bwb_strnicmp (const char *s1, const char *s2, size_t n); +extern char *bwb_strrchr (const char *s, int c); +extern int bwb_tolower (int C); +extern int bwb_toupper (int C); +extern void bwb_xnew (LineType * l); +extern void bwx_CLS (void); +extern void bwx_COLOR (int Fore, int Back); +extern int bwx_Error (int ERR, char *ErrorMessage); +extern int bwx_input (char *prompt, int IsDisplayQuestionMark, char *answer, + int MaxLen); +extern void bwx_LOCATE (int Row, int Col); +extern void bwx_STOP (int IsShowMessage); +extern void bwx_terminate (void); +extern DoubleType bwx_TIMER (DoubleType Seconds); +extern char Char_to_TypeCode (char C); +extern void CleanLine (char *buffer); +extern void clear_virtual_by_file (int FileNumber); +extern void Determinant (VariableType * v); +extern void DumpAllCommandHtmlTable (FILE * file); +extern void DumpAllCommandSwitchStatement (FILE * file); +extern void DumpAllCommandSyntax (FILE * file, int IsXref, + OptionVersionType OptionVersionValue); +extern void DumpAllCommandTableDefinitions (FILE * file); +extern void DumpAllCommandUniqueID (FILE * file); +extern void DumpAllFuctionTableDefinitions (FILE * file); +extern void DumpAllFunctionHtmlTable (FILE * file); +extern void DumpAllFunctionSwitch (FILE * file); +extern void DumpAllFunctionSyntax (FILE * file, int IsXref, + OptionVersionType OptionVersionValue); +extern void DumpAllFunctionUniqueID (FILE * file); +extern void DumpAllOperatorSyntax (FILE * file, int IsXref, + OptionVersionType OptionVersionValue); +extern void DumpHeader (FILE * file); +extern void DumpOneCommandSyntax (FILE * file, int IsXref, int n); +extern void DumpOneFunctionSyntax (FILE * file, int IsXref, int n); +extern void DumpOneOperatorSyntax (FILE * file, int IsXref, int n); +extern void field_close_file (FileType * File); +extern void field_free_variable (VariableType * Var); +extern void field_get (FileType * File); +extern void field_put (FileType * File); +extern void file_clear (FileType * F); +extern FileType *file_new (void); +extern int file_next_number (void); +extern FileType *find_file_by_name (char *FileName); +extern FileType *find_file_by_number (int FileNumber); +extern LineType *find_line_number (int number); +extern void FixDescription (FILE * file, const char *left, const char *right); +extern void FormatBasicNumber (DoubleType Input, char *Output); +extern int GetOnError (void); +extern void IntrinsicFunctionDefinitionCheck (IntrinsicFunctionType * f); +extern void IntrinsicFunctionSyntax (IntrinsicFunctionType * f, char *Syntax); +extern void IntrinsicFunctionUniqueID (IntrinsicFunctionType * f, + char *UniqueID); +extern VariableType *IntrinsicFunction_deffn (int argc, VariableType * argv, + UserFunctionType * f); +extern VariableType *IntrinsicFunction_execute (int argc, VariableType * argv, + IntrinsicFunctionType * f); +extern IntrinsicFunctionType *IntrinsicFunction_find_exact (char *name, + int + ParameterCount, + ParamBitsType + ParameterTypes); +extern int IntrinsicFunction_init (void); +extern int IntrinsicFunction_name (char *name); +extern int InvertMatrix (VariableType * vOut, VariableType * vIn); +extern int IsLastKeyword (LineType * l, char *Keyword); +extern int IsLike (char *buffer, int *buffer_count, int buffer_Length, + char *pattern, int *pattern_count, int pattern_Length); +extern int is_empty_string (char *Buffer); +extern int line_is_eol (LineType * line); +#if FALSE /* kepp this ... */ +extern int line_peek_array_dimensions (LineType * line, int *n_params); +#endif +#if FALSE /* kepp this ... */ +extern int line_peek_char (LineType * line, char find); +#endif +extern int line_peek_EqualChar (LineType * line); +extern int line_peek_LparenChar (LineType * line); +extern int line_peek_QuoteChar (LineType * line); +#if FALSE /* kepp this ... */ +extern int line_peek_word (LineType * line, char *find); +#endif +#if FALSE /* kepp this ... */ +extern int line_read_array_dimensions (LineType * line, int *n_params, + int params[]); +#endif +extern int line_read_array_redim (LineType * line, int *dimensions, + int LBOUND[], int UBOUND[]); +extern int line_read_expression (LineType * line, VariantType * X); +extern int line_read_index_item (LineType * line, int Index, int *Value); +extern int line_read_integer_expression (LineType * line, int *Value); +extern int line_read_label (LineType * line, char *label); +extern int line_read_letter_sequence (LineType * line, char *head, + char *tail); +extern int line_read_line_number (LineType * line, int *linenum); +extern int line_read_line_sequence (LineType * line, int *head, int *tail); +extern VariableType *line_read_matrix (LineType * line); +extern int line_read_numeric_expression (LineType * line, DoubleType * Value); +extern VariableType *line_read_scalar (LineType * line); +extern int line_read_string_expression (LineType * line, char **Value); +extern char line_read_type_declaration (LineType * line); +extern int line_read_varname (LineType * line, char *varname); +extern int line_skip_AtChar (LineType * line); +extern int line_skip_char (LineType * line, char find); +extern int line_skip_CommaChar (LineType * line); +extern void line_skip_eol (LineType * line); +extern int line_skip_EqualChar (LineType * line); +extern int line_skip_FilenumChar (LineType * line); +extern int line_skip_LparenChar (LineType * line); +extern int line_skip_MinusChar (LineType * line); +extern int line_skip_PlusChar (LineType * line); +extern int line_skip_RparenChar (LineType * line); +extern int line_skip_SemicolonChar (LineType * line); +extern char line_skip_seperator (LineType * line); +extern void line_skip_spaces (LineType * line); +extern int line_skip_StarChar (LineType * line); +extern int line_skip_word (LineType * line, char *find); +extern void line_start (LineType * l); +extern int main (int argc, char **argv); +extern VariableType *mat_find (char *name); +extern int NumberValueCheck (ParamTestType ParameterTests, DoubleType X); +extern void OptionVersionSet (int i); +extern void ResetConsoleColumn (void); +extern void SetOnError (int LineNumber); +extern void SortAllCommands (void); +extern void SortAllFunctions (void); +extern void SortAllOperators (void); +extern int StringLengthCheck (ParamTestType ParameterTests, int s); +extern int str_btob (StringType * d, StringType * s); +extern int str_cmp (StringType * a, StringType * b); +extern int str_match (char *A, int A_Length, char *B, int B_Length, + int I_Start); +extern char TypeCode_to_Char (char TypeCode); +extern int UserFunction_add (LineType * l); +extern int UserFunction_addlocalvar (UserFunctionType * f, VariableType * v); +extern UserFunctionType *UserFunction_find_exact (char *name, + unsigned char + ParameterCount, + ParamBitsType + ParameterTypes); +extern int UserFunction_init (void); +extern int UserFunction_name (char *name); +extern int VarTypeIndex (char C); +extern VariableType *var_chain (VariableType * argv); +extern void var_CLEAR (void); +extern int var_delcvars (void); +extern VariableType *var_find (char *name, int dimensions, int IsImplicit); +extern VariableType *var_free (VariableType * variable); +extern int var_get (VariableType * variable, VariantType * variant); +extern int var_init (void); +extern int var_make (VariableType * variable, char TypeCode); +extern char var_nametype (char *name); +extern VariableType *var_new (char *name, char TypeCode); +extern int var_set (VariableType * variable, VariantType * variant); + + +/*------------------------------------------------------------- + COMMANDS (CommandID) +-------------------------------------------------------------*/ +#define C_DEF8LBL -1 /* DEF*LBL */ +/* COMMANDS */ +#define C_APPEND 1 /* APPEND */ +#define C_AS 2 /* AS */ +#define C_AUTO 3 /* AUTO */ +#define C_BACKSPACE 4 /* BACKSPACE */ +#define C_BREAK 5 /* BREAK */ +#define C_BUILD 6 /* BUILD */ +#define C_BYE 7 /* BYE */ +#define C_CALL 8 /* CALL */ +#define C_CASE 9 /* CASE */ +#define C_CASE_ELSE 10 /* CASE ELSE */ +#define C_CHAIN 11 /* CHAIN */ +#define C_CHANGE 12 /* CHANGE */ +#define C_CLEAR 13 /* CLEAR */ +#define C_CLOAD 14 /* CLOAD */ +#define C_CLOAD8 15 /* CLOAD* */ +#define C_CLOSE 16 /* CLOSE */ +#define C_CLR 17 /* CLR */ +#define C_CMDS 18 /* CMDS */ +#define C_COMMON 19 /* COMMON */ +#define C_CONSOLE 20 /* CONSOLE */ +#define C_CONST 21 /* CONST */ +#define C_CONT 22 /* CONT */ +#define C_CONTINUE 23 /* CONTINUE */ +#define C_COPY 24 /* COPY */ +#define C_CREATE 25 /* CREATE */ +#define C_CSAVE 26 /* CSAVE */ +#define C_CSAVE8 27 /* CSAVE* */ +#define C_DATA 28 /* DATA */ +#define C_DEC 29 /* DEC */ +#define C_DEF 30 /* DEF */ +#define C_DEFBYT 31 /* DEFBYT */ +#define C_DEFCUR 32 /* DEFCUR */ +#define C_DEFDBL 33 /* DEFDBL */ +#define C_DEFINT 34 /* DEFINT */ +#define C_DEFLNG 35 /* DEFLNG */ +#define C_DEFSNG 36 /* DEFSNG */ +#define C_DEFSTR 37 /* DEFSTR */ +#define C_DELETE 38 /* DELETE */ +#define C_DELIMIT 39 /* DELIMIT */ +#define C_DIM 40 /* DIM */ +#define C_DISPLAY 41 /* DISPLAY */ +#define C_DO 42 /* DO */ +#define C_DOS 43 /* DOS */ +#define C_DSP 44 /* DSP */ +#define C_EDIT 45 /* EDIT */ +#define C_ELSE 46 /* ELSE */ +#define C_ELSEIF 47 /* ELSEIF */ +#define C_END 48 /* END */ +#define C_END_FUNCTION 49 /* END FUNCTION */ +#define C_END_IF 50 /* END IF */ +#define C_END_SELECT 51 /* END SELECT */ +#define C_END_SUB 52 /* END SUB */ +#define C_ERASE 53 /* ERASE */ +#define C_EXCHANGE 54 /* EXCHANGE */ +#define C_EXIT 55 /* EXIT */ +#define C_EXIT_DO 56 /* EXIT DO */ +#define C_EXIT_FOR 57 /* EXIT FOR */ +#define C_EXIT_FUNCTION 58 /* EXIT FUNCTION */ +#define C_EXIT_REPEAT 59 /* EXIT REPEAT */ +#define C_EXIT_SUB 60 /* EXIT SUB */ +#define C_EXIT_WHILE 61 /* EXIT WHILE */ +#define C_FEND 62 /* FEND */ +#define C_FIELD 63 /* FIELD */ +#define C_FILE 64 /* FILE */ +#define C_FILES 65 /* FILES */ +#define C_FLEX 66 /* FLEX */ +#define C_FNCS 67 /* FNCS */ +#define C_FNEND 68 /* FNEND */ +#define C_FOR 69 /* FOR */ +#define C_FUNCTION 70 /* FUNCTION */ +#define C_GET 71 /* GET */ +#define C_GO 72 /* GO */ +#define C_GO_SUB 73 /* GO SUB */ +#define C_GO_TO 74 /* GO TO */ +#define C_GOODBYE 75 /* GOODBYE */ +#define C_GOSUB 76 /* GOSUB */ +#define C_GOTO 77 /* GOTO */ +#define C_HELP 78 /* HELP */ +#define C_IF 79 /* IF */ +#define C_IF_END 80 /* IF END */ +#define C_IF_MORE 81 /* IF MORE */ +#define C_IF8THEN 82 /* IF*THEN */ +#define C_IMAGE 83 /* IMAGE */ +#define C_INC 84 /* INC */ +#define C_INPUT 85 /* INPUT */ +#define C_INPUT_LINE 86 /* INPUT LINE */ +#define C_LET 87 /* LET */ +#define C_LINE 88 /* LINE */ +#define C_LINE_INPUT 89 /* LINE INPUT */ +#define C_LIST 90 /* LIST */ +#define C_LISTNH 91 /* LISTNH */ +#define C_LLIST 92 /* LLIST */ +#define C_LOAD 93 /* LOAD */ +#define C_LOCAL 94 /* LOCAL */ +#define C_LOOP 95 /* LOOP */ +#define C_LPRINT 96 /* LPRINT */ +#define C_LPRINTER 97 /* LPRINTER */ +#define C_LPT 98 /* LPT */ +#define C_LSET 99 /* LSET */ +#define C_MAINTAINER 100 /* MAINTAINER */ +#define C_MAINTAINER_CMDS 101 /* MAINTAINER CMDS */ +#define C_MAINTAINER_CMDS_HTML 102 /* MAINTAINER CMDS HTML */ +#define C_MAINTAINER_CMDS_ID 103 /* MAINTAINER CMDS ID */ +#define C_MAINTAINER_CMDS_MANUAL 104 /* MAINTAINER CMDS MANUAL */ +#define C_MAINTAINER_CMDS_SWITCH 105 /* MAINTAINER CMDS SWITCH */ +#define C_MAINTAINER_CMDS_TABLE 106 /* MAINTAINER CMDS TABLE */ +#define C_MAINTAINER_DEBUG 107 /* MAINTAINER DEBUG */ +#define C_MAINTAINER_DEBUG_OFF 108 /* MAINTAINER DEBUG OFF */ +#define C_MAINTAINER_DEBUG_ON 109 /* MAINTAINER DEBUG ON */ +#define C_MAINTAINER_FNCS 110 /* MAINTAINER FNCS */ +#define C_MAINTAINER_FNCS_HTML 111 /* MAINTAINER FNCS HTML */ +#define C_MAINTAINER_FNCS_ID 112 /* MAINTAINER FNCS ID */ +#define C_MAINTAINER_FNCS_MANUAL 113 /* MAINTAINER FNCS MANUAL */ +#define C_MAINTAINER_FNCS_SWITCH 114 /* MAINTAINER FNCS SWITCH */ +#define C_MAINTAINER_FNCS_TABLE 115 /* MAINTAINER FNCS TABLE */ +#define C_MAINTAINER_MANUAL 116 /* MAINTAINER MANUAL */ +#define C_MAINTAINER_STACK 117 /* MAINTAINER STACK */ +#define C_MARGIN 118 /* MARGIN */ +#define C_MAT 119 /* MAT */ +#define C_MAT_GET 120 /* MAT GET */ +#define C_MAT_INPUT 121 /* MAT INPUT */ +#define C_MAT_PRINT 122 /* MAT PRINT */ +#define C_MAT_PUT 123 /* MAT PUT */ +#define C_MAT_READ 124 /* MAT READ */ +#define C_MAT_WRITE 125 /* MAT WRITE */ +#define C_MERGE 126 /* MERGE */ +#define C_MID4 127 /* MID$ */ +#define C_MON 128 /* MON */ +#define C_NAME 129 /* NAME */ +#define C_NEW 130 /* NEW */ +#define C_NEXT 131 /* NEXT */ +#define C_OF 132 /* OF */ +#define C_OLD 133 /* OLD */ +#define C_ON 134 /* ON */ +#define C_ON_ERROR 135 /* ON ERROR */ +#define C_ON_ERROR_GOSUB 136 /* ON ERROR GOSUB */ +#define C_ON_ERROR_GOTO 137 /* ON ERROR GOTO */ +#define C_ON_ERROR_RESUME 138 /* ON ERROR RESUME */ +#define C_ON_ERROR_RESUME_NEXT 139 /* ON ERROR RESUME NEXT */ +#define C_ON_ERROR_RETURN 140 /* ON ERROR RETURN */ +#define C_ON_ERROR_RETURN_NEXT 141 /* ON ERROR RETURN NEXT */ +#define C_ON_TIMER 142 /* ON TIMER */ +#define C_OPEN 143 /* OPEN */ +#define C_OPTION 144 /* OPTION */ +#define C_OPTION_ANGLE 145 /* OPTION ANGLE */ +#define C_OPTION_ANGLE_DEGREES 146 /* OPTION ANGLE DEGREES */ +#define C_OPTION_ANGLE_GRADIANS 147 /* OPTION ANGLE GRADIANS */ +#define C_OPTION_ANGLE_RADIANS 148 /* OPTION ANGLE RADIANS */ +#define C_OPTION_ARITHMETIC 149 /* OPTION ARITHMETIC */ +#define C_OPTION_ARITHMETIC_DECIMAL 150 /* OPTION ARITHMETIC DECIMAL */ +#define C_OPTION_ARITHMETIC_FIXED 151 /* OPTION ARITHMETIC FIXED */ +#define C_OPTION_ARITHMETIC_NATIVE 152 /* OPTION ARITHMETIC NATIVE */ +#define C_OPTION_BASE 153 /* OPTION BASE */ +#define C_OPTION_BUGS 154 /* OPTION BUGS */ +#define C_OPTION_BUGS_BOOLEAN 155 /* OPTION BUGS BOOLEAN */ +#define C_OPTION_BUGS_OFF 156 /* OPTION BUGS OFF */ +#define C_OPTION_BUGS_ON 157 /* OPTION BUGS ON */ +#define C_OPTION_COMPARE 158 /* OPTION COMPARE */ +#define C_OPTION_COMPARE_BINARY 159 /* OPTION COMPARE BINARY */ +#define C_OPTION_COMPARE_DATABASE 160 /* OPTION COMPARE DATABASE */ +#define C_OPTION_COMPARE_TEXT 161 /* OPTION COMPARE TEXT */ +#define C_OPTION_COVERAGE 162 /* OPTION COVERAGE */ +#define C_OPTION_COVERAGE_OFF 163 /* OPTION COVERAGE OFF */ +#define C_OPTION_COVERAGE_ON 164 /* OPTION COVERAGE ON */ +#define C_OPTION_DATE 165 /* OPTION DATE */ +#define C_OPTION_DIGITS 166 /* OPTION DIGITS */ +#define C_OPTION_DISABLE 167 /* OPTION DISABLE */ +#define C_OPTION_DISABLE_COMMAND 168 /* OPTION DISABLE COMMAND */ +#define C_OPTION_DISABLE_FUNCTION 169 /* OPTION DISABLE FUNCTION */ +#define C_OPTION_DISABLE_OPERATOR 170 /* OPTION DISABLE OPERATOR */ +#define C_OPTION_EDIT 171 /* OPTION EDIT */ +#define C_OPTION_ENABLE 172 /* OPTION ENABLE */ +#define C_OPTION_ENABLE_COMMAND 173 /* OPTION ENABLE COMMAND */ +#define C_OPTION_ENABLE_FUNCTION 174 /* OPTION ENABLE FUNCTION */ +#define C_OPTION_ENABLE_OPERATOR 175 /* OPTION ENABLE OPERATOR */ +#define C_OPTION_ERROR 176 /* OPTION ERROR */ +#define C_OPTION_ERROR_GOSUB 177 /* OPTION ERROR GOSUB */ +#define C_OPTION_ERROR_GOTO 178 /* OPTION ERROR GOTO */ +#define C_OPTION_EXPLICIT 179 /* OPTION EXPLICIT */ +#define C_OPTION_EXTENSION 180 /* OPTION EXTENSION */ +#define C_OPTION_FILES 181 /* OPTION FILES */ +#define C_OPTION_IMPLICIT 182 /* OPTION IMPLICIT */ +#define C_OPTION_INDENT 183 /* OPTION INDENT */ +#define C_OPTION_LABELS 184 /* OPTION LABELS */ +#define C_OPTION_LABELS_OFF 185 /* OPTION LABELS OFF */ +#define C_OPTION_LABELS_ON 186 /* OPTION LABELS ON */ +#define C_OPTION_PROMPT 187 /* OPTION PROMPT */ +#define C_OPTION_PUNCT 188 /* OPTION PUNCT */ +#define C_OPTION_PUNCT_AT 189 /* OPTION PUNCT AT */ +#define C_OPTION_PUNCT_BYTE 190 /* OPTION PUNCT BYTE */ +#define C_OPTION_PUNCT_COMMENT 191 /* OPTION PUNCT COMMENT */ +#define C_OPTION_PUNCT_CURRENCY 192 /* OPTION PUNCT CURRENCY */ +#define C_OPTION_PUNCT_DOUBLE 193 /* OPTION PUNCT DOUBLE */ +#define C_OPTION_PUNCT_FILENUM 194 /* OPTION PUNCT FILENUM */ +#define C_OPTION_PUNCT_IMAGE 195 /* OPTION PUNCT IMAGE */ +#define C_OPTION_PUNCT_INPUT 196 /* OPTION PUNCT INPUT */ +#define C_OPTION_PUNCT_INTEGER 197 /* OPTION PUNCT INTEGER */ +#define C_OPTION_PUNCT_LONG 198 /* OPTION PUNCT LONG */ +#define C_OPTION_PUNCT_LPAREN 199 /* OPTION PUNCT LPAREN */ +#define C_OPTION_PUNCT_PRINT 200 /* OPTION PUNCT PRINT */ +#define C_OPTION_PUNCT_QUOTE 201 /* OPTION PUNCT QUOTE */ +#define C_OPTION_PUNCT_RPAREN 202 /* OPTION PUNCT RPAREN */ +#define C_OPTION_PUNCT_SINGLE 203 /* OPTION PUNCT SINGLE */ +#define C_OPTION_PUNCT_STATEMENT 204 /* OPTION PUNCT STATEMENT */ +#define C_OPTION_PUNCT_STRING 205 /* OPTION PUNCT STRING */ +#define C_OPTION_RECLEN 206 /* OPTION RECLEN */ +#define C_OPTION_RENUM 207 /* OPTION RENUM */ +#define C_OPTION_ROUND 208 /* OPTION ROUND */ +#define C_OPTION_ROUND_BANK 209 /* OPTION ROUND BANK */ +#define C_OPTION_ROUND_MATH 210 /* OPTION ROUND MATH */ +#define C_OPTION_ROUND_TRUNCATE 211 /* OPTION ROUND TRUNCATE */ +#define C_OPTION_SCALE 212 /* OPTION SCALE */ +#define C_OPTION_SLEEP 213 /* OPTION SLEEP */ +#define C_OPTION_STDERR 214 /* OPTION STDERR */ +#define C_OPTION_STDIN 215 /* OPTION STDIN */ +#define C_OPTION_STDOUT 216 /* OPTION STDOUT */ +#define C_OPTION_STRICT 217 /* OPTION STRICT */ +#define C_OPTION_STRICT_OFF 218 /* OPTION STRICT OFF */ +#define C_OPTION_STRICT_ON 219 /* OPTION STRICT ON */ +#define C_OPTION_TERMINAL 220 /* OPTION TERMINAL */ +#define C_OPTION_TERMINAL_ADM 221 /* OPTION TERMINAL ADM */ +#define C_OPTION_TERMINAL_ANSI 222 /* OPTION TERMINAL ANSI */ +#define C_OPTION_TERMINAL_NONE 223 /* OPTION TERMINAL NONE */ +#define C_OPTION_TIME 224 /* OPTION TIME */ +#define C_OPTION_TRACE 225 /* OPTION TRACE */ +#define C_OPTION_TRACE_OFF 226 /* OPTION TRACE OFF */ +#define C_OPTION_TRACE_ON 227 /* OPTION TRACE ON */ +#define C_OPTION_USING 228 /* OPTION USING */ +#define C_OPTION_USING_ALL 229 /* OPTION USING ALL */ +#define C_OPTION_USING_COMMA 230 /* OPTION USING COMMA */ +#define C_OPTION_USING_DIGIT 231 /* OPTION USING DIGIT */ +#define C_OPTION_USING_DOLLAR 232 /* OPTION USING DOLLAR */ +#define C_OPTION_USING_EXRAD 233 /* OPTION USING EXRAD */ +#define C_OPTION_USING_FILLER 234 /* OPTION USING FILLER */ +#define C_OPTION_USING_FIRST 235 /* OPTION USING FIRST */ +#define C_OPTION_USING_LENGTH 236 /* OPTION USING LENGTH */ +#define C_OPTION_USING_LITERAL 237 /* OPTION USING LITERAL */ +#define C_OPTION_USING_MINUS 238 /* OPTION USING MINUS */ +#define C_OPTION_USING_PERIOD 239 /* OPTION USING PERIOD */ +#define C_OPTION_USING_PLUS 240 /* OPTION USING PLUS */ +#define C_OPTION_VERSION 241 /* OPTION VERSION */ +#define C_OPTION_ZONE 242 /* OPTION ZONE */ +#define C_PAUSE 243 /* PAUSE */ +#define C_PDEL 244 /* PDEL */ +#define C_POP 245 /* POP */ +#define C_PRINT 246 /* PRINT */ +#define C_PTP 247 /* PTP */ +#define C_PTR 248 /* PTR */ +#define C_PUT 249 /* PUT */ +#define C_QUIT 250 /* QUIT */ +#define C_READ 251 /* READ */ +#define C_RECALL 252 /* RECALL */ +#define C_REM 253 /* REM */ +#define C_RENAME 254 /* RENAME */ +#define C_RENUM 255 /* RENUM */ +#define C_RENUMBER 256 /* RENUMBER */ +#define C_REPEAT 257 /* REPEAT */ +#define C_REPLACE 258 /* REPLACE */ +#define C_RESET 259 /* RESET */ +#define C_RESTORE 260 /* RESTORE */ +#define C_RESUME 261 /* RESUME */ +#define C_RETURN 262 /* RETURN */ +#define C_RSET 263 /* RSET */ +#define C_RUN 264 /* RUN */ +#define C_RUNNH 265 /* RUNNH */ +#define C_SAVE 266 /* SAVE */ +#define C_SCRATCH 267 /* SCRATCH */ +#define C_SELECT 268 /* SELECT */ +#define C_SELECT_CASE 269 /* SELECT CASE */ +#define C_STEP 270 /* STEP */ +#define C_STOP 271 /* STOP */ +#define C_STORE 272 /* STORE */ +#define C_SUB 273 /* SUB */ +#define C_SUB_END 274 /* SUB END */ +#define C_SUB_EXIT 275 /* SUB EXIT */ +#define C_SUBEND 276 /* SUBEND */ +#define C_SUBEXIT 277 /* SUBEXIT */ +#define C_SWAP 278 /* SWAP */ +#define C_SYSTEM 279 /* SYSTEM */ +#define C_TEXT 280 /* TEXT */ +#define C_THEN 281 /* THEN */ +#define C_TIMER 282 /* TIMER */ +#define C_TIMER_OFF 283 /* TIMER OFF */ +#define C_TIMER_ON 284 /* TIMER ON */ +#define C_TIMER_STOP 285 /* TIMER STOP */ +#define C_TLOAD 286 /* TLOAD */ +#define C_TO 287 /* TO */ +#define C_TRACE 288 /* TRACE */ +#define C_TRACE_OFF 289 /* TRACE OFF */ +#define C_TRACE_ON 290 /* TRACE ON */ +#define C_TSAVE 291 /* TSAVE */ +#define C_TTY 292 /* TTY */ +#define C_TTY_IN 293 /* TTY IN */ +#define C_TTY_OUT 294 /* TTY OUT */ +#define C_UNTIL 295 /* UNTIL */ +#define C_USE 296 /* USE */ +#define C_VARS 297 /* VARS */ +#define C_WEND 298 /* WEND */ +#define C_WHILE 299 /* WHILE */ +#define C_WRITE 300 /* WRITE */ + + +/*------------------------------------------------------------- + FUNCTIONS (FunctionID) +-------------------------------------------------------------*/ + +/* FUNCTIONS */ +#define F_ABS_X_N 1 /* N = ABS( X ) */ +#define F_ACOS_X_N 2 /* N = ACOS( X ) */ +#define F_ACS_X_N 3 /* N = ACS( X ) */ +#define F_ACSD_X_N 4 /* N = ACSD( X ) */ +#define F_ACSG_X_N 5 /* N = ACSG( X ) */ +#define F_ANGLE_X_Y_N 6 /* N = ANGLE( X, Y ) */ +#define F_ARCCOS_X_N 7 /* N = ARCCOS( X ) */ +#define F_ARCSIN_X_N 8 /* N = ARCSIN( X ) */ +#define F_ARCTAN_X_N 9 /* N = ARCTAN( X ) */ +#define F_ARGC_N 10 /* N = ARGC */ +#define F_ARGT4_X_S 11 /* S$ = ARGT$( X ) */ +#define F_ARGV_X_N 12 /* N = ARGV( X ) */ +#define F_ARGV4_X_S 13 /* S$ = ARGV$( X ) */ +#define F_ASC_A_N 14 /* N = ASC( A$ ) */ +#define F_ASC_A_X_N 15 /* N = ASC( A$, X ) */ +#define F_ASCII_A_N 16 /* N = ASCII( A$ ) */ +#define F_ASIN_X_N 17 /* N = ASIN( X ) */ +#define F_ASN_X_N 18 /* N = ASN( X ) */ +#define F_ASND_X_N 19 /* N = ASND( X ) */ +#define F_ASNG_X_N 20 /* N = ASNG( X ) */ +#define F_ATAN_X_N 21 /* N = ATAN( X ) */ +#define F_ATN_X_N 22 /* N = ATN( X ) */ +#define F_ATND_X_N 23 /* N = ATND( X ) */ +#define F_ATNG_X_N 24 /* N = ATNG( X ) */ +#define F_BASE_N 25 /* N = BASE */ +#define F_BIN4_X_S 26 /* S$ = BIN$( X ) */ +#define F_BIN4_X_Y_S 27 /* S$ = BIN$( X, Y ) */ +#define F_CATALOG_N 28 /* N = CATALOG */ +#define F_CATALOG_A_N 29 /* N = CATALOG( A$ ) */ +#define F_CCUR_X_N 30 /* N = CCUR( X ) */ +#define F_CDBL_X_N 31 /* N = CDBL( X ) */ +#define F_CEIL_X_N 32 /* N = CEIL( X ) */ +#define F_CHAR_X_Y_S 33 /* S$ = CHAR( X, Y ) */ +#define F_CHAR4_X_S 34 /* S$ = CHAR$( X ) */ +#define F_CHDIR_A_N 35 /* N = CHDIR( A$ ) */ +#define F_CHR_X_S 36 /* S$ = CHR( X ) */ +#define F_CHR4_X_S 37 /* S$ = CHR$( X ) */ +#define F_CIN_X_N 38 /* N = CIN( X ) */ +#define F_CINT_X_N 39 /* N = CINT( X ) */ +#define F_CLG_X_N 40 /* N = CLG( X ) */ +#define F_CLK_X_N 41 /* N = CLK( X ) */ +#define F_CLK_X_S 42 /* S$ = CLK( X ) */ +#define F_CLK4_S 43 /* S$ = CLK$ */ +#define F_CLNG_X_N 44 /* N = CLNG( X ) */ +#define F_CLOG_X_N 45 /* N = CLOG( X ) */ +#define F_CLOSE_N 46 /* N = CLOSE */ +#define F_CLOSE_X_N 47 /* N = CLOSE( X ) */ +#define F_CLS_N 48 /* N = CLS */ +#define F_CNTRL_X_Y_N 49 /* N = CNTRL( X, Y ) */ +#define F_CODE_A_N 50 /* N = CODE( A$ ) */ +#define F_COLOR_X_Y_N 51 /* N = COLOR( X, Y ) */ +#define F_COMMAND4_S 52 /* S$ = COMMAND$ */ +#define F_COMMAND4_X_S 53 /* S$ = COMMAND$( X ) */ +#define F_COS_X_N 54 /* N = COS( X ) */ +#define F_COSD_X_N 55 /* N = COSD( X ) */ +#define F_COSG_X_N 56 /* N = COSG( X ) */ +#define F_COSH_X_N 57 /* N = COSH( X ) */ +#define F_COT_X_N 58 /* N = COT( X ) */ +#define F_COUNT_N 59 /* N = COUNT */ +#define F_CSC_X_N 60 /* N = CSC( X ) */ +#define F_CSH_X_N 61 /* N = CSH( X ) */ +#define F_CSNG_X_N 62 /* N = CSNG( X ) */ +#define F_CUR_X_Y_S 63 /* S$ = CUR( X, Y ) */ +#define F_CVC_A_N 64 /* N = CVC( A$ ) */ +#define F_CVD_A_N 65 /* N = CVD( A$ ) */ +#define F_CVI_A_N 66 /* N = CVI( A$ ) */ +#define F_CVL_A_N 67 /* N = CVL( A$ ) */ +#define F_CVS_A_N 68 /* N = CVS( A$ ) */ +#define F_DAT4_S 69 /* S$ = DAT$ */ +#define F_DATE_N 70 /* N = DATE */ +#define F_DATE4_S 71 /* S$ = DATE$ */ +#define F_DATE4_X_S 72 /* S$ = DATE$( X ) */ +#define F_DEG_N 73 /* N = DEG */ +#define F_DEG_X_N 74 /* N = DEG( X ) */ +#define F_DEGREE_N 75 /* N = DEGREE */ +#define F_DEGREE_X_N 76 /* N = DEGREE( X ) */ +#define F_DET_N 77 /* N = DET */ +#define F_DIGITS_X_N 78 /* N = DIGITS( X ) */ +#define F_DIGITS_X_Y_N 79 /* N = DIGITS( X, Y ) */ +#define F_DIM_N 80 /* N = DIM( ... ) */ +#define F_DPEEK_X_N 81 /* N = DPEEK( X ) */ +#define F_DPOKE_X_Y_N 82 /* N = DPOKE( X, Y ) */ +#define F_EDIT4_A_X_S 83 /* S$ = EDIT$( A$, X ) */ +#define F_ENVIRON_A_N 84 /* N = ENVIRON( A$ ) */ +#define F_ENVIRON4_A_S 85 /* S$ = ENVIRON$( A$ ) */ +#define F_EOF_X_N 86 /* N = EOF( X ) */ +#define F_EPS_X_N 87 /* N = EPS( X ) */ +#define F_ERL_N 88 /* N = ERL */ +#define F_ERR_N 89 /* N = ERR */ +#define F_ERR4_S 90 /* S$ = ERR$ */ +#define F_ERRL_N 91 /* N = ERRL */ +#define F_ERRN_N 92 /* N = ERRN */ +#define F_ERROR_X_N 93 /* N = ERROR( X ) */ +#define F_ERROR_X_A_N 94 /* N = ERROR( X, A$ ) */ +#define F_ERROR4_S 95 /* S$ = ERROR$ */ +#define F_EXAM_X_N 96 /* N = EXAM( X ) */ +#define F_EXEC_A_N 97 /* N = EXEC( A$ ) */ +#define F_EXF_N 98 /* N = EXF( ... ) */ +#define F_EXP_X_N 99 /* N = EXP( X ) */ +#define F_FALSE_N 100 /* N = FALSE */ +#define F_FETCH_X_N 101 /* N = FETCH( X ) */ +#define F_FILEATTR_X_Y_N 102 /* N = FILEATTR( X, Y ) */ +#define F_FILES_N 103 /* N = FILES */ +#define F_FILES_A_N 104 /* N = FILES( A$ ) */ +#define F_FILL_X_Y_N 105 /* N = FILL( X, Y ) */ +#define F_FIX_X_N 106 /* N = FIX( X ) */ +#define F_FLOAT_X_N 107 /* N = FLOAT( X ) */ +#define F_FLOW_N 108 /* N = FLOW */ +#define F_FP_X_N 109 /* N = FP( X ) */ +#define F_FRAC_X_N 110 /* N = FRAC( X ) */ +#define F_FRE_N 111 /* N = FRE */ +#define F_FRE_A_N 112 /* N = FRE( A$ ) */ +#define F_FRE_X_N 113 /* N = FRE( X ) */ +#define F_FREE_N 114 /* N = FREE */ +#define F_FREE_X_N 115 /* N = FREE( X ) */ +#define F_FREE_A_N 116 /* N = FREE( A$ ) */ +#define F_FREEFILE_N 117 /* N = FREEFILE */ +#define F_GET_X_N 118 /* N = GET( X ) */ +#define F_GET_X_Y_N 119 /* N = GET( X, Y ) */ +#define F_GRAD_N 120 /* N = GRAD */ +#define F_GRADIAN_N 121 /* N = GRADIAN */ +#define F_HCS_X_N 122 /* N = HCS( X ) */ +#define F_HEX_A_N 123 /* N = HEX( A$ ) */ +#define F_HEX4_X_S 124 /* S$ = HEX$( X ) */ +#define F_HEX4_X_Y_S 125 /* S$ = HEX$( X, Y ) */ +#define F_HOME_N 126 /* N = HOME */ +#define F_HSN_X_N 127 /* N = HSN( X ) */ +#define F_HTN_X_N 128 /* N = HTN( X ) */ +#define F_INCH4_S 129 /* S$ = INCH$ */ +#define F_INDEX_A_B_N 130 /* N = INDEX( A$, B$ ) */ +#define F_INITIALIZE_N 131 /* N = INITIALIZE */ +#define F_INKEY4_S 132 /* S$ = INKEY$ */ +#define F_INP_X_N 133 /* N = INP( X ) */ +#define F_INPUT4_X_S 134 /* S$ = INPUT$( X ) */ +#define F_INPUT4_X_Y_S 135 /* S$ = INPUT$( X, Y ) */ +#define F_INSTR_A_B_N 136 /* N = INSTR( A$, B$ ) */ +#define F_INSTR_A_B_X_N 137 /* N = INSTR( A$, B$, X ) */ +#define F_INSTR_X_A_B_N 138 /* N = INSTR( X, A$, B$ ) */ +#define F_INT_X_N 139 /* N = INT( X ) */ +#define F_INT5_X_N 140 /* N = INT%( X ) */ +#define F_IP_X_N 141 /* N = IP( X ) */ +#define F_KEY_S 142 /* S$ = KEY */ +#define F_KEY4_S 143 /* S$ = KEY$ */ +#define F_KILL_A_N 144 /* N = KILL( A$ ) */ +#define F_LBOUND_N 145 /* N = LBOUND( ... ) */ +#define F_LCASE4_A_S 146 /* S$ = LCASE$( A$ ) */ +#define F_LEFT_A_X_S 147 /* S$ = LEFT( A$, X ) */ +#define F_LEFT4_A_X_S 148 /* S$ = LEFT$( A$, X ) */ +#define F_LEN_A_N 149 /* N = LEN( A$ ) */ +#define F_LGT_X_N 150 /* N = LGT( X ) */ +#define F_LIN_X_S 151 /* S$ = LIN( X ) */ +#define F_LN_X_N 152 /* N = LN( X ) */ +#define F_LNO_X_N 153 /* N = LNO( X ) */ +#define F_LOC_X_N 154 /* N = LOC( X ) */ +#define F_LOCATE_X_Y_N 155 /* N = LOCATE( X, Y ) */ +#define F_LOCK_X_N 156 /* N = LOCK( X ) */ +#define F_LOF_X_N 157 /* N = LOF( X ) */ +#define F_LOG_X_N 158 /* N = LOG( X ) */ +#define F_LOG10_X_N 159 /* N = LOG10( X ) */ +#define F_LOG2_X_N 160 /* N = LOG2( X ) */ +#define F_LOGE_X_N 161 /* N = LOGE( X ) */ +#define F_LOWER4_A_S 162 /* S$ = LOWER$( A$ ) */ +#define F_LPOS_N 163 /* N = LPOS */ +#define F_LTRIM4_A_S 164 /* S$ = LTRIM$( A$ ) */ +#define F_LTW_X_N 165 /* N = LTW( X ) */ +#define F_LWIDTH_X_N 166 /* N = LWIDTH( X ) */ +#define F_MATCH_A_B_X_N 167 /* N = MATCH( A$, B$, X ) */ +#define F_MAX_A_B_S 168 /* S$ = MAX( A$, B$ ) */ +#define F_MAX_X_Y_N 169 /* N = MAX( X, Y ) */ +#define F_MAXBYT_N 170 /* N = MAXBYT */ +#define F_MAXCUR_N 171 /* N = MAXCUR */ +#define F_MAXDBL_N 172 /* N = MAXDBL */ +#define F_MAXDEV_N 173 /* N = MAXDEV */ +#define F_MAXINT_N 174 /* N = MAXINT */ +#define F_MAXLEN_N 175 /* N = MAXLEN */ +#define F_MAXLEN_A_N 176 /* N = MAXLEN( A$ ) */ +#define F_MAXLNG_N 177 /* N = MAXLNG */ +#define F_MAXLVL_N 178 /* N = MAXLVL */ +#define F_MAXNUM_N 179 /* N = MAXNUM */ +#define F_MAXSNG_N 180 /* N = MAXSNG */ +#define F_MEM_N 181 /* N = MEM */ +#define F_MID_A_X_S 182 /* S$ = MID( A$, X ) */ +#define F_MID_A_X_Y_S 183 /* S$ = MID( A$, X, Y ) */ +#define F_MID4_A_X_S 184 /* S$ = MID$( A$, X ) */ +#define F_MID4_A_X_Y_S 185 /* S$ = MID$( A$, X, Y ) */ +#define F_MIN_X_Y_N 186 /* N = MIN( X, Y ) */ +#define F_MIN_A_B_S 187 /* S$ = MIN( A$, B$ ) */ +#define F_MINBYT_N 188 /* N = MINBYT */ +#define F_MINCUR_N 189 /* N = MINCUR */ +#define F_MINDBL_N 190 /* N = MINDBL */ +#define F_MINDEV_N 191 /* N = MINDEV */ +#define F_MININT_N 192 /* N = MININT */ +#define F_MINLNG_N 193 /* N = MINLNG */ +#define F_MINNUM_N 194 /* N = MINNUM */ +#define F_MINSNG_N 195 /* N = MINSNG */ +#define F_MKC4_X_S 196 /* S$ = MKC$( X ) */ +#define F_MKD4_X_S 197 /* S$ = MKD$( X ) */ +#define F_MKDIR_A_N 198 /* N = MKDIR( A$ ) */ +#define F_MKI4_X_S 199 /* S$ = MKI$( X ) */ +#define F_MKL4_X_S 200 /* S$ = MKL$( X ) */ +#define F_MKS4_X_S 201 /* S$ = MKS$( X ) */ +#define F_MOD_X_Y_N 202 /* N = MOD( X, Y ) */ +#define F_NAME_A_B_N 203 /* N = NAME( A$, B$ ) */ +#define F_NAME_N 204 /* N = NAME( ... ) */ +#define F_NOFLOW_N 205 /* N = NOFLOW */ +#define F_NOTRACE_N 206 /* N = NOTRACE */ +#define F_NULL_X_N 207 /* N = NULL( X ) */ +#define F_NUM_N 208 /* N = NUM */ +#define F_NUM_A_N 209 /* N = NUM( A$ ) */ +#define F_NUM4_X_S 210 /* S$ = NUM$( X ) */ +#define F_OCT4_X_S 211 /* S$ = OCT$( X ) */ +#define F_OCT4_X_Y_S 212 /* S$ = OCT$( X, Y ) */ +#define F_OPEN_A_X_B_N 213 /* N = OPEN( A$, X, B$ ) */ +#define F_OPEN_A_X_B_Y_N 214 /* N = OPEN( A$, X, B$, Y ) */ +#define F_ORD_A_N 215 /* N = ORD( A$ ) */ +#define F_OUT_X_Y_N 216 /* N = OUT( X, Y ) */ +#define F_PAD_X_N 217 /* N = PAD( X ) */ +#define F_PAUSE_X_N 218 /* N = PAUSE( X ) */ +#define F_PDL_X_N 219 /* N = PDL( X ) */ +#define F_PEEK_X_N 220 /* N = PEEK( X ) */ +#define F_PI_N 221 /* N = PI */ +#define F_PI_X_N 222 /* N = PI( X ) */ +#define F_PIN_X_N 223 /* N = PIN( X ) */ +#define F_POKE_X_Y_N 224 /* N = POKE( X, Y ) */ +#define F_POS_N 225 /* N = POS */ +#define F_POS_X_N 226 /* N = POS( X ) */ +#define F_POS_A_B_N 227 /* N = POS( A$, B$ ) */ +#define F_POS_A_B_X_N 228 /* N = POS( A$, B$, X ) */ +#define F_PRECISION_X_N 229 /* N = PRECISION( X ) */ +#define F_PTR_N 230 /* N = PTR( ... ) */ +#define F_PUT_X_N 231 /* N = PUT( X ) */ +#define F_PUT_X_Y_N 232 /* N = PUT( X, Y ) */ +#define F_RAD_N 233 /* N = RAD */ +#define F_RAD_X_N 234 /* N = RAD( X ) */ +#define F_RADIAN_N 235 /* N = RADIAN */ +#define F_RAN_N 236 /* N = RAN */ +#define F_RAN_X_N 237 /* N = RAN( X ) */ +#define F_RANDOM_N 238 /* N = RANDOM */ +#define F_RANDOM_X_N 239 /* N = RANDOM( X ) */ +#define F_RANDOMIZE_N 240 /* N = RANDOMIZE */ +#define F_RANDOMIZE_X_N 241 /* N = RANDOMIZE( X ) */ +#define F_REMAINDER_X_Y_N 242 /* N = REMAINDER( X, Y ) */ +#define F_RENAME_A_B_N 243 /* N = RENAME( A$, B$ ) */ +#define F_REPEAT4_X_A_S 244 /* S$ = REPEAT$( X, A$ ) */ +#define F_REPEAT4_X_Y_S 245 /* S$ = REPEAT$( X, Y ) */ +#define F_RESET_N 246 /* N = RESET */ +#define F_RESIDUE_N 247 /* N = RESIDUE */ +#define F_RIGHT_A_X_S 248 /* S$ = RIGHT( A$, X ) */ +#define F_RIGHT4_A_X_S 249 /* S$ = RIGHT$( A$, X ) */ +#define F_RMDIR_A_N 250 /* N = RMDIR( A$ ) */ +#define F_RND_N 251 /* N = RND */ +#define F_RND_X_N 252 /* N = RND( X ) */ +#define F_ROUND_X_Y_N 253 /* N = ROUND( X, Y ) */ +#define F_RTRIM4_A_S 254 /* S$ = RTRIM$( A$ ) */ +#define F_SCALE_X_N 255 /* N = SCALE( X ) */ +#define F_SEC_X_N 256 /* N = SEC( X ) */ +#define F_SEEK_X_N 257 /* N = SEEK( X ) */ +#define F_SEEK_X_Y_N 258 /* N = SEEK( X, Y ) */ +#define F_SEG_X_N 259 /* N = SEG( X ) */ +#define F_SEG_A_X_Y_S 260 /* S$ = SEG( A$, X, Y ) */ +#define F_SEG4_A_X_Y_S 261 /* S$ = SEG$( A$, X, Y ) */ +#define F_SGN_X_N 262 /* N = SGN( X ) */ +#define F_SHELL_A_N 263 /* N = SHELL( A$ ) */ +#define F_SIN_X_N 264 /* N = SIN( X ) */ +#define F_SIND_X_N 265 /* N = SIND( X ) */ +#define F_SING_X_N 266 /* N = SING( X ) */ +#define F_SINH_X_N 267 /* N = SINH( X ) */ +#define F_SIZE_A_N 268 /* N = SIZE( A$ ) */ +#define F_SIZE_N 269 /* N = SIZE( ... ) */ +#define F_SLEEP_X_N 270 /* N = SLEEP( X ) */ +#define F_SNH_X_N 271 /* N = SNH( X ) */ +#define F_SPA_X_S 272 /* S$ = SPA( X ) */ +#define F_SPACE_X_S 273 /* S$ = SPACE( X ) */ +#define F_SPACE4_X_S 274 /* S$ = SPACE$( X ) */ +#define F_SPC_X_S 275 /* S$ = SPC( X ) */ +#define F_SQR_X_N 276 /* N = SQR( X ) */ +#define F_SQRT_X_N 277 /* N = SQRT( X ) */ +#define F_STR_X_Y_S 278 /* S$ = STR( X, Y ) */ +#define F_STR4_X_S 279 /* S$ = STR$( X ) */ +#define F_STRING_X_Y_S 280 /* S$ = STRING( X, Y ) */ +#define F_STRING4_X_A_S 281 /* S$ = STRING$( X, A$ ) */ +#define F_STRING4_X_Y_S 282 /* S$ = STRING$( X, Y ) */ +#define F_STRIP4_A_S 283 /* S$ = STRIP$( A$ ) */ +#define F_STUFF_X_Y_N 284 /* N = STUFF( X, Y ) */ +#define F_TAB_X_S 285 /* S$ = TAB( X ) */ +#define F_TAN_X_N 286 /* N = TAN( X ) */ +#define F_TAND_X_N 287 /* N = TAND( X ) */ +#define F_TANG_X_N 288 /* N = TANG( X ) */ +#define F_TANH_X_N 289 /* N = TANH( X ) */ +#define F_TI_N 290 /* N = TI */ +#define F_TI4_S 291 /* S$ = TI$ */ +#define F_TIM_N 292 /* N = TIM */ +#define F_TIM_X_N 293 /* N = TIM( X ) */ +#define F_TIME_N 294 /* N = TIME */ +#define F_TIME_X_N 295 /* N = TIME( X ) */ +#define F_TIME4_S 296 /* S$ = TIME$ */ +#define F_TIME4_X_S 297 /* S$ = TIME$( X ) */ +#define F_TIMER_N 298 /* N = TIMER */ +#define F_TOP_N 299 /* N = TOP */ +#define F_TRACE_N 300 /* N = TRACE */ +#define F_TRACE_X_N 301 /* N = TRACE( X ) */ +#define F_TRIM4_A_S 302 /* S$ = TRIM$( A$ ) */ +#define F_TROFF_N 303 /* N = TROFF */ +#define F_TRON_N 304 /* N = TRON */ +#define F_TRUE_N 305 /* N = TRUE */ +#define F_TRUNCATE_X_Y_N 306 /* N = TRUNCATE( X, Y ) */ +#define F_UBOUND_N 307 /* N = UBOUND( ... ) */ +#define F_UCASE4_A_S 308 /* S$ = UCASE$( A$ ) */ +#define F_UNLOCK_X_N 309 /* N = UNLOCK( X ) */ +#define F_UNSAVE_A_N 310 /* N = UNSAVE( A$ ) */ +#define F_UPPER4_A_S 311 /* S$ = UPPER$( A$ ) */ +#define F_USR_N 312 /* N = USR( ... ) */ +#define F_USR0_N 313 /* N = USR0( ... ) */ +#define F_USR1_N 314 /* N = USR1( ... ) */ +#define F_USR2_N 315 /* N = USR2( ... ) */ +#define F_USR3_N 316 /* N = USR3( ... ) */ +#define F_USR4_N 317 /* N = USR4( ... ) */ +#define F_USR5_N 318 /* N = USR5( ... ) */ +#define F_USR6_N 319 /* N = USR6( ... ) */ +#define F_USR7_N 320 /* N = USR7( ... ) */ +#define F_USR8_N 321 /* N = USR8( ... ) */ +#define F_USR9_N 322 /* N = USR9( ... ) */ +#define F_UUF_N 323 /* N = UUF( ... ) */ +#define F_VAL_A_N 324 /* N = VAL( A$ ) */ +#define F_VARPTR_N 325 /* N = VARPTR( ... ) */ +#define F_VTAB_X_N 326 /* N = VTAB( X ) */ +#define F_WAIT_X_N 327 /* N = WAIT( X ) */ +#define F_WAIT_X_Y_N 328 /* N = WAIT( X, Y ) */ +#define F_WAIT_X_Y_Z_N 329 /* N = WAIT( X, Y, Z ) */ +#define F_WIDTH_X_N 330 /* N = WIDTH( X ) */ +#define F_WIDTH_X_Y_N 331 /* N = WIDTH( X, Y ) */ +#define F_ZONE_X_N 332 /* N = ZONE( X ) */ +#define F_ZONE_X_Y_N 333 /* N = ZONE( X, Y ) */ + +/*------------------------------------------------------------- + WARNINGS +-------------------------------------------------------------*/ +#define WARN_CLEAR bwx_Error( 0, NULL ) +#define WARN_NEXT_WITHOUT_FOR bwx_Error( 1, NULL ) +#define WARN_SYNTAX_ERROR bwx_Error( 2, NULL ) +#define WARN_RETURN_WITHOUT_GOSUB bwx_Error( 3, NULL ) +#define WARN_OUT_OF_DATA bwx_Error( 4, NULL ) +#define WARN_ILLEGAL_FUNCTION_CALL bwx_Error( 5, NULL ) +#define WARN_OVERFLOW bwx_Error( 6, NULL ) +#define WARN_OUT_OF_MEMORY bwx_Error( 7, NULL ) +#define WARN_UNDEFINED_LINE bwx_Error( 8, NULL ) +#define WARN_SUBSCRIPT_OUT_OF_RANGE bwx_Error( 9, NULL ) +#define WARN_REDIMENSION_ARRAY bwx_Error( 10, NULL ) +#define WARN_DIVISION_BY_ZERO bwx_Error( 11, NULL ) +#define WARN_ILLEGAL_DIRECT bwx_Error( 12, NULL ) +#define WARN_TYPE_MISMATCH bwx_Error( 13, NULL ) +#define WARN_OUT_OF_STRING_SPACE bwx_Error( 14, NULL ) +#define WARN_STRING_TOO_LONG bwx_Error( 15, NULL ) +#define WARN_STRING_FORMULA_TOO_COMPLEX bwx_Error( 16, NULL ) +#define WARN_CANT_CONTINUE bwx_Error( 17, NULL ) +#define WARN_UNDEFINED_USER_FUNCTION bwx_Error( 18, NULL ) +#define WARN_NO_RESUME bwx_Error( 19, NULL ) +#define WARN_RESUME_WITHOUT_ERROR bwx_Error( 20, NULL ) +#define WARN_UNPRINTABLE_ERROR bwx_Error( 21, NULL ) +#define WARN_MISSING_OPERAND bwx_Error( 22, NULL ) +#define WARN_LINE_BUFFER_OVERFLOW bwx_Error( 23, NULL ) +#define WARN_FOR_WITHOUT_NEXT bwx_Error( 26, NULL ) +#define WARN_BAD_DATA bwx_Error( 27, NULL ) /* NEW in bwBASIC 3.20 */ +#define WARN_UNASSIGNED_28 bwx_Error( 28, NULL ) +#define WARN_WHILE_WITHOUT_WEND bwx_Error( 29, NULL ) +#define WARN_WEND_WITHOUT_WHILE bwx_Error( 30, NULL ) +#define WARN_EXIT_FUNCTION_WITHOUT_FUNCTION bwx_Error( 31, NULL ) +#define WARN_END_FUNCTION_WITHOUT_FUNCTION bwx_Error( 32, NULL ) +#define WARN_EXIT_SUB_WITHOUT_SUB bwx_Error( 33, NULL ) +#define WARN_END_SUB_WITHOUT_SUB bwx_Error( 34, NULL ) +#define WARN_EXIT_FOR_WITHOUT_FOR bwx_Error( 35, NULL ) +#define WARN_FIELD_OVERFLOW bwx_Error( 50, NULL ) +#define WARN_INTERNAL_ERROR bwx_Error( 51, NULL ) +#define WARN_BAD_FILE_NUMBER bwx_Error( 52, NULL ) +#define WARN_FILE_NOT_FOUND bwx_Error( 53, NULL ) +#define WARN_BAD_FILE_MODE bwx_Error( 54, NULL ) +#define WARN_FILE_ALREADY_OPEN bwx_Error( 55, NULL ) +#define WARN_UNASSIGNED_56 bwx_Error( 56, NULL ) +#define WARN_DISK_IO_ERROR bwx_Error( 57, NULL ) +#define WARN_FILE_ALREADY_EXISTS bwx_Error( 58, NULL ) +#define WARN_UNASSIGNED_59 bwx_Error( 59, NULL ) +#define WARN_UNASSIGNED_60 bwx_Error( 60, NULL ) +#define WARN_DISK_FULL bwx_Error( 61, NULL ) +#define WARN_INPUT_PAST_END bwx_Error( 62, NULL ) +#define WARN_BAD_RECORD_NUMBER bwx_Error( 63, NULL ) +#define WARN_BAD_FILE_NAME bwx_Error( 64, NULL ) +#define WARN_UNASSIGNED_65 bwx_Error( 65, NULL ) +#define WARN_DIRECT_STATEMENT_IN_FILE bwx_Error( 66, NULL ) +#define WARN_TOO_MANY_FILES bwx_Error( 67, NULL ) +#define WARN_UNASSIGNED_68 bwx_Error( 68, NULL ) +#define WARN_VARIABLE_NOT_DECLARED bwx_Error( 70, NULL ) +#define WARN_ADVANCED_FEATURE bwx_Error( 73, NULL ) + + + + +/* EOF */ |