=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/ox_asir.c,v retrieving revision 1.49 retrieving revision 1.58 diff -u -p -r1.49 -r1.58 --- OpenXM_contrib2/asir2000/io/ox_asir.c 2003/12/12 09:01:11 1.49 +++ OpenXM_contrib2/asir2000/io/ox_asir.c 2005/07/26 00:58:50 1.58 @@ -44,7 +44,7 @@ * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. - * $OpenXM: OpenXM_contrib2/asir2000/io/ox_asir.c,v 1.48 2003/12/12 04:59:59 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/io/ox_asir.c,v 1.57 2004/06/15 00:56:52 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -59,7 +59,9 @@ void ox_usr1_handler(); int asir_ox_init(); /* environement is defined in libpari.a */ +# if !( PARI_VERSION_CODE > 131588) extern jmp_buf environnement; +# endif extern int myrank_102,nserver_102; extern int do_message; @@ -153,6 +155,9 @@ void ox_main(int argc,char **argv) { if ( SETJMP(ox_env) ) { while ( NEXT(asir_infile) ) closecurrentinput(); + resetpvs(); + reset_engine(); + reset_io(); ox_send_sync(0); } while ( 1 ) { @@ -183,6 +188,8 @@ void ox_main(int argc,char **argv) { if ( ret == 1 ) { create_error(&err,serial,LastError); asir_push_one((Obj)err); + while ( NEXT(asir_infile) ) + closecurrentinput(); } break; } @@ -479,7 +486,7 @@ void asir_reset_102(unsigned int serial) do { ox_recv_102(i,&id,&obj); } while ( id != OX_SYNC_BALL ); - for ( i = myrank_102; i < nserver_102; i++ ) + for ( i = myrank_102+1; i < nserver_102; i++ ) ox_send_sync_102(i); } @@ -591,23 +598,20 @@ void asir_pushCMOtag(unsigned int serial) void asir_popString() { Obj val; - char *buf,*obuf; + char *buf; int l; STRING str; val = asir_pop_one(); if ( !val ) - obuf = "0"; + buf = "0"; else { l = estimate_length(CO,val); buf = (char *)ALLOCA(l+1); soutput_init(buf); sprintexpr(CO,val); - l = strlen(buf); - obuf = (char *)MALLOC(l+1); - strcpy(obuf,buf); } - MKSTR(str,obuf); + MKSTR(str,buf); ox_send_data(0,str); } @@ -662,6 +666,20 @@ void asir_evalName(unsigned int serial) asir_push_one(val); } +char *augment_backslash(char *s) +{ + char *p,*r; + int i; + + for ( i = 0, p = s; *p; p++, i++ ) if ( *p == '\\' ) i++; + r = (char *)MALLOC_ATOMIC((i+1)*sizeof(char)); + for ( i = 0, p = s; *p; p++, i++ ) { + if ( *p == '\\' ) r[i++] = '\\'; + r[i] = *p; + } + return r; +} + int asir_executeString() { SNODE snode; @@ -670,13 +688,20 @@ int asir_executeString() #if defined(PARI) recover(0); /* environement is defined in libpari.a */ +# if !(PARI_VERSION_CODE > 131588 ) if ( setjmp(environnement) ) { avma = top; recover(1); resetenv(""); } +# endif #endif cmd = ((STRING)asir_pop_one())->body; +/* XXX : probably this is useless */ +#if 0 + parse_strp = augment_backslash(cmd); +#else parse_strp = cmd; +#endif if ( mainparse(&snode) ) { return -1; } @@ -833,6 +858,7 @@ void ox_asir_init(int argc,char **argv,char *servernam int tmp; #endif + GC_init(); #if !defined(VISUAL) && !defined(MPI) do_server_in_X11 = 1; /* XXX */ #endif @@ -845,7 +871,6 @@ void ox_asir_init(int argc,char **argv,char *servernam rtime_init(); env_init(); endian_init(); - GC_init(); cppname_init(); process_args(--argc,++argv); #if defined(__CYGWIN__) @@ -1122,6 +1147,7 @@ int asir_ox_init(int byteorder) static ox_asir_initialized = 0; FILE *ifp; + GC_init(); #if !defined(VISUAL) && !defined(MPI) do_server_in_X11 = 0; /* XXX */ #endif @@ -1134,7 +1160,6 @@ int asir_ox_init(int byteorder) rtime_init(); env_init(); endian_init(); - GC_init(); /* process_args(argc,argv); */ output_init(); arf_init();