version 1.5, 2000/12/01 07:34:48 |
version 1.9, 2000/12/15 03:34:43 |
|
|
/* -*- mode: C -*- */ |
/* -*- mode: C -*- */ |
/* $OpenXM: OpenXM/src/oxc/oxc.c,v 1.4 2000/11/28 04:02:56 ohara Exp $ */ |
/* $OpenXM: OpenXM/src/oxc/oxc.c,v 1.8 2000/12/14 03:14:01 ohara Exp $ */ |
|
|
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
Line 25 int oxf_connect_dup(char *remote, short port) |
|
Line 25 int oxf_connect_dup(char *remote, short port) |
|
|
|
int lf_oxc_open_main(char *cmd, short port) |
int lf_oxc_open_main(char *cmd, short port) |
{ |
{ |
int pid = 0; |
pid_t pid; |
if (cmd != NULL && (pid = fork()) == 0) { |
if ((pid = fork()) == 0) { |
oxf_connect_dup(remote_host, port); |
oxf_connect_dup(remote_host, port); |
fprintf(stderr, "oxc: oxc_open(%s, %d)\n", cmd, port); |
fprintf(stderr, "oxc: oxc_open(%s, %d)\n", cmd, port); |
execlp(cmd, cmd, NULL); |
execlp(cmd, cmd, NULL); |
} |
} |
fprintf(stderr, "oxc: cannnot oxc_open(%s, %d).\n", cmd, port); |
|
return pid; /* if error, pid == 0 */ |
return pid; /* if error, pid == 0 */ |
} |
} |
|
|
Line 48 OXFILE *connection() |
|
Line 47 OXFILE *connection() |
|
/* xterm, kterm, rxvt, gnome-terminal, ... */ |
/* xterm, kterm, rxvt, gnome-terminal, ... */ |
static char *xterminal() |
static char *xterminal() |
{ |
{ |
char *e = getenv("OpenXM_XTERM"); |
char *e = getenv("OpenXM_XTERM"); |
return (e != NULL)? e: "xterm"; |
return (e != NULL)? e: "xterm"; |
} |
} |
|
|
static int basic0[] = { |
static int basic0[] = { |
CMO_ERROR2, |
CMO_ERROR2, |
CMO_NULL, |
CMO_NULL, |
CMO_INT32, |
CMO_INT32, |
CMO_DATUM, |
CMO_DATUM, |
CMO_STRING, |
CMO_STRING, |
CMO_MATHCAP, |
CMO_MATHCAP, |
CMO_LIST, |
CMO_LIST, |
0 |
0 |
}; |
}; |
|
|
/* We assume that data has the following format: |
/* We assume that data has the following format: |
Line 74 void pipe_read_info(char **hostname, int *port, char * |
|
Line 73 void pipe_read_info(char **hostname, int *port, char * |
|
int main(int argc, char *argv[]) |
int main(int argc, char *argv[]) |
{ |
{ |
OXFILE *oxfp; |
OXFILE *oxfp; |
char *port_s = ""; |
char *port_s = ""; |
char *xterm = xterminal(); |
char *xterm = xterminal(); |
char *myname = argv[0]; |
char *myname = argv[0]; |
int oxlog = 0; |
int oxlog = 0; |
int c; |
int c; |
|
int delay = 0; |
|
char *delay_s = "0"; |
|
|
while ((c = getopt(argc, argv, "c:p:h:x")) != -1) { |
while ((c = getopt(argc, argv, "d:c:p:h:x")) != -1) { |
switch(c) { |
switch(c) { |
case 'h': |
case 'h': |
remote_host = optarg; |
remote_host = optarg; |
break; |
break; |
case 'c': |
case 'c': |
password = optarg; |
password = optarg; |
|
|
break; |
break; |
case 'p': |
case 'p': |
port = atoi(optarg); |
port = atoi(optarg); |
port_s = optarg; |
port_s = optarg; |
break; |
break; |
case 'x': |
case 'x': |
if (getenv("DISPLAY") != NULL) { |
if (getenv("DISPLAY") != NULL) { |
oxlog = 1; |
oxlog = 1; |
} |
} |
break; |
break; |
|
case 'd': |
|
delay_s = optarg; |
|
delay = atoi(optarg); |
|
break; |
default: |
default: |
} |
} |
} |
} |
Line 105 int main(int argc, char *argv[]) |
|
Line 110 int main(int argc, char *argv[]) |
|
argv += optind; |
argv += optind; |
|
|
if (strlen(remote_host) == 0) { |
if (strlen(remote_host) == 0) { |
pipe_read_info(&remote_host, &port, &password); |
pipe_read_info(&remote_host, &port, &password); |
port_s = malloc(32); |
port_s = malloc(32); |
sprintf(port_s, "%d", port); |
sprintf(port_s, "%d", port); |
} |
} |
if (oxlog) { |
if (oxlog) { |
execlp(xterm, xterm, "-e", myname, |
execlp(xterm, xterm, "-e", myname, "-d", delay_s, |
"-h", remote_host, "-p", port_s, "-c", password); |
"-h", remote_host, "-p", port_s, "-c", password, NULL); |
} |
} |
|
|
fprintf(stderr, "start connection!\n"); |
fprintf(stderr, "start connection!\n"); |
if ((oxfp = connection()) == NULL) { |
usleep(delay); |
|
if ((oxfp = connection()) == NULL) { |
fprintf(stderr, "oxc: cannot connect.\n"); |
fprintf(stderr, "oxc: cannot connect.\n"); |
}else { |
}else { |
fprintf(stderr, "oxc: oxfp = %p, fd = %d\n", oxfp, oxfp->fd); |
fprintf(stderr, "oxc: oxfp = %p, fd = %d\n", oxfp, oxfp->fd); |
mathcap_init(20001006, "v2000.10.06", "oxc", basic0, NULL); |
mathcap_init(20001006, "v2000.10.06", "oxc", basic0, NULL); |
sm(oxfp); |
sm(oxfp); |
} |
} |
return 0; |
return 0; |
} |
} |