From dff13f512d4d73d902640d80ac278cdb9a425525 Mon Sep 17 00:00:00 2001 From: Ole Morud Date: Mon, 6 Jun 2022 21:51:00 +0200 Subject: [PATCH] Initial commit. --- graphics.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 graphics.c diff --git a/graphics.c b/graphics.c new file mode 100644 index 0000000..2d9d4ee --- /dev/null +++ b/graphics.c @@ -0,0 +1,83 @@ + +#include + +#define uint unsigned int +#define ON 'x' +#define OFF '-' + +typedef struct Canvas { + int x; + int y; + char* data; +} Canvas; + +/* + * Draws an x*y rectangle with the characters in canvas* c + */ +void render(Canvas* c){ + putchar('\n'); + + for(int i=0; i < c->y; i++){ + for(int j=0; j < c->x; j++){ + putchar(c->data[i*(c->x)+j]); + } + putchar('\n'); + } +} + +/* + * Sets pixel at x,y to ON + */ +void dot(Canvas* c, uint x, uint y){ + c->data[ y*(c->x) + x] = ON; +} + + +/* + * Draws a line from (start_x, start_y) to (end_x, end_y) + */ +void line(Canvas* c, uint start_x, uint start_y, uint end_x, uint end_y){ +#ifndef abs +#define abs(x) ((x<0)?(-x):(x)) + + + int dx = abs(end_x - start_x); + int dy = abs(end_y - start_y); + + int direction_x = start_x < end_x ? 1 : -1; + int direction_y = start_y < end_y ? 1 : -1; + + printf("dx:%i dy:%i direction:%i,%i", dx, dy, direction_x, direction_y); + + if(dx>dy){ + for(int i=0; i