hexed: Minor improvements
This commit is contained in:
parent
b1ef1169b9
commit
37401b9889
@ -98,6 +98,6 @@ extern FAR struct cmdargs_s *g_cmdargs;
|
||||
* Public Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
int parsecmdargs(FAR char *argv[], FAR struct arglist_s *arglist);
|
||||
int parsecmdargs(FAR char *argv[], FAR const struct arglist_s *arglist);
|
||||
|
||||
#endif /* __APPS_SYSTEM_HEXED_INCLUDE_CMDARGS_H */
|
||||
|
@ -127,8 +127,8 @@ struct command_s
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
extern int g_wordsize;
|
||||
extern FAR struct bfile_s *g_hexfile;
|
||||
extern int g_wordsize;
|
||||
|
||||
/****************************************************************************
|
||||
* Public Function Prototypes
|
||||
|
@ -52,8 +52,6 @@ FAR struct cmdargs_s *g_cmdargs = NULL;
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
static struct cmdargs_s g_cmdargs_storage;
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
@ -74,23 +72,14 @@ static struct cmdargs_s g_cmdargs_storage;
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int parsecmdargs(FAR char *argv[], FAR struct arglist_s *arglist)
|
||||
int parsecmdargs(FAR char *argv[], FAR const struct arglist_s *arglist)
|
||||
{
|
||||
FAR char *arg;
|
||||
int i;
|
||||
|
||||
/* Set cmdargs global reference (if already not set) */
|
||||
|
||||
if (g_cmdargs != &g_cmdargs_storage)
|
||||
{
|
||||
g_cmdargs = &g_cmdargs_storage;
|
||||
memset(g_cmdargs, 0, sizeof(struct cmdargs_s));
|
||||
}
|
||||
|
||||
g_cmdargs->argid = 0;
|
||||
|
||||
/* Get next arg */
|
||||
|
||||
g_cmdargs->argid = 0;
|
||||
if ((g_cmdargs->flags & CMDARGS_FL_SINGLE) == 0)
|
||||
{
|
||||
g_cmdargs->idx++;
|
||||
|
@ -190,15 +190,6 @@ int hexcopy(FAR struct command_s *cmd, int optc, char *opt)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We need to have a file name for this command */
|
||||
|
||||
if (g_hexfile == NULL)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Copy command requires a filename\n");
|
||||
g_last_error = EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
optc = runcopy(cmd);
|
||||
}
|
||||
|
||||
|
@ -254,15 +254,6 @@ int hexdump(FAR struct command_s *cmd, int optc, char *opt)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We need to have a file name for this command */
|
||||
|
||||
if (g_hexfile == NULL)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Dump command requires a filename\n");
|
||||
g_last_error = EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
optc = rundump(cmd);
|
||||
}
|
||||
|
||||
|
@ -59,11 +59,11 @@ int g_wordsize;
|
||||
****************************************************************************/
|
||||
|
||||
static FAR struct command_s g_cmdtbl[CMD_MAX_CNT];
|
||||
static FAR struct command_s *g_cmd;
|
||||
static int g_ncmds;
|
||||
|
||||
/* Valid args */
|
||||
|
||||
static struct arglist_s g_arglist[] =
|
||||
static const struct arglist_s g_arglist[] =
|
||||
{
|
||||
{"h", 0},
|
||||
{"co", CMDARGS_FL_OPTREQ},
|
||||
@ -215,9 +215,7 @@ FAR struct command_s *newcmd(int cmdno)
|
||||
|
||||
/* Set defaults */
|
||||
|
||||
cmd = &g_cmdtbl[cmdno];
|
||||
memset(cmd, sizeof(struct command_s), 0);
|
||||
|
||||
cmd = &g_cmdtbl[cmdno];
|
||||
cmd->id = g_cmdargs->argid;
|
||||
cmd->cmd = g_cmdargs->arg;
|
||||
cmd->flags = CMD_FL_CMDLINE;
|
||||
@ -229,17 +227,17 @@ FAR struct command_s *newcmd(int cmdno)
|
||||
|
||||
int parseargs(FAR char *argv[])
|
||||
{
|
||||
FAR struct command_s *cmd;
|
||||
FAR char *fname;
|
||||
FAR char *opt;
|
||||
int cmdcnt;
|
||||
int optc;
|
||||
|
||||
fname = NULL;
|
||||
cmdcnt = 0;
|
||||
g_cmd = g_cmdtbl;
|
||||
cmd = g_cmdtbl;
|
||||
g_ncmds = 0;
|
||||
g_hexfile = NULL;
|
||||
|
||||
memset(g_cmd, sizeof(struct command_s), 0);
|
||||
memset(g_cmdtbl, 0, CMD_MAX_CNT * sizeof(struct command_s));
|
||||
|
||||
while (parsecmdargs(argv, g_arglist) != EOF)
|
||||
{
|
||||
@ -247,10 +245,10 @@ int parseargs(FAR char *argv[])
|
||||
|
||||
if (g_cmdargs->argid > 0)
|
||||
{
|
||||
cmdcnt++;
|
||||
optc = 0;
|
||||
opt = g_cmdargs->opt;
|
||||
g_cmd = newcmd(cmdcnt);
|
||||
g_ncmds++;
|
||||
optc = 0;
|
||||
opt = g_cmdargs->opt;
|
||||
cmd = newcmd(g_ncmds);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -261,7 +259,7 @@ int parseargs(FAR char *argv[])
|
||||
|
||||
/* Set command options */
|
||||
|
||||
optc = hexcmd(g_cmd, optc, opt);
|
||||
optc = hexcmd(cmd, optc, opt);
|
||||
if (optc < 0)
|
||||
{
|
||||
/* End of range option? */
|
||||
@ -296,7 +294,7 @@ int parseargs(FAR char *argv[])
|
||||
|
||||
if (optc <= 0)
|
||||
{
|
||||
g_cmd = g_cmdtbl;
|
||||
cmd = g_cmdtbl;
|
||||
optc = 0;
|
||||
}
|
||||
}
|
||||
@ -308,19 +306,27 @@ int parseargs(FAR char *argv[])
|
||||
|
||||
int runargs(void)
|
||||
{
|
||||
FAR struct command_s *cmd;
|
||||
int quit;
|
||||
int i;
|
||||
|
||||
/* Check for no commands */
|
||||
|
||||
if (g_ncmds == 0)
|
||||
{
|
||||
return CMD_QUIT;
|
||||
}
|
||||
|
||||
/* Scan for help command */
|
||||
|
||||
quit = 0;
|
||||
g_cmd = &g_cmdtbl[1]; /* Skip 1st reserved command */
|
||||
cmd = &g_cmdtbl[1]; /* Skip 1st reserved command */
|
||||
|
||||
for (i = 1; i < CMD_MAX_CNT && g_cmd->id > 0; i++, g_cmd++)
|
||||
for (i = 1; i < g_ncmds + 1; i++, cmd++)
|
||||
{
|
||||
if (g_cmd->id == CMD_HELP)
|
||||
if (cmd->id == CMD_HELP)
|
||||
{
|
||||
hexcmd(g_cmd, -1, NULL);
|
||||
hexcmd(cmd, -1, NULL);
|
||||
quit = CMD_QUIT;
|
||||
break;
|
||||
}
|
||||
@ -330,12 +336,23 @@ int runargs(void)
|
||||
|
||||
if (quit != CMD_QUIT)
|
||||
{
|
||||
g_cmd = &g_cmdtbl[1]; /* Skip 1st reserved command */
|
||||
for (i = 1; i < CMD_MAX_CNT && g_cmd->id > 0; i++, g_cmd++)
|
||||
{
|
||||
hexcmd(g_cmd, -1, NULL);
|
||||
/* All other commands require a filename arguement */
|
||||
|
||||
if ((g_cmd->flags & CMD_FL_QUIT) != 0)
|
||||
if (g_hexfile == NULL)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Missing filename\n");
|
||||
g_last_error = EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Process every command on the command line */
|
||||
|
||||
cmd = &g_cmdtbl[1]; /* Skip 1st reserved command */
|
||||
for (i = 1; i < g_ncmds + 1; i++, cmd++)
|
||||
{
|
||||
hexcmd(cmd, -1, NULL);
|
||||
|
||||
if ((cmd->flags & CMD_FL_QUIT) != 0)
|
||||
{
|
||||
quit = CMD_QUIT;
|
||||
}
|
||||
@ -362,10 +379,18 @@ int main(int argc, FAR char *argv[])
|
||||
int hexed_main(int argc, char *argv[])
|
||||
#endif
|
||||
{
|
||||
g_wordsize = WORD_8;
|
||||
struct cmdargs_s args;
|
||||
|
||||
/* Set cmdargs global reference (if already not set) */
|
||||
|
||||
memset(&args, 0, sizeof(struct cmdargs_s));
|
||||
g_cmdargs = &args;
|
||||
|
||||
/* Check command line arguments */
|
||||
|
||||
g_wordsize = WORD_8;
|
||||
g_hexfile = NULL;
|
||||
|
||||
parseargs(argv);
|
||||
|
||||
/* Run commands */
|
||||
|
@ -63,7 +63,7 @@ static const char *helpmsg[] =
|
||||
" -m [src] [dest] [len] Move data from src to dest for len words\n",
|
||||
" -r [src] [len] Remove data from src for len words\n",
|
||||
" -w [bytes] Set the word size in bytes: 1 = 8 bits\n"
|
||||
" 2 = 16 bits, 4 = 32 bits, 8 = 64 bits\n",
|
||||
" 2 = 16 bits, 4 = 32 bits, 8 = 64 bits\n",
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
@ -222,15 +222,6 @@ int hexmove(FAR struct command_s *cmd, int optc, char *opt)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We need to have a file name for this command */
|
||||
|
||||
if (g_hexfile == NULL)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Move command requires a filename\n");
|
||||
g_last_error = EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
optc = runmove(cmd);
|
||||
}
|
||||
|
||||
|
@ -142,15 +142,6 @@ int hexremove(FAR struct command_s *cmd, int optc, char *opt)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We need to have a file name for this command */
|
||||
|
||||
if (g_hexfile == NULL)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Remove command requires a filename\n");
|
||||
g_last_error = EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
optc = runremove(cmd);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user