From 978996cdae6d38b3febc9c07acf2585dde842722 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 26 Mar 2008 23:16:20 +0000 Subject: [usr] Offer user a second chance to enter the shell on boot failure --- src/core/main.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'src/core') diff --git a/src/core/main.c b/src/core/main.c index 3295feaf2..ca62db252 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -14,26 +14,54 @@ Literature dealing with the network protocols: **************************************************************************/ +#include #include +#include #include #include #include +#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; -- cgit v1.2.3-55-g7522