#include #include #include #include #include "brailleboi.h" int brailleInit(int width, int height, image_buffer* buf) { setlocale(LC_ALL, ""); wprintf(L"\033[?25l"); buf->width = width; buf->height = height; buf->char_width = (width+1)/2; buf->char_height = (height+1)/4; buf->contents = malloc((buf->char_width * buf->char_height) * sizeof(int)); return 0; } int brailleStop(image_buffer* buf) { wprintf(L"\033[?25h"); free(buf->contents); return 0; } int brailleReorganizeBits(int old) { //Reorganizes bits because the unicode standard for 8 dotted braille is weird int new = (old&0x87) | // 0b10000111 (old&0x70)>>1 | // 0b01110000 (old&0x08)<<3; // 0b00001000 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) { wprintf(L"\033[2J"); for (int x=0;xchar_width;x++) { for (int y=0;ychar_height;y++) { wprintf(L"\033[%d;%dH", y+1, x+1); braillePrint(brailleReorganizeBits(buf->contents[y * buf->char_width + x])); } } }