]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - main.c
param_argument cleanup
[xonotic/gmqcc.git] / main.c
diff --git a/main.c b/main.c
index 006fdea863722c2d5b9c56666eb816c41b976c00..25be7ec20f388ee4c2fa6891093388b037365620 100644 (file)
--- a/main.c
+++ b/main.c
@@ -58,9 +58,10 @@ static const int usage(const char *const app) {
 }
 
 int main(int argc, char **argv) {
-    size_t itr = 0;
-    char  *app = &argv[0][0];
-    FILE  *fpp = NULL;
+    size_t    itr = 0;
+    char     *app = &argv[0][0];
+    FILE     *fpp = NULL;
+    lex_file *lex = NULL;
 
     /*
      * Parse all command line arguments.  This is rather annoying to do
@@ -85,9 +86,22 @@ int main(int argc, char **argv) {
                 );
                 return 0;
             }
-            case 'c': items_add((argitem){util_strdup(&argv[1][2]), 0}); break; /* compile  */ 
-            case 'a': items_add((argitem){util_strdup(&argv[1][2]), 1}); break; /* assemble */
-            case 'i': items_add((argitem){util_strdup(&argv[1][2]), 2}); break; /* includes */
+            #define param_argument(argtype) do {                             \
+                if (argv[1][2]) {                                            \
+                    items_add((argitem){util_strdup(&argv[1][2]), argtype}); \
+                } else {                                                     \
+                    ++argv;                                                  \
+                    --argc;                                                  \
+                    if (argc <= 1)                                           \
+                        goto clean_params_usage;                             \
+                    items_add((argitem){util_strdup(&argv[1][0]), argtype}); \
+                }                                                            \
+            } while (0)
+
+            case 'c': param_argument(0); break; /* compile  */
+            case 'a': param_argument(1); break; /* assemble */
+            case 'i': param_argument(2); break; /* includes */
+            #undef parm_argument
             default:
                 if (!strncmp(&argv[1][1], "debug" , 5)) { opts_debug  = true; break; }
                 if (!strncmp(&argv[1][1], "memchk", 6)) { opts_memchk = true; break; }
@@ -137,9 +151,8 @@ int main(int argc, char **argv) {
     for (; itr < items_elements; itr++) {
         switch (items_data[itr].type) {
             case 0:
-                fpp = fopen(items_data[itr].name, "r");
-                struct lex_file *lex = lex_open(fpp);
-                parse_gen(lex);
+                lex_init (items_data[itr].name, &lex);
+                lex_parse(lex);
                 lex_close(lex);
                 break;
             case 1:
@@ -155,7 +168,12 @@ int main(int argc, char **argv) {
     for (itr = 0; itr < items_elements; itr++)
         mem_d(items_data[itr].name);
     mem_d(items_data);
-
+    
     util_meminfo();
     return 0;
+clean_params_usage:
+    for (itr = 0; itr < items_elements; itr++)
+        mem_d(items_data[itr].name);
+    mem_d(items_data);
+    return usage(app);
 }