From 94a65c28894317e63354bf46cdbc29ceff176573 Mon Sep 17 00:00:00 2001 From: smayzy Date: Sat, 11 Apr 2026 16:35:36 +0200 Subject: [PATCH] avoid copy of struct at each function call --- src/main.c | 114 ++++++++++++++++++++++++++--------------------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/src/main.c b/src/main.c index ab3a196..f89de2f 100644 --- a/src/main.c +++ b/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;