| version 1.48, 2004/02/27 09:13:04 | version 1.55, 2005/01/27 23:58:21 | 
|  |  | 
| * 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.47 2004/02/25 06:43:52 ohara Exp $ | * $OpenXM: OpenXM_contrib2/asir2000/parse/glob.c,v 1.54 2004/12/18 09:25:58 noro Exp $ | 
| */ | */ | 
| #include "ca.h" | #include "ca.h" | 
| #include "al.h" | #include "al.h" | 
| 
| Line 83  extern FILE *asir_out; |  | 
| Line 83  extern FILE *asir_out; |  | 
|  |  | 
| INFILE asir_infile; | INFILE asir_infile; | 
| JMP_BUF main_env,debug_env,timer_env,exec_env; | 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_libdir; | 
| char *asir_pager; | char *asir_pager; | 
|  |  | 
| 
| Line 100  int do_server_in_X11; |  | 
| Line 100  int do_server_in_X11; |  | 
| Obj LastVal; | Obj LastVal; | 
| char LastError[BUFSIZ]; | char LastError[BUFSIZ]; | 
| int timer_is_set; | int timer_is_set; | 
|  | NODE current_option; | 
|  | NODE user_int_handler, user_quit_handler; | 
|  |  | 
|  |  | 
| struct oV oVAR[] = { | struct oV oVAR[] = { | 
| {"x",0,0}, {"y",0,0}, {"z",0,0}, {"u",0,0}, | {"x",0,0}, {"y",0,0}, {"z",0,0}, {"u",0,0}, | 
| {"v",0,0}, {"w",0,0}, {"p",0,0}, {"q",0,0}, | {"v",0,0}, {"w",0,0}, {"p",0,0}, {"q",0,0}, | 
|  |  | 
| int do_fep; | int do_fep; | 
| int read_exec_file; | int read_exec_file; | 
| int asir_setenv; | int asir_setenv; | 
| int asir_texmacs; |  | 
| static int buserr_sav; | static int buserr_sav; | 
| static char asir_history[BUFSIZ]; | static char asir_history[BUFSIZ]; | 
|  |  | 
| 
| Line 215  void ExitAsir() { |  | 
| Line 215  void ExitAsir() { |  | 
| void asir_terminate(int status) | void asir_terminate(int status) | 
| { | { | 
| int t; | int t; | 
|  | NODE n; | 
|  |  | 
| if ( read_exec_file ) { | if ( read_exec_file ) { | 
| t = read_exec_file; | t = read_exec_file; | 
| 
| Line 224  void asir_terminate(int status) |  | 
| Line 225  void asir_terminate(int status) |  | 
| else | else | 
| LONGJMP(exec_env,status); | LONGJMP(exec_env,status); | 
| } else { | } 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(); | tty_reset(); | 
| #if defined(MPI) | #if defined(MPI) | 
| if ( !mpi_myid ) | if ( !mpi_myid ) | 
| 
| Line 260  Obj user_defined_prompt; |  | 
| Line 267  Obj user_defined_prompt; |  | 
|  |  | 
| void prompt() { | void prompt() { | 
| if ( !do_quiet && !do_fep && asir_infile->fp == stdin ) { | if ( !do_quiet && !do_fep && asir_infile->fp == stdin ) { | 
| if ( asir_texmacs ) printf("\2\verbatim:\2channel:prompt\5\2latex:\\red"); |  | 
| fprintf(asir_out,"[%d] ",APVS->n); | fprintf(asir_out,"[%d] ",APVS->n); | 
| if ( asir_texmacs ) printf("\5\5"); |  | 
| fflush(asir_out); | fflush(asir_out); | 
| } else if ( do_quiet && user_defined_prompt | } else if ( do_quiet && user_defined_prompt | 
| && OID(user_defined_prompt)==O_STR) { | && OID(user_defined_prompt)==O_STR) { | 
| if ( asir_texmacs ) printf("\2\verbatim:\2channel:prompt\5\2latex:\\red"); |  | 
| fprintf(asir_out,BDY((STRING)user_defined_prompt),APVS->n); | fprintf(asir_out,BDY((STRING)user_defined_prompt),APVS->n); | 
| if ( asir_texmacs ) printf("\5\5"); |  | 
| fflush(asir_out); | fflush(asir_out); | 
| } | } | 
| } | } | 
| 
| Line 355  void process_args(int ac,char **av) |  | 
| Line 358  void process_args(int ac,char **av) |  | 
| do_file = 1; | do_file = 1; | 
| do_filename = *(av+1); | do_filename = *(av+1); | 
| av += 2; ac -= 2; | av += 2; ac -= 2; | 
| } else if ( !strcmp(*av,"-texmacs") ) { |  | 
| asir_texmacs = 1; av++; ac--; |  | 
| *stderr = *stdout; |  | 
| } else if ( !strcmp(*av,"-E") ) { | } else if ( !strcmp(*av,"-E") ) { | 
| asir_setenv = 1; av++; ac--; | asir_setenv = 1; av++; ac--; | 
| } else if ( !strcmp(*av,"-quiet") ) { | } else if ( !strcmp(*av,"-quiet") ) { | 
| 
| Line 451  void asir_reset_handler() { |  | 
| Line 451  void asir_reset_handler() { |  | 
| void resetenv(char *s) | void resetenv(char *s) | 
| { | { | 
| extern FILE *outfile; | extern FILE *outfile; | 
| FILE *stream = asir_texmacs ? stdout : stderr; |  | 
|  |  | 
| if ( asir_texmacs ) { printf("\2verbatim:"); fflush(stdout); } | fprintf(stderr,"%s\n",s); | 
| fprintf(stream,"%s\n",s); |  | 
| while ( NEXT(asir_infile) ) | while ( NEXT(asir_infile) ) | 
| closecurrentinput(); | closecurrentinput(); | 
| resetpvs(); | resetpvs(); | 
| 
| Line 475  void resetenv(char *s) |  | 
| Line 473  void resetenv(char *s) |  | 
| #if !defined(VISUAL) | #if !defined(VISUAL) | 
| reset_timer(); | reset_timer(); | 
| #endif | #endif | 
| if ( asir_texmacs ) { putchar('\5'); fflush(stdout); } |  | 
| LONGJMP(main_env,1); | LONGJMP(main_env,1); | 
| } | } | 
|  |  | 
| 
| Line 484  void fatal(int n) |  | 
| Line 481  void fatal(int n) |  | 
| resetenv("return to toplevel"); | resetenv("return to toplevel"); | 
| } | } | 
|  |  | 
| FUNC registered_handler; |  | 
| extern int ox_int_received, critical_when_signal; | extern int ox_int_received, critical_when_signal; | 
|  |  | 
| void int_handler(int sig) | void int_handler(int sig) | 
| { | { | 
| extern NODE PVSS; | extern NODE PVSS; | 
| FILE *stream; | NODE t; | 
|  |  | 
| if ( asir_texmacs ) stream = stdout; |  | 
| else stream = stderr; |  | 
|  |  | 
| if ( do_file ) { | if ( do_file ) { | 
| ExitAsir(); | ExitAsir(); | 
| 
| Line 521  void int_handler(int sig) |  | 
| Line 515  void int_handler(int sig) |  | 
| #endif | #endif | 
| getchar(); | getchar(); | 
| #endif | #endif | 
| if ( asir_texmacs ) { |  | 
| printf("\2\verbatim:\2channel:prompt\5\2verbatim:interrupt>\5\5"); fflush(stdout); |  | 
| } |  | 
| while ( 1 ) { | while ( 1 ) { | 
| char buf[BUFSIZ]; | char buf[BUFSIZ]; | 
| char c; | char c; | 
|  |  | 
| if ( asir_texmacs ) { printf("\2verbatim:"); fflush(stdout); } | fprintf(stderr,"interrupt ?(q/t/c/d/u/w/?) "); fflush(stderr); | 
| fprintf(stream,"interrupt ?(q/t/c/d/u/w/?) "); fflush(stream); |  | 
| if ( asir_texmacs ) { putchar('\5'); fflush(stdout); } |  | 
| buf[0] = '\n'; | buf[0] = '\n'; | 
| while ( buf[0] == '\n' ) | while ( buf[0] == '\n' ) | 
| fgets(buf,BUFSIZ,stdin); | fgets(buf,BUFSIZ,stdin); | 
| switch ( c = buf[0] ) { | switch ( c = buf[0] ) { | 
| case 'q': | case 'q': | 
| while ( 1 ) { | while ( 1 ) { | 
| if ( asir_texmacs ) { | fprintf(stderr,"Abort this session? (y or n) "); fflush(stderr); | 
| printf("\2verbatim:"); fflush(stdout); |  | 
| } |  | 
| fprintf(stream,"Abort this session? (y or n) "); fflush(stream); |  | 
| if ( asir_texmacs ) { putchar('\5'); fflush(stdout); } |  | 
| fgets(buf,BUFSIZ,stdin); | fgets(buf,BUFSIZ,stdin); | 
| if ( !strncmp(buf,"y",1) ) { | if ( !strncmp(buf,"y",1) ) { | 
| read_exec_file = 0; | read_exec_file = 0; | 
| if ( asir_texmacs ) { | fprintf(stderr,"Bye\n"); | 
| printf("\2verbatim:"); fflush(stdout); |  | 
| } |  | 
| fprintf(stream,"Bye\n"); |  | 
| if ( asir_texmacs ) { putchar('\5'); fflush(stdout); } |  | 
| asir_terminate(1); | asir_terminate(1); | 
| } else if ( !strncmp(buf,"n",1) ) { | } else if ( !strncmp(buf,"n",1) ) { | 
| restore_handler(); | restore_handler(); | 
| 
| Line 560  void int_handler(int sig) |  | 
| Line 541  void int_handler(int sig) |  | 
| case 't': | case 't': | 
| case 'u': | case 'u': | 
| while ( 1 ) { | while ( 1 ) { | 
| if ( asir_texmacs ) { | fprintf(stderr,"Abort this computation? (y or n) "); fflush(stderr); | 
| printf("\2verbatim:"); fflush(stdout); |  | 
| } |  | 
| fprintf(stream,"Abort this computation? (y or n) "); fflush(stream); |  | 
| if ( asir_texmacs ) { putchar('\5'); fflush(stdout); } |  | 
| fgets(buf,BUFSIZ,stdin); | fgets(buf,BUFSIZ,stdin); | 
| if ( !strncmp(buf,"y",1) ) | if ( !strncmp(buf,"y",1) ) | 
| break; | break; | 
| 
| Line 577  void int_handler(int sig) |  | 
| Line 554  void int_handler(int sig) |  | 
| debug_mode = 0; | debug_mode = 0; | 
| restore_handler(); | restore_handler(); | 
| if ( c == 'u' ) { | if ( c == 'u' ) { | 
| if ( registered_handler ) { | if ( user_int_handler ) { | 
| if ( asir_texmacs ) { | fprintf(stderr, | 
| printf("\2verbatim:"); fflush(stdout); | "Calling the registered exception callbacks..."); | 
| } | for ( t = user_int_handler; t; t = NEXT(t) ) | 
| fprintf(stream, | bevalf((FUNC)BDY(t),0); | 
| "Calling the registered exception handler..."); | fprintf(stderr, "done.\n"); | 
| bevalf(registered_handler,0); |  | 
| fprintf(stream, "done.\n"); |  | 
| if ( asir_texmacs ) { putchar('\5'); fflush(stdout); } |  | 
| } | } | 
| } | } | 
| if ( read_exec_file ) { | if ( read_exec_file ) { | 
| 
| Line 608  void int_handler(int sig) |  | 
| Line 582  void int_handler(int sig) |  | 
| showpos(); | showpos(); | 
| break; | break; | 
| case '?': | case '?': | 
| if ( asir_texmacs ) { | fprintf(stderr, "q:quit t:toplevel c:continue d:debug u:call registered handler w:where\n"); | 
| printf("\2verbatim:"); fflush(stdout); |  | 
| } |  | 
| fprintf(stream, "q:quit t:toplevel c:continue d:debug u:call registered handler w:where\n"); |  | 
| if ( asir_texmacs ) { putchar('\5'); fflush(stdout); } |  | 
| break; | break; | 
| default: | default: | 
| break; | break; | 
| 
| Line 695  void set_lasterror(char *s) |  | 
| Line 665  void set_lasterror(char *s) |  | 
| } | } | 
|  |  | 
| SNODE error_snode; | SNODE error_snode; | 
|  | int error_in_timer; | 
|  |  | 
| void error(char *s) | void error(char *s) | 
| { | { | 
| SNODE *snp=0; | SNODE *snp=0; | 
|  |  | 
| #if !defined(VISUAL) | #if !defined(VISUAL) | 
| if ( timer_is_set ) | if ( !error_in_timer && timer_is_set ) | 
| alrm_handler(SIGVTALRM); | alrm_handler(SIGVTALRM); | 
| #endif | #endif | 
| fprintf(stderr,"%s\n",s); | fprintf(stderr,"%s\n",s); | 
| 
| Line 726  void error(char *s) |  | 
| Line 697  void error(char *s) |  | 
| if ( debug_mode ) | if ( debug_mode ) | 
| LONGJMP(debug_env,1); | LONGJMP(debug_env,1); | 
| if ( CPVS != GPVS ) | if ( CPVS != GPVS ) | 
| if ( 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 ( read_exec_file ) | 
| read_exec_file = 0; | read_exec_file = 0; | 
| 
| Line 809  char *get_intervalversion() |  | 
| Line 780  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-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-2005, 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"; | 
| if ( asir_texmacs ) printf("\2verbatim:"); |  | 
| printf(format, get_intervalversion(), get_asir_version(), get_asir_distribution(), get_pariversion()); | printf(format, get_intervalversion(), get_asir_version(), get_asir_distribution(), get_pariversion()); | 
| if ( asir_texmacs ) putchar('\5'); |  | 
| } | } | 
|  |  | 
| char *scopyright() | char *scopyright() | 
| 
| Line 820  char *scopyright() |  | 
| Line 789  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-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-2005, 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"; | 
| if (!notice) { | if (!notice) { | 
| s1 = get_intervalversion(); | s1 = get_intervalversion(); | 
| s2 = get_asir_distribution(); | s2 = get_asir_distribution(); |