aboutsummaryrefslogtreecommitdiffstats
path: root/gpxe/src/core/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpxe/src/core/main.c')
-rw-r--r--gpxe/src/core/main.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/gpxe/src/core/main.c b/gpxe/src/core/main.c
index 3295feaf..ca62db25 100644
--- a/gpxe/src/core/main.c
+++ b/gpxe/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;