/* -*- mode: C -*- */ /* $OpenXM: OpenXM/src/oxc/oxc.c,v 1.16 2016/04/01 18:12:39 ohara Exp $ */ #include #include #include #include #include #include "mysocket.h" #include "ox_toolkit.h" #include "sm.h" /* oxc -c password -p port -h hostname */ static char *remote_host = ""; static short port = 0; static char *password = ""; int oxf_connect_dup(char *remote, short port) { int fd = mysocketOpen(remote, port); /* Here do we need to confirm? */ dup2(fd, 3); dup2(fd, 4); /* is it necessary? maybe fd == 4. */ return fd; } int lf_oxc_open_main(char *cmd, short port) { pid_t pid; if ((pid = fork()) == 0) { oxf_connect_dup(remote_host, port); ox_printf("oxc: oxc_open(%s, %d)\n", cmd, port); execlp(cmd, cmd, NULL); } return pid; /* if error, pid == 0 */ } #define MAX_RETRY 2000 OXFILE *connection() { OXFILE *oxfp; int counter = MAX_RETRY; while((oxfp = oxf_connect_active(remote_host, port)) == NULL) { if (--counter > 0) { usleep(100); /* spends 100 micro seconds */ }else { ox_printf("oxc: cannot connect.\n"); return NULL; } } oxf_confirm_server(oxfp, password); oxf_determine_byteorder_server(oxfp); return oxfp; } __inline__ static char *sskip(char *s) { while (isspace(*s)) { s++; } return s; } __inline__ static char *wskip(char *s) { while (!isspace(*s) && *s != '\0') { s++; } return s; } static int wc(char *s) { int n = 0; s = sskip(s); while(*s != '\0') { s = wskip(s); s = sskip(s); n++; } return n; } static void word(char *str, int argc, char *argv[]) { int i; char *s = strcpy(malloc(strlen(str)+1), str); for(i=0; ifd); mathcap_init(20001006, "v2000.10.06", "oxc", basic0, NULL); sm(oxfp); } return 0; }