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

File: [local] / OpenXM / src / kxx / sample_kanlib.c (download)

Revision 1.6, Thu Mar 31 06:34:29 2016 UTC (8 years ago) by takayama
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +4 -2 lines

Bug fix on the result code in ki.c

/* $OpenXM: OpenXM/src/kxx/sample_kanlib.c,v 1.6 2016/03/31 06:34:29 takayama Exp $ */
/*
This is a sample program to use kanlib.a
gcc -g -O2 -g -D_BSD_SOURCE sample_kanlib.c -o sample_kanlib  -ldl   ../kan96xx/Kan/kanlib.a -L../../lib -lgmp -lgc
*/

#include <stdio.h>
#include <setjmp.h>
#include <signal.h>
#include "mysig.h"

// serversm.h is not included.
#if defined(__CYGWIN__) || defined(__MSYS__)
#define JMP_BUF sigjmp_buf
#define SETJMP(env)  _setjmp(env)
#define LONGJMP(env,p)  _longjmp(env,p)
#else
#define JMP_BUF jmp_buf
#define SETJMP(env)  setjmp(env)
#define LONGJMP(env,p)  longjmp(env,p)
#endif


extern int Quiet;
extern JMP_BUF EnvOfStackMachine;
extern Calling_ctrlC_hook;
extern int RestrictedMode, RestrictedMode_saved;

void ctrlC();

main() {
  char s[1024];
  int r;
  Quiet = 0;
  KSstart();  

  if (mysignal(SIGINT,SIG_IGN) != SIG_IGN) {
	mysignal(SIGINT,ctrlC);
  }
  while( fgets(s,1023,stdin) != NULL) {
	if (SETJMP(EnvOfStackMachine)) {
      if (!Calling_ctrlC_hook) {
        Calling_ctrlC_hook = 1; RestrictedMode = 0; 
        KSexecuteString(" ctrlC-hook "); /* Execute User Defined functions. */ 
        RestrictedMode = RestrictedMode_saved;
      }
      Calling_ctrlC_hook = 0;
      KSexecuteString(" (Computation is interrupted.) ");
	  continue;
	} else {  }
	r=KSexecuteString(s);
	fprintf(stderr,"result code=%d\n",r);
  }
}