summaryrefslogtreecommitdiff
path: root/wmiistatus.c
diff options
context:
space:
mode:
authorMichael Stapelberg <michael+x200@stapelberg.de>2008-10-07 11:45:52 +0200
committerMichael Stapelberg <michael+x200@stapelberg.de>2008-10-07 11:45:52 +0200
commit7fa8c4b9a954647db79f79b78b33d79c00acd250 (patch)
treecdd25efa79a1c098ea2daf963ba2d2b4c951703d /wmiistatus.c
parente94e25208936ab8f6ab684b1b229bc29073b955d (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.c63
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(&current_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);
}