[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.7

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

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