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

Diff for /OpenXM_contrib2/asir2000/builtin/var.c between version 1.2 and 1.8

version 1.2, 2000/08/21 08:31:21 version 1.8, 2015/12/02 13:12:31
Line 23 
Line 23 
  * shall be made on your publication or presentation in any form of the   * shall be made on your publication or presentation in any form of the
  * results obtained by use of the SOFTWARE.   * results obtained by use of the SOFTWARE.
  * (4) In the event that you modify the SOFTWARE, you shall notify FLL by   * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
  * e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification   * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
  * for such modification or the source code of the modified part of the   * for such modification or the source code of the modified part of the
  * SOFTWARE.   * SOFTWARE.
  *   *
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/builtin/var.c,v 1.1.1.1 1999/12/03 07:39:07 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/var.c,v 1.7 2012/02/03 06:42:34 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
   
 void Pvar(), Pvars(), Puc(), Pvars_recursive();  void Pvar(), Pvars(), Puc(), Pvars_recursive(),Psimple_is_eq();
 void get_vars(Obj,VL *);  void Pdelete_uc();
 void get_vars_recursive(Obj,VL *);  
   
 struct ftab var_tab[] = {  struct ftab var_tab[] = {
         {"var",Pvar,1},          {"var",Pvar,1},
         {"vars",Pvars,1},          {"vars",Pvars,1},
         {"vars_recursive",Pvars_recursive,1},          {"vars_recursive",Pvars_recursive,1},
         {"uc",Puc,0},          {"uc",Puc,0},
           {"delete_uc",Pdelete_uc,-1},
           {"simple_is_eq",Psimple_is_eq,2},
         {0,0,0},          {0,0,0},
 };  };
   
 void Pvar(arg,rp)  void Psimple_is_eq(NODE arg,Q *rp)
 NODE arg;  
 Obj *rp;  
 {  {
           int ret;
   
           ret = is_eq(ARG0(arg),ARG1(arg));
           STOQ(ret,*rp);
   }
   
   int is_eq(Obj a0,Obj a1)
   {
           P p0,p1;
           DCP dc0,dc1;
   
           if ( !a0 ) return a1?0:1;
           else if ( !a1 ) return 0;
           else if ( OID(a0) != OID(a1) ) return 0;
           else {
                   switch ( OID(a0) ) {
                           case O_P:
                                   p0 = (P)a0; p1 = (P)a1;
                                   if ( VR(p0) == VR(p1) ) {
                                           for ( dc0 = DC(p0), dc1 = DC(p1); dc0 && dc1; dc0 = NEXT(dc0), dc1 = NEXT(dc1) ) {
                                                   if ( cmpq(DEG(dc0),DEG(dc1)) ) return 0;
                                                   if ( !is_eq((Obj)COEF(dc0),(Obj)COEF(dc1)) ) return 0;
                                           }
                                           return (dc0||dc1)?0:1;
                                   } else return 0;
                                   break;
                           default:
                                   return !arf_comp(CO,a0,a1);
                                   break;
                   }
           }
   }
   
   void Pvar(NODE arg,Obj *rp)
   {
         Obj t;          Obj t;
         P p;          P p;
         V vn,vd,v;          V vn,vd,v;
Line 90  Obj *rp;
Line 124  Obj *rp;
                 *rp = 0;                  *rp = 0;
 }  }
   
 void Pvars(arg,rp)  void Pvars(NODE arg,LIST *rp)
 NODE arg;  
 LIST *rp;  
 {  {
         VL vl;          VL vl;
         NODE n,n0;          NODE n,n0;
Line 107  LIST *rp;
Line 139  LIST *rp;
         MKLIST(*rp,n0);          MKLIST(*rp,n0);
 }  }
   
 void Pvars_recursive(arg,rp)  void Pvars_recursive(NODE arg,LIST *rp)
 NODE arg;  
 LIST *rp;  
 {  {
         VL vl;          VL vl;
         NODE n,n0;          NODE n,n0;
Line 124  LIST *rp;
Line 154  LIST *rp;
         MKLIST(*rp,n0);          MKLIST(*rp,n0);
 }  }
   
 void get_vars_recursive(obj,vlp)  void get_vars_recursive(Obj obj,VL *vlp)
 Obj obj;  
 VL *vlp;  
 {  {
         VL vl,vl0,vl1,vl2,t;          VL vl,vl0,vl1,vl2,t;
         PFINS ins;          PFINS ins;
Line 148  VL *vlp;
Line 176  VL *vlp;
         mergev(CO,vl,vl0,vlp);          mergev(CO,vl,vl0,vlp);
 }  }
   
 void get_vars(t,vlp)  void get_vars(Obj t,VL *vlp)
 Obj t;  
 VL *vlp;  
 {  {
         pointer *vb;          pointer *vb;
         pointer **mb;          pointer **mb;
Line 194  VL *vlp;
Line 220  VL *vlp;
                                         vl = vl2;                                          vl = vl2;
                                 }                                  }
                                 break;                                  break;
                           case O_NBP:
                                   n = BDY((NBP)t);
                                   for ( vl = 0; n; n = NEXT(n) ) {
                                           get_vars((Obj)(((NBM)BDY(n))->c),&vl1);
                                           mergev(CO,vl,vl1,&vl2);
                                           vl = vl2;
                                   }
                                   break;
                         default:                          default:
                                 vl = 0; break;                                  vl = 0; break;
                 }                  }
         *vlp = vl;          *vlp = vl;
 }  }
   
 void Puc(p)  void Puc(Obj *p)
 Obj *p;  
 {  {
         VL vl;          VL vl;
         V v;          V v;
         P t;          P t;
         char buf[BUFSIZ];          char buf[BUFSIZ];
           char *n,*nv;
         static int UCN;          static int UCN;
   
         NEWV(v); v->attr = (pointer)V_UC;          NEWV(v); v->attr = (pointer)V_UC;
         sprintf(buf,"_%d",UCN++);          sprintf(buf,"_%d",UCN++);
         NAME(v) = (char *)CALLOC(strlen(buf)+1,sizeof(char));          nv = NAME(v) = (char *)CALLOC(strlen(buf)+1,sizeof(char));
         strcpy(NAME(v),buf);          strcpy(NAME(v),buf);
         for ( vl = CO; NEXT(vl); vl = NEXT(vl) );          for ( vl = CO; vl; vl = NEXT(vl) )
         NEWVL(NEXT(vl)); VR(NEXT(vl)) = v; NEXT(NEXT(vl)) = 0;                  if ( (n=NAME(VR(vl))) && !strcmp(n,nv) ) break;
                   else if ( !NEXT(vl) ) {
                           NEWVL(NEXT(vl)); VR(NEXT(vl)) = v; NEXT(NEXT(vl)) = 0;
                           break;
                   }
         MKV(v,t); *p = (Obj)t;          MKV(v,t); *p = (Obj)t;
   }
   
   void Pdelete_uc(NODE arg,Obj *p)
   {
     VL vl,prev;
     V v;
   
     if ( argc(arg) == 1 ) {
       asir_assert(ARG0(arg),O_P,"delete_uc");
       v = VR((P)ARG0(arg));
     } else
       v = 0;
   
     for ( prev = 0, vl = CO; vl; vl = NEXT(vl) ) {
       if ( (!v || v == vl->v) && vl->v->attr == (pointer)V_UC ) {
         if ( prev == 0 )
           CO = NEXT(vl);
         else
           NEXT(prev) = NEXT(vl);
       } else
         prev = vl;
     }
     *p = 0;
 }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.8

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