[BACK]Return to plotgnuplot.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari / src / graph

Annotation of OpenXM_contrib/pari/src/graph/plotgnuplot.c, Revision 1.1.1.1

1.1       maekawa     1: /*******************************************************************/
                      2: /*                                                                 */
                      3: /*                  HI-RES PLOT. GNUPLOT INTERFACE                 */
                      4: /*                                                                 */
                      5: /*                       copyright Babe Cool                       */
                      6: /*                       (C) Ilya Zakharevich                      */
                      7: /*                                                                 */
                      8: /*******************************************************************/
                      9: /* $Id: plotgnuplot.c,v 1.1.1.1 1999/09/16 13:47:42 karim Exp $ */
                     10: # include "pari.h"
                     11: #include "rect.h"
                     12: #define croak(str) err(talker,str)
                     13: #define SET_OPTIONS_FROM_STRING
                     14: #define GNUPLOT_OUTLINE_STDOUT
                     15: #define DONT_POLLUTE_INIT
                     16: #include "Gnuplot.h"
                     17:
                     18: #ifdef __EMX__
                     19: #  define DEF_TERM "pm"
                     20: #else
                     21: #  define DEF_TERM (getenv("DISPLAY") ? "X11" : "dumb")
                     22: #endif
                     23:
                     24: void
                     25: rectdraw0(long *w, long *x, long *y, long lw, long do_free)
                     26: {
                     27:   long *ptx,*pty;
                     28:   long i,j,x0,y0;
                     29:   long good;
                     30:   int point_type = -1, line_type = 0;
                     31:   PariRect *e;
                     32:   RectObj *p1;
                     33:
                     34:   PARI_get_plot(0);
                     35:
                     36: #if 0
                     37:   graphics();                          /* Switch on terminal. */
                     38: #else
                     39:   term_start_plot();                   /* Switch on terminal. */
                     40: #endif
                     41:   linetype(line_type);                 /* X does not work otherwise. */
                     42:   setpointsize(pointsize);
                     43:   for(i=0;i<lw;i++)
                     44:   {
                     45:     e=rectgraph[w[i]]; p1=RHead(e); x0=x[i]; y0=y[i];
                     46:     while(p1)
                     47:     {
                     48:       switch(RoType(p1))
                     49:       {
                     50:        case ROt_PT:
                     51:          point(RoPTx(p1)+x0, w_height - 1 - RoPTy(p1) - y0, point_type);
                     52:          break;
                     53:        case ROt_LN:
                     54:          move(RoLNx1(p1)+x0, w_height - 1 - RoLNy1(p1) - y0);
                     55:          vector(RoLNx2(p1)+x0, w_height - 1 - RoLNy2(p1) - y0);
                     56:          break;
                     57:        case ROt_BX:
                     58:          move(RoBXx1(p1)+x0, w_height - 1 - RoBXy1(p1) - y0);
                     59:          vector(RoBXx2(p1)+x0, w_height - 1 - RoBXy1(p1) - y0);
                     60:          vector(RoBXx2(p1)+x0, w_height - 1 - RoBXy2(p1) - y0);
                     61:          vector(RoBXx1(p1)+x0, w_height - 1 - RoBXy2(p1) - y0);
                     62:          vector(RoBXx1(p1)+x0, w_height - 1 - RoBXy1(p1) - y0);
                     63:          break;
                     64:        case ROt_MP:
                     65:          ptx=RoMPxs(p1);
                     66:          pty=RoMPys(p1);
                     67:          for(j=0;j<RoMPcnt(p1);j++)
                     68:          {
                     69:            point(ptx[j]+x0,  w_height - 1 - pty[j] - y0, point_type);
                     70:          }
                     71:          break;
                     72:        case ROt_ML:
                     73:          ptx=RoMLxs(p1);
                     74:          pty=RoMLys(p1);
                     75:          j = 0;
                     76:          if (ptx[j]+x0 < 0 || ptx[j]+x0 >= w_width
                     77:              || pty[j] + y0 < 0 || pty[j] + y0 >= w_height) {
                     78:            good = 0;
                     79:          } else {
                     80:            move(ptx[j]+x0, w_height - 1 - pty[j] - y0);
                     81:            good = 1;
                     82:          }
                     83:          for(j=1;j<RoMLcnt(p1);j++)
                     84:          {
                     85:            if (good) {
                     86:              if (ptx[j]+x0 < 0 || ptx[j]+x0 >= w_width
                     87:                  || pty[j] + y0 < 0 || pty[j] + y0 >= w_height) {
                     88:                good = 0;
                     89:              } else {
                     90:                vector(ptx[j]+x0, w_height - 1 - pty[j] - y0);
                     91:              }
                     92:            } else {
                     93:              if (ptx[j]+x0 < 0 || ptx[j]+x0 >= w_width
                     94:                  || pty[j] + y0 < 0 || pty[j] + y0 >= w_height) {
                     95:              } else {
                     96:                move(ptx[j]+x0, w_height - 1 - pty[j] - y0);
                     97:                good = 1;
                     98:              }
                     99:            }
                    100:          }
                    101:          break;
                    102:        case ROt_ST:
                    103:          if (RoSTx(p1)+x0 < 0 || RoSTx(p1)+x0+RoSTl(p1)-1 >= w_width
                    104:              || RoSTy(p1) + y0 < 0 || RoSTy(p1) + y0 >= w_height) {
                    105:          } else {
                    106:            put_text(RoSTx(p1)+x0,
                    107:                     w_height - 1 - RoSTy(p1) - y0 + (f_height - 1)/2,
                    108:                     RoSTs(p1));
                    109:          }
                    110:          break;
                    111:        case ROt_PTT:
                    112:          point_type = RoPTTpen(p1);
                    113:          break;
                    114:        case ROt_PTS:
                    115:          pointsize = RoPTSsize(p1);
                    116:          setpointsize(pointsize);
                    117:          break;
                    118:        case ROt_LNT:
                    119:          linetype(RoLNTpen(p1));
                    120:          break;
                    121:        default: break;
                    122:       }
                    123:       p1=RoNext(p1);
                    124:     }
                    125:   }
                    126: #if 0
                    127:   text();                              /* Reset terminal */
                    128: #else
                    129:   term_end_plot();                     /* Reset terminal. */
                    130: #endif
                    131: }
                    132:
                    133: void
                    134: PARI_get_plot(long fatal)
                    135: {
                    136:   if (pari_plot.init) {
                    137:     return;
                    138:   }
                    139:   setup_gpshim();
                    140:   term_set( DEF_TERM );
                    141: }
                    142:
                    143:
                    144: long
                    145: term_set(char *s)
                    146: {
                    147:   char *t, *size = NULL;
                    148:   double x, y;
                    149:
                    150:   if (*s == 0)
                    151:       s = pari_plot.name;
                    152:   t = s;
                    153:   if (t[1] == '\0' && t[0] == '?') {
                    154:      list_terms();
                    155:      return 1;
                    156:   }
                    157:   while (*t && !(*t == ' ' || *t == '\t' || *t == '\n' || *t == '='))
                    158:        t++;
                    159:   if ((t-s) > PLOT_NAME_LEN)
                    160:       err(talker,"too long name \"%s\"for terminal", s);
                    161:   if (*pari_plot.name
                    162:       && (strlen(pari_plot.name) != t - s      /* Why this? */
                    163:          || (strncmp(pari_plot.name, s, t-s) != 0)) )
                    164:        reset();
                    165:   strncpy(pari_plot.name,s,t-s);
                    166:   pari_plot.name[t-s] = '\0';
                    167:
                    168:   if (!termset( pari_plot.name ))
                    169:       err(talker,"error setting terminal \"%s\"", pari_plot.name);
                    170:
                    171:   if (*t == '=') {
                    172:     size = ++t;
                    173:     x = atof(size);
                    174:     while (*t && !(*t == ' ' || *t == '\t' || *t == '\n' || *t == ','))
                    175:        t++;
                    176:     if (*t != ',')
                    177:       err(talker, "Terminal size directive without ','");
                    178:     y = atof(++t);
                    179:     while (*t && !(*t == ' ' || *t == '\t' || *t == '\n'))
                    180:        t++;
                    181:     plotsizes_scale(x*(1 + 1e-6)/termprop(xmax),
                    182:                    y*(1 + 1e-6)/termprop(ymax)); /* Later - truncated! */
                    183:   } else {
                    184:     plotsizes_scale(1,1);
                    185:   }
                    186:
                    187:   /* *Needed*, say, by gif output: */
                    188:   set_options_from(t);
                    189:
                    190: #if 0
                    191:   gptable_init();                      /* Init terminal. */
                    192: #else
                    193:   term_init();
                    194: #endif
                    195:
                    196:   setpointsize(pointsize);
                    197:
                    198:   w_width = scaled_xmax();
                    199:   w_height = scaled_ymax();
                    200:   f_height = termprop(v_char);
                    201:   f_width = termprop(h_char);
                    202:   h_unit = termprop(h_tic);
                    203:   v_unit = termprop(v_tic);
                    204:   pari_plot.init = 1;
                    205:
                    206:   return 1;
                    207: }
                    208:
                    209: long
                    210: plot_outfile_set(char *s) {
                    211:     int normal = (strcmp(s,"-") == 0);
                    212:
                    213:     setup_gpshim();
                    214:     /* Delegate all the hard work to term_set_output() */
                    215:
                    216:     if (normal)
                    217:        term_set_output(NULL);
                    218:     else {                             /* term_set_output() needs
                    219:                                           a malloced string */
                    220:        char *s1 = (char*) malloc(strlen(s) + 1);
                    221:
                    222:        strcpy(s1,s);
                    223:        term_set_output(s1);
                    224:     }
                    225:     return 1;
                    226: }
                    227:
                    228: void
                    229: set_pointsize(double d)
                    230: {
                    231:     pointsize = d;
                    232:     if (pari_plot.init)
                    233:        setpointsize(d);
                    234: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>