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>
8f6677a1dSAmerigo Wang #include <kvm/kvm-cmd.h>
92a24f96dSSasha Levin #include <kvm/builtin-help.h>
10*ee8b1456SWanlong Gao #include <kvm/kvm.h>
110a936c54SPrasad Joshi
120a936c54SPrasad Joshi
130a936c54SPrasad Joshi const char kvm_usage_string[] =
148d2ff5daSWanlong Gao "lkvm COMMAND [ARGS]";
150a936c54SPrasad Joshi
160a936c54SPrasad Joshi const char kvm_more_info_string[] =
178d2ff5daSWanlong Gao "See 'lkvm help COMMAND' for more information on a specific command.";
180a936c54SPrasad Joshi
190a936c54SPrasad Joshi
list_common_cmds_help(void)200a936c54SPrasad Joshi static void list_common_cmds_help(void)
210a936c54SPrasad Joshi {
220a936c54SPrasad Joshi unsigned int i, longest = 0;
230a936c54SPrasad Joshi
240a936c54SPrasad Joshi for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
250a936c54SPrasad Joshi if (longest < strlen(common_cmds[i].name))
260a936c54SPrasad Joshi longest = strlen(common_cmds[i].name);
270a936c54SPrasad Joshi }
280a936c54SPrasad Joshi
29*ee8b1456SWanlong Gao puts(" The most commonly used lkvm commands are:");
300a936c54SPrasad Joshi for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
310a936c54SPrasad Joshi printf(" %-*s ", longest, common_cmds[i].name);
320a936c54SPrasad Joshi puts(common_cmds[i].help);
330a936c54SPrasad Joshi }
340a936c54SPrasad Joshi }
350a936c54SPrasad Joshi
kvm_help(void)36f6677a1dSAmerigo Wang static void kvm_help(void)
370a936c54SPrasad Joshi {
38*ee8b1456SWanlong Gao printf("\n To start a simple non-privileged shell run '%s run'\n\n"
39*ee8b1456SWanlong Gao "usage: %s\n\n", KVM_BINARY_NAME, kvm_usage_string);
400a936c54SPrasad Joshi list_common_cmds_help();
410a936c54SPrasad Joshi printf("\n %s\n\n", kvm_more_info_string);
42f6677a1dSAmerigo Wang }
43f6677a1dSAmerigo Wang
44f6677a1dSAmerigo Wang
help_cmd(const char * cmd)45f6677a1dSAmerigo Wang static void help_cmd(const char *cmd)
46f6677a1dSAmerigo Wang {
47f6677a1dSAmerigo Wang struct cmd_struct *p;
48f6677a1dSAmerigo Wang p = kvm_get_command(kvm_commands, cmd);
49f6677a1dSAmerigo Wang if (!p)
50f6677a1dSAmerigo Wang kvm_help();
51f6677a1dSAmerigo Wang else if (p->help)
52f6677a1dSAmerigo Wang p->help();
53f6677a1dSAmerigo Wang }
54f6677a1dSAmerigo Wang
kvm_cmd_help(int argc,const char ** argv,const char * prefix)55f6677a1dSAmerigo Wang int kvm_cmd_help(int argc, const char **argv, const char *prefix)
56f6677a1dSAmerigo Wang {
57f6677a1dSAmerigo Wang if (!argv || !*argv) {
58f6677a1dSAmerigo Wang kvm_help();
590a936c54SPrasad Joshi return 0;
600a936c54SPrasad Joshi }
61f6677a1dSAmerigo Wang help_cmd(argv[0]);
620a936c54SPrasad Joshi return 0;
630a936c54SPrasad Joshi }
64