aboutsummaryrefslogtreecommitdiff
path: root/net/wmwave/files/patch-wmwave.c
diff options
context:
space:
mode:
authorMario Sergio Fujikawa Ferreira <lioux@FreeBSD.org>2001-12-27 20:18:42 +0000
committerMario Sergio Fujikawa Ferreira <lioux@FreeBSD.org>2001-12-27 20:18:42 +0000
commit2b9dd982d572537769a982a71f487b2af16fa48b (patch)
tree9786460b6285e890b37c500b71551d26c04c2f5b /net/wmwave/files/patch-wmwave.c
parent5e2fd706d6ca8d0ace1bae828883585bddf51751 (diff)
downloadports-2b9dd982d572537769a982a71f487b2af16fa48b.tar.gz
ports-2b9dd982d572537769a982a71f487b2af16fa48b.zip
Notes
Diffstat (limited to 'net/wmwave/files/patch-wmwave.c')
-rw-r--r--net/wmwave/files/patch-wmwave.c695
1 files changed, 695 insertions, 0 deletions
diff --git a/net/wmwave/files/patch-wmwave.c b/net/wmwave/files/patch-wmwave.c
new file mode 100644
index 000000000000..11221f9ed6e1
--- /dev/null
+++ b/net/wmwave/files/patch-wmwave.c
@@ -0,0 +1,695 @@
+--- wmwave.c.orig Thu Dec 27 12:10:44 2001
++++ wmwave.c Thu Dec 27 13:09:37 2001
+@@ -1,38 +1,21 @@
+ /*
++ * $Id$
++ *
+ * wmtop.c -- WindowMaker process view dock app
+- * Derived by Carsten Schuermann carsten@schuermann.org
+- * http://www.schuermann.org/~carsten
+- * from
+- * Dan Piponi dan@tanelorn.demon.co.uk
+- * http://www.tanelorn.demon.co.uk
+- * who derived it
+- * from code originally contained in wmsysmon by Dave Clark (clarkd@skynet.ca)
++ *
+ * This software is licensed through the GNU General Public License.
+- * $Log: wmwave.c,v $
+- * Revision 1.7 1999/08/20 13:44:21 carsten
+- * version 0.4 complete
+- *
+- * Revision 1.6 1999/08/19 17:58:52 carsten
+- * Almost final version
+- *
+- * Revision 1.5 1999/08/19 13:54:30 carsten
+- * done
+- *
+- * Revision 1.4 1999/08/19 11:14:50 carsten
+- * hookup to /proc/net/wirless complete
+- *
+- * Revision 1.3 1999/08/19 02:39:07 carsten
+- * improved design and hooked it up
+- *
+- * Revision 1.2 1999/08/16 03:45:34 carsten
+- * Added dots
+- *
+- * Revision 1.1 1999/08/15 15:39:18 carsten
+- * Added wmwave project to repository
+- *
++ *
++ * Authors (in reverse chronological order):
++ * Bruce M. Simpson <bms@spc.org>
++ * Carsten Schuermann <carsten@schuermann.org>
++ * Dan Piponi <dan@tanelorn.demon.co.uk>
++ * Dave Clark <clarkd@skynet.ca>
++ *
++ * The FreeBSD version of this software is released under the GNU GPL, and
++ * forms part of the Consume Project <URL: http://www.consume.net/>.
++ *
+ */
+
+-
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <time.h>
+@@ -45,313 +28,387 @@
+ #include <limits.h>
+ #include <errno.h>
+ #include <signal.h>
++#include <sysexits.h>
+
++#include <sys/types.h>
+ #include <sys/wait.h>
+ #include <sys/stat.h>
+ #include <sys/param.h>
+-#include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/time.h>
++#include <sys/socket.h>
++#include <sys/sockio.h>
++
++#include <netdb.h>
++#include <net/if.h>
++#include <net/if_var.h>
++#include <net/route.h>
++#include <net/ethernet.h>
++
++#include <netinet/in.h>
++#include <netinet/in_systm.h>
++#include <netinet/in_var.h>
++#include <netinet/ip.h>
++#include <netinet/ip_var.h>
++#include <arpa/inet.h>
++#include <machine/if_wavelan_ieee.h>
+
+ #include <X11/Xlib.h>
+ #include <X11/xpm.h>
+ #include <X11/extensions/shape.h>
+
+-
+ #include "wmgeneral.h"
+-
+ #include "wmwave-master.xpm"
+
+-char wmwave_mask_bits[64*64];
+-int wmwave_mask_width = 64;
+-int wmwave_mask_height = 64;
+-
+-#define WMWAVE_VERSION "0.4"
++char wmwave_mask_bits[64 * 64];
++int wmwave_mask_width = 64;
++int wmwave_mask_height = 64;
++
++#define WMWAVE_DEFAULT_INTERFACE "wi0"
++#define WMWAVE_VERSION "0.4_FreeBSD"
++
++int update_rate = 100000;
++char *ProgName;
++char *iface = WMWAVE_DEFAULT_INTERFACE;
++time_t curtime;
++time_t prevtime;
++int mode = 0; /* default: no card detected */
++int screen = 0; /* default: Quality screen is displayed */
++
++void usage(void);
++void printversion(void);
++void BlitString(char *name, int x, int y);
++void BlitNum(int num, int x, int y);
++void wmwave_routine(int, char **);
++void DrawBar(float percent, int dx, int dy);
++void DrawGreenBar(float percent, int dx, int dy);
+
+-int update_rate=100000;
+-
+-char *ProgName;
+-
+-time_t curtime;
+-time_t prevtime;
+-
+-int mode = 0; // default: no card detected
+-int screen = 0; // default: Quality screen is displayed
+-
+-void usage(void);
+-void printversion(void);
+-void BlitString(char *name, int x, int y);
+-void BlitNum(int num, int x, int y);
+-void wmwave_routine(int, char **);
+-void DrawBar(float percent, int dx, int dy);
+-void DrawGreenBar(float percent, int dx, int dy);
++inline void
++DrawBar(float percent, int dx, int dy)
++{
++ int tx;
+
+-inline void DrawBar(float percent, int dx, int dy) {
+- int tx;
+-
+- tx = (float)((float)54 * ((float)percent / (float)100.0));
+- copyXPMArea(67, 36, tx, 4, dx, dy);
+- copyXPMArea(67, 43, 54-tx, 4, dx+tx, dy);
++ tx = (float)((float)54 * ((float)percent / (float)100.0));
++ copyXPMArea(67, 36, tx, 4, dx, dy);
++ copyXPMArea(67, 43, 54 - tx, 4, dx + tx, dy);
+ }
+
+
+-inline void DrawGreenBar(float percent, int dx, int dy) {
+- int tx;
+-
+- tx = (float)((float)54 * ((float)percent / (float)100.0));
+- copyXPMArea(67, 58, tx, 4, dx, dy);
+- copyXPMArea(67, 43, 54-tx, 4, dx+tx, dy);
+-}
++inline void
++DrawGreenBar(float percent, int dx, int dy)
++{
++ int tx;
+
+-inline void DrawRedDot() {
+- copyXPMArea(80, 65, 6, 6, 52, 5);
++ tx = (float)((float)54 * ((float)percent / (float)100.0));
++ copyXPMArea(67, 58, tx, 4, dx, dy);
++ copyXPMArea(67, 43, 54 - tx, 4, dx + tx, dy);
+ }
+
+-inline void DrawYellowDot() {
+- copyXPMArea(86, 65, 6, 6, 52, 5);
++inline void
++DrawRedDot()
++{
++ copyXPMArea(80, 65, 6, 6, 52, 5);
+ }
+
+-inline void DrawGreenDot() {
+- copyXPMArea(92, 65, 6, 6, 52, 5);
++inline void
++DrawYellowDot()
++{
++ copyXPMArea(86, 65, 6, 6, 52, 5);
+ }
+
+-inline void DrawEmptyDot() {
+- copyXPMArea(98, 65, 6, 6, 52, 5);
++inline void
++DrawGreenDot()
++{
++ copyXPMArea(92, 65, 6, 6, 52, 5);
+ }
+
+-float min (float x, float y) {
+- if (x < y) {return x;}
+- else {return y;}
++inline void
++DrawEmptyDot()
++{
++ copyXPMArea(98, 65, 6, 6, 52, 5);
+ }
+
+ /*
+- * Find CPU times for all processes
++ * XXX: redefining min() to operate on floats is a bad idea;
++ * changed to _fmin().
+ */
+-void DisplayWireless(void) {
+- FILE *wireless; // File handle for /proc/net/wireless
+-
+- char line[255];
+- char iface[5];
+- char status [3];
+- float link = 0;
+- float level = 0;
+- float noise = 0;
+- int nwid = 0;
+- int crypt = 0;
+- int misc = 0;
+-
+- if ((wireless = fopen ("/proc/net/wireless", "r")) != NULL)
+- {
+- fgets(line,sizeof(line),wireless);
+- fgets(line,sizeof(line),wireless);
+- if (fgets(line,sizeof(line),wireless) == NULL) {
+- mode = 0;
+- }
+- else {
+- sscanf(line,"%s %s %f %f %f %d %d %d",
+- iface,status,&link,&level,&noise,&nwid,&crypt,&misc);
+- mode = 1;
+- }
+- fclose(wireless);
+-
+-
+- /* Print channel information, and signal ratio */
+-
+- switch (mode) {
+- case 1: BlitString("Quality",4,4);
+- if (link<=10) {DrawRedDot ();}
+- else if (link<=20) {DrawYellowDot ();}
+- else {DrawGreenDot();};
+- BlitString("Link ", 4,18);
+- DrawBar(min ((int)(link * 1.8), 100.0), 4, 27);
+- BlitString("Level ", 4,32);
+- DrawGreenBar(min ((int)(level * 0.3), 100.0), 4, 41);
+- BlitString("Noise ", 4,46);
+- DrawGreenBar(min ((int)(noise * 0.3), 100.0), 4, 55);
+- break;
+- case 0: BlitString("NO CARD",4,4);
+- DrawEmptyDot();
+- BlitString(" ", 4,18);
+- DrawBar(0.0, 4, 27);
+- BlitString(" ", 4,32);
+- DrawGreenBar(0.0, 4, 41);
+- BlitString(" ", 4,46);
+- DrawGreenBar(0.0, 4, 55);
+- break;
+- };
+- }
+- else {
+- printf ("Wirless device /proc/net/wireless not found\nEnable radio networking and recompile your kernel\n");
+- exit (0);
+- }
+-}
+-
+-/* SIGCHLD handler */
+-void sig_chld(int signo)
+-{
+- waitpid((pid_t) -1, NULL, WNOHANG);
+- signal(SIGCHLD, sig_chld);
+-}
+-
+-int main(int argc, char *argv[]) {
+- int i;
+-
+- /* Parse Command Line */
+-
+- signal(SIGCHLD, sig_chld);
+- ProgName = argv[0];
+- if (strlen(ProgName) >= 5)
+- ProgName += (strlen(ProgName) - 5);
+-
+- for (i=1; i<argc; i++) {
+- char *arg = argv[i];
+-
+- if (*arg=='-') {
+- switch (arg[1]) {
+- case 'd' :
+- if (strcmp(arg+1, "display")) {
+- usage();
+- exit(1);
++float
++_fmin(float x, float y)
++{
++ if (x < y) {
++ return x;
++ } else {
++ return y;
+ }
+- break;
+- case 'g' :
+- if (strcmp(arg+1, "geometry")) {
+- usage();
+- exit(1);
++}
++
++/*
++ * XXX: Fetch OS-specific wireless statistics.
++ *
++ * These are: quality, signal, noise. On NetBSD, the
++ * statistics kept on an AP-basis for the driver are valid.
++ * On FreeBSD, it is necessary to interrogate the WICACHE.
++ * For the purposes of keeping things simple, this code will only
++ * look at the first slot in the WICACHE table.
++ */
++void
++DisplayWireless(void)
++{
++ struct ifreq ifr;
++ struct wi_req wireq;
++ struct wi_sigcache *wisigsp;
++ int *wisigsnp, s, mode, err;
++ float link, level, noise;
++ enum {
++ MODE_NO_CARD = 0,
++ MODE_HAVE_CARD = 1
++ };
++
++ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
++ if (s == -1)
++ errx(errno, "socket");
++ bzero(&ifr, sizeof(ifr));
++ strncpy(ifr.ifr_name, iface, strlen(iface));
++ bzero(&wireq, sizeof(wireq));
++ wireq.wi_type = WI_RID_READ_CACHE;
++ wireq.wi_len = WI_MAX_DATALEN;
++ ifr.ifr_data = (void *) &wireq;
++
++ err = ioctl(s, SIOCGWAVELAN, (caddr_t)&ifr);
++ if (err < 0) {
++ mode = MODE_NO_CARD;
++ goto draw;
++ }
++ wisigsnp = (int *) &wireq.wi_val;
++ if (*wisigsnp < 1) {
++ mode = MODE_NO_CARD;
++ goto draw;
+ }
+- break;
+- case 'v' :
+- printversion();
+- exit(0);
+- break;
+- case 'r':
+- if (argc > (i+1)) {
+- update_rate = (atoi(argv[i+1]) * 1000);
+- i++;
++
++ mode = MODE_HAVE_CARD;
++ wisigsp = (struct wi_sigcache *) (wisigsnp+1);
++ link = wisigsp->quality * 1.0;
++ level = wisigsp->signal * -1.0;
++ noise = wisigsp->noise * -1.0;
++draw:
++ /*
++ * Print channel information, and signal ratio
++ */
++ switch (mode) {
++ case MODE_HAVE_CARD:
++ BlitString("Quality", 4, 4);
++ if (link <= 10) {
++ DrawRedDot();
++ } else if (link <= 20) {
++ DrawYellowDot();
++ } else {
++ DrawGreenDot();
++ };
++ BlitString("Link ", 4, 18);
++ DrawBar(_fmin((int)(link * 1.8), 100.0), 4, 27);
++ BlitString("Level ", 4, 32);
++ DrawGreenBar(_fmin((int)(level * 0.3), 100.0), 4, 41);
++ BlitString("Noise ", 4, 46);
++ DrawGreenBar(_fmin((int)(noise * 0.3), 100.0), 4, 55);
++ break;
++ case MODE_NO_CARD:
++ default:
++ BlitString("NO CARD", 4, 4);
++ DrawEmptyDot();
++ BlitString(" ", 4, 18);
++ DrawBar(0.0, 4, 27);
++ BlitString(" ", 4, 32);
++ DrawGreenBar(0.0, 4, 41);
++ BlitString(" ", 4, 46);
++ DrawGreenBar(0.0, 4, 55);
++ break;
++ };
++}
++
++void
++sig_chld(int signo)
++{
++ waitpid((pid_t) - 1, NULL, WNOHANG);
++ signal(SIGCHLD, sig_chld);
++}
++
++int
++main(int argc, char *argv[])
++{
++ int i;
++
++
++ signal(SIGCHLD, sig_chld);
++
++ ProgName = argv[0];
++ if (strlen(ProgName) >= 5)
++ ProgName += (strlen(ProgName) - 5);
++
++ for (i = 1; i < argc; i++) {
++ char *arg = argv[i];
++
++ if (*arg == '-') {
++ switch (arg[1]) {
++ case 'i':
++ if (argc > (i + 1)) {
++ iface = argv[i+1];
++ if (strncmp("wi", iface, 2) != 0) {
++ fprintf(stderr, "error: you "
++ "must specify a wiX interface.\n");
++ usage();
++ exit(EX_USAGE);
++ }
++ }
++ break;
++ case 'd':
++ if (strcmp(arg + 1, "display")) {
++ usage();
++ exit(EX_USAGE);
++ }
++ break;
++ case 'g':
++ if (strcmp(arg + 1, "geometry")) {
++ usage();
++ exit(EX_USAGE);
++ }
++ break;
++ case 'v':
++ printversion();
++ exit(EX_OK);
++ break;
++ case 'r':
++ if (argc > (i + 1)) {
++ update_rate = (atoi(argv[i+1]) * 1000);
++ i++;
++ }
++ break;
++ default:
++ usage();
++ exit(EX_USAGE);
++ break;
++ }
++ }
+ }
+- break;
+- default:
+- usage();
+- exit(0);
+- break;
+- }
+- }
+- }
+-
+- wmwave_routine(argc, argv);
+-
+- return 0;
++
++ wmwave_routine(argc, argv);
++
++ exit(EX_OK);
+ }
+
+ /*
+ * Main loop
+ */
+-void wmwave_routine(int argc, char **argv) {
+- XEvent Event;
+- struct timeval tv={0,0};
+- struct timeval last={0,0};
+-
+- createXBMfromXPM(wmwave_mask_bits, wmwave_master_xpm, wmwave_mask_width, wmwave_mask_height);
+-
+- openXwindow(argc, argv, wmwave_master_xpm, wmwave_mask_bits, wmwave_mask_width, wmwave_mask_height);
+-
+- RedrawWindow();
+-
+-
+- while (1) {
+-
+- curtime = time(0);
+-
+- if (1) {
+- memcpy(&last, &tv, sizeof(tv));
+-
+- /*
+- * Update display
+- */
+- DisplayWireless();
+-
+- RedrawWindow();
+- }
+-
+- /*
+- * X Events
+- */
+- while (XPending(display)) {
+- XNextEvent(display, &Event);
+- switch (Event.type) {
+- case Expose:
++void
++wmwave_routine(int argc, char **argv)
++{
++ XEvent Event;
++ struct timeval tv = {0, 0};
++ struct timeval last = {0, 0};
++
++ createXBMfromXPM(wmwave_mask_bits, wmwave_master_xpm, wmwave_mask_width, wmwave_mask_height);
++
++ openXwindow(argc, argv, wmwave_master_xpm, wmwave_mask_bits, wmwave_mask_width, wmwave_mask_height);
++
+ RedrawWindow();
+- break;
+- case DestroyNotify:
+- XCloseDisplay(display);
+- exit(0);
+- case ButtonPress:
+- switch (screen) {
+- case 0: screen=1; break;
+- case 1: screen=0; break;
+- };
+- break;
+- }
+- }
+-
+- usleep(update_rate);
+- }
++
++ for (;;) {
++ curtime = time(0);
++ memcpy(&last, &tv, sizeof(tv));
++
++ /*
++ * Update display
++ */
++ DisplayWireless();
++ RedrawWindow();
++
++ /*
++ * X Events
++ */
++ while (XPending(display)) {
++ XNextEvent(display, &Event);
++ switch (Event.type) {
++ case Expose:
++ RedrawWindow();
++ break;
++ case DestroyNotify:
++ XCloseDisplay(display);
++ exit(EX_OK);
++ case ButtonPress:
++ switch (screen) {
++ case 0:
++ screen = 1;
++ break;
++ case 1:
++ screen = 0;
++ break;
++ };
++ break;
++ }
++ }
++ usleep(update_rate);
++ }
+ }
+
+ /*
+ * Blits a string at given co-ordinates
+ */
+-void BlitString(char *name, int x, int y) {
+- int i;
+- int c;
+- int k;
+-
+- k = x;
+- for (i=0; name[i]; i++)
+- {
+-
+- c = toupper(name[i]);
+- if (c >= 'A' && c <= 'Z')
+- { // its a letter
+- c -= 'A';
+- copyXPMArea(c * 6, 74, 6, 8, k, y);
+- k += 6;
+- } else
+- if (c>='0' && c<='9') { // its a number or symbol
+- c -= '0';
+- copyXPMArea(c * 6, 64, 6, 8, k, y);
+- k += 6;
+- } else {
+- copyXPMArea(5, 84, 6, 8, k, y);
+- k += 6;
+-
+- }
+- }
+-}
+-
+-void BlitNum(int num, int x, int y) {
+- char buf[1024];
+- int newx=x;
+-
+- sprintf(buf, "%03i", num);
+-
+- BlitString(buf, newx, y);
++void
++BlitString(char *name, int x, int y)
++{
++ int i;
++ int c;
++ int k;
++
++ k = x;
++ for (i = 0; name[i]; i++) {
++
++ c = toupper(name[i]);
++ if (c >= 'A' && c <= 'Z') { /* its a letter */
++ c -= 'A';
++ copyXPMArea(c * 6, 74, 6, 8, k, y);
++ k += 6;
++ } else if (c >= '0' && c <= '9') {
++ /* its a number or symbol */
++ c -= '0';
++ copyXPMArea(c * 6, 64, 6, 8, k, y);
++ k += 6;
++ } else {
++ copyXPMArea(5, 84, 6, 8, k, y);
++ k += 6;
++
++ }
++ }
++}
++
++void
++BlitNum(int num, int x, int y)
++{
++ char buf[1024];
++ int newx = x;
++
++ sprintf(buf, "%03i", num);
++ BlitString(buf, newx, y);
+ }
+
+ /*
+ * Usage
+ */
+-void usage(void) {
+- fprintf(stderr, "\nWmwave - Carsten Schuermann <carsten@schuermann.org> http://www.schuermann.org/~dockapps\n\n");
+- fprintf(stderr, "usage:\n");
+- fprintf(stderr, " -display <display name>\n");
+- fprintf(stderr, " -r update rate in milliseconds (default:100)\n");
+- fprintf(stderr, "\n");
++void
++usage(void)
++{
++ fprintf(stderr, "\rwmwave 0.4 - by Bruce M Simpson <bms@spc.org> et al. \n");
++ fprintf(stderr, "usage:\n");
++ fprintf(stderr, " -display <display name>\n");
++ fprintf(stderr, " -i interface to use (default to wi0)\n");
++ fprintf(stderr, " -r update rate in milliseconds (default:100)\n");
++ fprintf(stderr, "\n");
+ }
+
+ /*
+ * printversion
+ */
+-void printversion(void) {
+- fprintf(stderr, "wmwave v%s\n", WMWAVE_VERSION);
++void
++printversion(void)
++{
++ fprintf(stderr, "wmwave v%s\n", WMWAVE_VERSION);
+ }