X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fpol.h;h=f8f44e5f263636375b472bb9ddf6990bc49a6ef8;hp=1d149896801205c8621c6fe971ecaaf0bb70644f;hb=c00c639073653fac7463a88f2b000f263236550d;hpb=23b7ef994fc5d95fcca6d4ae69abbd5971101262 diff --git a/include/pol.h b/include/pol.h index 1d14989..f8f44e5 100644 --- a/include/pol.h +++ b/include/pol.h @@ -2,7 +2,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: pol.h,v 1.10 2000/12/29 20:11:42 kevin Exp $ +** $Id: pol.h,v 1.11 2001/01/02 16:02:12 kevin Exp $ ** ** 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 @@ -19,21 +19,21 @@ ******************************************************************************/ #ifndef __H_POL #define __H_POL - -#include "hashtable.h" -#include + +#include "hashtable.h" +#include class POL { public: - // codes for pol_usefile - enum { - P_USE_STR = 1, // use string as input source - P_USE_FILE, // use file as input source - }; - - + // codes for pol_usefile + enum { + P_USE_STR = 1, // use string as input source + P_USE_FILE, // use file as input source + }; + + POL(); ~POL(); @@ -57,157 +57,157 @@ class POL { int get_inputline (FILE *fp); void set_inputline (const char* const line); - - enum { - MAXTOK = 200, // maximum length of a token - MAXLINE = 1024, // maximum line length - MAXIDENT = 20, - MAXSKIPWORD = 20, - MAXSKIPCHAR = 20, - MIN_INT = -2000000000, - MAX_INT = 2000000000, - }; - - // 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_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 - }; - - -private: - - // 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 - }; - -#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 - 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 - }; - 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 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 */ - } meta; - - - char m_szSkipChars [MAXSKIPCHAR]; // characters to skip - bool m_bTrace; - bool m_bNewlineIsEOC; - - struct KeywordCodeList { - char *keyword; - int code; - }; - - static const struct KeywordCodeList cmdlist[]; - static const unsigned int NUMCMD; - - // Internal codes for pol commands - enum { - PC_EOC = 1, - PC_STR, - PC_COM, - PC_CMD, - PC_PRG, - PC_CON, - PC_OUT, - PC_TER, - PC_INB, - PC_NL_EOC, - PC_NL_NEOC, - PC_TRON, - PC_TROFF, - PC_FILE, - PC_DUMP, - }; - - enum { - INPUT_STREAM = 1, - INPUT_FILE, - INPUT_STRING, - }; - - int m_iInputType; - std::istream* m_pInputStream; - FILE* m_pInputFile; - char* m_pszInputString; - - 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 */ - - 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); - void getblank (char *s, int toksiz); - int getalpha (char *s, int toksiz); - void getquote (char *qs, int toksiz); - void getescape (char *s, int delim, int toksiz); - int getnumber (char str[], int strsize, double *fnum, int *inum); - void eatline (); - int type (int c); - int getch (FILE *fp); - + + enum { + MAXTOK = 200, // maximum length of a token + MAXLINE = 1024, // maximum line length + MAXIDENT = 20, + MAXSKIPWORD = 20, + MAXSKIPCHAR = 20, + MIN_INT = -2000000000, + MAX_INT = 2000000000, + }; + + // 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_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 + }; + + +private: + + // 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 + }; + +#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 + 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 + }; + 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 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 */ + } meta; + + + char m_szSkipChars [MAXSKIPCHAR]; // characters to skip + bool m_bTrace; + bool m_bNewlineIsEOC; + + struct KeywordCodeList { + char *keyword; + int code; + }; + + static const struct KeywordCodeList cmdlist[]; + static const unsigned int NUMCMD; + + // Internal codes for pol commands + enum { + PC_EOC = 1, + PC_STR, + PC_COM, + PC_CMD, + PC_PRG, + PC_CON, + PC_OUT, + PC_TER, + PC_INB, + PC_NL_EOC, + PC_NL_NEOC, + PC_TRON, + PC_TROFF, + PC_FILE, + PC_DUMP, + }; + + enum { + INPUT_STREAM = 1, + INPUT_FILE, + INPUT_STRING, + }; + + int m_iInputType; + std::istream* m_pInputStream; + FILE* m_pInputFile; + char* m_pszInputString; + + 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 */ + + 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); + void getblank (char *s, int toksiz); + int getalpha (char *s, int toksiz); + void getquote (char *qs, int toksiz); + void getescape (char *s, int delim, int toksiz); + int getnumber (char str[], int strsize, double *fnum, int *inum); + void eatline (); + int type (int c); + int getch (FILE *fp); + }; #endif