=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/C.c,v retrieving revision 1.11 retrieving revision 1.14 diff -u -p -r1.11 -r1.14 --- OpenXM_contrib2/asir2000/engine/C.c 2001/10/09 01:36:09 1.11 +++ OpenXM_contrib2/asir2000/engine/C.c 2003/01/16 00:33:28 1.14 @@ -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/C.c,v 1.10 2001/06/29 09:08:53 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/C.c,v 1.13 2003/01/04 09:06:17 noro Exp $ */ #include "ca.h" #include "inline.h" @@ -225,7 +225,11 @@ void ptosfp(P p,P *pr) if ( !p ) *pr = 0; else if ( NUM(p) ) { - qtogfs((Q)p,&a); *pr = (P)a; + if ( NID((Num)p) == N_GFS ) + *pr = (P)p; + else { + qtogfs((Q)p,&a); *pr = (P)a; + } } else { for ( dc = DC(p), dcr0 = 0; dc; dc = NEXT(dc) ) { ptosfp(COEF(dc),&t); @@ -261,6 +265,25 @@ void sfptop(P f,P *gp) } } +void sfptopsfp(P f,V v,P *gp) +{ + DCP dc,dcr,dcr0; + Q q; + P fq; + + if ( !f ) + *gp = 0; + else if ( NUM(f) ) + gfstopgfs((GFS)f,v,gp); + else { + for ( dc = DC(f), dcr0 = 0; dc; dc = NEXT(dc) ) { + NEXTDC(dcr0,dcr); DEG(dcr) = DEG(dc); + sfptopsfp(COEF(dc),v,&COEF(dcr)); + } + NEXT(dcr) = 0; MKP(VR(f),dcr0,*gp); + } +} + void sf_galois_action(P p,Q e,P *pr) { DCP dc,dcr,dcr0; @@ -404,7 +427,8 @@ void ptosfum(P f,UM wf) if ( OID(f) == O_N ) { DEG(wf) = 0; - COEF(wf)[0] = FTOIF(CONT((GFS)f)); + ntogfs((Obj)f,&c); + COEF(wf)[0] = FTOIF(CONT(c)); return; } @@ -412,7 +436,7 @@ void ptosfum(P f,UM wf) COEF(wf)[i] = 0; for ( dc = DC(f); dc; dc = NEXT(dc) ) { - c = (GFS)COEF(dc); + ntogfs((Obj)COEF(dc),&c); if ( c ) COEF(wf)[QTOS(DEG(dc))] = FTOIF(CONT(c)); }