aboutsummaryrefslogtreecommitdiff
path: root/brailleboi.c
diff options
context:
space:
mode:
Diffstat (limited to 'brailleboi.c')
-rw-r--r--brailleboi.c30
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]));
+ }
+ }
+}