summaryrefslogtreecommitdiff
path: root/sys/stand/boot/cmd.c
diff options
context:
space:
mode:
authorMichael Shalayeff <mickey@cvs.openbsd.org>1997-09-02 20:48:19 +0000
committerMichael Shalayeff <mickey@cvs.openbsd.org>1997-09-02 20:48:19 +0000
commite8f1f777279c50e2764124939e190fc900e889b7 (patch)
treecd18fa096ec49483351b466b46ea1b42b38587c4 /sys/stand/boot/cmd.c
parent3eda24647132709cb951ff958966e14cab8a9a09 (diff)
machine(MD) command set support
Diffstat (limited to 'sys/stand/boot/cmd.c')
-rw-r--r--sys/stand/boot/cmd.c61
1 files changed, 42 insertions, 19 deletions
diff --git a/sys/stand/boot/cmd.c b/sys/stand/boot/cmd.c
index c52350a1cff..11815efc6c4 100644
--- a/sys/stand/boot/cmd.c
+++ b/sys/stand/boot/cmd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd.c,v 1.29 1997/08/22 00:41:27 mickey Exp $ */
+/* $OpenBSD: cmd.c,v 1.30 1997/09/02 20:48:17 mickey Exp $ */
/*
* Copyright (c) 1997 Michael Shalayeff
@@ -58,15 +58,10 @@ static int Xhowto __P((void));
static int Xtty __P((void));
static int Xtime __P((void));
static int Xecho __P((void));
-
-struct cmd_table {
- char *cmd_name;
- char cmd_type;
-#define CMDT_CMD 0
-#define CMDT_VAR 1
-#define CMDT_SET 2
- int (*cmd_exec) __P((void));
-};
+#ifdef MACHINE_CMD
+static int Xmachine __P((void));
+extern const struct cmd_table MACHINE_CMD[];
+#endif
static const struct cmd_table cmd_set[] = {
{"addr", CMDT_VAR, Xaddr},
@@ -85,8 +80,11 @@ static const struct cmd_table cmd_table[] = {
{"echo", CMDT_CMD, Xecho},
{"help", CMDT_CMD, Xhelp},
{"ls", CMDT_CMD, Xls},
+#ifdef MACHINE_CMD
+ {"machine",CMDT_MDC, Xmachine},
+#endif
{"reboot", CMDT_CMD, Xreboot},
-#ifdef DEBUG
+#ifdef DUMP_REGS
{"regs", CMDT_CMD, Xregs},
#endif
{"set", CMDT_SET, Xset},
@@ -165,8 +163,8 @@ read_conf()
static int
docmd()
{
- const struct cmd_table *ct;
register char *p = NULL;
+ const struct cmd_table *ct, *cs;
cmd.argc = 1;
if (cmd.cmd == NULL) {
@@ -181,13 +179,21 @@ docmd()
return 0;
}
ct = cmd_table;
+ cs = NULL;
cmd.argv[cmd.argc] = p; /* in case it's shortcut boot */
p = whatcmd(&ct, p);
if (ct == NULL) {
cmd.argc++;
ct = cmd_table;
} else if (ct->cmd_type == CMDT_SET && p != NULL) {
- const struct cmd_table *cs = cmd_set;
+ cs = cmd_set;
+#ifdef MACHINE_CMD
+ } else if (ct->cmd_type == CMDT_MDC && p != NULL) {
+ cs = MACHINE_CMD;
+#endif
+ }
+
+ if (cs != NULL) {
p = whatcmd(&cs, p);
if (cs == NULL) {
printf("%s: syntax error\n", ct->cmd_name);
@@ -310,18 +316,35 @@ Xdebug()
}
#endif
+static void
+print_help(register const struct cmd_table *ct)
+{
+ for (; ct->cmd_name != NULL; ct++)
+ printf(" %s", ct->cmd_name);
+ putchar('\n');
+}
+
static int
Xhelp()
{
- register const struct cmd_table *ct;
-
printf("commands:");
- for (ct = cmd_table; ct->cmd_name != NULL; ct++)
- printf(" %s", ct->cmd_name);
- putchar('\n');
+ print_help(cmd_table);
+#ifdef MACHINE_CMD
+ return Xmachine();
+#else
+ return 0;
+#endif
+}
+#ifdef MACHINE_CMD
+static int
+Xmachine()
+{
+ printf("machine:");
+ print_help(MACHINE_CMD);
return 0;
}
+#endif
static int
Xecho()
@@ -584,7 +607,7 @@ Xreboot()
return 0; /* just in case */
}
-#ifdef DEBUG
+#ifdef DUMP_REGS
static int
Xregs()
{