diff -r 0f3f6714b938 -r 32bd7ef40897 main.cc --- a/main.cc Mon Aug 04 15:14:25 2008 +0200 +++ b/main.cc Tue Aug 12 16:14:12 2008 +0200 @@ -80,13 +80,15 @@ /* forward declarations... */ -int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root); +int stage1_2(const char *filename, const char *includedir, symbol_c **tree_root, bool full); //int stage3(symbol_c *tree_root); int stage4(symbol_c *tree_root, const char *builddir); static void printusage(const char *cmd) { - printf("%s [] [-I ] []\n", cmd); + printf("syntaxe: %s [-fh] [-I ] []\n", cmd); + printf(" f : full token location on error messages\n"); + printf(" h : show this help message\n"); } @@ -95,33 +97,49 @@ symbol_c *tree_root; char * includedir = NULL; char * builddir = NULL; + bool full = false; + int offset = 0; - if (argc == 5) { - builddir = argv[4]; - argc = 4; - } - - if (argc == 4) { - if (strcmp(argv[2], "-I") != 0) { - printusage(argv[0]); - return EXIT_FAILURE; - } - includedir = argv[3]; - argc = 2; - } - - if (argc == 3) { - builddir = argv[2]; - argc = 2; - } - - if (argc != 2) { + if (argc < 2 || argc > 6) { printusage(argv[0]); return EXIT_FAILURE; } + if (strcmp(argv[1], "-h") == 0) { + printusage(argv[0]); + return 0; + } + + if (strcmp(argv[1], "-f") == 0) { + if (argc == 2) { + printusage(argv[0]); + return EXIT_FAILURE; + } + full = true; + offset = 1; + } + + if (argc == (5 + offset)) { + builddir = argv[4 + offset]; + argc = 4 + offset; + } + + if (argc == (4 + offset)) { + if (strcmp(argv[2 + offset], "-I") != 0) { + printusage(argv[0]); + return EXIT_FAILURE; + } + includedir = argv[3 + offset]; + argc = 2 + offset; + } + + if (argc == (3 + offset)) { + builddir = argv[2 + offset]; + argc = 2 + offset; + } + /* 1st Pass */ - if (stage1_2(argv[1], includedir, &tree_root) < 0) + if (stage1_2(argv[1 + offset], includedir, &tree_root, full) < 0) return EXIT_FAILURE; /* 2nd Pass */