[BACK]Return to ki.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / k097

Diff for /OpenXM/src/k097/ki.c between version 1.1.1.1 and 1.10

version 1.1.1.1, 1999/10/08 02:12:15 version 1.10, 2016/03/31 05:27:34
Line 1 
Line 1 
   /* $OpenXM: OpenXM/src/k097/ki.c,v 1.9 2015/10/10 11:29:46 takayama Exp $ */
 /* ki.c    ( kx interpreter )  */  /* ki.c    ( kx interpreter )  */
   
 #include <stdio.h>  #include <stdio.h>
Line 10 
Line 11 
 #include "gradedset.h"  #include "gradedset.h"
 #include <setjmp.h>  #include <setjmp.h>
 #include <signal.h>  #include <signal.h>
   #include <string.h>
   #include <stdlib.h>
   #include "mysig.h"
   
 char *getLOAD_K_PATH();  /* from d.h */  char *getLOAD_K_PATH();  /* from d.h */
   
   #if defined(__CYGWIN__)
   #define JMP_BUF sigjmp_buf
   #define SETJMP(env)  sigsetjmp(env,1)
   #define LONGJMP(env,p)  siglongjmp(env,p)
   #else
   #define JMP_BUF jmp_buf
   #define SETJMP(env)  setjmp(env)
   #define LONGJMP(env,p)  longjmp(env,p)
   #endif
   
 #ifdef CALLASIR  #ifdef CALLASIR
 #include "ak0.h"  #include "ak0.h"
 #endif  #endif
   
 extern jmp_buf KCenvOfParser;  extern JMP_BUF KCenvOfParser;
   
 char Ktmp[10240];  char Ktmp[10240];
 int Ksize = 10240;  int Ksize = 10240;
Line 31  extern int DebugMode;
Line 45  extern int DebugMode;
 sendKan(int p) {  sendKan(int p) {
   static int n = 2;    static int n = 2;
   extern int Interactive;    extern int Interactive;
   struct object obj;    struct object obj = OINIT;
   int result;    int result;
   signal(SIGINT,SIG_IGN); /* Don't jump to ctrlC(). */    extern int InSendmsg2;
   if (p == 10) {printf("In(%d)=",n++); return;}    mysignal(SIGINT,SIG_IGN); /* Don't jump to ctrlC(). */
     if (p == 10) {printf("In(%d)= ",n++); return 0;}
   if (p == 0 && DebugCompiler) printf("sendKan[%s]\n",Kbuff);    if (p == 0 && DebugCompiler) printf("sendKan[%s]\n",Kbuff);
   /* printf("sendKan[%s]\n",Kbuff);   */    /* printf("sendKan[%s]\n",Kbuff);   */
   if (strlen(Kbuff) != 0) {    if (strlen(Kbuff) != 0) {
     signal(SIGINT,SIG_DFL);      mysignal(SIGINT,SIG_DFL);
     result = KSexecuteString(Kbuff);      result = KSexecuteString(Kbuff);
     /* fprintf(stderr,"r=%d ",result);  */      /* fprintf(stderr,"r=%d ",result);  */
     signal(SIGINT,SIG_IGN); /* Reset SIGINT. Don't jump to ctrlC(). */      mysignal(SIGINT,SIG_IGN); /* Reset SIGINT. Don't jump to ctrlC(). */
   }    }
   /* fprintf(stderr,"r=%d ",result); */    /* fprintf(stderr,"r=%d ",result); */
   if (result == -1) {    if (result == -1) {
     K00recoverFromError();      K00recoverFromError();  InSendmsg2 = 0;
     fprintf(stderr,"--- Engine error or interrupt : ");      fprintf(stderr,"--- Engine error or interrupt : ");
     if (DebugMode) {      if (DebugMode) {
       signal(SIGINT,SIG_DFL);        mysignal(SIGINT,SIG_DFL);
       KSexecuteString("db.DebugStack setstack ");        KSexecuteString("db.DebugStack setstack ");
       signal(SIGINT,SIG_IGN); /* Reset SIGINT. Don't jump to ctrlC(). */        mysignal(SIGINT,SIG_IGN); /* Reset SIGINT. Don't jump to ctrlC(). */
       obj = KSpop();        obj = KSpop();
       signal(SIGINT,SIG_DFL);        mysignal(SIGINT,SIG_DFL);
       KSexecuteString("stdstack ");        KSexecuteString("stdstack ");
       signal(SIGINT,SIG_IGN); /* Reset SIGINT. Don't jump to ctrlC(). */        mysignal(SIGINT,SIG_IGN); /* Reset SIGINT. Don't jump to ctrlC(). */
       if (obj.tag == Sdollar) {        if (obj.tag == Sdollar) {
         fprintf(stderr,"%s\n",obj.lc.str);          fprintf(stderr,"%s\n",obj.lc.str);
         fprintf(stderr,"\n");          fprintf(stderr,"\n");
Line 66  sendKan(int p) {
Line 81  sendKan(int p) {
   }    }
 #define AFO  #define AFO
 #ifdef AFO  #ifdef AFO
   if (setjmp(KCenvOfParser)) {    if (SETJMP(KCenvOfParser)) {
           InSendmsg2=0;
     fprintf(stderr,"Error: Goto the top level.\n");      fprintf(stderr,"Error: Goto the top level.\n");
     parseAfile(stdin);      parseAfile(stdin);
     KCparse();      KCparse();
Line 75  sendKan(int p) {
Line 91  sendKan(int p) {
     /* However, it should be rewrited in a future. */      /* However, it should be rewrited in a future. */
   }else{ /* fprintf(stderr,"setjmp\n"); */ }    }else{ /* fprintf(stderr,"setjmp\n"); */ }
 #endif  #endif
   if (p == 0 && Interactive) printf("In(%d)=",n++);    if (p == 0 && Interactive) printf("In(%d)= ",n++);
   Kpt=0; Kbuff[0] = '\0';    Kpt=0; Kbuff[0] = '\0';
 }  }
   
Line 87  char *s;
Line 103  char *s;
   if (strlen(s)+Kpt >= Ksize) {    if (strlen(s)+Kpt >= Ksize) {
     Ksize = Ksize*2;      Ksize = Ksize*2;
     t = (char *)GC_malloc(sizeof(char)*Ksize);      t = (char *)GC_malloc(sizeof(char)*Ksize);
     if (t == (char *)NULL) { fprintf(stderr,"No memory."); exit();}      if (t == (char *)NULL) { fprintf(stderr,"No memory."); exit(1);}
     strcpy(t,Kbuff); Kbuff = t;      strcpy(t,Kbuff); Kbuff = t;
   }    }
   strcpy(&(Kbuff[Kpt]),s);    strcpy(&(Kbuff[Kpt]),s);
Line 144  execFile(char *s)
Line 160  execFile(char *s)
             fprintf(stderr,"Fatal error: Cannot open the system macro %s in %s, %s, %s nor %s.\n",              fprintf(stderr,"Fatal error: Cannot open the system macro %s in %s, %s, %s nor %s.\n",
                     s,tname2,tname3,tname4,tname);                      s,tname2,tname3,tname4,tname);
             exit(11);              exit(11);
             return;              return 0;
           }            }
         }          }
       }        }

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.10

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>