Introduction
Introduction Statistics Contact Development Disclaimer Help
group farbfeld code in the single farbfeld tool around - ploot - simple plottin…
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65…
Log
Files
Refs
Tags
README
LICENSE
---
commit b525323a1383dfb008a8941753702e2b05d14eee
parent f5bdc6b7ddfd050efc31f5cc89a6fba87e58819f
Author: Josuah Demangeon <[email protected]>
Date: Wed, 23 Jun 2021 23:39:40 +0200
group farbfeld code in the single farbfeld tool around
Diffstat:
M Makefile | 4 ++--
D ffplot.c | 148 -----------------------------…
D ffplot.h | 34 -----------------------------…
M ploot-farbfeld.c | 166 +++++++++++++++++++++++++++++…
4 files changed, 159 insertions(+), 193 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -7,8 +7,8 @@ LFLAGS = -static -lm
PREFIX = /usr/local
MANOREFIX = $(PREFIX)/share/man
-SRC = csv.c drawille.c ffplot.c font.c font13.c font8.c scale.c util.c
-INC = csv.h drawille.h ffplot.h font.h scale.h util.h
+SRC = csv.c drawille.c font.c font13.c font8.c scale.c util.c
+INC = csv.h drawille.h font.h scale.h util.h
BIN = ploot-farbfeld ploot-feed ploot-braille ploot-text
OBJ = ${SRC:.c=.o}
diff --git a/ffplot.c b/ffplot.c
@@ -1,148 +0,0 @@
-#include "ffplot.h"
-
-#include <arpa/inet.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdint.h>
-
-#include "font.h"
-#include "util.h"
-
-/*
- * Convert (x,y) coordinates to (row,col) for printing into the buffer.
- * The buffer only contain one number, so the coordinate is a single integer:
- * width * y + y.
- * The coordinates are shifted by offx and offy to permit relative coordinates.
- *
- * The convention used: y
- * - (0,0) is at the lower left corner of the plotvas. |
- * - (0,1) is above it. +--x
- */
-void
-ffplot_pixel(struct ffplot *plot, struct ffcolor *color,
- int x, int y)
-{
- x += plot->x;
- y += plot->y;
- if (x < 0 || x >= plot->w || y < 0 || y >= plot->h)
- return;
- memcpy(plot->buf + plot->w * (plot->h - 1 - y) + x, color, sizeof(*plo…
-}
-
-void
-ffplot_rectangle(struct ffplot *plot, struct ffcolor *color,
- int y1, int x1,
- int y2, int x2)
-{
- int x, y, ymin, xmin, ymax, xmax;
-
- ymin = MIN(y1, y2); ymax = MAX(y1, y2);
- xmin = MIN(x1, x2); xmax = MAX(x1, x2);
-
- for (y = ymin; y <= ymax; y++)
- for (x = xmin; x <= xmax; x++)
- ffplot_pixel(plot, color, x, y);
-}
-
-/*
- * From Bresenham's line algorithm and dcat's tplot.
- */
-void
-ffplot_line(struct ffplot *plot, struct ffcolor *color,
- int x0, int y0,
- int x1, int y1)
-{
- int dy, dx, sy, sx, err, e;
-
- sx = x0 < x1 ? 1 : -1;
- sy = y0 < y1 ? 1 : -1;
- dx = ABS(x1 - x0);
- dy = ABS(y1 - y0);
- err = (dy > dx ? dy : -dx) / 2;
-
- for (;;) {
- ffplot_pixel(plot, color, x0, y0);
-
- if (y0 == y1 && x0 == x1)
- break;
-
- e = err;
- if (e > -dy) {
- y0 += sy;
- err -= dx;
- }
- if (e < dx) {
- x0 += sx;
- err += dy;
- }
- }
-}
-
-/*
- * Draw a coloured glyph from font f centered on y.
- */
-int
-ffplot_char(struct ffplot *plot, struct ffcolor *color, struct font *ft, char …
- int x, int y)
-{
- int yf, xf, wf;
-
- if (c & 0x80)
- c = '\0';
- y -= ft->height / 2;
- wf = font_width(ft, c);
- for (xf = 0; xf < wf; xf++)
- for (yf = 0; yf < ft->height; yf++)
- if (ft->glyph[(int)c][wf * (ft->height - yf) + xf] == …
- ffplot_pixel(plot, color, x + xf, y + yf);
- return wf + 1;
-}
-
-/*
- * Draw a left aligned string without wrapping it.
- */
-size_t
-ffplot_text_left(struct ffplot *plot, struct ffcolor *color, struct font *ft,
- char *s, int x, int y)
-{
- for (; *s != '\0'; s++)
- x += ffplot_char(plot, color, ft, *s, x, y);
- return x;
-}
-
-/*
- * Draw a center aligned string without wrapping it.
- */
-size_t
-ffplot_text_center(struct ffplot *plot, struct ffcolor *color, struct font *ft,
- char *s, int x, int y)
-{
- x -= font_strlen(ft, s) / 2;
- return ffplot_text_left(plot, color, ft, s, x, y);
-}
-
-/*
- * Draw a right aligned string without wrapping it.
- */
-size_t
-ffplot_text_right(struct ffplot *plot, struct ffcolor *color, struct font *ft,
- char *s, int x, int y)
-{
- x -= font_strlen(ft, s);
- return ffplot_text_left(plot, color, ft, s, x, y);
-}
-
-void
-ffplot_print(FILE *fp, struct ffplot *plot)
-{
- uint32_t w, h;
-
- w = htonl(plot->w);
- h = htonl(plot->h);
-
- fprintf(stdout, "ffplot");
- 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/ffplot.h b/ffplot.h
@@ -1,34 +0,0 @@
-#ifndef FFPLOT_H
-#define FFPLOT_H
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "font.h"
-
-struct ffcolor {
- uint16_t red;
- uint16_t green;
- uint16_t blue;
- uint16_t alpha;
-};
-
-struct ffplot {
- int w; /* width */
- int h; /* height */
- int x; /* x offset */
- int y; /* y offset */
- struct ffcolor *buf;
-};
-
-void ffplot_pixel(struct ffplot *, struct ffcolor *, int, int);
-void ffplot_rectangle(struct ffplot *, struct ffcolor *, int, int, int,…
-void ffplot_line(struct ffplot *, struct ffcolor *, int, int, int, int);
-int ffplot_char(struct ffplot *, struct ffcolor *, struct font *, char,…
-size_t ffplot_text_left(struct ffplot *, struct ffcolor *, struct font …
-size_t ffplot_text_center(struct ffplot *, struct ffcolor *, struct fon…
-size_t ffplot_text_right(struct ffplot *, struct ffcolor *, struct font…
-void ffplot_print(FILE *, struct ffplot *);
-
-#endif
diff --git a/ploot-farbfeld.c b/ploot-farbfeld.c
@@ -4,6 +4,7 @@
#include <fcntl.h>
#include <limits.h>
#include <math.h>
+#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -11,10 +12,9 @@
#include <time.h>
#include <unistd.h>
#include "csv.h"
-#include "ffplot.h"
#include "font.h"
-#include "util.h"
#include "scale.h"
+#include "util.h"
#ifndef __OpenBSD__
#define pledge(...) 0
@@ -50,16 +50,22 @@
#define LEGEND_W (100)
#define LEGEND_H (PLOT_H)
-struct colorname {
- char *name;
- struct ffcolor color;
+struct ffcolor {
+ uint16_t red;
+ uint16_t green;
+ uint16_t blue;
+ uint16_t alpha;
};
-static char *tflag = "";
-static char *uflag = "";
-static struct font *font = &font13;
+struct ffplot {
+ int w, h, x, y; /* width, height and coordinamtes */
+ struct ffcolor *buf;
+};
-static struct colorname colorname[] = {
+static struct colorname {
+ char *name;
+ struct ffcolor color;
+} colorname[] = {
/* name red green blue alpha */
{ "red", { 0xffff, 0x4444, 0x4444, 0xffff } },
{ "orange", { 0xffff, 0x9999, 0x4444, 0xffff } },
@@ -70,6 +76,148 @@ static struct colorname colorname[] = {
{ NULL, { 0, 0, 0, 0 } }
};
+static char *tflag = "";
+static char *uflag = "";
+static struct font *font = &font13;
+
+/*
+ * Convert (x,y) coordinates to (row,col) for printing into the buffer.
+ * The buffer only contain one number, so the coordinate is a single integer:
+ * width * y + y.
+ * The coordinates are shifted by offx and offy to permit relative coordinates.
+ *
+ * The convention used: y
+ * - (0,0) is at the lower left corner of the plotvas. |
+ * - (0,1) is above it. +--x
+ */
+static void
+ffplot_pixel(struct ffplot *plot, struct ffcolor *color,
+ int x, int y)
+{
+ x += plot->x;
+ y += plot->y;
+ if (x < 0 || x >= plot->w || y < 0 || y >= plot->h)
+ return;
+ memcpy(plot->buf + plot->w * (plot->h - 1 - y) + x, color, sizeof(*plo…
+}
+
+static void
+ffplot_rectangle(struct ffplot *plot, struct ffcolor *color,
+ int y1, int x1,
+ int y2, int x2)
+{
+ int x, y, ymin, xmin, ymax, xmax;
+
+ ymin = MIN(y1, y2); ymax = MAX(y1, y2);
+ xmin = MIN(x1, x2); xmax = MAX(x1, x2);
+
+ for (y = ymin; y <= ymax; y++)
+ for (x = xmin; x <= xmax; x++)
+ ffplot_pixel(plot, color, x, y);
+}
+
+/*
+ * From Bresenham's line algorithm and dcat's tplot.
+ */
+static void
+ffplot_line(struct ffplot *plot, struct ffcolor *color,
+ int x0, int y0,
+ int x1, int y1)
+{
+ int dy, dx, sy, sx, err, e;
+
+ sx = x0 < x1 ? 1 : -1;
+ sy = y0 < y1 ? 1 : -1;
+ dx = ABS(x1 - x0);
+ dy = ABS(y1 - y0);
+ err = (dy > dx ? dy : -dx) / 2;
+
+ for (;;) {
+ ffplot_pixel(plot, color, x0, y0);
+
+ if (y0 == y1 && x0 == x1)
+ break;
+
+ e = err;
+ if (e > -dy) {
+ y0 += sy;
+ err -= dx;
+ }
+ if (e < dx) {
+ x0 += sx;
+ err += dy;
+ }
+ }
+}
+
+/*
+ * Draw a coloured glyph from font f centered on y.
+ */
+static int
+ffplot_char(struct ffplot *plot, struct ffcolor *color, struct font *ft, char …
+ int x, int y)
+{
+ int yf, xf, wf;
+
+ if (c & 0x80)
+ c = '\0';
+ y -= ft->height / 2;
+ wf = font_width(ft, c);
+ for (xf = 0; xf < wf; xf++)
+ for (yf = 0; yf < ft->height; yf++)
+ if (ft->glyph[(int)c][wf * (ft->height - yf) + xf] == …
+ ffplot_pixel(plot, color, x + xf, y + yf);
+ return wf + 1;
+}
+
+/*
+ * Draw a left aligned string without wrapping it.
+ */
+static size_t
+ffplot_text_left(struct ffplot *plot, struct ffcolor *color, struct font *ft,
+ char *s, int x, int y)
+{
+ for (; *s != '\0'; s++)
+ x += ffplot_char(plot, color, ft, *s, x, y);
+ return x;
+}
+
+/*
+ * Draw a center aligned string without wrapping it.
+ */
+static size_t
+ffplot_text_center(struct ffplot *plot, struct ffcolor *color, struct font *ft,
+ char *s, int x, int y)
+{
+ x -= font_strlen(ft, s) / 2;
+ return ffplot_text_left(plot, color, ft, s, x, y);
+}
+
+/*
+ * Draw a right aligned string without wrapping it.
+ */
+static size_t
+ffplot_text_right(struct ffplot *plot, struct ffcolor *color, struct font *ft,
+ char *s, int x, int y)
+{
+ x -= font_strlen(ft, s);
+ return ffplot_text_left(plot, color, ft, s, x, y);
+}
+
+static void
+ffplot_print(FILE *fp, struct ffplot *plot)
+{
+ uint32_t w, h;
+
+ w = htonl(plot->w);
+ h = htonl(plot->h);
+
+ fprintf(stdout, "ffplot");
+ fwrite(&w, sizeof(w), 1, fp);
+ fwrite(&h, sizeof(h), 1, fp);
+ fwrite(plot->buf, plot->w * plot->h, sizeof(*plot->buf), fp);
+}
+
static int
ffplot_t2x(time_t t, time_t tmin, time_t tmax)
{
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.