diff options
author | Michael Stapelberg <michael+x200@stapelberg.de> | 2008-10-07 11:45:52 +0200 |
---|---|---|
committer | Michael Stapelberg <michael+x200@stapelberg.de> | 2008-10-07 11:45:52 +0200 |
commit | 7fa8c4b9a954647db79f79b78b33d79c00acd250 (patch) | |
tree | cdd25efa79a1c098ea2daf963ba2d2b4c951703d /wmiistatus.c | |
parent | e94e25208936ab8f6ab684b1b229bc29073b955d (diff) |
Write information in separate files, define order
wmii will show them with little border between, better than the previous
method, where an ascii bar was shown
Diffstat (limited to 'wmiistatus.c')
-rw-r--r-- | wmiistatus.c | 63 |
1 files changed, 53 insertions, 10 deletions
diff --git a/wmiistatus.c b/wmiistatus.c index bdb1e6a..c26781a 100644 --- a/wmiistatus.c +++ b/wmiistatus.c @@ -48,18 +48,55 @@ #include <netinet/in.h> #include <arpa/inet.h> #include <glob.h> +#include <dirent.h> #include "wmiistatus.h" #include "config.h" -static void write_to_statusbar(const char *message) { - int fd = open(wmii_path, O_RDWR); +static void cleanup_rbar_dir() { + struct dirent *ent; + DIR *dir; + char pathbuf[strlen(wmii_path)+256+1]; + + if ((dir = opendir(wmii_path)) == NULL) + exit(-3); + + while ((ent = readdir(dir)) != NULL) { + if (ent->d_type == DT_REG) { + sprintf(pathbuf, "%s%s", wmii_path, ent->d_name); + unlink(pathbuf); + } + } + + closedir(dir); +} + +static void create_file(const char *name) { + char pathbuf[strlen(wmii_path)+256+1]; + + sprintf(pathbuf, "%s%s", wmii_path, name); + int fd = creat(pathbuf, S_IRUSR | S_IWUSR); + if (fd < 0) + exit(-4); + close(fd); +} + +static void write_to_statusbar(const char *name, const char *message) { + char pathbuf[strlen(wmii_path)+256+1]; + + sprintf(pathbuf, "%s%s", wmii_path, name); + int fd = open(pathbuf, O_RDWR); if (fd == -1) exit(-2); write(fd, message, strlen(message)); close(fd); } +static void write_error_to_statusbar(const char *message) { + cleanup_rbar_dir(); + write_to_statusbar("error", message); +} + /* * Write errormessage to statusbar and exit * @@ -71,7 +108,7 @@ static void die(const char *fmt, ...) { vsprintf(buffer, fmt, ap); va_end(ap); - write_to_statusbar(buffer); + write_error_to_statusbar(buffer); exit(-1); } @@ -277,6 +314,13 @@ int main(void) { *end; unsigned int i; + cleanup_rbar_dir(); + create_file(ORDER_WLAN "wlan"); + create_file(ORDER_ETH "eth"); + create_file(ORDER_BATTERY "battery"); + create_file(ORDER_LOAD "load"); + create_file(ORDER_TIME "time"); + while (1) { memset(output, '\0', sizeof(output)); first_push = true; @@ -287,13 +331,13 @@ int main(void) { } char *wireless_info = get_wireless_info(); - push_part(wireless_info, strlen(wireless_info)); + write_to_statusbar(ORDER_WLAN "wlan", wireless_info); char *eth_info = get_eth_info(); - push_part(eth_info, strlen(eth_info)); + write_to_statusbar(ORDER_ETH "eth", eth_info); char *battery_info = get_battery_info(); - push_part(battery_info, strlen(battery_info)); + write_to_statusbar(ORDER_BATTERY "battery", battery_info); /* Get load */ int load_avg = open("/proc/loadavg", O_RDONLY); @@ -302,15 +346,14 @@ int main(void) { read(load_avg, part, sizeof(part)); close(load_avg); end = skip_character(part, ' ', 3); - push_part(part, (end-part)); + *end = '\0'; + write_to_statusbar(ORDER_LOAD "load", part); /* Get date & time */ time_t current_time = time(NULL); struct tm *current_tm = localtime(¤t_time); strftime(part, sizeof(part), time_format, current_tm); - push_part(part, strlen(part)); - - write_to_statusbar(output); + write_to_statusbar(ORDER_TIME "time", part); sleep(1); } |