/* Standard */
#include <stdio.h> //print
#include <errno.h> //errors
-#include <string.h> //strnlen
+#include <string.h> //strndupa
/* Posix */
#include <stdlib.h> //exit
#include <unistd.h> //getopt
+/* Internal */
+#include <apc/parser.tab.h> //bison
const char* cargs['Z'] = {0};
int main(int, char*[]);
extern //bison
-void yyparse(void);
+int yyparse(void);
extern //lexer.c
int lexer_init(void);
+extern //apc/parser.tab.c
+YYSTYPE yylval;
+extern //lexer.c
+int lexer(void);
+
/* Main entry from terminal
parses the command line and kicks off recursive scanning
*/
( int argc,
char* argv[]
)
-#define S(S)#S //stringifier
+#define $($)#$ //stringifier
#define MAXSTR 255
-#define MAXERR "-%c allows at most " S(MAXSTR) " input characters\n", opt
-#define USAGE "Usage: %s [-r root]\n", argv[0]
+#define MAXERR "-%c allows at most " $(MAXSTR) " input characters\n", opt
+#define OPTS "d:o:h-"
+#define USAGE "Usage %s [-d dir_root][-o output_file][-h]\n", argv[0]
+#define USAGE_LONG \
+ "\tOptions:\n" \
+ "\t\t-d\tRoot directory to parse from \t[./]\n" \
+ "\t\t-o\tOutput filename \t\t[a.asspak]\n" \
+ "\t\t-h\tPrint this help\n"
#define DONE -1
{ int opt;
getopt:
- switch (opt = getopt(argc, argv, "r:o:"))
+ switch (opt = getopt(argc, argv, OPTS))
{ case DONE:
break;
- case 'r' :
+ case 'd' :
case 'o' :
if (strnlen(optarg, MAXSTR) != MAXSTR)
{ cargs[opt] = optarg;
default :
fprintf(stderr, USAGE);
exit(EXIT_FAILURE);
+ case 'h' :
+ printf(USAGE);
+ printf(USAGE_LONG);
+ exit(EXIT_SUCCESS);
}
if (lexer_init())
{ perror("lexer");