Annotation of OpenXM_contrib/gnuplot/term/x11.trm, Revision 1.1
1.1 ! maekawa 1: /*
! 2: * $Id: x11.trm,v 1.35 1998/06/18 14:59:27 ddenholm Exp $
! 3: *
! 4: */
! 5:
! 6: /*[
! 7: * Copyright 1986 - 1993, 1998 Thomas Williams, Colin Kelley
! 8: *
! 9: * Permission to use, copy, and distribute this software and its
! 10: * documentation for any purpose with or without fee is hereby granted,
! 11: * provided that the above copyright notice appear in all copies and
! 12: * that both that copyright notice and this permission notice appear
! 13: * in supporting documentation.
! 14: *
! 15: * Permission to modify the software is granted, but not the right to
! 16: * distribute the complete modified source code. Modifications are to
! 17: * be distributed as patches to the released version. Permission to
! 18: * distribute binaries produced by compiling modified sources is granted,
! 19: * provided you
! 20: * 1. distribute the corresponding source modifications from the
! 21: * released version in the form of a patch file along with the binaries,
! 22: * 2. add special version identification to distinguish your version
! 23: * in addition to the base release version number,
! 24: * 3. provide your name and address as the primary contact for the
! 25: * support of your modified version, and
! 26: * 4. retain our contact information in regard to use of the base
! 27: * software.
! 28: * Permission to distribute the released version of the source code along
! 29: * with corresponding source modifications in the form of a patch file is
! 30: * granted with same provisions 2 through 4 for binary distributions.
! 31: *
! 32: * This software is provided "as is" without express or implied warranty
! 33: * to the extent permitted by applicable law.
! 34: ]*/
! 35:
! 36: /*
! 37: * x11.trm --- inboard terminal driver for X11
! 38: */
! 39:
! 40: #include "driver.h"
! 41:
! 42: #ifdef TERM_REGISTER
! 43: register_term(x11)
! 44: #endif
! 45:
! 46: #ifdef TERM_PROTO
! 47: int X11_args __PROTO((int argc, char *argv[]));
! 48: TERM_PUBLIC void X11_options __PROTO((void));
! 49: TERM_PUBLIC void X11_init __PROTO((void));
! 50: TERM_PUBLIC void X11_graphics __PROTO((void));
! 51: TERM_PUBLIC void X11_text __PROTO((void));
! 52: TERM_PUBLIC void X11_reset __PROTO((void));
! 53: TERM_PUBLIC void X11_move __PROTO((unsigned int x, unsigned int y));
! 54: TERM_PUBLIC void X11_vector __PROTO((unsigned int x, unsigned int y));
! 55: TERM_PUBLIC void X11_linewidth __PROTO((double lw));
! 56: TERM_PUBLIC void X11_pointsize __PROTO((double ps));
! 57: TERM_PUBLIC void X11_linetype __PROTO((int lt));
! 58: TERM_PUBLIC void X11_put_text __PROTO((unsigned int x, unsigned int y, char str[]));
! 59: TERM_PUBLIC int X11_justify_text __PROTO((enum JUSTIFY mode));
! 60: TERM_PUBLIC void X11_point __PROTO((unsigned int x, unsigned int y, int number));
! 61: TERM_PUBLIC void X11_fillbox __PROTO((int style, unsigned int x, unsigned y, unsigned int width, unsigned int height));
! 62: #define X11_XMAX 4096
! 63: #define X11_YMAX 4096
! 64:
! 65: /* approximations for typical font/screen sizes */
! 66: #define X11_VCHAR (X11_YMAX/25)
! 67: #define X11_HCHAR (X11_XMAX/100)
! 68: #define X11_VTIC (X11_YMAX/100)
! 69: #define X11_HTIC (X11_XMAX/150)
! 70: #endif
! 71:
! 72:
! 73: #ifndef TERM_PROTO_ONLY
! 74:
! 75: #ifdef TERM_BODY
! 76: int X11_Display = 0; /* non-zero if '-display' found on command line */
! 77:
! 78:
! 79: /* sunos 4 uses on_exit() in place of atexit(). If both are missing,
! 80: * we can probably survive since gnuplot_x11 should detect EOF on
! 81: * the pipe. Unfortunately, the handlers take different parameters.
! 82: */
! 83:
! 84: #ifdef NO_ATEXIT
! 85: # define HANDLER_PROTO __PROTO((int x, void *y))
! 86: # define HANDLER_DECL (x,y) int x; void *y;
! 87: # define HANDLER_PARAMS (0,NULL)
! 88: # ifdef HAVE_ON_EXIT
! 89: # define atexit(x) on_exit(x, NULL)
! 90: # else
! 91: # define atexit(x) /* nowt */
! 92: # endif
! 93: #else /* !NO_ATEXIT */
! 94: # define HANDLER_PROTO __PROTO((void))
! 95: # define HANDLER_DECL ()
! 96: # define HANDLER_PARAMS ()
! 97: #endif
! 98:
! 99: static void X11_atexit HANDLER_PROTO;
! 100:
! 101: static char X11_opts[][20] =
! 102: {
! 103: "-mono", "-gray", "-clear", "-tvtwm", "-pointsize",
! 104: "-iconic", "-rv", "-reverse", "+rv", "-synchronous",
! 105: "-display", "-geometry", "-bg", "-background", "-bd", "-bordercolor", "-bw",
! 106: "-borderwidth", "-fg", "-foreground", "-fn", "-font", "-name",
! 107: "-selectionTimeout", "-title", "-xnllanguage", "-xrm",
! 108: "-raise", "-noraise", "-persist"
! 109: };
! 110:
! 111: #define X11_nopts (sizeof(X11_opts) / sizeof(X11_opts[0]))
! 112:
! 113: static int X11_optarg[X11_nopts] =
! 114: {
! 115: 0, 0, 0, 0, 1,
! 116: 0, 0, 0, 0, 0,
! 117: 1, 1, 1, 1, 1, 1, 1,
! 118: 1, 1, 1, 1, 1, 1,
! 119: 1, 1, 1, 1,
! 120: 0, 0, 0
! 121: };
! 122:
! 123: static FILE *X11_ipc;
! 124: #ifdef OS2
! 125: static char X11_command[1024] = "gnuplot_x11.exe";
! 126: #else
! 127: static char X11_command[1024] = "gnuplot_x11";
! 128: #endif
! 129:
! 130: /* X11_args - scan gnuplot command line for standard X Toolkit options
! 131: * called from plot.c so must not be TERM_PUBLIC (which may be static)
! 132: */
! 133:
! 134: int X11_args(argc, argv)
! 135: int argc;
! 136: char *argv[];
! 137: {
! 138: int nx11 = 0, n;
! 139:
! 140: while (++argv, --argc > 0) {
! 141: for (n = 0; n < X11_nopts; n++) {
! 142: if (!strcmp(*argv, X11_opts[n])) {
! 143: strcat(X11_command, " ");
! 144: strcat(X11_command, *argv);
! 145: if (strcmp(*argv, "-display") == 0)
! 146: X11_Display++;
! 147: if (X11_optarg[n]) {
! 148: if (--argc <= 0)
! 149: return (nx11);
! 150: strcat(X11_command, " \"");
! 151: strcat(X11_command, *++argv);
! 152: strcat(X11_command, "\"");
! 153: nx11++;
! 154: }
! 155: nx11++;
! 156: break;
! 157: }
! 158: }
! 159: if (n == X11_nopts)
! 160: break;
! 161: }
! 162: return (nx11);
! 163: }
! 164:
! 165:
! 166: static unsigned int X11_plot_number;
! 167:
! 168: TERM_PUBLIC void X11_options()
! 169: {
! 170: if (almost_equals(c_token, "res$et")) {
! 171: X11_atexit HANDLER_PARAMS; /* tell gnuplot_x11 to shut down */
! 172: ++c_token;
! 173: }
! 174: if (!END_OF_COMMAND) {
! 175: struct value a;
! 176: X11_plot_number = (int) real(const_express(&a));
! 177: /* let gnuplot_x11 check range */
! 178: }
! 179: sprintf(term_options, "%d", X11_plot_number);
! 180: }
! 181:
! 182: /*-----------------------------------------------------------------------------
! 183: * Three different versions of the remainder of the X11 terminal driver
! 184: * are provided to support three different types of IPC with the
! 185: * gnuplot_x11 outboard terminal driver:
! 186: *
! 187: * DEFAULT_X11: popen() pipe for most un*x platforms
! 188: *
! 189: * CRIPPLED_SELECT : file IPC for un*x platforms with incomplete or faulty
! 190: * implementation of BSD select()
! 191: *
! 192: * VMS : mailbox/spawn IPC
! 193: *---------------------------------------------------------------------------*/
! 194:
! 195: #define DEFAULT_X11
! 196: #if defined(VMS) || defined(CRIPPLED_SELECT)
! 197: #undef DEFAULT_X11
! 198: #endif
! 199: #if defined(VMS) && defined(CRIPPLED_SELECT)
! 200: Error.Incompatible options.
! 201: #endif
! 202:
! 203: /* we do not want to have to duplicate all the code, so we
! 204: * do most of it with macros.
! 205: * PRINT0(format), PRINT1(format, p1), PRINT2(format, p1, p2) etc
! 206: * also FLUSH0(format), etc, which do an additional flush
! 207: */
! 208:
! 209:
! 210: #ifdef DEFAULT_X11
! 211: /*-----------------------------------------------------------------------------
! 212: * DEFAULT_X11 popen() pipe IPC
! 213: *---------------------------------------------------------------------------*/
! 214:
! 215: static void X11_atexit HANDLER_DECL { if (X11_ipc) {
! 216: fputs("R\n", X11_ipc);
! 217: fclose(X11_ipc);
! 218: /* dont wait(), since they might be -persist */
! 219: X11_ipc = NULL;
! 220: }
! 221: } TERM_PUBLIC void X11_init()
! 222: {
! 223: if (!X11_ipc) {
! 224: /* first time through or after a reset */
! 225: #if defined(OSK) || defined(OS2)
! 226: /* OS-9 popen() does not block on close for child to end, so
! 227: * we can safely use it here
! 228: */
! 229: X11_ipc = popen(X11_command, "w");
! 230: #else
! 231: int fdes[2];
! 232: pipe(fdes);
! 233: if (fork() == 0) {
! 234: /* child */
! 235: close(fdes[1]);
! 236: dup2(fdes[0], 0); /* stdin from pipe */
! 237: execl("/bin/sh", "sh", "-c", X11_command, NULL);
! 238: /* if we get here, something went wrong */
! 239: perror("exec failed");
! 240: exit(1);
! 241: }
! 242: /* parent */
! 243: close(fdes[0]); /* read end of pipe */
! 244: X11_ipc = fdopen(fdes[1], "w");
! 245: #endif
! 246: } {
! 247: static int been_here = 0;
! 248: if (!been_here) {
! 249: atexit(X11_atexit);
! 250: been_here = 1;
! 251: }
! 252: }
! 253:
! 254: }
! 255:
! 256: TERM_PUBLIC void X11_reset()
! 257: {
! 258: /* leave the pipe alone, until exit or set term x11 reset */
! 259: }
! 260:
! 261: #define PRINT0(fmt) fprintf(X11_ipc, fmt)
! 262: #define PRINT1(fmt,p1) fprintf(X11_ipc, fmt,p1)
! 263: #define PRINT2(fmt,p1,p2) fprintf(X11_ipc, fmt,p1,p2)
! 264: #define PRINT3(fmt,p1,p2,p3) fprintf(X11_ipc, fmt,p1,p2,p3)
! 265: #define PRINT4(fmt,p1,p2,p3,p4) fprintf(X11_ipc, fmt,p1,p2,p3,p4)
! 266: #define PRINT5(fmt,p1,p2,p3,p4,p5) fprintf(X11_ipc, fmt,p1,p2,p3,p4,p5)
! 267:
! 268: #define FFLUSH() fflush(X11_ipc)
! 269:
! 270: #define BEFORE_GRAPHICS /* nowt */
! 271: #define AFTER_TEXT /* nowt */
! 272: #endif /* DEFAULT_X11 */
! 273:
! 274:
! 275: #ifdef CRIPPLED_SELECT
! 276:
! 277: /* PLEASE CAN SOMEONE CHECK THAT THIS STILL WORKS !!! */
! 278:
! 279: /*-----------------------------------------------------------------------------
! 280: * CRIPPLED_SELECT file IPC
! 281: *---------------------------------------------------------------------------*/
! 282:
! 283: static char X11_tmp[32], X11_tmp0[32], X11_shutdown[32];
! 284: static int X11_pid;
! 285:
! 286: TERM_PUBLIC void X11_init()
! 287: {
! 288: if (!(X11_pid = fork())) {
! 289: execl("/bin/sh", "sh", "-c", X11_command, NULL);
! 290: _exit(1);
! 291: }
! 292: sprintf(X11_tmp, "/tmp/Gnuplot_%d", X11_pid);
! 293: sprintf(X11_tmp0, "%s-", X11_tmp);
! 294: sprintf(X11_shutdown, "echo R >%s", X11_tmp);
! 295: }
! 296:
! 297: TERM_PUBLIC void X11_reset()
! 298: {
! 299: system(X11_shutdown);
! 300: }
! 301:
! 302: #define BEFORE_GRAPHICS \
! 303: if (!(X11_ipc = fopen(X11_tmp0, "w"))) { \
! 304: perror(X11_tmp0); system(X11_shutdown); exit(1); \
! 305: }
! 306:
! 307: #define AFTER_TEXT \
! 308: { fclose(X11_ipc); rename(X11_tmp0, X11_tmp); }
! 309:
! 310: #define PRINT0(fmt) fprintf(X11_ipc, fmt)
! 311: #define PRINT1(fmt,p1) fprintf(X11_ipc, fmt,p1)
! 312: #define PRINT2(fmt,p1,p2) fprintf(X11_ipc, fmt,p1,p2)
! 313: #define PRINT3(fmt,p1,p2,p3) fprintf(X11_ipc, fmt,p1,p2,p3)
! 314: #define PRINT4(fmt,p1,p2,p3,p4) fprintf(X11_ipc, fmt,p1,p2,p3,p4)
! 315: #define PRINT5(fmt,p1,p2,p3,p4,p5) fprintf(X11_ipc, fmt,p1,p2,p3,p4,p5)
! 316: #define FFLUSH() fflush(X11_ipc)
! 317:
! 318: static void X11_atexit HANDLER_DECL { /* WHAT SHOULD I DO ? */
! 319: }
! 320:
! 321: #endif /* CRIPPLED_SELECT */
! 322: #ifdef VMS
! 323: /*-----------------------------------------------------------------------------
! 324: * VMS mailbox/spawn IPC - Yehavi Bourvine - YEHAVI@VMS.HUJI.AC.IL
! 325: *---------------------------------------------------------------------------*/
! 326: #include <iodef.h>
! 327: #include <descrip.h>
! 328: #include <dvidef.h>
! 329: #ifdef __DECC
! 330: #include <lib$routines.h>
! 331: #include <starlet.h>
! 332: #endif
! 333: #ifdef __GNUC__
! 334: #include <errno.h>
! 335: #else
! 336: int vaxc$errno;
! 337: #endif
! 338:
! 339: #define SS$_NORMAL 1 /* or include <ssdef.h> for all SS$_ def's */
! 340:
! 341: #define MBXMXMSG 128 /* DEFMBXMXMSG is set by SYSGEN */
! 342:
! 343: static short X11_channel;
! 344:
! 345: struct iosb {
! 346: unsigned short stat;
! 347: unsigned short count;
! 348: unsigned long info;
! 349: };
! 350:
! 351:
! 352: TERM_PUBLIC void X11_init()
! 353: {
! 354:
! 355: struct iosb iosb;
! 356:
! 357: static char devnam_string[64];
! 358: static $DESCRIPTOR(devnam, devnam_string);
! 359:
! 360: struct {
! 361: short int buf_len;
! 362: short int item;
! 363: char *buf_addr;
! 364: unsigned short int *ret_len;
! 365: int end;
! 366: } item_list = {
! 367: devnam.dsc$w_length, DVI$_DEVNAM,
! 368: devnam.dsc$a_pointer,
! 369: &devnam.dsc$w_length, 0
! 370: };
! 371:
! 372:
! 373: if (!X11_channel) {
! 374: int one = 1;
! 375:
! 376: /* Create a descriptor for the command line that starts
! 377: GNUPLOT_X11. $DESCRIP doesn't work in this context... */
! 378:
! 379: struct dsc$descriptor_s pgmdsc =
! 380: {0, DSC$K_DTYPE_T,
! 381: DSC$K_CLASS_S, 0};
! 382: pgmdsc.dsc$w_length = strlen(X11_command);
! 383: pgmdsc.dsc$a_pointer = X11_command;
! 384:
! 385:
! 386: /* Create a mailbox which will be used as a pipe for commands to the
! 387: subprocess. What we'll write to it will be read by the subprocess as
! 388: its STDIN. Use an unnamed mailbox and refer to it by its device
! 389: number */
! 390:
! 391: vaxc$errno = sys$crembx(0, &X11_channel, MBXMXMSG, MBXMXMSG, 0, 0, 0, 0);
! 392: if ((vaxc$errno & SS$_NORMAL) != SS$_NORMAL) {
! 393: printf("SYS$CreMbx failed with status=%d\r\n", vaxc$errno);
! 394: os_error("sys$crembx failed", NO_CARET);
! 395: }
! 396: vaxc$errno = sys$getdviw(0, X11_channel, 0, &item_list, &iosb, 0, 0, 0);
! 397: if ((vaxc$errno & SS$_NORMAL) == SS$_NORMAL)
! 398: vaxc$errno = iosb.stat;
! 399: if ((vaxc$errno & SS$_NORMAL) != SS$_NORMAL) {
! 400: printf("SYS$Getdviw failed with status=%d\r\n", vaxc$errno);
! 401: sys$dassgn(X11_channel);
! 402: X11_channel = 0;
! 403: os_error("sys$getdviw failed", NO_CARET);
! 404: }
! 405: /* Create a subprocess whose input is this mailbox. */
! 406: vaxc$errno = lib$spawn(&pgmdsc, &devnam, 0, &one, 0, 0, 0, 0, 0, 0, 0, 0, 0);
! 407: if ((vaxc$errno & SS$_NORMAL) != SS$_NORMAL) {
! 408: printf("LIB$SPAWN failed with status=%d\r\n", vaxc$errno);
! 409: sys$dassgn(X11_channel);
! 410: X11_channel = 0;
! 411: os_error("lib$spawn failed", NO_CARET);
! 412: }
! 413: } {
! 414: static int been_here = 0;
! 415: if (!been_here) {
! 416: atexit(X11_atexit);
! 417: been_here = 1;
! 418: }
! 419: }
! 420: }
! 421:
! 422:
! 423: /* We use $QIO in order to avoid buffering problems, although it might
! 424: * work as well with simple Fprintf calls.
! 425: */
! 426:
! 427: #define GO(x) \
! 428: { \
! 429: char buffer[512]; int status; struct iosb iosb;\
! 430: sprintf x; \
! 431: if (strlen(buffer) >= MBXMXMSG ) { \
! 432: printf("buffer contents (%d char) catenated to mailbox size (%d bytes)\n", \
! 433: strlen(buffer), MBXMXMSG); \
! 434: buffer[MBXMXMSG-1] = '\0';\
! 435: printf("%s\n", buffer); \
! 436: } \
! 437: status = sys$qiow(0, X11_channel, IO$_WRITEVBLK, &iosb, 0, 0, buffer, strlen(buffer), 0, 0, 0, 0); \
! 438: if ((status & SS$_NORMAL) == SS$_NORMAL) status = iosb.stat; \
! 439: if((status & SS$_NORMAL) != SS$_NORMAL) exit(status); \
! 440: }
! 441:
! 442: #define PRINT0(fmt) GO( (buffer, fmt) )
! 443: #define PRINT1(fmt,p1) GO( (buffer, fmt,p1) )
! 444: #define PRINT2(fmt,p1,p2) GO( (buffer, fmt,p1,p2) )
! 445: #define PRINT3(fmt,p1,p2,p3) GO( (buffer, fmt,p1,p2,p3) )
! 446: #define PRINT4(fmt,p1,p2,p3,p4) GO( (buffer, fmt,p1,p2,p3,p4) )
! 447: #define PRINT5(fmt,p1,p2,p3,p4,p5) GO( (buffer, fmt,p1,p2,p3,p4,p5) )
! 448:
! 449: #define FFLUSH() /* nowt */
! 450: #define BEFORE_GRAPHICS /* nowt */
! 451: #define AFTER_TEXT /* nowt */
! 452:
! 453: static void X11_atexit HANDLER_DECL { if (X11_channel) {
! 454: PRINT0("R\n");
! 455: sleep(2); /* Wait for subprocess to finish */
! 456: sys$dassgn(X11_channel);
! 457: X11_channel = 0;
! 458: }
! 459: } TERM_PUBLIC void X11_reset()
! 460: {
! 461: /* do nothing until exit */
! 462: }
! 463:
! 464: #endif /* VMS */
! 465:
! 466:
! 467:
! 468:
! 469:
! 470: /* common stuff, using macros defined above */
! 471:
! 472:
! 473:
! 474: TERM_PUBLIC void X11_graphics()
! 475: {
! 476: BEFORE_GRAPHICS; /* kludge for crippled select */
! 477:
! 478: PRINT1("G%d\n", X11_plot_number); /* for VMS sake, keep as separate prints */
! 479:
! 480: #ifdef ULTRIX_KLUDGE
! 481: fflush(X11_ipc);
! 482: #endif
! 483:
! 484: }
! 485:
! 486: TERM_PUBLIC void X11_text()
! 487: {
! 488: PRINT0("E\n");
! 489: FFLUSH();
! 490: #ifdef ULTRIX_KLUDGE
! 491: PRINT0("E\n");
! 492: FFLUSH();
! 493: #endif
! 494:
! 495: AFTER_TEXT; /* kludge for crippled select */
! 496: }
! 497:
! 498:
! 499: TERM_PUBLIC void X11_move(x, y)
! 500: unsigned int x, y;
! 501: {
! 502: PRINT2("M%04d%04d\n", x, y);
! 503: }
! 504:
! 505: TERM_PUBLIC void X11_vector(x, y)
! 506: unsigned int x, y;
! 507: {
! 508: PRINT2("V%04d%04d\n", x, y);
! 509: }
! 510:
! 511: TERM_PUBLIC void X11_pointsize(ps)
! 512: double ps;
! 513: {
! 514: PRINT2("P7%04d%04d\n", /* size of point symbols */
! 515: (int) (term->h_tic * ps * 0.5), (int) (term->v_tic * ps * 0.5));
! 516: }
! 517:
! 518: TERM_PUBLIC void X11_linewidth(lw)
! 519: double lw;
! 520: {
! 521: PRINT1("W%04d\n", (int) lw);
! 522: }
! 523:
! 524: TERM_PUBLIC void X11_linetype(lt)
! 525: int lt;
! 526: {
! 527: PRINT1("L%04d\n", lt);
! 528: }
! 529:
! 530: TERM_PUBLIC void X11_put_text(x, y, str)
! 531: unsigned int x, y;
! 532: char str[];
! 533: {
! 534: /* badly outrange labels can overflow into text field */
! 535: if (x < 10000 && y < 10000) {
! 536: PRINT3("T%04d%04d%s\n", x, y, str);
! 537: }
! 538: }
! 539:
! 540: TERM_PUBLIC int X11_justify_text(mode)
! 541: enum JUSTIFY mode;
! 542: {
! 543: PRINT1("J%04d\n", mode);
! 544: return (TRUE);
! 545: }
! 546:
! 547: TERM_PUBLIC void X11_point(x, y, number)
! 548: unsigned int x, y;
! 549: int number;
! 550: {
! 551: if (number >= 0)
! 552: number %= POINT_TYPES;
! 553: number += 1;
! 554: PRINT3("P%01d%04d%04d\n", number, x, y);
! 555: }
! 556:
! 557: TERM_PUBLIC void X11_fillbox(style, x, y, w, h)
! 558: int style;
! 559: unsigned int x, y, w, h;
! 560: {
! 561: PRINT5("F%04d%04u%04u%04u%04u\n", style, x, y, w, h);
! 562: }
! 563:
! 564: #endif /* TERM_BODY */
! 565:
! 566: #ifdef TERM_TABLE
! 567:
! 568: TERM_TABLE_START(x11_driver)
! 569: "x11", "X11 Window System",
! 570: X11_XMAX, X11_YMAX, X11_VCHAR, X11_HCHAR,
! 571: X11_VTIC, X11_HTIC, X11_options, X11_init, X11_reset,
! 572: X11_text, null_scale, X11_graphics, X11_move, X11_vector,
! 573: X11_linetype, X11_put_text, null_text_angle,
! 574: X11_justify_text, X11_point, do_arrow, set_font_null,
! 575: X11_pointsize, TERM_CAN_MULTIPLOT,
! 576: X11_text /* suspend can use same routine */ , 0 /* resume */ ,
! 577: X11_fillbox, X11_linewidth
! 578: TERM_TABLE_END(x11_driver)
! 579:
! 580: #undef LAST_TERM
! 581: #define LAST_TERM x11_driver
! 582:
! 583: TERM_TABLE_START(X11_driver)
! 584: "X11", "X11 Window System (identical to x11)",
! 585: X11_XMAX, X11_YMAX, X11_VCHAR, X11_HCHAR,
! 586: X11_VTIC, X11_HTIC, X11_options, X11_init, X11_reset,
! 587: X11_text, null_scale, X11_graphics, X11_move, X11_vector,
! 588: X11_linetype, X11_put_text, null_text_angle,
! 589: X11_justify_text, X11_point, do_arrow, set_font_null,
! 590: X11_pointsize, TERM_CAN_MULTIPLOT,
! 591: X11_text /* suspend can use same routine */ , 0 /* resume */ ,
! 592: X11_fillbox, X11_linewidth
! 593: TERM_TABLE_END(X11_driver)
! 594:
! 595: #undef LAST_TERM
! 596: #define LAST_TERM x11_driver
! 597:
! 598: #endif /* TERM_TABLE */
! 599: #endif /* TERM_PROTO_ONLY */
! 600:
! 601:
! 602: #ifdef TERM_HELP
! 603: START_HELP(x11)
! 604: "1 x11",
! 605: "?commands set terminal x11",
! 606: "?set terminal x11",
! 607: "?set term x11",
! 608: "?terminal x11",
! 609: "?term x11",
! 610: "?x11",
! 611: "?X11",
! 612: " `gnuplot` provides the `x11` terminal type for use with X servers. This",
! 613: " terminal type is set automatically at startup if the `DISPLAY` environment",
! 614: " variable is set, if the `TERM` environment variable is set to `xterm`, or",
! 615: " if the `-display` command line option is used.",
! 616: "",
! 617: " Syntax:",
! 618: " set terminal x11 {reset} {<n>}",
! 619: "",
! 620: " Multiple plot windows are supported: `set terminal x11 <n>` directs the",
! 621: " output to plot window number n. If n>0, the terminal number will be",
! 622: " appended to the window title and the icon will be labeled `gplt <n>`.",
! 623: " The active window may distinguished by a change in cursor (from default",
! 624: " to crosshair.)",
! 625: "",
! 626: " Plot windows remain open even when the `gnuplot` driver is changed to a",
! 627: " different device. A plot window can be closed by pressing the letter q",
! 628: " while that window has input focus, or by choosing `close` from a window",
! 629: " manager menu. All plot windows can be closed by specifying `reset`, which",
! 630: " actually terminates the subprocess which maintains the windows (unless",
! 631: " `-persist` was specified).",
! 632: "",
! 633: " Plot windows will automatically be closed at the end of the session",
! 634: " unless the `-persist` option was given.",
! 635: "",
! 636: " The size or aspect ratio of a plot may be changed by resizing the `gnuplot`",
! 637: " window.",
! 638: "",
! 639: " Linewidths and pointsizes may be changed from within `gnuplot` with",
! 640: " `set linestyle`.",
! 641: "",
! 642: " For terminal type `x11`, `gnuplot` accepts (when initialized) the standard",
! 643: " X Toolkit options and resources such as geometry, font, and name from the",
! 644: " command line arguments or a configuration file. See the X(1) man page",
! 645: " (or its equivalent) for a description of such options.",
! 646: "",
! 647: " A number of other `gnuplot` options are available for the `x11` terminal.",
! 648: " These may be specified either as command-line options when `gnuplot` is",
! 649: " invoked or as resources in the configuration file \"/.Xdefaults\". They are",
! 650: " set upon initialization and cannot be altered during a `gnuplot` session.",
! 651: "2 command-line_options",
! 652: "?commands set terminal x11 command-line-options",
! 653: "?set terminal x11 command-line-options",
! 654: "?set term x11 command-line-options",
! 655: "?x11 command-line-options",
! 656: "?command-line-options",
! 657: " In addition to the X Toolkit options, the following options may be specified",
! 658: " on the command line when starting `gnuplot` or as resources in your",
! 659: " \".Xdefaults\" file:",
! 660: "@start table - first is interactive cleartext form",
! 661: " `-clear` requests that the window be cleared momentarily before a",
! 662: " new plot is displayed.",
! 663: " `-gray` requests grayscale rendering on grayscale or color displays.",
! 664: " (Grayscale displays receive monochrome rendering by default.)",
! 665: " `-mono` forces monochrome rendering on color displays.",
! 666: " `-persist` plot windows survive after main gnuplot program exits",
! 667: " `-raise` raise plot window after each plot",
! 668: " `-noraise` do not raise plot window after each plot",
! 669: " `-tvtwm` requests that geometry specifications for position of the",
! 670: " window be made relative to the currently displayed portion",
! 671: " of the virtual root.",
! 672: "#\\begin{tabular}{|cl|} \\hline",
! 673: "#`-mono` & forces monochrome rendering on color displays.\\\\",
! 674: "#`-gray` & requests grayscale rendering on grayscale or color displays.\\\\",
! 675: "# & (Grayscale displays receive monochrome rendering by default.) \\\\",
! 676: "#`-clear` & requests that the window be cleared momentarily before a\\\\",
! 677: "# & new plot is displayed. \\\\",
! 678: "#`-tvtwm` & requests that geometry specifications for position of the\\\\",
! 679: "# & window be made relative to the currently displayed portion\\\\",
! 680: "# & of the virtual root. \\\\",
! 681: "#`-raise` & raise plot window after each plot. \\\\",
! 682: "#`-noraise` & do not raise plot window after each plot. \\\\",
! 683: "#`-persist`&plot windows survive after main gnuplot program exits. \\\\",
! 684: "%c l .",
! 685: "%`-mono`@forces monochrome rendering on color displays.",
! 686: "%`-gray`@requests grayscale rendering on grayscale or color displays.",
! 687: "% @(Grayscale displays receive monochrome rendering by default.)",
! 688: "%`-clear`@requests that the window be cleared momentarily before a",
! 689: "% @new plot is displayed.",
! 690: "%`-tvtwm`@requests that geometry specifications for position of the",
! 691: "% @window be made relative to the currently displayed portion",
! 692: "% @of the virtual root.",
! 693: "%`-raise`@raise plot window after each plot",
! 694: "%`-noraise`@do not raise plot window after each plot",
! 695: "%`-persist`@plot windows survive after main gnuplot program exits",
! 696: "@end table",
! 697: " The options are shown above in their command-line syntax. When entered as",
! 698: " resources in \".Xdefaults\", they require a different syntax.",
! 699: "",
! 700: " Example:",
! 701: " gnuplot*gray: on",
! 702: "",
! 703: " `gnuplot` also provides a command line option (`-pointsize <v>`) and a",
! 704: " resource, `gnuplot*pointsize: <v>`, to control the size of points plotted",
! 705: " with the `points` plotting style. The value `v` is a real number (greater",
! 706: " than 0 and less than or equal to ten) used as a scaling factor for point",
! 707: " sizes. For example, `-pointsize 2` uses points twice the default size, and",
! 708: " `-pointsize 0.5` uses points half the normal size.",
! 709: "2 monochome_options",
! 710: "?commands set terminal x11 monochrome_options",
! 711: "?set terminal x11 monochrome_options",
! 712: "?set term x11 monochrome_options",
! 713: "?x11 monochrome_options",
! 714: "?monochrome_options",
! 715: " For monochrome displays, `gnuplot` does not honor foreground or background",
! 716: " colors. The default is black-on-white. `-rv` or `gnuplot*reverseVideo: on`",
! 717: " requests white-on-black.",
! 718: "",
! 719: "2 color_resources",
! 720: "?commands set terminal x11 color_resources",
! 721: "?set terminal x11 color_resources",
! 722: "?set term x11 color_resources",
! 723: "?x11 color_resources",
! 724: "?color_resources",
! 725: " For color displays, `gnuplot` honors the following resources (shown here",
! 726: " with their default values) or the greyscale resources. The values may be",
! 727: " color names as listed in the X11 rgb.txt file on your system, hexadecimal",
! 728: " RGB color specifications (see X11 documentation), or a color name followed",
! 729: " by a comma and an `intensity` value from 0 to 1. For example, `blue, 0.5`",
! 730: " means a half intensity blue.",
! 731: "@start table - first is interactive cleartext form",
! 732: " gnuplot*background: white",
! 733: " gnuplot*textColor: black",
! 734: " gnuplot*borderColor: black",
! 735: " gnuplot*axisColor: black",
! 736: " gnuplot*line1Color: red",
! 737: " gnuplot*line2Color: green",
! 738: " gnuplot*line3Color: blue",
! 739: " gnuplot*line4Color: magenta",
! 740: " gnuplot*line5Color: cyan",
! 741: " gnuplot*line6Color: sienna",
! 742: " gnuplot*line7Color: orange",
! 743: " gnuplot*line8Color: coral",
! 744: "#\\begin{tabular}{|cl|} \\hline",
! 745: "#&gnuplot*background: white\\\\",
! 746: "#&gnuplot*textColor: black\\\\",
! 747: "#&gnuplot*borderColor: black\\\\",
! 748: "#&gnuplot*axisColor: black\\\\",
! 749: "#&gnuplot*line1Color: red\\\\",
! 750: "#&gnuplot*line2Color: green\\\\",
! 751: "#&gnuplot*line3Color: blue\\\\",
! 752: "#&gnuplot*line4Color: magenta\\\\",
! 753: "#&gnuplot*line5Color: cyan\\\\",
! 754: "#&gnuplot*line6Color: sienna\\\\",
! 755: "#&gnuplot*line7Color: orange\\\\",
! 756: "#&gnuplot*line8Color: coral\\\\",
! 757: "%c l .",
! 758: "%@gnuplot*background: white",
! 759: "%@gnuplot*textColor: black",
! 760: "%@gnuplot*borderColor: black",
! 761: "%@gnuplot*axisColor: black",
! 762: "%@gnuplot*line1Color: red",
! 763: "%@gnuplot*line2Color: green",
! 764: "%@gnuplot*line3Color: blue",
! 765: "%@gnuplot*line4Color: magenta",
! 766: "%@gnuplot*line5Color: cyan",
! 767: "%@gnuplot*line6Color: sienna",
! 768: "%@gnuplot*line7Color: orange",
! 769: "%@gnuplot*line8Color: coral",
! 770: "@end table",
! 771: "",
! 772: " The command-line syntax for these is, for example,",
! 773: "",
! 774: " Example:",
! 775: " gnuplot -background coral",
! 776: "",
! 777: "2 grayscale_resources",
! 778: "?commands set terminal x11 grayscale_resources",
! 779: "?set terminal x11 grayscale_resources",
! 780: "?set term x11 grayscale_resources",
! 781: "?x11 grayscale_resources",
! 782: "?grayscale_resources",
! 783: " When `-gray` is selected, `gnuplot` honors the following resources for",
! 784: " grayscale or color displays (shown here with their default values). Note",
! 785: " that the default background is black.",
! 786: "@start table - first is interactive cleartext form",
! 787: " gnuplot*background: black",
! 788: " gnuplot*textGray: white",
! 789: " gnuplot*borderGray: gray50",
! 790: " gnuplot*axisGray: gray50",
! 791: " gnuplot*line1Gray: gray100",
! 792: " gnuplot*line2Gray: gray60",
! 793: " gnuplot*line3Gray: gray80",
! 794: " gnuplot*line4Gray: gray40",
! 795: " gnuplot*line5Gray: gray90",
! 796: " gnuplot*line6Gray: gray50",
! 797: " gnuplot*line7Gray: gray70",
! 798: " gnuplot*line8Gray: gray30",
! 799: "#\\begin{tabular}{|cl|} \\hline",
! 800: "#&gnuplot*background: black\\\\",
! 801: "#&gnuplot*textGray: white\\\\",
! 802: "#&gnuplot*borderGray: gray50\\\\",
! 803: "#&gnuplot*axisGray: gray50\\\\",
! 804: "#&gnuplot*line1Gray: gray100\\\\",
! 805: "#&gnuplot*line2Gray: gray60\\\\",
! 806: "#&gnuplot*line3Gray: gray80\\\\",
! 807: "#&gnuplot*line4Gray: gray40\\\\",
! 808: "#&gnuplot*line5Gray: gray90\\\\",
! 809: "#&gnuplot*line6Gray: gray50\\\\",
! 810: "#&gnuplot*line7Gray: gray70\\\\",
! 811: "#&gnuplot*line8Gray: gray30\\\\",
! 812: "%c l .",
! 813: "%@gnuplot*background: black",
! 814: "%@gnuplot*textGray: white",
! 815: "%@gnuplot*borderGray: gray50",
! 816: "%@gnuplot*axisGray: gray50",
! 817: "%@gnuplot*line1Gray: gray100",
! 818: "%@gnuplot*line2Gray: gray60",
! 819: "%@gnuplot*line3Gray: gray80",
! 820: "%@gnuplot*line4Gray: gray40",
! 821: "%@gnuplot*line5Gray: gray90",
! 822: "%@gnuplot*line6Gray: gray50",
! 823: "%@gnuplot*line7Gray: gray70",
! 824: "%@gnuplot*line8Gray: gray30",
! 825: "@end table",
! 826: "",
! 827: "2 line_resources",
! 828: "?commands set terminal x11 line_resources",
! 829: "?set terminal x11 line_resources",
! 830: "?set term x11 line_resources",
! 831: "?x11 line_resources",
! 832: "?line_resources",
! 833: " `gnuplot` honors the following resources for setting the width (in pixels) of",
! 834: " plot lines (shown here with their default values.) 0 or 1 means a minimal",
! 835: " width line of 1 pixel width. A value of 2 or 3 may improve the appearance of",
! 836: " some plots.",
! 837: "@start table - first is interactive cleartext form",
! 838: " gnuplot*borderWidth: 2",
! 839: " gnuplot*axisWidth: 0",
! 840: " gnuplot*line1Width: 0",
! 841: " gnuplot*line2Width: 0",
! 842: " gnuplot*line3Width: 0",
! 843: " gnuplot*line4Width: 0",
! 844: " gnuplot*line5Width: 0",
! 845: " gnuplot*line6Width: 0",
! 846: " gnuplot*line7Width: 0",
! 847: " gnuplot*line8Width: 0",
! 848: "#\\begin{tabular}{|cl|} \\hline",
! 849: "#&gnuplot*borderWidth: 2\\\\",
! 850: "#&gnuplot*axisWidth: 0\\\\",
! 851: "#&gnuplot*line1Width: 0\\\\",
! 852: "#&gnuplot*line2Width: 0\\\\",
! 853: "#&gnuplot*line3Width: 0\\\\",
! 854: "#&gnuplot*line4Width: 0\\\\",
! 855: "#&gnuplot*line5Width: 0\\\\",
! 856: "#&gnuplot*line6Width: 0\\\\",
! 857: "#&gnuplot*line7Width: 0\\\\",
! 858: "#&gnuplot*line8Width: 0\\\\",
! 859: "%c l .",
! 860: "%@gnuplot*borderWidth: 2",
! 861: "%@gnuplot*axisWidth: 0",
! 862: "%@gnuplot*line1Width: 0",
! 863: "%@gnuplot*line2Width: 0",
! 864: "%@gnuplot*line3Width: 0",
! 865: "%@gnuplot*line4Width: 0",
! 866: "%@gnuplot*line5Width: 0",
! 867: "%@gnuplot*line6Width: 0",
! 868: "%@gnuplot*line7Width: 0",
! 869: "%@gnuplot*line8Width: 0",
! 870: "@end table",
! 871: "",
! 872: " `gnuplot` honors the following resources for setting the dash style used for",
! 873: " plotting lines. 0 means a solid line. A two-digit number `jk` (`j` and `k`",
! 874: " are >= 1 and <= 9) means a dashed line with a repeated pattern of `j` pixels",
! 875: " on followed by `k` pixels off. For example, '16' is a \"dotted\" line with one",
! 876: " pixel on followed by six pixels off. More elaborate on/off patterns can be",
! 877: " specified with a four-digit value. For example, '4441' is four on, four off,",
! 878: " four on, one off. The default values shown below are for monochrome displays",
! 879: " or monochrome rendering on color or grayscale displays. For color displays,",
! 880: " the default for each is 0 (solid line) except for `axisDashes` which defaults",
! 881: " to a '16' dotted line.",
! 882: "@start table - first is interactive cleartext form",
! 883: " gnuplot*borderDashes: 0",
! 884: " gnuplot*axisDashes: 16",
! 885: " gnuplot*line1Dashes: 0",
! 886: " gnuplot*line2Dashes: 42",
! 887: " gnuplot*line3Dashes: 13",
! 888: " gnuplot*line4Dashes: 44",
! 889: " gnuplot*line5Dashes: 15",
! 890: " gnuplot*line6Dashes: 4441",
! 891: " gnuplot*line7Dashes: 42",
! 892: " gnuplot*line8Dashes: 13",
! 893: "#\\begin{tabular}{|cl|} \\hline",
! 894: "#&gnuplot*borderDashes: 0\\\\",
! 895: "#&gnuplot*axisDashes: 16\\\\",
! 896: "#&gnuplot*line1Dashes: 0\\\\",
! 897: "#&gnuplot*line2Dashes: 42\\\\",
! 898: "#&gnuplot*line3Dashes: 13\\\\",
! 899: "#&gnuplot*line4Dashes: 44\\\\",
! 900: "#&gnuplot*line5Dashes: 15\\\\",
! 901: "#&gnuplot*line6Dashes: 4441\\\\",
! 902: "#&gnuplot*line7Dashes: 42\\\\",
! 903: "#&gnuplot*line8Dashes: 13\\\\",
! 904: "%c l .",
! 905: "%@gnuplot*borderDashes: 0",
! 906: "%@gnuplot*axisDashes: 16",
! 907: "%@gnuplot*line1Dashes: 0",
! 908: "%@gnuplot*line2Dashes: 42",
! 909: "%@gnuplot*line3Dashes: 13",
! 910: "%@gnuplot*line4Dashes: 44",
! 911: "%@gnuplot*line5Dashes: 15",
! 912: "%@gnuplot*line6Dashes: 4441",
! 913: "%@gnuplot*line7Dashes: 42",
! 914: "%@gnuplot*line8Dashes: 13",
! 915: "@end table"
! 916: END_HELP(x11)
! 917: #endif /* TERM_HELP */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>