Bläddra i källkod

added -h and -c flags, to change names of tables.h and tables.c respectively
now also takes an argument instead of stdin.
EM_BSIZE is now compulsory again.
Constants EM_?SIZE are passed on to cg with a T prepended (T for target)

sater 40 år sedan
förälder
incheckning
be9b72e273
1 ändrade filer med 33 tillägg och 11 borttagningar
  1. 33 11
      util/cgg/bootgram.y

+ 33 - 11
util/cgg/bootgram.y

@@ -53,6 +53,10 @@ static char rcsid[]="$Header$";
 #define MAXSPLIT 4              /* Maximum degree of split */
 #define MAXNSTR 40		/* Maximum consecutive strings in coderule */
 
+char *hname="tables.h";
+char *cname="tables.c";
+char *iname=0;			/* stdin */
+
 /* Derived constants */
 
 #define SETSIZE ((MAXREGS+1+MAXTOKENS+15)>>4)
@@ -1555,9 +1559,23 @@ tabovf(tablename) string tablename; {
 
 main(argc,argv) char *argv[]; {
 
-	if (argc!=1) {
-		fprintf(stderr,"%s is a filter, don't use arguments\n",argv[0]);
-		exit(-1);
+	while (--argc) {
+		++argv;
+		if (argv[0][0]=='-') {
+			switch (argv[0][1]) {
+			case 'h':
+				hname= &argv[0][2];
+				break;
+			case 'c':
+				cname= &argv[0][2];
+				break;
+			default:
+				fprintf(stderr,"Bad flag %s\n",argv[0]);
+				break;
+			}
+		} else {
+			iname= argv[0];
+		}
 	}
 	inithash();
 	initio();
@@ -1665,12 +1683,16 @@ ident_p ilookup(name,enterf) string name; int enterf; {
 
 initio() {
 
-	if ((cfile=fopen("tables.c","w"))==NULL) {
-		fprintf(stderr,"Can't create tables.c\n");
+	if (iname!=0 && freopen(iname,"r",stdin)==NULL) {
+		fprintf(stderr,"Can't open %s\n",iname);
+		exit(-1);
+	}
+	if ((cfile=fopen(cname,"w"))==NULL) {
+		fprintf(stderr,"Can't create %s\n",cname);
 		exit(-1);
 	}
-	if ((hfile=fopen("tables.h","w"))==NULL) {
-		fprintf(stderr,"Can't create tables.h\n");
+	if ((hfile=fopen(hname,"w"))==NULL) {
+		fprintf(stderr,"Can't create %s\n",hname);
 		exit(-1);
 	}
 	fprintf(cfile,"#include \"param.h\"\n");
@@ -1803,17 +1825,17 @@ finishio() {
 
 	fprintf(cfile,"};\n\n");
 	if (wsize>0)
-		fprintf(hfile,"#define EM_WSIZE %d\n",wsize);
+		fprintf(hfile,"#define TEM_WSIZE %d\n",wsize);
 	else
 		yyerror("Wordsize undefined");
 	if (psize>0)
-		fprintf(hfile,"#define EM_PSIZE %d\n",psize);
+		fprintf(hfile,"#define TEM_PSIZE %d\n",psize);
 	else
 		yyerror("Pointersize undefined");
 	if (bsize>=0)
-		fprintf(hfile,"#define EM_BSIZE %d\n",bsize);
+		fprintf(hfile,"#define TEM_BSIZE %d\n",bsize);
 	else
-		fprintf(hfile,"extern int EM_BSIZE;\n");
+		yyerror("EM_BSIZE undefined");
 	if (fmt!=0)
 		fprintf(hfile,"#define WRD_FMT \"%s\"\n",fmt);
 	fprintf(hfile,"#define MAXALLREG %d\n",maxallreg);