X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=cli%2Fcli_main.cpp;h=d6db6196121b3d5a9a158c29309c1e7f556a02c8;hb=ade96b23075d4be203fd6849a1f2e26e1be8e8b1;hp=1731640a02395ffb5a1eb4ce335badd8eecaeda2;hpb=ffba59728abf36a0a9b8f7c6e4f6f0a1a95575b5;p=apitrace diff --git a/cli/cli_main.cpp b/cli/cli_main.cpp index 1731640..d6db619 100644 --- a/cli/cli_main.cpp +++ b/cli/cli_main.cpp @@ -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,39 @@ help_usage() } static int -help_command(int argc, char *argv[]); +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, + &diff_command, + &diff_state_command, + &diff_images_command, + &dump_command, + &dump_images_command, + &pickle_command, + &repack_command, + &retrace_command, + &trace_command, + &trim_command, + &help_command +}; + +/* Aliases provide a mechanism to allow compatibility with old command + * names (such as "retrace") for current commands (such as the replay + * command). */ +typedef struct { + const char *name; + const Command *command; +} Alias; + +static const Alias aliases[] = { + { "retrace", &retrace_command } }; static void @@ -110,17 +131,17 @@ list_commands(void) { static int -help_command(int argc, char *argv[]) +do_help_command(int argc, char *argv[]) { const Command *command; int i; - if (argc != 1) { + if (argc != 2) { help_usage(); return 0; } - char *command_name = argv[0]; + char *command_name = argv[1]; for (i = 0; i < ARRAY_SIZE(commands); i++) { command = commands[i]; @@ -142,6 +163,7 @@ main(int argc, char **argv) { const char *command_name; const Command *command; + const Alias *alias; int i; for (i = 1; i < argc; ++i) { @@ -152,7 +174,7 @@ main(int argc, char **argv) } if (strcmp(arg, "--help") == 0) { - return help_command(0, NULL); + return do_help_command(0, NULL); } else { std::cerr << "Error: unknown option " << arg << "\n"; usage(); @@ -165,7 +187,7 @@ main(int argc, char **argv) return 1; } - command_name = argv[i++]; + command_name = argv[i]; argc -= i; argv = &argv[i]; @@ -177,8 +199,15 @@ main(int argc, char **argv) return (command->function) (argc, argv); } + for (i = 0; i < ARRAY_SIZE(aliases); i++) { + alias = &aliases[i]; + + if (strcmp(command_name, alias->name) == 0) + return (alias->command->function) (argc, argv); + } + std::cerr << "Error: unknown command " << command_name << " (see \"apitrace help\").\n"; - return 1; + return 1; }