X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fprint_load.c;h=e0ba6771f710b1bbaa1d8d2694b7c7318be6b4a9;hb=02be7c6fdf14250232529ce928ab96309057bdc0;hp=6e61ae694bcee3b52746c294ce14a577c170fda0;hpb=41be50a983e4c7313ef63b4b5a7b2db30575c9ba;p=i3%2Fi3status diff --git a/src/print_load.c b/src/print_load.c index 6e61ae6..e0ba677 100644 --- a/src/print_load.c +++ b/src/print_load.c @@ -1,4 +1,4 @@ -// vim:ts=8:expandtab +// vim:ts=4:sw=4:expandtab #include "i3status.h" #include #include @@ -6,52 +6,56 @@ #include #include -void print_load(yajl_gen json_gen, char *buffer, const char *format, const float max_threshold) { - char *outwalk = buffer; - /* Get load */ +void print_load(yajl_gen json_gen, char *buffer, const char *format, const char *format_above_threshold, const float max_threshold) { + char *outwalk = buffer; +/* Get load */ #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(linux) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__) || defined(sun) || defined(__DragonFly__) - double loadavg[3]; - const char *walk; - bool colorful_output = false; - - if (getloadavg(loadavg, 3) == -1) - goto error; - - for (walk = format; *walk != '\0'; walk++) { - if (*walk != '%') { - *(outwalk++) = *walk; - continue; - } - if (loadavg[0] >= max_threshold) { - START_COLOR("color_bad"); - colorful_output = true; - } - - if (BEGINS_WITH(walk+1, "1min")) { - outwalk += sprintf(outwalk, "%1.2f", loadavg[0]); - walk += strlen("1min"); - } - - if (BEGINS_WITH(walk+1, "5min")) { - outwalk += sprintf(outwalk, "%1.2f", loadavg[1]); - walk += strlen("5min"); - } - - if (BEGINS_WITH(walk+1, "15min")) { - outwalk += sprintf(outwalk, "%1.2f", loadavg[2]); - walk += strlen("15min"); - } - if (colorful_output) - END_COLOR; + double loadavg[3]; + const char *selected_format = format; + const char *walk; + bool colorful_output = false; + + if (getloadavg(loadavg, 3) == -1) + goto error; + + if (loadavg[0] >= max_threshold) { + START_COLOR("color_bad"); + colorful_output = true; + if (format_above_threshold != NULL) + selected_format = format_above_threshold; + } + + for (walk = selected_format; *walk != '\0'; walk++) { + if (*walk != '%') { + *(outwalk++) = *walk; + + } else if (BEGINS_WITH(walk + 1, "1min")) { + outwalk += sprintf(outwalk, "%1.2f", loadavg[0]); + walk += strlen("1min"); + + } else if (BEGINS_WITH(walk + 1, "5min")) { + outwalk += sprintf(outwalk, "%1.2f", loadavg[1]); + walk += strlen("5min"); + + } else if (BEGINS_WITH(walk + 1, "15min")) { + outwalk += sprintf(outwalk, "%1.2f", loadavg[2]); + walk += strlen("15min"); + + } else { + *(outwalk++) = '%'; } + } - *outwalk = '\0'; - OUTPUT_FULL_TEXT(buffer); + if (colorful_output) + END_COLOR; - return; + *outwalk = '\0'; + OUTPUT_FULL_TEXT(buffer); + + return; error: #endif - OUTPUT_FULL_TEXT("cant read load"); - (void)fputs("i3status: Cannot read system load using getloadavg()\n", stderr); + OUTPUT_FULL_TEXT("cant read load"); + (void)fputs("i3status: Cannot read system load using getloadavg()\n", stderr); }