192 lines
7.6 KiB
Text
192 lines
7.6 KiB
Text
$NetBSD: patch-ad,v 1.6 2016/06/23 19:04:54 dholland Exp $
|
|
|
|
--- wmnet.c.orig Fri May 5 03:01:14 2000
|
|
+++ wmnet.c Mon Jul 8 16:52:30 2002
|
|
@@ -55,9 +55,14 @@
|
|
#include<X11/Xlib.h>
|
|
#include<X11/Xutil.h>
|
|
#include<X11/Xatom.h>
|
|
-#if defined (__FreeBSD__) || defined (__OpenBSD__)
|
|
+#if defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__NetBSD__) || defined(__DragonFly__)
|
|
# include<sys/socket.h>
|
|
# include"getopt.h"
|
|
+#elif defined (sun)
|
|
+# include<alloca.h>
|
|
+# include<sys/socket.h>
|
|
+# include<sys/sockio.h>
|
|
+# include "getopt.h"
|
|
#else
|
|
# include<getopt.h>
|
|
#endif
|
|
@@ -97,17 +101,19 @@
|
|
int c;
|
|
XColor thecolor;
|
|
struct sigaction signal_action;
|
|
- char *txcolorString = NULL, *rxcolorString = NULL, *labelfgcolorString = NULL, *labelbgcolorString = NULL;
|
|
+ char *txcolorString = NULL, *rxcolorString = NULL, *labelfgcolorString = NULL, *labelbgcolorString = NULL, *bgcolorString = NULL;
|
|
char *parser = NULL;
|
|
#ifdef linux
|
|
- const struct option long_options[19] = {
|
|
+ const struct option long_options[21] = {
|
|
#else
|
|
- const struct option long_options[17] = {
|
|
+ const struct option long_options[19] = {
|
|
#endif
|
|
{"device", required_argument, NULL, 'W'},
|
|
{"label", required_argument, NULL, 'L'},
|
|
{"labelfg", required_argument, NULL, 'F'},
|
|
{"labelbg", required_argument, NULL, 'B'},
|
|
+ {"bg", required_argument, NULL, 'b'},
|
|
+ {"no3d", no_argument, NULL, 'N'},
|
|
{"logscale", no_argument, NULL, 'l'},
|
|
{"help", no_argument, NULL, 'h'},
|
|
{"execute", required_argument, NULL, 'e'},
|
|
@@ -131,9 +137,9 @@
|
|
|
|
/* Get options */
|
|
#ifdef linux
|
|
- while((c = getopt_long(argc, argv, "W:F:B:L:vp:u:wnle:R:T:r:t:D:d:x:h", long_options, NULL)) != EOF) {
|
|
+ while((c = getopt_long(argc, argv, "W:F:B:b:L:vp:u:wnNle:R:T:r:t:D:d:x:h", long_options, NULL)) != EOF) {
|
|
#else
|
|
- while((c = getopt_long(argc, argv, "W:F:B:L:vp:u:wnle:r:t:D:d:x:h", long_options, NULL)) != EOF) {
|
|
+ while((c = getopt_long(argc, argv, "W:F:B:b:L:vp:u:wnNle:r:t:D:d:x:h", long_options, NULL)) != EOF) {
|
|
#endif
|
|
switch(c) {
|
|
case 'v':
|
|
@@ -176,6 +182,15 @@
|
|
exit(23);
|
|
}
|
|
break;
|
|
+ case 'b':
|
|
+ if (bgcolorString == NULL) {
|
|
+ bgcolorString = (char *)alloca(strlen(optarg)+1);
|
|
+ strncpy(bgcolorString, optarg, strlen(optarg)+1);
|
|
+ } else {
|
|
+ fprintf(stderr, "wmnet: duplicate --bg\n");
|
|
+ exit(23);
|
|
+ }
|
|
+ break;
|
|
case 'F':
|
|
if (labelfgcolorString == NULL) {
|
|
labelfgcolorString = (char *)alloca(strlen(optarg)+1);
|
|
@@ -228,6 +243,9 @@
|
|
case 'n':
|
|
specified_state = NormalState;
|
|
break;
|
|
+ case 'N':
|
|
+ no3d = True;
|
|
+ break;
|
|
case 'u':
|
|
{
|
|
int fds;
|
|
@@ -283,6 +301,7 @@
|
|
" -L, --label=LABEL display LABEL on bottom of window\n"
|
|
" -F, --labelfg=COLOR foreground color for the label\n"
|
|
" -B, --labelbg=COLOR background color for the label\n"
|
|
+ " -b, --bg=COLOR background color\n"
|
|
" -e, --execute=COMMAND run COMMAND on click\n"
|
|
#ifdef linux
|
|
" -T, --txrule=RULE accounting rule number (ipfwadm) or\n"
|
|
@@ -320,6 +339,7 @@
|
|
if (rxcolorString == NULL) rxcolorString = "red";
|
|
if (labelfgcolorString == NULL) labelfgcolorString = "white";
|
|
if (labelbgcolorString == NULL) labelbgcolorString = "black";
|
|
+ if (bgcolorString == NULL) bgcolorString = "black";
|
|
|
|
/* Change dir to /, security precaution, and common courtesy */
|
|
if (chdir("/") == -1) {
|
|
@@ -384,6 +404,14 @@
|
|
XAllocColor(dpy, DefaultColormap(dpy, screen), &thecolor);
|
|
labelbg_pixel = thecolor.pixel;
|
|
}
|
|
+ if(bgcolorString) {
|
|
+ if(!XParseColor(dpy, DefaultColormap(dpy, screen), bgcolorString, &thecolor)) {
|
|
+ fprintf(stderr, "wmnet: what the heck is %s for a color?\n", bgcolorString);
|
|
+ exit(25);
|
|
+ }
|
|
+ XAllocColor(dpy, DefaultColormap(dpy, screen), &thecolor);
|
|
+ bg_pixel = thecolor.pixel;
|
|
+ }
|
|
|
|
/* usleep() in between polls to /proc/net/ip_acct */
|
|
if (delayTime <= 0) delayTime = 25000;
|
|
@@ -442,7 +470,7 @@
|
|
}
|
|
gcv.graphics_exposures = False;
|
|
gcv.foreground = tx_pixel[HIGH_INTENSITY];
|
|
- gcv.background = darkgrey_pixel;
|
|
+ gcv.background = bg_pixel /* HF: darkgrey_pixel */;
|
|
gcv.font = XLoadFont(dpy, "5x8");
|
|
graphics_context = XCreateGC(dpy, root_window, (GCFont|GCGraphicsExposures|GCForeground|GCBackground), &gcv);
|
|
black_pixel = BlackPixel(dpy, screen);
|
|
@@ -494,12 +522,12 @@
|
|
/* Handles Expose events, repaints the window */
|
|
void redraw(XExposeEvent *ee) {
|
|
static XRectangle cliprect = { 4, 51, 56, 9 };
|
|
- XSetForeground(dpy, graphics_context, darkgrey_pixel);
|
|
+ XSetForeground(dpy, graphics_context, bg_pixel /* HF: darkgrey_pixel*/);
|
|
/* if (wmaker_present == False) XFillRectangle(dpy, *visible_window, graphics_context, 0, 0, 64, 64); */
|
|
XFillRectangle(dpy, *visible_window, graphics_context, GRAPHBOX_X, GRAPHBOX_Y, GRAPHBOX_WIDTH, GRAPHBOX_HEIGHT);
|
|
|
|
|
|
- XSetForeground(dpy, graphics_context, black_pixel);
|
|
+ XSetForeground(dpy, graphics_context, bg_pixel);
|
|
XFillRectangle(dpy, *visible_window, graphics_context, TOPBOX_X, TOPBOX_Y, TOPBOX_WIDTH, TOPBOX_HEIGHT);
|
|
XDrawLine(dpy, *visible_window, graphics_context, GRAPHBOX_X_LEFT, GRAPHBOX_Y_TOP, GRAPHBOX_X_LEFT, GRAPHBOX_Y_BOTTOM);
|
|
XDrawPoint(dpy, *visible_window, graphics_context, GRAPHBOX_X_RIGHT, GRAPHBOX_Y_TOP);
|
|
@@ -513,15 +541,19 @@
|
|
}
|
|
|
|
|
|
+ if (! no3d) {
|
|
XSetForeground(dpy, graphics_context, white_pixel);
|
|
XDrawLine(dpy, *visible_window, graphics_context, GRAPHBOX_X_RIGHT, GRAPHBOX_Y_BOTTOM, GRAPHBOX_X_RIGHT, (GRAPHBOX_Y_TOP + 1));
|
|
XDrawLine(dpy, *visible_window, graphics_context, GRAPHBOX_X_LEFT, GRAPHBOX_Y_BOTTOM, GRAPHBOX_X_RIGHT, GRAPHBOX_Y_BOTTOM);
|
|
+ }
|
|
|
|
|
|
+ if (! no3d) { /* OK, this is cheating, but I don't want to add yet another switch; I have NFC what these arrows are for - HF */
|
|
XSetForeground(dpy, graphics_context, grey_pixel);
|
|
- XSetBackground(dpy, graphics_context, black_pixel);
|
|
+ XSetBackground(dpy, graphics_context, bg_pixel);
|
|
XCopyPlane(dpy, arrow, *visible_window, graphics_context, 7, 0, 7, 9, 53, 5, 1);
|
|
XCopyPlane(dpy, arrow, *visible_window, graphics_context, 0, 0, 7, 9, 46, 5, 1);
|
|
+ }
|
|
}
|
|
|
|
|
|
@@ -572,7 +604,7 @@
|
|
if (blank < (GRAPH_WIDTH + 1) ) {
|
|
XCopyArea(dpy, *visible_window, *visible_window, graphics_context, GRAPH_X + 1,
|
|
GRAPH_Y, GRAPH_WIDTH - 1, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y);
|
|
- XSetForeground(dpy, graphics_context, darkgrey_pixel);
|
|
+ XSetForeground(dpy, graphics_context, bg_pixel /* HF: darkgrey_pixel*/ );
|
|
XDrawLine(dpy, *visible_window, graphics_context, GRAPH_X_RIGHT, y, GRAPH_X_RIGHT, yy);
|
|
if (( (yy == GRAPH_Y_UPPER && diffbytes_out > 0 && rate_rx > rate_tx) || (rate_rx >= rate_tx && yy != GRAPH_Y_UPPER)) ) {
|
|
drawColoredLine(GRAPH_Y_UPPER, yy, tx_pixel);
|
|
@@ -593,7 +625,7 @@
|
|
if (!stat_gather()) { /* Anything change? */
|
|
current_rx = rx;
|
|
current_tx = tx;
|
|
- XSetBackground(dpy, graphics_context, black_pixel);
|
|
+ XSetBackground(dpy, graphics_context, bg_pixel);
|
|
if(current_tx == True) {
|
|
XSetForeground(dpy, graphics_context, tx_pixel[HIGH_INTENSITY]);
|
|
XCopyPlane(dpy, arrow, *visible_window, graphics_context, 7, 0, 7, 9, 53, 5, 1);
|
|
@@ -646,7 +678,7 @@
|
|
|
|
|
|
if (!clear) {
|
|
- XSetForeground(dpy, graphics_context, black_pixel);
|
|
+ XSetForeground(dpy, graphics_context, bg_pixel);
|
|
XFillRectangle(dpy, *visible_window, graphics_context, 4, 5, 37, 9);
|
|
}
|
|
if (rate < .1) {
|
|
@@ -732,6 +732,7 @@
|
|
case ButtonPress:
|
|
if(event.xbutton.button == Button1 && click_command != NULL) {
|
|
if (fork() == 0) {
|
|
+ setgid(getgid());
|
|
execl("/bin/sh", "sh", "-c", click_command, NULL);
|
|
perror("wmnet: execl()");
|
|
exit(15);
|