aboutsummaryrefslogtreecommitdiff
path: root/x11-wm/epplets/files/patch-epplets_E-Wireless.c
diff options
context:
space:
mode:
Diffstat (limited to 'x11-wm/epplets/files/patch-epplets_E-Wireless.c')
-rw-r--r--x11-wm/epplets/files/patch-epplets_E-Wireless.c179
1 files changed, 179 insertions, 0 deletions
diff --git a/x11-wm/epplets/files/patch-epplets_E-Wireless.c b/x11-wm/epplets/files/patch-epplets_E-Wireless.c
new file mode 100644
index 000000000000..472f0fb9c365
--- /dev/null
+++ b/x11-wm/epplets/files/patch-epplets_E-Wireless.c
@@ -0,0 +1,179 @@
+--- epplets/E-Wireless.c.orig 2006-04-16 00:32:43.000000000 +0200
++++ epplets/E-Wireless.c 2008-03-10 21:21:36.000000000 +0100
+@@ -3,6 +3,8 @@
+ * copyleft (C) Mark C. Langston 1999
+ * Damn near all the code originally from: cocidius@telebot.net
+ * and his E-CpuX Epplet.
++ *
++ * Copyright (C) 2008, Pietro Cerutti <gahr@FreeBSD.org> (FreeBSD adaptation)
+ */
+
+ #include <stdio.h>
+@@ -13,6 +15,18 @@
+ #include <errno.h>
+ #include <epplet.h>
+
++#ifdef __FreeBSD__
++#include <sys/param.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <sys/sockio.h>
++#include <net/if.h>
++#include <net/if_media.h>
++#include <net80211/ieee80211_ioctl.h>
++#include <ifaddrs.h>
++#include <strings.h>
++#endif
++
+ #define HEIGHT 30
+ #define WIDTH 40
+
+@@ -25,7 +39,7 @@
+ int cpu_hist_size = 0;
+ int *cpu_hist = NULL;
+ int hist_pos = 0;
+-int color = 0;
++size_t color = 0;
+ unsigned long prev_total = 0;
+ unsigned long prev_out = 0;
+ unsigned long prev_in = 0;
+@@ -152,11 +166,71 @@
+ static void
+ cb_timer(void *data)
+ {
++ double sigstr = 0;
++ unsigned long l0;
++ char ss[64];
++ int percent;
++
++/*
++ * Sorry, no support for FreeBSD 5.x
++ */
++#ifdef __FreeBSD__
++ char if_name[IFNAMSIZ];
++ int sock;
++ char buffer[24 * 1024];
++ struct ifaddrs *ifa, *ifa_iter;
++ struct ifmediareq ifmr;
++ struct ieee80211req ireq;
++ struct ieee80211req_scan_result scan;
++
++ bzero(if_name, sizeof(if_name));
++
++ if((sock = socket(PF_INET, SOCK_DGRAM, 0)) == -1) {
++ perror("socket");
++ goto common;
++ }
++
++ if(getifaddrs(&ifa)) {
++ perror("getifaddrs");
++ goto common;
++ }
++
++ ifa_iter = ifa;
++ do
++ {
++ bzero(&ifmr, sizeof(ifmr));
++ strncpy(ifmr.ifm_name, ifa_iter->ifa_name, sizeof(ifmr.ifm_name)-1);
++
++ if(ioctl(sock, SIOCGIFMEDIA, &ifmr) < 0) continue;
++ if(!(ifmr.ifm_status & IFM_AVALID)) continue;
++ if(IFM_TYPE(ifmr.ifm_active) != IFM_IEEE80211) continue;
++ strncpy(if_name, ifa_iter->ifa_name, sizeof(if_name)-1);
++ break;
++ } while((ifa_iter = ifa_iter->ifa_next));
++
++ freeifaddrs(ifa);
++
++ if(!*if_name) goto common;
++
++ strncpy(ireq.i_name, if_name, sizeof(ireq.i_name) - 1);
++ ireq.i_type = IEEE80211_IOC_SCAN_RESULTS;
++ ireq.i_data = buffer;
++ ireq.i_len = sizeof(buffer);
++
++ if(ioctl(sock, SIOCG80211, &ireq) < 0) {
++ close(sock);
++ goto common;
++ }
++ close(sock);
++
++ if(ireq.i_len < sizeof(scan))
++ goto common;
++
++ bcopy(buffer, &scan, sizeof(scan));
++ sigstr = scan.isr_rssi;
++#else
+ FILE *fpStat;
+- int percent;
+- double sigstr;
+- char s[256], ss[64];
+- unsigned long l0;
++ char s[256];
+
+ fpStat = fopen("/proc/net/wireless", "r");
+ if (fpStat)
+@@ -169,8 +243,15 @@
+ sscanf(s, "%*s %*s %s %*s %*s %*s %*s %*s", ss);
+
+ sigstr = atof(ss);
++ fclose(fpStat);
++ }
++#endif
++
++common:
++
++ l0 = sigstr;
++ percent = (100 * l0 / 92);
+
+- l0 = sigstr;
+ percent = (100 * l0 / 92);
+ if (percent > 100)
+ percent = 100;
+@@ -179,13 +260,11 @@
+ sprintf(ss, "%d%%", percent);
+ Epplet_change_label(lbl_usage, ss);
+
+- fclose(fpStat);
+ draw_graph();
+ hist_pos++;
+ hist_pos %= WIDTH;
+ Epplet_paste_buf(buf, win, 0, 0);
+ Epplet_timer(cb_timer, NULL, 1, "TIMER");
+- }
+ data = NULL;
+ }
+
+@@ -234,7 +313,7 @@
+ {
+ char s[2] = { 0, 0 };
+
+- color = (int)data;
++ color = (size_t)data;
+ s[0] = '0' + color;
+ Epplet_modify_config("color", s);
+ Epplet_save_config();
+@@ -257,7 +336,7 @@
+ memset(cpu_hist, 0x00, sizeof(int) * cpu_hist_size);
+ hist_pos = 0;
+
+- Epplet_Init("E-WIRELESS", "0.1", "E 802.11 signal monitoring epplet",
++ Epplet_Init("E-Wireless", "0.1", "E 802.11 signal monitoring epplet",
+ 3, 3, argc, argv, 0);
+
+ Epplet_load_config();
+@@ -283,10 +362,10 @@
+
+ p = Epplet_create_popup();
+ Epplet_add_popup_entry(p, "Green", NULL, cb_color, (void *)0L);
+- Epplet_add_popup_entry(p, "Blue", NULL, cb_color, (void *)1L);
+- Epplet_add_popup_entry(p, "Red", NULL, cb_color, (void *)2L);
+- Epplet_add_popup_entry(p, "Yellow", NULL, cb_color, (void *)3L);
+- Epplet_add_popup_entry(p, "Cyan", NULL, cb_color, (void *)4L);
++ Epplet_add_popup_entry(p, "Red", NULL, cb_color, (void *)1L);
++ Epplet_add_popup_entry(p, "Blue", NULL, cb_color, (void *)2L);
++ Epplet_add_popup_entry(p, "Cyan", NULL, cb_color, (void *)3L);
++ Epplet_add_popup_entry(p, "Yellow", NULL, cb_color, (void *)4L);
+ Epplet_add_popup_entry(p, "Magenta", NULL, cb_color, (void *)5L);
+ Epplet_add_popup_entry(p, "Gray", NULL, cb_color, (void *)6L);
+ popup = Epplet_create_popupbutton("Colors", NULL, 6, 24, 36, 12, NULL, p);