add bitmap numbers

This commit is contained in:
smayzy 2025-12-26 16:07:32 +01:00
parent 52e9338ca5
commit c2e04f379d

View File

@ -1,5 +1,20 @@
#include <ncurses.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int digit_bitmaps[10][5][3] = {
{{1,1,1},{1,0,1},{1,0,1},{1,0,1},{1,1,1}}, // 0
{{0,1,0},{1,1,0},{0,1,0},{0,1,0},{1,1,1}}, // 1
{{1,1,1},{0,0,1},{1,1,1},{1,0,0},{1,1,1}}, // 2
{{1,1,1},{0,0,1},{1,1,1},{0,0,1},{1,1,1}}, // 3
{{1,0,1},{1,0,1},{1,1,1},{0,0,1},{0,0,1}}, // 4
{{1,1,1},{1,0,0},{1,1,1},{0,0,1},{1,1,1}}, // 5
{{1,1,1},{1,0,0},{1,1,1},{1,0,1},{1,1,1}}, // 6
{{1,1,1},{0,0,1},{0,1,0},{0,1,0},{0,1,0}}, // 7
{{1,1,1},{1,0,1},{1,1,1},{1,0,1},{1,1,1}}, // 8
{{1,1,1},{1,0,1},{1,1,1},{0,0,1},{1,1,1}} // 9
};
void get_data(int *speed, int *power, int *bat, float *tq, int *rpm, int *eff, float *bat_temp, float *var_temp, float *mot_temp)
{
@ -14,6 +29,57 @@ void get_data(int *speed, int *power, int *bat, float *tq, int *rpm, int *eff, f
*mot_temp = (float)rand() / (float)RAND_MAX * 150.0f;
}
void win_clear(WINDOW *lwin) {
int y, x;
getmaxyx(lwin, y, x);
for (int i = 1; i < y - 1; i++) {
mvwhline(lwin, i, 1, ' ', x - 2);
}
}
int smaller_of(int a, int b) {
return (a < b) ? a : b;
}
void wspeed(WINDOW *lwin, int speed){
int lwiny, lwinx, len;
char buf[16];
getmaxyx(lwin, lwiny, lwinx);
snprintf(buf , sizeof(buf), "%d", speed);
len = strlen(buf);
int bh = 5; // bitmap height
int bw = 3; // bitmap width
int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (3 - 1)) / (bw * 3));
int total_width = 3 * (bw * size) + 2;
int startx = (lwinx - total_width) / 2;
int starty = (lwiny - bh * size) / 2;
win_clear(lwin);
for (int d = 0; d < len; d++) {
int digit = buf[d] - '0';
int dx = startx + d * (bw * size + 1);
for (int y = 0; y < bh; y++) {
for (int x = 0; x < bw; x++) {
if (digit_bitmaps[digit][y][x]) {
for (int yy = 0; yy < size; yy++)
for (int xx = 0; xx < size; xx++)
mvwaddch(lwin,
starty + y * size + yy,
dx + x * size + xx,
ACS_CKBOARD);
}
}
}
}
wrefresh(lwin);
}
int main()
{
initscr();
@ -25,6 +91,9 @@ int main()
int y,x;
getmaxyx(stdscr, y, x);
if (y < 42 || x < 100){
return 1;
}
WINDOW *win[10];
@ -71,6 +140,7 @@ int main()
while(ch == ERR)
{
get_data(&speed, &power, &bat, &tq, &rpm, &eff, &bat_temp, &var_temp, &mot_temp);
wspeed(win[0], speed);
ch = getch();
};