SMOLNET PORTAL home about changes
irename ploot-ff to ploot-farbfeld, to make it obvious what -ff is - ploot - simple plotting tools	Err	bitreich.org	70
hgit clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot	URL:git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot	bitreich.org	70
1Log	/scm/ploot/log.gph	bitreich.org	70
1Files	/scm/ploot/files.gph	bitreich.org	70
1Refs	/scm/ploot/refs.gph	bitreich.org	70
1Tags	/scm/ploot/tag	bitreich.org	70
1README	/scm/ploot/file/README.md.gph	bitreich.org	70
1LICENSE	/scm/ploot/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit ffb9fc9caeaf3a79f5ab4c7fcbbf4994c1037582	/scm/ploot/commit/ffb9fc9caeaf3a79f5ab4c7fcbbf4994c1037582.gph	bitreich.org	70
1parent 1c1a69494de95f4f5a3a439a16fac98026e2aa09	/scm/ploot/commit/1c1a69494de95f4f5a3a439a16fac98026e2aa09.gph	bitreich.org	70
hAuthor: Josuah Demangeon <me@josuah.net>	URL:mailto:me@josuah.net	bitreich.org	70
iDate:   Sat, 15 Feb 2020 14:52:07 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
irename ploot-ff to ploot-farbfeld, to make it obvious what -ff is	Err	bitreich.org	70
i	Err	bitreich.org	70
iWhile very good, not everybody knows the farbfeld file format (as	Err	bitreich.org	70
iopposed to png), and if ploot support multiple output format, it	Err	bitreich.org	70
iwill end-up hard to know what extension maps to what.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M .gitignore                          |       2 +-	Err	bitreich.org	70
i  M Makefile                            |       4 ++--	Err	bitreich.org	70
i  M README                              |      10 +++++-----	Err	bitreich.org	70
i  M ploot-csv.7                         |       2 +-	Err	bitreich.org	70
i  A ploot-farbfeld.1                    |     103 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A ploot-farbfeld.c                    |     467 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  M ploot-feed.1                        |       2 +-	Err	bitreich.org	70
i  D ploot-ff.1                          |     103 -------------------------------	Err	bitreich.org	70
i  D ploot-ff.c                          |     463 -------------------------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i9 files changed, 580 insertions(+), 576 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/.gitignore b/.gitignore	/scm/ploot/file/.gitignore.gph	bitreich.org	70
i@@ -1,4 +1,4 @@	Err	bitreich.org	70
i *.o	Err	bitreich.org	70
i *.core	Err	bitreich.org	70
i-ploot-ff	Err	bitreich.org	70
i+ploot-farbfeld	Err	bitreich.org	70
i ploot-feed	Err	bitreich.org	70
1diff --git a/Makefile b/Makefile	/scm/ploot/file/Makefile.gph	bitreich.org	70
i@@ -1,7 +1,7 @@	Err	bitreich.org	70
i CFLAGS        = -Wall -Wextra -std=c99 -pedantic -fPIC \	Err	bitreich.org	70
i                 -D_POSIX_C_SOURCE=200809L	Err	bitreich.org	70
i LFLAGS        = -static	Err	bitreich.org	70
i-BIN        = ploot-ff ploot-feed	Err	bitreich.org	70
i+BIN        = ploot-farbfeld ploot-feed ploot-braille	Err	bitreich.org	70
i LIB        = -lm	Err	bitreich.org	70
i MANDIR        = $(PREFIX)/share/man	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -15,7 +15,7 @@ ${BIN}: ${SRC:.c=.o} ${BIN:=.o}	Err	bitreich.org	70
i install: $(BIN)	Err	bitreich.org	70
i         mkdir -p ${PREFIX}/bin $(MANDIR)/man1 $(MANDIR)/man7	Err	bitreich.org	70
i         cp $(BIN) ${PREFIX}/bin	Err	bitreich.org	70
i-        cp ploot-ff.1 ploot-feed.1 $(MANDIR)/man1	Err	bitreich.org	70
i+        cp ploot-farbfeld.1 ploot-feed.1 $(MANDIR)/man1	Err	bitreich.org	70
i         cp ploot-csv.7 $(MANDIR)/man7	Err	bitreich.org	70
i 	Err	bitreich.org	70
i clean:	Err	bitreich.org	70
1diff --git a/README b/README	/scm/ploot/file/README.gph	bitreich.org	70
i@@ -1,11 +1,11 @@	Err	bitreich.org	70
i ploot	Err	bitreich.org	70
i-================================================================================	Err	bitreich.org	70
i+=====	Err	bitreich.org	70
i 	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-ploot-ff	Err	bitreich.org	70
i---------------------------------------------------------------------------------	Err	bitreich.org	70
i+ploot-farbfeld	Err	bitreich.org	70
i+--------------	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-*ploot-ff* reads collectd-style comma separated values (CSV) and produces a plot	Err	bitreich.org	70
i+*ploot-farbfeld* reads collectd-style comma separated values (CSV) and produces a plot	Err	bitreich.org	70
i in the farbfeld [1] image format (pipe it to ff2png). It is an alternative to	Err	bitreich.org	70
i RRDtool [2].	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -18,7 +18,7 @@ name of the curves.	Err	bitreich.org	70
i 	Err	bitreich.org	70
i 	Err	bitreich.org	70
i ploot-feed	Err	bitreich.org	70
i---------------------------------------------------------------------------------	Err	bitreich.org	70
i+----------	Err	bitreich.org	70
i 	Err	bitreich.org	70
i *ploot-feed* also reads collectd-style comma separated values (CSV) but produces	Err	bitreich.org	70
i a plain text continuous waterfall chart for live monitoring in the terminal. it	Err	bitreich.org	70
1diff --git a/ploot-csv.7 b/ploot-csv.7	/scm/ploot/file/ploot-csv.7.gph	bitreich.org	70
i@@ -62,7 +62,7 @@ The remaining columns are values parsed as floating point numbers by	Err	bitreich.org	70
i .Sh SEE ALSO	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .Xr ploot-feed 1 ,	Err	bitreich.org	70
i-.Xr ploot-ff 1	Err	bitreich.org	70
i+.Xr ploot-farbfeld 1	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .Sh HISTORY	Err	bitreich.org	70
i .	Err	bitreich.org	70
1diff --git a/ploot-farbfeld.1 b/ploot-farbfeld.1	/scm/ploot/file/ploot-farbfeld.1.gph	bitreich.org	70
i@@ -0,0 +1,103 @@	Err	bitreich.org	70
i+.Dd $Mdocdate: August 08 2018$	Err	bitreich.org	70
i+.Dt PLOOT-FF 1	Err	bitreich.org	70
i+.Os	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh NAME	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm ploot-farbfeld	Err	bitreich.org	70
i+.Nd produce a farbfeld image of csv input	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh SYNOPSIS	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm ploot-farbfeld	Err	bitreich.org	70
i+.Op Fl t Ar title	Err	bitreich.org	70
i+.Op Fl u Ar unit	Err	bitreich.org	70
i+.Ar colors...	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh DESCRIPTION	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+The	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+utility plots an image in the farbfeld format out of csv values coming from stdin.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Bl -tag -width 6n	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It Fl t	Err	bitreich.org	70
i+Set the title of the plot printed at the top left corner.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It Fl u	Err	bitreich.org	70
i+Set the unit description printed at the top right corner.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.It Ar colors	Err	bitreich.org	70
i+List of argument that specify the color for each column.	Err	bitreich.org	70
i+If the input csv have 5 columns in addition of the timestamp, there must	Err	bitreich.org	70
i+be 5 maxval arguments.	Err	bitreich.org	70
i+color_ts available are red, orange, yellow, green, cyan and blue.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.El	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+The input format is documented in the	Err	bitreich.org	70
i+.Xr ploot-csv 7	Err	bitreich.org	70
i+manual page.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh EXIT STATUS	Err	bitreich.org	70
i+.Ex -std	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh EXAMPLES	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Bd -literal -offset indent	Err	bitreich.org	70
i+$ cat <<EOF >sample.txt	Err	bitreich.org	70
i+epoch,used_memory,free_memory	Err	bitreich.org	70
i+1533752053,160,401	Err	bitreich.org	70
i+1533752054,180,381	Err	bitreich.org	70
i+1533752055,301,260	Err	bitreich.org	70
i+1533752056,303,258	Err	bitreich.org	70
i+EOF	Err	bitreich.org	70
i+$ ploot-farbfeld -t demo -u MB red yellow <sample.txt	Err	bitreich.org	70
i+.Ed	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh SEE ALSO	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Xr ploot-farbfeld 1 ,	Err	bitreich.org	70
i+.Xr ploot-csv 7	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+The	Err	bitreich.org	70
i+.Xr farbfeld 7	Err	bitreich.org	70
i+image format:	Err	bitreich.org	70
i+.Lk https://tools.suckless.org/farbfeld/	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh HISTORY	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+earned its author a bitreich.org medal of misspelled program name.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+was written at	Err	bitreich.org	70
i+.Lk gopher://bitreich.org/1/scm/ploot/ "Bitreich"	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh AUTHORS	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.An Josuah Demangeon	Err	bitreich.org	70
i+.Aq Mt mail@josuah.net	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Sh BUGS	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+does not make any math on the input: if the timestamps are not at regular	Err	bitreich.org	70
i+interval, ploot will still print one output line every 4 lines read,	Err	bitreich.org	70
i+regardless of the time interval.	Err	bitreich.org	70
i+.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+However, the timestamp printed on the left is always exact.	Err	bitreich.org	70
1diff --git a/ploot-farbfeld.c b/ploot-farbfeld.c	/scm/ploot/file/ploot-farbfeld.c.gph	bitreich.org	70
i@@ -0,0 +1,467 @@	Err	bitreich.org	70
i+#include <assert.h>	Err	bitreich.org	70
i+#include <ctype.h>	Err	bitreich.org	70
i+#include <fcntl.h>	Err	bitreich.org	70
i+#include <limits.h>	Err	bitreich.org	70
i+#include <stdint.h>	Err	bitreich.org	70
i+#include <stdio.h>	Err	bitreich.org	70
i+#include <stdlib.h>	Err	bitreich.org	70
i+#include <string.h>	Err	bitreich.org	70
i+#include <time.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include <arpa/inet.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include <math.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include "arg.h"	Err	bitreich.org	70
i+#include "log.h"	Err	bitreich.org	70
i+#include "def.h"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define MARGIN                4	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define IMAGE_H                (TITLE_H + PLOT_H + XLABEL_H)	Err	bitreich.org	70
i+#define IMAGE_W                (YLABEL_W + PLOT_W + LEGEND_W)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define TITLE_X                (YLABEL_W)	Err	bitreich.org	70
i+#define TITLE_Y                (IMAGE_H - TITLE_H)	Err	bitreich.org	70
i+#define TITLE_H                ((font)->height * 2)	Err	bitreich.org	70
i+#define TITLE_W                (PLOT_W)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define YLABEL_X        (0)	Err	bitreich.org	70
i+#define YLABEL_Y        (PLOT_Y)	Err	bitreich.org	70
i+#define YLABEL_H        (PLOT_H)	Err	bitreich.org	70
i+#define YLABEL_W        (40 + MARGIN)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define XLABEL_X        (PLOT_X)	Err	bitreich.org	70
i+#define XLABEL_Y        (0)	Err	bitreich.org	70
i+#define XLABEL_H        ((font)->height * 2)	Err	bitreich.org	70
i+#define XLABEL_W        (PLOT_W)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define PLOT_X                (YLABEL_W)	Err	bitreich.org	70
i+#define PLOT_Y                (XLABEL_H)	Err	bitreich.org	70
i+#define PLOT_W                (700)	Err	bitreich.org	70
i+#define PLOT_H                (160)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define LEGEND_X        (IMAGE_W - LEGEND_W)	Err	bitreich.org	70
i+#define LEGEND_Y        (TITLE_H + PLOT_H - (font)->height)	Err	bitreich.org	70
i+#define LEGEND_W        (100)	Err	bitreich.org	70
i+#define LEGEND_H        (PLOT_H)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+struct color {	Err	bitreich.org	70
i+        uint16_t        red;	Err	bitreich.org	70
i+        uint16_t        green;	Err	bitreich.org	70
i+        uint16_t        blue;	Err	bitreich.org	70
i+        uint16_t        alpha;	Err	bitreich.org	70
i+};	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+struct cname {	Err	bitreich.org	70
i+        char                *name;	Err	bitreich.org	70
i+        struct color        color;	Err	bitreich.org	70
i+};	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+struct canvas {	Err	bitreich.org	70
i+        int                w;                /* width */	Err	bitreich.org	70
i+        int                h;                /* height */	Err	bitreich.org	70
i+        int                x;                /* x offset */	Err	bitreich.org	70
i+        int                y;                /* y offset */	Err	bitreich.org	70
i+        struct color        *buf;	Err	bitreich.org	70
i+};	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+char const                *arg0;	Err	bitreich.org	70
i+static char                *tflag        = "";	Err	bitreich.org	70
i+static char                *uflag        = "";	Err	bitreich.org	70
i+static struct font        *font = &font13;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static struct cname cname[] = {	Err	bitreich.org	70
i+        /* name       red     green   blue    alpha */	Err	bitreich.org	70
i+        { "red",    { 0xffff, 0x4444, 0x4444, 0xffff } },	Err	bitreich.org	70
i+        { "orange", { 0xffff, 0x9999, 0x4444, 0xffff } },	Err	bitreich.org	70
i+        { "yellow", { 0xffff, 0xffff, 0x4444, 0xffff } },	Err	bitreich.org	70
i+        { "green",  { 0x2222, 0xffff, 0x5555, 0xffff } },	Err	bitreich.org	70
i+        { "cyan",   { 0x0000, 0xffff, 0xdddd, 0xffff } },	Err	bitreich.org	70
i+        { "blue",   { 0x2222, 0x9999, 0xffff, 0xffff } },	Err	bitreich.org	70
i+        { NULL, { 0, 0, 0, 0 } }	Err	bitreich.org	70
i+};	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Convert (x,y) coordinates to (row,col) for printing into the buffer.	Err	bitreich.org	70
i+ * The buffer only contain one number, so the coordinate is a single integer:	Err	bitreich.org	70
i+ *        width * y + y.	Err	bitreich.org	70
i+ * The coordinates are shifted by offx and offy to permit relative coordinates.	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ * The convention used:                                      y	Err	bitreich.org	70
i+ * - (0,0) is at the lower left corner of the canvas.        |	Err	bitreich.org	70
i+ * - (0,1) is above it.                                      +--x	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_pixel(struct canvas *can, struct color *color,	Err	bitreich.org	70
i+        int x, int y)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        x += can->x;	Err	bitreich.org	70
i+        y += can->y;	Err	bitreich.org	70
i+        if (x < 0 || x >= can->w || y < 0 || y >= can->h)	Err	bitreich.org	70
i+                return;	Err	bitreich.org	70
i+        memcpy(can->buf + can->w * (can->h - 1 - y) + x, color, sizeof(*can->buf));	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_rectangle(struct canvas *can, struct color *color,	Err	bitreich.org	70
i+        int y1, int x1,	Err	bitreich.org	70
i+        int y2, int x2)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        int                x, y, ymin, xmin, ymax, xmax;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        ymin = MIN(y1, y2); ymax = MAX(y1, y2);	Err	bitreich.org	70
i+        xmin = MIN(x1, x2); xmax = MAX(x1, x2);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (y = ymin; y <= ymax; y++)	Err	bitreich.org	70
i+                for (x = xmin; x <= xmax; x++)	Err	bitreich.org	70
i+                        ff_pixel(can, color, x, y);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * From Bresenham's line algorithm and dcat's tplot.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_line(struct canvas *can, struct color *color,	Err	bitreich.org	70
i+        int x0, int y0,	Err	bitreich.org	70
i+        int x1, int y1)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        int                dy, dx, sy, sx, err, e;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        sx = x0 < x1 ? 1 : -1;	Err	bitreich.org	70
i+        sy = y0 < y1 ? 1 : -1;	Err	bitreich.org	70
i+        dx = abs(x1 - x0);	Err	bitreich.org	70
i+        dy = abs(y1 - y0);	Err	bitreich.org	70
i+        err = (dy > dx ? dy : -dx) / 2;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (;;) {	Err	bitreich.org	70
i+                ff_pixel(can, color, x0, y0);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                if (y0 == y1 && x0 == x1)	Err	bitreich.org	70
i+                        break;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                e = err;	Err	bitreich.org	70
i+                if (e > -dy) {	Err	bitreich.org	70
i+                        y0 += sy;	Err	bitreich.org	70
i+                        err -= dx;	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+                if (e < dx) {	Err	bitreich.org	70
i+                        x0 += sx;	Err	bitreich.org	70
i+                        err += dy;	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Draw a coloured glyph from font f centered on y.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i+ff_char(struct canvas *can, struct color *color, char c,	Err	bitreich.org	70
i+        int x, int y)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        int                yf, xf, wf;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (c & 0x80)	Err	bitreich.org	70
i+                c = '\0';	Err	bitreich.org	70
i+        y -= font->height / 2;	Err	bitreich.org	70
i+        wf = font_width(font, c);	Err	bitreich.org	70
i+        for (xf = 0; xf < wf; xf++)	Err	bitreich.org	70
i+                for (yf = 0; yf < font->height; yf++)	Err	bitreich.org	70
i+                        if (font->glyph[(int)c][wf * (font->height - yf) + xf] == 3)	Err	bitreich.org	70
i+                                ff_pixel(can, color, x + xf, y + yf);	Err	bitreich.org	70
i+        return wf + 1;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Draw a left aligned string without wrapping it.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+static size_t	Err	bitreich.org	70
i+ff_text_left(struct canvas *can, struct color *color, char *s,	Err	bitreich.org	70
i+        int x, int y)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        for (; *s != '\0'; s++)	Err	bitreich.org	70
i+                x += ff_char(can, color, *s, x, y);	Err	bitreich.org	70
i+        return x;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Draw a center aligned string without wrapping it.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+static size_t	Err	bitreich.org	70
i+ff_text_center(struct canvas *can, struct color *color, char *s,	Err	bitreich.org	70
i+        int x, int y)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        x -= font_strlen(font, s) / 2;	Err	bitreich.org	70
i+        return ff_text_left(can, color, s, x, y);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Draw a right aligned string without wrapping it.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+static size_t	Err	bitreich.org	70
i+ff_text_right(struct canvas *can, struct color *color, char *s,	Err	bitreich.org	70
i+        int x, int y)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        x -= font_strlen(font, s);	Err	bitreich.org	70
i+        return ff_text_left(can, color, s, x, y);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_print(struct canvas *can)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        uint32_t                w, h;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        w = htonl(can->w);	Err	bitreich.org	70
i+        h = htonl(can->h);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        fputs("farbfeld", stdout);	Err	bitreich.org	70
i+        fwrite(&w, sizeof(w), 1, stdout);	Err	bitreich.org	70
i+        fwrite(&h, sizeof(h), 1, stdout);	Err	bitreich.org	70
i+        fwrite(can->buf, can->w * can->h, sizeof(*can->buf), stdout);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i+ff_t2x(time_t t, time_t tmin, time_t tmax)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        if (tmin == tmax)	Err	bitreich.org	70
i+                return PLOT_W;	Err	bitreich.org	70
i+        return (t - tmin) * PLOT_W / (tmax - tmin);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i+ff_v2y(double v, double vmin, double vmax)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        if (vmin == vmax)	Err	bitreich.org	70
i+                return PLOT_H;	Err	bitreich.org	70
i+        return (v - vmin) * PLOT_H / (vmax - vmin);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_xaxis(struct canvas *can, struct color *label, struct color *grid,	Err	bitreich.org	70
i+        time_t tmin, time_t tmax, time_t tstep)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        time_t                t;	Err	bitreich.org	70
i+        int                x;	Err	bitreich.org	70
i+        char                str[sizeof("MM/DD HH/MM")], *fmt;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (tstep < 3600 * 12)	Err	bitreich.org	70
i+                fmt = "%H:%M:%S";	Err	bitreich.org	70
i+        else if (tstep < 3600 * 24)	Err	bitreich.org	70
i+                fmt = "%m/%d %H:%M";	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i+                fmt = "%X/%m/%d";	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (t = tmax - tmax % tstep; t >= tmin; t -= tstep) {	Err	bitreich.org	70
i+                x = ff_t2x(t, tmin, tmax);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                ff_line(can, grid,	Err	bitreich.org	70
i+                        x, XLABEL_H,	Err	bitreich.org	70
i+                        x, XLABEL_H + PLOT_H);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                strftime(str, sizeof(str), fmt, localtime(&t));	Err	bitreich.org	70
i+                ff_text_center(can, label, str,	Err	bitreich.org	70
i+                        x, XLABEL_H / 2);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_yaxis(struct canvas *can, struct color *label, struct color *grid,	Err	bitreich.org	70
i+        double vmin, double vmax, double vstep)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        double                v;	Err	bitreich.org	70
i+        int                y;	Err	bitreich.org	70
i+        char                str[8 + 1];	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (v = vmax - fmod(vmax, vstep); v >= vmin; v -= vstep) {	Err	bitreich.org	70
i+                y = ff_v2y(v, vmin, vmax);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                ff_line(can, grid,	Err	bitreich.org	70
i+                        YLABEL_W, y,	Err	bitreich.org	70
i+                        YLABEL_W + PLOT_W, y);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                humanize(str, v);	Err	bitreich.org	70
i+                ff_text_right(can, label, str,	Err	bitreich.org	70
i+                        YLABEL_W - MARGIN, y);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_title(struct canvas *can,	Err	bitreich.org	70
i+        struct color *ct, char *title,	Err	bitreich.org	70
i+        struct color *cu, char *unit)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        ff_text_left(can, ct, title, TITLE_H / 2, 0);	Err	bitreich.org	70
i+        ff_text_right(can, cu, unit, TITLE_H / 2, TITLE_W);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_plot(struct canvas *can, struct vlist *vl, struct color *color,	Err	bitreich.org	70
i+        double vmin, double vmax,	Err	bitreich.org	70
i+        time_t tmin, time_t tmax)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        time_t                *tp;	Err	bitreich.org	70
i+        double                *vp;	Err	bitreich.org	70
i+        int                x, y, n, ylast, xlast, first;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        first = 1;	Err	bitreich.org	70
i+        for (tp = vl->t, vp = vl->v, n = vl->n; n > 0; n--, vp++, tp++) {	Err	bitreich.org	70
i+                y = ff_v2y(*vp, vmin, vmax);	Err	bitreich.org	70
i+                x = ff_t2x(*tp, tmin, tmax);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                if (!first)	Err	bitreich.org	70
i+                        ff_line(can, color, xlast, ylast, x, y);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                ylast = y;	Err	bitreich.org	70
i+                xlast = x;	Err	bitreich.org	70
i+                first = 0;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_values(struct canvas *can, struct vlist *vl, struct color **cl, size_t ncol,	Err	bitreich.org	70
i+        time_t tmin, time_t tmax,	Err	bitreich.org	70
i+        double vmin, double vmax)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        for (; ncol > 0; ncol--, vl++, cl++)	Err	bitreich.org	70
i+                ff_plot(can, vl, *cl, vmin, vmax, tmin, tmax);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff_legend(struct canvas *can, struct color *fg, struct vlist *vl, struct color **cl, size_t ncol)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        size_t                x, y;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (; ncol > 0; ncol--, vl++, cl++) {	Err	bitreich.org	70
i+                y = -(ncol - 1) * (font->height + MARGIN);	Err	bitreich.org	70
i+                x = MARGIN * 2;	Err	bitreich.org	70
i+                x = ff_text_left(can, *cl, "-", x, y) + MARGIN;	Err	bitreich.org	70
i+                x = ff_text_left(can, fg, vl->label, x, y);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Plot the 'n' values list of the 'v' arrax with title 'name' and	Err	bitreich.org	70
i+ * 'units' label.	Err	bitreich.org	70
i+ *	Err	bitreich.org	70
i+ *               Title       (units)	Err	bitreich.org	70
i+ *             x ^                    Legend	Err	bitreich.org	70
i+ *         label | - + - + - + - + -   ....	Err	bitreich.org	70
i+ *          here | - + - + - + - + -   ....	Err	bitreich.org	70
i+ *               +---+---+---+---+-->	Err	bitreich.org	70
i+ *                x label here        	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+ff(struct vlist *vl, struct color **cl, size_t ncol, char *name, char *units)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        struct canvas        can = { IMAGE_W, IMAGE_H, 0, 0, NULL };	Err	bitreich.org	70
i+        struct color        plot_bg = { 0x2222, 0x2222, 0x2222, 0xffff };	Err	bitreich.org	70
i+        struct color        grid_bg = { 0x2929, 0x2929, 0x2929, 0xffff };	Err	bitreich.org	70
i+        struct color        grid_fg = { 0x3737, 0x3737, 0x3737, 0xffff };	Err	bitreich.org	70
i+        struct color        label_fg = { 0x8888, 0x8888, 0x8888, 0xffff };	Err	bitreich.org	70
i+        struct color        title_fg = { 0xdddd, 0xdddd, 0xdddd, 0xffff };	Err	bitreich.org	70
i+        double                vmin, vmax, vstep;	Err	bitreich.org	70
i+        time_t                tmin, tmax, tstep;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        scale(vl, ncol, &tmin, &tmax, &tstep, &vmin, &vmax, &vstep);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        assert(can.buf = calloc(IMAGE_H * IMAGE_W, sizeof *can.buf));	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        can.y = 0;	Err	bitreich.org	70
i+        can.x = 0;	Err	bitreich.org	70
i+        ff_rectangle(&can, &plot_bg, 0, 0, IMAGE_H - 1, IMAGE_W - 1);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        can.x = PLOT_X;	Err	bitreich.org	70
i+        can.y = PLOT_Y;	Err	bitreich.org	70
i+        ff_rectangle(&can, &grid_bg, 0, 0, PLOT_H, PLOT_W);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        can.x = XLABEL_X;	Err	bitreich.org	70
i+        can.y = XLABEL_Y;	Err	bitreich.org	70
i+        ff_xaxis(&can, &label_fg, &grid_fg, tmin, tmax, tstep);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        can.x = YLABEL_X;	Err	bitreich.org	70
i+        can.y = YLABEL_Y;	Err	bitreich.org	70
i+        ff_yaxis(&can, &label_fg, &grid_fg, vmin, vmax, vstep);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        can.x = TITLE_X;	Err	bitreich.org	70
i+        can.y = TITLE_Y;	Err	bitreich.org	70
i+        ff_title(&can, &title_fg, name, &label_fg, units);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        can.x = PLOT_X;	Err	bitreich.org	70
i+        can.y = PLOT_Y;	Err	bitreich.org	70
i+        ff_values(&can, vl, cl, ncol, tmin, tmax, vmin, vmax);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        can.x = LEGEND_X;	Err	bitreich.org	70
i+        can.y = LEGEND_Y;	Err	bitreich.org	70
i+        ff_legend(&can, &label_fg, vl, cl, ncol);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        ff_print(&can);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static struct color *	Err	bitreich.org	70
i+name_to_color(char *name)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        struct cname        *cn;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (cn = cname; cn->name != NULL; cn++)	Err	bitreich.org	70
i+                if (strcmp(name, cn->name) == 0)	Err	bitreich.org	70
i+                        return &cn->color;	Err	bitreich.org	70
i+        return NULL;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+argv_to_color(struct color **cl, char **argv)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        for (; *argv != NULL; cl++, argv++)	Err	bitreich.org	70
i+                if ((*cl = name_to_color(*argv)) == NULL)	Err	bitreich.org	70
i+                        err(1, "unknown color name: %s", *argv);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+usage(void)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        fprintf(stderr, "usage: %s [-t title] [-u unit] {", arg0);	Err	bitreich.org	70
i+        fputs(cname->name, stderr);	Err	bitreich.org	70
i+        for (struct cname *cn = cname + 1; cn->name != NULL; cn++)	Err	bitreich.org	70
i+                fprintf(stderr, ",%s", cn->name);	Err	bitreich.org	70
i+        fputs("}...\n", stderr);	Err	bitreich.org	70
i+        exit(1);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+int	Err	bitreich.org	70
i+main(int argc, char **argv)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        struct vlist        *vl;	Err	bitreich.org	70
i+        struct color        **cl;	Err	bitreich.org	70
i+        char                labels[LINE_MAX];	Err	bitreich.org	70
i+        size_t                ncol;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        ARG_SWITCH(argc, argv) {	Err	bitreich.org	70
i+        case 't':	Err	bitreich.org	70
i+                tflag = ARG;	Err	bitreich.org	70
i+                break;	Err	bitreich.org	70
i+        case 'u':	Err	bitreich.org	70
i+                uflag = ARG;	Err	bitreich.org	70
i+                break;	Err	bitreich.org	70
i+        default:	Err	bitreich.org	70
i+                usage();	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (argc == 0)	Err	bitreich.org	70
i+                usage();	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        assert(cl = calloc(argc, sizeof(*cl)));	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        csv_labels(stdin, labels, &vl, &ncol);	Err	bitreich.org	70
i+        if (ncol > (size_t)argc)	Err	bitreich.org	70
i+                err(1, "too many columns or not enough arguments");	Err	bitreich.org	70
i+        else if (ncol < (size_t)argc)	Err	bitreich.org	70
i+                err(1, "too many arguments or not enough columns");	Err	bitreich.org	70
i+        csv_values(stdin, vl, ncol);	Err	bitreich.org	70
i+        argv_to_color(cl, argv);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        ff(vl, cl, argc, tflag, uflag);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        free(vl);	Err	bitreich.org	70
i+        free(cl);	Err	bitreich.org	70
i+        return 0;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/ploot-feed.1 b/ploot-feed.1	/scm/ploot/file/ploot-feed.1.gph	bitreich.org	70
i@@ -60,7 +60,7 @@ $ ploot-feed -w 80 1 1 <sample.txt	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .Sh SEE ALSO	Err	bitreich.org	70
i .	Err	bitreich.org	70
i-.Xr ploot-ff 1 ,	Err	bitreich.org	70
i+.Xr ploot-farbfeld 1 ,	Err	bitreich.org	70
i .Xr ploot-format 7	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .	Err	bitreich.org	70
1diff --git a/ploot-ff.1 b/ploot-ff.1	/scm/ploot/file/ploot-ff.1.gph	bitreich.org	70
i@@ -1,103 +0,0 @@	Err	bitreich.org	70
i-.Dd $Mdocdate: August 08 2018$	Err	bitreich.org	70
i-.Dt PLOOT-FF 1	Err	bitreich.org	70
i-.Os	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh NAME	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Nm ploot-ff	Err	bitreich.org	70
i-.Nd produce a farbfeld image of csv input	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh SYNOPSIS	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Nm ploot-ff	Err	bitreich.org	70
i-.Op Fl t Ar title	Err	bitreich.org	70
i-.Op Fl u Ar unit	Err	bitreich.org	70
i-.Ar colors...	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh DESCRIPTION	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-The	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-utility plots an image in the farbfeld format out of csv values coming from stdin.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Bl -tag -width 6n	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.It Fl t	Err	bitreich.org	70
i-Set the title of the plot printed at the top left corner.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.It Fl u	Err	bitreich.org	70
i-Set the unit description printed at the top right corner.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.It Ar colors	Err	bitreich.org	70
i-List of argument that specify the color for each column.	Err	bitreich.org	70
i-If the input csv have 5 columns in addition of the timestamp, there must	Err	bitreich.org	70
i-be 5 maxval arguments.	Err	bitreich.org	70
i-color_ts available are red, orange, yellow, green, cyan and blue.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.El	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-The input format is documented in the	Err	bitreich.org	70
i-.Xr ploot-csv 7	Err	bitreich.org	70
i-manual page.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh EXIT STATUS	Err	bitreich.org	70
i-.Ex -std	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh EXAMPLES	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Bd -literal -offset indent	Err	bitreich.org	70
i-$ cat <<EOF >sample.txt	Err	bitreich.org	70
i-epoch,used_memory,free_memory	Err	bitreich.org	70
i-1533752053,160,401	Err	bitreich.org	70
i-1533752054,180,381	Err	bitreich.org	70
i-1533752055,301,260	Err	bitreich.org	70
i-1533752056,303,258	Err	bitreich.org	70
i-EOF	Err	bitreich.org	70
i-$ ploot-ff -t demo -u MB red yellow <sample.txt	Err	bitreich.org	70
i-.Ed	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh SEE ALSO	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Xr ploot-ff 1 ,	Err	bitreich.org	70
i-.Xr ploot-csv 7	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-The	Err	bitreich.org	70
i-.Xr farbfeld 7	Err	bitreich.org	70
i-image format:	Err	bitreich.org	70
i-.Lk https://tools.suckless.org/farbfeld/	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh HISTORY	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-earned its author a bitreich.org medal of misspelled program name.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-was written at	Err	bitreich.org	70
i-.Lk gopher://bitreich.org/1/scm/ploot/ "Bitreich"	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh AUTHORS	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.An Josuah Demangeon	Err	bitreich.org	70
i-.Aq Mt mail@josuah.net	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Sh BUGS	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-does not make any math on the input: if the timestamps are not at regular	Err	bitreich.org	70
i-interval, ploot will still print one output line every 4 lines read,	Err	bitreich.org	70
i-regardless of the time interval.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-However, the timestamp printed on the left is always exact.	Err	bitreich.org	70
1diff --git a/ploot-ff.c b/ploot-ff.c	/scm/ploot/file/ploot-ff.c.gph	bitreich.org	70
i@@ -1,463 +0,0 @@	Err	bitreich.org	70
i-#include <assert.h>	Err	bitreich.org	70
i-#include <ctype.h>	Err	bitreich.org	70
i-#include <fcntl.h>	Err	bitreich.org	70
i-#include <limits.h>	Err	bitreich.org	70
i-#include <stdint.h>	Err	bitreich.org	70
i-#include <stdio.h>	Err	bitreich.org	70
i-#include <stdlib.h>	Err	bitreich.org	70
i-#include <string.h>	Err	bitreich.org	70
i-#include <time.h>	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#include <arpa/inet.h>	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#include <math.h>	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#include "arg.h"	Err	bitreich.org	70
i-#include "log.h"	Err	bitreich.org	70
i-#include "def.h"	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#define MARGIN                4	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#define IMAGE_H                (TITLE_H + PLOT_H + XLABEL_H)	Err	bitreich.org	70
i-#define IMAGE_W                (YLABEL_W + PLOT_W + LEGEND_W)	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#define TITLE_X                (YLABEL_W)	Err	bitreich.org	70
i-#define TITLE_Y                (IMAGE_H - TITLE_H)	Err	bitreich.org	70
i-#define TITLE_H                ((font)->height * 2)	Err	bitreich.org	70
i-#define TITLE_W                (PLOT_W)	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#define YLABEL_X        (0)	Err	bitreich.org	70
i-#define YLABEL_Y        (PLOT_Y)	Err	bitreich.org	70
i-#define YLABEL_H        (PLOT_H)	Err	bitreich.org	70
i-#define YLABEL_W        (40 + MARGIN)	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#define XLABEL_X        (PLOT_X)	Err	bitreich.org	70
i-#define XLABEL_Y        (0)	Err	bitreich.org	70
i-#define XLABEL_H        ((font)->height * 2)	Err	bitreich.org	70
i-#define XLABEL_W        (PLOT_W)	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#define PLOT_X                (YLABEL_W)	Err	bitreich.org	70
i-#define PLOT_Y                (XLABEL_H)	Err	bitreich.org	70
i-#define PLOT_W                (700)	Err	bitreich.org	70
i-#define PLOT_H                (160)	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#define LEGEND_X        (IMAGE_W - LEGEND_W)	Err	bitreich.org	70
i-#define LEGEND_Y        (TITLE_H + PLOT_H - (font)->height)	Err	bitreich.org	70
i-#define LEGEND_W        (100)	Err	bitreich.org	70
i-#define LEGEND_H        (PLOT_H)	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-struct color {	Err	bitreich.org	70
i-        uint16_t        red;	Err	bitreich.org	70
i-        uint16_t        green;	Err	bitreich.org	70
i-        uint16_t        blue;	Err	bitreich.org	70
i-        uint16_t        alpha;	Err	bitreich.org	70
i-};	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-struct cname {	Err	bitreich.org	70
i-        char                *name;	Err	bitreich.org	70
i-        struct color        color;	Err	bitreich.org	70
i-};	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-struct canvas {	Err	bitreich.org	70
i-        int                w;                /* width */	Err	bitreich.org	70
i-        int                h;                /* height */	Err	bitreich.org	70
i-        int                x;                /* x offset */	Err	bitreich.org	70
i-        int                y;                /* y offset */	Err	bitreich.org	70
i-        struct color        *buf;	Err	bitreich.org	70
i-};	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-char const                *arg0;	Err	bitreich.org	70
i-static char                *tflag        = "";	Err	bitreich.org	70
i-static char                *uflag        = "";	Err	bitreich.org	70
i-static struct font        *font = &font13;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static struct cname cname[] = {	Err	bitreich.org	70
i-        /* name       red     green   blue    alpha */	Err	bitreich.org	70
i-        { "red",    { 0xffff, 0x4444, 0x4444, 0xffff } },	Err	bitreich.org	70
i-        { "orange", { 0xffff, 0x9999, 0x4444, 0xffff } },	Err	bitreich.org	70
i-        { "yellow", { 0xffff, 0xffff, 0x4444, 0xffff } },	Err	bitreich.org	70
i-        { "green",  { 0x2222, 0xffff, 0x5555, 0xffff } },	Err	bitreich.org	70
i-        { "cyan",   { 0x0000, 0xffff, 0xdddd, 0xffff } },	Err	bitreich.org	70
i-        { "blue",   { 0x2222, 0x9999, 0xffff, 0xffff } },	Err	bitreich.org	70
i-        { NULL, { 0, 0, 0, 0 } }	Err	bitreich.org	70
i-};	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * Convert (x,y) coordinates to (row,col) for printing into the buffer.	Err	bitreich.org	70
i- * The buffer only contain one number, so the coordinate is a single integer:	Err	bitreich.org	70
i- *        width * y + y.	Err	bitreich.org	70
i- * The coordinates are shifted by offx and offy to permit relative coordinates.	Err	bitreich.org	70
i- *	Err	bitreich.org	70
i- * The convention used:                                      y	Err	bitreich.org	70
i- * - (0,0) is at the lower left corner of the canvas.        |	Err	bitreich.org	70
i- * - (0,1) is above it.                                      +--x	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_pixel(struct canvas *can, struct color *color,	Err	bitreich.org	70
i-        int x, int y)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        x += can->x;	Err	bitreich.org	70
i-        y += can->y;	Err	bitreich.org	70
i-        if (x < 0 || x >= can->w || y < 0 || y >= can->h)	Err	bitreich.org	70
i-                return;	Err	bitreich.org	70
i-        memcpy(can->buf + can->w * (can->h - 1 - y) + x, color, sizeof(*can->buf));	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_rectangle(struct canvas *can, struct color *color,	Err	bitreich.org	70
i-        int y1, int x1,	Err	bitreich.org	70
i-        int y2, int x2)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        int                x, y, ymin, xmin, ymax, xmax;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        ymin = MIN(y1, y2); ymax = MAX(y1, y2);	Err	bitreich.org	70
i-        xmin = MIN(x1, x2); xmax = MAX(x1, x2);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        for (y = ymin; y <= ymax; y++)	Err	bitreich.org	70
i-                for (x = xmin; x <= xmax; x++)	Err	bitreich.org	70
i-                        ff_pixel(can, color, x, y);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * From Bresenham's line algorithm and dcat's tplot.	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_line(struct canvas *can, struct color *color,	Err	bitreich.org	70
i-        int x0, int y0,	Err	bitreich.org	70
i-        int x1, int y1)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        int                dy, dx, sy, sx, err, e;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        sx = x0 < x1 ? 1 : -1;	Err	bitreich.org	70
i-        sy = y0 < y1 ? 1 : -1;	Err	bitreich.org	70
i-        dx = abs(x1 - x0);	Err	bitreich.org	70
i-        dy = abs(y1 - y0);	Err	bitreich.org	70
i-        err = (dy > dx ? dy : -dx) / 2;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        for (;;) {	Err	bitreich.org	70
i-                ff_pixel(can, color, x0, y0);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                if (y0 == y1 && x0 == x1)	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                e = err;	Err	bitreich.org	70
i-                if (e > -dy) {	Err	bitreich.org	70
i-                        y0 += sy;	Err	bitreich.org	70
i-                        err -= dx;	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-                if (e < dx) {	Err	bitreich.org	70
i-                        x0 += sx;	Err	bitreich.org	70
i-                        err += dy;	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * Draw a coloured glyph from font f centered on y.	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i-ff_char(struct canvas *can, struct color *color, char c,	Err	bitreich.org	70
i-        int x, int y)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        int                yf, xf, wf;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (c & 0x80)	Err	bitreich.org	70
i-                c = '\0';	Err	bitreich.org	70
i-        y -= font->height / 2;	Err	bitreich.org	70
i-        wf = font_width(font, c);	Err	bitreich.org	70
i-        for (xf = 0; xf < wf; xf++)	Err	bitreich.org	70
i-                for (yf = 0; yf < font->height; yf++)	Err	bitreich.org	70
i-                        if (font->glyph[(int)c][wf * (font->height - yf) + xf] == 3)	Err	bitreich.org	70
i-                                ff_pixel(can, color, x + xf, y + yf);	Err	bitreich.org	70
i-        return wf + 1;	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * Draw a left aligned string without wrapping it.	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static size_t	Err	bitreich.org	70
i-ff_text_left(struct canvas *can, struct color *color, char *s,	Err	bitreich.org	70
i-        int x, int y)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        for (; *s != '\0'; s++)	Err	bitreich.org	70
i-                x += ff_char(can, color, *s, x, y);	Err	bitreich.org	70
i-        return x;	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * Draw a center aligned string without wrapping it.	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static size_t	Err	bitreich.org	70
i-ff_text_center(struct canvas *can, struct color *color, char *s,	Err	bitreich.org	70
i-        int x, int y)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        x -= font_strlen(font, s) / 2;	Err	bitreich.org	70
i-        return ff_text_left(can, color, s, x, y);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * Draw a right aligned string without wrapping it.	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static size_t	Err	bitreich.org	70
i-ff_text_right(struct canvas *can, struct color *color, char *s,	Err	bitreich.org	70
i-        int x, int y)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        x -= font_strlen(font, s);	Err	bitreich.org	70
i-        return ff_text_left(can, color, s, x, y);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_print(struct canvas *can)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        uint32_t                w, h;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        w = htonl(can->w);	Err	bitreich.org	70
i-        h = htonl(can->h);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        fputs("farbfeld", stdout);	Err	bitreich.org	70
i-        fwrite(&w, sizeof(w), 1, stdout);	Err	bitreich.org	70
i-        fwrite(&h, sizeof(h), 1, stdout);	Err	bitreich.org	70
i-        fwrite(can->buf, can->w * can->h, sizeof(*can->buf), stdout);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i-ff_t2x(time_t t, time_t tmin, time_t tmax)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        if (tmin == tmax)	Err	bitreich.org	70
i-                return PLOT_W;	Err	bitreich.org	70
i-        return (t - tmin) * PLOT_W / (tmax - tmin);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i-ff_v2y(double v, double vmin, double vmax)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        if (vmin == vmax)	Err	bitreich.org	70
i-                return PLOT_H;	Err	bitreich.org	70
i-        return (v - vmin) * PLOT_H / (vmax - vmin);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_xaxis(struct canvas *can, struct color *label, struct color *grid,	Err	bitreich.org	70
i-        time_t tmin, time_t tmax, time_t tstep)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        time_t                t;	Err	bitreich.org	70
i-        int                x;	Err	bitreich.org	70
i-        char                str[sizeof("MM/DD HH/MM")], *fmt;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (tstep < 3600 * 12)	Err	bitreich.org	70
i-                fmt = "%H:%M:%S";	Err	bitreich.org	70
i-        else if (tstep < 3600 * 24)	Err	bitreich.org	70
i-                fmt = "%m/%d %H:%M";	Err	bitreich.org	70
i-        else	Err	bitreich.org	70
i-                fmt = "%X/%m/%d";	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        for (t = tmax - tmax % tstep; t >= tmin; t -= tstep) {	Err	bitreich.org	70
i-                x = ff_t2x(t, tmin, tmax);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                ff_line(can, grid,	Err	bitreich.org	70
i-                        x, XLABEL_H,	Err	bitreich.org	70
i-                        x, XLABEL_H + PLOT_H);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                strftime(str, sizeof(str), fmt, localtime(&t));	Err	bitreich.org	70
i-                ff_text_center(can, label, str,	Err	bitreich.org	70
i-                        x, XLABEL_H / 2);	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_yaxis(struct canvas *can, struct color *label, struct color *grid,	Err	bitreich.org	70
i-        double vmin, double vmax, double vstep)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        double                v;	Err	bitreich.org	70
i-        int                y;	Err	bitreich.org	70
i-        char                str[8 + 1];	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        for (v = vmax - fmod(vmax, vstep); v >= vmin; v -= vstep) {	Err	bitreich.org	70
i-                y = ff_v2y(v, vmin, vmax);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                ff_line(can, grid,	Err	bitreich.org	70
i-                        YLABEL_W, y,	Err	bitreich.org	70
i-                        YLABEL_W + PLOT_W, y);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                humanize(str, v);	Err	bitreich.org	70
i-                ff_text_right(can, label, str,	Err	bitreich.org	70
i-                        YLABEL_W - MARGIN, y);	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_title(struct canvas *can,	Err	bitreich.org	70
i-        struct color *ct, char *title,	Err	bitreich.org	70
i-        struct color *cu, char *unit)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        ff_text_left(can, ct, title, TITLE_H / 2, 0);	Err	bitreich.org	70
i-        ff_text_right(can, cu, unit, TITLE_H / 2, TITLE_W);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_plot(struct canvas *can, struct vlist *vl, struct color *color,	Err	bitreich.org	70
i-        double vmin, double vmax,	Err	bitreich.org	70
i-        time_t tmin, time_t tmax)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        time_t                *tp;	Err	bitreich.org	70
i-        double                *vp;	Err	bitreich.org	70
i-        int                x, y, n, ylast, xlast, first;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        first = 1;	Err	bitreich.org	70
i-        for (tp = vl->t, vp = vl->v, n = vl->n; n > 0; n--, vp++, tp++) {	Err	bitreich.org	70
i-                y = ff_v2y(*vp, vmin, vmax);	Err	bitreich.org	70
i-                x = ff_t2x(*tp, tmin, tmax);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                if (!first)	Err	bitreich.org	70
i-                        ff_line(can, color, xlast, ylast, x, y);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                ylast = y;	Err	bitreich.org	70
i-                xlast = x;	Err	bitreich.org	70
i-                first = 0;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_values(struct canvas *can, struct vlist *vl, struct color **cl, size_t ncol,	Err	bitreich.org	70
i-        time_t tmin, time_t tmax,	Err	bitreich.org	70
i-        double vmin, double vmax)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        for (; ncol > 0; ncol--, vl++, cl++)	Err	bitreich.org	70
i-                ff_plot(can, vl, *cl, vmin, vmax, tmin, tmax);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff_legend(struct canvas *can, struct color *fg, struct vlist *vl, struct color **cl, size_t ncol)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        size_t                i, x, y;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        for (i = 0; i < ncol; i++, vl++, cl++) {	Err	bitreich.org	70
i-                x = MARGIN * 2;	Err	bitreich.org	70
i-                x = ff_text_left(can, *cl, "\1", x, y) + MARGIN;	Err	bitreich.org	70
i-                x = ff_text_left(can, fg, vl->label, x, y);	Err	bitreich.org	70
i-                y = LEGEND_H - i * (font->height + MARGIN);	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * Plot the 'n' values list of the 'v' arrax with title 'name' and	Err	bitreich.org	70
i- * 'units' label.	Err	bitreich.org	70
i- *	Err	bitreich.org	70
i- *               Title       (units)	Err	bitreich.org	70
i- *             x ^                    Legend	Err	bitreich.org	70
i- *         label | - + - + - + - + -   ....	Err	bitreich.org	70
i- *          here | - + - + - + - + -   ....	Err	bitreich.org	70
i- *               +---+---+---+---+-->	Err	bitreich.org	70
i- *                x label here        	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-ff(struct vlist *vl, struct color **cl, size_t ncol, char *name, char *units)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        struct canvas        can = { IMAGE_W, IMAGE_H, 0, 0, NULL };	Err	bitreich.org	70
i-        struct color        plot_bg = { 0x2222, 0x2222, 0x2222, 0xffff };	Err	bitreich.org	70
i-        struct color        grid_bg = { 0x2929, 0x2929, 0x2929, 0xffff };	Err	bitreich.org	70
i-        struct color        grid_fg = { 0x3737, 0x3737, 0x3737, 0xffff };	Err	bitreich.org	70
i-        struct color        label_fg = { 0x8888, 0x8888, 0x8888, 0xffff };	Err	bitreich.org	70
i-        struct color        title_fg = { 0xdddd, 0xdddd, 0xdddd, 0xffff };	Err	bitreich.org	70
i-        double                vmin, vmax, vstep;	Err	bitreich.org	70
i-        time_t                tmin, tmax, tstep;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        scale(vl, ncol, &tmin, &tmax, &tstep, &vmin, &vmax, &vstep);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        assert(can.buf = calloc(IMAGE_H * IMAGE_W, sizeof *can.buf));	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        can.y = 0;	Err	bitreich.org	70
i-        can.x = 0;	Err	bitreich.org	70
i-        ff_rectangle(&can, &plot_bg, 0, 0, IMAGE_H - 1, IMAGE_W - 1);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        can.x = PLOT_X;	Err	bitreich.org	70
i-        can.y = PLOT_Y;	Err	bitreich.org	70
i-        ff_rectangle(&can, &grid_bg, 0, 0, PLOT_H, PLOT_W);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        can.x = XLABEL_X;	Err	bitreich.org	70
i-        can.y = XLABEL_Y;	Err	bitreich.org	70
i-        ff_xaxis(&can, &label_fg, &grid_fg, tmin, tmax, tstep);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        can.x = YLABEL_X;	Err	bitreich.org	70
i-        can.y = YLABEL_Y;	Err	bitreich.org	70
i-        ff_yaxis(&can, &label_fg, &grid_fg, vmin, vmax, vstep);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        can.x = TITLE_X;	Err	bitreich.org	70
i-        can.y = TITLE_Y;	Err	bitreich.org	70
i-        ff_title(&can, &title_fg, name, &label_fg, units);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        can.x = PLOT_X;	Err	bitreich.org	70
i-        can.y = PLOT_Y;	Err	bitreich.org	70
i-        ff_values(&can, vl, cl, ncol, tmin, tmax, vmin, vmax);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        can.x = LEGEND_X;	Err	bitreich.org	70
i-        can.y = LEGEND_Y;	Err	bitreich.org	70
i-        ff_legend(&can, &label_fg, vl, cl, ncol);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        ff_print(&can);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static struct color *	Err	bitreich.org	70
i-name_to_color(char *name)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        struct cname        *cn;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        for (cn = cname; cn->name != NULL; cn++)	Err	bitreich.org	70
i-                if (strcmp(name, cn->name) == 0)	Err	bitreich.org	70
i-                        return &cn->color;	Err	bitreich.org	70
i-        return NULL;	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-argv_to_color(struct color **cl, char **argv)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        for (; *argv != NULL; cl++, argv++)	Err	bitreich.org	70
i-                if ((*cl = name_to_color(*argv)) == NULL)	Err	bitreich.org	70
i-                        err(1, "unknown color name: %s", *argv);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-usage(void)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        fprintf(stderr, "usage: %s [-t title] [-u unit] {", arg0);	Err	bitreich.org	70
i-        fputs(cname->name, stderr);	Err	bitreich.org	70
i-        for (struct cname *cn = cname + 1; cn->name != NULL; cn++)	Err	bitreich.org	70
i-                fprintf(stderr, ",%s", cn->name);	Err	bitreich.org	70
i-        fputs("}...\n", stderr);	Err	bitreich.org	70
i-        exit(1);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-int	Err	bitreich.org	70
i-main(int argc, char **argv)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        struct vlist        *vl;	Err	bitreich.org	70
i-        struct color        **cl;	Err	bitreich.org	70
i-        char                labels[LINE_MAX];	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        ARG_SWITCH(argc, argv) {	Err	bitreich.org	70
i-        case 't':	Err	bitreich.org	70
i-                tflag = ARG;	Err	bitreich.org	70
i-                break;	Err	bitreich.org	70
i-        case 'u':	Err	bitreich.org	70
i-                uflag = ARG;	Err	bitreich.org	70
i-                break;	Err	bitreich.org	70
i-        default:	Err	bitreich.org	70
i-                usage();	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (argc == 0)	Err	bitreich.org	70
i-                usage();	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        assert(vl = calloc(argc, sizeof(*vl)));	Err	bitreich.org	70
i-        assert(cl = calloc(argc, sizeof(*cl)));	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        csv_labels(vl, argv, labels);	Err	bitreich.org	70
i-        csv_values(vl, argc);	Err	bitreich.org	70
i-        argv_to_color(cl, argv);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        ff(vl, cl, argc, tflag, uflag);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        free(vl);	Err	bitreich.org	70
i-        free(cl);	Err	bitreich.org	70
i-        return 0;	Err	bitreich.org	70
i-}	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ploot/commit/ffb9fc9caeaf3a79...
Content-Typetext/plain; charset=utf-8