Annotation of OpenXM_contrib/gnuplot/term/pm.trm, Revision 1.1
1.1 ! maekawa 1: /*
! 2: * $Id: $
! 3: */
! 4:
! 5: /* GNUPLOT - pm.trm */
! 6:
! 7: /*[
! 8: * Copyright 1992, 1993, 1998
! 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: * pm.trm --- inboard terminal driver for Presentation Manager
! 39: * --- after X-11 driver, by R.W.Fearick 31/1/92.
! 40: * v1.1 11/8/92 -- speed things up
! 41: */
! 42:
! 43: #include "driver.h"
! 44:
! 45: #ifdef TERM_REGISTER
! 46: register_term(pm)
! 47: #endif
! 48:
! 49: #ifdef TERM_PROTO
! 50: TERM_PUBLIC void PM_init __PROTO((void));
! 51: TERM_PUBLIC void PM_options __PROTO((void));
! 52: TERM_PUBLIC void PM_reset __PROTO((void));
! 53: TERM_PUBLIC void PM_text __PROTO((void));
! 54: TERM_PUBLIC void PM_graphics __PROTO((void));
! 55: TERM_PUBLIC void PM_linetype __PROTO((int lt));
! 56: TERM_PUBLIC void PM_move __PROTO((unsigned int x, unsigned int y));
! 57: TERM_PUBLIC void PM_vector __PROTO((unsigned int x, unsigned int y));
! 58: TERM_PUBLIC int PM_text_angle __PROTO((int ang));
! 59: TERM_PUBLIC void PM_put_text __PROTO((unsigned int x, unsigned int y, char *str));
! 60: TERM_PUBLIC int PM_justify_text __PROTO((enum JUSTIFY mode));
! 61: TERM_PUBLIC void PM_point __PROTO((unsigned int x, unsigned int y, int number));
! 62: TERM_PUBLIC void PM_suspend __PROTO((void));
! 63: TERM_PUBLIC void PM_resume __PROTO((void));
! 64: TERM_PUBLIC void PM_linewidth __PROTO((double linewidth));
! 65:
! 66: /* define PM world coordinate limits */
! 67:
! 68: #define PM_XMAX 19500
! 69: #define PM_YMAX 12500
! 70:
! 71: /* approximations for typical font/screen sizes */
! 72: #define PM_VCHAR (550)
! 73: #define PM_HCHAR (220)
! 74: #define PM_VTIC (200)
! 75: #define PM_HTIC (200)
! 76: #endif
! 77:
! 78: #ifdef TERM_BODY
! 79:
! 80: #include <stdio.h>
! 81: #include <process.h>
! 82: #include <io.h>
! 83: #define INCL_DOSPROCESS
! 84: #define INCL_DOSSEMAPHORES
! 85: #define INCL_DOSMISC
! 86: #define INCL_DOSMODULEMGR
! 87: #include <os2.h>
! 88:
! 89:
! 90: /* graphics commands */
! 91: #define SET_GRAPHICS 'G'
! 92: #define SET_TEXT 'E'
! 93: #define SET_LINE 'L'
! 94: #define SET_LINEWIDTH 'W'
! 95: #define SET_ANGLE 'A'
! 96: #define SET_JUSTIFY 'J'
! 97: #define SET_POINTMODE 'D'
! 98: #define SET_FONT 'F'
! 99: #define SET_OPTIONS 'O'
! 100: #define GR_QUERY 'Q'
! 101: #define GR_SUSPEND 'E' /*'s' */
! 102: #define GR_RESUME 'r'
! 103: #define GR_MOVE 'M'
! 104: #define GR_DRAW 'V'
! 105: #define GR_RESET 'R'
! 106: #define GR_TEXT 'T'
! 107: #define GR_PAUSE 'P'
! 108: #define GR_HELP 'H'
! 109: #define PM_nopts 1
! 110:
! 111: /* path for pm program */
! 112: static char PM_path[256] = "";
! 113: /* track mode to avoid redraw after hitting break */
! 114: static int PM_mode = 0;
! 115: static HEV hev;
! 116: static int PM_termmode = 0;
! 117: static int PM_must_reset_opts = FALSE;
! 118: static int PM_must_abort = 0;
! 119:
! 120: static char PM_opts[256] = "";
! 121: static int PM_optargs = 0;
! 122: static int PM_plot_number = 0;
! 123: static char PM_term_title[128] = "";
! 124:
! 125: FILE *fopen();
! 126: static FILE *PM_pipe = NULL;
! 127: static FILE *PM_savepipe = NULL;
! 128:
! 129: int PM_pause __PROTO((char *str));
! 130: void PM_setup(void);
! 131: static void PM_reset_opts(void);
! 132: static void PM_query(void);
! 133: static void PM_make_servername(char *);
! 134: static void PM_abortplot();
! 135:
! 136: TERM_PUBLIC void PM_init()
! 137: {
! 138: static char buffer[1024];
! 139: int pid;
! 140: int rc;
! 141: int spawnmode;
! 142: PPIB pib;
! 143: PTIB tib;
! 144: char semname[32];
! 145: char pipename[32];
! 146: char tempname[32];
! 147:
! 148: term_force_init = TRUE;
! 149: if (PM_savepipe != NULL && PM_termmode == 0) {
! 150: PM_pipe = PM_savepipe;
! 151: }
! 152: if ((PM_pipe == NULL) && (PM_termmode & 2)) {
! 153: /* check if term is running */
! 154: PM_make_servername(tempname);
! 155: strcpy(pipename, "\\pipe\\");
! 156: strcat(pipename, tempname);
! 157: // sprintf( pipename, "\\pipe\\gpServ%d", PM_plot_number ) ;
! 158: DosGetInfoBlocks(&tib, &pib);
! 159: PM_pipe = fopen(pipename, "r+b");
! 160: if (PM_pipe != NULL) {
! 161: setvbuf(PM_pipe, buffer, _IOFBF, 1024);
! 162: pid = pib->pib_ulpid;
! 163: fwrite(&pid, 1, 4, PM_pipe);
! 164: fflush(PM_pipe);
! 165: /* set new options */
! 166: // PM_reset_opts() ;
! 167: }
! 168: }
! 169: /* else we start up term here */
! 170: if (PM_pipe == NULL) {
! 171: if (PM_termmode & 2) {
! 172: PM_make_servername(tempname);
! 173: // sprintf( tempname, "gpServ%d", PM_plot_number ) ;
! 174: } else {
! 175: static int gpid = 0;
! 176: gpid++;
! 177: sprintf(tempname, "gp%X%d", getpid(), gpid);
! 178: }
! 179: strcpy(semname, "\\sem32\\");
! 180: strcpy(pipename, "\\pipe\\");
! 181: strcat(semname, tempname);
! 182: strcat(pipename, tempname);
! 183: strcat(PM_path, "\\gnupmdrv.exe");
! 184: rc = access(PM_path, 0);
! 185: /* find exe file */
! 186: if (rc != 0)
! 187: rc = DosSearchPath(0x0002, /* search GNUPLOT environment */
! 188: "GNUPLOT",
! 189: "gnupmdrv.exe",
! 190: PM_path,
! 191: 256);
! 192:
! 193: if (rc != 0)
! 194: rc = DosSearchPath(0x0003, /* then try current directory & path */
! 195: "PATH",
! 196: "gnupmdrv.exe",
! 197: PM_path,
! 198: 256);
! 199: if (rc != 0) {
! 200: fputs("Cannot find gnupmdrv.exe !\n", stderr);
! 201: exit(3);
! 202: }
! 203: rc = DosCreateEventSem(semname, &hev, 1, 0);
! 204: if (rc != 0) {
! 205: fputs("Cannot create semaphore !\n", stderr);
! 206: exit(3);
! 207: }
! 208: spawnmode = P_SESSION | P_DEFAULT;
! 209: if (PM_optargs != 0)
! 210: spawnmode |= P_UNRELATED;
! 211: pid = spawnl(spawnmode, PM_path, "GnuplotPM", tempname, PM_opts, NULL);
! 212: if (pid == -1) {
! 213: fputs("Cannot spawn gnupmdrv.exe !\n", stderr);
! 214: exit(3);
! 215: }
! 216: DosGetInfoBlocks(&tib, &pib);
! 217: DosWaitEventSem(hev, 10000);
! 218: DosCloseEventSem(hev);
! 219: PM_pipe = fopen(pipename, "r+b");
! 220: if (PM_pipe == NULL) {
! 221: fputs("Cannot open pipe to gnupmdrv.exe !\n", stderr);
! 222: exit(3);
! 223: } else if (PM_termmode == 0)
! 224: PM_savepipe = PM_pipe;
! 225: setvbuf(PM_pipe, buffer, _IOFBF, 1024);
! 226: pid = pib->pib_ulpid;
! 227: fwrite(&pid, 1, 4, PM_pipe);
! 228: fflush(PM_pipe);
! 229: } else {
! 230: if (PM_must_reset_opts)
! 231: PM_reset_opts();
! 232: }
! 233: PM_query();
! 234: }
! 235:
! 236: static void PM_make_servername(char *str)
! 237: {
! 238: if (PM_term_title[0]) {
! 239: int hash = 0;
! 240: char *p = PM_term_title + 1;
! 241: int match = PM_term_title[0];
! 242: while (*p != match) {
! 243: hash = (hash << 1) + hash + *p++;
! 244: }
! 245: hash %= (256 * 256 * 256 - 1);
! 246: sprintf(str, "gp%x", hash);
! 247: } else
! 248: sprintf(str, "gpServ%d", PM_plot_number);
! 249: }
! 250:
! 251:
! 252: TERM_PUBLIC void PM_options()
! 253: {
! 254: int old_termmode = PM_termmode;
! 255: PM_termmode = 0;
! 256: term_options[0] = NUL;
! 257: PM_term_title[0] = NUL;
! 258: PM_opts[0] = NUL;
! 259: PM_optargs = 0;
! 260: while (!END_OF_COMMAND) {
! 261: if (almost_equals(c_token, "pe$rsist")) {
! 262: strcat(PM_opts, "-p ");
! 263: strcat(term_options, "persist ");
! 264: PM_termmode |= 1;
! 265: PM_optargs = 1;
! 266: if (!(old_termmode & 1))
! 267: PM_pipe = NULL;
! 268: } else if (almost_equals(c_token, "s$erver")) {
! 269: strcat(PM_opts, "-s ");
! 270: strcat(term_options, "server ");
! 271: PM_termmode |= 2;
! 272: PM_optargs = 1;
! 273: if (!(old_termmode & 2))
! 274: PM_pipe = NULL;
! 275: if (isanumber(c_token + 1)) {
! 276: struct value t;
! 277: char *p = PM_opts + strlen(PM_opts);
! 278: c_token++;
! 279: PM_plot_number = (int) real(const_express(&t));
! 280: sprintf(p, "%d", PM_plot_number);
! 281: sprintf(term_options + strlen(term_options), "%d", PM_plot_number);
! 282: }
! 283: } else if (almost_equals(c_token, "w$idelines")) {
! 284: strcat(PM_opts, "-w ");
! 285: strcat(term_options, "widelines ");
! 286: PM_optargs = 1;
! 287: } else if (almost_equals(c_token, "e$nhanced")) {
! 288: strcat(PM_opts, "-e ");
! 289: strcat(term_options, "enhanced ");
! 290: PM_optargs = 1;
! 291: } else if (isstring(c_token)) {
! 292: copy_str(PM_term_title, c_token, 127);
! 293: }
! 294: #if 0
! 295: else if (almost_equals(c_token, "po$rtrait")) {
! 296: strcat(PM_opts, "-l ");
! 297: strcat(term_options, "portrait ");
! 298: PM_optargs = 1;
! 299: }
! 300: #endif
! 301: c_token++;
! 302: }
! 303: if (PM_term_title[0]) {
! 304: strcat(PM_opts, " ");
! 305: strcat(term_options, " ");
! 306: strcat(PM_opts, PM_term_title);
! 307: strcat(term_options, PM_term_title);
! 308: }
! 309: PM_must_reset_opts = TRUE;
! 310: }
! 311:
! 312: static void PM_reset_opts()
! 313: {
! 314: int len;
! 315: putc(SET_OPTIONS, PM_pipe);
! 316: len = strlen(PM_opts) + 1;
! 317: fwrite(&len, sizeof(int), 1, PM_pipe);
! 318: fwrite(PM_opts, 1, len, PM_pipe);
! 319: for (len = sizeof(int) - len % sizeof(int); len > 0; len--) {
! 320: /* pad rest of int with zeros */
! 321: putc(NUL, PM_pipe);
! 322: }
! 323: fflush(PM_pipe);
! 324: PM_must_reset_opts = FALSE;
! 325: }
! 326:
! 327: static void PM_query()
! 328: {
! 329: int rc;
! 330: ULONG cbR;
! 331: putc(GR_QUERY, PM_pipe);
! 332: fflush(PM_pipe);
! 333: rc = DosRead(fileno(PM_pipe), &term->h_char, sizeof(int), &cbR);
! 334: rc = DosRead(fileno(PM_pipe), &term->v_char, sizeof(int), &cbR);
! 335: }
! 336:
! 337: TERM_PUBLIC void PM_reset()
! 338: {
! 339: putc(GR_RESET, PM_pipe);
! 340: fflush(PM_pipe);
! 341: term_force_init = FALSE;
! 342: if (PM_termmode > 0) {
! 343: fclose(PM_pipe);
! 344: PM_pipe = NULL;
! 345: }
! 346: }
! 347:
! 348: TERM_PUBLIC void PM_suspend()
! 349: {
! 350: putc(GR_SUSPEND, PM_pipe);
! 351: fflush(PM_pipe);
! 352: }
! 353:
! 354: TERM_PUBLIC void PM_resume()
! 355: {
! 356: putc(GR_RESUME, PM_pipe);
! 357: fflush(PM_pipe);
! 358: }
! 359:
! 360: TERM_PUBLIC void PM_text()
! 361: {
! 362: fflush(PM_pipe);
! 363: if (PM_mode != SET_TEXT) {
! 364: putc(SET_TEXT, PM_pipe);
! 365: fflush(PM_pipe);
! 366: // keep_term_initialised = term_initialised ;
! 367: // term_initialised = FALSE ; /* need to force init */
! 368: }
! 369: PM_mode = SET_TEXT;
! 370: }
! 371:
! 372: TERM_PUBLIC void PM_graphics()
! 373: {
! 374: putc(SET_GRAPHICS, PM_pipe);
! 375: fflush(PM_pipe);
! 376: PM_mode = SET_GRAPHICS;
! 377: }
! 378:
! 379: TERM_PUBLIC void PM_move(unsigned int x, unsigned int y)
! 380: {
! 381: if (PM_must_abort)
! 382: PM_abortplot();
! 383: putc(GR_MOVE, PM_pipe);
! 384: fwrite(&x, sizeof(int), 1, PM_pipe);
! 385: fwrite(&y, sizeof(int), 1, PM_pipe);
! 386: }
! 387:
! 388: TERM_PUBLIC void PM_vector(unsigned int x, unsigned int y)
! 389: {
! 390: if (PM_must_abort)
! 391: PM_abortplot();
! 392: putc(GR_DRAW, PM_pipe);
! 393: fwrite(&x, sizeof(int), 1, PM_pipe);
! 394: fwrite(&y, sizeof(int), 1, PM_pipe);
! 395: }
! 396:
! 397: TERM_PUBLIC void PM_linetype(int lt)
! 398: {
! 399: putc(SET_LINE, PM_pipe);
! 400: fwrite(<, sizeof(int), 1, PM_pipe);
! 401: }
! 402:
! 403: TERM_PUBLIC int PM_text_angle(int ang)
! 404: {
! 405: putc(SET_ANGLE, PM_pipe);
! 406: fwrite(&ang, sizeof(int), 1, PM_pipe);
! 407: return (TRUE);
! 408: }
! 409:
! 410: TERM_PUBLIC void PM_put_text(unsigned int x, unsigned int y, char *str)
! 411: {
! 412: int len;
! 413: if (PM_must_abort)
! 414: PM_abortplot();
! 415: putc(GR_TEXT, PM_pipe);
! 416: fwrite(&x, sizeof(int), 1, PM_pipe);
! 417: fwrite(&y, sizeof(int), 1, PM_pipe);
! 418: len = strlen(str) + 1;
! 419: fwrite(&len, sizeof(int), 1, PM_pipe);
! 420: fwrite(str, 1, len, PM_pipe);
! 421: for (len = sizeof(int) - len % sizeof(int); len > 0; len--) {
! 422: /* pad rest of int with zeros */
! 423: putc(NUL, PM_pipe);
! 424: }
! 425: }
! 426:
! 427: TERM_PUBLIC int PM_justify_text(enum JUSTIFY mode)
! 428: {
! 429: putc(SET_JUSTIFY, PM_pipe);
! 430: fwrite(&mode, sizeof(int), 1, PM_pipe);
! 431: return (TRUE);
! 432: }
! 433:
! 434: TERM_PUBLIC int PM_set_font(font) /* Entry font added by DJL */
! 435: char *font;
! 436: {
! 437: int len, fontsize;
! 438: char *p;
! 439: p = strchr(font, ',');
! 440: if (p == NULL || *p == NUL)
! 441: fontsize = 14;
! 442: else
! 443: fontsize = strtol(p + 1, NULL, 10);
! 444: if (fontsize <= 0)
! 445: fontsize = 14;
! 446: putc(SET_FONT, PM_pipe);
! 447: len = strlen(font) + 1;
! 448: fwrite(&len, sizeof(int), 1, PM_pipe);
! 449: fwrite(font, 1, len, PM_pipe);
! 450: for (len = sizeof(int) - len % sizeof(int); len > 0; len--) {
! 451: /* pad rest of int with zeros */
! 452: putc(NUL, PM_pipe);
! 453: }
! 454: return TRUE;
! 455: }
! 456:
! 457:
! 458: TERM_PUBLIC void PM_point(unsigned int x, unsigned int y, int number)
! 459: /*
! 460: ** tell the driver we are plotting a point so it can decide whether to
! 461: ** use colour or not
! 462: */
! 463: {
! 464: int mode;
! 465: mode = 1;
! 466: putc(SET_POINTMODE, PM_pipe);
! 467: fwrite(&mode, sizeof(int), 1, PM_pipe);
! 468: do_point(x, y, number);
! 469: mode = 0;
! 470: putc(SET_POINTMODE, PM_pipe);
! 471: fwrite(&mode, sizeof(int), 1, PM_pipe);
! 472: }
! 473:
! 474: void PM_abortplot()
! 475: {
! 476: PM_must_abort = 0;
! 477: term_reset();
! 478: (void) putc('\n', stderr);
! 479: bail_to_command_line();
! 480: }
! 481:
! 482: void PM_intc_cleanup()
! 483: {
! 484: if (PM_pipe == NULL || PM_mode == SET_TEXT)
! 485: PM_abortplot();
! 486: PM_must_abort = 1;
! 487: }
! 488:
! 489: void PM_setup(void)
! 490: /*
! 491: ** Initial terminal setup
! 492: */
! 493: {
! 494: char *envpath;
! 495: PPIB pib;
! 496: PTIB tib;
! 497: char path[256], *p;
! 498: DosGetInfoBlocks(&tib, &pib);
! 499: DosQueryModuleName(pib->pib_hmte, 256, path);
! 500: if (PM_path[0] == NUL) {
! 501: strcpy(PM_path, path);
! 502: p = strrchr(PM_path, '\\');
! 503: if (p != NULL)
! 504: *p = NUL;
! 505: else {
! 506: p = strrchr(PM_path, ':');
! 507: if (p != NULL)
! 508: *(p + 1) = NUL;
! 509: }
! 510: if (p == NULL)
! 511: _getcwd2(PM_path, 256);
! 512: }
! 513: if (getenv("GNUHELP") == NULL) {
! 514: int n = strlen("GNUHELP") + strlen(PM_path) + strlen("gnuplot.gih") + 3;
! 515: envpath = (char *) malloc(n);
! 516: if (envpath != NULL) {
! 517: strcpy(envpath, "GNUHELP");
! 518: strcat(envpath, "=");
! 519: strcat(envpath, PM_path);
! 520: strcat(envpath, "/");
! 521: strcat(envpath, "gnuplot.gih");
! 522: putenv(envpath);
! 523: }
! 524: }
! 525: if (getenv("GNUPLOT") == NULL) {
! 526: int n = strlen("GNUPLOT") + strlen(PM_path) + 2;
! 527: envpath = (char *) malloc(n);
! 528: if (envpath != NULL) {
! 529: strcpy(envpath, "GNUPLOT");
! 530: strcat(envpath, "=");
! 531: strcat(envpath, PM_path);
! 532: putenv(envpath);
! 533: }
! 534: }
! 535: }
! 536:
! 537: int PM_pause(char *str)
! 538: /*
! 539: ** pause - using message box on PM screen
! 540: */
! 541: {
! 542: int len, rc;
! 543: ULONG cbR;
! 544: char buf[256];
! 545: char *bp;
! 546:
! 547: if (PM_pipe == NULL)
! 548: return 2;
! 549: bp = buf;
! 550: putc(GR_PAUSE, PM_pipe);
! 551: len = strlen(str) + 1;
! 552: fwrite(&len, sizeof(int), 1, PM_pipe);
! 553: fwrite(str, 1, len, PM_pipe);
! 554: for (rc = sizeof(int) - len % sizeof(int); rc > 0; rc--) {
! 555: /* pad rest of int with zeros */
! 556: putc(NUL, PM_pipe);
! 557: }
! 558: fflush(PM_pipe);
! 559: rc = DosRead(fileno(PM_pipe), &len, sizeof(int), &cbR);
! 560: return len;
! 561: }
! 562:
! 563: TERM_PUBLIC void PM_linewidth(double linewidth)
! 564: {
! 565: int lw;
! 566: lw = linewidth * 100;
! 567: putc(SET_LINEWIDTH, PM_pipe);
! 568: fwrite(&lw, sizeof(int), 1, PM_pipe);
! 569: }
! 570:
! 571: #endif
! 572:
! 573: #ifdef TERM_TABLE
! 574: TERM_TABLE_START(PM_driver)
! 575: "pm", "OS/2 Presentation Manager",
! 576: PM_XMAX, PM_YMAX, PM_VCHAR, PM_HCHAR,
! 577: PM_VTIC, PM_HTIC, PM_options, PM_init, PM_reset,
! 578: PM_text, null_scale, PM_graphics, PM_move, PM_vector,
! 579: PM_linetype, PM_put_text, PM_text_angle,
! 580: PM_justify_text, PM_point, do_arrow, PM_set_font,
! 581: 0 /*pointsize */ , TERM_CAN_MULTIPLOT, PM_suspend, PM_resume,
! 582: 0 /*fillbox */ , PM_linewidth
! 583: TERM_TABLE_END(PM_driver)
! 584:
! 585: #undef LAST_TERM
! 586: #define LAST_TERM PM_driver
! 587:
! 588: #endif /* TERM_TABLE */
! 589:
! 590: #ifdef TERM_HELP
! 591: START_HELP(pm)
! 592: "1 pm",
! 593: "?commands set terminal pm",
! 594: "?set terminal pm",
! 595: "?set term pm",
! 596: "?terminal pm",
! 597: "?term pm",
! 598: "?pm",
! 599: " The `pm` terminal driver provides an OS/2 Presentation Manager window in",
! 600: " which the graph is plotted. The window is opened when the first graph is",
! 601: " plotted. This window has its own online help as well as facilities for",
! 602: " printing, copying to the clipboard and some line type and color adjustments.",
! 603: " The `multiplot` option is supported.",
! 604: "",
! 605: " Syntax:",
! 606: " set terminal pm {server {n}} {persist} {widelines} {enhanced} {\"title\"}",
! 607: "",
! 608: " If `persist` is specified, each graph appears in its own window and all",
! 609: " windows remain open after `gnuplot` exits. If `server` is specified, all",
! 610: " graphs appear in the same window, which remains open when `gnuplot` exits.",
! 611: " This option takes an optional numerical argument which specifies an instance",
! 612: " of the server process. Thus multiple server windows can be in use at the",
! 613: " same time.",
! 614: "",
! 615: " If `widelines` is specified, all plots will be drawn with wide lines. If",
! 616: " `enhanced` is specified, sub- and superscripts and multiple fonts are",
! 617: " enabled using the same syntax as the `enhanced postscript` option (see",
! 618: " `set terminal postscript enhanced` for details). Font names for the basic",
! 619: " PostScript fonts may be abbreviated to single letters.",
! 620: "",
! 621: " If `title` is specified, it will be used as the title of the plot window.",
! 622: " It will also be used as the name of the server instance, and will override",
! 623: " the optional numerical argument.",
! 624: "",
! 625: " Linewidths may be changed with `set linestyle`."
! 626: END_HELP(pm)
! 627: #endif /* TERM_HELP */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>