home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-10-29 | 70.4 KB | 1,791 lines |
- Newsgroups: comp.sources.misc
- From: tcamp@delphi.com (Ted A. Campbell)
- Subject: v40i054: bwbasic - Bywater BASIC interpreter version 2.10, Part03/15
- Message-ID: <1993Oct29.162437.3443@sparky.sterling.com>
- X-Md4-Signature: d1bcca0825281c0c3b34264de43b9dab
- Sender: kent@sparky.sterling.com (Kent Landfield)
- Organization: Sterling Software
- Date: Fri, 29 Oct 1993 16:24:37 GMT
- Approved: kent@sparky.sterling.com
-
- Submitted-by: tcamp@delphi.com (Ted A. Campbell)
- Posting-number: Volume 40, Issue 54
- Archive-name: bwbasic/part03
- Environment: UNIX, DOS
- Supersedes: bwbasic: Volume 33, Issue 37-47
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: bwbasic-2.10/bwb_tbl.c bwbasic-2.10/bwbasic.h
- # Wrapped by kent@sparky on Thu Oct 21 10:47:48 1993
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 3 (of 15)."'
- if test -f 'bwbasic-2.10/bwb_tbl.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'bwbasic-2.10/bwb_tbl.c'\"
- else
- echo shar: Extracting \"'bwbasic-2.10/bwb_tbl.c'\" \(13470 characters\)
- sed "s/^X//" >'bwbasic-2.10/bwb_tbl.c' <<'END_OF_FILE'
- X/***************************************************************
- X
- X bwb_tbl.c Command, Function, Operator,
- X and Error-Message Tables
- X for Bywater BASIC Interpreter
- X
- X Copyright (c) 1993, Ted A. Campbell
- X Bywater Software
- X
- X email: tcamp@delphi.com
- X
- X Copyright and Permissions Information:
- X
- X All U.S. and international rights are claimed by the author,
- X Ted A. Campbell.
- X
- X This software is released under the terms of the GNU General
- X Public License (GPL), which is distributed with this software
- X in the file "COPYING". The GPL specifies the terms under
- X which users may copy and use the software in this distribution.
- X
- X A separate license is available for commercial distribution,
- X for information on which you should contact the author.
- X
- X***************************************************************/
- X
- X#include <stdio.h>
- X
- X#include "bwbasic.h"
- X#include "bwb_mes.h"
- X
- Xint err_line = 0; /* line in which error occurred */
- Xint err_number = 0; /* number of last error */
- X
- X/***************************************************************
- X
- X Command Table for Bywater BASIC
- X
- X***************************************************************/
- X
- Xstruct bwb_command bwb_cmdtable[ COMMANDS ] =
- X {
- X
- X#if PERMANENT_DEBUG
- X { CMD_VARS, bwb_vars },
- X { CMD_CMDS, bwb_cmds },
- X { CMD_FNCS, bwb_fncs },
- X#endif
- X
- X#if UNIX_CMDS
- X { CMD_CHDIR, bwb_chdir },
- X { CMD_MKDIR, bwb_mkdir },
- X { CMD_RMDIR, bwb_rmdir },
- X { CMD_KILL, bwb_kill },
- X { CMD_ENVIRON, bwb_environ },
- X#endif
- X
- X#if INTERACTIVE
- X { CMD_LIST, bwb_list },
- X { CMD_LOAD, bwb_load },
- X { CMD_RUN, bwb_run },
- X { CMD_SAVE, bwb_save },
- X { CMD_DELETE, bwb_delete },
- X { CMD_NEW, bwb_new },
- X { CMD_QUIT, bwb_system },
- X { CMD_SYSTEM, bwb_system },
- X#endif
- X
- X#if MS_CMDS
- X { CMD_DEFDBL, bwb_ddbl },
- X { CMD_DEFINT, bwb_dint },
- X { CMD_DEFSNG, bwb_dsng },
- X { CMD_DEFSTR, bwb_dstr },
- X#if IMP_CMDCLS
- X { CMD_CLS, bwb_cls },
- X#endif
- X#if IMP_CMDCOLOR
- X { CMD_COLOR, bwb_color },
- X#endif
- X#if IMP_CMDLOC
- X { CMD_LOCATE, bwb_locate },
- X#endif
- X#endif
- X
- X#if STRUCT_CMDS
- X { CMD_CALL, bwb_call },
- X { CMD_SUB, bwb_sub },
- X { CMD_FUNCTION, bwb_function },
- X { CMD_LABEL, bwb_null },
- X { CMD_ELSE, bwb_else },
- X { CMD_ELSEIF, bwb_elseif },
- X { CMD_SELECT, bwb_select },
- X { CMD_CASE, bwb_case },
- X { CMD_LOOP, bwb_loop },
- X { CMD_EXIT, bwb_exit },
- X#endif
- X
- X#if COMMON_CMDS
- X { CMD_MERGE, bwb_merge },
- X { CMD_CHAIN, bwb_chain },
- X { CMD_COMMON, bwb_common },
- X { CMD_ERROR, bwb_lerror },
- X { CMD_WIDTH, bwb_width },
- X { CMD_TRON, bwb_tron },
- X { CMD_TROFF, bwb_troff },
- X { CMD_FILES, bwb_files },
- X { CMD_EDIT, bwb_edit },
- X { CMD_ERASE, bwb_erase },
- X { CMD_SWAP, bwb_swap },
- X { CMD_NAME, bwb_name },
- X { CMD_CLEAR, bwb_clear },
- X { CMD_WHILE, bwb_while },
- X { CMD_WEND, bwb_wend },
- X { CMD_WRITE, bwb_write },
- X { CMD_OPEN, bwb_open },
- X { CMD_CLOSE, bwb_close },
- X { CMD_GET, bwb_get },
- X { CMD_PUT, bwb_put },
- X { CMD_LSET, bwb_lset },
- X { CMD_RSET, bwb_rset },
- X { CMD_FIELD, bwb_field },
- X { CMD_LINE, bwb_line },
- X#endif
- X
- X /* The remainder are the core functions defined for ANSI Minimal BASIC */
- X
- X { CMD_DATA, bwb_data },
- X { CMD_DEF, bwb_def },
- X { CMD_DIM, bwb_dim },
- X { CMD_END, bwb_xend },
- X { CMD_FOR, bwb_for },
- X { CMD_DO, bwb_do }, /* not really core but needed in two different places */
- X { CMD_GO, bwb_go },
- X { CMD_GOSUB, bwb_gosub },
- X { CMD_GOTO, bwb_goto },
- X { CMD_IF, bwb_if },
- X { CMD_INPUT, bwb_input },
- X { CMD_LET, bwb_let },
- X { CMD_NEXT, bwb_next },
- X { CMD_ON, bwb_on },
- X { CMD_OPTION, bwb_option },
- X { CMD_PRINT, bwb_print },
- X { CMD_RANDOMIZE, bwb_randomize },
- X { CMD_READ, bwb_read },
- X { CMD_REM, bwb_rem },
- X { CMD_RESTORE, bwb_restore },
- X { CMD_RETURN, bwb_return },
- X { CMD_STOP, bwb_stop }
- X };
- X
- X/***************************************************************
- X
- X Predefined Function Table for Bywater BASIC
- X
- X***************************************************************/
- X
- Xstruct bwb_function bwb_prefuncs[ FUNCTIONS ] =
- X {
- X
- X#if INTENSIVE_DEBUG
- X { "TEST", NUMBER, 2, fnc_test, (struct bwb_function *) NULL, 0 },
- X#endif
- X
- X#if MS_FUNCS /* Functions unique to Microsoft GWBASIC (tm) */
- X { "ASC", NUMBER, 1, fnc_asc, (struct bwb_function *) NULL, 0 },
- X { "MKD$", STRING, 1, fnc_mkd, (struct bwb_function *) NULL, 0 },
- X { "MKI$", STRING, 1, fnc_mki, (struct bwb_function *) NULL, 0 },
- X { "MKS$", STRING, 1, fnc_mks, (struct bwb_function *) NULL, 0 },
- X { "CVD", NUMBER, 1, fnc_cvd, (struct bwb_function *) NULL, 0 },
- X { "CVS", NUMBER, 1, fnc_cvs, (struct bwb_function *) NULL, 0 },
- X { "CVI", NUMBER, 1, fnc_cvi, (struct bwb_function *) NULL, 0 },
- X { "CINT", NUMBER, 1, fnc_cint, (struct bwb_function *) NULL, 0 },
- X { "CSNG", NUMBER, 1, fnc_csng, (struct bwb_function *) NULL, 0 },
- X { "ENVIRON$",STRING, 1, fnc_environ, (struct bwb_function *) NULL, 0 },
- X { "ERR", NUMBER, 0, fnc_err, (struct bwb_function *) NULL, 0 },
- X { "ERL", NUMBER, 0, fnc_erl, (struct bwb_function *) NULL, 0 },
- X { "LOC", NUMBER, 1, fnc_loc, (struct bwb_function *) NULL, 0 },
- X { "LOF", NUMBER, 1, fnc_lof, (struct bwb_function *) NULL, 0 },
- X { "EOF", NUMBER, 1, fnc_eof, (struct bwb_function *) NULL, 0 },
- X { "INSTR", NUMBER, 1, fnc_instr, (struct bwb_function *) NULL, 0 },
- X { "SPC", STRING, 1, fnc_spc, (struct bwb_function *) NULL, 0 },
- X { "SPACE$", STRING, 1, fnc_space, (struct bwb_function *) NULL, 0 },
- X { "STRING$", STRING, 1, fnc_string, (struct bwb_function *) NULL, 0 },
- X { "MID$", STRING, 3, fnc_mid, (struct bwb_function *) NULL, 0 },
- X { "LEFT$", STRING, 2, fnc_left, (struct bwb_function *) NULL, 0 },
- X { "RIGHT$", STRING, 2, fnc_right, (struct bwb_function *) NULL, 0 },
- X { "TIMER", NUMBER, 0, fnc_timer, (struct bwb_function *) NULL, 0 },
- X { "HEX$", STRING, 1, fnc_hex, (struct bwb_function *) NULL, 0 },
- X { "OCT$", STRING, 1, fnc_oct, (struct bwb_function *) NULL, 0 },
- X#if IMP_FNCINKEY == 1
- X { "INKEY$", STRING, 1, fnc_inkey, (struct bwb_function *) NULL, 0 },
- X#endif
- X#endif
- X
- X#if COMMON_FUNCS /* Functions common to GWBASIC and ANSI Full BASIC */
- X { "CHR$", NUMBER, 0, fnc_chr, (struct bwb_function *) NULL, 0 },
- X { "LEN", NUMBER, 1, fnc_len, (struct bwb_function *) NULL, 0 },
- X { "POS", NUMBER, 0, fnc_pos, (struct bwb_function *) NULL, 0 },
- X { "VAL", NUMBER, 1, fnc_val, (struct bwb_function *) NULL, 0 },
- X { "STR$", STRING, 1, fnc_str, (struct bwb_function *) NULL, 0 },
- X { "DATE$", STRING, 0, fnc_date, (struct bwb_function *) NULL, 0 },
- X { "TIME$", STRING, 0, fnc_time, (struct bwb_function *) NULL, 0 },
- X#endif
- X
- X#if ANSI_FUNCS /* Functions required for ANSI Full BASIC */
- X#endif
- X
- X /* The remainder are core functions defined for ANSI Minimal BASIC */
- X
- X#if COMPRESS_FUNCS
- X { "ABS", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_ABS },
- X { "ATN", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_ATN },
- X { "COS", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_COS },
- X { "EXP", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_EXP },
- X { "INT", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_INT },
- X { "LOG", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_LOG },
- X { "RND", NUMBER, 0, fnc_core, (struct bwb_function *) NULL, F_RND },
- X { "SGN", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_SGN },
- X { "SIN", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_SIN },
- X { "SQR", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_SQR },
- X { "TAN", NUMBER, 1, fnc_core, (struct bwb_function *) NULL, F_TAN },
- X#else
- X { "ABS", NUMBER, 1, fnc_abs, (struct bwb_function *) NULL, 0 },
- X { "ATN", NUMBER, 1, fnc_atn, (struct bwb_function *) NULL, 0 },
- X { "COS", NUMBER, 1, fnc_cos, (struct bwb_function *) NULL, 0 },
- X { "EXP", NUMBER, 1, fnc_exp, (struct bwb_function *) NULL, 0 },
- X { "INT", NUMBER, 1, fnc_int, (struct bwb_function *) NULL, 0 },
- X { "LOG", NUMBER, 1, fnc_log, (struct bwb_function *) NULL, 0 },
- X { "RND", NUMBER, 0, fnc_rnd, (struct bwb_function *) NULL, 0 },
- X { "SGN", NUMBER, 1, fnc_sgn, (struct bwb_function *) NULL, 0 },
- X { "SIN", NUMBER, 1, fnc_sin, (struct bwb_function *) NULL, 0 },
- X { "SQR", NUMBER, 1, fnc_sqr, (struct bwb_function *) NULL, 0 },
- X { "TAN", NUMBER, 1, fnc_tan, (struct bwb_function *) NULL, 0 },
- X#endif
- X { "TAB", STRING, 1, fnc_tab, (struct bwb_function *) NULL, 0 }
- X };
- X
- X/***************************************************************
- X
- X Operator Table for Bywater BASIC
- X
- X***************************************************************/
- X
- Xstruct bwb_op exp_ops[ N_OPERATORS ] =
- X {
- X { "NOT", OP_NOT, 12 }, /* multiple-character operators */
- X { "AND", OP_AND, 13 }, /* should be tested first because */
- X { "OR", OP_OR, 14 }, /* e.g. a ">=" would be matched */
- X { "XOR", OP_XOR, 15 }, /* as "=" if the single-character */
- X { "IMP", OP_IMPLIES, 16 }, /* operator came first */
- X { "EQV", OP_EQUIV, 17 },
- X { "MOD", OP_MODULUS, 4 },
- X { "<>", OP_NOTEQUAL, 7 },
- X { "<=", OP_LTEQ, 10 },
- X { "=<", OP_LTEQ, 10 }, /* allow either form */
- X { ">=", OP_GTEQ, 11 },
- X { "=>", OP_GTEQ, 11 }, /* allow either form */
- X { "<", OP_LESSTHAN, 8 },
- X { ">", OP_GREATERTHAN, 9 },
- X { "^", OP_EXPONENT, 0 },
- X { "*", OP_MULTIPLY, 2 },
- X { "/", OP_DIVIDE, 2 },
- X { "\\", OP_INTDIVISION, 3 },
- X { "+", OP_ADD, 5 },
- X { "-", OP_SUBTRACT, 5 },
- X { "=", OP_EQUALS, 6 },
- X { "=", OP_ASSIGN, 6 }, /* don't worry: OP_EQUALS will be converted to OP_ASSIGN if necessary */
- X { ";", OP_STRJOIN, 18 },
- X { ",", OP_STRTAB, 19 }
- X };
- X
- X/* Error messages used more than once */
- X
- Xchar err_openfile[] = ERR_OPENFILE;
- Xchar err_getmem[] = ERR_GETMEM;
- Xchar err_noln[] = ERR_NOLN;
- Xchar err_nofn[] = ERR_NOFN;
- Xchar err_lnnotfound[] = ERR_LNNOTFOUND;
- Xchar err_incomplete[] = ERR_INCOMPLETE;
- Xchar err_valoorange[] = ERR_VALOORANGE;
- Xchar err_syntax[] = ERR_SYNTAX;
- Xchar err_devnum[] = ERR_DEVNUM;
- Xchar err_dev[] = ERR_DEV;
- Xchar err_opsys[] = ERR_OPSYS;
- Xchar err_argstr[] = ERR_ARGSTR;
- Xchar err_defchar[] = ERR_DEFCHAR;
- Xchar err_mismatch[] = ERR_MISMATCH;
- Xchar err_dimnotarray[] =ERR_DIMNOTARRAY;
- Xchar err_retnogosub[] = ERR_RETNOGOSUB;
- Xchar err_od[] = ERR_OD;
- Xchar err_overflow[] = ERR_OVERFLOW;
- Xchar err_nf[] = ERR_NF;
- Xchar err_uf[] = ERR_UF;
- Xchar err_dbz[] = ERR_DBZ;
- Xchar err_redim[] = ERR_REDIM;
- Xchar err_obdim[] = ERR_OBDIM;
- Xchar err_uc[] = ERR_UC;
- Xchar err_noprogfile[] = ERR_NOPROGFILE;
- X
- X/***************************************************************
- X
- X Error Message Table for Bywater BASIC
- X
- X***************************************************************/
- X
- Xchar *err_table[ N_ERRORS ] =
- X {
- X err_openfile,
- X err_getmem,
- X err_noln,
- X err_nofn,
- X err_lnnotfound,
- X err_incomplete,
- X err_valoorange,
- X err_syntax,
- X err_devnum,
- X err_dev,
- X err_opsys,
- X err_argstr,
- X err_defchar,
- X err_mismatch,
- X err_dimnotarray,
- X err_od,
- X err_overflow,
- X err_nf,
- X err_uf,
- X err_dbz,
- X err_redim,
- X err_obdim,
- X err_uc,
- X err_noprogfile
- X };
- X
- X
- END_OF_FILE
- if test 13470 -ne `wc -c <'bwbasic-2.10/bwb_tbl.c'`; then
- echo shar: \"'bwbasic-2.10/bwb_tbl.c'\" unpacked with wrong size!
- fi
- # end of 'bwbasic-2.10/bwb_tbl.c'
- fi
- if test -f 'bwbasic-2.10/bwbasic.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'bwbasic-2.10/bwbasic.h'\"
- else
- echo shar: Extracting \"'bwbasic-2.10/bwbasic.h'\" \(54437 characters\)
- sed "s/^X//" >'bwbasic-2.10/bwbasic.h' <<'END_OF_FILE'
- X/***************************************************************
- X
- X bwbasic.h Header File
- X for Bywater BASIC Interpreter
- X
- X Copyright (c) 1993, Ted A. Campbell
- X Bywater Software
- X
- X email: tcamp@delphi.com
- X
- X Copyright and Permissions Information:
- X
- X All U.S. and international rights are claimed by the author,
- X Ted A. Campbell.
- X
- X This software is released under the terms of the GNU General
- X Public License (GPL), which is distributed with this software
- X in the file "COPYING". The GPL specifies the terms under
- X which users may copy and use the software in this distribution.
- X
- X A separate license is available for commercial distribution,
- X for information on which you should contact the author.
- X
- X***************************************************************/
- X
- X
- X#ifndef TRUE
- X#define TRUE -1
- X#define FALSE 0
- X#endif
- X
- X/***************************************************************
- X
- X bwbasic.h Part I: Definitions
- X
- X***************************************************************/
- X
- X/* Version number */
- X
- X#define VERSION "2.10" /* Current version number */
- X
- X/***************************************************************
- X
- X bwbasic.h: Part I-A: Define Major Hardware Implementation
- X
- X Gone is the simplicity of earlier versions.
- X You must specify one and only one of the
- X following hardware implementations as TRUE.
- X IMP_TTY is the default implementation.
- X It is the most minimal, but the most
- X universal hardware implementation.
- X
- X***************************************************************/
- X
- X#define IMP_TTY TRUE /* simple TTY-style interface using stdio */
- X#define IMP_IQC FALSE /* IBM PC, Microsoft QuickC Compiler */
- X
- X#if IMP_TTY
- X#include "bwx_tty.h"
- X#endif
- X
- X#if IMP_IQC
- X#include "bwx_iqc.h"
- X#endif
- X
- X/***************************************************************
- X
- X bwbasic.h: Part I-B: Define Compiler Implementation
- X
- X You also need to give some information about
- X your C compiler. If your compiler is ANSI-
- X compatible, don't worry about these. But
- X if your compiler is "stock," you might
- X want to indicate which of the following
- X sets of features it has or dosn't have.
- X
- X***************************************************************/
- X
- X#ifdef MSDOS
- X#define HAVE_RAISE TRUE
- X#define HAVE_STRING TRUE
- X#define HAVE_STDLIB TRUE
- X#endif
- X
- X#ifdef __STDC__
- X#define HAVE_SIGNAL TRUE
- X#else
- X#define HAVE_SIGNAL TRUE /* Compiler supports signal() */
- X#endif
- X
- X#ifdef __STDC__
- X#define HAVE_LONGJUMP TRUE
- X#else
- X#define HAVE_LONGJUMP TRUE /* Compiler supports setjmp() and longjmp() */
- X#endif
- X
- X/* configure sets this */
- X#ifndef HAVE_RAISE
- X#define HAVE_RAISE FALSE /* Compiler supports raise() */
- X#endif
- X
- X/* configure sets this */
- X#ifndef HAVE_STRING
- X#define HAVE_STRING FALSE /* Compiler has <string.h> header */
- X#endif
- X
- X/* configure sets this */
- X#ifndef HAVE_STDLIB
- X#define HAVE_STDLIB FALSE /* Compiler has <stdlib.h> header */
- X#endif
- X
- X#ifdef __STDC__
- X#define HAVE_SYSTYPES TRUE
- X#else
- X#define HAVE_SYSTYPES TRUE /* Compiler has <sys/types.h> header */
- X#endif
- X
- X#ifdef __STDC__
- X#define HAVE_SYSSTAT TRUE
- X#else
- X#define HAVE_SYSSTAT TRUE /* Compiler has <sys/stat.h> header */
- X#endif
- X
- X/***************************************************************
- X
- X bwbasic.h: Part I-C: Define Program Configuration
- X
- X You must specify one and only one of the
- X following progrm configurations as TRUE.
- X If you specify CFG_CUSTOM, then you will
- X need to fill out the custom section below.
- X
- X***************************************************************/
- X
- X#define CFG_ANSIMINIMAL FALSE /* Conforms to ANSI Minimal BASIC standard X3.60-1978 */
- X#define CFG_COMMON FALSE /* Small implementation with commands and functions common to GWBASIC (tm) and ANSI full BASIC */
- X#define CFG_MSTYPE FALSE /* Configuration similar to Microsoft line-oriented BASICs */
- X#define CFG_ANSIFULL FALSE /* Conforms to ANSI Full BASIC standard X3.113-1987 */
- X#define CFG_CUSTOM TRUE /* Custom Configuration specified below */
- X
- X/***************************************************************
- X
- X bwbasic.h: Part I-D: Define Custom Program Configuration
- X
- X If you specified CFG_CUSTOM above, then
- X you will need to fill out this section.
- X
- X***************************************************************/
- X
- X#if CFG_CUSTOM
- X#define COMMAND_SHELL TRUE /* allow command shell processing */
- X#define PROFILE FALSE /* interpret profile at beginning */
- X#define NUMBER_DOUBLE FALSE /* define BASIC number as double: default is float*/
- X#define MULTISEG_LINES TRUE /* allow multi-segment lines delimited by ':' */
- X#define PARACT FALSE /* Implement PARallen ACTion (Multi-tasking) interpreter */
- X#define INTERACTIVE TRUE /* interactive programming environment and related commands */
- X#define COMMON_CMDS TRUE /* commands common to ANSI full BASIC and GWBASIC */
- X#if UNIX_CMDS
- X#define UNIX_CMDS TRUE /* implement Unix-style directory commands */
- X#endif
- X#define STRUCT_CMDS TRUE /* commands for structured programming required by full ANSI BASIC */
- X#define MS_CMDS TRUE /* commands specific to Microsoft GWBASIC (tm) */
- X#define MS_FUNCS TRUE /* Microsoft-specific functions and commands */
- X#define COMMON_FUNCS TRUE /* functions common to GWBASIC and ANSI full BASIC */
- X#define ANSI_FUNCS TRUE /* functions required by ANSI full BASIC */
- X#endif /* end of CFG_CUSTOM */
- X
- X/***************************************************************
- X
- X bwbasic.h: Part I-E: Define Natural Language for Messages
- X
- X One and only one of the following must be
- X defined as TRUE. Note that the language
- X definitions themselves are in file bwb_mes.h.
- X If none is specified, then ENGLISH will be
- X taken as the default.
- X
- X***************************************************************/
- X
- X#define STD_ENGLISH TRUE /* standard English */
- X#define POL_ENGLISH FALSE /* polite English messages */
- X#define IMP_ENGLISH FALSE /* impolite English messages */
- X#define LATIN FALSE /* Latin language messages */
- X#define STD_RUSSIAN FALSE /* Russian language messages */
- X#define STD_GERMAN FALSE /* German language messages */
- X#define ESPERANTO FALSE /* Esperanto messages */
- X
- X/***************************************************************
- X
- X bwbasic.h: Part I-F: Define Debugging Options
- X
- X You can specify debugging options here.
- X
- X***************************************************************/
- X
- X#define DEBUG FALSE /* current debugging */
- X#define PROG_ERRORS FALSE /* identify serious programming errors */
- X /* and print extensive error messages */
- X /* This will override messages defined in */
- X /* bwb_mes.h, and almost all messages will be in English */
- X#define CHECK_RECURSION FALSE /* check for recursion violation in expression parser */
- X#define INTENSIVE_DEBUG FALSE /* old debugging; might be useful later */
- X#define REDIRECT_STDERR FALSE /* Redirect stderr to file ERRFILE */
- X#define TEST_BSTRING FALSE /* test bstring integrity */
- X
- X#ifdef __STDC__
- X#define ANSI_C TRUE /* FALSE to test and debug non-ANSI-C version
- X with ANSI C compiler (watch out) */
- X#endif
- X
- X/***************************************************************
- X
- X bwbasic.h: This ends the section of definitions that
- X users of bwBASIC will normally need to
- X specify. The following are internally defined
- X
- X***************************************************************/
- X
- X#if CFG_ANSIMINIMAL
- X#define COMMAND_SHELL FALSE /* allow command shell processing */
- X#define PROFILE FALSE /* interpret profile at beginning */
- X#define NUMBER_DOUBLE FALSE /* define BASIC number as double: default is float*/
- X#define MULTISEG_LINES FALSE /* allow multi-segment lines delimited by ':' */
- X#define PARACT FALSE /* Implement PARallen ACTion (Multi-tasking) interpreter */
- X#define INTERACTIVE TRUE /* interactive programming environment and related commands */
- X#define COMMON_CMDS FALSE /* commands common to ANSI full BASIC and GWBASIC */
- X#if UNIX_CMDS
- X#define UNIX_CMDS FALSE /* implement Unix-style directory commands */
- X#endif
- X#define STRUCT_CMDS FALSE /* commands for structured programming required by full ANSI BASIC */
- X#define MS_CMDS FALSE /* commands specific to Microsoft GWBASIC (tm) */
- X#define MS_FUNCS FALSE /* Microsoft-specific functions and commands */
- X#define COMMON_FUNCS FALSE /* functions common to GWBASIC and ANSI full BASIC */
- X#define ANSI_FUNCS FALSE /* functions required by ANSI full BASIC */
- X#endif /* end of CFG_ANSIMINIMAL */
- X
- X#if CFG_COMMON
- X#define COMMAND_SHELL FALSE /* allow command shell processing */
- X#define PROFILE FALSE /* interpret profile at beginning */
- X#define NUMBER_DOUBLE FALSE /* define BASIC number as double: default is float*/
- X#define MULTISEG_LINES FALSE /* allow multi-segment lines delimited by ':' */
- X#define PARACT FALSE /* Implement PARallen ACTion (Multi-tasking) interpreter */
- X#define INTERACTIVE TRUE /* interactive programming environment and related commands */
- X#define COMMON_CMDS TRUE /* commands common to ANSI full BASIC and GWBASIC */
- X#if UNIX_CMDS
- X#define UNIX_CMDS FALSE /* implement Unix-style directory commands */
- X#endif
- X#define STRUCT_CMDS FALSE /* commands for structured programming required by full ANSI BASIC */
- X#define MS_CMDS FALSE /* commands specific to Microsoft GWBASIC (tm) */
- X#define MS_FUNCS FALSE /* Microsoft-specific functions and commands */
- X#define COMMON_FUNCS TRUE /* functions common to GWBASIC and ANSI full BASIC */
- X#define ANSI_FUNCS FALSE /* functions required by ANSI full BASIC */
- X#endif /* end of CFG_COMMON */
- X
- X#if CFG_ANSIFULL
- X#define COMMAND_SHELL TRUE /* allow command shell processing */
- X#define PROFILE TRUE /* interpret profile at beginning */
- X#define NUMBER_DOUBLE FALSE /* define BASIC number as double: default is float*/
- X#define MULTISEG_LINES FALSE /* allow multi-segment lines delimited by ':' */
- X#define PARACT TRUE /* Implement PARallen ACTion (Multi-tasking) interpreter */
- X#define INTERACTIVE TRUE /* interactive programming environment and related commands */
- X#define COMMON_CMDS TRUE /* commands common to ANSI full BASIC and GWBASIC */
- X#if UNIX_CMDS
- X#define UNIX_CMDS FALSE /* implement Unix-style directory commands */
- X#endif
- X#define STRUCT_CMDS TRUE /* commands for structured programming required by full ANSI BASIC */
- X#define MS_CMDS FALSE /* commands specific to Microsoft GWBASIC (tm) */
- X#define MS_FUNCS FALSE /* Microsoft-specific functions and commands */
- X#define COMMON_FUNCS TRUE /* functions common to GWBASIC and ANSI full BASIC */
- X#define ANSI_FUNCS TRUE /* functions required by ANSI full BASIC */
- X#endif /* end of CFG_ANSIFULL */
- X
- X#if CFG_MSTYPE
- X#define COMMAND_SHELL FALSE /* allow command shell processing */
- X#define PROFILE FALSE /* interpret profile at beginning */
- X#define NUMBER_DOUBLE FALSE /* define BASIC number as double: default is float*/
- X#define MULTISEG_LINES TRUE /* allow multi-segment lines delimited by ':' */
- X#define PARACT FALSE /* Implement PARallen ACTion (Multi-tasking) interpreter */
- X#define INTERACTIVE TRUE /* interactive programming environment and related commands */
- X#define COMMON_CMDS TRUE /* commands common to ANSI full BASIC and GWBASIC */
- X#define STRUCT_CMDS FALSE /* commands for structured programming required by full ANSI BASIC */
- X#define MS_CMDS TRUE /* commands specific to Microsoft GWBASIC (tm) */
- X#define MS_FUNCS TRUE /* Microsoft-specific functions and commands */
- X#define COMMON_FUNCS TRUE /* functions common to GWBASIC and ANSI full BASIC */
- X#define ANSI_FUNCS FALSE /* functions required by ANSI full BASIC */
- X#endif /* end of CFG_MSTYPE */
- X
- X/* inclusions and definitions necessary if C compiler is not ANSI compliant */
- X
- X#if HAVE_STRING
- X#include <string.h>
- X#else
- X#include <strings.h>
- X#endif
- X
- X#if HAVE_STDLIB
- X#include <stdlib.h>
- X#endif
- X
- X#if HAVE_SYSTYPES
- X#include <sys/types.h>
- X#endif
- X
- X#if HAVE_STDLIB /* if neither ANSI */
- X#else
- X#if HAVE_SYSTYPES /* nor SYSTYPES */
- X#else
- X#define size_t unsigned int /* then define these */
- X#define time_t long
- X#endif
- X#endif
- X
- X/* define number of commands */
- X
- X#define CMDS_CORE 22 /* number of core commands defined */
- X#if UNIX_CMDS
- X#define CMDS_DIR 5
- X#else
- X#define CMDS_DIR 0
- X#endif
- X#if COMMON_CMDS
- X#define CMDS_COMMON 24
- X#else
- X#define CMDS_COMMON 0
- X#endif
- X#if STRUCT_CMDS
- X#define CMDS_STC 10
- X#else
- X#define CMDS_STC 0
- X#endif
- X#if INTERACTIVE
- X#define CMDS_INT 8
- X#else
- X#define CMDS_INT 0
- X#endif
- X#if MS_CMDS
- X#define CMDS_MS 5+IMP_CMDCLS+IMP_CMDLOC+IMP_CMDCOLOR
- X#else
- X#define CMDS_MS 0
- X#endif
- X#if DEBUG
- X#define CMDS_DEBUG 3 /* number of debugging cmds */
- X#else
- X#define CMDS_DEBUG 0 /* no debugging cmds */
- X#endif
- X#define COMMANDS (CMDS_CORE+CMDS_DEBUG+CMDS_DIR+CMDS_COMMON+CMDS_INT+CMDS_MS+CMDS_STC)
- X
- X/* define number of functions */
- X
- X#define FUNCS_BASE 12 /* number of basic functions */
- X#ifdef INTENSIVE_DEBUG
- X#define FUNCS_DEBUG 1 /* number of debugging functions */
- X#else
- X#define FUNCS_DEBUG 0 /* number of debugging functions */
- X#endif
- X#if MS_FUNCS
- X#define FUNCS_MS (25+IMP_FNCINKEY)
- X#else
- X#define FUNCS_MS 0
- X#endif
- X#if COMMON_FUNCS
- X#define FUNCS_COMMON 7
- X#else
- X#define FUNCS_COMMON 0
- X#endif
- X#if ANSI_FUNCS
- X#define FUNCS_ANSI 0
- X#else
- X#define FUNCS_ANSI 0
- X#endif
- X#define FUNCTIONS (FUNCS_BASE+FUNCS_DEBUG+FUNCS_MS+FUNCS_COMMON+FUNCS_ANSI)
- X
- X/* Check for inconsistencies */
- X
- X#if MULTISEG_LINES & STRUCT_CMDS
- X/* ERROR: MULTISEG_LINES and STRUCT_CMDS cannot be defined together! */
- X#endif
- X
- X#define DEF_EDITOR "" /* default editor */
- X#define DEF_FILES "" /* default "files" command */
- X#define DEF_COLORS 0 /* default # of colors */
- X#define DEFVNAME_EDITOR "BWB.EDITOR$" /* default variable name for EDITOR */
- X#define DEFVNAME_PROMPT "BWB.PROMPT$" /* default variable name for PROMPT */
- X#define DEFVNAME_FILES "BWB.FILES$" /* default variable name for FILES */
- X#define DEFVNAME_COLORS "BWB.COLORS" /* default variable name for COLORS */
- X#define DEFVNAME_IMPL "BWB.IMPLEMENTATION$" /* default variable name for IMPLEMENTATION */
- X#define ERRFILE "err.out" /* Filename for redirected error messages */
- X#define PROFILENAME "profile.bas" /* Filename for profile execution */
- X#define TASKS 4 /* number of tasks available */
- X#define MAXARGSIZE 128 /* maximum size of argument */
- X#define MAXREADLINESIZE 256 /* size of read_line buffer */
- X#define MAXCMDNAMESIZE 64 /* maximum size for command name */
- X#define MAXLINENO 32766 /* maximum line number */
- X#define MAXVARNAMESIZE 40 /* maximum size for variable name */
- X#define MAXFILENAMESIZE 40 /* maximum size for file name */
- X#define MAXSTRINGSIZE 255 /* maximum string length */
- X#define EXECLEVELS 64 /* EXEC stack levels */
- X#define MAX_GOLINES 12 /* Maximum # of lines for ON...GOTO statements */
- X#define MAX_FARGS 6 /* maximum # arguments to function */
- X#define MAX_DIMS 64 /* maximum # of dimensions */
- X#define ESTACKSIZE 64 /* elements in expression stack */
- X#define XTXTSTACKSIZE 16 /* elements in eXecute TeXT stack */
- X#define N_OPERATORS 24 /* number of operators defined */
- X#define N_ERRORS 25 /* number of errors defined */
- X#define MAX_PRECEDENCE 19 /* highest (last) level of precedence */
- X#define MININTSIZE -32767 /* minimum integer size */
- X#define MAXINTSIZE 32767 /* maximum integer size */
- X#define DEF_SUBSCRIPT 11 /* default subscript */
- X#define DEF_DEVICES 16 /* default number of devices available */
- X#define DEF_WIDTH 128 /* default width for devices */
- X#define PRN_TAB 0x02 /* send TAB followed by col number to output device */
- X#define COMPRESS_FUNCS TRUE
- X
- X/* Derivative definitions */
- X
- X#if MULTISEG_LINES
- X#define MARK_LINES FALSE
- X#else
- X#define MARK_LINES TRUE
- X#endif
- X
- X#if PARACT
- X#define CURTASK bwb_tasks[ bwb_curtask ]->
- X#define LOCALTASK bwb_tasks[ task ]->
- X#else
- X#define CURTASK
- X#define LOCALTASK
- X#endif
- X
- X#if DEBUG
- X#define PERMANENT_DEBUG TRUE
- X#else
- X#define PERMANENT_DEBUG FALSE
- X#endif
- X
- X#if HAVE_STDLIB
- X#else
- Xextern char *calloc();
- X
- X#ifndef NULL
- X#define NULL 0L
- X#endif
- X
- X#endif
- X
- X/* typedef for BASIC number */
- X
- X#if NUMBER_DOUBLE
- Xtypedef double bnumber;
- X#else
- Xtypedef float bnumber;
- X#endif
- X
- X/* define variable types based on last character */
- X
- X#define STRING '$'
- X
- X/* define mathematical operations */
- X
- X#define MULTIPLY '*'
- X#define DIVIDE '/'
- X#define ADD '+'
- X#define SUBTRACT '-'
- X#define ARGUMENT 'A'
- X
- X/* Operations defined */
- X
- X#define OP_ERROR -255 /* operation error (break out) */
- X#define OP_NULL 0 /* null: operation not defined yet */
- X#define NUMBER 1 /* number held as internal variable in uvar */
- X#define CONST_STRING 2 /* string constant */
- X#define CONST_NUMERICAL 3 /* numerical constant */
- X#define FUNCTION 4 /* function header */
- X#define VARIABLE 5 /* external variable pointed to by xvar */
- X#define PARENTHESIS 6 /* begin parenthetical expression */
- X#define OP_ADD 7 /* addition sign '+' */
- X#define OP_SUBTRACT 8 /* subtraction sign '-' */
- X#define OP_MULTIPLY 9 /* multiplication sign '*' */
- X#define OP_DIVIDE 10 /* division sign '/' */
- X#define OP_MODULUS 11 /* modulus "MOD" */
- X#define OP_EXPONENT 12 /* exponentiation '^' */
- X#define OP_INTDIVISION 13 /* integer division sign '\' */
- X#define OP_NEGATION 14 /* negation '-' ??? */
- X#define OP_STRJOIN 15 /* string join ';' */
- X#define OP_STRTAB 16 /* string tab ',' */
- X#define OP_EQUALS 17 /* either logical equal operator */
- X#define OP_ASSIGN 18 /* assignment operator */
- X#define OP_NOTEQUAL 20 /* inequality */
- X#define OP_LESSTHAN 21 /* less than */
- X#define OP_GREATERTHAN 22 /* greater than */
- X#define OP_LTEQ 23 /* less than or equal to */
- X#define OP_GTEQ 24 /* greater than or equal to */
- X#define OP_NOT 25 /* negation */
- X#define OP_AND 26 /* conjunction */
- X#define OP_OR 27 /* disjunction */
- X#define OP_XOR 28 /* exclusive or */
- X#define OP_IMPLIES 29 /* implication */
- X#define OP_EQUIV 30 /* equivalence */
- X#define OP_TERMINATE 31 /* terminate expression parsing */
- X#define OP_USERFNC 32 /* user-defined function */
- X
- X/* Device input/output modes */
- X
- X#define DEVMODE_AVAILABLE -1
- X#define DEVMODE_CLOSED 0
- X#define DEVMODE_OUTPUT 1
- X#define DEVMODE_INPUT 2
- X#define DEVMODE_APPEND 3
- X#define DEVMODE_RANDOM 4
- X
- X/* codes for EXEC stack and for function-sub-label lookup table */
- X
- X#define EXEC_NORM 0
- X#define EXEC_GOSUB 1
- X#define EXEC_WHILE 2
- X#define EXEC_FOR 3
- X#define EXEC_FUNCTION 4
- X#define EXEC_CALLSUB 5
- X#define EXEC_IFTRUE 6
- X#define EXEC_IFFALSE 7
- X#define EXEC_MAIN 8
- X#define EXEC_SELTRUE 9
- X#define EXEC_SELFALSE 10
- X#define EXEC_LABEL 11
- X#define EXEC_DO 12
- X#define EXEC_ON 13
- X
- X/***************************************************************
- X
- X bwbasic.h Part II: Structures
- X
- X***************************************************************/
- X
- X/* Typdef structure for strings under Bywater BASIC */
- X
- Xtypedef struct bstr
- X {
- X unsigned char length; /* length of string */
- X char *sbuffer; /* pointer to string buffer */
- X int rab; /* is it a random-access buffer? */
- X#if TEST_BSTRING
- X char name[ MAXVARNAMESIZE + 1 ]; /* name for test purposes */
- X#endif
- X } bstring;
- X
- X/* Structure used for all variables under Bywater BASIC */
- X
- Xstruct bwb_variable
- X {
- X char name[ MAXVARNAMESIZE + 1 ]; /* name */
- X int type; /* type, i.e., STRING or NUMBER */
- X#if OLDWAY
- X void *array; /* pointer to array memory */
- X#endif
- X bnumber *memnum; /* memory for number */
- X bstring *memstr; /* memory for string */
- X size_t array_units; /* total number of units of memory */
- X int *array_sizes; /* pointer to array of <dimensions>
- X integers, with sizes of each
- X dimension */
- X int *array_pos; /* current position in array */
- X int dimensions; /* number of dimensions,
- X 0 = not an array */
- X struct bwb_variable *next; /* next variable in chain */
- X int common; /* should this variable be common to chained programs? */
- X int preset; /* preset variable: CLEAR should not alter */
- X };
- X
- X/* Structure to represent program lines under Bywater BASIC */
- X
- Xstruct bwb_line
- X {
- X struct bwb_line *next; /* pointer to next line in chain */
- X int number; /* line number */
- X char xnum; /* is there actually a line number? */
- X char *buffer; /* buffer to hold the line */
- X int position; /* current position in line */
- X int lnpos; /* line number position in buffer */
- X int lnum; /* line number read from buffer */
- X int cmdpos; /* command position in buffer */
- X int cmdnum; /* number of command in command table
- X read from buffer */
- X int startpos; /* start of rest of line read from buffer */
- X int marked; /* has line been checked yet? */
- X };
- X
- X/* Structure used for all predefined functions under Bywater BASIC */
- X
- Xstruct bwb_function
- X {
- X char name[ MAXVARNAMESIZE + 1 ]; /* name */
- X int type; /* type, i.e., STRING or NUMBER */
- X int arguments; /* number of args passed */
- X#if ANSI_C
- X struct bwb_variable * (*vector) ( int argc, struct bwb_variable *argv, int unique_id ); /* vector to function to call */
- X#else
- X struct bwb_variable * (*vector) (); /* vector to function to call */
- X#endif
- X struct bwb_function *next; /* next function in chain */
- X int id; /* id to identify multiple functions */
- X };
- X
- X/* Structure to represent all command statements under Bywater BASIC */
- X
- Xstruct bwb_command
- X {
- X char name[ MAXCMDNAMESIZE + 1 ];
- X#if ANSI_C
- X struct bwb_line * (*vector) (struct bwb_line *);
- X#else
- X struct bwb_line * (*vector) ();
- X#endif
- X };
- X
- X/* Structure to define device stack for Bywater BASIC */
- X
- Xstruct dev_element
- X {
- X int mode; /* DEVMODE_ item */
- X int width; /* width for output control */
- X int col; /* current column */
- X int reclen; /* record length for random access */
- X int next_record; /* next record to read/write */
- X int loc; /* location in file */
- X char filename[ MAXFILENAMESIZE + 1 ];/* filename */
- X FILE *cfp; /* C file pointer for this device */
- X char *buffer; /* pointer to character buffer for random access */
- X };
- X
- X/* Structure to define expression stack elements under Bywater BASIC */
- X
- Xstruct exp_ese
- X {
- X int operation; /* operation at this level */
- X char type; /* type of operation at this level:
- X STRING or NUMBER */
- X bstring sval; /* string */
- X bnumber nval; /* number */
- X char string[ MAXSTRINGSIZE + 1 ]; /* string for writing */
- X struct bwb_variable *xvar; /* pointer to external variable */
- X struct bwb_function *function; /* pointer to function structure */
- X int array_pos[ MAX_DIMS ]; /* array for variable positions */
- X int pos_adv; /* position advanced in string */
- X int rec_pos; /* position marker for recursive calls */
- X };
- X
- X/* structure for FUNCTION-SUB loopup table element */
- X
- Xstruct fslte
- X {
- X char *name;
- X struct bwb_line *line;
- X int code;
- X int startpos; /* starting position in line */
- X struct fslte *next;
- X struct bwb_variable *local_variable;
- X };
- X
- X/* Structure to define EXEC stack elements */
- X
- Xstruct exse
- X {
- X struct bwb_line *line; /* line for execution */
- X int code; /* code to note special operations */
- X int position; /* position in line for restore */
- X struct bwb_variable *local_variable; /* local variable chain and current FOR counter */
- X struct bwb_variable *calling_variable[ MAX_FARGS ];
- X int n_cvs; /* number of calling variables */
- X int for_step; /* STEP value for FOR */
- X int for_target; /* target value for FOR */
- X struct bwb_line *while_line; /* return line for current WHILE */
- X struct bwb_line *wend_line; /* breakout line for current WHILE (or FOR-NEXT) */
- X struct exp_ese expression; /* expression for evaluation by SELECT CASE */
- X#if MULTISEG_LINES
- X struct bwb_line *for_line; /* top line for FOR-NEXT loop, multisegmented */
- X int for_position; /* position in top line for FOR-NEXT loop, multisegmented */
- X#endif
- X };
- X
- Xstruct xtxtsl
- X {
- X int position;
- X struct bwb_line l;
- X };
- X
- X/* Structure to define bwBASIC task: UNDER CONSTRUCTION */
- X
- X#if PARACT
- Xstruct bwb_task
- X {
- X char progfile[ MAXARGSIZE ]; /* program file */
- X int rescan; /* program needs to be rescanned */
- X int number; /* current line number */
- X struct bwb_line *bwb_l; /* current line pointer */
- X struct bwb_line bwb_start; /* starting line marker */
- X struct bwb_line bwb_end; /* ending line marker */
- X struct bwb_line *data_line; /* current line to read data */
- X int data_pos; /* position in data_line */
- X struct bwb_variable var_start; /* variable list start marker */
- X struct bwb_variable var_end; /* variable list end marker */
- X struct bwb_function fnc_start; /* function list start marker */
- X struct bwb_function fnc_end; /* function list end marker */
- X struct fslte fslt_start; /* function-sub-label lookup table start marker */
- X struct fslte fslt_end; /* function-sub-label lookup table end marker */
- X int exsc; /* EXEC stack counter */
- X int expsc; /* expression stack counter */
- X int xtxtsc; /* eXecute TeXT stack counter */
- X struct exse excs[ EXECLEVELS ]; /* EXEC stack */
- X struct exp_ese exps[ ESTACKSIZE ]; /* Expression stack */
- X struct xtxtsl xtxts[ XTXTSTACKSIZE ];/* Execute Text stack */
- X };
- X
- Xextern struct bwb_task *bwb_tasks[ TASKS ]; /* table of task pointers */
- X
- X#else /* not multi-tasking */
- X
- Xextern char progfile[ MAXARGSIZE ]; /* program file */
- Xextern int rescan; /* program needs to be rescanned */
- Xextern int number; /* current line number */
- Xextern struct bwb_line *bwb_l; /* current line pointer */
- Xextern struct bwb_line bwb_start; /* starting line marker */
- Xextern struct bwb_line bwb_end; /* ending line marker */
- Xextern struct bwb_line *data_line; /* current line to read data */
- Xextern int data_pos; /* position in data_line */
- Xextern struct bwb_variable var_start; /* variable list start marker */
- Xextern struct bwb_variable var_end; /* variable list end marker */
- Xextern struct bwb_function fnc_start; /* function list start marker */
- Xextern struct bwb_function fnc_end; /* function list end marker */
- Xextern struct fslte fslt_start; /* function-sub-label lookup table start marker */
- Xextern struct fslte fslt_end; /* function-sub-label lookup table end marker */
- Xextern int exsc; /* EXEC stack counter */
- Xextern int expsc; /* expression stack counter */
- Xextern int xtxtsc; /* eXecute TeXT stack counter */
- Xextern struct exse *excs; /* EXEC stack */
- Xextern struct exp_ese *exps; /* Expression stack */
- Xextern struct xtxtsl *xtxts; /* Execute Text stack */
- X#endif
- X
- Xextern int bwb_curtask; /* current task */
- Xextern struct bwb_variable *ed; /* EDITOR$ variable */
- Xextern struct bwb_variable *fi; /* FILES$ variable */
- Xextern struct bwb_variable *pr; /* PROMPT$ variable */
- Xextern struct bwb_variable *im; /* IMPLEMENTATION$ variable */
- Xextern struct bwb_variable *co; /* COLORS variable */
- X
- X/***************************************************************
- X
- X bwbasic.h Part III: Global Data
- X
- X***************************************************************/
- X
- Xextern char *bwb_ebuf;
- Xextern int bwb_trace;
- Xextern int dim_base; /* set by OPTION BASE */
- Xextern struct bwb_command bwb_cmdtable[ COMMANDS ];
- Xextern FILE *errfdevice; /* output device for error messages */
- Xextern int err_line; /* line in which error occurred */
- Xextern int err_number; /* number of last error */
- Xextern char err_gosubl[ MAXVARNAMESIZE + 1 ]; /* line for error GOSUB */
- Xextern char *err_table[ N_ERRORS ]; /* table of error messages */
- Xextern int prn_col;
- Xextern struct bwb_function bwb_prefuncs[ FUNCTIONS ]; /* table of predefined functions */
- X
- X#if COMMON_CMDS
- Xextern struct dev_element *dev_table; /* table of devices */
- X#endif
- X
- X/* Operator Structure and Table */
- X
- Xstruct bwb_op
- X {
- X char symbol[ 8 ]; /* BASIC symbol for the operator */
- X int operation; /* internal code for the operator */
- X int precedence; /* level of precedence, 0 = highest */
- X };
- X
- Xextern struct bwb_op exp_ops[ N_OPERATORS ]; /* the table itself, filled in in bwb_tbl.c */
- X
- X/***************************************************************
- X
- X bwbasic.h Part IV: Function Prototypes
- X
- X***************************************************************/
- X
- X#if ANSI_C
- Xextern void bwb_init( int argc, char **argv );
- Xextern int bwb_fload( FILE *file );
- Xextern int bwb_ladd( char *buffer, int replace );
- Xextern int bwb_findcmd( int argc, int a, struct bwb_line *l );
- Xextern struct bwb_line *bwb_xtxtline( char *buffer );
- Xextern void bwb_mainloop( void );
- Xextern void bwb_execline( void );
- Xextern int bwb_gets( char *buffer );
- Xextern int bwb_error( char *message );
- Xextern void break_handler( void );
- Xextern void break_mes( int x );
- Xextern struct bwb_line *bwb_null( struct bwb_line *l );
- Xextern struct bwb_line *bwb_rem( struct bwb_line *l );
- Xextern struct bwb_line *bwb_lerror( struct bwb_line *l );
- Xextern struct bwb_line *bwb_run( struct bwb_line *l );
- Xextern struct bwb_line *bwb_let( struct bwb_line *l );
- Xextern struct bwb_line *bwb_load( struct bwb_line *l );
- Xextern struct bwb_line *bwb_merge( struct bwb_line *l );
- Xextern struct bwb_line *bwb_chain( struct bwb_line *l );
- Xextern struct bwb_line *bwb_common( struct bwb_line *l );
- Xextern struct bwb_line *bwb_xload( struct bwb_line *l );
- Xextern struct bwb_line *bwb_new( struct bwb_line *l );
- Xextern struct bwb_line *bwb_save( struct bwb_line *l );
- Xextern struct bwb_line *bwb_list( struct bwb_line *l );
- Xextern struct bwb_line *bwb_xlist( struct bwb_line *l, FILE *file );
- Xextern struct bwb_line *bwb_go( struct bwb_line *l );
- Xextern struct bwb_line *bwb_goto( struct bwb_line *l );
- Xextern struct bwb_line *bwb_gosub( struct bwb_line *l );
- Xextern struct bwb_line *bwb_return( struct bwb_line *l );
- Xextern struct bwb_line *bwb_xend( struct bwb_line *l );
- Xextern struct bwb_line *bwb_system( struct bwb_line *l );
- Xextern struct bwb_line *bwb_tron( struct bwb_line *l );
- Xextern struct bwb_line *bwb_troff( struct bwb_line *l );
- Xextern struct bwb_line *bwb_randomize( struct bwb_line *l );
- Xextern struct bwb_line *bwb_stop( struct bwb_line *l );
- Xextern struct bwb_line *bwb_data( struct bwb_line *l );
- Xextern struct bwb_line *bwb_read( struct bwb_line *l );
- Xextern struct bwb_line *bwb_restore( struct bwb_line *l );
- Xextern struct bwb_line *bwb_delete( struct bwb_line *l );
- Xextern struct bwb_line *bwb_if( struct bwb_line *l );
- Xextern struct bwb_line *bwb_else( struct bwb_line *l );
- Xextern struct bwb_line *bwb_elseif( struct bwb_line *l );
- Xextern struct bwb_line *bwb_select( struct bwb_line *l );
- Xextern struct bwb_line *bwb_case( struct bwb_line *l );
- Xextern struct bwb_line *bwb_endselect( struct bwb_line *l );
- Xextern struct bwb_line *bwb_endif( struct bwb_line *l );
- Xextern struct bwb_line *bwb_while( struct bwb_line *l );
- Xextern struct bwb_line *bwb_wend( struct bwb_line *l );
- Xextern struct bwb_line *bwb_for( struct bwb_line *l );
- Xextern struct bwb_line *bwb_next( struct bwb_line *l );
- Xextern struct bwb_line *bwb_dim( struct bwb_line *l );
- Xextern struct bwb_line *bwb_option( struct bwb_line *l );
- Xextern struct bwb_line *bwb_open( struct bwb_line *l );
- Xextern struct bwb_line *bwb_close( struct bwb_line *l );
- Xextern struct bwb_line *bwb_get( struct bwb_line *l );
- Xextern struct bwb_line *bwb_put( struct bwb_line *l );
- Xextern struct bwb_line *bwb_rmdir( struct bwb_line *l );
- Xextern struct bwb_line *bwb_chdir( struct bwb_line *l );
- Xextern struct bwb_line *bwb_mkdir( struct bwb_line *l );
- Xextern struct bwb_line *bwb_kill( struct bwb_line *l );
- Xextern struct bwb_line *bwb_name( struct bwb_line *l );
- Xextern struct bwb_line *bwb_rset( struct bwb_line *l );
- Xextern struct bwb_line *bwb_lset( struct bwb_line *l );
- Xextern struct bwb_line *bwb_field( struct bwb_line *l );
- Xextern struct bwb_line *bwb_on( struct bwb_line *l );
- Xextern struct bwb_line *bwb_line( struct bwb_line *l );
- Xextern struct bwb_line *bwb_ddbl( struct bwb_line *l );
- Xextern struct bwb_line *bwb_dint( struct bwb_line *l );
- Xextern struct bwb_line *bwb_dsng( struct bwb_line *l );
- Xextern struct bwb_line *bwb_dstr( struct bwb_line *l );
- Xextern struct bwb_line *bwb_clear( struct bwb_line *l );
- Xextern struct bwb_line *bwb_erase( struct bwb_line *l );
- Xextern struct bwb_line *bwb_swap( struct bwb_line *l );
- Xextern struct bwb_line *bwb_environ( struct bwb_line *l );
- Xextern struct bwb_line *bwb_width( struct bwb_line *l );
- Xextern struct bwb_line *bwb_write( struct bwb_line *l );
- Xextern struct bwb_line *bwb_edit( struct bwb_line *l );
- Xextern struct bwb_line *bwb_files( struct bwb_line *l );
- Xextern struct bwb_line *bwb_do( struct bwb_line *l );
- Xextern struct bwb_line *bwb_doloop( struct bwb_line *l );
- Xextern struct bwb_line *bwb_cls( struct bwb_line *l );
- Xextern struct bwb_line *bwb_locate( struct bwb_line *l );
- Xextern struct bwb_line *bwb_color( struct bwb_line *l );
- Xextern struct bwb_line *bwb_do( struct bwb_line *l );
- Xextern struct bwb_line *bwb_loop( struct bwb_line *l );
- Xextern struct bwb_line *bwb_exit( struct bwb_line *l );
- Xextern struct bwb_line *bwb_exitfor( struct bwb_line *l );
- Xextern struct bwb_line *bwb_exitdo( struct bwb_line *l );
- X
- Xextern struct bwb_line *bwb_zline( struct bwb_line *l );
- X
- Xextern void bwb_incexec( void );
- Xextern void bwb_decexec( void );
- Xextern int bwb_setexec( struct bwb_line *l, int position, int code );
- Xextern int bwb_getcnd( char *lb, char *lhs, char *rhs, char *op, int *n );
- Xextern int bwb_getlhs( char *lb, char *lhs, int *n );
- Xextern int bwb_getop( char *lb, char *op, int *n );
- Xextern int bwb_getrhs( char *lb, char *rhs, int *n );
- Xextern int bwb_evalcnd( char *lhs, char *rhs, char *op );
- Xextern int bwb_isstr( char *b );
- Xextern int eval_int( int l, int r, char *op );
- Xextern int eval_sng( float l, float r, char *op );
- Xextern int eval_dbl( double l, double r, char *op );
- Xextern struct exp_ese *bwb_exp( char *expression, int assignment, int *position );
- Xextern int exp_getvfname( char *source, char *destination );
- Xextern int exp_operation( int entry_level );
- Xextern int inc_esc( void );
- Xextern int dec_esc( void );
- Xextern int fnc_init( int task );
- Xextern struct bwb_function *fnc_find( char *buffer );
- Xextern struct bwb_line *bwb_def( struct bwb_line *l );
- Xextern int bwb_getargs( char *buffer );
- Xextern int bwb_stripcr( char *s );
- Xextern int bwb_numseq( char *buffer, int *start, int *end );
- Xextern int bwb_freeline( struct bwb_line *l );
- Xextern struct bwb_line *bwb_print( struct bwb_line *l );
- Xextern int bwb_xprint( struct bwb_line *l, FILE *f );
- Xextern int bwb_eltype( char *l_buffer, int p );
- Xextern int var_init( int task );
- Xextern int fslt_init( int task );
- Xextern int var_delcvars( void );
- Xextern struct bwb_variable *var_new( char *name );
- Xextern struct bwb_variable *var_islocal( char *buffer );
- Xextern int bwb_strel( char *lb, char *sb, int *n );
- Xextern struct bwb_variable *bwb_numel( char *lb, int *n );
- Xextern int bwb_const( char *lb, char *sb, int *n );
- Xextern int bwb_getvarname( char *lb, char *sb, int *n );
- Xextern struct bwb_variable *var_find( char *buffer );
- Xextern int bwb_isvar( char *buffer );
- Xextern struct bwb_line *bwb_input( struct bwb_line *l );
- Xextern int inp_adv( char *b, int *c );
- Xextern int var_make( struct bwb_variable *v, int type );
- Xextern bstring *var_getsval( struct bwb_variable *nvar );
- Xextern bstring *var_findsval( struct bwb_variable *v, int *pp );
- Xextern bstring *exp_getsval( struct exp_ese *e );
- Xextern int dim_getparams( char *buffer, int *pos, int *n_params, int **pp );
- Xextern int adv_element( char *buffer, int *pos, char *element );
- Xextern int adv_ws( char *buffer, int *pos );
- X#if MULTISEG_LINES
- Xextern int adv_eos( char *buffer, int *pos );
- X#endif
- Xextern int line_start( char *buffer, int *pos, int *lnpos, int *lnum,
- X int *cmdpos, int *cmdnum, int *startpos );
- Xextern int is_cmd( char *buffer, int *cmdnum );
- Xextern int is_let( char *buffer, int *cmdnum );
- Xextern int is_eol( char *buffer, int *position );
- Xextern int is_numconst( char *buffer );
- Xextern int is_label( char *buffer );
- Xextern struct bwb_line * find_label( char *buffer );
- Xextern struct bwb_line *find_loop( struct bwb_line *l );
- Xextern int int_qmdstr( char *buffer_a, char *buffer_b );
- Xextern struct bwb_line * cnd_xpline( struct bwb_line *l, char *buffer );
- Xextern int scan_element( char *buffer, int *pos, char *element );
- X
- Xextern int prn_precision( struct bwb_variable *v );
- Xextern int * prn_getcol( FILE *f );
- Xextern int prn_getwidth( FILE *f );
- Xextern int prn_xprintf( FILE *f, char *buffer );
- Xextern int bwb_strtoupper( char *buffer );
- Xextern int getcmdnum( char *cmdstr );
- X
- Xextern int str_btoc( char *buffer, bstring *s );
- Xextern int str_btob( bstring *d, bstring *s );
- Xextern int str_ctob( bstring *s, char *buffer );
- Xextern int str_cmp( bstring *s, bstring *t );
- Xextern char * str_cat( bstring *s, bstring *t );
- Xextern int exp_findop( char *expression );
- Xextern int exp_isop( char *expression );
- Xextern int exp_isfn( char *expression );
- Xextern int exp_isufn( char *expression );
- Xextern int exp_isnc( char *expression );
- Xextern int exp_isvn( char *expression );
- Xextern int exp_iscmd( char *expression );
- Xextern int exp_paren( char *expression );
- Xextern int exp_strconst( char *expression );
- Xextern int exp_numconst( char *expression );
- Xextern int exp_function( char *expression );
- Xextern int exp_ufnc( char *expression );
- Xextern int exp_variable( char *expression );
- Xextern int exp_validarg( char *expression );
- Xextern int ln_asbuf( struct bwb_line *l, char *s );
- Xextern int xputc( FILE *f, char c );
- Xextern int bwx_signon( void );
- Xextern int bwx_message( char *m );
- Xextern int bwx_putc( char c );
- Xextern int bwx_errmes( char *m );
- Xextern int bwx_input( char *prompt, char *buffer );
- Xextern void bwx_terminate( void );
- X
- X#if COMMAND_SHELL
- Xextern int bwx_shell( struct bwb_line *l );
- X#endif
- X
- Xint bwb_scan( void );
- Xstruct bwb_line *bwb_call( struct bwb_line *l );
- Xstruct bwb_line *bwb_sub( struct bwb_line *l );
- Xstruct bwb_line *bwb_endsub( struct bwb_line *l );
- Xstruct bwb_line *bwb_endfnc( struct bwb_line *l );
- Xstruct bwb_line *bwb_function( struct bwb_line *l );
- X
- Xextern bnumber var_getnval( struct bwb_variable *nvar );
- Xextern bnumber *var_findnval( struct bwb_variable *v, int *pp );
- Xextern bnumber exp_getnval( struct exp_ese *e );
- Xextern bnumber *exp_findnval( struct exp_ese *e );
- X
- X#if PARACT
- Xextern int bwb_newtask( int task_requested );
- X#endif
- X
- X#if INTERACTIVE
- Xextern int bwb_interact( void );
- X#endif
- X
- X#if DEBUG
- Xextern int bwb_debug( char *message );
- Xextern struct bwb_line *bwb_cmds( struct bwb_line *l );
- Xextern struct bwb_line *bwb_vars( struct bwb_line *l );
- Xextern struct bwb_line *bwb_fncs( struct bwb_line *l );
- X#endif
- X
- X#ifdef ALLOW_RENUM
- Xextern struct bwb_line *bwb_renum( struct bwb_line *l );
- X#endif
- X
- X#if UNIX_CMDS
- Xextern int rmdir( char *path );
- Xextern int chdir( char *path );
- X#if MKDIR_ONE_ARG
- Xextern int mkdir( char *path );
- X#else
- Xextern int mkdir( char *path, unsigned short permissions );
- X#endif
- X#endif
- X
- X/* declarations of function commands */
- X
- Xextern struct bwb_variable *fnc_null( int argc, struct bwb_variable *argv, int unique_id );
- X#if COMPRESS_FUNCS
- Xextern struct bwb_variable *fnc_core( int argc, struct bwb_variable *argv, int unique_id );
- X#else
- Xextern struct bwb_variable *fnc_abs( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_atn( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_cos( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_log( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_sin( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_sqr( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_sgn( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_int( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_rnd( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_exp( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_tan( int argc, struct bwb_variable *argv, int unique_id );
- X#endif
- Xextern struct bwb_variable *fnc_tab( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_date( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_time( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_chr( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_mid( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_left( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_right( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_timer( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_val( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_len( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_hex( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_oct( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_cint( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_asc( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_mkd( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_mki( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_mks( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_cvi( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_cvd( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_cvs( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable *fnc_string( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_spc( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_space( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_environ( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_pos( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_err( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_erl( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_loc( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_lof( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_eof( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_csng( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_instr( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_str( int argc, struct bwb_variable *argv, int unique_id );
- Xextern struct bwb_variable * fnc_inkey( int argc, struct bwb_variable *argv, int unique_id );
- X
- Xextern bnumber trnc_int( bnumber x );
- Xextern int fnc_checkargs( int argc, struct bwb_variable *argv,
- X int min, int max );
- Xextern int ufsc; /* user function stack counter */
- X
- X#if DEBUG
- Xextern struct bwb_variable *fnc_test( int argc, struct bwb_variable *argv, int unique_id );
- X#endif
- X
- X#else /* ANSI_C */
- X
- Xextern void bwb_init();
- Xextern int bwb_fload();
- Xextern int bwb_ladd();
- Xextern int bwb_findcmd();
- Xextern struct bwb_line *bwb_xtxtline();
- Xextern void bwb_mainloop();
- Xextern void bwb_execline();
- Xextern int bwb_gets();
- Xextern int bwb_error();
- Xextern void break_handler();
- Xextern void break_mes();
- Xextern struct bwb_line *bwb_null();
- Xextern struct bwb_line *bwb_rem();
- Xextern struct bwb_line *bwb_lerror();
- Xextern struct bwb_line *bwb_run();
- Xextern struct bwb_line *bwb_let();
- Xextern struct bwb_line *bwb_load();
- Xextern struct bwb_line *bwb_merge();
- Xextern struct bwb_line *bwb_chain();
- Xextern struct bwb_line *bwb_common();
- Xextern struct bwb_line *bwb_xload();
- Xextern struct bwb_line *bwb_new();
- Xextern struct bwb_line *bwb_save();
- Xextern struct bwb_line *bwb_list();
- Xextern struct bwb_line *bwb_xlist();
- Xextern struct bwb_line *bwb_go();
- Xextern struct bwb_line *bwb_goto();
- Xextern struct bwb_line *bwb_gosub();
- Xextern struct bwb_line *bwb_return();
- Xextern struct bwb_line *bwb_xend();
- Xextern struct bwb_line *bwb_system();
- Xextern struct bwb_line *bwb_tron();
- Xextern struct bwb_line *bwb_troff();
- Xextern struct bwb_line *bwb_randomize();
- Xextern struct bwb_line *bwb_stop();
- Xextern struct bwb_line *bwb_data();
- Xextern struct bwb_line *bwb_read();
- Xextern struct bwb_line *bwb_restore();
- Xextern struct bwb_line *bwb_delete();
- Xextern struct bwb_line *bwb_if();
- Xextern struct bwb_line *bwb_else();
- Xextern struct bwb_line *bwb_elseif();
- Xextern struct bwb_line *bwb_select();
- Xextern struct bwb_line *bwb_case();
- Xextern struct bwb_line *bwb_endselect();
- Xextern struct bwb_line *bwb_endif();
- Xextern struct bwb_line *bwb_while();
- Xextern struct bwb_line *bwb_wend();
- Xextern struct bwb_line *bwb_for();
- Xextern struct bwb_line *bwb_next();
- Xextern struct bwb_line *bwb_dim();
- Xextern struct bwb_line *bwb_option();
- Xextern struct bwb_line *bwb_open();
- Xextern struct bwb_line *bwb_close();
- Xextern struct bwb_line *bwb_get();
- Xextern struct bwb_line *bwb_put();
- Xextern struct bwb_line *bwb_rmdir();
- Xextern struct bwb_line *bwb_chdir();
- Xextern struct bwb_line *bwb_mkdir();
- Xextern struct bwb_line *bwb_kill();
- Xextern struct bwb_line *bwb_name();
- Xextern struct bwb_line *bwb_rset();
- Xextern struct bwb_line *bwb_lset();
- Xextern struct bwb_line *bwb_field();
- Xextern struct bwb_line *bwb_on();
- Xextern struct bwb_line *bwb_line();
- Xextern struct bwb_line *bwb_ddbl();
- Xextern struct bwb_line *bwb_dint();
- Xextern struct bwb_line *bwb_dsng();
- Xextern struct bwb_line *bwb_dstr();
- Xextern struct bwb_line *bwb_clear();
- Xextern struct bwb_line *bwb_erase();
- Xextern struct bwb_line *bwb_swap();
- Xextern struct bwb_line *bwb_environ();
- Xextern struct bwb_line *bwb_width();
- Xextern struct bwb_line *bwb_write();
- Xextern struct bwb_line *bwb_edit();
- Xextern struct bwb_line *bwb_files();
- Xextern struct bwb_line *bwb_do();
- Xextern struct bwb_line *bwb_doloop();
- Xextern struct bwb_line *bwb_cls();
- Xextern struct bwb_line *bwb_locate();
- Xextern struct bwb_line *bwb_color();
- Xextern struct bwb_line *bwb_do();
- Xextern struct bwb_line *bwb_loop();
- Xextern struct bwb_line *bwb_exit();
- Xextern struct bwb_line *bwb_exitfor();
- Xextern struct bwb_line *bwb_exitdo();
- X
- Xextern struct bwb_line *bwb_zline();
- X
- Xextern void bwb_incexec();
- Xextern void bwb_decexec();
- Xextern int bwb_setexec();
- Xextern int bwb_getcnd();
- Xextern int bwb_getlhs();
- Xextern int bwb_getop();
- Xextern int bwb_getrhs();
- Xextern int bwb_evalcnd();
- Xextern int bwb_isstr();
- Xextern int eval_int();
- Xextern int eval_sng();
- Xextern int eval_dbl();
- Xextern struct exp_ese *bwb_exp();
- Xextern int exp_getvfname();
- Xextern int exp_operation();
- Xextern int inc_esc();
- Xextern int dec_esc();
- Xextern int fnc_init();
- Xextern struct bwb_function *fnc_find();
- Xextern struct bwb_line *bwb_def();
- Xextern int bwb_getargs();
- Xextern int bwb_stripcr();
- Xextern int bwb_numseq();
- Xextern int bwb_freeline();
- Xextern struct bwb_line *bwb_print();
- Xextern int bwb_xprint();
- Xextern int bwb_eltype();
- Xextern int var_init();
- Xextern int fslt_init();
- Xextern int var_delcvars();
- Xextern struct bwb_variable *var_new();
- Xextern struct bwb_variable *var_islocal();
- Xextern int bwb_strel();
- Xextern struct bwb_variable *bwb_numel();
- Xextern int bwb_const();
- Xextern int bwb_getvarname();
- Xextern struct bwb_variable *var_find();
- Xextern int bwb_isvar();
- Xextern struct bwb_line *bwb_input();
- Xextern int inp_adv();
- Xextern int var_make();
- Xextern bstring *var_getsval();
- Xextern bstring *var_findsval();
- Xextern bstring *exp_getsval();
- Xextern int dim_getparams();
- Xextern int adv_element();
- Xextern int adv_ws();
- X#if MULTISEG_LINES
- Xextern int adv_eos();
- X#endif
- Xextern int line_start();
- Xextern int is_cmd();
- Xextern int is_let();
- Xextern int is_eol();
- Xextern int is_numconst();
- Xextern int is_label();
- Xextern struct bwb_line * find_label();
- Xextern struct bwb_line *find_loop();
- Xextern int int_qmdstr();
- Xextern struct bwb_line * cnd_xpline();
- Xextern int scan_element();
- X
- Xextern int prn_precision();
- Xextern int * prn_getcol();
- Xextern int prn_getwidth();
- Xextern int prn_xprintf();
- Xextern int bwb_strtoupper();
- Xextern int getcmdnum();
- X
- Xextern int str_btoc();
- Xextern int str_btob();
- Xextern int str_ctob();
- Xextern int str_cmp();
- Xextern char * str_cat();
- Xextern int exp_findop();
- Xextern int exp_isop();
- Xextern int exp_isfn();
- Xextern int exp_isufn();
- Xextern int exp_isnc();
- Xextern int exp_isvn();
- Xextern int exp_iscmd();
- Xextern int exp_paren();
- Xextern int exp_strconst();
- Xextern int exp_numconst();
- Xextern int exp_function();
- Xextern int exp_ufnc();
- Xextern int exp_variable();
- Xextern int exp_validarg();
- Xextern int ln_asbuf();
- Xextern int xputc();
- Xextern int bwx_signon();
- Xextern int bwx_message();
- Xextern int bwx_putc();
- Xextern int bwx_errmes();
- Xextern int bwx_input();
- Xextern void bwx_terminate();
- X
- X#if COMMAND_SHELL
- Xextern int bwx_shell();
- X#endif
- X
- Xint bwb_scan();
- Xstruct bwb_line *bwb_call();
- Xstruct bwb_line *bwb_sub();
- Xstruct bwb_line *bwb_endsub();
- Xstruct bwb_line *bwb_endfnc();
- Xstruct bwb_line *bwb_function();
- X
- Xextern bnumber var_getnval();
- Xextern bnumber *var_findnval();
- Xextern bnumber exp_getnval();
- Xextern bnumber *exp_findnval();
- X
- X#if PARACT
- Xextern int bwb_newtask();
- X#endif
- X
- X#if INTERACTIVE
- Xextern int bwb_interact();
- X#endif
- X
- X#if DEBUG
- Xextern int bwb_debug();
- Xextern struct bwb_line *bwb_cmds();
- Xextern struct bwb_line *bwb_vars();
- Xextern struct bwb_line *bwb_fncs();
- X#endif
- X
- X#ifdef ALLOW_RENUM
- Xextern struct bwb_line *bwb_renum();
- X#endif
- X
- X#if UNIX_CMDS
- Xextern int rmdir();
- Xextern int chdir();
- X#if MKDIR_ONE_ARG
- Xextern int mkdir();
- X#else
- Xextern int mkdir();
- X#endif
- X#endif
- X
- X/* declarations of function commands */
- X
- Xextern struct bwb_variable *fnc_null();
- X#if COMPRESS_FUNCS
- Xextern struct bwb_variable *fnc_core();
- X#else
- Xextern struct bwb_variable *fnc_abs();
- Xextern struct bwb_variable *fnc_atn();
- Xextern struct bwb_variable *fnc_cos();
- Xextern struct bwb_variable *fnc_log();
- Xextern struct bwb_variable *fnc_sin();
- Xextern struct bwb_variable *fnc_sqr();
- Xextern struct bwb_variable *fnc_sgn();
- Xextern struct bwb_variable *fnc_int();
- Xextern struct bwb_variable *fnc_rnd();
- Xextern struct bwb_variable *fnc_exp();
- Xextern struct bwb_variable *fnc_tan();
- X#endif
- Xextern struct bwb_variable *fnc_tab();
- Xextern struct bwb_variable *fnc_date();
- Xextern struct bwb_variable *fnc_time();
- Xextern struct bwb_variable *fnc_chr();
- Xextern struct bwb_variable *fnc_mid();
- Xextern struct bwb_variable *fnc_left();
- Xextern struct bwb_variable *fnc_right();
- Xextern struct bwb_variable *fnc_timer();
- Xextern struct bwb_variable *fnc_val();
- Xextern struct bwb_variable *fnc_len();
- Xextern struct bwb_variable *fnc_hex();
- Xextern struct bwb_variable *fnc_oct();
- Xextern struct bwb_variable *fnc_cint();
- Xextern struct bwb_variable *fnc_asc();
- Xextern struct bwb_variable *fnc_mkd();
- Xextern struct bwb_variable *fnc_mki();
- Xextern struct bwb_variable *fnc_mks();
- Xextern struct bwb_variable *fnc_cvi();
- Xextern struct bwb_variable *fnc_cvd();
- Xextern struct bwb_variable *fnc_cvs();
- Xextern struct bwb_variable *fnc_string();
- Xextern struct bwb_variable * fnc_spc();
- Xextern struct bwb_variable * fnc_space();
- Xextern struct bwb_variable * fnc_environ();
- Xextern struct bwb_variable * fnc_pos();
- Xextern struct bwb_variable * fnc_err();
- Xextern struct bwb_variable * fnc_erl();
- Xextern struct bwb_variable * fnc_loc();
- Xextern struct bwb_variable * fnc_lof();
- Xextern struct bwb_variable * fnc_eof();
- Xextern struct bwb_variable * fnc_csng();
- Xextern struct bwb_variable * fnc_instr();
- Xextern struct bwb_variable * fnc_str();
- Xextern struct bwb_variable * fnc_inkey();
- X
- Xextern bnumber trnc_int();
- Xextern int fnc_checkargs();
- Xextern int ufsc; /* user function stack counter */
- X
- X#if DEBUG
- Xextern struct bwb_variable *fnc_test();
- X#endif
- X
- X#endif /* ANSI_C */
- X
- X#if COMPRESS_FUNCS
- X#define F_ABS 1
- X#define F_ATN 2
- X#define F_COS 3
- X#define F_EXP 4
- X#define F_INT 5
- X#define F_LOG 6
- X#define F_RND 7
- X#define F_SGN 8
- X#define F_SIN 9
- X#define F_SQR 10
- X#define F_TAN 11
- X#endif
- END_OF_FILE
- if test 54437 -ne `wc -c <'bwbasic-2.10/bwbasic.h'`; then
- echo shar: \"'bwbasic-2.10/bwbasic.h'\" unpacked with wrong size!
- fi
- # end of 'bwbasic-2.10/bwbasic.h'
- fi
- echo shar: End of archive 3 \(of 15\).
- cp /dev/null ark3isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 15 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-