summary refs log tree commit diff
path: root/bin/scheme.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-08-20 23:03:54 -0400
committerJune McEnroe <june@causal.agency>2018-08-20 23:03:54 -0400
commit8d2b1669e695a54240a113023ecbe76d35da4f9c (patch)
tree6a3d76c468f8e8c5e5ea27aa0f476d789f0cf35d /bin/scheme.c
parentAdd dependencies on gfx.h (diff)
downloadsrc-8d2b1669e695a54240a113023ecbe76d35da4f9c.tar.gz
src-8d2b1669e695a54240a113023ecbe76d35da4f9c.zip
Generate scheme.h
Diffstat (limited to 'bin/scheme.c')
-rw-r--r--bin/scheme.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/bin/scheme.c b/bin/scheme.c
index db4ff88f..00cb9581 100644
--- a/bin/scheme.c
+++ b/bin/scheme.c
@@ -126,6 +126,36 @@ static void hex(bool ansi) {
 	printHex(scheme.cursor);
 }
 
+static void printC(struct Hsv hsv) {
+	struct Rgb rgb = toRgb(hsv);
+	printf("\t0x%02X%02X%02X,\n", rgb.r, rgb.g, rgb.b);
+}
+static void header(void) {
+	printf(
+		"// This file is generated by scheme -c.\n\n"
+		"#include <stdint.h>\n\n"
+		"const struct {\n"
+		"\tuint32_t darkBlack, darkRed, darkGreen, darkYellow;\n"
+		"\tuint32_t darkBlue, darkMagenta, darkCyan, darkWhite;\n"
+		"\tuint32_t lightBlack, lightRed, lightGreen, lightYellow;\n"
+		"\tuint32_t lightBlue, lightMagenta, lightCyan, lightWhite;\n"
+		"\tuint32_t background, text, bold, selection, cursor;\n"
+		"} SCHEME = {\n"
+	);
+	for (int i = BLACK; i <= WHITE; ++i) {
+		printC(scheme.dark[i]);
+	}
+	for (int i = BLACK; i <= WHITE; ++i) {
+		printC(scheme.light[i]);
+	}
+	printC(scheme.background);
+	printC(scheme.text);
+	printC(scheme.bold);
+	printC(scheme.selection);
+	printC(scheme.cursor);
+	printf("};\n");
+}
+
 static void console(void) {
 	for (int i = BLACK; i <= WHITE; ++i) {
 		struct Rgb rgb = toRgb(scheme.dark[i]);
@@ -235,7 +265,7 @@ int main(int argc, char *argv[]) {
 	bool ansi = true;
 	char out = 'x';
 	int opt;
-	while (0 < (opt = getopt(argc, argv, "aghlmtx"))) {
+	while (0 < (opt = getopt(argc, argv, "acghlmtx"))) {
 		switch (opt) {
 			break; case 'a': ansi = true;
 			break; case 't': ansi = false;
@@ -244,6 +274,7 @@ int main(int argc, char *argv[]) {
 		}
 	}
 	switch (out) {
+		break; case 'c': header();
 		break; case 'g': png((struct Hsv *)&scheme, (ansi ? 16 : 21));
 		break; case 'h': hsv(ansi);
 		break; case 'l': console();