1
0
mirror of git://projects.qi-hardware.com/antorcha.git synced 2024-11-26 04:40:38 +02:00

tools/ant-txt/ant-txt.c: option -b for binary output (Antorcha image format)

This commit is contained in:
Werner Almesberger 2012-07-01 21:53:52 -03:00
parent ea3f2a9d6b
commit 545e6248f1

View File

@ -16,6 +16,7 @@
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
#include <assert.h> #include <assert.h>
#include <sys/types.h>
#include <libtxt/libtxt.h> #include <libtxt/libtxt.h>
@ -24,9 +25,50 @@
#define H 16 #define H 16
static void dump_binary(const uint8_t *canvas)
{
int x, y, i;
uint8_t v;
ssize_t wrote;
for (x = 0; x != W; x++) {
for (y = 0; y != H; y += 8) {
v = 0;
for (i = 0; i != 8; i++)
if (canvas[((y+i)*W+x) >> 3] & (1 << (x & 7)))
v |= 1 << i;
wrote = write(1, &v, 1);
if (wrote < 0) {
perror("fwrite");
exit(1);
}
if (!wrote) {
fprintf(stderr, "short write\n");
exit(1);
}
}
}
}
static void dump_text(const uint8_t *canvas)
{
int x, y;
for (y = 0; y != H; y++) {
for (x = 0; x != W; x++)
if (canvas[(y*W+x) >> 3] & (1 << (x & 7)))
putchar('#');
else
putchar('.');
putchar('\n');
}
}
static void usage(const char *name) static void usage(const char *name)
{ {
fprintf(stderr, "usage: %s [-F font_dir ...] [text]\n", name); fprintf(stderr, "usage: %s [-b] [-F font_dir ...] [text]\n", name);
exit(1); exit(1);
} }
@ -36,11 +78,14 @@ int main(int argc, char **argv)
struct edit *edits = NULL, **last = &edits; struct edit *edits = NULL, **last = &edits;
uint8_t *canvas; uint8_t *canvas;
const char *err; const char *err;
int i, x, y; int binary = 0;
int c; int i, c;
while ((c = getopt(argc, argv, "F:")) != EOF) while ((c = getopt(argc, argv, "bF:")) != EOF)
switch (c) { switch (c) {
case 'b':
binary = 1;
break;
case 'F': case 'F':
add_font_dir(optarg); add_font_dir(optarg);
break; break;
@ -69,13 +114,9 @@ int main(int argc, char **argv)
fprintf(stderr, "%s\n", err); fprintf(stderr, "%s\n", err);
return 1; return 1;
} }
for (y = 0; y != H; y++) { if (binary)
for (x = 0; x != W; x++) dump_binary(canvas);
if (canvas[(y*W+x) >> 3] & (1 << (x & 7)))
putchar('#');
else else
putchar('.'); dump_text(canvas);
putchar('\n');
}
return 0; return 0;
} }