Initial release of Maemo 5 port of gnuplot
[gnuplot] / src / tables.c
diff --git a/src/tables.c b/src/tables.c
new file mode 100644 (file)
index 0000000..aaf2d16
--- /dev/null
@@ -0,0 +1,723 @@
+#ifndef lint
+static char *RCSid() { return RCSid("$Id: tables.c,v 1.71.2.5 2008/06/25 22:47:50 sfeam Exp $"); }
+#endif
+
+/* GNUPLOT - tables.c */
+
+/*[
+ * Copyright 1999, 2004   Lars Hecking
+ *
+ * Permission to use, copy, and distribute this software and its
+ * documentation for any purpose with or without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.
+ *
+ * Permission to modify the software is granted, but not the right to
+ * distribute the complete modified source code.  Modifications are to
+ * be distributed as patches to the released version.  Permission to
+ * distribute binaries produced by compiling modified sources is granted,
+ * provided you
+ *   1. distribute the corresponding source modifications from the
+ *    released version in the form of a patch file along with the binaries,
+ *   2. add special version identification to distinguish your version
+ *    in addition to the base release version number,
+ *   3. provide your name and address as the primary contact for the
+ *    support of your modified version, and
+ *   4. retain our contact information in regard to use of the base
+ *    software.
+ * Permission to distribute the released version of the source code along
+ * with corresponding source modifications in the form of a patch file is
+ * granted with same provisions 2 through 4 for binary distributions.
+ *
+ * This software is provided "as is" without express or implied warranty
+ * to the extent permitted by applicable law.
+]*/
+
+#include "tables.h"
+
+#include "command.h"
+#include "fit.h"
+#include "setshow.h"
+#include "term_api.h"
+#include "util.h"
+# include "getcolor.h"
+
+/* gnuplot commands */
+
+/* the actual commands */
+const struct gen_ftable command_ftbl[] =
+{
+    { "ra$ise", raise_command },
+    { "low$er", lower_command },
+#ifdef USE_MOUSE
+    { "bi$nd", bind_command },
+#endif
+    { "ca$ll", call_command },
+    { "cd", changedir_command },
+    { "cl$ear", clear_command },
+    { "ex$it", exit_command },
+    { "f$it", fit_command },
+    { "h$elp", help_command },
+    { "?", help_command },
+    { "hi$story", history_command },
+    { "if", if_command },
+    { "else", else_command },
+    { "l$oad", load_command },
+    { "pa$use", pause_command },
+    { "p$lot", plot_command },
+    { "pr$int", print_command },
+    { "pwd", pwd_command },
+    { "q$uit", exit_command },
+    { "rep$lot", replot_command },
+    { "re$read", reread_command },
+    { "res$et", reset_command },
+    { "sa$ve", save_command },
+    { "scr$eendump", screendump_command },
+    { "se$t", set_command },
+    { "she$ll", do_shell },
+    { "sh$ow", show_command },
+    { "sp$lot", splot_command },
+    { "sy$stem", system_command },
+    { "test", test_command },
+    { "und$efine", undefine_command },
+    { "uns$et", unset_command },
+    { "up$date", update_command },
+    { ";", null_command },
+    /* last key must be NULL */
+    { NULL, invalid_command }
+};
+
+/* 'plot' and 'splot' */
+/* HBB 990829: unused, yet? */
+/* Lars 991108: yes, because the 'plot' parser is a real bitch :( */
+/* pm 011129: ...and therefore I'm putting it into #if 0 ... #endif.
+ * Anyway, this table can't be used as below because some options
+ * belong to the group of data file options and others to the group
+ * of plot options
+ */
+#if 0
+const struct gen_table plot_tbl[] =
+{
+    { "ax$es", P_AXES },
+    { "ax$is", P_AXES },
+    { "bin$ary", P_BINARY },
+    { "ev$ery", P_EVERY },
+    { "i$ndex", P_INDEX },
+    { "mat$rix", P_MATRIX },
+    { "s$mooth", P_SMOOTH },
+    { "thru$", P_THRU },
+    { "t$itle", P_TITLE },
+    { "not$itle", P_NOTITLE },
+    { "u$sing", P_USING },
+    { "w$ith", P_WITH },
+    { NULL, P_INVALID }
+};
+#endif
+
+/* 'plot ax[ei]s' parameter */
+const struct gen_table plot_axes_tbl[] =
+{
+    { "x1y1", AXES_X1Y1 },
+    { "x2y2", AXES_X2Y2 },
+    { "x1y2", AXES_X1Y2 },
+    { "x2y1", AXES_X2Y1 },
+    { NULL, AXES_NONE }
+};
+
+/* 'plot smooth' parameter */
+const struct gen_table plot_smooth_tbl[] =
+{
+    { "a$csplines", SMOOTH_ACSPLINES },
+    { "b$ezier", SMOOTH_BEZIER },
+    { "c$splines", SMOOTH_CSPLINES },
+    { "s$bezier", SMOOTH_SBEZIER },
+    { "u$nique", SMOOTH_UNIQUE },
+    { "f$requency", SMOOTH_FREQUENCY },
+    { NULL, SMOOTH_NONE }
+};
+
+/* 'save' command */
+const struct gen_table save_tbl[] =
+{
+    { "f$unctions", SAVE_FUNCS },
+    { "s$et", SAVE_SET },
+    { "t$erminal", SAVE_TERMINAL },
+    { "v$ariables", SAVE_VARS },
+    { NULL, SAVE_INVALID }
+};
+
+/* 'set' and 'show' commands */
+const struct gen_table set_tbl[] =
+{
+    { "a$ll", S_ALL },
+    { "ac$tion_table", S_ACTIONTABLE },
+    { "at", S_ACTIONTABLE },
+    { "an$gles", S_ANGLES },
+    { "ar$row", S_ARROW },
+    { "au$toscale", S_AUTOSCALE },
+    { "b$ars", S_BARS },
+    { "bor$der", S_BORDER },
+    { "box$width", S_BOXWIDTH },
+    { "cl$abel", S_CLABEL },
+    { "c$lip", S_CLIP },
+    { "cn$trparam", S_CNTRPARAM },
+    { "co$ntours", S_CONTOUR },
+    { "da$ta", S_DATA },
+
+    { "data$file", S_DATAFILE },
+
+    { "dg$rid3d", S_DGRID3D },
+    { "du$mmy", S_DUMMY },
+    { "enc$oding", S_ENCODING },
+    { "dec$imalsign", S_DECIMALSIGN },
+    { "fit", S_FIT },
+    { "font$path", S_FONTPATH },
+    { "fo$rmat", S_FORMAT },
+    { "fu$nction", S_FUNCTIONS },
+    { "fu$nctions", S_FUNCTIONS },
+    { "g$rid", S_GRID },
+    { "hid$den3d", S_HIDDEN3D },
+    { "his$torysize", S_HISTORYSIZE },
+    { "is$osamples", S_ISOSAMPLES },
+    { "k$ey", S_KEY },
+    { "keyt$itle", S_KEYTITLE },
+    { "la$bel", S_LABEL },
+    { "li$nestyle", S_LINESTYLE },
+    { "ls", S_LINESTYLE },
+    { "loa$dpath", S_LOADPATH },
+    { "loc$ale", S_LOCALE },
+    { "log$scale", S_LOGSCALE },
+#ifdef GP_MACROS
+    { "mac$ros", S_MACROS },
+#endif
+    { "map$ping", S_MAPPING },
+    { "map$ping3d", S_MAPPING },
+
+    { "mar$gin", S_MARGIN },
+    { "lmar$gin", S_LMARGIN },
+    { "rmar$gin", S_RMARGIN },
+    { "tmar$gin", S_TMARGIN },
+    { "bmar$gin", S_BMARGIN },
+
+#ifdef USE_MOUSE
+    { "mo$use", S_MOUSE },
+#endif
+    { "multi$plot", S_MULTIPLOT },
+
+    { "mxt$ics", S_MXTICS },
+    { "nomxt$ics", S_NOMXTICS },
+    { "mx2t$ics", S_MX2TICS },
+    { "nomx2t$ics", S_NOMX2TICS },
+    { "myt$ics", S_MYTICS },
+    { "nomyt$ics", S_NOMYTICS },
+    { "my2t$ics", S_MY2TICS },
+    { "nomy2t$ics", S_NOMY2TICS },
+    { "mzt$ics", S_MZTICS },
+    { "nomzt$ics", S_NOMZTICS },
+    { "mcbt$ics", S_MCBTICS },
+    { "nomcbt$ics", S_NOMCBTICS },
+    { "of$fsets", S_OFFSETS },
+    { "or$igin", S_ORIGIN },
+    { "o$utput", SET_OUTPUT },
+    { "pa$rametric", S_PARAMETRIC },
+    { "pm$3d", S_PM3D },
+    { "pal$ette", S_PALETTE },
+    { "colorb$ox", S_COLORBOX },
+    { "colorn$ames", S_COLORNAMES },
+    { "colors", S_COLORNAMES },
+    { "p$lot", S_PLOT },
+    { "poi$ntsize", S_POINTSIZE },
+    { "pol$ar", S_POLAR },
+    { "pr$int", S_PRINT },
+    { "obj$ect", S_OBJECT },
+    { "sa$mples", S_SAMPLES },
+    { "si$ze", S_SIZE },
+    { "st$yle", S_STYLE },
+    { "su$rface", S_SURFACE },
+    { "table", S_TABLE },
+    { "t$erminal", S_TERMINAL },
+    { "termo$ptions", S_TERMOPTIONS },
+    { "ti$cs", S_TICS },
+    { "ticsc$ale", S_TICSCALE },
+    { "ticsl$evel", S_TICSLEVEL },
+    { "timef$mt", S_TIMEFMT },
+    { "tim$estamp", S_TIMESTAMP },
+    { "tit$le", S_TITLE },
+    { "v$ariables", S_VARIABLES },
+    { "ve$rsion", S_VERSION },
+    { "vi$ew", S_VIEW },
+    { "xyp$lane", S_TICSLEVEL },
+
+    { "xda$ta", S_XDATA },
+    { "x2da$ta", S_X2DATA },
+    { "yda$ta", S_YDATA },
+    { "y2da$ta", S_Y2DATA },
+    { "zda$ta", S_ZDATA },
+    { "cbda$ta", S_CBDATA },
+
+    { "xl$abel", S_XLABEL },
+    { "x2l$abel", S_X2LABEL },
+    { "yl$abel", S_YLABEL },
+    { "y2l$abel", S_Y2LABEL },
+    { "zl$abel", S_ZLABEL },
+    { "cbl$abel", S_CBLABEL },
+
+    { "xti$cs", S_XTICS },
+    { "noxti$cs", S_NOXTICS },
+    { "x2ti$cs", S_X2TICS },
+    { "nox2ti$cs", S_NOX2TICS },
+    { "yti$cs", S_YTICS },
+    { "noyti$cs", S_NOYTICS },
+    { "y2ti$cs", S_Y2TICS },
+    { "noy2ti$cs", S_NOY2TICS },
+    { "zti$cs", S_ZTICS },
+    { "nozti$cs", S_NOZTICS },
+    { "cbti$cs", S_CBTICS },
+    { "nocbti$cs", S_NOCBTICS },
+
+    { "xdti$cs", S_XDTICS },
+    { "noxdti$cs", S_NOXDTICS },
+    { "x2dti$cs", S_X2DTICS },
+    { "nox2dti$cs", S_NOX2DTICS },
+    { "ydti$cs", S_YDTICS },
+    { "noydti$cs", S_NOYDTICS },
+    { "y2dti$cs", S_Y2DTICS },
+    { "noy2dti$cs", S_NOY2DTICS },
+    { "zdti$cs", S_ZDTICS },
+    { "nozdti$cs", S_NOZDTICS },
+    { "cbdti$cs", S_CBDTICS },
+    { "nocbdti$cs", S_NOCBDTICS },
+
+    { "xmti$cs", S_XMTICS },
+    { "noxmti$cs", S_NOXMTICS },
+    { "x2mti$cs", S_X2MTICS },
+    { "nox2mti$cs", S_NOX2MTICS },
+    { "ymti$cs", S_YMTICS },
+    { "noymti$cs", S_NOYMTICS },
+    { "y2mti$cs", S_Y2MTICS },
+    { "noy2mti$cs", S_NOY2MTICS },
+    { "zmti$cs", S_ZMTICS },
+    { "nozmti$cs", S_NOZMTICS },
+    { "cbmti$cs", S_CBMTICS },
+    { "nocbmti$cs", S_NOCBMTICS },
+
+    { "xr$ange", S_XRANGE },
+    { "x2r$ange", S_X2RANGE },
+    { "yr$ange", S_YRANGE },
+    { "y2r$ange", S_Y2RANGE },
+    { "zr$ange", S_ZRANGE },
+    { "cbr$ange", S_CBRANGE },
+    { "rr$ange", S_RRANGE },
+    { "tr$ange", S_TRANGE },
+    { "ur$ange", S_URANGE },
+    { "vr$ange", S_VRANGE },
+
+    { "xzeroa$xis", S_XZEROAXIS },
+    { "x2zeroa$xis", S_X2ZEROAXIS },
+    { "yzeroa$xis", S_YZEROAXIS },
+    { "y2zeroa$xis", S_Y2ZEROAXIS },
+    { "zzeroa$xis", S_ZZEROAXIS },
+    { "zeroa$xis", S_ZEROAXIS },
+
+    { "z$ero", S_ZERO },
+    { NULL, S_INVALID }
+};
+
+/* 'set hidden3d' options */
+const struct gen_table set_hidden3d_tbl[] =
+{
+    { "def$aults", S_HI_DEFAULTS },
+    { "off$set", S_HI_OFFSET },
+    { "nooff$set", S_HI_NOOFFSET },
+    { "tri$anglepattern", S_HI_TRIANGLEPATTERN },
+    { "undef$ined", S_HI_UNDEFINED },
+    { "nound$efined", S_HI_NOUNDEFINED },
+    { "alt$diagonal", S_HI_ALTDIAGONAL },
+    { "noalt$diagonal", S_HI_NOALTDIAGONAL },
+    { "bent$over", S_HI_BENTOVER },
+    { "nobent$over", S_HI_NOBENTOVER },
+    { NULL, S_HI_INVALID }
+};
+
+/* 'set key' options */
+const struct gen_table set_key_tbl[] =
+{
+    { "def$ault", S_KEY_DEFAULT },
+    { "on", S_KEY_ON },
+    { "off", S_KEY_OFF },
+    { "t$op", S_KEY_TOP },
+    { "b$ottom", S_KEY_BOTTOM },
+    { "l$eft", S_KEY_LEFT },
+    { "r$ight", S_KEY_RIGHT },
+    { "c$enter", S_KEY_CENTER },
+    { "ver$tical", S_KEY_VERTICAL },
+    { "hor$izontal", S_KEY_HORIZONTAL },
+    { "ov$er", S_KEY_OVER },
+    { "ab$ove", S_KEY_ABOVE },
+    { "u$nder", S_KEY_UNDER },
+    { "be$low", S_KEY_BELOW },
+    { "at", S_KEY_MANUAL },
+    { "ins$ide", S_KEY_INSIDE },
+    { "o$utside", S_KEY_OUTSIDE },
+    { "tm$argin", S_KEY_TMARGIN },
+    { "bm$argin", S_KEY_BMARGIN },
+    { "lm$argin", S_KEY_LMARGIN },
+    { "rm$argin", S_KEY_RMARGIN },
+    { "L$eft", S_KEY_LLEFT },
+    { "R$ight", S_KEY_RRIGHT },
+    { "rev$erse", S_KEY_REVERSE },
+    { "norev$erse", S_KEY_NOREVERSE },
+    { "inv$ert", S_KEY_INVERT },
+    { "noinv$ert", S_KEY_NOINVERT },
+    { "enh$anced", S_KEY_ENHANCED },
+    { "noenh$anced", S_KEY_NOENHANCED },
+    { "b$ox", S_KEY_BOX },
+    { "nob$ox", S_KEY_NOBOX },
+    { "sa$mplen", S_KEY_SAMPLEN },
+    { "sp$acing", S_KEY_SPACING },
+    { "w$idth", S_KEY_WIDTH },
+    { "h$eight", S_KEY_HEIGHT },
+    { "a$utotitles", S_KEY_AUTOTITLES },
+    { "noa$utotitles", S_KEY_NOAUTOTITLES },
+    { "ti$tle", S_KEY_TITLE },
+    { NULL, S_KEY_INVALID }
+};
+
+/* 'test' command */
+const struct gen_table test_tbl[] =
+{
+    { "term$inal", TEST_TERMINAL },
+    { "pal$ette", TEST_PALETTE },
+    { "time", TEST_TIME },
+    { NULL, TEST_INVALID }
+};
+
+/* 'set colorbox' options */
+const struct gen_table set_colorbox_tbl[] =
+{
+    { "v$ertical",     S_COLORBOX_VERTICAL },
+    { "h$orizontal",   S_COLORBOX_HORIZONTAL },
+    { "def$ault",      S_COLORBOX_DEFAULT },
+    { "u$ser",         S_COLORBOX_USER },
+    { "bo$rder",       S_COLORBOX_BORDER },
+    { "bd$efault",     S_COLORBOX_BDEFAULT },
+    { "nobo$rder",     S_COLORBOX_NOBORDER },
+    { "o$rigin",       S_COLORBOX_ORIGIN },
+    { "s$ize",         S_COLORBOX_SIZE },
+    { "fr$ont",                S_COLORBOX_FRONT },
+    { "ba$ck",         S_COLORBOX_BACK },
+    { NULL, S_COLORBOX_INVALID }
+};
+
+/* 'set palette' options */
+const struct gen_table set_palette_tbl[] =
+{
+    { "pos$itive",     S_PALETTE_POSITIVE },
+    { "neg$ative",     S_PALETTE_NEGATIVE },
+    { "gray",          S_PALETTE_GRAY },
+    { "grey",          S_PALETTE_GRAY },
+    { "col$or",                S_PALETTE_COLOR },
+    { "rgb$formulae",  S_PALETTE_RGBFORMULAE },
+    { "def$ined",       S_PALETTE_DEFINED },
+    { "file",           S_PALETTE_FILE },
+    { "func$tions",     S_PALETTE_FUNCTIONS },
+    { "mo$del",         S_PALETTE_MODEL },
+    { "nops_allcF",    S_PALETTE_NOPS_ALLCF },
+    { "ps_allcF",      S_PALETTE_PS_ALLCF },
+    { "maxc$olors",    S_PALETTE_MAXCOLORS },
+    { "gam$ma",         S_PALETTE_GAMMA },
+    { NULL, S_PALETTE_INVALID }
+};
+
+
+const struct gen_table color_model_tbl[] =
+{
+    { "RGB", C_MODEL_RGB },
+    { "HSV", C_MODEL_HSV },
+    { "CMY", C_MODEL_CMY },
+    { "YIQ", C_MODEL_YIQ },
+    { "XYZ", C_MODEL_XYZ },
+    { NULL,  -1 }
+};
+
+/* 'set pm3d' options */
+const struct gen_table set_pm3d_tbl[] =
+{
+    { "at",            S_PM3D_AT },
+    { "interp$olate",  S_PM3D_INTERPOLATE },
+    { "scansfor$ward", S_PM3D_SCANSFORWARD },
+    { "scansback$ward", S_PM3D_SCANSBACKWARD },
+    { "scansauto$matic",S_PM3D_SCANS_AUTOMATIC },
+    { "dep$thorder",    S_PM3D_DEPTH },
+    { "fl$ush",                S_PM3D_FLUSH },
+    { "ftr$iangles",   S_PM3D_FTRIANGLES },
+    { "noftr$iangles", S_PM3D_NOFTRIANGLES },
+    { "clip1$in",      S_PM3D_CLIP_1IN },
+    { "clip4$in",      S_PM3D_CLIP_4IN },
+    { "map",           S_PM3D_MAP },
+    { "hi$dden3d",     S_PM3D_HIDDEN },
+    { "nohi$dden3d",   S_PM3D_NOHIDDEN },
+    { "so$lid",                S_PM3D_SOLID },
+    { "notr$ansparent",        S_PM3D_NOTRANSPARENT },
+    { "noso$lid",      S_PM3D_NOSOLID },
+    { "tr$ansparent",  S_PM3D_TRANSPARENT },
+    { "i$mplicit",     S_PM3D_IMPLICIT },
+    { "noe$xplicit",   S_PM3D_NOEXPLICIT },
+    { "noi$mplicit",   S_PM3D_NOIMPLICIT },
+    { "e$xplicit",     S_PM3D_EXPLICIT },
+    { "corners2c$olor",S_PM3D_WHICH_CORNER },
+    { NULL, S_PM3D_INVALID }
+};
+
+/* fixed RGB color names for 'set palette defined' */
+const struct gen_table pm3d_color_names_tbl[] =
+{
+    /* black, white and gray/grey */
+    { "white"           , 255*(1<<16) + 255*(1<<8) + 255 },
+    { "black"           ,   0*(1<<16) +   0*(1<<8) +   0 },
+    { "gray0"           ,   0*(1<<16) +   0*(1<<8) +   0 },
+    { "grey0"           ,   0*(1<<16) +   0*(1<<8) +   0 },
+    { "gray10"          ,  26*(1<<16) +  26*(1<<8) +  26 },
+    { "grey10"          ,  26*(1<<16) +  26*(1<<8) +  26 },
+    { "gray20"          ,  51*(1<<16) +  51*(1<<8) +  51 },
+    { "grey20"          ,  51*(1<<16) +  51*(1<<8) +  51 },
+    { "gray30"          ,  77*(1<<16) +  77*(1<<8) +  77 },
+    { "grey30"          ,  77*(1<<16) +  77*(1<<8) +  77 },
+    { "gray40"          , 102*(1<<16) + 102*(1<<8) + 102 },
+    { "grey40"          , 102*(1<<16) + 102*(1<<8) + 102 },
+    { "gray50"          , 127*(1<<16) + 127*(1<<8) + 127 },
+    { "grey50"          , 127*(1<<16) + 127*(1<<8) + 127 },
+    { "gray60"          , 153*(1<<16) + 153*(1<<8) + 153 },
+    { "grey60"          , 153*(1<<16) + 153*(1<<8) + 153 },
+    { "gray70"          , 179*(1<<16) + 179*(1<<8) + 179 },
+    { "grey70"          , 179*(1<<16) + 179*(1<<8) + 179 },
+    { "gray80"          , 204*(1<<16) + 204*(1<<8) + 204 },
+    { "grey80"          , 204*(1<<16) + 204*(1<<8) + 204 },
+    { "gray90"          , 229*(1<<16) + 229*(1<<8) + 229 },
+    { "grey90"          , 229*(1<<16) + 229*(1<<8) + 229 },
+    { "gray100"         , 255*(1<<16) + 255*(1<<8) + 255 },
+    { "grey100"         , 255*(1<<16) + 255*(1<<8) + 255 },
+    { "gray"            , 190*(1<<16) + 190*(1<<8) + 190 },
+    { "grey"            , 190*(1<<16) + 190*(1<<8) + 190 },
+    { "light-gray"      , 211*(1<<16) + 211*(1<<8) + 211 },
+    { "light-grey"      , 211*(1<<16) + 211*(1<<8) + 211 },
+    { "dark-gray"       , 169*(1<<16) + 169*(1<<8) + 169 },
+    { "dark-grey"       , 169*(1<<16) + 169*(1<<8) + 169 },
+    /* red */
+    { "red"             , 255*(1<<16) +   0*(1<<8) +   0 },
+    { "light-red"       , 240*(1<<16) +  50*(1<<8) +  50 },
+    { "dark-red"        , 139*(1<<16) +   0*(1<<8) +   0 },
+    /* yellow */
+    { "yellow"          , 255*(1<<16) + 255*(1<<8) +   0 },
+    { "light-yellow"    , 255*(1<<16) + 255*(1<<8) + 224 },
+    { "dark-yellow"     , 200*(1<<16) + 200*(1<<8) +   0 },
+    /* green */
+    { "green"           ,   0*(1<<16) + 255*(1<<8) +   0 },
+    { "light-green"     , 144*(1<<16) + 238*(1<<8) + 144 },
+    { "dark-green"      ,   0*(1<<16) + 100*(1<<8) +   0 },
+    { "spring-green"    ,   0*(1<<16) + 255*(1<<8) + 127 },
+    { "forest-green"    ,  34*(1<<16) + 139*(1<<8) +  34 },
+    { "sea-green"       ,  46*(1<<16) + 139*(1<<8) +  87 },
+    /* blue */
+    { "blue"            ,   0*(1<<16) +   0*(1<<8) + 255 },
+    { "light-blue"      , 173*(1<<16) + 216*(1<<8) + 230 },
+    { "dark-blue"       ,   0*(1<<16) +   0*(1<<8) + 139 },
+    { "midnight-blue"   ,  25*(1<<16) +  25*(1<<8) + 112 },
+    { "navy"            ,   0*(1<<16) +   0*(1<<8) + 128 },
+    { "medium-blue"     ,   0*(1<<16) +   0*(1<<8) + 205 },
+    { "royalblue"       ,  65*(1<<16) + 105*(1<<8) + 225 },
+    { "skyblue"         , 135*(1<<16) + 206*(1<<8) + 235 },
+    /* cyan */
+    { "cyan"            ,   0*(1<<16) + 255*(1<<8) + 255 },
+    { "light-cyan"      , 224*(1<<16) + 255*(1<<8) + 255 },
+    { "dark-cyan"       ,   0*(1<<16) + 139*(1<<8) + 139 },
+    /* magenta */
+    { "magenta"         , 255*(1<<16) +   0*(1<<8) + 255 },
+    { "light-magenta"   , 240*(1<<16) +  85*(1<<8) + 240 },
+    { "dark-magenta"    , 139*(1<<16) +   0*(1<<8) + 139 },
+    /* turquoise */
+    { "turquoise"       ,  64*(1<<16) + 224*(1<<8) + 208 },
+    { "light-turquoise" , 175*(1<<16) + 238*(1<<8) + 238 },
+    { "dark-turquoise"  ,   0*(1<<16) + 206*(1<<8) + 209 },
+    /* pink */
+    { "pink"            , 255*(1<<16) + 192*(1<<8) + 203 },
+    { "light-pink"      , 255*(1<<16) + 182*(1<<8) + 193 },
+    { "dark-pink"       , 255*(1<<16) +  20*(1<<8) + 147 },
+    /* coral */
+    { "coral"           , 255*(1<<16) + 127*(1<<8) +  80 },
+    { "light-coral"     , 240*(1<<16) + 128*(1<<8) + 128 },
+    { "orange-red"      , 255*(1<<16) +  69*(1<<8) +   0 },
+    /* salmon */
+    { "salmon"          , 250*(1<<16) + 128*(1<<8) + 114 },
+    { "light-salmon"    , 255*(1<<16) + 160*(1<<8) + 122 },
+    { "dark-salmon"     , 233*(1<<16) + 150*(1<<8) + 122 },
+    /* some more */
+    { "aquamarine"      , 127*(1<<16) + 255*(1<<8) + 212 },
+    { "khaki"           , 240*(1<<16) + 230*(1<<8) + 140 },
+    { "dark-khaki"      , 189*(1<<16) + 183*(1<<8) + 107 },
+    { "goldenrod"       , 218*(1<<16) + 165*(1<<8) +  32 },
+    { "light-goldenrod" , 238*(1<<16) + 221*(1<<8) + 130 },
+    { "dark-goldenrod"  , 184*(1<<16) + 134*(1<<8) +  11 },
+    { "gold"            , 255*(1<<16) + 215*(1<<8) +   0 },
+    { "beige"           , 245*(1<<16) + 245*(1<<8) + 220 },
+    { "brown"           , 165*(1<<16) +  42*(1<<8) +  42 },
+    { "orange"          , 255*(1<<16) + 165*(1<<8) +   0 },
+    { "dark-orange"     , 255*(1<<16) + 140*(1<<8) +   0 },
+    { "violet"          , 238*(1<<16) + 130*(1<<8) + 238 },
+    { "dark-violet"     , 148*(1<<16) +   0*(1<<8) + 211 },
+    { "plum"            , 221*(1<<16) + 160*(1<<8) + 221 },
+    { "purple"          , 160*(1<<16) +  32*(1<<8) + 240 },
+    { NULL, -1 }
+};
+
+const struct gen_table show_style_tbl[] =
+{
+    { "d$ata", SHOW_STYLE_DATA },
+    { "f$unction", SHOW_STYLE_FUNCTION },
+    { "l$ines", SHOW_STYLE_LINE },
+    { "fill", SHOW_STYLE_FILLING },
+    { "fs", SHOW_STYLE_FILLING },
+    { "ar$row", SHOW_STYLE_ARROW },
+    { "incr$ement", SHOW_STYLE_INCREMENT },
+#ifdef EAM_HISTOGRAMS
+    { "hist$ogram", SHOW_STYLE_HISTOGRAM },
+#endif
+    { "rect$angle", SHOW_STYLE_RECTANGLE },
+    { NULL, SHOW_STYLE_INVALID }
+};
+
+const struct gen_table plotstyle_tbl[] =
+{
+    { "l$ines", LINES },
+    { "i$mpulses", IMPULSES },
+    { "p$oints", POINTSTYLE },
+    { "linesp$oints", LINESPOINTS },
+    { "lp", LINESPOINTS },
+    { "d$ots", DOTS },
+    { "yerrorl$ines", YERRORLINES },
+    { "errorl$ines", YERRORLINES },
+    { "xerrorl$ines", XERRORLINES },
+    { "xyerrorl$ines", XYERRORLINES },
+    { "ye$rrorbars", YERRORBARS },
+    { "e$rrorbars", YERRORBARS },
+    { "xe$rrorbars", XERRORBARS },
+    { "xye$rrorbars", XYERRORBARS },
+    { "boxes", BOXES },
+#ifdef EAM_HISTOGRAMS
+    { "hist$ograms", HISTOGRAMS },
+#endif
+    { "filledc$urves", FILLEDCURVES },
+    { "boxer$rorbars", BOXERROR },
+    { "boxx$yerrorbars", BOXXYERROR },
+    { "st$eps", STEPS },
+    { "fs$teps", FSTEPS },
+    { "his$teps", HISTEPS },
+    { "vec$tors", VECTOR },
+    { "fin$ancebars", FINANCEBARS },
+    { "can$dlesticks", CANDLESTICKS },
+    { "pm$3d", PM3DSURFACE },
+#ifdef EAM_DATASTRINGS
+    { "labels", LABELPOINTS },
+#endif
+#ifdef WITH_IMAGE
+    { "ima$ge", IMAGE },
+    { "rgbima$ge", RGBIMAGE },
+#endif
+    { NULL, -1 }
+};
+
+const struct gen_table filledcurves_opts_tbl[] =
+{
+    { "c$losed", FILLEDCURVES_CLOSED },
+    { "x1", FILLEDCURVES_X1 },
+    { "y1", FILLEDCURVES_Y1 },
+    { "x2", FILLEDCURVES_X2 },
+    { "y2", FILLEDCURVES_Y2 },
+    { "xy", FILLEDCURVES_ATXY },
+    { "above", FILLEDCURVES_ABOVE },
+    { "below", FILLEDCURVES_BELOW },
+    { NULL, -1 }
+};
+
+int
+lookup_table(const struct gen_table *tbl, int find_token)
+{
+    while (tbl->key) {
+       if (almost_equals(find_token, tbl->key))
+           return tbl->value;
+       tbl++;
+    }
+    return tbl->value; /* *_INVALID */
+}
+
+parsefuncp_t
+lookup_ftable(const struct gen_ftable *ftbl, int find_token)
+{
+    while (ftbl->key) {
+       if (almost_equals(find_token, ftbl->key))
+           return ftbl->value;
+       ftbl++;
+    }
+    return ftbl->value;
+}
+
+/* Returns value of the first table entry for which the search string
+ * is a leading substring, or -1 if there is no match.
+ */
+int
+lookup_table_entry(const struct gen_table *tbl, const char *search_str)
+{
+    while (tbl->key) {
+       if (!strncmp(search_str, tbl->key, strlen(search_str)))
+           return tbl->value;
+       tbl++;
+    }
+    return -1;
+}
+
+/* Returns index of the table tbl whose key matches the beginning of the
+ * search string search_str.
+ * It returns index into the table or -1 if there is no match.
+ */
+int
+lookup_table_nth(const struct gen_table *tbl, const char *search_str)
+{
+    int k = -1;
+    while (tbl[++k].key)
+       if (tbl[k].key && !strncmp(search_str, tbl[k].key, strlen(tbl[k].key)))
+           return k;
+    return -1; /* not found */
+}
+
+/* Returns index of the table tbl whose key matches the beginning of the
+ * search string search_str. The table_len is necessary because the table
+ * is searched in the reversed order. The routine is used in parsing commands
+ * '(un)set log x2zcb', for instance.
+ * It returns index into the table or -1 if there is no match.
+ */
+int
+lookup_table_nth_reverse(
+    const struct gen_table *tbl,
+    int table_len,
+    const char *search_str)
+{
+    while (--table_len >= 0) {
+       if (tbl[table_len].key && !strncmp(search_str, tbl[table_len].key, strlen(tbl[table_len].key)))
+           return table_len;
+    }
+    return -1; /* not found */
+}
+
+/* Returns the key associated with this indexed value
+ * or NULL if the key/value pair is not found.
+ */
+const char *
+reverse_table_lookup(const struct gen_table *tbl, int entry)
+{
+    int k = -1;
+    while (tbl[++k].key)
+       if (tbl[k].value == entry)
+           return(tbl[k].key);
+    return NULL;
+}