[BACK]Return to switch.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Annotation of OpenXM/src/kan96xx/Kan/switch.c, Revision 1.1.1.1

1.1       maekawa     1: #include <stdio.h>
                      2: #include "datatype.h"
                      3: #include "extern2.h"
                      4: #include "gradedset.h"
                      5:
                      6: /********** flags for switch status **************/
                      7: char *F_mmLarger = "???";
                      8: char *F_mpMult = "???";
                      9: char *F_monomialAdd = "???";
                     10: char *F_red = "???";
                     11: char *F_sp = "???";
                     12: char *F_groebner = "???";
                     13: char *F_grade = "???";
                     14: char *F_isSameComponent = "???";
                     15:
                     16:
                     17: void print_switch_status(void) {
                     18:   printf("------------------------------------\n");
                     19:   printf("mmLarger [matrix,lexicographic,tower]          %s\n",F_mmLarger);
                     20:   printf("mpMult   [poly,diff,difference]                %s\n",F_mpMult);
                     21:   printf("monomialAdd [poly]                             %s\n",F_monomialAdd);
                     22:   printf("red@      [standard,module1,module2,module1rev]\n");
                     23:   printf("                                               %s\n",F_red);
                     24:   printf("isSameComponent [x,xd]                         %s\n",F_isSameComponent);
                     25:   printf("sp        [standard]                           %s\n",F_sp);
                     26:   printf("grade     [standard,firstvec,module1,module1v] %s\n",F_grade);
                     27:   printf("groebner  [standard,gm]                        %s\n",F_groebner);
                     28: }
                     29:
                     30: /* called from stackmachine.c,
                     31:    ex. $sp$ $so$ switch_function
                     32:  or    (report) (function) switch_function value(string)
                     33: */
                     34: char *switch_function(fun,arg)
                     35: char *fun;
                     36: char *arg;
                     37: {
                     38:   char *ans = NULL;
                     39:   if (strcmp(fun,"mmLarger")==0) {
                     40:     switch_mmLarger(arg);
                     41:   }else if (strcmp(fun,"mpMult")==0) {
                     42:     switch_mpMult(arg);
                     43:   }else if (strcmp(fun,"monomialAdd")==0) {
                     44:     switch_monomialAdd(arg);
                     45:   }else if (strcmp(fun,"red@")==0) {
                     46:     switch_red(arg);
                     47:   }else if (strcmp(fun,"sp")==0) {
                     48:     switch_sp(arg);
                     49:   }else if (strcmp(fun,"isSameComponent")==0) {
                     50:     switch_isSameComponent(arg);
                     51:   }else if (strcmp(fun,"groebner")==0) {
                     52:     switch_groebner(arg);
                     53:   }else if (strcmp(fun,"grade")==0) {
                     54:     switch_grade(arg);
                     55:   }else if (strcmp(fun,"report")==0) {
                     56:     ans = (char *)sGC_malloc(128); /* 128 >= max(strlen(F_*))+1 */
                     57:     ans[0] = '\0';
                     58:     if (strcmp(arg,"mmLarger")==0) {
                     59:       strcpy(ans,F_mmLarger);
                     60:     }else if (strcmp(arg,"mpMult")==0) {
                     61:       strcpy(ans,F_mpMult);
                     62:     }else if (strcmp(arg,"monomialAdd")==0) {
                     63:       strcpy(ans,F_monomialAdd);
                     64:     }else if (strcmp(arg,"red@")==0) {
                     65:       strcpy(ans,F_red);
                     66:     }else if (strcmp(arg,"isSameComponent")==0) {
                     67:       strcpy(ans,F_isSameComponent);
                     68:     }else if (strcmp(arg,"sp")==0) {
                     69:       strcpy(ans,F_sp);
                     70:     }else if (strcmp(arg,"groebner")==0) {
                     71:       strcpy(ans,F_groebner);
                     72:     }else if (strcmp(arg,"grade")==0) {
                     73:       strcpy(ans,F_grade);
                     74:     }else {
                     75:       fprintf(stderr,"Unknown argument for switch_function():report\n");
                     76:     }
                     77:   }else {
                     78:     fprintf(stderr,"Unknown argument for switch_function()\n");
                     79:   }
                     80:   return(ans);
                     81: }
                     82:
                     83: /* 1. called from KinitKan() (poly.c)
                     84: */
                     85: void switch_init(void) {
                     86:   switch_mmLarger("matrix");
                     87:   switch_mpMult("poly");
                     88:   switch_monomialAdd("poly");
                     89:   switch_red("standard");
                     90:   switch_isSameComponent("x");
                     91:   switch_sp("standard");
                     92:   switch_groebner("standard");
                     93:   switch_grade("standard");
                     94: }
                     95:
                     96: /*
                     97:   1. called from switch_init(), switch_function();
                     98:   2. setOrderByMatrix().
                     99: */
                    100:
                    101: void switch_mmLarger(arg)
                    102: char *arg;
                    103: {
                    104:   if (strcmp(arg,"matrix") == 0) {
                    105:     mmLarger = mmLarger_matrix;
                    106:     F_mmLarger = "matrix";
                    107:   } else if (strcmp(arg,"lexicographic") == 0) {
                    108:     mmLarger = mmLarger_pureLexicographic;
                    109:     F_mmLarger = "lexicographic";
                    110:   } else if (strcmp(arg,"tower") == 0) {
                    111:     mmLarger = mmLarger_tower;
                    112:     F_mmLarger = "tower";
                    113:   }else ;
                    114: }
                    115:
                    116: /*
                    117:   1. called from switch_init(), switch_function();
                    118: */
                    119:
                    120: void switch_mpMult(arg)
                    121: char *arg;
                    122: {
                    123:   if (strcmp(arg,"poly") == 0) {
                    124:     mpMult = mpMult_poly;
                    125:     F_mpMult = "poly";
                    126:   } if (strcmp(arg,"diff") == 0 ) {
                    127:     mpMult = mpMult_diff;
                    128:     F_mpMult = "diff";
                    129:   } if (strcmp(arg,"difference") == 0 ) {
                    130:     mpMult = mpMult_difference;
                    131:     F_mpMult = "difference";
                    132:     /* cf. a dirty trick in mpMult_difference() in poly3.c. */
                    133:   }else ;
                    134: }
                    135:
                    136: /*
                    137:   1. called from switch_init(), switch_function();
                    138: */
                    139:
                    140: void switch_monomialAdd(arg)
                    141: char *arg;
                    142: {
                    143:   if (strcmp(arg,"poly") == 0) {
                    144:     monomialAdd = monomialAdd_poly;
                    145:     F_monomialAdd = "poly";
                    146:   }else ;
                    147: }
                    148:
                    149: void switch_red(arg)
                    150: char *arg;
                    151: {
                    152:   if (strcmp(arg,"standard") == 0) {
                    153:     switch_sp("standard");
                    154:     isReducible = isReducible_gen;
                    155:     reduction1 = reduction1_gen;
                    156:     reduction = reduction_gen;
                    157:
                    158:     isCdrReducible = isCdrReducible_gen;
                    159:     reduction1Cdr = reduction1Cdr_gen;
                    160:     reductionCdr = reductionCdr_gen;
                    161:
                    162:     lcm = lcm_gen;
                    163:     switch_grade("standard");
                    164:     F_red = "standard";
                    165:   }else if (strcmp(arg,"module1") == 0) {
                    166:     switch_sp("standard");
                    167:     isReducible = isReducible_module;
                    168:     reduction1 = reduction1_gen;
                    169:     reduction = reduction_gen;
                    170:
                    171:     isCdrReducible = isCdrReducible_gen;
                    172:     reduction1Cdr = reduction1Cdr_gen;
                    173:     reductionCdr = reductionCdr_gen;
                    174:
                    175:     lcm = lcm_module;
                    176:     switch_grade("module1");
                    177:     F_red = "module1";
                    178:   }else if (strcmp(arg,"module1rev") == 0) {
                    179:     switch_sp("standard");
                    180:     isReducible = isReducible_module;
                    181:     reduction1 = reduction1_gen;
                    182:     reduction = reduction_gen_rev;
                    183:
                    184:     isCdrReducible = isCdrReducible_gen;
                    185:     reduction1Cdr = reduction1Cdr_gen;
                    186:     reductionCdr = reductionCdr_gen;
                    187:
                    188:     lcm = lcm_module;
                    189:     switch_grade("module1");
                    190:     F_red = "module1rev";
                    191:   }else if (strcmp(arg,"module2") == 0) {
                    192:     switch_sp("standard");
                    193:     isReducible = isReducible_module;
                    194:     reduction1 = reduction1_gen;
                    195:     reduction = reduction_gen;
                    196:
                    197:     isCdrReducible = isCdrReducible_gen;
                    198:     reduction1Cdr = reduction1Cdr_gen;
                    199:     reductionCdr = reductionCdr_gen;
                    200:
                    201:     lcm = lcm_module;
                    202:     switch_grade("standard");
                    203:     F_red = "module2";
                    204:   }else if (strcmp(arg,"debug") == 0) {
                    205:     reduction1 = reduction1_gen_debug;
                    206:     F_red = "debug";
                    207:   }else ;
                    208: }
                    209:
                    210: void switch_groebner(arg)
                    211: char *arg;
                    212: {
                    213:   if (strcmp(arg,"standard") == 0) {
                    214:     groebner = groebner_gen;
                    215:     F_groebner = "standard";
                    216:   } else if (strcmp(arg,"gm") == 0) {
                    217:     groebner = groebner_gm;
                    218:     F_groebner = "gm";
                    219:   } else ;
                    220: }
                    221:
                    222: /* called from switch_init */
                    223: void switch_isSameComponent(arg)
                    224: char *arg;
                    225: {
                    226:   if (strcmp(arg,"x") == 0) {
                    227:     isSameComponent = isSameComponent_x;
                    228:     F_isSameComponent = "x";
                    229:   } else if (strcmp(arg,"xd") == 0) {
                    230:     isSameComponent = isSameComponent_xd;
                    231:     F_isSameComponent = "xd";
                    232:   } else ;
                    233: }
                    234:
                    235: void switch_sp(arg)
                    236: char *arg;
                    237: {
                    238:   if (strcmp(arg,"standard") == 0) {
                    239:     sp = sp_gen;
                    240:     F_sp = "standard";
                    241:   } else ;
                    242: }
                    243:
                    244:
                    245: void switch_grade(arg)
                    246: char *arg;
                    247: {
                    248:   if (strcmp(arg,"standard")==0) {
                    249:     grade = grade_gen;
                    250:     F_grade = "standard";
                    251:   }else if (strcmp(arg,"firstvec")==0) {
                    252:     grade = grade_firstvec;
                    253:     F_grade = "firstvec";
                    254:   }else if (strcmp(arg,"module1")==0) {
                    255:     grade = grade_module1;
                    256:     F_grade = "module1";
                    257:   }else if (strcmp(arg,"module1v")==0) {
                    258:     grade = grade_module1v;
                    259:     F_grade = "module1v";
                    260:   }else ;
                    261:
                    262: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>