/*
 * $Id: x11.trm,v 1.14 1995/12/20 21:48:21 drd Exp $
 *
 */

/*
 *    x11.trm  --- inboard terminal driver for X11
 */
#ifndef GOT_DRIVER_H
#include "driver.h"
#endif

#ifdef TERM_REGISTER
register_term(x11)
#endif

#ifdef TERM_PROTO
int X11_args __P((int argc, char *argv[]));
TERM_PUBLIC void X11_init __P((void));
TERM_PUBLIC void X11_graphics __P((void));
TERM_PUBLIC void X11_text __P((void));
TERM_PUBLIC void X11_reset __P((void));
TERM_PUBLIC void X11_move __P((unsigned int x, unsigned int y));
TERM_PUBLIC void X11_vector __P((unsigned int x, unsigned int y));
TERM_PUBLIC void X11_linetype __P((int lt));
TERM_PUBLIC void X11_put_text __P((unsigned int x, unsigned int y, char str[]));
TERM_PUBLIC int X11_justify_text __P((enum JUSTIFY mode));
TERM_PUBLIC void X11_point __P((unsigned int x, unsigned int y, int number));

#define X11_XMAX 4096
#define X11_YMAX 4096

/* approximations for typical font/screen sizes */
#define X11_VCHAR (X11_YMAX/25) 
#define X11_HCHAR (X11_XMAX/100) 
#define X11_VTIC (X11_YMAX/100)
#define X11_HTIC (X11_XMAX/150)
#endif


#ifndef TERM_PROTO_ONLY

#ifdef TERM_BODY
int X11_Display = 0; /* non-zero if '-display' found on command line */

#define X11_nopts 29
static char X11_opts[X11_nopts][20] = {
   "-mono", "-gray", "-clear", "-tvtwm", "-pointsize",
   "-iconic", "-rv", "-reverse", "+rv", "-synchronous", 
   "-display", "-geometry", "-bg", "-background", "-bd", "-bordercolor", "-bw",
   "-borderwidth", "-fg", "-foreground", "-fn", "-font", "-name", 
   "-selectionTimeout", "-title", "-xnllanguage", "-xrm", "-raise", "-persist"
   };

static int X11_optarg[X11_nopts] = { 
   0, 0, 0, 0, 1,
   0, 0, 0, 0, 0,
   1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 
   1, 1, 1, 1
   };

static FILE *X11_ipc; 
static char X11_command[1024]= "gnuplot_x11";

/*   X11_args - scan gnuplot command line for standard X Toolkit options
 * called from plot.c so must not be TERM_PUBLIC (which may be static)
 */

int X11_args(argc, argv) int argc; char *argv[]; {
   int nx11 = 0, n;

   while(++argv, --argc > 0) {
      for (n=0; n<X11_nopts; n++) {
	 if (!strcmp(*argv, X11_opts[n])) {
	    strcat(X11_command, " ");
	    strcat(X11_command, *argv); 
	    if (strcmp(*argv, "-display")==0)
	 	X11_Display++;
	    if (X11_optarg[n]) {
	       if (--argc <= 0) return(nx11);
	       strcat(X11_command, " \"");
	       strcat(X11_command, *++argv); 
	       strcat(X11_command, "\"");
	       nx11++;
	       }
	    nx11++; break;
	    }
	 }
      if (n == X11_nopts) break; 
      }
   return(nx11);
   }

/*-----------------------------------------------------------------------------
 *   Three different versions of the remainder of the X11 terminal driver
 *   are provided to support three different types of IPC with the
 *   gnuplot_x11 outboard terminal driver:
 * 
 *   DEFAULT_X11:      popen() pipe for most un*x platforms
 *
 *   CRIPPLED_SELECT : file IPC for un*x platforms with incomplete or faulty
 *                     implementation of BSD select()
 *
 *   VMS :             mailbox/spawn IPC
 *---------------------------------------------------------------------------*/

#define DEFAULT_X11
#if defined(VMS) || defined(CRIPPLED_SELECT)
#undef DEFAULT_X11
#endif
#if defined(VMS) && defined(CRIPPLED_SELECT)
Error. Incompatible options.
#endif


#ifdef DEFAULT_X11
/*-----------------------------------------------------------------------------
 *   DEFAULT_X11 popen() pipe IPC
 *---------------------------------------------------------------------------*/
FILE *popen();

TERM_PUBLIC void X11_init() { X11_ipc = popen(X11_command, "w"); }

TERM_PUBLIC void X11_graphics() { 
   fprintf(X11_ipc, "G\n"); 
   fprintf(X11_ipc, "P7%04d%04d\n", /* size of point symbols */
	   (int) (term->h_tic *pointsize * 0.5), (int) (term->v_tic*pointsize*0.5)); 
#ifdef ULTRIX_KLUDGE
   fflush(X11_ipc);
#endif
   }

TERM_PUBLIC void X11_text() { 
   fprintf(X11_ipc, "E\n"); fflush(X11_ipc);
#ifdef ULTRIX_KLUDGE
   fprintf(X11_ipc, "E\n"); fflush(X11_ipc);
#endif
   }

TERM_PUBLIC void X11_reset() { fprintf(X11_ipc, "R\n"); fflush(X11_ipc); pclose(X11_ipc); }

TERM_PUBLIC void X11_move(x,y) unsigned int x,y; { fprintf(X11_ipc, "M%04d%04d\n", x, y); }

TERM_PUBLIC void X11_vector(x,y) unsigned int x,y; { fprintf(X11_ipc, "V%04d%04d\n", x, y); }

TERM_PUBLIC void X11_linetype(lt) int lt; { fprintf(X11_ipc, "L%04d\n", lt); }

TERM_PUBLIC void X11_put_text(x,y,str) unsigned int x,y; char str[]; {
	/* badly outrange labels can overflow into text field */
	if (x<10000 && y<10000)
	   fprintf(X11_ipc, "T%04d%04d%s\n", x, y, str);
   }

TERM_PUBLIC int X11_justify_text(mode) enum JUSTIFY mode; {
   fprintf(X11_ipc, "J%04d\n", mode);
   return(TRUE);
   }

TERM_PUBLIC void X11_point(x,y,number) unsigned int x,y; int number; {
   if (number>=0)
      number %= POINT_TYPES;
   number += 1;
   fprintf(X11_ipc, "P%01d%04d%04d\n", number, x, y);
   }

#endif /* DEFAULT_X11 */


#ifdef CRIPPLED_SELECT
/*-----------------------------------------------------------------------------
 *   CRIPPLED_SELECT file IPC
 *---------------------------------------------------------------------------*/

char X11_tmp[32], X11_tmp0[32], X11_shutdown[32];
int X11_pid;

TERM_PUBLIC void X11_init() { 
   if (!(X11_pid = fork())) {
      execl("/bin/sh", "sh", "-c", X11_command, NULL);
      _exit(1);
      }
   sprintf(X11_tmp, "/tmp/Gnuplot_%d", X11_pid);
   sprintf(X11_tmp0, "%s-", X11_tmp);
   sprintf(X11_shutdown, "echo R >%s", X11_tmp);
   }

TERM_PUBLIC void X11_graphics() { 
   X11_ipc = fopen(X11_tmp0, "w"); 
   if (!X11_ipc) { perror(X11_tmp0); system(X11_shutdown); exit(1); }
   fprintf(X11_ipc, "G\n"); 
   fprintf(X11_ipc, "P7%04d%04d\n", /* size of point symbols */
	   (int) (term->h_tic *pointsize * 0.5), (int) (term->v_tic*pointsize*0.5)); 
#ifdef ULTRIX_KLUDGE
   fflush(X11_ipc);
#endif
   }

void X11_text() { 
   fprintf(X11_ipc, "E\n"); 
#ifdef ULTRIX_KLUDGE
   fprintf(X11_ipc, "E\n");
#endif
   fclose(X11_ipc);
   rename(X11_tmp0, X11_tmp);
   }

TERM_PUBLIC void X11_reset() { system(X11_shutdown); }

TERM_PUBLIC void X11_move(x,y) unsigned int x,y; { fprintf(X11_ipc, "M%04d%04d\n", x, y); }

TERM_PUBLIC void X11_vector(x,y) unsigned int x,y; { fprintf(X11_ipc, "V%04d%04d\n", x, y); }

TERM_PUBLIC void X11_linetype(lt) int lt; { fprintf(X11_ipc, "L%04d\n", lt); }

TERM_PUBLIC void X11_put_text(x,y,str) unsigned int x,y; char str[]; {
	/* badly outrange labels can overflow into text field */
	if (x<10000 && y<10000)
	   fprintf(X11_ipc, "T%04d%04d%s\n", x, y, str);
   }

TERM_PUBLIC int X11_justify_text(mode) enum JUSTIFY mode; {
   fprintf(X11_ipc, "J%04d\n", mode);
   return(TRUE);
   }

TERM_PUBLIC void X11_point(x,y,number) unsigned int x,y; int number; {
   if (number>=0)
      number %= POINT_TYPES;
   number += 1;
   fprintf(X11_ipc, "P%01d%04d%04d\n", number, x, y);
   }
#endif /* CRIPPLED_SELECT */


#ifdef VMS
/*-----------------------------------------------------------------------------
 *   VMS mailbox/spawn IPC - Yehavi Bourvine - YEHAVI@VMS.HUJI.AC.IL
 *---------------------------------------------------------------------------*/

#include <iodef.h>
#include <descrip.h>
#define MAILBOX "PLOT_X11$MAILBOX"

#ifdef __GNUC__
#include <errno.h>
#else
int vaxc$errno;
#endif
static short X11_channel;
static $DESCRIPTOR(lognamedsc,MAILBOX);

TERM_PUBLIC void X11_init() {
  int one = 1;
   /* Create a descriptor for the command. $DESCRIP doesn't work in 
   this context... */
   struct { 
      short size, type; 
      char *address;
      } pgmdsc = { strlen(X11_command), 0, X11_command };


   /* Create a mailbox which will be used as a pipe for commands to the 
   subprocess.  What we'll write to it will be read by the subprocess as 
   its STDIN. */
   vaxc$errno = sys$crembx(0,&X11_channel,128,128,0,0,&lognamedsc,0);
   if (!(vaxc$errno)&1) {
      printf("SYS$CreMbx failed with status=%d\r\n", vaxc$errno);
      os_error("sys$crembx failed",NO_CARET);
      }

   /* Assign an I/O channel to it */
   vaxc$errno = sys$assign(&lognamedsc,&X11_channel,0,0,0);
   if (!(vaxc$errno & 1)) {
      printf("SYS$Assign failed with status=%d\r\n", vaxc$errno);
      os_error("sys$crembx failed",NO_CARET);
      }

   /* Create a subprocess whose input is this mailbox. */
   vaxc$errno = lib$spawn(&pgmdsc,&lognamedsc,0,&one,0,0,0,0,0,0,0,0,0);
   if (!((vaxc$errno) & 1)) {
      printf("LIB$SPAWN failed with status=%d\r\n", vaxc$errno);
      os_error("lib$spawn failed",NO_CARET);
      }
   }

/*   We use $QIO in order to avoid buffering problems, although it might 
 *   work  as well with simple Fprintf calls.  */

static void X11_vmsqiow(buf) char *buf; {
   int status = sys$qiow(0, X11_channel, IO$_WRITEVBLK, 0, 0, 0, 
			 buf, strlen(buf), 0, 0, 0, 0);
   if((status & 0x1) == 0) exit(status);
   }

static char   X11_vmsbuf[512];

TERM_PUBLIC void X11_graphics() { 
   sprintf(X11_vmsbuf, "G\n");
   X11_vmsqiow(X11_vmsbuf);
   sprintf(X11_vmsbuf, "P7%04d%04d\n", /* size of point symbols */
	   (int) (term->h_tic *pointsize * 0.5), (int) (term->v_tic*pointsize*0.5)); 

   X11_vmsqiow(X11_vmsbuf);
   }

TERM_PUBLIC void X11_text() {
   sprintf(X11_vmsbuf, "E\n");
   X11_vmsqiow(X11_vmsbuf);
   }

TERM_PUBLIC void X11_reset() { 
   sprintf(X11_vmsbuf, "R\n");
   X11_vmsqiow(X11_vmsbuf);
   sleep(2);		/* Wait for subprocess to finish */
   sys$dassgn(X11_channel);
   }

TERM_PUBLIC void X11_move(x,y) unsigned int x,y; { 
   sprintf(X11_vmsbuf, "M%04d%04d\n", x, y);
   X11_vmsqiow(X11_vmsbuf);
   }

TERM_PUBLIC void X11_vector(x,y) unsigned int x,y; { 
   sprintf(X11_vmsbuf, "V%04d%04d\n", x, y);
   X11_vmsqiow(X11_vmsbuf);
   }

TERM_PUBLIC void X11_linetype(lt) int lt; { 
   sprintf(X11_vmsbuf, "L%04d\n", lt);
   X11_vmsqiow(X11_vmsbuf);
   }

TERM_PUBLIC void X11_put_text(x,y,str) unsigned int x,y; char str[]; { 
	/* badly outrange labels can overflow into text field */
	if (x<10000 && y<10000) {
	   sprintf(X11_vmsbuf, "T%04d%04d%s\n", x, y, str);
	   X11_vmsqiow(X11_vmsbuf);
	}
}

TERM_PUBLIC int X11_justify_text(mode) enum JUSTIFY mode; { 
   sprintf(X11_vmsbuf, "J%04d\n", mode);
   X11_vmsqiow(X11_vmsbuf);
   return(TRUE);
   }

TERM_PUBLIC void X11_point(x,y,number) unsigned int x,y; int number; {
   if (number>=0)
      number %= POINT_TYPES;
   number += 1;
   sprintf(X11_vmsbuf, "P%01d%04d%04d\n", number, x, y);
   X11_vmsqiow(X11_vmsbuf);
   }
#endif /* VMS */

#endif /* TERM_BODY */

#ifdef TERM_TABLE

TERM_TABLE_START(x11_driver)
      "x11", "X11 Window System",
	   X11_XMAX, X11_YMAX, X11_VCHAR, X11_HCHAR, 
	   X11_VTIC, X11_HTIC, options_null, X11_init, X11_reset, 
	   X11_text, null_scale, X11_graphics, X11_move, X11_vector, 
	   X11_linetype, X11_put_text, null_text_angle, 
	   X11_justify_text, X11_point, do_arrow, set_font_null,
      0, /* pointsize */
      TERM_CAN_MULTIPLOT,
      X11_text /* suspend can use same routine */, 0 /* resume */
TERM_TABLE_END(x11_driver)

#undef LAST_TERM
#define LAST_TERM x11_driver

TERM_TABLE_START(X11_driver)
      "X11", "X11 Window System (identical to x11)",
	   X11_XMAX, X11_YMAX, X11_VCHAR, X11_HCHAR, 
	   X11_VTIC, X11_HTIC, options_null, X11_init, X11_reset, 
	   X11_text, null_scale, X11_graphics, X11_move, X11_vector, 
	   X11_linetype, X11_put_text, null_text_angle, 
	   X11_justify_text, X11_point, do_arrow, set_font_null,
      0, /* pointsize */
      TERM_CAN_MULTIPLOT,
      X11_text /* suspend can use same routine */, 0 /* resume */
TERM_TABLE_END(X11_driver)

#undef LAST_TERM
#define LAST_TERM x11_driver

#endif /* TERM_TABLE */
#endif /* TERM_PROTO_ONLY */


#ifdef TERM_HELP
START_HELP(x11)
"1 x11",
"?set terminal x11",
"?x11",
" `gnuplot` provides the `x11` terminal type for use with X servers.  This",
" terminal type is set automatically at startup if the `DISPLAY` environment",
" variable is set, if the `TERM` environment variable is set to `xterm`, or if",
" the `-display` command line option is used.",
"",
" For terminal type `x11`, `gnuplot` accepts the standard X Toolkit options and",
" resources such as geometry, font, and background as command line options.",
" See the X(1) man page for a description of the options.",
"",
" In addition to the X Toolkit options, the following command line options are",
" available:",
"@start table - first is interactive cleartext form",
"  `-mono`  forces monochrome rendering on color displays.",
"  `-gray`  requests grayscale rendering on grayscale or color displays.",
"           (Grayscale displays receive monochrome rendering by default.)",
"  `-clear` requests that the window be cleared momentarily before a",
"           new plot is displayed.",
"  `-tvtwm` requests that geometry specifications for position of the",
"           window be made relative to the currently displayed portion",
"           of the virtual root.",
"#`-mono`  & forces monochrome rendering on color displays. & \\",
"#`-gray`  & requests grayscale rendering on grayscale or color displays.",
"#         & (Grayscale displays receive monochrome rendering by default.) & \\",
"#`-clear` & requests that the window be cleared momentarily before a",
"#         & new plot is displayed. & \\",
"#`-tvtwm` & requests that geometry specifications for position of the",
"#         & window be made relative to the currently displayed portion",
"#         & of the virtual root. & \\",
"%`-mono`@@forces monochrome rendering on color displays.",
"%`-gray`@@requests grayscale rendering on grayscale or color displays.",
"%       @@(Grayscale displays receive monochrome rendering by default.)",
"%`-clear`@@requests that the window be cleared momentarily before a",
"%        @@new plot is displayed.",
"%`-tvtwm`@@requests that geometry specifications for position of the",
"%        @@window be made relative to the currently displayed portion",
"%        @@of the virtual root.",
"@end table",
" These options may also be controlled with resources in your `.Xdefaults`",
" file.  For example: `gnuplot*gray: on` .",
"",
" `gnuplot` provides a command line option (`-pointsize v`) and a resource",
" (`gnuplot*pointsize: v`) to control the size of points plotted with the",
" `points` plotting style.  The value `v` is a real number (greater than 0 and",
" less than or equal to ten) used as a scaling factor for point sizes.  For",
" example, `-pointsize 2` uses points twice the default size, and `-pointsize`",
" `0.5` uses points half the normal size.",
"",
" For monochrome displays, `gnuplot` does not honor foreground or background",
" colors.  The default is black-on-white.  `-rv` or `gnuplot*reverseVideo: on`",
" requests white-on-black.",
"",
" For color displays, `gnuplot` honors the following resources (shown here with",
" their default values).  The values may be color names as listed in the X11",
" rgb.txt file on your system, hexadecimal RGB color specifications (see X11",
" documentation), or a color name followed by a comma and an `intensity` value",
" from 0 to 1.  For example, `blue,.5` means a half intensity blue.",
"@start table - first is interactive cleartext form",
"  gnuplot*background: white",
"  gnuplot*textColor: black",
"  gnuplot*borderColor: black",
"  gnuplot*axisColor: black",
"  gnuplot*line1Color: red",
"  gnuplot*line2Color: green",
"  gnuplot*line3Color: blue",
"  gnuplot*line4Color: magenta",
"  gnuplot*line5Color: cyan",
"  gnuplot*line6Color: sienna",
"  gnuplot*line7Color: orange",
"  gnuplot*line8Color: coral",
"#&gnuplot*background: white",
"#&gnuplot*textColor: black",
"#&gnuplot*borderColor: black",
"#&gnuplot*axisColor: black",
"#&gnuplot*line1Color: red",
"#&gnuplot*line2Color: green",
"#&gnuplot*line3Color: blue",
"#&gnuplot*line4Color: magenta",
"#&gnuplot*line5Color: cyan",
"#&gnuplot*line6Color: sienna",
"#&gnuplot*line7Color: orange",
"#@@gnuplot*line8Color: coral",
"%@@gnuplot*background: white",
"%@@gnuplot*textColor: black",
"%@@gnuplot*borderColor: black",
"%@@gnuplot*axisColor: black",
"%@@gnuplot*line1Color: red",
"%@@gnuplot*line2Color: green",
"%@@gnuplot*line3Color: blue",
"%@@gnuplot*line4Color: magenta",
"%@@gnuplot*line5Color: cyan",
"%@@gnuplot*line6Color: sienna",
"%@@gnuplot*line7Color: orange",
"%@@gnuplot*line8Color: coral",
"@end table",
"",
" When `-gray` is selected, `gnuplot` honors the following resources for",
" grayscale or color displays (shown here with their default values).  Note",
" that the default background is black.",
"@start table - first is interactive cleartext form",
"  gnuplot*background: black",
"  gnuplot*textGray: white",
"  gnuplot*borderGray: gray50",
"  gnuplot*axisGray: gray50",
"  gnuplot*line1Gray: gray100",
"  gnuplot*line2Gray: gray60",
"  gnuplot*line3Gray: gray80",
"  gnuplot*line4Gray: gray40",
"  gnuplot*line5Gray: gray90",
"  gnuplot*line6Gray: gray50",
"  gnuplot*line7Gray: gray70",
"  gnuplot*line8Gray: gray30",
"#&gnuplot*background: black",
"#&gnuplot*textGray: white",
"#&gnuplot*borderGray: gray50",
"#&gnuplot*axisGray: gray50",
"#&gnuplot*line1Gray: gray100",
"#&gnuplot*line2Gray: gray60",
"#&gnuplot*line3Gray: gray80",
"#&gnuplot*line4Gray: gray40",
"#&gnuplot*line5Gray: gray90",
"#&gnuplot*line6Gray: gray50",
"#&gnuplot*line7Gray: gray70",
"#&gnuplot*line8Gray: gray30",
"%@@gnuplot*background: black",
"%@@gnuplot*textGray: white",
"%@@gnuplot*borderGray: gray50",
"%@@gnuplot*axisGray: gray50",
"%@@gnuplot*line1Gray: gray100",
"%@@gnuplot*line2Gray: gray60",
"%@@gnuplot*line3Gray: gray80",
"%@@gnuplot*line4Gray: gray40",
"%@@gnuplot*line5Gray: gray90",
"%@@gnuplot*line6Gray: gray50",
"%@@gnuplot*line7Gray: gray70",
"%@@gnuplot*line8Gray: gray30",
"@end table",
"",
" `gnuplot` honors the following resources for setting the width (in pixels) of",
" plot lines (shown here with their default values.)  0 or 1 means a minimal",
" width line of 1 pixel width.  A value of 2 or 3 may improve the appearance of",
" some plots.",
"@start table - first is interactive cleartext form",
"  gnuplot*borderWidth: 2",
"  gnuplot*axisWidth: 0",
"  gnuplot*line1Width: 0",
"  gnuplot*line2Width: 0",
"  gnuplot*line3Width: 0",
"  gnuplot*line4Width: 0",
"  gnuplot*line5Width: 0",
"  gnuplot*line6Width: 0",
"  gnuplot*line7Width: 0",
"  gnuplot*line8Width: 0",
"#&gnuplot*borderWidth: 2",
"#&gnuplot*axisWidth: 0",
"#&gnuplot*line1Width: 0",
"#&gnuplot*line2Width: 0",
"#&gnuplot*line3Width: 0",
"#&gnuplot*line4Width: 0",
"#&gnuplot*line5Width: 0",
"#&gnuplot*line6Width: 0",
"#&gnuplot*line7Width: 0",
"#&gnuplot*line8Width: 0",
"%@@gnuplot*borderWidth: 2",
"%@@gnuplot*axisWidth: 0",
"%@@gnuplot*line1Width: 0",
"%@@gnuplot*line2Width: 0",
"%@@gnuplot*line3Width: 0",
"%@@gnuplot*line4Width: 0",
"%@@gnuplot*line5Width: 0",
"%@@gnuplot*line6Width: 0",
"%@@gnuplot*line7Width: 0",
"%@@gnuplot*line8Width: 0",
"@end table",
"",
" `gnuplot` honors the following resources for setting the dash style used for",
" plotting lines.  0 means a solid line.  A two-digit number `jk` (`j` and `k`",
" are >= 1  and <= 9) means a dashed line with a repeated pattern of `j` pixels",
" on followed by `k` pixels off.  For example, '16' is a \"dotted\" line with one",
" pixel on followed by six pixels off.  More elaborate on/off patterns can be",
" specified with a four-digit value.  For example, '4441' is four on, four off,",
" four on, one off.  The default values shown below are for monochrome displays",
" or monochrome rendering on color or grayscale displays.  For color displays,",
" the default for each is 0 (solid line) except for `axisDashes` which defaults",
" to a '16' dotted line.",
"@start table - first is interactive cleartext form",
"  gnuplot*borderDashes: 0",
"  gnuplot*axisDashes: 16",
"  gnuplot*line1Dashes: 0",
"  gnuplot*line2Dashes: 42",
"  gnuplot*line3Dashes: 13",
"  gnuplot*line4Dashes: 44",
"  gnuplot*line5Dashes: 15",
"  gnuplot*line6Dashes: 4441",
"  gnuplot*line7Dashes: 42",
"  gnuplot*line8Dashes: 13",
"#&gnuplot*borderDashes: 0",
"#&gnuplot*axisDashes: 16",
"#&gnuplot*line1Dashes: 0",
"#&gnuplot*line2Dashes: 42",
"#&gnuplot*line3Dashes: 13",
"#&gnuplot*line4Dashes: 44",
"#&gnuplot*line5Dashes: 15",
"#&gnuplot*line6Dashes: 4441",
"#&gnuplot*line7Dashes: 42",
"#&gnuplot*line8Dashes: 13",
"%@@gnuplot*borderDashes: 0",
"%@@gnuplot*axisDashes: 16",
"%@@gnuplot*line1Dashes: 0",
"%@@gnuplot*line2Dashes: 42",
"%@@gnuplot*line3Dashes: 13",
"%@@gnuplot*line4Dashes: 44",
"%@@gnuplot*line5Dashes: 15",
"%@@gnuplot*line6Dashes: 4441",
"%@@gnuplot*line7Dashes: 42",
"%@@gnuplot*line8Dashes: 13",
"@end table",
"",
" The size or aspect ratio of a plot may be changed by resizing the `gnuplot`",
" window."
END_HELP(x11)
#endif
