[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.17 and 1.21

version 1.17, 2005/05/18 03:27:00 version 1.21, 2011/06/16 08:17:15
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.16 2002/10/02 01:38:04 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/plot/plotf.c,v 1.20 2006/11/15 01:28:44 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 54 
Line 54 
   
 void Pifplot(), Pconplot(), Pplotover(), Pplot(), Parrayplot(), Pdrawcircle();  void Pifplot(), Pconplot(), Pplotover(), Pplot(), Parrayplot(), Pdrawcircle();
 void Ppolarplot();  void Ppolarplot();
 void Pmemory_ifplot();  void Pmemory_ifplot(),Pmemory_conplot(),Pmemory_plot();
 void Popen_canvas(), Pclear_canvas(), Pdraw_obj(), Pdraw_string();  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},
           {"memory_plot",Pmemory_plot,-5},
         {"polarplot",Ppolarplot,-6},          {"polarplot",Ppolarplot,-6},
         {"plotover",Pplotover,-4},          {"plotover",Pplotover,-4},
         {"drawcircle",Pdrawcircle,5},          {"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},
Line 119  void Popen_canvas(NODE arg,Q *rp)
Line 121  void Popen_canvas(NODE arg,Q *rp)
         *rp = s_id;          *rp = s_id;
 }  }
   
 void Pifplot(NODE arg,Q *rp)  void ifplot_main(NODE arg,int is_memory, 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 219  void Pifplot(NODE arg,Q *rp)
Line 233  void Pifplot(NODE arg,Q *rp)
                 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,&t);                  arg = mknode(7,s_id,fname,poly,xrange,yrange,NULLP,geom);
         *rp = s_id;                  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,NULLP,geom,wname);
                   Pox_rpc(arg,&t);
                   *rp = (Obj)s_id;
           }
 }  }
   
 void Pmemory_ifplot(NODE arg,Q *rp)  void conplot_main(NODE arg,int is_memory, Obj *rp);
   
   void Pconplot(NODE arg,Obj *rp)
 {  {
         Q m2,p2,w300,s_id;          conplot_main(arg,0,rp);
         NODE defrange;  }
         LIST xrange,yrange,range[2],list,geom;  
         VL vl,vl0;  
         V v[2],av[2];  
         int stream,ri,i;  
         P poly;  
         P var;  
         NODE n,n0;  
         STRING fname;  
         Obj t;  
   
         STOQ(-2,m2); STOQ(2,p2);  void Pmemory_conplot(NODE arg,Obj *rp)
         MKNODE(n,p2,0); MKNODE(defrange,m2,n);  {
         poly = 0; vl = 0; geom = 0; stream = -1; ri = 0;          conplot_main(arg,1,rp);
         for ( ; arg; arg = NEXT(arg) )  
                 if ( !BDY(arg) )  
                         stream = 0;  
                 else  
                 switch ( OID(BDY(arg)) ) {  
                         case O_P:  
                                 poly = (P)BDY(arg);  
                                 get_vars_recursive((Obj)poly,&vl);  
                                 for ( vl0 = vl, i = 0; vl0; vl0 = NEXT(vl0) )  
                                         if ( vl0->v->attr == (pointer)V_IND )  
                                                 if ( i >= 2 )  
                                                         error("ifplot : invalid argument");  
                                                 else  
                                                         v[i++] = vl0->v;  
                                 break;  
                         case O_LIST:  
                                 list = (LIST)BDY(arg);  
                                 if ( OID(BDY(BDY(list))) == O_P )  
                                         if ( ri > 1 )  
                                                 error("ifplot : invalid argument");  
                                         else  
                                                 range[ri++] = list;  
                                 else  
                                         geom = list;  
                                 break;  
                         case O_N:  
                                 stream = QTOS((Q)BDY(arg)); break;  
                         default:  
                                 error("memory_ifplot : invalid argument"); break;  
                 }  
         if ( !poly )  
                 error("memory_ifplot : invalid argument");  
         switch ( ri ) {  
                 case 0:  
                         if ( !v[1] )  
                                 error("memory_ifplot : please specify all variables");  
                         MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);  
                         MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);  
                         break;  
                 case 1:  
                         if ( !v[1] )  
                                 error("memory_ifplot : please specify all variables");  
                         av[0] = VR((P)BDY(BDY(range[0])));  
                         if ( v[0] == av[0] ) {  
                                 xrange = range[0];  
                                 MKV(v[1],var); MKNODE(n,var,defrange); MKLIST(yrange,n);  
                         } else if ( v[1] == av[0] ) {  
                                 MKV(v[0],var); MKNODE(n,var,defrange); MKLIST(xrange,n);  
                                 yrange = range[0];  
                         } else  
                                 error("memory_ifplot : invalid argument");  
                         break;  
                 case 2:  
                         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];  
                         } else  
                                         error("memory_ifplot : invalid argument");  
                         break;  
                 default:  
                         error("memory_ifplot : cannot happen"); break;  
         }  
         /* memory_ifplot in ox_plot requires  
            [s_id (Q),  
                 formula (Obj),  
                 xrange=[x,xmin,xmax] (LIST),  
                 yrange=[y,ymin,ymax] (LIST),  
                 zrange=0,  
                 geom=[xsize,ysize] (LIST)]  
         */  
   
         stream = validate_ox_plot_stream(stream);  
         STOQ(stream,s_id);  
         if ( !geom ) {  
                 STOQ(300,w300);  
                 MKNODE(n0,w300,0); MKNODE(n,w300,n0); MKLIST(geom,n);  
         }  
         MKSTR(fname,"memory_plot");  
         arg = mknode(7,s_id,fname,poly,xrange,yrange,0,geom);  
         Pox_rpc(arg,&t);  
         *rp = s_id;  
 }  }
   
 void Pconplot(NODE arg,Q *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;
Line 438  void Pconplot(NODE arg,Q *rp)
Line 370  void Pconplot(NODE arg,Q *rp)
                 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,&t);                  arg = mknode(7,s_id,fname,poly,xrange,yrange,zrange,geom);
         *rp = s_id;                  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 Pplot(NODE arg,Q *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,range[1],list,geom;          LIST xrange,range[1],list,geom;
Line 527  void Pplot(NODE arg,Q *rp)
Line 479  void Pplot(NODE arg,Q *rp)
                 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,0,0,geom,wname);                  MKSTR(fname,"memory_plot");
         Pox_rpc(arg,&t);                  arg = mknode(7,s_id,fname,poly,xrange,NULLP,NULLP,geom);
         *rp = s_id;                  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,NULLP,NULLP,geom,wname);
                   Pox_rpc(arg,&t);
                   *rp = (Obj)s_id;
           }
 }  }
   
 #define Pi 3.14159265358979323846264  #define Pi 3.14159265358979323846264
Line 611  void Ppolarplot(NODE arg,Q *rp)
Line 571  void Ppolarplot(NODE arg,Q *rp)
                 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,0,0,zrange,geom,wname);          arg = mknode(8,s_id,fname,poly,NULLP,NULLP,zrange,geom,wname);
         Pox_rpc(arg,&t);          Pox_rpc(arg,&t);
         *rp = s_id;          *rp = s_id;
 }  }
Line 635  void Pplotover(NODE arg,Q *rp)
Line 595  void Pplotover(NODE arg,Q *rp)
         *rp = s_id;          *rp = s_id;
 }  }
   
 /* arg = [x,y,r,s_id,index] */  /* arg = [x,y,r,c,s_id,index] */
   
 void Pdrawcircle(NODE arg,Q *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;
Line 649  void Pdrawcircle(NODE arg,Q *rp)
Line 609  void Pdrawcircle(NODE arg,Q *rp)
         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,&t);          Pox_rpc(arg,&t);
         *rp = s_id;          *rp = s_id;
 }  }

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.21

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