xref: /kvmtool/builtin-help.c (revision 2a24f96d648d5a281ae506ca6125404d1edbe7f5)
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>
9*2a24f96dSSasha Levin #include <kvm/builtin-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 
35f6677a1dSAmerigo 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);
40f6677a1dSAmerigo Wang }
41f6677a1dSAmerigo Wang 
42f6677a1dSAmerigo Wang 
43f6677a1dSAmerigo Wang static void help_cmd(const char *cmd)
44f6677a1dSAmerigo Wang {
45f6677a1dSAmerigo Wang 	struct cmd_struct *p;
46f6677a1dSAmerigo Wang 	p = kvm_get_command(kvm_commands, cmd);
47f6677a1dSAmerigo Wang 	if (!p)
48f6677a1dSAmerigo Wang 		kvm_help();
49f6677a1dSAmerigo Wang 	else if (p->help)
50f6677a1dSAmerigo Wang 		p->help();
51f6677a1dSAmerigo Wang }
52f6677a1dSAmerigo Wang 
53f6677a1dSAmerigo Wang int kvm_cmd_help(int argc, const char **argv, const char *prefix)
54f6677a1dSAmerigo Wang {
55f6677a1dSAmerigo Wang 	if (!argv || !*argv) {
56f6677a1dSAmerigo Wang 		kvm_help();
570a936c54SPrasad Joshi 		return 0;
580a936c54SPrasad Joshi 	}
59f6677a1dSAmerigo Wang 	help_cmd(argv[0]);
600a936c54SPrasad Joshi 	return 0;
610a936c54SPrasad Joshi }
62