Add in a shell tagline (per lash/hush behavior) to make it easier
to know which shell is in use.  Add in 'help' to list available
builtins, and fixup msh so it can do STANDALONE_SHELL.
 -Erik
diff --git a/ash.c b/ash.c
index 99460d3..4250f50 100644
--- a/ash.c
+++ b/ash.c
@@ -1603,6 +1603,7 @@
 static int exportcmd (int, char **);
 static int histcmd (int, char **);
 static int hashcmd (int, char **);
+static int helpcmd (int, char **);
 static int jobscmd (int, char **);
 static int localcmd (int, char **);
 #ifndef BB_PWD
@@ -1704,6 +1705,7 @@
 	{ BUILTIN_REGULAR   "getopts", getoptscmd },
 #endif
 	{ BUILTIN_NOSPEC    "hash", hashcmd },
+	{ BUILTIN_NOSPEC    "help", helpcmd },
 	{ BUILTIN_REGULAR   "jobs", jobscmd },
 #ifdef JOBS
 	{ BUILTIN_REGULAR   "kill", killcmd },
@@ -3274,6 +3276,7 @@
 setinteractive(int on)
 {
 	static int is_interactive;
+	static int do_banner=0;
 
 	if (on == is_interactive)
 		return;
@@ -3282,6 +3285,12 @@
 	setsignal(SIGTERM);
 	chkmail(1);
 	is_interactive = on;
+	if (do_banner==0 && is_interactive) {
+		/* Looks like they want an interactive shell */
+		printf( "\n\n" BB_BANNER " Built-in shell (ash)\n");
+		printf( "Enter 'help' for a list of built-in commands.\n\n");
+		do_banner=1;
+	}
 }
 
 static void
@@ -3802,6 +3811,51 @@
 
 
 
+/*** List the available builtins ***/
+
+
+static int helpcmd(int argc, char** argv)
+{
+	int col, i;
+	const struct builtincmd *x;
+
+	printf("\nBuilt-in commands:\n");
+	printf("-------------------\n");
+	for (col=0, i=0, x = builtincmds; i < NUMBUILTINS; x++, i++) {
+		if (!x->name || ! (x->name+1))
+			continue;
+		col += printf("%s%s", ((col == 0) ? "\t" : " "), 
+				(x->name+1));
+		if (col > 60) {
+			printf("\n");
+			col = 0;
+		}
+	}
+#ifdef BB_FEATURE_SH_STANDALONE_SHELL
+	{
+		const struct BB_applet *applet;
+		extern const struct BB_applet applets[];
+		extern const size_t NUM_APPLETS;
+
+		for (i=0, applet = applets; i < NUM_APPLETS; applet++, i++) {
+			if (!applet->name)
+				continue;
+		
+			col += printf("%s%s", ((col == 0) ? "\t" : " "), 
+					applet->name);
+			if (col > 60) {
+				printf("\n");
+				col = 0;
+			}
+		}
+	}
+#endif
+	printf("\n\n");
+	return EXIT_SUCCESS;
+}
+
+
+
 /*
  * Resolve a command name.  If you change this routine, you may have to
  * change the shellexec routine as well.
@@ -7755,6 +7809,11 @@
 	EXECCMD = find_builtin("exec");
 	EVALCMD = find_builtin("eval");
 
+#ifndef BB_FEATURE_SH_FANCY_PROMPT
+	unsetenv("PS1");
+	unsetenv("PS2");
+#endif
+
 #if PROFILE
 	monitor(4, etext, profile_buf, sizeof profile_buf, 50);
 #endif
@@ -13088,7 +13147,7 @@
 /*
  * Copyright (c) 1999 Herbert Xu <herbert@debian.org>
  * This file contains code for the times builtin.
- * $Id: ash.c,v 1.6 2001/07/06 04:26:23 andersen Exp $
+ * $Id: ash.c,v 1.7 2001/07/07 00:05:55 andersen Exp $
  */
 static int timescmd (int argc, char **argv)
 {