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

Annotation of OpenXM/src/kan96xx/Kan/option.c, Revision 1.19

1.19    ! takayama    1: /* $OpenXM: OpenXM/src/kan96xx/Kan/option.c,v 1.18 2011/10/05 05:46:14 takayama Exp $ */
1.1       maekawa     2: #include <stdio.h>
                      3: #include "datatype.h"
                      4: #include "stackm.h"
                      5: #include "extern.h"
                      6: #include "gradedset.h"
                      7: #include "kclass.h"
                      8: #include "lookup.h"
                      9: #include <signal.h>
1.19    ! takayama   10: #include "../plugin/mysig.h"
1.1       maekawa    11:
                     12: extern void ctrlC();
                     13:
                     14:
                     15: struct object KsystemVariable(ob)
1.5       takayama   16:      struct object ob; /* Sarray */
1.1       maekawa    17: {
                     18:   /* Don't forget to write the keys in usage.c */
                     19:   extern int PrintDollar;
                     20:   extern int Wrap;
1.18      takayama   21:   extern int COutput;
1.1       maekawa    22:   extern struct ring *CurrentRingp;
                     23:   extern int Verbose;
                     24:   extern int UseCriterion1;
                     25:   extern int UseCriterion2B;
                     26:   extern int ReduceLowerTerms;
                     27:   extern int CheckHomogenization;
                     28:   extern int Homogenize;
                     29:   extern int Statistics;
1.3       takayama   30:   extern int AutoReduce;
1.1       maekawa    31:   extern int Osp;
                     32:   extern struct operandStack StandardStack;
                     33:   extern struct operandStack ErrorStack;
                     34:   extern int ErrorMessageMode;
                     35:   extern int WarningMessageMode;
                     36:   extern int CatchCtrlC;
                     37:   extern int Strict;
                     38:   extern struct context *CurrentContextp;
                     39:   extern struct context *PrimitiveContextp;
                     40:   extern int Strict2;
                     41:   extern int SigIgn;
                     42:   extern int KSPushEnvMode;
                     43:   extern int KanGBmessage;
                     44:   extern int TimerOn;
                     45:   extern int OutputStyle;
                     46:   extern int Sugar;
                     47:   extern int Homogenize_vec;
                     48:   extern int CmoDMSOutputOption;
                     49:   extern int DebugReductionRed; /* hidden option */
1.9       takayama   50:   extern int DebugReductionEcart;
1.1       maekawa    51:   extern char *VersionString;
                     52:   extern int AvoidTheSameRing;
1.2       takayama   53:   extern char *LeftBracket;
                     54:   extern char *RightBracket;
1.4       takayama   55:   extern int SecureMode;
1.7       takayama   56:   extern int Ecart;
1.8       takayama   57:   extern int EcartAutomaticHomogenization;
1.11      takayama   58:   extern int TraceLift;
1.12      takayama   59:   extern int DoCancel;
1.13      takayama   60:   extern int DebugContentReduction;
1.14      takayama   61:   extern int QuoteMode;
1.15      takayama   62:   extern int RestrictedMode, RestrictedMode_saved;
1.17      takayama   63:   extern int UseDsmall;
1.1       maekawa    64:
                     65:   int n,i;
1.16      takayama   66:   struct object ob1 = OINIT;
                     67:   struct object ob2 = OINIT;
                     68:   struct object ob3 = OINIT;
                     69:   struct object ob4 = OINIT;
1.1       maekawa    70:   struct object rob = NullObject;
                     71:   switch (getoaSize(ob)) {
                     72:   case 1:   /* get the value */
                     73:     ob1 = getoa(ob,0);
                     74:     switch(ob1.tag) {
                     75:     case Sdollar:
                     76:       if (strcmp(ob1.lc.str,"PrintDollar") == 0) {
1.5       takayama   77:         rob = KpoInteger(PrintDollar);
1.1       maekawa    78:       }else if (strcmp(ob1.lc.str,"Wrap") == 0) {
1.5       takayama   79:         rob = KpoInteger(Wrap);
1.18      takayama   80:       }else if (strcmp(ob1.lc.str,"COutput") == 0) {
                     81:         rob = KpoInteger(COutput);
1.1       maekawa    82:       }else if (strcmp(ob1.lc.str,"P") == 0) {
1.5       takayama   83:         rob = KpoInteger(CurrentRingp->p);
1.1       maekawa    84:       }else if (strcmp(ob1.lc.str,"N") == 0) {
1.5       takayama   85:         rob = KpoInteger(CurrentRingp->n);
1.1       maekawa    86:       }else if (strcmp(ob1.lc.str,"NN") == 0) {
1.5       takayama   87:         rob = KpoInteger(CurrentRingp->nn);
1.1       maekawa    88:       }else if (strcmp(ob1.lc.str,"M") == 0) {
1.5       takayama   89:         rob = KpoInteger(CurrentRingp->m);
1.1       maekawa    90:       }else if (strcmp(ob1.lc.str,"MM") == 0) {
1.5       takayama   91:         rob = KpoInteger(CurrentRingp->mm);
1.1       maekawa    92:       }else if (strcmp(ob1.lc.str,"L") == 0) {
1.5       takayama   93:         rob = KpoInteger(CurrentRingp->l);
1.1       maekawa    94:       }else if (strcmp(ob1.lc.str,"LL") == 0) {
1.5       takayama   95:         rob = KpoInteger(CurrentRingp->ll);
1.1       maekawa    96:       }else if (strcmp(ob1.lc.str,"C") == 0) {
1.5       takayama   97:         rob = KpoInteger(CurrentRingp->c);
1.1       maekawa    98:       }else if (strcmp(ob1.lc.str,"CC") == 0) {
1.5       takayama   99:         rob = KpoInteger(CurrentRingp->cc);
1.1       maekawa   100:       }else if (strcmp(ob1.lc.str,"CurrentRingp") == 0) {
1.5       takayama  101:         rob = KpoRingp(CurrentRingp);
1.1       maekawa   102:       }else if (strcmp(ob1.lc.str,"Verbose") == 0) {
1.5       takayama  103:         rob = KpoInteger(Verbose);
1.1       maekawa   104:       }else if (strcmp(ob1.lc.str,"UseCriterion1") == 0) {
1.5       takayama  105:         rob = KpoInteger(UseCriterion1);
1.1       maekawa   106:       }else if (strcmp(ob1.lc.str,"UseCriterion2B") == 0) {
1.5       takayama  107:         rob = KpoInteger(UseCriterion2B);
1.1       maekawa   108:       }else if (strcmp(ob1.lc.str,"ReduceLowerTerms") == 0) {
1.5       takayama  109:         rob = KpoInteger(ReduceLowerTerms);
1.1       maekawa   110:       }else if (strcmp(ob1.lc.str,"CheckHomogenization") == 0) {
1.5       takayama  111:         rob = KpoInteger(CheckHomogenization);
1.1       maekawa   112:       }else if (strcmp(ob1.lc.str,"Homogenize") == 0) {
1.5       takayama  113:         rob = KpoInteger(Homogenize);
1.1       maekawa   114:       }else if (strcmp(ob1.lc.str,"Statistics") == 0) {
1.5       takayama  115:         rob = KpoInteger(Statistics);
1.3       takayama  116:       }else if (strcmp(ob1.lc.str,"AutoReduce") == 0) {
1.5       takayama  117:         rob = KpoInteger(AutoReduce);
1.1       maekawa   118:       }else if (strcmp(ob1.lc.str,"StackPointer") == 0) {
1.5       takayama  119:         rob = KpoInteger(Osp);
1.1       maekawa   120:       }else if (strcmp(ob1.lc.str,"StandardOperandStack") == 0) {
1.5       takayama  121:         rob.tag = Sclass;
                    122:         rob.lc.ival = CLASSNAME_OPERANDSTACK;
                    123:         rob.rc.voidp = &StandardStack;
1.1       maekawa   124:       }else if (strcmp(ob1.lc.str,"ErrorStack") == 0) {
1.5       takayama  125:         rob.tag = Sclass;
                    126:         rob.lc.ival = CLASSNAME_OPERANDSTACK;
                    127:         rob.rc.voidp = &ErrorStack;
1.1       maekawa   128:       }else if (strcmp(ob1.lc.str,"ErrorMessageMode") == 0) {
1.5       takayama  129:         rob = KpoInteger(ErrorMessageMode);
1.1       maekawa   130:       }else if (strcmp(ob1.lc.str,"WarningMessageMode") == 0) {
1.5       takayama  131:         rob = KpoInteger(WarningMessageMode);
1.1       maekawa   132:       }else if (strcmp(ob1.lc.str,"CatchCtrlC") == 0) {
1.5       takayama  133:         rob = KpoInteger(CatchCtrlC);
                    134:         /* If you catch ctrlc in KSexecuteString. */
1.1       maekawa   135:       }else if (strcmp(ob1.lc.str,"Strict") == 0) {
1.5       takayama  136:         rob = KpoInteger(Strict);
1.1       maekawa   137:       }else if (strcmp(ob1.lc.str,"CurrentContextp") == 0) {
1.5       takayama  138:         rob.tag = Sclass;
                    139:         rob.lc.ival = CLASSNAME_CONTEXT;
                    140:         rob.rc.voidp = CurrentContextp;
1.1       maekawa   141:       }else if (strcmp(ob1.lc.str,"PrimitiveContextp") == 0) {
1.5       takayama  142:         rob.tag = Sclass;
                    143:         rob.lc.ival = CLASSNAME_CONTEXT;
                    144:         rob.rc.voidp = PrimitiveContextp;
1.1       maekawa   145:       }else if (strcmp(ob1.lc.str,"NullContextp") == 0) {
1.5       takayama  146:         rob.tag = Sclass;
                    147:         rob.lc.ival = CLASSNAME_CONTEXT;
                    148:         rob.rc.voidp = (struct context *)NULL;
1.1       maekawa   149:       }else if (strcmp(ob1.lc.str,"Strict2") == 0) {
1.5       takayama  150:         rob = KpoInteger(Strict2);
1.1       maekawa   151:       }else if (strcmp(ob1.lc.str,"SigIgn") == 0) {
1.5       takayama  152:         rob = KpoInteger(SigIgn);
1.1       maekawa   153:       }else if (strcmp(ob1.lc.str,"KSPushEnvMode") == 0) {
1.5       takayama  154:         rob = KpoInteger(KSPushEnvMode);
1.1       maekawa   155:       }else if (strcmp(ob1.lc.str,"KanGBmessage") == 0) {
1.5       takayama  156:         rob = KpoInteger(KanGBmessage);
1.1       maekawa   157:       }else if (strcmp(ob1.lc.str,"TimerOn") == 0) {
1.5       takayama  158:         rob = KpoInteger(TimerOn);
1.1       maekawa   159:       }else if (strcmp(ob1.lc.str,"orderMatrix") == 0) {
1.5       takayama  160:         rob = KgetOrderMatrixOfCurrentRing();
1.1       maekawa   161:       }else if (strcmp(ob1.lc.str,"gbListTower") == 0) {
1.5       takayama  162:         if (CurrentRingp->gbListTower == NULL) rob = NullObject;
                    163:         else rob = *((struct object *)(CurrentRingp->gbListTower));
1.1       maekawa   164:       }else if (strcmp(ob1.lc.str,"outputOrder") == 0) {
1.5       takayama  165:         n = CurrentRingp->n;
                    166:         ob1 = newObjectArray(n*2);
                    167:         for (i=0; i<2*n; i++) {
                    168:           putoa(ob1,i,KpoInteger(CurrentRingp->outputOrder[i]));
                    169:         }
                    170:         rob = ob1;
1.1       maekawa   171:       }else if (strcmp(ob1.lc.str,"multSymbol") == 0) {
1.5       takayama  172:         rob = KpoInteger(OutputStyle);
1.1       maekawa   173:       }else if (strcmp(ob1.lc.str,"Sugar") == 0) {
1.5       takayama  174:         rob = KpoInteger(Sugar);
1.1       maekawa   175:       }else if (strcmp(ob1.lc.str,"Homogenize_vec") == 0) {
1.5       takayama  176:         rob = KpoInteger(Homogenize_vec);
1.1       maekawa   177:       }else if (strcmp(ob1.lc.str,"Schreyer")==0) {
1.5       takayama  178:         rob = KpoInteger( CurrentRingp->schreyer );
1.1       maekawa   179:       }else if (strcmp(ob1.lc.str,"ringName")==0) {
1.5       takayama  180:         rob = KpoString( CurrentRingp->name );
1.1       maekawa   181:       }else if (strcmp(ob1.lc.str,"CmoDMSOutputOption")==0) {
1.5       takayama  182:         rob = KpoInteger( CmoDMSOutputOption );
1.1       maekawa   183:       }else if (strcmp(ob1.lc.str,"Version")==0) {
1.5       takayama  184:         rob = KpoString(VersionString);
1.1       maekawa   185:       }else if (strcmp(ob1.lc.str,"RingStack")==0) {
1.5       takayama  186:         KsetUpRing(NullObject,NullObject,NullObject,NullObject,NullObject);
                    187:         rob = KSpop(); /* This is exceptional style */
1.1       maekawa   188:       }else if (strcmp(ob1.lc.str,"AvoidTheSameRing")==0) {
1.5       takayama  189:         rob = KpoInteger(AvoidTheSameRing);
1.2       takayama  190:       }else if (strcmp(ob1.lc.str,"LeftBracket")==0) {
1.5       takayama  191:         rob = KpoString(LeftBracket);
1.2       takayama  192:       }else if (strcmp(ob1.lc.str,"RightBracket")==0) {
1.5       takayama  193:         rob = KpoString(RightBracket);
1.4       takayama  194:       }else if (strcmp(ob1.lc.str,"SecureMode")==0) {
1.5       takayama  195:         rob = KpoInteger(SecureMode);
1.15      takayama  196:       }else if (strcmp(ob1.lc.str,"RestrictedMode")==0) {
                    197:         rob = KpoInteger(RestrictedMode);
1.7       takayama  198:       }else if (strcmp(ob1.lc.str,"Ecart")==0) {
                    199:         rob = KpoInteger(Ecart);
1.8       takayama  200:       }else if (strcmp(ob1.lc.str,"EcartAutomaticHomogenization")==0) {
                    201:         rob = KpoInteger(EcartAutomaticHomogenization);
1.11      takayama  202:       }else if (strcmp(ob1.lc.str,"TraceLift")==0) {
                    203:         rob = KpoInteger(TraceLift);
1.12      takayama  204:       }else if (strcmp(ob1.lc.str,"DoCancel")==0) {
                    205:         rob = KpoInteger(DoCancel);
1.13      takayama  206:       }else if (strcmp(ob1.lc.str,"DebugContentReduction")==0) {
                    207:         rob = KpoInteger(DebugContentReduction);
1.14      takayama  208:       }else if (strcmp(ob1.lc.str,"QuoteMode")==0) {
                    209:         rob = KpoInteger(QuoteMode);
1.17      takayama  210:       }else if (strcmp(ob1.lc.str,"UseDsmall")==0) {
                    211:         rob = KpoInteger(UseDsmall);
1.1       maekawa   212:       }else{
1.5       takayama  213:         warningKan("KsystemVariable():Unknown key word.\n");
1.1       maekawa   214:       }
                    215:       break;
                    216:     default:
                    217:       warningKan("KsystemVariable():Invalid argument\n");
                    218:       break;
                    219:     }
                    220:     break;
                    221:   case 2: /* set value */
                    222:     ob1 = getoa(ob,0);
                    223:     ob2 = getoa(ob,1);
                    224:     switch (Lookup[ob1.tag][ob2.tag]) {
                    225:     case SdollarSinteger:
                    226:       if (strcmp(ob1.lc.str,"PrintDollar") == 0) {
1.5       takayama  227:         PrintDollar = ob2.lc.ival;
                    228:         rob = KpoInteger(PrintDollar);
1.1       maekawa   229:       }else if (strcmp(ob1.lc.str,"Wrap") == 0) {
1.5       takayama  230:         Wrap = ob2.lc.ival;
                    231:         rob = KpoInteger(Wrap);
                    232:         /*}else if (strcmp(ob1.lc.str,"P") == 0) {
                    233:           P = ob2.lc.ival;  Q should be set here too.
                    234:           CurrentRingp->p = P;
                    235:           rob = KpoInteger(P); */
1.18      takayama  236:       }else if (strcmp(ob1.lc.str,"COutput") == 0) {
                    237:         COutput = ob2.lc.ival;
                    238:         rob = KpoInteger(COutput);
1.1       maekawa   239:       }else if (strcmp(ob1.lc.str,"NN") == 0) {
1.5       takayama  240:         if (ob2.lc.ival <= CurrentRingp->n && ob2.lc.ival >= CurrentRingp->m) {
                    241:           CurrentRingp->nn = ob2.lc.ival;
                    242:         }else{
                    243:           warningKan("New value of NN is out of bound.");
                    244:         }
                    245:         rob = KpoInteger(ob1.lc.ival);
1.1       maekawa   246:       }else if (strcmp(ob1.lc.str,"Verbose") == 0) {
1.5       takayama  247:         Verbose = ob2.lc.ival;
                    248:         rob = KpoInteger(Verbose);
1.1       maekawa   249:       }else if (strcmp(ob1.lc.str,"UseCriterion1") == 0) {
1.5       takayama  250:         UseCriterion1 = ob2.lc.ival;
                    251:         rob = KpoInteger(UseCriterion1);
1.1       maekawa   252:       }else if (strcmp(ob1.lc.str,"UseCriterion2B") == 0) {
1.5       takayama  253:         UseCriterion2B = ob2.lc.ival;
                    254:         rob = KpoInteger(UseCriterion2B);
1.1       maekawa   255:       }else if (strcmp(ob1.lc.str,"ReduceLowerTerms") == 0) {
1.5       takayama  256:         ReduceLowerTerms = ob2.lc.ival;
                    257:         rob = KpoInteger(ReduceLowerTerms);
1.1       maekawa   258:       }else if (strcmp(ob1.lc.str,"CheckHomogenization") == 0) {
1.5       takayama  259:         CheckHomogenization = ob2.lc.ival;
                    260:         rob = KpoInteger(CheckHomogenization);
1.1       maekawa   261:       }else if (strcmp(ob1.lc.str,"Homogenize") == 0) {
1.5       takayama  262:         Homogenize = ob2.lc.ival;
                    263:         rob = KpoInteger(Homogenize);
1.1       maekawa   264:       }else if (strcmp(ob1.lc.str,"Statistics") == 0) {
1.5       takayama  265:         Statistics = ob2.lc.ival;
                    266:         rob = KpoInteger(Statistics);
1.3       takayama  267:       }else if (strcmp(ob1.lc.str,"AutoReduce") == 0) {
1.5       takayama  268:         AutoReduce = ob2.lc.ival;
                    269:         rob = KpoInteger(AutoReduce);
1.1       maekawa   270:       }else if (strcmp(ob1.lc.str,"ErrorMessageMode") == 0) {
1.5       takayama  271:         ErrorMessageMode = ob2.lc.ival;
                    272:         rob = KpoInteger(ErrorMessageMode);
1.1       maekawa   273:       }else if (strcmp(ob1.lc.str,"WarningMessageMode") == 0) {
1.5       takayama  274:         WarningMessageMode = ob2.lc.ival;
                    275:         rob = KpoInteger(WarningMessageMode);
1.1       maekawa   276:       }else if (strcmp(ob1.lc.str,"CatchCtrlC") == 0) {
1.5       takayama  277:         CatchCtrlC = ob2.lc.ival;
                    278:         rob = KpoInteger(CatchCtrlC);
1.1       maekawa   279:       }else if (strcmp(ob1.lc.str,"Strict") == 0) {
1.5       takayama  280:         Strict = ob2.lc.ival;
                    281:         rob = KpoInteger(Strict);
1.1       maekawa   282:       }else if (strcmp(ob1.lc.str,"Strict2") == 0) {
1.5       takayama  283:         Strict2 = ob2.lc.ival;
                    284:         rob = KpoInteger(Strict2);
1.1       maekawa   285:       }else if (strcmp(ob1.lc.str,"SigIgn") == 0) {
1.5       takayama  286:         SigIgn = ob2.lc.ival;
1.19    ! takayama  287:         if (SigIgn) mysignal(SIGINT,SIG_IGN);
        !           288:         else mysignal(SIGINT,ctrlC);
1.5       takayama  289:         rob = KpoInteger(SigIgn);
1.1       maekawa   290:       }else if (strcmp(ob1.lc.str,"KSPushEnvMode") == 0) {
1.5       takayama  291:         KSPushEnvMode = ob2.lc.ival;
                    292:         rob = KpoInteger(KSPushEnvMode);
1.1       maekawa   293:       }else if (strcmp(ob1.lc.str,"KanGBmessage") == 0) {
1.5       takayama  294:         KanGBmessage = ob2.lc.ival;
                    295:         rob = KpoInteger(KanGBmessage);
1.1       maekawa   296:       }else if (strcmp(ob1.lc.str,"TimerOn") == 0) {
1.5       takayama  297:         TimerOn = ob2.lc.ival;
                    298:         rob = KpoInteger(TimerOn);
1.1       maekawa   299:       }else if (strcmp(ob1.lc.str,"multSymbol") == 0) {
1.5       takayama  300:         OutputStyle = KopInteger(ob2);
                    301:         rob = KpoInteger(OutputStyle);
1.1       maekawa   302:       }else if (strcmp(ob1.lc.str,"Sugar") == 0) {
1.5       takayama  303:         Sugar = KopInteger(ob2);
                    304:         if (Sugar && ReduceLowerTerms) {
                    305:           ReduceLowerTerms = 0;
                    306:           warningKan("ReduceLowerTerms is automatically set to 0, because Sugar = 1.");
                    307:           /* You cannot use both ReduceLowerTerms and sugar.
                    308:              See gb.c, reduction_sugar. */
                    309:         }
                    310:         rob = KpoInteger(Sugar);
1.1       maekawa   311:       }else if (strcmp(ob1.lc.str,"Homogenize_vec") == 0) {
1.5       takayama  312:         Homogenize_vec = KopInteger(ob2);
                    313:         rob = KpoInteger(Homogenize_vec);
1.1       maekawa   314:       }else if (strcmp(ob1.lc.str,"CmoDMSOutputOption") == 0) {
1.5       takayama  315:         CmoDMSOutputOption = KopInteger(ob2);
                    316:         rob = KpoInteger(CmoDMSOutputOption);
1.1       maekawa   317:       }else if (strcmp(ob1.lc.str,"DebugReductionRed") == 0) {
1.5       takayama  318:         DebugReductionRed = KopInteger(ob2);
                    319:         rob = KpoInteger(DebugReductionRed);
1.9       takayama  320:       }else if (strcmp(ob1.lc.str,"DebugReductionEcart") == 0) {
                    321:         DebugReductionEcart = KopInteger(ob2);
                    322:         rob = KpoInteger(DebugReductionEcart);
1.1       maekawa   323:       }else if (strcmp(ob1.lc.str,"AvoidTheSameRing") == 0) {
1.5       takayama  324:         AvoidTheSameRing = KopInteger(ob2);
                    325:         rob = KpoInteger(AvoidTheSameRing);
1.4       takayama  326:       }else if (strcmp(ob1.lc.str,"SecureMode") == 0) {
1.5       takayama  327:         if (KopInteger(ob2) >= SecureMode) {
                    328:           SecureMode = KopInteger(ob2);
                    329:         }else{
                    330:           errorKan1("%s\n","You cannot weaken the security level.");
                    331:         }
                    332:         rob = KpoInteger(SecureMode);
1.15      takayama  333:       }else if (strcmp(ob1.lc.str,"RestrictedMode") == 0) {
                    334:         if (KopInteger(ob2) >= RestrictedMode) {
                    335:           RestrictedMode = KopInteger(ob2);
                    336:           RestrictedMode_saved = RestrictedMode;
                    337:         }else{
                    338:           errorKan1("%s\n","You cannot weaken the RestrictedMode level.");
                    339:         }
                    340:         rob = KpoInteger(RestrictedMode);
1.7       takayama  341:       }else if (strcmp(ob1.lc.str,"Ecart") == 0) {
                    342:         Ecart = KopInteger(ob2);
                    343:         rob = KpoInteger(Ecart);
1.8       takayama  344:       }else if (strcmp(ob1.lc.str,"EcartAutomaticHomogenization") == 0) {
1.10      takayama  345:         EcartAutomaticHomogenization = KopInteger(ob2);
1.8       takayama  346:         rob = KpoInteger(EcartAutomaticHomogenization);
1.11      takayama  347:       }else if (strcmp(ob1.lc.str,"TraceLift") == 0) {
                    348:         TraceLift = KopInteger(ob2);
                    349:         rob = KpoInteger(TraceLift);
1.12      takayama  350:       }else if (strcmp(ob1.lc.str,"DoCancel") == 0) {
                    351:         DoCancel = KopInteger(ob2);
                    352:         rob = KpoInteger(DoCancel);
1.13      takayama  353:       }else if (strcmp(ob1.lc.str,"DebugContentReduction") == 0) {
                    354:         DebugContentReduction = KopInteger(ob2);
                    355:         rob = KpoInteger(DebugContentReduction);
1.14      takayama  356:       }else if (strcmp(ob1.lc.str,"QuoteMode") == 0) {
                    357:         QuoteMode = KopInteger(ob2);
                    358:         rob = KpoInteger(QuoteMode);
1.17      takayama  359:       }else if (strcmp(ob1.lc.str,"UseDsmall") == 0) {
                    360:         UseDsmall = KopInteger(ob2);
                    361:         rob = KpoInteger(UseDsmall);
1.1       maekawa   362:       }else{
1.5       takayama  363:         warningKan("KsystemVariable():Unknown key word.\n");
1.1       maekawa   364:       }
                    365:       break;
                    366:     case SdollarSdollar:
                    367:       if (strcmp(ob1.lc.str,"ringName") == 0) {
1.5       takayama  368:         CurrentRingp->name = KopString(ob2);
                    369:         rob = KpoString(CurrentRingp->name);
1.2       takayama  370:       }else if (strcmp(ob1.lc.str,"LeftBracket") == 0) {
1.5       takayama  371:         LeftBracket = KopString(ob2);
                    372:         rob = KpoString(LeftBracket);
1.2       takayama  373:       }else if (strcmp(ob1.lc.str,"RightBracket") == 0) {
1.5       takayama  374:         RightBracket = KopString(ob2);
                    375:         rob = KpoString(RightBracket);
1.1       maekawa   376:       }else{
1.5       takayama  377:         warningKan("KsystemVariable():Unknown key word.\n");
1.1       maekawa   378:       }
                    379:       break;
                    380:     case SdollarSring:
                    381:       if (strcmp(ob1.lc.str,"CurrentRingp") == 0) {
1.5       takayama  382:         CurrentRingp = ob2.lc.ringp;
                    383:         rob = KpoRingp(CurrentRingp);
1.1       maekawa   384:       }else{
1.5       takayama  385:         warningKan("KsystemVariable():Unknown key word.\n");
1.1       maekawa   386:       }
                    387:       break;
                    388:     case SdollarSclass:
                    389:       if (strcmp(ob1.lc.str,"PrimitiveContextp") == 0) {
1.5       takayama  390:         if (ectag(ob2) == CLASSNAME_CONTEXT) {
                    391:           PrimitiveContextp = (struct context *)ob2.rc.voidp;
                    392:           rob = ob2;
                    393:         }else{
                    394:           warningKan("The second argument must be class.context.\n");
                    395:           rob = NullObject;
                    396:         }
1.1       maekawa   397:       }else {
1.5       takayama  398:         warningKan("KsystemVariable():Unknown key word.\n");
1.1       maekawa   399:       }
                    400:       break;
                    401:     case SdollarSlist:
                    402:       if (strcmp(ob1.lc.str,"gbListTower") == 0) {
1.5       takayama  403:         if (AvoidTheSameRing)
                    404:           warningKan("Changing gbListTower may cause a trouble under AvoidTheSameRing == 1.");
                    405:         CurrentRingp->gbListTower = newObject();
                    406:         *((struct object *)(CurrentRingp->gbListTower)) = ob2;
                    407:         rob = *((struct object *)(CurrentRingp->gbListTower));
1.1       maekawa   408:       }else {
1.5       takayama  409:         warningKan("KsystemVariable(): Unknown key word to set value.\n");
1.1       maekawa   410:       }
                    411:       break;
                    412:     case SdollarSarray:
                    413:       if (strcmp(ob1.lc.str,"outputOrder") == 0) {
1.5       takayama  414:         rob = KsetOutputOrder(ob2,CurrentRingp);
1.1       maekawa   415:       }else if (strcmp(ob1.lc.str,"variableNames") == 0) {
1.5       takayama  416:         rob = KsetVariableNames(ob2,CurrentRingp);
1.1       maekawa   417:       }else {
1.5       takayama  418:         warningKan("KsystemVariable(): Unknown key word to set value.\n");
1.1       maekawa   419:       }
                    420:       break;
                    421:     default:
                    422:       warningKan("KsystemVariable():Invalid argument.\n");
                    423:     }
                    424:     break;
                    425:   case 3:
                    426:     ob1 = getoa(ob,0); ob2 = getoa(ob,1); ob3 = getoa(ob,2);
                    427:     switch(Lookup[ob1.tag][ob2.tag]) {
                    428:     case SdollarSdollar:
                    429:       if (strcmp(ob2.lc.str,"var") == 0) {
1.5       takayama  430:         if (strcmp(ob1.lc.str,"x")==0) {
                    431:           if (ob3.tag != Sinteger) {
                    432:             warningKan("[$x$ $var$ ? ] The 3rd argument must be integer.");
                    433:             break;
                    434:           }
                    435:           if (ob3.lc.ival >= 0 && ob3.lc.ival < CurrentRingp->n) {
                    436:             rob = KpoString(CurrentRingp->x[ob3.lc.ival]);
                    437:           }else{
                    438:             warningKan("[$x$ $var$ ? ] The 3rd argument is out of range.");
                    439:             break;
                    440:           }
                    441:         }else if (strcmp(ob1.lc.str,"D")==0) {
                    442:           if (ob3.tag != Sinteger) {
                    443:             warningKan("[$D$ $var$ ? ] The 3rd argument must be integer.");
                    444:             break;
                    445:           }
                    446:           if (ob3.lc.ival >= 0 && ob3.lc.ival < CurrentRingp->n) {
                    447:             rob = KpoString(CurrentRingp->D[ob3.lc.ival]);
                    448:           }else{
                    449:             warningKan("[$D$ $var$ ? ] The 3rd argument is out of range.");
                    450:             break;
                    451:           }
                    452:         }
1.1       maekawa   453:       }else{
1.5       takayama  454:         warningKan("KsystemVariable(): Invalid argument.\n");
1.1       maekawa   455:       }
                    456:       break;
                    457:     default:
                    458:       warningKan("KsystemVariable(): Invalid argument.\n");
                    459:       break;
                    460:     }
                    461:     break;
                    462:   default:
                    463:     warningKan("KsystemVariable():Invalid argument.\n");
                    464:     break;
                    465:   }
                    466:   return(rob);
                    467: }
                    468:
                    469: warningOption(str)
1.5       takayama  470:      char *str;
1.1       maekawa   471: {
                    472:   fprintf(stderr,"Warning(option.c): %s\n",str);
                    473: }

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