| version 1.21, 2004/09/12 00:26:21 | 
version 1.22, 2004/09/12 01:32:08 | 
 | 
 | 
|  /* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.20 2004/09/11 23:49:34 takayama Exp $ */ | 
 /* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.21 2004/09/12 00:26:21 takayama Exp $ */ | 
|  /*   stackmachin.c */ | 
 /*   stackmachin.c */ | 
|   | 
  | 
|  #include <stdio.h> | 
 #include <stdio.h> | 
| Line 740  void scanner() { | 
 
  | 
| Line 740  void scanner() { | 
 
 
 | 
|    struct object ob; | 
   struct object ob; | 
|    extern int Quiet; | 
   extern int Quiet; | 
|    extern void ctrlC(); | 
   extern void ctrlC(); | 
|    int tmp; | 
   int tmp, status; | 
|    char *tmp2; | 
   char *tmp2; | 
|    extern int ErrorMessageMode; | 
   extern int ErrorMessageMode; | 
|    int jval; | 
   int jval; | 
|    extern int InSendmsg2; | 
   extern int InSendmsg2; | 
|   | 
   int infixOn = 0; | 
|   | 
   struct tokens infixToken; | 
|    getokenSM(INIT); | 
   getokenSM(INIT); | 
|    initSystemDictionary(); | 
   initSystemDictionary(); | 
|   | 
  | 
| Line 834  void scanner() { | 
 
  | 
| Line 836  void scanner() { | 
 
 
 | 
|        Calling_ctrlC_hook = 0; | 
       Calling_ctrlC_hook = 0; | 
|        KSexecuteString(" (Computation is interrupted.) "); /* move to ctrlC-hook? */ | 
       KSexecuteString(" (Computation is interrupted.) "); /* move to ctrlC-hook? */ | 
|        InSendmsg2 = 0; | 
       InSendmsg2 = 0; | 
|   | 
       infixOn = 0; | 
|        continue ; | 
       continue ; | 
|      } else {  } | 
     } else {  } | 
|      if (DebugStack >= 1) { printOperandStack(); } | 
     if (DebugStack >= 1) { printOperandStack(); } | 
|      token = getokenSM(GET); | 
     token = getokenSM(GET); | 
|      if ((tmp=executeToken(token)) < 0) break; | 
     if ((status=executeToken(token)) < 0) break; | 
|      /***if (tmp == 1) fprintf(stderr," --- exit --- \n");*/ | 
     /***if (status == 1) fprintf(stderr," --- exit --- \n");*/ | 
|   | 
     /* fprintf(stderr,"token.token=%s, status=%d, infixOn=%d\n",token.token,status,infixOn); */ | 
|   | 
     if (status & STATUS_INFIX) { | 
|   | 
       infixOn = 1;  infixToken = token; infixToken.tflag |= NO_DELAY; | 
|   | 
     }else if (infixOn) { | 
|   | 
       infixOn = 0; | 
|   | 
       if ((status=executeToken(infixToken)) < 0) break; | 
|   | 
     } | 
|    } | 
   } | 
|  } | 
 } | 
|   | 
  | 
| Line 964  int executeToken(token) | 
 
  | 
| Line 974  int executeToken(token) | 
 
 
 | 
|        h1 = ((token.object.lc.op)->rc).ival; | 
       h1 = ((token.object.lc.op)->rc).ival; | 
|        ob=findUserDictionary(token.token,h0,h1,CurrentContextp); | 
       ob=findUserDictionary(token.token,h0,h1,CurrentContextp); | 
|        primitive = ((token.object.rc.op)->lc).ival; | 
       primitive = ((token.object.rc.op)->lc).ival; | 
|   | 
       if (!(token.tflag & NO_DELAY)) { | 
|   | 
         if ((ob.tag >= 0) && (UD_attr & ATTR_INFIX)) { | 
|   | 
           tracePopName(); return STATUS_INFIX; | 
|   | 
         } | 
|   | 
       } | 
|        if (ob.tag >= 0) { | 
       if (ob.tag >= 0) { | 
|          /* there is a definition in the user dictionary */ | 
         /* there is a definition in the user dictionary */ | 
|          if (ob.tag == SexecutableArray) { | 
         if (ob.tag == SexecutableArray) { |