summary refs log tree commit diff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rw-r--r--bin/.gitignore2
-rw-r--r--bin/Makefile5
-rw-r--r--bin/scheme.c33
3 files changed, 38 insertions, 2 deletions
diff --git a/bin/.gitignore b/bin/.gitignore
index 5ff66354..0c078cbb 100644
--- a/bin/.gitignore
+++ b/bin/.gitignore
@@ -1,4 +1,6 @@
 tags
+scheme.h
+*.o
 atch
 dtch
 glitch
diff --git a/bin/Makefile b/bin/Makefile
index 677b5673..5ccf614a 100644
--- a/bin/Makefile
+++ b/bin/Makefile
@@ -13,11 +13,14 @@ bsd: any $(BSD_BINS)
 linux: any $(LIN_BINS)
 
 .gitignore: Makefile
-	echo tags $(ALL_BINS) scheme.png | tr ' ' '\n' > .gitignore
+	echo tags scheme.h *.o $(ALL_BINS) scheme.png | tr ' ' '\n' > .gitignore
 
 tags: *.c
 	ctags -w *.c
 
+scheme.h: scheme
+	./scheme -c > scheme.h
+
 atch: dtch
 	ln -f dtch atch
 
diff --git a/bin/scheme.c b/bin/scheme.c
index 20c7efbf..4ec5453b 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();