version 1.9.2.1, 2000/11/08 08:31:55 |
version 1.10, 2000/11/08 06:21:17 |
Line 76 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); |
|
|
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) |
|
|
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; |
|
|
|
|
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(); |
|
|
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); |
cs = try_accept(cs); |
cs = try_accept(use_unix,cs); |
ss = try_accept(ss); |
ss = try_accept(use_unix,ss); |
} else { |
} else { |
cs = try_connect(use_unix,rhost,control_port_str); |
cs = try_connect(use_unix,rhost,control_port_str); |
ss = try_connect(use_unix,rhost,server_port_str); |
ss = try_connect(use_unix,rhost,server_port_str); |
|
|
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); |
|
|
} |
} |
#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]; |
|
|
} |
} |
if ( !strcmp(dname,"1" ) ) /* XXX: for ssh */ |
if ( !strcmp(dname,"1" ) ) /* XXX: for ssh */ |
execl(prog,prog,0); |
execl(prog,prog,0); |
else if ( !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); |
putenv("DISPLAY="); |
if ( !nolog ) { |
execl(prog,prog,0); |
putenv("DISPLAY="); |
|
execl(prog,prog,0); |
|
} else |
|
execl(prog,prog,"-display",dname,0); |
} else |
} else |
execl(prog,prog,"-display",dname,0); |
execl(prog,prog,"-display",dname,0); |
/* On failure */ |
/* On failure */ |