summaryrefslogtreecommitdiff
path: root/ao_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'ao_cmd.c')
-rw-r--r--ao_cmd.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/ao_cmd.c b/ao_cmd.c
index 13def7c2..7722c598 100644
--- a/ao_cmd.c
+++ b/ao_cmd.c
@@ -226,10 +226,13 @@ help(void)
{
__xdata uint8_t cmds;
__xdata uint8_t cmd;
+ __code struct ao_cmds * __xdata cs;
puts(help_txt);
- for (cmds = 0; cmds < ao_ncmds; cmds++)
- for (cmd = 0; ao_cmds[cmds][cmd].cmd; cmd++)
- puts(ao_cmds[cmds][cmd].help);
+ for (cmds = 0; cmds < ao_ncmds; cmds++) {
+ cs = ao_cmds[cmds];
+ for (cmd = 0; cs[cmd].cmd != '\0'; cmd++)
+ puts(cs[cmd].help);
+ }
}
static void
@@ -257,6 +260,8 @@ ao_cmd(void *parameters)
{
__xdata uint8_t c;
__xdata uint8_t cmd, cmds;
+ __code struct ao_cmds * __xdata cs;
+ void (*__xdata func)(void);
(void) parameters;
lex_echo = 1;
@@ -268,16 +273,19 @@ ao_cmd(void *parameters)
ao_cmd_lex();
if (c == '\r' || c == '\n')
continue;
- cmd = 0;
+ func = (void (*)(void)) NULL;
for (cmds = 0; cmds < ao_ncmds; cmds++) {
- for (cmd = 0; ao_cmds[cmds][cmd].cmd != '\0'; cmd++)
- if (ao_cmds[cmds][cmd].cmd == c)
+ cs = ao_cmds[cmds];
+ for (cmd = 0; cs[cmd].cmd != '\0'; cmd++)
+ if (cs[cmd].cmd == c) {
+ func = cs[cmd].func;
break;
- if (ao_cmds[cmds][cmd].cmd)
+ }
+ if (func)
break;
}
- if (ao_cmds[cmds][cmd].cmd)
- (*ao_cmds[cmds][cmd].func);
+ if (func)
+ (*func)();
else
ao_cmd_status = ao_cmd_syntax_error;
report();
@@ -288,9 +296,9 @@ __xdata struct ao_task ao_cmd_task;
__code struct ao_cmds ao_base_cmds[] = {
{ '?', help, "? Print this message" },
- { 'T', ao_task_info, "T Show task states\n" },
- { 'E', echo, "E <0 off, 1 on> Set command echo mode\n" },
- { 'd', dump, "d <start> <end> Dump memory\n" },
+ { 'T', ao_task_info, "T Show task states" },
+ { 'E', echo, "E <0 off, 1 on> Set command echo mode" },
+ { 'd', dump, "d <start> <end> Dump memory" },
{ 0, help, NULL },
};