summaryrefslogtreecommitdiffstats
path: root/src/core/main.c
diff options
context:
space:
mode:
authorMichael Brown2008-03-27 00:16:20 +0100
committerMichael Brown2008-03-27 00:16:20 +0100
commit978996cdae6d38b3febc9c07acf2585dde842722 (patch)
tree8cf19d2e31e4c8008b879eafcf8631a85fff7eb8 /src/core/main.c
parent[libc] Whitespace cleanup in errno.h (diff)
downloadipxe-978996cdae6d38b3febc9c07acf2585dde842722.tar.gz
ipxe-978996cdae6d38b3febc9c07acf2585dde842722.tar.xz
ipxe-978996cdae6d38b3febc9c07acf2585dde842722.zip
[usr] Offer user a second chance to enter the shell on boot failure
Diffstat (limited to 'src/core/main.c')
-rw-r--r--src/core/main.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/core/main.c b/src/core/main.c
index 3295feaf..ca62db25 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -14,26 +14,54 @@ Literature dealing with the network protocols:
**************************************************************************/
+#include <stdio.h>
#include <gpxe/init.h>
+#include <gpxe/features.h>
#include <gpxe/shell.h>
#include <gpxe/shell_banner.h>
#include <usr/autoboot.h>
+#define NORMAL "\033[0m"
+#define BOLD "\033[1m"
+#define CYAN "\033[36m"
+
+static struct feature features[0] __table_start ( struct feature, features );
+static struct feature features_end[0] __table_end ( struct feature, features );
+
/**
* Main entry point
*
* @ret rc Return status code
*/
__cdecl int main ( void ) {
+ struct feature *feature;
initialise();
startup();
- if ( shell_banner() )
+ /* Print welcome banner */
+ printf ( NORMAL "\n\n\n" BOLD "gPXE " VERSION
+ NORMAL " -- Open Source Boot Firmware -- "
+ CYAN "http://etherboot.org" NORMAL "\n"
+ "Features:" );
+ for ( feature = features ; feature < features_end ; feature++ )
+ printf ( " %s", feature->name );
+ printf ( "\n" );
+
+ /* Prompt for shell */
+ if ( shell_banner() ) {
+ /* User wants shell; just give them a shell */
shell();
- else
+ } else {
+ /* User doesn't want shell; try booting. If booting
+ * fails, offer a second chance to enter the shell for
+ * diagnostics.
+ */
autoboot();
-
+ if ( shell_banner() )
+ shell();
+ }
+
shutdown();
return 0;