From 3056e083d78b6edec6bab1ebac3fa9e3708644d7 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Thu, 20 Aug 2015 22:37:23 +0200 Subject: Initial commit --- firmware/src/screen.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 firmware/src/screen.c (limited to 'firmware/src/screen.c') diff --git a/firmware/src/screen.c b/firmware/src/screen.c new file mode 100644 index 0000000..06f038c --- /dev/null +++ b/firmware/src/screen.c @@ -0,0 +1,38 @@ +#include "screen.h" +#include +#include + +Screen* newScreen(unsigned short rows, unsigned short columns, void (*update)(Screen)) { + unsigned short i; + + Screen* screen = calloc(1, sizeof(Screen)); + if (screen == NULL) + return NULL; + + screen->data = (unsigned char**) calloc(rows, sizeof(unsigned char*)); + if (screen->data == NULL) + return NULL; + for (i = 0; i < rows; i++) { + screen->data[i] = (unsigned char*) calloc(columns + 1, sizeof(unsigned char)); + if (screen->data[i] == NULL) { + for (; i >= 0; i--) + free(screen->data[i]); + free(screen->data); + return NULL; + } + } + + screen->rows = rows; + screen->columns = columns; + screen->first_visible_row = screen->first_visible_column = NULL; + screen->cursor_x = screen->cursor_y = NULL; + screen->update = update; + return screen; +} + +inline void freeScreen(Screen* screen) { + unsigned short i; + for (i = 0; i < screen->rows; i++) + free(screen->data[i]); + free(screen->data); +} -- cgit v1.2.3