=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/glob.c,v retrieving revision 1.47 retrieving revision 1.54 diff -u -p -r1.47 -r1.54 --- OpenXM_contrib2/asir2000/parse/glob.c 2004/02/25 06:43:52 1.47 +++ OpenXM_contrib2/asir2000/parse/glob.c 2004/12/18 09:25:58 1.54 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/glob.c,v 1.46 2004/02/09 08:23:30 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/glob.c,v 1.53 2004/12/17 03:09:08 noro Exp $ */ #include "ca.h" #include "al.h" @@ -83,7 +83,7 @@ extern FILE *asir_out; INFILE asir_infile; JMP_BUF main_env,debug_env,timer_env,exec_env; -int little_endian,debug_mode; +int little_endian,debug_mode,no_debug_on_error; char *asir_libdir; char *asir_pager; @@ -100,8 +100,9 @@ int do_server_in_X11; Obj LastVal; char LastError[BUFSIZ]; int timer_is_set; +NODE current_option; +NODE user_int_handler, user_quit_handler; - struct oV oVAR[] = { {"x",0,0}, {"y",0,0}, {"z",0,0}, {"u",0,0}, {"v",0,0}, {"w",0,0}, {"p",0,0}, {"q",0,0}, @@ -214,6 +215,7 @@ void ExitAsir() { void asir_terminate(int status) { int t; + NODE n; if ( read_exec_file ) { t = read_exec_file; @@ -223,6 +225,12 @@ void asir_terminate(int status) else LONGJMP(exec_env,status); } else { + if ( user_quit_handler ) { + fprintf(stderr,"Calling the registered quit callbacks..."); + for ( n = user_quit_handler; n; n = NEXT(n) ) + bevalf((FUNC)BDY(n),0); + fprintf(stderr, "done.\n"); + } tty_reset(); #if defined(MPI) if ( !mpi_myid ) @@ -258,13 +266,14 @@ void param_init() { Obj user_defined_prompt; void prompt() { - if ( !do_quiet && !do_fep && asir_infile->fp == stdin ) + if ( !do_quiet && !do_fep && asir_infile->fp == stdin ) { fprintf(asir_out,"[%d] ",APVS->n); - else if ( do_quiet && user_defined_prompt + fflush(asir_out); + } else if ( do_quiet && user_defined_prompt && OID(user_defined_prompt)==O_STR) { fprintf(asir_out,BDY((STRING)user_defined_prompt),APVS->n); + fflush(asir_out); } - fflush(asir_out); } void sprompt(char *ptr) @@ -472,13 +481,14 @@ void fatal(int n) resetenv("return to toplevel"); } -FUNC registered_handler; extern int ox_int_received, critical_when_signal; void int_handler(int sig) { extern NODE PVSS; + NODE t; + if ( do_file ) { ExitAsir(); } @@ -520,7 +530,8 @@ void int_handler(int sig) fgets(buf,BUFSIZ,stdin); if ( !strncmp(buf,"y",1) ) { read_exec_file = 0; - fprintf(stderr,"Bye\n"); asir_terminate(1); + fprintf(stderr,"Bye\n"); + asir_terminate(1); } else if ( !strncmp(buf,"n",1) ) { restore_handler(); return; @@ -543,10 +554,11 @@ void int_handler(int sig) debug_mode = 0; restore_handler(); if ( c == 'u' ) { - if ( registered_handler ) { + if ( user_int_handler ) { fprintf(stderr, - "Calling the registered exception handler..."); - bevalf(registered_handler,0); + "Calling the registered exception callbacks..."); + for ( t = user_int_handler; t; t = NEXT(t) ) + bevalf((FUNC)BDY(t),0); fprintf(stderr, "done.\n"); } } @@ -567,7 +579,8 @@ void int_handler(int sig) restore_handler(); return; break; case 'w': - showpos(); break; + showpos(); + break; case '?': fprintf(stderr, "q:quit t:toplevel c:continue d:debug u:call registered handler w:where\n"); break; @@ -652,13 +665,14 @@ void set_lasterror(char *s) } SNODE error_snode; +int error_in_timer; void error(char *s) { SNODE *snp=0; #if !defined(VISUAL) - if ( timer_is_set ) + if ( !error_in_timer && timer_is_set ) alrm_handler(SIGVTALRM); #endif fprintf(stderr,"%s\n",s); @@ -683,7 +697,7 @@ void error(char *s) if ( debug_mode ) LONGJMP(debug_env,1); if ( CPVS != GPVS ) - if ( do_server_in_X11 || isatty(0) ) + if ( !no_debug_on_error && (do_server_in_X11 || isatty(0)) ) bp(error_snode); if ( read_exec_file ) read_exec_file = 0; @@ -766,7 +780,7 @@ char *get_intervalversion() void copyright() { - char *format = "This is Risa/Asir%s, Version %d (%s Distribution).\nCopyright (C) 1994-2000, all rights reserved, FUJITSU LABORATORIES LIMITED.\nCopyright 2000-2003, Risa/Asir committers, http://www.openxm.org/.\nGC 6.2(alpha6) copyright 1988-2003, H-J. Boehm, A. J. Demers, Xerox, SGI, HP.\n%s"; + char *format = "This is Risa/Asir%s, Version %d (%s Distribution).\nCopyright (C) 1994-2000, all rights reserved, FUJITSU LABORATORIES LIMITED.\nCopyright 2000-2004, Risa/Asir committers, http://www.openxm.org/.\nGC 6.2(alpha6) copyright 1988-2003, H-J. Boehm, A. J. Demers, Xerox, SGI, HP.\n%s"; printf(format, get_intervalversion(), get_asir_version(), get_asir_distribution(), get_pariversion()); }