~kris/9p

9hist

8243034ea1903b264122acb8da201660c51b763f — David du Colombier 32 years ago add7a66
Plan 9 from Bell Labs 1993-10-08
7 files changed, 50 insertions(+), 24 deletions(-)

M carrera/screen.c
M port/devlance.c
M port/devmouse.c
M port/page.c
M port/swap.c
M power/mem.h
M power/trap.c
M carrera/screen.c => carrera/screen.c +2 -0
@@ 559,6 559,7 @@ screenload(Rectangle r, uchar *data, long n)
		unlock(&screenlock);
		error("bad tile size");
	}
	cursoroff(1);
	q = gbaddr(&gscreen, r.min);
	mx = 7>>gscreen.ldepth;
	lpart = (r.min.x & mx) << gscreen.ldepth;


@@ 605,6 606,7 @@ screenload(Rectangle r, uchar *data, long n)
			data += l;
		}
	mbbrect(r);
	cursoron(1);
	screenupdate();
	unlock(&screenlock);
}

M port/devlance.c => port/devlance.c +23 -0
@@ 430,6 430,28 @@ isoutbuf(void *x)
	return l.wedged || (MPus(m->flags)&LANCEOWNER) == 0;
}

static void
etherloop(Etherpkt *p, long n)
{
	int s;
	ushort t;
	Netfile *f, **fp;

	if(memcmp(p->d, p->s, sizeof(p->d)) && memcmp(p->d, l.bcast, sizeof(p->d)))
		return;

	s = splhi();
	t = (p->type[0]<<8) | p->type[1];
	for(fp = l.f; fp < &l.f[Ntypes]; fp++) {
		f = *fp;
		if(f == 0)
			continue;
		if(f->type == t || f->type < 0)
			qproduce(f->in, p->d, n);
	}
	splx(s);
}

long
lancewrite(Chan *c, void *buf, long n, ulong offset)
{


@@ 452,6 474,7 @@ lancewrite(Chan *c, void *buf, long n, ulong offset)
	if(!isoutbuf(m) || l.wedged)
		print("lance transmitter jammed\n");
	else {
		etherloop(buf, n);
		p = &l.tp[l.tc];
		memmove(p->d, buf, n);
		if(n < 60) {

M port/devmouse.c => port/devmouse.c +17 -22
@@ 251,34 251,25 @@ mouseclose(Chan *c)
long
mouseread(Chan *c, void *va, long n, ulong offset)
{
	uchar *p;
	char buf[4*12+1];

	USED(offset);
	if(c->qid.path & CHDIR)
		return devdirread(c, va, n, mousedir, NMOUSE, devgen);

	if(c->qid.path == Qmouse){
		/*
		 * mouse:
		 *	'm'		1
		 *	buttons		1
		 * 	point		8
		 * 	msec		4
		 */
		if(n < 14)
			error(Eshort);
		while(mousechanged(0) == 0)
			sleep(&mouse.r, mousechanged, 0);
		lock(&cursor);
		p = va;
		p[0] = 'm';
		p[1] = mouse.buttons;
		BPLONG(p+2, mouse.xy.x);
		BPLONG(p+6, mouse.xy.y);
		BPLONG(p+10, TK2MS(MACHP(0)->ticks));
		sprint(buf, "%11d %11d %11d %11d",
			mouse.xy.x, mouse.xy.y, mouse.buttons,
			TK2MS(MACHP(0)->ticks));
		mouse.lastcounter = mouse.counter;
		unlock(&cursor);
		return 14;
		if(n > 4*12)
			n = 4*12;
		memmove(va, buf, n);
		return n;
	}
	return 0;
}


@@ 286,7 277,7 @@ mouseread(Chan *c, void *va, long n, ulong offset)
long
mousewrite(Chan *c, void *va, long n, ulong offset)
{
	uchar *p;
	char *p;
	Point pt;
	char buf[64];



@@ 305,12 296,16 @@ mousewrite(Chan *c, void *va, long n, ulong offset)
		return n;

	case Qmouse:
		if(n != 9)
		if(n > sizeof buf-1)
			n = sizeof buf -1;
		memmove(buf, va, n);
		buf[n] = 0;
		p = 0;
		pt.x = strtoul(buf, &p, 0);
		if(p == 0)
			error(Eshort);
		pt.y = strtoul(p, 0, 0);
		qlock(&mouse);
		p = va;
		pt.x = BGLONG(p+1);
		pt.y = BGLONG(p+5);
		if(ptinrect(pt, gscreen.r)){
			mouse.xy = pt;
			mouse.redraw = 1;

M port/page.c => port/page.c +1 -1
@@ 76,7 76,7 @@ retry:
	color = getpgcolor(va);
	hw = swapalloc.highwater;
	for(;;) {
		if(palloc.freecol[color] > hw)
		if(palloc.freecol[color] > hw/NCOLOR)
			break;
		if(up->kp && palloc.freecol[color] > 0)
			break;

M port/swap.c => port/swap.c +4 -0
@@ 114,6 114,10 @@ loop:
		if(p >= ep)
			p = proctab(0);

		/* don't swap out programs from devroot.c */
		if(devchar[p->seg[SG_TEXT]->image->c->type] == '/')
			continue;

		if(p->state == Dead || p->kp)
			continue;


M power/mem.h => power/mem.h +2 -1
@@ 114,7 114,8 @@
#define	TLBROFF	8	/* offset of first randomly indexed entry */

#define NCOLOR	1
#define getcolor(a)	0
#define getpgcolor(a) 0

/*
 * Address spaces
 */

M power/trap.c => power/trap.c +1 -0
@@ 416,6 416,7 @@ notify(Ureg *ur)
	*(ulong*)(sp+2*BY2WD) = sp+3*BY2WD;	/* arg 2 is string */
	up->svr1 = ur->r1;			/* save away r1 */
	ur->r1 = (ulong)up->ureg;		/* arg 1 is ureg* */
	*(ulong*)(sp+1*BY2WD) = (ulong)up->ureg;/* arg 1 0(FP) is ureg* (for Alef) */
	*(ulong*)(sp+0*BY2WD) = 0;		/* arg 0 is pc */
	ur->usp = sp;
	ur->pc = (ulong)up->notify;