=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/ox_launch.c,v retrieving revision 1.5 retrieving revision 1.9.2.1 diff -u -p -r1.5 -r1.9.2.1 --- OpenXM_contrib2/asir2000/io/ox_launch.c 2000/09/23 00:57:43 1.5 +++ OpenXM_contrib2/asir2000/io/ox_launch.c 2000/11/08 08:31:55 1.9.2.1 @@ -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/ox_launch.c,v 1.4 2000/08/22 05:04:18 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/io/ox_launch.c,v 1.9 2000/11/07 09:31:36 noro Exp $ */ #include #include @@ -53,6 +53,7 @@ #include "com.h" #include "ox.h" #if defined(VISUAL) +#include #include #include #include @@ -185,8 +186,8 @@ char **argv; if ( accept_client ) { cs = try_bind_listen(use_unix,control_port_str); ss = try_bind_listen(use_unix,server_port_str); - cs = try_accept(use_unix,cs); - ss = try_accept(use_unix,ss); + cs = try_accept(cs); + ss = try_accept(ss); } else { cs = try_connect(use_unix,rhost,control_port_str); ss = try_connect(use_unix,rhost,server_port_str); @@ -227,7 +228,8 @@ int cmd; switch ( cmd ) { case SM_shutdown: SetEvent(hKill); - exit(0); break; + ExitProcess(0); + break; case SM_control_intr: SetEvent(hIntr); break; @@ -287,7 +289,14 @@ char *dname; HANDLE hProc; STRING rootdir; int mypid; + int newbs; + DuplicateHandle(GetCurrentProcess(),(HANDLE)bs, + GetCurrentProcess(),(HANDLE *)&newbs, + 0,TRUE,DUPLICATE_SAME_ACCESS); + close(bs); + bs = newbs; + mypid = GetCurrentProcessId(); sprintf(ox_intr,"ox_intr_%d",mypid); sprintf(ox_reset,"ox_reset_%d",mypid); @@ -298,12 +307,14 @@ char *dname; sprintf(sock_id,"%d",bs); av[0] = prog; av[1] = sock_id; - av[2] = ox_intr; - av[3] = ox_reset; - av[4] = ox_kill; - av[5] = NULL; + av[2] = dname; /* if dname == "1" then a message window is opened */ + av[3] = ox_intr; + av[4] = ox_reset; + av[5] = ox_kill; + av[6] = NULL; Pget_rootdir(&rootdir); sprintf(AsirExe,"%s\\bin\\engine.exe",BDY(rootdir)); + _fileinfo = 1; hProc = _spawnv(_P_NOWAIT,AsirExe,av); return (int)hProc; #else /* VISUAL */ @@ -339,9 +350,9 @@ char *dname; close(i); #endif } - if ( strcmp(dname,"0") ) - execl(prog,prog,"-display",dname,0); - else { + if ( !strcmp(dname,"1" ) ) /* XXX: for ssh */ + execl(prog,prog,0); + else if ( !strcmp(dname,"0") ) { FILE *null; null = fopen("/dev/null","wb"); @@ -349,7 +360,8 @@ char *dname; dup2(fileno(null),2); putenv("DISPLAY="); execl(prog,prog,0); - } + } else + execl(prog,prog,"-display",dname,0); /* On failure */ errcode = 2; write(4,&errcode,1);