542 lines
37 KiB
C
542 lines
37 KiB
C
/*
|
|
* Copyright (C) 2001, 2000, 1999, Rildo Pragana, David Essex.
|
|
* Copyright (C) 1993, 1991 Rildo Pragana.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this software; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
* Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#include "htcoboly.h"
|
|
#include "htcobol.tab.h"
|
|
#include "reswords.h"
|
|
#include "htcoblib.h"
|
|
|
|
struct reserved_symbol reserved_symbols[] = {
|
|
{"<", CONDITIONAL, LESS, TCOB_KW_STD},
|
|
{"<=", CONDITIONAL, LEQ, TCOB_KW_STD85},
|
|
{"<>", CONDITIONAL, NEQ, TCOB_KW_STD},
|
|
{"=", CONDITIONAL, EQUAL, TCOB_KW_STD},
|
|
{">", CONDITIONAL, GREATER, TCOB_KW_STD},
|
|
{">=", CONDITIONAL, GEQ, TCOB_KW_STD85},
|
|
{"ACCEPT", ACCEPT, 0, TCOB_KW_STD},
|
|
{"ACCESS", ACCESS, 0, TCOB_KW_STD},
|
|
{"ADD", ADD, 0, TCOB_KW_STD},
|
|
{"ADDRESS", ADDRESS, 0, TCOB_KW_STD85},
|
|
{"ADVANCING", ADVANCING, 0, TCOB_KW_STD},
|
|
{"AFTER", AFTER, 0, TCOB_KW_STD},
|
|
{"ALL", ALL, 0, TCOB_KW_STD},
|
|
{"ALPHABET", ALPHABET, 0, TCOB_KW_STD85},
|
|
{"ALPHABETIC", ALPHABETIC, 0, TCOB_KW_STD},
|
|
{"ALPHABETIC-LOWER", ALPHABETIC_LOWER, 0, TCOB_KW_STD},
|
|
{"ALPHABETIC-UPPER", ALPHABETIC_UPPER, 0, TCOB_KW_STD},
|
|
{"ALPHANUMERIC", ALPHANUMERIC, 0, TCOB_KW_STD85},
|
|
{"ALPHANUMERIC-EDITED", ALPHANUMERIC_EDITED, 0, TCOB_KW_STD85},
|
|
{"ALSO", ALSO, 0, TCOB_KW_STD},
|
|
{"ALTERNATE", ALTERNATE, 0, TCOB_KW_STD},
|
|
{"AND", AND, 0, TCOB_KW_STD},
|
|
{"ANY", ANY, 0, TCOB_KW_STD85},
|
|
{"ARE", ARE, 0, TCOB_KW_STD},
|
|
{"AREA", AREA, 0, TCOB_KW_STD},
|
|
{"AREAS", AREAS, 0, TCOB_KW_STD},
|
|
{"ASCENDING", DIRECTION, ASCENDING, TCOB_KW_STD},
|
|
{"ASSIGN", ASSIGN, 0, TCOB_KW_STD},
|
|
{"AT", AT, 0, TCOB_KW_STD},
|
|
{"AUTHOR", AUTHOR, 0, TCOB_KW_STD},
|
|
{"AUTO", AUTO, 0, TCOB_KW_STD},
|
|
{"BACKGROUND-COLOR", BACKGROUNDCOLOR, 0, TCOB_KW_STD},
|
|
{"BEFORE", BEFORE, 0, TCOB_KW_STD},
|
|
{"BELL", BELL, 0, TCOB_KW_STD85},
|
|
{"BINARY", USAGENUM, USAGE_COMP, TCOB_KW_STD85},
|
|
{"BINARY-CHAR", USAGENUM, USAGE_BINARY_CHAR, TCOB_KW_STD2},
|
|
{"BINARY-DOUBLE", USAGENUM, USAGE_BINARY_DOUBLE, TCOB_KW_STD2},
|
|
{"BINARY-LONG", USAGENUM, USAGE_BINARY_LONG, TCOB_KW_STD2},
|
|
{"BINARY-SHORT", USAGENUM, USAGE_BINARY_SHORT, TCOB_KW_STD2},
|
|
{"BLANK", BLANK, 0, TCOB_KW_STD},
|
|
{"BLINK", BLINK, 0, TCOB_KW_STD},
|
|
{"BLOCK", BLOCK, 0, TCOB_KW_STD},
|
|
{"BOTTOM", BOTTOM, 0, TCOB_KW_STD},
|
|
{"BY", BY, 0, TCOB_KW_STD},
|
|
{"CALL", CALL, 0, TCOB_KW_STD},
|
|
{"CALL-LOADLIB", CALL_LOADLIB, 0, TCOB_KW_TCEXT},
|
|
{"CANCEL", CANCEL, 0, TCOB_KW_STD},
|
|
{"CDECL", CALL_CONV_C, 0, TCOB_KW_TCEXT},
|
|
{"CENTER", CENTER, 0, TCOB_KW_STD2},
|
|
{"CF", CF, 0, TCOB_KW_STD},
|
|
{"CH", CH, 0, TCOB_KW_STD},
|
|
{"CHAIN", CHAIN, 0, TCOB_KW_TCEXT},
|
|
{"CHAINING", CHAINING, 0, TCOB_KW_STD85},
|
|
{"CHARACTER", CHARACTER, 0, TCOB_KW_STD},
|
|
{"CHARACTERS", CHARACTERS, 0, TCOB_KW_STD},
|
|
{"CLASS", CLASS, 0, TCOB_KW_STD85},
|
|
{"CLOSE", CLOSE, 0, TCOB_KW_STD},
|
|
{"CODE", CODE, 0, TCOB_KW_STD},
|
|
{"CODE-SET", CODE_SET, 0, TCOB_KW_STD},
|
|
{"COL", COLUMN, 0, TCOB_KW_STD},
|
|
{"COLS", COLUMNS, 0, TCOB_KW_STD2},
|
|
{"COLLATING", COLLATING, 0, TCOB_KW_STD},
|
|
{"COLOR", COLOR, 0, TCOB_KW_STD},
|
|
{"COLUMN", COLUMN, 0, TCOB_KW_STD},
|
|
{"COLUMNS", COLUMNS, 0, TCOB_KW_STD2},
|
|
{"COM1", PORTNUM, 8, TCOB_KW_TCEXT},
|
|
{"COM2", PORTNUM, 1, TCOB_KW_TCEXT},
|
|
{"COM3", PORTNUM, 2, TCOB_KW_TCEXT},
|
|
{"COM4", PORTNUM, 3, TCOB_KW_TCEXT},
|
|
{"COMMA", COMMA, 0, TCOB_KW_STD},
|
|
{"COMMAND-LINE", CMD_LINE, 0, TCOB_KW_TCEXT},
|
|
{"COMMON", COMMON, 0, TCOB_KW_STD85},
|
|
{"COMP", USAGENUM, USAGE_COMP, TCOB_KW_STD},
|
|
{"COMP-1", USAGENUM, USAGE_COMP1, TCOB_KW_STD},
|
|
{"COMP-2", USAGENUM, USAGE_COMP2, TCOB_KW_STD},
|
|
{"COMP-3", USAGENUM, USAGE_COMP3, TCOB_KW_TCEXT},
|
|
{"COMP-5", USAGENUM, USAGE_COMP5, TCOB_KW_TCEXT},
|
|
{"COMP-X", USAGENUM, USAGE_COMPX, TCOB_KW_STD},
|
|
{"COMPUTATIONAL", USAGENUM, USAGE_COMP, TCOB_KW_STD},
|
|
{"COMPUTATIONAL-1", USAGENUM, USAGE_COMP1, TCOB_KW_STD},
|
|
{"COMPUTATIONAL-2", USAGENUM, USAGE_COMP2, TCOB_KW_STD},
|
|
{"COMPUTATIONAL-3", USAGENUM, USAGE_COMP3, TCOB_KW_TCEXT},
|
|
{"COMPUTATIONAL-5", USAGENUM, USAGE_COMP5, TCOB_KW_TCEXT},
|
|
{"COMPUTATIONAL-X", USAGENUM, USAGE_COMPX, TCOB_KW_STD},
|
|
{"COMPUTE", COMPUTE, 0, TCOB_KW_STD},
|
|
{"CONFIGURATION", CONFIGURATION, 0, TCOB_KW_STD},
|
|
{"CONSOLE", CONSOLE, 0, TCOB_KW_STD},
|
|
{"CONTAINS", CONTAINS, 0, TCOB_KW_STD},
|
|
{"CONTENT", CONTENT, 0, TCOB_KW_STD85},
|
|
{"CONTINUE", CONTINUE, 0, TCOB_KW_STD85},
|
|
{"CONTROL", CONTROL, 0, TCOB_KW_STD},
|
|
{"CONTROLS", CONTROLS, 0, TCOB_KW_STD},
|
|
{"CONVERTING", CONVERTING, 0, TCOB_KW_STD85},
|
|
/*{"COPY", COPY, 0, TCOB_KW_STD}, used by pre-processor only */
|
|
{"CORR", CORRESPONDING, 0, TCOB_KW_STD},
|
|
{"CORRESPONDING", CORRESPONDING, 0, TCOB_KW_STD},
|
|
{"COUNT", COUNT, 0, TCOB_KW_STD},
|
|
{"CRT", DISPLAY_SCREEN, 0, TCOB_KW_TCEXT},
|
|
{"CURRENCY", CURRENCY, 0, TCOB_KW_STD},
|
|
{"CURSOR", CURSOR, 0, TCOB_KW_STD},
|
|
/*{"DARK", DARK, 0, TCOB_KW_TCEXT}, not used */
|
|
{"DATA", DATA, 0, TCOB_KW_STD},
|
|
{"DATE", DATE_TIME, DATE, TCOB_KW_STD},
|
|
{"DATE-COMPILED", DATE_COMPILED, 0, TCOB_KW_STD},
|
|
{"DATE-WRITTEN", DATE_WRITTEN, 0, TCOB_KW_STD},
|
|
{"DAY", DATE_TIME, DAY, TCOB_KW_STD},
|
|
{"DAY-OF-WEEK", DATE_TIME, DAY_OF_WEEK, TCOB_KW_STD85},
|
|
{"DE", DE, 0, TCOB_KW_STD},
|
|
{"DEBUGGING", DEBUGGING, 0, TCOB_KW_STD},
|
|
{"DECIMAL-POINT", DECIMAL_POINT, 0, TCOB_KW_STD},
|
|
{"DECLARATIVES", DECLARATIVES, 0, TCOB_KW_STD},
|
|
{"DELETE", DELETE, 0, TCOB_KW_STD},
|
|
{"DELIMITED", DELIMITED, 0, TCOB_KW_STD},
|
|
{"DELIMITER", DELIMITER, 0, TCOB_KW_STD},
|
|
{"DEPENDING", DEPENDING, 0, TCOB_KW_STD},
|
|
{"DESCENDING", DIRECTION, DESCENDING, TCOB_KW_STD},
|
|
{"DETAIL", DETAIL, 0, TCOB_KW_STD},
|
|
{"DISK", PORTNUM, 0, TCOB_KW_STD},
|
|
{"DISPLAY", DISPLAY, 0, TCOB_KW_STD},
|
|
{"DIVIDE", DIVIDE, 0, TCOB_KW_STD},
|
|
{"DIVISION", DIVISION, 0, TCOB_KW_STD},
|
|
{"DOWN", DOWN, 0, TCOB_KW_STD},
|
|
{"DUPLICATES", DUPLICATES, 0, TCOB_KW_STD},
|
|
{"DYNAMIC", DYNAMIC, 0, TCOB_KW_STD},
|
|
/*{"ECHO", ECHOT, 0, TCOB_KW_TCEXT}, not used */
|
|
{"ELSE", ELSE, 0, TCOB_KW_STD},
|
|
{"END", END, 0, TCOB_KW_STD},
|
|
{"END-ACCEPT", END_ACCEPT, 0, TCOB_KW_STD85},
|
|
{"END-ADD", END_ADD, 0, TCOB_KW_STD85},
|
|
{"END-CALL-LOADLIB", END_CALL_LOADLIB, 0, TCOB_KW_TCEXT},
|
|
{"END-CALL", END_CALL, 0, TCOB_KW_STD85},
|
|
{"END-CHAIN", END_CHAIN, 0, TCOB_KW_STD85},
|
|
{"END-COMPUTE", END_COMPUTE, 0, TCOB_KW_STD85},
|
|
{"END-DELETE", END_DELETE, 0, TCOB_KW_STD85},
|
|
{"END-DISPLAY", END_DISPLAY, 0, TCOB_KW_STD85},
|
|
{"END-DIVIDE", END_DIVIDE, 0, TCOB_KW_STD85},
|
|
{"END-EVALUATE", END_EVALUATE, 0, TCOB_KW_STD85},
|
|
{"END-IF", END_IF, 0, TCOB_KW_STD85},
|
|
{"END-MULTIPLY", END_MULTIPLY, 0, TCOB_KW_STD85},
|
|
{"END-OF-PAGE", END_OF_PAGE, 0, TCOB_KW_STD},
|
|
{"END-PERFORM", END_PERFORM, 0, TCOB_KW_STD85},
|
|
{"END-READ", END_READ, 0, TCOB_KW_STD85},
|
|
{"END-RETURN", END_RETURN, 0, TCOB_KW_STD85},
|
|
{"END-REWRITE", END_REWRITE, 0, TCOB_KW_STD85},
|
|
{"END-SEARCH", END_SEARCH, 0, TCOB_KW_STD85},
|
|
{"END-START", END_START, 0, TCOB_KW_STD85},
|
|
{"END-STRING", END_STRINGCMD, 0, TCOB_KW_STD85},
|
|
{"END-SUBTRACT", END_SUBTRACT, 0, TCOB_KW_STD85},
|
|
{"END-UNSTRING", END_UNSTRING, 0, TCOB_KW_STD85},
|
|
{"END-WRITE", END_WRITE, 0, TCOB_KW_STD85},
|
|
{"ENVIRONMENT", ENVIRONMENT, 0, TCOB_KW_STD},
|
|
{"ENVIRONMENT-VARIABLE", ENVIRONMENT_VARIABLE, 0, TCOB_KW_TCEXT},
|
|
{"EOL", EOL, 0, TCOB_KW_TCEXT},
|
|
{"EOP", END_OF_PAGE, 0, TCOB_KW_STD},
|
|
{"EOS", EOS, 0, TCOB_KW_TCEXT},
|
|
{"EQUAL", CONDITIONAL, EQUAL, TCOB_KW_STD},
|
|
{"ERASE", ERASE, 0, TCOB_KW_STD},
|
|
{"ERROR", ERROR_TOK, 0, TCOB_KW_STD},
|
|
{"ESCKEY", ESCKEY, 0, TCOB_KW_TCEXT},
|
|
{"EVALUATE", EVALUATE, 0, TCOB_KW_STD85},
|
|
{"EXCEPTION", EXCEPTION, 0, TCOB_KW_STD},
|
|
{"EXIT", EXIT, 0, TCOB_KW_STD},
|
|
{"EXTEND", EXTEND, 0, TCOB_KW_STD},
|
|
{"EXTERNAL", EXTERNAL, 0, TCOB_KW_STD85},
|
|
{"FALSE", FALSE_TOK, 0, TCOB_KW_STD85},
|
|
{"FD", FD, 0, TCOB_KW_STD},
|
|
{"FILE", FILE_TOK, 0, TCOB_KW_STD},
|
|
{"FILE-CONTROL", FILE_CONTROL, 0, TCOB_KW_STD},
|
|
{"FILE-ID", FILE_ID, 0, TCOB_KW_STD},
|
|
{"FILLER", FILLER, 0, TCOB_KW_STD},
|
|
{"FINAL", FINAL, 0, TCOB_KW_STD},
|
|
{"FIRST", FIRST, 0, TCOB_KW_STD},
|
|
{"FLOAT-LONG", USAGENUM, USAGE_COMP2, TCOB_KW_STD2},
|
|
{"FLOAT-SHORT", USAGENUM, USAGE_COMP1, TCOB_KW_STD2},
|
|
{"FOOTING", FOOTING, 0, TCOB_KW_STD},
|
|
{"FOR", FOR, 0, TCOB_KW_STD},
|
|
{"FOREGROUND-COLOR", FOREGROUNDCOLOR, 0, TCOB_KW_STD85},
|
|
{"FROM", FROM, 0, TCOB_KW_STD},
|
|
{"FULL", FULL, 0, TCOB_KW_STD},
|
|
{"FUNCTION", FUNCTION, 0, TCOB_KW_STD85},
|
|
{"GENERATE", GENERATE, 0, TCOB_KW_STD},
|
|
{"GIVING", GIVING, 0, TCOB_KW_STD},
|
|
{"GLOBAL", GLOBAL, 0, TCOB_KW_STD85},
|
|
{"GO", GO, 0, TCOB_KW_STD},
|
|
{"GOBACK", GOBACK, 0, TCOB_KW_TCEXT},
|
|
{"GREATER", CONDITIONAL, GREATER, TCOB_KW_STD},
|
|
{"GROUP", GROUP, 0, TCOB_KW_STD},
|
|
{"HEADING", HEADING, 0, TCOB_KW_STD},
|
|
{"HIGH-VALUE", HIGHVALUES, 0, TCOB_KW_STD},
|
|
{"HIGH-VALUES", HIGHVALUES, 0, TCOB_KW_STD},
|
|
{"HIGHLIGHT", HIGHLIGHT, 0, TCOB_KW_TCEXT},
|
|
{"I-O", I_O, 0, TCOB_KW_STD},
|
|
{"I-O-CONTROL", I_O_CONTROL, 0, TCOB_KW_STD},
|
|
{"IDENTIFICATION", IDENTIFICATION, 0, TCOB_KW_STD},
|
|
{"IF", IF, 0, TCOB_KW_STD},
|
|
{"IGNORE", IGNORE, 0, TCOB_KW_TCEXT},
|
|
{"IN", IN, 0, TCOB_KW_STD},
|
|
{"INDEX", USAGENUM, USAGE_INDEX, TCOB_KW_STD},
|
|
{"INDEXED", INDEXED, 0, TCOB_KW_STD},
|
|
{"INDICATE", INDICATE, 0, TCOB_KW_STD},
|
|
{"INITIAL", INITIAL_TOK, 0, TCOB_KW_STD},
|
|
{"INITIALIZE", INITIALIZE, 0, TCOB_KW_STD85},
|
|
{"INITIATE", INITIATE, 0, TCOB_KW_STD},
|
|
{"INKEY", INKEY, 0, TCOB_KW_TCEXT},
|
|
{"INPUT", INPUT, 0, TCOB_KW_STD},
|
|
{"INPUT-OUTPUT", INPUT_OUTPUT, 0, TCOB_KW_STD},
|
|
{"INSPECT", INSPECT, 0, TCOB_KW_STD},
|
|
{"INSTALLATION", INSTALLATION, 0, TCOB_KW_STD},
|
|
{"INTO", INTO, 0, TCOB_KW_STD},
|
|
{"INVALID", INVALID, 0, TCOB_KW_STD},
|
|
{"IS", IS, 0, TCOB_KW_STD},
|
|
{"JUST", JUSTIFIED, 0, TCOB_KW_STD},
|
|
{"JUSTIFIED", JUSTIFIED, 0, TCOB_KW_STD},
|
|
{"KEY", KEY, 0, TCOB_KW_STD},
|
|
{"LABEL", LABEL, 0, TCOB_KW_STD},
|
|
{"LAST", LAST, 0, TCOB_KW_STD},
|
|
{"LEADING", LEADING, 0, TCOB_KW_STD},
|
|
{"LEFT", LEFT, 0, TCOB_KW_STD},
|
|
{"LENGTH", LENGTH, 0, TCOB_KW_STD},
|
|
{"LESS", CONDITIONAL, LESS, TCOB_KW_STD},
|
|
{"LIMIT", LIMIT, 0, TCOB_KW_STD},
|
|
{"LIMITS", LIMITS, 0, TCOB_KW_STD},
|
|
{"LINAGE", LINAGE, 0, TCOB_KW_STD},
|
|
{"LINE", LINE, 0, TCOB_KW_STD},
|
|
{"LINES", LINES, 0, TCOB_KW_STD},
|
|
{"LINKAGE", LINKAGE, 0, TCOB_KW_STD},
|
|
{"LOCK", LOCK, 0, TCOB_KW_STD},
|
|
{"LOW-VALUE", LOWVALUES, 0, TCOB_KW_STD},
|
|
{"LOW-VALUES", LOWVALUES, 0, TCOB_KW_STD},
|
|
{"LOWER", LOWER, 0, TCOB_KW_STD},
|
|
{"LOWLIGHT", LOWLIGHT, 0, TCOB_KW_STD},
|
|
{"LPT1", PORTNUM, 4, TCOB_KW_TCEXT},
|
|
{"LPT2", PORTNUM, 5, TCOB_KW_TCEXT},
|
|
{"LPT3", PORTNUM, 6, TCOB_KW_TCEXT},
|
|
{"LPT4", PORTNUM, 7, TCOB_KW_TCEXT},
|
|
{"MERGE", MERGE, 0, TCOB_KW_STD},
|
|
{"MINUS", MINUS, 0, TCOB_KW_STD},
|
|
{"MODE", MODE, 0, TCOB_KW_STD},
|
|
{"MOVE", MOVE, 0, TCOB_KW_STD},
|
|
{"MULTIPLE", MULTIPLE, 0, TCOB_KW_STD},
|
|
{"MULTIPLY", MULTIPLY, 0, TCOB_KW_STD},
|
|
{"NATIVE", NATIVE, 0, TCOB_KW_STD},
|
|
{"NEGATIVE", NEGATIVE, 0, TCOB_KW_STD},
|
|
{"NEXT", NEXT, 0, TCOB_KW_STD},
|
|
{"NO", NO, 0, TCOB_KW_STD},
|
|
{"NO-ECHO", NOECHO, 0, TCOB_KW_TCEXT},
|
|
{"NOT", NOT, 0, TCOB_KW_STD},
|
|
{"NULL", NULL_TOK, 0, TCOB_KW_STD},
|
|
{"NUMBER", NUMBER, 0, TCOB_KW_STD},
|
|
{"NUMBERS", NUMBERS, 0, TCOB_KW_STD},
|
|
{"NUMERIC", NUMERIC, 0, TCOB_KW_STD},
|
|
{"NUMERIC-EDITED", NUMERIC_EDITED, 0, TCOB_KW_STD},
|
|
{"OBJECT-COMPUTER", OBJECT_COMPUTER, 0, TCOB_KW_STD},
|
|
{"OCCURS", OCCURS, 0, TCOB_KW_STD},
|
|
{"OF", OF, 0, TCOB_KW_STD},
|
|
{"OFF", OFF, 0, TCOB_KW_STD},
|
|
{"OMITTED", OMITTED, 0, TCOB_KW_STD},
|
|
{"ON", ON, 0, TCOB_KW_STD},
|
|
{"ONLY", ONLY, 0, TCOB_KW_STD},
|
|
{"OPEN", OPEN, 0, TCOB_KW_STD},
|
|
{"OPTIONAL", OPTIONAL, 0, TCOB_KW_STD},
|
|
{"OR", OR, 0, TCOB_KW_STD},
|
|
{"ORDER", ORDER, 0, TCOB_KW_STD85},
|
|
{"ORGANIZATION", ORGANIZATION, 0, TCOB_KW_STD},
|
|
{"OTHER", OTHER, 0, TCOB_KW_STD85},
|
|
{"OUTPUT", OUTPUT, 0, TCOB_KW_STD},
|
|
{"OVERFLOW", OVERFLOW_TOK, 0, TCOB_KW_STD},
|
|
{"PACKED-DECIMAL", USAGENUM, USAGE_COMP3, TCOB_KW_STD85},
|
|
{"PADDING", PADDING, 0, TCOB_KW_STD85},
|
|
{"PAGE", PAGE, 0, TCOB_KW_STD},
|
|
{"PAGE-COUNTER", PAGE_COUNTER, 0, TCOB_KW_STD},
|
|
{"PARAGRAPH", PARAGRAPH, 0, TCOB_KW_STD85},
|
|
{"PERFORM", PERFORM, 0, TCOB_KW_STD},
|
|
{"PF", PF, 0, TCOB_KW_STD},
|
|
{"PH", PH, 0, TCOB_KW_STD},
|
|
{"PIC", PICTURE, 0, TCOB_KW_STD},
|
|
{"PICTURE", PICTURE, 0, TCOB_KW_STD},
|
|
{"PLUS", PLUS, 0, TCOB_KW_STD},
|
|
{"POINTER", POINTER, 0, TCOB_KW_STD},
|
|
{"POSITION", POSITION, 0, TCOB_KW_STD},
|
|
{"POSITIVE", POSITIVE, 0, TCOB_KW_STD},
|
|
{"PREV", PREVIOUS, 0, TCOB_KW_STD},
|
|
{"PREVIOUS", PREVIOUS, 0, TCOB_KW_STD},
|
|
{"PRINTER", PORTNUM, 4, TCOB_KW_STD},
|
|
{"PROCEDURE", PROCEDURE, 0, TCOB_KW_STD},
|
|
{"PROCEED", PROCEED, 0, TCOB_KW_STD},
|
|
{"PROGRAM", PROGRAM, 0, TCOB_KW_STD},
|
|
{"PROGRAM-ID", PROGRAM_ID, 0, TCOB_KW_STD},
|
|
{"QUOTE", QUOTES, 0, TCOB_KW_STD},
|
|
{"QUOTES", QUOTES, 0, TCOB_KW_STD},
|
|
{"RANDOM", RANDOM, 0, TCOB_KW_STD},
|
|
{"RD", RD, 0, TCOB_KW_STD},
|
|
{"READ", READ, 0, TCOB_KW_STD},
|
|
{"READY", READY, 0, TCOB_KW_STD},
|
|
{"RECORD", RECORD, 0, TCOB_KW_STD},
|
|
{"RECORDS", RECORDS, 0, TCOB_KW_STD},
|
|
{"REDEFINES", REDEFINES, 0, TCOB_KW_STD},
|
|
{"REFERENCE", REFERENCE, 0, TCOB_KW_STD85},
|
|
{"REEL", REEL, 0, TCOB_KW_STD},
|
|
{"RELATIVE", RELATIVE, 0, TCOB_KW_STD},
|
|
{"RELEASE", RELEASE, 0, TCOB_KW_STD},
|
|
{"REMAINDER", REMAINDER, 0, TCOB_KW_STD},
|
|
{"REMOVAL", REMOVAL, 0, TCOB_KW_STD},
|
|
{"RENAMES", RENAMES, 0, TCOB_KW_STD},
|
|
{"REPLACING", REPLACING, 0, TCOB_KW_STD},
|
|
{"REPORT", REPORT, 0, TCOB_KW_STD},
|
|
{"REPORTS", REPORTS, 0, TCOB_KW_STD},
|
|
{"REQUIRED", REQUIRED, 0, TCOB_KW_STD},
|
|
{"RESERVE", RESERVE, 0, TCOB_KW_STD},
|
|
{"RESET", RESET, 0, TCOB_KW_STD},
|
|
{"RETURN", RETURN, 0, TCOB_KW_STD},
|
|
{"RETURNING", RETURNING, 0, TCOB_KW_STD},
|
|
{"REVERSE-VIDEO", REVERSEVIDEO, 0, TCOB_KW_TCEXT},
|
|
{"REWIND", REWIND, 0, TCOB_KW_STD},
|
|
{"REWRITE", REWRITE, 0, TCOB_KW_STD},
|
|
{"RF", RF, 0, TCOB_KW_STD},
|
|
{"RH", RH, 0, TCOB_KW_STD},
|
|
{"RIGHT", RIGHT, 0, TCOB_KW_STD},
|
|
{"ROUNDED", ROUNDED, 0, TCOB_KW_STD},
|
|
{"RUN", RUN, 0, TCOB_KW_STD},
|
|
{"SAME", SAME, 0, TCOB_KW_STD},
|
|
{"SCREEN", SCREEN, 0, TCOB_KW_STD},
|
|
{"SD", SD, 0, TCOB_KW_STD},
|
|
{"SEARCH", SEARCH, 0, TCOB_KW_STD},
|
|
{"SECTION", SECTION, 0, TCOB_KW_STD},
|
|
{"SECURE", SECURE, 0, TCOB_KW_STD},
|
|
{"SECURITY", SECURITY, 0, TCOB_KW_STD},
|
|
{"SELECT", SELECT, 0, TCOB_KW_STD},
|
|
{"SENTENCE", SENTENCE, 0, TCOB_KW_STD},
|
|
{"SEPARATE", SEPARATE, 0, TCOB_KW_STD},
|
|
{"SEQUENCE", SEQUENCE, 0, TCOB_KW_STD},
|
|
{"SEQUENTIAL", SEQUENTIAL, 0, TCOB_KW_STD},
|
|
{"SET", SET, 0, TCOB_KW_STD},
|
|
{"SIGN", SIGN, 0, TCOB_KW_STD},
|
|
{"SIZE", SIZE, 0, TCOB_KW_STD},
|
|
{"SORT", SORT, 0, TCOB_KW_STD},
|
|
{"SORT-MERGE", SORT_MERGE, 0, TCOB_KW_STD},
|
|
{"SOURCE", SOURCE, 0, TCOB_KW_STD},
|
|
{"SOURCE-COMPUTER", SOURCE_COMPUTER, 0, TCOB_KW_STD},
|
|
{"SPACE", SPACES, 0, TCOB_KW_STD},
|
|
{"SPACES", SPACES, 0, TCOB_KW_STD},
|
|
{"SPECIAL-NAMES", SPECIAL_NAMES, 0, TCOB_KW_STD},
|
|
{"STANDARD", STANDARD, 0, TCOB_KW_STD},
|
|
{"STANDARD-1", STANDARD_1, 0, TCOB_KW_STD},
|
|
{"STANDARD-2", STANDARD_2, 0, TCOB_KW_STD85},
|
|
{"START", START, 0, TCOB_KW_STD},
|
|
{"STATUS", STATUS, 0, TCOB_KW_STD},
|
|
{"STDCALL", CALL_CONV_STDCALL, 0, TCOB_KW_TCEXT},
|
|
{"STD-ERROR", STD_ERROR, 0, TCOB_KW_TCEXT},
|
|
{"STD-OUTPUT", STD_OUTPUT, 0, TCOB_KW_TCEXT},
|
|
{"STOP", STOP, 0, TCOB_KW_STD},
|
|
{"STRING", STRINGCMD, 0, TCOB_KW_STD},
|
|
{"SUBTRACT", SUBTRACT, 0, TCOB_KW_STD},
|
|
{"SUM", SUM, 0, TCOB_KW_STD},
|
|
{"SYNC", SYNCHRONIZED, 0, TCOB_KW_STD},
|
|
{"SYNCHRONIZED", SYNCHRONIZED, 0, TCOB_KW_STD},
|
|
{"TALLYING", TALLYING, 0, TCOB_KW_STD},
|
|
{"TAPE", TAPE, 0, TCOB_KW_STD},
|
|
{"TCOB-PROTOTYPE1", TCOBPROTO1, 0, TCOB_KW_TCEXT},
|
|
{"TCOB-PROTOTYPE2", TCOBPROTO2, 0, TCOB_KW_TCEXT},
|
|
{"TERMINATE", TERMINATE, 0, TCOB_KW_STD},
|
|
{"TEST", TEST, 0, TCOB_KW_STD},
|
|
{"THAN", THAN, 0, TCOB_KW_STD},
|
|
{"THEN", THEN, 0, TCOB_KW_STD},
|
|
{"THROUGH", THRU, 0, TCOB_KW_STD},
|
|
{"THRU", THRU, 0, TCOB_KW_STD},
|
|
{"TIME", DATE_TIME, TIME, TCOB_KW_STD},
|
|
{"TIMES", TIMES, 0, TCOB_KW_STD},
|
|
{"TO", TO, 0, TCOB_KW_STD},
|
|
{"TOP", TOP, 0, TCOB_KW_STD},
|
|
{"TRACE", TRACE, 0, TCOB_KW_STD},
|
|
{"TRAILING", TRAILING, 0, TCOB_KW_STD},
|
|
{"TRUE", TRUE_TOK, 0, TCOB_KW_STD},
|
|
{"TYPE", TYPE, 0, TCOB_KW_STD},
|
|
{"UNDERLINE", UNDERLINE, 0, TCOB_KW_TCEXT},
|
|
{"UNIT", UNIT, 0, TCOB_KW_STD},
|
|
{"UNLOCK", UNLOCK, 0, TCOB_KW_STD},
|
|
{"UNSTRING", UNSTRING, 0, TCOB_KW_STD},
|
|
{"UNTIL", UNTIL, 0, TCOB_KW_STD},
|
|
{"UP", UP, 0, TCOB_KW_STD},
|
|
{"UPDATE", UPDATE, 0, TCOB_KW_STD},
|
|
{"UPON", UPON, 0, TCOB_KW_STD},
|
|
{"UPPER", UPPER, 0, TCOB_KW_STD},
|
|
{"USAGE", USAGE, 0, TCOB_KW_STD},
|
|
{"USE", USE, 0, TCOB_KW_STD},
|
|
{"USING", USING, 0, TCOB_KW_STD},
|
|
{"VALUE", VALUE, 0, TCOB_KW_STD},
|
|
{"VALUES", VALUES, 0, TCOB_KW_STD},
|
|
{"VARYING", VARYING, 0, TCOB_KW_STD},
|
|
{"WHEN", WHEN, 0, TCOB_KW_STD},
|
|
{"WINAPI", CALL_CONV_STDCALL, 0, TCOB_KW_TCEXT},
|
|
{"WITH", WITH, 0, TCOB_KW_STD},
|
|
{"WORKING-STORAGE", WORKING_STORAGE, 0, TCOB_KW_STD},
|
|
{"WRITE", WRITE, 0, TCOB_KW_STD},
|
|
{"ZERO", ZERO, 0, TCOB_KW_STD},
|
|
{"ZEROES", ZERO, 0, TCOB_KW_STD},
|
|
{"ZEROS", ZERO, 0, TCOB_KW_STD},
|
|
{"",0,0,0}
|
|
};
|
|
|
|
|
|
struct intrinsic_function intrinsic_functions[] = {
|
|
{"ABS",ITYPE_FLOAT,1},
|
|
{"ACOS",ITYPE_FLOAT,1},
|
|
{"ANNUITY",ITYPE_FLOAT,2},
|
|
{"ASIN",ITYPE_FLOAT,1},
|
|
{"ATAN",ITYPE_FLOAT,1},
|
|
{"CHAR",ITYPE_INLINE,1}, /* inline */
|
|
{"COS",ITYPE_FLOAT,1},
|
|
{"CURRENT-DATE",ITYPE_DATETIME,0},
|
|
{"DATE-OF-INTEGER",ITYPE_DATE,1},
|
|
{"DATE-TO-YYYYMMDD",ITYPE_DATE,ANY_NUMBER}, /* params can be 1 or 2 */
|
|
{"DAY-OF-INTEGER",ITYPE_JULIANDATE,1},
|
|
{"DAY-TO-YYYYDDD",ITYPE_JULIANDATE,ANY_NUMBER}, /* params can be 1 or 2 */
|
|
{"FACTORIAL",ITYPE_INT,1},
|
|
{"INTEGER",ITYPE_INT,1},
|
|
{"INTEGER-OF-DATE",ITYPE_INT,1},
|
|
{"INTEGER-OF-DAY",ITYPE_INT,1},
|
|
{"INTEGER-PART",ITYPE_INT,1},
|
|
{"LENGTH",ITYPE_INLINE,1}, /* inline */
|
|
{"LOG",ITYPE_FLOAT,1},
|
|
{"LOG10",ITYPE_FLOAT,1},
|
|
{"LOWER-CASE",ITYPE_ALPHA,1},
|
|
{"MAX",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"MEAN",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"MEDIAN",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"MIDRANGE",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"MIN",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"MOD",ITYPE_INT,2},
|
|
{"NUMVAL",ITYPE_FLOAT,1},
|
|
{"NUMVAL-C",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"ORD",ITYPE_INLINE,1}, /* inline */
|
|
{"ORD-MAX",ITYPE_INT,ANY_NUMBER},
|
|
{"ORD-MIN",ITYPE_INT,ANY_NUMBER},
|
|
{"PRESENT-VALUE",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"RANDOM",ITYPE_FLOAT,ANY_NUMBER}, /* really 1 or 0 params */
|
|
{"RANGE",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"REM",ITYPE_INT,2},
|
|
{"REVERSE",ITYPE_ALPHA,1},
|
|
{"SIN",ITYPE_FLOAT,1},
|
|
{"SQRT",ITYPE_FLOAT,1},
|
|
{"STANDARD-DEVIATION",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"SUM",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"TAN",ITYPE_FLOAT,1},
|
|
{"TEST-DATE-YYYYMMDD",ITYPE_INT,1},
|
|
{"TEST-DAY-YYYYDDD",ITYPE_INT,1},
|
|
{"UPPER-CASE",ITYPE_ALPHA,1},
|
|
{"VARIANCE",ITYPE_FLOAT,ANY_NUMBER},
|
|
{"WHEN-COMPILED",ITYPE_INLINE,0}, /* inline (we should save the date at compile time) */
|
|
{"YEAR-TO-YYYY",ITYPE_YEAR,1},
|
|
{"",0,0}
|
|
};
|
|
|
|
static struct reserved_sym *reserved_tab[ HASHLEN ]={NULL};
|
|
|
|
static struct intrinsic_sym *intrinsic_tab[ HASHLEN ]={NULL};
|
|
|
|
struct reserved_sym *lookup_reserved( char *s ) {
|
|
struct reserved_sym *as;
|
|
for ( as = reserved_tab[ hash(s) ] ; as != NULL ; as = as->next )
|
|
if ( strcasecmp( s, as->name ) == 0 ) {
|
|
return( as );
|
|
}
|
|
return( NULL );
|
|
}
|
|
|
|
void install_reserved( void ) {
|
|
struct reserved_sym *as = NULL;
|
|
struct intrinsic_sym *is = NULL;
|
|
int val,i;
|
|
for (i=0;strcmp(reserved_symbols[i].name,"");i++) {
|
|
as = (struct reserved_sym *)
|
|
malloc( sizeof(struct reserved_sym) );
|
|
as->name = savename( reserved_symbols[i].name );
|
|
val = hash( as->name );
|
|
as->next = reserved_tab[ val ];
|
|
reserved_tab[ val ] = as;
|
|
as->i=i;
|
|
}
|
|
for (i=0;strcmp(intrinsic_functions[i].name,"");i++) {
|
|
is = (struct intrinsic_sym *)
|
|
malloc( sizeof(struct intrinsic_sym) );
|
|
is->name = savename( intrinsic_functions[i].name );
|
|
val = hash( is->name );
|
|
is->next = intrinsic_tab[ val ];
|
|
intrinsic_tab[ val ] = is;
|
|
is->i=i;
|
|
}
|
|
}
|
|
|
|
int reserved( char *s ) {
|
|
struct reserved_sym *r;
|
|
if ((r=lookup_reserved(s))!=NULL) {
|
|
yylval.ival=reserved_symbols[r->i].minor;
|
|
return reserved_symbols[r->i].token;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
struct intrinsic_sym *lookup_intrinsic_sym( char *s ) {
|
|
struct intrinsic_sym *is;
|
|
for ( is = intrinsic_tab[ hash(s) ] ; is != NULL ; is = is->next )
|
|
if ( strcasecmp( s, is->name ) == 0 ) {
|
|
return( is );
|
|
}
|
|
return( NULL );
|
|
}
|
|
struct intrinsic_function *lookup_intrinsic_function( char *s ) {
|
|
struct intrinsic_sym *is;
|
|
for ( is = intrinsic_tab[ hash(s) ] ; is != NULL ; is = is->next )
|
|
if ( strcasecmp( s, is->name ) == 0 ) {
|
|
return & ( intrinsic_functions[is->i] );
|
|
}
|
|
return( NULL );
|
|
}
|