From f8422085ff988d6c9cbf4cf93c497994d176ee89 Mon Sep 17 00:00:00 2001
From: Etienne Brateau <etienne.brateau@gmail.com>
Date: Sun, 27 Oct 2019 22:57:39 +0100
Subject: [PATCH] Move colors into a separate files

---
 Makefile                 |   3 +-
 include/graphics/color.h |   9 ++
 src/graphics/color.c     | 211 +++++++++++++++++++++++++++++++++++++++
 src/log.c                | 208 +-------------------------------------
 4 files changed, 223 insertions(+), 208 deletions(-)
 create mode 100644 include/graphics/color.h
 create mode 100644 src/graphics/color.c

diff --git a/Makefile b/Makefile
index 3421040..a619138 100644
--- a/Makefile
+++ b/Makefile
@@ -71,7 +71,8 @@ FONTS =
 GRAPHICSOBJ = $(TARGET_DIR)/graphics/newci.o \
 			$(TARGET_DIR)/graphics/newkbd.o \
 			$(TARGET_DIR)/graphics/newcrt.o \
-			$(TARGET_DIR)/graphics/mylib.o
+			$(TARGET_DIR)/graphics/mylib.o \
+			$(TARGET_DIR)/graphics/color.o \
 
 UTILSOBJ = $(TARGET_DIR)/utils/sysdevs.o \
 		$(TARGET_DIR)/utils/misc.o \
diff --git a/include/graphics/color.h b/include/graphics/color.h
new file mode 100644
index 0000000..866a17f
--- /dev/null
+++ b/include/graphics/color.h
@@ -0,0 +1,9 @@
+#ifndef COLOR_H
+#define COLOR_H
+
+void getcolor(char *name, short *value, short default_color);
+void initcolors();
+short reducecolor8(short color);
+long getcolorname(char *w);
+
+#endif
diff --git a/src/graphics/color.c b/src/graphics/color.c
new file mode 100644
index 0000000..4aeee1b
--- /dev/null
+++ b/src/graphics/color.c
@@ -0,0 +1,211 @@
+#include "graphics/color.h"
+#include <utils/p2c.h>
+#include <utils/strings.h>
+#include <utils/strlist.h>
+#include "logstuff.h"
+#include "utils.h"
+#include "logglobals.h"
+
+void getcolor(char *name_, short *val, short default_color)
+{
+	char name[256];
+	strlist_t *cp;
+	char STR2[256];
+	char STR3[256];
+
+	strcpy(name, name_);
+	strupper(name, strcpy(STR2, strltrim(strrtrim(strcpy(STR3, name)))));
+	cp = strlist_find(colorbase, name);
+	if (cp != NULL)
+		*val = (long)cp->value;
+	else
+		*val = reducecolor8(default_color);
+}
+
+void initcolors()
+{
+	getcolor("BACKGR", &gg.color.backgr, log_gray);   /* Color of background */
+	getcolor("CURSOR", &gg.color.cursor, log_white);   /* Color of cursors */
+	recolor_log_cursors(gg.color.cursor, false);
+	getcolor("GATE", &gg.color.gate, log_cyan);   /* Color of gate in circuit */
+	getcolor("DIMGATE", &gg.color.dimgate, log_dcyan);
+	/* Color of dimmed gate */
+	getcolor("KINDGATE", &gg.color.kindgate, log_green);
+	/* Color of gate in menu area */
+	getcolor("CATGATE", &gg.color.catgate, log_cyan);
+	/* Color of gate in catalog */
+	getcolor("GATEPIN", &gg.color.gatepin, log_red);
+	/* Color of pins on gates */
+	getcolor("PINNUM", &gg.color.pinnum, log_yellow);
+	/* Color of pin numbers on gates */
+	getcolor("WIRE", gg.color.wire, log_green);
+	getcolor("VLSIGREEN", &gg.color.wire[log_wcol_green - log_wcol_normal],
+			log_green);
+	getcolor("VLSIYELLOW", &gg.color.wire[log_wcol_yellow - log_wcol_normal],
+			log_yellow);
+	getcolor("VLSIRED", &gg.color.wire[log_wcol_red - log_wcol_normal], log_red);
+	getcolor("VLSIBLUE", &gg.color.wire[log_wcol_blue - log_wcol_normal],
+			log_cyan);
+	getcolor("XWIRE", &gg.color.xwire, log_xgreen);
+	/* Color of wires while moving */
+	getcolor("SOLDER", &gg.color.solder, log_green);
+	/* Color of solder point in circuit */
+	getcolor("CONFLICT", &gg.color.conflict, log_cred);
+	/* Color of wire during node conflict */
+	getcolor("MENUWORD", &gg.color.menuword, log_green);
+	/* Color of words in menu area */
+	getcolor("SELWORD", &gg.color.selword, log_yellow);
+	/* Color of highlighted words */
+	getcolor("MESSAGE", &gg.color.message, log_yellow);
+	/* Color of messages */
+	getcolor("BASELINE", &gg.color.baseline, log_cyan);
+	/* Color of baseline (default) */
+	getcolor("PAGE1", &gg.color.page1, log_green);   /* Color of word "PAGE" */
+	getcolor("PAGE2", &gg.color.page2, log_yellow);   /* Color of page number */
+	getcolor("PAGE3", &gg.color.page3, log_green);   /* Color of word "OF" */
+	getcolor("PAGE4", &gg.color.page4, log_yellow);
+	/* Color of number of pages */
+	getcolor("SELECT", &gg.color.select, log_white);
+	/* Color of selected areas */
+	getcolor("SCROLL", &gg.color.scroll, log_white);
+	/* Color of scroll feedback */
+	getcolor("SIGNAL", &gg.color.signal, log_pink);
+	/* Color of TO/FROM node name */
+	getcolor("LABELTEXT", &gg.color.labeltext, log_dyellow);
+	/* Color of text labels */
+	getcolor("DASHBOX", &gg.color.dashbox, log_dyellow);
+	/* Color of dashed boxes */
+	getcolor("MARKER", &gg.color.marker, log_pink);
+	/* Color of printing markers */
+	getcolor("CHART", &gg.color.chart, log_yellow);
+	/* Color of node history trace */
+	getcolor("DIVISION", &gg.color.division, log_white);
+	/* Color of scope divisions */
+	getcolor("POPUPBOX", &gg.color.popupbox, log_white);
+	/* Color of pop-up menu outline */
+	getcolor("POPUPWORD", &gg.color.popupword, log_green);
+	/* Color of text in pop-up menus */
+	getcolor("POPUPSEL", &gg.color.popupsel, log_pink);
+	/* Color of selection in pop-up menus */
+	getcolor("REDWORD", &gg.color.redword, log_pink);
+	/* Color of special menu items */
+	getcolor("BLUEWORD", &gg.color.blueword, log_cyan);
+	/* Color of experimental menu items */
+	getcolor("VLSICUT", &gg.color.vlsicut, log_white);
+	/* Color of VLSI contact cuts */
+	getcolor("GATEGREEN", &gategreen, log_green);
+	getcolor("GATEYELLOW", &gateyellow, log_yellow);
+	getcolor("GATERED", &gatered, log_red);
+	getcolor("GATEWHITE", &gatewhite, log_white);
+	getcolor("GATEBLACK", &gateblack, log_black);
+	getcolor("GATEORANGE", &gateorange, log_orange);
+	getcolor("DEFINEBOX", &defineboxcolor, log_cyan);
+	/* Color of DEFINE command's box */
+	getcolor("DEFINEBACK", &definebackcolor, log_black);
+	/* Color of background of DEFINE box */
+	getcolor("DEFINETEXT", &definetextcolor, log_green);
+	/* Color of text in DEFINE box */
+	getcolor("CATALOGBOX", &catboxcolor, log_dyellow);
+	/* Color of Catalog grouping box */
+	calltools(act_color);
+	stamp(&gg.colorstamp);
+}
+
+
+short reducecolor8(short c)
+{
+	short Result;
+
+	if (!eightcolors)
+		return c;
+
+	switch (c)
+	{
+
+		case log_mred:
+			Result = log_red;
+			break;
+
+		case log_orange:
+			Result = log_red;
+			break;
+
+		case log_black:
+			Result = log_black8;
+			break;
+
+		case log_pink:
+			Result = log_red;
+			break;
+
+		case log_dyellow:
+			Result = log_yellow;
+			break;
+
+		case log_xgreen:
+			Result = log_green;
+			break;
+
+		case log_dcyan:
+			Result = log_black8;
+			break;
+
+		case log_dred:
+			Result = log_black8;
+			break;
+
+		case log_lgray:
+			Result = log_white;
+			break;
+
+		case log_cred:
+			Result = log_cred8;
+			break;
+
+		default:
+			Result = c;
+			break;
+	}
+	return Result;
+}
+
+typedef char cnamearray[16][8];
+
+const cnamearray cnames =
+{
+	"GRAY", "RED", "GREEN", "YELLOW", "MRED", "ORANGE", "CYAN", "WHITE",
+	"BLACK", "PINK", "DYELLOW", "XGREEN", "DCYAN", "DRED", "LGRAY", "CRED"
+};
+
+
+long getcolorname(char *w_)
+{
+	long Result;
+	char w[256];
+	short i;
+	char STR1[256];
+	char STR2[256];
+
+	strcpy(w, w_);
+	strcpy(STR1, strltrim(strrtrim(strupper(STR2, w))));
+	strcpy(w, STR1);
+	i = 15;
+	while (i >= 0 && strcmp(cnames[i], w))
+		i--;
+	if (i >= 0)
+		return i;
+	TRY(try29);
+	i = getint(w, -1L);
+	if ((unsigned)i > 15)
+		Result = -1;
+	else
+		Result = i;
+	RECOVER(try29);
+	if (P_escapecode == -20)
+		_Escape(P_escapecode);
+	else
+		return -1;
+	ENDTRY(try29);
+	return Result;
+}
+
diff --git a/src/log.c b/src/log.c
index a68110b..012fd2b 100644
--- a/src/log.c
+++ b/src/log.c
@@ -59,6 +59,7 @@
 #include <utils/strings.h>
 #include <utils/newasm.h>
 #include <graphics/newcrt.h>
+#include <graphics/color.h>
 #include <utils/logger.h>
 
 #include "settings.h"
@@ -7373,8 +7374,6 @@ static void findboxmarker(log_krec *k, short num, short *x1, short *y1, short *x
 }
 
 
-static void initcolors ();
-
 /* Local variables for doshellescape: */
 struct LOC_doshellescape {
 	long oldc;
@@ -10105,65 +10104,6 @@ static void popupmenu(short num)
 #undef cols
 
 
-static short reducecolor8(short c)
-{
-	short Result;
-
-	if (!eightcolors)
-		return c;
-
-	switch (c)
-	{
-
-		case log_mred:
-			Result = log_red;
-			break;
-
-		case log_orange:
-			Result = log_red;
-			break;
-
-		case log_black:
-			Result = log_black8;
-			break;
-
-		case log_pink:
-			Result = log_red;
-			break;
-
-		case log_dyellow:
-			Result = log_yellow;
-			break;
-
-		case log_xgreen:
-			Result = log_green;
-			break;
-
-		case log_dcyan:
-			Result = log_black8;
-			break;
-
-		case log_dred:
-			Result = log_black8;
-			break;
-
-		case log_lgray:
-			Result = log_white;
-			break;
-
-		case log_cred:
-			Result = log_cred8;
-			break;
-
-		default:
-			Result = c;
-			break;
-	}
-	return Result;
-}
-
-
-
 static void setcmap(short n, short r, short g, short b)
 {
 	n = reducecolor8(n);
@@ -10174,112 +10114,6 @@ static void setcmap(short n, short r, short g, short b)
 }
 
 
-static void getcolor(char *name_, short *val, short default_color)
-{
-	char name[256];
-	strlist_t *cp;
-	char STR2[256];
-	char STR3[256];
-
-	strcpy(name, name_);
-	strupper(name, strcpy(STR2, strltrim(strrtrim(strcpy(STR3, name)))));
-	cp = strlist_find(colorbase, name);
-	if (cp != NULL)
-		*val = (long)cp->value;
-	else
-		*val = reducecolor8(default_color);
-}
-
-static void initcolors()
-{
-	getcolor("BACKGR", &gg.color.backgr, log_gray);   /* Color of background */
-	getcolor("CURSOR", &gg.color.cursor, log_white);   /* Color of cursors */
-	recolor_log_cursors(gg.color.cursor, false);
-	getcolor("GATE", &gg.color.gate, log_cyan);   /* Color of gate in circuit */
-	getcolor("DIMGATE", &gg.color.dimgate, log_dcyan);
-	/* Color of dimmed gate */
-	getcolor("KINDGATE", &gg.color.kindgate, log_green);
-	/* Color of gate in menu area */
-	getcolor("CATGATE", &gg.color.catgate, log_cyan);
-	/* Color of gate in catalog */
-	getcolor("GATEPIN", &gg.color.gatepin, log_red);
-	/* Color of pins on gates */
-	getcolor("PINNUM", &gg.color.pinnum, log_yellow);
-	/* Color of pin numbers on gates */
-	getcolor("WIRE", gg.color.wire, log_green);
-	getcolor("VLSIGREEN", &gg.color.wire[log_wcol_green - log_wcol_normal],
-			log_green);
-	getcolor("VLSIYELLOW", &gg.color.wire[log_wcol_yellow - log_wcol_normal],
-			log_yellow);
-	getcolor("VLSIRED", &gg.color.wire[log_wcol_red - log_wcol_normal], log_red);
-	getcolor("VLSIBLUE", &gg.color.wire[log_wcol_blue - log_wcol_normal],
-			log_cyan);
-	getcolor("XWIRE", &gg.color.xwire, log_xgreen);
-	/* Color of wires while moving */
-	getcolor("SOLDER", &gg.color.solder, log_green);
-	/* Color of solder point in circuit */
-	getcolor("CONFLICT", &gg.color.conflict, log_cred);
-	/* Color of wire during node conflict */
-	getcolor("MENUWORD", &gg.color.menuword, log_green);
-	/* Color of words in menu area */
-	getcolor("SELWORD", &gg.color.selword, log_yellow);
-	/* Color of highlighted words */
-	getcolor("MESSAGE", &gg.color.message, log_yellow);
-	/* Color of messages */
-	getcolor("BASELINE", &gg.color.baseline, log_cyan);
-	/* Color of baseline (default) */
-	getcolor("PAGE1", &gg.color.page1, log_green);   /* Color of word "PAGE" */
-	getcolor("PAGE2", &gg.color.page2, log_yellow);   /* Color of page number */
-	getcolor("PAGE3", &gg.color.page3, log_green);   /* Color of word "OF" */
-	getcolor("PAGE4", &gg.color.page4, log_yellow);
-	/* Color of number of pages */
-	getcolor("SELECT", &gg.color.select, log_white);
-	/* Color of selected areas */
-	getcolor("SCROLL", &gg.color.scroll, log_white);
-	/* Color of scroll feedback */
-	getcolor("SIGNAL", &gg.color.signal, log_pink);
-	/* Color of TO/FROM node name */
-	getcolor("LABELTEXT", &gg.color.labeltext, log_dyellow);
-	/* Color of text labels */
-	getcolor("DASHBOX", &gg.color.dashbox, log_dyellow);
-	/* Color of dashed boxes */
-	getcolor("MARKER", &gg.color.marker, log_pink);
-	/* Color of printing markers */
-	getcolor("CHART", &gg.color.chart, log_yellow);
-	/* Color of node history trace */
-	getcolor("DIVISION", &gg.color.division, log_white);
-	/* Color of scope divisions */
-	getcolor("POPUPBOX", &gg.color.popupbox, log_white);
-	/* Color of pop-up menu outline */
-	getcolor("POPUPWORD", &gg.color.popupword, log_green);
-	/* Color of text in pop-up menus */
-	getcolor("POPUPSEL", &gg.color.popupsel, log_pink);
-	/* Color of selection in pop-up menus */
-	getcolor("REDWORD", &gg.color.redword, log_pink);
-	/* Color of special menu items */
-	getcolor("BLUEWORD", &gg.color.blueword, log_cyan);
-	/* Color of experimental menu items */
-	getcolor("VLSICUT", &gg.color.vlsicut, log_white);
-	/* Color of VLSI contact cuts */
-	getcolor("GATEGREEN", &gategreen, log_green);
-	getcolor("GATEYELLOW", &gateyellow, log_yellow);
-	getcolor("GATERED", &gatered, log_red);
-	getcolor("GATEWHITE", &gatewhite, log_white);
-	getcolor("GATEBLACK", &gateblack, log_black);
-	getcolor("GATEORANGE", &gateorange, log_orange);
-	getcolor("DEFINEBOX", &defineboxcolor, log_cyan);
-	/* Color of DEFINE command's box */
-	getcolor("DEFINEBACK", &definebackcolor, log_black);
-	/* Color of background of DEFINE box */
-	getcolor("DEFINETEXT", &definetextcolor, log_green);
-	/* Color of text in DEFINE box */
-	getcolor("CATALOGBOX", &catboxcolor, log_dyellow);
-	/* Color of Catalog grouping box */
-	calltools(act_color);
-	stamp(&gg.colorstamp);
-}
-
-
 static void echomacro(char key)
 {
 	macrorec *mp;
@@ -10401,46 +10235,6 @@ static void definemenu(short num, short part, char *name, char *cmd, short bool_
 	}
 }
 
-typedef char cnamearray[16][8];
-
-const cnamearray cnames =
-{
-	"GRAY", "RED", "GREEN", "YELLOW", "MRED", "ORANGE", "CYAN", "WHITE",
-	"BLACK", "PINK", "DYELLOW", "XGREEN", "DCYAN", "DRED", "LGRAY", "CRED"
-};
-
-
-static long getcolorname(char *w_)
-{
-	long Result;
-	char w[256];
-	short i;
-	char STR1[256];
-	char STR2[256];
-
-	strcpy(w, w_);
-	strcpy(STR1, strltrim(strrtrim(strupper(STR2, w))));
-	strcpy(w, STR1);
-	i = 15;
-	while (i >= 0 && strcmp(cnames[i], w))
-		i--;
-	if (i >= 0)
-		return i;
-	TRY(try29);
-	i = getint(w, -1L);
-	if ((unsigned)i > 15)
-		Result = -1;
-	else
-		Result = i;
-	RECOVER(try29);
-	if (P_escapecode == -20)
-		_Escape(P_escapecode);
-	else
-		return -1;
-	ENDTRY(try29);
-	return Result;
-}
-
 void docnffunction()
 {
 	char arg[256];
-- 
GitLab