simplify color logic
This commit is contained in:
parent
f4f540e532
commit
8f20eb454c
109
src/main.c
109
src/main.c
@ -1,5 +1,6 @@
|
||||
#include <ctype.h>
|
||||
#include <ncurses.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -24,6 +25,7 @@ typedef struct{
|
||||
int ldata;
|
||||
int hdata;
|
||||
int digits;
|
||||
bool high;
|
||||
WINDOW *lwin;
|
||||
} StInt;
|
||||
typedef struct{
|
||||
@ -31,6 +33,7 @@ typedef struct{
|
||||
float ldata;
|
||||
float hdata;
|
||||
int digits;
|
||||
bool high;
|
||||
WINDOW *lwin;
|
||||
} StFlt;
|
||||
typedef struct{
|
||||
@ -80,7 +83,39 @@ int smaller_of(int a, int b) {
|
||||
return (a < b) ? a : b;
|
||||
}
|
||||
|
||||
void win_int(StInt st, int use_color, int color) {
|
||||
int color_high(float data, float ldata, float hdata) {
|
||||
int percent = (int)((100.0f * (data - ldata)) / (hdata - ldata) + 0.5f);
|
||||
if (percent >= 90) return 1;
|
||||
else if (percent >= 75) return 2;
|
||||
else return 3;
|
||||
}
|
||||
|
||||
int color_low(float data, float ldata, float hdata) {
|
||||
int percent = 100 - (int)((100.0f * (data - ldata)) / (hdata - ldata) + 0.5f);
|
||||
if (percent >= 90) return 1;
|
||||
else if (percent >= 75) return 2;
|
||||
else return 3;
|
||||
}
|
||||
|
||||
void bar_mark(WINDOW *lwin) {
|
||||
int lwiny, lwinx;
|
||||
int first_mark, last_mark;
|
||||
getmaxyx(lwin, lwiny, lwinx);
|
||||
first_mark = (75 * (lwinx - 4)) / 100;
|
||||
last_mark = (90 * (lwinx - 4)) / 100;
|
||||
mvwaddch(lwin, 0, first_mark + 1, '|');
|
||||
mvwaddch(lwin, lwiny - 1, first_mark + 1, '|');
|
||||
mvwaddch(lwin, 0, last_mark + 1, '|');
|
||||
mvwaddch(lwin, lwiny - 1, last_mark + 1, '|');
|
||||
}
|
||||
|
||||
void win_int(StInt st, bool use_color) {
|
||||
int color;
|
||||
if (st.high) {
|
||||
color = color_high(st.data, st.ldata, st.hdata);
|
||||
} else {
|
||||
color = color_low(st.data, st.ldata, st.hdata);
|
||||
};
|
||||
int lwiny, lwinx, len;
|
||||
char buf[16];
|
||||
getmaxyx(st.lwin, lwiny, lwinx);
|
||||
@ -124,7 +159,13 @@ void win_int(StInt st, int use_color, int color) {
|
||||
wrefresh(st.lwin);
|
||||
}
|
||||
|
||||
void win_float(StFlt st, int use_color, int color) {
|
||||
void win_float(StFlt st, bool use_color) {
|
||||
int color;
|
||||
if (st.high) {
|
||||
color = color_high(st.data, st.ldata, st.hdata);
|
||||
} else {
|
||||
color = color_low(st.data, st.ldata, st.hdata);
|
||||
};
|
||||
int lwiny, lwinx, len;
|
||||
char buf[16];
|
||||
|
||||
@ -183,7 +224,7 @@ void win_float(StFlt st, int use_color, int color) {
|
||||
wrefresh(st.lwin);
|
||||
}
|
||||
|
||||
void win_bar(StInt st, int use_color) {
|
||||
void win_bar(StInt st, bool use_color) {
|
||||
int lwiny, lwinx;
|
||||
getmaxyx(st.lwin, lwiny, lwinx);
|
||||
|
||||
@ -259,32 +300,6 @@ void win_bar(StInt st, int use_color) {
|
||||
}
|
||||
}
|
||||
|
||||
void bar_mark(WINDOW *lwin) {
|
||||
int lwiny, lwinx;
|
||||
int first_mark, last_mark;
|
||||
getmaxyx(lwin, lwiny, lwinx);
|
||||
first_mark = (75 * (lwinx - 4)) / 100;
|
||||
last_mark = (90 * (lwinx - 4)) / 100;
|
||||
mvwaddch(lwin, 0, first_mark + 1, '|');
|
||||
mvwaddch(lwin, lwiny - 1, first_mark + 1, '|');
|
||||
mvwaddch(lwin, 0, last_mark + 1, '|');
|
||||
mvwaddch(lwin, lwiny - 1, last_mark + 1, '|');
|
||||
}
|
||||
|
||||
int color_high(float data, float ldata, float hdata) {
|
||||
int percent = (int)((100.0f * (data - ldata)) / (hdata - ldata) + 0.5f);
|
||||
if (percent >= 90) return 1;
|
||||
else if (percent >= 75) return 2;
|
||||
else return 3;
|
||||
}
|
||||
|
||||
short color_low(float data, float ldata, float hdata) {
|
||||
int percent = 100 - (int)((100.0f * (data - ldata)) / (hdata - ldata) + 0.5f);
|
||||
if (percent >= 90) return 1;
|
||||
else if (percent >= 75) return 2;
|
||||
else return 3;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
int option;
|
||||
int delay = 1;
|
||||
@ -322,7 +337,7 @@ int main(int argc, char **argv) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int use_color = 0;
|
||||
bool use_color = 0;
|
||||
if (has_colors()) {
|
||||
use_color = 1;
|
||||
start_color();
|
||||
@ -335,15 +350,15 @@ int main(int argc, char **argv) {
|
||||
WINDOW *win[10];
|
||||
|
||||
Tel tel;
|
||||
tel.speed = (StInt){0, 0, 200, 3, NULL};
|
||||
tel.rpm = (StInt){0, 0, 6000, 4, NULL};
|
||||
tel.tq = (StFlt){0.0f, 1.8f, 3.5f, 3, NULL};
|
||||
tel.power = (StInt){0, 0, 1300, 4, NULL};
|
||||
tel.eff = (StFlt){0.0f, 0.0f, 300.0f, 5, NULL};
|
||||
tel.bat = (StInt){0, 0, 100, 3, NULL};
|
||||
tel.bat_temp = (StFlt){0.0f, 0.0f, 150.0f, 5, NULL};
|
||||
tel.var_temp = (StFlt){0.0f, 0.0f, 150.0f, 5, NULL};
|
||||
tel.mot_temp = (StFlt){0.0f, 0.0f, 150.0f, 5, NULL};
|
||||
tel.speed = (StInt){0, 0, 200, 3, 1, NULL};
|
||||
tel.rpm = (StInt){0, 0, 6000, 4, 1, NULL};
|
||||
tel.tq = (StFlt){0.0f, 1.8f, 3.5f, 3, 1, NULL};
|
||||
tel.power = (StInt){0, 0, 1300, 4, 1, NULL};
|
||||
tel.eff = (StFlt){0.0f, 0.0f, 300.0f, 5, 1, NULL};
|
||||
tel.bat = (StInt){0, 0, 100, 3, 0, NULL};
|
||||
tel.bat_temp = (StFlt){0.0f, 0.0f, 150.0f, 5, 1, NULL};
|
||||
tel.var_temp = (StFlt){0.0f, 0.0f, 150.0f, 5, 1, NULL};
|
||||
tel.mot_temp = (StFlt){0.0f, 0.0f, 150.0f, 5, 1, NULL};
|
||||
tel.message = (StStr){NULL};
|
||||
|
||||
int x3 = x / 3;
|
||||
@ -413,18 +428,18 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
long now = now_ms();
|
||||
if (now - t100 >= 100 * delay) {
|
||||
win_int(tel.speed, use_color, color_high(tel.speed.data, tel.speed.ldata, tel.speed.hdata));
|
||||
win_int(tel.rpm, use_color, color_high(tel.rpm.data, tel.rpm.ldata, tel.rpm.hdata));
|
||||
win_float(tel.tq, use_color, color_high(tel.tq.data, tel.tq.ldata, tel.tq.hdata));
|
||||
win_int(tel.speed, use_color);
|
||||
win_int(tel.rpm, use_color);
|
||||
win_float(tel.tq, use_color);
|
||||
win_bar(tel.power, use_color);
|
||||
win_float(tel.eff, use_color, color_high(tel.eff.data, tel.eff.ldata, tel.eff.hdata));
|
||||
win_float(tel.eff, use_color);
|
||||
t100 = now;
|
||||
}
|
||||
if (now - t1000 >= 1000 * delay) {
|
||||
win_int(tel.bat, use_color, color_low(tel.bat.data, tel.bat.ldata, tel.bat.hdata));
|
||||
win_float(tel.bat_temp, use_color, color_high(tel.bat_temp.data, tel.bat_temp.ldata, tel.bat_temp.hdata));
|
||||
win_float(tel.var_temp, use_color, color_high(tel.var_temp.data, tel.var_temp.ldata, tel.var_temp.hdata));
|
||||
win_float(tel.mot_temp, use_color, color_high(tel.mot_temp.data, tel.mot_temp.ldata, tel.mot_temp.hdata));
|
||||
win_int(tel.bat, use_color);
|
||||
win_float(tel.bat_temp, use_color);
|
||||
win_float(tel.var_temp, use_color);
|
||||
win_float(tel.mot_temp, use_color);
|
||||
t1000 = now;
|
||||
}
|
||||
//win[9];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user