=================================================================== RCS file: /home/cvs/OpenXM/src/kxx/ox100start.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- OpenXM/src/kxx/ox100start.c 2003/07/21 07:32:01 1.1 +++ OpenXM/src/kxx/ox100start.c 2003/07/21 11:56:33 1.2 @@ -1,4 +1,4 @@ -/* $OpenXM$ */ +/* $OpenXM: OpenXM/src/kxx/ox100start.c,v 1.1 2003/07/21 07:32:01 takayama Exp $ */ /* Moved from misc-2003/07/cygwin/test.c */ #include #include @@ -9,59 +9,13 @@ #include #include #include +#include "ox_pathfinder.h" -extern char **environ; - -static int getOStypei(); -static char *addSlash(); -static char *get_sm1_lib_path(); -static char *get_k0_lib_path(); -static char *get_ox_asir_path(); -static char *get_ox_sm1_path(); -static char *get_ox_path(); -static char *get_oxc_path(); -static char *get_oxlog_path(); -static char **setOXenv(); +static void usage(void); static int forkExec(char **argv); -static void usage(); -char **catArgv(char **argv1,char **argv2); +extern char **environ; -char *getOStypes(); -char *getOpenXM_HOME(); -char *getLOAD_SM1_PATH2(); -char **getServerEnv(char *oxServer); -char **debugServerEnv(char *oxServer); -char *cygwinPathToWinPath(char *s); - -static int Verbose_get_home = 1; -static int NoX = 0; - -#define MYFORKCP_SIZE 100 -static int Myforkchildren[MYFORKCP_SIZE]; -static int Myforkcp=0; -static void myforkwait() { - int status; - int pid; - int i,j; - signal(SIGCHLD,SIG_IGN); - pid = wait(&status); - fprintf(stderr,"Child process %d is exiting.\n",pid); - for (i=0; i 0) Myforkcp--; - } - } - signal(SIGCHLD,myforkwait); -} - -#define nomemory(a) {fprintf(stderr,"(%d) no more memory.\n",a);exit(10);} -#define mymalloc(a) malloc(a) - -#ifndef NOT_STANDALONE main(int argc,char *argv[]) { char *s; char s2[1024]; @@ -72,6 +26,7 @@ main(int argc,char *argv[]) { int i; char *serverName; + /* if (Verbose_get_home) { printf("ostype=%s\n",getOStypes()); printf("OpenXM_HOME=%s\n",getOpenXM_HOME()); @@ -79,6 +34,7 @@ main(int argc,char *argv[]) { printf("k0 lib =%s\n",get_k0_lib_path()); printf("ox_asir =%s\n",get_ox_asir_path()); } + */ /* Initialize parameters */ serverName = NULL; @@ -97,7 +53,7 @@ main(int argc,char *argv[]) { serverName = argv[i]; aaa = getServerEnv(serverName); }else if (strcmp(argv[i],"-nox")==0) { - NoX = 1; + ox_pathfinderNoX(1); }else{ fprintf(stderr,"Unknown option.\n"); usage(); @@ -106,9 +62,28 @@ main(int argc,char *argv[]) { } forkExec(aaa); +} +#define MYFORKCP_SIZE 100 +static int Myforkchildren[MYFORKCP_SIZE]; +static int Myforkcp=0; +static void myforkwait() { + int status; + int pid; + int i,j; + signal(SIGCHLD,SIG_IGN); + pid = wait(&status); + fprintf(stderr,"Child process %d is exiting.\n",pid); + for (i=0; i 0) Myforkcp--; + } + } + signal(SIGCHLD,myforkwait); } -#endif static void usage() { fprintf(stderr,"oxstart100 -oxserver xxx [-e args]\n"); @@ -143,8 +118,7 @@ static int forkExec(char **argv) { sigaddset(&sss,SIGINT); sigprocmask(SIG_BLOCK,&sss,NULL); } - eee = setOXenv(); - if (NoX) { + if (ox_pathfinderNoX(-1)) { FILE *null; null = fopen("/dev/null","wb"); dup2(fileno(null),1); @@ -156,563 +130,3 @@ static int forkExec(char **argv) { } } -static int getOStypei() { - /* - 0 unix - 1 windows-cygwin - 2 windows-cygwin-on-X - 3 windows-native - */ - int ostype; - char *s,*s2,*s3; -#if defined(__CYGWIN__) - ostype = 1; -#else - ostype = 0; -#endif - if (ostype == 0) return ostype; - /* Heuristic method */ - s = (char *)getenv("WINDOWID"); - if (s != NULL) { - return 2; - } - s = (char *)getenv("OSTYPE"); - s2 = (char *)getenv("MACHTYPE"); - s3 = (char *)getenv("PWD"); - if ((s != NULL) || (s2 != NULL) || (s3 != NULL)) { - return 1; - } - return 3; -} - -char *getOStypes() { - int ostype; - ostype = getOStypei(); - - if (ostype == 1) { - return("Windows-cygwin"); - }else if (ostype == 2) { - return("Windows-cygwin-on-X"); - }else if (ostype == 3) { - return("Windows-native"); - }else{ - return("unix"); - } -} - -/* - kan96xx/Kan/ext.c -*/ -/* - -1 : no file - non-negative: there is a regular file or a directory -*/ -static int getFileSize(char *s) { - struct stat buf; - int m; - if (s == NULL) return -1; - m = stat(s,&buf); - if (m == -1) { - return -1; - /* fail */ - }else{ - /* success */ - return (int) buf.st_size; - } -} - -static char *addSlash(char *p) { - char *p2; - if ((strlen(p) == 0) || (p == NULL)) return(p); - if (p[strlen(p)-1] == '/') return(p); - /* Add / */ - p2 = (char *) mymalloc(sizeof(char)*(strlen(p)+3)); - if (p2 == NULL) { fprintf(stderr,"No more memory.\n"); exit(10); } - strcpy(p2,p); strcat(p2,"/"); - return(p2); - -} - -static void msg_get_home(int t,char *s) { - extern int Verbose_get_home; - if (!Verbose_get_home) return; - if (t == 1) { - fprintf(stderr,"getOpenXM_HOME(): "); - }else if (t == 2) { - fprintf(stderr,"getServerEnv(): "); - }else if (t == 3) { - fprintf(stderr,"setOXenv(): "); - }else if (t == 4) { - fprintf(stderr,"cygwinPathToWinPath(): "); - }else if (t == 5) { - fprintf(stderr,"catArgv(): "); - }else{ - fprintf(stderr,"getting path...: "); - } - if (s != NULL) { - fprintf(stderr,"%s\n",s); - }else{ - fprintf(stderr," --NULL-- \n"); - } -} -/* cf. k097/d.c getLOAD_K_PATH(); - kan96xx/Kan/scanner.c getLOAD_SM1_PATH(); - */ -char *getOpenXM_HOME() { - char *p; - char *h; - p = getOStypes(); - msg_get_home(1,p); - - p = (char *) getenv("OpenXM_HOME"); - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OpenXM_HOME is not found."); - - p = (char *) getenv("OPENXM_HOME"); - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OPENXM_HOME is not found."); - - if (getOStypei() == 3) { /* cygwin-native */ - p = (char *) getenv("OpenXM_HOME_WIN"); - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OpenXM_HOME_WIN is not found."); - - p = (char *) getenv("OPENXMHOMEWIN"); - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OPENXMHOMEWIN is not found."); - } - - /* Try to find default directories */ - h = (char *)getenv("HOME"); - if (h != NULL) { - p = (char *)mymalloc(strlen(h)+100); - if (p == NULL) { - fprintf(stderr,"No more memory.\n"); exit(100); - } - strcat(h,"/OpenXM"); - p = h; - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OpenXM is not found under the home directory."); - } - - if (getOStypei() != 3) { - p = "/usr/local/OpenXM"; - }else{ - p = "/cygdrive/c/usr/local/OpenXM"; - } - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OpenXM is not found under /usr/local"); - - if (getOStypei() != 0) { - p = "/cygdrive/c/OpenXM"; - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OpenXM is not found under c:\\"); - - p = "/cygdrive/c/OpenXM-win"; - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OpenXM-win is not found under c:\\"); - - p = "/cygdrive/c/Program Files/OpenXM"; - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OpenXM is not found under c:\\Program Files"); - - p = "/cygdrive/c/Program Files/OpenXM-win"; - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"OpenXM-win is not found under c:\\Program Files"); - - } - - msg_get_home(1,"Giving up!"); - return NULL; - -} - -static char *get_k0_lib_path() { - char *oxhome; - char *p; - - - p = (char *)getenv("LOAD_K_PATH"); - if (p != NULL) { - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"LOAD_K0_PATH is not found."); - } - - oxhome = getOpenXM_HOME(); - if (oxhome == NULL) return (char *)NULL; - p = (char *) mymalloc(strlen(oxhome)+100); - if (p == NULL) {fprintf(stderr,"No more memory.\n"); exit(100);} - - strcpy(p,oxhome); - strcat(p,"lib/k097"); - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,oxhome); - msg_get_home(1," is found, but "); - msg_get_home(1,p); - msg_get_home(1," is not found."); - - msg_get_home(1,"Giving up!"); - return NULL; -} - -static char *get_sm1_lib_path() { - char *oxhome; - char *p; - - p = (char *)getenv("LOAD_SM1_PATH"); - if (p != NULL) { - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,"LOAD_SM1_PATH is not found."); - } - - oxhome = getOpenXM_HOME(); - if (oxhome == NULL) return NULL; - p = (char *) mymalloc(strlen(oxhome)+100); - if (p == NULL) {fprintf(stderr,"No more memory.\n"); exit(100);} - - strcpy(p,oxhome); - strcat(p,"lib/sm1"); - if (getFileSize(p) != -1) return addSlash(p); - msg_get_home(1,oxhome); - msg_get_home(1," is found, but "); - msg_get_home(1,p); - msg_get_home(1," is not found."); - - msg_get_home(1,"Giving up!"); - return NULL; -} - -static char *get_ox_asir_path() { - char *oxhome; - char *p; - - oxhome = getOpenXM_HOME(); - if (oxhome == NULL) return NULL; - p = (char *) mymalloc(strlen(oxhome)+100); - if (p == NULL) {fprintf(stderr,"No more memory.\n"); exit(100);} - - strcpy(p,oxhome); - strcat(p,"bin/ox_asir"); - if (getFileSize(p) != -1) return p; - msg_get_home(1,oxhome); - msg_get_home(1," is found, but "); - msg_get_home(1,p); - msg_get_home(1," is not found."); - - strcpy(p,oxhome); - strcat(p,"lib/asir/ox_asir"); - if (getFileSize(p) != -1) return p; - msg_get_home(1,oxhome); - msg_get_home(1," is found, but "); - msg_get_home(1,p); - msg_get_home(1," is not found."); - - msg_get_home(1,"Giving up!"); - return NULL; -} - -static char *get_ox_path() { - char *oxhome; - char *p; - - oxhome = getOpenXM_HOME(); - if (oxhome == NULL) return NULL; - p = (char *) mymalloc(strlen(oxhome)+100); - if (p == NULL) {fprintf(stderr,"No more memory.\n"); exit(100);} - - strcpy(p,oxhome); - strcat(p,"bin/ox"); - if (getFileSize(p) != -1) return p; - msg_get_home(1,oxhome); - msg_get_home(1," is found, but "); - msg_get_home(1,p); - msg_get_home(1," is not found."); - - msg_get_home(1,"Giving up!"); - return NULL; -} - - -static char *get_oxc_path() { - char *oxhome; - char *p; - - oxhome = getOpenXM_HOME(); - if (oxhome == NULL) return NULL; - p = (char *) mymalloc(strlen(oxhome)+100); - if (p == NULL) {fprintf(stderr,"No more memory.\n"); exit(100);} - - strcpy(p,oxhome); - strcat(p,"bin/oxc"); - if (getFileSize(p) != -1) return p; - msg_get_home(1,oxhome); - msg_get_home(1," is found, but "); - msg_get_home(1,p); - msg_get_home(1," is not found."); - - msg_get_home(1,"Giving up!"); - return NULL; -} - -static char *get_oxlog_path() { - char *oxhome; - char *p; - - oxhome = getOpenXM_HOME(); - if (oxhome == NULL) return NULL; - p = (char *) mymalloc(strlen(oxhome)+100); - if (p == NULL) {fprintf(stderr,"No more memory.\n"); exit(100);} - - strcpy(p,oxhome); - strcat(p,"bin/oxlog"); - if (getFileSize(p) != -1) return p; - msg_get_home(1,oxhome); - msg_get_home(1," is found, but "); - msg_get_home(1,p); - msg_get_home(1," is not found."); - - msg_get_home(1,"Giving up!"); - return NULL; -} - -char *cygwinPathToWinPath(char *s) { - char *pos; - char *ans; - int i; - msg_get_home(4,s); - if (s == NULL) return NULL; - if (strlen(s) == 0) return s; - - ans = (char *) mymalloc(strlen(s) + 32); - if (ans == NULL) nomemory(0); - - pos = (char *)strstr(s,"/cygdrive/"); - if (pos == s) { - strcpy(ans,&(s[9])); - ans[0] = s[10]; ans[1] = ':'; ans[2] = '\\'; - }else{ - strcpy(ans,s); - } - - if (ans[0] == '/') { - strcpy(ans,"C:\\cygwin"); - strcat(ans,s); - } - - - for (i=0; i = 0) { - xterm = "/cygdrive/c/winnt/system32/cmd.exe /c start /min "; - argv[i] = "/cygdrive/c/winnt/system32/cmd.exe"; i++; argv[i] = NULL; - }else if (getFileSize("/cygdrive/c/windows/system32/cmd.exe") >= 0) { - xterm = "/cygdrive/c/windows/system32/cmd.exe /c start /min "; - argv[i] = "/cygdrive/c/windows/system32/cmd.exe"; i++; argv[i] = NULL; - }else{ - msg_get_home(2,"cmd.exe is not found. NoX is automatically set."); - NoX = 1; - } - } - oxlog = " "; - if (!NoX) { - argv[i] = "/c"; i++; argv[i] = NULL; - argv[i] = "start"; i++; argv[i] = NULL; - argv[i] = "/min"; i++; argv[i] = NULL; - } - argv[i] = cygwinPathToWinPath(get_ox_path()); i++; argv[i] = NULL; - argv[i] = "-ox"; i++; argv[i] = NULL; - argv[i] = oxServer; i++; argv[i] = NULL; - } - - aaa = (char **) mymalloc(sizeof(char*)*(i+1)); - if (aaa == NULL) nomemory(0); - msg_get_home(2,"--------- Result --------------"); - for (k=0; k n-2) return aaa; - } - if (load_sm1_path != NULL) { - aaa[i] = load_sm1_path; i++; aaa[i] = NULL; if (i > n-2) return aaa; - } - if (load_k0_path != NULL) { - aaa[i] = load_k0_path; i++; aaa[i] = NULL; if (i > n-2) return aaa; - } - if (asir_config != NULL) { - aaa[i] = asir_config; i++; aaa[i] = NULL; if (i > n-2) return aaa; - } - if (asir_libdir != NULL) { - aaa[i] = asir_libdir; i++; aaa[i] = NULL; if (i > n-2) return aaa; - } - if (asirloadpath != NULL) { - aaa[i] = asirloadpath; i++; aaa[i] = NULL; if (i > n-2) return aaa; - } - if (asir_rsh != NULL) { - aaa[i] = asir_rsh; i++; aaa[i] = NULL; if (i > n-2) return aaa; - } - - msg_get_home(3,"--------- Result --------------"); - for (k=0; k