#include #include "lex.h" extern char yytext[]; extern FILE* yyin; main(argc,argv) int argc; char *argv[]; { enum token_kind val; FILE *fp,*ofp,*ifp; char c; if (argc != 3) { fprintf(stderr,"Usage: gen-include source target\n"); exit(1); } ofp = fopen(argv[2],"w"); if (ofp == NULL) { fprintf(stderr,"gen-include: unable to open %s for output\n",argv[2]); exit(1); } ifp = fopen(argv[1],"r"); if (ifp == NULL) { fprintf(stderr,"gen-include: unable to open %s for input\n",argv[1]); exit(1); } yyin = ifp; while (val = yylex()) { switch(val) { case INCLUDE: while ((val = yylex()) == WSPACE) ; if (val != STRING) fprintf(ofp,"#include %s",yytext); else { yytext[strlen(yytext)-1] = '\0'; fp = fopen(yytext+1,"r"); if (fp) { while ((c = getc(fp)) != EOF) putc(c,ofp); putc('\n',ofp); fclose(fp); } else { fprintf(ofp,"#include %s\"",yytext); } } break; default: fprintf(ofp,"%s",yytext); } } fclose(ofp); return (0); }