X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao_cmd.c;h=91abe7f08837c6d321aecc038c868d6daf7ee1aa;hp=13def7c20d7ef4b88e9ff436f2bce513ed5f5551;hb=819f1de8dd6010fae050bcef930943c7923929f9;hpb=43c8f7012102cdb591ace899420c10e4a78385ad diff --git a/ao_cmd.c b/ao_cmd.c index 13def7c2..91abe7f0 100644 --- a/ao_cmd.c +++ b/ao_cmd.c @@ -152,9 +152,8 @@ ao_cmd_hex(void) ao_cmd_status = r; } -#if 0 -static void -decimal(void) +void +ao_cmd_decimal(void) { __xdata uint8_t r = ao_cmd_lex_error; @@ -162,7 +161,7 @@ decimal(void) ao_cmd_white(); for(;;) { if ('0' <= ao_cmd_lex_c && ao_cmd_lex_c <= '9') - ao_cmd_lex_i = (ao_cmd_lex_i * 10 ) | (ao_cmd_lex_c - '0'); + ao_cmd_lex_i = (ao_cmd_lex_i * 10) + (ao_cmd_lex_c - '0'); else break; r = ao_cmd_success; @@ -171,7 +170,6 @@ decimal(void) if (r != ao_cmd_success) ao_cmd_status = r; } -#endif static void eol(void) @@ -216,7 +214,7 @@ echo(void) static const uint8_t help_txt[] = "All numbers are in hex"; -#define NUM_CMDS 8 +#define NUM_CMDS 10 static __code struct ao_cmds *__xdata (ao_cmds[NUM_CMDS]); static __xdata uint8_t ao_ncmds; @@ -226,10 +224,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 +258,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 +271,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 +294,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 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 Dump memory" }, { 0, help, NULL }, };