Introduction
Introduction Statistics Contact Development Disclaimer Help
draw to farbfeld instead of plain text - ploot - simple plotting tools
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65…
Log
Files
Refs
Tags
README
LICENSE
---
commit 1fc2d491d5051732caac4426d73cb22c2d870f6d
parent dd70db86b2270b2a539f863664d2af0c5c7f1040
Author: Josuah Demangeon <[email protected]>
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(-)
---
diff --git a/Makefile b/Makefile
@@ -1,17 +1,20 @@
CFLAGS = -Wall -Wextra -Werror -std=c89 -pedantic -D_POSIX_C_SOURCE=200…
-.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:
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
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) \
+}
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);
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;
+}
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.