Return to repl.c CVS log | Up to [local] / OpenXM / rc |
version 1.10, 2003/01/16 08:27:23 | version 1.17, 2004/06/20 04:55:32 | ||
---|---|---|---|
|
|
||
/* $OpenXM: OpenXM/rc/repl.c,v 1.9 2003/01/16 07:57:42 maekawa Exp $ */ | /* $OpenXM: OpenXM/rc/repl.c,v 1.16 2004/06/14 11:10:40 takayama Exp $ */ | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
#include <errno.h> | #include <errno.h> | ||
#include <fcntl.h> | |||
#include <string.h> | #include <string.h> | ||
#include <unistd.h> | #include <unistd.h> | ||
#define BUFSIZE 10000 | #define BUFSIZE 10000 | ||
#define SSIZE 1024 | |||
/* If you make the following two strings longer, increase the number SSIZE */ | |||
#define REPL_IMGFILE "repl_test.img" | |||
#define REPL_PSFILE "repl_test.ps" | |||
int | int | ||
main(int argc,char *argv[]) { | main(int argc,char *argv[]) { | ||
char s[BUFSIZE]; | char s[BUFSIZE]; | ||
|
|
||
char *slash; | char *slash; | ||
char type = 'b'; | char type = 'b'; | ||
FILE *fp; | FILE *fp; | ||
int fd,i; | |||
char sss_png[SSIZE]; | |||
char sss_gif[SSIZE]; | |||
if (argc >= 2) { | |||
if (strcmp(argv[1],"csh")==0) { | |||
type = 'c'; | |||
} | |||
} | |||
if (getcwd(cwd, sizeof(cwd)) == NULL) { | if (getcwd(cwd, sizeof(cwd)) == NULL) { | ||
fprintf(stderr, "getcwd: %s\n", strerror(errno)); | fprintf(stderr, "getcwd: %s\n", strerror(errno)); | ||
exit(1); | exit(EXIT_FAILURE); | ||
} | } | ||
if ((slash = strrchr(cwd, '/')) == cwd) { | if ((slash = strrchr(cwd, '/')) == cwd) { | ||
fprintf(stderr, "The current working directory is /.\n"); | fprintf(stderr, "The current working directory is /.\n"); | ||
exit(1); | exit(EXIT_FAILURE); | ||
} | } | ||
*slash = 0; | *slash = 0; | ||
for (i=1; i<argc; i++) { | |||
if (strcmp(argv[i],"csh")==0) { | |||
type = 'c'; | |||
}else if (strcmp(argv[i],"bash")==0) { | |||
type = 'b'; | |||
}else if (strcmp(argv[i],"--prefix")==0) { | |||
i++; | |||
strcpy(cwd,argv[i]); | |||
strcat(cwd,"/OpenXM"); | |||
if (cwd[0] != '/') { | |||
fprintf(stderr,"Warning: prefix must start with /\n"); | |||
fprintf(stderr,"Your prefix is %d\n",cwd); | |||
} | |||
}else{ | |||
fprintf(stderr,"Warning: Unknown option.\n"); | |||
} | |||
} | |||
while (fgets(s,BUFSIZE,stdin) != NULL) { | while (fgets(s,BUFSIZE,stdin) != NULL) { | ||
if (strcmp(s,"OpenXM_HOME=$HOME/OpenXM\n") == 0) { | if (strcmp(s,"OpenXM_HOME=$HOME/OpenXM\n") == 0) { | ||
printf("OpenXM_HOME=%s\n",cwd); | printf("OpenXM_HOME=%s\n",cwd); | ||
|
|
||
/* Configuring environmental variables. */ | /* Configuring environmental variables. */ | ||
/* Check if pstoimg (src/asir-contrib) supports png format. */ | /* Check if pstoimg (src/asir-contrib) supports png format. */ | ||
fp = fopen("/tmp/repl_test.ps","w"); | if ((fp = fopen(REPL_PSFILE,"w")) == NULL) { | ||
if (fp == NULL) { | fprintf(stderr, "fopen: %s", strerror(errno)); | ||
fprintf(stderr,"Open error of /tmp/repl_test.ps. Use the existing file.\n"); | exit(EXIT_FAILURE); | ||
}else{ | |||
fprintf(fp,"/Times-Roman findfont 10 scalefont setfont\n"); | |||
fprintf(fp," 390 290 moveto (F) show \n"); | |||
fprintf(fp,"showpage \n"); | |||
fclose(fp); | |||
} | } | ||
if (!system("pstoimg -type png /tmp/repl_test.ps -out /tmp/repl_test.png >/dev/null")) { | fprintf(fp,"/Times-Roman findfont 10 scalefont setfont\n"); | ||
fprintf(fp," 390 290 moveto (F) show \n"); | |||
fprintf(fp,"showpage \n"); | |||
while (fclose(fp) != 0) { | |||
if (errno == EINTR) | |||
continue; | |||
break; | |||
} | |||
sprintf(sss_png,"pstoimg -type png %s -out %s >/dev/null",REPL_PSFILE,REPL_IMGFILE); | |||
sprintf(sss_gif,"pstoimg -type gif %s -out %s >/dev/null",REPL_PSFILE,REPL_IMGFILE); | |||
if (!system(sss_png)) { | |||
if (type == 'b') { | if (type == 'b') { | ||
printf("export OpenXM_PSTOIMG_TYPE=png\n"); | printf("export OpenXM_PSTOIMG_TYPE=png\n"); | ||
}else{ | }else{ | ||
printf("setenv OpenXM_PSTOIMG_TYPE png\n"); | printf("setenv OpenXM_PSTOIMG_TYPE png\n"); | ||
} | } | ||
}else if (!system("pstoimg -type gif /tmp/repl_test.ps -out /tmp/repl_test.gif >/dev/null")) { | }else if (!system(sss_gif)) { | ||
if (type == 'b') { | if (type == 'b') { | ||
printf("OpenXM_PSTOIMG_TYPE=gif\n"); | printf("OpenXM_PSTOIMG_TYPE=gif\n"); | ||
printf("export OpenXM_PSTOIMG_TYPE\n"); | printf("export OpenXM_PSTOIMG_TYPE\n"); | ||
|
|
||
printf("setenv OpenXM_PSTOIMG_TYPE=gif\n"); | printf("setenv OpenXM_PSTOIMG_TYPE=gif\n"); | ||
} | } | ||
}else { | }else { | ||
printf("OpenXM_PSTOIMG_TYPE=no\n"); | if (type == 'b') { | ||
printf("export OpenXM_PSTOIMG_TYPE\n"); | printf("OpenXM_PSTOIMG_TYPE=no\n"); | ||
printf("export OpenXM_PSTOIMG_TYPE\n"); | |||
}else{ | |||
printf("setenv OpenXM_PSTOIMG_TYPE no\n"); | |||
} | |||
} | } | ||
system("rm -f /tmp/repl_test.*"); | |||
while (unlink(REPL_IMGFILE) != 0) { | |||
if (errno == EINTR) | |||
continue; | |||
break; | |||
} | |||
while (unlink(REPL_PSFILE) != 0) { | |||
if (errno == EINTR) | |||
continue; | |||
break; | |||
} | |||
exit(0); | exit(EXIT_SUCCESS); | ||
} | } |