aboutsummaryrefslogtreecommitdiffstats
path: root/src/vu-read-head.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2017-01-09 03:51:26 +0100
committerMattias Andrée <maandree@kth.se>2017-01-09 03:51:26 +0100
commit76cdf509b36bb0012cde9bc1760cdf3b26874af2 (patch)
treecc984bb82eaf9911d6173343a9e90bb20e9ddffb /src/vu-read-head.c
parentReadme: add format (diff)
downloadblind-76cdf509b36bb0012cde9bc1760cdf3b26874af2.tar.gz
blind-76cdf509b36bb0012cde9bc1760cdf3b26874af2.tar.bz2
blind-76cdf509b36bb0012cde9bc1760cdf3b26874af2.tar.xz
Use CIE XYZ instead of sRGB
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/vu-read-head.c')
-rw-r--r--src/vu-read-head.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/vu-read-head.c b/src/vu-read-head.c
new file mode 100644
index 0000000..5ad3085
--- /dev/null
+++ b/src/vu-read-head.c
@@ -0,0 +1,78 @@
+/* See LICENSE file for copyright and license details. */
+#include "arg.h"
+#include "stream.h"
+#include "util.h"
+
+#include <ctype.h>
+#include <unistd.h>
+
+static void
+usage(void)
+{
+ eprintf("usage: %s\n", argv0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ char buf[2 + 3 * sizeof(size_t) + sizeof(((struct stream *)0)->pixfmt)];
+ char magic[] = {'\0', 'u', 'i', 'v', 'f'};
+ char b;
+ char *p, *end;
+ size_t i, ptr;
+ ssize_t r;
+
+ ARGBEGIN {
+ default:
+ usage();
+ } ARGEND;
+
+ if (!argc)
+ usage();
+
+ for (ptr = 0; ptr < sizeof(buf);) {
+ r = read(STDIN_FILENO, buf + ptr, 1);
+ if (r < 0)
+ eprintf("read <stdin>:");
+ if (r == 0)
+ goto bad_format;
+ if (buf[ptr++] == '\n')
+ break;
+ }
+ if (ptr == sizeof(buf))
+ goto bad_format;
+
+ for (i = 0; i < 5; i++) {
+ r = read(STDIN_FILENO, &b, 1);
+ if (r < 0)
+ eprintf("read <stdin>:");
+ if (!r || b != magic[i])
+ goto bad_format;
+ }
+
+ end = (p = buf) + ptr;
+ for (i = 0; i < 2; i++) {
+ if (!isdigit(*p))
+ goto bad_format;
+ while (isdigit(*p)) p++;
+ if (*p++ != ' ')
+ goto bad_format;
+ }
+ while (isalnum(*p) || *p == ' ') {
+ if (p[0] == ' ' && p[-1] == ' ')
+ goto bad_format;
+ p++;
+ }
+ if (p[-1] == ' ' || p[0] != '\n')
+ goto bad_format;
+
+ for (i = 0; i < ptr; i += (size_t)r) {
+ r = write(STDOUT_FILENO, buf + i, ptr - i);
+ if (r < 0)
+ eprintf("write <stdout>:");
+ }
+
+ return 0;
+bad_format:
+ eprintf("<stdin>: file format not supported\n");
+}