[comp.sources.misc] v15i019: gnuplot 2.0 patch 1

rjl@monu1.cc.monash.edu.au (Russell Lang) (10/06/90)

Posting-number: Volume 15, Issue 19
Submitted-by: Russell Lang <rjl@monu1.cc.monash.edu.au>
Archive-name: gnuplot2/patch04

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  patch1c
# Wrapped by eln272v@monu1 on Tue Sep 18 14:53:08 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f patch1c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"patch1c\"
else
echo shar: Extracting \"patch1c\" \(73914 characters\)
sed "s/^X//" >patch1c <<'END_OF_patch1c'
Xdiff -c ./term/eepic.trm ../patch/term/eepic.trm
X*** ./term/eepic.trm	Tue Mar 27 09:03:33 1990
X--- ../patch/term/eepic.trm	Wed Sep 12 09:38:06 1990
X***************
X*** 44,51
X  #define EEPIC_UNIT (EEPIC_PTS_PER_INCH/DOTS_PER_INCH) /* dot size in pt */
X  
X  /* 5 inches wide by 3 inches high (default) */
X! #define EEPIC_XMAX (unsigned int)(EEPIC_PTS_PER_INCH/EEPIC_UNIT*5.0)
X! #define EEPIC_YMAX (unsigned int)(EEPIC_PTS_PER_INCH/EEPIC_UNIT*3.0)
X  
X  #define EEPIC_HTIC (5./EEPIC_UNIT)
X  #define EEPIC_VTIC (5./EEPIC_UNIT)
X
X--- 44,51 -----
X  #define EEPIC_UNIT (EEPIC_PTS_PER_INCH/DOTS_PER_INCH) /* dot size in pt */
X  
X  /* 5 inches wide by 3 inches high (default) */
X! #define EEPIC_XMAX (5*DOTS_PER_INCH)  /* (EEPIC_PTS_PER_INCH/EEPIC_UNIT*5.0) */
X! #define EEPIC_YMAX (3*DOTS_PER_INCH)  /* (EEPIC_PTS_PER_INCH/EEPIC_UNIT*3.0) */
X  
X  #define EEPIC_HTIC (5*DOTS_PER_INCH/72)		/* (5./EEPIC_UNIT) */
X  #define EEPIC_VTIC (5*DOTS_PER_INCH/72)		/* (5./EEPIC_UNIT) */
X***************
X*** 47,56
X  #define EEPIC_XMAX (unsigned int)(EEPIC_PTS_PER_INCH/EEPIC_UNIT*5.0)
X  #define EEPIC_YMAX (unsigned int)(EEPIC_PTS_PER_INCH/EEPIC_UNIT*3.0)
X  
X! #define EEPIC_HTIC (5./EEPIC_UNIT)
X! #define EEPIC_VTIC (5./EEPIC_UNIT)
X! #define EEPIC_HCHAR (5.3/EEPIC_UNIT)
X! #define EEPIC_VCHAR (11./EEPIC_UNIT)
X  
X  static unsigned int EEPIC_posx;
X  static unsigned int EEPIC_posy;
X
X--- 47,56 -----
X  #define EEPIC_XMAX (5*DOTS_PER_INCH)  /* (EEPIC_PTS_PER_INCH/EEPIC_UNIT*5.0) */
X  #define EEPIC_YMAX (3*DOTS_PER_INCH)  /* (EEPIC_PTS_PER_INCH/EEPIC_UNIT*3.0) */
X  
X! #define EEPIC_HTIC (5*DOTS_PER_INCH/72)		/* (5./EEPIC_UNIT) */
X! #define EEPIC_VTIC (5*DOTS_PER_INCH/72)		/* (5./EEPIC_UNIT) */
X! #define EEPIC_HCHAR (DOTS_PER_INCH*53/10/72)	/* (5.3/EEPIC_UNIT) */
X! #define EEPIC_VCHAR (DOTS_PER_INCH*11/72)	/* (11./EEPIC_UNIT) */
X  
X  static unsigned int EEPIC_posx;
X  static unsigned int EEPIC_posy;
X***************
X*** 92,97
X  static int EEPIC_type;		/* current line type */
X  static BOOLEAN EEPIC_inline = FALSE; /* are we in the middle of a line */
X  static void EEPIC_endline();	/* terminate any line in progress */
X  
X  /* ARROWS */
X  /* we use the same code as for LATEX */
X
X--- 92,99 -----
X  static int EEPIC_type;		/* current line type */
X  static BOOLEAN EEPIC_inline = FALSE; /* are we in the middle of a line */
X  static void EEPIC_endline();	/* terminate any line in progress */
X+ static int EEPIC_linecount = 0; /* number of points in line so far */
X+ #define EEPIC_LINEMAX 50		/* max value for linecount */
X  
X  /* ARROWS */
X  /* we use the same code as for LATEX */
X***************
X*** 181,186
X  	   fprintf(outfile, "%s(%u,%u)", 
X  			 EEPIC_lines[EEPIC_type+2], 
X  			 EEPIC_posx, EEPIC_posy);
X      }
X  
X      /* add new point to line */
X
X--- 183,201 -----
X  	   fprintf(outfile, "%s(%u,%u)", 
X  			 EEPIC_lines[EEPIC_type+2], 
X  			 EEPIC_posx, EEPIC_posy);
X+ 	   EEPIC_linecount = 1;
X+     } else {
X+ 	   /* Even though we are in middle of a path, 
X+ 	    * we may want to start a new path command. 
X+ 	    * If they are too long then latex will choke.
X+ 	    */
X+ 	   if (EEPIC_linecount++ >= EEPIC_LINEMAX) {
X+ 		  fprintf(outfile, "\n");
X+ 		  fprintf(outfile, "%s(%u,%u)", 
X+ 				EEPIC_lines[EEPIC_type+2], 
X+ 				EEPIC_posx, EEPIC_posy);
X+ 		  EEPIC_linecount = 1;
X+ 	   }
X      }
X      fprintf(outfile, "(%u,%u)", ux,uy);
X      EEPIC_posx = ux;
X***************
X*** 182,189
X  			 EEPIC_lines[EEPIC_type+2], 
X  			 EEPIC_posx, EEPIC_posy);
X      }
X- 
X-     /* add new point to line */
X      fprintf(outfile, "(%u,%u)", ux,uy);
X      EEPIC_posx = ux;
X      EEPIC_posy = uy;
X
X--- 197,202 -----
X  		  EEPIC_linecount = 1;
X  	   }
X      }
X      fprintf(outfile, "(%u,%u)", ux,uy);
X      EEPIC_posx = ux;
X      EEPIC_posy = uy;
Xdiff -c ./term/eps60.trm ../patch/term/eps60.trm
X*** ./term/eps60.trm	Mon Sep  3 16:07:23 1990
X--- ../patch/term/eps60.trm	Mon Sep  3 15:54:14 1990
X***************
X*** 0
X
X--- 1,106 -----
X+ #ifdef EPS60
X+ 
X+ /* make the total dimensions 8 inches by 5 inches */
X+ #define EPS60XMAX	480
X+ #define EPS60YMAX	360
X+ 
X+ #define EPS60XLAST (EPS60XMAX - 1)
X+ #define EPS60YLAST (EPS60YMAX - 1)
X+ 
X+ EPS60init()
X+ {
X+ char filename[MAX_ID_LEN+1];
X+ 	bm_xmax=EPS60XMAX;
X+ 	bm_ymax=EPS60YMAX;
X+ 	bm_planes=1;		/* one plane */
X+ 	bm_value=1;
X+ 	bm_setup();
X+ 	/* output for EPSON must be binary to stop non Unix computers
X+ 		changing \n to \r\n. 
X+ 		At present we only do this for PC's. 
X+ 		(Ultrix generates a run time error on the "wb" mode).
X+ 		if the output is not STDOUT, then the following code 
X+ 		reopens outfile with binary mode. */
X+ #ifdef PC
X+ 	if (strcmp(outstr,"STDOUT")) {
X+ 		(void) fclose(outfile);
X+ 		(void) strcpy(filename,outstr+1);	/* remove quotes */
X+ 		filename[strlen(filename)-1] = '\0';
X+ 		if ( (outfile = fopen(filename,"wb")) == (FILE *)NULL ) {
X+ 			if ( (outfile = fopen(filename,"w")) == (FILE *)NULL ) {
X+ 				os_error("cannot reopen file with binary type; output unknown",
X+ 					NO_CARET);
X+ 			} 
X+ 			else {
X+ 	os_error("cannot reopen file with binary type; output reset to ascii", 
X+ 					NO_CARET);
X+ 			}
X+ 		}
X+ 	}
X+ #endif
X+ }
X+ 
X+ 
X+ /* output file must be binary mode for eps60_dump */
X+ eps60_dump()
X+ {
X+ unsigned int x;
X+ int j,k;
X+ int num_bits = (sizeof(unsigned int)-1)*8;
X+ #ifdef PC
X+ 	fprintf(stderr,"Dumping Epson-style 60-dpi graphics (21kbytes)\n");
X+ #endif
X+ 	fprintf(outfile,"\0333\030"); /* set line spacing to 24/216" = 8 dots */
X+ 	for (j=bm_ipc-1;j>=0;j--) {
X+ 		for (k=num_bits;k>=0;k-=8) {
X+ 			/* select printer graphics mode 'K' */
X+ 			fprintf(outfile,"\r\n\033K");
X+ 			(void) fputc((char)(bm_xmax%256),outfile);
X+ 			(void) fputc((char)(bm_xmax/256),outfile);
X+ 			for (x=0; x<bm_xmax; x++) {
X+ 				(void) fputc( (char)((bm_array[x*bm_ipc+j] >>k) &0xff), outfile );
X+ 			}
X+ 		}
X+ 	}
X+ 	fprintf(outfile,"\0333\044\r\n");  /* set line spacing to 36/216" = 1/6" */
X+ #ifdef PC
X+ 	fprintf(stderr,"Print using: COPY /B\n");
X+ #endif
X+ }
X+ 
X+ 
X+ EPS60text()
X+ {
X+ 	eps60_dump();
X+ }
X+ 
X+ 
X+ #endif /* EPS60 */
X+ 
X+ 
X+ 
X+ 
X+ #ifdef TANDY60
X+ 
X+ /* The only difference between TANDY60 and EPS60 is the inclusion
X+    of codes to swap the Tandy printer into IBM mode and back
X+    into Tandy mode.  For a Tandy already in IBM mode, use EPS60. */
X+ 
X+ 
X+ TANDY60text()
X+ {
X+ #ifdef PC
X+ 	fprintf(stderr, "Inserting Tandy/IBM mode conversion codes\n");
X+ #endif
X+ 	/* Switch to IBM mode, and leave 3 inches above the plot so as
X+ 	   to get rough vertical centring on the page.  Perform the
X+ 	   centring by setting 1" line feeds and issuing 3 of them. */
X+ 	fprintf(outfile, "\033!\0333%c\n\n\n", 216);
X+ 	eps60_dump();
X+ 	/* A form feed must be sent before switching back to Tandy mode,
X+ 	   or else the form setting will be messed up. */
X+ 	fprintf(outfile, "\f\033!");
X+ }
X+ 
X+ 
X+ #endif  /* TANDY60 */
Xdiff -c ./term/epson.trm ../patch/term/epson.trm
X*** ./term/epson.trm	Tue Mar 27 09:02:27 1990
X--- ../patch/term/epson.trm	Wed Aug 29 10:04:57 1990
X***************
X*** 696,698
X  
X  #endif /* NEC */
X  
X
X--- 696,890 -----
X  
X  #endif /* NEC */
X  
X+ /* The following Star color driver uses generic bit mapped graphics
X+    routines to build up a bit map in memory. */
X+ /* Core from Epson driver by Russell Lang, eln272v@monu1.cc.monash.oz */
X+ /* Star Color changes made by William Wilson, wew@naucse.cse.nau.edu */
X+ /* On PC, print using 'copy file /b lpt1:', do NOT use 'print' */
X+ /* STARC_init changes outfile to binary mode on PC's */
X+ 
X+ #ifdef STARC
X+ #ifndef EPSON
X+ #define EPSON
X+ #endif
X+ 
X+ /* EPSON must be defined */
X+ 
X+ #define STARCXMAX	400 
X+ #define STARCYMAX	320
X+ 
X+ #define STARCXLAST (STARCXMAX - 1)
X+ #define STARCYLAST (STARCYMAX - 1)
X+ 
X+ #define STARCVCHAR		11  	
X+ #define STARCHCHAR		7		
X+ #define STARCVTIC		6
X+ #define STARCHTIC		6
X+ 
X+ /* plane 0=black, 1=cyan(blue), 2=magenta(red), 3=yellow */
X+ static unsigned int STARCcolor[] = {1,8,4,2,10,12,6,14};
X+ static unsigned int STARCpcolor[]= {0,2,1,4};
X+ unsigned int STARC_x=0, STARC_y=0;
X+ int STARC_angle=0;
X+ 
X+ STARCinit()
X+ {
X+ char filename[MAX_ID_LEN+1];
X+   bm_planes=4;
X+ 	bm_xmax=STARCXMAX;
X+ 	bm_ymax=STARCYMAX;
X+ 	bm_value=1;				/* black */
X+ 	bm_line_mask=0xffff;	/* solid lines */
X+ 	bm_setup();
X+ 	/* output for STARC must be binary to stop non Unix computers
X+ 		changing \n to \r\n. 
X+ 		At present we only do this for PC's. 
X+ 		(Ultrix generates a run time error on the "wb" mode).
X+ 		if the output is not STDOUT, then the following code 
X+ 		reopens outfile with binary mode. */
X+ #ifdef PC
X+ 	if (strcmp(outstr,"STDOUT")) {
X+ 		(void) fclose(outfile);
X+ 		(void) strcpy(filename,outstr+1);	/* remove quotes */
X+ 		filename[strlen(filename)-1] = '\0';
X+ 		if ( (outfile = fopen(filename,"wb")) == (FILE *)NULL) {
X+ 			if ( (outfile = fopen(filename,"w")) == (FILE *)NULL ) {
X+ 				os_error("cannot reopen file with binary type; output unknown",
X+ 					NO_CARET);
X+ 			} 
X+ 			else {
X+ 	os_error("cannot reopen file with binary type; output reset to ascii", 
X+ 					NO_CARET);
X+ 			}
X+ 		}
X+ 	}
X+ #endif
X+ }
X+ 
X+ 
X+ STARCgraphics()
X+ {
X+ unsigned int plane;
X+ unsigned int fill=0;
X+ 	for (plane=0; plane<bm_planes; plane++)
X+ 		bm_cls(plane,fill);
X+ 	STARC_x=0;
X+ 	STARC_y=0;
X+ 	STARC_angle=0;
X+ }
X+ 
X+ 
X+ STARCtext()
X+ {
X+ 	STARC_dump();
X+ }
X+ 
X+ 
X+ STARClinetype(linetype)
X+ int linetype;
X+ {
X+ 	if (linetype>=6)
X+ 		linetype %= 6;
X+ 	bm_value=STARCcolor[linetype+2];
X+ }
X+ 
X+ 
X+ STARCmove(x,y)
X+ unsigned int x,y;
X+ {
X+ 	STARC_x=x;
X+ 	STARC_y=y;
X+ }
X+ 
X+ 
X+ STARCvector(x,y)
X+ unsigned int x,y;
X+ {
X+ 	bm_line(STARC_x,x,STARC_y,y);
X+ 	STARC_x=x;
X+ 	STARC_y=y;
X+ }
X+ 
X+ 
X+ STARCput_text(x,y,str)
X+ unsigned int x, y;
X+ char *str;
X+ {
X+ 	if (STARC_angle == 1)
X+ 		x += STARCVCHAR/2;
X+ 	else
X+ 		y -= STARCVCHAR/2;
X+    switch (STARC_angle) {
X+       case 0:
X+          for (; *str; ++str, x += STARCHCHAR)
X+             bm_putc (x, y, *str, STARC_angle);
X+ 					break;
X+       case 1:
X+          for (; *str; ++str, y += STARCHCHAR)
X+             bm_putc (x, y, *str, STARC_angle);
X+ 					break;
X+ 	}
X+ }
X+ 
X+ 
X+ int STARC_text_angle(ang)
X+ int ang;
X+ {
X+ 	STARC_angle=ang;
X+ 	return TRUE;
X+ }
X+ 
X+ 	
X+ STARCreset()
X+ {
X+ 	bm_release();
X+ }
X+ 
X+ 
X+ /* output file must be binary mode for STARC_dump */
X+ STARC_dump()
X+ {
X+ unsigned int x;
X+ unsigned int plane,offset;
X+ int j,k;
X+ int num_bits = (sizeof(unsigned int)-1)*8; 
X+ unsigned int column8;
X+ unsigned long column24;
X+ char column3, column2, column1;
X+ #ifdef PC
X+ /*	if (bm_planes==4)*/
X+ 		fprintf(stderr,"Dumping STAR color graphics (65 kbytes)\n");
X+ #endif
X+ 	fprintf(outfile,"\033A\010"); /* set line spacing to 8/72" = 8 dots */
X+ 	for (j=bm_ipc-1;j>=0;j--) {
X+ 		for (k=num_bits;k>=0;k-=8) {
X+ 			fprintf(outfile,"\n");
X+ 			for (plane=0; plane<bm_planes; plane++) {
X+ 				offset=plane*bm_psize;
X+ 				if (bm_planes>1) {
X+ 				    /* select colour for plane */
X+ 				    fprintf(outfile,"\033r");
X+ 				    (void) fputc((char)STARCpcolor[plane],outfile);
X+ 				    fprintf(outfile,"\r");
X+ 				}
X+ 				/* select plotter graphics mode (square pixels) */
X+ 				fprintf(outfile,"\r\033*\005");
X+ 				(void) fputc((char)(bm_xmax%256),outfile);
X+ 				(void) fputc((char)(bm_xmax/256),outfile);
X+ 				for (x=0; x<bm_xmax; x++) {
X+ 				    (void) fputc( (char)((bm_array[offset+x*bm_ipc+j] >>k) &0xff), outfile);
X+ 				}
X+ 			}
X+ 		}
X+ 	}
X+ 	if (bm_planes > 1) {
X+ 		fprintf(outfile,"\033r");
X+ 		(void) fputc('\0',outfile);				/* set color to black */
X+ 	}
X+ 	fprintf(outfile,"\033A\014\r\n");	/* setline spacing to 12/72" */
X+ #ifdef PC
X+ 	fprintf(stderr,"Print using: COPY /B\n");
X+ #endif
X+ }
X+ 
X+ #endif /* STARC */
Xdiff -c ./term/hpgl.trm ../patch/term/hpgl.trm
X*** ./term/hpgl.trm	Tue Mar 27 09:02:36 1990
X--- ../patch/term/hpgl.trm	Wed Sep 12 09:10:47 1990
X***************
X*** 33,40
X  #define HPGL_YLAST (HPGL_XMAX - 1)
X  
X  /* HPGL_VCHAR, HPGL_HCHAR  are not used */
X! #define HPGL_VCHAR	(int)(HPGL_YMAX*0.032+0.5) /* 3.2% */
X! #define HPGL_HCHAR	(int)(HPGL_XMAX*0.012+0.5) /* 1.2% */
X  #define HPGL_VTIC	(HPGL_YMAX/70)		
X  #define HPGL_HTIC	(HPGL_YMAX/70)		
X  
X
X--- 33,40 -----
X  #define HPGL_YLAST (HPGL_XMAX - 1)
X  
X  /* HPGL_VCHAR, HPGL_HCHAR  are not used */
X! #define HPGL_VCHAR	(HPGL_YMAX/100*32/10) /* 3.2% */
X! #define HPGL_HCHAR	(HPGL_XMAX/100*12/10) /* 1.2% */
X  #define HPGL_VTIC	(HPGL_YMAX/70)		
X  #define HPGL_HTIC	(HPGL_YMAX/70)		
X  
Xdiff -c ./term/hpljet.trm ../patch/term/hpljet.trm
X*** ./term/hpljet.trm	Tue Mar 27 09:02:43 1990
X--- ../patch/term/hpljet.trm	Tue Aug 28 21:00:50 1990
X***************
X*** 397,404
X  {
X  }
X  
X! /* put_text was added by Russell Lang, eln272v@monu1.cc.monash.oz
X!  * IT IS UNTESTED
X   */
X  /* Put text "str" at pixel position x,y
X  **/
X
X--- 397,404 -----
X  {
X  }
X  
X! /* put_text was added by Russell Lang, rjl@monu1.cc.monash.edu.au
X!  * Tested and repaired by Steve Wampler sbw@naucse.cse.nau.edu
X   */
X  /* Put text "str" at pixel position x,y
X  **/
X***************
X*** 407,413
X  char str[];
X  {
X  	fprintf(outfile, "\033&a%dH\033&a%dV",
X! 	        HPLJET_PX2DP(x), HPLJET_PX2DP(y) );
X  	fputs(str, outfile);
X  }
X  	
X
X--- 407,415 -----
X  char str[];
X  {
X  	fprintf(outfile, "\033&a%dH\033&a%dV",
X! 	        HPLJET_LMARG+HPLJET_PX2DP(x),
X! 		HPLJET_PX2DP(HPLJETYMAX) + HPLJET_VC2DP(2) + 30 -
X! 			HPLJET_PX2DP(y) );
X  	fputs(str, outfile);
X  }
X  	
X***************
X*** 411,446
X  	fputs(str, outfile);
X  }
X  	
X- 
X- /*
X- ** Put text "str" to the lower right corner of the screen.
X- ** "row" is the row number [0:1].
X- ** Actually in the laserjet, put the text above the upper right corner.
X- */
X- HPLJETlrput_text(row,str)
X- unsigned int row;
X- char str[];
X- {
X- 	
X- 	fprintf(outfile, "\033&a%dH\033&a%dV",
X- 	        HPLJET_RMARG - HPLJET_HC2DP(strlen(str)), HPLJET_VC2DP(row));
X- 	fputs(str, outfile);
X- }
X- 
X- /*
X- ** Put text "str" to the upper left corner of the screen.
X- ** "row" is the (serial) number of function to be plotted.
X- ** Actually in the laserjet, put the text under the lower left corner.
X- */
X- HPLJETulput_text(row,str)
X- unsigned int row;
X- char str[];
X- {
X- 	fprintf(outfile, "\033&a%dH\033&a%dV",
X- 	        HPLJET_LMARG,
X- 	        HPLJET_VC2DP(row+3)+HPLJET_PX2DP(HPLJETYMAX));
X- 	fputs(str, outfile);
X- }
X  
X  /*
X  ** RETURN to normal mode (exit gnuplot)
X
X--- 413,418 -----
X  	fputs(str, outfile);
X  }
X  	
X  
X  /*
X  ** RETURN to normal mode (exit gnuplot)
Xdiff -c ./term/imagen.trm ../patch/term/imagen.trm
X*** ./term/imagen.trm	Tue Mar 27 09:03:23 1990
X--- ../patch/term/imagen.trm	Wed Sep 12 09:39:37 1990
X***************
X*** 39,46
X  
X  #define IMAGEN_PTS_PER_INCH (300)
X  
X! #define IMAGEN_XMAX (10.0 * IMAGEN_PTS_PER_INCH) /* 10.0 inches */
X! #define IMAGEN_YMAX (7.5 * IMAGEN_PTS_PER_INCH) /* 7.5 inches */
X  
X  #define IMAGEN_FONTSIZE 12
X  
X
X--- 39,46 -----
X  
X  #define IMAGEN_PTS_PER_INCH (300)
X  
X! #define IMAGEN_XMAX (IMAGEN_PTS_PER_INCH * 10) /* 10.0 inches */
X! #define IMAGEN_YMAX (IMAGEN_PTS_PER_INCH * 75 / 10) /* 7.5 inches */
X  
X  #define IMAGEN_FONTSIZE 12
X  
Xdiff -c ./term/latex.trm ../patch/term/latex.trm
X*** ./term/latex.trm	Tue Mar 27 09:03:31 1990
X--- ../patch/term/latex.trm	Wed Sep 12 09:27:09 1990
X***************
X*** 17,23
X   * This file is included by ../term.c.
X   *
X   * This terminal driver supports:
X!  *   LaTeX pictures
X   *
X   * AUTHORS
X   *   David Kotz, Russell Lang
X
X--- 17,24 -----
X   * This file is included by ../term.c.
X   *
X   * This terminal driver supports:
X!  *   LaTeX pictures (latex).
X!  *   LaTeX pictures with emTeX specials (emtex). 
X   *
X   * AUTHORS
X   *   David Kotz, Russell Lang
X***************
X*** 39,46
X  #define LATEX_UNIT (LATEX_PTS_PER_INCH/DOTS_PER_INCH) /* dot size in pt */
X  
X  /* 5 inches wide by 3 inches high (default) */
X! #define LATEX_XMAX (unsigned int)(LATEX_PTS_PER_INCH/LATEX_UNIT*5.0)
X! #define LATEX_YMAX (unsigned int)(LATEX_PTS_PER_INCH/LATEX_UNIT*3.0)
X  
X  #define LATEX_HTIC (5./LATEX_UNIT)
X  #define LATEX_VTIC (5./LATEX_UNIT)
X
X--- 40,47 -----
X  #define LATEX_UNIT (LATEX_PTS_PER_INCH/DOTS_PER_INCH) /* dot size in pt */
X  
X  /* 5 inches wide by 3 inches high (default) */
X! #define LATEX_XMAX (5*DOTS_PER_INCH)  /* (LATEX_PTS_PER_INCH/LATEX_UNIT*5.0) */
X! #define LATEX_YMAX (3*DOTS_PER_INCH)  /* (LATEX_PTS_PER_INCH/LATEX_UNIT*3.0) */
X  
X  #define LATEX_HTIC (5*DOTS_PER_INCH/72)		/* (5./LATEX_UNIT) */
X  #define LATEX_VTIC (5*DOTS_PER_INCH/72)		/* (5./LATEX_UNIT) */
X***************
X*** 42,51
X  #define LATEX_XMAX (unsigned int)(LATEX_PTS_PER_INCH/LATEX_UNIT*5.0)
X  #define LATEX_YMAX (unsigned int)(LATEX_PTS_PER_INCH/LATEX_UNIT*3.0)
X  
X! #define LATEX_HTIC (5./LATEX_UNIT)
X! #define LATEX_VTIC (5./LATEX_UNIT)
X! #define LATEX_HCHAR (5.3/LATEX_UNIT)
X! #define LATEX_VCHAR (11./LATEX_UNIT)
X  
X  static int LATEX_posx;
X  static int LATEX_posy;
X
X--- 43,52 -----
X  #define LATEX_XMAX (5*DOTS_PER_INCH)  /* (LATEX_PTS_PER_INCH/LATEX_UNIT*5.0) */
X  #define LATEX_YMAX (3*DOTS_PER_INCH)  /* (LATEX_PTS_PER_INCH/LATEX_UNIT*3.0) */
X  
X! #define LATEX_HTIC (5*DOTS_PER_INCH/72)		/* (5./LATEX_UNIT) */
X! #define LATEX_VTIC (5*DOTS_PER_INCH/72)		/* (5./LATEX_UNIT) */
X! #define LATEX_HCHAR (DOTS_PER_INCH*53/10/72)	/* (5.3/LATEX_UNIT) */
X! #define LATEX_VCHAR (DOTS_PER_INCH*11/72)	/* (11./LATEX_UNIT) */
X  
X  static int LATEX_posx;
X  static int LATEX_posy;
X***************
X*** 60,66
X  /* POINTS */
X  #define LATEX_POINT_TYPES 12	/* we supply more point types */
X  static char *LATEX_points[] = {
X!     "\\makebox(0,0){$\\Diamond$}",
X      "\\makebox(0,0){$+$}",
X      "\\makebox(0,0){$\\Box$}",
X      "\\makebox(0,0){$\\times$}",
X
X--- 61,67 -----
X  /* POINTS */
X  #define LATEX_POINT_TYPES 12	/* we supply more point types */
X  static char *LATEX_points[] = {
X!     "\\raisebox{-1.2pt}{\\makebox(0,0){$\\Diamond$}}",
X      "\\makebox(0,0){$+$}",
X      "\\raisebox{-1.2pt}{\\makebox(0,0){$\\Box$}}",
X      "\\makebox(0,0){$\\times$}",
X***************
X*** 62,68
X  static char *LATEX_points[] = {
X      "\\makebox(0,0){$\\Diamond$}",
X      "\\makebox(0,0){$+$}",
X!     "\\makebox(0,0){$\\Box$}",
X      "\\makebox(0,0){$\\times$}",
X      "\\makebox(0,0){$\\triangle$}",
X      "\\makebox(0,0){$\\star$}",
X
X--- 63,69 -----
X  static char *LATEX_points[] = {
X      "\\raisebox{-1.2pt}{\\makebox(0,0){$\\Diamond$}}",
X      "\\makebox(0,0){$+$}",
X!     "\\raisebox{-1.2pt}{\\makebox(0,0){$\\Box$}}",
X      "\\makebox(0,0){$\\times$}",
X      "\\makebox(0,0){$\\triangle$}",
X      "\\makebox(0,0){$\\star$}",
X***************
X*** 78,89
X      float size;			/* size of dot, or thick of line in points */
X      float dotspace;			/* inter-dot space in points; 0 for lines */
X  } LATEX_lines[] = {
X!     {.4, 0},				/* thin solid line */
X!     {1.0, 0},				/* thick solid line */
X!     {2.0, 0},				/* Thick solid line */
X!     {.4, 5},				/* dotted line */
X!     {.4, 10},				/* widely dotted line */
X!     {.4, 15}				/* really widely dotted line */
X  };
X  /* for drawing dotted and solid lines */
X  static void LATEX_dot_line();
X
X--- 79,90 -----
X      float size;			/* size of dot, or thick of line in points */
X      float dotspace;			/* inter-dot space in points; 0 for lines */
X  } LATEX_lines[] = {
X!     {.4, 0.0},				/* thin solid line */
X!     {1.0, 0.0},				/* thick solid line */
X!     {2.0, 0.0},				/* Thick solid line */
X!     {.4, 5.0},				/* dotted line */
X!     {.4, 10.0},				/* widely dotted line */
X!     {.4, 15.0}				/* really widely dotted line */
X  };
X  /* for drawing dotted and solid lines */
X  static void LATEX_dot_line();
X***************
X*** 93,98
X  static BOOLEAN LATEX_moved = TRUE;	/* pen is up after move */
X  static float LATEX_dotsize;	/* size of LATEX_DOT in units */
X  
X  /* ARROWS */
X  /* the set of non-vertical/non-horizontal LaTeX vector slopes */
X  /* except negatives - they are handled specially */
X
X--- 94,104 -----
X  static BOOLEAN LATEX_moved = TRUE;	/* pen is up after move */
X  static float LATEX_dotsize;	/* size of LATEX_DOT in units */
X  
X+ #ifdef EMTEX
X+ BOOLEAN emtex=FALSE; /* not currently using emtex */
X+ static void EMTEX_solid_line();
X+ #endif
X+ 
X  /* ARROWS */
X  /* the set of non-vertical/non-horizontal LaTeX vector slopes */
X  /* except negatives - they are handled specially */
X***************
X*** 109,114
X  
X  LATEX_init()
X  {
X      LATEX_posx = LATEX_posy = 0;
X      LATEX_linetype(-1);
X      fprintf(outfile, "%% GNUPLOT: LaTeX picture\n");
X
X--- 115,123 -----
X  
X  LATEX_init()
X  {
X+ #ifdef EMTEX
X+     emtex = FALSE;
X+ #endif
X      LATEX_posx = LATEX_posy = 0;
X      LATEX_linetype(-1);
X      fprintf(outfile, "%% GNUPLOT: LaTeX picture\n");
X***************
X*** 152,157
X      if (linetype >= LATEX_LINE_TYPES)
X  	 linetype %= LATEX_LINE_TYPES;
X  
X      LATEX_flushrule();
X  
X      if (linetype >= 0 && 
X
X--- 161,169 -----
X      if (linetype >= LATEX_LINE_TYPES)
X  	 linetype %= LATEX_LINE_TYPES;
X  
X+ #ifdef EMTEX
X+     if (!emtex)
X+ #endif
X      LATEX_flushrule();
X  
X      if (linetype >= 0 && 
X***************
X*** 155,167
X      LATEX_flushrule();
X  
X      if (linetype >= 0 && 
X! 	   LATEX_lines[linetype].size != LATEX_lines[LATEX_type].size) 
X! 	 /* redefine \plotpoint */
X! 	 fprintf(outfile, "\\sbox{\\plotpoint}{\\rule[%.3fpt]{%.3fpt}{%.3fpt}}\n",
X! 		    -LATEX_lines[linetype].size/2,
X! 		    LATEX_lines[linetype].size,
X! 		    LATEX_lines[linetype].size);
X! 
X      LATEX_type = linetype;
X      LATEX_dotsize = LATEX_lines[linetype].size / LATEX_UNIT;
X      LATEX_moved = TRUE;			/* reset */
X
X--- 167,187 -----
X      LATEX_flushrule();
X  
X      if (linetype >= 0 && 
X! 	   (LATEX_type < 0 ||
X! 	    LATEX_lines[linetype].size != LATEX_lines[LATEX_type].size)) {
X! 		/* redefine \plotpoint */
X! 		fprintf(outfile, 
X! 			"\\sbox{\\plotpoint}{\\rule[%.3fpt]{%.3fpt}{%.3fpt}}%%\n",
X! 			-LATEX_lines[linetype].size/2,
X! 			LATEX_lines[linetype].size,
X! 			LATEX_lines[linetype].size);
X! #ifdef EMTEX
X!         if (emtex)         /* change line width */
X! 			fprintf(outfile, "\\special{em:linewidth %.1fpt}%%\n",
X! 				LATEX_lines[linetype].size);
X! #endif
X!     }
X!     
X      LATEX_type = linetype;
X      LATEX_dotsize 
X  	 = ((linetype >= 0) ? LATEX_lines[linetype].size / LATEX_UNIT : 0);
X***************
X*** 163,169
X  		    LATEX_lines[linetype].size);
X  
X      LATEX_type = linetype;
X!     LATEX_dotsize = LATEX_lines[linetype].size / LATEX_UNIT;
X      LATEX_moved = TRUE;			/* reset */
X  }
X  
X
X--- 183,190 -----
X      }
X      
X      LATEX_type = linetype;
X!     LATEX_dotsize 
X! 	 = ((linetype >= 0) ? LATEX_lines[linetype].size / LATEX_UNIT : 0);
X      LATEX_moved = TRUE;			/* reset */
X  }
X  
X***************
X*** 209,215
X  	   }
X      } else {				/* drawing real curves */
X  	   if (LATEX_lines[LATEX_type].dotspace == 0.0)
X! 		LATEX_solid_line(LATEX_posx, (int)ux, LATEX_posy, (int)uy);
X  	   else
X  		LATEX_dot_line(LATEX_posx, (int)ux, LATEX_posy, (int)uy);
X      }
X
X--- 230,241 -----
X  	   }
X      } else {				/* drawing real curves */
X  	   if (LATEX_lines[LATEX_type].dotspace == 0.0)
X! #ifdef EMTEX
X! 	    if (emtex)
X! 		   EMTEX_solid_line(LATEX_posx, (int)ux, LATEX_posy, (int)uy);
X! 	    else
X! #endif
X! 		   LATEX_solid_line(LATEX_posx, (int)ux, LATEX_posy, (int)uy);
X  	   else
X  		LATEX_dot_line(LATEX_posx, (int)ux, LATEX_posy, (int)uy);
X      }
X***************
X*** 301,315
X  	 if (width == 0 || height == 0)
X  	   return;			/* ignore this rule */
X  
X-     if (width < 0) {
X- 	   x += width;
X- 	   width = -width;
X-     }
X-     if (height < 0) {
X- 	   y += height;
X- 	   height = -height;
X-     }
X- 
X      if (valid && combine) {
X  	   /* try to combine new rule with old rule */
X  	   if ((int)lastx == (int)x && lastw == width) { /* vertical rule */
X
X--- 327,332 -----
X  	 if (width == 0 || height == 0)
X  	   return;			/* ignore this rule */
X  
X      if (valid && combine) {
X  	   /* try to combine new rule with old rule */
X  	   if ((int)lastx == (int)x && lastw == width) { /* vertical rule */
X***************
X*** 313,320
X      if (valid && combine) {
X  	   /* try to combine new rule with old rule */
X  	   if ((int)lastx == (int)x && lastw == width) { /* vertical rule */
X! 		  lasth += height;
X! 		  return;
X  	   } else if ((int)lasty == (int)y && lasth == height){ /* horiz rule */
X  		  lastw += width;
X  		  return;
X
X--- 330,339 -----
X      if (valid && combine) {
X  	   /* try to combine new rule with old rule */
X  	   if ((int)lastx == (int)x && lastw == width) { /* vertical rule */
X! 		  if (lasth * height >= 0) { /* same sign */
X! 			 lasth += height;
X! 			 return;
X! 		  }
X  	   } else if ((int)lasty == (int)y && lasth == height){ /* horiz rule */
X  		  if (lastw * width >= 0) { /* same sign */
X  			 lastw += width;
X***************
X*** 316,323
X  		  lasth += height;
X  		  return;
X  	   } else if ((int)lasty == (int)y && lasth == height){ /* horiz rule */
X! 		  lastw += width;
X! 		  return;
X  	   }
X  	   /* oh well, output last and remember the new one */
X      }
X
X--- 335,344 -----
X  			 return;
X  		  }
X  	   } else if ((int)lasty == (int)y && lasth == height){ /* horiz rule */
X! 		  if (lastw * width >= 0) { /* same sign */
X! 			 lastw += width;
X! 			 return;
X! 		  }
X  	   }
X  	   /* oh well, output last and remember the new one */
X      }
X***************
X*** 322,336
X  	   /* oh well, output last and remember the new one */
X      }
X  
X!     if (valid)
X! 	 /* if very small use canned dot */
X! 	 if (lastw < LATEX_dotsize || lasth < LATEX_dotsize)
X! 	   fprintf(outfile, "\\put(%d,%d){%s}\n",	   
X! 			 (int)lastx, (int)lasty, LATEX_DOT);
X! 	 else
X! 	   fprintf(outfile, "\\put(%d,%d){\\rule[%.3fpt]{%.3fpt}{%.3fpt}}\n",
X! 			 (int)lastx, (int)lasty, -LATEX_dotsize*LATEX_UNIT/2,
X! 			 lastw*LATEX_UNIT, lasth*LATEX_UNIT);
X      
X      if (flush) {
X  	   valid = FALSE;
X
X--- 343,368 -----
X  	   /* oh well, output last and remember the new one */
X      }
X  
X!     if (valid) {
X! 	   /* output the rule */
X! 	   if (lastw < 0) {
X! 		  lastx += lastw;
X! 		  lastw = -lastw;
X! 	   }
X! 	   if (lasth < 0) {
X! 		  lasty += lasth;
X! 		  lasth = -lasth;
X! 	   }
X! 
X! 	   /* if very small use canned dot */
X! 	   if (lastw < LATEX_dotsize || lasth < LATEX_dotsize)
X! 		fprintf(outfile, "\\put(%d,%d){%s}\n",	   
X! 			   (int)lastx, (int)lasty, LATEX_DOT);
X! 	   else
X! 		fprintf(outfile, "\\put(%d,%d){\\rule[%.3fpt]{%.3fpt}{%.3fpt}}\n",
X! 			   (int)lastx, (int)lasty, -LATEX_dotsize*LATEX_UNIT/2,
X! 			   lastw*LATEX_UNIT, lasth*LATEX_UNIT);
X!     }
X      
X      if (flush) {
X  	   valid = FALSE;
X***************
X*** 418,424
X      int x, y;				/* points near sx,sy */
X      float m;				/* slope of line */
X      float arrowslope;		/* slope of arrow */
X!     float minerror;			/* best-case error */
X      struct vslope *slope;	/* one of the slopes */
X      struct vslope *bestslope;	/* the slope with min error */
X      BOOLEAN horiz;			/* was it the horiz line that was best? */
X
X--- 450,456 -----
X      int x, y;				/* points near sx,sy */
X      float m;				/* slope of line */
X      float arrowslope;		/* slope of arrow */
X!     float minerror = 0;		/* best-case error */
X      struct vslope *slope;	/* one of the slopes */
X      struct vslope *bestslope;	/* the slope with min error */
X      BOOLEAN horiz;			/* was it the horiz line that was best? */
X***************
X*** 440,445
X  	    * we try to find the closest-slope arrowhead.
X  	    */
X  	   bestslope = NULL;
X  	   m = abs((float)dy/dx); /* the slope we want */
X  	   for (slope = LATEX_slopes; slope->dx != 0.0; slope++) {
X  		  /* find the slope of the arrow */
X
X--- 472,478 -----
X  	    * we try to find the closest-slope arrowhead.
X  	    */
X  	   bestslope = NULL;
X+ 	   minerror = 0; /* to shut up turbo C */
X  	   m = abs((float)dy/dx); /* the slope we want */
X  	   for (slope = LATEX_slopes; slope->dx != 0.0; slope++) {
X  		  /* find the slope of the arrow */
X***************
X*** 459,465
X  			   abs(ex-sx));
X  	   else {
X  		  /* we draw the line the usual way, with thin lines */
X! 		  if (who == 1) {
X  			 LATEX_linetype(LATEX_THIN_LINE);
X  			 LATEX_solid_line(sx,ex,sy,ey);
X  		  }
X
X--- 492,499 -----
X  			   abs(ex-sx));
X  	   else {
X  		  /* we draw the line the usual way, with thin lines */
X! #ifdef EMTEX
X! 		  if (emtex) {
X  			 LATEX_linetype(LATEX_THIN_LINE);
X  			 EMTEX_solid_line(sx,ex,sy,ey);
X  		  } else 
X***************
X*** 461,468
X  		  /* we draw the line the usual way, with thin lines */
X  		  if (who == 1) {
X  			 LATEX_linetype(LATEX_THIN_LINE);
X! 			 LATEX_solid_line(sx,ex,sy,ey);
X! 		  }
X  #ifdef EEPIC
X  		  else {
X  			 EEPIC_move(sx,sy);
X
X--- 495,507 -----
X  #ifdef EMTEX
X  		  if (emtex) {
X  			 LATEX_linetype(LATEX_THIN_LINE);
X! 			 EMTEX_solid_line(sx,ex,sy,ey);
X! 		  } else 
X! #endif
X! 			if (who == 1) {
X! 			   LATEX_linetype(LATEX_THIN_LINE);
X! 			   LATEX_solid_line(sx,ex,sy,ey);
X! 			}
X  #ifdef EEPIC
X  			else {
X  			   EEPIC_move(sx,sy);
X***************
X*** 464,473
X  			 LATEX_solid_line(sx,ex,sy,ey);
X  		  }
X  #ifdef EEPIC
X! 		  else {
X! 			 EEPIC_move(sx,sy);
X! 			 EEPIC_vector(ex,ey);
X! 		  }
X  #endif /* EEPIC */
X  		  /* and then draw an arrowhead (a short vector) there */
X  		  fprintf(outfile, "\\put(%d,%d){\\vector(%d,%d){0}}\n",
X
X--- 503,512 -----
X  			   LATEX_solid_line(sx,ex,sy,ey);
X  			}
X  #ifdef EEPIC
X! 			else {
X! 			   EEPIC_move(sx,sy);
X! 			   EEPIC_vector(ex,ey);
X! 			}
X  #endif /* EEPIC */
X  		  /* and then draw an arrowhead (a short vector) there */
X  		  fprintf(outfile, "\\put(%d,%d){\\vector(%d,%d){0}}\n",
X***************
X*** 555,557
X      LATEX_posx = LATEX_posy = 0;
X  }
X  
X
X--- 594,638 -----
X      LATEX_posx = LATEX_posy = 0;
X  }
X  
X+ 
X+ #ifdef EMTEX
X+ 
X+ EMTEX_init()
X+ {
X+     emtex=TRUE;
X+     LATEX_posx = LATEX_posy = 0;
X+     fprintf(outfile, "%% GNUPLOT: LaTeX picture with emtex specials\n");
X+     fprintf(outfile, "\\setlength{\\unitlength}{%fpt}\n", LATEX_UNIT);
X+     LATEX_linetype(-1);
X+ }
X+ 
X+ 
X+ EMTEX_reset()
X+ {
X+     emtex=FALSE;
X+     LATEX_posx = LATEX_posy = 0;
X+ }
X+ 
X+ 
X+ EMTEX_text()
X+ {
X+     fprintf(outfile, "\\end{picture}\n");
X+ }
X+ 
X+ 
X+ static void
X+ EMTEX_solid_line(x1,x2, y1,y2)
X+ 	int x1,x2, y1,y2;
X+ {
X+     /* emtex special solid line */
X+ 	if (LATEX_moved)
X+ 		fprintf(outfile, "\\put(%d,%d){\\special{em:moveto}}\n", x1, y1);
X+ 	if ( (x1!=x2) || (y1!=y2) )
X+ 		fprintf(outfile, "\\put(%d,%d){\\special{em:lineto}}\n", x2, y2);
X+     LATEX_posx = x2;
X+     LATEX_posy = y2;
X+     LATEX_moved = FALSE;
X+ }
X+ 
X+ 
X+ #endif /* EMTEX */
Xdiff -c ./term/pc.trm ../patch/term/pc.trm
X*** ./term/pc.trm	Tue Mar 27 09:03:04 1990
X--- ../patch/term/pc.trm	Tue Aug 28 20:52:11 1990
X***************
X*** 20,26
X   *  Under Microsoft C
X   *      cga, egabios, egalib, vgabios, hercules, corona325, att
X   *  Under Turboc C
X!  *      egalib, vgalib, vgamono, mcga, cga, hercules
X   *
X   * AUTHORS
X   *  Colin Kelley, Thomas Williams, William Wilson, Russell Lang
X
X--- 20,26 -----
X   *  Under Microsoft C
X   *      cga, egabios, egalib, vgabios, hercules, corona325, att
X   *  Under Turboc C
X!  *      egalib, vgalib, vgamono, mcga, cga, hercules, att
X   *
X   * AUTHORS
X   *  Colin Kelley, Thomas Williams, William Wilson, Russell Lang
X***************
X*** 110,116
X  			pixelon = (((unsigned int)(font5x7[i][j])) >> k & 1);
X  			if (pixelon) {
X  				switch(angle) {
X! 					case 0 : line_func(x+k+1,y-j,x+k+1,y-j);
X  							break;
X  					case 1 : line_func(x-j,y-k-1,x-j,y-k-1);
X  							break;
X
X--- 110,116 -----
X  			pixelon = (((unsigned int)(font5x7[i][j])) >> k & 1);
X  			if (pixelon) {
X  				switch(angle) {
X! 					case 0 : (*line_func)(x+k+1,y-j,x+k+1,y-j);
X  							break;
X  					case 1 : (*line_func)(x-j,y-k-1,x-j,y-k-1);
X  							break;
X***************
X*** 112,118
X  				switch(angle) {
X  					case 0 : line_func(x+k+1,y-j,x+k+1,y-j);
X  							break;
X! 					case 1 : line_func(x-j,y-k-1,x-j,y-k-1);
X  							break;
X  				}
X  			}
X
X--- 112,118 -----
X  				switch(angle) {
X  					case 0 : (*line_func)(x+k+1,y-j,x+k+1,y-j);
X  							break;
X! 					case 1 : (*line_func)(x-j,y-k-1,x-j,y-k-1);
X  							break;
X  				}
X  			}
X***************
X*** 1197,1202
X  	outtextxy(x,HERC_YLAST-y,buf);
X  }
X  
X  
X  #endif /* ifndef __TURBOC__ */
X  
X
X--- 1197,1301 -----
X  	outtextxy(x,HERC_YLAST-y,buf);
X  }
X  
X+ 
X+ #ifdef ATT6300
X+ /* this driver added by rjl@monu1.cc.monash.edu.au */
X+ 
X+ #define ATT_XMAX 640
X+ #define ATT_YMAX 400
X+ 
X+ #define ATT_XLAST (ATT_XMAX - 1)
X+ #define ATT_YLAST (ATT_YMAX - 1)
X+ 
X+ #define ATT_VCHAR PC_VCHAR
X+ #define ATT_HCHAR PC_HCHAR
X+ #define ATT_VTIC 4
X+ #define ATT_HTIC 5
X+ 
X+ #define ATT_text_angle PC_text_angle
X+ #define ATT_justify_text PC_justify_text
X+ #define ATT_reset PC_reset
X+ 
X+ ATT_init()
X+ {
X+ 	g_driver=ATT400;
X+ 	g_mode=5;
X+   	initgraph(&g_driver,&g_mode,path);
X+           switch (g_driver){
X+             case -2: fprintf(stderr,"Graphics card not detected.\n");
X+                      break;
X+             case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
X+                      break;
X+             case -4: fprintf(stderr,"Invalid BGI driver file.\n");
X+                      break;
X+             case -5: fprintf(stderr,"Insufficient memory to load ",
X+                              "graphics driver.");
X+                      break;
X+             }
X+ }
X+ 
X+ ATT_graphics()
X+ {
X+ 	g_driver=ATT400;
X+ 	g_mode=5;
X+ 	initgraph(&g_driver,&g_mode,path);
X+ 	ATT_justify_text(LEFT);
X+ 	graphics_on = TRUE;
X+ }
X+ 
X+ ATT_text()
X+ {
X+ 	if (graphics_on) {
X+ 		graphics_on = FALSE;
X+ 		pause();
X+ 	}
X+ 	closegraph();
X+ }
X+ 
X+ ATT_linetype(linetype)
X+ {
X+ 	if (linetype >= 5)
X+ 		linetype %= 5;
X+ 	setlinestyle(4,pattern[linetype+2],1);
X+ }
X+ 
X+ ATT_move(x,y)
X+ {
X+ 	if (x < 0)
X+ 		x = 0;
X+ 	else if (x > ATT_XLAST)
X+ 		x = ATT_XLAST;
X+ 
X+ 	if (y < 0)
X+ 		y = 0;
X+ 	else if (y > ATT_YLAST)
X+ 		y = ATT_YLAST;
X+ 	moveto(x,getmaxy()-y);
X+ }
X+ 
X+ ATT_vector(x,y)
X+ {
X+ 	if (x < 0)
X+ 		x = 0;
X+ 	else if (x > ATT_XLAST)
X+ 		x = ATT_XLAST;
X+ 	if (y < 0)
X+ 		y = 0;
X+ 	else if (y > ATT_YLAST)
X+ 		y = ATT_YLAST;
X+ 
X+ 	lineto(x,getmaxy()-y);
X+ }
X+ 
X+ 
X+ ATT_put_text(x,y,str)
X+ unsigned int x, y;
X+ char *str;
X+ {
X+ 	strcpy((char far *)buf,str);
X+ 	outtextxy(x,ATT_YLAST-y,buf);
X+ }
X+ #endif /* ifdef ATT6300 */
X  
X  #endif /* ifndef __TURBOC__ */
X  
Xdiff -c ./term/post.trm ../patch/term/post.trm
X*** ./term/post.trm	Tue Mar 27 09:02:51 1990
X--- ../patch/term/post.trm	Tue Sep 18 14:40:31 1990
X***************
X*** 40,46
X  "/vpt2 vpt 2 mul def\n",
X  "/hpt2 hpt 2 mul def\n",
X  /* flush left show */
X! "/Lshow { 0 vshift rmoveto show } def\n", 
X  /* flush right show */
X  "/Rshow { dup stringwidth pop neg vshift rmoveto show } def\n", 
X  /* centred show */
X
X--- 40,47 -----
X  "/vpt2 vpt 2 mul def\n",
X  "/hpt2 hpt 2 mul def\n",
X  /* flush left show */
X! "/Lshow { currentpoint stroke moveto\n",
X! "  0 vshift rmoveto show } def\n", 
X  /* flush right show */
X  "/Rshow { currentpoint stroke moveto\n",
X  "  dup stringwidth pop neg vshift rmoveto show } def\n", 
X***************
X*** 42,48
X  /* flush left show */
X  "/Lshow { 0 vshift rmoveto show } def\n", 
X  /* flush right show */
X! "/Rshow { dup stringwidth pop neg vshift rmoveto show } def\n", 
X  /* centred show */
X  "/Cshow { dup stringwidth pop -2 div vshift rmoveto show } def\n", 
X  /* Border Lines */
X
X--- 43,50 -----
X  "/Lshow { currentpoint stroke moveto\n",
X  "  0 vshift rmoveto show } def\n", 
X  /* flush right show */
X! "/Rshow { currentpoint stroke moveto\n",
X! "  dup stringwidth pop neg vshift rmoveto show } def\n", 
X  /* centred show */
X  "/Cshow { currentpoint stroke moveto\n",
X  "  dup stringwidth pop -2 div vshift rmoveto show } def\n", 
X***************
X*** 44,50
X  /* flush right show */
X  "/Rshow { dup stringwidth pop neg vshift rmoveto show } def\n", 
X  /* centred show */
X! "/Cshow { dup stringwidth pop -2 div vshift rmoveto show } def\n", 
X  /* Border Lines */
X  "/BL { stroke gnulinewidth 2 mul setlinewidth} def\n",
X  /* Axes Lines */
X
X--- 46,53 -----
X  "/Rshow { currentpoint stroke moveto\n",
X  "  dup stringwidth pop neg vshift rmoveto show } def\n", 
X  /* centred show */
X! "/Cshow { currentpoint stroke moveto\n",
X! "  dup stringwidth pop -2 div vshift rmoveto show } def\n", 
X  /* Border Lines */
X  "/BL { stroke gnulinewidth 2 mul setlinewidth } def\n",
X  /* Axes Lines */
X***************
X*** 46,52
X  /* centred show */
X  "/Cshow { dup stringwidth pop -2 div vshift rmoveto show } def\n", 
X  /* Border Lines */
X! "/BL { stroke gnulinewidth 2 mul setlinewidth} def\n",
X  /* Axes Lines */
X  "/AL { stroke gnulinewidth 2 div setlinewidth } def\n",
X  /* Plot Lines */
X
X--- 49,55 -----
X  "/Cshow { currentpoint stroke moveto\n",
X  "  dup stringwidth pop -2 div vshift rmoveto show } def\n", 
X  /* Border Lines */
X! "/BL { stroke gnulinewidth 2 mul setlinewidth } def\n",
X  /* Axes Lines */
X  "/AL { stroke gnulinewidth 2 div setlinewidth } def\n",
X  /* Plot Lines */
X***************
X*** 102,109
X  #define PS_HTIC (PS_YMAX/80)
X  
X  
X! #define PS_SC (360.0/PS_XMAX)		/* scale is 1pt = 10 units */
X! #define	PS_LW (0.25/PS_SC)			/* linewidth = 0.25 pts */
X  
X  #define PS_VCHAR1 (int)(7.0/PS_SC)	/* 7 point characters */
X  #define PS_HCHAR1 (int)(0.6*7.0/PS_SC)
X
X--- 105,112 -----
X  #define PS_HTIC (PS_YMAX/80)
X  
X  
X! #define PS_SC (PS_XMAX/360)		/* scale is 1pt = 10 units */
X! #define	PS_LW (0.25*PS_SC)		/* linewidth = 0.25 pts */
X  
X  #define PS_VCHAR1 (7*PS_SC)		/* 7 point characters */
X  #define PS_HCHAR1 (7*PS_SC*6/10)
X***************
X*** 105,112
X  #define PS_SC (360.0/PS_XMAX)		/* scale is 1pt = 10 units */
X  #define	PS_LW (0.25/PS_SC)			/* linewidth = 0.25 pts */
X  
X! #define PS_VCHAR1 (int)(7.0/PS_SC)	/* 7 point characters */
X! #define PS_HCHAR1 (int)(0.6*7.0/PS_SC)
X  
X  #define PS_VCHAR2 (int)(11.0/PS_SC)	/* 11 point characters */
X  #define PS_HCHAR2 (int)(0.6*11.0/PS_SC)
X
X--- 108,115 -----
X  #define PS_SC (PS_XMAX/360)		/* scale is 1pt = 10 units */
X  #define	PS_LW (0.25*PS_SC)		/* linewidth = 0.25 pts */
X  
X! #define PS_VCHAR1 (7*PS_SC)		/* 7 point characters */
X! #define PS_HCHAR1 (7*PS_SC*6/10)
X  
X  #define PS_VCHAR2 (11*PS_SC)		/* 11 point characters */
X  #define PS_HCHAR2 (11*PS_SC*6/10)
X***************
X*** 108,115
X  #define PS_VCHAR1 (int)(7.0/PS_SC)	/* 7 point characters */
X  #define PS_HCHAR1 (int)(0.6*7.0/PS_SC)
X  
X! #define PS_VCHAR2 (int)(11.0/PS_SC)	/* 11 point characters */
X! #define PS_HCHAR2 (int)(0.6*11.0/PS_SC)
X  
X  
X  EPSF1_init()
X
X--- 111,118 -----
X  #define PS_VCHAR1 (7*PS_SC)		/* 7 point characters */
X  #define PS_HCHAR1 (7*PS_SC*6/10)
X  
X! #define PS_VCHAR2 (11*PS_SC)		/* 11 point characters */
X! #define PS_HCHAR2 (11*PS_SC*6/10)
X  
X  
X  EPSF1_init()
X***************
X*** 135,142
X  	fprintf(outfile,"%%%%DocumentFonts: %s\n", ps_font);
X  	fprintf(outfile,"%%%%DocumentNeededFonts: %s\n", ps_font);
X  	fprintf(outfile,"%%%%BoundingBox: 0 0 %d %d\n",
X! 		(int)(xsize*(PS_XMAX)*PS_SC+0.5), 
X! 		(int)(ysize*(PS_YMAX)*PS_SC+0.5) );
X  	fprintf(outfile,"%%%%EndComments\n");
X  	fprintf(outfile,"40 dict begin\n");
X  	fprintf(outfile,"/gnulinewidth %.3f def\n",PS_LW);
X
X--- 138,145 -----
X  	fprintf(outfile,"%%%%DocumentFonts: %s\n", ps_font);
X  	fprintf(outfile,"%%%%DocumentNeededFonts: %s\n", ps_font);
X  	fprintf(outfile,"%%%%BoundingBox: 0 0 %d %d\n",
X! 		(int)(xsize*(PS_XMAX)/PS_SC+0.5), 
X! 		(int)(ysize*(PS_YMAX)/PS_SC+0.5) );
X  	fprintf(outfile,"%%%%EndComments\n");
X  	fprintf(outfile,"40 dict begin\n");
X  	fprintf(outfile,"/gnulinewidth %.3f def\n",PS_LW);
X***************
X*** 142,148
X  	fprintf(outfile,"/gnulinewidth %.3f def\n",PS_LW);
X  	fprintf(outfile,"/vshift %d def\n", 
X  		ps_big ? -PS_VCHAR2/3 : -PS_VCHAR1/3);
X! 	fprintf(outfile,"/dl {%.3f mul} def\n",1/PS_SC); /* dash length */
X  	fprintf(outfile,"/hpt %.1f def\n",PS_HTIC/2.0);
X  	fprintf(outfile,"/vpt %.1f def\n",PS_VTIC/2.0);
X  	for ( i=0; PS_header[i] != NULL; i++)
X
X--- 145,151 -----
X  	fprintf(outfile,"/gnulinewidth %.3f def\n",PS_LW);
X  	fprintf(outfile,"/vshift %d def\n", 
X  		ps_big ? -PS_VCHAR2/3 : -PS_VCHAR1/3);
X! 	fprintf(outfile,"/dl {%d mul} def\n",PS_SC); /* dash length */
X  	fprintf(outfile,"/hpt %.1f def\n",PS_HTIC/2.0);
X  	fprintf(outfile,"/vpt %.1f def\n",PS_VTIC/2.0);
X  	for ( i=0; PS_header[i] != NULL; i++)
X***************
X*** 150,156
X  	fprintf(outfile,"%%%%EndProlog\n");
X  	fprintf(outfile,"%%%%BeginSetup\n");
X  	fprintf(outfile,"/Gnu_save save def\n");
X! 	fprintf(outfile,"%.3f %.3f scale\n",PS_SC,PS_SC);
X  	fprintf(outfile,"%%%%IncludeFont: %s\n", ps_font);
X  	fprintf(outfile,"/%s findfont %d ", ps_font, 
X  		ps_big ? PS_VCHAR2 : PS_VCHAR1 );
X
X--- 153,160 -----
X  	fprintf(outfile,"%%%%EndProlog\n");
X  	fprintf(outfile,"%%%%BeginSetup\n");
X  	fprintf(outfile,"/Gnu_save save def\n");
X! 	fprintf(outfile,"%.3f %.3f scale\n",1.0/PS_SC,1.0/PS_SC);
X! 	fprintf(outfile,"0 setgray\n");
X  	fprintf(outfile,"%%%%IncludeFont: %s\n", ps_font);
X  	fprintf(outfile,"/%s findfont %d ", ps_font, 
X  		ps_big ? PS_VCHAR2 : PS_VCHAR1 );
X***************
X*** 198,205
X  	fprintf(outfile,"%%%%DocumentNeededFonts: %s\n", ps_font);
X  	fprintf(outfile,"%%%%Pages: (atend)\n");
X  	fprintf(outfile,"%%%%BoundingBox: %d 50 550 %d\n",
X! 		(int)(550.5-ysize*(PS_YMAX)*PS_SC*2), 
X! 		(int)(50.5+xsize*(PS_XMAX)*PS_SC*2) );
X  	fprintf(outfile,"%%%%EndComments\n");
X  	fprintf(outfile,"/GnuTransform {\n");
X  	fprintf(outfile,"  90 rotate\n  50 -550 translate\n  2 2 scale\n");
X
X--- 202,209 -----
X  	fprintf(outfile,"%%%%DocumentNeededFonts: %s\n", ps_font);
X  	fprintf(outfile,"%%%%Pages: (atend)\n");
X  	fprintf(outfile,"%%%%BoundingBox: %d 50 550 %d\n",
X! 		(int)(550.5-ysize*(PS_YMAX)/PS_SC*2), 
X! 		(int)(50.5+xsize*(PS_XMAX)/PS_SC*2) );
X  	fprintf(outfile,"%%%%EndComments\n");
X  	fprintf(outfile,"/GnuTransform {\n");
X  	fprintf(outfile,"  90 rotate\n  50 -550 translate\n  2 2 scale\n");
X***************
X*** 292,297
X  	}
X  	if (ps_ang != 0)
X  		fprintf(outfile,"grestore\n");
X  }
X  
X  int PS_text_angle(ang)
X
X--- 296,302 -----
X  	}
X  	if (ps_ang != 0)
X  		fprintf(outfile,"grestore\n");
X+ 	ps_path_count = 0;
X  }
X  
X  int PS_text_angle(ang)
Xdiff -c ./term/t410x.trm ../patch/term/t410x.trm
X*** ./term/t410x.trm	Wed Aug 29 12:16:17 1990
X--- ../patch/term/t410x.trm	Tue Aug 28 20:28:50 1990
X***************
X*** 0
X
X--- 1,239 -----
X+ /* GNUPLOT - t410x.trm */
X+ /*
X+  * Copyright (C) 1990   
X+  *
X+  * Permission to use, copy, and distribute this software and its
X+  * documentation for any purpose with or without fee is hereby granted, 
X+  * provided that the above copyright notice appear in all copies and 
X+  * that both that copyright notice and this permission notice appear 
X+  * in supporting documentation.
X+  *
X+  * Permission to modify the software is granted, but not the right to
X+  * distribute the modified code.  Modifications are to be distributed 
X+  * as patches to released version.
X+  *  
X+  * This software  is provided "as is" without express or implied warranty.
X+  * 
X+  * This file is included by ../term.c.
X+  *
X+  * This terminal driver supports: Tektronix 410x and 420x series terminals
X+  *
X+  * AUTHORS
X+  *   Colin Kelley, Thomas Williams
X+  * 
X+  * send your comments or suggestions to (pixar!info-gnuplot@sun.com).
X+  * 
X+  */
X+ 
X+ /* Tektronix 410X and 420X driver written by Cary D. Renzema.
X+  * email address: caryr@vice.ico.tek.com
X+  *
X+  * I've tested this driver on the following terminals: 4106, 4107A, 4109
X+  * and 4207.  It should work, without editing, on other terminals in the
X+  * 410x and 420x families.  It will probably need to be changed to work
X+  * on a 4105 (screen size and character rotation are two guesses).  This
X+  * file can also be used as a start for a 411x driver.
X+  *
X+  * Cary R.
X+  * April 5, 1990
X+  */
X+ 
X+ #ifdef T410X
X+ 
X+ #define T410XXMAX 4095
X+ #define T410XYMAX 3131
X+ 
X+ #define T410XVCHAR	71
X+ #define T410XHCHAR	51
X+ #define T410XVTIC	36
X+ #define T410XHTIC	36	
X+ 
X+ static int T410X_angle=0;
X+ 
X+ T410X_init()
X+ {
X+ 	(void) fprintf(outfile, "\033%%!0\033MN0\033MCB7C;\033MQ1\033MT1");
X+ 	(void) fprintf(outfile, "\033MG1\033RK!\033SK!\033LZ\033%%!1");
X+ /*
X+ 	 1. set tek mode
X+ 	 2. set character path to 0 (characters placed equal to rotation)
X+ 	 3. set character size to 59 height
X+ 	 4. set character precision to string
X+ 	 5. set character text index to 1
X+ 	 6. set character write mode to overstrike
X+ 	 7. clear the view
X+ 	 8. clear the segments
X+ 	 9. clear the dialog buffer
X+ 	10. set ansi mode
X+ */
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ 
X+ T410X_reset()
X+ {
X+ 	(void) fprintf(outfile, "\033%%!0\033LZ\033%%!1");
X+ /*
X+ 	1. set tek mode
X+ 	2. clear the dialog buffer
X+ 	3. set ansi mode
X+ */
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ 
X+ T410X_graphics()
X+ {
X+ 	(void) fprintf(outfile, "\033%%!0\033\014\033LV0");
X+ /*
X+ 	1. set tek mode
X+ 	2. clear the screen
X+ 	3. set dialog area invisible
X+ */
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ T410X_text()
X+ {
X+ 	(void) fprintf(outfile, "\033LV1\033%%!1");
X+ /*
X+ 	1. set dialog area visible
X+ 	2. set ansi mode
X+ */
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ 
X+ T410X_move(x, y)
X+ unsigned int x, y;
X+ {
X+ 	(void) fprintf(outfile, "\033LF");
X+ 	(void) T410X_encode_x_y(x, y);
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ 
X+ T410X_vector(x, y)
X+ unsigned int x, y;
X+ {
X+ 	(void) fprintf(outfile, "\033LG");
X+ 	(void) T410X_encode_x_y(x, y);
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ 
X+ T410X_point(x, y, number)
X+ unsigned int x, y;
X+ int number;
X+ {
X+ 	(void) fprintf(outfile, "\033MM");
X+ 	(void) T410X_encode_int(max(number, 0)%11);
X+ 	(void) fprintf(outfile, "\033LH");
X+ 	(void) T410X_encode_x_y(x, y);
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ 
X+ T410X_linetype(linetype)
X+ int linetype;
X+ {
X+ 	switch (linetype) {
X+ 		case -1:
X+ 			(void) fprintf(outfile, "\033ML5");
X+ 			break;
X+ 		case -2:
X+ 			(void) fprintf(outfile, "\033ML?");
X+ 			break;
X+ 		default:
X+ 			(void) fprintf(outfile, "\033ML");
X+ 			(void) T410X_encode_int(linetype%14+2);
X+ 			break;
X+ 	}
X+ 	(void) fprintf(outfile, "\033MV");
X+ 	(void) T410X_encode_int(max(linetype, 0)%8);
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ 
X+ T410X_put_text(x, y, str)
X+ unsigned int x, y;
X+ char str[];
X+ {
X+ 	extern int T410X_angle;
X+ 
X+ 	if (T410X_angle == 0) {
X+ 		(void) T410X_move(x, y-T410XVCHAR/2+6);
X+ 		(void) fprintf(outfile, "\033MR00");
X+ 	} else {
X+ 		(void) T410X_move(x+T410XHCHAR/2-6, y);
X+ 		(void) fprintf(outfile, "\033MRE:0");
X+ 	}
X+ 	(void) fprintf(outfile, "\033LT");
X+ 	(void) T410X_encode_int(strlen(str));
X+ 	(void) fputs(str, outfile);
X+ 	(void) fflush(outfile);
X+ }
X+ 
X+ T410X_text_angle(ang)
X+ int ang;
X+ {
X+ 	extern int T410X_angle;
X+ 
X+ 	T410X_angle = ang;
X+ 	return(TRUE);
X+ }
X+ 
X+ /* These last two routines are based on fortran code found in the
X+  * 4106/4107/4109/CX PROGRAMMERS manual.
X+  */
X+ 
X+ T410X_encode_x_y(x, y)
X+ unsigned int x, y;
X+ {
X+ 	static char chix=0, chiy=0, cloy=0, ceb=0;
X+ 
X+ 	register unsigned int hix, lox, hiy, loy, eb, lx, ly;
X+ 
X+ 	lx = (x <= T410XXMAX) ? x : T410XXMAX;
X+ 	ly = (y <= T410XYMAX) ? y : T410XYMAX;
X+ 
X+ 	hix = lx/128 + 32;
X+ 	lox = (lx/4)%32 + 64;
X+ 	hiy = ly/128 + 32;
X+ 	loy = (ly/4)%32 + 96;
X+ 	eb = (ly%4)*4 + lx%4 + 96;
X+ 
X+ 	if (chiy != hiy) (void) putc(hiy, outfile);
X+ 	if (ceb != eb) (void) putc(eb, outfile);
X+ 	if ((cloy!=loy) || (ceb!=eb) || (chix!=hix)) (void) putc(loy, outfile);
X+ 	if (chix != hix) (void) putc(hix, outfile);
X+ 	(void) putc(lox, outfile);
X+ 
X+ 	chix = hix;
X+ 	chiy = hiy;
X+ 	cloy = loy;
X+ 	ceb = eb;
X+ }
X+ 
X+ 
X+ T410X_encode_int(number)
X+ int number;
X+ {
X+ 	register unsigned int mag, hi1, hi2, lo;
X+ 
X+ 	mag = abs(number);
X+ 
X+ 	hi1 = mag/1024 + 64;
X+ 	hi2 = (mag/16)%64 + 64;
X+ 	lo = mag%16 + 32;
X+ 
X+ 	if (number >= 0) lo += 16;
X+ 
X+ 	if (hi1 != 64) (void) putc(hi1, outfile);
X+ 	if ((hi2 != 64) || (hi1 != 64)) (void) putc(hi2, outfile);
X+ 	(void) putc(lo, outfile);
X+ 
X+ }
X+ 
X+ 
X+ #endif /* T410X */
Xdiff -c ./term/unixpc.trm ../patch/term/unixpc.trm
X*** ./term/unixpc.trm	Tue Mar 27 09:03:15 1990
X--- ../patch/term/unixpc.trm	Tue Aug 28 16:03:19 1990
X***************
X*** 122,128
X     uw.uw_height = uPC_YMAX;     /* 288 normal--we clobber 12 (top row)*/
X     uw.uw_uflags = 1;         /* Creates with no border */
X  
X!    IfErrOut (ioctl(0, WIOCSETD, &uw), <0, "ioctl failed on", "WIOCSETD");
X  }
X  
X  
X
X--- 122,128 -----
X     uw.uw_height = uPC_YMAX;     /* 288 normal--we clobber 12 (top row)*/
X     uw.uw_uflags = 1;         /* Creates with no border */
X  
X!    IfErrOut (ioctl(1, WIOCSETD, &uw), <0, "ioctl failed on", "WIOCSETD");
X  }
X  
X  
X***************
X*** 144,150
X     printf ("\033[25;1H");
X  
X     uPC_ur.ur_dstop = DSTSRC;   /* replace (clear screen). */
X!    IfErrOut (ioctl(0, WIOCRASTOP, &uPC_ur), <0,
X        "ioctl failed", "WIOCRASTOP");
X     uPC_ur.ur_dstop = DSTOR;   /* Or in (show text) */
X  }
X
X--- 144,150 -----
X     printf ("\033[25;1H");
X  
X     uPC_ur.ur_dstop = DSTSRC;   /* replace (clear screen). */
X!    IfErrOut (ioctl(1, WIOCRASTOP, &uPC_ur), <0,
X        "ioctl failed", "WIOCRASTOP");
X     uPC_ur.ur_dstop = DSTOR;   /* Or in (show text) */
X  }
X***************
X*** 154,160
X  {
X  /* This routine will flush the display. */
X  
X!    IfErrOut (ioctl(0, WIOCRASTOP, &uPC_ur), <0,
X        "ioctl failed", "WIOCRASTOP");
X  }
X  
X
X--- 154,160 -----
X  {
X  /* This routine will flush the display. */
X  
X!    IfErrOut (ioctl(1, WIOCRASTOP, &uPC_ur), <0,
X        "ioctl failed", "WIOCRASTOP");
X  }
X  
X***************
X*** 522,528
X     struct utdata ut;
X  
X  /* Reset the window to the right size. */
X!    ioctl(0, WIOCSETD, &wreset);   /* 0, not wncur here! */
X  
X  /* Scroll the screen once. (avoids typing over the same line) */
X     fprintf (stderr, "\n");
X
X--- 522,528 -----
X     struct utdata ut;
X  
X  /* Reset the window to the right size. */
X!    ioctl(1, WIOCSETD, &wreset);   /* 0, not wncur here! */
X  
X  /* Scroll the screen once. (avoids typing over the same line) */
X     fprintf (stderr, "\n");
Xdiff -c ./term/x11.trm ../patch/term/x11.trm
X*** ./term/x11.trm	Thu Sep  6 09:24:44 1990
X--- ../patch/term/x11.trm	Tue Sep  4 00:50:32 1990
X***************
X*** 0
X
X--- 1,77 -----
X+ /*
X+  *    x11.trm  --- inboard terminal driver for X11
X+  */
X+ 
X+ #define X11_XMAX 4096
X+ #define X11_YMAX 4096
X+ 
X+ /* approximations for typical font/screen sizes */
X+ #define X11_VCHAR (X11_YMAX/25) 
X+ #define X11_HCHAR (X11_XMAX/100) 
X+ #define X11_VTIC (X11_YMAX/100)
X+ #define X11_HTIC (X11_XMAX/150)
X+ 
X+ #define X11_nopts 22
X+ char X11_opts[X11_nopts][20] = {
X+    "-iconic", "-rv", "-reverse", "+rv", "-synchronous", 
X+    "-display", "-geometry", "-bg", "-background", "-bd", "-bordercolor", "-bw",
X+    "-borderwidth", "-fg", "-foreground", "-fn", "-font", "-name", 
X+    "-selectionTimeout", "-title", "-xnllanguage", "-xrm" 
X+    };
X+ int X11_optarg[X11_nopts] = { 
X+    0, 0, 0, 0, 0,
X+    1, 1, 1, 1, 1, 1, 1,
X+    1, 1, 1, 1, 1, 1, 
X+    1, 1, 1, 1
X+    };
X+ 
X+ FILE *X11_pipe, *popen();
X+ char X11_command[1024]= "gnuplot_x11 -name gnuplot";
X+ 
X+ 
X+ /*   X11_args - scan gnuplot command line for standard X Toolkit options */
X+ 
X+ X11_args(argc, argv) int argc; char *argv[]; {
X+    int nx11 = 0, n;
X+ 
X+    while(++argv, --argc > 0) {
X+       for (n=0; n<X11_nopts; n++) {
X+ 	 if (!strcmp(*argv, X11_opts[n])) {
X+ 	    strcat(X11_command, " ");
X+ 	    strcat(X11_command, *argv); 
X+ 	    if (X11_optarg[n]) {
X+ 	       if (--argc <= 0) return(nx11);
X+ 	       strcat(X11_command, " \"");
X+ 	       strcat(X11_command, *++argv); 
X+ 	       strcat(X11_command, "\"");
X+ 	       nx11++;
X+ 	       }
X+ 	    nx11++; break;
X+ 	    }
X+ 	 }
X+       if (n == X11_nopts) break; 
X+       }
X+    return(nx11);
X+    }
X+ 
X+ X11_init() { X11_pipe = popen(X11_command, "w"); }
X+ 
X+ X11_reset() { fprintf(X11_pipe, "R\n"); fflush(X11_pipe); }
X+ 
X+ X11_text() { fprintf(X11_pipe, "E\n"); fflush(X11_pipe); }
X+ 
X+ X11_graphics() { fprintf(X11_pipe, "G\n"); }
X+ 
X+ X11_move(x,y) unsigned int x,y; { fprintf(X11_pipe, "M%04d%04d\n", x, y); }
X+ 
X+ X11_vector(x,y) unsigned int x,y; { fprintf(X11_pipe, "V%04d%04d\n", x, y); }
X+ 
X+ X11_linetype(lt) int lt; { fprintf(X11_pipe, "L%04d\n", lt); }
X+ 
X+ X11_put_text(x,y,str) unsigned int x,y; char str[]; {
X+    fprintf(X11_pipe, "T%04d%04d%s\n", x, y, str);
X+    }
X+ X11_justify_text(mode) enum JUSTIFY mode; {
X+    fprintf(X11_pipe, "J%04d\n", mode);
X+    return(TRUE);
X+    }
X*** ./term.h	Wed Aug 29 12:15:55 1990
X--- ../patch1/term.h	Tue Sep 18 14:40:02 1990
X***************
X*** 0
X
X--- 1,86 -----
X+ /* GNUPLOT - term.h */
X+ /*
X+  * Copyright (C) 1986, 1987, 1990   Thomas Williams, Colin Kelley
X+  *
X+  * Permission to use, copy, and distribute this software and its
X+  * documentation for any purpose with or without fee is hereby granted, 
X+  * provided that the above copyright notice appear in all copies and 
X+  * that both that copyright notice and this permission notice appear 
X+  * in supporting documentation.
X+  *
X+  * Permission to modify the software is granted, but not the right to
X+  * distribute the modified code.  Modifications are to be distributed 
X+  * as patches to released version.
X+  *  
X+  * This software  is provided "as is" without express or implied warranty.
X+  * 
X+  *
X+  * AUTHORS
X+  * 
X+  *   Original Software:
X+  *     Thomas Williams,  Colin Kelley.
X+  * 
X+  *   Gnuplot 2.0 additions:
X+  *       Russell Lang, Dave Kotz, John Campbell.
X+  * 
X+  * send your comments or suggestions to (pixar!info-gnuplot@sun.com).
X+  * 
X+  **************************************
X+  * term.h: terminal support definitions
X+  *   Edit this file depending on the set of terminals you wish to support.
X+  * Comment out the terminal types that you don't want or don't have, and
X+  * uncomment those that you want included. Be aware that some terminal 
X+  * types (eg, SUN, UNIXPLOT) will require changes in the makefile 
X+  * LIBS definition. 
X+  */
X+ 
X+ /* These terminals are not relevant for MSDOS */
X+ #ifndef MSDOS
X+ 
X+ #define AED         /* AED 512 and AED 767 */
X+ #define BITGRAPH    /* BBN BitGraph */
X+ #define HPLJET		/* HP Laserjet */
X+ /* #define IRIS4D      /* IRIS4D series computer */
X+ #define KERMIT      /* MS-Kermit Tektronix 4010 emulator */
X+ /* #define FIG 	  	/* Fig graphics language (requires object.h from TransFig) */
X+ #define REGIS       /* ReGis graphics (vt125, vt220, vt240, Gigis...) */
X+ #define SELANAR     /* Selanar */
X+ /* #define SUN         /* Sun Microsystems Workstation */
X+ #define T410X       /* Tektronix 4106, 4107, 4109 and 420x terminals */
X+ #define TEK         /* Tektronix 4010, and probably others */
X+ /* #define UNIXPC      /* unixpc (ATT 3b1 or ATT 7300) */
X+ /* #define UNIXPLOT    /* unixplot */
X+ /* #define X11         /* X11R4 window system */
X+ 
X+ #endif 
X+ 
X+ /* These terminals can be used on any system */
X+ #define DXY800A		/* Roland DXY800A plotter */
X+ #define EEPIC		/* EEPIC-extended LaTeX driver, for EEPIC users */
X+ #define EMTEX		/* LATEX picture environment with EMTEX specials */
X+ #define EPS60		/* Epson-style 60-dot per inch printers */
X+ #define EPSON		/* Epson LX-800, Star NL-10, NX-1000 and lots of others */
X+ #define HP2648		/* HP2648, HP2647 */
X+ #define HP26		/* HP2623A and maybe others */
X+ #define HP75		/* HP7580, and probably other HPs */
X+ #define HPGL		/* HP7475, HP7220 plotters, and (hopefully) lots of others */
X+ #define IMAGEN  	/* Imagen laser printers (300dpi) (requires -Iterm also) */
X+ #define LATEX       /* LATEX picture environment */
X+ #define NEC         /* NEC CP6 pinwriter printer */
X+ #define POSTSCRIPT  /* Postscript */
X+ #define PROPRINTER  /* IBM Proprinter */
X+ #define QMS         /* QMS/QUIC laserprinter (Talaris 1200 and others) */
X+ #define STARC       /* Star Color Printer */
X+ #define TANDY60		/* Tandy DMP-130 series 60-dot per inch graphics */
X+ #define V384        /* Vectrix 384 and tandy color printer */
X+ 
X+ /* These are for MSDOS only */
X+ #ifdef MSDOS
X+ #ifdef __TURBOC__
X+ #define ATT6300	    /* AT&T 6300 graphics */
X+ #else
X+ #define ATT6300	    /* AT&T 6300 graphics */
X+ #define CORONA      /* Corona graphics 325 */
X+ #define HERCULES    /* IBM PC/Clone with Hercules graphics board */
X+ #endif
X+ #endif
X*** ./term.c	Tue Mar 27 09:02:05 1990
X--- ../patch1/term.c	Thu Sep  6 09:20:17 1990
X***************
X*** 29,34
X  
X  #include <stdio.h>
X  #include "plot.h"
X  
X  /* for use by all drivers */
X  #define sign(x) ((x) >= 0 ? 1 : -1)
X
X--- 29,35 -----
X  
X  #include <stdio.h>
X  #include "plot.h"
X+ #include "term.h"
X  
X  /* for use by all drivers */
X  #define sign(x) ((x) >= 0 ? 1 : -1)
X***************
X*** 242,247
X  #endif
X  #endif
X  
X  #ifdef EPSON
X  #define FONT57
X  #endif
X
X--- 243,266 -----
X  #endif
X  #endif
X  
X+ #ifdef STARC 
X+ #ifndef EPSON
X+ #define EPSON 
X+ #endif
X+ #endif
X+ 
X+ #ifdef TANDY60
X+ #ifndef EPS60
X+ #define EPS60
X+ #endif
X+ #endif
X+ 
X+ #ifdef EPS60
X+ #ifndef EPSON
X+ #define EPSON
X+ #endif
X+ #endif
X+ 
X  #ifdef EPSON
X  #define FONT57
X  #endif
X***************
X*** 282,287
X  # endif
X  #endif
X  
X  #ifdef TEK			/* all TEK types, TEK, BBN, SELANAR, KERMIT */
X  #include "term/tek.trm"
X  #endif
X
X--- 301,310 -----
X  # endif
X  #endif
X  
X+ #ifdef T410X		/* Tektronix 4106, 4107, 4109 and 420x terminals */
X+ #include "term/t410x.trm"
X+ #endif
X+ 
X  #ifdef TEK			/* all TEK types, TEK, BBN, SELANAR, KERMIT */
X  #include "term/tek.trm"
X  #endif
X***************
X*** 286,292
X  #include "term/tek.trm"
X  #endif
X  
X! #ifdef EPSON		/* all bit map types, EPSON, NEC, PROPRINTER */
X  #include "term/epson.trm"
X  #endif
X  
X
X--- 309,315 -----
X  #include "term/tek.trm"
X  #endif
X  
X! #ifdef EPSON	/* bit map types, EPSON, NEC, PROPRINTER, STAR Color */
X  #include "term/epson.trm"
X  #endif
X  
X***************
X*** 290,295
X  #include "term/epson.trm"
X  #endif
X  
X  #ifdef FIG				/* Fig 1.4FS Interactive graphics program */
X  #include "term/fig.trm"
X  #endif
X
X--- 313,322 -----
X  #include "term/epson.trm"
X  #endif
X  
X+ #ifdef EPS60		/* old-style EPSON 60-dpi */
X+ #include "term/eps60.trm"
X+ #endif
X+ 
X  #ifdef FIG				/* Fig 1.4FS Interactive graphics program */
X  #include "term/fig.trm"
X  #endif
X***************
X*** 305,310
X  # endif
X  #endif
X  
X  #ifdef LATEX		/* LATEX type */
X  #include "term/latex.trm"
X  #endif
X
X--- 332,343 -----
X  # endif
X  #endif
X  
X+ #ifdef EMTEX		/* EMTEX (LATEX for PC) type */
X+ # ifndef LATEX
X+ #  define LATEX
X+ # endif
X+ #endif
X+ 
X  #ifdef LATEX		/* LATEX type */
X  #include "term/latex.trm"
X  #endif
X***************
X*** 375,380
X  #include "term/unixplot.trm"
X  #endif /* UNIXPLOT */
X  
X  /* Dummy functions for unavailable features */
X  
X  /* change angle of text.  0 is horizontal left to right.
X
X--- 408,417 -----
X  #include "term/unixplot.trm"
X  #endif /* UNIXPLOT */
X  
X+ #ifdef X11
X+ #include "term/x11.trm"
X+ #endif /* X11 */
X+ 
X  /* Dummy functions for unavailable features */
X  
X  /* change angle of text.  0 is horizontal left to right.
X***************
X*** 464,469
X  	   HERC_text, null_scale, HERC_graphics, HERC_move, HERC_vector,
X  	   HERC_linetype, HERC_put_text, MCGA_text_angle, 
X  	   HERC_justify_text, line_and_point, do_arrow}
X  #else					/* TURBO */
X  
X      ,{"cga", "IBM PC/Clone with CGA graphics board",
X
X--- 501,514 -----
X  	   HERC_text, null_scale, HERC_graphics, HERC_move, HERC_vector,
X  	   HERC_linetype, HERC_put_text, MCGA_text_angle, 
X  	   HERC_justify_text, line_and_point, do_arrow}
X+ #ifdef ATT6300
X+     ,{"att", "IBM PC/Clone with AT&T 6300 graphics board",
X+ 	   ATT_XMAX, ATT_YMAX, ATT_VCHAR, ATT_HCHAR,
X+ 	   ATT_VTIC, ATT_HTIC, ATT_init, ATT_reset,
X+ 	   ATT_text, null_scale, ATT_graphics, ATT_move, ATT_vector,
X+ 	   ATT_linetype, ATT_put_text, ATT_text_angle, 
X+ 	   ATT_justify_text, line_and_point, do_arrow}
X+ #endif
X  #else					/* TURBO */
X  
X      ,{"cga", "IBM PC/Clone with CGA graphics board",
X***************
X*** 506,512
X  #endif					/* HERCULES */
X  
X  #ifdef ATT6300
X!     ,{"att", "AT&T 6300 terminal ???",
X  	   ATT_XMAX, ATT_YMAX, ATT_VCHAR, ATT_HCHAR,
X  	   ATT_VTIC, ATT_HTIC, ATT_init, ATT_reset,
X  	   ATT_text, null_scale, ATT_graphics, ATT_move, ATT_vector,
X
X--- 551,557 -----
X  #endif					/* HERCULES */
X  
X  #ifdef ATT6300
X!     ,{"att", "AT&T PC/6300 graphics",
X  	   ATT_XMAX, ATT_YMAX, ATT_VCHAR, ATT_HCHAR,
X  	   ATT_VTIC, ATT_HTIC, ATT_init, ATT_reset,
X  	   ATT_text, null_scale, ATT_graphics, ATT_move, ATT_vector,
X***************
X*** 558,563
X  	   null_justify_text, do_point, do_arrow}
X  #endif
X  
X  #ifdef EPSON
X      ,{"epson_lx800", "Epson LX-800, Star NL-10, NX-1000 and lots of others",
X  	   EPSONXMAX, EPSONYMAX, EPSONVCHAR, EPSONHCHAR, 
X
X--- 603,636 -----
X  	   null_justify_text, do_point, do_arrow}
X  #endif
X  
X+ #ifdef EEPIC
X+     ,{"eepic", "EEPIC -- extended LaTeX picture environment",
X+ 	   EEPIC_XMAX, EEPIC_YMAX, EEPIC_VCHAR, EEPIC_HCHAR, 
X+ 	   EEPIC_VTIC, EEPIC_HTIC, EEPIC_init, EEPIC_reset, 
X+ 	   EEPIC_text, EEPIC_scale, EEPIC_graphics, EEPIC_move, EEPIC_vector, 
X+ 	   EEPIC_linetype, EEPIC_put_text, EEPIC_text_angle, 
X+ 	   EEPIC_justify_text, EEPIC_point, EEPIC_arrow}
X+ #endif
X+ 
X+ #ifdef EMTEX
X+    
X+     ,{"emtex", "LATEX picture environment with emTeX specials",
X+ 	   LATEX_XMAX, LATEX_YMAX, LATEX_VCHAR, LATEX_HCHAR, 
X+ 	   LATEX_VTIC, LATEX_HTIC, EMTEX_init, EMTEX_reset, 
X+ 	   EMTEX_text, LATEX_scale, LATEX_graphics, LATEX_move, LATEX_vector, 
X+ 	   LATEX_linetype, LATEX_put_text, LATEX_text_angle, 
X+ 	   LATEX_justify_text, LATEX_point, LATEX_arrow}
X+ #endif
X+ 
X+ #ifdef EPS60
X+     ,{"epson_60dpi", "Epson-style 60-dot per inch printers",
X+ 	   EPS60XMAX, EPS60YMAX, EPSONVCHAR, EPSONHCHAR,
X+ 	   EPSONVTIC, EPSONHTIC, EPS60init, EPSONreset,
X+ 	   EPS60text, null_scale, EPSONgraphics, EPSONmove, EPSONvector,
X+ 	   EPSONlinetype, EPSONput_text, EPSON_text_angle,
X+ 	   null_justify_text, do_point, do_arrow}
X+ #endif
X+ 
X  #ifdef EPSON
X      ,{"epson_lx800", "Epson LX-800, Star NL-10, NX-1000 and lots of others",
X  	   EPSONXMAX, EPSONYMAX, EPSONVCHAR, EPSONHCHAR, 
X***************
X*** 675,689
X  	   LATEX_justify_text, LATEX_point, LATEX_arrow}
X  #endif
X  
X- #ifdef EEPIC
X-     ,{"eepic", "EEPIC -- extended LaTeX picture environment",
X- 	   EEPIC_XMAX, EEPIC_YMAX, EEPIC_VCHAR, EEPIC_HCHAR, 
X- 	   EEPIC_VTIC, EEPIC_HTIC, EEPIC_init, EEPIC_reset, 
X- 	   EEPIC_text, EEPIC_scale, EEPIC_graphics, EEPIC_move, EEPIC_vector, 
X- 	   EEPIC_linetype, EEPIC_put_text, EEPIC_text_angle, 
X- 	   EEPIC_justify_text, EEPIC_point, EEPIC_arrow}
X- #endif
X- 
X  #ifdef NEC
X      ,{"nec_cp6m", "NEC printer CP6 Monochrome",
X  	   NECXMAX, NECYMAX, NECVCHAR, NECHCHAR, 
X
X--- 748,753 -----
X  	   LATEX_justify_text, LATEX_point, LATEX_arrow}
X  #endif
X  
X  #ifdef NEC
X      ,{"nec_cp6m", "NEC printer CP6 Monochrome",
X  	   NECXMAX, NECYMAX, NECVCHAR, NECHCHAR, 
X***************
X*** 769,774
X  	   null_justify_text, line_and_point, do_arrow}
X  #endif
X  
X  #ifdef SUN
X      ,{"sun", "SunView window system",
X  	   SUN_XMAX, SUN_YMAX, SUN_VCHAR, SUN_HCHAR, 
X
X--- 833,847 -----
X  	   null_justify_text, line_and_point, do_arrow}
X  #endif
X  
X+ #ifdef STARC
X+     ,{"starc", "Star Color Printer",
X+ 	   STARCXMAX, STARCYMAX, STARCVCHAR, STARCHCHAR, 
X+ 	   STARCVTIC, STARCHTIC, STARCinit, STARCreset, 
X+ 	   STARCtext, null_scale, STARCgraphics, STARCmove, STARCvector, 
X+ 	   STARClinetype, STARCput_text, STARC_text_angle, 
X+ 	   null_justify_text, line_and_point, do_arrow}
X+ #endif
X+ 
X  #ifdef SUN
X      ,{"sun", "SunView window system",
X  	   SUN_XMAX, SUN_YMAX, SUN_VCHAR, SUN_HCHAR, 
X***************
X*** 778,783
X  	   SUN_justify_text, line_and_point, do_arrow}
X  #endif
X  
X  #ifdef TEK
X      ,{"tek40xx", "Tektronix 4010 and others; most TEK emulators",
X  	   TEK40XMAX, TEK40YMAX, TEK40VCHAR, TEK40HCHAR, 
X
X--- 851,874 -----
X  	   SUN_justify_text, line_and_point, do_arrow}
X  #endif
X  
X+ #ifdef TANDY60
X+     ,{"tandy_60dpi", "Tandy DMP-130 series 60-dot per inch graphics",
X+ 	   EPS60XMAX, EPS60YMAX, EPSONVCHAR, EPSONHCHAR,
X+ 	   EPSONVTIC, EPSONHTIC, EPS60init, EPSONreset,
X+ 	   TANDY60text, null_scale, EPSONgraphics, EPSONmove, EPSONvector,
X+ 	   EPSONlinetype, EPSONput_text, EPSON_text_angle,
X+ 	   null_justify_text, do_point, do_arrow}
X+ #endif
X+ 
X+ #ifdef T410X
X+     ,{"tek410x", "Tektronix 4106, 4107, 4109 and 420X terminals",
X+ 	   T410XXMAX, T410XYMAX, T410XVCHAR, T410XHCHAR, 
X+ 	   T410XVTIC, T410XHTIC, T410X_init, T410X_reset, 
X+ 	   T410X_text, null_scale, T410X_graphics, T410X_move, T410X_vector, 
X+ 	   T410X_linetype, T410X_put_text, T410X_text_angle, 
X+ 	   null_justify_text, T410X_point, do_arrow}
X+ #endif
X+ 
X  #ifdef TEK
X      ,{"tek40xx", "Tektronix 4010 and others; most TEK emulators",
X  	   TEK40XMAX, TEK40YMAX, TEK40VCHAR, TEK40HCHAR, 
X***************
X*** 813,818
X  	   V384_linetype, V384_put_text, null_text_angle, 
X  	   null_justify_text, do_point, do_arrow}
X  #endif
X  };
X  
X  #define TERMCOUNT (sizeof(term_tbl)/sizeof(struct termentry))
X
X--- 904,924 -----
X  	   V384_linetype, V384_put_text, null_text_angle, 
X  	   null_justify_text, do_point, do_arrow}
X  #endif
X+ 
X+ #ifdef X11
X+     ,{"x11", "X11 Window System",
X+ 	   X11_XMAX, X11_YMAX, X11_VCHAR, X11_HCHAR, 
X+ 	   X11_VTIC, X11_HTIC, X11_init, X11_reset, 
X+ 	   X11_text, null_scale, X11_graphics, X11_move, X11_vector, 
X+ 	   X11_linetype, X11_put_text, null_text_angle, 
X+ 	   X11_justify_text, line_and_point, do_arrow}
X+     ,{"X11", "X11 Window System - multi-color points",
X+ 	   X11_XMAX, X11_YMAX, X11_VCHAR, X11_HCHAR, 
X+ 	   X11_VTIC, X11_HTIC, X11_init, X11_reset, 
X+ 	   X11_text, null_scale, X11_graphics, X11_move, X11_vector, 
X+ 	   X11_linetype, X11_put_text, null_text_angle, 
X+ 	   X11_justify_text, do_point, do_arrow}
X+ #endif
X  };
X  
X  #define TERMCOUNT (sizeof(term_tbl)/sizeof(struct termentry))
X***************
X*** 985,990
X  			case 4 : term_name = "egalib";
X  					 break;
X  			case 7 : term_name = "hercules";
X  					 break;
X  			case 9 : term_name = "vgalib";
X  					 break;
X
X--- 1091,1098 -----
X  			case 4 : term_name = "egalib";
X  					 break;
X  			case 7 : term_name = "hercules";
X+ 					 break;
X+ 			case 8 : term_name = "att";
X  					 break;
X  			case 9 : term_name = "vgalib";
X  					 break;
X*** ./gnuplot_x11.c	Thu Sep  6 09:22:16 1990
X--- ../patch1/gnuplot_x11.c	Wed Sep  5 21:25:26 1990
X***************
X*** 0
X
X--- 1,241 -----
X+ /*-----------------------------------------------------------------------------
X+  *
X+  *   gnuplot_x11 - X11 outboard terminal driver for gnuplot 2
X+  *
X+  *   Requires installation of companion inboard x11 driver in gnuplot/term.c
X+  *
X+  *   Acknowledgements: 
X+  *      Chris Peterson (MIT) - original Xlib gnuplot support (and Xaw examples)
X+  *      Dana Chee (Bellcore)  - mods to original support for gnuplot 2.0
X+  *      Arthur Smith (Cornell) - graphical-label-widget idea (xplot)
X+  *
X+  *   This code is provided as is and with no warranties of any kind.
X+  *       
X+  *   Ed Kubaitis
X+  *   Computing Services Office -  University of Illinois, Urbana
X+  *---------------------------------------------------------------------------*/
X+  
X+ #include <stdio.h>
X+ #include <X11/Intrinsic.h>
X+ #include <X11/StringDefs.h>
X+ #include <Cardinals.h>      /* use -Idir for location on your system */
X+ #include <Label.h>          /* use -Idir for location on your system */
X+ 
X+ 
X+ #define Color (D>1)
X+ #define Ncolors 11
X+ unsigned long colors[Ncolors];
X+ char color_keys[Ncolors][30] =   { "text", "border", "axis", 
X+    "line1", "line2", "line3", "line4", "line5", "line6", "line7", "line8" };
X+ 
X+ char color_values[Ncolors][30] = { "black", "black", "black", 
X+    "red",  "green", "blue",  "magenta", "cyan", "sienna", "orange", "coral" };
X+ 
X+ char dashes[10][5] = { {0}, {1,6,0}, 
X+    {0}, {4,2,0}, {1,3,0}, {4,4,0}, {1,5,0}, {4,4,4,1,0}, {4,2,0}, {1,3,0}
X+    };
X+ 
X+ Widget w_top, w_label;
X+ Window win;  Display *dpy;
X+ Pixmap pixmap;  GC gc = (GC)NULL;
X+ XFontStruct *font;
X+ unsigned long fg, bg;
X+ Dimension W = 640 , H = 450;  int D;
X+ Arg args[5];
X+ static void gnuplot(), resize();
X+ 
X+ int cx=0, cy=0, vchar, nc = 0;
X+ double xscale, yscale;
X+ #define X(x) (Dimension) (x * xscale)
X+ #define Y(y) (Dimension) ((4095-y) * yscale)
X+ enum JUSTIFY { LEFT, CENTRE, RIGHT } jmode;
X+ #define Nbuf 1024
X+ char buf[Nbuf];
X+ String *commands = NULL;
X+ 
X+ /*-----------------------------------------------------------------------------
X+  *   main program - fire up application and callbacks
X+  *---------------------------------------------------------------------------*/
X+ 
X+ main(argc, argv) int argc; char *argv[]; {
X+ 
X+    /* initialize application */
X+    w_top = XtInitialize("gnuplot", "Gnuplot", NULL, 0, &argc, argv);
X+    XtSetArg(args[0], XtNwidth, W);
X+    XtSetArg(args[1], XtNheight, H);
X+    w_label = XtCreateManagedWidget("", labelWidgetClass, w_top, args, TWO);
X+    XtRealizeWidget(w_top);
X+ 
X+    /* extract needed information */
X+    dpy = XtDisplay(w_top); win = XtWindow(w_top); D = DisplayPlanes(dpy,0);
X+    if (Color) {
X+       char option[20], *value; 
X+       XColor used, exact;
X+       int n;
X+ 
X+       for(n=0; n<Ncolors; n++) {
X+ 	 strcpy(option, color_keys[n]);
X+ 	 strcat(option, "Color");
X+ 	 value = XGetDefault(dpy, "gnuplot", option);
X+ 	 if (!value) { value = color_values[n]; }
X+ 	 if (XAllocNamedColor(dpy, DefaultColormap(dpy,0), value, &used,&exact))
X+ 	    colors[n] = used.pixel; 
X+ 	 else {
X+ 	    fprintf(stderr, "gnuplot: cannot allocate %s:%s\n", option, value);
X+ 	    fprintf(stderr, "gnuplot: assuming %s:black\n", option);
X+ 	    colors[n] = BlackPixel(dpy,0);
X+ 	    }
X+ 	 }
X+       }
X+    XtSetArg(args[0], XtNfont, &font);
X+    XtSetArg(args[1], XtNforeground, &fg);
X+    XtSetArg(args[2], XtNbackground, &bg);
X+    XtSetArg(args[3], XtNwidth, &W);
X+    XtSetArg(args[4], XtNheight,&H);
X+    XtGetValues(w_label, args, FIVE);
X+    vchar = (font->ascent + font->descent);
X+ 
X+    /* add callbacks on input-from-gnuplot-on-stdin & window-resized */
X+    XtAddInput(0, XtInputReadMask, gnuplot, NULL);
X+    XtAddEventHandler(w_label, StructureNotifyMask, FALSE, resize, NULL);
X+ 
X+    XtMainLoop();
X+    }
X+ 
X+ /*-----------------------------------------------------------------------------
X+  *   display - display accumulated commands from inboard driver
X+  *---------------------------------------------------------------------------*/
X+ 
X+ display() {
X+    int n, x, y, sw, sl, lt, width, type;
X+    char *buf, *str;
X+ 
X+    /* set scaling factor between internal driver & window geometry */
X+    xscale = (double)W / 4096.;  yscale = (double)H / 4096.;  
X+ 
X+    /* return old pixmap  & GC, if any */
X+    if (gc) { XFreeGC(dpy, gc); XFreePixmap(dpy, pixmap); }
X+ 
X+    /* create new pixmap & GC */
X+    pixmap = XCreatePixmap(dpy, DefaultRootWindow(dpy), W, H, D);
X+    gc = XCreateGC(dpy, pixmap, 0, NULL);
X+    XSetFont(dpy, gc, font->fid);
X+ 
X+    /* connect new pixmap to label widget */
X+    XtSetArg(args[0], XtNbitmap, pixmap);
X+    XtSetValues(w_label, args, ONE);
X+ 
X+    /* erase pixmap */
X+    if (Color) {
X+       XSetForeground(dpy, gc, bg);
X+       XFillRectangle(dpy, pixmap, gc, 0, 0, W, H);
X+       XSetForeground(dpy, gc, fg);
X+       XSetBackground(dpy, gc, bg);
X+       }
X+    else {
X+       XSetFunction(dpy, gc, GXxor);
X+       XCopyArea(dpy, pixmap, pixmap, gc, 0, 0, W, H, 0, 0);
X+       XSetFunction(dpy, gc, GXcopyInverted);
X+       }
X+ 
X+    /* loop over accumulated commands from inboard driver */
X+    for (n=0; n<nc; n++) {
X+       buf = commands[n];
X+ 
X+       /*   X11_vector(x,y) - draw vector  */
X+       if (*buf == 'V') { 
X+ 	 sscanf(buf, "V%4d%4d", &x, &y);  
X+ 	 XDrawLine(dpy, pixmap, gc, X(cx), Y(cy), X(x), Y(y));
X+ 	 cx = x; cy = y;
X+ 	 }
X+ 
X+       /*   X11_move(x,y) - move  */
X+       else if (*buf == 'M') 
X+ 	 sscanf(buf, "M%4d%4d", &cx, &cy);  
X+ 
X+       /*   X11_put_text(x,y,str) - draw text   */
X+       else if (*buf == 'T') { 
X+ 	 sscanf(buf, "T%4d%4d", &x, &y);  
X+ 	 str = buf + 9; sl = strlen(str) - 1;
X+ 	 sw = XTextWidth(font, str, sl);
X+ 	 switch(jmode) {
X+ 	    case LEFT:   sw = 0;     break;
X+ 	    case CENTRE: sw = -sw/2; break;
X+ 	    case RIGHT:  sw = -sw;   break;
X+ 	    }
X+ 	 if (!Color) 
X+ 	    XDrawString(dpy, pixmap, gc, X(x)+sw, Y(y)+vchar/3, str, sl);
X+ 	 else { 
X+ 	    XSetForeground(dpy, gc, colors[0]);
X+ 	    XDrawString(dpy, pixmap, gc, X(x)+sw, Y(y)+vchar/3, str, sl);
X+ 	    XSetForeground(dpy, gc, colors[lt+1]);
X+ 	    }
X+ 	 }
X+ 
X+       /*   X11_justify_text(mode) - set text justification mode  */
X+       else if (*buf == 'J') 
X+ 	 sscanf(buf, "J%4d", &jmode);
X+ 
X+       /*   X11_linetype(type) - set line type  */
X+       else if (*buf == 'L') { 
X+ 	 sscanf(buf, "L%4d", &lt);
X+ 	 lt = (lt+2)%10;
X+ 	 width = (lt == 0) ? 2 : 0;
X+ 	 if (Color) {
X+ 	    if (lt != 1) 
X+ 	       type = LineSolid;
X+ 	    else {
X+ 	       type = LineOnOffDash;
X+ 	       XSetDashes(dpy, gc, 0, dashes[lt], strlen(dashes[lt]));
X+ 	       }
X+ 	    XSetForeground(dpy, gc, colors[lt+1]);
X+ 	    }
X+ 	 else {
X+ 	    type  = (lt == 0 || lt == 2) ? LineSolid : LineOnOffDash;
X+ 	    if (dashes[lt][0])
X+ 	       XSetDashes(dpy, gc, 0, dashes[lt], strlen(dashes[lt]));
X+ 	    }
X+ 	 XSetLineAttributes( dpy,gc, width, type, CapButt, JoinBevel);
X+ 	 }
X+       }
X+ 
X+    /* trigger expose events to display pixmap */
X+    XClearArea(dpy, win, 0, 0, 0, 0, True);
X+    }
X+ 
X+ /*-----------------------------------------------------------------------------
X+  *   gnuplot - Xt callback on input from gnuplot inboard X11 driver
X+  *---------------------------------------------------------------------------*/
X+ 
X+ static void
X+ gnuplot(cd, s, id) char *cd; int *s; XtInputId *id; {
X+ 
X+    while (fgets(buf, Nbuf, stdin)) {
X+      if (*buf == 'G') {                           /* enter graphics mode */
X+ 	 if (commands) {
X+ 	    int n;
X+ 	    for (n=0; n<nc; n++) XtFree(commands[n]);
X+ 	    XtFree(commands);
X+ 	    }
X+ 	 commands = NULL; nc = 0;
X+          }
X+       else if (*buf == 'E') { display(); break; } /* leave graphics mode */
X+       else if (*buf == 'R') { exit(0); }          /* leave X11/x11 mode  */
X+       else {
X+ 	 commands = (String *)XtRealloc(commands, (nc+1) * sizeof(String));
X+ 	 commands[nc++] = XtNewString(buf);
X+ 	 }
X+       }
X+    if (feof(stdin) || ferror(stdin)) exit(0);
X+    }
X+ 
X+ /*-----------------------------------------------------------------------------
X+  *   resize - Xt callback when window resized
X+  *---------------------------------------------------------------------------*/
X+ 
X+ static void
X+ resize(w, cd, e) Widget w; char *cd; XConfigureEvent *e; {
X+    if (e->type != ConfigureNotify) return;
X+    W = e->width; H = e->height;
X+    display(); 
X+    }
END_OF_patch1c
if test 73914 -ne `wc -c <patch1c`; then
    echo shar: \"patch1c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of shell archive.
exit 0