=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/tcpf.c,v retrieving revision 1.32 retrieving revision 1.39 diff -u -p -r1.32 -r1.39 --- OpenXM_contrib2/asir2000/io/tcpf.c 2002/07/29 05:02:45 1.32 +++ OpenXM_contrib2/asir2000/io/tcpf.c 2003/03/07 06:39:57 1.39 @@ -44,7 +44,7 @@ * 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/io/tcpf.c,v 1.31 2002/04/01 08:20:26 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.38 2003/03/07 03:12:28 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -79,7 +79,7 @@ static struct m_c { static int m_c_i,m_c_s; int I_am_server; -#if MPI +#if defined(MPI) extern int mpi_nprocs; #define valid_mctab_index(ind)\ if((ind)<0||(ind)>=mpi_nprocs){error("invalid server id");} @@ -143,11 +143,11 @@ struct ftab tcp_tab[] = { {"ox_cmo_rpc",Pox_cmo_rpc,-99999999}, {"ox_sync",Pox_sync,1}, -#if MPI +#if defined(MPI) {"ox_mpi_myid",Pox_mpi_myid,0}, {"ox_mpi_nprocs",Pox_mpi_nprocs,0}, #endif -#if !MPI +#if !defined(MPI) {"ox_reset",Pox_reset,-2}, {"ox_intr",Pox_intr,1}, {"ox_select",Pox_select,-2}, @@ -183,7 +183,7 @@ extern int ox_exchange_mathcap; char *getenv(); -#if MPI +#if defined(MPI) extern int mpi_myid, mpi_nprocs; void Pox_mpi_myid(Q *rp) @@ -205,7 +205,7 @@ void Pox_get_serverinfo(NODE arg,LIST *rp) LIST list,l; if ( !arg ) { - for ( i = 0, n0 = 0; i < m_c_i; i++ ) + for ( i = I_am_server?1:0, n0 = 0; i < m_c_i; i++ ) if ( (m_c_tab[i].m>=0) || (m_c_tab[i].c>=0) ) { c = m_c_tab[i].c; ox_get_serverinfo(c,&list); @@ -771,7 +771,7 @@ int register_server(int af_unix,int m,int c) } m_c_s = INIT_TAB_SIZ; } -#if !MPI +#if !defined(MPI) for ( i = 0; i < m_c_i; i++ ) if ( (m_c_tab[i].m<0) && (m_c_tab[i].c<0) ) break; @@ -1193,11 +1193,9 @@ void Pox_shutdown(NODE arg,Q *rp) s = m_c_tab[index].m; ox_send_cmd(s,SM_shutdown); free_iofp(s); -#if !defined(VISUAL) s = m_c_tab[index].c; free_iofp(s); -#endif -#if !MPI && !defined(VISUAL) +#if !defined(MPI) && !defined(VISUAL) if ( m_c_tab[index].af_unix ) wait(&status); #endif @@ -1235,15 +1233,53 @@ void shutdown_all() { Sleep(1000); #endif free_iofp(s); -#if !defined(VISUAL) s = m_c_tab[index].c; free_iofp(s); -#endif -#if !MPI && !defined(VISUAL) +#if !defined(MPI) && !defined(VISUAL) if ( m_c_tab[index].af_unix ) wait(&status); #endif m_c_tab[index].m = 0; m_c_tab[index].c = 0; m_c_tab[index].af_unix = 0; } +} + +char *ox_get_servername(int); + +int is_ox_plot(int index) +{ + char *name; + + check_valid_mctab_index(index); + if ( index < 0 ) + return 0; + /* m : client, c : server ??? */ + name = ox_get_servername(m_c_tab[index].c); + return strcmp(name,"ox_plot") ? 0 : 1; +} + +int validate_ox_plot_stream(int index) +{ + int i; + NODE arg; + STRING name; + Obj r; + + if ( is_ox_plot(index) ) + return index; + for ( i = 0; i < m_c_i; i++ ) + if ( is_ox_plot(i) ) + return i; + + /* create an ox_plot server */ + MKSTR(name,"ox_plot"); + arg = mknode(2,0,name); + Pox_launch_nox(arg,&r); + i = QTOS((Q)r); +#if defined(VISUAL) + Sleep(100); + ox_send_cmd(m_c_tab[i].c,SM_nop); + ox_flush_stream_force(m_c_tab[i].c); +#endif + return i; }