]> git.cworth.org Git - apitrace/blobdiff - cli/cli_main.cpp
Add a new "apitrace trace" command to the command-line interface.
[apitrace] / cli / cli_main.cpp
index fd4dbbb53db2f07d3b59db1787a458dbce8b2b9f..a3abf54a0d6daab8aee1a5e09c71d6af6bdfeb48 100644 (file)
@@ -27,7 +27,7 @@
 
 
 /*
- * Top-level application for accessing almost of apitrace
+ * Top-level application for accessing almost all of apitrace
  * functionality.
  */
 
@@ -56,18 +56,19 @@ help_usage()
 }
 
 static int
-help_command(int argc, char *argv[], int first_command_arg);
+do_help_command(int argc, char *argv[]);
 
-const Command help = {
+const Command help_command = {
     "help",
     help_synopsis,
     help_usage,
-    help_command
+    do_help_command
 };
 
 static const Command * commands[] = {
-    &dump,
-    &help,
+    &dump_command,
+    &trace_command,
+    &help_command
 };
 
 static void
@@ -110,17 +111,17 @@ list_commands(void) {
 
 
 static int
-help_command(int argc, char *argv[], int first_arg_command)
+do_help_command(int argc, char *argv[])
 {
     const Command *command;
     int i;
 
-    if (first_arg_command == argc) {
+    if (argc != 1) {
         help_usage();
         return 0;
     }
 
-    char *command_name = argv[first_arg_command];
+    char *command_name = argv[0];
 
     for (i = 0; i < ARRAY_SIZE(commands); i++) {
         command = commands[i];
@@ -140,14 +141,9 @@ help_command(int argc, char *argv[], int first_arg_command)
 int
 main(int argc, char **argv)
 {
-    const char *command_name = "trace";
+    const char *command_name;
     const Command *command;
-    int i, first_command_arg;
-
-    if (argc == 1) {
-        usage();
-        return 1;
-    }
+    int i;
 
     for (i = 1; i < argc; ++i) {
         const char *arg = argv[i];
@@ -157,25 +153,29 @@ main(int argc, char **argv)
         }
 
         if (strcmp(arg, "--help") == 0) {
-            return help_command (0, NULL, 0);
+            return do_help_command(0, NULL);
         } else {
             std::cerr << "Error: unknown option " << arg << "\n";
             usage();
             return 1;
         }
     }
-    first_command_arg = i;
 
-    if (first_command_arg < argc) {
-        command_name = argv[first_command_arg];
-        first_command_arg++;
+    if (i == argc) {
+        usage();
+        return 1;
     }
 
+    command_name = argv[i++];
+
+    argc -= i;
+    argv = &argv[i];
+
     for (i = 0; i < ARRAY_SIZE(commands); i++) {
         command = commands[i];
 
         if (strcmp(command_name, command->name) == 0)
-            return (command->function) (argc, argv, first_command_arg);
+            return (command->function) (argc, argv);
     }
 
     std::cerr << "Error: unknown command " << command_name