=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/kanExport0.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -p -r1.6 -r1.7 --- OpenXM/src/kan96xx/Kan/kanExport0.c 2001/04/12 06:48:25 1.6 +++ OpenXM/src/kan96xx/Kan/kanExport0.c 2001/05/04 01:06:23 1.7 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/kan96xx/Kan/kanExport0.c,v 1.5 2000/12/28 00:07:14 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kan96xx/Kan/kanExport0.c,v 1.6 2001/04/12 06:48:25 takayama Exp $ */ #include #include "datatype.h" #include "stackm.h" @@ -22,7 +22,7 @@ int WarningNoVectorVariable = 1; /** :arithmetic **/ struct object KooAdd(ob1,ob2) -struct object ob1,ob2; + struct object ob1,ob2; { extern struct ring *CurrentRingp; struct object rob = NullObject; @@ -149,7 +149,7 @@ struct object ob1,ob2; } struct object KooSub(ob1,ob2) -struct object ob1,ob2; + struct object ob1,ob2; { struct object rob = NullObject; POLY r; @@ -277,7 +277,7 @@ struct object ob1,ob2; } struct object KooMult(ob1,ob2) -struct object ob1,ob2; + struct object ob1,ob2; { struct object rob = NullObject; POLY r; @@ -421,7 +421,7 @@ struct object ob1,ob2; struct object KoNegate(obj) -struct object obj; + struct object obj; { struct object rob = NullObject; extern struct ring SmallRing; @@ -458,7 +458,7 @@ struct object obj; } struct object KoInverse(obj) -struct object obj; + struct object obj; { struct object rob = NullObject; extern struct coeff *UniversalOne; @@ -494,7 +494,7 @@ struct object obj; static int isVector(ob) -struct object ob; + struct object ob; { int i,n; n = getoaSize(ob); @@ -505,8 +505,8 @@ struct object ob; } static int isMatrix(ob,m,n) -struct object ob; -int m,n; + struct object ob; + int m,n; { int i,j; for (i=0; i vector */ - /* (m n) (m2=n) */ + /* (m n) (m2=n) */ n = getoaSize(getoa(aa,0)); if (isMatrix(aa,m,n) == 0) { errorKan1("%s\n","KaoMult(matrix,vector). The left object is not matrix."); @@ -600,15 +600,15 @@ struct object aa,bb; } for (i=0; i obj2.lc.ival) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - case Sstring: - case Sdollar: - if (strcmp(obj1.lc.str, obj2.lc.str)>0) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - case Spoly: - if ((*mmLarger)(obj1.lc.poly,obj2.lc.poly) == 1) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - case SuniversalNumber: - tt = coeffGreater(obj1.lc.universalNumber,obj2.lc.universalNumber); - if (tt > 0) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - case Sdouble: - if ( KopDouble(obj1) > KopDouble(obj2) ) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - default: - errorKan1("%s\n","KooGreater() has not supported these objects yet."); - break; - } + case 0: + return(KpoInteger(1)); /* case of NullObject */ + break; + case Sinteger: + if (obj1.lc.ival > obj2.lc.ival) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + case Sstring: + case Sdollar: + if (strcmp(obj1.lc.str, obj2.lc.str)>0) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + case Spoly: + if ((*mmLarger)(obj1.lc.poly,obj2.lc.poly) == 1) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + case SuniversalNumber: + tt = coeffGreater(obj1.lc.universalNumber,obj2.lc.universalNumber); + if (tt > 0) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + case Sdouble: + if ( KopDouble(obj1) > KopDouble(obj2) ) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + default: + errorKan1("%s\n","KooGreater() has not supported these objects yet."); + break; + } } struct object KooLess(obj1,obj2) -struct object obj1; -struct object obj2; + struct object obj1; + struct object obj2; { struct object ob; int tt; @@ -792,42 +792,42 @@ struct object obj2; errorKan1("%s\n","You cannot compare different kinds of objects."); } switch(obj1.tag) { - case 0: - return(KpoInteger(1)); /* case of NullObject */ - break; - case Sinteger: - if (obj1.lc.ival < obj2.lc.ival) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - case Sstring: - case Sdollar: - if (strcmp(obj1.lc.str, obj2.lc.str)<0) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - case Spoly: - if ((*mmLarger)(obj2.lc.poly,obj1.lc.poly) == 1) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - case SuniversalNumber: - tt = coeffGreater(obj1.lc.universalNumber,obj2.lc.universalNumber); - if (tt < 0) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - case Sdouble: - if ( KopDouble(obj1) < KopDouble(obj2) ) return(KpoInteger(1)); - else return(KpoInteger(0)); - break; - default: - errorKan1("%s\n","KooLess() has not supported these objects yet."); - break; - } + case 0: + return(KpoInteger(1)); /* case of NullObject */ + break; + case Sinteger: + if (obj1.lc.ival < obj2.lc.ival) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + case Sstring: + case Sdollar: + if (strcmp(obj1.lc.str, obj2.lc.str)<0) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + case Spoly: + if ((*mmLarger)(obj2.lc.poly,obj1.lc.poly) == 1) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + case SuniversalNumber: + tt = coeffGreater(obj1.lc.universalNumber,obj2.lc.universalNumber); + if (tt < 0) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + case Sdouble: + if ( KopDouble(obj1) < KopDouble(obj2) ) return(KpoInteger(1)); + else return(KpoInteger(0)); + break; + default: + errorKan1("%s\n","KooLess() has not supported these objects yet."); + break; + } } /* :conversion */ struct object KdataConversion(obj,key) -struct object obj; -char *key; + struct object obj; + char *key; { char tmps[128]; /* Assume that double is not more than 128 digits */ char intstr[100]; /* Assume that int is not more than 100 digits */ @@ -847,9 +847,9 @@ char *key; return(rob); }else if (strcmp(key,"type??")==0) { if (obj.tag != Sclass) { - rob = KpoInteger(obj.tag); + rob = KpoInteger(obj.tag); }else { - rob = KpoInteger(ectag(obj)); + rob = KpoInteger(ectag(obj)); } return(rob); }else if (strcmp(key,"error")==0) { @@ -914,7 +914,7 @@ char *key; rob.tag = Sstring; s = (char *) sGC_malloc(sizeof(char)*(strlen(obj.lc.str)+3)); if (s == (char *) NULL) { - errorKan1("%s\n","No memory."); + errorKan1("%s\n","No memory."); } s[0] = '/'; strcpy(&(s[1]),obj.lc.str); @@ -930,27 +930,27 @@ char *key; }else if (strcmp(key,"array")==0) { rob = newObjectArray(strlen(obj.lc.str)); for (i=0; i ' ' && flag == 0) flag=1; - else if ((obj.lc.str)[i] <= ' ' && flag == 1) flag = 2; - else if ((obj.lc.str)[i] > ' ' && flag == 2) flag=3; + if ((obj.lc.str)[i] > ' ' && flag == 0) flag=1; + else if ((obj.lc.str)[i] <= ' ' && flag == 1) flag = 2; + else if ((obj.lc.str)[i] > ' ' && flag == 2) flag=3; } if (flag == 3) errorKan1("KdataConversion(): %s","The data for the double contains blanck(s)"); /* Read the double. */ if (sscanf(obj.lc.str,"%lf",&f) <= 0) { - errorKan1("KdataConversion(): %s","It cannot be translated to double."); + errorKan1("KdataConversion(): %s","It cannot be translated to double."); } rob = KpoDouble(f); return(rob); @@ -990,7 +990,7 @@ char *key; }else if (strcmp(key,"integer")==0) { if (obj.lc.poly == ZERO) return(KpoInteger(0)); else { - return(KpoInteger(coeffToInt(obj.lc.poly->coeffp))); + return(KpoInteger(coeffToInt(obj.lc.poly->coeffp))); } }else if (strcmp(key,"string")==0 || strcmp(key,"dollar")==0) { rob.tag = Sdollar; @@ -1002,25 +1002,25 @@ char *key; return(KringMap(obj)); }else if (strcmp(key,"universalNumber")==0) { if (obj.lc.poly == ZERO) { - rob.tag = SuniversalNumber; - rob.lc.universalNumber = newUniversalNumber(0); + rob.tag = SuniversalNumber; + rob.lc.universalNumber = newUniversalNumber(0); } else { - if (obj.lc.poly->coeffp->tag == MP_INTEGER) { - rob.tag = SuniversalNumber; - rob.lc.universalNumber = newUniversalNumber2(obj.lc.poly->coeffp->val.bigp); - }else { - rob = NullObject; - warningKan("Coefficient is not MP_INT."); - } + if (obj.lc.poly->coeffp->tag == MP_INTEGER) { + rob.tag = SuniversalNumber; + rob.lc.universalNumber = newUniversalNumber2(obj.lc.poly->coeffp->val.bigp); + }else { + rob = NullObject; + warningKan("Coefficient is not MP_INT."); + } } return(rob); }else if (strcmp(key,"ring")==0) { if (obj.lc.poly ISZERO) { - warningKan("Zero polynomial does not have the ring structure field.\n"); + warningKan("Zero polynomial does not have the ring structure field.\n"); }else{ - rob.tag = Sring; - rob.lc.ringp = (obj.lc.poly)->m->ringp; - return(rob); + rob.tag = Sring; + rob.lc.ringp = (obj.lc.poly)->m->ringp; + return(rob); } }else if (strcmp(key,"null") == 0) { rob = NullObject; @@ -1150,7 +1150,7 @@ char *key; /* conversion functions between primitive data and objects. If it's not time critical, it is recommended to use these functions */ struct object KpoInteger(k) -int k; + int k; { struct object obj; obj.tag = Sinteger; @@ -1158,7 +1158,7 @@ int k; return(obj); } struct object KpoString(s) -char *s; + char *s; { struct object obj; obj.tag = Sdollar; @@ -1166,7 +1166,7 @@ char *s; return(obj); } struct object KpoPOLY(f) -POLY f; + POLY f; { struct object obj; obj.tag = Spoly; @@ -1174,7 +1174,7 @@ POLY f; return(obj); } struct object KpoArrayOfPOLY(ap) -struct arrayOfPOLY *ap ; + struct arrayOfPOLY *ap ; { struct object obj; obj.tag = SarrayOfPOLY; @@ -1183,7 +1183,7 @@ struct arrayOfPOLY *ap ; } struct object KpoMatrixOfPOLY(mp) -struct matrixOfPOLY *mp ; + struct matrixOfPOLY *mp ; { struct object obj; obj.tag = SmatrixOfPOLY; @@ -1192,7 +1192,7 @@ struct matrixOfPOLY *mp ; } struct object KpoRingp(ringp) -struct ring *ringp; + struct ring *ringp; { struct object obj; obj.tag = Sring; @@ -1202,7 +1202,7 @@ struct ring *ringp; /*** conversion 2. Data conversions on arrays and matrices. ****/ struct object arrayOfPOLYToArray(aa) -struct arrayOfPOLY *aa; + struct arrayOfPOLY *aa; { POLY *a; int size; @@ -1221,7 +1221,7 @@ struct arrayOfPOLY *aa; } struct object matrixOfPOLYToArray(pmat) -struct matrixOfPOLY *pmat; + struct matrixOfPOLY *pmat; { struct object r; struct object tmp; @@ -1242,7 +1242,7 @@ struct matrixOfPOLY *pmat; } struct arrayOfPOLY *arrayToArrayOfPOLY(oa) -struct object oa; + struct object oa; { POLY *a; int size; @@ -1251,13 +1251,13 @@ struct object oa; struct arrayOfPOLY *ap; if (oa.tag != Sarray) errorKan1("KarrayToArrayOfPOLY(): %s", - "Argument is not array\n"); + "Argument is not array\n"); size = getoaSize(oa); a = (POLY *)sGC_malloc(sizeof(POLY)*size); for (i=0; imultiplication = mpMult; - switch_function("mpMult",fmp_mult_saved); + if (getoa(ob5,i+1).tag != Sdollar) { + errorKan1("%s\n","A keyword should be given. (mpMult)"); + } + fmp_mult_saved = F_mpMult; + mpMultName = KopString(getoa(ob5,i+1)); + switch_function("mpMult",mpMultName); + /* Note that this cause a global effect. It will be done again. */ + newRingp->multiplication = mpMult; + switch_function("mpMult",fmp_mult_saved); } else if (strcmp(KopString(getoa(ob5,i)),"coefficient ring") == 0) { - if (getoa(ob5,i+1).tag != Sring) { - errorKan1("%s\n","The pointer to a ring should be given. (coefficient ring)"); - } - nextRing = KopRingp(getoa(ob5,i+1)); - newRingp->next = nextRing; + if (getoa(ob5,i+1).tag != Sring) { + errorKan1("%s\n","The pointer to a ring should be given. (coefficient ring)"); + } + nextRing = KopRingp(getoa(ob5,i+1)); + newRingp->next = nextRing; } else if (strcmp(KopString(getoa(ob5,i)),"valuation") == 0) { - errorKan1("%s\n","Not implemented. (valuation)"); + errorKan1("%s\n","Not implemented. (valuation)"); } else if (strcmp(KopString(getoa(ob5,i)),"characteristic") == 0) { - if (getoa(ob5,i+1).tag != Sinteger) { - errorKan1("%s\n","A integer should be given. (characteristic)"); - } - p = KopInteger(getoa(ob5,i+1)); - newRingp->p = p; + if (getoa(ob5,i+1).tag != Sinteger) { + errorKan1("%s\n","A integer should be given. (characteristic)"); + } + p = KopInteger(getoa(ob5,i+1)); + newRingp->p = p; } else if (strcmp(KopString(getoa(ob5,i)),"schreyer") == 0) { - if (getoa(ob5,i+1).tag != Sinteger) { - errorKan1("%s\n","A integer should be given. (schreyer)"); - } - newRingp->schreyer = KopInteger(getoa(ob5,i+1)); + if (getoa(ob5,i+1).tag != Sinteger) { + errorKan1("%s\n","A integer should be given. (schreyer)"); + } + newRingp->schreyer = KopInteger(getoa(ob5,i+1)); } else if (strcmp(KopString(getoa(ob5,i)),"gbListTower") == 0) { - if (getoa(ob5,i+1).tag != Slist) { - errorKan1("%s\n","A list should be given (gbListTower)."); - } - newRingp->gbListTower = newObject(); - *((struct object *)(newRingp->gbListTower)) = getoa(ob5,i+1); + if (getoa(ob5,i+1).tag != Slist) { + errorKan1("%s\n","A list should be given (gbListTower)."); + } + newRingp->gbListTower = newObject(); + *((struct object *)(newRingp->gbListTower)) = getoa(ob5,i+1); } else if (strcmp(KopString(getoa(ob5,i)),"ringName") == 0) { - if (getoa(ob5,i+1).tag != Sdollar) { - errorKan1("%s\n","A name should be given. (ringName)"); - } - ringName = KopString(getoa(ob5,i+1)); + if (getoa(ob5,i+1).tag != Sdollar) { + errorKan1("%s\n","A name should be given. (ringName)"); + } + ringName = KopString(getoa(ob5,i+1)); } else { - errorKan1("%s\n","Unknown keyword to set_up_ring@"); + errorKan1("%s\n","Unknown keyword to set_up_ring@"); } }else{ errorKan1("%s\n","A keyword enclosed by braces have to be given."); @@ -1601,10 +1601,10 @@ struct object ob1,ob2,ob3,ob4,ob5; CurrentRingp = newRingp; /* Install it to the RingStack */ if (rp nothing (argc=0) {x}----> x (argc=1) {x,y} --> x y (argc=2) - {ab, y, z } --> ab y z (argc=3) + {ab, y, z } --> ab y z (argc=3) [[ab],c,d] --> [ab] c d */ { @@ -2024,9 +2024,9 @@ int limit; static void checkDuplicateName(xvars,dvars,n) -char *xvars[]; -char *dvars[]; -int n; + char *xvars[]; + char *dvars[]; + int n; { int i,j; char *names[N0*2]; @@ -2037,8 +2037,8 @@ int n; for (i=0; itag != SrationalFunction) return(0); @@ -2313,7 +2313,7 @@ struct object KmpzExtension(struct object obj) if (obj1.tag != SuniversalNumber || obj2.tag != SuniversalNumber) errorKan1("%s\n","[(gcd) universalNumber universalNumber] mpzext."); if (! is_this_coeff_MP_INT(obj1.lc.universalNumber) || - ! is_this_coeff_MP_INT(obj2.lc.universalNumber)) { + ! is_this_coeff_MP_INT(obj2.lc.universalNumber)) { errorKan1("%s\n","[(gcd) universalNumber universalNumber] mpzext."); } f = coeff_to_MP_INT(obj1.lc.universalNumber); @@ -2329,7 +2329,7 @@ struct object KmpzExtension(struct object obj) if (obj1.tag != SuniversalNumber || obj2.tag != SuniversalNumber) errorKan1("%s\n","[(tdiv_qr) universalNumber universalNumber] mpzext."); if (! is_this_coeff_MP_INT(obj1.lc.universalNumber) || - ! is_this_coeff_MP_INT(obj2.lc.universalNumber)) { + ! is_this_coeff_MP_INT(obj2.lc.universalNumber)) { errorKan1("%s\n","[(tdiv_qr) universalNumber universalNumber] mpzext."); } f = coeff_to_MP_INT(obj1.lc.universalNumber); @@ -2360,7 +2360,7 @@ struct object KmpzExtension(struct object obj) return(obj0); } if (! is_this_coeff_MP_INT(obj1.lc.universalNumber) || - ! is_this_coeff_MP_INT(obj2.lc.universalNumber)) { + ! is_this_coeff_MP_INT(obj2.lc.universalNumber)) { errorKan1("%s\n","[(cancel) universalNumber/universalNumber] mpzext."); } f = coeff_to_MP_INT(obj1.lc.universalNumber); @@ -2380,7 +2380,7 @@ struct object KmpzExtension(struct object obj) rob = KnewRationalFunction0(copyObjectp(&obj1),copyObjectp(&obj2)); KisInvalidRational(&rob); }else if (strcmp(key,"sqrt")==0 || - strcmp(key,"com")==0) { + strcmp(key,"com")==0) { /* One arg functions */ if (size != 2) errorKan1("%s\n","[key num] mpzext"); obj1 = getoa(obj,1); @@ -2399,8 +2399,8 @@ struct object KmpzExtension(struct object obj) rob.tag = SuniversalNumber; rob.lc.universalNumber = mpintToCoeff(r1,SmallRingp); }else if (strcmp(key,"probab_prime_p")==0 || - strcmp(key,"and") == 0 || - strcmp(key,"ior")==0) { + strcmp(key,"and") == 0 || + strcmp(key,"ior")==0) { /* Two args functions */ if (size != 3) errorKan1("%s\n","[key num1 num2] mpzext."); obj1 = getoa(obj,1); @@ -2408,7 +2408,7 @@ struct object KmpzExtension(struct object obj) if (obj1.tag != SuniversalNumber || obj2.tag != SuniversalNumber) errorKan1("%s\n","[key num1 num2] mpzext."); if (! is_this_coeff_MP_INT(obj1.lc.universalNumber) || - ! is_this_coeff_MP_INT(obj2.lc.universalNumber)) { + ! is_this_coeff_MP_INT(obj2.lc.universalNumber)) { errorKan1("%s\n","[key num1 num2] mpzext."); } f = coeff_to_MP_INT(obj1.lc.universalNumber); @@ -2416,9 +2416,9 @@ struct object KmpzExtension(struct object obj) if (strcmp(key,"probab_prime_p")==0) { gi = (int) mpz_get_si(g); if (mpz_probab_prime_p(f,gi)) { - rob = KpoInteger(1); + rob = KpoInteger(1); }else { - rob = KpoInteger(0); + rob = KpoInteger(0); } }else if (strcmp(key,"and")==0) { r1 = newMP_INT(); @@ -2442,8 +2442,8 @@ struct object KmpzExtension(struct object obj) errorKan1("%s\n","[key num1 num2 num3] mpzext : num1, num2 and num3 must be universalNumbers."); } if (! is_this_coeff_MP_INT(obj1.lc.universalNumber) || - ! is_this_coeff_MP_INT(obj2.lc.universalNumber) || - ! is_this_coeff_MP_INT(obj3.lc.universalNumber)) { + ! is_this_coeff_MP_INT(obj2.lc.universalNumber) || + ! is_this_coeff_MP_INT(obj3.lc.universalNumber)) { errorKan1("%s\n","[key num1 num2 num3] mpzext : num1, num2 and num3 must be universalNumbers."); } f = coeff_to_MP_INT(obj1.lc.universalNumber); @@ -2479,8 +2479,8 @@ struct object KnewContext(struct object superObj,char } struct object KcreateClassIncetance(struct object ob1, - struct object ob2, - struct object ob3) + struct object ob2, + struct object ob3) { /* [class-tag super-obj] size [class-tag] cclass */ struct object ob4; @@ -2509,7 +2509,7 @@ struct object KcreateClassIncetance(struct object ob1, ob5 = getoa(ob3,0); if (ectag(ob5) != CLASSNAME_CONTEXT) errorKan1("%s\n","cclass: The third argument must be [class-tag]."); - + rob = newObjectArray(size); putoa(rob,0,ob5); if (getoaSize(ob1) < size) size2 = getoaSize(ob1); @@ -2644,7 +2644,7 @@ struct object KdefaultPolyRing(struct object ob) { for (j=0; j<2*n; j++) { putoa(t1,j,KpoInteger(0)); if (j == (2*n-i)) { - putoa(t1,j,KpoInteger(-1)); + putoa(t1,j,KpoInteger(-1)); } } putoa(ob4,i,t1); @@ -2668,8 +2668,8 @@ struct object KdefaultPolyRing(struct object ob) { ******************************************************************/ errorKan1(str,message) -char *str; -char *message; + char *str; + char *message; { extern char *GotoLabel; extern int GotoP; @@ -2698,7 +2698,7 @@ char *message; } warningKan(str) -char *str; + char *str; { extern int WarningMessageMode; extern int Strict; @@ -2721,7 +2721,7 @@ char *str; } warningKanNoStrictMode(str) -char *str; + char *str; { extern int Strict; int t;