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

Diff for /OpenXM_contrib2/asir2000/io/ox_launch.c between version 1.11 and 1.26

version 1.11, 2000/12/16 07:12:01 version 1.26, 2015/08/14 13:51:55
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_launch.c,v 1.10 2000/11/08 06:21:17 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/ox_launch.c,v 1.25 2015/08/06 10:01:52 fujimoto Exp $
 */  */
 #include <setjmp.h>  #include <setjmp.h>
 #include <signal.h>  #include <signal.h>
Line 52 
Line 52 
 #include "ca.h"  #include "ca.h"
 #include "com.h"  #include "com.h"
 #include "ox.h"  #include "ox.h"
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
 #include <stdlib.h>  #include <stdlib.h>
 #include <windows.h>  #include <windows.h>
 #include <io.h>  #include <io.h>
Line 69 
Line 69 
 #include <unistd.h>  #include <unistd.h>
 #endif  #endif
   
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
 HANDLE hIntr,hReset,hKill;  HANDLE hIntr,hReset,hKill;
   extern int _fileinfo;
 #endif  #endif
   
 static void put_log(char *);  static void put_log(char *);
 static int which_command(char *,char *);  static int ox_spawn(char *,int,char *,char *);
 static int search_command(char *);  
 static int ox_spawn(char *,int,char *,int);  
 static void launch_error(char *);  static void launch_error(char *);
 static int ox_io_init(int);  static void ox_io_init(int);
 static void push_one(Obj);  static void push_one(Obj);
 static Obj pop_one();  static Obj pop_one();
 static void do_cmd(int);  static void do_cmd(int);
   static void terminate_server();
   
 static Obj *asir_OperandStack;  static Obj *asir_OperandStack;
 static int asir_OperandStackPtr;  static int asir_OperandStackPtr;
Line 102  char *str;
Line 102  char *str;
         fflush(logfile);          fflush(logfile);
 }  }
   
 #if !defined(VISUAL)  
 static int which_command(com,file)  
 char *com,*file;  
 {  
         char *c,*s;  
         int len;  
         char dir[BUFSIZ],path[BUFSIZ];  
   
         for ( s = (char *)getenv("PATH"); s; ) {  
                 c = (char *)index(s,':');  
                 if ( c ) {  
                         len = c-s;  
                         strncpy(dir,s,len); s = c+1; dir[len] = 0;  
                 } else {  
                         strcpy(dir,s); s = 0;  
                 }  
                 sprintf(path,"%s/%s",dir,com);  
                 if ( search_command(path) ) {  
                         strcpy(file,path); return 1;  
                 }  
         }  
         file[0] = 0; return 0;  
 }  
   
 static int search_command(file)  
 char *file;  
 {  
         struct stat buf;  
   
         if ( stat(file,&buf) || (buf.st_mode & S_IFDIR) )  
                 return 0;  
         if ( access(file,X_OK) )  
                 return 0;  
         else  
                 return 1;  
 }  
 #endif  
   
 /*  /*
         argv[1] : host to connect          argv[1] : host to connect
         argv[2] : if 1, call try_bind_listen and try_accept          argv[2] : if 1, call try_bind_listen and try_accept
Line 149  char *file;
Line 111  char *file;
         argv[5] : server          argv[5] : server
         argv[6] : display or "0"          argv[6] : display or "0"
         argv[7] : if exists, it should be "-nolog"          argv[7] : if exists, it should be "-nolog"
           XXX : argv[7] is used to pass the path of engine.exe in Windows.
 */  */
   
 void launch_main(argc,argv)  void launch_main(argc,argv)
 int argc;  int argc;
 char **argv;  char **argv;
 {  {
         int id;  #if !defined(VISUAL) && !defined(__MINGW32__)
         Obj p,obj;          Obj p;
         char *name;          char *name;
         char buf[BUFSIZ];          char buf[BUFSIZ];
   #endif
           int id;
           Obj obj;
         int cs,ss;          int cs,ss;
         unsigned int cmd;          unsigned int cmd;
         int use_unix,accept_client,nolog;          int use_unix,accept_client;
         char *control_port_str,*server_port_str;          char *control_port_str,*server_port_str;
         char *rhost,*server,*dname;          char *rhost,*server,*dname,*nolog;
           char *e,*s;
   
         GC_init(); nglob_init();          GC_init(); nglob_init();
         gethostname(hostname,BUFSIZ);          gethostname(hostname,BUFSIZ);
Line 174  char **argv;
Line 141  char **argv;
         server_port_str = argv[4];          server_port_str = argv[4];
         server = argv[5];          server = argv[5];
         dname = argv[6];          dname = argv[6];
         nolog = argc > 7 ? 1 : 0;          nolog = argc > 7 ? argv[7]: 0;
   
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
                 init_socket();                  init_socket();
 #endif  #endif
   
         signal(SIGINT,SIG_IGN);          signal(SIGINT,SIG_IGN);
   #if defined(SIGHUP)
           signal(SIGHUP,SIG_IGN);
   #endif
 #if defined(SIGUSR1)  #if defined(SIGUSR1)
         signal(SIGUSR1,SIG_IGN);          signal(SIGUSR1,SIG_IGN);
 #endif  #endif
   #if defined(SIGTERM)
           signal(SIGTERM,terminate_server);
   #endif
   
           /* XXX a dirty hack */
           if ( !getenv("LD_LIBRARY_PATH") ) {
                   if ( e = getenv("OpenXM_HOME") ) {
                           s = (char *)alloca(strlen(e)+100);
                           sprintf(s,"LD_LIBRARY_PATH=%s/lib",e);
                           putenv(s);
                   }
           }
   
         if ( accept_client ) {          if ( accept_client ) {
                 cs = try_bind_listen(use_unix,control_port_str);                  cs = try_bind_listen(use_unix,control_port_str);
                 ss = try_bind_listen(use_unix,server_port_str);                  ss = try_bind_listen(use_unix,server_port_str);
Line 217  char **argv;
Line 199  char **argv;
         }          }
 }  }
   
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
 static void do_cmd(cmd)  static void do_cmd(cmd)
 int cmd;  int cmd;
 {  {
         USINT t;          USINT t;
         int id,cindex;  
         int bport,sport;  
         int bs,bs0;  
         STRING prog,dname;  
   
         switch ( cmd ) {          switch ( cmd ) {
                 case SM_shutdown:                  case SM_shutdown:
Line 283  static int ox_spawn(prog,bs,dname,nolog)
Line 261  static int ox_spawn(prog,bs,dname,nolog)
 char *prog;  char *prog;
 int bs;  int bs;
 char *dname;  char *dname;
 int nolog;  char *nolog;
 {  {
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
         char *av[BUFSIZ];          char *av[BUFSIZ];
         char sock_id[BUFSIZ],ox_intr[BUFSIZ],ox_reset[BUFSIZ],ox_kill[BUFSIZ];          char sock_id[BUFSIZ],ox_intr[BUFSIZ],ox_reset[BUFSIZ],ox_kill[BUFSIZ];
         char AsirExe[BUFSIZ];          char AsirExe[BUFSIZ];
         HANDLE hProc;          int hProc;
         STRING rootdir;          STRING rootdir;
         int mypid;          int mypid;
         int newbs;          int newbs;
Line 297  int nolog;
Line 275  int nolog;
         DuplicateHandle(GetCurrentProcess(),(HANDLE)bs,          DuplicateHandle(GetCurrentProcess(),(HANDLE)bs,
                                         GetCurrentProcess(),(HANDLE *)&newbs,                                          GetCurrentProcess(),(HANDLE *)&newbs,
                                         0,TRUE,DUPLICATE_SAME_ACCESS);                                          0,TRUE,DUPLICATE_SAME_ACCESS);
         close(bs);          closesocket(bs);
         bs = newbs;          bs = newbs;
   
         mypid = GetCurrentProcessId();          mypid = GetCurrentProcessId();
Line 315  int nolog;
Line 293  int nolog;
         av[4] = ox_reset;          av[4] = ox_reset;
         av[5] = ox_kill;          av[5] = ox_kill;
         av[6] = NULL;          av[6] = NULL;
         Pget_rootdir(&rootdir);          if ( nolog ) {
         sprintf(AsirExe,"%s\\bin\\engine.exe",BDY(rootdir));                  sprintf(AsirExe,"\"%s\"",nolog);
                   strcpy(AsirExe,nolog);
           } else {
                   Pget_rootdir(&rootdir);
                   sprintf(AsirExe,"%s\\bin\\engine.exe",BDY(rootdir));
           }
   #if _MSC_VER < 1400
         _fileinfo = 1;          _fileinfo = 1;
   #endif
         hProc = _spawnv(_P_NOWAIT,AsirExe,av);          hProc = _spawnv(_P_NOWAIT,AsirExe,av);
         return (int)hProc;          return (int)hProc;
 #else /* VISUAL */  #else /* VISUAL */
Line 329  int nolog;
Line 314  int nolog;
         char errcode;          char errcode;
   
         pid = fork();          pid = fork();
         if ( pid )          if ( pid ) {
                 return pid;                  return pid;
         else {          } else {
                 setpgid(0,getpid());                  setpgid(0,getpid());
                 if ( dup2(bs,3) != 3 )                  if ( bs != 3 && dup2(bs,3) != 3 )
                         exit(1);                          exit(1);
                 if ( dup2(bs,4) != 4 )                  if ( bs != 4 && dup2(bs,4) != 4 )
                         exit(1);                          exit(1);
                 {                  {
 #if defined(linux) || defined(__NeXT__) || defined(ultrix)  #if defined(linux) || defined(__NeXT__) || defined(ultrix) || defined(__CYGWIN__)
 #include <sys/param.h>  #include <sys/param.h>
                         close(0);                          close(0);
                         for ( i = 5; i < NOFILE; i++ )                          for ( i = 5; i < NOFILE; i++ )
Line 353  int nolog;
Line 338  int nolog;
                                 close(i);                                  close(i);
 #endif  #endif
                 }                  }
                 if ( !strcmp(dname,"1" ) ) /* XXX: for ssh */                  if ( !nolog && !strcmp(dname,"1" ) ) /* XXX: for ssh */
                         execl(prog,prog,0);                          execl(prog,prog,(char *)0);
                 else if ( nolog || !strcmp(dname,"0") ) {                  else if ( nolog || !strcmp(dname,"0") ) {
                         FILE *null;                          FILE *null;
   
                         null = fopen("/dev/null","wb");                          null = fopen("/dev/null","wb");
                         dup2(fileno(null),1);                          dup2(fileno(null),1);
                         dup2(fileno(null),2);                          dup2(fileno(null),2);
                         if ( strcmp(dname,"0") )                          if ( !strcmp(dname,"1") ) {
                                 execl(prog,prog,"-display",dname,0);                                  /* XXX */
                                   putenv("DISPLAY=");
                                   execl(prog,prog,(char *)0);
                           } else if ( strcmp(dname,"0") )
                                   execl(prog,prog,"-display",dname,(char *)0);
                         else {                          else {
                                 putenv("DISPLAY=");                                  putenv("DISPLAY=");
                                 execl(prog,prog,0);                                  execl(prog,prog,(char *)0);
                         }                          }
                 } else                  } else
                         execl(prog,prog,"-display",dname,0);                          execl(prog,prog,"-display",dname,(char *)0);
                 /* On failure */                  /* On failure */
                 errcode = 2;                  errcode = 2;
                 write(4,&errcode,1);                  write(4,&errcode,1);
Line 383  char *s;
Line 372  char *s;
         exit(0);          exit(0);
 }  }
   
 static int ox_io_init(sock)  static void ox_io_init(sock)
 int sock;  int sock;
 {  {
         endian_init();          endian_init();
Line 404  static Obj pop_one() {
Line 393  static Obj pop_one() {
         if ( asir_OperandStackPtr >= 0 ) {          if ( asir_OperandStackPtr >= 0 ) {
                 return asir_OperandStack[asir_OperandStackPtr--];                  return asir_OperandStack[asir_OperandStackPtr--];
         }          }
   }
   
   static void terminate_server(int sig)
   {
   #if defined(SIGKILL)
           kill(cpid,SIGKILL);
   #endif
           exit(0);
 }  }
   

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.26

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