From 7ca3bc06beb54aa08c58f5b08579bfa301c89932 Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Sat, 10 Mar 2007 15:58:20 +0000
Subject: custom_color_theme_name() created to return new version of
 user-defined color theme custom_load_color() updated to load new version of
 user-defined color theme

---
 src/custom.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 102 insertions(+), 22 deletions(-)

(limited to 'src')

diff --git a/src/custom.c b/src/custom.c
index 35b972c..3d0f7e1 100755
--- a/src/custom.c
+++ b/src/custom.c
@@ -1,4 +1,4 @@
-/*	$calcurse: custom.c,v 1.4 2007/03/04 16:12:18 culot Exp $	*/
+/*	$calcurse: custom.c,v 1.5 2007/03/10 15:58:20 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -82,7 +82,8 @@ void custom_remove_attr(WINDOW *win, int attr_num)
 }
 
 /* Draws the configuration bar */
-void config_bar()
+void 
+config_bar(void)
 {
 	int smlspc, spc;
 
@@ -109,7 +110,8 @@ void config_bar()
 }
 
 /* Choose the layout */
-int layout_config(int layout, int colr)
+int 
+layout_config(int layout)
 {
 	int ch, old_layout;
 	char *layout_mesg = _("Pick the desired layout on next screen [press ENTER]");
@@ -325,24 +327,57 @@ custom_color_config(int notify_bar)
 void
 custom_load_color(char *color, int background)
 {
-	int len, color_num;
+#define AWAITED_COLORS	2
+
+	int i, len, color_num;
+	char c[AWAITED_COLORS][MAX_LENGTH];
+	int colr[AWAITED_COLORS];
+	const char *wrong_color_number =
+	    _("FATAL ERROR in custom_load_color: wrong color number.\n");
+	const char *wrong_color_name =
+	    _("FATAL ERROR in custom_load_color: wrong color name.\n");
+	const char *wrong_variable_format =
+	    _("FATAL ERROR in custom_load_color: " 
+	    "wrong configuration variable format.\n");
 
 	len = strlen(color);
 
 	if (len > 1) { 
 		/* New version configuration */
-		if (!strncmp(color, "red", 3))
-			init_pair(COLR_CUSTOM, COLR_RED, background);
-		else if (!strncmp(color, "green", 5))
-			init_pair(COLR_CUSTOM, COLR_GREEN, background);
-		else if (!strncmp(color, "yellow", 6))
-			init_pair(COLR_CUSTOM, COLR_YELLOW, background);
-		else if (!strncmp(color, "blue", 4))
-			init_pair(COLR_CUSTOM, COLR_BLUE, background);
-		else if (!strncmp(color, "magenta", 7))
-			init_pair(COLR_CUSTOM, COLR_MAGENTA, background);
-		else if (!strncmp(color, "cyan", 4))
-			init_pair(COLR_CUSTOM, COLR_CYAN, background);
+		if (sscanf(color, "%s on %s", c[0], c[1]) != AWAITED_COLORS) {
+			fputs(_("FATAL ERROR in custom_load_color: "
+			    "missing colors in config file.\n"), stderr);
+			exit(EXIT_FAILURE);
+			/* NOTREACHED */
+		};
+
+		for (i = 0; i < AWAITED_COLORS; i++) {
+			if (!strncmp(c[i], "black", 5))
+				colr[i] = COLOR_BLACK;
+			else if (!strncmp(c[i], "red", 3))
+				colr[i] = COLOR_RED;
+			else if (!strncmp(c[i], "green", 5))
+				colr[i] = COLOR_GREEN;
+			else if (!strncmp(c[i], "yellow", 6))
+				colr[i] = COLOR_YELLOW;
+			else if (!strncmp(c[i], "blue", 4))
+				colr[i] = COLOR_BLUE;
+			else if (!strncmp(c[i], "magenta", 7))
+				colr[i] = COLOR_MAGENTA;
+			else if (!strncmp(c[i], "cyan", 4))
+				colr[i] = COLOR_CYAN;
+			else if (!strncmp(c[i], "white", 5))
+				colr[i] = COLOR_WHITE;
+			else if (!strncmp(c[i], "default", 7))
+				colr[i] = background;
+			else {
+				fputs(wrong_color_name, stderr);
+				exit(EXIT_FAILURE);
+				/* NOTREACHED */
+			}
+		}
+		
+		init_pair(COLR_CUSTOM, colr[0], colr[1]);
 
 	} else if (len > 0 && len < 2) { 
 		/* Old version configuration */
@@ -377,16 +412,61 @@ custom_load_color(char *color, int background)
 			init_pair(COLR_CUSTOM, COLOR_RED, COLR_BLUE);
 			break;
 		default:
-			/* NOTREACHED */
-			fputs(_("FATAL ERROR in custom_load_color: "
-			    "wrong color number.\n"), stderr);
+			fputs(wrong_color_number, stderr);
 			exit(EXIT_FAILURE);
+			/* NOTREACHED */
 		}
 
 	} else {
-		/* NOTREACHED */
-		fputs(_("FATAL ERROR in custom_load_color: "
-			"wrong configuration variable format.\n"), stderr);
+		fputs(wrong_variable_format, stderr);
 		exit(EXIT_FAILURE);
+		/* NOTREACHED */
 	}
 }
+
+/* 
+ * Return a string defining the color theme in the form:
+ *       foreground color 'on' background color
+ * in order to dump this data in the configuration file.
+ * Color numbers follow the ncurses library definitions. 
+ */
+void
+custom_color_theme_name(char *theme_name)
+{
+#define MAXCOLORS	8
+#define NBCOLORS	2
+#define DEFAULTCOLOR	255
+
+	int i; 
+	short color[NBCOLORS];
+	char *color_name[NBCOLORS];
+	char *default_color = "default";
+	char *name[MAXCOLORS] = {
+	    "black", 
+	    "red", 
+	    "green", 
+	    "yellow",
+	    "blue",
+	    "magenta",
+	    "cyan",
+	    "white"};	
+	const char *error_txt =
+	    _("FATAL ERROR in custom_color_theme_name: unknown color\n");
+
+	pair_content(COLR_CUSTOM, &color[0], &color[1]);
+
+	for (i = 0; i < NBCOLORS; i++) {
+		if (color[i] == DEFAULTCOLOR)
+			color_name[i] = default_color;
+		else if (color[i] >= 0 && color[i] <= MAXCOLORS)
+			color_name[i] = name[color[i]];
+		else {
+			fputs(error_txt, stderr);
+			exit(EXIT_FAILURE);
+			/* NOTREACHED */
+		}
+	}
+
+	snprintf(theme_name, MAX_LENGTH, "%s on %s", color_name[0],
+	    color_name[1]);
+}
-- 
cgit v1.2.3-70-g09d2