| version 1.7, 2001/05/04 01:06:25 |
version 1.9, 2002/02/24 10:27:18 |
|
|
| /* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.6 2001/01/27 05:48:46 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/kan96xx/Kan/stackmachine.c,v 1.8 2001/12/19 23:39:53 takayama Exp $ */ |
| /* stackmachin.c */ |
/* stackmachin.c */ |
| |
|
| #include <stdio.h> |
#include <stdio.h> |
|
|
| /* #define OPERAND_STACK_SIZE 2000 */ |
/* #define OPERAND_STACK_SIZE 2000 */ |
| #define OPERAND_STACK_SIZE 30000 |
#define OPERAND_STACK_SIZE 30000 |
| #define SYSTEM_DICTIONARY_SIZE 200 |
#define SYSTEM_DICTIONARY_SIZE 200 |
| /* #define USER_DICTIONARY_SIZE 1223, 3581 */ |
/* #define USER_DICTIONARY_SIZE 1223, 3581, 27449 */ |
| #define USER_DICTIONARY_SIZE 27449 |
#define USER_DICTIONARY_SIZE 59359 |
| /* The value of USER_DICTIONARY_SIZE must be prime number, because of hashing |
/* The value of USER_DICTIONARY_SIZE must be prime number, because of hashing |
| method */ |
method */ |
| #define ARGV_WORK_MAX (AGLIMIT+100) |
#define ARGV_WORK_MAX (AGLIMIT+100) |
| Line 736 void scanner() { |
|
| Line 736 void scanner() { |
|
| getokenSM(INIT); |
getokenSM(INIT); |
| initSystemDictionary(); |
initSystemDictionary(); |
| |
|
| |
#if defined(__CYGWIN__) |
| |
if (sigsetjmp(EnvOfStackMachine,1)) { |
| |
#else |
| if (setjmp(EnvOfStackMachine)) { |
if (setjmp(EnvOfStackMachine)) { |
| |
#endif |
| /* do nothing in the case of error */ |
/* do nothing in the case of error */ |
| fprintf(stderr,"An error or interrupt in reading macros, files and command strings.\n"); |
fprintf(stderr,"An error or interrupt in reading macros, files and command strings.\n"); |
| exit(10); |
exit(10); |
| Line 796 void scanner() { |
|
| Line 800 void scanner() { |
|
| |
|
| |
|
| for (;;) { |
for (;;) { |
| |
#if defined(__CYGWIN__) |
| |
if (jval=sigsetjmp(EnvOfStackMachine,1)) { |
| |
#else |
| if (jval=setjmp(EnvOfStackMachine)) { |
if (jval=setjmp(EnvOfStackMachine)) { |
| |
#endif |
| /* *** The following does not work properly. **** |
/* *** The following does not work properly. **** |
| if (jval == 2) { |
if (jval == 2) { |
| if (ErrorMessageMode == 1 || ErrorMessageMode == 2) { |
if (ErrorMessageMode == 1 || ErrorMessageMode == 2) { |
|
|
| */ |
*/ |
| getokenSM(INIT); /* It might fix the bug above. 1992/11/14 */ |
getokenSM(INIT); /* It might fix the bug above. 1992/11/14 */ |
| signal(SIGINT,ctrlC); |
signal(SIGINT,ctrlC); |
| |
#if defined(__CYGWIN__) |
| |
siglongjmp(EnvOfStackMachine,2); |
| |
#else |
| longjmp(EnvOfStackMachine,2); /* returns 2 for ctrl-C */ |
longjmp(EnvOfStackMachine,2); /* returns 2 for ctrl-C */ |
| |
#endif |
| } |
} |
| |
|
| int executeToken(token) |
int executeToken(token) |
| Line 1083 KSexecuteString(s) |
|
| Line 1095 KSexecuteString(s) |
|
| |
|
| if (KSPushEnvMode) { |
if (KSPushEnvMode) { |
| *saved_EnvOfStackMachine = *EnvOfStackMachine; |
*saved_EnvOfStackMachine = *EnvOfStackMachine; |
| |
#if defined(__CYGWIN__) |
| |
if (jval = sigsetjmp(EnvOfStackMachine,1)) { |
| |
#else |
| if (jval = setjmp(EnvOfStackMachine)) { |
if (jval = setjmp(EnvOfStackMachine)) { |
| |
#endif |
| *EnvOfStackMachine = *saved_EnvOfStackMachine; |
*EnvOfStackMachine = *saved_EnvOfStackMachine; |
| if (jval == 2) { |
if (jval == 2) { |
| if (ErrorMessageMode == 1 || ErrorMessageMode == 2) { |
if (ErrorMessageMode == 1 || ErrorMessageMode == 2) { |
| Line 1096 KSexecuteString(s) |
|
| Line 1112 KSexecuteString(s) |
|
| }else{ } |
}else{ } |
| }else{ |
}else{ |
| if (recursive == 0) { |
if (recursive == 0) { |
| |
#if defined(__CYGWIN__) |
| |
if (jval=sigsetjmp(EnvOfStackMachine,1)) { |
| |
#else |
| if (jval=setjmp(EnvOfStackMachine)) { |
if (jval=setjmp(EnvOfStackMachine)) { |
| |
#endif |
| if (jval == 2) { |
if (jval == 2) { |
| if (ErrorMessageMode == 1 || ErrorMessageMode == 2) { |
if (ErrorMessageMode == 1 || ErrorMessageMode == 2) { |
| pushErrorStack(KnewErrorPacket(SerialCurrent,-1,"User interrupt by ctrl-C.")); |
pushErrorStack(KnewErrorPacket(SerialCurrent,-1,"User interrupt by ctrl-C.")); |