+static int cmd_tbl_item_count(cmd_tbl_t *p)
+{
+ int count = 0;
+
+ while (p->name != NULL) {
+ if (p->subcmd) {
+ cmd_tbl_t *sub = p->subcmd;
+ while (sub->name != NULL) {
+ if (sub->flags & CTBL_SUBCMDAUTO)
+ count++;
+ sub++;
+ }
+ }
+ if ((p->flags & CTBL_SUBCMDAUTO) == 0)
+ count++;
+ p++;
+ }
+ return count;
+}
+
+static cmd_tbl_t *get_cmd_tbl_base(cmd_tbl_t *cmdtp)
+{
+ cmd_tbl_t *p = cmdtp;
+
+ while (p->name != NULL)
+ ++p;
+
+ return p->subcmd;
+}
+
+static void print_name_prefix(cmd_tbl_t *p)
+{
+ cmd_tbl_t *tbl_start = get_cmd_tbl_base(p);
+ cmd_tbl_t *top;
+
+ if (tbl_start == cmd_tbl)
+ top = NULL;
+ else {
+ top = cmd_tbl;
+ while (top->subcmd != tbl_start)
+ ++top;
+ }
+
+ if (top && (p->flags & CTBL_SUBCMDAUTO) == 0) {
+ printf_P(PSTR("%S "), top->name);
+ }
+}
+