| version 1.2, 2000/01/21 03:01:25 |
version 1.7, 2001/01/08 05:26:48 |
|
|
| /* $OpenXM$ */ |
/* $OpenXM: OpenXM/src/k097/d.c,v 1.6 2000/12/10 02:21:45 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> |
| Line 13 jmp_buf KCenvOfParser; |
|
| Line 13 jmp_buf KCenvOfParser; |
|
| int DebugMode = 1; |
int DebugMode = 1; |
| extern int K00_verbose; |
extern int K00_verbose; |
| |
|
| static FILE *outfile = stdout; |
static FILE *outfile; |
| int Linenumber = 0; |
int Linenumber = 0; |
| objectp Inop = (objectp) NULL; /* Input stream */ |
objectp Inop = (objectp) NULL; /* Input stream */ |
| int Saki = 0; /* Look a head */ |
int Saki = 0; /* Look a head */ |
|
|
| |
|
| int Interactive = 1; |
int Interactive = 1; |
| |
|
| |
static int isThereStdin(); |
| |
#define MARK_CHAR 3 |
| |
|
| main2(int argc, char *argv[]) { |
main2(int argc, char *argv[]) { |
| FILE *f; |
FILE *f; |
| FILE *outf; |
FILE *outf; |
| Line 584 KCerror(char *s) /* You need this function. Otherwis |
|
| Line 587 KCerror(char *s) /* You need this function. Otherwis |
|
| { |
{ |
| K00recoverFromError(); |
K00recoverFromError(); |
| fprintf(stderr,"\nSyntax Error in the line %d:%s\n",Linenumber,s); |
fprintf(stderr,"\nSyntax Error in the line %d:%s\n",Linenumber,s); |
| showStringBuff(Inop); return ; |
showStringBuff(Inop); |
| |
/* Clean the junks. Try load("debug/buggy.k"); */ |
| |
if (isThereStdin()) { |
| |
ungetc(MARK_CHAR,stdin); |
| |
while (fsgetc(Inop) > MARK_CHAR) ; |
| |
} |
| |
return ; |
| longjmp(KCenvOfParser,2); |
longjmp(KCenvOfParser,2); |
| exit(1); |
exit(1); |
| } |
} |
| Line 877 static int popFile() { |
|
| Line 886 static int popFile() { |
|
| return(Saki); |
return(Saki); |
| } |
} |
| |
|
| |
static int isThereStdin() { |
| |
if (Stackp > 1 && (InopStack[1])->tag == Sfile |
| |
&& (InopStack[1])->lc.file == stdin) { |
| |
return(1); |
| |
}else{ |
| |
return(0); |
| |
} |
| |
} |
| |
|
| int fsgetc(objectp op) { |
int fsgetc(objectp op) { |
| struct stringBuf *obuf; |
struct stringBuf *obuf; |
| char *str; |
char *str; |
| Line 961 void parseAstring(char *s) |
|
| Line 979 void parseAstring(char *s) |
|
| |
|
| } |
} |
| |
|
| void loadFile(objectp op) |
objectp checkIfTheFileExists(objectp op) { |
| { |
|
| FILE *fp; |
FILE *fp; |
| char fname[1024]; |
char fname[1024]; |
| |
char *s; |
| |
objectp nullObj; |
| |
nullObj = 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 nullObj; |
| } |
} |
| if (strlen(op->lc.str) > 1000) { |
if (strlen(op->lc.str) > 800) { |
| fprintf(stderr,"Too long file name.\n"); |
fprintf(stderr,"Too long file name.\n"); |
| return; |
return nullObj; |
| } |
} |
| fp = fopen(op->lc.str,"r"); |
strcpy(fname,op->lc.str); |
| |
fp = fopen(fname,"r"); |
| if (fp == (FILE *)NULL) { |
if (fp == (FILE *)NULL) { |
| strcpy(fname,getLOAD_K_PATH()); |
strcpy(fname,getLOAD_K_PATH()); |
| strcat(fname,op->lc.str); |
strcat(fname,op->lc.str); |
| Line 983 void loadFile(objectp op) |
|
| Line 1004 void loadFile(objectp op) |
|
| strcat(fname,op->lc.str); |
strcat(fname,op->lc.str); |
| fp = fopen(fname,"r"); |
fp = fopen(fname,"r"); |
| if (fp == (FILE *)NULL) { |
if (fp == (FILE *)NULL) { |
| fprintf(stderr,"Cannot open the file <<%s>> for loading in the current directory nor the library directories %s and %s.\n",op->lc.str,getLOAD_K_PATH(),LOAD_K_PATH); |
fprintf(stderr,"Cannot open the file <<%s>> for loading in the current directory nor the library directories %s and %s.\n",op->lc.str,getLOAD_K_PATH(),LOAD_K_PATH); |
| return; |
return nullObj; |
| } |
} |
| } |
} |
| } |
} |
| |
close(fp); |
| |
op = newObject_d(); |
| |
op->tag = Sstring; |
| |
s = (char *)GC_malloc(sizeof(char)*(strlen(fname)+1)); |
| |
if (s == NULL) fprintf(stderr,"No more memory.\n"); |
| |
strcpy(s,fname); |
| |
op->lc.str = s; |
| |
return(op); |
| |
} |
| |
|
| |
void loadFile(objectp op) |
| |
{ |
| |
FILE *fp; |
| |
char fname[1024]; |
| |
if (op->tag != Sstring) { |
| |
fprintf(stderr,"File name must be given as an argment of load.\n"); |
| |
return; |
| |
} |
| |
op = checkIfTheFileExists(op); |
| |
if (op == NULL) return; |
| |
if (strlen(op->lc.str) > 1000) { |
| |
fprintf(stderr,"Too long file name.\n"); |
| |
return; |
| |
} |
| |
fp = fopen(op->lc.str,"r"); |
| if (K00_verbose) fprintf(stderr,"Reading the file <<%s>>... ",op->lc.str); |
if (K00_verbose) fprintf(stderr,"Reading the file <<%s>>... ",op->lc.str); |
| parseAfile(fp); |
parseAfile(fp); |
| if (K00_verbose) fprintf(stderr,"\nClosed the file <<%s>>.\n",op->lc.str); |
if (K00_verbose) fprintf(stderr,"\nClosed the file <<%s>>.\n",op->lc.str); |
| Line 997 void loadFileWithCpp(objectp op) |
|
| Line 1043 void loadFileWithCpp(objectp op) |
|
| { |
{ |
| FILE *fp; |
FILE *fp; |
| char fname[1024]; |
char fname[1024]; |
| |
char tmpName[1024]; |
| |
int pid; |
| objectp ob; |
objectp ob; |
| 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; |
| } |
} |
| |
op = checkIfTheFileExists(op); |
| |
if (op == NULL) return; |
| if (strlen(op->lc.str) > 900) { |
if (strlen(op->lc.str) > 900) { |
| fprintf(stderr,"Too long file name.\n"); |
fprintf(stderr,"Too long file name.\n"); |
| return; |
return; |
| } |
} |
| system("/bin/rm -f k00.cppload.tmp"); |
system("/bin/rm -f k00.cppload.tmp"); |
| |
/* Use gcc -v to know what symbols are defined. */ |
| |
#if defined(linux) || defined(__linux__) |
| strcpy(fname,"/lib/cpp -P -lang-c++ <"); |
strcpy(fname,"/lib/cpp -P -lang-c++ <"); |
| |
#else |
| |
strcpy(fname,"cpp -P -lang-c++ <"); |
| |
#endif |
| strcat(fname,op->lc.str); |
strcat(fname,op->lc.str); |
| strcat(fname," >k00.cppload.tmp"); |
strcat(fname," >k00.cppload.tmp"); |
| system(fname); |
system(fname); |
| Line 1015 void loadFileWithCpp(objectp op) |
|
| Line 1070 void loadFileWithCpp(objectp op) |
|
| ob->tag = Sstring; |
ob->tag = Sstring; |
| ob->lc.str = "k00.cppload.tmp"; |
ob->lc.str = "k00.cppload.tmp"; |
| loadFile(ob); |
loadFile(ob); |
| |
system("/bin/rm -f k00.cppload.tmp"); |
| } |
} |
| |
|
| void showStringBuff(objectp op) |
void showStringBuff(objectp op) |