** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: pol.cpp,v 1.4 2000/12/20 14:39:09 kevin Exp $
+** $Id: pol.cpp,v 1.5 2000/12/25 21:54:26 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
#include "pol.h"
-static const int HASHSIZE=20;
+static const int HASHSIZE=100;
-/* Tables words stored with install() & found with lookup() */
-static SYMBOL *skiptable[HASHSIZE]; /* words to ignore and skip */
-static SYMBOL *cmdtable[HASHSIZE]; /* pol parameter commands */
-static SYMBOL *usertable[HASHSIZE]; /* user defined symbols */
+// Tables words stored with install() & found with lookup()
+static SYMBOL *skiptable[HASHSIZE]; // words to ignore and skip
+static SYMBOL *cmdtable[HASHSIZE]; // pol parameter commands
+static SYMBOL *usertable[HASHSIZE]; // user defined symbols
-static struct token_st token; /* current token */
+static struct token_st token; // current token
+\r
static struct metachar {
char eoc; /* end of command character */
char inb; /* input from graphics device */
} meta;
-/* current pol state */
-
+\r
+// current pol state
static struct pol_st {
- char skipchars[MAXSKIPCHAR]; /* characters to skip */
- int nl_eoc; /* TRUE if newline character ends a command */
- int trace; /* TRUE if trace is on */
+ char skipchars[MAXSKIPCHAR]; // characters to skip
+ int nl_eoc; // TRUE if newline character ends a command
+ int trace; // TRUE if trace is on
} pol;
struct key {
int code;
};
-/* internal codes for pol commands */
-
-#define PC_EOC 1
-#define PC_STR 2
-#define PC_COM 3
-#define PC_CMD 4
-#define PC_PRG 5
-#define PC_CON 6
-#define PC_OUT 7
-#define PC_TER 8
-#define PC_INB 9
-#define PC_NL_EOC 10
-#define PC_NL_NEOC 11
-#define PC_TRON 12
-#define PC_TROFF 13
-#define PC_FILE 14
-#define PC_DUMP 15
-
+// Internal codes for pol commands
+enum {\r
+ 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,
+};
+\r
static struct key cmdlist[] = {
{ "eoc", PC_EOC,},
{ "str", PC_STR,},
{ "dump", PC_DUMP,},
};
-#define NUMCMD (sizeof(cmdlist) / sizeof (struct key))
+const int NUMCMD = (sizeof(cmdlist) / sizeof (struct key));
+\r
static int skiptok(char term[]);
static int pol_tok(struct token_st *token);
static int hash(char *s);
static SYMBOL *lookup(SYMBOL *table[], char *s);
static SYMBOL *install(SYMBOL *table[], char *s, int def);
-static void synerr(char *msg);
static int pol_getch(FILE *fp);
{
if (install (usertable, str, code) == NULL)
{
- synerr ("Out ot memory installing user tokens");
+ sys_error (ERR_SEVERE, "Out of memory installing user tokens");
return (FALSE);
}
tt = getalpha (str, MAXTOK);
if (tt == TT_ERROR) {
- synerr ("error in pol parameter command");
+ sys_error (ERR_WARNING, "Error in POL parameter command");
pol_reader();
return(FALSE);
}
if ((cmd = lookup (cmdtable,str)) == NULL) {
- synerr ("unrecognized command");
+ sys_error (ERR_WARNING, "POL: Unrecognized command %s", cmd);
pol_reader();
return (FALSE);
} else {
if (found == FALSE) {
tt = gettok (&tok);
if (tt != TT_SPECLCHAR) {
- synerr("illegal command character");
+ sys_error (ERR_SEVERE, "POL: Illegal command character");
return (FALSE);
}
switch(cmd->code) {
pol_ungetch(s[i]);
if (i >= toksiz)
- synerr("token too long.");
+ sys_error (ERR_SEVERE, "POL token too long.");
s[i] = EOS; /* terminate token */
return (alphatype);
for (i = 0; (c = pol_inchar()) != delim; i++) {
if (c == NEWLINE) {
- synerr ("Missing closing delimiter.");
+ sys_error (ERR_WARNING, "Missing closing delimiter.");
break;
}
if (i >= toksiz) {
- synerr("string too long.");
+ sys_error (ERR_SEVERE, "string too long.");
break;
}
if (c == EOF) {
pol_ungetch(c);
- synerr("end of file inside quotation");
+ sys_error (ERR_SEVERE, "end of file inside quotation");
break;
} else if (c == BSLASH) { /* escape character */
s[i++] = c;
if ((np = lookup (table, name)) == NULL) { /* not found */
np = (SYMBOL *) malloc (sizeof(*np));
if (np == NULL) {
- synerr(installerr);
+ sys_error (ERR_SEVERE, installerr);
return (NULL);
}
if ((np->name = strdup(name)) == NULL) {
- synerr(installerr);
+ sys_error (ERR_SEVERE, installerr);
return (NULL);
}
str_lower (np->name);
static char inputline[MAXLINE]; /* current input line */
static int lineptr; /* current position in inputline */
-static void
-synerr (char *msg)
-{
- fputs (fname[currentf], stderr);
- fputs (msg, stderr);
- fputc (NEWLINE, stderr);
-}
-/*----------------------------------------------------------------------*/
-/* POL INPUT */
-/*----------------------------------------------------------------------*/
+//----------------------------------------------------------------------
+// POL INPUT
+//----------------------------------------------------------------------
#define BUFSIZE 100
static int bp = 0; /* pointer to next free position */
++currentf;
if (currentf >= MAXFILE) {
--currentf;
- synerr ("files nested too deeply");
+ sys_error (ERR_SEVERE, "files nested too deeply");
return;
}
fp = stdin;
} else if ((fp = fopen(fn, "r")) == NULL) {
--currentf;
- synerr ("can't open file");
+ sys_error (ERR_SEVERE, "can't open file");
return;
}
filep[currentf] = fp;
}
void
-set_inputline (const char const *line)
+set_inputline (const char* const line)
{
lineptr = 0;
bp = 0;