=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/plot/ox_plot.c,v retrieving revision 1.9 retrieving revision 1.20 diff -u -p -r1.9 -r1.20 --- OpenXM_contrib2/asir2000/plot/ox_plot.c 2000/11/07 06:06:40 1.9 +++ OpenXM_contrib2/asir2000/plot/ox_plot.c 2004/02/13 05:48:36 1.20 @@ -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/plot/ox_plot.c,v 1.8 2000/10/06 06:05:24 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/plot/ox_plot.c,v 1.19 2003/02/14 22:29:19 ohara Exp $ */ #include "ca.h" #include "parse.h" @@ -53,7 +53,7 @@ #include "ifplot.h" #include "version.h" #include -#if PARI +#if defined(PARI) #include "genpari.h" #endif @@ -63,17 +63,21 @@ extern int asir_OperandStackSize; extern Obj *asir_OperandStack; extern int asir_OperandStackPtr; +/* environement is defined in libpari.a */ +#if !(PARI_VERSION_CODE > 131588) extern jmp_buf environnement; +#endif extern int do_message; extern int ox_flushing; -extern jmp_buf ox_env; +extern JMP_BUF ox_env; extern MATHCAP my_mathcap; +extern char LastError[]; void create_error(ERR *,unsigned int ,char *); void ox_io_init(); -void ox_asir_init(int,char **); +void ox_asir_init(int,char **,char *); Obj asir_pop_one(); void asir_push_one(Obj); void asir_end_flush(); @@ -101,16 +105,20 @@ void ox_plot_main(int argc,char **argv) int ds; fd_set r; int n; + int use_x; #if !defined(VISUAL) - ox_asir_init(argc,argv); - init_plot_display(argc,argv); - ds = ConnectionNumber(display); + ox_asir_init(argc,argv,"ox_plot"); + use_x = init_plot_display(argc,argv); + if ( use_x ) + ds = ConnectionNumber(display); + else + fprintf(stderr,"Entering no X mode\n"); #endif if ( do_message ) fprintf(stderr,"I'm an ox_plot, Version %d.\n",ASIR_VERSION); - if ( setjmp(ox_env) ) { + if ( SETJMP(ox_env) ) { while ( NEXT(asir_infile) ) closecurrentinput(); reset_current_computation(); @@ -122,7 +130,7 @@ void ox_plot_main(int argc,char **argv) #else if ( ox_data_is_available(0) ) process_ox(); - else { + else if ( use_x ) { FD_ZERO(&r); FD_SET(3,&r); FD_SET(ds,&r); select(FD_SETSIZE,&r,NULL,NULL,NULL); @@ -143,7 +151,6 @@ static void process_ox() ERR err; unsigned int serial; int ret; - extern char LastError[]; serial = ox_recv(0,&id,&obj); if ( do_message ) @@ -155,7 +162,7 @@ static void process_ox() break; if ( do_message ) fprintf(stderr," %s\n",name_of_cmd(cmd)); - if ( ret = setjmp(env) ) { + if ( ret = SETJMP(main_env) ) { if ( ret == 1 ) { create_error(&err,serial,LastError); asir_push_one((Obj)err); @@ -218,7 +225,7 @@ static void asir_do_cmd(unsigned int cmd,unsigned int asir_executeString(); break; case SM_executeFunction: - asir_executeFunction(); + asir_executeFunction(serial); break; case SM_shutdown: asir_terminate(2); @@ -233,12 +240,13 @@ static void asir_do_cmd(unsigned int cmd,unsigned int client_mathcap = (MATHCAP)asir_pop_one(); store_remote_mathcap(0,client_mathcap); break; + case SM_nop: default: break; } } -static void asir_executeFunction() +static void asir_executeFunction(int serial) { char *func; int argc; @@ -246,7 +254,9 @@ static void asir_executeFunction() FUNC f; Q ret; VL vl; + ERR err; NODE n,n1; + LIST bytes; func = ((STRING)asir_pop_one())->body; argc = (int)(((USINT)asir_pop_one())->body); @@ -261,6 +271,8 @@ static void asir_executeFunction() if ( !strcmp(func,"plot") ) { id = plot(n); STOQ(id,ret); asir_push_one((Obj)ret); + } else if ( !strcmp(func,"memory_plot") ) { + memory_plot(n,&bytes); asir_push_one((Obj)bytes); } else if ( !strcmp(func,"arrayplot") ) { id = arrayplot(n); STOQ(id,ret); asir_push_one((Obj)ret); @@ -272,7 +284,15 @@ static void asir_executeFunction() } else if ( !strcmp(func,"drawcircle") ) { drawcircle(n); } else if ( !strcmp(func,"draw_obj") ) { - draw_obj(n); + if ( draw_obj(n) < 0 ) { + create_error(&err,serial,LastError); + asir_push_one((Obj)err); + } + } else if ( !strcmp(func,"draw_string") ) { + if ( draw_string(n) < 0 ) { + create_error(&err,serial,LastError); + asir_push_one((Obj)err); + } } else if ( !strcmp(func,"clear_canvas") ) { clear_canvas(n); }