/* $OpenXM: OpenXM_contrib2/asir2000/engine/Ebug.c,v 1.1 1999/12/03 07:39:08 noro Exp $ */ #include "ca.h" void substvp(vl,f,vn,g) VL vl; P f; VN vn; P *g; { V v; int i; P h,h1; Q t; h = f; for ( i = 0; v = vn[i].v; i++ ) { STOQ(vn[i].n,t); substp(vl,h,v,(P)t,&h1); h = h1; } *g = h; } void affine(vl,f,vn,fr) VL vl; P f; VN vn; P *fr; { int i,j,n; P vv,g,g1,t,u; Q s; int *dlist; P **plist; for ( n = 0; vn[n].v; n++); dlist = (int *)ALLOCA((n+1)*sizeof(int)); plist = (P **)ALLOCA((n+1)*sizeof(P *)); for ( i = 0; vn[i].v; i++ ) { if ( !vn[i].n ) continue; dlist[i] = getdeg(vn[i].v,f); plist[i] = (P *)ALLOCA((dlist[i]+1)*sizeof(P)); MKV(vn[i].v,t); if ( vn[i].n ) { STOQ(vn[i].n,s); addp(vl,t,(P)s,&vv); } else vv = t; for ( j = 0, t = (P)ONE; j < dlist[i]; j++ ) { plist[i][j] = t; mulp(vl,t,vv,&u); t = u; } plist[i][j] = t; } g = f; for ( i = 0; vn[i].v; i++ ) { if ( !vn[i].n ) continue; affinemain(vl,g,vn[i].v,dlist[i],plist[i],&g1); g = g1; } *fr = g; }