10a936c54SPrasad Joshi #include <stdio.h> 20a936c54SPrasad Joshi #include <string.h> 30a936c54SPrasad Joshi 40a936c54SPrasad Joshi /* user defined headers */ 50a936c54SPrasad Joshi #include <common-cmds.h> 60a936c54SPrasad Joshi 70a936c54SPrasad Joshi #include <kvm/util.h> 8*f6677a1dSAmerigo Wang #include <kvm/kvm-cmd.h> 90a936c54SPrasad Joshi #include <kvm/kvm-help.h> 100a936c54SPrasad Joshi 110a936c54SPrasad Joshi 120a936c54SPrasad Joshi const char kvm_usage_string[] = 130a936c54SPrasad Joshi "kvm [--version] [--help] COMMAND [ARGS]"; 140a936c54SPrasad Joshi 150a936c54SPrasad Joshi const char kvm_more_info_string[] = 160a936c54SPrasad Joshi "See 'kvm help COMMAND' for more information on a specific command."; 170a936c54SPrasad Joshi 180a936c54SPrasad Joshi 190a936c54SPrasad Joshi static void list_common_cmds_help(void) 200a936c54SPrasad Joshi { 210a936c54SPrasad Joshi unsigned int i, longest = 0; 220a936c54SPrasad Joshi 230a936c54SPrasad Joshi for (i = 0; i < ARRAY_SIZE(common_cmds); i++) { 240a936c54SPrasad Joshi if (longest < strlen(common_cmds[i].name)) 250a936c54SPrasad Joshi longest = strlen(common_cmds[i].name); 260a936c54SPrasad Joshi } 270a936c54SPrasad Joshi 280a936c54SPrasad Joshi puts(" The most commonly used kvm commands are:"); 290a936c54SPrasad Joshi for (i = 0; i < ARRAY_SIZE(common_cmds); i++) { 300a936c54SPrasad Joshi printf(" %-*s ", longest, common_cmds[i].name); 310a936c54SPrasad Joshi puts(common_cmds[i].help); 320a936c54SPrasad Joshi } 330a936c54SPrasad Joshi } 340a936c54SPrasad Joshi 35*f6677a1dSAmerigo Wang static void kvm_help(void) 360a936c54SPrasad Joshi { 370a936c54SPrasad Joshi printf("\n usage: %s\n\n", kvm_usage_string); 380a936c54SPrasad Joshi list_common_cmds_help(); 390a936c54SPrasad Joshi printf("\n %s\n\n", kvm_more_info_string); 40*f6677a1dSAmerigo Wang } 41*f6677a1dSAmerigo Wang 42*f6677a1dSAmerigo Wang 43*f6677a1dSAmerigo Wang static void help_cmd(const char *cmd) 44*f6677a1dSAmerigo Wang { 45*f6677a1dSAmerigo Wang struct cmd_struct *p; 46*f6677a1dSAmerigo Wang p = kvm_get_command(kvm_commands, cmd); 47*f6677a1dSAmerigo Wang if (!p) 48*f6677a1dSAmerigo Wang kvm_help(); 49*f6677a1dSAmerigo Wang else if (p->help) 50*f6677a1dSAmerigo Wang p->help(); 51*f6677a1dSAmerigo Wang } 52*f6677a1dSAmerigo Wang 53*f6677a1dSAmerigo Wang int kvm_cmd_help(int argc, const char **argv, const char *prefix) 54*f6677a1dSAmerigo Wang { 55*f6677a1dSAmerigo Wang if (!argv || !*argv) { 56*f6677a1dSAmerigo Wang kvm_help(); 570a936c54SPrasad Joshi return 0; 580a936c54SPrasad Joshi } 59*f6677a1dSAmerigo Wang help_cmd(argv[0]); 600a936c54SPrasad Joshi return 0; 610a936c54SPrasad Joshi } 62