rjl@monu1.cc.monash.edu.au (Russell Lang) (01/05/91)
Submitted-by: Russell Lang <rjl@monu1.cc.monash.edu.au> Posting-number: Volume 16, Issue 12 Archive-name: gnuplot2.02/patch2 Patch-To: gnuplot2.0: Volume 11, Issue 65-79 #! /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: patch2a # Wrapped by eln272v@monu1 on Wed Dec 19 11:57:18 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f patch2a -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"patch2a\" else echo shar: Extracting \"patch2a\" \(50620 characters\) sed "s/^X//" >patch2a <<'END_OF_patch2a' Xdiff -cr ./README ../gnuplot2.02/README X*** ./README Tue Sep 18 14:56:36 1990 X--- ../gnuplot2.02/README Tue Dec 11 16:40:48 1990 X*************** X*** 208,213 X AED AED 512 and AED 767 X ATT6300 PC with AT&T 6300 graphics X BITGRAPH BBN BitGraph X CORONA PC with Corona graphics 325 X DXY800A Roland DXY800A plotter X EEPIC EEPIC-extended LaTeX driver, for EEPIC users X X--- 208,214 ----- X AED AED 512 and AED 767 X ATT6300 PC with AT&T 6300 graphics X BITGRAPH BBN BitGraph X+ CGI SCO CGI X CORONA PC with Corona graphics 325 X DXY800A Roland DXY800A plotter X EEPIC EEPIC-extended LaTeX driver, for EEPIC users X*************** X*** 220,226 X HP26 HP2623A and maybe others X HP75 HP7580, and probably other HPs X HPGL HP7475 and (hopefully) lots of others X! HPLJET HP Laserjet X IMAGEN Imagen laser printers (300dpi) (requires -Iterm also) X IRIS4D IRIS4D series computer X KERMIT MS-Kermit Tektronix 4010 emulator X X--- 221,227 ----- X HP26 HP2623A and maybe others X HP75 HP7580, and probably other HPs X HPGL HP7475 and (hopefully) lots of others X! HPLJII HP Laserjet II X IMAGEN Imagen laser printers (300dpi) (requires -Iterm also) X IRIS4D IRIS4D series computer X KERMIT MS-Kermit Tektronix 4010 emulator X*************** X*** 227,233 X LATEX LATEX picture environment X NEC NEC CP6 pinwriter printer X POSTSCRIPT Postscript X! PROPRINTER IBM Proprinter X QMS QMS/QUIC laserprinter (Talaris 1200 and others) X REGIS ReGis graphics (vt125, vt220, vt240, Gigis...) X SELANAR Selanar X X--- 228,234 ----- X LATEX LATEX picture environment X NEC NEC CP6 pinwriter printer X POSTSCRIPT Postscript X! PRESCRIBE Kyocera Laser printer X QMS QMS/QUIC laserprinter (Talaris 1200 and others) X REGIS ReGis graphics (vt125, vt220, vt240, Gigis...) X SELANAR Selanar X*************** X*** 239,244 X UNIXPC unixpc (ATT 3b1 or ATT 7300) X UNIXPLOT unixplot X V384 Vectrix 384 and tandy color printer X X11 X11R4 window system X X X X--- 240,246 ----- X UNIXPC unixpc (ATT 3b1 or ATT 7300) X UNIXPLOT unixplot X V384 Vectrix 384 and tandy color printer X+ VTTEK VT like Tektronix 4010 emulator X X11 X11R4 window system X X X*************** X*** 279,285 X X under MSDOS: X Using Microsoft C 5.10. X! make makefile.msc X X Using Turbo C 2.0. X make -fmakefile.tc X X--- 281,288 ----- X X under MSDOS: X Using Microsoft C 5.10. X! copy makefile.msc X! make makefile X X Using Turbo C 2.0. X copy makefile.tc X*************** X*** 282,288 X make makefile.msc X X Using Turbo C 2.0. X! make -fmakefile.tc X X The file gnuplot.gih is needed for help on the PC. X If the file gnuplot.gih is not in the default directory, then use: X X--- 285,293 ----- X make makefile X X Using Turbo C 2.0. X! copy makefile.tc X! Edit makefile to change TC, BIN, BGI. X! make X X The file gnuplot.gih is needed for help on the PC. X If the file gnuplot.gih is not in the default directory, then use: Xdiff -cr ./README.x11 ../gnuplot2.02/README.x11 X*** ./README.x11 Tue Sep 18 14:56:39 1990 X--- ../gnuplot2.02/README.x11 Mon Nov 26 02:31:27 1990 X*************** X*** 1,4 X! Gnuplot Support for X11 X ----------------------- X 31 August 1990 X X X--- 1,4 ----- X! Gnuplot (patch 2) Support for X11 X ----------------------- X 24 November 1990 X X*************** X*** 1,6 X Gnuplot Support for X11 X ----------------------- X! 31 August 1990 X X Installing gnuplot X11 support requires: X X X--- 1,6 ----- X Gnuplot (patch 2) Support for X11 X ----------------------- X! 24 November 1990 X X Installing gnuplot X11 support requires: X X*************** X*** 10,19 X X o compilation of the outboard X11 terminal driver gnuplot_x11 X X- o additions to the gnuplot(1) man page to describe command line X- options and tailorable resources available when gnuplot terminal X- types x11 or X11 are used. X- X makefile.x11 (a modified version of makefile.unx) provides these additional X functions. The X11LIBS and X11INCLUDES parameters should be set to point to X the X11 libraries and include files on your system. Comments give settings X X--- 10,15 ----- X X o compilation of the outboard X11 terminal driver gnuplot_x11 X X makefile.x11 (a modified version of makefile.unx) provides these additional X functions. The X11LIBS and X11INCLUDES parameters should be set to point to X the X11 libraries and include files on your system. Comments give settings X*************** X*** 17,23 X makefile.x11 (a modified version of makefile.unx) provides these additional X functions. The X11LIBS and X11INCLUDES parameters should be set to point to X the X11 libraries and include files on your system. Comments give settings X! for several systems. X X Sorry, as of this writing no support is available for systems without the X Athena widget library (libXaw.a), or platforms other than unix. X X--- 13,20 ----- X makefile.x11 (a modified version of makefile.unx) provides these additional X functions. The X11LIBS and X11INCLUDES parameters should be set to point to X the X11 libraries and include files on your system. Comments give settings X! for several systems. The X11FLAGS parameter should be set to "-DMOTIF" to X! compile for the Motif (libXm.a) rather than Athena (libXaw.a) widget library. X X The gnuplot man page describes command line options and tailorable resources X available when gnuplot terminal types x11 or X11 are used. X*************** X*** 19,26 X the X11 libraries and include files on your system. Comments give settings X for several systems. X X! Sorry, as of this writing no support is available for systems without the X! Athena widget library (libXaw.a), or platforms other than unix. X X Differences from "xgnuplot" X --------------------------- X X--- 16,23 ----- X for several systems. The X11FLAGS parameter should be set to "-DMOTIF" to X compile for the Motif (libXm.a) rather than Athena (libXaw.a) widget library. X X! The gnuplot man page describes command line options and tailorable resources X! available when gnuplot terminal types x11 or X11 are used. X X Sorry, as of this writing no support is available for platforms other than unix. X X*************** X*** 22,27 X Sorry, as of this writing no support is available for systems without the X Athena widget library (libXaw.a), or platforms other than unix. X X Differences from "xgnuplot" X --------------------------- X X X--- 19,26 ----- X The gnuplot man page describes command line options and tailorable resources X available when gnuplot terminal types x11 or X11 are used. X X+ Sorry, as of this writing no support is available for platforms other than unix. X+ X Differences from "xgnuplot" X --------------------------- X This X11 support is based on the xgnuplot wrapper/terminal driver distributed X*************** X*** 24,29 X X Differences from "xgnuplot" X --------------------------- X X This X11 support is based on (and replaces) the xgnuplot wrapper/terminal X driver which was distributed separately from gnuplot. Differences: X X--- 23,30 ----- X X Differences from "xgnuplot" X --------------------------- X+ This X11 support is based on the xgnuplot wrapper/terminal driver distributed X+ separately from gnuplot. Differences: X X o Gnuplot silently invokes the outboard driver, rather than vice versa. X Thus resource names in .Xdefaults begin with "gnuplot" rather than X*************** X*** 25,33 X Differences from "xgnuplot" X --------------------------- X X- This X11 support is based on (and replaces) the xgnuplot wrapper/terminal X- driver which was distributed separately from gnuplot. Differences: X- X o Gnuplot silently invokes the outboard driver, rather than vice versa. X Thus resource names in .Xdefaults begin with "gnuplot" rather than X "xgnuplot". En passant, this change fixed the bug where xgnuplot would X X--- 26,31 ----- X This X11 support is based on the xgnuplot wrapper/terminal driver distributed X separately from gnuplot. Differences: X X o Gnuplot silently invokes the outboard driver, rather than vice versa. X Thus resource names in .Xdefaults begin with "gnuplot" rather than X "xgnuplot". X*************** X*** 30,38 X X o Gnuplot silently invokes the outboard driver, rather than vice versa. X Thus resource names in .Xdefaults begin with "gnuplot" rather than X! "xgnuplot". En passant, this change fixed the bug where xgnuplot would X! hang until Ctrl-C when gnuplot was exited without plotting at least X! one x11/X11 plot. X X o When the window is resized, the currently displayed plot is automatically X rescaled and replotted. X X--- 28,34 ----- X X o Gnuplot silently invokes the outboard driver, rather than vice versa. X Thus resource names in .Xdefaults begin with "gnuplot" rather than X! "xgnuplot". X X o When the window is resized, the currently displayed plot is automatically X rescaled and replotted. X*************** X*** 37,48 X o When the window is resized, the currently displayed plot is automatically X rescaled and replotted. X X! o Compiles under X11 R3 as well as R4. This required using XtInitialize X! instead of XtAppInitialize, (char *) instead of XtPointer for callback X! client data declarations, removing a reference to XGetGCValues, and X! parameterizing (X11INCLUDES in makefile.x11) the location of the needed X! Athena include files. X! X X --------------------------------- X Ed Kubaitis, ejk@uxh.cso.uiuc.edu X X--- 33,40 ----- X o When the window is resized, the currently displayed plot is automatically X rescaled and replotted. X X! o Compiles under X11 R3 as well as R4 and with either the Athena or Motif X! widget libraries. X X --------------------------------- X Ed Kubaitis, ejk@uxh.cso.uiuc.edu XCommon subdirectories: ./bugtest and ../gnuplot2.02/bugtest Xdiff -cr ./buildvms.com ../gnuplot2.02/buildvms.com X*** ./buildvms.com Tue Sep 18 14:56:40 1990 X--- ../gnuplot2.02/buildvms.com Tue Dec 4 11:43:40 1990 X*************** X*** 3,8 X $ !TERMFLAGS = "/define=()" X $ TERMFLAGS = "" X $ set verify X $ cc 'CFLAGS' command.c X $ cc 'CFLAGS' eval.c X $ cc 'CFLAGS' graphics.c X X--- 3,9 ----- X $ !TERMFLAGS = "/define=()" X $ TERMFLAGS = "" X $ set verify X+ $ cc 'CFLAGS' bitmap.c X $ cc 'CFLAGS' command.c X $ cc 'CFLAGS' eval.c X $ cc 'CFLAGS' graphics.c X*************** X*** 17,23 X $ cc 'CFLAGS' util.c X $ cc 'CFLAGS' version.c X $ link /exe=gnuplot - X! command.obj,eval.obj,graphics.obj,internal.obj, - X misc.obj,parse.obj,plot.obj,scanner.obj,setshow.obj, - X standard.obj,term.obj,util.obj,version.obj ,linkopt.vms/opt X $ cc [.docs]doc2hlp.c X X--- 18,24 ----- X $ cc 'CFLAGS' util.c X $ cc 'CFLAGS' version.c X $ link /exe=gnuplot - X! bitmap.obj,command.obj,eval.obj,graphics.obj,internal.obj, - X misc.obj,parse.obj,plot.obj,scanner.obj,setshow.obj, - X standard.obj,term.obj,util.obj,version.obj ,linkopt.vms/opt X $ cc [.docs]doc2hlp.c Xdiff -cr ./command.c ../gnuplot2.02/command.c X*** ./command.c Tue Sep 18 14:56:42 1990 X--- ../gnuplot2.02/command.c Thu Nov 29 10:13:34 1990 X*************** X*** 75,81 X extern int strlen(), strcmp(); X X #ifdef unix X! extern char *getwd(); X #else X extern char *getcwd(); X #endif X X--- 75,82 ----- X extern int strlen(), strcmp(); X X #ifdef unix X! #ifdef GETCWD X! extern char *getcwd(); /* some Unix's use getcwd */ X #else X extern char *getwd(); /* most Unix's use getwd */ X #endif X*************** X*** 77,83 X #ifdef unix X extern char *getwd(); X #else X! extern char *getcwd(); X #endif X extern int chdir(); X X X--- 78,84 ----- X #ifdef GETCWD X extern char *getcwd(); /* some Unix's use getcwd */ X #else X! extern char *getwd(); /* most Unix's use getwd */ X #endif X #else X extern char *getcwd(); /* Turbo C, MSC and VMS use getcwd */ X*************** X*** 79,84 X #else X extern char *getcwd(); X #endif X extern int chdir(); X X extern double magnitude(),angle(),real(),imag(); X X--- 80,88 ----- X #else X extern char *getwd(); /* most Unix's use getwd */ X #endif X+ #else X+ extern char *getcwd(); /* Turbo C, MSC and VMS use getcwd */ X+ #endif X extern int chdir(); X X extern double magnitude(),angle(),real(),imag(); X*************** X*** 287,294 X } X else if (almost_equals(c_token,"pwd")) { X #ifdef unix X! /* unix has getwd() */ X! (void) getwd(sv_file); X #else X /* Turbo C and VMS have getcwd() */ X (void) getcwd(sv_file,MAX_ID_LEN); X X--- 291,298 ----- X } X else if (almost_equals(c_token,"pwd")) { X #ifdef unix X! #ifdef GETCWD X! (void) getcwd(sv_file,MAX_ID_LEN); /* some Unix's use getcwd */ X #else X (void) getwd(sv_file); /* most Unix's use getwd */ X #endif X*************** X*** 290,295 X /* unix has getwd() */ X (void) getwd(sv_file); X #else X /* Turbo C and VMS have getcwd() */ X (void) getcwd(sv_file,MAX_ID_LEN); X #endif X X--- 294,302 ----- X #ifdef GETCWD X (void) getcwd(sv_file,MAX_ID_LEN); /* some Unix's use getcwd */ X #else X+ (void) getwd(sv_file); /* most Unix's use getwd */ X+ #endif X+ #else X /* Turbo C and VMS have getcwd() */ X (void) getcwd(sv_file,MAX_ID_LEN); X #endif X*************** X*** 328,333 X X X plotrequest() X { X BOOLEAN changed; X int dummy_token = -1; X X--- 335,346 ----- X X X plotrequest() X+ /* X+ In the parametric case we can say X+ plot [a= -4:4] [-2:2] [-1:1] sin(a),a**2 X+ while in the non-parametric case we would say only X+ plot [b= -2:2] [-1:1] sin(b) X+ */ X { X BOOLEAN changed; X int dummy_token = -1; X*************** X*** 332,337 X BOOLEAN changed; X int dummy_token = -1; X X autoscale_lx = autoscale_x; X autoscale_ly = autoscale_y; X X X--- 345,351 ----- X BOOLEAN changed; X int dummy_token = -1; X X+ autoscale_lt = autoscale_t; X autoscale_lx = autoscale_x; X autoscale_ly = autoscale_y; X X*************** X*** 350,355 X /* used to be: int_error("'=' expected",c_token); */ X } X } X changed = load_range(&xmin,&xmax); X if (!equals(c_token,"]")) X int_error("']' expected",c_token); X X--- 364,383 ----- X /* used to be: int_error("'=' expected",c_token); */ X } X } X+ changed = parametric ? load_range(&tmin,&tmax):load_range(&xmin,&xmax); X+ if (!equals(c_token,"]")) X+ int_error("']' expected",c_token); X+ c_token++; X+ if (changed) { X+ if (parametric) X+ autoscale_lt = FALSE; X+ else X+ autoscale_lx = FALSE; X+ } X+ } X+ X+ if (parametric && equals(c_token,"[")) { /* set optional x ranges */ X+ c_token++; X changed = load_range(&xmin,&xmax); X if (!equals(c_token,"]")) X int_error("']' expected",c_token); X*************** X*** 417,422 X register FILE *fp; X float x, y; X int npoints; /* number of points and breaks read */ X X quote_str(data_file, c_token); X this_plot->plot_type = DATA; X X--- 445,453 ----- X register FILE *fp; X float x, y; X int npoints; /* number of points and breaks read */ X+ float temp; X+ BOOLEAN yfirst; X+ char format[MAX_LINE_LEN+1]; X X quote_str(data_file, c_token); X this_plot->plot_type = DATA; X*************** X*** 423,428 X if ((fp = fopen(data_file, "r")) == (FILE *)NULL) X os_error("can't open data file", c_token); X X l_num = 0; X datum = 0; X i = 0; X X--- 454,483 ----- X if ((fp = fopen(data_file, "r")) == (FILE *)NULL) X os_error("can't open data file", c_token); X X+ format[0] = '\0'; X+ yfirst = FALSE; X+ c_token++; /* skip data file name */ X+ if (almost_equals(c_token,"u$sing")) { X+ c_token++; /* skip "using" */ X+ if (!isstring(c_token)) { X+ if ( equals(c_token,"xy") || equals(c_token,"y") ) X+ yfirst = FALSE; X+ else if (equals(c_token,"yx")) X+ yfirst = TRUE; X+ else X+ int_error("expecting xy, yx, y or format (scanf) string",c_token); X+ c_token++; /* skip "xy", "yx" or "y" */ X+ } X+ if (isstring(c_token)) { X+ quotel_str(format, c_token); X+ c_token++; /* skip format */ X+ } X+ else X+ int_error("expecting format (scanf) string",c_token); X+ } X+ if (strlen(format) == 0) X+ strcpy(format,"%f %f"); X+ X l_num = 0; X datum = 0; X i = 0; X*************** X*** 441,447 X continue; X } X X! switch (sscanf(line, "%f %f", &x, &y)) { X case 1: { /* only one number on the line */ X y = x; /* assign that number to y */ X x = datum; /* and make the index into x */ X X--- 496,502 ----- X continue; X } X X! switch (sscanf(line, format, &x, &y)) { X case 1: { /* only one number on the line */ X y = x; /* assign that number to y */ X x = datum; /* and make the index into x */ X*************** X*** 448,453 X /* no break; !!! */ X } X case 2: { X datum++; X this_plot->points[i].type = INRANGE; X X X--- 503,513 ----- X /* no break; !!! */ X } X case 2: { X+ if (yfirst) { /* exchange x and y */ X+ temp = y; X+ y = x; X+ x = temp; X+ } X datum++; X this_plot->points[i].type = INRANGE; X X*************** X*** 517,523 X { X register int i; X register struct curve_points *this_plot, **tp_ptr; X! register int start_token, mysamples; X register int begin_token; X register double x_min, x_max, y_min, y_max, x; X register double xdiff, temp; X X--- 577,583 ----- X { X register int i; X register struct curve_points *this_plot, **tp_ptr; X! register int start_token, end_token, mysamples; X register int begin_token; X double x_min, x_max, y_min, y_max; X register double x, xdiff, temp; X*************** X*** 519,526 X register struct curve_points *this_plot, **tp_ptr; X register int start_token, mysamples; X register int begin_token; X! register double x_min, x_max, y_min, y_max, x; X! register double xdiff, temp; X static struct value a; X BOOLEAN some_data_files = FALSE; X int plot_num, line_num, point_num; X X--- 579,586 ----- X register struct curve_points *this_plot, **tp_ptr; X register int start_token, end_token, mysamples; X register int begin_token; X! double x_min, x_max, y_min, y_max; X! register double x, xdiff, temp; X static struct value a; X BOOLEAN ltmp, some_data_files = FALSE; X int plot_num, line_num, point_num, xparam=0; X*************** X*** 522,529 X register double x_min, x_max, y_min, y_max, x; X register double xdiff, temp; X static struct value a; X! BOOLEAN some_data_files = FALSE; X! int plot_num, line_num, point_num; X X mysamples = samples; X X X--- 582,591 ----- X double x_min, x_max, y_min, y_max; X register double x, xdiff, temp; X static struct value a; X! BOOLEAN ltmp, some_data_files = FALSE; X! int plot_num, line_num, point_num, xparam=0; X! char *xtitle; X! void parametric_fixup(); X X mysamples = samples; X X*************** X*** 569,574 X } X X if (isstring(c_token)) { /* data file to plot */ X if (!some_data_files && autoscale_lx) { X xmin = VERYLARGE; X xmax = -VERYLARGE; X X--- 631,640 ----- X } X X if (isstring(c_token)) { /* data file to plot */ X+ if (parametric && xparam) X+ int_error("previous parametric function not fully specified", X+ c_token); X+ X if (!some_data_files && autoscale_lx) { X xmin = VERYLARGE; X xmax = -VERYLARGE; X*************** X*** 577,584 X X this_plot->plot_type = DATA; X this_plot->plot_style = data_style; X! get_data(this_plot); X! c_token++; X } X else { /* function to plot */ X this_plot->plot_type = FUNC; X X--- 643,650 ----- X X this_plot->plot_type = DATA; X this_plot->plot_style = data_style; X! end_token = c_token; X! get_data(this_plot); /* this also parses the using option */ X } X else { /* function to plot */ X if (parametric) /* working on x parametric function */ X*************** X*** 581,586 X c_token++; X } X else { /* function to plot */ X this_plot->plot_type = FUNC; X this_plot->plot_style = func_style; X dummy_func = &plot_func; X X--- 647,654 ----- X get_data(this_plot); /* this also parses the using option */ X } X else { /* function to plot */ X+ if (parametric) /* working on x parametric function */ X+ xparam = 1 - xparam; X this_plot->plot_type = FUNC; X this_plot->plot_style = func_style; X dummy_func = &plot_func; X*************** X*** 586,591 X dummy_func = &plot_func; X plot_func.at = temp_at(); X /* ignore it for now */ X } X X if (almost_equals(c_token,"t$itle")) { X X--- 654,660 ----- X dummy_func = &plot_func; X plot_func.at = temp_at(); X /* ignore it for now */ X+ end_token = c_token-1; X } X X if (almost_equals(c_token,"t$itle")) { X*************** X*** 589,594 X } X X if (almost_equals(c_token,"t$itle")) { X c_token++; X if ( (input_line[token[c_token].start_index]=='\'') X ||(input_line[token[c_token].start_index]=='"') ) { X X--- 658,671 ----- X } X X if (almost_equals(c_token,"t$itle")) { X+ if (parametric) { X+ if (xparam) X+ int_error( X+ "\"title\" allowed only after parametric function fully specified", X+ c_token); X+ else if (xtitle != NULL) X+ xtitle[0] = '\0'; /* Remove default title .*/ X+ } X c_token++; X if ( (input_line[token[c_token].start_index]=='\'') X ||(input_line[token[c_token].start_index]=='"') ) { X*************** X*** 599,609 X } X c_token++; X } X! else { X! m_capture(&(this_plot->title),start_token,c_token-1); X! } X! X! this_plot->line_type = line_num; X this_plot->point_type = point_num; X X if (almost_equals(c_token,"w$ith")) { X X--- 676,687 ----- X } X c_token++; X } X! else { X! m_capture(&(this_plot->title),start_token,end_token); X! if (xparam) xtitle = this_plot->title; X! } X! X! this_plot->line_type = line_num; X this_plot->point_type = point_num; X X if (almost_equals(c_token,"w$ith")) { X*************** X*** 607,612 X this_plot->point_type = point_num; X X if (almost_equals(c_token,"w$ith")) { X this_plot->plot_style = get_style(); X } X X X--- 685,693 ----- X this_plot->point_type = point_num; X X if (almost_equals(c_token,"w$ith")) { X+ if (parametric && xparam) X+ int_error("\"with\" allowed only after parametric function fully specified", X+ c_token); X this_plot->plot_style = get_style(); X } X X*************** X*** 620,627 X } X if ( (this_plot->plot_style == POINTS) || X (this_plot->plot_style == LINESPOINTS) ) X! point_num++; X! line_num++; X X tp_ptr = &(this_plot->next_cp); X } X X--- 701,708 ----- X } X if ( (this_plot->plot_style == POINTS) || X (this_plot->plot_style == LINESPOINTS) ) X! if (!xparam) point_num++; X! if (!xparam) line_num++; X X tp_ptr = &(this_plot->next_cp); X } X*************** X*** 632,637 X break; X } X X /*** Second Pass: Evaluate the functions ***/ X /* Everything is defined now, except the function data. We expect X * no syntax errors, etc, since the above parsed it all. This makes X X--- 713,728 ----- X break; X } X X+ if (parametric && xparam) X+ int_error("parametric function not fully specified", NO_CARET); X+ X+ if (parametric) { X+ /* Swap t and x ranges for duration of these eval_plot computations. */ X+ ltmp = autoscale_lx; autoscale_lx = autoscale_lt; autoscale_lt = ltmp; X+ temp = xmin; xmin = tmin; tmin = temp; X+ temp = xmax; xmax = tmax; tmax = temp; X+ } X+ X /*** Second Pass: Evaluate the functions ***/ X /* Everything is defined now, except the function data. We expect X * no syntax errors, etc, since the above parsed it all. This makes X*************** X*** 639,645 X */ X if (xmin == xmax) X if (autoscale_lx) { X! fprintf(stderr, "Warning: empty x range [%g:%g], ", xmin,xmax); X if (xmin == 0.0) { X /* completely arbitary */ X xmin = -1.; X X--- 730,737 ----- X */ X if (xmin == xmax) X if (autoscale_lx) { X! fprintf(stderr, "Warning: empty %c range [%g:%g], ", X! parametric ? 't' : 'x', xmin,xmax); X if (xmin == 0.0) { X /* completely arbitary */ X xmin = -1.; X*************** X*** 654,659 X int_error("x range is empty", c_token); X } X X if (log_x) { X if (xmin <= 0.0 || xmax <= 0.0) X int_error("x range must be greater than 0 for log scale!",NO_CARET); X X--- 746,756 ----- X int_error("x range is empty", c_token); X } X X+ /* give error if xrange badly set from missing datafile error */ X+ if (xmin == VERYLARGE || xmax == -VERYLARGE) { X+ int_error("x range is invalid", c_token); X+ } X+ X if (log_x) { X if (xmin <= 0.0 || xmax <= 0.0) X int_error("x range must be greater than 0 for log scale!",NO_CARET); X*************** X*** 679,684 X if (isstring(c_token)) { /* data file to plot */ X /* ignore this now */ X c_token++; X } X else { /* function to plot */ X dummy_func = &plot_func; X X--- 776,787 ----- X if (isstring(c_token)) { /* data file to plot */ X /* ignore this now */ X c_token++; X+ if (almost_equals(c_token,"u$sing")) { X+ c_token++; /* skip "using" */ X+ if (!isstring(c_token)) X+ c_token++; /* skip "xy", "yx" or "y" */ X+ c_token++; /* skip format string */ X+ } X } X else { /* function to plot */ X if (parametric) /* working on x parametric function */ X*************** X*** 681,686 X c_token++; X } X else { /* function to plot */ X dummy_func = &plot_func; X plot_func.at = temp_at(); /* reparse function */ X X X--- 784,791 ----- X } X } X else { /* function to plot */ X+ if (parametric) /* working on x parametric function */ X+ xparam = 1 - xparam; X dummy_func = &plot_func; X plot_func.at = temp_at(); /* reparse function */ X X*************** X*** 724,731 X if (autoscale_ly || polar X || inrange(temp, ymin, ymax)) { X this_plot->points[i].type = INRANGE; X! if (autoscale_ly && temp < ymin) ymin = temp; X! if (autoscale_ly && temp > ymax) ymax = temp; X } else X this_plot->points[i].type = OUTRANGE; X } X X--- 829,839 ----- X if (autoscale_ly || polar X || inrange(temp, ymin, ymax)) { X this_plot->points[i].type = INRANGE; X! /* When xparam is 1 we are not really computing y's! */ X! if (!xparam && autoscale_ly) { X! if (temp < ymin) ymin = temp; X! if (temp > ymax) ymax = temp; X! } X } else X this_plot->points[i].type = OUTRANGE; X } X*************** X*** 789,794 X y_max = ymax; X } X capture(replot_line,plot_token,c_token); X do_plot(first_plot,plot_num,x_min,x_max,y_min,y_max); X } X X X--- 897,918 ----- X y_max = ymax; X } X capture(replot_line,plot_token,c_token); X+ X+ if (parametric) { X+ /* Now put t and x ranges back before we actually plot anything. */ X+ ltmp = autoscale_lx; autoscale_lx = autoscale_lt; autoscale_lt = ltmp; X+ temp = xmin; xmin = tmin; tmin = temp; X+ temp = xmax; xmax = tmax; tmax = temp; X+ if (some_data_files && autoscale_lx) { X+ /* X+ Stop any further autoscaling in this case (may be a mistake, have X+ to consider what is really wanted some day in the future--jdc). X+ */ X+ autoscale_lx = 0; X+ } X+ /* Now actually fix the plot pairs to be single plots. */ X+ parametric_fixup (first_plot, &plot_num, &x_min, &x_max); X+ } X do_plot(first_plot,plot_num,x_min,x_max,y_min,y_max); X } X X*************** X*** 804,809 X #endif X exit(status); X } X X #ifdef MSDOS X #ifndef __TURBOC__ /* Turbo C already has sleep() */ X X--- 928,1074 ----- X #endif X exit(status); X } X+ X+ void parametric_fixup (start_plot, plot_num, x_min, x_max) X+ struct curve_points *start_plot; X+ int *plot_num; X+ double *x_min, *x_max; X+ /* X+ The hardest part of this routine is collapsing the FUNC plot types X+ in the list (which are gauranteed to occur in (x,y) pairs while X+ preserving the non-FUNC type plots intact. This means we have to X+ work our way through various lists. Examples (hand checked): X+ start_plot:F1->F2->NULL ==> F2->NULL X+ start_plot:F1->F2->F3->F4->F5->F6->NULL ==> F2->F4->F6->NULL X+ start_plot:F1->F2->D1->D2->F3->F4->D3->NULL ==> F2->D1->D2->F4->D3->NULL X+ X+ Of course, the more interesting work is to move the y values of X+ the x function to become the x values of the y function (checking X+ the mins and maxs as we go along). X+ */ X+ { X+ struct curve_points *xp, *new_list, *yp = start_plot, *tmp, X+ *free_list, *free_head=NULL; X+ int i, tlen, curve; X+ char *new_title; X+ double lxmin, lxmax, temp; X+ X+ if (autoscale_lx) { X+ lxmin = VERYLARGE; X+ lxmax = -VERYLARGE; X+ } else { X+ lxmin = xmin; X+ lxmax = xmax; X+ } X+ X+ /* X+ Ok, go through all the plots and move FUNC types together. Note: this X+ originally was written to look for a NULL next pointer, but gnuplot X+ wants to be sticky in grabbing memory and the right number of items X+ in the plot list is controlled by the plot_num variable. X+ X+ Since gnuplot wants to do this sticky business, a free_list of X+ curve_points is kept and then tagged onto the end of the plot list as X+ this seems more in the spirit of the original memory behavior than X+ simply freeing the memory. I'm personally not convinced this sort X+ of concern is worth it since the time spent computing points seems X+ to dominate any garbage collecting that might be saved here... X+ */ X+ new_list = xp = start_plot; X+ yp = xp->next_cp; X+ curve = 0; X+ for (; curve < *plot_num; xp = xp->next_cp,yp = yp->next_cp,curve++) { X+ if (xp->plot_type != FUNC) { X+ continue; X+ } X+ /* Here's a FUNC parametric function defined as two parts. */ X+ --(*plot_num); X+ /* X+ Go through all the points assigning the y's from xp to be the X+ x's for yp. Check max's and min's as you go. X+ */ X+ for (i = 0; i < yp->p_count; ++i) { X+ /* X+ Throw away excess xp points, mark excess yp points as OUTRANGE. X+ */ X+ if (i > xp->p_count) { X+ yp->points[i].type == OUTRANGE; X+ continue; X+ } X+ /* X+ Just as we had to do when we computed y values--now check that X+ x's (computed parametrically) are in the permitted ranges as well. X+ */ X+ temp = xp->points[i].y; /* New x value for yp function. */ X+ yp->points[i].x = temp; X+ /* For legitimate y values, let the x values decide if they plot. */ X+ if (yp->points[i].type == INRANGE) X+ yp->points[i].type = xp->points[i].type; X+ if (autoscale_lx || polar X+ || inrange(temp, lxmin, lxmax)) { X+ if (autoscale_lx && temp < lxmin) lxmin = temp; X+ if (autoscale_lx && temp > lxmax) lxmax = temp; X+ } else X+ yp->points[i].type = OUTRANGE; /* Due to x value. */ X+ } X+ /* Ok, fix up the title to include both the xp and yp plots. */ X+ if (xp->title && xp->title[0] != '\0') { X+ tlen = strlen (yp->title) + strlen (xp->title) + 3; X+ new_title = alloc ((unsigned int) tlen, "string"); X+ strcpy (new_title, xp->title); X+ strcat (new_title, ", "); /* + 2 */ X+ strcat (new_title, yp->title); /* + 1 = + 3 */ X+ free (yp->title); X+ yp->title = new_title; X+ } X+ /* Eliminate the first curve (xparam) and just use the second. */ X+ if (xp == start_plot) { X+ /* Simply nip off the first element of the list. */ X+ new_list = first_plot = yp; X+ xp = xp->next_cp; X+ if (yp->next_cp != NULL) X+ yp = yp->next_cp; X+ /* Add start_plot to the free_list. */ X+ if (free_head == NULL) { X+ free_list = free_head = start_plot; X+ free_head->next_cp = NULL; X+ } else { X+ free_list->next_cp = start_plot; X+ start_plot->next_cp = NULL; X+ free_list = start_plot; X+ } X+ } X+ else { X+ /* Here, remove the xp node and replace it with the yp node. */ X+ tmp = xp; X+ /* Pass over any data files that might have been in place. */ X+ while (new_list->next_cp && new_list->next_cp != xp) X+ new_list = new_list->next_cp; X+ new_list->next_cp = yp; X+ new_list = new_list->next_cp; X+ xp = xp->next_cp; X+ if (yp->next_cp != NULL) X+ yp = yp->next_cp; X+ /* Add tmp to the free_list. */ X+ if (free_head == NULL) { X+ free_list = free_head = tmp; X+ } else { X+ free_list->next_cp = tmp; X+ tmp->next_cp = NULL; X+ free_list = tmp; X+ } X+ } X+ } X+ /* Ok, stick the free list at the end of the curve_points plot list. */ X+ while (new_list->next_cp != NULL) X+ new_list = new_list->next_cp; X+ new_list->next_cp = free_head; X+ X+ /* Report the overall graph mins and maxs. */ X+ *x_min = lxmin; X+ *x_max = lxmax; X+ } X+ X X #ifdef MSDOS X #ifndef __TURBOC__ /* Turbo C already has sleep() */ XCommon subdirectories: ./demo and ../gnuplot2.02/demo XCommon subdirectories: ./docs and ../gnuplot2.02/docs XOnly in .: gnuplot Xdiff -cr ./gnuplot_x11.c ../gnuplot2.02/gnuplot_x11.c X*** ./gnuplot_x11.c Tue Sep 18 14:59:27 1990 X--- ../gnuplot2.02/gnuplot_x11.c Wed Nov 28 09:34:33 1990 X*************** X*** 1,5 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--- 1,4 ----- 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*** 8,13 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 X--- 7,13 ----- 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+ * Hendri Hondorp (University of Twente, The Netherlands) - Motif xgnuplot X * X * This code is provided as is and with no warranties of any kind. X * X*************** X*** 11,18 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 X--- 11,17 ----- X * X * This code is provided as is and with no warranties of any kind. X * X! * Ed Kubaitis - Computing Services Office - University of Illinois, Urbana X *---------------------------------------------------------------------------*/ X X #include <stdio.h> X*************** X*** 16,21 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 X--- 15,21 ----- X *---------------------------------------------------------------------------*/ X X #include <stdio.h> X+ #include <signal.h> X #include <X11/Intrinsic.h> X #include <X11/StringDefs.h> X #include <Label.h> /* use -Idir for location on your system */ X*************** X*** 18,24 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 X--- 18,23 ----- X #include <signal.h> X #include <X11/Intrinsic.h> X #include <X11/StringDefs.h> X #include <Label.h> /* use -Idir for location on your system */ X #ifdef MOTIF X #include <Xm.h> /* use -Idir for location on your system */ X*************** X*** 20,25 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 X--- 19,32 ----- X #include <X11/Intrinsic.h> X #include <X11/StringDefs.h> X #include <Label.h> /* use -Idir for location on your system */ X+ #ifdef MOTIF X+ #include <Xm.h> /* use -Idir for location on your system */ X+ #define LabelWC xmLabelWidgetClass X+ #define LabelBPM XmNbackgroundPixmap X+ #else X+ #define LabelWC labelWidgetClass X+ #define LabelBPM XtNbitmap X+ #endif X X #define Color (D>1) X #define Ncolors 11 X*************** X*** 21,27 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 X--- 28,33 ----- X #define LabelBPM XtNbitmap X #endif X X #define Color (D>1) X #define Ncolors 11 X unsigned long colors[Ncolors]; X*************** X*** 27,33 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 X--- 33,38 ----- X unsigned long colors[Ncolors]; X char color_keys[Ncolors][30] = { "text", "border", "axis", X "line1", "line2", "line3", "line4", "line5", "line6", "line7", "line8" }; X char color_values[Ncolors][30] = { "black", "black", "black", X "red", "green", "blue", "magenta", "cyan", "sienna", "orange", "coral" }; X X*************** X*** 35,42 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 X--- 40,46 ----- 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; Window win; Display *dpy; X Pixmap pixmap; GC gc = (GC)NULL; X Dimension W = 640 , H = 450; int D; X Arg args[5]; X*************** X*** 38,45 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--- 42,47 ----- X X Widget w_top, w_label; Window win; Display *dpy; X Pixmap pixmap; GC gc = (GC)NULL; X Dimension W = 640 , H = 450; int D; X Arg args[5]; X static void gnuplot(), resize(); X*************** X*** 53,58 X char buf[Nbuf]; X String *commands = NULL; X X /*----------------------------------------------------------------------------- X * main program - fire up application and callbacks X *---------------------------------------------------------------------------*/ X X--- 55,76 ----- X char buf[Nbuf]; X String *commands = NULL; X X+ typedef struct { /* See "X Toolkit Intrinsics Programming Manual" */ X+ XFontStruct *font; /* Nye and O'Reilly, O'Reilly & Associates, pp. 80-85 */ X+ unsigned long fg; X+ unsigned long bg; X+ } RValues, *RVptr; X+ RValues rv; X+ X+ XtResource resources[] = { X+ { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), X+ XtOffset(RVptr, font), XtRString, "fixed" }, X+ { XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), X+ XtOffset(RVptr, fg), XtRString, XtDefaultForeground }, X+ { XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel), X+ XtOffset(RVptr, bg), XtRString, XtDefaultBackground }, X+ }; X+ X /*----------------------------------------------------------------------------- X * main program - fire up application and callbacks X *---------------------------------------------------------------------------*/ X*************** X*** 59,64 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 X--- 77,85 ----- X X main(argc, argv) int argc; char *argv[]; { X X+ signal(SIGINT, SIG_IGN); X+ signal(SIGTSTP, SIG_IGN); X+ X /* initialize application */ X w_top = XtInitialize("gnuplot", "Gnuplot", NULL, 0, &argc, argv); X XtSetArg(args[0], XtNwidth, W); X*************** X*** 63,69 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 X--- 84,90 ----- 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 ("", LabelWC, w_top, args, (Cardinal)2); X XtRealizeWidget(w_top); X X /* extract needed information */ X*************** X*** 67,73 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 X--- 88,95 ----- X XtRealizeWidget(w_top); X X /* extract needed information */ X! dpy = XtDisplay(w_top); win = XtWindow(w_label); X! D = DisplayPlanes(dpy,DefaultScreen(dpy)); X if (Color) { X char option[20], *value; X XColor used, exact; int n; X*************** X*** 70,77 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 X--- 92,98 ----- X D = DisplayPlanes(dpy,DefaultScreen(dpy)); X if (Color) { X char option[20], *value; X! XColor used, exact; int n; X X for(n=0; n<Ncolors; n++) { X strcpy(option, color_keys[n]); X*************** X*** 87,99 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 X--- 108,118 ----- X } X } X } X! XtSetArg(args[0], XtNwidth, &W); X! XtSetArg(args[1], XtNheight,&H); X! XtGetValues(w_label, args, (Cardinal)2); X! XtGetApplicationResources(w_top, &rv, resources, XtNumber(resources),NULL,0); X! vchar = (rv.font->ascent + rv.font->descent); X X /* add callbacks on input-from-gnuplot-on-stdin & window-resized */ X XtAddInput(0, XtInputReadMask, gnuplot, NULL); X*************** X*** 113,121 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 X--- 132,137 ----- X /* set scaling factor between internal driver & window geometry */ X xscale = (double)W / 4096.; yscale = (double)H / 4096.; X X /* create new pixmap & GC */ X if (gc) { XFreeGC(dpy, gc); XFreePixmap(dpy, pixmap); } X pixmap = XCreatePixmap(dpy, RootWindow(dpy,DefaultScreen(dpy)), W, H, D); X*************** X*** 117,123 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 X--- 133,140 ----- X xscale = (double)W / 4096.; yscale = (double)H / 4096.; X X /* create new pixmap & GC */ X! if (gc) { XFreeGC(dpy, gc); XFreePixmap(dpy, pixmap); } X! pixmap = XCreatePixmap(dpy, RootWindow(dpy,DefaultScreen(dpy)), W, H, D); X gc = XCreateGC(dpy, pixmap, 0, NULL); X XSetFont(dpy, gc, rv.font->fid); X X*************** X*** 119,125 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 X--- 136,142 ----- X if (gc) { XFreeGC(dpy, gc); XFreePixmap(dpy, pixmap); } X pixmap = XCreatePixmap(dpy, RootWindow(dpy,DefaultScreen(dpy)), W, H, D); X gc = XCreateGC(dpy, pixmap, 0, NULL); X! XSetFont(dpy, gc, rv.font->fid); X X /* erase pixmap */ X #ifndef MOTIF X*************** X*** 121,130 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 X--- 138,143 ----- X gc = XCreateGC(dpy, pixmap, 0, NULL); X XSetFont(dpy, gc, rv.font->fid); X X /* erase pixmap */ X #ifndef MOTIF X if (Color) { /* Athena needs different erase for color and mono */ X*************** X*** 126,133 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--- 139,148 ----- X XSetFont(dpy, gc, rv.font->fid); X X /* erase pixmap */ X! #ifndef MOTIF X! if (Color) { /* Athena needs different erase for color and mono */ X! #endif X! XSetForeground(dpy, gc, rv.bg); X XFillRectangle(dpy, pixmap, gc, 0, 0, W, H); X XSetForeground(dpy, gc, rv.fg); X XSetBackground(dpy, gc, rv.bg); X*************** X*** 129,136 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 X--- 144,152 ----- X #endif X XSetForeground(dpy, gc, rv.bg); X XFillRectangle(dpy, pixmap, gc, 0, 0, W, H); X! XSetForeground(dpy, gc, rv.fg); X! XSetBackground(dpy, gc, rv.bg); X! #ifndef MOTIF X } X else { X XSetFunction(dpy, gc, GXxor); X*************** X*** 132,138 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--- 148,154 ----- X XSetBackground(dpy, gc, rv.bg); X #ifndef MOTIF 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*** 137,142 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 X--- 153,159 ----- X XCopyArea(dpy, pixmap, pixmap, gc, 0, 0, W, H, 0, 0); X XSetFunction(dpy, gc, GXcopyInverted); X } X+ #endif X X /* connect new pixmap to label widget */ X XtSetArg(args[0], LabelBPM, pixmap); X*************** X*** 138,143 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--- 155,164 ----- X } X #endif X X+ /* connect new pixmap to label widget */ X+ XtSetArg(args[0], LabelBPM, pixmap); X+ XtSetValues(w_label, args, (Cardinal)1); X+ X /* loop over accumulated commands from inboard driver */ X for (n=0; n<nc; n++) { X buf = commands[n]; X*************** X*** 157,163 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 X--- 178,184 ----- X else if (*buf == 'T') { X sscanf(buf, "T%4d%4d", &x, &y); X str = buf + 9; sl = strlen(str) - 1; X! sw = XTextWidth(rv.font, str, sl); X switch(jmode) { X case LEFT: sw = 0; break; X case CENTRE: sw = -sw/2; break; X*************** X*** 205,210 X X /*----------------------------------------------------------------------------- X * gnuplot - Xt callback on input from gnuplot inboard X11 driver X *---------------------------------------------------------------------------*/ X X static void X X--- 226,232 ----- X X /*----------------------------------------------------------------------------- X * gnuplot - Xt callback on input from gnuplot inboard X11 driver X+ * resize - Xt callback when window resized X *---------------------------------------------------------------------------*/ X X static void X*************** X*** 213,220 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--- 235,241 ----- X while (fgets(buf, Nbuf, stdin)) { X if (*buf == 'G') { /* enter graphics mode */ X if (commands) { X! int n; for (n=0; n<nc; n++) XtFree(commands[n]); X XtFree(commands); X } X commands = NULL; nc = 0; X*************** X*** 228,237 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 X--- 249,254 ----- X } X if (feof(stdin) || ferror(stdin)) exit(0); X } X X static void X resize(w, cd, e) Widget w; char *cd; XConfigureEvent *e; { END_OF_patch2a if test 50620 -ne `wc -c <patch2a`; then echo shar: \"patch2a\" unpacked with wrong size! fi # end of overwriting check fi echo shar: End of shell archive. exit 0 exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.