Make this into a more general tool. Allow to specify the names of the

output files and the location of the template on command line.

(Submitting the patches to the author)
This commit is contained in:
Mikhail Teterin 2001-06-08 01:17:53 +00:00
parent 63fd13b849
commit 53211d2b0d
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=43623
2 changed files with 95 additions and 16 deletions

View file

@ -7,6 +7,7 @@
PORTNAME= lemon
PORTVERSION= 1.0
PORTREVISION= 1
CATEGORIES= devel
MASTER_SITES= http://www.hwaci.com/sw/lemon/
DISTFILES= lemon.c lempar.c

View file

@ -1,21 +1,93 @@
--- /usr/ports/distfiles/lemon.c Tue Dec 5 20:52:24 2000
+++ ./lemon.c Mon Jun 4 23:35:15 2001
@@ -31,2 +31,5 @@
--- lemon.c Tue Dec 5 20:52:24 2000
+++ lemon.c Thu Jun 7 21:13:39 2001
@@ -30,10 +30,11 @@
#include <string.h>
#include <ctype.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/param.h>
@@ -35,4 +38,2 @@
extern void qsort();
extern double strtod();
extern long strtol();
-extern void free();
-extern int access();
extern int atoi();
@@ -55,3 +56,2 @@
@@ -54,5 +55,4 @@
char *msort();
-extern void *malloc();
@@ -2525,45 +2525,13 @@
/******** From the file "action.h" *************************************/
@@ -1168,4 +1168,26 @@
}
+static char *lempar_locations[] = {
+ NULL, "lempar.c", LEMPAR
+};
+
+void setlempar(lempar)
+char *lempar;
+{
+ if (access(lempar, R_OK)) {
+ perror(lempar);
+ exit(1);
+ }
+ lempar_locations[0] = lempar;
+}
+
+static char *output_file = NULL;
+
+void setoutput(base)
+char *base;
+{
+ if (output_file = malloc(strlen(base) + 1))
+ sprintf(output_file, "%s.", base);
+}
/* The main program. Parse the command line and do it... */
@@ -1185,7 +1207,12 @@
{OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."},
{OPT_FLAG, "g", (char*)&rpflag, "Print grammar without actions."},
- {OPT_FLAG, "m", (char*)&mhflag, "Output a makeheaders compatible file"},
+ {OPT_FLAG, "m", (char*)&mhflag, "Output a makeheaders compatible file."},
+ {OPT_FSTR, "o", (char*)setoutput, "Set the dirname/basename for the "
+ "output file(s)."},
{OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."},
{OPT_FLAG, "s", (char*)&statistics, "Print parser stats to standard output."},
+ {OPT_FSTR, "t", (char*)setlempar, "An alternative template -- instead of"
+ " ``./lempar.c''\n\t\tor the system wide ``"
+ LEMPAR"''."},
{OPT_FLAG, "x", (char*)&version, "Print the version number."},
{OPT_FLAG,0,0,0}
@@ -2305,4 +2332,5 @@
}
}
+
/*********************** From the file "report.c" **************************/
/*
@@ -2318,13 +2346,14 @@
char *suffix;
{
- char *name;
- char *cp;
+ char *name = NULL;
+ char *cp, *fname;
- name = malloc( strlen(lemp->filename) + strlen(suffix) + 5 );
+ fname = output_file ? output_file : lemp->filename;
+ name = malloc( strlen(fname) + strlen(suffix));
if( name==0 ){
fprintf(stderr,"Can't allocate space for a filename.\n");
exit(1);
}
- strcpy(name,lemp->filename);
+ strcpy(name, fname);
cp = strrchr(name,'.');
if( cp ) *cp = 0;
@@ -2524,47 +2553,14 @@
}
-/* Search for the file "name" which is in the same directory as
-** the exacutable */
@ -29,7 +101,8 @@
- char *path,*cp;
- char c;
- extern int access();
+ const char *path;
+ int i;
+ const char *path = NULL;
-#ifdef __WIN32__
- cp = strrchr(argv0,'\\');
@ -62,15 +135,15 @@
- }
- }
- return path;
+ path = getenv("LEMPAR");
+ for (i = 0; i < sizeof(lempar_locations)/sizeof(char *); i++)
+ if (lempar_locations[i] && access(lempar_locations[i], R_OK) == 0)
+ return lempar_locations[i];
+
+ if (path)
+ if (access(path, R_OK)) perror(path);
+ else return(path);
+
+ return(LEMPAR);
+ return(NULL);
}
@@ -2631,6 +2599,5 @@
@@ -2630,8 +2626,7 @@
struct lemon *lemp;
{
- static char templatename[] = "lempar.c";
- char buf[1000];
@ -79,7 +152,9 @@
- char *tpltname;
+ const char *tpltname;
char *cp;
@@ -2643,10 +2610,9 @@
@@ -2642,12 +2637,11 @@
sprintf(buf,"%s.lt",lemp->filename);
}
- if( access(buf,004)==0 ){
+ if( access(buf, R_OK)==0 ){
@ -93,8 +168,11 @@
- templatename);
+ fprintf(stderr,"Can't find the parser driver template file.\n");
lemp->errorcnt++;
@@ -2656,3 +2622,3 @@
return 0;
@@ -2655,5 +2649,5 @@
in = fopen(tpltname,"r");
if( in==0 ){
- fprintf(stderr,"Can't open the template file \"%s\".\n",templatename);
+ fprintf(stderr,"Can't open the template file \"%s\".\n", tpltname);
lemp->errorcnt++;
return 0;