#include #include #include #include #include "brailleboi.h" int brailleInit(int width, int height, image_buffer* buf) { setlocale(LC_ALL, ""); buf->width = width; buf->height = height; buf->char_width = (width+1)/2; buf->char_height = (height+1)/2; buf->contents = malloc((buf->char_width * buf->char_height) * sizeof(int)); return 0; } int brailleStop(image_buffer* buf) { free(buf->contents); return 0; } int brailleReorganizeBits(int old) { //Reorganizes bits because the unicode standard for 8 dotted braille is weird int new = (old&0b10000111) | (old&0b01110000)>>1 | (old&0b00001000)<<3; return new; } void braillePrint(int data) { wprintf(L"%lc", (0x2800|data)); } int braillePlot(int x, int y, image_buffer* buf) { //Check if plot is within bounds if (x>buf->width | y>buf->height) return 1; buf->contents[(y-1)/4 * buf->char_width + (x-1)/2] |= 1<<(y-1)%4+(1-x%2)*4; return 0; } void brailleUpdateScreen(image_buffer* buf) { for (int x=0;xchar_width;x++) { for (int y=0;ychar_height;y++) { wprintf(L"\e[%d;%dH", y+1, x+1); braillePrint(brailleReorganizeBits(buf->contents[y * buf->char_width + x])); } } }