| version 1.18, 2004/09/05 08:08:41 | 
version 1.21, 2004/09/12 00:26:21 | 
 | 
 | 
|  /* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.17 2004/09/05 01:15:47 takayama Exp $ */ | 
 /* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.20 2004/09/11 23:49:34 takayama Exp $ */ | 
|  /*   stackmachin.c */ | 
 /*   stackmachin.c */ | 
|   | 
  | 
|  #include <stdio.h> | 
 #include <stdio.h> | 
| Line 83  int UserCtrlC = 0; | 
 
  | 
| Line 83  int UserCtrlC = 0; | 
 
 
 | 
|  int OXlock = 0; | 
 int OXlock = 0; | 
|  int OXlockSaved = 0; | 
 int OXlockSaved = 0; | 
|   | 
  | 
|   | 
 char *UD_str; | 
|   | 
 int  UD_attr; | 
|   | 
  | 
|  struct object * newObject() | 
 struct object * newObject() | 
|  { | 
 { | 
|    struct object *r; | 
   struct object *r; | 
| Line 218  int putUserDictionary(str,h0,h1,ob,dic) | 
 
  | 
| Line 221  int putUserDictionary(str,h0,h1,ob,dic) | 
 
 
 | 
|    } | 
   } | 
|    r = x; | 
   r = x; | 
|    if (Strict2) { | 
   if (Strict2) { | 
|      switch((dic[x]).attr) { | 
     switch(((dic[x]).attr) & (PROTECT | ABSOLUTE_PROTECT)) { | 
|      case PROTECT: | 
     case PROTECT: | 
|        r = -PROTECT;   /* Protected, but we rewrite it. */ | 
       r = -PROTECT;   /* Protected, but we rewrite it. */ | 
|        break; | 
       break; | 
| Line 226  int putUserDictionary(str,h0,h1,ob,dic) | 
 
  | 
| Line 229  int putUserDictionary(str,h0,h1,ob,dic) | 
 
 
 | 
|        r = -ABSOLUTE_PROTECT;  /* Protected and we do not rewrite it. */ | 
       r = -ABSOLUTE_PROTECT;  /* Protected and we do not rewrite it. */ | 
|        return(r); | 
       return(r); | 
|      default: | 
     default: | 
|        (dic[x]).attr = 0; | 
       /* (dic[x]).attr = 0; */ /* It is not necesarry, I think. */ | 
|        break; | 
       break; | 
|      } | 
     } | 
|    } | 
   } | 
| Line 249  struct object findUserDictionary(str,h0,h1,cp)    | 
 
  | 
| Line 252  struct object findUserDictionary(str,h0,h1,cp)    | 
 
 
 | 
|       char *str;    /* key */ | 
      char *str;    /* key */ | 
|       int h0,h1;    /* The hashing values of the key. */ | 
      int h0,h1;    /* The hashing values of the key. */ | 
|       struct context *cp; | 
      struct context *cp; | 
|   | 
          /* Set char *UD_str, int UD_attr (attributes) */ | 
|  { | 
 { | 
|    int x; | 
   int x; | 
|    struct dictionary *dic; | 
   struct dictionary *dic; | 
|   | 
   extern char *UD_str; | 
|   | 
   extern int UD_attr; | 
|   | 
   UD_str = NULL; UD_attr = -1; | 
|    dic = cp->userDictionary; | 
   dic = cp->userDictionary; | 
|    x = h0; | 
   x = h0; | 
|    while (1) { | 
   while (1) { | 
|      if ((dic[x]).key == EMPTY) { break; } | 
     if ((dic[x]).key == EMPTY) { break; } | 
|      if (strcmp((dic[x]).key,str) == 0) { | 
     if (strcmp((dic[x]).key,str) == 0) { | 
|   | 
           UD_str = (dic[x]).key; UD_attr = (dic[x]).attr; | 
|        return( (dic[x]).obj ); | 
       return( (dic[x]).obj ); | 
|      } | 
     } | 
|      x = (x+h1) % USER_DICTIONARY_SIZE; | 
     x = (x+h1) % USER_DICTIONARY_SIZE; | 
| Line 754  void scanner() { | 
 
  | 
| Line 762  void scanner() { | 
 
 
 | 
|    } | 
   } | 
|   | 
  | 
|    /* setup quiet mode or not */ | 
   /* setup quiet mode or not */ | 
|    token.kind = EXECUTABLE_STRING; | 
   token.kind = EXECUTABLE_STRING; token.tflag = 0; | 
|    if (Quiet) { | 
   if (Quiet) { | 
|      token.token = " /@@@.quiet 1 def "; | 
     token.token = " /@@@.quiet 1 def "; | 
|    }else { | 
   }else { | 
|      token.token = " /@@@.quiet 0 def "; | 
     token.token = " /@@@.quiet 0 def "; | 
|    } | 
   } | 
|    executeToken(token); /* execute startup commands */ | 
   executeToken(token); /* execute startup commands */ | 
|    token.kind = ID; | 
   token.kind = ID; token.tflag = 0; | 
|    token.token = "exec"; | 
   token.token = "exec"; | 
|    token = lookupTokens(token); /* set hashing values */ | 
   token = lookupTokens(token); /* set hashing values */ | 
|    tmp = findSystemDictionary(token.token); | 
   tmp = findSystemDictionary(token.token); | 
| Line 777  void scanner() { | 
 
  | 
| Line 785  void scanner() { | 
 
 
 | 
|      StartFile = (char *)sGC_malloc(sizeof(char)*(strlen(StartFile)+ | 
     StartFile = (char *)sGC_malloc(sizeof(char)*(strlen(StartFile)+ | 
|                                                   40)); | 
                                                  40)); | 
|      sprintf(StartFile,"$%s$ run\n",tmp2); | 
     sprintf(StartFile,"$%s$ run\n",tmp2); | 
|      token.kind = EXECUTABLE_STRING; | 
     token.kind = EXECUTABLE_STRING; token.tflag = 0; | 
|      token.token = StartFile; | 
     token.token = StartFile; | 
|      executeToken(token);    /* execute startup commands */ | 
     executeToken(token);    /* execute startup commands */ | 
|      token.kind = ID; | 
     token.kind = ID; token.tflag = 0; | 
|      token.token = "exec"; | 
     token.token = "exec"; | 
|      token = lookupTokens(token); /* set hashing values */ | 
     token = lookupTokens(token); /* set hashing values */ | 
|      tmp = findSystemDictionary(token.token); | 
     tmp = findSystemDictionary(token.token); | 
| Line 790  void scanner() { | 
 
  | 
| Line 798  void scanner() { | 
 
 
 | 
|    } | 
   } | 
|   | 
  | 
|    if (StartAString) { | 
   if (StartAString) { | 
|      token.kind = EXECUTABLE_STRING; | 
     token.kind = EXECUTABLE_STRING;  token.tflag = 0; | 
|      token.token = StartString; | 
     token.token = StartString; | 
|      executeToken(token);    /* execute startup commands */ | 
     executeToken(token);    /* execute startup commands */ | 
|      token.kind = ID; | 
     token.kind = ID; token.tflag = 0; | 
|      token.token = "exec"; | 
     token.token = "exec"; | 
|      token = lookupTokens(token); /* set hashing values */ | 
     token = lookupTokens(token); /* set hashing values */ | 
|      tmp = findSystemDictionary(token.token); | 
     tmp = findSystemDictionary(token.token); | 
| Line 1178  KSexecuteString(s) | 
 
  | 
| Line 1186  KSexecuteString(s) | 
 
 
 | 
|   | 
  | 
|    recursive++; | 
   recursive++; | 
|    token.token = s; | 
   token.token = s; | 
|    token.kind = EXECUTABLE_STRING; | 
   token.kind = EXECUTABLE_STRING; token.tflag = 0; | 
|    executeToken(token); | 
   executeToken(token); | 
|    token.kind = ID; | 
   token.kind = ID; token.tflag = 0; | 
|    token.token = "exec"; | 
   token.token = "exec"; | 
|    token = lookupTokens(token); /* no use */ | 
   token = lookupTokens(token); /* no use */ | 
|    tmp = findSystemDictionary(token.token); | 
   tmp = findSystemDictionary(token.token); | 
| Line 1199  KSdefineMacros() { | 
 
  | 
| Line 1207  KSdefineMacros() { | 
 
 
 | 
|    struct object ob; | 
   struct object ob; | 
|   | 
  | 
|    if (StandardMacros && (strlen(SMacros))) { | 
   if (StandardMacros && (strlen(SMacros))) { | 
|      token.kind = EXECUTABLE_STRING; | 
     token.kind = EXECUTABLE_STRING; token.tflag = 0; | 
|      token.token = SMacros; | 
     token.token = SMacros; | 
|      executeToken(token);    /* execute startup commands */ | 
     executeToken(token);    /* execute startup commands */ | 
|      token.kind = ID; | 
     token.kind = ID; token.tflag = 0; | 
|      token.token = "exec"; | 
     token.token = "exec"; | 
|      token = lookupTokens(token); /* no use */ | 
     token = lookupTokens(token); /* no use */ | 
|      tmp = findSystemDictionary(token.token); | 
     tmp = findSystemDictionary(token.token); | 
| Line 1232  void KSstart() { | 
 
  | 
| Line 1240  void KSstart() { | 
 
 
 | 
|      } else {  }  */ | 
     } else {  }  */ | 
|   | 
  | 
|    /* setup quiet mode or not */ | 
   /* setup quiet mode or not */ | 
|    token.kind = EXECUTABLE_STRING; | 
   token.kind = EXECUTABLE_STRING; token.tflag = 0; | 
|    if (Quiet) { | 
   if (Quiet) { | 
|      token.token = " /@@@.quiet 1 def "; | 
     token.token = " /@@@.quiet 1 def "; | 
|    }else { | 
   }else { | 
|      token.token = " /@@@.quiet 0 def "; | 
     token.token = " /@@@.quiet 0 def "; | 
|    } | 
   } | 
|    executeToken(token); /* execute startup commands */ | 
   executeToken(token); /* execute startup commands */ | 
|    token.kind = ID; | 
   token.kind = ID; token.tflag = 0; | 
|    token.token = "exec"; | 
   token.token = "exec"; | 
|    token = lookupTokens(token); /* set hashing values */ | 
   token = lookupTokens(token); /* set hashing values */ | 
|    tmp = findSystemDictionary(token.token); | 
   tmp = findSystemDictionary(token.token); |