X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=libctgraphics%2Fezset.cpp;h=f04178728a2dff94027a883f063e14490349071e;hp=b380e9a00ff4f021eef71ff1d5d030c421dd056b;hb=9f29c8b32c972db1178d6f8551d5cd57ceb67083;hpb=5ec5449357eaae253d6b1026621262480e2efa63 diff --git a/libctgraphics/ezset.cpp b/libctgraphics/ezset.cpp index b380e9a..f041787 100644 --- a/libctgraphics/ezset.cpp +++ b/libctgraphics/ezset.cpp @@ -4,9 +4,9 @@ ** 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.12 2000/12/25 21:54:26 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 @@ -26,57 +26,38 @@ #include "ezplot.h" #include "pol.h" -bool EZPlot::ezset_initialized = false; - - -bool -EZPlot::ezset (const std::string& command) -{ - return ezset (command.c_str()); -} + +bool +EZPlot::ezset (const std::string& command) +{ + return ezset (command.c_str()); +} bool EZPlot::ezset (const char* const command) { - if (! ezset_initialized) { - pol_init(); - initKeywords(); - 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 ezcmd (command); } bool EZPlot::ezcmd (const char* const comm) { - pol_usefile (P_USE_STR, ""); - set_inputline (comm); + m_pol.usefile (POL::P_USE_STR, ""); + m_pol.set_inputline (comm); - char str[MAXTOK+1]; + 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); } @@ -91,7 +72,7 @@ EZPlot::do_cmd (int lx) switch (lx) { case S_TEXTSIZE: - 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) { v_textsize = f; s_textsize = TRUE; @@ -100,37 +81,37 @@ EZPlot::do_cmd (int lx) } 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)); - if (m_iCurrentCurve >= 0) + 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 @@ -163,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; } @@ -190,37 +171,37 @@ EZPlot::do_cmd (int lx) o_linestyle = SGP::LS_SOLID; break; case S_DASH: - int ls; - ls = SGP::LS_DASH1; - 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) 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); + 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 (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) + if (m_pol.readInteger (&n, POL::TT_REAL, FALSE, 0, 0) == TRUE) { - if (n >= 0) { + if (n >= 0) { if (m_iCurrentCurve < 0) - o_color = n; - else - setColor (m_iCurrentCurve, n); + o_color = n; + else + setColor (m_iCurrentCurve, n); } else bad_option("The color you picked"); } @@ -238,47 +219,47 @@ 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; 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; 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; 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; 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 (m_pol.readFloat (&f, POL::TT_REAL, FALSE, 0.0, 0.0) == TRUE) { if (f >= 0.0 && f < 1.0) { v_xlegend = f; @@ -289,7 +270,7 @@ EZPlot::do_cmd (int lx) } break; case S_YLEGEND: - 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) { v_ylegend = f; @@ -300,40 +281,40 @@ EZPlot::do_cmd (int lx) } break; case S_SYMBOL: - 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 && n <= MAXSYMBOL) { - if (m_iCurrentCurve < 0) - o_symbol = n; - else - setSymbol (m_iCurrentCurve, n); - } + 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 (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); + if (n > 0) + sym = n; + if (m_iCurrentCurve < 0) + o_symfreq = sym; + else + setSymbolFreq (m_iCurrentCurve, sym); } - } else if (pol_word ("none",4) == TRUE) { + } else if (m_pol.readWord ("none",4) == TRUE) { o_symbol = -1; } } break; - case S_CURVE: - if (pol_integer (&n, TT_REAL, FALSE, 0, 0) == TRUE) { - if (n > 0) - m_iCurrentCurve = n - 1; - } else { - if (pol_word ("all",3) == TRUE) - m_iCurrentCurve = -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; @@ -344,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 (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 (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; @@ -364,16 +345,16 @@ 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 (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 (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; @@ -382,7 +363,7 @@ EZPlot::do_cmd (int lx) 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; @@ -396,26 +377,26 @@ EZPlot::do_cmd (int lx) break; } - pol_reader (); + m_pol.reader (); return (true); } - + void EZPlot::bad_option (char *opt) { sys_error (ERR_WARNING, "INVALID option: %s", opt); } - + //---------------------------------------------------------------------- // KEYWORDS / CODES TABLE //---------------------------------------------------------------------- -const struct KeywordCodeTable EZPlot::m_sKeywords[] = -{ +const struct KeywordCodeTable EZPlot::m_sKeywords[] = +{ {"solid", S_SOLID}, - {"dash", S_DASH}, + {"dash", S_DASH}, {"curve", S_CURVE}, {"noline", S_NOLINE}, {"black", S_BLACK}, @@ -492,13 +473,12 @@ const struct KeywordCodeTable EZPlot::m_sKeywords[] = {"textsize", S_TEXTSIZE}, }; - + const int EZPlot::NKEYS = (sizeof(EZPlot::m_sKeywords) / sizeof (struct KeywordCodeTable)); void EZPlot::initKeywords () { for (int i = 0; i < NKEYS; i++) - if (! pol_install (m_sKeywords[i].keyword, m_sKeywords [i].code)) - sys_error(ERR_SEVERE, "error installing ezset keywords [EZPlot::initKeywords]"); + m_pol.addKeyword (m_sKeywords[i].keyword, m_sKeywords [i].code); }