[BACK]Return to plotf.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / plot

Diff for /OpenXM_contrib2/asir2000/plot/plotf.c between version 1.11 and 1.20

version 1.11, 2001/10/09 01:36:27 version 1.20, 2006/11/15 01:28:44
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/plot/plotf.c,v 1.10 2001/08/22 09:19:21 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/plot/plotf.c,v 1.19 2006/11/09 15:54:35 saito Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 53 
Line 53 
 #include "ifplot.h"  #include "ifplot.h"
   
 void Pifplot(), Pconplot(), Pplotover(), Pplot(), Parrayplot(), Pdrawcircle();  void Pifplot(), Pconplot(), Pplotover(), Pplot(), Parrayplot(), Pdrawcircle();
 void Pmemory_ifplot();  void Ppolarplot();
 void Popen_canvas(), Pclear_canvas(), Pdraw_obj();  void Pmemory_ifplot(),Pmemory_conplot(),Pmemory_plot();
   void Popen_canvas(), Pclear_canvas(), Pdraw_obj(), Pdraw_string();
 void Pox_rpc();  void Pox_rpc();
 void Pox_cmo_rpc();  void Pox_cmo_rpc();
   
 struct ftab plot_tab[] = {  struct ftab plot_tab[] = {
         {"ifplot",Pifplot,-7},          {"ifplot",Pifplot,-7},
         {"memory_ifplot",Pmemory_ifplot,-7},          {"memory_ifplot",Pmemory_ifplot,-6},
         {"conplot",Pconplot,-8},          {"conplot",Pconplot,-8},
           {"memory_conplot",Pmemory_conplot,-7},
         {"plot",Pplot,-6},          {"plot",Pplot,-6},
         {"plotover",Pplotover,3},          {"memory_plot",Pmemory_plot,-5},
         {"drawcircle",Pdrawcircle,5},          {"polarplot",Ppolarplot,-6},
           {"plotover",Pplotover,-4},
           {"drawcircle",Pdrawcircle,6},
         {"open_canvas",Popen_canvas,-3},          {"open_canvas",Popen_canvas,-3},
         {"clear_canvas",Pclear_canvas,2},          {"clear_canvas",Pclear_canvas,2},
         {"draw_obj",Pdraw_obj,-4},          {"draw_obj",Pdraw_obj,-4},
           {"draw_string",Pdraw_string,-5},
 /*  /*
         {"arrayplot",Parrayplot,2},          {"arrayplot",Parrayplot,2},
 */  */
         {0,0,0},          {0,0,0},
 };  };
   
 int current_s;  void Popen_canvas(NODE arg,Q *rp)
   
 void Popen_canvas(NODE arg,Obj *rp)  
 {  {
         Q w300,s_id;          Q w300,s_id;
         LIST geom;          LIST geom;
Line 106  void Popen_canvas(NODE arg,Obj *rp)
Line 109  void Popen_canvas(NODE arg,Obj *rp)
                 wname=name (STRING)]                  wname=name (STRING)]
         */          */
   
         if ( stream < 0 )          stream = validate_ox_plot_stream(stream);
                 stream = current_s;  
         else  
                 current_s = stream;  
         STOQ(stream,s_id);          STOQ(stream,s_id);
         if ( !geom ) {          if ( !geom ) {
                 STOQ(300,w300);                  STOQ(300,w300);
Line 118  void Popen_canvas(NODE arg,Obj *rp)
Line 118  void Popen_canvas(NODE arg,Obj *rp)
         MKSTR(fname,"open_canvas");          MKSTR(fname,"open_canvas");
         arg = mknode(4,s_id,fname,geom,wname);          arg = mknode(4,s_id,fname,geom,wname);
         Pox_cmo_rpc(arg,rp);          Pox_cmo_rpc(arg,rp);
           *rp = s_id;
 }  }
   
   void ifplot_main(NODE arg,int is_memory, Obj *rp);
   
 void Pifplot(NODE arg,Obj *rp)  void Pifplot(NODE arg,Obj *rp)
 {  {
           ifplot_main(arg,0,rp);
   }
   
   void Pmemory_ifplot(NODE arg,Obj *rp)
   {
           ifplot_main(arg,1,rp);
   }
   
   void ifplot_main(NODE arg,int is_memory, Obj *rp)
   {
         Q m2,p2,w300,s_id;          Q m2,p2,w300,s_id;
         NODE defrange;          NODE defrange;
         LIST xrange,yrange,range[2],list,geom;          LIST xrange,yrange,range[2],list,geom;
Line 132  void Pifplot(NODE arg,Obj *rp)
Line 145  void Pifplot(NODE arg,Obj *rp)
         P var;          P var;
         NODE n,n0;          NODE n,n0;
         STRING fname,wname;          STRING fname,wname;
           Obj t;
   
         STOQ(-2,m2); STOQ(2,p2);          STOQ(-2,m2); STOQ(2,p2);
         MKNODE(n,p2,0); MKNODE(defrange,m2,n);          MKNODE(n,p2,0); MKNODE(defrange,m2,n);
         poly = 0; vl = 0; geom = 0; wname = 0; stream = -1; ri = 0;          poly = 0; vl = 0; geom = 0; wname = 0; stream = -1; ri = 0;
           v[0] = v[1] = 0;
         for ( ; arg; arg = NEXT(arg) )          for ( ; arg; arg = NEXT(arg) )
                 if ( !BDY(arg) )                  if ( !BDY(arg) )
                         stream = 0;                          stream = 0;
Line 212  void Pifplot(NODE arg,Obj *rp)
Line 227  void Pifplot(NODE arg,Obj *rp)
                 wname=name (STRING)]                  wname=name (STRING)]
         */          */
   
         if ( stream < 0 )          stream = validate_ox_plot_stream(stream);
                 stream = current_s;  
         else  
                 current_s = stream;  
         STOQ(stream,s_id);          STOQ(stream,s_id);
         if ( !geom ) {          if ( !geom ) {
                 STOQ(300,w300);                  STOQ(300,w300);
                 MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);                  MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);
         }          }
         MKSTR(fname,"plot");          if ( is_memory ) {
         arg = mknode(8,s_id,fname,poly,xrange,yrange,0,geom,wname);                  MKSTR(fname,"memory_plot");
         Pox_rpc(arg,rp);                  arg = mknode(7,s_id,fname,poly,xrange,yrange,0,geom);
                   Pox_rpc(arg,&t);
                   arg = mknode(1,s_id);
                   Pox_pop_cmo(arg,rp);
           } else {
                   MKSTR(fname,"plot");
                   arg = mknode(8,s_id,fname,poly,xrange,yrange,0,geom,wname);
                   Pox_rpc(arg,&t);
                   *rp = (Obj)s_id;
           }
 }  }
   
 void Pmemory_ifplot(NODE arg,Obj *rp)  void conplot_main(NODE arg,int is_memory, Obj *rp);
   
   void Pconplot(NODE arg,Obj *rp)
 {  {
           conplot_main(arg,0,rp);
   }
   
   void Pmemory_conplot(NODE arg,Obj *rp)
   {
           conplot_main(arg,1,rp);
   }
   
   void conplot_main(NODE arg,int is_memory,Obj *rp)
   {
         Q m2,p2,w300,s_id;          Q m2,p2,w300,s_id;
         NODE defrange;          NODE defrange;
         LIST xrange,yrange,range[2],list,geom;          LIST xrange,yrange,zrange,range[3],list,geom;
         VL vl,vl0;          VL vl,vl0;
         V v[2],av[2];          V v[2],av[2];
         int stream,ri,i;          int stream,ri,i;
         P poly;          P poly;
         P var;          P var;
         NODE n,n0;          NODE n,n0;
         STRING fname;          STRING fname,wname;
           Obj t;
   
         STOQ(-2,m2); STOQ(2,p2);          STOQ(-2,m2); STOQ(2,p2);
         MKNODE(n,p2,0); MKNODE(defrange,m2,n);          MKNODE(n,p2,0); MKNODE(defrange,m2,n);
         poly = 0; vl = 0; geom = 0; stream = -1; ri = 0;          poly = 0; vl = 0; geom = 0; wname = 0; stream = -1; ri = 0;
           v[0] = v[1] = 0;
         for ( ; arg; arg = NEXT(arg) )          for ( ; arg; arg = NEXT(arg) )
                 if ( !BDY(arg) )                  if ( !BDY(arg) )
                         stream = 0;                          stream = 0;
                 else                  else
                 switch ( OID(BDY(arg)) ) {                  switch ( OID(BDY(arg)) ) {
                         case O_P:                          case O_P:
                                 poly = (P)BDY(arg);                                  poly = (P)BDY(arg);
                                 get_vars_recursive((Obj)poly,&vl);                                  get_vars_recursive((Obj)poly,&vl);
                                 for ( vl0 = vl, i = 0; vl0; vl0 = NEXT(vl0) )                                  for ( vl0 = vl, i = 0; vl0; vl0 = NEXT(vl0) )
                                         if ( vl0->v->attr == (pointer)V_IND )                                          if ( vl0->v->attr == (pointer)V_IND )
Line 260  void Pmemory_ifplot(NODE arg,Obj *rp)
Line 295  void Pmemory_ifplot(NODE arg,Obj *rp)
                         case O_LIST:                          case O_LIST:
                                 list = (LIST)BDY(arg);                                  list = (LIST)BDY(arg);
                                 if ( OID(BDY(BDY(list))) == O_P )                                  if ( OID(BDY(BDY(list))) == O_P )
                                         if ( ri > 1 )                                          if ( ri > 2 )
                                                 error("ifplot : invalid argument");                                                  error("ifplot : invalid argument");
                                         else                                          else
                                                 range[ri++] = list;                                                  range[ri++] = list;
Line 269  void Pmemory_ifplot(NODE arg,Obj *rp)
Line 304  void Pmemory_ifplot(NODE arg,Obj *rp)
                                 break;                                  break;
                         case O_N:                          case O_N:
                                 stream = QTOS((Q)BDY(arg)); break;                                  stream = QTOS((Q)BDY(arg)); break;
                           case O_STR:
                                   wname = (STRING)BDY(arg); break;
                         default:                          default:
                                 error("memory_ifplot : invalid argument"); break;                                  error("ifplot : invalid argument"); break;
                 }                  }
         if ( !poly )          if ( !poly )
                 error("memory_ifplot : invalid argument");                  error("ifplot : invalid argument");
         switch ( ri ) {          switch ( ri ) {
                 case 0:                  case 0:
                         if ( !v[1] )                          if ( !v[1] )
                                 error("memory_ifplot : please specify all variables");                                  error("ifplot : please specify all variables");
                         MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);                          MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);
                         MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);                          MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);
                           MKNODE(n,0,defrange); MKLIST(zrange,n);
                         break;                          break;
                 case 1:                  case 1:
                         if ( !v[1] )                          if ( !v[1] )
                                 error("memory_ifplot : please specify all variables");                                  error("ifplot : please specify all variables");
                         av[0] = VR((P)BDY(BDY(range[0])));                          av[0] = VR((P)BDY(BDY(range[0])));
                         if ( v[0] == av[0] ) {                          if ( v[0] == av[0] ) {
                                 xrange = range[0];                                  xrange = range[0];
                                 MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);                                  MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);
                                   MKNODE(n,0,defrange); MKLIST(zrange,n);
                         } else if ( v[1] == av[0] ) {                          } else if ( v[1] == av[0] ) {
                                 MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);                                  MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);
                                 yrange = range[0];                                  yrange = range[0];
                         } else                                  MKNODE(n,0,defrange); MKLIST(zrange,n);
                                 error("memory_ifplot : invalid argument");                          } else {
                                   MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);
                                   MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);
                                   zrange = range[0];
                           }
                         break;                          break;
                 case 2:                  case 2: case 3:
                         av[0] = VR((P)BDY(BDY(range[0])));                          av[0] = VR((P)BDY(BDY(range[0])));
                         av[1] = VR((P)BDY(BDY(range[1])));                          av[1] = VR((P)BDY(BDY(range[1])));
                         if ( ((v[0] == av[0]) && (!v[1] || v[1] == av[1])) ||                          if ( ((v[0] == av[0]) && (!v[1] || v[1] == av[1])) ||
                                  ((v[0] == av[1]) && (!v[1] || v[1] == av[0])) ) {                                   ((v[0] == av[1]) && (!v[1] || v[1] == av[0])) ) {
                                         xrange = range[0]; yrange = range[1];                                  xrange = range[0]; yrange = range[1];
                                   if ( ri == 3 )
                                           zrange = range[2];
                                   else {
                                           MKNODE(n,0,defrange); MKLIST(zrange,n);
                                   }
                         } else                          } else
                                         error("memory_ifplot : invalid argument");                                  error("ifplot : invalid argument");
                         break;                          break;
                 default:                  default:
                         error("memory_ifplot : cannot happen"); break;                          error("ifplot : cannot happen"); break;
         }          }
         /* memory_ifplot in ox_plot requires          /* conplot in ox_plot requires
            [s_id (Q),             [s_id (Q),
                 formula (Obj),                  formula (Obj),
                 xrange=[x,xmin,xmax] (LIST),                  xrange=[x,xmin,xmax] (LIST),
                 yrange=[y,ymin,ymax] (LIST),                  yrange=[y,ymin,ymax] (LIST),
                 zrange=0,                  zrange=[z,zmin,zmax] (LIST),
                 geom=[xsize,ysize] (LIST)]                  geom=[xsize,ysize] (LIST),
                   wname=name (STRING)]
         */          */
   
         if ( stream < 0 )          stream = validate_ox_plot_stream(stream);
                 stream = current_s;  
         else  
                 current_s = stream;  
         STOQ(stream,s_id);          STOQ(stream,s_id);
         if ( !geom ) {          if ( !geom ) {
                 STOQ(300,w300);                  STOQ(300,w300);
                 MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);                  MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);
         }          }
         MKSTR(fname,"memory_plot");          if ( is_memory ) {
         arg = mknode(7,s_id,fname,poly,xrange,yrange,0,geom);                  MKSTR(fname,"memory_plot");
         Pox_rpc(arg,rp);                  arg = mknode(7,s_id,fname,poly,xrange,yrange,zrange,geom);
                   Pox_rpc(arg,&t);
                   arg = mknode(1,s_id);
                   Pox_pop_cmo(arg,rp);
           } else {
                   MKSTR(fname,"plot");
                   arg = mknode(8,s_id,fname,poly,xrange,yrange,zrange,geom,wname);
                   Pox_rpc(arg,&t);
                   *rp = (Obj)s_id;
           }
 }  }
   
 void Pconplot(NODE arg,Obj *rp)  void plot_main(NODE arg,int is_memory,Obj *rp);
   
   void Pplot(NODE arg,Obj *rp)
 {  {
           plot_main(arg,0,rp);
   }
   
   void Pmemory_plot(NODE arg,Obj *rp)
   {
           plot_main(arg,1,rp);
   }
   
   void plot_main(NODE arg,int is_memory,Obj *rp)
   {
         Q m2,p2,w300,s_id;          Q m2,p2,w300,s_id;
         NODE defrange;          NODE defrange;
         LIST xrange,yrange,zrange,range[3],list,geom;          LIST xrange,range[1],list,geom;
         VL vl,vl0;          VL vl,vl0;
         V v[2],av[2];          V v[1],av[1];
         int stream,ri,i;          int stream,ri,i;
         P poly;          P poly;
         P var;          P var;
         NODE n,n0;          NODE n,n0;
         STRING fname,wname;          STRING fname,wname;
           Obj t;
   
         STOQ(-2,m2); STOQ(2,p2);          STOQ(-2,m2); STOQ(2,p2);
         MKNODE(n,p2,0); MKNODE(defrange,m2,n);          MKNODE(n,p2,0); MKNODE(defrange,m2,n);
         poly = 0; vl = 0; geom = 0; wname = 0; stream = -1; ri = 0;          poly = 0; vl = 0; geom = 0; wname = 0; stream = -1; ri = 0;
           v[0] = 0;
         for ( ; arg; arg = NEXT(arg) )          for ( ; arg; arg = NEXT(arg) )
                 if ( !BDY(arg) )                  if ( !BDY(arg) )
                         stream = 0;                          stream = 0;
                 else                  else
                 switch ( OID(BDY(arg)) ) {                  switch ( OID(BDY(arg)) ) {
                         case O_P:                          case O_P: case O_R:
                                 poly = (P)BDY(arg);                                  poly = (P)BDY(arg);
                                 get_vars_recursive((Obj)poly,&vl);                                  get_vars_recursive((Obj)poly,&vl);
                                 for ( vl0 = vl, i = 0; vl0; vl0 = NEXT(vl0) )                                  for ( vl0 = vl, i = 0; vl0; vl0 = NEXT(vl0) )
                                         if ( vl0->v->attr == (pointer)V_IND )                                          if ( vl0->v->attr == (pointer)V_IND )
                                                 if ( i >= 2 )                                                  if ( i >= 1 )
                                                         error("ifplot : invalid argument");                                                          error("ifplot : invalid argument");
                                                 else                                                  else
                                                         v[i++] = vl0->v;                                                          v[i++] = vl0->v;
                                   if ( i != 1 )
                                           error("ifplot : invalid argument");
                                 break;                                  break;
                         case O_LIST:                          case O_LIST:
                                 list = (LIST)BDY(arg);                                  list = (LIST)BDY(arg);
                                 if ( OID(BDY(BDY(list))) == O_P )                                  if ( OID(BDY(BDY(list))) == O_P )
                                         if ( ri > 2 )                                          if ( ri > 0 )
                                                 error("ifplot : invalid argument");                                                  error("plot : invalid argument");
                                         else                                          else
                                                 range[ri++] = list;                                                  range[ri++] = list;
                                 else                                  else
Line 375  void Pconplot(NODE arg,Obj *rp)
Line 446  void Pconplot(NODE arg,Obj *rp)
                         case O_STR:                          case O_STR:
                                 wname = (STRING)BDY(arg); break;                                  wname = (STRING)BDY(arg); break;
                         default:                          default:
                                 error("ifplot : invalid argument"); break;                                  error("plot : invalid argument"); break;
                 }                  }
         if ( !poly )          if ( !poly )
                 error("ifplot : invalid argument");                  error("plot : invalid argument");
         switch ( ri ) {          switch ( ri ) {
                 case 0:                  case 0:
                         if ( !v[1] )  
                                 error("ifplot : please specify all variables");  
                         MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);                          MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);
                         MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);  
                         MKNODE(n,0,defrange); MKLIST(zrange,n);  
                         break;                          break;
                 case 1:                  case 1:
                         if ( !v[1] )  
                                 error("ifplot : please specify all variables");  
                         av[0] = VR((P)BDY(BDY(range[0])));                          av[0] = VR((P)BDY(BDY(range[0])));
                         if ( v[0] == av[0] ) {                          if ( v[0] == av[0] )
                                 xrange = range[0];                                  xrange = range[0];
                                 MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);                          else
                                 MKNODE(n,0,defrange); MKLIST(zrange,n);                                  error("plot : invalid argument");
                         } else if ( v[1] == av[0] ) {  
                                 MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);  
                                 yrange = range[0];  
                                 MKNODE(n,0,defrange); MKLIST(zrange,n);  
                         } else {  
                                 MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);  
                                 MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);  
                                 zrange = range[0];  
                         }  
                         break;                          break;
                 case 2: case 3:  
                         av[0] = VR((P)BDY(BDY(range[0])));  
                         av[1] = VR((P)BDY(BDY(range[1])));  
                         if ( ((v[0] == av[0]) && (!v[1] || v[1] == av[1])) ||  
                                  ((v[0] == av[1]) && (!v[1] || v[1] == av[0])) ) {  
                                 xrange = range[0]; yrange = range[1];  
                                 if ( ri == 3 )  
                                         zrange = range[2];  
                                 else {  
                                         MKNODE(n,0,defrange); MKLIST(zrange,n);  
                                 }  
                         } else  
                                 error("ifplot : invalid argument");  
                         break;  
                 default:                  default:
                         error("ifplot : cannot happen"); break;                          error("plot : cannot happen"); break;
         }          }
         if ( stream < 0 )  
                 stream = current_s;  
         else  
                 current_s = stream;  
   
         /* conplot in ox_plot requires          /* conplot in ox_plot requires
            [s_id (Q),             [s_id (Q),
                 formula (Obj),                  formula (Obj),
                 xrange=[x,xmin,xmax] (LIST),                  xrange=[x,xmin,xmax] (LIST),
                 yrange=[y,ymin,ymax] (LIST),                  yrange=0,
                 zrange=[z,zmin,zmax] (LIST),                  zrange=0,
                 geom=[xsize,ysize] (LIST),                  geom=[xsize,ysize] (LIST),
                 wname=name (STRING)]                  wname=name (STRING)]
         */          */
           stream = validate_ox_plot_stream(stream);
         if ( stream < 0 )  
                 stream = current_s;  
         else  
                 current_s = stream;  
         STOQ(stream,s_id);          STOQ(stream,s_id);
         if ( !geom ) {          if ( !geom ) {
                 STOQ(300,w300);                  STOQ(300,w300);
                 MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);                  MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);
         }          }
         MKSTR(fname,"plot");          if ( is_memory ) {
         arg = mknode(8,s_id,fname,poly,xrange,yrange,zrange,geom,wname);                  MKSTR(fname,"memory_plot");
         Pox_rpc(arg,rp);                  arg = mknode(7,s_id,fname,poly,xrange,0,0,geom);
                   Pox_rpc(arg,&t);
                   arg = mknode(1,s_id);
                   Pox_pop_cmo(arg,rp);
           } else {
                   MKSTR(fname,"plot");
                   arg = mknode(8,s_id,fname,poly,xrange,0,0,geom,wname);
                   Pox_rpc(arg,&t);
                   *rp = (Obj)s_id;
           }
 }  }
   
 void Pplot(NODE arg,Obj *rp)  #define Pi 3.14159265358979323846264
   
   void Ppolarplot(NODE arg,Q *rp)
 {  {
         Q m2,p2,w300,s_id;          Q m2,p2,w300,s_id;
         NODE defrange;          NODE defrange;
         LIST xrange,range[1],list,geom;          LIST zrange,range[1],list,geom;
         VL vl,vl0;          VL vl,vl0;
         V v[1],av[1];          V v[1],av[1];
         int stream,ri,i;          int stream,ri,i;
Line 463  void Pplot(NODE arg,Obj *rp)
Line 507  void Pplot(NODE arg,Obj *rp)
         P var;          P var;
         NODE n,n0;          NODE n,n0;
         STRING fname,wname;          STRING fname,wname;
           Real pi2;
           Obj t;
   
         STOQ(-2,m2); STOQ(2,p2);          MKReal(2*Pi,pi2);
         MKNODE(n,p2,0); MKNODE(defrange,m2,n);          MKNODE(n,pi2,0); MKNODE(defrange,0,n);
         poly = 0; vl = 0; geom = 0; wname = 0; stream = -1; ri = 0;          poly = 0; vl = 0; geom = 0; wname = 0; stream = -1; ri = 0;
           v[0] = 0;
         for ( ; arg; arg = NEXT(arg) )          for ( ; arg; arg = NEXT(arg) )
                 if ( !BDY(arg) )                  if ( !BDY(arg) )
                         stream = 0;                          stream = 0;
Line 478  void Pplot(NODE arg,Obj *rp)
Line 525  void Pplot(NODE arg,Obj *rp)
                                 for ( vl0 = vl, i = 0; vl0; vl0 = NEXT(vl0) )                                  for ( vl0 = vl, i = 0; vl0; vl0 = NEXT(vl0) )
                                         if ( vl0->v->attr == (pointer)V_IND )                                          if ( vl0->v->attr == (pointer)V_IND )
                                                 if ( i >= 1 )                                                  if ( i >= 1 )
                                                         error("ifplot : invalid argument");                                                          error("polarplot : invalid argument");
                                                 else                                                  else
                                                         v[i++] = vl0->v;                                                          v[i++] = vl0->v;
                                 if ( i != 1 )                                  if ( i != 1 )
                                         error("ifplot : invalid argument");                                          error("polarplot : invalid argument");
                                 break;                                  break;
                         case O_LIST:                          case O_LIST:
                                 list = (LIST)BDY(arg);                                  list = (LIST)BDY(arg);
                                 if ( OID(BDY(BDY(list))) == O_P )                                  if ( OID(BDY(BDY(list))) == O_P )
                                         if ( ri > 0 )                                          if ( ri > 0 )
                                                 error("plot : invalid argument");                                                  error("polarplot : invalid argument");
                                         else                                          else
                                                 range[ri++] = list;                                                  range[ri++] = list;
                                 else                                  else
Line 499  void Pplot(NODE arg,Obj *rp)
Line 546  void Pplot(NODE arg,Obj *rp)
                         case O_STR:                          case O_STR:
                                 wname = (STRING)BDY(arg); break;                                  wname = (STRING)BDY(arg); break;
                         default:                          default:
                                 error("plot : invalid argument"); break;                                  error("polarplot : invalid argument"); break;
                 }                  }
         if ( !poly )          if ( !poly )
                 error("plot : invalid argument");                  error("polarplot : invalid argument");
         switch ( ri ) {          switch ( ri ) {
                 case 0:                  case 0:
                         MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);                          MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(zrange,n);
                         break;                          break;
                 case 1:                  case 1:
                         av[0] = VR((P)BDY(BDY(range[0])));                          av[0] = VR((P)BDY(BDY(range[0])));
                         if ( v[0] == av[0] )                          if ( v[0] == av[0] )
                                 xrange = range[0];                                  zrange = range[0];
                         else                          else
                                 error("plot : invalid argument");                                  error("polarplot : invalid argument");
                         break;                          break;
                 default:                  default:
                         error("plot : cannot happen"); break;                          error("polarplot : cannot happen"); break;
         }          }
         /* conplot in ox_plot requires          stream = validate_ox_plot_stream(stream);
            [s_id (Q),  
                 formula (Obj),  
                 xrange=[x,xmin,xmax] (LIST),  
                 yrange=0,  
                 zrange=0,  
                 geom=[xsize,ysize] (LIST),  
                 wname=name (STRING)]  
         */  
         if ( stream < 0 )  
                 stream = current_s;  
         else  
                 current_s = stream;  
         STOQ(stream,s_id);          STOQ(stream,s_id);
         if ( !geom ) {          if ( !geom ) {
                 STOQ(300,w300);                  STOQ(300,w300);
                 MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);                  MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);
         }          }
         MKSTR(fname,"plot");          MKSTR(fname,"plot");
         arg = mknode(8,s_id,fname,poly,xrange,0,0,geom,wname);          arg = mknode(8,s_id,fname,poly,0,0,zrange,geom,wname);
         Pox_rpc(arg,rp);          Pox_rpc(arg,&t);
           *rp = s_id;
 }  }
   
 void Pplotover(NODE arg,Obj *rp)  void Pplotover(NODE arg,Q *rp)
 {  {
         Q s_id,index;          Q s_id,index;
         P poly;          P poly;
         STRING fname;          STRING fname;
           Obj t;
   
         poly = (P)ARG0(arg);          poly = (P)ARG0(arg);
         s_id = (Q)ARG1(arg);          s_id = (Q)ARG1(arg);
         index = (Q)ARG2(arg);          index = (Q)ARG2(arg);
         MKSTR(fname,"plotover");          MKSTR(fname,"plotover");
         arg = mknode(4,s_id,fname,index,poly);          if ( argc(arg) == 4 )
         Pox_rpc(arg,rp);                  arg = mknode(5,s_id,fname,index,poly,(Q)ARG3(arg));
           else
                   arg = mknode(4,s_id,fname,index,poly);
           Pox_rpc(arg,&t);
           *rp = s_id;
 }  }
   
 /* arg = [x,y,r,s_id,index] */  /* arg = [x,y,r,c,s_id,index] */
   
 void Pdrawcircle(NODE arg,Obj *rp)  void Pdrawcircle(NODE arg,Q *rp)
 {  {
         Q s_id,index;          Q s_id,index;
         Obj x,y,r;          Obj x,y,r,c;
         STRING fname;          STRING fname;
         NODE n;          NODE n;
         LIST pos;          LIST pos;
           Obj t;
   
         x = (Obj)ARG0(arg);          x = (Obj)ARG0(arg);
         y = (Obj)ARG1(arg);          y = (Obj)ARG1(arg);
         r = (Obj)ARG2(arg);          r = (Obj)ARG2(arg);
         s_id = (Q)ARG3(arg);          c = (Obj)ARG3(arg);
         index = (Q)ARG4(arg);          s_id = (Q)ARG4(arg);
           index = (Q)ARG5(arg);
         MKSTR(fname,"drawcircle");          MKSTR(fname,"drawcircle");
         n = mknode(3,x,y,r); MKLIST(pos,n);          n = mknode(3,x,y,r); MKLIST(pos,n);
         arg = mknode(4,s_id,fname,index,pos);          arg = mknode(5,s_id,fname,index,pos,c);
         Pox_rpc(arg,rp);          Pox_rpc(arg,&t);
           *rp = s_id;
 }  }
   
 /* draw_obj(s_id,cindex,point|line); point = [x,y], line = [xa,ya,xb,yb] */  /* draw_obj(s_id,cindex,point|line); point = [x,y], line = [xa,ya,xb,yb] */
 void Pdraw_obj(NODE arg,Obj *rp)  void Pdraw_obj(NODE arg,Q *rp)
 {  {
         static STRING fname;          static STRING fname;
         Q s_id,index;          Q s_id,index;
         LIST obj;          LIST obj;
           Obj t;
   
         if ( !fname ) {          if ( !fname ) {
                 MKSTR(fname,"draw_obj");                  MKSTR(fname,"draw_obj");
Line 593  void Pdraw_obj(NODE arg,Obj *rp)
Line 638  void Pdraw_obj(NODE arg,Obj *rp)
                 arg = mknode(5,s_id,fname,index,obj,ARG3(arg));                  arg = mknode(5,s_id,fname,index,obj,ARG3(arg));
         else          else
                 arg = mknode(4,s_id,fname,index,obj);                  arg = mknode(4,s_id,fname,index,obj);
         Pox_cmo_rpc(arg,rp);          Pox_cmo_rpc(arg,&t);
           *rp = s_id;
 }  }
   
 void Pclear_canvas(NODE arg,Obj *rp)  /* draw_string(s_id,cindex,pos,string,[,color]); pos=[x,y] */
   void Pdraw_string(NODE arg,Q *rp)
 {  {
         static STRING fname;          static STRING fname;
           STRING str;
         Q s_id,index;          Q s_id,index;
           LIST pos;
           Obj t;
   
         if ( !fname ) {          if ( !fname ) {
                   MKSTR(fname,"draw_string");
           }
           s_id = (Q)ARG0(arg);
           index = (Q)ARG1(arg);
           pos = (LIST)ARG2(arg);
           str = (STRING)ARG3(arg);
           /* ARG4(arg) = color */
           if ( argc(arg) == 5 )
                   arg = mknode(6,s_id,fname,index,pos,str,ARG4(arg));
           else
                   arg = mknode(5,s_id,fname,index,pos,str);
           Pox_cmo_rpc(arg,&t);
           *rp = s_id;
   }
   
   void Pclear_canvas(NODE arg,Q *rp)
   {
           static STRING fname;
           Q s_id,index;
           Obj t;
   
           if ( !fname ) {
                 MKSTR(fname,"clear_canvas");                  MKSTR(fname,"clear_canvas");
         }          }
         s_id = (Q)ARG0(arg);          s_id = (Q)ARG0(arg);
         index = (Q)ARG1(arg);          index = (Q)ARG1(arg);
         arg = mknode(3,s_id,fname,index);          arg = mknode(3,s_id,fname,index);
         Pox_cmo_rpc(arg,rp);          Pox_cmo_rpc(arg,&t);
           *rp = s_id;
 }  }
   
 #if 0  #if 0

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.20

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