X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=libctgraphics%2Fezset.cpp;h=f04178728a2dff94027a883f063e14490349071e;hp=b850f56c2f17db0eec2bb58363b2de009442bcc4;hb=9f29c8b32c972db1178d6f8551d5cd57ceb67083;hpb=bf7295a63667dcca309389ee6dd5328a3a25f22b diff --git a/libctgraphics/ezset.cpp b/libctgraphics/ezset.cpp index b850f56..f041787 100644 --- a/libctgraphics/ezset.cpp +++ b/libctgraphics/ezset.cpp @@ -1,8 +1,12 @@ /***************************************************************************** +** FILE IDENTIFICATION +** +** EZSET - Parameter control for EZPLOT +** ** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg +** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: ezset.cpp,v 1.1 2000/06/19 18:05:03 kevin Exp $ +** $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 @@ -17,650 +21,464 @@ ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -/*----------------------------------------------------------------------*/ -/* EZSET - Parameter control for EZPLOT */ -/* */ -/*----------------------------------------------------------------------*/ +#include "ctsupport.h" #include "ezplot.h" #include "pol.h" -#include "cio.h" - -static int ezcmd (char *comm); -static int do_cmd(int lx); -static void do_data(void); -static void do_help(void); -static void bad_option(char *opt); -static void initkw(void); -static int modeinteract = FALSE; -static int curveinteract = -1; -static int ezset_firstcall = TRUE; -static int eztrace = TRUE; -int -ezset (char *command) +bool +EZPlot::ezset (const std::string& command) { - if (ezplot_firstcall == TRUE) { - ezinit (); - } - if (ezset_firstcall == TRUE) { - 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 ("="); - ezset_firstcall = FALSE; - - pol_usefile (P_USE_STR,""); - set_inputline ("!eoc ,"); - pol_reader (); - pol_closefile (); - } - return (ezcmd (command)); + return ezset (command.c_str()); } -static int -ezcmd (char *comm) +bool +EZPlot::ezset (const char* const command) { - char str[MAXTOK+1]; - int code, retval; - retval = TRUE; - pol_usefile (P_USE_STR, ""); - set_inputline (comm); - - if (pol_usertok (str, &code) == FALSE) { - fputs("Illegal EZSET command\n", stderr); - pol_reader(); - retval = FALSE; - goto ezexit; - } - - if (code != S_INTERACTIVE) { - retval = do_cmd (code); - } else { - modeinteract = TRUE; - pol_reader(); - do { - fputs ("Enter EZSET command, DATA, EXIT, or HELP\n>", stderr); - if (get_inputline (stdin) != TRUE) - goto ezexit; - while (pol_lookchar() != EOF) { - if (pol_usertok (str, &code) == FALSE) { - if (pol_lookchar() != EOF) { - fputs ("illegal EZSET command\n", stderr); - pol_reader(); - } - } else if (code == S_DATA) { - pol_reader (); - do_data (); - } else if (code == S_HELP) { - pol_reader(); - do_help (); - } else if (code == S_EXIT) { - pol_reader(); - goto ezexit; - } else - do_cmd (code); - } - putc (NEWLINE, stderr); - } while (TRUE); - modeinteract = FALSE; - curveinteract = -1; - } -ezexit: - pol_closefile(); /* close input string file */ - return (retval); + return ezcmd (command); } - -static int -do_cmd (int lx) +bool +EZPlot::ezcmd (const char* const comm) { - char str [MAXTOK+1]; - int n; - double f; - - switch (lx) { - case S_CRT: - if (pol_word("no", 2) == TRUE) - ez.d_usecrt = FALSE; - else { - ez.d_usecrt = TRUE; - } - break; - case S_EPSON: - if (pol_word("no", 2) == TRUE) - ez.d_useprt = FALSE; - else - ez.d_useprt = TRUE; - break; - case S_TEXTSIZE: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) - { - if (f >= 0.0 && f <= 1.0) { - ez.v_textsize = f; - ez.s_textsize = TRUE; - } else - ez.s_textsize = FALSE; - } - break; - case S_PRTMODE: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) - { - if (n >= 0 && n <= 6) - ez.d_prtmode = n; - else - ez.d_prtmode = PRTMODE_DEF; - } - break; - case S_XBUF: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) - { - if (n > 2 && n <= 960) - ez.d_xprtbuf = n; - else - ez.d_xprtbuf = XBUF_DEF; - } - break; - case S_YBUF: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) - { - if (n > 2 && n <= 960) - ez.d_yprtbuf = n; - else - ez.d_yprtbuf = YBUF_DEF; - } - break; - case S_REPLOT: - ez.i_plotimmediate = TRUE; - ezplot (NULL, NULL, 0); -#if 0 - if (modeinteract == TRUE) - WAITKEY(); -#endif - ez.i_plotimmediate = FALSE; - break; - case S_CLEAR: - ezclear (); - break; - case S_TITLE: - gettext (ez.c_title, MAXTITLE); - break; - case S_LEGEND: - gettext (ez.c_legend, MAXLEGEND); - if (modeinteract == TRUE && curveinteract >= 0) - strncpy (ez.curve[curveinteract].legend, ez.c_legend, MAXLEGEND); - break; - case S_XLABEL: - gettext (ez.c_xlabel, MAXLABEL); - break; - case S_YLABEL: - gettext (ez.c_ylabel, MAXLABEL); - break; - case S_XCROSS: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) { - ez.v_xcross = f; - ez.s_xcross = TRUE; - } else - ez.s_xcross = FALSE; - break; - case S_YCROSS: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) { - ez.v_ycross = f; - ez.s_ycross = TRUE; - } else - ez.s_ycross = FALSE; - break; - case S_NOXAXIS: - ez.o_xaxis = NOAXIS; - break; - case S_NOYAXIS: - ez.o_yaxis = NOAXIS; - break; - case S_XLIN: - ez.o_xaxis = LINEAR; - break; - case S_YLIN: - ez.o_yaxis = LINEAR; - break; - case S_XLOG: - ez.o_xaxis = LOG; - break; - case S_YLOG: - ez.o_yaxis = LOG; - break; - case S_XAUTOSCALE: - ez.s_xmin = FALSE; - ez.s_xmax = FALSE; - break; - case S_YAUTOSCALE: - ez.s_ymin = FALSE; - ez.s_ymax = FALSE; - break; - case S_XMIN: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) { - ez.v_xmin = f; - ez.s_xmin = TRUE; - } - break; - case S_XMAX: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) { - ez.v_xmax = f; - ez.s_xmax = TRUE; - } - break; - case S_YMIN: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) { - ez.v_ymin = f; - ez.s_ymin = TRUE; - } - break; - case S_YMAX: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) { - ez.v_ymax = f; - ez.s_ymax = TRUE; - } - break; - case S_SOLID: - ez.o_linestyle = LS_SOLID; - if (modeinteract == TRUE && curveinteract >= 0) - ez.curve[curveinteract].linestyle = LS_SOLID; - break; - case S_DASH: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) { - if (n == 1) - ez.o_linestyle = LS_DASH1; - else if (n == 2) - ez.o_linestyle = LS_DASH2; - else if (n == 3) - ez.o_linestyle = LS_DASH3; - else if (n == 4) - ez.o_linestyle = LS_DASH4; - else - ez.o_linestyle = LS_DASH1; - } else - ez.o_linestyle = LS_DASH1; - if (modeinteract == TRUE && curveinteract >= 0) - ez.curve[curveinteract].linestyle = ez.o_linestyle; - break; - case S_NOLINE: - ez.o_linestyle = LS_NOLINE; - if (modeinteract == TRUE && curveinteract >= 0) - ez.curve[curveinteract].linestyle = LS_NOLINE; - break; - case S_PEN: - case S_COLOR: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) - { - if (n >= 0 && n <= MAXCOLOR) - ez.o_color = n; - else - bad_option("The color you picked"); - } - if (modeinteract == TRUE && curveinteract >= 0) - ez.curve[curveinteract].color = ez.o_color; - break; - case S_BOX: - ez.o_box = TRUE; - break; - case S_NOBOX: - ez.o_box = FALSE; - break; - case S_GRID: - ez.o_grid = TRUE; - break; - case S_NOGRID: - ez.o_grid = FALSE; - break; - case S_XLENGTH: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) - if (f > 0.0 && f <= 1.0) - ez.o_xlength = f; - break; - case S_YLENGTH: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) - if (f > 0.0 && f <= 1.0) - ez.o_ylength = f; - break; - case S_XPORIGIN: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) - if (f >= 0.0 && f < 1.0) - ez.o_xporigin = f; - break; - case S_YPORIGIN: - if (pol_float (&f, TT_REAL, FALSE, 0.0, 0.0) == TRUE) - if (f >= 0.0 && f < 1.0) - ez.o_yporigin = f; - break; - case S_TAG: - if (pol_word("no", 2) == TRUE) - ez.o_tag = FALSE; - else if (pol_word("off", 2) == TRUE) - ez.o_tag = FALSE; - else - ez.o_tag = TRUE; - break; - case S_LEGENDBOX: - if (pol_word("inside", 2) == TRUE) - ez.o_legendbox = INSIDE; - else if (pol_word("outside", 3) == TRUE) - ez.o_legendbox = OUTSIDE; - else if (pol_word("none",2) == TRUE) - ez.o_legendbox = NOLEGEND; - else { - gettext (str, 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) { - ez.v_xlegend = f; - ez.s_xlegend = TRUE; - } - else - ez.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) { - ez.v_ylegend = f; - ez.s_ylegend = TRUE; - } - else - ez.s_ylegend = FALSE; - } - break; - case S_CURVES: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) { - if (n < 1) - n = 1; - else if (n > MAXCURVES) - n = MAXCURVES; - if (modeinteract == TRUE) { - curveinteract = n - 1; - if (ez.o_unknowncurves == FALSE && ez.o_reqcurves < n) - ez.o_reqcurves = n; - } else { - ezfree (); - ez.o_reqcurves = n; - } - } else { - if (pol_word ("unknown", 7) == TRUE) - ez.o_unknowncurves = TRUE; - else if (pol_word ("end", 3) == TRUE) { - ez.o_unknowncurves = FALSE; - ez.o_reqcurves = ez.i_numcurves; - ez.i_plotimmediate = TRUE; - ezplot (NULL, NULL, 0); - ez.i_plotimmediate = FALSE; - } - } - break; - case S_SYMBOL: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) { - if (n > 0 && n <= MAXSYMBOL) - ez.o_symbol = n; - else - ez.o_symbol = 1; - if (modeinteract == TRUE && curveinteract >= 0) - ez.curve[curveinteract].symbol = ez.o_symbol; - } else { - if (pol_word("every",5) == TRUE) { - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) { - if (n > 0) - ez.o_symfreq = n; - else - ez.o_symfreq = 1; - if (modeinteract == TRUE && curveinteract >= 0) - ez.curve[curveinteract].symfreq = ez.o_symfreq; - } - } else if (pol_word ("none",4) == TRUE) { - ez.o_symbol = -1; - if (modeinteract == TRUE && curveinteract >= 0) - ez.curve[curveinteract].symbol = ez.o_symbol; - } - } - break; - case S_XTICKS: - if (pol_usertok(str,&lx) == FALSE) - break; - if (lx == S_ABOVE) - ez.o_xticks = ABOVE; - else if (lx == S_BELOW) - ez.o_xticks = BELOW; - else if (lx == S_NOLABEL) - ez.o_xtlabel = FALSE; - else if (lx == S_LABEL) - ez.o_xtlabel = TRUE; - else if (lx == S_MAJOR) { - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) - if (n > 1 && n < 100) - ez.o_xmajortick = n; - } else if (lx == S_MINOR) - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) - if (n >= 0 && n < 100) - ez.o_xminortick = n; - break; - case S_YTICKS: - if (pol_usertok(str,&lx) == FALSE) - break; - if (lx == S_RIGHT) - ez.o_yticks = RIGHT; - else if (lx == S_LEFT) - ez.o_yticks = LEFT; - else if (lx == S_NOLABEL) - ez.o_ytlabel = FALSE; - else if (lx == S_LABEL) - ez.o_ytlabel = TRUE; - else if (lx == S_MAJOR) { - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) - if (n > 1 && n < 100) - ez.o_ymajortick = n; - } else if (lx == S_MINOR) - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) - if (n >= 0 && n < 100) - ez.o_yminortick = n; - break; - case S_LXFRAC: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) { - if (n >= 0) { - ez.v_lxfrac = n; - ez.s_lxfrac = TRUE; - } - } else - ez.s_lxfrac = FALSE; - break; - case S_LYFRAC: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) { - if (n >= 0) { - ez.v_lyfrac = n; - ez.s_lyfrac = TRUE; - } - } else - ez.s_lyfrac = FALSE; - break; - case S_USTART: - if (pol_word("no", 2) == TRUE) - ez.o_ustart = FALSE; - else - ez.o_ustart = TRUE; - break; - case S_UFINISH: - if (pol_word("no", 2) == TRUE) - ez.o_ufinish = FALSE; - else - ez.o_ufinish = TRUE; - break; - default: - fprintf (stderr, "Unimplemented EZPLOT command\n"); - break; - } - - pol_reader (); - return (TRUE); + m_pol.usefile (POL::P_USE_STR, ""); + m_pol.set_inputline (comm); + + char str [POL::MAXTOK+1]; + int code; + bool retval = true; + 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); + + m_pol.closefile(); /* close input string file */ + return (retval); } -static void do_data (void) -{ - double x[MAXPTS], y[MAXPTS], d; - int c, i; - - printf ("Enter your data in free format\n"); - printf ("Alternate X and Y coordinates\n"); - printf ("Type ^Z (control Z) to terminate data entry\n"); - - pol_usefile (P_USE_FILE, ""); - for (i = 0; i < MAXPTS; i++) { - if (pol_float (&d, TT_REAL, FALSE, 0, 0) == TRUE) - x[i] = d; - else - break; - if (pol_float (&d, TT_REAL, FALSE, 0, 0) == TRUE) - y[i] = d; - else - break; - } - - if ((c = pol_inchar()) != EOF) { - ungetc (c, stdin); - printf("Error reading in points, read char %d, plotting %d points\n", c, i); - } - if (i > 0) - ezplot (x, y, i); - pol_closefile (); -} - -static void do_help (void ) +bool +EZPlot::do_cmd (int lx) { - fputs ("EZSET Help: not available\n", stderr); + char str [1024]; + char strIn [1024]; + int n; + double f; + + switch (lx) { + case S_TEXTSIZE: + 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 (m_pSGP); + break; + case S_CLEAR: + clearCurves (); + break; + case S_TITLE: + m_pol.readText (strIn, sizeof(strIn)); + c_title = strIn; + break; + case S_LEGEND: + m_pol.readText (strIn, sizeof(strIn)); + if (m_iCurrentCurve >= 0) + setLegend (m_iCurrentCurve, strIn); + break; + case S_XLABEL: + m_pol.readText (strIn, sizeof(strIn)); + c_xlabel = strIn; + break; + case S_YLABEL: + m_pol.readText (strIn, sizeof(strIn)); + c_ylabel = strIn; + break; + case S_XCROSS: + 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 (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) { + v_ycross = f; + s_ycross = TRUE; + } else + s_ycross = FALSE; + break; + case S_NOXAXIS: + o_xaxis = NOAXIS; + break; + case S_NOYAXIS: + o_yaxis = NOAXIS; + break; + case S_XLIN: + o_xaxis = LINEAR; + break; + case S_YLIN: + o_yaxis = LINEAR; + break; + case S_XLOG: + o_xaxis = LOG; + break; + case S_YLOG: + o_yaxis = LOG; + break; + case S_XAUTOSCALE: + s_xmin = FALSE; + s_xmax = FALSE; + break; + case S_YAUTOSCALE: + s_ymin = FALSE; + s_ymax = FALSE; + break; + case S_XMIN: + 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 (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) { + v_xmax = f; + s_xmax = TRUE; + } + break; + case S_YMIN: + 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 (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) { + v_ymax = f; + s_ymax = TRUE; + } + break; + case S_SOLID: + o_linestyle = SGP::LS_SOLID; + break; + case S_DASH: + int ls; + ls = SGP::LS_DASH1; + if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) { + if (n == 1) + ls = SGP::LS_DASH1; + else if (n == 2) + ls = SGP::LS_DASH2; + else if (n == 3) + ls = SGP::LS_DASH3; + else if (n == 4) + 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 (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; + break; + case S_NOBOX: + o_box = FALSE; + break; + case S_GRID: + o_grid = TRUE; + break; + case S_NOGRID: + o_grid = FALSE; + break; + case S_XLENGTH: + 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; + case S_YLENGTH: + 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; + case S_XPORIGIN: + 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; + case S_YPORIGIN: + 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; + case S_TAG: + if (m_pol.readWord("no", 2) == TRUE) + o_tag = FALSE; + else if (m_pol.readWord("off", 2) == TRUE) + o_tag = FALSE; + else + o_tag = TRUE; + break; + case S_LEGENDBOX: + if (m_pol.readWord("inside", 2) == TRUE) + o_legendbox = INSIDE; + else if (m_pol.readWord("outside", 3) == TRUE) + o_legendbox = OUTSIDE; + else if (m_pol.readWord("none",2) == TRUE) + o_legendbox = NOLEGEND; + else { + m_pol.readText (str, POL::MAXTOK); + bad_option(str); + } + break; + case S_XLEGEND: + 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 (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 (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 (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 (m_pol.readUserToken(str,&lx) == FALSE) + break; + if (lx == S_ABOVE) + o_xticks = ABOVE; + else if (lx == S_BELOW) + o_xticks = BELOW; + else if (lx == S_NOLABEL) + o_xtlabel = FALSE; + else if (lx == S_LABEL) + o_xtlabel = TRUE; + else if (lx == S_MAJOR) { + 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 (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) + if (n >= 0 && n < 100) + o_xminortick = n; + break; + case S_YTICKS: + if (m_pol.readUserToken(str,&lx) == FALSE) + break; + if (lx == S_RIGHT) + o_yticks = RIGHT; + else if (lx == S_LEFT) + o_yticks = LEFT; + else if (lx == S_NOLABEL) + o_ytlabel = FALSE; + else if (lx == S_LABEL) + o_ytlabel = TRUE; + else if (lx == S_MAJOR) { + 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 (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) + if (n >= 0 && n < 100) + o_yminortick = n; + break; + case S_LXFRAC: + if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) { + if (n >= 0) { + v_lxfrac = n; + s_lxfrac = TRUE; + } + } else + s_lxfrac = FALSE; + break; + case S_LYFRAC: + if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) { + if (n >= 0) { + v_lyfrac = n; + s_lyfrac = TRUE; + } + } else + s_lyfrac = FALSE; + break; + break; + default: + fprintf (stderr, "Unimplemented EZPLOT command\n"); + break; + } + + m_pol.reader (); + return (true); } -static void -bad_option (char *opt) + +void +EZPlot::bad_option (char *opt) { - fprintf(stderr,"%s is an INVALID option (sorry!)\n", 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, */ - - "curves", S_CURVES, - "curve", S_CURVES, -/* "unknown", S_UNKNOWN, */ -/* "end", S_END, */ - "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, - "ustart", S_USTART, - "ufinish", S_UFINISH, - "amark", S_AMARK, - "interactive", S_INTERACTIVE, - "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, - - "epson", S_EPSON, - "crt", S_CRT, - "no", S_NO, - - "textsize", S_TEXTSIZE, - "xbuf", S_XBUF, - "ybuf", S_YBUF, - "prtmode", S_PRTMODE, +//---------------------------------------------------------------------- +// 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}, }; -#define NKEYS (sizeof(keytab) / sizeof(struct key)) +const int EZPlot::NKEYS = (sizeof(EZPlot::m_sKeywords) / sizeof (struct KeywordCodeTable)); -static void initkw(void) +void +EZPlot::initKeywords () { - int i; - - for (i = 0; i < NKEYS; i++) - if (pol_install(keytab[i].keyword, keytab[i].code) == FALSE) - 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); }