r460: no message
[ctsim.git] / libctgraphics / ezset.cpp
index 4e68671507c01eb752204459930e1340460931ac..f04178728a2dff94027a883f063e14490349071e 100644 (file)
@@ -1,75 +1,63 @@
 /*****************************************************************************
- **  FILE IDENTIFICATION
- **
- **      EZSET - Parameter control for EZPLOT          
- **
- **  This is part of the CTSim program
- **  Copyright (C) 1983-2000 Kevin Rosenberg
- **
- **  $Id: ezset.cpp,v 1.9 2000/12/06 15:17:51 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
- **  published by the Free Software Foundation.
- **
- **  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 program; if not, write to the Free Software
- **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- ******************************************************************************/
+**  FILE IDENTIFICATION
+**
+**      EZSET - Parameter control for EZPLOT           
+**
+**  This is part of the CTSim program
+**  Copyright (c) 1983-2001 Kevin Rosenberg
+**
+**  $Id: ezset.cpp,v 1.17 2001/01/28 19:10:18 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
+**  published by the Free Software Foundation.
+**
+**  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 program; if not, write to the Free Software
+**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+******************************************************************************/
 
 #include "ctsupport.h"
 #include "ezplot.h"
 #include "pol.h"
 
-bool EZPlot::ezset_initialized = false;
 
-int 
-EZPlot::ezset (char *command)
+bool
+EZPlot::ezset (const std::string& command)
 {
-  if (! ezset_initialized) {
-    pol_init();
-    initkw();
-    pol_skpword ("please");
-    pol_skpword ("use");
-    pol_skpword ("are");
-    pol_skpword ("and");
-    pol_skpword ("is");
-    pol_skpword ("the");
-    pol_skpword ("equals");
-    pol_skpchar ("=");
-
-    pol_usefile (P_USE_STR,"");
-    set_inputline ("!eoc ,");
-    pol_reader ();
-    pol_closefile ();
-    ezset_initialized = true;
-  }
-  return (ezcmd (command));
+  return ezset (command.c_str());
 }
 
 bool 
-EZPlot::ezcmd (char *comm)
+EZPlot::ezset (const char* const command)
 {
-  pol_usefile (P_USE_STR, "");
-  set_inputline (comm);
 
-  char str[MAXTOK+1];
+    return ezcmd (command);
+}
+
+bool 
+EZPlot::ezcmd (const char* const comm)
+{
+  m_pol.usefile (POL::P_USE_STR, "");
+  m_pol.set_inputline (comm);
+  
+  char str [POL::MAXTOK+1];
   int code;
   bool retval = true;
-  if (! pol_usertok (str, &code)) {
-       sys_error(ERR_WARNING, "Illegal EZSET command: %s", str);
-    pol_reader();
+  if (! m_pol.readUserToken (str, &code)) {
+    sys_error (ERR_WARNING, "Illegal EZSET command: %s", str);
+    m_pol.reader();
     retval = false;
   }
   else
     retval = do_cmd (code);
-
-  pol_closefile();                     /* close input string file */
+  
+  m_pol.closefile();                   /* close input string file */
   return (retval);
 }
 
@@ -81,49 +69,49 @@ EZPlot::do_cmd (int lx)
   char strIn [1024];
   int n;
   double f;
-
+  
   switch (lx) {
   case S_TEXTSIZE:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE)
-      {
-       if (f >= 0.0 && f <= 1.0) {
-         v_textsize = f;
-         s_textsize = TRUE;
-       } else
-         s_textsize = FALSE;
-      }
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
+      if (f >= 0.0 && f <= 1.0) {
+        v_textsize = f;
+        s_textsize = TRUE;
+      } else
+        s_textsize = FALSE;
+    }
     break;
   case S_REPLOT:
-    plot ();
+    plot (m_pSGP);
     break;
   case S_CLEAR:
     clearCurves ();
     break;
   case S_TITLE:
-    gettext (strIn, sizeof(strIn));
+    m_pol.readText (strIn, sizeof(strIn));
     c_title = strIn;
     break;
   case S_LEGEND:
-    gettext (strIn, sizeof(strIn));
-    c_legend = strIn;
+    m_pol.readText (strIn, sizeof(strIn));
+    if (m_iCurrentCurve >= 0)
+      setLegend (m_iCurrentCurve, strIn);
     break;
   case S_XLABEL:
-    gettext (strIn, sizeof(strIn));
+    m_pol.readText (strIn, sizeof(strIn));
     c_xlabel = strIn;
     break;
   case S_YLABEL:
-    gettext (strIn, sizeof(strIn));
+    m_pol.readText (strIn, sizeof(strIn));
     c_ylabel = strIn;
     break;
   case S_XCROSS:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
       v_xcross = f;
       s_xcross = TRUE;
     } else
       s_xcross = FALSE;
     break;
   case S_YCROSS:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
       v_ycross = f;
       s_ycross = TRUE;
     } else
@@ -156,25 +144,25 @@ EZPlot::do_cmd (int lx)
     s_ymax = FALSE;
     break;
   case S_XMIN:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
       v_xmin = f;
       s_xmin = TRUE;
     }
     break;
   case S_XMAX:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
       v_xmax = f;
       s_xmax = TRUE;
     }
     break;
   case S_YMIN:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
       v_ymin = f;
       s_ymin = TRUE;
     }
     break;
   case S_YMAX:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) {
       v_ymax = f;
       s_ymax = TRUE;
     }
@@ -183,32 +171,40 @@ EZPlot::do_cmd (int lx)
     o_linestyle = SGP::LS_SOLID;
     break;
   case S_DASH:
-    if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) {
+    int ls;
+    ls = SGP::LS_DASH1;
+    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
       if (n == 1)
-       o_linestyle = SGP::LS_DASH1;
+        ls = SGP::LS_DASH1;
       else if (n == 2)
-       o_linestyle = SGP::LS_DASH2;
+        ls = SGP::LS_DASH2;
       else if (n == 3)
-       o_linestyle = SGP::LS_DASH3;
+        ls = SGP::LS_DASH3;
       else if (n == 4)
-       o_linestyle = SGP::LS_DASH4;
-      else
-       o_linestyle = SGP::LS_DASH1;
-    } else
-      o_linestyle = SGP::LS_DASH1;
+        ls = SGP::LS_DASH4;
+      else if (n == 5)
+        ls = SGP::LS_DOTTED;
+    }
+    if (m_iCurrentCurve < 0)
+      o_linestyle = ls;
+    else 
+      setLinestyle (m_iCurrentCurve, ls);
     break;
   case S_NOLINE:
     o_linestyle = SGP::LS_NOLINE;
     break;
   case S_PEN:
   case S_COLOR:
-    if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE)
-      {
-       if (n >= 0)
-         o_color = n;
-       else
-         bad_option("The color you picked");
-      }
+    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
+    {
+      if (n >= 0) {
+        if (m_iCurrentCurve < 0)
+          o_color = n;
+        else 
+          setColor (m_iCurrentCurve, n);
+      } else
+        bad_option("The color you picked");
+    }
     break;
   case S_BOX:
     o_box = TRUE;
@@ -223,88 +219,102 @@ EZPlot::do_cmd (int lx)
     o_grid = FALSE;
     break;
   case S_XLENGTH:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE)
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
       if (f > 0.0 && f <= 1.0)
-       o_xlength = f;
-    break;
+        o_xlength = f;
+      break;
   case S_YLENGTH:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE)
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
       if (f > 0.0 && f <= 1.0)
-       o_ylength = f;
-    break;
+        o_ylength = f;
+      break;
   case S_XPORIGIN:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE)
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
       if (f >= 0.0 && f < 1.0)
-       o_xporigin = f;
-    break;
+        o_xporigin = f;
+      break;
   case S_YPORIGIN:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE)
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
       if (f >= 0.0 && f < 1.0)
-       o_yporigin = f;
-    break;
+        o_yporigin = f;
+      break;
   case S_TAG:
-    if (pol_word("no", 2) == TRUE)
+    if (m_pol.readWord("no", 2) == TRUE)
       o_tag = FALSE;
-    else if (pol_word("off", 2) == TRUE)
+    else if (m_pol.readWord("off", 2) == TRUE)
       o_tag = FALSE;
     else
       o_tag = TRUE;
     break;
   case S_LEGENDBOX:
-    if (pol_word("inside", 2) == TRUE)
+    if (m_pol.readWord("inside", 2) == TRUE)
       o_legendbox = INSIDE;
-    else if (pol_word("outside", 3) == TRUE)
+    else if (m_pol.readWord("outside", 3) == TRUE)
       o_legendbox = OUTSIDE;
-    else if (pol_word("none",2) == TRUE)
+    else if (m_pol.readWord("none",2) == TRUE)
       o_legendbox = NOLEGEND;
     else {
-      gettext (str, MAXTOK);
+      m_pol.readText (str, POL::MAXTOK);
       bad_option(str);
     }
     break;
   case S_XLEGEND:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE)
-      {
-       if (f >= 0.0 && f < 1.0) {
-         v_xlegend = f;
-         s_xlegend = TRUE;
-       }
-       else
-         s_xlegend = FALSE;
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
+    {
+      if (f >= 0.0 && f < 1.0) {
+        v_xlegend = f;
+        s_xlegend = TRUE;
       }
+      else
+        s_xlegend = FALSE;
+    }
     break;
   case S_YLEGEND:
-    if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE)
-      {
-       if (f >= 0.0 && f < 1.0) {
-         v_ylegend = f;
-         s_ylegend = TRUE;
-       }
-       else
-         s_ylegend = FALSE;
+    if (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE)
+    {
+      if (f >= 0.0 && f < 1.0) {
+        v_ylegend = f;
+        s_ylegend = TRUE;
       }
+      else
+        s_ylegend = FALSE;
+    }
     break;
   case S_SYMBOL:
-    if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) {
-      if (n > 0 && n <= MAXSYMBOL)
-       o_symbol = n;
-      else
-       o_symbol = 1;
+    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
+      if (n > 0 && n <= MAXSYMBOL) {
+        if (m_iCurrentCurve < 0)
+          o_symbol = n;
+        else
+          setSymbol (m_iCurrentCurve, n);
+      }
     } else {
-      if (pol_word("every",5) == TRUE) {
-       if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) {
-         if (n > 0)
-           o_symfreq = n;
-         else
-           o_symfreq = 1;
-       }
-      } else if (pol_word ("none",4) == TRUE) {
-       o_symbol = -1;
+      if (m_pol.readWord("every",5) == TRUE) {
+        if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
+          int sym = 1;
+          if (n > 0)
+            sym = n;
+          if (m_iCurrentCurve < 0)
+            o_symfreq = sym;
+          else 
+            setSymbolFreq (m_iCurrentCurve, sym);
+        }
+      } else if (m_pol.readWord ("none",4) == TRUE) {
+        o_symbol = -1;
       }
     }
     break;
+  case S_CURVE:
+    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
+      if (n > 0)
+        m_iCurrentCurve = n - 1;
+    } else {
+      if (m_pol.readWord ("all",3) == TRUE) 
+        m_iCurrentCurve = -1;
+    }
+    break;
   case S_XTICKS:
-    if (pol_usertok(str,&lx) == FALSE)
+    if (m_pol.readUserToken(str,&lx) == FALSE)
       break;
     if (lx == S_ABOVE)
       o_xticks = ABOVE;
@@ -315,16 +325,16 @@ EZPlot::do_cmd (int lx)
     else if (lx == S_LABEL)
       o_xtlabel = TRUE;
     else if (lx == S_MAJOR) {
-      if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE)
-       if (n > 1 && n < 100)
-         o_xmajortick = n;
+      if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
+        if (n > 1 && n < 100)
+          o_xmajortick = n;
     } else if (lx == S_MINOR)
-      if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE)
-       if (n >= 0 && n < 100)
-         o_xminortick = n;
-    break;
+      if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
+        if (n >= 0 && n < 100)
+          o_xminortick = n;
+        break;
   case S_YTICKS:
-    if (pol_usertok(str,&lx) == FALSE)
+    if (m_pol.readUserToken(str,&lx) == FALSE)
       break;
     if (lx == S_RIGHT)
       o_yticks = RIGHT;
@@ -335,28 +345,28 @@ EZPlot::do_cmd (int lx)
     else if (lx == S_LABEL)
       o_ytlabel = TRUE;
     else if (lx == S_MAJOR) {
-      if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE)
-       if (n > 1 && n < 100)
-         o_ymajortick = n;
+      if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
+        if (n > 1 && n < 100)
+          o_ymajortick = n;
     } else if (lx == S_MINOR)
-      if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE)
-       if (n >= 0 && n < 100)
-         o_yminortick = n;
-    break;
+      if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE)
+        if (n >= 0 && n < 100)
+          o_yminortick = n;
+        break;
   case S_LXFRAC:
-    if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) {
+    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
       if (n >= 0) {
-       v_lxfrac = n;
-       s_lxfrac = TRUE;
+        v_lxfrac = n;
+        s_lxfrac = TRUE;
       }
     } else
       s_lxfrac = FALSE;
     break;
   case S_LYFRAC:
-    if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) {
+    if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) {
       if (n >= 0) {
-       v_lyfrac = n;
-       s_lyfrac = TRUE;
+        v_lyfrac = n;
+        s_lyfrac = TRUE;
       }
     } else
       s_lyfrac = FALSE;
@@ -366,8 +376,8 @@ EZPlot::do_cmd (int lx)
     fprintf (stderr, "Unimplemented EZPLOT command\n");
     break;
   }
-
-  pol_reader ();
+  
+  m_pol.reader ();
   return (true);
 }
 
@@ -379,98 +389,96 @@ EZPlot::bad_option (char *opt)
   sys_error (ERR_WARNING, "INVALID option: %s", opt);
 }
 
-/*----------------------------------------------------------------------*/
-/*                     LEXIGRAPHICAL CODES                             */
-/*----------------------------------------------------------------------*/
-
-static struct key {
-  char *keyword;
-  int code;
-} keytab[] = {
-    {"solid",  S_SOLID},
-       {"dash", S_DASH},
-           {"noline",  S_NOLINE},
-               {"black",       S_BLACK},
-                   {"red",             S_RED},
-                       {"blue",                S_BLUE},
-                           {"green",   S_GREEN},
-                               {"pen",         S_PEN},
-                                   {"symbol",  S_SYMBOL},
-                                       {"every",       S_EVERY},    
-                                           {"none",            S_NONE},  
-                       {"legend",      S_LEGEND},
-                         {"xlegend",   S_XLEGEND},
-                           {"ylegend", S_YLEGEND},
-
-                             {"xlin",          S_XLIN},
-                               {"ylin",                S_YLIN},
-                                 {"xlog",              S_XLOG},
-                                   {"ylog",            S_YLOG},
-                                     {"xlabel",        S_XLABEL},
-                                       {"ylabel",      S_YLABEL},
-                                         {"xlength",   S_XLENGTH},
-                                           {"ylength", S_YLENGTH},
-
-                                             {"xticks",        S_XTICKS},
-                                               {"yticks",      S_YTICKS},
-                                                 {"above",     S_ABOVE},
-                                                   {"label",   S_LABEL},
-                                                     {"below", S_BELOW},
-                                                       {"nolabel",     S_NOLABEL},
-                                                         {"right",     S_RIGHT},
-                                                           {"left",            S_LEFT},
-
-                                                             {"xautoscale",    S_XAUTOSCALE},
-                                                               {"yautoscale",  S_YAUTOSCALE},
-                                                                 {"xmin",              S_XMIN},
-                                                                   {"ymin",            S_YMIN},
-                                                                     {"xmax",          S_XMAX},
-                                                                       {"ymax",                S_YMAX},
-                                                                         {"lxfrac",    S_LXFRAC},
-                                                                           {"lyfrac",  S_LYFRAC},
-                                                                             {"xcross",        S_XCROSS},
-                                                                               {"ycross",      S_YCROSS},
-                                                                                 {"noxaxis",   S_NOXAXIS},
-                                                                                   {"noyaxis", S_NOYAXIS},
-                                                                                     {"xporigin",      S_XPORIGIN},
-                                                                                       {"yporigin",    S_YPORIGIN},
-                                                                                         {"title",     S_TITLE},
-                                                                                           {"xtitle",  S_XTITLE},
-                                                                                             {"ytitle",        S_YTITLE},
 
-                                                                                               {"replot",      S_REPLOT},
-                                                                                                 {"clear",     S_CLEAR},
-                                                                                                   {"store",   S_STORE},
-                                                                                                     {"restore",       S_RESTORE},
-                                                                                                           {"amark",   S_AMARK},
-                                                                                                               {"units",       S_UNITS},
-                                                                                                                 {"inches",    S_INCHES},
-                                                                                                                   {"user",            S_USER},
-
-                                                                                                                     {"data",          S_DATA},
-                                                                                                                       {"help",                S_HELP},
-                                                                                                                         {"exit",              S_EXIT},
-
-                                                                                                                           {"box",             S_BOX},
-                                                                                                                             {"nobox", S_NOBOX},
-                                                                                                                               {"grid",                S_GRID},
-                                                                                                                                 {"nogrid",    S_NOGRID},
-                                                                                                                                   {"major",   S_MAJOR},
-                                                                                                                                     {"minor", S_MINOR},
-                                                                                                                                       {"color",       S_COLOR},
-                                                                                                                                         {"legendbox", S_LEGENDBOX},
-
-                                                                                                                                               {"no",          S_NO},
-
-                                                                                                                                                 {"textsize",  S_TEXTSIZE},
-                                                                                                                                                       };
+//----------------------------------------------------------------------
+//                     KEYWORDS / CODES TABLE
+//----------------------------------------------------------------------
+const struct KeywordCodeTable EZPlot::m_sKeywords[] =
+{
+  {"solid",    S_SOLID},
+  {"dash", S_DASH},
+  {"curve", S_CURVE},
+  {"noline",   S_NOLINE},
+  {"black",    S_BLACK},
+  {"red",              S_RED},
+  {"blue",             S_BLUE},
+  {"green",    S_GREEN},
+  {"pen",              S_PEN},
+  {"symbol",   S_SYMBOL},
+  {"every",    S_EVERY},    
+  {"none",             S_NONE},  
+  {"legend",   S_LEGEND},
+  {"xlegend",  S_XLEGEND},
+  {"ylegend",  S_YLEGEND},
+  
+  {"xlin",             S_XLIN},
+  {"ylin",             S_YLIN},
+  {"xlog",             S_XLOG},
+  {"ylog",             S_YLOG},
+  {"xlabel",   S_XLABEL},
+  {"ylabel",   S_YLABEL},
+  {"xlength",  S_XLENGTH},
+  {"ylength",  S_YLENGTH},
+  
+  {"xticks",   S_XTICKS},
+  {"yticks",   S_YTICKS},
+  {"above",    S_ABOVE},
+  {"label",    S_LABEL},
+  {"below",    S_BELOW},
+  {"nolabel",  S_NOLABEL},
+  {"right",    S_RIGHT},
+  {"left",             S_LEFT},
+  
+  {"xautoscale",       S_XAUTOSCALE},
+  {"yautoscale",       S_YAUTOSCALE},
+  {"xmin",             S_XMIN},
+  {"ymin",             S_YMIN},
+  {"xmax",             S_XMAX},
+  {"ymax",             S_YMAX},
+  {"lxfrac",   S_LXFRAC},
+  {"lyfrac",   S_LYFRAC},
+  {"xcross",   S_XCROSS},
+  {"ycross",   S_YCROSS},
+  {"noxaxis",  S_NOXAXIS},
+  {"noyaxis",  S_NOYAXIS},
+  {"xporigin", S_XPORIGIN},
+  {"yporigin", S_YPORIGIN},
+  {"title",    S_TITLE},
+  {"xtitle",   S_XTITLE},
+  {"ytitle",   S_YTITLE},
+  
+  {"replot",   S_REPLOT},
+  {"clear",    S_CLEAR},
+  {"store",    S_STORE},
+  {"restore",  S_RESTORE},
+  {"amark",    S_AMARK},
+  {"units",    S_UNITS},
+  {"inches",   S_INCHES},
+  {"user",             S_USER},
+  
+  {"data",             S_DATA},
+  {"help",             S_HELP},
+  {"exit",             S_EXIT},
+  
+  {"box",              S_BOX},
+  {"nobox",    S_NOBOX},
+  {"grid",             S_GRID},
+  {"nogrid",   S_NOGRID},
+  {"major",    S_MAJOR},
+  {"minor",    S_MINOR},
+  {"color",    S_COLOR},
+  {"legendbox",        S_LEGENDBOX},
+  
+  {"no",               S_NO},
+  
+  {"textsize", S_TEXTSIZE},
+};
 
-static const unsigned int NKEYS=(sizeof(keytab) / sizeof(struct key));
+const int EZPlot::NKEYS = (sizeof(EZPlot::m_sKeywords) / sizeof (struct KeywordCodeTable));
 
 void 
-EZPlot::initkw(void)
+EZPlot::initKeywords ()
 {
-  for (unsigned int i = 0; i < NKEYS; i++)
-    if (! pol_install(keytab[i].keyword, keytab[i].code))
-      sys_error(ERR_SEVERE, "error installing ezset keywords [initkw]");
+  for (int i = 0; i < NKEYS; i++)
+    m_pol.addKeyword (m_sKeywords[i].keyword, m_sKeywords [i].code);
 }