=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/dp-supp.c,v retrieving revision 1.14 retrieving revision 1.17 diff -u -p -r1.14 -r1.17 --- OpenXM_contrib2/asir2000/builtin/dp-supp.c 2001/09/11 03:13:42 1.14 +++ OpenXM_contrib2/asir2000/builtin/dp-supp.c 2001/09/17 02:58:27 1.17 @@ -45,10 +45,11 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.13 2001/09/04 08:48:18 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.16 2001/09/17 01:18:34 noro Exp $ */ #include "ca.h" #include "base.h" +#include "inline.h" #include "parse.h" #include "ox.h" @@ -826,17 +827,28 @@ DP *rp; DL d1,d2,d; MP m; DP t,s; - int c,c1; -struct oEGT t0,t1; + int c,c1,c2; + struct oEGT t0,t1; + extern int do_weyl; n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl; _NEWDL(d,n); d->td = d1->td - d2->td; for ( i = 0; i < n; i++ ) d->d[i] = d1->d[i]-d2->d[i]; - c = invm(ITOS(BDY(p2)->c),mod); c1 = dmar(c,ITOS(BDY(p1)->c),0,mod); + c = invm(ITOS(BDY(p2)->c),mod); + c2 = ITOS(BDY(p1)->c); + DMAR(c,c2,0,mod,c1); _NEWMP(m); m->dl = d; m->c = STOI(mod-c1); NEXT(m) = 0; +#if 0 _MKDP(n,m,s); s->sugar = d->td; _mulmd_dup(mod,s,p2,&t); _free_dp(s); +#else + if ( do_weyl ) { + _weyl_mulmdm_dup(mod,p2,m,&t); _FREEMP(m); + } else { + _mulmdm_dup(mod,p2,m,&t); _FREEMP(m); + } +#endif /* get_eg(&t0); */ _addmd_destructive(mod,p1,t,rp); /* get_eg(&t1); add_eg(&eg_red_mod,&t0,&t1); */ @@ -1690,3 +1702,42 @@ DP p; } } +int dp_homogeneous(p) +DP p; +{ + MP m; + int d; + + if ( !p ) + return 1; + else { + m = BDY(p); + d = m->dl->td; + m = NEXT(m); + for ( ; m; m = NEXT(m) ) { + if ( m->dl->td != d ) + return 0; + } + return 1; + } +} + +_print_mp(nv,m) +int nv; +MP m; +{ + int i; + + if ( !m ) + return; + for ( ; m; m = NEXT(m) ) { + fprintf(stderr,"%d<",ITOS(C(m))); + for ( i = 0; i < nv; i++ ) { + fprintf(stderr,"%d",m->dl->d[i]); + if ( i != nv-1 ) + fprintf(stderr," "); + } + fprintf(stderr,">",C(m)); + } + fprintf(stderr,"\n"); +}