diff options
Diffstat (limited to 'brailleboi.c')
| -rw-r--r-- | brailleboi.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/brailleboi.c b/brailleboi.c index e04d17c..82fbeeb 100644 --- a/brailleboi.c +++ b/brailleboi.c @@ -8,9 +8,11 @@ int brailleInit(int width, int height, image_buffer* buf) { setlocale(LC_ALL, ""); - buf->contents = malloc((width * height) * sizeof(int)); 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; } @@ -22,9 +24,10 @@ int brailleStop(image_buffer* buf) int brailleReorganizeBits(int old) { - int new = (old&0b10000111) | - (old&0b01110000)>>1 | - (old&0b00001000)<<3; + //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; } @@ -32,3 +35,22 @@ 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;x<buf->char_width;x++) { + for (int y=0;y<buf->char_height;y++) { + wprintf(L"\e[%d;%dH", y+1, x+1); + braillePrint(brailleReorganizeBits(buf->contents[y * buf->char_width + x])); + } + } +} |
