aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorehaupt <ehaupt@FreeBSD.org>2008-02-27 18:39:43 +0800
committerehaupt <ehaupt@FreeBSD.org>2008-02-27 18:39:43 +0800
commitf135f78cb399c06fbe46480365ac30b8829c61f8 (patch)
treefa5be445a9c9bacdf933ca32faad28ee7dd4ce48
parent772ea7af65b89495f5e1366de7fb249ca82560be (diff)
downloadfreebsd-ports-gnome-f135f78cb399c06fbe46480365ac30b8829c61f8.tar.gz
freebsd-ports-gnome-f135f78cb399c06fbe46480365ac30b8829c61f8.tar.zst
freebsd-ports-gnome-f135f78cb399c06fbe46480365ac30b8829c61f8.zip
- Fix build on ${OSVERSION} >= 700042
- The app now makes use of the net80211 framework so the port will work with any wireless driver - Pass maintainership to submitter - Bring Makefile style up to date (self) PR: 121130 Submitted by: benjsc
-rw-r--r--net/wmwave/Makefile26
-rw-r--r--net/wmwave/files/Makefile19
-rw-r--r--net/wmwave/files/patch-wmwave.c696
3 files changed, 131 insertions, 610 deletions
diff --git a/net/wmwave/Makefile b/net/wmwave/Makefile
index daa177c82431..c28c0f018e4c 100644
--- a/net/wmwave/Makefile
+++ b/net/wmwave/Makefile
@@ -7,32 +7,32 @@
PORTNAME= wmwave
PORTVERSION= 0.4
-PORTREVISION= 3
+PORTREVISION= 4
CATEGORIES= net
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= ${PORTNAME}
DISTNAME= ${PORTNAME}-${PORTVERSION:S/./-/}
EXTRACT_SUFX= .tgz
-MAINTAINER= ports@FreeBSD.org
+MAINTAINER= benjsc@FreeBSD.org
COMMENT= Display 802.11 status in the WindowMaker Dock
-MAKEFILE= ${FILESDIR}/Makefile
-WRKSRC= ${WRKDIR}/${PORTNAME}
USE_XPM= yes
-MAKE_ENV= MANPREFIX=${MANPREFIX}
MAN1= wmwave.1
-MANCOMPRESSED= yes
PLIST_FILES= bin/wmwave
-# configure is a no-op for this port.
-do-configure:
+WRKSRC= ${WRKDIR}/${PORTNAME}
+
+CFLAGS+= -DWICACHE -I${PREFIX}/include
+LDFLAGS+= -L${PREFIX}/lib -lX11 -lXpm -lXext -lm
-.include <bsd.port.pre.mk>
+do-build:
+ ${CC} ${CFLAGS} ${LDFLAGS} ${WRKSRC}/${PORTNAME}.c ${WRKSRC}/wmgeneral.c \
+ -o ${WRKSRC}/${PORTNAME}
-.if ${OSVERSION} >= 700042
-BROKEN= Does not compile with GCC 4.2
-.endif
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${PREFIX}/bin
+ ${INSTALL_MAN} ${WRKSRC}/${MAN1} ${MANPREFIX}/man/man1
-.include <bsd.port.post.mk>
+.include <bsd.port.mk>
diff --git a/net/wmwave/files/Makefile b/net/wmwave/files/Makefile
deleted file mode 100644
index ab2839b1a096..000000000000
--- a/net/wmwave/files/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# $FreeBSD$
-#
-# makefile for wmwave-0.4 on 27-12-2001 by bms
-#
-PROG=wmwave
-SRCS=wmwave.c wmgeneral.c
-MAN1=wmwave.1
-
-CFLAGS += -g -I${X11BASE}/include -DWICACHE
-LDFLAGS+= -L${X11BASE}/lib -lX11 -lXpm -lXext -lm
-
-BINDIR=${PREFIX}/bin
-MANDIR=${MANPREFIX}/man/man
-
-# extra dependency to rebuild when master pixmap changed
-wmwave.o: wmwave-master.xpm
-
-.include <bsd.prog.mk>
diff --git a/net/wmwave/files/patch-wmwave.c b/net/wmwave/files/patch-wmwave.c
index dd56723394ec..969b84af1333 100644
--- a/net/wmwave/files/patch-wmwave.c
+++ b/net/wmwave/files/patch-wmwave.c
@@ -1,45 +1,12 @@
---- wmwave.c.orig Fri Aug 29 23:52:38 2003
-+++ wmwave.c Fri Aug 29 23:52:43 2003
-@@ -1,38 +1,23 @@
- /*
-- * 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)
-+ * $Id$
-+ *
-+ * wmwave.c -- WindowMaker IEEE802.11 status dock app
-+ * based on wmtop.c from Dan Piponi
-+ *
- * 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
-- *
+--- wmwave.c.orig 2008-02-27 09:24:06.628732284 +1030
++++ wmwave.c 2008-02-27 09:32:07.088117765 +1030
+@@ -29,6 +29,18 @@
+ *
+ * Revision 1.1 1999/08/15 15:39:18 carsten
+ * Added wmwave project to repository
+ *
+ * Authors (in reverse chronological order):
++ * Benjamin Close <benjsc@freebsd.org>
+ * Hendrik Scholz <hscholz@raisdorf.net>
+ * Bruce M. Simpson <bms@spc.org>
+ * Carsten Schuermann <carsten@schuermann.org>
@@ -49,188 +16,54 @@
+ * 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 +30,384 @@
- #include <limits.h>
- #include <errno.h>
- #include <signal.h>
-+#include <sysexits.h>
+@@ -57,6 +69,22 @@
+ #include <X11/xpm.h>
+ #include <X11/extensions/shape.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 <dev/wi/if_wavelan_ieee.h>
++#include <net80211/ieee80211.h>
++#include <net80211/ieee80211_crypto.h>
++#include <net80211/ieee80211_ioctl.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;
--
+@@ -66,7 +94,9 @@
+ 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-2"
-+
-+int update_rate = 100000;
-+char *ProgName;
++#define WMWAVE_DEFAULT_INTERFACE "wi0"
+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;
-+
-+ 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 DrawRedDot() {
-- copyXPMArea(80, 65, 6, 6, 52, 5);
-+inline void
-+DrawRedDot()
-+{
-+ copyXPMArea(80, 65, 6, 6, 52, 5);
- }
-
--inline void DrawYellowDot() {
-- copyXPMArea(86, 65, 6, 6, 52, 5);
-+inline void
-+DrawYellowDot()
-+{
-+ copyXPMArea(86, 65, 6, 6, 52, 5);
- }
--inline void DrawGreenDot() {
-- copyXPMArea(92, 65, 6, 6, 52, 5);
-+inline void
-+DrawGreenDot()
-+{
-+ copyXPMArea(92, 65, 6, 6, 52, 5);
- }
+ int update_rate=100000;
--inline void DrawEmptyDot() {
-- copyXPMArea(98, 65, 6, 6, 52, 5);
-+inline void
-+DrawEmptyDot()
-+{
-+ copyXPMArea(98, 65, 6, 6, 52, 5);
- }
-
--float min (float x, float y) {
-- if (x < y) {return x;}
-- else {return y;}
-+/*
-+ * XXX: redefining min() to operate on floats is a bad idea;
-+ * changed to _fmin().
-+ */
-+float
-+_fmin(float x, float y)
-+{
-+ if (x < y) {
-+ return x;
-+ } else {
-+ return y;
-+ }
+@@ -125,65 +155,100 @@
}
/*
- * Find CPU times for all processes
+ * XXX: Fetch OS-specific wireless statistics.
+ *
-+ * These are: quality, signal, noise. On NetBSD, the
++ * 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.
++ * On FreeBSD, we make use of the net80211 layer to display the
++ * required stats.
*/
-void DisplayWireless(void) {
- FILE *wireless; // File handle for /proc/net/wireless
@@ -284,410 +117,117 @@
- DrawGreenBar(0.0, 4, 55);
- break;
- };
-+void
-+DisplayWireless(void)
++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
-+ };
++ struct ifreq ifr;
++ struct ieee80211req ireq;
++ union {
++ struct ieee80211req_sta_req stareq;
++ uint8_t buf[24*1024];
++ } u;
++ int 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");
++ 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_COMMS_QUALITY;
-+ 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;
++ memset(&ireq, 0, sizeof(ireq));
++ strncpy(ireq.i_name, iface, sizeof(ireq.i_name));
++
++ // Get the currently associated ap
++ ireq.i_type = IEEE80211_IOC_BSSID;
++ ireq.i_data = u.stareq.is_u.macaddr;
++ ireq.i_len = IEEE80211_ADDR_LEN;
++ err = ioctl(s, SIOCG80211, &ireq);
++ if ( err >= 0 ){
++
++ // Get the station info for the ap
++ memset(&ireq, 0, sizeof(ireq));
++ strncpy(ireq.i_name, iface, sizeof(ireq.i_name));
++ ireq.i_type = IEEE80211_IOC_STA_INFO;
++ ireq.i_data = &u;
++ ireq.i_len = sizeof(u);
++ err = ioctl(s, SIOCG80211, &ireq);
++ if ( err >= 0 ){
++ const struct ieee80211req_sta_info *si = u.stareq.info;
++ mode = MODE_HAVE_CARD;
++ // net80211 doesn't have a link quality field so we base it on the
++ // noise/signal level
++ link = (si->isi_rssi-si->isi_noise)/2;
++ level = si->isi_rssi/2;
++ noise = abs(si->isi_noise);
++ }
}
- 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);
-- }
-- break;
-- case 'g' :
-- if (strcmp(arg+1, "geometry")) {
-- usage();
-- exit(1);
-- }
-- 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;
-+ link = wireq.wi_val[0];
-+ level = wireq.wi_val[1];
-+ noise = wireq.wi_val[2];
++ if (err < 0) {
++ mode = MODE_NO_CARD;
++ }
+
+draw:
-+ /*
-+ * Print channel information, and signal ratio
-+ */
-+ switch (mode) {
++ /*
++ * 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("Quality ", 4, 18);
-+ DrawBar(_fmin((int)(link * 1.8), 100.0), 4, 27);
-+ BlitString("Signal ", 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;
++ BlitString("Quality", 4, 4);
++ if (link <= 10) {
++ DrawRedDot();
++ } else if (link <= 20) {
++ DrawYellowDot();
++ } else {
++ DrawGreenDot();
++ };
++ BlitString("Quality ", 4, 18);
++ DrawBar(min((int)(link * 1.8), 100.0), 4, 27);
++ BlitString("Signal ", 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 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;
-+ };
-+ close(s);
-+}
-+
-+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
-+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;
-+
-+ }
-+ }
++ 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;
++ };
++ close(s);
}
--void BlitNum(int num, int x, int y) {
-- char buf[1024];
-- int newx=x;
--
-- sprintf(buf, "%03i", num);
--
-- BlitString(buf, newx, y);
-+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);
+ /* SIGCHLD handler */
+@@ -208,6 +273,11 @@
+
+ if (*arg=='-') {
+ switch (arg[1]) {
++ case 'i':
++ if (argc > (i + 1)) {
++ iface = argv[i+1];
++ }
++ break;
+ case 'd' :
+ if (strcmp(arg+1, "display")) {
+ usage();
+@@ -345,6 +415,7 @@
+ 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, " -i interface to use (default to wi0)\n");
+ fprintf(stderr, " -r update rate in milliseconds (default:100)\n");
+ fprintf(stderr, "\n");
}