| Ilya Zakharevich on Mon, 6 May 2002 15:34:32 -0400 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| [PATCH 2.2.2] X11 and gnuplot |
This supports having both GNUPLOT plotting and the builtin-X11
plotting. To switch to GNUPLOT, use plotterm(NAME); to switch back,
use "builtin" as NAME.
As of today, there is no Configure support for such a build. To compile:
a) CFLAGS : add -DBOTH_GNUPLOT_AND_X11
b) Put both plotX$(_O) and plotgnuplot$(_O) to the list of objects;
c) have build rules for both plotX$(_O) and plotgnuplot$(_O);
Enjoy,
Ilya
--- ./src/graph/plotX.c-pre-x Mon Mar 19 16:03:58 2001
+++ ./src/graph/plotX.c Sun May 5 21:44:28 2002
@@ -18,6 +18,16 @@ Foundation, Inc., 59 Temple Place - Suit
/* HIGH RESOLUTION PLOT */
/* */
/*******************************************************************/
+
+#ifdef BOTH_GNUPLOT_AND_X11 /* The switch support in plotgnuplot */
+# define rectdraw0 X11_rectdraw0
+# define term_set X11_term_set
+# define PARI_get_plot X11_PARI_get_plot
+# define plot_outfile_set X11_plot_outfile_set
+# define set_pointsize X11_set_pointsize
+# define pari_plot pari_X11plot
+#endif
+
#include "pari.h"
#include "rect.h"
#include "../language/anal.h"
--- ./src/graph/plotgnuplot.c-pre-x Sat May 4 02:01:44 2002
+++ ./src/graph/plotgnuplot.c Sun May 5 18:25:36 2002
@@ -36,8 +36,36 @@ Foundation, Inc., 59 Temple Place - Suit
# define DEF_TERM (getenv("DISPLAY") ? "X11" : "dumb")
#endif
+#ifdef BOTH_GNUPLOT_AND_X11
+# ifdef GNUPLOT_AND_X11_PREFER_GNUPLOT
+# define DEFAULT_IS_BUILTIN 0
+# else /* !( defined GNUPLOT_AND_X11_PREFER_GNUPLOT ) */
+# define DEFAULT_IS_BUILTIN 1
+# endif /* defined GNUPLOT_AND_X11_PREFER_GNUPLOT */
+#endif
+
+# ifdef BOTH_GNUPLOT_AND_X11
+int is_builtin = DEFAULT_IS_BUILTIN;
+int X11_init;
+static void my_rectdraw0(long *w, long *x, long *y, long lw, long do_free);
+# endif
+
void
rectdraw0(long *w, long *x, long *y, long lw, long do_free)
+# ifdef BOTH_GNUPLOT_AND_X11
+{
+ if (is_builtin) {
+ X11_rectdraw0(w, x, y, lw, do_free);
+ return;
+ }
+
+ my_rectdraw0(w, x, y, lw, do_free);
+ return;
+}
+
+static void
+my_rectdraw0(long *w, long *x, long *y, long lw, long do_free)
+# endif /* defined BOTH_GNUPLOT_AND_X11 */
{
double *ptx,*pty;
long i,j,x0,y0, hjust, vjust, hgap, vgap, hgapsize, vgapsize;
@@ -199,11 +227,22 @@ rectdraw0(long *w, long *x, long *y, lon
void
PARI_get_plot(long fatal)
{
- (void)fatal;
- if (pari_plot.init) {
- return;
+#ifdef BOTH_GNUPLOT_AND_X11
+ if (is_builtin) {
+ if (X11_init)
+ return;
+ if (getenv("DISPLAY")) {
+ X11_PARI_get_plot(fatal);
+ X11_init = 1;
+ return;
+ }
+ is_builtin = 0; /* Don't defaut to X11 if no DISPLAY */
}
+#endif /* defined BOTH_GNUPLOT_AND_X11 */
+ if (pari_plot.init)
+ return;
term_set( DEF_TERM );
+ (void)fatal;
}
@@ -214,6 +253,23 @@ term_set(char *s)
double x, y;
static int had_error;
+#ifdef BOTH_GNUPLOT_AND_X11
+ if (is_builtin) {
+ if (!strcmp(s,"builtin"))
+ return X11_term_set(s);
+ is_builtin = 0;
+ PARI_get_plot(1);
+ } else if (!strcmp(s,"builtin")) {
+ is_builtin = 1;
+ if (!X11_init) {
+ if (!getenv("DISPLAY"))
+ croak("The builtin-X11 plotting requires DISPLAY environment variable set");
+ X11_PARI_get_plot(1);
+ X11_init = 1;
+ }
+ return X11_term_set(s);
+ }
+#endif /* defined BOTH_GNUPLOT_AND_X11 */
setup_gpshim();
if (*s == 0)
s = pari_plot.name;
@@ -277,9 +333,13 @@ term_set(char *s)
}
long
-plot_outfile_set(char *s) {
+plot_outfile_set(char *s)
+{
int normal = (strcmp(s,"-") == 0);
+ /* Intentionally no check for is_builtin, let it always affect gnuplot:
+ this way one can set the outfile before switching the terminal... */
+
setup_gpshim();
/* Delegate all the hard work to term_set_output() */
@@ -298,6 +358,12 @@ plot_outfile_set(char *s) {
void
set_pointsize(double d)
{
+#ifdef BOTH_GNUPLOT_AND_X11
+ if (is_builtin) {
+ X11_set_pointsize(d);
+ return;
+ }
+#endif /* defined BOTH_GNUPLOT_AND_X11 */
pointsize = d;
if (pari_plot.init)
setpointsize(d);
--- ./src/graph/plotport.c-pre-x Wed Dec 5 11:37:12 2001
+++ ./src/graph/plotport.c Sun May 5 21:45:36 2002
@@ -31,6 +31,8 @@ static void PARI_get_psplot(void);
static long current_color[NUMRECT];
PariRect **rectgraph = NULL;
PARI_plot pari_plot, pari_psplot;
+PARI_plot *pari_plot_engine = &pari_plot;
+PARI_plot pari_X11plot; /* Used if BOTH_GNUPLOT_AND_X11 */
long rectpoint_itype = 0;
long rectline_itype = 0;
--- ./src/graph/rect.h-pre-x Wed Dec 5 11:37:14 2001
+++ ./src/graph/rect.h Sun May 5 18:12:20 2002
@@ -30,13 +30,17 @@ typedef struct PARI_plot {
} PARI_plot;
extern PARI_plot pari_plot, pari_psplot;
+#ifdef BOTH_GNUPLOT_AND_X11
+extern PARI_plot pari_X11plot;
+#endif
+extern PARI_plot *pari_plot_engine;
-#define w_height (pari_plot.height)
-#define w_width (pari_plot.width)
-#define f_height (pari_plot.fheight)
-#define f_width (pari_plot.fwidth)
-#define h_unit (pari_plot.hunit)
-#define v_unit (pari_plot.vunit)
+#define w_height (pari_plot_engine->height)
+#define w_width (pari_plot_engine->width)
+#define f_height (pari_plot_engine->fheight)
+#define f_width (pari_plot_engine->fwidth)
+#define h_unit (pari_plot_engine->hunit)
+#define v_unit (pari_plot_engine->vunit)
#define lmargin (f_width*10)
#define rmargin (h_unit - 1)
#define tmargin (v_unit - 1)