- cmd_tbl_t *cmdtp_ret = NULL;
- uint_fast8_t n_found = 0, sub_found = 0;
-
- for (cmd_tbl_t *cmdtp = table; cmdtp->name != NULL; cmdtp++) {
- if (strncmp_P(cmd, cmdtp->name, para->len) == 0 &&
- (para->opt_debug || !(cmdtp->flags & CTBL_DBG))) {
- if (para->len == strlen_P(cmdtp->name))
- return cmdtp; /* full match */
-
- cmdtp_ret = cmdtp; /* abbreviated command ? */
- n_found++;
- } else if (cmdtp->subcmd && cmdtp->flags & CTBL_SUBCMDAUTO) {
- cmd_tbl_t *sub = _find_cmd(cmd, cmdtp->subcmd, para);
- if (sub) {
- cmdtp_ret = sub;
- ++n_found;
- }
- }
- }
- if (n_found == 1) { /* exactly one match */
- if (sub_found)
- para->level++;
- return cmdtp_ret;
- }
-
- return NULL; /* not found or ambiguous command */
-}
-
-
-cmd_tbl_t *find_cmd (const char *cmd, cmd_tbl_t *table, uint_fast8_t *cmdlevel)
-{
- find_cmd_para_t para;
-