diff --git a/clients/lcdproc/batt.c b/clients/lcdproc/batt.c index 6c9237b..e646dc0 100644 --- a/clients/lcdproc/batt.c +++ b/clients/lcdproc/batt.c @@ -64,7 +64,7 @@ battery_status(int status) // Battery Screen shows apm battery status... // // +--------------------+ +--------------------+ -// |## Batt: 100%: an ##| |## Batt: 100%: an ##| +// |## AC: 100%: myho #@| |## AC: 100%: myho #@| // |AC: On | |AC, Batt: Absent | // |Batt: Absent | +--------------------+ // |E------------------F| diff --git a/clients/lcdproc/cpu.c b/clients/lcdproc/cpu.c index 86b2991..067efce 100644 --- a/clients/lcdproc/cpu.c +++ b/clients/lcdproc/cpu.c @@ -17,9 +17,31 @@ #include "cpu.h" +/** print a percentage value to a given string */ +static char * +sprintf_percent(char *str, double percent) +{ + if (str == NULL) + return NULL; + if (percent > 99.9) + strcpy(str, "100%"); + else + sprintf(str, "%.1f%%", (percent >= 0) ? percent : 0); + + return str; +} + + ////////////////////////////////////////////////////////////////////////// // CPU screen shows info about percentage of the CPU being used // +// +--------------------+ +--------------------+ +// |## CPU 51.9%: myh #@| |CPU0[---- ]48.1%@| +// |Usr 46.0% Nice 0.0%| |U-- S- N I--- | +// |Sys 5.9% Idle 48.1%| +--------------------+ +// |0%-------- 100%| +// +--------------------+ +// int cpu_screen(int rep, int display) { @@ -27,29 +49,35 @@ cpu_screen(int rep, int display) #define CPU_BUF_SIZE 4 static int first = TRUE; static float cpu[CPU_BUF_SIZE + 1][5]; // last buffer is scratch + static int gauge_wid = 0; + static int usni_wid = 0; int i, j, n; float value; load_type load; - if(first) - { + if (first) { first = FALSE; sock_send_string(sock, "screen_add C\n"); sprintf(buffer, "screen_set C -name {CPU Use: %s}\n", get_hostname()); sock_send_string(sock, buffer); - if(lcd_hgt >= 4) - { + if (lcd_hgt >= 4) { + gauge_wid = lcd_wid - 6; // room between 0%...100% + sock_send_string(sock, "widget_add C title title\n"); sock_send_string(sock, "widget_set C title {CPU LOAD}\n"); sock_send_string(sock, "widget_add C one string\n"); - sock_send_string(sock, "widget_set C one 1 2 {0 1 Sys 0.0%}\n"); sock_send_string(sock, "widget_add C two string\n"); sock_send_string(sock, "widget_add C three string\n"); - sock_send_string(sock, "widget_set C one 1 2 {Usr 0.0% Nice 0.0%}\n"); - sock_send_string(sock, "widget_set C two 1 3 {Sys 0.0% Idle 0.0%}\n"); - sock_send_string(sock, "widget_set C three 1 4 {0% 100%}\n"); + sprintf(buffer, "widget_set C one 1 2 {%-*s%-*s}\n", + lcd_wid / 2, "Usr", lcd_wid / 2, "Nice"); + sock_send_string(sock, buffer); + sprintf(buffer, "widget_set C two 1 3 {%-*s%-*s}\n", + lcd_wid / 2, "Sys", lcd_wid / 2, "Idle"); + sock_send_string(sock, buffer); + sprintf(buffer, "widget_set C three 1 4 {0%%%*s100%%}\n", gauge_wid, ""); + sock_send_string(sock, buffer); sock_send_string(sock, "widget_add C usr string\n"); sock_send_string(sock, "widget_add C nice string\n"); sock_send_string(sock, "widget_add C idle string\n"); @@ -57,18 +85,20 @@ cpu_screen(int rep, int display) sock_send_string(sock, "widget_add C bar hbar\n"); sock_send_string(sock, "widget_set C bar 3 4 0\n"); } - else - { + else { + usni_wid = (lcd_wid - 4)/ 4; // 4 gauges + 1 letter for each + gauge_wid = lcd_wid - 12; // room between [...] + sock_send_string(sock, "widget_add C cpu0 string\n"); - if(lcd_wid >= 20) - sock_send_string(sock, "widget_set C cpu0 1 1 {CPU0[ ]}\n"); - else - sock_send_string(sock, "widget_set C cpu0 1 1 {CPU0[ ]}\n"); + sprintf(buffer, "widget_set C cpu0 1 1 {CPU0[%*s]}\n", gauge_wid, ""); + sock_send_string(sock, buffer); sock_send_string(sock, "widget_add C cpu0% string\n"); - sprintf(buffer, "widget_set C cpu0%% 1 %d { 0.0%%}\n", lcd_wid - 4); + sprintf(buffer, "widget_set C cpu0%% 1 %d { 0.0%%}\n", lcd_wid - 5); sock_send_string(sock, buffer); sock_send_string(sock, "widget_add C usni string\n"); - sock_send_string(sock, "widget_set C usni 1 2 { U S N I}\n"); + sprintf(buffer, "widget_set C usni 1 2 {U%*sS%*sN%*sI%*s}\n", + usni_wid, "", usni_wid, "", usni_wid, "", usni_wid, ""); + sock_send_string(sock, buffer); sock_send_string(sock, "widget_add C usr hbar\n"); sock_send_string(sock, "widget_add C sys hbar\n"); sock_send_string(sock, "widget_add C nice hbar\n"); @@ -83,8 +113,8 @@ cpu_screen(int rep, int display) machine_get_load(&load); // Shift values over by one - for(i = 0; i < (CPU_BUF_SIZE - 1); i++) - for(j = 0; j < 5; j++) + for (i = 0; i < (CPU_BUF_SIZE - 1); i++) + for (j = 0; j < 5; j++) cpu[i][j] = cpu[i + 1][j]; // Read new data @@ -105,9 +135,8 @@ cpu_screen(int rep, int display) */ // Average values for final result - for(i = 0; i < 5; i++) - { - value = 0; + for(i = 0; i < 5; i++) { + value = 0.0; for(j = 0; j < CPU_BUF_SIZE; j++) value += cpu[j][i]; value /= CPU_BUF_SIZE; @@ -117,94 +146,72 @@ cpu_screen(int rep, int display) if(!display) return(0); - if(lcd_hgt >= 4) - { - value = cpu[CPU_BUF_SIZE][4]; - if(value >= 99.9) - sprintf(tmp, "100%%"); - else - sprintf(tmp, "%4.1f%%", value); - sprintf(buffer, "widget_set C title {CPU %s: %s}\n", tmp, get_hostname()); + if(lcd_hgt >= 4) { // 4-line display + sprintf_percent(tmp, cpu[CPU_BUF_SIZE][4]); + sprintf(buffer, "widget_set C title {CPU %5s: %s}\n", tmp, get_hostname()); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][0]; - if(value >= 99.9) - sprintf(tmp, " 100%%"); - else - sprintf(tmp, "%4.1f%%", value); - sprintf(buffer, "widget_set C usr 5 2 {%s}\n", tmp); + sprintf_percent(tmp, cpu[CPU_BUF_SIZE][0]); + sprintf(buffer, "widget_set C usr %i 2 {%5s}\n", (lcd_wid / 2) - 5, tmp); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][1]; - if(value >= 99.9) - sprintf(tmp, " 100%%"); - else - sprintf(tmp, "%4.1f%%", value); - sprintf(buffer, "widget_set C sys 5 3 {%s}\n", tmp); + sprintf_percent(tmp, cpu[CPU_BUF_SIZE][1]); + sprintf(buffer, "widget_set C sys %i 3 {%5s}\n", (lcd_wid / 2) - 5, tmp); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][2]; - if(value >= 99.9) - sprintf(tmp, " 100%%"); - else - sprintf(tmp, "%4.1f%%", value); - sprintf(buffer, "widget_set C nice 16 2 {%s}\n", tmp); + sprintf_percent(tmp, cpu[CPU_BUF_SIZE][2]); + sprintf(buffer, "widget_set C nice %i 2 {%5s}\n", lcd_wid - 4, tmp); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][3]; - if(value >= 99.9) - sprintf(tmp, " 100%%"); - else - sprintf(tmp, "%4.1f%%", value); - sprintf(buffer, "widget_set C idle 16 3 {%s}\n", tmp); + sprintf_percent(tmp, cpu[CPU_BUF_SIZE][3]); + sprintf(buffer, "widget_set C idle %i 3 {%5s}\n", lcd_wid - 4, tmp); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][4]; - n = (int)(value * (lcd_cellwid * 14) / 100.0); + n = (int) ((cpu[CPU_BUF_SIZE][4] * lcd_cellwid * gauge_wid) / 100.0); sprintf(buffer, "widget_set C bar 3 4 %d\n", n); sock_send_string(sock, buffer); } - else // 20x2 version - { - value = cpu[CPU_BUF_SIZE][4]; - if(value >= 99.9) - sprintf(tmp, "100%%"); - else - sprintf(tmp, "%4.1f%%", value); - sprintf(buffer, "widget_set C cpu0%% %d 1 {%s}\n", lcd_wid - 4, tmp); + else { // 2-line display + sprintf_percent(tmp, cpu[CPU_BUF_SIZE][4]); + sprintf(buffer, "widget_set C cpu0%% %d 1 {%5s}\n", lcd_wid - 5, tmp); sock_send_string(sock, buffer); - n = (float)(value * lcd_cellwid * (float) (lcd_wid - 11)) / 100.0; + n = (int) ((cpu[CPU_BUF_SIZE][4] * lcd_cellwid * gauge_wid) / 100.0); sprintf(buffer, "widget_set C total 6 1 %d\n", n); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][0]; - n = (float)(value * lcd_cellwid * 4.0) / 100.0; - sprintf(buffer, "widget_set C usr 1 2 %d\n", n); + n = (int) ((cpu[CPU_BUF_SIZE][0] * lcd_cellwid * usni_wid) / 100.0); + sprintf(buffer, "widget_set C usr %d 2 %d\n", 0 * (usni_wid + 1) + 2, n); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][1]; - n = (float)(value * lcd_cellwid * 3.0) / 100.0; - sprintf(buffer, "widget_set C sys 7 2 %d\n", n); + n = (int) ((cpu[CPU_BUF_SIZE][1] * lcd_cellwid * usni_wid) / 100.0); + sprintf(buffer, "widget_set C sys %d 2 %d\n", 1 * (usni_wid + 1) + 2, n); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][2]; - n = (float)(value * lcd_cellwid * 3.0) / 100.0; - sprintf(buffer, "widget_set C nice 12 2 %d\n", n); + n = (int) ((cpu[CPU_BUF_SIZE][2] * lcd_cellwid * usni_wid) / 100.0); + sprintf(buffer, "widget_set C nice %d 2 %d\n", 2 * (usni_wid + 1) + 2, n); sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][3]; - n = (float)(value * lcd_cellwid * 3.0) / 100.0; - sprintf(buffer, "widget_set C idle 17 2 %d\n", n); + n = (int) ((cpu[CPU_BUF_SIZE][3] * lcd_cellwid * usni_wid) / 100.0); + sprintf(buffer, "widget_set C idle %d 2 %d\n", 3 * (usni_wid + 1) + 2, n); sock_send_string(sock, buffer); } return(0); -} // End cpu_screen() +} // End cpu_screen() + + ////////////////////////////////////////////////////////////////////////// // Cpu Graph Screen shows a quick-moving histogram of CPU use. // +// +--------------------+ +--------------------+ +// |## CPU: myhost ####@| |CPU: myhos|| @| +// | || | | |||| | +// | ||| | +--------------------+ +// | |||| | +// +--------------------+ +// int cpu_graph_screen(int rep, int display) { @@ -214,31 +221,27 @@ cpu_graph_screen(int rep, int display) static float cpu[CPU_BUF_SIZE]; static int cpu_past[LCD_MAX_WIDTH]; - int i, j, n = 0; + int i, n = 0; float value ; load_type load; - if(first) - { + if (first) { first = FALSE; sock_send_string(sock, "screen_add G\n"); sprintf(buffer, "screen_set G -name {CPU Graph: %s}\n", get_hostname()); sock_send_string(sock, buffer); - if(lcd_hgt >= 4) - { + if(lcd_hgt >= 4) { sock_send_string(sock, "widget_add G title title\n"); sprintf(buffer, "widget_set G title {CPU: %s}\n", get_hostname()); } - else - { + else { sock_send_string(sock, "widget_add G title string\n"); sprintf(buffer, "widget_set G title 1 1 {CPU: %s}\n", get_hostname()); } sock_send_string(sock, buffer); - for(i = 1; i <= lcd_wid; i++) - { + for (i = 1; i <= lcd_wid; i++) { sprintf(buffer, "widget_add G %d vbar\n", i); sock_send_string(sock, buffer); sprintf(buffer, "widget_set G %d %d %d 0\n", i, i, lcd_hgt); @@ -247,12 +250,12 @@ cpu_graph_screen(int rep, int display) }; // Clear out CPU averaging array - for(i = 0; i < CPU_BUF_SIZE ; i++) + for (i = 0; i < CPU_BUF_SIZE ; i++) cpu[i] = 0.; } // Shift values over by one - for(i = 0; i < (CPU_BUF_SIZE-1); i++) + for (i = 0; i < (CPU_BUF_SIZE-1); i++) cpu[i] = cpu[i+1]; // Read and save new data @@ -260,24 +263,19 @@ cpu_graph_screen(int rep, int display) cpu[CPU_BUF_SIZE-1] = ((float) load.user + (float) load.system + (float) load.nice) / (float) load.total; // Average values for final result - value = 0; - for(j = 0; j < CPU_BUF_SIZE; j++) - value += cpu[j]; - value /= (float) CPU_BUF_SIZE; + value = 0.0; + for (i = 0; i < CPU_BUF_SIZE; i++) + value += cpu[i]; + value /= CPU_BUF_SIZE; - // Scale result to available height - if(lcd_hgt > 2) - n = (int)(value * (float)(lcd_cellhgt) * (float)(lcd_hgt - 1)); - else - n = (int)(value * (float)(lcd_cellhgt) * (float)(lcd_hgt)); + // Scale result to available height (leave 1st line free when height > 2) + n = (int) (value * lcd_cellhgt * ((lcd_hgt > 2) ? (lcd_hgt - 1) : lcd_hgt)); // Shift and update display the graph - for(i = 0; i < lcd_wid - 1; i++) - { + for (i = 0; i < lcd_wid - 1; i++) { cpu_past[i] = cpu_past[i + 1]; - if(display) - { + if (display) { sprintf(buffer, "widget_set G %d %d %d %d\n", i + 1, i + 1, lcd_hgt, cpu_past[i]); sock_send_string(sock, buffer); @@ -286,8 +284,7 @@ cpu_graph_screen(int rep, int display) // Save the newest entry and display it cpu_past[lcd_wid - 1] = n; - if(display) - { + if (display) { sprintf(buffer, "widget_set G %d %d %d %d\n", lcd_wid, lcd_wid, lcd_hgt, n); sock_send_string(sock, buffer); }