version 1.7, 2001/01/08 05:26:48 |
version 1.18, 2013/11/06 06:23:23 |
|
|
/* $OpenXM: OpenXM/src/k097/d.c,v 1.6 2000/12/10 02:21:45 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/k097/d.c,v 1.17 2006/05/06 09:40:26 takayama Exp $ */ |
/* simple.c, 1996, 1/1 --- 1/5 */ |
/* simple.c, 1996, 1/1 --- 1/5 */ |
#include <stdio.h> |
#include <stdio.h> |
#include <ctype.h> |
#include <ctype.h> |
#include <setjmp.h> |
#include <setjmp.h> |
#include <stdlib.h> |
#include <stdlib.h> |
|
#include <sys/types.h> |
|
#include <sys/stat.h> |
#include "d.h" |
#include "d.h" |
#include "simple.tab.h" |
#include "simple.tab.h" |
|
#include "ox_pathfinder.h" |
|
|
|
#if defined(__CYGWIN__) |
|
#define JMP_BUF sigjmp_buf |
|
#define SETJMP(env) sigsetjmp(env,1) |
|
#define LONGJMP(env,p) siglongjmp(env,p) |
|
#else |
|
#define JMP_BUF jmp_buf |
|
#define SETJMP(env) setjmp(env) |
|
#define LONGJMP(env,p) longjmp(env,p) |
|
#endif |
|
|
jmp_buf KCenvOfParser; |
JMP_BUF KCenvOfParser; |
|
|
int DebugMode = 1; |
int DebugMode = 1; |
extern int K00_verbose; |
extern int K00_verbose; |
Line 169 objectp newObject_d() { |
|
Line 181 objectp newObject_d() { |
|
fprintf(stderr,"Error: No more memory in newObject_d().\n"); |
fprintf(stderr,"Error: No more memory in newObject_d().\n"); |
exit(10); |
exit(10); |
} |
} |
obj->tag = Snull; |
obj->tag = Snull; obj->attr = NULL; |
return(obj); |
return(obj); |
} |
} |
|
|
Line 593 KCerror(char *s) /* You need this function. Otherwis |
|
Line 605 KCerror(char *s) /* You need this function. Otherwis |
|
ungetc(MARK_CHAR,stdin); |
ungetc(MARK_CHAR,stdin); |
while (fsgetc(Inop) > MARK_CHAR) ; |
while (fsgetc(Inop) > MARK_CHAR) ; |
} |
} |
return ; |
return 0; |
longjmp(KCenvOfParser,2); |
LONGJMP(KCenvOfParser,2); |
exit(1); |
exit(1); |
} |
} |
|
|
|
|
if (c == EOF) { |
if (c == EOF) { |
fprintf(stderr,"%d: Unexpected end of file in a comment.\n",Linenumber); |
fprintf(stderr,"%d: Unexpected end of file in a comment.\n",Linenumber); |
fsungetc(c,Inop); /* should change */ |
fsungetc(c,Inop); /* should change */ |
return; |
return 0; |
} |
} |
if (c == '*') { |
if (c == '*') { |
c = fsgetc(Inop); |
c = fsgetc(Inop); |
if (c == '/') return; |
if (c == '/') return 0; |
} |
} |
} |
} |
} |
} |
Line 1046 void loadFileWithCpp(objectp op) |
|
Line 1058 void loadFileWithCpp(objectp op) |
|
char tmpName[1024]; |
char tmpName[1024]; |
int pid; |
int pid; |
objectp ob; |
objectp ob; |
|
char *outfile; |
|
char *cpp; |
|
char *argv[10]; |
|
int n; |
|
char *sfile = NULL; |
if (op->tag != Sstring) { |
if (op->tag != Sstring) { |
fprintf(stderr,"File name must be given as an argment of load.\n"); |
fprintf(stderr,"File name must be given as an argment of load.\n"); |
return; |
return; |
Line 1056 void loadFileWithCpp(objectp op) |
|
Line 1073 void loadFileWithCpp(objectp op) |
|
fprintf(stderr,"Too long file name.\n"); |
fprintf(stderr,"Too long file name.\n"); |
return; |
return; |
} |
} |
system("/bin/rm -f k00.cppload.tmp"); |
/* Use gcc -v to know what symbols are defined. |
/* Use gcc -v to know what symbols are defined. */ |
if defined(linux) || defined(__linux__) |
#if defined(linux) || defined(__linux__) |
Removed old codes. */ |
strcpy(fname,"/lib/cpp -P -lang-c++ <"); |
|
|
sfile = op->lc.str; |
|
cpp = getCppPath(); |
|
if (cpp == NULL) { |
|
fprintf(stderr,"cpp is not found.\n"); return; |
|
} |
|
/* printf("%s\n",cpp); */ |
|
outfile = generateTMPfileName("k0-cpp"); |
|
if (outfile == NULL) { |
|
fprintf(stderr,"Failed to generate a temporary file name.\n"); return; |
|
} |
|
/* printf("%s\n",outfile); */ |
|
if ((char *)strstr(cpp,"/asir/bin/cpp.exe") == NULL) { |
|
#if defined(__APPLE_CC__) |
|
sprintf(tmpName,"cpp -E -P %s | sed -e 's/^#.*//g' >%s",sfile,outfile); |
#else |
#else |
strcpy(fname,"cpp -P -lang-c++ <"); |
argv[0] = cpp; |
|
argv[1] = "-P"; |
|
argv[2] = "-lang-c++"; |
|
argv[3] = sfile; |
|
argv[4] = outfile; |
|
argv[5] = NULL; |
#endif |
#endif |
strcat(fname,op->lc.str); |
}else{ |
strcat(fname," >k00.cppload.tmp"); |
argv[0] = cpp; |
system(fname); |
argv[1] = "-P"; |
|
argv[2] = cygwinPathToWinPath(sfile); |
|
argv[3] = cygwinPathToWinPath(outfile); |
|
argv[4] = NULL; |
|
} |
|
#if defined(__APPLE_CC__) |
|
system(tmpName); |
|
#else |
|
n=oxForkExecBlocked(argv); |
|
#endif |
|
|
ob = newObject_d(); |
ob = newObject_d(); |
ob->tag = Sstring; |
ob->tag = Sstring; |
ob->lc.str = "k00.cppload.tmp"; |
ob->lc.str = outfile; |
loadFile(ob); |
loadFile(ob); |
system("/bin/rm -f k00.cppload.tmp"); |
unlink(outfile); |
} |
} |
|
|
void showStringBuff(objectp op) |
void showStringBuff(objectp op) |
Line 1102 void showStringBuff(objectp op) |
|
Line 1148 void showStringBuff(objectp op) |
|
fprintf(stderr,"\n"); |
fprintf(stderr,"\n"); |
} |
} |
|
|
|
|
|
|
char *getLOAD_K_PATH() { |
char *getLOAD_K_PATH() { |
char *p; |
return getLOAD_K_PATH2(); |
char *p2; |
|
p = getenv("LOAD_K_PATH"); |
|
if (p == NULL) { |
|
return("/usr/local/lib/kxx97/yacc/"); |
|
}else{ |
|
if (strlen(p) == 0) return(p); |
|
if (p[strlen(p)-1] == '/') return(p); |
|
/* Add / */ |
|
p2 = (char *) malloc(sizeof(char)*(strlen(p)+3)); |
|
if (p2 == NULL) { fprintf(stderr,"No more memory.\n"); exit(10); } |
|
strcpy(p2,p); strcat(p2,"/"); |
|
return(p2); |
|
} |
|
} |
} |
|
|