Annotation of OpenXM_contrib2/asir2000/engine/Ebug.c, Revision 1.1.1.1
1.1 noro 1: /* $OpenXM: OpenXM/src/asir99/engine/Ebug.c,v 1.1.1.1 1999/11/10 08:12:26 noro Exp $ */
2: #include "ca.h"
3:
4: void substvp(vl,f,vn,g)
5: VL vl;
6: P f;
7: VN vn;
8: P *g;
9: {
10: V v;
11: int i;
12: P h,h1;
13: Q t;
14:
15: h = f;
16: for ( i = 0; v = vn[i].v; i++ ) {
17: STOQ(vn[i].n,t);
18: substp(vl,h,v,(P)t,&h1); h = h1;
19: }
20: *g = h;
21: }
22:
23: void affine(vl,f,vn,fr)
24: VL vl;
25: P f;
26: VN vn;
27: P *fr;
28: {
29: int i,j,n;
30: P vv,g,g1,t,u;
31: Q s;
32: int *dlist;
33: P **plist;
34:
35: for ( n = 0; vn[n].v; n++);
36: dlist = (int *)ALLOCA((n+1)*sizeof(int));
37: plist = (P **)ALLOCA((n+1)*sizeof(P *));
38: for ( i = 0; vn[i].v; i++ ) {
39: if ( !vn[i].n )
40: continue;
41: dlist[i] = getdeg(vn[i].v,f);
42: plist[i] = (P *)ALLOCA((dlist[i]+1)*sizeof(P));
43:
44: MKV(vn[i].v,t);
45: if ( vn[i].n ) {
46: STOQ(vn[i].n,s); addp(vl,t,(P)s,&vv);
47: } else
48: vv = t;
49:
50: for ( j = 0, t = (P)ONE; j < dlist[i]; j++ ) {
51: plist[i][j] = t;
52: mulp(vl,t,vv,&u);
53: t = u;
54: }
55: plist[i][j] = t;
56: }
57:
58: g = f;
59: for ( i = 0; vn[i].v; i++ ) {
60: if ( !vn[i].n )
61: continue;
62: affinemain(vl,g,vn[i].v,dlist[i],plist[i],&g1); g = g1;
63: }
64: *fr = g;
65: }
66:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>