=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/dp.c,v retrieving revision 1.72 retrieving revision 1.73 diff -u -p -r1.72 -r1.73 --- OpenXM_contrib2/asir2000/builtin/dp.c 2007/09/19 05:42:59 1.72 +++ OpenXM_contrib2/asir2000/builtin/dp.c 2007/10/14 02:32:21 1.73 @@ -44,7 +44,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.71 2007/09/17 12:47:45 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.72 2007/09/19 05:42:59 noro Exp $ */ #include "ca.h" #include "base.h" @@ -68,6 +68,7 @@ void Pdp_set_sugar(); void Pdp_cri1(),Pdp_cri2(),Pdp_subd(),Pdp_mod(),Pdp_red_mod(),Pdp_tdiv(); void Pdp_prim(),Pdp_red_coef(),Pdp_mag(),Pdp_set_kara(),Pdp_rat(); void Pdp_nf(),Pdp_true_nf(),Pdp_true_nf_marked(),Pdp_true_nf_marked_mod(); +void Pdp_true_nf_and_quotient_marked(); void Pdp_nf_mod(),Pdp_true_nf_mod(); void Pdp_criB(),Pdp_nelim(); void Pdp_minp(),Pdp_sp_mod(); @@ -137,6 +138,7 @@ struct ftab dp_tab[] = { {"dp_nf_f",Pdp_nf_f,4}, {"dp_true_nf",Pdp_true_nf,4}, {"dp_true_nf_marked",Pdp_true_nf_marked,4}, + {"dp_true_nf_and_quotient_marked",Pdp_true_nf_and_quotient_marked,4}, {"dp_true_nf_marked_mod",Pdp_true_nf_marked_mod,5}, {"dp_nf_mod",Pdp_nf_mod,5}, {"dp_true_nf_mod",Pdp_true_nf_mod,5}, @@ -972,6 +974,38 @@ LIST *rp; dp_true_nf_marked(b,g,ps,hps,&nm,&cont,&dn); } n = mknode(3,nm,cont,dn); + MKLIST(*rp,n); +} + +DP *dp_true_nf_and_quotient_marked (NODE b,DP g,DP *ps,DP *hps,DP *rp,P *dnp); + +void Pdp_true_nf_and_quotient_marked(arg,rp) +NODE arg; +LIST *rp; +{ + NODE b,n; + DP *ps,*hps; + DP g; + DP nm; + VECT quo; + P dn; + int full; + + do_weyl = 0; dp_fcoeffs = 0; + asir_assert(ARG0(arg),O_LIST,"dp_true_nf_and_quotient_marked"); + asir_assert(ARG1(arg),O_DP,"dp_true_nf_and_quotient_marked"); + asir_assert(ARG2(arg),O_VECT,"dp_true_nf_and_quotient_marked"); + asir_assert(ARG3(arg),O_VECT,"dp_true_nf_and_quotient_marked"); + if ( !(g = (DP)ARG1(arg)) ) { + nm = 0; dn = (P)ONE; + } else { + b = BDY((LIST)ARG0(arg)); + ps = (DP *)BDY((VECT)ARG2(arg)); + hps = (DP *)BDY((VECT)ARG3(arg)); + NEWVECT(quo); quo->len = ((VECT)ARG2(arg))->len; + quo->body = (pointer *)dp_true_nf_and_quotient_marked(b,g,ps,hps,&nm,&dn); + } + n = mknode(3,nm,dn,quo); MKLIST(*rp,n); }