| version 1.24, 2004/09/12 08:55:36 | version 1.27, 2004/09/16 23:53:44 | 
|  |  | 
| /* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.23 2004/09/12 01:53:11 takayama Exp $ */ | /* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.26 2004/09/16 02:22:03 takayama Exp $ */ | 
| /*   stackmachin.c */ | /*   stackmachin.c */ | 
|  |  | 
| #include <stdio.h> | #include <stdio.h> | 
| 
| Line 295  int putUserDictionary2(str,h0,h1,attr,dic) |  | 
| Line 295  int putUserDictionary2(str,h0,h1,attr,dic) |  | 
| } | } | 
| return(0); | return(0); | 
| } | } | 
|  | if (OR_ATTR_FOR_ALL_WORDS & attr) { | 
|  | for (i=0; i<USER_DICTIONARY_SIZE; i++) { | 
|  | if ((dic[i]).key !=EMPTY) (dic[i]).attr |= attr&(~OR_ATTR_FOR_ALL_WORDS); | 
|  | } | 
|  | return(0); | 
|  | } | 
| x = h0; | x = h0; | 
| if (str[0] == '\0') { | if (str[0] == '\0') { | 
| errorKan1("%s\n","putUserDictionary2(): You are defining a value with the null key."); | errorKan1("%s\n","putUserDictionary2(): You are defining a value with the null key."); | 
| 
| Line 981  int executeToken(token) |  | 
| Line 987  int executeToken(token) |  | 
| 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) { | 
| status = executeExecutableArray(ob,token.token); | status = executeExecutableArray(ob,token.token,0); | 
| if ((status & STATUS_BREAK) || (status < 0)) return status; | if ((status & STATUS_BREAK) || (status < 0)) return status; | 
| }else { | }else { | 
| Kpush(ob); | Kpush(ob); | 
| 
| Line 1580  char *traceShowStack(void) { |  | 
| Line 1586  char *traceShowStack(void) { |  | 
| if (t == NULL) { | if (t == NULL) { | 
| s[p] = ';'; s[p+1] = 0; | s[p] = ';'; s[p+1] = 0; | 
| break; | break; | 
| }else if ((strlen(t) + p -10) > TRACE_MSG_SIZE) { | }else if ((strlen(t) + p) > (TRACE_MSG_SIZE-10)) { | 
| /*      fprintf(stderr,"p=%d, TraceNameStackp=%d, strlen(t)=%d, t=%s\n",p,TraceNameStackp,strlen(t),t); */ | /* fprintf(stderr,"p=%d, TraceNameStackp=%d, strlen(t)=%d, t=%s\n",p,TraceNameStackp,strlen(t),t); */ | 
| strcpy(&(s[p])," ..."); | strcpy(&(s[p])," ..."); | 
| break; | break; | 
| } | } | 
| 
| Line 1595  char *traceShowStack(void) { |  | 
| Line 1601  char *traceShowStack(void) { |  | 
| /* | /* | 
| if (fname != NULL) fname is pushed to the trace stack. | if (fname != NULL) fname is pushed to the trace stack. | 
| */ | */ | 
| int executeExecutableArray(struct object ob,char *fname) { | int executeExecutableArray(struct object ob,char *fname,int withGotoP) { | 
| struct tokens *tokenArray; | struct tokens *tokenArray; | 
| int size,i; | int size,i; | 
| int status; | int status; | 
| 
| Line 1611  int executeExecutableArray(struct object ob,char *fnam |  | 
| Line 1617  int executeExecutableArray(struct object ob,char *fnam |  | 
| size = ob.rc.ival; | size = ob.rc.ival; | 
| for (i=0; i<size; i++) { | for (i=0; i<size; i++) { | 
| status = executeToken(tokenArray[i]); | status = executeToken(tokenArray[i]); | 
| if ((status & STATUS_BREAK) || (status < 0) || GotoP) { | if ((status & STATUS_BREAK) || (status < 0) || (withGotoP && GotoP)) { | 
| if (fname != NULL) tracePopName(); | if (fname != NULL) tracePopName(); | 
| return(status); | return(status); | 
| } | } | 
| 
| Line 1624  int executeExecutableArray(struct object ob,char *fnam |  | 
| Line 1630  int executeExecutableArray(struct object ob,char *fnam |  | 
| }else if (infixOn) { | }else if (infixOn) { | 
| infixOn = 0; | infixOn = 0; | 
| status = executeToken(infixToken); | status = executeToken(infixToken); | 
| if ((status & STATUS_BREAK) || (status < 0) || GotoP) { | if ((status & STATUS_BREAK) || (status < 0) || (withGotoP && GotoP)) { | 
| if (fname != NULL) tracePopName(); | if (fname != NULL) tracePopName(); | 
| return(status); | return(status); | 
| } | } |