SMOLNET PORTAL home about changes
iall common routines to a same util.c - 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 a1eea6f23b8947751165e1909fd387803c7a803e	/scm/ff2txt/commit/a1eea6f23b8947751165e1909fd387803c7a803e.gph	bitreich.org	70
1parent 2f2583b40975087c6463403508706bcc5138e833	/scm/ff2txt/commit/2f2583b40975087c6463403508706bcc5138e833.gph	bitreich.org	70
hAuthor: Josuah Demangeon <mail@josuah.net>	URL:mailto:mail@josuah.net	bitreich.org	70
iDate:   Mon, 29 Jan 2018 08:26:30 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
iall common routines to a same util.c	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M .gitignore                          |       1 +	Err	bitreich.org	70
i  M Makefile                            |       9 ++++++---	Err	bitreich.org	70
i  A ascii.txt                           |      49 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A ff2ascii.c                          |     101 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A ff2braille.1                        |      29 +++++++++++++++++++++++++++++	Err	bitreich.org	70
i  M ff2braille.c                        |      98 +++++++++++++------------------	Err	bitreich.org	70
i  A ff2col.c                            |      40 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A util.c                              |      47 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A util.h                              |      16 ++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i9 files changed, 330 insertions(+), 60 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@@ -1,3 +1,4 @@	Err	bitreich.org	70
i *.o	Err	bitreich.org	70
i *.core	Err	bitreich.org	70
i ff2braille	Err	bitreich.org	70
i+ff2col	Err	bitreich.org	70
1diff --git a/Makefile b/Makefile	/scm/ff2txt/file/Makefile.gph	bitreich.org	70
i@@ -1,8 +1,11 @@	Err	bitreich.org	70
i CFLAGS = -std=c89 -pedantic -Wall -Wextra -Werror	Err	bitreich.org	70
i-all: ff2braille	Err	bitreich.org	70
i+all: ff2braille ff2col	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+ff2braille: ff2braille.o util.o util.h	Err	bitreich.org	70
i+        cc -o $@ ff2braille.o util.o $(LDFLAGS)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+ff2col: ff2col.o util.o util.h	Err	bitreich.org	70
i+        cc -o $@ ff2col.o util.o $(LDFLAGS)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i install:	Err	bitreich.org	70
i         mkdir -p ${PREFIX}/bin	Err	bitreich.org	70
1diff --git a/ascii.txt b/ascii.txt	/scm/ff2txt/file/ascii.txt.gph	bitreich.org	70
i@@ -0,0 +1,49 @@	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+! # $ % & ( ) / 0 1 2 3 4 5 6 7 8 9 : ; < > ?	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] 	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+{ | }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+` ^ ~ " ' 	Err	bitreich.org	70
i+* + - =	Err	bitreich.org	70
i+b d f l k t 	Err	bitreich.org	70
i+a c e h i m n o r s u v w x z 	Err	bitreich.org	70
i+g j p q y 	Err	bitreich.org	70
i+,.	Err	bitreich.org	70
i+_	Err	bitreich.org	70
1diff --git a/ff2ascii.c b/ff2ascii.c	/scm/ff2txt/file/ff2ascii.c.gph	bitreich.org	70
i@@ -0,0 +1,101 @@	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Transforming an image into a braille character text is transforming a	Err	bitreich.org	70
i+ * matrice this way:	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ *     farbfeld image           braille characters	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ * [[a0 a1 a2 a3 a4 a5]   [[[a0 a1   [a2 a3   [a4 a5   \	Err	bitreich.org	70
i+ *  [b0 b1 b2 b3 b4 b5]      b0 b1  / b2 b3  / b4 b5   |<- One braille	Err	bitreich.org	70
i+ *  [c0 c1 c2 c3 c4 c5]      c0 c1 /  c2 c3 /  c4 c5   |   character	Err	bitreich.org	70
i+ *  [d0 d1 d2 d3 d4 d5] =>   d0 d1]   d2 d3]   d4 d5]] /	Err	bitreich.org	70
i+ *  [e0 e1 e2 e3 e4 e5]    [[e0 e1   [e2 e3   [e4 e5	Err	bitreich.org	70
i+ *  [f0 f1 f2 f3 f4 f5]      f0 f1  / f2 f3  / f4 f5	Err	bitreich.org	70
i+ *  [g0 g1 g2 g3 g4 g5]      g0 g1 /  g2 g3 /  g4 g5	Err	bitreich.org	70
i+ *  [h0 h1 h2 h3 h4 h5]]     h0 h1]   h2 h3]   h4 h5]]]	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ *  braille characters written as a line:	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ * [[[a0 a1 b0 b1 c0 c1 d0 d1] <- One braille character	Err	bitreich.org	70
i+ *   [a2 a3 b2 b3 c2 c3 d2 d3]	Err	bitreich.org	70
i+ *   [a4 a5 b4 b5 c4 c5 d4 d5]] <- One row of braille characters	Err	bitreich.org	70
i+ *  [[e0 e1 f0 f1 g0 g1 h0 h1]	Err	bitreich.org	70
i+ *   [e2 e3 f2 f3 g2 g3 h2 h3]	Err	bitreich.org	70
i+ *   [e4 e5 f4 f5 g4 g5 h4 h5]]] <- Two row of braille characters	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ * Although the encoding of braille keeps        1 4	Err	bitreich.org	70
i+ * the characters encoded with only six                2 5	Err	bitreich.org	70
i+ * dots first, as only these are used for        3 6	Err	bitreich.org	70
i+ * encoding letters:                                7 8	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+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+                    0x01 * is_on(rows, width, height, w + 0, 0) +	Err	bitreich.org	70
i+                    0x08 * is_on(rows, width, height, w + 1, 0) +	Err	bitreich.org	70
i+                    0x02 * is_on(rows, width, height, w + 0, 1) +	Err	bitreich.org	70
i+                    0x10 * is_on(rows, width, height, w + 1, 1) +	Err	bitreich.org	70
i+                    0x04 * is_on(rows, width, height, w + 0, 2) +	Err	bitreich.org	70
i+                    0x20 * is_on(rows, width, height, w + 1, 2) +	Err	bitreich.org	70
i+                    0x40 * is_on(rows, width, height, w + 0, 3) +	Err	bitreich.org	70
i+                    0x80 * 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, h, r, i;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        read_header(&width, &height);	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 (h = 0; h < height; h += 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+                if (ferror(stdin))	Err	bitreich.org	70
i+                        err("fread stdin");	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        return 0;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/ff2braille.1 b/ff2braille.1	/scm/ff2txt/file/ff2braille.1.gph	bitreich.org	70
i@@ -0,0 +1,29 @@	Err	bitreich.org	70
i+.Dt FF2BRAILLE 1	Err	bitreich.org	70
i+.Dd $Mdocdate: January 22 2018$	Err	bitreich.org	70
i+.Os	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh NAME	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm ff2braille	Err	bitreich.org	70
i+.Nd farbfeld to text braille pattern image conversion	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh SYNOPSIS	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh DESCRIPTION	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+reads a	Err	bitreich.org	70
i+.Xr farbfeld 5	Err	bitreich.org	70
i+image from stdin and write a text representation of the image using braille	Err	bitreich.org	70
i+characters to stdout.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh EXIT STATUS	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Ex -std	Err	bitreich.org	70
i+.	Err	bitreich.org	70
1diff --git a/ff2braille.c b/ff2braille.c	/scm/ff2txt/file/ff2braille.c.gph	bitreich.org	70
i@@ -1,4 +1,32 @@	Err	bitreich.org	70
i-#include <arpa/inet.h>	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Transforming an image into a braille character text is transforming a	Err	bitreich.org	70
i+ * matrice this way:	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ *     farbfeld image           braille characters	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ * [[a0 a1 a2 a3 a4 a5]   [[[a0 a1   [a2 a3   [a4 a5   \	Err	bitreich.org	70
i+ *  [b0 b1 b2 b3 b4 b5]      b0 b1  / b2 b3  / b4 b5   |<- One braille	Err	bitreich.org	70
i+ *  [c0 c1 c2 c3 c4 c5]      c0 c1 /  c2 c3 /  c4 c5   |   character	Err	bitreich.org	70
i+ *  [d0 d1 d2 d3 d4 d5] =>   d0 d1]   d2 d3]   d4 d5]] /	Err	bitreich.org	70
i+ *  [e0 e1 e2 e3 e4 e5]    [[e0 e1   [e2 e3   [e4 e5	Err	bitreich.org	70
i+ *  [f0 f1 f2 f3 f4 f5]      f0 f1  / f2 f3  / f4 f5	Err	bitreich.org	70
i+ *  [g0 g1 g2 g3 g4 g5]      g0 g1 /  g2 g3 /  g4 g5	Err	bitreich.org	70
i+ *  [h0 h1 h2 h3 h4 h5]]     h0 h1]   h2 h3]   h4 h5]]]	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ *  braille characters written as a line:	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ * [[[a0 a1 b0 b1 c0 c1 d0 d1] <- One braille character	Err	bitreich.org	70
i+ *   [a2 a3 b2 b3 c2 c3 d2 d3]	Err	bitreich.org	70
i+ *   [a4 a5 b4 b5 c4 c5 d4 d5]] <- One row of braille characters	Err	bitreich.org	70
i+ *  [[e0 e1 f0 f1 g0 g1 h0 h1]	Err	bitreich.org	70
i+ *   [e2 e3 f2 f3 g2 g3 h2 h3]	Err	bitreich.org	70
i+ *   [e4 e5 f4 f5 g4 g5 h4 h5]]] <- Two row of braille characters	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ * Although the encoding of braille keeps        1 4	Err	bitreich.org	70
i+ * the characters encoded with only six                2 5	Err	bitreich.org	70
i+ * dots first, as only these are used for        3 6	Err	bitreich.org	70
i+ * encoding letters:                                7 8	Err	bitreich.org	70
i+ */	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@@ -7,41 +35,6 @@	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@@ -52,20 +45,13 @@ print_utf8_3byte(long rune)	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+is_on(struct col *rows[4], uint32_t width, uint32_t height,	Err	bitreich.org	70
i+    uint32_t w, 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+        return is_bright(rows[h][w]);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i@@ -75,14 +61,14 @@ print_4_rows(struct col *rows[4], uint32_t width, uint32_t height)	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+                    0x01 * is_on(rows, width, height, w + 0, 0) +	Err	bitreich.org	70
i+                    0x08 * is_on(rows, width, height, w + 1, 0) +	Err	bitreich.org	70
i+                    0x02 * is_on(rows, width, height, w + 0, 1) +	Err	bitreich.org	70
i+                    0x10 * is_on(rows, width, height, w + 1, 1) +	Err	bitreich.org	70
i+                    0x04 * is_on(rows, width, height, w + 0, 2) +	Err	bitreich.org	70
i+                    0x20 * is_on(rows, width, height, w + 1, 2) +	Err	bitreich.org	70
i+                    0x40 * is_on(rows, width, height, w + 0, 3) +	Err	bitreich.org	70
i+                    0x80 * 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@@ -93,8 +79,6 @@ main(void)	Err	bitreich.org	70
i         uint32_t        width, height, h, 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@@ -103,9 +87,9 @@ main(void)	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                 if (ferror(stdin))	Err	bitreich.org	70
i                         err("fread stdin");	Err	bitreich.org	70
i+                print_4_rows(rows, width, r / width);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i         return 0;	Err	bitreich.org	70
i }	Err	bitreich.org	70
1diff --git a/ff2col.c b/ff2col.c	/scm/ff2txt/file/ff2col.c.gph	bitreich.org	70
i@@ -0,0 +1,40 @@	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+void	Err	bitreich.org	70
i+print_2_rows(struct col *buf, uint32_t width, int height)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        size_t                w;	Err	bitreich.org	70
i+        int                up, dn;	Err	bitreich.org	70
i+        char                *map = " '.:";	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (w = 0; w < width; w += 2) {	Err	bitreich.org	70
i+                up = height > 0 && is_bright(buf[w])                ? 0x1 : 0x0;	Err	bitreich.org	70
i+                dn = height > 1 && is_bright(buf[w + width])        ? 0x2 : 0x0;	Err	bitreich.org	70
i+                putchar(map[up & dn]);	Err	bitreich.org	70
i+        }	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 * 2];	Err	bitreich.org	70
i+        uint32_t        width, height, h, r;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        read_header(&width, &height);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (h = 0; h < height; h += 2) {	Err	bitreich.org	70
i+                r = fread(buf, sizeof(*buf), width * 2, stdin);	Err	bitreich.org	70
i+                if (r % width != 0)	Err	bitreich.org	70
i+                        err("invalid line width");	Err	bitreich.org	70
i+                if (ferror(stdin))	Err	bitreich.org	70
i+                        err("fread stdin");	Err	bitreich.org	70
i+                print_2_rows(buf, width, r / width);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        return 0;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/util.c b/util.c	/scm/ff2txt/file/util.c.gph	bitreich.org	70
i@@ -0,0 +1,47 @@	Err	bitreich.org	70
i+#include <arpa/inet.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include <stdint.h>	Err	bitreich.org	70
i+#include <stdlib.h>	Err	bitreich.org	70
i+#include <stdio.h>	Err	bitreich.org	70
i+#include <string.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include "util.h"	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 *height)	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+        *height = ntohl(header[3]);	Err	bitreich.org	70
i+	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+	Err	bitreich.org	70
i+int	Err	bitreich.org	70
i+is_bright(struct col col)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        int32_t        sum;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        /* divide first to avoid overflow */	Err	bitreich.org	70
i+        sum = htonl(col.red) / 4;	Err	bitreich.org	70
i+        sum += htonl(col.green) / 4;	Err	bitreich.org	70
i+        sum += htonl(col.blue) / 4;	Err	bitreich.org	70
i+        sum += htonl(col.alpha) / 4;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return sum <= UINT16_MAX / 2;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/util.h b/util.h	/scm/ff2txt/file/util.h.gph	bitreich.org	70
i@@ -0,0 +1,16 @@	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(char *);	Err	bitreich.org	70
i+void        read_header(uint32_t *, uint32_t *);	Err	bitreich.org	70
i+int        is_bright(struct col);	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ff2txt/commit/a1eea6f23b89477...
Content-Typetext/plain; charset=utf-8