[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.4 and 1.25

version 1.4, 2000/06/07 08:46:41 version 1.25, 2014/05/12 16:54:41
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/plot/ox_plot.c,v 1.3 2000/04/13 06:51:09 noro Exp $ */  /*
    * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
    * All rights reserved.
    *
    * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
    * non-exclusive and royalty-free license to use, copy, modify and
    * redistribute, solely for non-commercial and non-profit purposes, the
    * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
    * conditions of this Agreement. For the avoidance of doubt, you acquire
    * only a limited right to use the SOFTWARE hereunder, and FLL or any
    * third party developer retains all rights, including but not limited to
    * copyrights, in and to the SOFTWARE.
    *
    * (1) FLL does not grant you a license in any way for commercial
    * purposes. You may use the SOFTWARE only for non-commercial and
    * non-profit purposes only, such as academic, research and internal
    * business use.
    * (2) The SOFTWARE is protected by the Copyright Law of Japan and
    * international copyright treaties. If you make copies of the SOFTWARE,
    * with or without modification, as permitted hereunder, you shall affix
    * to all such copies of the SOFTWARE the above copyright notice.
    * (3) An explicit reference to this SOFTWARE and its copyright owner
    * shall be made on your publication or presentation in any form of the
    * results obtained by use of the SOFTWARE.
    * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
    * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
    * for such modification or the source code of the modified part of the
    * SOFTWARE.
    *
    * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
    * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
    * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
    * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
    * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
    * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
    * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
    * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
    * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
    * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
    * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
    * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
    * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
    * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
    * 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/plot/ox_plot.c,v 1.24 2013/12/20 02:27:17 noro Exp $
   */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
 #include "ox.h"  #include "ox.h"
 #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();  void ox_usr1_handler();
   
   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;  extern jmp_buf environnement;
   #endif
   
 extern int do_message;  extern int do_message;
 extern int ox_flushing;  extern int ox_flushing;
 extern jmp_buf ox_env;  extern JMP_BUF ox_env;
 extern MATHCAP my_mathcap;  extern MATHCAP my_mathcap;
   extern char LastError[];
   
 static int plot_OperandStackSize;  void create_error(ERR *,unsigned int ,char *,LIST );
 static Obj *plot_OperandStack;  
 static int plot_OperandStackPtr = -1;  
   
 static void create_error(ERR *,unsigned int ,char *);  void ox_io_init();
   void ox_asir_init(int,char **,char *);
   Obj asir_pop_one();
   void asir_push_one(Obj);
   void asir_end_flush();
   int asir_executeString();
   void asir_evalName(unsigned int);
   void asir_setName(unsigned int);
   void asir_pops();
   void asir_popString();
   void asir_popCMO(unsigned int);
   void asir_popSerializedLocalObject();
   char *name_of_cmd(unsigned int);
   char *name_of_id(int);
   LIST asir_GetErrorList();
   
   static void asir_do_cmd(unsigned int,unsigned int);
 static void process_ox();  static void process_ox();
 static void ox_io_init();  
 static void ox_asir_init(int,char **);  
 static Obj asir_pop_one();  
 static void asir_push_one(Obj);  
 static void asir_end_flush();  
 static void asir_executeFunction();  static void asir_executeFunction();
 static int asir_executeString();  
 static void asir_evalName(unsigned int);  
 static void asir_setName(unsigned int);  
 static void asir_pops();  
 static void asir_popString();  
 static void asir_popCMO(unsigned int);  
 static void asir_popSerializedLocalObject();  
 static char *name_of_cmd(unsigned int);  
 static char *name_of_id(int);  
 static void asir_do_cmd(unsigned int,unsigned int);  
 static LIST asir_GetErrorList();  
   
 static void create_error(ERR *err,unsigned int serial,char *msg)  #if defined(VISUAL)
   void ox_plot_main()
   #else
   void ox_plot_main(int argc,char **argv)
   #endif
 {  {
         USINT ui;  
         NODE n,n1;  
         LIST list;  
         STRING errmsg;  
   
         MKUSINT(ui,serial);  
         MKSTR(errmsg,msg);  
         MKNODE(n1,errmsg,0); MKNODE(n,ui,n1); MKLIST(list,n);  
         MKERR(*err,list);  
 }  
   
 void ox_plot_main(int argc,char **argv) {  
         int ds;          int ds;
         fd_set r;          fd_set r;
         int n;          int n;
           int use_x;
   
         ox_asir_init(argc,argv);  #if !defined(VISUAL)
         init_plot_display(argc,argv);          ox_asir_init(argc,argv,"ox_plot");
         ds = ConnectionNumber(display);          use_x=init_plot_display(argc,argv);
         if ( do_message )          if(use_x) ds=ConnectionNumber(display);
                 fprintf(stderr,"I'm an ox_plot, Version %d.\n",ASIR_VERSION);          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) )                  while(NEXT(asir_infile))closecurrentinput();
                         closecurrentinput();  
                 reset_current_computation();                  reset_current_computation();
                 ox_send_sync(0);                  ox_send_sync(0);
         }          }
         while ( 1 ) {          while (1){
                 if ( ox_data_is_available(0) )  #if defined(VISUAL)
                         process_ox();                  process_ox();
                 else {  #else
                   if(ox_data_is_available(0)) process_ox();
                   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) )                          if(FD_ISSET(3,&r)) process_ox();
                                 process_ox();                          else if(FD_ISSET(ds,&r)) process_xevent();
                         else if ( FD_ISSET(ds,&r) )  
                                 process_xevent();  
                 }                  }
         }          }
   #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;
         extern char LastError[];  
   
         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 )                          if(ox_flushing) break;
                                 break;                          if(do_message) fprintf(stderr," %s\n",name_of_cmd(cmd));
                         if ( do_message )                          ret=SETJMP(main_env);
                                 fprintf(stderr," %s\n",name_of_cmd(cmd));                          if(ret){
                         if ( ret = setjmp(env) ) {                                  if(ret==1){
                                 if ( ret == 1 ) {                                          create_error(&err,serial,LastError,0);
                                         create_error(&err,serial,LastError);  
                                         asir_push_one((Obj)err);                                          asir_push_one((Obj)err);
                                 }                                  }
                                 break;                                  break;
Line 118  static void process_ox()
Line 163  static void process_ox()
                         break;                          break;
                 case OX_DATA:                  case OX_DATA:
                 case OX_LOCAL_OBJECT_ASIR:                  case OX_LOCAL_OBJECT_ASIR:
                         if ( ox_flushing )                          if(ox_flushing)break;
                                 break;                          if(do_message)fprintf(stderr," -> data pushed");
                         if ( do_message )  
                                 fprintf(stderr," -> data pushed");  
                         asir_push_one(obj);                          asir_push_one(obj);
                         break;                          break;
                 case OX_SYNC_BALL:                  case OX_SYNC_BALL:
                                 asir_end_flush();                          asir_end_flush();
                         break;                          break;
                 default:                  default:
                         break;                          break;
         }          }
         if ( do_message )          if(do_message)fprintf(stderr,"\n");
                 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 = plot_OperandStackPtr+1;                          i=asir_OperandStackPtr+1;
                         STOQ(i,q);                          STOQ(i,q);
                         asir_push_one((Obj)q);                          asir_push_one((Obj)q);
                         break;                          break;
Line 170  static void asir_do_cmd(unsigned int cmd,unsigned int 
Line 211  static void asir_do_cmd(unsigned int cmd,unsigned int 
                         asir_executeString();                          asir_executeString();
                         break;                          break;
                 case SM_executeFunction:                  case SM_executeFunction:
                         asir_executeFunction();                          asir_executeFunction(serial);
                         break;                          break;
                 case SM_shutdown:                  case SM_shutdown:
                         asir_terminate(2);                          asir_terminate(2);
Line 182  static void asir_do_cmd(unsigned int cmd,unsigned int 
Line 223  static void asir_do_cmd(unsigned int cmd,unsigned int 
                         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;
                   case SM_nop:
                 default:                  default:
                         break;                          break;
         }          }
 }  }
   
 static char *name_of_id(int id)  static void asir_executeFunction(int serial){
 {          char *fn;
         switch ( id ) {          int argc,id,fno;
                 case OX_COMMAND:  
                         return "OX_COMMAND";  
                         break;  
                 case OX_DATA:  
                         return "OX_DATA";  
                         break;  
                 case OX_LOCAL_OBJECT_ASIR:  
                         return "OX_LOCAL_OBJECT_ASIR";  
                         break;  
                 case OX_SYNC_BALL:  
                         return "OX_SYNC_BALL";  
                         break;  
                 default:  
                         return "Unknown id";  
                         break;  
         }  
 }  
   
 static char *name_of_cmd(unsigned cmd)  
 {  
         switch ( cmd ) {  
                 case SM_popSerializedLocalObject:  
                         return "SM_popSerializedLocalObject";  
                         break;  
                 case SM_popCMO:  
                         return "SM_popCMO";  
                         break;  
                 case SM_popString:  
                         return "SM_popString";  
                         break;  
                 case SM_pops:  
                         return "SM_pops";  
                         break;  
                 case SM_setName:  
                         return "SM_setName";  
                         break;  
                 case SM_evalName:  
                         return "SM_evalName";  
                         break;  
                 case SM_executeStringByLocalParser:  
                         return "SM_executeString";  
                         break;  
                 case SM_executeFunction:  
                         return "SM_executeFunction";  
                         break;  
                 case SM_shutdown:  
                         return "SM_shutdown";  
                         break;  
                 case SM_beginBlock:  
                         return "SM_beginBlock";  
                         break;  
                 case SM_endBlock:  
                         return "SM_endBlock";  
                         break;  
                 case SM_mathcap:  
                         return "SM_mathcap";  
                         break;  
                 case SM_setMathcap:  
                         return "SM_setMathcap";  
                         break;  
                 default:  
                         return "Unknown cmd";  
                         break;  
         }  
 }  
   
 static void asir_popSerializedLocalObject()  
 {  
         Obj obj;  
         VL t,vl;  
   
         obj = asir_pop_one();  
         get_vars(obj,&vl);  
         for ( t = vl; t; t = NEXT(t) )  
                 if ( t->v->attr == (pointer)V_UC || t->v->attr == (pointer)V_PF )  
                         error("bsave : not implemented");  
         ox_send_cmd(0,SM_beginBlock);  
         ox_send_local_ring(0,vl);  
         ox_send_local_data(0,obj);  
         ox_send_cmd(0,SM_endBlock);  
 }  
   
 static void asir_popCMO(unsigned int serial)  
 {  
         Obj obj;  
         ERR err;  
   
         obj = asir_pop_one();  
         if ( valid_as_cmo(obj) )  
                 ox_send_data(0,obj);  
         else {  
                 create_error(&err,serial,"cannot convert to CMO object");  
                 ox_send_data(0,err);  
                 asir_push_one(obj);  
         }  
 }  
   
 static void asir_popString()  
 {  
         Obj val;  
         char *buf,*obuf;  
         int l;  
         STRING str;  
   
         val = asir_pop_one();  
         if ( !val )  
                 obuf = 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);  
         ox_send_data(0,str);  
 }  
   
 static void asir_pops()  
 {  
         int n;  
   
         n = (int)(((USINT)asir_pop_one())->body);  
         plot_OperandStackPtr = MAX(plot_OperandStackPtr-n,-1);  
 }  
   
 static void asir_setName(unsigned int serial)  
 {  
         char *name;  
         int l,n;  
         char *dummy = "=0;";  
         SNODE snode;  
         ERR err;  
   
         name = ((STRING)asir_pop_one())->body;  
         l = strlen(name);  
         n = l+strlen(dummy)+1;  
         parse_strp = (char *)ALLOCA(n);  
         sprintf(parse_strp,"%s%s",name,dummy);  
         if ( mainparse(&snode) ) {  
                 create_error(&err,serial,"cannot set to variable");  
                 asir_push_one((Obj)err);  
         } else {  
                 FA1((FNODE)FA0(snode)) = (pointer)mkfnode(1,I_FORMULA,asir_pop_one());  
                 evalstat(snode);  
         }  
 }  
   
 static void asir_evalName(unsigned int serial)  
 {  
         char *name;  
         int l,n;  
         SNODE snode;  
         ERR err;  
         pointer val;  
   
         name = ((STRING)asir_pop_one())->body;  
         l = strlen(name);  
         n = l+2;  
         parse_strp = (char *)ALLOCA(n);  
         sprintf(parse_strp,"%s;",name);  
         if ( mainparse(&snode) ) {  
                 create_error(&err,serial,"no such variable");  
                 val = (pointer)err;  
         } else  
                 val = evalstat(snode);  
         asir_push_one(val);  
 }  
   
 static int asir_executeString()  
 {  
         SNODE snode;  
         pointer val;  
         char *cmd;  
 #if PARI  
         recover(0);  
         if ( setjmp(environnement) ) {  
                 avma = top; recover(1);  
                 resetenv("");  
         }  
 #endif  
         cmd = ((STRING)asir_pop_one())->body;  
         parse_strp = cmd;  
         if ( mainparse(&snode) ) {  
                 return -1;  
         }  
         val = evalstat(snode);  
         if ( NEXT(asir_infile) ) {  
                 while ( NEXT(asir_infile) ) {  
                         if ( mainparse(&snode) ) {  
                                 asir_push_one(val);  
                                 return -1;  
                         }  
                         nextbp = 0;  
                         val = evalstat(snode);  
                 }  
         }  
         asir_push_one(val);  
         return 0;  
 }  
   
 static void asir_executeFunction()  
 {  
         char *func;  
         int argc;  
         int id;  
         FUNC f;          FUNC f;
         Q ret;          Q ret;
         VL vl;          VL vl;
           ERR err;
         NODE n,n1;          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 )          if(n)NEXT(n1)=0;
                 NEXT(n1) = 0;          id=-1;
         id = -1;          fno=modeNO(fn);
         if ( !strcmp(func,"plot") )          switch (fno){
                 id = plot(n);          case 0://IFPLOTD
         else if ( !strcmp(func,"arrayplot") )                  id=plot(n,IFPLOT);
                 id = arrayplot(n);                  STOQ(id,ret);
         else if ( !strcmp(func,"plotover") )                  asir_push_one((Obj)ret);
                 id = plotover(n);                  break;
         else if ( !strcmp(func,"drawcircle") )          case 1://CONPLOT
                 id = drawcircle(n);                  id=plot(n,CONPLOT);
         STOQ(id,ret);                  STOQ(id,ret);
 #if 0                  asir_push_one((Obj)ret);
         asir_push_one((Obj)ret);          case 2://PLOT
 #endif                  id=plot(n,PLOT);
 }                  STOQ(id,ret);
                   asir_push_one((Obj)ret);
 static void asir_end_flush()                  break;
 {          case 4://POLARPLOT
         ox_flushing = 0;                  id=polarplotNG(n);
 }                  STOQ(id,ret);
                   asir_push_one((Obj)ret);
 static void asir_push_one(Obj obj)                  break;
 {          case 30://MEMORY_PLOT
         if ( !obj || OID(obj) != O_VOID ) {                  memory_plot(n,&bytes);
                 plot_OperandStackPtr++;                  asir_push_one((Obj)bytes);
                 if ( plot_OperandStackPtr >= plot_OperandStackSize ) {                  break;
                         plot_OperandStackSize += BUFSIZ;          case 31://ARRAYPLOT
                         plot_OperandStack                  id=arrayplot(n);
                                 = (Obj *)REALLOC(plot_OperandStack,                  STOQ(id,ret);
                                         plot_OperandStackSize*sizeof(Obj));                  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);
                 }                  }
                 plot_OperandStack[plot_OperandStackPtr] = obj;                  break;
         }          case 37://CLEAR_CANVAS
 }                  clear_canvas(n);
                   break;
 static LIST asir_GetErrorList()  #if defined(INTERVAL)
 {  // ifplotNG
         int i;          case 36://OBJ_CP
         NODE n,n0;                  id=objcp(n);
         LIST err;                  STOQ(id,ret);
         Obj obj;                  asir_push_one((Obj)ret);
                   break;
         for ( i = 0, n0 = 0; i <= plot_OperandStackPtr; i++ )          case 6://IFPLOTD
                 if ( (obj = plot_OperandStack[i]) && (OID(obj) == O_ERR) ) {          case 7://IFPLOTQ
                         NEXTNODE(n0,n); BDY(n) = (pointer)obj;          case 8://IFPLOTB
                 }          case 9://INEQND
         if ( n0 )          case 10://INEQNQ
                 NEXT(n) = 0;          case 11://INEQNB
         MKLIST(err,n0);          case 21://CONPLOTD
         return err;          case 22://CONPLOTQ
 }          case 23://CONPLOTB
           case 24://ITVIFPLOT
 static Obj asir_pop_one() {                  id=ifplotNG(n,modeNO(fn));
         if ( plot_OperandStackPtr < 0 ) {                  STOQ(id,ret);
                 if ( do_message )                  asir_push_one((Obj)ret);
                         fprintf(stderr,"OperandStack underflow");                  break;
                 return 0;          case 12://INEQNDAND
         } else {          case 13://INEQNQAND
                 if ( do_message )          case 14://INEQNBAND
                         fprintf(stderr,"pop at %d\n",plot_OperandStackPtr);          case 15://INEQNDOR
                 return plot_OperandStack[plot_OperandStackPtr--];          case 16://INEQNQOR
         }          case 17://INEQNBOR
 }          case 18://INEQNDXOR
           case 19://INEQNQXOR
 static void ox_asir_init(int argc,char **argv)          case 20://INEQNBXOR
 {          case 25://PLOTOVERD
         int tmp;          case 26://PLOTOVERQ
         char ifname[BUFSIZ];          case 27://PLOTOVERB
         extern int GC_dont_gc;                  id=ifplotOP(n,modeNO(fn));
         extern int read_exec_file;                  STOQ(id,ret);
         extern int do_asirrc;                  asir_push_one((Obj)ret);
         extern int do_server_in_X11;                  break;
         char *getenv();  
         static ox_asir_initialized = 0;  
         FILE *ifp;  
   
         do_server_in_X11 = 1; /* XXX */  
         asir_save_handler();  
 #if PARI  
         risa_pari_init();  
 #endif  #endif
         srandom((int)get_current_time());  
   
 #if defined(THINK_C)  
         param_init();  
 #endif  
         StackBottom = &tmp + 1; /* XXX */  
         rtime_init();  
         env_init();  
         endian_init();  
 #if !defined(VISUAL) && !defined(THINK_C)  
 /*      check_key(); */  
 #endif  
         GC_init();  
         process_args(--argc,++argv);  
 #if 0  
         copyright();  
 #endif  
         output_init();  
         arf_init();  
         nglob_init();  
         glob_init();  
         sig_init();  
         tty_init();  
         debug_init();  
         pf_init();  
         sysf_init();  
         parif_init();  
 #if defined(VISUAL)  
         init_socket();  
 #endif  
 #if defined(UINIT)  
         reg_sysf();  
 #endif  
 #if defined(THINK_C)  
         sprintf(ifname,"asirrc");  
 #else  
         sprintf(ifname,"%s/.asirrc",getenv("HOME"));  
 #endif  
         if ( do_asirrc && (ifp = fopen(ifname,"r")) ) {  
                 input_init(ifp,ifname);  
                 if ( !setjmp(env) ) {  
                         read_exec_file = 1;  
                         read_eval_loop();  
                         read_exec_file = 0;  
                 }  
                 fclose(ifp);  
         }          }
         input_init(0,"string");  
         ox_io_init();  
         create_my_mathcap("ox_plot");  
 }  
   
 static void ox_io_init() {  
         unsigned char c,rc;  
         extern int little_endian;  
   
         endian_init();  
         iofp[0].in = fdopen(3,"r");  
         iofp[0].out = fdopen(4,"w");  
         setbuffer(iofp[0].in,(char *)malloc(LBUFSIZ),LBUFSIZ);  
         setbuffer(iofp[0].out,(char *)malloc(LBUFSIZ),LBUFSIZ);  
         plot_OperandStackSize = BUFSIZ;  
         plot_OperandStack = (Obj *)CALLOC(plot_OperandStackSize,sizeof(Obj));  
         plot_OperandStackPtr = -1;  
         signal(SIGUSR1,ox_usr1_handler);  
         if ( little_endian )  
                 c = 1;  
         else  
                 c = 0xff;  
         write_char(iofp[0].out,&c); ox_flush_stream(0);  
         read_char(iofp[0].in,&rc);  
         iofp[0].conv = c == rc ? 0 : 1;  
 }  }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.25

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