description:	Extend 'make menuconfig' to support an alternate
		color theme or monochrome mode by using
	make menuconfig MENUCONFIG_COLOR=monochrome|mono|alternate|alt
credits:	This is a merger of patches by Han Boetes (alternate
		color theme) and Jan Benedict Glaw (monochrome).
URL:		http://developer.osdl.org/rddunlap/menuconfig/
product_versions: Linux 2.6.0-test9
patch_name:	menuconfig_alt_mono.patch
author:		Randy.Dunlap <rddunlap@osdl.org>
patch_version:	2003-10-29.12:52:17

diffstat:=
 scripts/README.Menuconfig |   10 +++++
 scripts/lxdialog/colors.h |   89 +++++++++++++++++++++++++++++++++++++++++++++-
 scripts/lxdialog/dialog.h |    2 -
 scripts/lxdialog/util.c   |   77 +++++++++++++++++++++++++++++++++++----
 4 files changed, 167 insertions(+), 11 deletions(-)

diff -Naurp ./scripts/lxdialog/util.c~colors ./scripts/lxdialog/util.c
--- ./scripts/lxdialog/util.c~colors	2003-10-25 11:43:40.000000000 -0700
+++ ./scripts/lxdialog/util.c	2003-10-29 12:45:22.000000000 -0800
@@ -21,10 +21,6 @@
 
 #include "dialog.h"
 
-
-/* use colors by default? */
-bool use_colors = 1;
-
 const char *backtitle = NULL;
 
 const char *dialog_result;
@@ -68,10 +64,11 @@ chtype attributes[] =
 
 #include "colors.h"
 
+#define ROW_SIZE	3
 /*
  * Table of color values
  */
-int color_table[][3] =
+int color_table [ATTRIBUTE_COUNT][ROW_SIZE] =
 {
     {SCREEN_FG, SCREEN_BG, SCREEN_HL},
     {SHADOW_FG, SHADOW_BG, SHADOW_HL},
@@ -106,6 +103,43 @@ int color_table[][3] =
 };				/* color_table */
 
 /*
+ * Alternate Table of color values
+ */
+int color_table_alt [ATTRIBUTE_COUNT][ROW_SIZE] =
+{
+    {SCREEN_FG_ALT, SCREEN_BG_ALT, SCREEN_HL_ALT},
+    {SHADOW_FG_ALT, SHADOW_BG_ALT, SHADOW_HL_ALT},
+    {DIALOG_FG_ALT, DIALOG_BG_ALT, DIALOG_HL_ALT},
+    {TITLE_FG_ALT, TITLE_BG_ALT, TITLE_HL_ALT},
+    {BORDER_FG_ALT, BORDER_BG_ALT, BORDER_HL_ALT},
+    {BUTTON_ACTIVE_FG_ALT, BUTTON_ACTIVE_BG_ALT, BUTTON_ACTIVE_HL_ALT},
+    {BUTTON_INACTIVE_FG_ALT, BUTTON_INACTIVE_BG_ALT, BUTTON_INACTIVE_HL_ALT},
+    {BUTTON_KEY_ACTIVE_FG_ALT, BUTTON_KEY_ACTIVE_BG_ALT, BUTTON_KEY_ACTIVE_HL_ALT},
+    {BUTTON_KEY_INACTIVE_FG_ALT, BUTTON_KEY_INACTIVE_BG_ALT, BUTTON_KEY_INACTIVE_HL_ALT},
+    {BUTTON_LABEL_ACTIVE_FG_ALT, BUTTON_LABEL_ACTIVE_BG_ALT, BUTTON_LABEL_ACTIVE_HL_ALT},
+    {BUTTON_LABEL_INACTIVE_FG_ALT, BUTTON_LABEL_INACTIVE_BG_ALT,
+       BUTTON_LABEL_INACTIVE_HL_ALT},
+    {INPUTBOX_FG_ALT, INPUTBOX_BG_ALT, INPUTBOX_HL_ALT},
+    {INPUTBOX_BORDER_FG_ALT, INPUTBOX_BORDER_BG_ALT, INPUTBOX_BORDER_HL_ALT},
+    {SEARCHBOX_FG_ALT, SEARCHBOX_BG_ALT, SEARCHBOX_HL_ALT},
+    {SEARCHBOX_TITLE_FG_ALT, SEARCHBOX_TITLE_BG_ALT, SEARCHBOX_TITLE_HL_ALT},
+    {SEARCHBOX_BORDER_FG_ALT, SEARCHBOX_BORDER_BG_ALT, SEARCHBOX_BORDER_HL_ALT},
+    {POSITION_INDICATOR_FG_ALT, POSITION_INDICATOR_BG_ALT, POSITION_INDICATOR_HL_ALT},
+    {MENUBOX_FG_ALT, MENUBOX_BG_ALT, MENUBOX_HL_ALT},
+    {MENUBOX_BORDER_FG_ALT, MENUBOX_BORDER_BG_ALT, MENUBOX_BORDER_HL_ALT},
+    {ITEM_FG_ALT, ITEM_BG_ALT, ITEM_HL_ALT},
+    {ITEM_SELECTED_FG_ALT, ITEM_SELECTED_BG_ALT, ITEM_SELECTED_HL_ALT},
+    {TAG_FG_ALT, TAG_BG_ALT, TAG_HL_ALT},
+    {TAG_SELECTED_FG_ALT, TAG_SELECTED_BG_ALT, TAG_SELECTED_HL_ALT},
+    {TAG_KEY_FG_ALT, TAG_KEY_BG_ALT, TAG_KEY_HL_ALT},
+    {TAG_KEY_SELECTED_FG_ALT, TAG_KEY_SELECTED_BG_ALT, TAG_KEY_SELECTED_HL_ALT},
+    {CHECK_FG_ALT, CHECK_BG_ALT, CHECK_HL_ALT},
+    {CHECK_SELECTED_FG_ALT, CHECK_SELECTED_BG_ALT, CHECK_SELECTED_HL_ALT},
+    {UARROW_FG_ALT, UARROW_BG_ALT, UARROW_HL_ALT},
+    {DARROW_FG_ALT, DARROW_BG_ALT, DARROW_HL_ALT},
+};				/* color_table_alt */
+
+/*
  * Set window to attribute 'attr'
  */
 void
@@ -144,15 +178,29 @@ void dialog_clear (void)
 void
 init_dialog (void)
 {
+    /* "mono" ==> -1, 0 ==> default, "alternate" ==> 1 */
+    int color_which = 0;
+    char *colormode;
+
     initscr ();			/* Init curses */
     keypad (stdscr, TRUE);
     cbreak ();
     noecho ();
 
+    /* check for MENUCONFIG_COLOR = mono(chrome) | alt(ernate) */
+    colormode = getenv("MENUCONFIG_COLOR");
+    if (colormode) {
+        if (!strcasecmp (colormode, "alt")
+            || !strcasecmp (colormode, "alternate"))
+		color_which = 1;
+	else
+        if (!strcasecmp (colormode, "mono")
+            || !strcasecmp (colormode, "monochrome"))
+                color_which = -1;
+    }
 
-    if (use_colors)	/* Set up colors */
-	color_setup ();
-
+    if (color_which >= 0)
+	color_setup (color_which);
 
     dialog_clear ();
 }
@@ -161,13 +209,14 @@ init_dialog (void)
  * Setup for color display
  */
 void
-color_setup (void)
+color_setup (int which)
 {
     int i;
 
     if (has_colors ()) {	/* Terminal supports color? */
 	start_color ();
 
+    if (which == 0) {
 	/* Initialize color pairs */
 	for (i = 0; i < ATTRIBUTE_COUNT; i++)
 	    init_pair (i + 1, color_table[i][0], color_table[i][1]);
@@ -176,6 +225,16 @@ color_setup (void)
 	for (i = 0; i < ATTRIBUTE_COUNT; i++)
 	    attributes[i] = C_ATTR (color_table[i][2], i + 1);
     }
+    else {	/* alternate color table */
+	/* Initialize color pairs */
+	for (i = 0; i < ATTRIBUTE_COUNT; i++)
+	    init_pair (i + 1, color_table_alt[i][0], color_table_alt[i][1]);
+
+	/* Setup color attributes */
+	for (i = 0; i < ATTRIBUTE_COUNT; i++)
+	    attributes[i] = C_ATTR (color_table_alt[i][2], i + 1);
+    }
+    }
 }
 
 /*
diff -Naurp ./scripts/lxdialog/colors.h~colors ./scripts/lxdialog/colors.h
--- ./scripts/lxdialog/colors.h~colors	2003-10-25 11:42:50.000000000 -0700
+++ ./scripts/lxdialog/colors.h	2003-10-29 11:44:02.000000000 -0800
@@ -24,123 +24,210 @@
  *
  *   *_FG = foreground
  *   *_BG = background
- *   *_HL = highlight?
+ *   *_HL = highlight
  */
 #define SCREEN_FG                    COLOR_CYAN
 #define SCREEN_BG                    COLOR_BLUE
 #define SCREEN_HL                    TRUE
+#define SCREEN_FG_ALT                COLOR_BLACK
+#define SCREEN_BG_ALT                COLOR_BLACK
+#define SCREEN_HL_ALT                TRUE
 
 #define SHADOW_FG                    COLOR_BLACK
 #define SHADOW_BG                    COLOR_BLACK
 #define SHADOW_HL                    TRUE
+#define SHADOW_FG_ALT                COLOR_BLACK
+#define SHADOW_BG_ALT                COLOR_BLACK
+#define SHADOW_HL_ALT                FALSE
 
 #define DIALOG_FG                    COLOR_BLACK
 #define DIALOG_BG                    COLOR_WHITE
 #define DIALOG_HL                    FALSE
+#define DIALOG_FG_ALT                COLOR_WHITE
+#define DIALOG_BG_ALT                COLOR_BLACK
+#define DIALOG_HL_ALT                FALSE
 
 #define TITLE_FG                     COLOR_YELLOW
 #define TITLE_BG                     COLOR_WHITE
 #define TITLE_HL                     TRUE
+#define TITLE_FG_ALT                 COLOR_RED
+#define TITLE_BG_ALT                 COLOR_BLACK
+#define TITLE_HL_ALT                 FALSE
 
 #define BORDER_FG                    COLOR_WHITE
 #define BORDER_BG                    COLOR_WHITE
 #define BORDER_HL                    TRUE
+#define BORDER_FG_ALT                COLOR_BLACK
+#define BORDER_BG_ALT                COLOR_BLACK
+#define BORDER_HL_ALT                TRUE
 
 #define BUTTON_ACTIVE_FG             COLOR_WHITE
 #define BUTTON_ACTIVE_BG             COLOR_BLUE
 #define BUTTON_ACTIVE_HL             TRUE
+#define BUTTON_ACTIVE_FG_ALT         COLOR_YELLOW
+#define BUTTON_ACTIVE_BG_ALT         COLOR_RED
+#define BUTTON_ACTIVE_HL_ALT         FALSE
 
 #define BUTTON_INACTIVE_FG           COLOR_BLACK
 #define BUTTON_INACTIVE_BG           COLOR_WHITE
 #define BUTTON_INACTIVE_HL           FALSE
+#define BUTTON_INACTIVE_FG_ALT       COLOR_YELLOW
+#define BUTTON_INACTIVE_BG_ALT       COLOR_BLACK
+#define BUTTON_INACTIVE_HL_ALT       FALSE
 
 #define BUTTON_KEY_ACTIVE_FG         COLOR_WHITE
 #define BUTTON_KEY_ACTIVE_BG         COLOR_BLUE
 #define BUTTON_KEY_ACTIVE_HL         TRUE
+#define BUTTON_KEY_ACTIVE_FG_ALT     COLOR_YELLOW
+#define BUTTON_KEY_ACTIVE_BG_ALT     COLOR_RED
+#define BUTTON_KEY_ACTIVE_HL_ALT     TRUE
 
 #define BUTTON_KEY_INACTIVE_FG       COLOR_RED
 #define BUTTON_KEY_INACTIVE_BG       COLOR_WHITE
 #define BUTTON_KEY_INACTIVE_HL       FALSE
+#define BUTTON_KEY_INACTIVE_FG_ALT   COLOR_RED
+#define BUTTON_KEY_INACTIVE_BG_ALT   COLOR_BLACK
+#define BUTTON_KEY_INACTIVE_HL_ALT   FALSE
 
 #define BUTTON_LABEL_ACTIVE_FG       COLOR_YELLOW
 #define BUTTON_LABEL_ACTIVE_BG       COLOR_BLUE
 #define BUTTON_LABEL_ACTIVE_HL       TRUE
+#define BUTTON_LABEL_ACTIVE_FG_ALT   COLOR_WHITE
+#define BUTTON_LABEL_ACTIVE_BG_ALT   COLOR_RED
+#define BUTTON_LABEL_ACTIVE_HL_ALT   FALSE
 
 #define BUTTON_LABEL_INACTIVE_FG     COLOR_BLACK
 #define BUTTON_LABEL_INACTIVE_BG     COLOR_WHITE
 #define BUTTON_LABEL_INACTIVE_HL     TRUE
+#define BUTTON_LABEL_INACTIVE_FG_ALT COLOR_BLACK
+#define BUTTON_LABEL_INACTIVE_BG_ALT COLOR_BLACK
+#define BUTTON_LABEL_INACTIVE_HL_ALT TRUE
 
 #define INPUTBOX_FG                  COLOR_BLACK
 #define INPUTBOX_BG                  COLOR_WHITE
 #define INPUTBOX_HL                  FALSE
+#define INPUTBOX_FG_ALT              COLOR_YELLOW
+#define INPUTBOX_BG_ALT              COLOR_BLACK
+#define INPUTBOX_HL_ALT              FALSE
 
 #define INPUTBOX_BORDER_FG           COLOR_BLACK
 #define INPUTBOX_BORDER_BG           COLOR_WHITE
 #define INPUTBOX_BORDER_HL           FALSE
+#define INPUTBOX_BORDER_FG_ALT       COLOR_YELLOW
+#define INPUTBOX_BORDER_BG_ALT       COLOR_BLACK
+#define INPUTBOX_BORDER_HL_ALT       FALSE
 
 #define SEARCHBOX_FG                 COLOR_BLACK
 #define SEARCHBOX_BG                 COLOR_WHITE
 #define SEARCHBOX_HL                 FALSE
+#define SEARCHBOX_FG_ALT             COLOR_YELLOW
+#define SEARCHBOX_BG_ALT             COLOR_BLACK
+#define SEARCHBOX_HL_ALT             FALSE
 
 #define SEARCHBOX_TITLE_FG           COLOR_YELLOW
 #define SEARCHBOX_TITLE_BG           COLOR_WHITE
 #define SEARCHBOX_TITLE_HL           TRUE
+#define SEARCHBOX_TITLE_FG_ALT       COLOR_YELLOW
+#define SEARCHBOX_TITLE_BG_ALT       COLOR_BLACK
+#define SEARCHBOX_TITLE_HL_ALT       TRUE
 
 #define SEARCHBOX_BORDER_FG          COLOR_WHITE
 #define SEARCHBOX_BORDER_BG          COLOR_WHITE
 #define SEARCHBOX_BORDER_HL          TRUE
+#define SEARCHBOX_BORDER_FG_ALT      COLOR_BLACK
+#define SEARCHBOX_BORDER_BG_ALT      COLOR_BLACK
+#define SEARCHBOX_BORDER_HL_ALT      TRUE
 
 #define POSITION_INDICATOR_FG        COLOR_YELLOW
 #define POSITION_INDICATOR_BG        COLOR_WHITE
 #define POSITION_INDICATOR_HL        TRUE
+#define POSITION_INDICATOR_FG_ALT    COLOR_RED
+#define POSITION_INDICATOR_BG_ALT    COLOR_BLACK
+#define POSITION_INDICATOR_HL_ALT    FALSE
 
 #define MENUBOX_FG                   COLOR_BLACK
 #define MENUBOX_BG                   COLOR_WHITE
 #define MENUBOX_HL                   FALSE
+#define MENUBOX_FG_ALT               COLOR_YELLOW
+#define MENUBOX_BG_ALT               COLOR_BLACK
+#define MENUBOX_HL_ALT               FALSE
 
 #define MENUBOX_BORDER_FG            COLOR_WHITE
 #define MENUBOX_BORDER_BG            COLOR_WHITE
 #define MENUBOX_BORDER_HL            TRUE
+#define MENUBOX_BORDER_FG_ALT        COLOR_BLACK
+#define MENUBOX_BORDER_BG_ALT        COLOR_BLACK
+#define MENUBOX_BORDER_HL_ALT        TRUE
 
 #define ITEM_FG                      COLOR_BLACK
 #define ITEM_BG                      COLOR_WHITE
 #define ITEM_HL                      FALSE
+#define ITEM_FG_ALT                  COLOR_WHITE
+#define ITEM_BG_ALT                  COLOR_BLACK
+#define ITEM_HL_ALT                  FALSE
 
 #define ITEM_SELECTED_FG             COLOR_WHITE
 #define ITEM_SELECTED_BG             COLOR_BLUE
 #define ITEM_SELECTED_HL             TRUE
+#define ITEM_SELECTED_FG_ALT         COLOR_WHITE
+#define ITEM_SELECTED_BG_ALT         COLOR_RED
+#define ITEM_SELECTED_HL_ALT         FALSE
 
 #define TAG_FG                       COLOR_YELLOW
 #define TAG_BG                       COLOR_WHITE
 #define TAG_HL                       TRUE
+#define TAG_FG_ALT                   COLOR_RED
+#define TAG_BG_ALT                   COLOR_BLACK
+#define TAG_HL_ALT                   FALSE
 
 #define TAG_SELECTED_FG              COLOR_YELLOW
 #define TAG_SELECTED_BG              COLOR_BLUE
 #define TAG_SELECTED_HL              TRUE
+#define TAG_SELECTED_FG_ALT          COLOR_YELLOW
+#define TAG_SELECTED_BG_ALT          COLOR_RED
+#define TAG_SELECTED_HL_ALT          TRUE
 
 #define TAG_KEY_FG                   COLOR_YELLOW
 #define TAG_KEY_BG                   COLOR_WHITE
 #define TAG_KEY_HL                   TRUE
+#define TAG_KEY_FG_ALT               COLOR_RED
+#define TAG_KEY_BG_ALT               COLOR_BLACK
+#define TAG_KEY_HL_ALT               FALSE
 
 #define TAG_KEY_SELECTED_FG          COLOR_YELLOW
 #define TAG_KEY_SELECTED_BG          COLOR_BLUE
 #define TAG_KEY_SELECTED_HL          TRUE
+#define TAG_KEY_SELECTED_FG_ALT      COLOR_YELLOW
+#define TAG_KEY_SELECTED_BG_ALT      COLOR_RED
+#define TAG_KEY_SELECTED_HL_ALT      TRUE
 
 #define CHECK_FG                     COLOR_BLACK
 #define CHECK_BG                     COLOR_WHITE
 #define CHECK_HL                     FALSE
+#define CHECK_FG_ALT                 COLOR_YELLOW
+#define CHECK_BG_ALT                 COLOR_BLACK
+#define CHECK_HL_ALT                 FALSE
 
 #define CHECK_SELECTED_FG            COLOR_WHITE
 #define CHECK_SELECTED_BG            COLOR_BLUE
 #define CHECK_SELECTED_HL            TRUE
+#define CHECK_SELECTED_FG_ALT        COLOR_YELLOW
+#define CHECK_SELECTED_BG_ALT        COLOR_RED
+#define CHECK_SELECTED_HL_ALT        TRUE
 
 #define UARROW_FG                    COLOR_GREEN
 #define UARROW_BG                    COLOR_WHITE
 #define UARROW_HL                    TRUE
+#define UARROW_FG_ALT                COLOR_RED
+#define UARROW_BG_ALT                COLOR_BLACK
+#define UARROW_HL_ALT                FALSE
 
 #define DARROW_FG                    COLOR_GREEN
 #define DARROW_BG                    COLOR_WHITE
 #define DARROW_HL                    TRUE
+#define DARROW_FG_ALT                COLOR_RED
+#define DARROW_BG_ALT                COLOR_BLACK
+#define DARROW_HL_ALT                FALSE
 
 /* End of default color definitions */
 
diff -Naurp ./scripts/lxdialog/dialog.h~colors ./scripts/lxdialog/dialog.h
--- ./scripts/lxdialog/dialog.h~colors	2003-10-25 11:44:33.000000000 -0700
+++ ./scripts/lxdialog/dialog.h	2003-10-29 11:54:19.000000000 -0800
@@ -142,7 +142,7 @@ void init_dialog (void);
 void end_dialog (void);
 void attr_clear (WINDOW * win, int height, int width, chtype attr);
 void dialog_clear (void);
-void color_setup (void);
+void color_setup (int which);
 void print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x);
 void print_button (WINDOW * win, const char *label, int y, int x, int selected);
 void draw_box (WINDOW * win, int y, int x, int height, int width, chtype box,
diff -Naurp ./scripts/README.Menuconfig~colors ./scripts/README.Menuconfig
--- ./scripts/README.Menuconfig~colors	2003-10-25 11:43:31.000000000 -0700
+++ ./scripts/README.Menuconfig	2003-10-29 12:51:23.000000000 -0800
@@ -184,6 +184,16 @@ is already unrolled.
 Note that this mode can eventually be a little more CPU expensive
 (especially with a larger number of unrolled categories) than the
 default mode.
+
+Also, you can have a black-n-white look by choosing monochrome colors,
+or use an alternate color scheme by specifying "alternate":
+
+make menuconfig MENUCONFIG_COLOR=monochrome
+or
+make menuconfig MENUCONFIG_COLOR=alternate
+
+You can specify "monochrome" as "mono" and "alternate" as "alt".
+
 *********************************************************************
 
 
