add bitmap numbers
This commit is contained in:
parent
52e9338ca5
commit
c2e04f379d
70
src/main.c
70
src/main.c
@ -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();
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user