| version 1.60, 2005/10/26 07:33:03 | version 1.69, 2007/09/15 10:17:08 | 
|  |  | 
| * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, | * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, | 
| * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. | * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. | 
| * | * | 
| * $OpenXM: OpenXM_contrib2/asir2000/parse/glob.c,v 1.59 2005/10/10 15:16:38 saito Exp $ | * $OpenXM: OpenXM_contrib2/asir2000/parse/glob.c,v 1.68 2007/01/03 15:48:08 fujiwara Exp $ | 
| */ | */ | 
| #include "ca.h" | #include "ca.h" | 
| #include "al.h" | #include "al.h" | 
| 
| Line 99  FUNC parse_targetf; |  | 
| Line 99  FUNC parse_targetf; |  | 
| FILE *ox_istream,*ox_ostream; | FILE *ox_istream,*ox_ostream; | 
| int do_server_in_X11; | int do_server_in_X11; | 
| Obj LastVal; | Obj LastVal; | 
|  | LIST LastStackTrace; | 
| char LastError[BUFSIZ]; | char LastError[BUFSIZ]; | 
| int timer_is_set; | int timer_is_set; | 
| NODE current_option; | NODE current_option; | 
| 
| Line 198  char *do_filename; |  | 
| Line 199  char *do_filename; |  | 
| int do_message; | int do_message; | 
| int do_terse; | int do_terse; | 
| int do_fep; | int do_fep; | 
| int read_exec_file; |  | 
| int asir_setenv; | int asir_setenv; | 
| static int buserr_sav; | static int buserr_sav; | 
| static char asir_history[BUFSIZ]; | static char asir_history[BUFSIZ]; | 
| 
| Line 214  void ExitAsir() { |  | 
| Line 214  void ExitAsir() { |  | 
| /* | /* | 
| * status = 1 abnormal termination (error() etc.) | * status = 1 abnormal termination (error() etc.) | 
| * status = 2 normal termination (end(), quit() etc.) | * status = 2 normal termination (end(), quit() etc.) | 
|  | * status = 3 absolute termination | 
| */ | */ | 
|  |  | 
| void asir_terminate(int status) | void asir_terminate(int status) | 
| 
| Line 221  void asir_terminate(int status) |  | 
| Line 222  void asir_terminate(int status) |  | 
| int t; | int t; | 
| NODE n; | NODE n; | 
|  |  | 
| if ( read_exec_file ) { | /* called from engine in Windows */ | 
| t = read_exec_file; | if ( status == 3 ) asir_infile = 0; | 
| read_exec_file = 0; |  | 
| if ( t == 1 ) | if ( asir_infile && asir_infile->ready_for_longjmp ) | 
| LONGJMP(main_env,status); | LONGJMP(asir_infile->jmpbuf,status); | 
| else | else { | 
| LONGJMP(exec_env,status); |  | 
| } else { |  | 
| if ( user_quit_handler ) { | if ( user_quit_handler ) { | 
| if ( !do_terse ) | if ( !do_terse ) | 
| fprintf(stderr,"Calling the registered quit callbacks..."); | fprintf(stderr,"Calling the registered quit callbacks..."); | 
| 
| Line 358  void process_args(int ac,char **av) |  | 
| Line 357  void process_args(int ac,char **av) |  | 
| do_quiet = 1; | do_quiet = 1; | 
| in_fp = fopen(*(av+1),"r"); | in_fp = fopen(*(av+1),"r"); | 
| if ( !in_fp ) { | if ( !in_fp ) { | 
| fprintf(stderr,"%s does not exist!",*(av+1)); | fprintf(stderr,"%s does not exist!\n",*(av+1)); | 
| asir_terminate(1); | asir_terminate(1); | 
| } | } | 
| do_file = 1; | do_file = 1; | 
| 
| Line 454  void asir_reset_handler() { |  | 
| Line 453  void asir_reset_handler() { |  | 
| signal(SIGINT,old_int); | signal(SIGINT,old_int); | 
| } | } | 
|  |  | 
|  | extern int I_am_server; | 
|  |  | 
| void resetenv(char *s) | void resetenv(char *s) | 
| { | { | 
| extern FILE *outfile; | extern FILE *outfile; | 
| 
| Line 535  void int_handler(int sig) |  | 
| Line 536  void int_handler(int sig) |  | 
| fprintf(stderr,"Abort this session? (y or n) "); fflush(stderr); | fprintf(stderr,"Abort this session? (y or n) "); fflush(stderr); | 
| fgets(buf,BUFSIZ,stdin); | fgets(buf,BUFSIZ,stdin); | 
| if ( !strncmp(buf,"y",1) ) { | if ( !strncmp(buf,"y",1) ) { | 
| read_exec_file = 0; |  | 
| fprintf(stderr,"Bye\n"); | fprintf(stderr,"Bye\n"); | 
|  | /* for terminating myself */ | 
|  | asir_infile = 0; | 
| asir_terminate(1); | asir_terminate(1); | 
| } else if ( !strncmp(buf,"n",1) ) { | } else if ( !strncmp(buf,"n",1) ) { | 
| restore_handler(); | restore_handler(); | 
| 
| Line 570  void int_handler(int sig) |  | 
| Line 572  void int_handler(int sig) |  | 
| fprintf(stderr, "done.\n"); | fprintf(stderr, "done.\n"); | 
| } | } | 
| } | } | 
| if ( read_exec_file ) { | resetenv("return to toplevel"); | 
| read_exec_file = 0; |  | 
| resetenv("initialization aborted; return to toplevel"); |  | 
| } else |  | 
| resetenv("return to toplevel"); |  | 
| break; | break; | 
| case 'd': | case 'd': | 
| #if 0 | #if 0 | 
| 
| Line 623  void ill_handler(int sig) |  | 
| Line 621  void ill_handler(int sig) |  | 
| #endif | #endif | 
| } | } | 
|  |  | 
|  | #if defined(__DARWIN__) | 
|  | #define SIGNAL_FOR_TIMER SIGALRM | 
|  | #define ITIMER_TYPE ITIMER_REAL | 
|  | #else | 
|  | #define SIGNAL_FOR_TIMER SIGVTALRM | 
|  | #define ITIMER_TYPE ITIMER_VIRTUAL | 
|  | #endif | 
|  |  | 
| void alrm_handler(int sig) | void alrm_handler(int sig) | 
| { | { | 
| fprintf(stderr,"interval timer expired (VTALRM)\n"); | fprintf(stderr,"interval timer expired (VTALRM)\n"); | 
| 
| Line 681  void error(char *s) |  | 
| Line 687  void error(char *s) |  | 
|  |  | 
| #if !defined(VISUAL) | #if !defined(VISUAL) | 
| if ( !error_in_timer && timer_is_set ) | if ( !error_in_timer && timer_is_set ) | 
| alrm_handler(SIGVTALRM); | alrm_handler(SIGNAL_FOR_TIMER); | 
| #endif | #endif | 
| fprintf(stderr,"%s\n",s); | fprintf(stderr,"%s\n",s); | 
| set_lasterror(s); | set_lasterror(s); | 
| 
| Line 707  void error(char *s) |  | 
| Line 713  void error(char *s) |  | 
| if ( CPVS != GPVS ) | if ( CPVS != GPVS ) | 
| if ( !no_debug_on_error && (do_server_in_X11 || isatty(0)) ) | if ( !no_debug_on_error && (do_server_in_X11 || isatty(0)) ) | 
| bp(error_snode); | bp(error_snode); | 
| if ( read_exec_file ) | if ( I_am_server ) | 
| read_exec_file = 0; | showpos_to_list(&LastStackTrace); | 
| resetenv("return to toplevel"); | resetenv("return to toplevel"); | 
| } | } | 
|  |  | 
| 
| Line 718  void toplevel(char *s) |  | 
| Line 724  void toplevel(char *s) |  | 
|  |  | 
| #if !defined(VISUAL) | #if !defined(VISUAL) | 
| if ( timer_is_set ) | if ( timer_is_set ) | 
| alrm_handler(SIGVTALRM); | alrm_handler(SIGNAL_FOR_TIMER); | 
| #endif | #endif | 
| fprintf(stderr,"%s\n",s); | fprintf(stderr,"%s\n",s); | 
| if ( do_file ) { | if ( do_file ) { | 
| 
| Line 728  void toplevel(char *s) |  | 
| Line 734  void toplevel(char *s) |  | 
| showpos_to_string(errbuf+strlen(errbuf)); | showpos_to_string(errbuf+strlen(errbuf)); | 
| ExitAsir(); | ExitAsir(); | 
| } | } | 
| if ( read_exec_file ) |  | 
| read_exec_file = 0; |  | 
| resetenv("return to toplevel"); | resetenv("return to toplevel"); | 
| } | } | 
|  |  | 
| 
| Line 744  void set_timer(int interval) |  | 
| Line 748  void set_timer(int interval) |  | 
| it.it_interval.tv_usec = 0; | it.it_interval.tv_usec = 0; | 
| it.it_value.tv_sec = interval; | it.it_value.tv_sec = interval; | 
| it.it_value.tv_usec = 0; | it.it_value.tv_usec = 0; | 
| setitimer(ITIMER_VIRTUAL,&it,0); | setitimer(ITIMER_TYPE,&it,0); | 
| signal(SIGVTALRM,alrm_handler); | signal(SIGNAL_FOR_TIMER,alrm_handler); | 
| timer_is_set = 1; | timer_is_set = 1; | 
| } | } | 
|  |  | 
| 
| Line 757  void reset_timer() |  | 
| Line 761  void reset_timer() |  | 
| it.it_interval.tv_usec = 0; | it.it_interval.tv_usec = 0; | 
| it.it_value.tv_sec = 0; | it.it_value.tv_sec = 0; | 
| it.it_value.tv_usec = 0; | it.it_value.tv_usec = 0; | 
| setitimer(ITIMER_VIRTUAL,&it,0); | setitimer(ITIMER_TYPE,&it,0); | 
| signal(SIGVTALRM,SIG_IGN); | signal(SIGNAL_FOR_TIMER,SIG_IGN); | 
| timer_is_set = 0; | timer_is_set = 0; | 
| } | } | 
| #endif | #endif | 
| 
| Line 789  char *get_intervalversion() |  | 
| Line 793  char *get_intervalversion() |  | 
|  |  | 
| void copyright() | 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-2005, Risa/Asir committers, http://www.openxm.org/.\nGC 6.5 Copyright 1988-2005, 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-2007, Risa/Asir committers, http://www.openxm.org/.\nGC 6.5 Copyright 1988-2005, H-J. Boehm, A. J. Demers, Xerox, SGI, HP.\n%s"; | 
| printf(format, get_intervalversion(), get_asir_version(), get_asir_distribution(), get_pariversion()); | printf(format, get_intervalversion(), get_asir_version(), get_asir_distribution(), get_pariversion()); | 
| } | } | 
|  |  | 
| 
| Line 798  char *scopyright() |  | 
| Line 802  char *scopyright() |  | 
| static char *notice; | static char *notice; | 
| char *s1, *s2, *s3; | char *s1, *s2, *s3; | 
| int d, len; | int d, len; | 
| char *format = "This is Risa/Asir%s, Version %d (%s Distribution).\nCopyright (C) 1994-2000, all rights reserved, FUJITSU LABORATORIES LIMITED.\nCopyright 2000-2005, Risa/Asir committers, http://www.openxm.org/.\nGC 6.5 copyright 1988-2005, 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-2007, Risa/Asir committers, http://www.openxm.org/.\nGC 6.5 copyright 1988-2005, H-J. Boehm, A. J. Demers, Xerox, SGI, HP.\n%s"; | 
| if (!notice) { | if (!notice) { | 
| s1 = get_intervalversion(); | s1 = get_intervalversion(); | 
| s2 = get_asir_distribution(); | s2 = get_asir_distribution(); |