*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
__pdata char ao_cmd_lex_c;
__pdata enum ao_cmd_status ao_cmd_status;
+#ifndef AO_CMD_LEN
#if AO_PYRO_NUM
-#define CMD_LEN 128
+#define AO_CMD_LEN 128
#else
-#define CMD_LEN 48
+#define AO_CMD_LEN 48
+#endif
#endif
-static __xdata char cmd_line[CMD_LEN];
+static __xdata char cmd_line[AO_CMD_LEN];
static __pdata uint8_t cmd_len;
static __pdata uint8_t cmd_i;
ao_put_string ("\010 \010");
}
-static void
-readline(void)
+void
+ao_cmd_readline(void)
{
char c;
if (ao_echo())
break;
}
- if (cmd_len >= CMD_LEN - 2)
+ if (cmd_len >= AO_CMD_LEN - 2)
continue;
cmd_line[cmd_len++] = c;
if (ao_echo())
cmd_i = 0;
}
-void
+char
ao_cmd_lex(void)
{
ao_cmd_lex_c = '\n';
if (cmd_i < cmd_len)
ao_cmd_lex_c = cmd_line[cmd_i++];
+ return ao_cmd_lex_c;
}
static void
void (*__xdata func)(void);
for (;;) {
- readline();
+ ao_cmd_readline();
ao_cmd_lex();
ao_cmd_white();
c = ao_cmd_lex_c;
if (func)
break;
}
+#if HAS_MONITOR
+ ao_mutex_get(&ao_monitoring_mutex);
+#endif
if (func)
(*func)();
else
ao_cmd_status = ao_cmd_syntax_error;
report();
+#if HAS_MONITOR
+ ao_mutex_put(&ao_monitoring_mutex);
+#endif
}
}