draw to farbfeld instead of plain text - ploot - simple plotting tools
 (HTM) git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 1fc2d491d5051732caac4426d73cb22c2d870f6d
 (DIR) parent dd70db86b2270b2a539f863664d2af0c5c7f1040
 (HTM) Author: Josuah Demangeon <mail@josuah.net>
       Date:   Sun, 29 Apr 2018 21:54:47 +0200
       
       draw to farbfeld instead of plain text
       
       Diffstat:
         M Makefile                            |      19 +++++++++++--------
         M arg.h                               |      30 +++++++++++++++---------------
         A deffont.h                           |      27 +++++++++++++++++++++++++++
         A font-14x7.h                         |     550 +++++++++++++++++++++++++++++++
         A font.c                              |      71 +++++++++++++++++++++++++++++++
       
       5 files changed, 674 insertions(+), 23 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -1,17 +1,20 @@
        CFLAGS        = -Wall -Wextra -Werror -std=c89 -pedantic -D_POSIX_C_SOURCE=200809L
        
       -.PHONY: all
       -all:ploot
       +SRC = font.c
       +
       +OBJ = $(SRC:.c=.o)
       +
       +all:x ploot
        
        ploot.o: config.h arg.h
       -ploot: ploot.o
       -        ${CC} -static -o ploot ploot.o
       +ploot: $(OBJ)
       +        ${CC} -static -o $@ $(OBJ)
        
       -.PHONY: install
       -install: ploot
       +install:x ploot
                mkdir -p ${PREFIX}/bin
                cp ploot ${PREFIX}/bin/ploot
        
       -.PHONY: clean
       -clean:
       +clean:x
                rm -f *.o ploot
       +
       +x:
 (DIR) diff --git a/arg.h b/arg.h
       @@ -3,25 +3,25 @@
        
        extern char *argv0;
        
       -#define ARGBEGIN(argc, argv)                                                \
       -        for (argv0 = *argv, argv++, argc--;                                \
       -            argv[0] != NULL && argv[0][0] == '-' && argv[0][1] != '\0';        \
       -            argc--, argv++) {                                                \
       -                char **_argv, *_a;                                        \
       -                if (argv[0][1] == '-' && argv[0][2] == '\0') {                \
       -                        argv++, argc--;                                        \
       -                        break;                                                \
       -                }                                                        \
       -                for (_argv = argv, _a = *argv + 1; *_a != '\0'; _a++) {        \
       +#define ARGBEGIN \
       +        for (argv0 = *argv, argv++, argc--; \
       +            argv[0] != NULL && argv[0][0] == '-' && argv[0][1] != '\0'; \
       +            argc--, argv++) { \
       +                char **_argv, *_a; \
       +                if (argv[0][1] == '-' && argv[0][2] == '\0') { \
       +                        argv++, argc--; \
       +                        break; \
       +                } \
       +                for (_argv = argv, _a = *argv + 1; *_a != '\0'; _a++) { \
                                switch (*_a)
        
       -#define ARGEND                                                                \
       -                        if (_argv != argv)                                \
       -                                break;                                        \
       -                }                                                        \
       +#define ARGEND \
       +                        if (_argv != argv) \
       +                                break; \
       +                } \
                }
        
       -#define        EARGF(x)                                                        \
       +#define        EARGF(x) \
                ((argv[1] == NULL) ? ((x), (char *)0) : (argc--, argv++, argv[0]))
        
        #endif
 (DIR) diff --git a/deffont.h b/deffont.h
       @@ -0,0 +1,27 @@
       +#include <stddef.h>
       +
       +#define _ 0
       +#define X 1
       +#define B(x) char glyph_ ## x[WIDTH * HEIGHT]
       +#define b(x) glyph_ ## x
       +#define NOPR NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
       +#define NOPRINT NOPR, NOPR, NOPR, NOPR
       +
       +#define FONT(x) char *font_ ## x[] = { \
       +        NULL, NULL, NULL, NULL, \
       +        NULL, NULL, NULL, NULL, \
       +        NULL, NULL, NULL, NULL, \
       +        NULL, NULL, NULL, NULL, \
       +        NULL, NULL, NULL, NULL, \
       +        NULL, NULL, NULL, NULL, \
       +        b(space), b(bang), b(double), b(hash), \
       +        b(dollar), b(percent), b(ampersand), b(single), \
       +        b(l_round), b(r_round), b(asterisk), b(plus), \
       +        b(coma), b(minus), b(dot), b(slash), \
       +        b(0), b(1), b(2), b(3), \
       +        b(4), b(5), b(6), b(7), \
       +        b(8), b(9), b(column), b(semicolumn), \
       +        b(l_angle), b(equal), b(r_angle), b(question), \
       +        b(column), b(semicolumn), b(l_angle), b(equal), \
       +        b(r_angle), b(question) \
       +}
 (DIR) diff --git a/font-14x7.h b/font-14x7.h
       @@ -0,0 +1,550 @@
       +#include "deffont.h"
       +
       +#define WIDTH 14
       +#define HEIGHT 7
       +
       +B(space) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(bang) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(double) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,_,X,_,
       +_        ,_,X,_,X,_,
       +_        ,_,X,_,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(hash) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,_,X,_,
       +_        ,_,X,_,X,_,
       +_        ,X,X,X,X,X,
       +_        ,_,X,_,X,_,
       +_        ,_,X,_,X,_,
       +_        ,X,X,X,X,X,
       +_        ,_,X,_,X,_,
       +_        ,_,X,_,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(dollar) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,X,_,X,
       +_        ,X,_,X,_,_,
       +_        ,X,_,X,_,_,
       +_        ,_,X,X,X,_,
       +_        ,_,_,X,_,X,
       +_        ,_,_,X,_,X,
       +_        ,X,_,X,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(percent) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,X,
       +_        ,X,X,_,_,X,
       +_        ,X,X,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,X,X,
       +_        ,X,_,_,X,X,
       +_        ,X,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(ampersand) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,X,_,
       +_        ,_,X,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,X,_,X,
       +_        ,X,_,_,X,_,
       +_        ,X,_,_,X,_,
       +_        ,X,_,_,X,_,
       +_        ,_,X,X,_,X,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(single) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(l_round) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(r_round) = {
       +_        ,_,_,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(asterisk) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,X,_,X,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,X,_,X,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(plus) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,X,X,X,X,X,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(coma) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(minus) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,X,X,X,X,X,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(dot) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(slash) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(0) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,X,_,X,_,X,
       +_        ,X,_,X,_,X,
       +_        ,X,_,X,_,X,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(1) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,X,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(2) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,X,X,X,X,X,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(3) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(4) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,X,X,
       +_        ,_,_,X,_,X,
       +_        ,_,X,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,X,X,X,X,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(5) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,X,X,X,X,X,
       +_        ,X,_,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,X,X,X,X,_,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(6) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,X,X,X,X,_,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(7) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,X,X,X,X,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(8) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,X,X,X,_,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(9) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,X,X,X,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,X,X,X,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(column) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(semicolumn) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(l_angle) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(equal) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,X,X,X,X,X,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,X,X,X,X,X,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(r_angle) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,_,X,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,X,_,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,X,_,_,_,
       +_        ,X,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +B(question) = {
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,X,X,X,_,
       +_        ,X,_,_,_,X,
       +_        ,X,_,_,_,X,
       +_        ,_,_,_,_,X,
       +_        ,_,_,_,X,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,X,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_,
       +_        ,_,_,_,_,_
       +};
       +
       +FONT(14x7);
 (DIR) diff --git a/font.c b/font.c
       @@ -0,0 +1,71 @@
       +/*
       + * Render bitmapped font as a farbfeld image
       + */
       +
       +#include <arpa/inet.h>
       +
       +#include <stdint.h>
       +#include <stdio.h>
       +#include <stdlib.h>
       +#include <string.h>
       +
       +#include "arg.h"
       +
       +typedef uint16_t Color[4];
       +
       +enum { R, G, B, A };
       +
       +Color *canvas;
       +
       +char *argv0;
       +int wflag = 0;
       +int hflag = 0;
       +
       +void
       +usage()
       +{
       +        fputs("ploot -w width -h height <data.csv >image.ff\n", stderr);
       +        exit(1);
       +}
       +
       +void
       +ffdraw(Color *canvas, int w, int h)
       +{
       +        Color col = { 0xffff, 0xffff, 0x0000, 0xffff };
       +        size_t n;
       +
       +        for (n = w * h; n > 0; n--)
       +                memcpy(canvas + n - 1, col, sizeof(col));
       +}
       +
       +int
       +main(int argc, char **argv)
       +{
       +        uint32_t w, h;
       +
       +        ARGBEGIN {
       +        case 'w':
       +                wflag = atoi(EARGF(usage()));
       +                break;
       +        case 'h':
       +                hflag = atoi(EARGF(usage()));
       +                break;
       +        } ARGEND;
       +
       +        if (wflag == 0 || hflag == 0)
       +                usage();
       +
       +        if ((canvas = calloc(wflag * hflag, sizeof(*canvas))) == NULL) {
       +                perror("allocating memory for the canvas");
       +                return 1;
       +        }
       +
       +        fputs("farbfeld", stdout);
       +        w = htonl(wflag);
       +        h = htonl(hflag);
       +        fwrite(&w, sizeof(w), 1, stdout);
       +        fwrite(&h, sizeof(h), 1, stdout);
       +        ffdraw(canvas, wflag, hflag);
       +        fwrite(canvas, wflag * hflag, sizeof(*canvas), stdout);
       +        return 0;
       +}