=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/stackmachine.c,v retrieving revision 1.16 retrieving revision 1.21 diff -u -p -r1.16 -r1.21 --- OpenXM/src/kan96xx/Kan/stackmachine.c 2004/09/05 00:51:17 1.16 +++ OpenXM/src/kan96xx/Kan/stackmachine.c 2004/09/12 00:26:21 1.21 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.15 2004/09/04 11:25:58 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.20 2004/09/11 23:49:34 takayama Exp $ */ /* stackmachin.c */ #include @@ -83,6 +83,9 @@ int UserCtrlC = 0; int OXlock = 0; int OXlockSaved = 0; +char *UD_str; +int UD_attr; + struct object * newObject() { struct object *r; @@ -218,7 +221,7 @@ int putUserDictionary(str,h0,h1,ob,dic) } r = x; if (Strict2) { - switch((dic[x]).attr) { + switch(((dic[x]).attr) & (PROTECT | ABSOLUTE_PROTECT)) { case PROTECT: r = -PROTECT; /* Protected, but we rewrite it. */ break; @@ -226,7 +229,7 @@ int putUserDictionary(str,h0,h1,ob,dic) r = -ABSOLUTE_PROTECT; /* Protected and we do not rewrite it. */ return(r); default: - (dic[x]).attr = 0; + /* (dic[x]).attr = 0; */ /* It is not necesarry, I think. */ break; } } @@ -249,14 +252,19 @@ struct object findUserDictionary(str,h0,h1,cp) char *str; /* key */ int h0,h1; /* The hashing values of the key. */ struct context *cp; + /* Set char *UD_str, int UD_attr (attributes) */ { int x; struct dictionary *dic; + extern char *UD_str; + extern int UD_attr; + UD_str = NULL; UD_attr = -1; dic = cp->userDictionary; x = h0; while (1) { if ((dic[x]).key == EMPTY) { break; } if (strcmp((dic[x]).key,str) == 0) { + UD_str = (dic[x]).key; UD_attr = (dic[x]).attr; return( (dic[x]).obj ); } x = (x+h1) % USER_DICTIONARY_SIZE; @@ -349,7 +357,7 @@ int hash0(str) { int h=0; while (*str != '\0') { - h = ((h*128)+(*str)) % USER_DICTIONARY_SIZE; + h = ((h*128)+((unsigned char)(*str))) % USER_DICTIONARY_SIZE; str++; } return(h); @@ -358,7 +366,7 @@ int hash0(str) int hash1(str) char *str; { - return(8-(str[0]%8)); + return(8-((unsigned char)(str[0])%8)); } void hashInitialize(struct dictionary *dic) @@ -754,14 +762,14 @@ void scanner() { } /* setup quiet mode or not */ - token.kind = EXECUTABLE_STRING; + token.kind = EXECUTABLE_STRING; token.tflag = 0; if (Quiet) { token.token = " /@@@.quiet 1 def "; }else { token.token = " /@@@.quiet 0 def "; } executeToken(token); /* execute startup commands */ - token.kind = ID; + token.kind = ID; token.tflag = 0; token.token = "exec"; token = lookupTokens(token); /* set hashing values */ tmp = findSystemDictionary(token.token); @@ -777,10 +785,10 @@ void scanner() { StartFile = (char *)sGC_malloc(sizeof(char)*(strlen(StartFile)+ 40)); sprintf(StartFile,"$%s$ run\n",tmp2); - token.kind = EXECUTABLE_STRING; + token.kind = EXECUTABLE_STRING; token.tflag = 0; token.token = StartFile; executeToken(token); /* execute startup commands */ - token.kind = ID; + token.kind = ID; token.tflag = 0; token.token = "exec"; token = lookupTokens(token); /* set hashing values */ tmp = findSystemDictionary(token.token); @@ -790,10 +798,10 @@ void scanner() { } if (StartAString) { - token.kind = EXECUTABLE_STRING; + token.kind = EXECUTABLE_STRING; token.tflag = 0; token.token = StartString; executeToken(token); /* execute startup commands */ - token.kind = ID; + token.kind = ID; token.tflag = 0; token.token = "exec"; token = lookupTokens(token); /* set hashing values */ tmp = findSystemDictionary(token.token); @@ -965,7 +973,7 @@ int executeToken(token) for (i=0; i