[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.1.1.1 and 1.11

version 1.1.1.1, 1999/12/03 07:39:11 version 1.11, 2000/12/16 07:12:01
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/asir99/io/ox_launch.c,v 1.1.1.1 1999/11/10 08:12:30 noro Exp $ */  /*
    * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
    * All rights reserved.
    *
    * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
    * non-exclusive and royalty-free license to use, copy, modify and
    * redistribute, solely for non-commercial and non-profit purposes, the
    * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
    * conditions of this Agreement. For the avoidance of doubt, you acquire
    * only a limited right to use the SOFTWARE hereunder, and FLL or any
    * third party developer retains all rights, including but not limited to
    * copyrights, in and to the SOFTWARE.
    *
    * (1) FLL does not grant you a license in any way for commercial
    * purposes. You may use the SOFTWARE only for non-commercial and
    * non-profit purposes only, such as academic, research and internal
    * business use.
    * (2) The SOFTWARE is protected by the Copyright Law of Japan and
    * international copyright treaties. If you make copies of the SOFTWARE,
    * with or without modification, as permitted hereunder, you shall affix
    * to all such copies of the SOFTWARE the above copyright notice.
    * (3) An explicit reference to this SOFTWARE and its copyright owner
    * shall be made on your publication or presentation in any form of the
    * results obtained by use of the SOFTWARE.
    * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
    * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
    * for such modification or the source code of the modified part of the
    * SOFTWARE.
    *
    * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
    * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
    * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
    * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
    * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
    * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
    * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
    * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
    * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
    * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
    * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
    * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
    * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
    * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
    * 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/ox_launch.c,v 1.10 2000/11/08 06:21:17 noro Exp $
   */
   #include <setjmp.h>
   #include <signal.h>
   #include <fcntl.h>
 #include "ca.h"  #include "ca.h"
 #include "com.h"  #include "com.h"
 #include "ox.h"  #include "ox.h"
 #include <signal.h>  
 #include <setjmp.h>  
 #include <fcntl.h>  
 #if defined(VISUAL)  #if defined(VISUAL)
   #include <stdlib.h>
 #include <windows.h>  #include <windows.h>
 #include <io.h>  #include <io.h>
 #include <fcntl.h>  #include <fcntl.h>
Line 28  HANDLE hIntr,hReset,hKill;
Line 76  HANDLE hIntr,hReset,hKill;
 static void put_log(char *);  static void put_log(char *);
 static int which_command(char *,char *);  static int which_command(char *,char *);
 static int search_command(char *);  static int search_command(char *);
 static int ox_spawn(char *,int,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 int ox_io_init(int);
 static void push_one(Obj);  static void push_one(Obj);
Line 100  char *file;
Line 148  char *file;
         argv[4] : server_port          argv[4] : server_port
         argv[5] : server          argv[5] : server
         argv[6] : display or "0"          argv[6] : display or "0"
           argv[7] : if exists, it should be "-nolog"
 */  */
   
 void launch_main(argc,argv)  void launch_main(argc,argv)
Line 112  char **argv;
Line 161  char **argv;
         char buf[BUFSIZ];          char buf[BUFSIZ];
         int cs,ss;          int cs,ss;
         unsigned int cmd;          unsigned int cmd;
         int use_unix,accept_client;          int use_unix,accept_client,nolog;
         char *control_port_str,*server_port_str;          char *control_port_str,*server_port_str;
         char *rhost,*server,*dname;          char *rhost,*server,*dname;
   
Line 125  char **argv;
Line 174  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;
   
 #if defined(VISUAL)  #if defined(VISUAL)
                 init_socket();                  init_socket();
Line 147  char **argv;
Line 197  char **argv;
         ox_io_init(cs);          ox_io_init(cs);
         if ( cs < 0 || ss < 0 )          if ( cs < 0 || ss < 0 )
                 launch_error("cannot connect to the client");                  launch_error("cannot connect to the client");
         cpid = ox_spawn(server,ss,dname);          cpid = ox_spawn(server,ss,dname,nolog);
   
         while ( 1 ) {          while ( 1 ) {
                 ox_recv(sindex,&id,&obj);                  ox_recv(sindex,&id,&obj);
Line 180  int cmd;
Line 230  int cmd;
         switch ( cmd ) {          switch ( cmd ) {
                 case SM_shutdown:                  case SM_shutdown:
                         SetEvent(hKill);                          SetEvent(hKill);
                         exit(0); break;                          ExitProcess(0);
                           break;
                 case SM_control_intr:                  case SM_control_intr:
                         SetEvent(hIntr);                          SetEvent(hIntr);
                         break;                          break;
Line 228  int cmd;
Line 279  int cmd;
 }  }
 #endif  #endif
   
 static int ox_spawn(prog,bs,dname)  static int ox_spawn(prog,bs,dname,nolog)
 char *prog;  char *prog;
 int bs;  int bs;
 char *dname;  char *dname;
   int nolog;
 {  {
 #if defined(VISUAL)  #if defined(VISUAL)
         char *av[BUFSIZ];          char *av[BUFSIZ];
Line 240  char *dname;
Line 292  char *dname;
         HANDLE hProc;          HANDLE hProc;
         STRING rootdir;          STRING rootdir;
         int mypid;          int mypid;
           int newbs;
   
           DuplicateHandle(GetCurrentProcess(),(HANDLE)bs,
                                           GetCurrentProcess(),(HANDLE *)&newbs,
                                           0,TRUE,DUPLICATE_SAME_ACCESS);
           close(bs);
           bs = newbs;
   
         mypid = GetCurrentProcessId();          mypid = GetCurrentProcessId();
         sprintf(ox_intr,"ox_intr_%d",mypid);          sprintf(ox_intr,"ox_intr_%d",mypid);
         sprintf(ox_reset,"ox_reset_%d",mypid);          sprintf(ox_reset,"ox_reset_%d",mypid);
Line 251  char *dname;
Line 310  char *dname;
         sprintf(sock_id,"%d",bs);          sprintf(sock_id,"%d",bs);
         av[0] = prog;          av[0] = prog;
         av[1] = sock_id;          av[1] = sock_id;
         av[2] = ox_intr;          av[2] = dname; /* if dname == "1" then a message window is opened */
         av[3] = ox_reset;          av[3] = ox_intr;
         av[4] = ox_kill;          av[4] = ox_reset;
         av[5] = NULL;          av[5] = ox_kill;
           av[6] = NULL;
         Pget_rootdir(&rootdir);          Pget_rootdir(&rootdir);
         sprintf(AsirExe,"%s\\bin\\engine.exe",BDY(rootdir));          sprintf(AsirExe,"%s\\bin\\engine.exe",BDY(rootdir));
           _fileinfo = 1;
         hProc = _spawnv(_P_NOWAIT,AsirExe,av);          hProc = _spawnv(_P_NOWAIT,AsirExe,av);
         return (int)hProc;          return (int)hProc;
 #else /* VISUAL */  #else /* VISUAL */
Line 265  char *dname;
Line 326  char *dname;
         int pid;          int pid;
         char wname[BUFSIZ];          char wname[BUFSIZ];
         char buf[BUFSIZ];          char buf[BUFSIZ];
           char errcode;
   
         pid = fork();          pid = fork();
         if ( pid )          if ( pid )
Line 291  char *dname;
Line 353  char *dname;
                                 close(i);                                  close(i);
 #endif  #endif
                 }                  }
                 if ( strcmp(dname,"0") )                  if ( !strcmp(dname,"1" ) ) /* XXX: for ssh */
                         execl(prog,prog,"-display",dname,0);                          execl(prog,prog,0);
                 else {                  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);
                         putenv("DISPLAY=");                          if ( strcmp(dname,"0") )
                         execl(prog,prog,0);                                  execl(prog,prog,"-display",dname,0);
                 }                          else {
                                   putenv("DISPLAY=");
                                   execl(prog,prog,0);
                           }
                   } else
                           execl(prog,prog,"-display",dname,0);
                   /* On failure */
                   errcode = 2;
                   write(4,&errcode,1);
                   exit(1);
         }          }
 #endif  #endif
 }  }

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

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