]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
Print prefix of subcommands
authorLeo C <erbl259-lmu@yahoo.de>
Sun, 29 Jul 2018 12:47:30 +0000 (14:47 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Sun, 29 Jul 2018 12:47:30 +0000 (14:47 +0200)
avr/command.c
include/command.h

index b11297bb9c9d80578cdac0f327dc8478897a79f2..bb179b800d4b8d88e24533bca0aa7e8ec9abea8d 100644 (file)
 jmp_buf cmd_jbuf;
 
 
+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);
+       }
+}
+
 static void print_usage_line(cmd_tbl_t *p, int width)
 {
        width -= strlen_P(p->name);
        if (width < 0)
                width = 0;
+       print_name_prefix(p);
        my_puts_P(p->name);
        print_blanks(width);
        my_puts_P(PSTR(" - "));
        puts_P(p->usage);
 }
 
-int strcmp_PP(const FLASH char *s1, const FLASH char *s2)
+static int strcmp_PP(const FLASH char *s1, const FLASH char *s2)
 {
        unsigned char c1, c2;
 
@@ -54,7 +103,7 @@ int strcmp_PP(const FLASH char *s1, const FLASH char *s2)
        return c1 - c2;
 }
 
-int cmpstring_PP(const void *p1, const void *p2)
+static int cmpstring_PP(const void *p1, const void *p2)
 {
        return strcmp_PP((*(const FLASH cmd_tbl_t **) p1)->name,
                         (*(const FLASH cmd_tbl_t **) p2)->name);
@@ -62,42 +111,11 @@ int cmpstring_PP(const void *p1, const void *p2)
 
 /****************************************************************************/
 
-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;
-}
-
-
-cmd_tbl_t *get_cmd_tbl_base(cmd_tbl_t  *cmdtp)
-{
-       cmd_tbl_t *p = cmdtp;
-
-       while (p->name != NULL)
-               ++p;
-
-       return p->subcmd;
-}
-
 /*
  * find command table entry for a command
  */
 
-cmd_tbl_t *find_cmd (const char *cmd, cmd_tbl_t *table)
+static cmd_tbl_t *find_cmd (const char *cmd, cmd_tbl_t *table)
 {
        if (!cmd)
                return NULL;
@@ -225,6 +243,7 @@ command_ret_t cmd_usage(cmd_tbl_t *cmdtp)
        print_usage_line(cmdtp, 0);
 #ifdef CONFIG_SYS_LONGHELP
        my_puts_P(PSTR("Usage:\n"));
+       print_name_prefix(cmdtp);
        my_puts_P(cmdtp->name);
        my_puts_P(PSTR(" "));
 
index 614d5273c948f17fc87fe1ade262064fe62638d3..93c9a2defb543b99378bcf37c6c82119f70247ce 100644 (file)
@@ -81,7 +81,6 @@ cmd_process(uint_fast8_t flag, int argc, char * const argv[], uint_fast8_t *repe
 /* command.c */
 command_ret_t do_help(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]);
 
-int cmd_tbl_item_count(cmd_tbl_t *p);
 command_ret_t cmd_usage(cmd_tbl_t *cmdtp);
 
 #ifdef CONFIG_AUTO_COMPLETE