From 78360ec3b067af33d45c2a57ace2fee03d1d2354 Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Sun, 4 Mar 2007 16:14:31 +0000
Subject: use of terminal default background color instead of black call to
 custom_load_color() added in load_conf() update_windows() updated to avoid
 the use of the global 'colr' variable

---
 src/calcurse.c | 109 ++++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 65 insertions(+), 44 deletions(-)

diff --git a/src/calcurse.c b/src/calcurse.c
index cdb78d8..3e59d19 100755
--- a/src/calcurse.c
+++ b/src/calcurse.c
@@ -1,4 +1,4 @@
-/*	$calcurse: calcurse.c,v 1.36 2007/02/25 19:32:30 culot Exp $	*/
+/*	$calcurse: calcurse.c,v 1.37 2007/03/04 16:14:31 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -97,11 +97,11 @@ enum window_number {CALENDAR, APPOINTMENT, TODO};
 
 /* External functions */
 void get_date(void);
-void init_vars(int colr);
+void init_vars();
 void init_notify_bar(void);
 void init_wins(void), reinit_wins(void);
 void add_item(void);
-void load_conf(void);
+void load_conf(int background);
 bool fill_config_var(char *string);
 void update_todo_panel(void);
 void update_app_panel(int yeat, int month, int day);
@@ -123,13 +123,13 @@ void del_item(void);
  */
 int main(int argc, char **argv)
 {
-	int ch;
+	int ch, background, foreground;
 	int non_interactive;
 	bool do_storage = false;
 	bool day_changed = false;
         char *no_color_support = 
-                _("Sorry, colors are not supported by your terminal\n"
-                "(Press [ENTER] to continue)");
+            _("Sorry, colors are not supported by your terminal\n"
+            "(Press [ENTER] to continue)");
 	char *quit_message = _("Do you really want to quit ?");
 	char choices[] = "[y/n] ";
 
@@ -148,7 +148,8 @@ int main(int argc, char **argv)
 	 * The data path is also initialized here.
 	 */
 	non_interactive = parse_args(argc, argv, colr);
-	if (non_interactive) return EXIT_SUCCESS;
+	if (non_interactive) 
+		return EXIT_SUCCESS;
 
 	/* Begin of interactive mode with ncurses interface. */
 	initscr();		/* start the curses mode */
@@ -162,24 +163,32 @@ int main(int argc, char **argv)
         /* Check if terminal supports color. */
 	if (has_colors()) {
                 colorize = true;
+		background = COLOR_BLACK;
+		foreground = COLOR_WHITE;
 		start_color();
 
+#ifdef NCURSES_VERSION
+		if (use_default_colors() != ERR) {
+			background = -1;
+			foreground = -1;
+		}
+#endif /* NCURSES_VERSION */
+
 		/* Color assignment */
-		init_pair(1, COLOR_RED, COLOR_BLACK);
-		init_pair(2, COLOR_GREEN, COLOR_BLACK);
-		init_pair(3, COLOR_BLUE, COLOR_BLACK);
-		init_pair(4, COLOR_CYAN, COLOR_BLACK);
-		init_pair(5, COLOR_YELLOW, COLOR_BLACK);
-		init_pair(6, COLOR_BLACK, COLOR_GREEN);
-		init_pair(7, COLOR_BLACK, COLOR_YELLOW);
-		init_pair(8, COLOR_RED, COLOR_BLUE);
-		init_pair(9, COLOR_WHITE, COLOR_BLACK);
-	} else {
+		init_pair(COLR_RED, COLOR_RED, background);
+		init_pair(COLR_GREEN, COLOR_GREEN, background);
+		init_pair(COLR_YELLOW, COLOR_YELLOW, background);
+		init_pair(COLR_BLUE, COLOR_BLUE, background);
+		init_pair(COLR_MAGENTA, COLOR_MAGENTA, background);
+		init_pair(COLR_CYAN, COLOR_CYAN, background);
+		init_pair(COLR_DEFAULT, foreground, background);
+		init_pair(COLR_HIGH, COLOR_BLACK, COLOR_GREEN);
+		init_pair(COLR_CUSTOM, COLOR_RED, background);
+
+	} else
                 colorize = false;
-		use_default_colors();
-        }
 
-	init_vars(colr);
+	init_vars();
 	init_wins();
 	notify_init_bar(nl_not, nc_not, y_not, x_not);
 	reset_status_page();
@@ -191,8 +200,7 @@ int main(int argc, char **argv)
 	 * the todo list, appointments and events.
 	 */
 	no_data_file = check_data_files();
-	load_conf();
-	custom_init_attr(colr);
+	load_conf(background);
 	nb_tod = load_todo(colr);	
 	load_app();
 	notify_catch_children();
@@ -290,8 +298,8 @@ int main(int argc, char **argv)
 				case 'c':
                                         if (has_colors()) {
                                                 colorize = true;
-                                                colr = color_config(colr); 
-                                                custom_init_attr(colr);
+                                                custom_color_config(
+						    notify_bar()); 
                                         } else {
                                                 colorize = false;
                                                 erase_window_part(swin, 0, 0,
@@ -504,14 +512,16 @@ int main(int argc, char **argv)
 				} else /* next week */
 					sel_day = sel_day + 7;
 			} else {
-				if ((which_pan == APPOINTMENT) & (hilt_app < number_events_inday + number_apoints_inday))
-				{
+				if ((which_pan == APPOINTMENT) && 
+				    (hilt_app < number_events_inday + 
+				    number_apoints_inday)) {
 					hilt_app++;
 					scroll_pad_down(hilt_app, 
 							number_events_inday,
 							nl_app);
 				}
-				if ((which_pan == TODO) & (hilt_tod < nb_tod)) {
+				if ((which_pan == TODO) && 
+				    (hilt_tod < nb_tod)) {
 					++hilt_tod;
 					if (hilt_tod - first_todo_onscreen ==
 					    nl_tod - 4)
@@ -566,7 +576,7 @@ int main(int argc, char **argv)
 /*
  * Variables init 
  */
-void init_vars(int colr)
+void init_vars()
 {
 	// Variables for user configuration
 	confirm_quit = true; 
@@ -584,7 +594,7 @@ void init_vars(int colr)
 	apad->ptrwin = newpad(apad->length, apad->width);
 
 	// Attribute definitions for color and non-color terminals
-	custom_init_attr(colr);
+	custom_init_attr();
 	
 	// Start at the current date
 	sel_year = year;
@@ -615,32 +625,43 @@ void init_notify_bar(void)
  * Update all of the three windows and put a border around the
  * selected window.
  */
-void update_windows(int surrounded_window)
+void 
+update_windows(int surrounded_window)
 {
-	if (surrounded_window == CALENDAR) {	
-		border_color(cwin, colr);
+	switch (surrounded_window) {
+
+	case CALENDAR:
+		border_color(cwin);
 		border_nocolor(awin);
 		border_nocolor(twin);
-	} else if (surrounded_window == APPOINTMENT) {
-		border_color(awin, colr);
+		break;
+
+	case APPOINTMENT:
+		border_color(awin);
 		border_nocolor(cwin);
 		border_nocolor(twin);
-	} else if (surrounded_window == TODO) {
-		border_color(twin, colr);
+		break;
+
+	case TODO:
+		border_color(twin);
 		border_nocolor(awin);
 		border_nocolor(cwin);
-	} else { 
-		/* NOTREACHED */
+		break;
+
+	default:
 		fputs(_("FATAL ERROR in update_windows: no window selected\n"),stderr);
 		exit(EXIT_FAILURE);
+		/* NOTREACHED */
 	}
+
 	update_app_panel(sel_year, sel_month, sel_day);	
 	update_todo_panel();
 	update_cal_panel(cwin, nl_cal, nc_cal, sel_month,
-			 sel_year, sel_day, day, month, year,
-                         week_begins_on_monday);
+	    sel_year, sel_day, day, month, year,
+            week_begins_on_monday);
 	status_bar(surrounded_window, colr, nc_bar, nl_bar);
-	if (notify_bar()) notify_update_bar();
+	if (notify_bar()) 
+		notify_update_bar();
         wmove(swin, 0, 0);
 	doupdate();
 }
@@ -1381,7 +1402,8 @@ void store_day(int year, int month, int day, bool day_changed)
 }
 
 /* Load the user configuration */
-void load_conf(void)
+void 
+load_conf(int background)
 {
 	FILE *data_file;
 	char *mesg_line1 = _("Failed to open config file");
@@ -1428,8 +1450,7 @@ void load_conf(void)
 				fill_config_var(e_conf);
                         var = 0;
 		} else if (var == 7) {
-			colr = atoi(e_conf);
-			if (colr == 0) colorize = false;
+			custom_load_color(e_conf, background);
                         var = 0;
 		} else if (var == 8) {
 			layout = atoi(e_conf);
-- 
cgit v1.2.3-70-g09d2