Introduction
Introduction Statistics Contact Development Disclaimer Help
fix coordinames - ploot - simple plotting tools
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65…
Log
Files
Refs
Tags
README
LICENSE
---
commit eb743275f407b73af41d4c5559f173e3e54d7cbd
parent 543398796b10e8f93841918a617933c853efe0ff
Author: Josuah Demangeon <[email protected]>
Date: Mon, 30 Apr 2018 20:39:04 +0200
fix coordinames
Diffstat:
M Makefile | 2 ++
M ffdraw.c | 25 ++++++++++++++-----------
M ffdraw.h | 2 +-
A ffplot.c | 0
M font_14x7.c | 2 +-
M main.c | 108 ++++++++++++++++++++++++++++-…
6 files changed, 117 insertions(+), 22 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -17,3 +17,5 @@ clean:x
rm -f *.o ploot
x:
+
+$(SRC): arg.h ffdraw.h font.h font_14x7.h
diff --git a/ffdraw.c b/ffdraw.c
@@ -11,20 +11,24 @@
#include <stdlib.h>
#include "ffdraw.h"
-#include "font_14x7.h"
#define WIDTH 100
#define HEIGHT 100
Color buffer[WIDTH * HEIGHT];
+/*
+ * 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 * x + y.
+ */
void
ffdraw_pixel(Canvas *can, Color col,
int x, int y)
{
- if (x >= can->w || y >= can->h)
+ if (x >= can->h || y >= can->w)
return;
- memcpy(can->b + x + (can->h - 1 - y) * can->w, col, sizeof(*can->b));
+ memcpy(can->b + can->w * (can->h - 1 - x) + y, col, sizeof(*can->b));
}
void
@@ -87,12 +91,12 @@ ffdraw_char(Canvas *can, Color col, char c, Font *f,
if (c & 0x80)
c = '\0';
- x -= f->w / 2;
- y -= f->h / 2;
+ x -= f->h / 2;
+ y -= f->w / 2;
- for (xf = 0; xf < f->w; xf++)
- for (yf = 0; yf < f->h; yf++)
- if (f->b[(int)c][(f->h - yf - 1) * f->w + xf] > 0)
+ for (xf = 0; xf < f->h; xf++)
+ for (yf = 0; yf < f->w; yf++)
+ if (f->b[(int)c][f->w * (f->h - xf - 1) + yf] > 0)
ffdraw_pixel(can, col, x + xf, y + yf);
}
@@ -103,13 +107,12 @@ void
ffdraw_str(Canvas *can, Color col, char *s, Font *f,
int x, int y)
{
- for (; *s; x += f->w, s++)
+ for (; *s != '\0'; y += f->w, s++)
ffdraw_char(can, col, *s, f, x, y);
-
}
void
ffdraw_fill(Canvas *can, Color col)
{
- ffdraw_rectangle(can, col, 0, 0, can->w - 1, can->h - 1);
+ ffdraw_rectangle(can, col, 0, 0, can->h - 1, can->w - 1);
}
diff --git a/ffdraw.h b/ffdraw.h
@@ -12,7 +12,7 @@ typedef struct {
typedef struct {
int w; /* width */
int h; /* height */
- char *b[255]; /* buffer */
+ char *b[128]; /* buffer */
} Font;
/* ffdraw.c */
diff --git a/ffplot.c b/ffplot.c
diff --git a/font_14x7.c b/font_14x7.c
@@ -586,7 +586,7 @@ C(A) = {
_,_,_,_,_,_,_,
_,_,_,_,_,_,_,
_,_,_,X,_,_,_,
- _,_,X,_,X,_,_,
+ _,_,_,X,_,_,_,
_,_,X,_,X,_,_,
_,_,X,_,X,_,_,
_,X,_,_,_,X,_,
diff --git a/main.c b/main.c
@@ -2,14 +2,101 @@
#include <stdlib.h>
#include <stdio.h>
+#include <time.h>
#include "ffdraw.h"
#include "font_14x7.h"
-#define WIDTH 500
-#define HEIGHT 100
+/* as you see, no css skills needed */
-Color buffer[WIDTH * HEIGHT];
+#define MARGIN 5
+#define FONT_H 14
+#define FONT_W 7
+
+/* height */
+
+#define TITLE_H (MARGIN + FONT_H + MARGIN)
+#define PLOT_H 100
+#define XLABEL_H (MARGIN + FONT_H + MARGIN)
+
+#define IMAGE_H (TITLE_H + PLOT_H + XLABEL_H)
+
+#define TITLE_B (0)
+#define TITLE_E (TITLE_H)
+#define PLOT_X_B (TITLE_H)
+#define PLOT_X_E (IMAGE_H - XLABEL_H)
+#define XLABEL_B (IMAGE_H - XLABEL_H)
+#define XLABEL_E (IMAGE_H)
+
+/* width */
+
+#define YLABEL_W (MARGIN + 50 + MARGIN)
+#define PLOT_W 500
+#define LEGEND_W (MARGIN + 70 + MARGIN)
+
+#define IMAGE_W (YLABEL_W + PLOT_W + LEGEND_W)
+
+#define YLABEL_B (0)
+#define YLABEL_E (YLABEL_W)
+#define PLOT_Y_B (YLABEL_W)
+#define PLOT_Y_E (IMAGE_W - LEGEND_W)
+#define LEGEND_B (IMAGE_W - LEGEND_W)
+#define LEGEND_E (IMAGE_W)
+
+#define MID(x, y) ((x - y) / 2)
+
+Color buffer[IMAGE_W * IMAGE_H];
+
+Color c_axis = { 0xffff, 0xffff, 0xffff, 0xfff };
+Font *font = &font_14x7;
+
+void
+ffplot_xaxis(Canvas *can, Color col, time_t tmax, time_t tstep)
+{
+ time_t t;
+ int x, y, ystep, width;
+ char str[sizeof("YYYY/MM/DD")], *fmt;
+
+ if (tstep < 3600) {
+ fmt = "%H:%M:%S";
+ width = sizeof("HH:MM:SS");
+ } else {
+ fmt = "%Y/%m/%d";
+ width = sizeof("YYYY/MM/DD");
+ }
+
+ ystep = MARGIN + FONT_W * width + MARGIN;
+
+ t = tmax % tstep;
+ x = XLABEL_B + FONT_H / 2;
+ y = PLOT_Y_B + PLOT_W % ystep - width / 2;
+
+ while (y > PLOT_Y_B) {
+ strftime(str, sizeof(str), fmt, localtime(&t));
+ ffdraw_str(can, col, str, font, x, y);
+
+ y -= ystep;
+ t -= tstep;
+ }
+}
+
+void
+ffplot_(Canvas *can)
+{
+ (void)can;
+}
+
+void
+ffplot_graph(Canvas *can)
+{
+ (void)can;
+}
+
+void
+ffplot_legend(Canvas *can)
+{
+ (void)can;
+}
static void
ffdraw(Canvas *can)
@@ -18,8 +105,11 @@ ffdraw(Canvas *can)
Color col2 = { 0x3333, 0xffff, 0x8888, 0xffff };
ffdraw_fill(can, col1);
+ ffplot_xaxis(can, col2, 3600 * 24 * 30, 360);
+/*
ffdraw_line(can, col2, 49,1,9,79);
- ffdraw_str(can, col2, "R\\S`T'UaVbWcYdZe\nfghb\tjoi\rklmnopqrstuvwxyz{…
+ ffdraw_str(can, col2, "R\\S`T'UaVbWcYdZe\nfghb\tjoi\rklmnopqrstuvwxyz{…
+*/
}
int
@@ -29,14 +119,14 @@ main(void)
Canvas can;
can.b = buffer;
- can.w = WIDTH;
- can.h = HEIGHT;
- w = htonl(WIDTH);
- h = htonl(HEIGHT);
+ can.w = IMAGE_W;
+ can.h = IMAGE_H;
+ w = htonl(IMAGE_W);
+ h = htonl(IMAGE_H);
fputs("farbfeld", stdout);
fwrite(&w, sizeof(w), 1, stdout);
fwrite(&h, sizeof(h), 1, stdout);
ffdraw(&can);
- fwrite(can.b, WIDTH * HEIGHT, sizeof(*can.b), stdout);
+ fwrite(can.b, IMAGE_W * IMAGE_H, sizeof(*can.b), stdout);
return 0;
}
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.