pkgsrc/sysutils/torsmo/patches/patch-ab
ghen f8ede62061 Torsmo is a system monitor that sits in the corner of your desktop. It's
very simple, customizable and it renders only text on the desktop (and
percentagebars if you want it to ;) and the only lib it uses is Xlib.
Torsmo can show various information about your system and it's peripherals,
including:

* Kernel version
* Uptime
* System time
* Network interface information
* Memory and swap usage
* Hostname
* Machine, i686 for example
* System name, Linux for example
* Temperatures from i2c-sensors
* Temperature from ACPI
* Battery capacity from ACPI/APM
* Number of processes running or sleeping
* Local mails (unread and all)
* Filesystem stats
2006-03-29 21:42:55 +00:00

155 lines
3.8 KiB
Text

$NetBSD: patch-ab,v 1.1.1.1 2006/03/29 21:42:55 ghen Exp $
--- netbsd.c.orig 2004-08-25 19:55:57.000000000 +0200
+++ netbsd.c
@@ -9,6 +9,7 @@
#include <err.h>
#include <limits.h>
#include <paths.h>
+#include <ctype.h>
#include <kvm.h>
#include <nlist.h>
@@ -221,6 +222,33 @@ void update_net_stats()
}
}
+static char *freq = NULL;
+char * get_freq()
+{
+ size_t val_len;
+ u_int32_t val;
+
+ if (freq == NULL) {
+ freq = malloc(10);
+ if (freq == NULL) {
+ return NULL;
+ } else {
+ freq[0] = '\0';
+ }
+ }
+
+ /* Laptops with enhanced speed step. */
+ if (sysctlbyname("machdep.est.frequency.current",
+ NULL, &val_len, NULL, 0) == 0) {
+ sysctlbyname("machdep.est.frequency.current", &val, &val_len, NULL, 0);
+ sprintf(freq, "%d", val);
+ } else {
+ /* XXX: Parse out the clockspeed from machdep.cpu_brand */
+ }
+
+ return freq;
+}
+
void update_total_processes()
{
/* It's easier to use kvm here than sysctl */
@@ -302,6 +330,7 @@ void update_cpu_usage()
}
double get_i2c_info(int fd, int div) {
+ (void) fd; (void) div;
return -1;
}
@@ -315,24 +344,96 @@ void update_load_average() {
}
double get_acpi_temperature(int fd) {
+ (void) fd;
return -1;
}
-void get_battery_stuff(char *buf, unsigned int n, const char *bat) {
-}
-
int open_i2c_sensor(const char *dev, const char *type, int n, int *div)
{
+ (void) dev; (void) type; (void) n; (void) div;
return -1;
}
int open_acpi_temperature(const char *name) {
+ (void) name;
return -1;
}
+static char acpi_ac_str[64] = "N/A";
char * get_acpi_ac_adapter(void)
{
- return "N/A";
+ /* get_battery_stuff() actually populates this for us. */
+ return acpi_ac_str;
+}
+
+static char last_battery_str[64];
+static double last_battery_time;
+
+void get_battery_stuff(char *buf, unsigned int n, const char *bat) {
+ FILE *f;
+ char *foo;
+ char b[4096];
+ char b_name[32];
+ int bat_num;
+ int found_acpibat = 0;
+ int found_acpiacad = 0;
+ float bat_charge = 0.0;
+
+ /* Don't update battery too often. */
+ if (current_update_time - last_battery_time < 29.5) {
+ snprintf(buf, n, "%s", last_battery_str);
+ return;
+ }
+ last_battery_time = current_update_time;
+
+ sscanf(bat, "BAT%d", &bat_num);
+ sprintf(b_name, "acpibat%d", bat_num);
+
+ /*
+ * Using the envsys API is like pulling teeth without anesthetic.
+ * so just popen envstat and parse the output instead.
+ */
+ f = popen("/usr/sbin/envstat -r", "r");
+ if (f != NULL) {
+ while(!feof(f)) {
+ fgets(b, 4096, f);
+
+ /* AC adapter state. */
+ if (strstr(b, "acpiacad0")) {
+ if (strstr(b, "disconnected")) {
+ sprintf(acpi_ac_str, "disconnected");
+ } else {
+ sprintf(acpi_ac_str, "connected");
+ }
+ found_acpiacad = 1;
+ }
+
+ if (bat && strstr(b, b_name)) {
+ if (strstr(b, "charge:")) {
+ foo = strstr(b, "%)");
+ while (*foo != ' ' && *foo != '(') {
+ foo--;
+ }
+ foo = foo + 1;
+ sscanf(foo, "%f", &bat_charge);
+ found_acpibat = 1;
+ }
+ }
+ }
+ pclose(f);
+ }
+
+ if (found_acpibat) {
+ snprintf(last_battery_str, 64, "%.2f%%", bat_charge);
+ snprintf(buf, n, "%s", last_battery_str);
+ } else {
+ /* XXX: If that failed, try to use APM. */
+ }
+
+ if (!found_acpiacad) {
+ sprintf(acpi_ac_str, "N/A");
+ }
+
}
char* get_acpi_fan() {