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

Diff for /OpenXM_contrib2/asir2000/io/ox.c between version 1.27 and 1.41

version 1.27, 2006/02/08 02:11:19 version 1.41, 2018/03/12 02:37:08
Line 44 
Line 44 
  * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY   * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
  * 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/io/ox.c,v 1.26 2004/12/17 03:09:08 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/ox.c,v 1.40 2017/08/30 09:40:30 ohara Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 82  struct mathcap {
Line 82  struct mathcap {
         unsigned int *smcap;          unsigned int *smcap;
         int noxcap;          int noxcap;
         struct oxcap *oxcap;          struct oxcap *oxcap;
     int no_ox_reset;
 };  };
   
 struct oxcap *my_oxcap;  struct oxcap *my_oxcap;
Line 91  static struct mathcap *remote_mc;
Line 92  static struct mathcap *remote_mc;
 static int remote_mc_len;  static int remote_mc_len;
   
 void mclist_to_mc(LIST mclist,struct mathcap *mc);  void mclist_to_mc(LIST mclist,struct mathcap *mc);
   Obj asir_pop_one();
   void asir_push_one(Obj);
   
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
 /* XXX : mainly used in engine2000/io.c, but declared here */  /* XXX : mainly used in engine2000/io.c, but declared here */
   typedef void *HANDLE;
 HANDLE hStreamNotify,hStreamNotify_Ack;  HANDLE hStreamNotify,hStreamNotify_Ack;
   
 void cleanup_events()  void cleanup_events()
Line 105  void cleanup_events()
Line 109  void cleanup_events()
 }  }
 #endif  #endif
   
   /* 1 if no_ox_reset, 0 if ox_reset OK, -1 if invalid */
   int no_ox_reset(int s)
   {
     if ( remote_mc && s >= 0 && s < remote_mc_len )
       return remote_mc[s].no_ox_reset;
     else
       return -1;
   }
   
 void ox_resetenv(char *s)  void ox_resetenv(char *s)
 {  {
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
         cleanup_events();          cleanup_events();
 #endif  #endif
         fprintf(stderr,"%s\n",s);          fprintf(stderr,"%s\n",s);
Line 123  static int available_cmo[] = {
Line 136  static int available_cmo[] = {
     CMO_RATIONAL,      CMO_RATIONAL,
         CMO_RECURSIVE_POLYNOMIAL, CMO_UNIVARIATE_POLYNOMIAL,          CMO_RECURSIVE_POLYNOMIAL, CMO_UNIVARIATE_POLYNOMIAL,
         CMO_INDETERMINATE,          CMO_INDETERMINATE,
         CMO_TREE,          CMO_TREE, CMO_BIGFLOAT32, CMO_COMPLEX,
         0          0
 };  };
   
Line 145  static int ox_asir_available_sm[] = {
Line 158  static int ox_asir_available_sm[] = {
         SM_executeStringByLocalParserInBatchMode,          SM_executeStringByLocalParserInBatchMode,
         SM_executeFunction, SM_shutdown, SM_pops,          SM_executeFunction, SM_shutdown, SM_pops,
         SM_mathcap, SM_setMathcap, SM_nop,          SM_mathcap, SM_setMathcap, SM_nop,
         SM_beginBlock, SM_endBlock,          SM_beginBlock, SM_endBlock,  SM_executeFunctionSync,
         SM_set_rank_102, SM_tcp_accept_102, SM_tcp_connect_102, SM_reset_102,          SM_set_rank_102, SM_tcp_accept_102, SM_tcp_connect_102, SM_reset_102,
         SM_bcast_102, SM_reduce_102,          SM_bcast_102, SM_reduce_102,
         0          0
Line 297  void mclist_to_mc(LIST mclist,struct mathcap *mc)
Line 310  void mclist_to_mc(LIST mclist,struct mathcap *mc)
                                 [o2,[n21,n22,...]],                                  [o2,[n21,n22,...]],
                                 ...                                  ...
                         ]                          ]
         (optional)[s1,s2,...] (no_ox_reset)
                 ]                  ]
         */          */
         n = BDY(mclist);          n = BDY(mclist);
Line 329  void mclist_to_mc(LIST mclist,struct mathcap *mc)
Line 343  void mclist_to_mc(LIST mclist,struct mathcap *mc)
                 for ( t = cap, ptr = mc->oxcap[j].cap, i = 0; i < l; t = NEXT(t), i++ )                  for ( t = cap, ptr = mc->oxcap[j].cap, i = 0; i < l; t = NEXT(t), i++ )
                         ptr[i] = BDY((USINT)BDY(t));                          ptr[i] = BDY((USINT)BDY(t));
         }          }
     /* check of no_ox_reset */
     mc->no_ox_reset = 0;
           n = BDY(mclist);
     if ( length(n) >= 4 ) {
             t = BDY((LIST)ARG3(n));
       for ( ; t; t = NEXT(t) )
         if ( !strcmp(BDY((STRING)BDY(t)),"no_ox_reset") )
           mc->no_ox_reset = 1;
     }
 }  }
   
 int check_sm_by_mc(int s,unsigned int smtag)  int check_sm_by_mc(int s,unsigned int smtag)
Line 393  void end_critical() {
Line 416  void end_critical() {
         critical_when_signal = 0;          critical_when_signal = 0;
         if ( ox_usr1_sent ) {          if ( ox_usr1_sent ) {
                 ox_usr1_sent = 0;                  ox_usr1_sent = 0;
 #if !defined(VISUAL)  #if !defined(VISUAL) && !defined(__MINGW32__)
         ox_usr1_handler(SIGUSR1);          ox_usr1_handler(SIGUSR1);
 #else  #else
         ox_usr1_handler(0);          ox_usr1_handler(0);
Line 405  void end_critical() {
Line 428  void end_critical() {
 }  }
   
 extern NODE user_int_handler;  extern NODE user_int_handler;
   extern int caught_intr,in_gc;
   
 void ox_usr1_handler(int sig)  void ox_usr1_handler(int sig)
 {  {
         NODE t;          NODE t;
   
 #if !defined(VISUAL)  #if !defined(VISUAL) && !defined(__MINGW32__)
         signal(SIGUSR1,ox_usr1_handler);          set_signal_for_restart(SIGUSR1,ox_usr1_handler);
 #endif  #endif
         if ( critical_when_signal ) {          if ( critical_when_signal ) {
                 fprintf(stderr,"usr1 : critical\n");                  fprintf(stderr,"usr1 : critical\n");
                 ox_usr1_sent = 1;                  ox_usr1_sent = 1;
       } else if ( in_gc ) {
                   fprintf(stderr,"usr1 : in_gc\n");
                   caught_intr = 2;
         } else {          } else {
                 ox_flushing = 1;                  ox_flushing = 1;
                 if ( user_int_handler ) {                  if ( user_int_handler ) {
Line 425  void ox_usr1_handler(int sig)
Line 452  void ox_usr1_handler(int sig)
                                 bevalf((FUNC)BDY(t),0);                                  bevalf((FUNC)BDY(t),0);
                         fprintf(stderr, "done.\n");                          fprintf(stderr, "done.\n");
                 }                  }
                   LEAVE_SIGNAL_CS_ALL;
                 ox_resetenv("usr1 : return to toplevel by SIGUSR1");                  ox_resetenv("usr1 : return to toplevel by SIGUSR1");
         }          }
 }  }
Line 462  void wait_for_data(int s)
Line 490  void wait_for_data(int s)
 {  {
         return;          return;
 }  }
   
   void wait_for_data_102(int rank)
   {
           return;
   }
 #else  #else
 int ox_data_is_available(int s)  int ox_data_is_available(int s)
 {  {
Line 474  void wait_for_data(int s)
Line 507  void wait_for_data(int s)
         int sock;          int sock;
   
         if ( !FP_DATA_IS_AVAILABLE(iofp[s].in) ) {          if ( !FP_DATA_IS_AVAILABLE(iofp[s].in) ) {
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
                 sock = iofp[s].in->fildes;                  sock = iofp[s].in->fildes;
                 FD_ZERO(&r);                  FD_ZERO(&r);
                 FD_SET((unsigned int)sock,&r);                  FD_SET((unsigned int)sock,&r);
Line 494  void wait_for_data_102(int rank)
Line 527  void wait_for_data_102(int rank)
         int sock;          int sock;
   
         if ( !FP_DATA_IS_AVAILABLE(iofp_102[rank].in) ) {          if ( !FP_DATA_IS_AVAILABLE(iofp_102[rank].in) ) {
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
                 sock = iofp_102[rank].in->fildes;                  sock = iofp_102[rank].in->fildes;
                 FD_ZERO(&r);                  FD_ZERO(&r);
                 FD_SET((unsigned int)sock,&r);                  FD_SET((unsigned int)sock,&r);
Line 512  void wait_for_data_102(int rank)
Line 545  void wait_for_data_102(int rank)
 void ox_send_data(int s,pointer p)  void ox_send_data(int s,pointer p)
 {  {
         ERR err;          ERR err;
       Obj p0;
   
       p0 = (Obj)p;
         if ( ox_check && !ox_check_cmo(s,(Obj)p) ) {          if ( ox_check && !ox_check_cmo(s,(Obj)p) ) {
                 create_error(&err,ox_serial,"ox_send_data : Mathcap violation",0);                  create_error(&err,ox_serial,"ox_send_data : Mathcap violation",0);
                 p = (pointer)err;                  p = (pointer)err;
Line 867  int ox_check_cmo(int s, Obj obj)
Line 902  int ox_check_cmo(int s, Obj obj)
                                                 return check_by_mc(s,OX_DATA,CMO_ZZ);                                                  return check_by_mc(s,OX_DATA,CMO_ZZ);
                                         else                                          else
                                                 return check_by_mc(s,OX_DATA,CMO_QQ);                                                  return check_by_mc(s,OX_DATA,CMO_QQ);
                                 case N_R:                                  case N_R: case N_B: case N_C:
                                         return 1;                                          return 1;
                                 default:                                  default:
                                         return 0;                                          return 0;
Line 880  int ox_check_cmo(int s, Obj obj)
Line 915  int ox_check_cmo(int s, Obj obj)
                         return 1;                          return 1;
                 case O_QUOTE: /* XXX */                  case O_QUOTE: /* XXX */
                         return 1;                          return 1;
       case O_MAT: /* MAT is sent as a list */
                           return 1;
                 default:                  default:
                         return 0;                          return 0;
         }          }
Line 928  void ox_flush_stream(int s)
Line 965  void ox_flush_stream(int s)
 {  {
         if ( ox_batch )          if ( ox_batch )
                 return;                  return;
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
         if ( _fileno(&iofp[s].out->fp) < 0 )          if ( _fileno(&iofp[s].out->fp) < 0 )
                 cflush(iofp[s].out);                  cflush(iofp[s].out);
         else          else
Line 942  void ox_flush_stream(int s)
Line 979  void ox_flush_stream(int s)
   
 void ox_flush_stream_force(int s)  void ox_flush_stream_force(int s)
 {  {
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
         if ( _fileno(&iofp[s].out->fp) < 0 )          if ( _fileno(&iofp[s].out->fp) < 0 )
                 cflush(iofp[s].out);                  cflush(iofp[s].out);
         else          else
Line 963  void ox_flush_stream_102(int rank)
Line 1000  void ox_flush_stream_102(int rank)
 void ox_flush_stream_force_102(int rank)  void ox_flush_stream_force_102(int rank)
 {  {
         if ( iofp_102[rank].out )          if ( iofp_102[rank].out )
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
                 cflush(iofp_102[rank].out);                  cflush(iofp_102[rank].out);
 #elif MPI  #elif MPI
                 cflush(iofp_102[rank].out);                  cflush(iofp_102[rank].out);

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.41

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