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

Diff for /OpenXM_contrib2/asir2000/io/tcpf_win_mini.c between version 1.2 and 1.3

version 1.2, 2006/09/26 05:50:31 version 1.3, 2006/09/29 09:02:49
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf_win_mini.c,v 1.1 2006/09/26 05:35:26 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf_win_mini.c,v 1.2 2006/09/26 05:50:31 noro Exp $ */
   
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 12 
Line 12 
 static int control_port,server_port;  static int control_port,server_port;
 int win_ox_launch();  int win_ox_launch();
 void win_spawn_server(char *control_port_str,char *server_port_str);  void win_spawn_server(char *control_port_str,char *server_port_str);
 void win_get_rootdir(rootdir);  void win_get_rootdir();
 char *win_pop_string();  int win_pop_string(Obj *);
 static int launched=0;  void free_obj(Obj obj);
 extern int terminate;  extern int terminate;
   static char rootdir[BUFSIZ];
   
 int win_ox_launch()  int win_ox_launch()
 {  {
         int cs,ss,cn,sn;          int cs,ss,cn,sn;
         char control_port_str[BUFSIZ];          char control_port_str[BUFSIZ];
         char server_port_str[BUFSIZ];          char server_port_str[BUFSIZ];
           static int launched=0;
   
         if ( launched ) return 0;          if ( launched ) return 0;
   
Line 58  int win_ox_launch()
Line 60  int win_ox_launch()
         return 0;          return 0;
 }  }
   
 void win_get_rootdir(char *dir);  void win_get_rootdir();
   
 void win_spawn_server(char *control_port_str,char *server_port_str)  void win_spawn_server(char *control_port_str,char *server_port_str)
 {  {
         char AsirExe[BUFSIZ];          char AsirExe[BUFSIZ];
         char AsirExePath[BUFSIZ];          char AsirExePath[BUFSIZ];
         char rootdir[BUFSIZ];  
         char *av[BUFSIZ];          char *av[BUFSIZ];
   
         win_get_rootdir(rootdir);  
 //      strcpy(rootdir,"c:\\program files\\asir");  //      strcpy(rootdir,"c:\\program files\\asir");
         sprintf(AsirExe,"%s\\bin\\engine.exe",rootdir);  //      sprintf(AsirExe,"%s\\bin\\engine.exe",rootdir);
           sprintf(AsirExe,"c:\\Program Files\\asir\\bin\\engine.exe",rootdir);
         sprintf(AsirExePath,"\"%s\"",AsirExe);          sprintf(AsirExePath,"\"%s\"",AsirExe);
         av[0] = "ox_launch";          av[0] = "ox_launch";
         av[1] = "127.0.0.1";          av[1] = "127.0.0.1";
Line 84  void win_spawn_server(char *control_port_str,char *ser
Line 85  void win_spawn_server(char *control_port_str,char *ser
         _spawnv(_P_NOWAIT,AsirExe,av);          _spawnv(_P_NOWAIT,AsirExe,av);
 }  }
   
 void win_get_rootdir(char *dir)  void win_get_rootdir()
 {  {
         char *slash;          char *slash;
   
         GetCurrentDirectory(BUFSIZ,dir);          GetCurrentDirectory(BUFSIZ,rootdir);
         slash = strrchr(dir,'\\');          slash = strrchr(rootdir,'\\');
         if ( slash ) *slash = 0;          if ( slash ) *slash = 0;
 }  }
   
 char *win_pop_string()  // ret=1 : data, ret=0 : void, ret=-1 : terminate
   
   int win_pop_string(Obj *obj)
 {  {
         Obj obj;  
         int id,serial;          int id,serial;
   
         if ( !launched ) return "";          serial = ox_recv(server_port,&id,obj);
         serial = ox_recv(server_port,&id,&obj);          if ( serial < 0 ) return -1;
         if ( serial < 0 ) return 0;  
   
           if ( id == OX_DATA )
                   return 1;
           else {
                   if ( id == OX_SYNC_BALL ) {
                           ox_send_sync(server_port);
                           ox_flush_stream_force(server_port);
                   }
                   *obj = 0;
                   return 0;
           }
   }
   
   /* ret=1 => data, ret=0 => void, ret=-1 => terminated */
   
   int win_pop_one(Obj *obj)
   {
           int id,serial;
   
           serial = ox_recv(server_port,&id,obj);
           if ( serial < 0 ) return -1;
   
         if ( id == OX_DATA ) {          if ( id == OX_DATA ) {
                 if ( obj && OID(obj) == O_STR ) return BDY((STRING)obj);                  return 1;
                 else return "";  
         } else if ( id == OX_SYNC_BALL ) {          } else if ( id == OX_SYNC_BALL ) {
                 ox_send_sync(server_port);                  ox_send_sync(server_port);
                 ox_flush_stream_force(server_port);                  ox_flush_stream_force(server_port);
                 return "";                  return 0;
         } else return "";          } else return 0;
 }  }
   
 void win_execute_string(char *cmd)  void win_execute_string(char *cmd)
 {  {
         struct oSTRING str;          struct oSTRING str;
   
         if ( !launched ) return;  
         OID(&str) = O_STR;          OID(&str) = O_STR;
         BDY(&str) = cmd;          BDY(&str) = cmd;
         ox_send_data(server_port,&str);          ox_send_data(server_port,&str);
Line 131  void ox_reset()
Line 151  void ox_reset()
         int id;          int id;
         Obj obj;          Obj obj;
   
         if ( !launched ) return;  
         ox_send_cmd(control_port,SM_control_reset_connection);          ox_send_cmd(control_port,SM_control_reset_connection);
         ox_flush_stream_force(control_port);          ox_flush_stream_force(control_port);
         ox_recv(control_port,&id,&obj); t = (USINT)obj;          ox_recv(control_port,&id,&obj); t = (USINT)obj;
Line 142  void ox_reset()
Line 161  void ox_reset()
   
 void ox_shutdown()  void ox_shutdown()
 {  {
         if ( !launched ) return;  
         terminate = 1;          terminate = 1;
         ox_send_cmd(server_port,SM_shutdown);          ox_send_cmd(server_port,SM_shutdown);
         Sleep(100);          Sleep(100);
         ox_send_cmd(control_port,SM_shutdown);          ox_send_cmd(control_port,SM_shutdown);
   }
   
   void free_obj(Obj obj)
   {
           NODE n,n1;
   
           if ( !obj ) return;
           switch ( OID(obj) ) {
                   case O_USINT:
                           break;
                   case O_STR:
                           free(BDY((STRING)obj));
                           break;
                   case O_LIST:
                           n = BDY((LIST)obj);
                           while ( n ) {
                                   free_obj(BDY(n));
                                   n1 = NEXT(n);
                                   free(n);
                                   n = n1;
                           }
                           break;
                   case O_ERR:
                           free_obj(BDY((LIST)obj));
                           break;
                   default:
                           break;
           }
           free(obj);
 }  }
   

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

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