SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/ff2txt/commit/dc898f91b9f8627...
Content-Typetext/plain; charset=utf-8