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
This commit is contained in:
Michael Stapelberg 2008-10-07 11:45:52 +02:00
parent e94e252089
commit 7fa8c4b9a9
3 changed files with 64 additions and 12 deletions

View File

@ -1,7 +1,14 @@
const char *wlan_interface = "wlan0";
const char *eth_interface = "eth0";
const char *wmii_path = "/mnt/wmii/rbar/status";
/* wmii_path has to be terminated by slash */
const char *wmii_path = "/mnt/wmii/rbar/";
const char *time_format = "%d.%m.%Y %H:%M:%S";
const char *battery = "/sys/class/power_supply/BAT0/uevent";
const char *run_watches[] = {"DHCP", "/var/run/dhclient.pid",
"VPN", "/var/run/vpnc*.pid"};
#define ORDER_WLAN "0"
#define ORDER_ETH "1"
#define ORDER_BATTERY "2"
#define ORDER_LOAD "3"
#define ORDER_TIME "4"

View File

@ -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);
}

View File

@ -5,7 +5,9 @@ static bool first_push = true;
typedef enum { CS_DISCHARGING, CS_CHARGING, CS_FULL } charging_status_t;
static void write_to_statusbar(const char *message);
static void cleanup_rbar_dir(void);
static void write_to_statusbar(const char *name, const char *message);
static void write_error_to_statusbar(const char *message);
static void die(const char *fmt, ...);
static char *skip_character(char *input, char character, int amount);
static void push_part(const char *input, const int n);