aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmd.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/cmd.c b/src/cmd.c
index 1042197..106eda8 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -34,6 +34,7 @@ static void do_quote(void);
static void do_topic(void);
static void do_ver(void);
static void do_reset(void);
+static void do_reboot(void);
typedef struct {
char *cmd;
@@ -67,6 +68,7 @@ cmd_t command_defs[] = {
{ "QUIT", do_quit, 0 },
{ "QUOTE", do_quote, 1 },
{ "TOPIC", do_topic, 0 },
+ { "REBOOT", do_reboot, 0 },
{ "RESET", do_reset, 0 },
{ "VER", do_ver, 0 },
{ "VERSION", do_ver, 0 },
@@ -194,11 +196,27 @@ static void do_j(void) {
static void do_quit(void) {
reconnect_timeout = 0; /* do not reconnect on /quit */
txbuf_set_str("QUIT");
- if(arg1)
+ if(arg1) {
txbuf_append_str2(" :", arg1);
+ }
txbuf_send();
}
+static void pause(void) {
+ OS.rtclok[2] = 0;
+ while(OS.rtclok[2] < hz)
+ /* NOP */;
+}
+
+static void do_reboot(void) {
+ arg1 = "Rebooting again...";
+ do_quit();
+ pause();
+ do_reset();
+ pause();
+ asm("jmp $e477");
+}
+
static void do_part(void) {
if(arg1[0] == '#') {
target = arg1;