]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
Global help
authorLeo C <erbl259-lmu@yahoo.de>
Sun, 8 Apr 2018 10:48:28 +0000 (12:48 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Sun, 8 Apr 2018 10:48:28 +0000 (12:48 +0200)
avr/Tupfile
avr/cmd_fat.c
avr/cmd_help.c [deleted file]
avr/cmd_sd.c
avr/command.c
avr/command_tbl.c
include/command.h

index a564e15e17474491f15a4915c959b56451953d2c..db17fad6f6a592c4098bec8655b2e75dd3521e62 100644 (file)
@@ -6,7 +6,7 @@ FATFS   = $(TOP)/fatfs/src/ff.c
 
 SRC            = main.c
 SRC            += cli.c cli_readline.c command.c command_tbl.c
-SRC            += cmd_help.c cmd_run.c cmd_boot.c cmd_misc.c
+SRC            += cmd_run.c cmd_boot.c cmd_misc.c
 SRC            += cmd_date.c cmd_mem.c cmd_gpio.c cmd_attach.c
 SRC            += cmd_loadihex.c cmd_loadcpm3.c cmd_sd.c cmd_fat.c
 SRC            += env.c xmalloc.c con-utils.c print-utils.c
index db89ffab9d85bf5dacbad85e1fc1150d18d95018..9e3114dc1377e8295d4e11a592a9e81de89d82db 100644 (file)
@@ -747,9 +747,6 @@ command_ret_t do_cp(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int argc,
 }
 
 
-static
-command_ret_t do_help(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]);
-
 cmd_tbl_t cmd_tbl_fat[] = {
 CMD_TBL_ITEM(
        stat,   2,      CTBL_REPEAT,    do_stat,
@@ -823,31 +820,13 @@ CMD_TBL_ITEM(
 #endif
 },
 /* Mark end of table */
-{ 0 },
+CMD_TBL_END(cmd_tbl_fat)
 };
 
-static
-command_ret_t do_help(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
-{
-       return _do_help(cmd_tbl_fat, cmdtp, flag, argc, argv);
-}
-
 
 command_ret_t do_fat(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
-       cmd_tbl_t *cp;
-
-       if (argc < 2)
-               return CMD_RET_USAGE;
-
-       /* drop initial "fat" arg */
-       argc--;
-       argv++;
-
-       cp = find_cmd(argv[0], cmd_tbl_fat);
-
-       if (cp)
-               return cp->cmd(cmdtp, flag, argc, argv);
+       puts_P(PSTR("Huch?"));
 
        return CMD_RET_USAGE;
 }
diff --git a/avr/cmd_help.c b/avr/cmd_help.c
deleted file mode 100644 (file)
index 4a52f5e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
- *
- * Copyright 2000-2009
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * SPDX-License-Identifier:    GPL-2.0
- */
-
-#include "common.h"
-#include "command.h"
-
-command_ret_t do_help(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
-{
-       return _do_help(cmd_tbl, cmdtp, flag, argc, argv);
-}
index 45bb54046d87ec4458f4f898eaa81ad1ac539d6f..10b5bb5d8e79066747e53f3ad6575089fcaf55f1 100644 (file)
@@ -316,9 +316,6 @@ command_ret_t do_ioctl_sync(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char
 }
 
 
-static
-command_ret_t do_help(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]);
-
 cmd_tbl_t cmd_tbl_sd[] = {
 CMD_TBL_ITEM(
        status, 2,                      CTBL_REPEAT,    do_status,
@@ -377,31 +374,12 @@ CMD_TBL_ITEM(
 #endif
 },
 /* Mark end of table */
-{ 0 },
+CMD_TBL_END(cmd_tbl_sd)
 };
 
-static
-command_ret_t do_help(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
-{
-       return _do_help(cmd_tbl_sd, cmdtp, flag, argc, argv);
-}
-
 
 command_ret_t do_sd(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
-       cmd_tbl_t *cp;
-
-       if (argc < 2)
-               return CMD_RET_USAGE;
-
-       /* drop initial "sd" arg */
-       argc--;
-       argv++;
-
-       cp = find_cmd(argv[0], cmd_tbl_sd);
-
-       if (cp)
-               return cp->cmd(cmdtp, flag, argc, argv);
-
+       puts_P("Huch?");
        return CMD_RET_USAGE;
 }
index 07fff78fbf24dce4cf1498fb5e2843561a8bee29..938edc33d88962e7f5291ae1f6bfdd2bbc694621 100644 (file)
@@ -69,17 +69,64 @@ int cmd_tbl_item_count(cmd_tbl_t *p)
        return count;
 }
 
+/***************************************************************************
+ * find command table entry for a command
+ */
+cmd_tbl_t *find_cmd (const char *cmd, cmd_tbl_t *table)
+{
+       cmd_tbl_t *cmdtp;
+       cmd_tbl_t *cmdtp_temp = table;  /*Init value */
+       int table_len = cmd_tbl_item_count(table);
+       size_t len;
+       uint_fast8_t n_found = 0;
+
+       char *optenv = getenv_str(PSTR("cmd"));
+       bool opt_debug = optenv && strstr_P(optenv, PSTR("debug")) != NULL;
+
+       if (!cmd)
+               return NULL;
+
+       len = strlen(cmd);
+
+       for (cmdtp = table;
+            cmdtp != table + table_len;
+            cmdtp++) {
+               if (strncmp_P(cmd, cmdtp->name, len) == 0 &&
+                                       (opt_debug || cmdtp->name[0] != '!')) {
+                       if (len == strlen_P(cmdtp->name))
+                               return cmdtp;   /* full match */
+
+                       cmdtp_temp = cmdtp;     /* abbreviated command ? */
+                       n_found++;
+               }
+       }
+       if (n_found == 1)                       /* exactly one match */
+               return cmdtp_temp;
+
+       return NULL;    /* not found or ambiguous command */
+}
+
+cmd_tbl_t *get_cmd_tbl_start(cmd_tbl_t  *cmdtp)
+{
+       cmd_tbl_t *p = cmdtp;
+
+       while (p->name != NULL)
+               ++p;
+
+       return p->subcmd;
+}
+
 /*
  * Use puts() instead of printf() to avoid printf buffer overflow
  * for long help messages
  */
 
-command_ret_t _do_help(cmd_tbl_t *tbl_start, cmd_tbl_t * cmdtp,
-               uint_fast8_t flag, int argc, char * const argv[])
+command_ret_t do_help(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
-
        (void) flag;
 
+       cmd_tbl_t *tbl_start = get_cmd_tbl_start(cmdtp);
+
        char *optenv = getenv_str(PSTR("cmd"));
        bool opt_debug = optenv && strstr_P(optenv, PSTR("debug")) != NULL;
 
@@ -139,44 +186,6 @@ command_ret_t _do_help(cmd_tbl_t *tbl_start, cmd_tbl_t * cmdtp,
        return CMD_RET_SUCCESS;
 }
 
-/***************************************************************************
- * find command table entry for a command
- */
-cmd_tbl_t *find_cmd (const char *cmd, cmd_tbl_t *table)
-{
-       cmd_tbl_t *cmdtp;
-       cmd_tbl_t *cmdtp_temp = table;  /*Init value */
-       int table_len = cmd_tbl_item_count(table);
-       size_t len;
-       uint_fast8_t n_found = 0;
-
-       char *optenv = getenv_str(PSTR("cmd"));
-       bool opt_debug = optenv && strstr_P(optenv, PSTR("debug")) != NULL;
-
-       if (!cmd)
-               return NULL;
-
-       len = strlen(cmd);
-
-       for (cmdtp = table;
-            cmdtp != table + table_len;
-            cmdtp++) {
-               if (strncmp_P(cmd, cmdtp->name, len) == 0 &&
-                                       (opt_debug || cmdtp->name[0] != '!')) {
-                       if (len == strlen_P(cmdtp->name))
-                               return cmdtp;   /* full match */
-
-                       cmdtp_temp = cmdtp;     /* abbreviated command ? */
-                       n_found++;
-               }
-       }
-       if (n_found == 1)                       /* exactly one match */
-               return cmdtp_temp;
-
-       return NULL;    /* not found or ambiguous command */
-}
-
-
 
 command_ret_t cmd_usage(const FLASH cmd_tbl_t *cmdtp)
 {
index 4f94d59b0e69a335477536176a549f1faabef560..61804286971769c6dd82beb1fcda3972a1111725 100644 (file)
@@ -8,7 +8,6 @@
 #include "command.h"
 #include "cmd_mem.h"
 
-extern command_ret_t do_help(cmd_tbl_t *, uint_fast8_t, int, char * const []);
 extern command_ret_t do_echo(cmd_tbl_t *, uint_fast8_t, int, char * const []);
 extern command_ret_t do_sleep(cmd_tbl_t *, uint_fast8_t, int, char * const []);
 extern command_ret_t do_env_print(cmd_tbl_t *, uint_fast8_t, int, char * const []);
@@ -407,5 +406,5 @@ CMD_TBL_ITEM(
 #endif
 },
 /* Mark end of table */
-{ 0 },
+CMD_TBL_END(cmd_tbl)
 };
index 5e55e471e885dda39822bd07e696a82094169164..2ea7505039d261307066d2a9cb54b67750ff82aa 100644 (file)
@@ -80,8 +80,7 @@ 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 *cmd_start, cmd_tbl_t * cmdtp, uint_fast8_t flag, int argc, char * const argv[]);
-cmd_tbl_t *find_cmd (const char *cmd, cmd_tbl_t *table);
+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);
@@ -169,6 +168,8 @@ extern command_ret_t do_reset(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, cha
        CMD_TBL_ITEM_FULL(_name, _maxargs, _rep, _cmd,                             \
                                        _usage, _help, _subtbl, NULL)
 
+#define CMD_TBL_END(_table_start)      { .subcmd = _table_start }
+
 typedef command_ret_t (*do_cmd_t)(cmd_tbl_t *, uint_fast8_t, int, char * const []);
 
 extern  cmd_tbl_t cmd_tbl[];