=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/dist.c,v retrieving revision 1.28 retrieving revision 1.30 diff -u -p -r1.28 -r1.30 --- OpenXM_contrib2/asir2000/engine/dist.c 2004/02/05 08:28:53 1.28 +++ OpenXM_contrib2/asir2000/engine/dist.c 2004/04/14 07:27:41 1.30 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/engine/dist.c,v 1.27 2004/02/03 23:31:57 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/dist.c,v 1.29 2004/03/05 02:26:52 noro Exp $ */ #include "ca.h" @@ -80,6 +80,14 @@ void comm_quod(VL vl,DP p1,DP p2,DP *pr); void muldm_trunc(VL vl,DP p,MP m0,DL dl,DP *pr); void muldc_trunc(VL vl,DP p,P c,DL dl,DP *pr); +void order_init() +{ + struct order_spec *spec; + + create_order_spec(0,0,&spec); + initd(spec); +} + int has_sfcoef(DP f) { MP t; @@ -290,12 +298,23 @@ void addd(VL vl,DP p1,DP p2,DP *pr) int n; MP m1,m2,mr,mr0; P t; + DL d; if ( !p1 ) *pr = p2; else if ( !p2 ) *pr = p1; else { + if ( OID(p1) <= O_R ) { + n = NV(p2); NEWDL(d,n); + NEWMP(m1); m1->dl = d; C(m1) = p1; NEXT(m1) = 0; + MKDP(n,m1,p1); (p1)->sugar = 0; + } + if ( OID(p2) <= O_R ) { + n = NV(p1); NEWDL(d,n); + NEWMP(m2); m2->dl = d; C(m2) = p2; NEXT(m2) = 0; + MKDP(n,m2,p2); (p2)->sugar = 0; + } for ( n = NV(p1), m1 = BDY(p1), m2 = BDY(p2), mr0 = 0; m1 && m2; ) switch ( (*cmpdl)(n,m1->dl,m2->dl) ) { case 0: