From 88c6db07c256045212d98bf416efb01b117ef102 Mon Sep 17 00:00:00 2001 From: drath Date: Mon, 11 May 2026 10:45:42 +0200 Subject: [PATCH] add and use pretty num --- include/utils.h | 4 +++- src/main.c | 2 +- src/utils.c | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/include/utils.h b/include/utils.h index 0c76c0e..504eb9c 100644 --- a/include/utils.h +++ b/include/utils.h @@ -6,6 +6,7 @@ uint64_t timespec_diff_us(const struct timespec *a, const struct timespec *b); void timespec_add_ms(struct timespec *ts, uint16_t ms); char *pretty_bytes(uint64_t bytes, int8_t start_suffix, char *buf, size_t bufsz); +char *pretty_num(const double num, char *buf, const size_t bufsz); void fast_read_num_u64(const char* dir, const char* file, char* buf, uint64_t* result, uint32_t divider); void fast_read_num_u16(const char* dir, const char* file, char* buf, uint16_t* result, uint32_t divider); @@ -20,6 +21,7 @@ int get_hwmon_dir(char *path); #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define P_BYTES(kb, start) pretty_bytes((kb), (start), (char[16]){0}, 16) +#define P_BYTES(bytes, start) pretty_bytes((bytes), (start), (char[16]){0}, 16) +#define P_NUM(num) pretty_num((num), (char[8]){0}, 8) #endif diff --git a/src/main.c b/src/main.c index d3f928a..9b773e4 100644 --- a/src/main.c +++ b/src/main.c @@ -117,7 +117,7 @@ static void *display_thread(void *arg) { snprintf(gpuclock, sizeof(gpuclock), "%d/%dMHz", sensors->gpu.clock_core, sensors->gpu.clock_mem); lcd_writef(&lcd, 0, 0, "%s %s%c", sensors->td.date, sensors->td.time, lcd_bar(&lcd, 5, sensors->gpu.usage_core / 100.0)); - lcd_writef(&lcd, 26, 0, "%.2f %.2f %.2f", sensors->loadavg[0], sensors->loadavg[1], sensors->loadavg[2]); // will fuck up + lcd_writef(&lcd, 26, 0, "%s %s %s", P_NUM(sensors->loadavg[0]), P_NUM(sensors->loadavg[1]), P_NUM(sensors->loadavg[2])); lcd_writef(&lcd, 0, 1, "%d/%d%c", sensors->cpu.tctl, sensors->cpu.tccd1, 0); lcd_writef(&lcd, 7, 1, "%s", P_BYTES(sensors->ram.used, 0)); diff --git a/src/utils.c b/src/utils.c index 41cb9f3..153ecd1 100644 --- a/src/utils.c +++ b/src/utils.c @@ -10,7 +10,10 @@ #include "log.h" #include "utils.h" -#define MKPATH(path, dir, file) do {char *nt = stpcpy(path, dir); *nt++ = '/'; stpcpy(nt, file); } while (0) +#define MKPATH(path, dir, file) do { \ + char *nt = stpcpy(path, dir); \ + *nt++ = '/'; stpcpy(nt, file); \ + } while (0) inline void timespec_add_ms(struct timespec *ts, const uint16_t ms) { ts->tv_nsec += ms * 1000000L; @@ -26,7 +29,13 @@ inline uint64_t timespec_diff_us(const struct timespec *a, const struct timespec return sec * 1000000LL + nsec / 1000LL; } -char *pretty_bytes(const uint64_t bytes, int8_t start_suffix, char *buf, const size_t bufsz) { +inline char *pretty_num(const double num, char *buf, const size_t bufsz) { + const uint8_t decimals = (num < 10) ? 2 : (num < 100) ? 1 : 0; + snprintf(buf, bufsz, "%.*f", decimals, num); + return buf; +} + +inline char *pretty_bytes(const uint64_t bytes, int8_t start_suffix, char *buf, const size_t bufsz) { constexpr char suffix_list[] = {'K', 'M', 'G', 'T', 'P', 'E', 'Z'}; start_suffix *= -1; double bytes_d = (double)bytes; @@ -34,8 +43,7 @@ char *pretty_bytes(const uint64_t bytes, int8_t start_suffix, char *buf, const s bytes_d /= 1024.0; start_suffix++; } - const uint8_t decimals = (bytes_d < 10) ? 2 : (bytes_d < 100) ? 1 : 0; - snprintf(buf, bufsz, "%.*f%c", decimals, bytes_d, suffix_list[MAX(0, start_suffix)]); + snprintf(buf, bufsz, "%s%c", P_NUM(bytes_d), suffix_list[MAX(0, start_suffix)]); return buf; }