aboutsummaryrefslogtreecommitdiff
path: root/sys/boot
diff options
context:
space:
mode:
authorAttilio Rao <attilio@FreeBSD.org>2009-11-22 15:57:08 +0000
committerAttilio Rao <attilio@FreeBSD.org>2009-11-22 15:57:08 +0000
commitea46ba3475c6bf1faa29fcccda2d8fd08271dc5c (patch)
tree32c6217253361a99a451e4a1980e749f48faa3f3 /sys/boot
parent36a59d030604ce550f4fdc872036671c02500da2 (diff)
Notes
Diffstat (limited to 'sys/boot')
-rw-r--r--sys/boot/common/Makefile.inc4
-rw-r--r--sys/boot/common/boot.c18
2 files changed, 22 insertions, 0 deletions
diff --git a/sys/boot/common/Makefile.inc b/sys/boot/common/Makefile.inc
index 9ede3866fb3b..1f31aa9b601d 100644
--- a/sys/boot/common/Makefile.inc
+++ b/sys/boot/common/Makefile.inc
@@ -38,4 +38,8 @@ MAN+= ../forth/loader.conf.5
MAN+= ../forth/loader.4th.8
.endif
+.if defined(BOOT_PROMPT_123)
+CFLAGS+= -DBOOT_PROMPT_123
+.endif
+
MAN+= loader.8
diff --git a/sys/boot/common/boot.c b/sys/boot/common/boot.c
index 315c039b4666..c6ab6812da72 100644
--- a/sys/boot/common/boot.c
+++ b/sys/boot/common/boot.c
@@ -162,6 +162,9 @@ autoboot(int timeout, char *prompt)
int c, yes;
char *argv[2], *cp, *ep;
char *kernelname;
+#ifdef BOOT_PROMPT_123
+ const char *seq = "123", *p = seq;
+#endif
autoboot_tried = 1;
@@ -192,14 +195,29 @@ autoboot(int timeout, char *prompt)
yes = 0;
+#ifdef BOOT_PROMPT_123
+ printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or "
+ "1 2 3 sequence for command prompt." : prompt);
+#else
printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or any other key for command prompt." : prompt);
+#endif
for (;;) {
if (ischar()) {
c = getchar();
+#ifdef BOOT_PROMPT_123
+ if ((c == '\r') || (c == '\n')) {
+ yes = 1;
+ break;
+ } else if (c != *p++)
+ p = seq;
+ if (*p == 0)
+ break;
+#else
if ((c == '\r') || (c == '\n'))
yes = 1;
break;
+#endif
}
ntime = time(NULL);
if (ntime >= when) {