Introduction
Introduction Statistics Contact Development Disclaimer Help
refactor and fix prevous refactoring - ploot - simple plotting tools
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65…
Log
Files
Refs
Tags
README
LICENSE
---
commit ca79681acc3c649b67abc21bc0aabe980d5c989c
parent 5e3a15dfb77b6b94cba1df9918ce30c6e07d3904
Author: Josuah Demangeon <[email protected]>
Date: Sat, 22 Feb 2020 23:24:11 +0100
refactor and fix prevous refactoring
Diffstat:
M Makefile | 4 ++--
M config.mk | 1 +
M ploot-braille.c | 59 +++++++++++++++++++++--------…
M ploot-feed.c | 31 +++++++++++++++++++----------…
A ploot-text.c | 59 +++++++++++++++++++++++++++++…
M src/csv.c | 28 +++++++++++++++++++---------
M src/drawille.c | 9 ++++++---
M src/drawille.h | 2 +-
M src/ffplot.c | 2 +-
M src/font.c | 2 +-
M src/font.h | 3 +--
M src/font13.c | 2 +-
D src/font7.c | 743 -----------------------------…
M src/font8.c | 304 ++++++++++++++++++++++++++---…
M src/tool.c | 31 ++++-------------------------…
M src/tool.h | 4 +---
M test.csv | 2 +-
17 files changed, 420 insertions(+), 866 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -1,10 +1,10 @@
include config.mk
src = src/csv.c src/drawille.c src/ffplot.c src/font.c src/font13.c \
- src/font7.c src/font8.c src/log.c src/scale.c src/tool.c
+ src/font8.c src/log.c src/scale.c src/tool.c
inc = src/csv.h src/drawille.h src/ffplot.h src/font.h src/log.h \
src/scale.h src/tool.h
-bin = ploot-farbfeld ploot-feed ploot-braille
+bin = ploot-farbfeld ploot-feed ploot-braille ploot-text
obj = ${src:.c=.o}
lib = -lm
diff --git a/config.mk b/config.mk
@@ -1,3 +1,4 @@
CFLAGS = -Wall -Wextra -std=c99 -pedantic -fPIC -I"src" -D_POSIX_C_SOUR…
LFLAGS = -static
+PREFIX = /usr/local
MANDIR = $(PREFIX)/share/man
diff --git a/ploot-braille.c b/ploot-braille.c
@@ -19,7 +19,7 @@ char const *arg0 = NULL;
* Plot the body as an histogram interpolating the gaps and include
* a vertical and horizontal axis.
*/
-int
+static int
braille_histogram(struct csv *vl, struct drawille *drw,
time_t tmin, time_t tmax, double vmin, double vmax)
{
@@ -37,7 +37,7 @@ braille_histogram(struct csv *vl, struct drawille *drw,
continue;
y = scale_ypos(*v, vmin, vmax, drw->row * 4);
x = scale_xpos(*t, tmin, tmax, drw->col * 2);
- if (n < vl->n)
+ if (n < vl->n) /* only plot when xprev, yprev are set */
drawille_histogram_line(drw, xprev, yprev, x, y, zero);
xprev = x;
yprev = y;
@@ -93,8 +93,10 @@ braille_axis_y(FILE *fp, double vmin, double vmax, int r, in…
static int
braille_render(struct drawille *drw, FILE *fp, double vmin, double vmax)
{
- for (int row = 0; row < drw->row; row++) {
- drawille_put_row(drw, fp, row);
+ int row;
+
+ for (row = 0; row < drw->row; row++) {
+ drawille_put_row(fp, drw, row);
braille_axis_y(fp, vmin, vmax, row, drw->row);
fprintf(fp, "\n");
}
@@ -113,17 +115,24 @@ plot(struct csv *vl, FILE *fp, size_t ncol, int row, int …
col -= 8;
scale(vl, ncol, &tmin, &tmax, &tstep, &vmin, &vmax, &vstep);
- warn("vstep=%lf vstep=%ld", vstep, tstep);
-
- if ((drw = drawille_new(row, col)) == NULL)
- fatal(1, "allocating drawille canvas");
- if (braille_histogram(vl, drw, tmin, tmax, vmin, vmax) == -1)
- fatal(1, "allocating drawille canvas");
- if (braille_render(drw, fp, vmin, vmax) == -1)
- fatal(1, "rendering braille canvas");
+ row -= ncol - 1; /* room for the labels and the scale */
+ row /= ncol; /* plot <ncol> times */
+ row = MAX(row, 3); /* readable */
+
+ debug("vstep=%lf vstep=%ld ncol=%zu row=%zu", vstep, tstep, ncol, row);
+
+ for (; ncol > 0; vl++, ncol--) {
+ assert(drw = drawille_new(row, col));
+ fprintf(fp, " %s\n", vl->label);
+ if (braille_histogram(vl, drw, tmin, tmax, vmin, vmax) == -1)
+ fatal(1, "allocating drawille canvas");
+ if (braille_render(drw, fp, vmin, vmax) == -1)
+ fatal(1, "rendering braille canvas");
+ free(drw);
+ }
if (braille_axis_x(fp, tmin, tmax, tstep, col) == -1)
fatal(1, "printing x axis");;
- free(drw);
+
}
static void
@@ -138,11 +147,27 @@ main(int argc, char **argv)
{
struct csv *vl;
size_t ncol;
- int c;
+ int c, rows, cols;
+ rows = 20, cols = 80;
optind = 0;
- while ((c = getopt(argc, argv, "")) > -1) {
+ while ((c = getopt(argc, argv, "r:c:")) > -1) {
switch (c) {
+ case 'r':
+ rows = atoi(optarg);
+ if (rows < 1) {
+ error("invalid number of rows");
+ usage();
+ }
+ break;
+ case 'c':
+ cols = atoi(optarg);
+ if (rows < 1) {
+ error("invalid number of columns");
+ usage();
+ }
+ break;
+
default:
usage();
}
@@ -153,12 +178,10 @@ main(int argc, char **argv)
if (argc > 0)
usage();
- debug("label");
csv_labels(stdin, &vl, &ncol);
- debug("values");
csv_values(stdin, vl, ncol);
- plot(vl, stdout, ncol, 20, 80);
+ plot(vl, stdout, ncol, rows, cols);
free(vl);
return 1;
diff --git a/ploot-feed.c b/ploot-feed.c
@@ -1,11 +1,12 @@
-#include <time.h>
-#include <stdlib.h>
-#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
#include <fcntl.h>
#include <limits.h>
-#include <string.h>
-#include <ctype.h>
#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
#include <unistd.h>
#include "tool.h"
@@ -57,9 +58,12 @@ plot_row(long *out, char *line, double *max, int nrow, int n…
int n;
char *tok;
- if ((tok = strsep(&line, ",")) == NULL)
+ tok = strsep(&line, ",");
+ if (!tok)
fatal(100, "*** missing epoch value");
- epoch = eatol(tok);
+ epoch = strtol(tok, NULL, 10);
+ if (errno)
+ error("*** parsing epoch '%s'", tok);
for (n = 0; (tok = strsep(&line, ",")) != NULL; n++) {
if (n >= ncol)
@@ -92,7 +96,7 @@ plot_line(long *out, double *max, int ncol)
memcpy(o, &rune, sizeof(rune));
out++;
- sz = 0;
+ line = NULL, sz = 0;
for (nrow = 0; nrow < 4; nrow++) {
if (getline(&line, &sz, stdin) == -1) {
if (ferror(stdin))
@@ -172,12 +176,13 @@ read_labels(char **labv)
char *cp, *line, *tok;
size_t sz;
- sz = 0;
+ line = NULL, sz = 0;
if (getline(&line, &sz, stdin) == -1) {
if (ferror(stdin))
fatal(111, "reading labels from stdin");
fatal(100, "missing label line", stderr);
}
+ strchomp(line);
cp = line;
if (strcmp(strsep(&cp, ","), "epoch") != 0)
@@ -189,7 +194,6 @@ read_labels(char **labv)
if (ncol < 1)
fatal(100, "no label found");
- free(line);
return ncol;
}
@@ -236,8 +240,11 @@ main(int argc, char **argv)
usage();
nmax = argc;
- for (m = max; argc > 0; argc--, argv++, m++)
- *m = eatof(*argv);
+ for (m = max; argc > 0; argc--, argv++, m++) {
+ *m = strtod(*argv, NULL);
+ if (errno)
+ error("*** parsing float '%s'", *argv);
+ }
ncol = read_labels(labv);
width = (wflag - sizeof("XXxXXxXX _")) / ncol - sizeof("|");
diff --git a/ploot-text.c b/ploot-text.c
@@ -0,0 +1,59 @@
+#include <assert.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "drawille.h"
+#include "font.h"
+#include "tool.h"
+
+char *arg0 = NULL;
+
+void
+usage(void)
+{
+ fprintf(stderr, "usage: %s [-123] text\n", arg0);
+ exit(100);
+}
+
+int
+main(int argc, char **argv)
+{
+ struct font *ft;
+ struct drawille *drw;
+ char *text;
+ int c, row;
+
+ ft = &font8;
+ optind = 0;
+ while ((c = getopt(argc, argv, "12")) > -1) {
+ switch (c) {
+ case '1':
+ ft = &font8;
+ break;
+ case '2':
+ ft = &font13;
+ break;
+ default:
+ usage();
+ }
+ }
+ arg0 = *argv;
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ usage();
+
+ text = *argv;
+
+ assert(drw = drawille_new((ft->height + 3) / 4, font_strlen(ft, text) …
+ drawille_text(drw, 0, 0, ft, text);
+
+ for (row = 0; row < drw->row; row++) {
+ drawille_put_row(stdout, drw, row);
+ fprintf(stdout, "\n");
+ }
+
+ free(drw);
+}
diff --git a/src/csv.c b/src/csv.c
@@ -1,9 +1,11 @@
#include "csv.h"
+#include <errno.h>
#include <assert.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
+#include <limits.h>
#include "log.h"
#include "tool.h"
@@ -35,22 +37,29 @@ csv_addrow(struct csv *vl, size_t ncol, char *line)
{
char *field;
time_t *tbuf;
+ long l;
+ double d;
- if ((field = strsep(&line, ",")) == NULL)
+ field = strsep(&line, ",");
+ if (!field)
fatal(1, "missing epoch at row %zu", vl->n);
- csv_addtime(vl, eatol(field));
- for (; (field = strsep(&line, ",")) != NULL; ncol--, vl->n++, vl++) {
+ l = strtol(field, NULL, 10);
+ if (errno)
+ fatal(100, "parsing number '%s'", field);
+ csv_addtime(vl, l);
+ tbuf = vl[0].t;
+ for (; (field = strsep(&line, ",")); ncol--, vl->n++, vl++) {
if (ncol == 0)
fatal(1, "too many fields at line %zu", vl->n);
- csv_addval(vl, eatof(field));
+ d = strtod(field, NULL);
+ if (errno)
+ fatal(100, "parsing double '%s'", field);
+ csv_addval(vl, d);
+ vl->t = tbuf;
}
if (ncol > 0)
fatal(1, "too few fields at line %zu", vl->n);
-
- /* the same time buffer can be used for all columns */
- for (tbuf = vl->t; ncol > 0; ncol--, vl++)
- vl->t = tbuf;
}
/*
@@ -64,6 +73,7 @@ csv_labels(FILE *fp, struct csv **vl, size_t *ncol)
size_t sz;
ssize_t r;
+ sz = 0, line = NULL;
r = getline(&line, &sz, fp);
if (ferror(fp))
fatal(111, "error while reading from file");
@@ -97,7 +107,7 @@ csv_values(FILE *fp, struct csv *vl, size_t ncol)
char *line;
size_t sz;
- sz = 0;
+ sz = 0, line = NULL;
while (getline(&line, &sz, fp) > -1)
csv_addrow(vl, ncol, line);
if (vl->n == 0)
diff --git a/src/drawille.c b/src/drawille.c
@@ -8,6 +8,8 @@
#include "font.h"
+#include "log.h" /* XXX */
+
/*
* Terminal-based plotting using drawille character, aka drawille.
*/
@@ -55,7 +57,7 @@ drawille_get(struct drawille *drw, int row, int col)
}
size_t
-drawille_put_row(struct drawille *drw, FILE *fp, int row)
+drawille_put_row(FILE *fp, struct drawille *drw, int row)
{
char txt[] = "xxx";
size_t n;
@@ -145,8 +147,9 @@ drawille_histogram_dot(struct drawille *drw, int x, int y, …
int sign;
sign = (y > zero) ? (+1) : (-1);
- for (; y != zero + sign; y -= sign)
+ for (; y != zero; y -= sign)
drawille_dot(drw, x, y);
+ drawille_dot(drw, x, y);
}
void
@@ -187,7 +190,7 @@ drawille_text(struct drawille *drw, int x, int y, struct fo…
{
if (drw->row*4 < font->height)
return NULL;
- for (; *s != '\0' && x < drw->col/2; s++, x++)
+ for (; *s != '\0' && x < drw->col * 2; s++, x++)
x += drawille_text_glyph(drw, x, y, font, *s);
return s;
}
diff --git a/src/drawille.h b/src/drawille.h
@@ -17,7 +17,7 @@ struct drawille {
};
/**/
-size_t drawille_put_row (struct drawille *, FILE *, int);
+size_t drawille_put_row (FILE *, struct drawille *, int);
void drawille_dot (struct drawille *, int, int);
struct drawille *drawille_new (int, int);
void drawille_line (struct drawille *, int, int,…
diff --git a/src/ffplot.c b/src/ffplot.c
@@ -140,7 +140,7 @@ ffplot_print(FILE *fp, struct ffplot *plot)
w = htonl(plot->w);
h = htonl(plot->h);
- fputs("ffplot", stdout);
+ fprintf(stdout, "farbfeld");
fwrite(&w, sizeof(w), 1, fp);
fwrite(&h, sizeof(h), 1, fp);
fwrite(plot->buf, plot->w * plot->h, sizeof(*plot->buf), fp);
diff --git a/src/font.c b/src/font.c
@@ -15,6 +15,6 @@ font_strlen(struct font *ft, char *s)
len = 0;
for (; *s != '\0'; s++)
- len += font_width(ft, *s);
+ len += font_width(ft, *s) + 1;
return len;
}
diff --git a/src/font.h b/src/font.h
@@ -11,9 +11,8 @@ struct font {
char *glyph[128]; /* 0: end, 1: off, 2: on. */
};
-struct font font13;
-struct font font7;
struct font font8;
+struct font font13;
/**/
size_t font_width (struct font *, int);
diff --git a/src/font13.c b/src/font13.c
@@ -1039,7 +1039,7 @@ C(underscore) = {
_,_,_,_,_,
_,_,_,_,_,
_,_,_,_,_,
-X ,X,X,X,X,X,
+ X,X,X,X,X,
_,_,_,_,_,
_,_,_,_,_,
0};
diff --git a/src/font7.c b/src/font7.c
@@ -1,743 +0,0 @@
-#include "font.h"
-
-#define C(x) static char glyph_##x[]
-#define _ 2
-#define X 3
-
-C(err) = {
- X,X,X,X,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- X,X,X,X,
-0};
-
-C(A) = {
- _,_,_,_,
- _,X,X,_,
- X,_,_,X,
- X,_,_,X,
- X,X,X,X,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(B) = {
- _,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,X,X,_,
- X,_,_,X,
- X,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(C) = {
- _,_,_,_,
- _,X,X,X,
- X,_,_,_,
- X,_,_,_,
- X,_,_,_,
- _,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(D) = {
- _,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- X,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(E) = {
- _,_,_,_,
- X,X,X,X,
- X,_,_,_,
- X,X,X,_,
- X,_,_,_,
- X,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(F) = {
- _,_,_,_,
- X,X,X,X,
- X,_,_,_,
- X,X,X,_,
- X,_,_,_,
- X,_,_,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(G) = {
- _,_,_,_,
- _,X,X,X,
- X,_,_,_,
- X,_,X,X,
- X,_,_,X,
- _,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(H) = {
- _,_,_,_,
- X,_,_,X,
- X,_,_,X,
- X,X,X,X,
- X,_,_,X,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(I) = {
- _,_,_,
- X,X,X,
- _,X,_,
- _,X,_,
- _,X,_,
- X,X,X,
- _,_,_,
- _,_,_,
-0};
-
-C(J) = {
- _,_,_,_,
- _,X,X,X,
- _,_,X,_,
- _,_,X,_,
- _,_,X,_,
- X,X,_,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(K) = {
- _,_,_,_,
- X,_,_,X,
- X,_,X,_,
- X,X,_,_,
- X,_,X,_,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(L) = {
- _,_,_,_,
- X,_,_,_,
- X,_,_,_,
- X,_,_,_,
- X,_,_,_,
- X,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(M) = {
- _,_,_,_,_,
- X,_,_,_,X,
- X,X,_,X,X,
- X,_,X,_,X,
- X,_,_,_,X,
- X,_,_,_,X,
- _,_,_,_,_,
- _,_,_,_,_,
-0};
-
-C(N) = {
- _,_,_,_,
- X,_,_,X,
- X,X,_,X,
- X,X,X,X,
- X,_,X,X,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(O) = {
- _,_,_,_,
- _,X,X,_,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(P) = {
- _,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,X,X,_,
- X,_,_,_,
- X,_,_,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(Q) = {
- _,_,_,_,
- _,X,X,_,
- X,_,_,X,
- X,_,_,X,
- X,_,X,X,
- _,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(R) = {
- _,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,X,X,_,
- X,_,X,_,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(S) = {
- _,_,_,_,
- _,X,X,X,
- X,_,_,_,
- _,X,X,_,
- _,_,_,X,
- X,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(T) = {
- _,_,_,_,
- X,X,X,X,
- _,X,X,_,
- _,X,X,_,
- _,X,X,_,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(U) = {
- _,_,_,_,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(V) = {
- _,_,_,_,
- X,_,_,X,
- X,_,_,X,
- X,_,X,_,
- X,_,X,_,
- X,X,_,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(W) = {
- _,_,_,_,_,
- X,_,_,_,X,
- X,_,_,_,X,
- X,_,X,_,X,
- X,_,X,_,X,
- _,X,_,X,_,
- _,_,_,_,_,
- _,_,_,_,_,
-0};
-
-C(X) = {
- _,_,_,_,
- X,_,_,X,
- X,_,_,X,
- _,X,X,_,
- X,_,_,X,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(Y) = {
- _,_,_,_,
- X,_,_,X,
- X,_,_,X,
- _,X,X,_,
- _,X,_,_,
- X,_,_,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(Z) = {
- _,_,_,_,
- X,X,X,X,
- _,_,_,X,
- _,X,X,_,
- X,_,_,_,
- X,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(a) = {
- _,_,_,_,
- _,_,_,_,
- _,X,X,X,
- X,_,_,X,
- X,_,_,X,
- _,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(b) = {
- X,_,_,_,
- X,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,_,_,X,
- X,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(c) = {
- _,_,_,_,
- _,_,_,_,
- _,X,X,X,
- X,_,_,_,
- X,_,_,_,
- _,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(d) = {
- _,_,_,X,
- _,_,_,X,
- _,X,X,X,
- X,_,_,X,
- X,_,_,X,
- _,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(e) = {
- _,_,_,_,
- _,_,_,_,
- _,X,X,X,
- X,X,X,X,
- X,_,_,_,
- _,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(f) = {
- _,X,X,
- X,_,_,
- X,_,_,
- X,X,_,
- X,_,_,
- X,_,_,
- _,_,_,
- _,_,_,
-0};
-
-C(g) = {
- _,_,_,_,
- _,_,_,_,
- _,X,X,X,
- X,_,_,X,
- X,_,_,X,
- _,X,X,X,
- _,_,_,X,
- _,X,X,_,
-0};
-
-C(h) = {
- X,_,_,_,
- X,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(i) = {
- _,X,_,
- _,_,_,
- X,X,_,
- _,X,_,
- _,X,_,
- _,X,X,
- _,_,_,
- _,_,_,
-0};
-
-C(j) = {
- _,X,_,
- _,_,_,
- X,X,_,
- _,X,_,
- _,X,_,
- _,X,_,
- _,X,_,
- X,_,_,
-0};
-
-C(k) = {
- X,_,_,_,
- X,_,_,_,
- X,_,_,X,
- X,_,X,_,
- X,X,X,_,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(l) = {
- X,X,_,
- _,X,_,
- _,X,_,
- _,X,_,
- _,X,_,
- X,X,X,
- _,_,_,
- _,_,_,
-0};
-
-C(m) = {
- _,_,_,_,_,
- _,_,_,_,_,
- X,X,X,X,_,
- X,_,X,_,X,
- X,_,X,_,X,
- X,_,X,_,X,
- _,_,_,_,_,
- _,_,_,_,_,
-0};
-
-C(n) = {
- _,_,_,_,
- _,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(o) = {
- _,_,_,_,
- _,_,_,_,
- _,X,X,_,
- X,_,_,X,
- X,_,_,X,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(p) = {
- _,_,_,_,
- _,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,_,_,X,
- X,X,X,_,
- X,_,_,_,
- X,_,_,_,
-0};
-
-C(q) = {
- _,_,_,_,
- _,_,_,_,
- _,X,X,X,
- X,_,_,X,
- X,_,_,X,
- _,X,X,X,
- _,_,_,X,
- _,_,_,X,
-0};
-
-C(r) = {
- _,_,_,_,
- _,_,_,_,
- X,_,X,X,
- X,X,_,_,
- X,_,_,_,
- X,_,_,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(s) = {
- _,_,_,_,
- _,_,_,_,
- _,X,X,X,
- X,X,_,_,
- _,_,X,X,
- X,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(t) = {
- X,_,_,
- X,_,_,
- X,X,X,
- X,_,_,
- X,_,_,
- _,X,X,
- _,_,_,
- _,_,_,
-0};
-
-C(u) = {
- _,_,_,_,
- _,_,_,_,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- _,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(v) = {
- _,_,_,_,_,
- _,_,_,_,_,
- X,_,_,_,X,
- X,_,_,_,X,
- _,X,_,X,_,
- _,_,X,_,_,
- _,_,_,_,_,
- _,_,_,_,_,
-0};
-
-C(w) = {
- _,_,_,_,_,
- _,_,_,_,_,
- X,_,_,_,X,
- X,_,X,_,X,
- X,_,X,_,X,
- _,X,_,X,_,
- _,_,_,_,_,
- _,_,_,_,_,
-0};
-
-C(x) = {
- _,_,_,_,
- _,_,_,_,
- X,_,_,X,
- _,X,X,_,
- _,X,X,_,
- X,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(y) = {
- _,_,_,_,
- _,_,_,_,
- X,_,_,X,
- X,_,_,X,
- X,_,_,X,
- _,X,X,X,
- _,_,_,X,
- _,X,X,_,
-0};
-
-C(z) = {
- _,_,_,_,
- _,_,_,_,
- X,X,X,X,
- _,_,X,_,
- _,X,_,_,
- X,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(0) = {
- _,X,X,_,
- X,_,_,X,
- X,_,X,X,
- X,X,_,X,
- X,_,_,X,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(1) = {
- _,X,_,
- X,X,_,
- _,X,_,
- _,X,_,
- _,X,_,
- X,X,X,
- _,_,_,
- _,_,_,
-0};
-
-C(2) = {
- _,X,X,_,
- X,_,_,X,
- _,_,_,X,
- _,_,X,_,
- _,X,_,_,
- X,X,X,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(3) = {
- X,X,X,_,
- _,_,_,X,
- _,X,X,X,
- _,_,_,X,
- _,_,_,X,
- X,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(4) = {
- _,_,X,X,
- _,X,_,X,
- X,_,_,X,
- X,X,X,X,
- _,_,_,X,
- _,_,_,X,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(5) = {
- X,X,X,X,
- X,_,_,_,
- X,X,X,_,
- _,_,_,X,
- _,_,_,X,
- X,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(6) = {
- _,X,X,_,
- X,_,_,_,
- X,X,X,_,
- X,_,_,X,
- X,_,_,X,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(7) = {
- X,X,X,X,
- _,_,_,X,
- _,_,X,_,
- _,_,X,_,
- _,X,_,_,
- _,X,_,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(8) = {
- _,X,X,_,
- X,_,_,X,
- _,X,X,_,
- X,_,_,X,
- X,_,_,X,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(9) = {
- _,X,X,_,
- X,_,_,X,
- X,_,_,X,
- _,X,X,X,
- _,_,_,X,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
-0};
-
-C(space) = {
- _,_,_,
- _,_,_,
- _,_,_,
- _,_,_,
- _,_,_,
- _,_,_,
- _,_,_,
-0};
-
-struct font font7 = { 8, {
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_space, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_0, glyph_1, glyph_2, glyph_3,
- glyph_4, glyph_5, glyph_6, glyph_7,
- glyph_8, glyph_9, glyph_err, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_A, glyph_B, glyph_C,
- glyph_D, glyph_E, glyph_F, glyph_G,
- glyph_H, glyph_I, glyph_J, glyph_K,
- glyph_L, glyph_M, glyph_N, glyph_O,
- glyph_P, glyph_Q, glyph_R, glyph_S,
- glyph_T, glyph_U, glyph_V, glyph_W,
- glyph_X, glyph_Y, glyph_Z, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err,
- glyph_err, glyph_a, glyph_b, glyph_c,
- glyph_d, glyph_e, glyph_f, glyph_g,
- glyph_h, glyph_i, glyph_j, glyph_k,
- glyph_l, glyph_m, glyph_n, glyph_o,
- glyph_p, glyph_q, glyph_r, glyph_s,
- glyph_t, glyph_u, glyph_v, glyph_w,
- glyph_x, glyph_y, glyph_z, glyph_err,
- glyph_err, glyph_err, glyph_err, glyph_err
-} };
diff --git a/src/font8.c b/src/font8.c
@@ -16,64 +16,64 @@ C(error) = {
0};
C(A) = {
- _,_,_,_,
_,X,X,_,
X,_,_,X,
X,_,_,X,
X,X,X,X,
X,_,_,X,
+ X,_,_,X,
_,_,_,_,
_,_,_,_,
0};
C(B) = {
- _,_,_,_,
X,X,X,_,
X,_,_,X,
X,X,X,_,
X,_,_,X,
+ X,_,_,X,
X,X,X,_,
_,_,_,_,
_,_,_,_,
0};
C(C) = {
- _,_,_,_,
_,X,X,X,
X,_,_,_,
X,_,_,_,
X,_,_,_,
+ X,_,_,_,
_,X,X,X,
_,_,_,_,
_,_,_,_,
0};
C(D) = {
- _,_,_,_,
X,X,X,_,
X,_,_,X,
X,_,_,X,
X,_,_,X,
+ X,_,_,X,
X,X,X,_,
_,_,_,_,
_,_,_,_,
0};
C(E) = {
- _,_,_,_,
X,X,X,X,
X,_,_,_,
X,X,X,_,
X,_,_,_,
+ X,_,_,_,
X,X,X,X,
_,_,_,_,
_,_,_,_,
0};
C(F) = {
- _,_,_,_,
X,X,X,X,
X,_,_,_,
+ X,_,_,_,
X,X,X,_,
X,_,_,_,
X,_,_,_,
@@ -82,9 +82,9 @@ C(F) = {
0};
C(G) = {
- _,_,_,_,
_,X,X,X,
X,_,_,_,
+ X,_,_,_,
X,_,X,X,
X,_,_,X,
_,X,X,X,
@@ -93,7 +93,7 @@ C(G) = {
0};
C(H) = {
- _,_,_,_,
+ X,_,_,X,
X,_,_,X,
X,_,_,X,
X,X,X,X,
@@ -104,32 +104,32 @@ C(H) = {
0};
C(I) = {
- _,_,_,
X,X,X,
_,X,_,
_,X,_,
_,X,_,
+ _,X,_,
X,X,X,
_,_,_,
_,_,_,
0};
C(J) = {
- _,_,_,_,
_,X,X,X,
_,_,X,_,
_,_,X,_,
_,_,X,_,
+ _,_,X,_,
X,X,_,_,
_,_,_,_,
_,_,_,_,
0};
C(K) = {
- _,_,_,_,
X,_,_,X,
X,_,X,_,
X,X,_,_,
+ X,X,_,_,
X,_,X,_,
X,_,_,X,
_,_,_,_,
@@ -137,7 +137,7 @@ C(K) = {
0};
C(L) = {
- _,_,_,_,
+ X,_,_,_,
X,_,_,_,
X,_,_,_,
X,_,_,_,
@@ -148,21 +148,21 @@ C(L) = {
0};
C(M) = {
- _,_,_,_,_,
X,_,_,_,X,
X,X,_,X,X,
X,_,X,_,X,
X,_,_,_,X,
X,_,_,_,X,
+ X,_,_,_,X,
_,_,_,_,_,
_,_,_,_,_,
0};
C(N) = {
- _,_,_,_,
X,_,_,X,
X,X,_,X,
- X,X,X,X,
+ X,X,_,X,
+ X,_,X,X,
X,_,X,X,
X,_,_,X,
_,_,_,_,
@@ -170,20 +170,20 @@ C(N) = {
0};
C(O) = {
- _,_,_,_,
_,X,X,_,
X,_,_,X,
X,_,_,X,
X,_,_,X,
+ X,_,_,X,
_,X,X,_,
_,_,_,_,
_,_,_,_,
0};
C(P) = {
- _,_,_,_,
X,X,X,_,
X,_,_,X,
+ X,_,_,X,
X,X,X,_,
X,_,_,_,
X,_,_,_,
@@ -192,10 +192,10 @@ C(P) = {
0};
C(Q) = {
- _,_,_,_,
_,X,X,_,
X,_,_,X,
X,_,_,X,
+ X,_,_,X,
X,_,X,X,
_,X,X,X,
_,_,_,_,
@@ -203,9 +203,9 @@ C(Q) = {
0};
C(R) = {
- _,_,_,_,
X,X,X,_,
X,_,_,X,
+ X,_,_,X,
X,X,X,_,
X,_,X,_,
X,_,_,X,
@@ -214,10 +214,10 @@ C(R) = {
0};
C(S) = {
- _,_,_,_,
_,X,X,X,
X,_,_,_,
- _,X,X,_,
+ _,X,_,_,
+ _,_,X,_,
_,_,_,X,
X,X,X,_,
_,_,_,_,
@@ -225,18 +225,18 @@ C(S) = {
0};
C(T) = {
- _,_,_,_,
- X,X,X,X,
- _,X,X,_,
- _,X,X,_,
- _,X,X,_,
- _,X,X,_,
- _,_,_,_,
- _,_,_,_,
+ X,X,X,X,X,
+ _,_,X,_,_,
+ _,_,X,_,_,
+ _,_,X,_,_,
+ _,_,X,_,_,
+ _,_,X,_,_,
+ _,_,_,_,_,
+ _,_,_,_,_,
0};
C(U) = {
- _,_,_,_,
+ X,_,_,X,
X,_,_,X,
X,_,_,X,
X,_,_,X,
@@ -247,7 +247,7 @@ C(U) = {
0};
C(V) = {
- _,_,_,_,
+ X,_,_,X,
X,_,_,X,
X,_,_,X,
X,_,X,_,
@@ -258,7 +258,7 @@ C(V) = {
0};
C(W) = {
- _,_,_,_,_,
+ X,_,_,_,X,
X,_,_,_,X,
X,_,_,_,X,
X,_,X,_,X,
@@ -269,10 +269,10 @@ C(W) = {
0};
C(X) = {
- _,_,_,_,
X,_,_,X,
X,_,_,X,
_,X,X,_,
+ _,X,X,_,
X,_,_,X,
X,_,_,X,
_,_,_,_,
@@ -280,7 +280,7 @@ C(X) = {
0};
C(Y) = {
- _,_,_,_,
+ X,_,_,X,
X,_,_,X,
X,_,_,X,
_,X,X,_,
@@ -291,10 +291,10 @@ C(Y) = {
0};
C(Z) = {
- _,_,_,_,
X,X,X,X,
_,_,_,X,
- _,X,X,_,
+ _,_,X,_,
+ _,X,_,_,
X,_,_,_,
X,X,X,X,
_,_,_,_,
@@ -707,6 +707,226 @@ C(space) = {
_,_,_,
0};
+C(exclam) = {
+ _,X,_,
+ _,X,_,
+ _,X,_,
+ _,X,_,
+ _,_,_,
+ _,X,_,
+ _,_,_,
+ _,_,_,
+0};
+
+C(dquote) = {
+ X,_,X,
+ X,_,X,
+ X,_,X,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+0};
+
+C(hash) = {
+ _,_,_,_,_,
+ _,X,_,X,_,
+ X,X,X,X,X,
+ _,X,_,X,_,
+ X,X,X,X,X,
+ _,X,_,X,_,
+ _,_,_,_,_,
+ _,_,_,_,_,
+0};
+
+C(dollar) = {
+ _,X,_,_,
+ X,X,X,X,
+ X,X,_,_,
+ _,X,X,_,
+ _,X,_,X,
+ X,X,X,X,
+ _,X,_,_,
+ _,_,_,_,
+0};
+
+C(percent) = {
+ _,_,_,_,
+ _,_,_,_,
+ X,_,_,X,
+ _,_,X,_,
+ _,X,_,_,
+ X,_,_,X,
+ _,_,_,_,
+ _,_,_,_,
+0};
+
+C(amp) = {
+ _,X,_,_,
+ X,_,X,_,
+ _,X,_,_,
+ X,_,X,X,
+ X,_,X,_,
+ _,X,X,X,
+ _,_,_,_,
+ _,_,_,_,
+0};
+
+C(squote) = {
+ _,X,_,
+ _,X,_,
+ _,X,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+0};
+
+C(lparen) = {
+ _,X,
+ X,_,
+ X,_,
+ X,_,
+ X,_,
+ X,_,
+ _,X,
+ _,_,
+0};
+
+C(rparen) = {
+ X,_,
+ _,X,
+ _,X,
+ _,X,
+ _,X,
+ _,X,
+ X,_,
+ _,_,
+0};
+
+C(star) = {
+ _,_,_,_,_,
+ _,_,X,_,_,
+ X,_,X,_,X,
+ _,X,X,X,_,
+ X,_,X,_,X,
+ _,_,X,_,_,
+ _,_,_,_,_,
+ _,_,_,_,_,
+0};
+
+C(plus) = {
+ _,_,_,_,_,
+ _,_,X,_,_,
+ _,_,X,_,_,
+ X,X,X,X,X,
+ _,_,X,_,_,
+ _,_,X,_,_,
+ _,_,_,_,_,
+ _,_,_,_,_,
+0};
+
+C(coma) = {
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,X,_,
+ _,X,_,
+ X,_,_,
+ _,_,_,
+0};
+
+C(minus) = {
+ _,_,_,_,
+ _,_,_,_,
+ _,_,_,_,
+ X,X,X,X,
+ _,_,_,_,
+ _,_,_,_,
+ _,_,_,_,
+ _,_,_,_,
+0};
+
+C(dot) = {
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,X,_,
+ _,_,_,
+ _,_,_,
+0};
+
+C(slash) = {
+ _,_,X,
+ _,_,X,
+ _,X,_,
+ _,X,_,
+ X,_,_,
+ X,_,_,
+ _,_,_,
+ _,_,_,
+0};
+
+C(lbracket) = {
+ X,X,
+ _,_,
+ X,_,
+ X,_,
+ X,_,
+ X,_,
+ X,X,
+ _,_,
+0};
+
+C(rbracket) = {
+ X,X,
+ _,X,
+ _,X,
+ _,X,
+ _,X,
+ _,X,
+ X,X,
+ _,_,
+0};
+
+C(bkslash) = {
+ X,_,_,
+ X,_,_,
+ _,X,_,
+ _,X,_,
+ _,_,X,
+ _,_,X,
+ _,_,_,
+ _,_,_,
+0};
+
+C(hat) = {
+ _,X,_,
+ X,_,X,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+0};
+
+C(underscore) = {
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ X,X,X,
+ _,_,_,
+ _,_,_,
+0};
+
struct font font8 = { 8, {
glyph_error, glyph_error, glyph_error, glyph_erro…
glyph_error, glyph_error, glyph_error, glyph_erro…
@@ -716,10 +936,10 @@ struct font font8 = { 8, {
glyph_error, glyph_error, glyph_error, glyph_erro…
glyph_error, glyph_error, glyph_error, glyph_erro…
glyph_error, glyph_error, glyph_error, glyph_erro…
- glyph_space, glyph_error, glyph_error, glyph_erro…
- glyph_error, glyph_error, glyph_error, glyph_erro…
- glyph_error, glyph_error, glyph_error, glyph_erro…
- glyph_error, glyph_error, glyph_error, glyph_erro…
+ glyph_space, glyph_exclam, glyph_dquote, glyph_ha…
+ glyph_dollar, glyph_percent, glyph_amp, glyph_squ…
+ glyph_lparen, glyph_rparen, glyph_star, glyph_plu…
+ glyph_coma, glyph_minus, glyph_dot, glyph_slash,
glyph_0, glyph_1, glyph_2, glyph_3,
glyph_4, glyph_5, glyph_6, glyph_7,
glyph_8, glyph_9, glyph_error, glyph_error,
@@ -730,8 +950,8 @@ struct font font8 = { 8, {
glyph_L, glyph_M, glyph_N, glyph_O,
glyph_P, glyph_Q, glyph_R, glyph_S,
glyph_T, glyph_U, glyph_V, glyph_W,
- glyph_X, glyph_Y, glyph_Z, glyph_error,
- glyph_error, glyph_error, glyph_error, glyph_erro…
+ glyph_X, glyph_Y, glyph_Z, glyph_lbracket,
+ glyph_bkslash, glyph_rbracket, glyph_hat, glyph_u…
glyph_error, glyph_a, glyph_b, glyph_c,
glyph_d, glyph_e, glyph_f, glyph_g,
glyph_h, glyph_i, glyph_j, glyph_k,
diff --git a/src/tool.c b/src/tool.c
@@ -46,35 +46,12 @@ strsep(char **strp, const char *sep)
}
void
-estriplf(char *line)
+strchomp(char *s)
{
- char *lf;
+ char *x = s + strlen(s);
- if ((lf = strchr(line, '\n')) == NULL || lf[1] != '\0')
- fputs("invalid input\n", stderr), exit(1);
- *lf = '\0';
-}
-
-double
-eatof(char *str)
-{
- char *s;
-
- for (s = str; *s != '\0'; s++)
- if (!isdigit(*s) && *s != '-' && *s != '.')
- fputs("invalid float format\n", stderr), exit(1);
- return atof(str);
-}
-
-long
-eatol(char *str)
-{
- char *s;
-
- for (s = str; *s != '\0'; s++)
- if (!isdigit(*s) && *s != '-')
- fputs("invalid number format\n", stderr), exit(1);
- return atol(str);
+ while (--x >= s && (*x == '\r' || *x == '\n'))
+ *x = '\0';
}
/*
diff --git a/src/tool.h b/src/tool.h
@@ -12,9 +12,7 @@
size_t strlcpy (char *, const char *, si…
void put3utf (long);
char * strsep (char **, const char *);
-void estriplf (char *);
-double eatof (char *);
-long eatol (char *);
+void strchomp (char *);
int humanize (char *, double);
#endif
diff --git a/test.csv b/test.csv
@@ -109,6 +109,6 @@ epoch,shortterm,midterm,longterm
1525294298,0.278198,0.260864,0.242920
1525295198,0.192505,0.183716,0.200806
1525296098,0.109375,0.185669,0.207153
-1525296098,-0.109375,0.185669,0.207153
+1525296098,0.109375,0.185669,0.207153
1525296998,0.137085,0.126221,0.138184
1525297898,0.077881,0.092529,0.109619
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.