Introduction
Introduction Statistics Contact Development Disclaimer Help
basic rectangle drawing functions - ploot - simple plotting tools
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65…
Log
Files
Refs
Tags
README
LICENSE
---
commit 6e13cd89684d0129aa13995c3f0e2ba4f0a7aae1
parent 1fc2d491d5051732caac4426d73cb22c2d870f6d
Author: Josuah Demangeon <[email protected]>
Date: Mon, 30 Apr 2018 11:33:21 +0200
basic rectangle drawing functions
Diffstat:
D deffont.h | 27 ---------------------------
M font-14x7.h | 16 +++++++---------
M font.c | 113 +++++++++++++++++++++--------…
A font.h | 29 +++++++++++++++++++++++++++++
D txt | 0
5 files changed, 113 insertions(+), 72 deletions(-)
---
diff --git a/deffont.h b/deffont.h
@@ -1,27 +0,0 @@
-#include <stddef.h>
-
-#define _ 0
-#define X 1
-#define B(x) char glyph_ ## x[WIDTH * HEIGHT]
-#define b(x) glyph_ ## x
-#define NOPR NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
-#define NOPRINT NOPR, NOPR, NOPR, NOPR
-
-#define FONT(x) char *font_ ## x[] = { \
- NULL, NULL, NULL, NULL, \
- NULL, NULL, NULL, NULL, \
- NULL, NULL, NULL, NULL, \
- NULL, NULL, NULL, NULL, \
- NULL, NULL, NULL, NULL, \
- NULL, NULL, NULL, NULL, \
- b(space), b(bang), b(double), b(hash), \
- b(dollar), b(percent), b(ampersand), b(single), \
- b(l_round), b(r_round), b(asterisk), b(plus), \
- b(coma), b(minus), b(dot), b(slash), \
- b(0), b(1), b(2), b(3), \
- b(4), b(5), b(6), b(7), \
- b(8), b(9), b(column), b(semicolumn), \
- b(l_angle), b(equal), b(r_angle), b(question), \
- b(column), b(semicolumn), b(l_angle), b(equal), \
- b(r_angle), b(question) \
-}
diff --git a/font-14x7.h b/font-14x7.h
@@ -1,7 +1,5 @@
-#include "deffont.h"
-
-#define WIDTH 14
-#define HEIGHT 7
+#define FONT_WIDTH 14
+#define FONT_HEIGHT 6
B(space) = {
_ ,_,_,_,_,_,
@@ -73,6 +71,7 @@ _ ,_,_,_,_,_
B(dollar) = {
_ ,_,_,_,_,_,
+_ ,_,_,_,_,_,
_ ,_,_,X,_,_,
_ ,_,X,X,X,_,
_ ,X,_,X,_,X,
@@ -85,21 +84,20 @@ _ ,X,_,X,_,X,
_ ,_,X,X,X,_,
_ ,_,_,X,_,_,
_ ,_,_,_,_,_,
-_ ,_,_,_,_,_
};
B(percent) = {
_ ,_,_,_,_,_,
_ ,_,_,_,_,_,
-_ ,_,_,_,_,X,
+_ ,_,_,_,_,_,
_ ,X,X,_,_,X,
_ ,X,X,_,X,_,
_ ,_,_,_,X,_,
_ ,_,_,X,_,_,
+_ ,_,_,X,_,_,
_ ,_,X,_,_,_,
_ ,_,X,_,X,X,
_ ,X,_,_,X,X,
-_ ,X,_,_,_,_,
_ ,_,_,_,_,_,
_ ,_,_,_,_,_,
_ ,_,_,_,_,_
@@ -381,7 +379,7 @@ B(6) = {
_ ,_,_,_,_,_,
_ ,_,_,_,_,_,
_ ,_,X,X,X,_,
-_ ,X,_,_,_,_,
+_ ,X,_,_,_,X,
_ ,X,_,_,_,_,
_ ,X,_,_,_,_,
_ ,X,X,X,X,_,
@@ -438,7 +436,7 @@ _ ,X,_,_,_,X,
_ ,_,X,X,X,X,
_ ,_,_,_,_,X,
_ ,_,_,_,_,X,
-_ ,_,_,_,_,X,
+_ ,X,_,_,_,X,
_ ,_,X,X,X,_,
_ ,_,_,_,_,_,
_ ,_,_,_,_,_,
diff --git a/font.c b/font.c
@@ -9,63 +9,104 @@
#include <stdlib.h>
#include <string.h>
-#include "arg.h"
+#include "font.h"
+#include "font-14x7.h"
+
+#define WIDTH 100
+#define HEIGHT 100
+
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
typedef uint16_t Color[4];
-enum { R, G, B, A };
+typedef struct {
+ Color *b; /* buffer */
+ int w; /* width */
+ int h; /* height */
+} Canvas;
-Color *canvas;
+Color buffer[WIDTH * HEIGHT];
-char *argv0;
-int wflag = 0;
-int hflag = 0;
+void
+ffdraw_pixel(Canvas *can, Color c,
+ int x, int y)
+{
+ memcpy(can->b + x + (can->h - 1 - y) * can->w, c, sizeof(*can->b));
+}
void
-usage()
+ffdraw_rectangle(Canvas *can, Color c,
+ int x1, int y1,
+ int x2, int y2)
{
- fputs("ploot -w width -h height <data.csv >image.ff\n", stderr);
- exit(1);
+ int x, y, xmin, ymin, xmax, ymax;
+
+ xmin = MIN(x1, x2); xmax = MAX(x1, x2);
+ ymin = MIN(y1, y2); ymax = MAX(y1, y2);
+
+ for (x = xmin; x <= xmax; x++)
+ for (y = ymin; y <= ymax; y++)
+ ffdraw_pixel(can, c, x, y);
+}
+
+void
+ffdraw_line(Canvas *can, Color c,
+ int x1, int y1,
+ int x2, int y2)
+{
+ int x, y;
+
+ (void)c;
+ (void)can;
+
+ x = x1;
+ y = y1;
+ while (x < x2 && y < y2) {
+ x++; y++;
+ }
}
void
-ffdraw(Color *canvas, int w, int h)
+ffdraw_fill(Canvas *can, Color c)
{
- Color col = { 0xffff, 0xffff, 0x0000, 0xffff };
- size_t n;
+ ffdraw_rectangle(can, c, 0, 0, can->w - 1, can->h - 1);
+}
- for (n = w * h; n > 0; n--)
- memcpy(canvas + n - 1, col, sizeof(col));
+void
+ffdraw(Canvas *can)
+{
+ Color c1 = { 0x2222, 0x2222, 0x2222, 0xffff };
+ Color c2 = { 0x3333, 0xffff, 0x8888, 0xffff };
+
+ ffdraw_fill(can, c1);
+ ffdraw_rectangle(can, c2,
+ 0, 20,
+ can->w - 10, 4);
+}
+
+void
+usage(void)
+{
+ fprintf(stderr, "ploot <data.csv >image.ff\n");
+ exit(1);
}
int
-main(int argc, char **argv)
+main(void)
{
uint32_t w, h;
+ Canvas can;
- ARGBEGIN {
- case 'w':
- wflag = atoi(EARGF(usage()));
- break;
- case 'h':
- hflag = atoi(EARGF(usage()));
- break;
- } ARGEND;
-
- if (wflag == 0 || hflag == 0)
- usage();
-
- if ((canvas = calloc(wflag * hflag, sizeof(*canvas))) == NULL) {
- perror("allocating memory for the canvas");
- return 1;
- }
-
+ can.b = buffer;
+ can.w = WIDTH;
+ can.h = HEIGHT;
+ w = htonl(WIDTH);
+ h = htonl(HEIGHT);
fputs("farbfeld", stdout);
- w = htonl(wflag);
- h = htonl(hflag);
fwrite(&w, sizeof(w), 1, stdout);
fwrite(&h, sizeof(h), 1, stdout);
- ffdraw(canvas, wflag, hflag);
- fwrite(canvas, wflag * hflag, sizeof(*canvas), stdout);
+ ffdraw(&can);
+ fwrite(can.b, WIDTH * HEIGHT, sizeof(*can.b), stdout);
return 0;
}
diff --git a/font.h b/font.h
@@ -0,0 +1,29 @@
+#include <stddef.h>
+
+/*
+ * Macros to make the fonts header file more readable.
+ */
+#define _ 0
+#define X 1
+#define B(x) char glyph_ ## x[FONT_WIDTH * FONT_HEIGHT]
+#define b(x) glyph_ ## x
+#define NOPR NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+#define NOPRINT NOPR, NOPR, NOPR, NOPR
+#define FONT(x) char *font_ ## x[] = { \
+ NULL, NULL, NULL, NULL, \
+ NULL, NULL, NULL, NULL, \
+ NULL, NULL, NULL, NULL, \
+ NULL, NULL, NULL, NULL, \
+ NULL, NULL, NULL, NULL, \
+ NULL, NULL, NULL, NULL, \
+ b(space), b(bang), b(double), b(hash), \
+ b(dollar), b(percent), b(ampersand), b(single), \
+ b(l_round), b(r_round), b(asterisk), b(plus), \
+ b(coma), b(minus), b(dot), b(slash), \
+ b(0), b(1), b(2), b(3), \
+ b(4), b(5), b(6), b(7), \
+ b(8), b(9), b(column), b(semicolumn), \
+ b(l_angle), b(equal), b(r_angle), b(question), \
+ b(column), b(semicolumn), b(l_angle), b(equal), \
+ b(r_angle), b(question) \
+}
diff --git a/txt b/txt
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.