=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/poly.c,v retrieving revision 1.23 retrieving revision 1.29 diff -u -p -r1.23 -r1.29 --- OpenXM_contrib2/asir2000/builtin/poly.c 2011/07/20 03:19:11 1.23 +++ OpenXM_contrib2/asir2000/builtin/poly.c 2018/03/28 05:27:22 1.29 @@ -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/builtin/poly.c,v 1.22 2011/03/30 02:43:18 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/poly.c,v 1.28 2018/03/27 06:29:19 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -125,6 +125,7 @@ struct ftab poly_tab[] = { {"maxblen",Pmaxblen,1}, {"ord",Pord,-1}, {"remove_vars",Premove_vars,1}, + {"delete_vars",Premove_vars,1}, {"coef0",Pcoef0,-3}, {"coef",Pcoef,-3}, {"coef_gf2n",Pcoef_gf2n,2}, @@ -147,7 +148,7 @@ struct ftab poly_tab[] = { {"ch_mv",Pch_mv,2}, {"re_mv",Pre_mv,2}, - {"ptomp",Pptomp,2}, + {"ptomp",Pptomp,-2}, {"mptop",Pmptop,1}, {"ptolmp",Pptolmp,1}, @@ -456,6 +457,9 @@ void Pord(NODE arg,LIST *listp) V *va; V v; +#if 0 +printf("LASTCO="); printv(CO,LASTCO->v); printf("\n"); +#endif if ( current_option ) { for ( opt = current_option; opt; opt = NEXT(opt) ) { p = BDY((LIST)BDY(opt)); @@ -499,10 +503,16 @@ void Pord(NODE arg,LIST *listp) VR(tvl) = v; } } + } else { + for ( svl = vl; svl; svl = NEXT(svl) ) { + if ( svl->v->attr == (pointer)V_PF ) + ((PFINS)svl->v->priv)->pf->ins = 0; + } } if ( vl ) NEXT(tvl) = 0; CO = vl; + update_LASTCO(); } for ( n = 0, vl = CO; vl; vl = NEXT(vl) ) { NEXTNODE(n,tn); MKV(VR(vl),t); BDY(tn) = (pointer)t; @@ -820,8 +830,9 @@ void Psetmod_ff(NODE arg,Obj *rp) if ( ac == 1 ) { mod = (Obj)ARG0(arg); if ( !mod ) - error("setmod_ff : invalid argument"); - switch ( OID(mod) ) { + current_ff = FF_NOT_SET; + else { + switch ( OID(mod) ) { case O_N: current_ff = FF_GFP; setmod_lm(NM((Q)mod)); @@ -831,7 +842,8 @@ void Psetmod_ff(NODE arg,Obj *rp) setmod_gf2n((P)mod); break; default: error("setmod_ff : invalid argument"); - } + } + } } else if ( ac == 2 ) { if ( OID(ARG0(arg)) == O_N ) { /* small finite field; primitive root representation */ @@ -1131,7 +1143,16 @@ void mergedeglist(NODE d0,NODE d1,NODE *dr) void Pptomp(NODE arg,P *rp) { - ptomp(QTOS((Q)ARG1(arg)),(P)ARG0(arg),rp); + int mod; + + if ( argc(arg) == 1 ) { + if ( !current_mod ) + error("ptomp : current_mod is not set"); + else + mod = current_mod; + } else + mod = QTOS((Q)ARG1(arg)); + ptomp(mod,(P)ARG0(arg),rp); } void Pmptop(NODE arg,P *rp)