diff options
Diffstat (limited to 'sys/boot/common/interp.c')
-rw-r--r-- | sys/boot/common/interp.c | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/sys/boot/common/interp.c b/sys/boot/common/interp.c index a0162ba..c58b1c4 100644 --- a/sys/boot/common/interp.c +++ b/sys/boot/common/interp.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: interp.c,v 1.1.1.1 1998/08/21 03:17:41 msmith Exp $ + * $Id: interp.c,v 1.2 1998/09/01 00:41:24 msmith Exp $ */ /* * Simple commandline interpreter, toplevel and misc. @@ -83,6 +83,24 @@ interact(void) int argc; char **argv; + /* + * Read our default configuration + */ + source("/boot/boot.conf"); + printf("\n"); + /* + * Before interacting, we might want to autoboot + */ + if (getenv("no_autoboot") == NULL) + autoboot(10, NULL); /* try to boot automatically */ + + /* + * Not autobooting, go manual + */ + printf("\nType '?' for a list of commands, 'help' for more detailed help.\n"); + setenv("prompt", "${currdev}>", 1); + + for (;;) { input[0] = '\0'; prompt(); @@ -149,32 +167,29 @@ source(char *filename) } /* - * Emit the current prompt; support primitive embedding of - * environment variables. - * We're a little rude here, modifying the return from getenv(). + * Emit the current prompt; use the same syntax as the parser + * for embedding environment variables. */ static void prompt(void) { - char *p, *cp, *ev, c; + char *p, *cp, *ev; - if ((p = getenv("prompt")) == NULL) - p = ">"; + if ((cp = getenv("prompt")) == NULL) + cp = ">"; + p = strdup(cp); while (*p != 0) { - if (*p == '$') { - for (cp = p + 1; (*cp != 0) && isalpha(*cp); cp++) + if ((*p == '$') && (*(p+1) == '{')) { + for (cp = p + 2; (*cp != 0) && (*cp != '}'); cp++) ; - c = *cp; *cp = 0; - ev = getenv(p + 1); - *cp = c; + ev = getenv(p + 2); - if (ev != NULL) { + if (ev != NULL) printf(ev); - p = cp; - continue; - } + p = cp + 1; + continue; } putchar(*p++); } |