=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/kanExport1.c,v retrieving revision 1.9 retrieving revision 1.14 diff -u -p -r1.9 -r1.14 --- OpenXM/src/kan96xx/Kan/kanExport1.c 2003/08/24 05:19:42 1.9 +++ OpenXM/src/kan96xx/Kan/kanExport1.c 2004/08/31 04:45:42 1.14 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/kan96xx/Kan/kanExport1.c,v 1.8 2003/08/23 02:28:38 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kan96xx/Kan/kanExport1.c,v 1.13 2004/07/31 02:23:02 takayama Exp $ */ #include #include "datatype.h" #include "stackm.h" @@ -234,8 +234,8 @@ struct object Kgroebner(ob) } /* Assume ob1Size , ob2Size > 0 */ ob2 = newObjectArray(ob2Size); - ob1ToOb2 = (int *)GC_malloc(sizeof(int)*ob1Size); - ob1ZeroPos = (int *)GC_malloc(sizeof(int)*(ob1Size-ob2Size+1)); + ob1ToOb2 = (int *)sGC_malloc(sizeof(int)*ob1Size); + ob1ZeroPos = (int *)sGC_malloc(sizeof(int)*(ob1Size-ob2Size+1)); if (ob1ToOb2 == NULL || ob1ZeroPos == NULL) errorKan1("%s\n","No more memory."); j = 0; k = 0; for (i=0; inext,&grBases,&backwardMat); + if (mp == NULL) errorKan1("%s\n","Internal error in getSyzygy(). BUG of sm1."); if (KanGBmessage) printf("Done.\n"); putoa(rob,0,gradedPolySetToArray(grG,0)); @@ -996,6 +997,7 @@ struct object oInitW(ob,oWeight) if (oWeight.tag != Sarray) { errorKan1("%s\n","oInitW(): the second argument must be array."); } + oWeight = Kto_int(oWeight); n = getoaSize(oWeight); if (n == 0) { m = getoaSize(ob); @@ -1150,6 +1152,7 @@ struct object KordWsAll(ob,oWeight) if (oWeight.tag != Sarray) { errorKan1("%s\n","ordWsAll(): the second argument must be array."); } + oWeight = Kto_int(oWeight); n = getoaSize(oWeight); if (n == 0) { m = getoaSize(ob); @@ -1365,4 +1368,137 @@ int objToInteger(struct object ob) { }else { errorKan1("%s\n","objToInteger(): invalid argument."); } +} + +struct object KgetExponents(struct object obPoly,struct object otype) { + int type,asize,i; + POLY f; + POLY ff; + MONOMIAL tf; + struct object rob; + struct object tob; + static int nn,mm,ll,cc,n,m,l,c; + static struct ring *cr = (struct ring *)NULL; + extern struct ring *CurrentRingp; + int size,hsize,fsize,p,r; + + if (otype.tag == Sinteger) { + type = KopInteger(otype); + }else if (otype.tag == SuniversalNumber) { + type = coeffToInt(KopUniversalNumber(otype)); + }else { + errorKan1("%s\n","KgetExponents(): invalid translation type."); + } + + if (obPoly.tag == Spoly) { + f = KopPOLY(obPoly); + }else if (obPoly.tag == Sarray) { + asize = getoaSize(obPoly); + rob = newObjectArray(asize); + for (i=0; im; + } + if (tf->ringp != cr) { + n = tf->ringp->n; + m = tf->ringp->m; + l = tf->ringp->l; + c = tf->ringp->c; + nn = tf->ringp->nn; + mm = tf->ringp->mm; + ll = tf->ringp->ll; + cc = tf->ringp->cc; + cr = tf->ringp; + } + if (type == 0) { + size = 0; + for (i=c; inext; + } + rob = newObjectArray(fsize); + + ff = f; + p = 0; + while (ff != POLYNULL) { + r = 0; + tob = newObjectArray(size); + tf = ff->m; + for (i=ll-1; i>=c; i--) { + putoa(tob,r,KpoInteger(tf->e[i].x)); + putoa(tob,hsize+r,KpoInteger(tf->e[i].D)); + r++; + } + for (i=mm-1; i>=l; i--) { + putoa(tob,r,KpoInteger(tf->e[i].x)); + putoa(tob,hsize+r,KpoInteger(tf->e[i].D)); + r++; + } + for (i=nn-1; i>=m; i--) { + putoa(tob,r,KpoInteger(tf->e[i].x)); + putoa(tob,hsize+r,KpoInteger(tf->e[i].D)); + r++; + } + if (type == 1) { + for (i=cc-1; i>=0; i--) { + putoa(tob,hsize+r,KpoInteger(tf->e[i].x)); + putoa(tob,r,KpoInteger(tf->e[i].D)); + r++; + } + }else if (type == 2) { + for (i=cc-1; i>=0; i--) { + putoa(tob,hsize+r,KpoInteger(tf->e[i].D)); + r++; + } + } + + putoa(rob,p,tob); + p++; + ff = ff->next; + } + return rob; }