X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fpol.h;h=e492e755659277c29e1802a65d3fec858b0bd049;hp=f8f44e5f263636375b472bb9ddf6990bc49a6ef8;hb=88fd1492afba7c103e2bedbaac0d69fb9bf3cf66;hpb=c00c639073653fac7463a88f2b000f263236550d diff --git a/include/pol.h b/include/pol.h index f8f44e5..e492e75 100644 --- a/include/pol.h +++ b/include/pol.h @@ -1,8 +1,13 @@ /***************************************************************************** +** Name: pol.h +** Purpose: Header file for Problem Oriented Language Class +** Programmer: Kevin Rosenberg +** Date Started: 1984 +** ** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg +** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: pol.h,v 1.11 2001/01/02 16:02:12 kevin Exp $ +** $Id$ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -24,24 +29,24 @@ #include class POL { - + public: - - // codes for pol_usefile + + // codes for pol_usefile enum { - P_USE_STR = 1, // use string as input source - P_USE_FILE, // use file as input source + P_USE_STR = 1, // use string as input source + P_USE_FILE, // use file as input source }; - + POL(); ~POL(); - + void init (); void addSkipWord (const char* const w); void addSkipChar (int c); void addKeyword (const char* const str, int code); - bool readWord (char *search, int nlet); + bool readWord (const char *search, int nlet); bool readUserToken (char *str, int *code); bool readString (char *str); bool readInteger (int *n, int typecode, bool boundcode, int bb1, int bb2); @@ -49,17 +54,17 @@ class POL { bool skipTokens (); void reader (); bool readText (char *str, int lim); - void usefile (int source, char *fn); + void usefile (int source, const char *fn); void closefile (); int lookchar (); int inchar (); void ungetch (int c); int get_inputline (FILE *fp); void set_inputline (const char* const line); - + enum { - MAXTOK = 200, // maximum length of a token + MAXTOK = 200, // maximum length of a token MAXLINE = 1024, // maximum line length MAXIDENT = 20, MAXSKIPWORD = 20, @@ -67,98 +72,98 @@ class POL { MIN_INT = -2000000000, MAX_INT = 2000000000, }; - - // token types + + // token types enum { - TT_STRING = 1, // string token - TT_INT, // integer token - TT_REAL, // floating point token - TT_ALPHA, // alphabetic token - TT_ALPNUM, // alphanumeric token + TT_STRING = 1, // string token + TT_INT, // integer token + TT_REAL, // floating point token + TT_ALPHA, // alphabetic token + TT_ALPNUM, // alphanumeric token TT_NUMALPHA, TT_SPECLCHAR, - TT_EOF, // end of file reached - TT_ERROR, // error in token, caused by call to wrong type of token reader - TT_BLANK, // white space token. pol_tok() skips these - TT_USERTOK, // user defined token + TT_EOF, // end of file reached + TT_ERROR, // error in token, caused by call to wrong type of token reader + TT_BLANK, // white space token. pol_tok() skips these + TT_USERTOK, // user defined token }; - + private: - - // codes for pol_int and pol_float - // if in reject catagory, get new number from terminal + + // codes for pol_int and pol_float + // if in reject catagory, get new number from terminal enum { - P_FLTINT = 1, // get a real or integer number - P_BFLTINT, // get a real or integer number, clip against bounds - P_CBFLTINT, // get real or int, reject if outside bounds - P_FLT, // get a real number - P_BFLT, // get a real, clip against bounds - P_CBFLT, // get a floating, reject if outside bounds - P_INT, // get a integer number - P_BINT, // get a integer, clip against bounds - P_CBINT, // get a integer, reject if outside bounds + P_FLTINT = 1, // get a real or integer number + P_BFLTINT, // get a real or integer number, clip against bounds + P_CBFLTINT, // get real or int, reject if outside bounds + P_FLT, // get a real number + P_BFLT, // get a real, clip against bounds + P_CBFLT, // get a floating, reject if outside bounds + P_INT, // get a integer number + P_BINT, // get a integer, clip against bounds + P_CBINT, // get a integer, reject if outside bounds }; - + #define LETTER 'a' #define DIGIT '0' - - + + // typedef std::map KeywordCodeList; - + struct token_st { - int ready; // TRUE if token is ready - // std::string tokstr; // token string + int ready; // TRUE if token is ready + // std::string tokstr; // token string char tokstr[MAXTOK+1]; - int type; // type of token 'TT_' - int code; // holds code for user defined tokens - double fnum; // real value of token - int inum; // integer value of token + int type; // type of token 'TT_' + int code; // holds code for user defined tokens + double fnum; // real value of token + int inum; // integer value of token }; typedef struct token_st TOKEN; - struct token_st token; // current token - - // Tables words stored with install() & found with lookup() - KeywordCodeHashTable skiptable; // words to ignore and skip - KeywordCodeHashTable cmdtable; // pol parameter commands - KeywordCodeHashTable usertable; // user defined symbols - + struct token_st token; // current token + + // Tables words stored with install() & found with lookup() + KeywordCodeHashTable skiptable; // words to ignore and skip + KeywordCodeHashTable cmdtable; // pol parameter commands + KeywordCodeHashTable usertable; // user defined symbols + struct metachar { - char eoc; /* end of command character */ - char str; /* string delimiter */ - char com; /* comment character */ - char cmd; /* pol parameter command character */ - char prg; /* program load character */ - char con; /* continuation across newline character */ - char out; /* character that delimits output to terminal */ - char ter; /* character indicates insertion of input from terminal */ - char inb; /* input from graphics device */ + char eoc; /* end of command character */ + char str; /* string delimiter */ + char com; /* comment character */ + char cmd; /* pol parameter command character */ + char prg; /* program load character */ + char con; /* continuation across newline character */ + char out; /* character that delimits output to terminal */ + char ter; /* character indicates insertion of input from terminal */ + char inb; /* input from graphics device */ } meta; - - + + char m_szSkipChars [MAXSKIPCHAR]; // characters to skip bool m_bTrace; bool m_bNewlineIsEOC; - + struct KeywordCodeList { - char *keyword; + const char *keyword; int code; }; - + static const struct KeywordCodeList cmdlist[]; static const unsigned int NUMCMD; - - // Internal codes for pol commands + + // Internal codes for pol commands enum { PC_EOC = 1, PC_STR, PC_COM, PC_CMD, PC_PRG, - PC_CON, + PC_CON, PC_OUT, PC_TER, - PC_INB, + PC_INB, PC_NL_EOC, PC_NL_NEOC, PC_TRON, @@ -166,7 +171,7 @@ private: PC_FILE, PC_DUMP, }; - + enum { INPUT_STREAM = 1, INPUT_FILE, @@ -181,21 +186,21 @@ private: enum { MAXFILE = 8, }; - - int currentf; /* pointer to current fp */ - FILE *filep[MAXFILE]; /* == NULL for string input */ - char *fname[MAXFILE]; /* pointer to filename */ - - char inputline[MAXLINE]; /* current input line */ - int lineptr; /* current position in inputline */ - + + int currentf; /* pointer to current fp */ + FILE *filep[MAXFILE]; /* == NULL for string input */ + char *fname[MAXFILE]; /* pointer to filename */ + + char inputline[MAXLINE]; /* current input line */ + int lineptr; /* current position in inputline */ + std::stack m_stackPushBackInput; bool skipSingleToken (char term[]); int tok (struct token_st *token); void dumptok (struct token_st *token); - - + + int getpol_tok (struct token_st *token); int getcmd (); int gettok (TOKEN *tok); @@ -207,7 +212,7 @@ private: void eatline (); int type (int c); int getch (FILE *fp); - + }; #endif