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

Diff for /OpenXM_contrib2/asir2000/parse/quote.c between version 1.6 and 1.7

version 1.6, 2001/10/09 01:36:25 version 1.7, 2004/03/03 09:25:30
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/parse/quote.c,v 1.5 2001/09/05 09:01:28 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/parse/quote.c,v 1.6 2001/10/09 01:36:25 noro Exp $ */
   
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 155  void polytoquote(P a,QUOTE *c)
Line 155  void polytoquote(P a,QUOTE *c)
 {  {
         DCP dc,t;          DCP dc,t;
         DCP *dca;          DCP *dca;
         int n,i;          int n,i,sgn;
         QUOTE v,r,s,u;          QUOTE v,r,s,u;
   
         if ( !a || (OID(a) == O_N) ) {          if ( !a || (OID(a) == O_N) ) {
                 MKQUOTE(*c,mkfnode(1,I_FORMULA,(pointer)a));                  MKQUOTE(*c,mkfnode(1,I_FORMULA,(pointer)a));
                 return;                  return;
         }          }
         dc = DC((P)a);  
         vartoquote(VR((P)a),&v);          vartoquote(VR((P)a),&v);
         for ( t = dc, n = 0; t; t = NEXT(t), n++ );          dc = DC((P)a);
         dca = (DCP *)ALLOCA(n*sizeof(DCP));          dctoquote(dc,v,&r,&sgn);
         for ( t = dc, i = 0; t; t = NEXT(t), i++ )          if ( sgn == -1 ) {
                 dca[i] = t;                  MKQUOTE(u,mkfnode(1,I_MINUS,BDY(r)));
         dctoquote(dca[n-1],v,&r);  
         for ( i = n-2; i >= 0; i-- ) {  
                 dctoquote(dca[i],v,&s);  
                 addquote(CO,s,r,&u);  
                 r = u;                  r = u;
         }          }
           for (dc = NEXT(dc); dc; dc = NEXT(dc) ) {
                   dctoquote(dc,v,&s,&sgn);
                   if ( sgn == -1 )
                           subquote(CO,r,s,&u);
                   else
                           addquote(CO,r,s,&u);
                   r = u;
           }
         *c = r;          *c = r;
 }  }
   
Line 202  void dptoquote(DP a,QUOTE *c)
Line 205  void dptoquote(DP a,QUOTE *c)
         *c = r;          *c = r;
 }  }
   
 void dctoquote(DCP dc,QUOTE v,QUOTE *c)  void dctoquote(DCP dc,QUOTE v,QUOTE *q,int *sgn)
 {  {
         QUOTE d,s,u;          QUOTE t,s,u,r;
           P c;
           Q d;
   
         if ( UNIQ(COEF(dc)) ) {          if ( mmono(COEF(dc)) ) {
                 if ( DEG(dc) ) {                  /* -xyz... */
                         if ( UNIQ(DEG(dc)) )                  chsgnp(COEF(dc),&c);
                                 *c = v;                  *sgn = -1;
           } else {
                   c = COEF(dc);
                   *sgn = 1;
           }
           d = DEG(dc);
           if ( UNIQ(c) ) {
                   if ( d ) {
                           if ( UNIQ(d) )
                                   r = v;
                         else {                          else {
                                 objtoquote((Obj)DEG(dc),&d);                                  objtoquote((Obj)d,&t);
                                 pwrquote(CO,v,d,c);                                  pwrquote(CO,v,t,&r);
                         }                          }
                 } else                  } else
                         objtoquote((Obj)ONE,c);                          objtoquote((Obj)ONE,&r);
         } else {          } else {
                 objtoquote((Obj)COEF(dc),&u);                  objtoquote((Obj)c,&u);
                 if ( DEG(dc) ) {                  if ( !NUM(c) && NEXT(DC(c)) ) {
                         if ( UNIQ(DEG(dc)) )                          MKQUOTE(t,mkfnode(1,I_PAREN,BDY(u)));
                           u = t;
                   }
                   if ( d ) {
                           if ( UNIQ(d) )
                                 s = v;                                  s = v;
                         else {                          else {
                                 objtoquote((Obj)DEG(dc),&d);                                  objtoquote((Obj)d,&t);
                                 pwrquote(CO,v,d,&s);                                  pwrquote(CO,v,t,&s);
                         }                          }
                         mulquote(CO,u,s,c);                          mulquote(CO,u,s,&r);
                 } else                  } else
                         *c = u;                          r = u;
         }          }
           *q = r;
 }  }
   
 void mptoquote(MP m,int n,QUOTE *c)  void mptoquote(MP m,int n,QUOTE *c)

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

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