=================================================================== RCS file: /home/cvs/OpenXM/src/k097/d.c,v retrieving revision 1.11 retrieving revision 1.22 diff -u -p -r1.11 -r1.22 --- OpenXM/src/k097/d.c 2003/07/22 03:25:55 1.11 +++ OpenXM/src/k097/d.c 2021/03/12 06:45:55 1.22 @@ -1,9 +1,10 @@ -/* $OpenXM: OpenXM/src/k097/d.c,v 1.10 2003/07/21 12:41:22 takayama Exp $ */ +/* $OpenXM: OpenXM/src/k097/d.c,v 1.21 2020/10/07 23:53:25 takayama Exp $ */ /* simple.c, 1996, 1/1 --- 1/5 */ #include #include #include #include +#include #include #include #include "d.h" @@ -49,7 +50,7 @@ int Interactive = 1; static int isThereStdin(); #define MARK_CHAR 3 -main2(int argc, char *argv[]) { +void main2(int argc, char *argv[]) { FILE *f; FILE *outf; char name[1024]; @@ -79,7 +80,7 @@ main2(int argc, char *argv[]) { } } -repl(FILE *inFile,FILE *outFile) { +void repl(FILE *inFile,FILE *outFile) { int c; int t; Inop = newObject_d(); @@ -160,7 +161,7 @@ repl(FILE *inFile,FILE *outFile) { case INCREMENT: printf("\nKClex returns --- ++."); break; case DECREMENT: printf("\nKClex returns --- --."); break; case MEMBER: printf("\nKClex returns --- ->."); break; - case RESIDUEPUT: printf("\nKClex returns --- %=."); break; + case RESIDUEPUT: printf("\nKClex returns --- %%=."); break; case NEGATEPUT: printf("\nKClex returns --- ^=."); break; case MULTPUT: printf("\nKClex returns --- *=."); break; @@ -181,7 +182,7 @@ objectp newObject_d() { fprintf(stderr,"Error: No more memory in newObject_d().\n"); exit(10); } - obj->tag = Snull; + obj->tag = Snull; obj->attr = NULL; return(obj); } @@ -429,7 +430,7 @@ int KClex() { /*if (Mydebug) printf("identifier string=[%s]",name);*/ if (isdigit(name[0])) { /**************************** - /**case : machine integer. + **case : machine integer. KClval = newObject_d(); KClval->tag = Sinteger; sscanf(name,"%d",&(KClval->lc.ival));*************/ @@ -442,7 +443,7 @@ int KClex() { break; } /* else : Identifier case.*/ - if (d = isReserved(name)) { + if ((d = isReserved(name))) { if (Replace) printf0(name); return(d); } else { @@ -595,7 +596,7 @@ int KClex() { } -KCerror(char *s) /* You need this function. Otherwise, you get core. */ +int KCerror(char *s) /* You need this function. Otherwise, you get core. */ { K00recoverFromError(); fprintf(stderr,"\nSyntax Error in the line %d:%s\n",Linenumber,s); @@ -605,23 +606,23 @@ KCerror(char *s) /* You need this function. Otherwis ungetc(MARK_CHAR,stdin); while (fsgetc(Inop) > MARK_CHAR) ; } - return ; + return 0; LONGJMP(KCenvOfParser,2); exit(1); } -readcomment() { +int readcomment() { int c; while (1) { c = fsgetc(Inop); if (c == EOF) { fprintf(stderr,"%d: Unexpected end of file in a comment.\n",Linenumber); fsungetc(c,Inop); /* should change */ - return; + return 0; } if (c == '*') { c = fsgetc(Inop); - if (c == '/') return; + if (c == '/') return 0; } } } @@ -674,7 +675,7 @@ char *readstring() { } -readchar() { +int readchar() { int c; if (Replace) putchar0('\''); c = fsgetc(Inop); /* 'c.' '\.c' */ @@ -702,20 +703,20 @@ readchar() { return(c); } -putchar0(c) +void putchar0(c) int c; { if (c > 0) fputc(c,outfile); } -printf0(s) +void printf0(s) char *s; { int i = 0; while (s[i] != '\0') putchar0(s[i++]); } -printf1(s) +void printf1(s) char *s; { int i = 0; @@ -723,7 +724,7 @@ char *s; while (s[i] != '\0') putchar0(s[i++]); } -isReserved(s) +int isReserved(s) char *s; { char *r[] = {"auto","break","case","char","const","continue", @@ -760,7 +761,7 @@ char *s; } -shouldReplace(s) +int shouldReplace(s) char *s; { char *r[] = {"dummy"}; @@ -939,6 +940,7 @@ int fsgetc(objectp op) { int fsungetc(int c,objectp op) { fprintf(stderr,"Sorry. fsungetc has not yet implemented.\n"); + return -1; } void clearInop() { @@ -1021,7 +1023,7 @@ objectp checkIfTheFileExists(objectp op) { } } } - close(fp); + fclose(fp); op = newObject_d(); op->tag = Sstring; s = (char *)GC_malloc(sizeof(char)*(strlen(fname)+1)); @@ -1078,9 +1080,6 @@ void loadFileWithCpp(objectp op) Removed old codes. */ sfile = op->lc.str; - if (getFileSize(sfile) < 0) { - fprintf(stderr,"The source file is not found.\n"); return; - } cpp = getCppPath(); if (cpp == NULL) { fprintf(stderr,"cpp is not found.\n"); return; @@ -1092,19 +1091,31 @@ void loadFileWithCpp(objectp op) } /* printf("%s\n",outfile); */ if ((char *)strstr(cpp,"/asir/bin/cpp.exe") == NULL) { +#if defined(__clang__) || defined(__FreeBSD__) +/* cpp of the FreeBSD is the cpp of the clang, but gcc is selected by configure. + echo | gcc -dM -E - +*/ + sprintf(tmpName,"cpp -E -P %s | sed -e 's/^#.*//g' >%s",sfile,outfile); +#else argv[0] = cpp; argv[1] = "-P"; argv[2] = "-lang-c++"; argv[3] = sfile; argv[4] = outfile; argv[5] = NULL; +#endif }else{ argv[0] = cpp; - argv[1] = cygwinPathToWinPath(sfile); - argv[2] = cygwinPathToWinPath(outfile); - argv[3] = NULL; + argv[1] = "-P"; + argv[2] = cygwinPathToWinPath(sfile); + argv[3] = cygwinPathToWinPath(outfile); + argv[4] = NULL; } +#if defined(__clang__) || defined(__FreeBSD__) + system(tmpName); +#else n=oxForkExecBlocked(argv); +#endif ob = newObject_d(); ob->tag = Sstring; @@ -1128,7 +1139,7 @@ void showStringBuff(objectp op) if (K00_verbose) { fprintf(stderr,"stringBuff ptr = %d, ",ptr); fprintf(stderr,"sb[ptr] = %x,%d",(sb->str)[ptr],(sb->str)[ptr]); - fprintf(stderr,"Saki(yomi) = %x \n",Saki,Saki); + fprintf(stderr,"Saki(yomi) = %x,%d \n",Saki,Saki); } if (ptr == 0 && Saki == -1) { fprintf(stderr," ; was expected.\n");