[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.16 and 1.22

version 1.16, 2002/08/02 02:41:03 version 1.22, 2003/12/10 05:39:58
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.15 2002/08/02 02:28:27 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/ox.c,v 1.21 2003/12/09 03:07:45 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 56 
Line 56 
   
 extern Obj VOIDobj;  extern Obj VOIDobj;
   
   extern int nserver_102, myrank_102;
 extern int ox_need_conv;  extern int ox_need_conv;
 int ox_usr1_sent, ox_int_received, critical_when_signal;  int ox_usr1_sent, ox_int_received, critical_when_signal;
 unsigned int ox_serial;  unsigned int ox_serial;
Line 125  static int available_cmo[] = {
Line 126  static int available_cmo[] = {
         0          0
 };  };
   
   static int asir_available_sm[] = {
           SM_dupErrors, SM_getsp, SM_popSerializedLocalObject,
           SM_popCMO, SM_popString, SM_pushCMOtag, SM_setName,
           SM_evalName, SM_executeStringByLocalParser,
           SM_executeStringByLocalParserInBatchMode,
           SM_executeFunction, SM_shutdown, SM_pops,
           SM_mathcap, SM_setMathcap, SM_nop,
           SM_beginBlock, SM_endBlock,
           0
   };
   
 static int ox_asir_available_sm[] = {  static int ox_asir_available_sm[] = {
         SM_dupErrors, SM_getsp, SM_popSerializedLocalObject,          SM_dupErrors, SM_getsp, SM_popSerializedLocalObject,
         SM_popCMO, SM_popString, SM_pushCMOtag, SM_setName,          SM_popCMO, SM_popString, SM_pushCMOtag, SM_setName,
Line 133  static int ox_asir_available_sm[] = {
Line 145  static int ox_asir_available_sm[] = {
         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_set_rank_102, SM_tcp_accept_102, SM_tcp_connect_102, SM_reset_102,
         0          0
 };  };
   
Line 175  void create_my_mathcap(char *system)
Line 188  void create_my_mathcap(char *system)
   
         /* sm tag */          /* sm tag */
         n0 = 0;          n0 = 0;
         if ( !strcmp(system,"ox_asir") ) {          if ( !strcmp(system,"asir") ) {
                   for ( i = 0; k = asir_available_sm[i]; i++ ) {
                           NEXTNODE(n0,n); MKUSINT(t,k); BDY(n) = (pointer)t;
                   }
           } else if ( !strcmp(system,"ox_asir") ) {
                 for ( i = 0; k = ox_asir_available_sm[i]; i++ ) {                  for ( i = 0; k = ox_asir_available_sm[i]; i++ ) {
                         NEXTNODE(n0,n); MKUSINT(t,k); BDY(n) = (pointer)t;                          NEXTNODE(n0,n); MKUSINT(t,k); BDY(n) = (pointer)t;
                 }                  }
Line 385  void end_critical() {
Line 402  void end_critical() {
         }          }
 }  }
   
   extern FUNC registered_handler;
   
 void ox_usr1_handler(int sig)  void ox_usr1_handler(int sig)
 {  {
 #if !defined(VISUAL)  #if !defined(VISUAL)
Line 395  void ox_usr1_handler(int sig)
Line 414  void ox_usr1_handler(int sig)
                 ox_usr1_sent = 1;                  ox_usr1_sent = 1;
         } else {          } else {
                 ox_flushing = 1;                  ox_flushing = 1;
                   if ( registered_handler ) {
                           fprintf(stderr,
                                   "usr1 : calling the registered exception handler...");
                           bevalf(registered_handler,0);
                           fprintf(stderr, "done.\n");
                   }
                 ox_resetenv("usr1 : return to toplevel by SIGUSR1");                  ox_resetenv("usr1 : return to toplevel by SIGUSR1");
         }          }
 }  }
Line 457  void wait_for_data(int s)
Line 482  void wait_for_data(int s)
 #endif  #endif
         }          }
 }  }
   
   void wait_for_data_102(int rank)
   {
           fd_set r;
           int sock;
   
           if ( !FP_DATA_IS_AVAILABLE(iofp_102[rank].in) ) {
   #if defined(VISUAL)
                   sock = iofp_102[rank].in->fildes;
                   FD_ZERO(&r);
                   FD_SET((unsigned int)sock,&r);
                   select(0,&r,NULL,NULL,NULL);
   #else
                   sock = fileno(iofp_102[rank].in);
                   FD_ZERO(&r);
                   FD_SET(sock,&r);
                   select(FD_SETSIZE,&r,NULL,NULL,NULL);
 #endif  #endif
           }
   }
   #endif
   
 void ox_send_data(int s,pointer p)  void ox_send_data(int s,pointer p)
 {  {
Line 475  void ox_send_data(int s,pointer p)
Line 520  void ox_send_data(int s,pointer p)
         end_critical();          end_critical();
 }  }
   
   void ox_send_data_102(int rank,pointer p)
   {
           ERR err;
   
           begin_critical();
           ox_write_int_102(rank,OX_DATA);
           ox_write_int_102(rank,ox_serial++);
           ox_write_cmo_102(rank,p);
           ox_flush_stream_102(rank);
           end_critical();
   }
   
   void ox_bcast_102(int root,Obj *rp)
   {
           Obj data;
           int n,myr,r,mask,src,dst,id;
   
           data = *rp;
           n = nserver_102;
           myr = myrank_102;
           r = myr-root;
           if ( r < 0 ) r += n;
           for ( mask = 1; mask < n; mask <<= 1 )
                   if ( r&mask ) {
                           src = myr-mask;
                           if ( src < 0 ) src += n;
                           ox_recv_102(src,&id,&data);
                           break;
                   }
           for ( mask >>= 1; mask > 0; mask >>= 1 )
                   if ( (r+mask) < n ) {
                           dst = myr+mask;
                           if ( dst >= n ) dst -= n;
                           ox_send_data_102(dst,data);
                   }
           *rp = data;
   }
   
 void ox_send_cmd(int s,int id)  void ox_send_cmd(int s,int id)
 {  {
         if ( ox_check && !check_sm_by_mc(s,id) )          if ( ox_check && !check_sm_by_mc(s,id) )
Line 496  void ox_send_sync(int s)
Line 579  void ox_send_sync(int s)
         end_critical();          end_critical();
 }  }
   
   void ox_send_sync_102(int rank)
   {
           begin_critical();
           ox_write_int_102(rank,OX_SYNC_BALL);
           ox_write_int_102(rank,ox_serial++);
           ox_flush_stream_102(rank);
           end_critical();
   }
   
 void ox_send_local_data(int s,Obj p)  void ox_send_local_data(int s,Obj p)
 {  {
         begin_critical();          begin_critical();
Line 507  void ox_send_local_data(int s,Obj p)
Line 599  void ox_send_local_data(int s,Obj p)
         end_critical();          end_critical();
 }  }
   
   void ox_send_local_data_102(int rank,Obj p)
   {
           begin_critical();
           ox_write_int_102(rank,OX_LOCAL_OBJECT_ASIR);
           ox_write_int_102(rank,ox_serial++);
           ox_write_int_102(rank,ASIR_OBJ);
           saveobj((FILE *)iofp_102[rank].out,p);
           ox_flush_stream_102(rank);
           end_critical();
   }
   
 void ox_send_local_ring(int s,VL vl)  void ox_send_local_ring(int s,VL vl)
 {  {
         begin_critical();          begin_critical();
Line 518  void ox_send_local_ring(int s,VL vl)
Line 621  void ox_send_local_ring(int s,VL vl)
         end_critical();          end_critical();
 }  }
   
   void ox_send_local_ring_102(int rank,VL vl)
   {
           begin_critical();
           ox_write_int_102(rank,OX_LOCAL_OBJECT_ASIR);
           ox_write_int_102(rank,ox_serial++);
           ox_write_int_102(rank,ASIR_VL);
           savevl((FILE *)iofp_102[rank].out,vl);
           ox_flush_stream_102(rank);
           end_critical();
   }
   
 unsigned int ox_recv(int s, int *id, Obj *p)  unsigned int ox_recv(int s, int *id, Obj *p)
 {  {
         unsigned int cmd,serial;          unsigned int cmd,serial;
Line 547  unsigned int ox_recv(int s, int *id, Obj *p)
Line 661  unsigned int ox_recv(int s, int *id, Obj *p)
         return serial;          return serial;
 }  }
   
   unsigned int ox_recv_102(int rank, int *id, Obj *p)
   {
           unsigned int cmd,serial;
           USINT ui;
   
           wait_for_data_102(rank);
           begin_critical();
           ox_read_int_102(rank,id);
           ox_read_int_102(rank,&serial);
           switch ( *id ) {
                   case OX_COMMAND:
                           ox_read_int_102(rank,&cmd);
                           MKUSINT(ui,cmd);
                           *p = (Obj)ui;
                           break;
                   case OX_DATA:
                           ox_read_cmo_102(rank,p);
                           break;
                   case OX_LOCAL_OBJECT_ASIR:
                           ox_read_local_102(rank,p);
                           break;
                   default:
                           *p = 0;
                           break;
           }
           end_critical();
           return serial;
   }
   
 void ox_get_result(int s,Obj *rp)  void ox_get_result(int s,Obj *rp)
 {  {
         int id;          int id;
Line 577  void ox_read_int(int s, int *n)
Line 720  void ox_read_int(int s, int *n)
         read_int((FILE *)iofp[s].in,n);          read_int((FILE *)iofp[s].in,n);
 }  }
   
   void ox_read_int_102(int rank, int *n)
   {
           ox_need_conv = iofp_102[rank].conv;
           read_int((FILE *)iofp_102[rank].in,n);
   }
   
 void ox_read_cmo(int s, Obj *rp)  void ox_read_cmo(int s, Obj *rp)
 {  {
         ox_need_conv = iofp[s].conv;          ox_need_conv = iofp[s].conv;
         read_cmo((FILE *)iofp[s].in,rp);          read_cmo((FILE *)iofp[s].in,rp);
 }  }
   
   void ox_read_cmo_102(int rank, Obj *rp)
   {
           ox_need_conv = iofp_102[rank].conv;
           read_cmo((FILE *)iofp_102[rank].in,rp);
   }
   
   
 void ox_read_local(int s, Obj *rp)  void ox_read_local(int s, Obj *rp)
 {  {
         int id;          int id;
Line 603  void ox_read_local(int s, Obj *rp)
Line 759  void ox_read_local(int s, Obj *rp)
         }          }
 }  }
   
   void ox_read_local_102(int rank, Obj *rp)
   {
           int id;
   
           ox_need_conv = iofp_102[rank].conv;
           read_int((FILE *)iofp_102[rank].in,&id);
           switch ( id ) {
                   case ASIR_VL:
                           loadvl((FILE *)iofp_102[rank].in);
                           *rp = VOIDobj;
                           break;
                   case ASIR_OBJ:
                           loadobj((FILE *)iofp_102[rank].in,rp);
                           break;
                   default:
                           error("ox_read_local_102 : unsupported id");
                           break;
           }
   }
   
 void ox_write_int(int s, int n)  void ox_write_int(int s, int n)
 {  {
         ox_need_conv = iofp[s].conv;          ox_need_conv = iofp[s].conv;
         write_int((FILE *)iofp[s].out,&n);          write_int((FILE *)iofp[s].out,&n);
 }  }
   
   void ox_write_int_102(int rank, int n)
   {
           ox_need_conv = iofp_102[rank].conv;
           write_int((FILE *)iofp_102[rank].out,&n);
   }
   
 void ox_write_cmo(int s, Obj obj)  void ox_write_cmo(int s, Obj obj)
 {  {
         ox_need_conv = iofp[s].conv;          ox_need_conv = iofp[s].conv;
         write_cmo((FILE *)iofp[s].out,obj);          write_cmo((FILE *)iofp[s].out,obj);
 }  }
   
   void ox_write_cmo_102(int rank, Obj obj)
   {
           ox_need_conv = iofp_102[rank].conv;
           write_cmo((FILE *)iofp_102[rank].out,obj);
   }
   
 int ox_check_cmo(int s, Obj obj)  int ox_check_cmo(int s, Obj obj)
 {  {
         NODE m;          NODE m;
Line 731  void ox_flush_stream_force(int s)
Line 919  void ox_flush_stream_force(int s)
         else          else
 #endif  #endif
         fflush((FILE *)iofp[s].out);          fflush((FILE *)iofp[s].out);
   }
   
   void ox_flush_stream_102(int rank)
   {
           if ( !ox_batch )
                   ox_flush_stream_force_102(rank);
   }
   
   void ox_flush_stream_force_102(int rank)
   {
           if ( iofp_102[rank].out )
   #if defined(VISUAL)
                   cflush(iofp_102[rank].out);
   #elif MPI
                   cflush(iofp_102[rank].out);
   #else
                   fflush(iofp_102[rank].out);
   #endif
 }  }

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.22

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