[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     ! 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>