home *** CD-ROM | disk | FTP | other *** search
- /*
- atbls1 -- Administrative module, Tables
-
- Copyright (c) 1983 by James F. Gimpel
- Copyright (c) 1983 by JMI Software Consultants, Inc.
-
- atbls1.c and atbls2.c contain tables of keywords and operators
- that will enable a user to add custom functions
- and statements and modify the meaning of operators.
- */
- #include "at.h"
- #include "ppd.h"
- #include "par.h"
-
- #define FUNC(result,params) result|tf_BFUN|((params)<<DT_SHIFT)
- #define FUNCLP(result,params) FUNC(result,params)|tf_LPAR
-
-
- GLOBAL TOKEN par_line = 0;
-
- /* kword_tbl :
- The following table contains all keywords (reserved words) other
- than statement names and operators
-
- It is headed by two definitions used to prepare function-type
- entries in the table. FUNC(result,params) defines a function
- returning a certain type (result) with a particular optional
- paramater list (params). The second form, FUNCLP(), insists
- that the keyword be followed by a Left Parenthesis. This is
- the form used for most function keywords in most versions of BASIC.
- */
-
-
- GLOBAL STRTOK kword_tbl[] =
- {
- /* This table must be kept in sorted order */
- "ABS", FUNCLP(dt_DBL, par_D), NO,
- "AND", op_AND, NO,
- "APPEND", t_APP, NO,
- "AS", t_AS, NO,
- "ASC", FUNCLP(dt_INT, par_S), YES,
- "ATN", FUNCLP(dt_DBL, par_D), NO,
- "BASE", t_BASE, NO,
- "BY", t_STEP, NO,
- "CDBL", tf_CAST|dt_DBL, NO,
- "CHR$", FUNCLP(dt_STR, par_TI), NO,
- "CINT", FUNCLP(dt_INT, par_D), YES,
- "COS", FUNCLP(dt_DBL, par_D), NO,
- "CSNG", tf_CAST|dt_FLOAT, NO,
- "CSRLIN", FUNC(dt_INT, par_NARG), NO,
- "CVD", FUNCLP(dt_DBL, par_S), NO,
- "CVI", FUNCLP(dt_INT, par_S), NO,
- "CVS", FUNCLP(dt_FLOAT, par_S), NO,
- "DATE$", FUNC(dt_STR, par_TNARG), NO,
- "ELSE", t_ELSE, NO,
- "END", t_END, NO,
- "EOF", FUNCLP(dt_BOOL, par_I), NO,
- "EQV", op_EQV, NO,
- "ERL", FUNC(dt_INT, par_NARG), NO,
- "ERR", FUNC(dt_INT, par_NARG), NO,
- "ERROR", t_ERROR, NO,
- "EXP", FUNCLP(dt_DBL, par_D), YES,
- "FIX", FUNCLP(dt_DBL, par_D), NO,
- "FN", t_UFN|tf_PART, NO,
- "FOR", t_FOR, NO,
- "FRE", FUNC(dt_DBL, par_OPT), NO,
- "GOSUB", t_GOSUB, NO,
- "GOTO", t_GOTO, NO,
- "HEX$", FUNCLP(dt_STR, par_TD), NO,
- "IMP", op_IMP, NO,
- "INKEY$", FUNCLP(dt_STR, par_TNARG), NO,
- "INP", FUNCLP(dt_INT,par_BU), NO,
- "INPUT", t_INPUT, NO,
- "INPUT$", FUNCLP(dt_STR,par_INP), YES,
- "INSTR", FUNCLP(dt_INT, par_INSTR), YES,
- "INT", FUNCLP(dt_DBL, par_D), NO,
- "LEFT$", FUNCLP(dt_STR, par_TSI), YES,
- "LEN", FUNCLP(dt_INT, par_S), NO,
- "LOC", FUNCLP(dt_INT, par_I), YES,
- "LOF", FUNCLP(dt_DBL, par_I), YES,
- "LOG", FUNCLP(dt_DBL, par_D), YES,
- "LPOS", FUNCLP(dt_INT, par_I), NO,
- "MID$", FUNCLP(dt_STR,par_MID), YES,
- "MKD$", FUNCLP(dt_STR, par_TD), NO,
- "MKI$", FUNCLP(dt_STR, par_TI), NO,
- "MKS$", FUNCLP(dt_STR, par_TD), NO,
- "MOD", op_MOD, NO,
- "NEXT", t_NEXT, NO,
- "NOT", op_NOT, NO,
- "OCT$", FUNCLP(dt_STR, par_TD), NO,
- "OR", op_OR, NO,
- "OUTPUT", t_OUT, NO,
- "PEEK", FUNCLP(dt_INT, par_BU), NO,
- "POS", FUNCLP(dt_INT, par_OPT), NO,
- "REM", t_REM, NO,
- "RIGHT$", FUNCLP(dt_STR, par_TSI), YES,
- "RND", FUNC(dt_DBL, par_RND), NO,
- "SGN", FUNCLP(dt_DBL, par_D), NO,
- "SIN", FUNCLP(dt_DBL, par_D), NO,
- "SPACE$", FUNCLP(dt_STR, par_TI), NO,
- "SPC", t_SPC, NO,
- "SQR", FUNCLP(dt_DBL, par_D), YES,
- "STEP", t_STEP, NO,
- "STR$", FUNCLP(dt_STR, par_TD), NO,
- "STRING$", FUNCLP(dt_STR, par_STR), NO,
- "TAB", t_TAB, NO,
- "TAN", FUNCLP(dt_DBL, par_D), NO,
- "THEN", t_THEN, NO,
- "TIME$", FUNC(dt_STR, par_TNARG), NO,
- "TIMER", FUNC(dt_DBL, par_NARG), NO,
- "TO", t_TO, NO,
- "USING", t_USING, NO,
- "USR", tf_PART|FUNC(dt_INT,par_FUSR), YES,
- "VAL", FUNCLP(dt_DBL, par_S), NO,
- "VARPTR", FUNCLP(dt_INT, par_VPTR), NO,
- "XOR", op_XOR, NO,
- };
-
- GLOBAL int num_kword = sizeof(kword_tbl)/sizeof(STRTOK);
-
- /* Statement Keyword Table --
-
- All statement types appear in the table below except for
- a LET-less assignment.
-
- */
-
- GLOBAL STRTOK
- stmt_key[] =
- {
- /* This table must be kept in sorted order */
- "BEEP", stf_GENERIC|par_NARG, NO,
- "CALL", st_CALL, NO,
- "CHAIN", stf_GENERIC|par_XS, YES,
- "CLEAR", stf_GENERIC|par_CLEAR, YES,
- "CLOSE", stf_GENERIC|par_BINF, NO,
- "CLS", stf_GENERIC|par_NARG, NO,
- "COLOR", stf_GENERIC|par_3OINT, NO,
- "COMMON", st_COMMON, NO,
- "CVMODE", stf_GENERIC|par_XS, YES,
- "DATA", st_DATA, NO,
- "DATE$", stf_GENERIC|par_DATE, YES,
- "DEF", st_DEF, NO,
- "DEFDBL", st_DDBL, NO,
- "DEFINT", st_DINT, NO,
- "DEFSNG", st_DSNG, NO,
- "DEFSTR", st_DSTR, NO,
- "DIM", st_DIM, NO,
- "ELSE", st_ELSE, NO,
- "END", st_END, NO,
- "ERASE", st_ERASE, NO,
- "ERROR", stf_GENERIC|par_XI, YES,
- "FIELD", st_FIELD, YES,
- "FILES", stf_GENERIC|par_SOPT, NO,
- "FOR", st_FOR, NO,
- "GET", stf_GENERIC|par_GET, YES,
- "GOSUB", st_GOSUB, NO,
- "GOTO", st_GOTO, NO,
- "IF", st_IF, NO,
- "INPUT", st_INPUT, YES,
- "KILL", stf_GENERIC|par_XS, YES,
- "LET", st_LET, NO,
- "LINE", st_LINE, YES,
- "LOCATE", stf_GENERIC|par_5OINT, YES,
- "LOCK", stf_GENERIC|par_LOCK, YES,
- "LPRINT", st_LPRINT, YES,
- "LSET", stf_GENERIC|par_LSET, NO,
- "MID$", stf_GENERIC|par_MDST, YES,
- "NAME", stf_GENERIC|par_NAME, YES,
- "NEW", st_END, NO,
- "NEXT", st_NEXT, NO,
- "ON", st_ON, NO,
- "OPEN", stf_GENERIC|par_OPEN, YES,
- "OPTION", st_OPTION, NO,
- "OUT", stf_GENERIC|par_XUI, NO,
- "POKE", stf_GENERIC|par_BXUI, NO,
- "PRINT", st_PRINT, YES,
- "PRINT@", st_PRAT, YES,
- "PUT", stf_GENERIC|par_GET, YES,
- "RANDOMIZE", stf_GENERIC|par_RAN, NO,
- "READ", st_READ, YES,
- "REM", st_REM, NO,
- "RESET", stf_GENERIC|par_NARG, NO,
- "RESTORE", stf_GENERIC|par_X1OINT, NO,
- "RESUME", st_RESUME, NO,
- "RETURN", st_RET, NO,
- "RSET", stf_GENERIC|par_LSET, NO,
- "RUN", st_RUN, YES,
- "SHELL", stf_GENERIC|par_SHELL, NO,
- "SPOOL", stf_GENERIC|par_NARG, NO,
- "STOP", stf_GENERIC|par_LNUM, NO,
- "SWAP", st_SWAP, NO,
- "SYSTEM", st_END, NO,
- "TIME$", stf_GENERIC|par_DATE, YES,
- "TROFF", stf_GENERIC|par_NARG, NO,
- "TRON", stf_GENERIC|par_NARG, NO,
- "UNLOCK", stf_GENERIC|par_UNLK, YES,
- "WAIT", stf_GENERIC|par_WAIT, NO,
- "WEND", st_WEND, NO,
- "WHILE", st_WHILE, NO,
- "WIDTH", stf_GENERIC|par_WIDTH, YES,
- "WRITE", st_WRITE, YES,
- } ;
-
- GLOBAL int num_stmt_key = sizeof(stmt_key) / sizeof(STRTOK);
-
- /* DEF Extensions -- If the statement is DEF we must then
- examine this table.
- */
-
- GLOBAL STRTOK def_ext[] =
- {
- "SEG", stf_GENERIC|tf_PART|par_SEG, YES,
- "USR", stf_GENERIC|tf_PART|par_USR, YES,
- };
-
- GLOBAL int num_dext = sizeof(def_ext) / sizeof(STRTOK);
-
-
-
- /* Special but unreserved Identifiers. Eg.
-
- RUN file[,R]
-
- where R must be recognized but not reserved.
- */
-
- GLOBAL STRTOK id_tbl[] =
- {
- "APPEND", TAPP, NO,
- "AS", TAS, NO,
- "FOR", TFOR, NO,
- "INPUT", TINP, NO,
- "LEN", TLEN, NO,
- "OUTPUT", TOUT, NO,
- "R", TR, NO,
- "READ", TRD, NO,
- "TO", TTO, NO,
- "WAIT", TWT, NO,
- "WIDTH", TWID, NO,
- };
-
- GLOBAL int num_id = sizeof(id_tbl)/sizeof(STRTOK);
-