Annotation of OpenXM_contrib/gnuplot/show.c, Revision 1.1
1.1 ! maekawa 1: #ifndef lint
! 2: static char *RCSid = "$Id: show.c,v 1.50 1998/06/18 14:55:18 ddenholm Exp $";
! 3: #endif
! 4:
! 5: /* GNUPLOT - show.c */
! 6:
! 7: /*[
! 8: * Copyright 1986 - 1993, 1998 Thomas Williams, Colin Kelley
! 9: *
! 10: * Permission to use, copy, and distribute this software and its
! 11: * documentation for any purpose with or without fee is hereby granted,
! 12: * provided that the above copyright notice appear in all copies and
! 13: * that both that copyright notice and this permission notice appear
! 14: * in supporting documentation.
! 15: *
! 16: * Permission to modify the software is granted, but not the right to
! 17: * distribute the complete modified source code. Modifications are to
! 18: * be distributed as patches to the released version. Permission to
! 19: * distribute binaries produced by compiling modified sources is granted,
! 20: * provided you
! 21: * 1. distribute the corresponding source modifications from the
! 22: * released version in the form of a patch file along with the binaries,
! 23: * 2. add special version identification to distinguish your version
! 24: * in addition to the base release version number,
! 25: * 3. provide your name and address as the primary contact for the
! 26: * support of your modified version, and
! 27: * 4. retain our contact information in regard to use of the base
! 28: * software.
! 29: * Permission to distribute the released version of the source code along
! 30: * with corresponding source modifications in the form of a patch file is
! 31: * granted with same provisions 2 through 4 for binary distributions.
! 32: *
! 33: * This software is provided "as is" without express or implied warranty
! 34: * to the extent permitted by applicable law.
! 35: ]*/
! 36:
! 37:
! 38: /*
! 39: * 19 September 1992 Lawrence Crowl (crowl@cs.orst.edu)
! 40: * Added user-specified bases for log scaling.
! 41: */
! 42:
! 43:
! 44: #include "plot.h"
! 45: #include "setshow.h"
! 46:
! 47: #define DEF_FORMAT "%g" /* default format for tic mark labels */
! 48: #define SIGNIF (0.01) /* less than one hundredth of a tic mark */
! 49:
! 50:
! 51: /* input data, parsing variables */
! 52:
! 53: extern TBOOLEAN is_3d_plot;
! 54:
! 55: /* From version.c, used in show_version () */
! 56: extern char version[];
! 57: extern char patchlevel[];
! 58: extern char date[];
! 59: extern char gnuplot_copyright[];
! 60: extern char faq_location[];
! 61: extern char bug_email[];
! 62: extern char help_email[];
! 63:
! 64:
! 65: #ifndef TIMEFMT
! 66: #define TIMEFMT "%d/%m/%y,%H:%M"
! 67: #endif
! 68: /* format for date/time for reading time in datafile */
! 69:
! 70:
! 71:
! 72: /******** Local functions ********/
! 73:
! 74: static void show_style __PROTO((char name[], enum PLOT_STYLE style));
! 75: static void show_range __PROTO((int axis, double min, double max, int autosc, char *text));
! 76: static void show_zero __PROTO((void));
! 77: static void show_border __PROTO((void));
! 78: static void show_dgrid3d __PROTO((void));
! 79: static void show_offsets __PROTO((void));
! 80: static void show_samples __PROTO((void));
! 81: static void show_isosamples __PROTO((void));
! 82: static void show_output __PROTO((void));
! 83: static void show_view __PROTO((void));
! 84: static void show_size __PROTO((void));
! 85: static void show_origin __PROTO((void));
! 86: static void show_title __PROTO((void));
! 87: static void show_xyzlabel __PROTO((char *name, label_struct * label));
! 88: static void show_angles __PROTO((void));
! 89: static void show_boxwidth __PROTO((void));
! 90: static void show_bars __PROTO((void));
! 91: static void show_xzeroaxis __PROTO((void));
! 92: static void show_yzeroaxis __PROTO((void));
! 93: static void show_label __PROTO((int tag));
! 94: static void show_linestyle __PROTO((int tag));
! 95: static void show_arrow __PROTO((int tag));
! 96: static void show_grid __PROTO((void));
! 97: static void show_key __PROTO((void));
! 98: static void show_keytitle __PROTO((void));
! 99: static void show_mtics __PROTO((int mini, double freq, char *name));
! 100: static void show_pointsize __PROTO((void));
! 101: static void show_encoding __PROTO((void));
! 102: static void show_polar __PROTO((void));
! 103: static void show_parametric __PROTO((void));
! 104: static void show_tics __PROTO((int showx, int showy, int showz, int showx2, int showy2));
! 105: static void show_ticdef __PROTO((int tics, int axis, struct ticdef * tdef, char *text, int rotate_tics, char *ticfmt));
! 106: static void show_term __PROTO((void));
! 107: static void show_plot __PROTO((void));
! 108: static void show_autoscale __PROTO((void));
! 109: static void show_clip __PROTO((void));
! 110: static void show_contour __PROTO((void));
! 111: static void show_mapping __PROTO((void));
! 112: static void show_format __PROTO((void));
! 113: static void show_logscale __PROTO((void));
! 114: static void show_variables __PROTO((void));
! 115: static void show_surface __PROTO((void));
! 116: static void show_hidden3d __PROTO((void));
! 117: static void show_label_contours __PROTO((void));
! 118: static void show_margin __PROTO((void));
! 119: static void show_position __PROTO((struct position * pos));
! 120:
! 121: static TBOOLEAN show_one __PROTO((void));
! 122: static TBOOLEAN show_two __PROTO((void));
! 123: static void show_timefmt __PROTO((void));
! 124: static void show_locale __PROTO((void));
! 125: static void show_missing __PROTO((void));
! 126: static void show_datatype __PROTO((char *name, int axis));
! 127: static void show_locale __PROTO((void));
! 128:
! 129: /* following code segment appears over and over again */
! 130:
! 131: #define SHOW_NUM_OR_TIME(x, axis) \
! 132: do{if (datatype[axis]==TIME) { \
! 133: char s[80]; char *p; \
! 134: putc('"', stderr); \
! 135: gstrftime(s,80,timefmt,(double)(x)); \
! 136: for(p=s; *p; ++p) {\
! 137: if ( *p == '\t' ) fputs("\\t",stderr);\
! 138: else if (*p == '\n') fputs("\\n",stderr); \
! 139: else if ( *p > 126 || *p < 32 ) fprintf(stderr,"\\%03o",*p);\
! 140: else putc(*p, stderr);\
! 141: }\
! 142: putc('"', stderr);\
! 143: } else {\
! 144: fprintf(stderr,"%g",x);\
! 145: }} while(0)
! 146:
! 147:
! 148: /******* The 'show' command *******/
! 149: void show_command()
! 150: {
! 151: /* show at is undocumented/hidden... */
! 152: static char GPFAR showmess[] =
! 153: "valid set options: [] = choose one, {} means optional\n\n\
! 154: \t'all', 'angles', 'arrow', 'autoscale', 'bar', 'border', 'boxwidth',\n\
! 155: \t'clip', 'cntrparam', 'contour', 'data', 'dgrid3d', 'dummy',\n\
! 156: \t'encoding', 'format', 'function', 'grid', 'hidden', 'isosamples',\n\
! 157: \t'key', 'label', 'linestyle', 'locale', 'logscale', 'mapping', 'margin',\n\
! 158: \t'missing', 'offsets', 'origin', 'output', 'plot', 'parametric',\n\
! 159: \t'pointsize', 'polar', '[rtuv]range', 'samples', 'size', 'terminal',\n\
! 160: \t'tics', 'timestamp', 'timefmt', 'title', 'variables', 'version',\n\
! 161: \t'view', '[xyz]{2}label', '[xyz]{2}range', '{m}[xyz]{2}tics',\n\
! 162: \t'[xyz]{2}[md]tics', '[xyz]{2}zeroaxis', '[xyz]data', 'zero',\n\
! 163: \t'zeroaxis'";
! 164:
! 165:
! 166: c_token++;
! 167:
! 168: if (!show_one() && !show_two())
! 169: int_error(showmess, c_token);
! 170: screen_ok = FALSE;
! 171: (void) putc('\n', stderr);
! 172: }
! 173:
! 174: /* return TRUE if a command match, FALSE if not */
! 175: static TBOOLEAN
! 176: show_one()
! 177: {
! 178: if (almost_equals(c_token, "ac$tion_table") ||
! 179: equals(c_token, "at")) {
! 180: c_token++;
! 181: show_at();
! 182: c_token++;
! 183: } else if (almost_equals(c_token, "ar$row")) {
! 184: struct value a;
! 185: int tag = 0;
! 186:
! 187: c_token++;
! 188: if (!END_OF_COMMAND) {
! 189: tag = (int) real(const_express(&a));
! 190: if (tag <= 0)
! 191: int_error("tag must be > zero", c_token);
! 192: }
! 193: (void) putc('\n', stderr);
! 194: show_arrow(tag);
! 195: } else if (almost_equals(c_token, "au$toscale")) {
! 196: (void) putc('\n', stderr);
! 197: show_autoscale();
! 198: c_token++;
! 199: } else if (almost_equals(c_token, "b$ars")) {
! 200: (void) putc('\n', stderr);
! 201: show_bars();
! 202: c_token++;
! 203: } else if (almost_equals(c_token, "bor$der")) {
! 204: (void) putc('\n', stderr);
! 205: show_border();
! 206: c_token++;
! 207: } else if (almost_equals(c_token, "box$width")) {
! 208: (void) putc('\n', stderr);
! 209: show_boxwidth();
! 210: c_token++;
! 211: } else if (almost_equals(c_token, "c$lip")) {
! 212: (void) putc('\n', stderr);
! 213: show_clip();
! 214: c_token++;
! 215: } else if (almost_equals(c_token, "ma$pping")) {
! 216: (void) putc('\n', stderr);
! 217: show_mapping();
! 218: c_token++;
! 219: } else if (almost_equals(c_token, "co$ntour") ||
! 220: almost_equals(c_token, "cn$trparam")) {
! 221: (void) putc('\n', stderr);
! 222: show_contour();
! 223: c_token++;
! 224: } else if (almost_equals(c_token, "da$ta")) {
! 225: c_token++;
! 226: if (!almost_equals(c_token, "s$tyle"))
! 227: int_error("expecting keyword 'style'", c_token);
! 228: (void) putc('\n', stderr);
! 229: show_style("data", data_style);
! 230: c_token++;
! 231: } else if (almost_equals(c_token, "dg$rid3d")) {
! 232: (void) putc('\n', stderr);
! 233: show_dgrid3d();
! 234: c_token++;
! 235: } else if (almost_equals(c_token, "du$mmy")) {
! 236: (void) fprintf(stderr, "\n\tdummy variables are \"%s\" and \"%s\"\n",
! 237: dummy_var[0], dummy_var[1]);
! 238: c_token++;
! 239: } else if (almost_equals(c_token, "fo$rmat")) {
! 240: show_format();
! 241: c_token++;
! 242: } else if (almost_equals(c_token, "fu$nctions")) {
! 243: c_token++;
! 244: if (almost_equals(c_token, "s$tyle")) {
! 245: (void) putc('\n', stderr);
! 246: show_style("functions", func_style);
! 247: c_token++;
! 248: } else
! 249: show_functions();
! 250: } else if (almost_equals(c_token, "lo$gscale")) {
! 251: (void) putc('\n', stderr);
! 252: show_logscale();
! 253: c_token++;
! 254: } else if (almost_equals(c_token, "of$fsets")) {
! 255: (void) putc('\n', stderr);
! 256: show_offsets();
! 257: c_token++;
! 258: } else if (almost_equals(c_token, "ma$rgin")) {
! 259: (void) putc('\n', stderr);
! 260: show_margin();
! 261: c_token++;
! 262: } else if (almost_equals(c_token, "o$utput")) {
! 263: (void) putc('\n', stderr);
! 264: show_output();
! 265: c_token++;
! 266: } else if (almost_equals(c_token, "tit$le")) {
! 267: (void) putc('\n', stderr);
! 268: show_xyzlabel("title", &title);
! 269: c_token++;
! 270: } else if (almost_equals(c_token, "mis$sing")) {
! 271: (void) putc('\n', stderr);
! 272: show_missing();
! 273: c_token++;
! 274: } else if (almost_equals(c_token, "xl$abel")) {
! 275: (void) putc('\n', stderr);
! 276: show_xyzlabel("xlabel", &xlabel);
! 277: c_token++;
! 278: } else if (almost_equals(c_token, "x2l$abel")) {
! 279: (void) putc('\n', stderr);
! 280: show_xyzlabel("x2label", &x2label);
! 281: c_token++;
! 282: } else if (almost_equals(c_token, "yl$abel")) {
! 283: (void) putc('\n', stderr);
! 284: show_xyzlabel("ylabel", &ylabel);
! 285: c_token++;
! 286: } else if (almost_equals(c_token, "y2l$abel")) {
! 287: (void) putc('\n', stderr);
! 288: show_xyzlabel("y2label", &y2label);
! 289: c_token++;
! 290: } else if (almost_equals(c_token, "zl$abel")) {
! 291: (void) putc('\n', stderr);
! 292: show_xyzlabel("zlabel", &zlabel);
! 293: c_token++;
! 294: } else if (almost_equals(c_token, "keyt$itle")) {
! 295: (void) putc('\n', stderr);
! 296: show_keytitle();
! 297: c_token++;
! 298: } else if (almost_equals(c_token, "xda$ta")) {
! 299: (void) putc('\n', stderr);
! 300: show_datatype("xdata", FIRST_X_AXIS);
! 301: c_token++;
! 302: } else if (almost_equals(c_token, "yda$ta")) {
! 303: (void) putc('\n', stderr);
! 304: show_datatype("ydata", FIRST_Y_AXIS);
! 305: c_token++;
! 306: } else if (almost_equals(c_token, "x2da$ta")) {
! 307: (void) putc('\n', stderr);
! 308: show_datatype("x2data", SECOND_X_AXIS);
! 309: c_token++;
! 310: } else if (almost_equals(c_token, "y2da$ta")) {
! 311: (void) putc('\n', stderr);
! 312: show_datatype("y2data", SECOND_Y_AXIS);
! 313: c_token++;
! 314: } else if (almost_equals(c_token, "zda$ta")) {
! 315: (void) putc('\n', stderr);
! 316: show_datatype("zdata", FIRST_Z_AXIS);
! 317: c_token++;
! 318: } else if (almost_equals(c_token, "timef$mt")) {
! 319: (void) putc('\n', stderr);
! 320: show_timefmt();
! 321: c_token++;
! 322: } else if (almost_equals(c_token, "loca$le")) {
! 323: (void) putc('\n', stderr);
! 324: show_locale();
! 325: c_token++;
! 326: } else if (almost_equals(c_token, "xzero$axis")) {
! 327: (void) putc('\n', stderr);
! 328: show_xzeroaxis();
! 329: c_token++;
! 330: } else if (almost_equals(c_token, "yzero$axis")) {
! 331: (void) putc('\n', stderr);
! 332: show_yzeroaxis();
! 333: c_token++;
! 334: } else if (almost_equals(c_token, "zeroa$xis")) {
! 335: (void) putc('\n', stderr);
! 336: show_xzeroaxis();
! 337: show_yzeroaxis();
! 338: c_token++;
! 339: } else if (almost_equals(c_token, "la$bel")) {
! 340: struct value a;
! 341: int tag = 0;
! 342:
! 343: c_token++;
! 344: if (!END_OF_COMMAND) {
! 345: tag = (int) real(const_express(&a));
! 346: if (tag <= 0)
! 347: int_error("tag must be > zero", c_token);
! 348: }
! 349: (void) putc('\n', stderr);
! 350: show_label(tag);
! 351: } else if (almost_equals(c_token, "li$nestyle") || equals(c_token, "ls")) {
! 352: struct value a;
! 353: int tag = 0;
! 354:
! 355: c_token++;
! 356: if (!END_OF_COMMAND) {
! 357: tag = (int) real(const_express(&a));
! 358: if (tag <= 0)
! 359: int_error("tag must be > zero", c_token);
! 360: }
! 361: (void) putc('\n', stderr);
! 362: show_linestyle(tag);
! 363: } else if (almost_equals(c_token, "g$rid")) {
! 364: (void) putc('\n', stderr);
! 365: show_grid();
! 366: c_token++;
! 367: } else if (almost_equals(c_token, "mxt$ics")) {
! 368: (void) putc('\n', stderr);
! 369: show_mtics(mxtics, mxtfreq, "x");
! 370: c_token++;
! 371: } else if (almost_equals(c_token, "myt$ics")) {
! 372: (void) putc('\n', stderr);
! 373: show_mtics(mytics, mytfreq, "y");
! 374: c_token++;
! 375: } else if (almost_equals(c_token, "mzt$ics")) {
! 376: (void) putc('\n', stderr);
! 377: show_mtics(mztics, mztfreq, "z");
! 378: c_token++;
! 379: } else if (almost_equals(c_token, "mx2t$ics")) {
! 380: (void) putc('\n', stderr);
! 381: show_mtics(mx2tics, mx2tfreq, "x2");
! 382: c_token++;
! 383: } else if (almost_equals(c_token, "my2t$ics")) {
! 384: (void) putc('\n', stderr);
! 385: show_mtics(my2tics, my2tfreq, "y2");
! 386: c_token++;
! 387: } else if (almost_equals(c_token, "k$ey")) {
! 388: (void) putc('\n', stderr);
! 389: show_key();
! 390: c_token++;
! 391: } else
! 392: return (FALSE);
! 393: return TRUE;
! 394: }
! 395:
! 396: /* return TRUE if a command match, FALSE if not */
! 397: static TBOOLEAN
! 398: show_two()
! 399: {
! 400: if (almost_equals(c_token, "p$lot")) {
! 401: (void) putc('\n', stderr);
! 402: show_plot();
! 403: c_token++;
! 404: } else if (almost_equals(c_token, "par$ametric")) {
! 405: (void) putc('\n', stderr);
! 406: show_parametric();
! 407: c_token++;
! 408: } else if (almost_equals(c_token, "poi$ntsize")) {
! 409: (void) putc('\n', stderr);
! 410: show_pointsize();
! 411: c_token++;
! 412: } else if (almost_equals(c_token, "enc$oding")) {
! 413: (void) putc('\n', stderr);
! 414: show_encoding();
! 415: c_token++;
! 416: } else if (almost_equals(c_token, "pol$ar")) {
! 417: (void) putc('\n', stderr);
! 418: show_polar();
! 419: c_token++;
! 420: } else if (almost_equals(c_token, "an$gles")) {
! 421: (void) putc('\n', stderr);
! 422: show_angles();
! 423: c_token++;
! 424: } else if (almost_equals(c_token, "ti$cs")) {
! 425: (void) putc('\n', stderr);
! 426: show_tics(TRUE, TRUE, TRUE, TRUE, TRUE);
! 427: c_token++;
! 428: } else if (almost_equals(c_token, "tim$estamp")) {
! 429: (void) putc('\n', stderr);
! 430: show_xyzlabel("time", &timelabel);
! 431: fprintf(stderr, "\twritten in %s corner\n", (timelabel_bottom ? "bottom" : "top"));
! 432: if (timelabel_rotate)
! 433: fputs("\trotated if the terminal allows it\n\t", stderr);
! 434: else
! 435: fputs("\tnot rotated\n\t", stderr);
! 436: c_token++;
! 437: } else if (almost_equals(c_token, "su$rface")) {
! 438: (void) putc('\n', stderr);
! 439: show_surface();
! 440: c_token++;
! 441: } else if (almost_equals(c_token, "hi$dden3d")) {
! 442: (void) putc('\n', stderr);
! 443: show_hidden3d();
! 444: c_token++;
! 445: } else if (almost_equals(c_token, "cla$bel")) {
! 446: (void) putc('\n', stderr);
! 447: show_label_contours();
! 448: c_token++;
! 449: } else if (almost_equals(c_token, "xti$cs")) {
! 450: show_tics(TRUE, FALSE, FALSE, TRUE, FALSE);
! 451: c_token++;
! 452: } else if (almost_equals(c_token, "yti$cs")) {
! 453: show_tics(FALSE, TRUE, FALSE, FALSE, TRUE);
! 454: c_token++;
! 455: } else if (almost_equals(c_token, "zti$cs")) {
! 456: show_tics(FALSE, FALSE, TRUE, FALSE, FALSE);
! 457: c_token++;
! 458: } else if (almost_equals(c_token, "x2ti$cs")) {
! 459: show_tics(FALSE, FALSE, FALSE, TRUE, FALSE);
! 460: c_token++;
! 461: } else if (almost_equals(c_token, "y2ti$cs")) {
! 462: show_tics(FALSE, FALSE, FALSE, FALSE, TRUE);
! 463: c_token++;
! 464: } else if (almost_equals(c_token, "xdti$cs")) {
! 465: show_tics(TRUE, FALSE, FALSE, TRUE, FALSE);
! 466: c_token++;
! 467: } else if (almost_equals(c_token, "ydti$cs")) {
! 468: show_tics(FALSE, TRUE, FALSE, FALSE, TRUE);
! 469: c_token++;
! 470: } else if (almost_equals(c_token, "zdti$cs")) {
! 471: show_tics(FALSE, FALSE, TRUE, FALSE, FALSE);
! 472: c_token++;
! 473: } else if (almost_equals(c_token, "x2dti$cs")) {
! 474: show_tics(FALSE, FALSE, FALSE, TRUE, FALSE);
! 475: c_token++;
! 476: } else if (almost_equals(c_token, "y2dti$cs")) {
! 477: show_tics(FALSE, FALSE, FALSE, FALSE, TRUE);
! 478: c_token++;
! 479: } else if (almost_equals(c_token, "xmti$cs")) {
! 480: show_tics(TRUE, FALSE, FALSE, TRUE, FALSE);
! 481: c_token++;
! 482: } else if (almost_equals(c_token, "ymti$cs")) {
! 483: show_tics(FALSE, TRUE, FALSE, FALSE, TRUE);
! 484: c_token++;
! 485: } else if (almost_equals(c_token, "zmti$cs")) {
! 486: show_tics(FALSE, FALSE, TRUE, FALSE, FALSE);
! 487: c_token++;
! 488: } else if (almost_equals(c_token, "x2mti$cs")) {
! 489: show_tics(FALSE, FALSE, FALSE, TRUE, FALSE);
! 490: c_token++;
! 491: } else if (almost_equals(c_token, "y2mti$cs")) {
! 492: show_tics(FALSE, FALSE, FALSE, FALSE, TRUE);
! 493: c_token++;
! 494: } else if (almost_equals(c_token, "sa$mples")) {
! 495: (void) putc('\n', stderr);
! 496: show_samples();
! 497: c_token++;
! 498: } else if (almost_equals(c_token, "isosa$mples")) {
! 499: (void) putc('\n', stderr);
! 500: show_isosamples();
! 501: c_token++;
! 502: } else if (almost_equals(c_token, "si$ze")) {
! 503: (void) putc('\n', stderr);
! 504: show_size();
! 505: c_token++;
! 506: } else if (almost_equals(c_token, "orig$in")) {
! 507: (void) putc('\n', stderr);
! 508: show_origin();
! 509: c_token++;
! 510: } else if (almost_equals(c_token, "t$erminal")) {
! 511: (void) putc('\n', stderr);
! 512: show_term();
! 513: c_token++;
! 514: } else if (almost_equals(c_token, "rr$ange")) {
! 515: (void) putc('\n', stderr);
! 516: show_range(R_AXIS, rmin, rmax, autoscale_r, "r");
! 517: c_token++;
! 518: } else if (almost_equals(c_token, "tr$ange")) {
! 519: (void) putc('\n', stderr);
! 520: show_range(T_AXIS, tmin, tmax, autoscale_t, "t");
! 521: c_token++;
! 522: } else if (almost_equals(c_token, "ur$ange")) {
! 523: (void) putc('\n', stderr);
! 524: show_range(U_AXIS, umin, umax, autoscale_u, "u");
! 525: c_token++;
! 526: } else if (almost_equals(c_token, "vi$ew")) {
! 527: (void) putc('\n', stderr);
! 528: show_view();
! 529: c_token++;
! 530: } else if (almost_equals(c_token, "vr$ange")) {
! 531: (void) putc('\n', stderr);
! 532: show_range(V_AXIS, vmin, vmax, autoscale_v, "v");
! 533: c_token++;
! 534: } else if (almost_equals(c_token, "v$ariables")) {
! 535: show_variables();
! 536: c_token++;
! 537: } else if (almost_equals(c_token, "ve$rsion")) {
! 538: show_version(stderr);
! 539: c_token++;
! 540: if (almost_equals(c_token, "l$ong")) {
! 541: show_version_long();
! 542: c_token++;
! 543: }
! 544: } else if (almost_equals(c_token, "xr$ange")) {
! 545: (void) putc('\n', stderr);
! 546: show_range(FIRST_X_AXIS, xmin, xmax, autoscale_x, "x");
! 547: c_token++;
! 548: } else if (almost_equals(c_token, "yr$ange")) {
! 549: (void) putc('\n', stderr);
! 550: show_range(FIRST_Y_AXIS, ymin, ymax, autoscale_y, "y");
! 551: c_token++;
! 552: } else if (almost_equals(c_token, "x2r$ange")) {
! 553: (void) putc('\n', stderr);
! 554: show_range(SECOND_X_AXIS, x2min, x2max, autoscale_x2, "x2");
! 555: c_token++;
! 556: } else if (almost_equals(c_token, "y2r$ange")) {
! 557: (void) putc('\n', stderr);
! 558: show_range(SECOND_Y_AXIS, y2min, y2max, autoscale_y2, "y2");
! 559: c_token++;
! 560: } else if (almost_equals(c_token, "zr$ange")) {
! 561: (void) putc('\n', stderr);
! 562: show_range(FIRST_Z_AXIS, zmin, zmax, autoscale_z, "z");
! 563: c_token++;
! 564: } else if (almost_equals(c_token, "z$ero")) {
! 565: (void) putc('\n', stderr);
! 566: show_zero();
! 567: c_token++;
! 568: } else if (almost_equals(c_token, "a$ll")) {
! 569: c_token++;
! 570: show_version(stderr);
! 571: show_autoscale();
! 572: show_bars();
! 573: show_border();
! 574: show_boxwidth();
! 575: show_clip();
! 576: show_contour();
! 577: show_dgrid3d();
! 578: show_mapping();
! 579: (void) fprintf(stderr, "\tdummy variables are \"%s\" and \"%s\"\n",
! 580: dummy_var[0], dummy_var[1]);
! 581: show_format();
! 582: show_style("data", data_style);
! 583: show_style("functions", func_style);
! 584: show_grid();
! 585: show_xzeroaxis();
! 586: show_yzeroaxis();
! 587: show_label(0);
! 588: show_arrow(0);
! 589: show_linestyle(0);
! 590: show_keytitle();
! 591: show_key();
! 592: show_logscale();
! 593: show_offsets();
! 594: show_margin();
! 595: show_output();
! 596: show_parametric();
! 597: show_pointsize();
! 598: show_encoding();
! 599: show_polar();
! 600: show_angles();
! 601: show_samples();
! 602: show_isosamples();
! 603: show_view();
! 604: show_surface();
! 605: #ifndef LITE
! 606: show_hidden3d();
! 607: #endif
! 608: show_size();
! 609: show_origin();
! 610: show_term();
! 611: show_tics(TRUE, TRUE, TRUE, TRUE, TRUE);
! 612: show_mtics(mxtics, mxtfreq, "x");
! 613: show_mtics(mytics, mytfreq, "y");
! 614: show_mtics(mztics, mztfreq, "z");
! 615: show_mtics(mx2tics, mx2tfreq, "x2");
! 616: show_mtics(my2tics, my2tfreq, "y2");
! 617: show_xyzlabel("time", &timelabel);
! 618: if (parametric || polar) {
! 619: if (!is_3d_plot)
! 620: show_range(T_AXIS, tmin, tmax, autoscale_t, "t");
! 621: else {
! 622: show_range(U_AXIS, umin, umax, autoscale_u, "u");
! 623: show_range(V_AXIS, vmin, vmax, autoscale_v, "v");
! 624: }
! 625: }
! 626: show_range(FIRST_X_AXIS, xmin, xmax, autoscale_x, "x");
! 627: show_range(FIRST_Y_AXIS, ymin, ymax, autoscale_y, "y");
! 628: show_range(SECOND_X_AXIS, x2min, x2max, autoscale_x2, "x2");
! 629: show_range(SECOND_Y_AXIS, y2min, y2max, autoscale_y2, "y2");
! 630: show_range(FIRST_Z_AXIS, zmin, zmax, autoscale_z, "z");
! 631: show_xyzlabel("title", &title);
! 632: show_xyzlabel("xlabel", &xlabel);
! 633: show_xyzlabel("ylabel", &ylabel);
! 634: show_xyzlabel("zlabel", &zlabel);
! 635: show_xyzlabel("x2label", &x2label);
! 636: show_xyzlabel("y2label", &y2label);
! 637: show_datatype("xdata", FIRST_X_AXIS);
! 638: show_datatype("ydata", FIRST_Y_AXIS);
! 639: show_datatype("x2data", SECOND_X_AXIS);
! 640: show_datatype("y2data", SECOND_Y_AXIS);
! 641: show_datatype("zdata", FIRST_Z_AXIS);
! 642: show_timefmt();
! 643: show_locale();
! 644: show_zero();
! 645: show_missing();
! 646: show_plot();
! 647: show_variables();
! 648: show_functions();
! 649: c_token++;
! 650: } else
! 651: return (FALSE);
! 652: return (TRUE);
! 653: }
! 654:
! 655:
! 656: /*********** support functions for 'show' **********/
! 657: /* perhaps these need to be put into a constant array ? */
! 658: static void show_style(name, style)
! 659: char name[];
! 660: enum PLOT_STYLE style;
! 661: {
! 662: fprintf(stderr, "\t%s are plotted with ", name);
! 663: switch (style) {
! 664: case LINES:
! 665: fputs("lines\n", stderr);
! 666: break;
! 667: case POINTSTYLE:
! 668: fputs("points\n", stderr);
! 669: break;
! 670: case IMPULSES:
! 671: fputs("impulses\n", stderr);
! 672: break;
! 673: case LINESPOINTS:
! 674: fputs("linespoints\n", stderr);
! 675: break;
! 676: case DOTS:
! 677: fputs("dots\n", stderr);
! 678: break;
! 679: case YERRORBARS:
! 680: fputs("yerrorbars\n", stderr);
! 681: break;
! 682: case XERRORBARS:
! 683: fputs("xerrorbars\n", stderr);
! 684: break;
! 685: case XYERRORBARS:
! 686: fputs("xyerrorbars\n", stderr);
! 687: break;
! 688: case BOXES:
! 689: fputs("boxes\n", stderr);
! 690: break;
! 691: case BOXERROR:
! 692: fputs("boxerrorbars\n", stderr);
! 693: break;
! 694: case BOXXYERROR:
! 695: fputs("boxxyerrorbars\n", stderr);
! 696: break;
! 697: case STEPS:
! 698: fputs("steps\n", stderr);
! 699: break;
! 700: case FSTEPS:
! 701: fputs("fsteps\n", stderr);
! 702: break;
! 703: case HISTEPS:
! 704: fputs("histeps\n", stderr);
! 705: break;
! 706: case VECTOR:
! 707: fputs("vector\n", stderr);
! 708: break;
! 709: case FINANCEBARS:
! 710: fputs("financebars\n", stderr);
! 711: break;
! 712: case CANDLESTICKS:
! 713: fputs("candlesticsks\n", stderr);
! 714: break;
! 715: }
! 716: }
! 717:
! 718: static void show_bars()
! 719: {
! 720: /* I really like this: "terrorbars" ;-) */
! 721: if (bar_size > 0.0)
! 722: fprintf(stderr, "\terrorbars are plotted with bars of size %f\n",
! 723: bar_size);
! 724: else
! 725: fputs("\terrors are plotted without bars\n", stderr);
! 726: }
! 727:
! 728: static void show_boxwidth()
! 729: {
! 730: if (boxwidth < 0.0)
! 731: fputs("\tboxwidth is auto\n", stderr);
! 732: else
! 733: fprintf(stderr, "\tboxwidth is %g\n", boxwidth);
! 734: }
! 735: static void show_dgrid3d()
! 736: {
! 737: if (dgrid3d)
! 738: fprintf(stderr, "\
! 739: \tdata grid3d is enabled for mesh of size %dx%d, norm=%d\n",
! 740: dgrid3d_row_fineness,
! 741: dgrid3d_col_fineness,
! 742: dgrid3d_norm_value);
! 743: else
! 744: fputs("\tdata grid3d is disabled\n", stderr);
! 745: }
! 746:
! 747: static void show_range(axis, min, max, autosc, text)
! 748: int axis;
! 749: double min, max;
! 750: TBOOLEAN autosc;
! 751: char *text;
! 752: {
! 753: /* this probably ought to just invoke save_range(stderr) from misc.c
! 754: * since I think it is identical
! 755: */
! 756:
! 757: if (datatype[axis] == TIME)
! 758: fprintf(stderr, "\tset %sdata time\n", text);
! 759: fprintf(stderr, "\tset %srange [", text);
! 760: if (autosc & 1) {
! 761: fputc('*', stderr);
! 762: } else {
! 763: SHOW_NUM_OR_TIME(min, axis);
! 764: }
! 765: fputs(" : ", stderr);
! 766: if (autosc & 2) {
! 767: fputc('*', stderr);
! 768: } else {
! 769: SHOW_NUM_OR_TIME(max, axis);
! 770: }
! 771: fprintf(stderr, "] %sreverse %swriteback",
! 772: (range_flags[axis] & RANGE_REVERSE) ? "" : "no",
! 773: (range_flags[axis] & RANGE_WRITEBACK) ? "" : "no");
! 774:
! 775: if (autosc) {
! 776: /* add current (hidden) range as comments */
! 777: fputs(" # (currently [", stderr);
! 778: if (autosc & 1) {
! 779: SHOW_NUM_OR_TIME(min, axis);
! 780: }
! 781: putc(':', stderr);
! 782: if (autosc & 2) {
! 783: SHOW_NUM_OR_TIME(max, axis);
! 784: }
! 785: fputs("] )\n", stderr);
! 786: } else {
! 787: putc('\n', stderr);
! 788: }
! 789: }
! 790:
! 791: static void show_zero()
! 792: {
! 793: fprintf(stderr, "\tzero is %g\n", zero);
! 794: }
! 795:
! 796: static void show_offsets()
! 797: {
! 798: fprintf(stderr, "\toffsets are %g, %g, %g, %g\n", loff, roff, toff, boff);
! 799: }
! 800:
! 801: static void show_border()
! 802: {
! 803: fprintf(stderr, "\tborder is %sdrawn %d\n", draw_border ? "" : "not ",
! 804: draw_border);
! 805: /* HBB 980609: added facilities to specify border linestyle */
! 806: fprintf(stderr, "\tBorder drawn with linetype %d, linewidth %.3f\n",
! 807: border_lp.l_type + 1, border_lp.l_width);
! 808: }
! 809:
! 810: static void show_output()
! 811: {
! 812: if (outstr)
! 813: fprintf(stderr, "\toutput is sent to '%s'\n", outstr);
! 814: else
! 815: fputs("\toutput is sent to STDOUT\n", stderr);
! 816: }
! 817:
! 818: static void show_samples()
! 819: {
! 820: fprintf(stderr, "\tsampling rate is %d, %d\n", samples_1, samples_2);
! 821: }
! 822:
! 823: static void show_isosamples()
! 824: {
! 825: fprintf(stderr, "\tiso sampling rate is %d, %d\n",
! 826: iso_samples_1, iso_samples_2);
! 827: }
! 828:
! 829: static void show_surface()
! 830: {
! 831: fprintf(stderr, "\tsurface is %sdrawn\n", draw_surface ? "" : "not ");
! 832: }
! 833:
! 834: static void show_hidden3d()
! 835: {
! 836: #ifdef LITE
! 837: printf(" Hidden Line Removal Not Supported in LITE version\n");
! 838: #else
! 839: fprintf(stderr, "\thidden surface is %s\n", hidden3d ? "removed" : "drawn");
! 840: show_hidden3doptions();
! 841: #endif /* LITE */
! 842: }
! 843:
! 844: static void show_label_contours()
! 845: {
! 846: if (label_contours)
! 847: fprintf(stderr, "\tcontour line types are varied & labeled with format '%s'\n", contour_format);
! 848: else
! 849: fputs("\tcontour line types are all the same\n", stderr);
! 850: }
! 851:
! 852: static void show_view()
! 853: {
! 854: fprintf(stderr, "\tview is %g rot_x, %g rot_z, %g scale, %g scale_z\n",
! 855: surface_rot_x, surface_rot_z, surface_scale, surface_zscale);
! 856: }
! 857:
! 858: static void show_size()
! 859: {
! 860: fprintf(stderr, "\tsize is scaled by %g,%g\n", xsize, ysize);
! 861: if (aspect_ratio > 0)
! 862: fprintf(stderr, "\tTry to set aspect ratio to %g:1.0\n", aspect_ratio);
! 863: else if (aspect_ratio == 0)
! 864: fputs("\tNo attempt to control aspect ratio\n", stderr);
! 865: else
! 866: fprintf(stderr, "\tTry to set LOCKED aspect ratio to %g:1.0\n",
! 867: -aspect_ratio);
! 868: }
! 869:
! 870: static void show_origin()
! 871: {
! 872: fprintf(stderr, "\torigin is set to %g,%g\n", xoffset, yoffset);
! 873: }
! 874:
! 875: static void show_xyzlabel(name, label)
! 876: char *name;
! 877: label_struct *label;
! 878: {
! 879: char str[MAX_LINE_LEN + 1];
! 880: fprintf(stderr, "\t%s is \"%s\", offset at %f, %f",
! 881: name, conv_text(str, label->text), label->xoffset, label->yoffset);
! 882: if (*label->font)
! 883: fprintf(stderr, ", using font \"%s\"", conv_text(str, label->font));
! 884: putc('\n', stderr);
! 885: }
! 886:
! 887: static void show_keytitle()
! 888: {
! 889: char str[MAX_LINE_LEN+1];
! 890: fprintf(stderr, "\tkeytitle is \"%s\"\n",
! 891: conv_text(str, key_title));
! 892: }
! 893:
! 894: static void show_timefmt()
! 895: {
! 896: char str[MAX_LINE_LEN+1];
! 897: fprintf(stderr, "\tread format for time is \"%s\"\n",
! 898: conv_text(str, timefmt));
! 899: }
! 900:
! 901: static void show_locale()
! 902: {
! 903: fprintf(stderr, "\tlocale is \"%s\"\n", cur_locale);
! 904: }
! 905:
! 906: static void show_xzeroaxis()
! 907: {
! 908: if (xzeroaxis.l_type > -3)
! 909: fprintf(stderr, "\txzeroaxis is drawn with linestyle %d, linewidth %.3f\n", xzeroaxis.l_type + 1, xzeroaxis.l_width);
! 910: else
! 911: fputs("\txzeroaxis is OFF\n", stderr);
! 912: if (x2zeroaxis.l_type > -3)
! 913: fprintf(stderr, "\tx2zeroaxis is drawn with linestyle %d, linewidth %.3f\n", x2zeroaxis.l_type + 1, x2zeroaxis.l_width);
! 914: else
! 915: fputs("\tx2zeroaxis is OFF\n", stderr);
! 916: }
! 917:
! 918: static void show_yzeroaxis()
! 919: {
! 920: if (yzeroaxis.l_type > -3)
! 921: fprintf(stderr, "\tyzeroaxis is drawn with linestyle %d, linewidth %.3f\n", yzeroaxis.l_type + 1, yzeroaxis.l_width);
! 922: else
! 923: fputs("\tyzeroaxis is OFF\n", stderr);
! 924: if (y2zeroaxis.l_type > -3)
! 925: fprintf(stderr, "\ty2zeroaxis is drawn with linestyle %d, linewidth %.3f\n", y2zeroaxis.l_type + 1, y2zeroaxis.l_width);
! 926: else
! 927: fputs("\ty2zeroaxis is OFF\n", stderr);
! 928: }
! 929:
! 930: static void show_label(tag)
! 931: int tag; /* 0 means show all */
! 932: {
! 933: struct text_label *this_label;
! 934: TBOOLEAN showed = FALSE;
! 935: char str[MAX_LINE_LEN + 1];
! 936:
! 937: for (this_label = first_label; this_label != NULL;
! 938: this_label = this_label->next) {
! 939: if (tag == 0 || tag == this_label->tag) {
! 940: showed = TRUE;
! 941: fprintf(stderr, "\tlabel %d \"%s\" at ",
! 942: this_label->tag, conv_text(str, this_label->text));
! 943: show_position(&this_label->place);
! 944: switch (this_label->pos) {
! 945: case LEFT:{
! 946: fputs(" left", stderr);
! 947: break;
! 948: }
! 949: case CENTRE:{
! 950: fputs(" centre", stderr);
! 951: break;
! 952: }
! 953: case RIGHT:{
! 954: fputs(" right", stderr);
! 955: break;
! 956: }
! 957: }
! 958: fprintf(stderr, " %s ", this_label->rotate ? "rotated (if possible)" : "not rotated");
! 959: if ((this_label->font)[0] != NUL)
! 960: fprintf(stderr, " font \"%s\"", this_label->font);
! 961: /* Entry font added by DJL */
! 962: fputc('\n', stderr);
! 963: }
! 964: }
! 965: if (tag > 0 && !showed)
! 966: int_error("label not found", c_token);
! 967: }
! 968:
! 969: static void show_arrow(tag)
! 970: int tag; /* 0 means show all */
! 971: {
! 972: struct arrow_def *this_arrow;
! 973: TBOOLEAN showed = FALSE;
! 974:
! 975: for (this_arrow = first_arrow; this_arrow != NULL;
! 976: this_arrow = this_arrow->next) {
! 977: if (tag == 0 || tag == this_arrow->tag) {
! 978: showed = TRUE;
! 979: fprintf(stderr, "\tarrow %d, linetype %d, linewidth %.3f %s\n\t from ",
! 980: this_arrow->tag,
! 981: this_arrow->lp_properties.l_type + 1,
! 982: this_arrow->lp_properties.l_width,
! 983: this_arrow->head ? "" : " (nohead)");
! 984: show_position(&this_arrow->start);
! 985: fputs(" to ", stderr);
! 986: show_position(&this_arrow->end);
! 987: putc('\n', stderr);
! 988: }
! 989: }
! 990: if (tag > 0 && !showed)
! 991: int_error("arrow not found", c_token);
! 992: }
! 993:
! 994: static void show_linestyle(tag)
! 995: int tag; /* 0 means show all */
! 996: {
! 997: struct linestyle_def *this_linestyle;
! 998: TBOOLEAN showed = FALSE;
! 999:
! 1000: for (this_linestyle = first_linestyle; this_linestyle != NULL;
! 1001: this_linestyle = this_linestyle->next) {
! 1002: if (tag == 0 || tag == this_linestyle->tag) {
! 1003: showed = TRUE;
! 1004: fprintf(stderr, "\tlinestyle %d, linetype %d, linewidth %.3f, pointtype %d, pointsize %.3f\n",
! 1005: this_linestyle->tag,
! 1006: this_linestyle->lp_properties.l_type + 1,
! 1007: this_linestyle->lp_properties.l_width,
! 1008: this_linestyle->lp_properties.p_type + 1,
! 1009: this_linestyle->lp_properties.p_size);
! 1010: }
! 1011: }
! 1012: if (tag > 0 && !showed)
! 1013: int_error("linestyle not found", c_token);
! 1014: }
! 1015:
! 1016: static void show_grid()
! 1017: {
! 1018: if (!work_grid.l_type) {
! 1019: fputs("\tgrid is OFF\n", stderr);
! 1020: return;
! 1021: }
! 1022: fprintf(stderr, "\t%s grid drawn at%s%s%s%s%s%s%s%s%s%s tics\n",
! 1023: (polar_grid_angle != 0) ? "Polar" : "Rectangular",
! 1024: work_grid.l_type & GRID_X ? " x" : "",
! 1025: work_grid.l_type & GRID_Y ? " y" : "",
! 1026: work_grid.l_type & GRID_Z ? " z" : "",
! 1027: work_grid.l_type & GRID_X2 ? " x2" : "",
! 1028: work_grid.l_type & GRID_Y2 ? " y2" : "",
! 1029: work_grid.l_type & GRID_MX ? " mx" : "",
! 1030: work_grid.l_type & GRID_MY ? " my" : "",
! 1031: work_grid.l_type & GRID_MZ ? " mz" : "",
! 1032: work_grid.l_type & GRID_MX2 ? " mx2" : "",
! 1033: work_grid.l_type & GRID_MY2 ? " my2" : "");
! 1034:
! 1035: fprintf(stderr, "\tMajor grid drawn with linetype %d, linewidth %.3f\n",
! 1036: grid_lp.l_type + 1, grid_lp.l_width);
! 1037: fprintf(stderr, "\tMinor grid drawn with linetype %d, linewidth %.3f\n",
! 1038: mgrid_lp.l_type + 1, mgrid_lp.l_width);
! 1039:
! 1040: if (polar_grid_angle)
! 1041: fprintf(stderr, "\tGrid radii drawn every %f %s\n",
! 1042: polar_grid_angle / ang2rad,
! 1043: angles_format == ANGLES_DEGREES ? "degrees" : "radians");
! 1044: }
! 1045:
! 1046: static void show_mtics(minitic, minifreq, name)
! 1047: int minitic;
! 1048: double minifreq;
! 1049: char *name;
! 1050: {
! 1051: switch (minitic) {
! 1052: case MINI_OFF:
! 1053: fprintf(stderr, "\tminor %stics are off\n", name);
! 1054: break;
! 1055: case MINI_DEFAULT:
! 1056: fprintf(stderr, "\tminor %stics are computed automatically for log scales\n", name);
! 1057: break;
! 1058: case MINI_AUTO:
! 1059: fprintf(stderr, "\tminor %stics are computed automatically\n", name);
! 1060: break;
! 1061: case MINI_USER:
! 1062: fprintf(stderr, "\tminor %stics are drawn with %d subintervals between major xtic marks\n", name, (int) minifreq);
! 1063: break;
! 1064: default:
! 1065: int_error("Unknown minitic type in show_mtics()", NO_CARET);
! 1066: }
! 1067: }
! 1068:
! 1069: static void show_key()
! 1070: {
! 1071: char str[80];
! 1072: *str = '\0';
! 1073: switch (key) {
! 1074: case -1:
! 1075: if (key_vpos == TUNDER) {
! 1076: strcpy(str, "below");
! 1077: } else if (key_vpos == TTOP) {
! 1078: strcpy(str, "top");
! 1079: } else {
! 1080: strcpy(str, "bottom");
! 1081: }
! 1082: if (key_hpos == TOUT) {
! 1083: strcpy(str, "outside (right)");
! 1084: } else if (key_hpos == TLEFT) {
! 1085: strcat(str, " left");
! 1086: } else {
! 1087: strcat(str, " right");
! 1088: }
! 1089: if (key_vpos != TUNDER && key_hpos != TOUT) {
! 1090: strcat(str, " corner");
! 1091: }
! 1092: fprintf(stderr, "\tkey is ON, position: %s\n", str);
! 1093: break;
! 1094: case 0:
! 1095: fputs("\tkey is OFF\n", stderr);
! 1096: break;
! 1097: case 1:
! 1098: fputs("\tkey is at ", stderr);
! 1099: show_position(&key_user_pos);
! 1100: putc('\n', stderr);
! 1101: break;
! 1102: }
! 1103: if (key) {
! 1104: fprintf(stderr, "\tkey is %s justified, %s reversed and ",
! 1105: key_just == JLEFT ? "left" : "right",
! 1106: key_reverse ? "" : "not");
! 1107: if (key_box.l_type >= -2)
! 1108: fprintf(stderr, "boxed\n\twith linetype %d, linewidth %.3f\n",
! 1109: key_box.l_type + 1, key_box.l_width);
! 1110: else
! 1111: fprintf(stderr, "not boxed\n\
! 1112: \tsample length is %g characters\n\
! 1113: \tvertical spacing is %g characters\n\
! 1114: \twidth adjustment is %g characters\n\
! 1115: \tkey title is \"%s\"\n",
! 1116: key_swidth,
! 1117: key_vert_factor,
! 1118: key_width_fix,
! 1119: key_title);
! 1120: }
! 1121: }
! 1122:
! 1123: static void show_parametric()
! 1124: {
! 1125: fprintf(stderr, "\tparametric is %s\n", (parametric) ? "ON" : "OFF");
! 1126: }
! 1127:
! 1128: static void show_pointsize()
! 1129: {
! 1130: fprintf(stderr, "\tpointsize is %g\n", pointsize);
! 1131: }
! 1132:
! 1133: static void show_encoding()
! 1134: {
! 1135: fprintf(stderr, "\tencoding is %s\n", encoding_names[encoding]);
! 1136: }
! 1137:
! 1138: static void show_polar()
! 1139: {
! 1140: fprintf(stderr, "\tpolar is %s\n", (polar) ? "ON" : "OFF");
! 1141: }
! 1142:
! 1143: static void show_angles()
! 1144: {
! 1145: fputs("\tAngles are in ", stderr);
! 1146: switch (angles_format) {
! 1147: case ANGLES_RADIANS:
! 1148: fputs("radians\n", stderr);
! 1149: break;
! 1150: case ANGLES_DEGREES:
! 1151: fputs("degrees\n", stderr);
! 1152: break;
! 1153: }
! 1154: }
! 1155:
! 1156:
! 1157: static void show_tics(showx, showy, showz, showx2, showy2)
! 1158: TBOOLEAN showx, showy, showz, showx2, showy2;
! 1159: {
! 1160: char str[MAX_LINE_LEN+1];
! 1161: fprintf(stderr, "\ttics are %s, \
! 1162: \tticslevel is %g\n\
! 1163: \tmajor ticscale is %g and minor ticscale is %g\n",
! 1164: (tic_in ? "IN" : "OUT"),
! 1165: ticslevel,
! 1166: ticscale, miniticscale);
! 1167:
! 1168: if (showx)
! 1169: show_ticdef(xtics, FIRST_X_AXIS, &xticdef, "x", rotate_xtics,
! 1170: conv_text(str, xformat));
! 1171: if (showx2)
! 1172: show_ticdef(x2tics, SECOND_X_AXIS, &x2ticdef, "x2", rotate_x2tics,
! 1173: conv_text(str, x2format));
! 1174: if (showy)
! 1175: show_ticdef(ytics, FIRST_Y_AXIS, &yticdef, "y", rotate_ytics,
! 1176: conv_text(str, yformat));
! 1177: if (showy2)
! 1178: show_ticdef(y2tics, SECOND_Y_AXIS, &y2ticdef, "y2", rotate_y2tics,
! 1179: conv_text(str, y2format));
! 1180: if (showz)
! 1181: show_ticdef(ztics, FIRST_Z_AXIS, &zticdef, "z", rotate_ztics,
! 1182: conv_text(str, zformat));
! 1183: screen_ok = FALSE;
! 1184: }
! 1185:
! 1186: /* called by show_tics */
! 1187: static void show_ticdef(tics, axis, tdef, text, rotate_tics, ticfmt)
! 1188: int tics; /* xtics ytics or ztics */
! 1189: int axis;
! 1190: struct ticdef *tdef; /* xticdef yticdef or zticdef */
! 1191: char *text; /* "x", ..., "x2", "y2" */
! 1192: char *ticfmt;
! 1193: int rotate_tics;
! 1194: {
! 1195: register struct ticmark *t;
! 1196:
! 1197: fprintf(stderr, "\t%s-axis tics:\t", text);
! 1198: switch (tics & TICS_MASK) {
! 1199: case NO_TICS:
! 1200: fputs("OFF\n", stderr);
! 1201: return;
! 1202: case TICS_ON_AXIS:
! 1203: fputs("on axis", stderr);
! 1204: if (tics & TICS_MIRROR)
! 1205: fprintf(stderr, " and mirrored %s", (tic_in ? "OUT" : "IN"));
! 1206: break;
! 1207: case TICS_ON_BORDER:
! 1208: fputs("on border", stderr);
! 1209: if (tics & TICS_MIRROR)
! 1210: fputs(" and mirrored on opposite border", stderr);
! 1211: break;
! 1212: }
! 1213:
! 1214: fprintf(stderr,"\n\t labels are format \"%s\"", ticfmt);
! 1215: if (rotate_tics)
! 1216: fputs(", rotated in 2D mode, terminal permitting.\n\t", stderr);
! 1217: else
! 1218: fputs(" and are not rotated\n\t", stderr);
! 1219:
! 1220: switch (tdef->type) {
! 1221: case TIC_COMPUTED:{
! 1222: fputs(" intervals computed automatically\n", stderr);
! 1223: break;
! 1224: }
! 1225: case TIC_MONTH:{
! 1226: fputs(" Months computed automatically\n", stderr);
! 1227: break;
! 1228: }
! 1229: case TIC_DAY:{
! 1230: fputs(" Days computed automatically\n", stderr);
! 1231: break;
! 1232: }
! 1233: case TIC_SERIES:{
! 1234: fputs(" series", stderr);
! 1235: if (tdef->def.series.start != -VERYLARGE) {
! 1236: fputs(" from ", stderr);
! 1237: SHOW_NUM_OR_TIME(tdef->def.series.start, axis);
! 1238: }
! 1239: fprintf(stderr, " by %g%s", tdef->def.series.incr, datatype[axis] == TIME ? " secs" : "");
! 1240: if (tdef->def.series.end != VERYLARGE) {
! 1241: fputs(" until ", stderr);
! 1242: SHOW_NUM_OR_TIME(tdef->def.series.end, axis);
! 1243: }
! 1244: putc('\n', stderr);
! 1245: break;
! 1246: }
! 1247: case TIC_USER:{
! 1248: /* this appears to be unused? lh
! 1249: int time;
! 1250: time = (datatype[axis] == TIME);
! 1251: */
! 1252: fputs(" list (", stderr);
! 1253: for (t = tdef->def.user; t != NULL; t = t->next) {
! 1254: if (t->label) {
! 1255: char str[MAX_LINE_LEN+1];
! 1256: fprintf(stderr, "\"%s\" ", conv_text(str, t->label));
! 1257: }
! 1258: SHOW_NUM_OR_TIME(t->position, axis);
! 1259: if (t->next)
! 1260: fputs(", ", stderr);
! 1261: }
! 1262: fputs(")\n", stderr);
! 1263: break;
! 1264: }
! 1265: default:{
! 1266: int_error("unknown ticdef type in show_ticdef()", NO_CARET);
! 1267: /* NOTREACHED */
! 1268: }
! 1269: }
! 1270: }
! 1271:
! 1272:
! 1273: static void show_margin()
! 1274: {
! 1275: if (lmargin >= 0)
! 1276: fprintf(stderr, "\tlmargin is set to %d\n", lmargin);
! 1277: else
! 1278: fputs("\tlmargin is computed automatically\n", stderr);
! 1279: if (bmargin >= 0)
! 1280: fprintf(stderr, "\tbmargin is set to %d\n", bmargin);
! 1281: else
! 1282: fputs("\tbmargin is computed automatically\n", stderr);
! 1283: if (rmargin >= 0)
! 1284: fprintf(stderr, "\trmargin is set to %d\n", rmargin);
! 1285: else
! 1286: fputs("\trmargin is computed automatically\n", stderr);
! 1287: if (tmargin >= 0)
! 1288: fprintf(stderr, "\ttmargin is set to %d\n", tmargin);
! 1289: else
! 1290: fputs("\ttmargin is computed automatically\n", stderr);
! 1291: }
! 1292:
! 1293: static void show_term()
! 1294: {
! 1295: if (term)
! 1296: fprintf(stderr, "\tterminal type is %s %s\n",
! 1297: term->name, term_options);
! 1298: else
! 1299: fputs("\tterminal type is unknown\n", stderr);
! 1300: }
! 1301:
! 1302: static void show_plot()
! 1303: {
! 1304: fprintf(stderr, "\tlast plot command was: %s\n", replot_line);
! 1305: }
! 1306:
! 1307: static void show_autoscale()
! 1308: {
! 1309: fputs("\tautoscaling is ", stderr);
! 1310: if (parametric) {
! 1311: if (is_3d_plot) {
! 1312: fprintf(stderr, "\tt: %s%s%s, ",
! 1313: (autoscale_t) ? "ON" : "OFF",
! 1314: (autoscale_t == 1) ? " (min)" : "",
! 1315: (autoscale_t == 2) ? " (max)" : "");
! 1316: } else {
! 1317: fprintf(stderr, "\tu: %s%s%s, ",
! 1318: (autoscale_u) ? "ON" : "OFF",
! 1319: (autoscale_u == 1) ? " (min)" : "",
! 1320: (autoscale_u == 2) ? " (max)" : "");
! 1321: fprintf(stderr, "v: %s%s%s, ",
! 1322: (autoscale_v) ? "ON" : "OFF",
! 1323: (autoscale_v == 1) ? " (min)" : "",
! 1324: (autoscale_v == 2) ? " (max)" : "");
! 1325: }
! 1326: } else
! 1327: putc('\t', stderr);
! 1328:
! 1329: if (polar) {
! 1330: fprintf(stderr, "r: %s%s%s, ", (autoscale_r) ? "ON" : "OFF",
! 1331: (autoscale_r == 1) ? " (min)" : "",
! 1332: (autoscale_r == 2) ? " (max)" : "");
! 1333: }
! 1334: fprintf(stderr, "x: %s%s%s, ", (autoscale_x) ? "ON" : "OFF",
! 1335: (autoscale_x == 1) ? " (min)" : "",
! 1336: (autoscale_x == 2) ? " (max)" : "");
! 1337: fprintf(stderr, "y: %s%s%s, ", (autoscale_y) ? "ON" : "OFF",
! 1338: (autoscale_y == 1) ? " (min)" : "",
! 1339: (autoscale_y == 2) ? " (max)" : "");
! 1340: fprintf(stderr, "z: %s%s%s\n", (autoscale_z) ? "ON" : "OFF",
! 1341: (autoscale_z == 1) ? " (min)" : "",
! 1342: (autoscale_z == 2) ? " (max)" : "");
! 1343: }
! 1344:
! 1345: static void show_clip()
! 1346: {
! 1347: fprintf(stderr, "\tpoint clip is %s\n", (clip_points) ? "ON" : "OFF");
! 1348:
! 1349: if (clip_lines1)
! 1350: fputs("\tdrawing and clipping lines between inrange and outrange points\n", stderr);
! 1351: else
! 1352: fputs("\tnot drawing lines between inrange and outrange points\n", stderr);
! 1353:
! 1354: if (clip_lines2)
! 1355: fputs("\tdrawing and clipping lines between two outrange points\n", stderr);
! 1356: else
! 1357: fputs("\tnot drawing lines between two outrange points\n", stderr);
! 1358: }
! 1359:
! 1360: static void show_mapping()
! 1361: {
! 1362: fputs("\tmapping for 3-d data is ", stderr);
! 1363:
! 1364: switch (mapping3d) {
! 1365: case MAP3D_CARTESIAN:
! 1366: fputs("cartesian\n", stderr);
! 1367: break;
! 1368: case MAP3D_SPHERICAL:
! 1369: fputs("spherical\n", stderr);
! 1370: break;
! 1371: case MAP3D_CYLINDRICAL:
! 1372: fputs("cylindrical\n", stderr);
! 1373: break;
! 1374: }
! 1375: }
! 1376:
! 1377: static void show_contour()
! 1378: {
! 1379: fprintf(stderr, "\tcontour for surfaces are %s",
! 1380: (draw_contour) ? "drawn" : "not drawn\n");
! 1381:
! 1382: if (draw_contour) {
! 1383: fprintf(stderr, " in %d levels on ", contour_levels);
! 1384: switch (draw_contour) {
! 1385: case CONTOUR_BASE:
! 1386: fputs("grid base\n", stderr);
! 1387: break;
! 1388: case CONTOUR_SRF:
! 1389: fputs("surface\n", stderr);
! 1390: break;
! 1391: case CONTOUR_BOTH:
! 1392: fputs("grid base and surface\n", stderr);
! 1393: break;
! 1394: }
! 1395: switch (contour_kind) {
! 1396: case CONTOUR_KIND_LINEAR:
! 1397: fputs("\t\tas linear segments\n", stderr);
! 1398: break;
! 1399: case CONTOUR_KIND_CUBIC_SPL:
! 1400: fprintf(stderr, "\t\tas cubic spline interpolation segments with %d pts\n", contour_pts);
! 1401: break;
! 1402: case CONTOUR_KIND_BSPLINE:
! 1403: fprintf(stderr, "\t\tas bspline approximation segments of order %d with %d pts\n", contour_order, contour_pts);
! 1404: break;
! 1405: }
! 1406: switch (levels_kind) {
! 1407: case LEVELS_AUTO:
! 1408: fprintf(stderr, "\t\tapprox. %d automatic levels\n", contour_levels);
! 1409: break;
! 1410: case LEVELS_DISCRETE:
! 1411: {
! 1412: int i;
! 1413: fprintf(stderr, "\t\t%d discrete levels at ", contour_levels);
! 1414: fprintf(stderr, "%g", levels_list[0]);
! 1415: for (i = 1; i < contour_levels; i++)
! 1416: fprintf(stderr, ",%g ", levels_list[i]);
! 1417: putc('\n', stderr);
! 1418: break;
! 1419: }
! 1420: case LEVELS_INCREMENTAL:
! 1421: fprintf(stderr, "\t\t%d incremental levels starting at %g, step %g, end %g\n", contour_levels, levels_list[0], levels_list[1],
! 1422: levels_list[0] + (contour_levels - 1) * levels_list[1]);
! 1423: /* contour-levels counts both ends */
! 1424: break;
! 1425: }
! 1426: /* fprintf(stderr,"\t\tcontour line types are %s\n", label_contours ? "varied" : "all the same"); */
! 1427: show_label_contours();
! 1428: }
! 1429: }
! 1430:
! 1431: static void show_format()
! 1432: {
! 1433: char str[5][MAX_LINE_LEN + 1];
! 1434:
! 1435: fprintf(stderr, "\ttic format is x-axis: \"%s\"\
! 1436: , y-axis: \"%s\"\
! 1437: , z-axis: \"%s\"\
! 1438: , x2-axis: \"%s\"\
! 1439: , y2-axis: \"%s\"\n",
! 1440: conv_text(str[0], xformat),
! 1441: conv_text(str[1], yformat),
! 1442: conv_text(str[2], zformat),
! 1443: conv_text(str[3], x2format),
! 1444: conv_text(str[4], y2format));
! 1445: }
! 1446:
! 1447: #define SHOW_LOG(FLAG, BASE, TEXT) \
! 1448: if (FLAG) fprintf(stderr, "%s %s (base %g)", !count++ ? "\tlogscaling" : " and", TEXT,BASE)
! 1449:
! 1450: static void show_logscale()
! 1451: {
! 1452: int count = 0;
! 1453:
! 1454: SHOW_LOG(is_log_x, base_log_x, "x");
! 1455: SHOW_LOG(is_log_y, base_log_y, "y");
! 1456: SHOW_LOG(is_log_z, base_log_z, "z");
! 1457: SHOW_LOG(is_log_x2, base_log_x2, "x2");
! 1458: SHOW_LOG(is_log_y2, base_log_y2, "y2");
! 1459:
! 1460: if (count == 0)
! 1461: fputs("\tno logscaling\n", stderr);
! 1462: else if (count == 1)
! 1463: fputs(" only\n", stderr);
! 1464: else
! 1465: putc('\n', stderr);
! 1466: }
! 1467:
! 1468: static void show_variables()
! 1469: {
! 1470: register struct udvt_entry *udv = first_udv;
! 1471: int len;
! 1472:
! 1473: fputs("\n\tVariables:\n", stderr);
! 1474: while (udv) {
! 1475: len = instring(udv->udv_name, ' ');
! 1476: fprintf(stderr, "\t%-*s ", len, udv->udv_name);
! 1477: if (udv->udv_undef)
! 1478: fputs("is undefined\n", stderr);
! 1479: else {
! 1480: fputs("= ", stderr);
! 1481: disp_value(stderr, &(udv->udv_value));
! 1482: (void) putc('\n', stderr);
! 1483: }
! 1484: udv = udv->next_udv;
! 1485: }
! 1486: }
! 1487:
! 1488: /*
! 1489: * Used in plot.c and misc.c
! 1490: * By adding FILE *fp, we can now use show_version()
! 1491: * to save version information to a file.
! 1492: */
! 1493: void show_version(fp)
! 1494: FILE *fp;
! 1495: {
! 1496: /* If printed to a file, we prefix everything with
! 1497: * a hash mark to comment out the version information.
! 1498: */
! 1499: char prefix[6]; /* "# " */
! 1500: char *p = prefix;
! 1501:
! 1502: prefix[0] = '#';
! 1503: prefix[1] = prefix[2] = prefix[3] = prefix[4] = ' ';
! 1504: prefix[5] = NUL;
! 1505:
! 1506: if (fp == stderr) {
! 1507: /* No hash mark - let p point to the trailing '\0' */
! 1508: p += sizeof(prefix) - 1;
! 1509: } else {
! 1510: #ifdef GNUPLOT_BINDIR
! 1511: # ifdef X11
! 1512: fprintf(fp, "#!%s/gnuplot -persist\n#\n", GNUPLOT_BINDIR);
! 1513: # else
! 1514: fprintf(fp, "#!%s/gnuplot\n#\n", GNUPLOT_BINDIR);
! 1515: # endif /* not X11 */
! 1516: #endif /* GNUPLOT_BINDIR */
! 1517: }
! 1518: fprintf(fp, "%s\n\
! 1519: %s\t%s\n\
! 1520: %s\t%sversion %s\n\
! 1521: %s\tpatchlevel %s\n\
! 1522: %s\tlast modified %s\n\
! 1523: %s\n\
! 1524: %s\t%s\n\
! 1525: %s\tThomas Williams, Colin Kelley and many others\n\
! 1526: %s\n\
! 1527: %s\tType `help` to access the on-line reference manual\n\
! 1528: %s\tThe gnuplot FAQ is available from\n\
! 1529: %s\t\t<%s>\n\
! 1530: %s\n\
! 1531: %s\tSend comments and requests for help to <%s>\n\
! 1532: %s\tSend bugs, suggestions and mods to <%s>\n\
! 1533: %s\n",
! 1534: p, /* empty line */
! 1535: p, PROGRAM,
! 1536: p, OS, version,
! 1537: p, patchlevel,
! 1538: p, date,
! 1539: p, /* empty line */
! 1540: p, gnuplot_copyright,
! 1541: p, /* authors */
! 1542: p, /* empty line */
! 1543: p, /* Type help */
! 1544: p, /* FAQ is at */
! 1545: p, faq_location,
! 1546: p, /* empty line */
! 1547: p, help_email,
! 1548: p, bug_email,
! 1549: p); /* empty line */
! 1550: }
! 1551:
! 1552: void show_version_long()
! 1553: {
! 1554: char *helpfile = NULL;
! 1555: #ifdef HAVE_SYS_UTSNAME_H
! 1556: struct utsname uts;
! 1557:
! 1558: /* something is fundamentally wrong if this fails ... */
! 1559: if (uname(&uts) > -1) {
! 1560: # ifdef _AIX
! 1561: fprintf(stderr, "\nSystem: %s %s.%s", uts.sysname, uts.version, uts.release);
! 1562: # elif defined (SCO)
! 1563: fprintf(stderr, "\nSystem: SCO %s", uts.release);
! 1564: # else
! 1565: fprintf(stderr, "\nSystem: %s %s", uts.sysname, uts.release);
! 1566: # endif
! 1567: } else {
! 1568: fprintf(stderr, "\n%s\n", OS);
! 1569: }
! 1570:
! 1571: #else /* ! HAVE_SYS_UTSNAME_H */
! 1572:
! 1573: fprintf(stderr, "\n%s\n", OS);
! 1574:
! 1575: #endif /* HAVE_SYS_UTSNAME_H */
! 1576:
! 1577: fputs("\nCompile options:\n", stderr);
! 1578:
! 1579: {
! 1580: /* The following code could be a lot simpler if
! 1581: * it wasn't for Borland's broken compiler ...
! 1582: */
! 1583: const char *rdline, *gnu_rdline, *libgd, *libpng, *linuxvga,
! 1584: *nocwdrc, *x11, *unixplot, *gnugraph;
! 1585:
! 1586: rdline =
! 1587: #ifdef READLINE
! 1588: "+READLINE "
! 1589: #else
! 1590: "-READLINE "
! 1591: #endif
! 1592: ,gnu_rdline =
! 1593: #ifdef GNU_READLINE
! 1594: "+GNU_READLINE "
! 1595: #else
! 1596: "-GNU_READLINE "
! 1597: #endif
! 1598: ,libgd =
! 1599: #ifdef HAVE_LIBGD
! 1600: "+LIBGD "
! 1601: #else
! 1602: "-LIBGD "
! 1603: #endif
! 1604: ,libpng =
! 1605: #ifdef HAVE_LIBPNG
! 1606: "+LIBPNG "
! 1607: #else
! 1608: "-LIBPNG "
! 1609: #endif
! 1610: ,linuxvga =
! 1611: #ifdef LINUXVGA
! 1612: "+LINUXVGA "
! 1613: #else
! 1614: ""
! 1615: #endif
! 1616: ,nocwdrc =
! 1617: #ifdef NOCWDRC
! 1618: "+NOCWDRC "
! 1619: #else
! 1620: "-NOCWDRC "
! 1621: #endif
! 1622: ,x11 =
! 1623:
! 1624: #ifdef X11
! 1625: "+X11 "
! 1626: #else
! 1627: ""
! 1628: #endif
! 1629: ,unixplot =
! 1630: #ifdef UNIXPLOT
! 1631: "+UNIXPLOT "
! 1632: #else
! 1633: ""
! 1634: #endif
! 1635: ,gnugraph =
! 1636: #ifdef GNUGRAPH
! 1637: "+GNUGRAPH "
! 1638: #else
! 1639: ""
! 1640: #endif
! 1641: ;
! 1642: fprintf(stderr, "%s%s%s%s%s%s%s%s%s\n\n", rdline, gnu_rdline,
! 1643: libgd, libpng, linuxvga, nocwdrc, x11, unixplot, gnugraph);
! 1644: }
! 1645:
! 1646: if ((helpfile = getenv("GNUHELP")) == NULL) {
! 1647: #if defined(ATARI) || defined(MTOS)
! 1648: if ((helpfile = getenv("GNUPLOTPATH")) == NULL) {
! 1649: helpfile = HELPFILE;
! 1650: }
! 1651: #else
! 1652: helpfile = HELPFILE;
! 1653: #endif
! 1654: }
! 1655: fprintf(stderr, "HELPFILE = \"%s\"\n\
! 1656: FAQ location = <%s>\n\
! 1657: CONTACT = <%s>\n\
! 1658: HELPMAIL = <%s>\n", helpfile, faq_location, bug_email, help_email);
! 1659: }
! 1660:
! 1661: static void show_datatype(name, axis)
! 1662: char *name;
! 1663: int axis;
! 1664: {
! 1665: fprintf(stderr, "\t%s is set to %s\n", name,
! 1666: datatype[axis] == TIME ? "time" : "numerical");
! 1667: }
! 1668:
! 1669: char *
! 1670: conv_text(s, t)
! 1671: char *s, *t;
! 1672: {
! 1673: /* convert unprintable characters as \okt, tab as \t, newline \n .. */
! 1674: char *r;
! 1675: r = s;
! 1676: while (*t != '\0') {
! 1677: switch (*t) {
! 1678: case '\t':
! 1679: *s++ = '\\';
! 1680: *s++ = 't';
! 1681: break;
! 1682: case '\n':
! 1683: *s++ = '\\';
! 1684: *s++ = 'n';
! 1685: break;
! 1686: #ifndef OSK
! 1687: case '\r':
! 1688: *s++ = '\\';
! 1689: *s++ = 'r';
! 1690: break;
! 1691: #endif
! 1692: case '"':
! 1693: case '\\':
! 1694: *s++ = '\\';
! 1695: *s++ = *t;
! 1696: break;
! 1697:
! 1698: default:{
! 1699: if ((*t & 0177) > 31 && (*t & 0177) < 127)
! 1700: *s++ = *t;
! 1701: else {
! 1702: *s++ = '\\';
! 1703: sprintf(s, "%o", *t);
! 1704: while (*s != '\0')
! 1705: s++;
! 1706: }
! 1707: }
! 1708: }
! 1709: t++;
! 1710: }
! 1711: *s = '\0';
! 1712: return (r);
! 1713: }
! 1714:
! 1715:
! 1716: static void show_position(pos)
! 1717: struct position *pos;
! 1718: {
! 1719: static char *msg[] =
! 1720: {"(first axes) ", "(second axes) ", "(graph units) ", "(screen units) "};
! 1721:
! 1722: assert(first_axes == 0 && second_axes == 1 && graph == 2 && screen == 3);
! 1723:
! 1724: fprintf(stderr, "(%s%g, %s%g, %s%g)",
! 1725: pos->scalex == first_axes ? "" : msg[pos->scalex], pos->x,
! 1726: pos->scaley == pos->scalex ? "" : msg[pos->scaley], pos->y,
! 1727: pos->scalez == pos->scaley ? "" : msg[pos->scalez], pos->z);
! 1728:
! 1729: }
! 1730:
! 1731: static void show_missing()
! 1732: {
! 1733: if (missing_val == NULL)
! 1734: fputs("\tNo string is interpreted as missing data\n", stderr);
! 1735: else
! 1736: fprintf(stderr, "\t\"%s\" is interpreted as missing value\n", missing_val);
! 1737: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>