]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - exec.c
process_condition function used by parse_if - need to still add it to loops
[xonotic/gmqcc.git] / exec.c
diff --git a/exec.c b/exec.c
index 229454d7f89936d460c8ab84fd38db1977cc2903..5af67851bf046ea43b62c5497abe5b0d3cfb3c79 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -774,7 +774,17 @@ static size_t qc_builtins_count = sizeof(qc_builtins) / sizeof(qc_builtins[0]);
 
 static const char *arg0 = NULL;
 
-void usage()
+static void version() {
+    printf("GMQCC-QCVM %d.%d.%d Built %s %s\n",
+           GMQCC_VERSION_MAJOR,
+           GMQCC_VERSION_MINOR,
+           GMQCC_VERSION_PATCH,
+           __DATE__,
+           __TIME__
+    );
+}
+
+static void usage()
 {
     printf("usage: %s [options] [parameters] file\n", arg0);
     printf("options:\n");
@@ -804,7 +814,7 @@ static void prog_main_setparams(qc_program *prog)
         arg->vector[2] = 0;
         switch (main_params[i].vtype) {
             case TYPE_VECTOR:
-#ifdef WIN32
+#ifdef _MSC_VER
                 (void)sscanf_s(main_params[i].value, " %f %f %f ",
                                &arg->vector[0],
                                &arg->vector[1],
@@ -842,6 +852,7 @@ int main(int argc, char **argv)
     bool        opts_disasm      = false;
     bool        opts_info        = false;
     bool        noexec           = false;
+    const char *progsfile        = NULL;
 
     arg0 = argv[0];
 
@@ -850,7 +861,7 @@ int main(int argc, char **argv)
         exit(1);
     }
 
-    while (argc > 2) {
+    while (argc > 1) {
         if (!strcmp(argv[1], "-h") ||
             !strcmp(argv[1], "-help") ||
             !strcmp(argv[1], "--help"))
@@ -858,6 +869,13 @@ int main(int argc, char **argv)
             usage();
             exit(0);
         }
+        else if (!strcmp(argv[1], "-v") ||
+                 !strcmp(argv[1], "-version") ||
+                 !strcmp(argv[1], "--version"))
+        {
+            version();
+            exit(0);
+        }
         else if (!strcmp(argv[1], "-trace")) {
             --argc;
             ++argv;
@@ -922,6 +940,21 @@ int main(int argc, char **argv)
             --argc;
             ++argv;
         }
+        else if (!strcmp(argv[1], "--")) {
+            --argc;
+            ++argv;
+            break;
+        }
+        else if (argv[1][0] != '-') {
+            if (progsfile) {
+                printf("only 1 program file may be specified\n");
+                usage();
+                exit(1);
+            }
+            progsfile = argv[1];
+            --argc;
+            ++argv;
+        }
         else
         {
             usage();
@@ -929,10 +962,29 @@ int main(int argc, char **argv)
         }
     }
 
+    if (argc > 2) {
+        usage();
+        exit(1);
+    }
+    if (argc > 1) {
+        if (progsfile) {
+            printf("only 1 program file may be specified\n");
+            usage();
+            exit(1);
+        }
+        progsfile = argv[1];
+        --argc;
+        ++argv;
+    }
+
+    if (!progsfile) {
+        usage();
+        exit(1);
+    }
 
-    prog = prog_load(argv[1]);
+    prog = prog_load(progsfile);
     if (!prog) {
-        printf("failed to load program '%s'\n", argv[1]);
+        printf("failed to load program '%s'\n", progsfile);
         exit(1);
     }