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

Diff for /OpenXM_contrib2/asir2000/io/tcpf.c between version 1.3 and 1.8

version 1.3, 1999/12/21 04:20:42 version 1.8, 2000/07/13 05:09:03
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.2 1999/12/13 01:56:04 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.7 2000/03/19 12:35:20 noro Exp $ */
 #if INET  #if INET
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 31  static int m_c_i,m_c_s;
Line 31  static int m_c_i,m_c_s;
 #if MPI  #if MPI
 extern int mpi_nprocs;  extern int mpi_nprocs;
 #define valid_mctab_index(ind)\  #define valid_mctab_index(ind)\
 if((ind)<0||(ind)>=(mpi_nprocs-1)){error("invalid server id");}  if((ind)<0||(ind)>=mpi_nprocs){error("invalid server id");}
 #else  #else
 #define valid_mctab_index(ind)\  #define valid_mctab_index(ind)\
 if((ind)<0||(ind)>=m_c_i||\  if((ind)<0||(ind)>=m_c_i||\
 (!m_c_tab[ind].m&&!m_c_tab[ind].c)){error("invalid server id");}  ((m_c_tab[ind].m<0)&&(m_c_tab[ind].c<0))){error("invalid server id");}
 #endif  #endif
   
 int register_server();  int register_server();
 int get_mcindex(int);  int get_mcindex(int);
   
   void Pox_send_raw_cmo(), Pox_recv_raw_cmo();
   
 void Pox_launch(),Pox_launch_nox(),Pox_launch_main();  void Pox_launch(),Pox_launch_nox(),Pox_launch_main();
 void Pox_launch_generic();  void Pox_launch_generic();
 void Pox_shutdown();  void Pox_shutdown();
   
 void Pox_rpc(),Pox_cmo_rpc(),Pox_reset(),Pox_sync(),Pox_select();  void Pox_rpc(),Pox_cmo_rpc(),Pox_reset(),Pox_intr(),Pox_sync(),Pox_select();
   
 void Pox_push_local(),Pox_push_cmo(),Pox_push_vl(),Pox_push_cmd();  void Pox_push_local(),Pox_push_cmo(),Pox_push_vl(),Pox_push_cmd();
   
Line 60  void Pox_flush();
Line 62  void Pox_flush();
 void Pgenerate_port(),Ptry_bind_listen(),Ptry_connect(),Ptry_accept();  void Pgenerate_port(),Ptry_bind_listen(),Ptry_connect(),Ptry_accept();
 void Pregister_server();  void Pregister_server();
 void Pox_get_serverinfo();  void Pox_get_serverinfo();
   void Pox_mpi_myid(), Pox_mpi_nprocs();
   
 void ox_launch_generic();  void ox_launch_generic();
   
 pointer bevalf();  pointer bevalf();
   
 struct ftab tcp_tab[] = {  struct ftab tcp_tab[] = {
           {"ox_send_raw_cmo",Pox_send_raw_cmo,2},
           {"ox_recv_raw_cmo",Pox_recv_raw_cmo,1},
         {"ox_get_serverinfo",Pox_get_serverinfo,-1},          {"ox_get_serverinfo",Pox_get_serverinfo,-1},
         {"generate_port",Pgenerate_port,-1},          {"generate_port",Pgenerate_port,-1},
         {"try_bind_listen",Ptry_bind_listen,1},          {"try_bind_listen",Ptry_bind_listen,1},
Line 82  struct ftab tcp_tab[] = {
Line 87  struct ftab tcp_tab[] = {
         {"ox_cmo_rpc",Pox_cmo_rpc,-99999999},          {"ox_cmo_rpc",Pox_cmo_rpc,-99999999},
   
         {"ox_sync",Pox_sync,1},          {"ox_sync",Pox_sync,1},
   #if MPI
           {"ox_mpi_myid",Pox_mpi_myid,0},
           {"ox_mpi_nprocs",Pox_mpi_nprocs,0},
   #endif
 #if !MPI  #if !MPI
         {"ox_reset",Pox_reset,-2},          {"ox_reset",Pox_reset,-2},
           {"ox_intr",Pox_intr,1},
         {"ox_select",Pox_select,-2},          {"ox_select",Pox_select,-2},
 #endif  #endif
   
Line 113  struct ftab tcp_tab[] = {
Line 123  struct ftab tcp_tab[] = {
   
 extern struct IOFP iofp[];  extern struct IOFP iofp[];
 extern MATHCAP my_mathcap;  extern MATHCAP my_mathcap;
   extern int ox_exchange_mathcap;
   
 char *getenv();  char *getenv();
   
   #if MPI
   extern int mpi_myid, mpi_nprocs;
   
   void Pox_mpi_myid(rp)
   Q *rp;
   {
           STOQ(mpi_myid,*rp);
   }
   
   void Pox_mpi_nprocs(rp)
   Q *rp;
   {
           STOQ(mpi_nprocs,*rp);
   }
   #endif
   
 void Pox_get_serverinfo(arg,rp)  void Pox_get_serverinfo(arg,rp)
 NODE arg;  NODE arg;
 LIST *rp;  LIST *rp;
Line 127  LIST *rp;
Line 154  LIST *rp;
   
         if ( !arg ) {          if ( !arg ) {
                 for ( i = 0, n0 = 0; i < m_c_i; i++ )                  for ( i = 0, n0 = 0; i < m_c_i; i++ )
                         if ( m_c_tab[i].m || m_c_tab[i].c ) {                          if ( (m_c_tab[i].m>=0) || (m_c_tab[i].c>=0) ) {
                                 c = m_c_tab[i].c;                                  c = m_c_tab[i].c;
                                 ox_get_serverinfo(c,&list);                                  ox_get_serverinfo(c,&list);
                                 STOQ(i,sid);                                  STOQ(i,sid);
Line 141  LIST *rp;
Line 168  LIST *rp;
                 MKLIST(*rp,n0);                  MKLIST(*rp,n0);
         } else {          } else {
                 i = QTOS((Q)ARG0(arg));                  i = QTOS((Q)ARG0(arg));
                 if ( i >= 0 && i < m_c_i && (m_c_tab[i].m || m_c_tab[i].c) )                  if ( i >= 0 && i < m_c_i && ((m_c_tab[i].m>=0) || (m_c_tab[i].c>=0)) )
                         ox_get_serverinfo(m_c_tab[i].c,rp);                          ox_get_serverinfo(m_c_tab[i].c,rp);
                 else {                  else {
                         MKLIST(*rp,0);                          MKLIST(*rp,0);
Line 282  Q *rp;
Line 309  Q *rp;
         /* register server to the server list */          /* register server to the server list */
         ind = register_server(use_unix,cn,sn);          ind = register_server(use_unix,cn,sn);
   
         /* request remote mathcap */          if ( ox_exchange_mathcap ) {
         ox_send_cmd(sn,SM_mathcap);                  /* request remote mathcap */
         ox_send_cmd(sn,SM_popCMO);                  ox_send_cmd(sn,SM_mathcap);
         ox_flush_stream_force(sn);                  ox_send_cmd(sn,SM_popCMO);
         ox_recv(sn,&id,&server_mathcap);                  ox_flush_stream_force(sn);
         store_remote_mathcap(sn,server_mathcap);                  ox_recv(sn,&id,&server_mathcap);
                   store_remote_mathcap(sn,server_mathcap);
         /* send my mathcap */  
         create_my_mathcap("asir");                  /* send my mathcap */
         ox_send_data(sn,my_mathcap);                  create_my_mathcap("asir");
         ox_send_cmd(sn,SM_setMathcap);                  ox_send_data(sn,my_mathcap);
                   ox_send_cmd(sn,SM_setMathcap);
           }
         /* return the server id */          /* return the server id */
         STOQ(ind,*rp);          STOQ(ind,*rp);
 }  }
Line 370  Q *rp;
Line 398  Q *rp;
         /* register server to the server list */          /* register server to the server list */
         ind = register_server(use_unix,cn,sn);          ind = register_server(use_unix,cn,sn);
   
         /* request remote mathcap */          if ( ox_exchange_mathcap ) {
         ox_send_cmd(sn,SM_mathcap);                  /* request remote mathcap */
         ox_send_cmd(sn,SM_popCMO);                  ox_send_cmd(sn,SM_mathcap);
         ox_flush_stream_force(sn);                  ox_send_cmd(sn,SM_popCMO);
         ox_recv(sn,&id,&server_mathcap);                  ox_flush_stream_force(sn);
         store_remote_mathcap(sn,server_mathcap);                  ox_recv(sn,&id,&server_mathcap);
                   store_remote_mathcap(sn,server_mathcap);
         /* send my mathcap */  
         create_my_mathcap("asir");                  /* send my mathcap */
         ox_send_data(sn,my_mathcap);                  create_my_mathcap("asir");
         ox_send_cmd(sn,SM_setMathcap);                  ox_send_data(sn,my_mathcap);
                   ox_send_cmd(sn,SM_setMathcap);
           }
         /* return the server id */          /* return the server id */
         STOQ(ind,*rp);          STOQ(ind,*rp);
 }  }
Line 401  char *control_port_str,*server_port_str;
Line 430  char *control_port_str,*server_port_str;
         conn_str = conn_to_serv ? "1" : "0";          conn_str = conn_to_serv ? "1" : "0";
         rsh = use_ssh ? "ssh" : RSH;          rsh = use_ssh ? "ssh" : RSH;
         gethostname(localhost,BUFSIZ);          gethostname(localhost,BUFSIZ);
   #if !defined(VISUAL)
         if ( use_unix ) {          if ( use_unix ) {
                 if ( !fork() ) {                  if ( !fork() ) {
                         setpgid(0,getpid());                          setpgid(0,getpid());
Line 426  char *control_port_str,*server_port_str;
Line 456  char *control_port_str,*server_port_str;
                 fprintf(stderr,"%s\n",cmd);                  fprintf(stderr,"%s\n",cmd);
                 sleep(20);                  sleep(20);
 /*              system(cmd); */  /*              system(cmd); */
         } else {          } else
   #endif /* VISUAL */
           {
                 if ( dname )                  if ( dname )
                         sprintf(cmd,                          sprintf(cmd,
                                 "%s -n %s \"xterm -name %s -display %s -geometry 60x10 -e %s %s %s %s %s %s %s>&/dev/null&\">/dev/null",                                  "%s -n %s \"xterm -name %s -display %s -geometry 60x10 -e %s %s %s %s %s %s %s>&/dev/null&\">/dev/null",
Line 521  int af_unix,m,c;
Line 553  int af_unix,m,c;
                 return -1;                  return -1;
         if ( !m_c_tab ) {          if ( !m_c_tab ) {
                 s = BUFSIZ*sizeof(struct m_c);                  s = BUFSIZ*sizeof(struct m_c);
                 m_c_tab = (struct m_c *)MALLOC_ATOMIC(s); bzero(m_c_tab,s);                  m_c_tab = (struct m_c *)MALLOC_ATOMIC(s);
                   for ( i = 0; i < BUFSIZ; i++ ) {
                           m_c_tab[i].af_unix = 0;
                           m_c_tab[i].m = m_c_tab[i].c = -1;
                   }
                 m_c_s = BUFSIZ;                  m_c_s = BUFSIZ;
         }          }
 #if !MPI  #if !MPI
         for ( i = 0; i < m_c_i; i++ )          for ( i = 0; i < m_c_i; i++ )
                 if ( !m_c_tab[i].m && !m_c_tab[i].c )                  if ( (m_c_tab[i].m<0) && (m_c_tab[i].c<0) )
                         break;                          break;
         if ( i < m_c_i ) {          if ( i < m_c_i ) {
                 m_c_tab[i].m = m; m_c_tab[i].c = c;                  m_c_tab[i].m = m; m_c_tab[i].c = c;
Line 538  int af_unix,m,c;
Line 574  int af_unix,m,c;
                 s = (m_c_s+BUFSIZ)*sizeof(struct m_c);                  s = (m_c_s+BUFSIZ)*sizeof(struct m_c);
                 t = (struct m_c *)MALLOC_ATOMIC(s); bzero(m_c_tab,s);                  t = (struct m_c *)MALLOC_ATOMIC(s); bzero(m_c_tab,s);
                 bcopy(m_c_tab,t,m_c_s*sizeof(struct m_c));                  bcopy(m_c_tab,t,m_c_s*sizeof(struct m_c));
                   for ( i = 0; i < BUFSIZ; i++ ) {
                           m_c_tab[m_c_s+i].af_unix = 0;
                           m_c_tab[m_c_s+i].m = m_c_tab[m_c_s+i].c = -1;
                   }
                 m_c_s += BUFSIZ; m_c_tab = t;                  m_c_s += BUFSIZ; m_c_tab = t;
         }          }
         m_c_tab[m_c_i].m = m; m_c_tab[m_c_i].c = c;          m_c_tab[m_c_i].m = m; m_c_tab[m_c_i].c = c;
Line 610  Q *rp;
Line 650  Q *rp;
         *rp = ONE;          *rp = ONE;
 }  }
   
   void Pox_send_raw_cmo(arg,rp)
   NODE arg;
   Obj *rp;
   {
           int s;
           int index = QTOS((Q)ARG0(arg));
   
           valid_mctab_index(index);
           s = m_c_tab[index].c;
           ox_write_cmo(s,(Obj)ARG1(arg));
           /* flush always */
           ox_flush_stream(s);
           *rp = 0;
   }
   
   void Pox_recv_raw_cmo(arg,rp)
   NODE arg;
   Obj *rp;
   {
           int s;
           int index = QTOS((Q)ARG0(arg));
   
           valid_mctab_index(index);
           s = m_c_tab[index].c;
           ox_read_cmo(s,rp);
   }
   
 void Pox_push_local(arg,rp)  void Pox_push_local(arg,rp)
 NODE arg;  NODE arg;
 Obj *rp;  Obj *rp;
Line 921  Q *rp;
Line 988  Q *rp;
                 *rp = 0;                  *rp = 0;
 }  }
   
   void Pox_intr(arg,rp)
   NODE arg;
   Q *rp;
   {
           int m;
           Obj obj;
           int index = QTOS((Q)ARG0(arg));
   
           valid_mctab_index(index);
           m = m_c_tab[index].m;
           if ( m >= 0 ) {
                   if ( argc(arg) == 1 ) {
                           ox_send_cmd(m,SM_control_intr);
                           ox_flush_stream_force(m);
                   }
                   *rp = ONE;
           } else
                   *rp = 0;
   }
   
 void Pox_sync(arg,rp)  void Pox_sync(arg,rp)
 NODE arg;  NODE arg;
 Q *rp;  Q *rp;
Line 950  Q *rp;
Line 1037  Q *rp;
         if ( m_c_tab[index].af_unix )          if ( m_c_tab[index].af_unix )
                 wait(&status);                  wait(&status);
 #endif  #endif
         m_c_tab[index].m = 0; m_c_tab[index].c = 0;          m_c_tab[index].m = -1; m_c_tab[index].c = -1;
         m_c_tab[index].af_unix = 0;          m_c_tab[index].af_unix = 0;
         *rp = 0;          *rp = 0;
 }  }
Line 959  void Pox_push_cmd(arg,rp)
Line 1046  void Pox_push_cmd(arg,rp)
 NODE arg;  NODE arg;
 Q *rp;  Q *rp;
 {  {
         unsigned int ui;          int ui;
         int index = QTOS((Q)ARG0(arg));          int index = QTOS((Q)ARG0(arg));
   
         valid_mctab_index(index);          valid_mctab_index(index);
         ui = (unsigned int)QTOS((Q)ARG1(arg));          ui = QTOS((Q)ARG1(arg));
         ox_send_cmd(m_c_tab[index].c,ui);          ox_send_cmd(m_c_tab[index].c,ui);
         *rp = 0;          *rp = 0;
 }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.8

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