void *value;
};
+static char *cmplt = "help";
+
static struct {
bool init;
char *name;
mainloop_quit();
}
+static void print_cmds(void)
+{
+ const struct bt_shell_menu_entry *entry;
+ const struct queue_entry *submenu;
+
+ if (!data.menu)
+ return;
+
+ printf("Commands:\n");
+
+ for (entry = data.menu->entries; entry->cmd; entry++) {
+ printf("\t%s%s\t%s\n", entry->cmd,
+ strlen(entry->cmd) < 8 ? "\t" : "", entry->desc);
+ }
+
+ for (submenu = queue_get_entries(data.submenus); submenu;
+ submenu = submenu->next) {
+ struct bt_shell_menu *menu = submenu->data;
+
+ printf("\n\t%s.:\n", menu->name);
+
+ for (entry = menu->entries; entry->cmd; entry++) {
+ printf("\t\t%s%s\t%s\n", entry->cmd,
+ strlen(entry->cmd) < 8 ? "\t" : "",
+ entry->desc);
+ }
+ }
+}
+
static void cmd_help(int argc, char *argv[])
{
- shell_print_menu();
+ if (argv[0] == cmplt)
+ print_cmds();
+ else
+ shell_print_menu();
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
}
static void usage(int argc, char **argv, const struct bt_shell_opt *opt)
{
+ const char *name;
unsigned int i;
- printf("%s ver %s\n", argv[0], VERSION);
+ name = strrchr(argv[0], '/');
+ if (!name)
+ name = argv[0];
+ else
+ name++;
+
+ printf("%s ver %s\n", name, VERSION);
printf("Usage:\n"
- "\t%s [options]\n", argv[0]);
+ "\t%s [--options] [commands]\n", name);
printf("Options:\n");
return;
case 'h':
usage(argc, argv, opt);
- exit(EXIT_SUCCESS);
- return;
+ data.argc = 1;
+ data.argv = &cmplt;
+ data.mode = 1;
+ goto done;
case 't':
data.timeout = atoi(optarg);
break;
optind = 0;
data.mode = (data.argc > 0);
+done:
if (data.mode)
bt_shell_set_env("NON_INTERACTIVE", &data.mode);