version 1.5, 2000/01/19 03:13:40 |
version 1.7, 2000/02/09 12:24:52 |
|
|
/*$OpenXM: OpenXM/src/kxx/oxlog.c,v 1.4 1999/12/15 11:40:23 ohara Exp $*/ |
/*$OpenXM: OpenXM/src/kxx/oxlog.c,v 1.6 2000/02/09 12:02:56 takayama Exp $*/ |
#include <stdio.h> |
#include <stdio.h> |
#include <signal.h> |
#include <signal.h> |
#include <string.h> |
#include <string.h> |
|
|
-ox /home/nobuki/kxx/ox_asir >& /dev/null |
-ox /home/nobuki/kxx/ox_asir >& /dev/null |
2 3 |
2 3 |
*/ |
*/ |
|
static int Debug_which = 1; |
char *toFullPath(char *s); |
char *toFullPath(char *s); |
char *which(char *s,char *env); |
char *which(char *s,char *env); |
main(int argc, char *argv[]) { |
main(int argc, char *argv[]) { |
Line 32 main(int argc, char *argv[]) { |
|
Line 33 main(int argc, char *argv[]) { |
|
sigemptyset(&sss); |
sigemptyset(&sss); |
sigaddset(&sss,SIGINT); |
sigaddset(&sss,SIGINT); |
sigprocmask(SIG_BLOCK,&sss,NULL); |
sigprocmask(SIG_BLOCK,&sss,NULL); |
if (argc > 2) { |
if (argc >= 2) { |
oxname = argv[1]; |
oxname = argv[1]; |
oxname = toFullPath(oxname); |
oxname = toFullPath(oxname); |
|
if (oxname == NULL) oxname="NULL"; |
} |
} |
if (argc == 4) { |
if (argc == 2) { |
|
execl(oxname,oxname,NULL); |
|
}else if (argc == 3) { |
|
execl(oxname,oxname,argv[2],NULL); |
|
}else if (argc == 4) { |
execl(oxname,oxname,argv[2],argv[3],NULL); |
execl(oxname,oxname,argv[2],argv[3],NULL); |
}else if (argc == 5) { |
}else if (argc == 5) { |
execl(oxname,oxname,argv[2],argv[3],argv[4],NULL); |
execl(oxname,oxname,argv[2],argv[3],argv[4],NULL); |
Line 74 main(int argc, char *argv[]) { |
|
Line 80 main(int argc, char *argv[]) { |
|
}else if (argc == 17) { |
}else if (argc == 17) { |
execl(oxname,oxname,argv[2],argv[3],argv[4],argv[5],argv[6], |
execl(oxname,oxname,argv[2],argv[3],argv[4],argv[5],argv[6], |
argv[7],argv[8],argv[9],argv[10],argv[11], argv[12],argv[13],argv[14],argv[15],argv[16],NULL); |
argv[7],argv[8],argv[9],argv[10],argv[11], argv[12],argv[13],argv[14],argv[15],argv[16],NULL); |
|
}else if (argc == 18) { |
|
execl(oxname,oxname,argv[2],argv[3],argv[4],argv[5],argv[6], |
|
argv[7],argv[8],argv[9],argv[10],argv[11], argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],NULL); |
|
}else if (argc == 19) { |
|
execl(oxname,oxname,argv[2],argv[3],argv[4],argv[5],argv[6], |
|
argv[7],argv[8],argv[9],argv[10],argv[11], argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],NULL); |
|
}else if (argc == 20) { |
|
execl(oxname,oxname,argv[2],argv[3],argv[4],argv[5],argv[6], |
|
argv[7],argv[8],argv[9],argv[10],argv[11], argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19],NULL); |
|
}else if (argc == 21) { |
|
execl(oxname,oxname,argv[2],argv[3],argv[4],argv[5],argv[6], |
|
argv[7],argv[8],argv[9],argv[10],argv[11], argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19],argv[20],NULL); |
}else { |
}else { |
fprintf(stderr,"Error in oxlog: cannot handle argc=%d\n",argc); |
fprintf(stderr,"Error in oxlog: cannot handle argc=%d\n",argc); |
fprintf(stderr,"oxname=%s\n",oxname); |
fprintf(stderr,"oxname=%s\n",oxname); |
for (i=0; i<argc; i++) { |
for (i=0; i<argc; i++) { |
fprintf(stderr,"argv[%d]=%s ",i,argv[i]); |
fprintf(stderr,"argv[%d]=%s ",i,argv[i]); |
} |
} |
|
|
} |
} |
|
|
char *toFullPath(char *s) { |
char *toFullPath(char *s) { |
|
extern int Debug_which; |
|
char *path ="/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/usr/openwin/bin:/usr/X/bin"; |
|
char *s2; |
if (strlen(s) == 0) { |
if (strlen(s) == 0) { |
return(s); |
return(s); |
} |
} |
if (strchr(s,'/') != NULL) return(s); |
if (strchr(s,'/') != NULL) return(s); |
else { |
else { |
s = which(s,getenv("PATH")); |
s2 = which(s,getenv("PATH")); |
} |
} |
|
if (s2 == NULL) { |
|
if (Debug_which) fprintf(stderr,"Could not find arg[1] in your search path.\n"); |
|
if (Debug_which) fprintf(stderr,"You path is %s.\n",getenv("PATH")); |
|
if (Debug_which) fprintf(stderr,"Trying to find in the path: %s\n",path); |
|
s2 = which(s,path); |
|
} |
|
return(s2); |
} |
} |
|
|
/*which("xterm", getenv("PATH"));*/ |
/*which("xterm", getenv("PATH"));*/ |
char *which(char *prog, char *path_env) |
char *which(char *prog, char *path_env) |
{ |
{ |
|
extern int Debug_which ; |
char *tok; |
char *tok; |
char *path; |
char *path; |
char delim[] = ":"; |
char delim[] = ":"; |
char *e = alloca(strlen(path_env)+1); |
char *e = alloca(strlen(path_env)+1); |
strcpy(e, path_env); |
strcpy(e, path_env); |
tok = strtok(e, delim); |
tok = strtok(e, delim); |
|
if (Debug_which) fprintf(stderr,"PATH=%s\n",path_env); |
while (tok != NULL) { |
while (tok != NULL) { |
char *path = malloc(strlen(tok)+strlen(prog)+2); |
char *path = malloc(strlen(tok)+strlen(prog)+2); |
sprintf(path, "%s/%s", tok, prog); |
sprintf(path, "%s/%s", tok, prog); |
if (access(path, X_OK&R_OK) == 0) { |
if (access(path, X_OK&R_OK) == 0) { |
|
if (Debug_which) fprintf(stderr,"Found: %s\n",path); |
return path; |
return path; |
} |
} |
free(path); |
free(path); |