[BACK]Return to ox_plot.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / plot

Diff for /OpenXM_contrib2/asir2000/plot/ox_plot.c between version 1.17 and 1.31

version 1.17, 2002/08/02 02:28:29 version 1.31, 2018/03/29 01:32:55
Line 45 
Line 45 
  * 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/plot/ox_plot.c,v 1.16 2002/07/10 05:29:36 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/plot/ox_plot.c,v 1.30 2017/08/30 09:40:30 ohara Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 53 
Line 53 
 #include "ifplot.h"  #include "ifplot.h"
 #include "version.h"  #include "version.h"
 #include <signal.h>  #include <signal.h>
 #if PARI  #if defined(PARI)
 #include "genpari.h"  #include "genpari.h"
 #endif  #endif
   
 void ox_usr1_handler();  
   
 extern int asir_OperandStackSize;  extern int asir_OperandStackSize;
 extern Obj *asir_OperandStack;  extern Obj *asir_OperandStack;
 extern int asir_OperandStackPtr;  extern int asir_OperandStackPtr;
   
 /* environement is defined in libpari.a */  // environement is defined in libpari.a
   #if !(PARI_VERSION_CODE > 131588)
 extern jmp_buf environnement;  extern jmp_buf environnement;
   #endif
   
 extern int do_message;  extern int do_message;
 extern int ox_flushing;  extern int ox_flushing;
Line 72  extern JMP_BUF ox_env;
Line 72  extern JMP_BUF ox_env;
 extern MATHCAP my_mathcap;  extern MATHCAP my_mathcap;
 extern char LastError[];  extern char LastError[];
   
 void create_error(ERR *,unsigned int ,char *);  void create_error(ERR *,unsigned int ,char *,LIST );
   
 void ox_io_init();  void ox_io_init();
 void ox_asir_init(int,char **,char *);  void ox_asir_init(int,char **,char *);
Line 94  static void asir_do_cmd(unsigned int,unsigned int);
Line 94  static void asir_do_cmd(unsigned int,unsigned int);
 static void process_ox();  static void process_ox();
 static void asir_executeFunction();  static void asir_executeFunction();
   
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
 void ox_plot_main()  void ox_plot_main()
 #else  #else
 void ox_plot_main(int argc,char **argv)  void ox_plot_main(int argc,char **argv)
 #endif  #endif
 {  {
         int ds;    int ds;
         fd_set r;    fd_set r;
         int n;    int n;
         int use_x;    int use_x;
   
 #if !defined(VISUAL)  #if !defined(VISUAL) && !defined(__MINGW32__)
         ox_asir_init(argc,argv,"ox_plot");    ox_asir_init(argc,argv,"ox_plot");
         use_x = init_plot_display(argc,argv);    use_x=init_plot_display(argc,argv);
         if ( use_x )    if(use_x) ds=ConnectionNumber(display);
                 ds = ConnectionNumber(display);    else fprintf(stderr,"Entering no X mode\n");
         else  
                 fprintf(stderr,"Entering no X mode\n");  
 #endif  #endif
         if ( do_message )    if(do_message)fprintf(stderr,"I'm an ox_plot, Version %d.\n",ASIR_VERSION);
                 fprintf(stderr,"I'm an ox_plot, Version %d.\n",ASIR_VERSION);    if(SETJMP(ox_env)){
       while(NEXT(asir_infile))closecurrentinput();
         if ( SETJMP(ox_env) ) {      reset_current_computation();
                 while ( NEXT(asir_infile) )      ox_send_sync(0);
                         closecurrentinput();    }
                 reset_current_computation();    while (1){
                 ox_send_sync(0);  #if defined(VISUAL) || defined(__MINGW32__)
         }      process_ox();
         while ( 1 ) {  
 #if defined(VISUAL)  
                 process_ox();  
 #else  #else
                 if ( ox_data_is_available(0) )      if(ox_data_is_available(0)) process_ox();
                         process_ox();      else if(use_x){
                 else if ( use_x ) {        FD_ZERO(&r);
                         FD_ZERO(&r);        FD_SET(3,&r); FD_SET(ds,&r);
                         FD_SET(3,&r); FD_SET(ds,&r);        select(FD_SETSIZE,&r,NULL,NULL,NULL);
                         select(FD_SETSIZE,&r,NULL,NULL,NULL);        if(FD_ISSET(3,&r)) process_ox();
                         if ( FD_ISSET(3,&r) )        else if(FD_ISSET(ds,&r)) process_xevent();
                                 process_ox();      }
                         else if ( FD_ISSET(ds,&r) )    }
                                 process_xevent();  
                 }  
         }  
 #endif  #endif
 }  }
   
 static void process_ox()  static void process_ox(){
 {    int id;
         int id;    unsigned int cmd;
         unsigned int cmd;    Obj obj;
         Obj obj;    ERR err;
         ERR err;    unsigned int serial;
         unsigned int serial;    int ret;
         int ret;  
   
         serial = ox_recv(0,&id,&obj);    serial=ox_recv(0,&id,&obj);
         if ( do_message )    if(do_message) fprintf(stderr,"#%d Got %s",serial,name_of_id(id));
                 fprintf(stderr,"#%d Got %s",serial,name_of_id(id));    switch (id){
         switch ( id ) {      case OX_COMMAND:
                 case OX_COMMAND:        cmd=((USINT)obj)->body;
                         cmd = ((USINT)obj)->body;        if(ox_flushing) break;
                         if ( ox_flushing )        if(do_message) fprintf(stderr," %s\n",name_of_cmd(cmd));
                                 break;        ret=SETJMP(main_env);
                         if ( do_message )        if(ret){
                                 fprintf(stderr," %s\n",name_of_cmd(cmd));          if(ret==1){
                         if ( ret = SETJMP(main_env) ) {            create_error(&err,serial,LastError,0);
                                 if ( ret == 1 ) {            asir_push_one((Obj)err);
                                         create_error(&err,serial,LastError);          }
                                         asir_push_one((Obj)err);          break;
                                 }        }
                                 break;        asir_do_cmd(cmd,serial);
                         }        break;
                         asir_do_cmd(cmd,serial);      case OX_DATA:
                         break;      case OX_LOCAL_OBJECT_ASIR:
                 case OX_DATA:        if(ox_flushing)break;
                 case OX_LOCAL_OBJECT_ASIR:        if(do_message)fprintf(stderr," -> data pushed");
                         if ( ox_flushing )        asir_push_one(obj);
                                 break;        break;
                         if ( do_message )      case OX_SYNC_BALL:
                                 fprintf(stderr," -> data pushed");        asir_end_flush();
                         asir_push_one(obj);        break;
                         break;      default:
                 case OX_SYNC_BALL:        break;
                                 asir_end_flush();    }
                         break;    if(do_message)fprintf(stderr,"\n");
                 default:  
                         break;  
         }  
         if ( do_message )  
                 fprintf(stderr,"\n");  
 }  }
   
 static void asir_do_cmd(unsigned int cmd,unsigned int serial)  static void asir_do_cmd(unsigned int cmd,unsigned int serial){
 {    MATHCAP client_mathcap;
         MATHCAP client_mathcap;    LIST list;
         LIST list;    int i;
         int i;    Q q;
         Q q;  
   
         switch ( cmd ) {    switch (cmd){
                 case SM_dupErrors:      case SM_dupErrors:
                         list = asir_GetErrorList();        list=asir_GetErrorList();
                         asir_push_one((Obj)list);        asir_push_one((Obj)list);
                         break;        break;
                 case SM_getsp:      case SM_getsp:
                         i = asir_OperandStackPtr+1;        i=asir_OperandStackPtr+1;
                         STOQ(i,q);        STOQ(i,q);
                         asir_push_one((Obj)q);        asir_push_one((Obj)q);
                         break;        break;
                 case SM_popSerializedLocalObject:      case SM_popSerializedLocalObject:
                         asir_popSerializedLocalObject();        asir_popSerializedLocalObject();
                         break;        break;
                 case SM_popCMO:      case SM_popCMO:
                         asir_popCMO(serial);        asir_popCMO(serial);
                         break;        break;
                 case SM_popString:      case SM_popString:
                         asir_popString();        asir_popString();
                         break;        break;
                 case SM_setName:      case SM_setName:
                         asir_setName(serial);        asir_setName(serial);
                         break;        break;
                 case SM_evalName:      case SM_evalName:
                         asir_evalName(serial);        asir_evalName(serial);
                         break;        break;
                 case SM_executeStringByLocalParser:      case SM_executeStringByLocalParser:
                         asir_executeString();        asir_executeString();
                         break;        break;
                 case SM_executeFunction:      case SM_executeFunction:
                         asir_executeFunction(serial);        asir_executeFunction(serial);
                         break;        break;
                 case SM_shutdown:      case SM_shutdown:
                         asir_terminate(2);        asir_terminate(2);
                         break;        break;
                 case SM_pops:      case SM_pops:
                         asir_pops();        asir_pops();
                         break;        break;
                 case SM_mathcap:      case SM_mathcap:
                         asir_push_one((Obj)my_mathcap);        asir_push_one((Obj)my_mathcap);
                         break;        break;
                 case SM_setMathcap:      case SM_setMathcap:
                         client_mathcap = (MATHCAP)asir_pop_one();        client_mathcap=(MATHCAP)asir_pop_one();
                         store_remote_mathcap(0,client_mathcap);        store_remote_mathcap(0,client_mathcap);
                         break;        break;
                 default:      case SM_nop:
                         break;      default:
         }        break;
     }
 }  }
   
 static void asir_executeFunction(int serial)  static void asir_executeFunction(int serial){
 {    char *fn;
         char *func;    int argc,id,fno;
         int argc;    FUNC f;
         int id;    Q ret;
         FUNC f;    VL vl;
         Q ret;    ERR err;
         VL vl;    NODE n,n1;
         ERR err;    LIST bytes;
         NODE n,n1;  
         LIST bytes;  
   
         func = ((STRING)asir_pop_one())->body;    fn=((STRING)asir_pop_one())->body;
         argc = (int)(((USINT)asir_pop_one())->body);    argc=(int)(((USINT)asir_pop_one())->body);
     for(n=0;argc;argc--){
         for ( n = 0; argc; argc-- ) {      NEXTNODE(n,n1);
                 NEXTNODE(n,n1);      BDY(n1)=(pointer)asir_pop_one();
                 BDY(n1) = (pointer)asir_pop_one();    }
         }    if(n)NEXT(n1)=0;
         if ( n )    id=-1;
                 NEXT(n1) = 0;    fno=modeNO(fn);
         id = -1;    switch (fno){
         if ( !strcmp(func,"plot") ) {    case 0://IFPLOT
                 id = plot(n);      id=plot(n,fno);
                 STOQ(id,ret); asir_push_one((Obj)ret);      STOQ(id,ret);
         } else if ( !strcmp(func,"memory_plot") ) {      asir_push_one((Obj)ret);
                 memory_plot(n,&bytes); asir_push_one((Obj)bytes);      break;
         } else if ( !strcmp(func,"arrayplot") ) {    case 1://CONPLOT
                 id = arrayplot(n);      id=plot(n,fno);
                 STOQ(id,ret); asir_push_one((Obj)ret);      STOQ(id,ret);
         } else if ( !strcmp(func,"open_canvas") ) {      asir_push_one((Obj)ret);
                 id = open_canvas(n);      break;
                 STOQ(id,ret); asir_push_one((Obj)ret);    case 2://PLOT
         } else if ( !strcmp(func,"plotover") ) {      id=plot(n,fno);
                 plotover(n);      STOQ(id,ret);
         } else if ( !strcmp(func,"drawcircle") ) {      asir_push_one((Obj)ret);
                 drawcircle(n);      break;
         } else if ( !strcmp(func,"draw_obj") ) {    case 4://POLARPLOT
                 if ( draw_obj(n) < 0 ) {      id=plot(n,fno);
                         create_error(&err,serial,LastError);      STOQ(id,ret);
                         asir_push_one((Obj)err);      asir_push_one((Obj)ret);
                 }      break;
         } else if ( !strcmp(func,"draw_string") ) {    case 30://MEMORY_PLOT
                 if ( draw_string(n) < 0 ) {      memory_plot(n,&bytes);
                         create_error(&err,serial,LastError);      asir_push_one((Obj)bytes);
                         asir_push_one((Obj)err);      break;
                 }    case 31://ARRAYPLOT
         } else if ( !strcmp(func,"clear_canvas") ) {      id=arrayplot(n);
                 clear_canvas(n);      STOQ(id,ret);
         }      asir_push_one((Obj)ret);
       break;
     case 32://OPEN_CANVAS
       id=open_canvas(n);
       STOQ(id,ret);
       asir_push_one((Obj)ret);
       break;
     case 5://PLOTOVER
       plotover(n);
       break;
     case 33://DRAWCIRCLE
       drawcircle(n);
       break;
     case 34://DRAW_OBJ
       if(draw_obj(n) < 0 ){
         create_error(&err,serial,LastError,0);
         asir_push_one((Obj)err);
       }
       break;
     case 35://DRAW_STRING
       if(draw_string(n)<0){
         create_error(&err,serial,LastError,0);
         asir_push_one((Obj)err);
       }
       break;
     case 37://CLEAR_CANVAS
       clear_canvas(n);
       break;
   // ifplotNG
     case 36://OBJ_CP
       id=objcp(n);
       STOQ(id,ret);
       asir_push_one((Obj)ret);
       break;
     case 6://IFPLOTD
     case 7://IFPLOTQ
     case 8://IFPLOTB
     case 9://INEQND
     case 10://INEQNQ
     case 11://INEQNB
     case 21://CONPLOTD
     case 22://CONPLOTQ
     case 23://CONPLOTB
   #if defined(INTERVAL)
     case 24://ITVIFPLOT
   #endif
       id=ifplotNG(n,fno);
       STOQ(id,ret);
       asir_push_one((Obj)ret);
       break;
     case 12://INEQNDAND
     case 13://INEQNQAND
     case 14://INEQNBAND
     case 15://INEQNDOR
     case 16://INEQNQOR
     case 17://INEQNBOR
     case 18://INEQNDXOR
     case 19://INEQNQXOR
     case 20://INEQNBXOR
     case 25://PLOTOVERD
     case 26://PLOTOVERQ
     case 27://PLOTOVERB
       id=ifplotOP(n,fno);
       STOQ(id,ret);
       asir_push_one((Obj)ret);
       break;
     case 38://POLARPLOTD
       id=polarplotNG(n);
       STOQ(id,ret);
       asir_push_one((Obj)ret);
       break;
     }
 }  }

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.31

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>