avoid copy of struct at each function call
This commit is contained in:
parent
a0dab8fd7f
commit
94a65c2889
114
src/main.c
114
src/main.c
@ -168,32 +168,32 @@ void bar_mark(WINDOW *lwin) {
|
||||
mvwaddch(lwin, lwiny - 1, last_mark + 1, '|');
|
||||
}
|
||||
|
||||
void win_int(StInt st, bool use_color) {
|
||||
void win_int(StInt *st, bool use_color) {
|
||||
int color;
|
||||
if (st.high) {
|
||||
color = color_high(st.data, st.ldata, st.hdata);
|
||||
if (st->high) {
|
||||
color = color_high(st->data, st->ldata, st->hdata);
|
||||
} else {
|
||||
color = color_low(st.data, st.ldata, st.hdata);
|
||||
color = color_low(st->data, st->ldata, st->hdata);
|
||||
};
|
||||
int lwiny, lwinx, len;
|
||||
char buf[16];
|
||||
getmaxyx(st.lwin, lwiny, lwinx);
|
||||
snprintf(buf , sizeof(buf), "%d", st.data);
|
||||
getmaxyx(st->lwin, lwiny, lwinx);
|
||||
snprintf(buf , sizeof(buf), "%d", st->data);
|
||||
len = strlen(buf);
|
||||
|
||||
int bh = 5; // bitmap height
|
||||
int bw = 3; // bitmap width
|
||||
|
||||
int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (st.digits - 1)) / (bw * st.digits));
|
||||
int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (st->digits - 1)) / (bw * st->digits));
|
||||
|
||||
int total_width = st.digits * (bw * size) + (st.digits - 1);
|
||||
int total_width = st->digits * (bw * size) + (st->digits - 1);
|
||||
int startx = (lwinx - total_width) / 2;
|
||||
int starty = (lwiny - bh * size) / 2;
|
||||
int offset = (bw * size + 1) * (st.digits - len);
|
||||
int offset = (bw * size + 1) * (st->digits - len);
|
||||
|
||||
win_clear(st.lwin);
|
||||
win_clear(st->lwin);
|
||||
|
||||
if (use_color) wattron(st.lwin, COLOR_PAIR(color));
|
||||
if (use_color) wattron(st->lwin, COLOR_PAIR(color));
|
||||
|
||||
for (int d = 0; d < len; d++) {
|
||||
int digit = buf[d] - '0';
|
||||
@ -204,7 +204,7 @@ void win_int(StInt st, bool use_color) {
|
||||
if (digit_bitmaps[digit][y][x]) {
|
||||
for (int yy = 0; yy < size; yy++)
|
||||
for (int xx = 0; xx < size; xx++)
|
||||
mvwaddch(st.lwin,
|
||||
mvwaddch(st->lwin,
|
||||
starty + y * size + yy,
|
||||
dx + x * size + xx,
|
||||
ACS_CKBOARD);
|
||||
@ -213,39 +213,39 @@ void win_int(StInt st, bool use_color) {
|
||||
}
|
||||
}
|
||||
|
||||
if (use_color) wattroff(st.lwin, COLOR_PAIR(color));
|
||||
if (use_color) wattroff(st->lwin, COLOR_PAIR(color));
|
||||
|
||||
wrefresh(st.lwin);
|
||||
wrefresh(st->lwin);
|
||||
}
|
||||
|
||||
void win_float(StFlt st, bool use_color) {
|
||||
void win_float(StFlt *st, bool use_color) {
|
||||
int color;
|
||||
if (st.high) {
|
||||
color = color_high(st.data, st.ldata, st.hdata);
|
||||
if (st->high) {
|
||||
color = color_high(st->data, st->ldata, st->hdata);
|
||||
} else {
|
||||
color = color_low(st.data, st.ldata, st.hdata);
|
||||
color = color_low(st->data, st->ldata, st->hdata);
|
||||
};
|
||||
int lwiny, lwinx, len;
|
||||
char buf[16];
|
||||
|
||||
getmaxyx(st.lwin, lwiny, lwinx);
|
||||
getmaxyx(st->lwin, lwiny, lwinx);
|
||||
|
||||
snprintf(buf , sizeof(buf), "%.1f", st.data);
|
||||
snprintf(buf , sizeof(buf), "%.1f", st->data);
|
||||
len = strlen(buf);
|
||||
|
||||
int bh = 5; // bitmap height
|
||||
int bw = 3; // bitmap width
|
||||
|
||||
int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (st.digits - 1)) / (bw * st.digits));
|
||||
int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (st->digits - 1)) / (bw * st->digits));
|
||||
|
||||
int total_width = st.digits * (bw * size) + (st.digits - 1);
|
||||
int total_width = st->digits * (bw * size) + (st->digits - 1);
|
||||
int startx = (lwinx - total_width) / 2;
|
||||
int starty = (lwiny - bh * size) / 2;
|
||||
int offset = (bw * size + 1) * (st.digits - len);
|
||||
int offset = (bw * size + 1) * (st->digits - len);
|
||||
|
||||
win_clear(st.lwin);
|
||||
win_clear(st->lwin);
|
||||
|
||||
if (use_color) wattron(st.lwin, COLOR_PAIR(color));
|
||||
if (use_color) wattron(st->lwin, COLOR_PAIR(color));
|
||||
|
||||
for (int d = 0; d < len; d++) {
|
||||
int dx = startx + d * (bw * size + 1) + offset;
|
||||
@ -254,7 +254,7 @@ void win_float(StFlt st, bool use_color) {
|
||||
for (int yy = 0; yy < size; yy++)
|
||||
for (int xx = 0; xx < size; xx++)
|
||||
mvwaddch(
|
||||
st.lwin,
|
||||
st->lwin,
|
||||
starty + (bh - 1) * size + yy,
|
||||
dx + xx,
|
||||
ACS_CKBOARD
|
||||
@ -269,7 +269,7 @@ void win_float(StFlt st, bool use_color) {
|
||||
if (digit_bitmaps[digit][y][x]) {
|
||||
for (int yy = 0; yy < size; yy++)
|
||||
for (int xx = 0; xx < size; xx++)
|
||||
mvwaddch(st.lwin,
|
||||
mvwaddch(st->lwin,
|
||||
starty + y * size + yy,
|
||||
dx + x * size + xx,
|
||||
ACS_CKBOARD);
|
||||
@ -278,20 +278,20 @@ void win_float(StFlt st, bool use_color) {
|
||||
}
|
||||
}
|
||||
|
||||
if (use_color) wattroff(st.lwin, COLOR_PAIR(color));
|
||||
if (use_color) wattroff(st->lwin, COLOR_PAIR(color));
|
||||
|
||||
wrefresh(st.lwin);
|
||||
wrefresh(st->lwin);
|
||||
}
|
||||
|
||||
void win_bar(StInt st, bool use_color) {
|
||||
void win_bar(StInt *st, bool use_color) {
|
||||
int lwiny, lwinx;
|
||||
getmaxyx(st.lwin, lwiny, lwinx);
|
||||
getmaxyx(st->lwin, lwiny, lwinx);
|
||||
|
||||
win_clear(st.lwin);
|
||||
win_clear(st->lwin);
|
||||
|
||||
int bar_width = lwinx - 4;
|
||||
int bar_height = lwiny - 2;
|
||||
int filled = (st.data * bar_width) / st.hdata;
|
||||
int filled = (st->data * bar_width) / st->hdata;
|
||||
int yellow = (75 * bar_width) / 100;
|
||||
int red = (90 * bar_width) / 100;
|
||||
|
||||
@ -299,40 +299,40 @@ void win_bar(StInt st, bool use_color) {
|
||||
for (int x = 0; x < filled; x++) {
|
||||
if (use_color) {
|
||||
if (x < yellow)
|
||||
wattron(st.lwin, COLOR_PAIR(3));
|
||||
wattron(st->lwin, COLOR_PAIR(3));
|
||||
else if (x < red)
|
||||
wattron(st.lwin, COLOR_PAIR(2));
|
||||
wattron(st->lwin, COLOR_PAIR(2));
|
||||
else
|
||||
wattron(st.lwin, COLOR_PAIR(1));
|
||||
wattron(st->lwin, COLOR_PAIR(1));
|
||||
}
|
||||
mvwaddch(st.lwin, y, 2 + x, ACS_CKBOARD);
|
||||
mvwaddch(st->lwin, y, 2 + x, ACS_CKBOARD);
|
||||
}
|
||||
}
|
||||
|
||||
if (use_color) {
|
||||
wattroff(st.lwin, COLOR_PAIR(3));
|
||||
wattroff(st.lwin, COLOR_PAIR(2));
|
||||
wattroff(st.lwin, COLOR_PAIR(1));
|
||||
wattroff(st->lwin, COLOR_PAIR(3));
|
||||
wattroff(st->lwin, COLOR_PAIR(2));
|
||||
wattroff(st->lwin, COLOR_PAIR(1));
|
||||
}
|
||||
|
||||
if (use_color) {
|
||||
wattroff(st.lwin, COLOR_PAIR(0));
|
||||
wattroff(st->lwin, COLOR_PAIR(0));
|
||||
}
|
||||
|
||||
char buf[16];
|
||||
int len;
|
||||
snprintf(buf , sizeof(buf), "%d", st.data);
|
||||
snprintf(buf , sizeof(buf), "%d", st->data);
|
||||
len = strlen(buf);
|
||||
|
||||
int bh = 5; // bitmap height
|
||||
int bw = 3; // bitmap width
|
||||
|
||||
int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (st.digits - 1)) / (bw * st.digits));
|
||||
int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (st->digits - 1)) / (bw * st->digits));
|
||||
|
||||
int total_width = st.digits * (bw * size) + (st.digits - 1);
|
||||
int total_width = st->digits * (bw * size) + (st->digits - 1);
|
||||
int startx = (lwinx - total_width) / 3;
|
||||
int starty = (lwiny - bh * size) / 2;
|
||||
int offset = (bw * size + 1) * (st.digits - len);
|
||||
int offset = (bw * size + 1) * (st->digits - len);
|
||||
|
||||
for (int d = 0; d < len; d++) {
|
||||
int digit = buf[d] - '0';
|
||||
@ -343,7 +343,7 @@ void win_bar(StInt st, bool use_color) {
|
||||
if (digit_bitmaps[digit][y][x]) {
|
||||
for (int yy = 0; yy < size; yy++)
|
||||
for (int xx = 0; xx < size; xx++)
|
||||
mvwaddch(st.lwin,
|
||||
mvwaddch(st->lwin,
|
||||
starty + y * size + yy,
|
||||
dx + x * size + xx,
|
||||
ACS_CKBOARD);
|
||||
@ -352,10 +352,10 @@ void win_bar(StInt st, bool use_color) {
|
||||
}
|
||||
}
|
||||
|
||||
wrefresh(st.lwin);
|
||||
wrefresh(st->lwin);
|
||||
|
||||
if (use_color) {
|
||||
wattroff(st.lwin, COLOR_PAIR(0));
|
||||
wattroff(st->lwin, COLOR_PAIR(0));
|
||||
}
|
||||
}
|
||||
|
||||
@ -489,18 +489,18 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
long now = now_ms();
|
||||
if (now - t100 >= 100 * delay) {
|
||||
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);
|
||||
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);
|
||||
t100 = now;
|
||||
}
|
||||
if (now - t1000 >= 1000 * delay) {
|
||||
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);
|
||||
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;
|
||||
}
|
||||
//message;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user