iAdded ff2braille - ff2txt - farbfeld image to plain text visualization Err bitreich.org 70
hgit clone git://bitreich.org/ff2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ff2txt URL:git://bitreich.org/ff2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ff2txt bitreich.org 70
1Log /scm/ff2txt/log.gph bitreich.org 70
1Files /scm/ff2txt/files.gph bitreich.org 70
1Refs /scm/ff2txt/refs.gph bitreich.org 70
1Tags /scm/ff2txt/tag bitreich.org 70
1README /scm/ff2txt/file/README.gph bitreich.org 70
i--- Err bitreich.org 70
1commit dc898f91b9f862707348f36a08628a9b08f3525b /scm/ff2txt/commit/dc898f91b9f862707348f36a08628a9b08f3525b.gph bitreich.org 70
hAuthor: Josuah Demangeon <mail@josuah.net> URL:mailto:mail@josuah.net bitreich.org 70
iDate: Mon, 22 Jan 2018 05:41:32 +0100 Err bitreich.org 70
i Err bitreich.org 70
iAdded ff2braille Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i A .gitignore | 3 +++ Err bitreich.org 70
i A Makefile | 8 ++++++++ Err bitreich.org 70
i A ff2braille.c | 111 ++++++++++++++++++++++++++++++ Err bitreich.org 70
i Err bitreich.org 70
i3 files changed, 122 insertions(+), 0 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/.gitignore b/.gitignore /scm/ff2txt/file/.gitignore.gph bitreich.org 70
i@@ -0,0 +1,3 @@ Err bitreich.org 70
i+*.o Err bitreich.org 70
i+*.core Err bitreich.org 70
i+ff2braille Err bitreich.org 70
1diff --git a/Makefile b/Makefile /scm/ff2txt/file/Makefile.gph bitreich.org 70
i@@ -0,0 +1,8 @@ Err bitreich.org 70
i+CFLAGS = -std=c89 -pedantic -Wall -Wextra -Werror Err bitreich.org 70
i+all: ff2braille Err bitreich.org 70
i+ Err bitreich.org 70
i+ff2braille: ff2braille.o Err bitreich.org 70
i+ cc -o $@ ff2braille.o $(LDFLAGS) Err bitreich.org 70
i+ Err bitreich.org 70
i+clean: Err bitreich.org 70
i+ rm -f *.o ff2braille Err bitreich.org 70
1diff --git a/ff2braille.c b/ff2braille.c /scm/ff2txt/file/ff2braille.c.gph bitreich.org 70
i@@ -0,0 +1,111 @@ Err bitreich.org 70
i+#include <arpa/inet.h> Err bitreich.org 70
i+ Err bitreich.org 70
i+#include <stdio.h> Err bitreich.org 70
i+#include <string.h> Err bitreich.org 70
i+#include <stdlib.h> Err bitreich.org 70
i+#include <stdint.h> Err bitreich.org 70
i+ Err bitreich.org 70
i+#include "util.h" Err bitreich.org 70
i+ Err bitreich.org 70
i+#define MAX_WIDTH (1 << 12) Err bitreich.org 70
i+#define BRAILLE_START 10240 Err bitreich.org 70
i+#define COLORS 4 Err bitreich.org 70
i+ Err bitreich.org 70
i+#define LEN(X) (sizeof(X) / sizeof(*X)) Err bitreich.org 70
i+ Err bitreich.org 70
i+struct col { Err bitreich.org 70
i+ uint16_t red; Err bitreich.org 70
i+ uint16_t green; Err bitreich.org 70
i+ uint16_t blue; Err bitreich.org 70
i+ uint16_t alpha; Err bitreich.org 70
i+}; Err bitreich.org 70
i+ Err bitreich.org 70
i+void Err bitreich.org 70
i+err(char *msg) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ perror(msg); Err bitreich.org 70
i+ exit(1); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+void Err bitreich.org 70
i+read_header(uint32_t *width, uint32_t *h) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ uint32_t header[4]; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (fread(header, sizeof(*header), LEN(header), stdin) != LEN(header)) Err bitreich.org 70
i+ err("fread"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (memcmp("farbfeld", header, sizeof("farbfeld") - 1)) Err bitreich.org 70
i+ err("invalid magic value\n"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ *width = ntohl(header[2]); Err bitreich.org 70
i+ *h = ntohl(header[3]); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+void Err bitreich.org 70
i+print_utf8_3byte(long rune) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ printf("%c%c%c", Err bitreich.org 70
i+ (char)(0xe0 | (0x0f & (rune >> 12))), /* 1110xxxx */ Err bitreich.org 70
i+ (char)(0x80 | (0x3f & (rune >> 6))), /* 10xxxxxx */ Err bitreich.org 70
i+ (char)(0x80 | (0x3f & (rune)))); /* 10xxxxxx */ Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+int Err bitreich.org 70
i+is_on(struct col *rows[4], uint32_t width, uint32_t height, uint32_t w, Err bitreich.org 70
i+ uint32_t h) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ uint16_t sum; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (w >= width || h >= height) Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* divide first to avoid overflow */ Err bitreich.org 70
i+ sum = rows[h][w].red / 4; Err bitreich.org 70
i+ sum += rows[h][w].green / 4; Err bitreich.org 70
i+ sum += rows[h][w].blue / 4; Err bitreich.org 70
i+ sum += rows[h][w].alpha / 4; Err bitreich.org 70
i+ return sum >= UINT16_MAX / 2; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+void Err bitreich.org 70
i+print_4_rows(struct col *rows[4], uint32_t width, uint32_t height) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ uint32_t w; Err bitreich.org 70
i+ Err bitreich.org 70
i+ for (w = 0; w < width; w += 2) Err bitreich.org 70
i+ print_utf8_3byte(BRAILLE_START + Err bitreich.org 70
i+ 1 * is_on(rows, width, height, w + 0, 0) + Err bitreich.org 70
i+ 8 * is_on(rows, width, height, w + 1, 0) + Err bitreich.org 70
i+ 2 * is_on(rows, width, height, w + 0, 1) + Err bitreich.org 70
i+ 16 * is_on(rows, width, height, w + 1, 1) + Err bitreich.org 70
i+ 4 * is_on(rows, width, height, w + 0, 2) + Err bitreich.org 70
i+ 32 * is_on(rows, width, height, w + 1, 2) + Err bitreich.org 70
i+ 64 * is_on(rows, width, height, w + 0, 3) + Err bitreich.org 70
i+ 128 * is_on(rows, width, height, w + 1, 3)); Err bitreich.org 70
i+ putchar('\n'); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+int Err bitreich.org 70
i+main(void) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ struct col buf[MAX_WIDTH * 4], *rows[4]; Err bitreich.org 70
i+ uint32_t width, height, r, i; Err bitreich.org 70
i+ Err bitreich.org 70
i+ read_header(&width, &height); Err bitreich.org 70
i+ if (width == 0 || height == 0) Err bitreich.org 70
i+ err("empty image"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ for (i = 0; i < 4; i++) Err bitreich.org 70
i+ rows[i] = buf + width * i; Err bitreich.org 70
i+ Err bitreich.org 70
i+ for (; height > 0; height -= 4) { Err bitreich.org 70
i+ r = fread(buf, sizeof(*buf), width * 4, stdin); Err bitreich.org 70
i+ if (r % width != 0) Err bitreich.org 70
i+ err("invalid line width"); Err bitreich.org 70
i+ print_4_rows(rows, width, r / width); Err bitreich.org 70
i+ } Err bitreich.org 70
i+ if (ferror(stdin)) Err bitreich.org 70
i+ err("fread stdin"); Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+} Err bitreich.org 70
.
Response:
text/plain