]> 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>
Sat, 21 Jul 2018 11:15:41 +0000 (13:15 +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 c5a265d75701a884858c1ebb24c146bf67865044..d650514080e4e07a8d8db5081ff2b50c78d97866 100644 (file)
@@ -7,7 +7,7 @@ FATFS   = $(FATFSD)/ff.c $(FATFSD)/ffunicode.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 0fc6f8309d78eb8c5bc649f32d25695a9982a51b..bb0eca1676026ab70df7382f70a6ac9daecd856e 100644 (file)
@@ -536,9 +536,6 @@ command_ret_t do_rw(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const
 }
 
 
-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,
@@ -600,31 +597,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 98955bd500275a0ac14842b787bf798d9b4e83e5..9cd664b3bfba4cf55eb6af04bd7738edbc304096 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 3f74be85276037c61d708aa2f040df7ad3385ca8..1b34ec1c2e226ab56a3286d3dc41ac5c77be7670 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[];