]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/cmd_fat.c
Recursive cmd_find(), new command table flag: CTBL_RPT
[z180-stamp.git] / avr / cmd_fat.c
index 65196886ade4afdd5c0710973ddb399083d7ef25..b083456193a36367ead397853018eff62e4b136d 100644 (file)
@@ -9,11 +9,7 @@
  */
 
 #include "cmd_fat.h"
-#include "common.h"
-#include <string.h>
-#include <stdbool.h>
 
-#include "command.h"
 #include "ff.h"
 #include "z80-if.h"
 #include "eval_arg.h"
@@ -169,7 +165,7 @@ FRESULT scan_files (
  * fatstat path - Show logical drive status
  *
  */
-command_ret_t do_stat(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+command_ret_t do_stat(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int argc, char * const argv[])
 {
        FATFS *fs;
        DWORD nfreeclst;
@@ -181,7 +177,7 @@ command_ret_t do_stat(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
        path = (char *) malloc(BUFFER_SIZE);
        if (path == NULL) {
-               printf_P(PSTR("fatstat: Out of Memory!\n"));
+               printf_P(PSTR("fat stat: Out of Memory!\n"));
                free(path);
                return CMD_RET_FAILURE;
        }
@@ -241,7 +237,7 @@ command_ret_t do_stat(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  * pwd - Print current directory of the current drive.
  *
  */
-command_ret_t do_pwd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+command_ret_t do_pwd(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
        FRESULT res;
        char *buf;
@@ -273,7 +269,7 @@ command_ret_t do_pwd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  * cd - Change the current/working directory.
  *
  */
-command_ret_t do_cd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+command_ret_t do_cd(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
        char *arg;
        FRESULT res = 0;
@@ -281,9 +277,9 @@ command_ret_t do_cd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        (void) cmdtp; (void) flag; (void) argc;
 
        if (argc < 2) {
-               arg = getenv_str(PSTR("HOME"));
+               arg = getenv_str(PSTR(ENV_HOME));
                if (arg == NULL) {
-                       printf_P(PSTR("%s: \"%S\" is not set\n"), argv[0], PSTR("HOME"));
+                       printf_P(PSTR("%s: \"%S\" is not set\n"), argv[0], PSTR(ENV_HOME));
                        return CMD_RET_FAILURE;
                }
        } else
@@ -312,7 +308,7 @@ command_ret_t do_cd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  * fatls path - Directory listing
  *
  */
-command_ret_t do_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+command_ret_t do_ls(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
        FATFS *fs;
        DIR Dir;                                        /* Directory object */
@@ -416,7 +412,7 @@ FRESULT mkpath(TCHAR *path)
  *             read  <d:/path/filename> <addr> [bytes [pos]]
  *             write <d:/path/filename> <addr> <bytes>
  */
-command_ret_t do_rw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+command_ret_t do_rw(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
        FIL File;
        uint32_t addr;
@@ -424,7 +420,7 @@ command_ret_t do_rw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        unsigned long pos;
        unsigned long bytes_rw;
 
-       bool dowrite = (argv[0][3] == 'w');
+       bool dowrite = (argv[0][0] == 'w');
        FRESULT res = FR_OK;
        bool buserr = 0;
        uint32_t timer;
@@ -536,27 +532,24 @@ command_ret_t do_rw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 }
 
 
-static
-command_ret_t do_help(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
-
-cmd_tbl_t cmd_fat_sub[] = {
+cmd_tbl_t cmd_tbl_fat[] = {
 CMD_TBL_ITEM(
-       stat,   2,      1,      do_stat,
+       stat,   2,      CTBL_RPT,       do_stat,
        "Show logical drive status",
        "dev"
 ),
 CMD_TBL_ITEM(
-       pwd,    2,      1,      do_pwd,
+       pwd,    2,      CTBL_RPT,       do_pwd,
        "Print name of current/working directory",
        ""
 ),
 CMD_TBL_ITEM(
-       cd,     2,      1,      do_cd,
+       cd,             2,      0,                      do_cd,
        "Change the current/working directory.",
        "path"
 ),
 CMD_TBL_ITEM(
-       ls,     2,      1,      do_ls,
+       ls,             2,      CTBL_RPT,       do_ls,
        "Directory listing",
        "path"
 ),
@@ -572,47 +565,41 @@ CMD_TBL_ITEM(
        "      the load stops on end of file."
 ),
 CMD_TBL_ITEM(
-       write,  4,      0,      do_rw,
+       write,  4,      0,                      do_rw,
        "write file into a dos filesystem",
        "<d:/path/filename> <addr> <bytes>\n"
        "    - Write file to 'path/filename' on logical drive 'd' from RAM\n"
        "      starting at address 'addr'.\n"
 ),
 
+CMD_TBL_ITEM(
+       help,   CONFIG_SYS_MAXARGS,     CTBL_RPT,       do_help,
+       "Print sub command description/usage",
+       "\n"
+       "       - print brief description of all sub commands\n"
+       "fat help command ...\n"
+       "       - print detailed usage of sub cmd 'command'"
+),
+
 /* This does not use the CMD_TBL_ITEM macro as ? can't be used in symbol names */
        {FSTR("?"),   CONFIG_SYS_MAXARGS, 1, do_help,
         FSTR("Alias for 'help'"),
 #ifdef  CONFIG_SYS_LONGHELP
        FSTR(""),
 #endif /* CONFIG_SYS_LONGHELP */
+       NULL,
 #ifdef CONFIG_AUTO_COMPLETE
-       0,
+       NULL,
 #endif
 },
+/* Mark end of table */
+CMD_TBL_END(cmd_tbl_fat)
 };
 
-static
-command_ret_t do_help(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-       return _do_help(cmd_fat_sub, ARRAY_SIZE(cmd_fat_sub), cmdtp, flag, argc, argv);
-}
-
 
-command_ret_t do_fat(cmd_tbl_t *cmdtp, int flag, int argc, char * const 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_tbl(argv[0], cmd_fat_sub, ARRAY_SIZE(cmd_fat_sub));
-
-       if (cp)
-               return cp->cmd(cmdtp, flag, argc, argv);
+       puts_P(PSTR("Huch?"));
 
        return CMD_RET_USAGE;
 }