various bug fixes

This commit is contained in:
rsc 2004-04-24 04:52:49 +00:00
parent 272fd660b4
commit 78802e6993
10 changed files with 89 additions and 9 deletions

View file

@ -1,3 +1,11 @@
April 23, 2004
fix B to handle non-existent files properly
add stats
various 9term/rio fixes from axel belinfante
April 21, 2004 April 21, 2004
add bc, units, mtime, primes, news add bc, units, mtime, primes, news

12
bin/9c
View file

@ -35,6 +35,7 @@ case "$tag" in
u=`uname` u=`uname`
v=`uname -r` v=`uname -r`
s=`echo $u$v | tr '. ' '__'` s=`echo $u$v | tr '. ' '__'`
cflags="$ngflags -g"
cflags="$cflags -D__$s__" cflags="$cflags -D__$s__"
;; ;;
*) *)
@ -42,4 +43,13 @@ case "$tag" in
exit 1 exit 1
esac esac
exec $cc -I$PLAN9/include $cflags "$@" case "$tag" in
*SunOS*-cc)
exec $cc -I$PLAN9/include $cflags "$@" |
/bin/sed 's/\"\([^\"][^\"]*\)\", line \([0-9][0-9]*\)/\1:\2/g'
;;
*)
exec $cc -I$PLAN9/include $cflags "$@"
;;
esac

View file

@ -176,12 +176,14 @@ and a remote BSD machine
stats -lmisce `hostname` tux:/usr/local/plan9/bin/auxstats daemon stats -lmisce `hostname` tux:/usr/local/plan9/bin/auxstats daemon
.SH SOURCE .SH SOURCE
.B /usr/local/plan9/src/cmd/draw/stats.c .B /usr/local/plan9/src/cmd/draw/stats.c
.PP
.B /usr/local/plan9/src/cmd/auxstats
.SH BUGS .SH BUGS
The The
.I auxstats .I auxstats
binary needs read access to binary needs read access to
.B /dev/kmem .B /dev/kmem
in order to collect network statistics on BSD systems. in order to collect network statistics on non-Linux systems.
Typically this can be arranged by setting the Typically this can be arranged by setting the
.I auxstat .I auxstat
binary's binary's

View file

@ -544,9 +544,13 @@ mouse(void)
domenu2(2); domenu2(2);
break; break;
case 4: case 4:
bouncemouse(&t.m);
break;
/*
if(aselect(&q0, &q1, plumbcolor) >= 0) if(aselect(&q0, &q1, plumbcolor) >= 0)
plumb(q0, q1); plumb(q0, q1);
break; break;
*/
} }
} }

View file

@ -55,6 +55,7 @@ xmeminfo(int first)
{ {
int i; int i;
vlong tot, used; vlong tot, used;
vlong mtot, mfree;
static int fd = -1; static int fd = -1;
if(first){ if(first){
@ -63,9 +64,10 @@ xmeminfo(int first)
} }
readfile(fd); readfile(fd);
mtot = 0;
for(i=0; i<nline; i++){ for(i=0; i<nline; i++){
tokens(i); tokens(i);
if(ntok < 4) if(ntok < 3)
continue; continue;
tot = atoll(tok[1]); tot = atoll(tok[1]);
used = atoll(tok[2]); used = atoll(tok[2]);
@ -73,6 +75,14 @@ xmeminfo(int first)
Bprint(&bout, "mem =%lld %lld\n", used/1024, tot/1024); Bprint(&bout, "mem =%lld %lld\n", used/1024, tot/1024);
else if(strcmp(tok[0], "Swap:") == 0) else if(strcmp(tok[0], "Swap:") == 0)
Bprint(&bout, "swap =%lld %lld\n", used/1024, tot/1024); Bprint(&bout, "swap =%lld %lld\n", used/1024, tot/1024);
else if(strcmp(tok[0], "MemTotal:") == 0)
mtot = atoll(tok[1]); /* kb */
else if(strcmp(tok[0], "MemFree:") == 0){
mfree = atoll(tok[1]);
if(mtot < mfree)
continue;
Bprint(&bout, "mem =%lld %lld\n", mtot-mfree, mtot);
}
} }
} }

View file

@ -16,7 +16,7 @@ Current incompatibilities that would be nice to fix:
can put up the usual b3 menu. can put up the usual b3 menu.
Axel Belinfante contributed the code to handle border grabbing Axel Belinfante contributed the code to handle border grabbing
for resize. for resize and various other improvements.
The original README is below. The original README is below.

View file

@ -352,6 +352,7 @@ property(XPropertyEvent *e)
Atom a; Atom a;
int delete; int delete;
Client *c; Client *c;
long msize;
/* we don't set curtime as nothing here uses it */ /* we don't set curtime as nothing here uses it */
a = e->atom; a = e->atom;
@ -378,6 +379,15 @@ property(XPropertyEvent *e)
case XA_WM_TRANSIENT_FOR: case XA_WM_TRANSIENT_FOR:
gettrans(c); gettrans(c);
return; return;
case XA_WM_HINTS:
case XA_WM_SIZE_HINTS:
case XA_WM_ZOOM_HINTS:
/* placeholders to not forget. ignore for now. -Axel */
return;
case XA_WM_NORMAL_HINTS:
if (XGetWMNormalHints(dpy, c->window, &c->size, &msize) == 0 || c->size.flags == 0)
c->size.flags = PSize; /* not specified - punt */
return;
} }
if (a == _rio_hold_mode) { if (a == _rio_hold_mode) {
c->hold = getiprop(c->window, _rio_hold_mode); c->hold = getiprop(c->window, _rio_hold_mode);
@ -404,7 +414,12 @@ reparent(XReparentEvent *e)
if ((s = getscreen(e->parent)) != 0) { if ((s = getscreen(e->parent)) != 0) {
c = getclient(e->window, 1); c = getclient(e->window, 1);
if (c != 0 && (c->dx == 0 || c->dy == 0)) { if (c != 0 && (c->dx == 0 || c->dy == 0)) {
/* flush any errors */
ignore_badwindow = 1;
XGetWindowAttributes(dpy, c->window, &attr); XGetWindowAttributes(dpy, c->window, &attr);
XSync(dpy, False);
ignore_badwindow = 0;
c->x = attr.x; c->x = attr.x;
c->y = attr.y; c->y = attr.y;
c->dx = attr.width; c->dx = attr.width;

View file

@ -359,8 +359,11 @@ getcmaps(Client *c)
XWindowAttributes attr; XWindowAttributes attr;
if (!c->init) { if (!c->init) {
ignore_badwindow = 1;
XGetWindowAttributes(dpy, c->window, &attr); XGetWindowAttributes(dpy, c->window, &attr);
c->cmap = attr.colormap; c->cmap = attr.colormap;
XSync(dpy, False);
ignore_badwindow = 0;
} }
n = _getprop(c->window, wm_colormaps, XA_WINDOW, 100L, (void*)&cw); n = _getprop(c->window, wm_colormaps, XA_WINDOW, 100L, (void*)&cw);
@ -381,9 +384,13 @@ getcmaps(Client *c)
if (cw[i] == c->window) if (cw[i] == c->window)
c->wmcmaps[i] = c->cmap; c->wmcmaps[i] = c->cmap;
else { else {
/* flush any errors (e.g., caused by mozilla tabs) */
ignore_badwindow = 1;
XSelectInput(dpy, cw[i], ColormapChangeMask); XSelectInput(dpy, cw[i], ColormapChangeMask);
XGetWindowAttributes(dpy, cw[i], &attr); XGetWindowAttributes(dpy, cw[i], &attr);
c->wmcmaps[i] = attr.colormap; c->wmcmaps[i] = attr.colormap;
XSync(dpy, False);
ignore_badwindow = 0;
} }
} }
} }

View file

@ -149,13 +149,21 @@ setcursor(Mousectl *mc, Cursor *c)
_xsetcursor(c); _xsetcursor(c);
} }
/*
* Send the mouse event back to the window manager.
* So that 9term can tell rio to pop up its button3 menu.
* Note that we're using _x.mousecon in a few places,
* so we have to be sure that the mouse proc isn't using it
* when we call! This is all a bit wonky and should be
* avoided unless you know what you're doing.
*/
void void
bouncemouse(Mouse *m) bouncemouse(Mouse *m)
{ {
XButtonEvent e; XButtonEvent e;
XWindow dw;
e.type = ButtonPress; e.type = ButtonPress;
e.window = DefaultRootWindow(_x.display);
e.state = 0; e.state = 0;
e.button = 0; e.button = 0;
if(m->buttons&1) if(m->buttons&1)
@ -164,10 +172,18 @@ bouncemouse(Mouse *m)
e.button = 2; e.button = 2;
else if(m->buttons&4) else if(m->buttons&4)
e.button = 3; e.button = 3;
e.x = m->xy.x; e.same_screen = 1;
e.y = m->xy.y; XTranslateCoordinates(_x.display, _x.drawable,
DefaultRootWindow(_x.display),
m->xy.x, m->xy.y, &e.x_root, &e.y_root, &dw);
e.root = DefaultRootWindow(_x.mousecon);
e.window = e.root;
e.subwindow = None;
e.x = e.x_root;
e.y = e.y_root;
#undef time #undef time
e.time = CurrentTime; e.time = CurrentTime;
XSendEvent(_x.display, e.window, True, ButtonPressMask, (XEvent*)&e); XUngrabPointer(_x.mousecon, m->msec);
XFlush(_x.display); XSendEvent(_x.mousecon, e.root, True, ButtonPressMask, (XEvent*)&e);
XFlush(_x.mousecon);
} }

View file

@ -64,6 +64,10 @@ plumbsendtofid(Fid *fid, Plumbmsg *m)
char *buf; char *buf;
int n; int n;
if(fid == nil){
werrstr("invalid fid");
return -1;
}
buf = plumbpack(m, &n); buf = plumbpack(m, &n);
if(buf == nil) if(buf == nil)
return -1; return -1;
@ -75,6 +79,10 @@ plumbsendtofid(Fid *fid, Plumbmsg *m)
int int
plumbsend(int fd, Plumbmsg *m) plumbsend(int fd, Plumbmsg *m)
{ {
if(fd == -1){
werrstr("invalid fd");
return -1;
}
if(fd != pfd){ if(fd != pfd){
werrstr("fd is not the plumber"); werrstr("fd is not the plumber");
return -1; return -1;