Exemple #1
0
static COMMAND_HELPER(command_help_show, struct command *c, unsigned n,
                      bool show_help, const char *match)
{
    if (!command_can_run(CMD_CTX, c))
        return ERROR_OK;

    char *cmd_name = command_name(c, ' ');
    if (NULL == cmd_name)
        return -ENOMEM;

    /* If the match string occurs anywhere, we print out
     * stuff for this command. */
    bool is_match = (strstr(cmd_name, match) != NULL) ||
                    ((c->usage != NULL) && (strstr(c->usage, match) != NULL)) ||
                    ((c->help != NULL) && (strstr(c->help, match) != NULL));

    if (is_match)
    {
        command_help_show_indent(n);
        LOG_USER_N("%s", cmd_name);
    }
    free(cmd_name);

    if (is_match)
    {
        if (c->usage) {
            LOG_USER_N(" ");
            command_help_show_wrap(c->usage, 0, n + 5);
        }
        else
            LOG_USER_N("\n");
    }

    if (is_match && show_help)
    {
        char *msg;

        /* Normal commands are runtime-only; highlight exceptions */
        if (c->mode != COMMAND_EXEC) {
            const char *stage_msg = "";

            switch (c->mode) {
            case COMMAND_CONFIG:
                stage_msg = " (configuration command)";
                break;
            case COMMAND_ANY:
                stage_msg = " (command valid any time)";
                break;
            default:
                stage_msg = " (?mode error?)";
                break;
            }
            msg = alloc_printf("%s%s", c->help ? : "", stage_msg);
        } else
static void command_help_show_wrap(const char *str, unsigned n, unsigned n2)
{
	const char *cp = str, *last = str;
	while (*cp) {
		const char *next = last;
		do {
			cp = next;
			do {
				next++;
			} while (*next != ' ' && *next != '\t' && *next != '\0');
		} while ((next - last < HELP_LINE_WIDTH(n)) && *next != '\0');
		if (next - last < HELP_LINE_WIDTH(n))
			cp = next;
		command_help_show_indent(n);
		LOG_USER("%.*s", (int)(cp - last), last);
		last = cp + 1;
		n = n2;
	}
}