~kris/9p

9hist

c21bbc9628398e1b207960d219a98a0d6dd14862 — David du Colombier 26 years ago d4e99b8
Plan 9 from Bell Labs 1999-10-12
2 files changed, 53 insertions(+), 14 deletions(-)

M port/devdraw.c
M port/devmouse.c
M port/devdraw.c => port/devdraw.c +19 -13
@@ 1928,23 1928,29 @@ Dev drawdevtab = {
 * On 8 bit displays, load the default color map
 */
void
drawcmap(int invert){
drawcmap(int invert)
{
	int r, g, b, cr, cg, cb, v;
	int num, den;
	int i, j;

	drawactive(1);	/* to restore map from backup */
	for(r=0,i=0;r!=4;r++) for(v=0;v!=4;v++,i+=16){
		for(g=0,j=v-r;g!=4;g++) for(b=0;b!=4;b++,j++){
			den=r;
			if(g>den) den=g;
			if(b>den) den=b;
			if(den==0)	/* divide check -- pick grey shades */
				cr=cg=cb=v*17;
	for(r=0,i=0; r!=4; r++)
	    for(v=0; v!=4; v++,i+=16){
		for(g=0,j=v-r; g!=4; g++)
		    for(b=0;b!=4;b++,j++){
			den = r;
			if(g > den)
				den = g;
			if(b > den)
				den = b;
			if(den == 0)	/* divide check -- pick grey shades */
				cr = cg = cb = v*17;
			else{
				num=17*(4*den+v);
				cr=r*num/den;
				cg=g*num/den;
				cb=b*num/den;
				num = 17*(4*den+v);
				cr = r*num/den;
				cg = g*num/den;
				cb = b*num/den;
			}
			if(invert)
				setcolor(255-i-(j&15),


@@ 1952,7 1958,7 @@ drawcmap(int invert){
			else
				setcolor(i+(j&15),
					cr*0x01010101, cg*0x01010101, cb*0x01010101);
		}
		    }
	}
}


M port/devmouse.c => port/devmouse.c +34 -1
@@ 27,6 27,7 @@ struct Mouseinfo
	Ref;
	QLock;
	int	open;
	int	inopen;
	int	acceleration;
	int	maxacc;
};


@@ 44,12 45,14 @@ enum{
	Qdir,
	Qcursor,
	Qmouse,
	Qmousein,
	Qmousectl,
};

static Dirtab mousedir[]={
	"cursor",	{Qcursor},	0,			0666,
	"mouse",	{Qmouse},	0,			0666,
	"mousein",	{Qmousein},	0,			0220,
	"mousectl",	{Qmousectl},	0,			0220,
};



@@ 127,6 130,15 @@ mouseopen(Chan *c, int omode)
		mouse.ref++;
		unlock(&mouse);
		break;
	case Qmousein:
		lock(&mouse);
		if(mouse.inopen){
			unlock(&mouse);
			error(Einuse);
		}
		mouse.inopen = 1;
		unlock(&mouse);
		break;
	default:
		incref(&mouse);
	}


@@ 151,6 163,11 @@ mouseclose(Chan *c)
		lock(&mouse);
		if(c->qid.path == Qmouse)
			mouse.open = 0;
		else if(c->qid.path == Qmousein){
			mouse.inopen = 0;
			unlock(&mouse);
			return;
		}
		if(--mouse.ref == 0){
			cursoroff(1);
			curs = arrow;


@@ 259,7 276,7 @@ mousewrite(Chan *c, void *va, long n, vlong)
	char *p;
	Point pt;
	char buf[64], *field[3];
	int nf;
	int nf, b;

	p = va;
	switch(c->qid.path){


@@ 312,6 329,22 @@ mousewrite(Chan *c, void *va, long n, vlong)
			mousectl(field, nf);
		return n;

	case Qmousein:
		if(n > sizeof buf-1)
			n = sizeof buf -1;
		memmove(buf, va, n);
		buf[n] = 0;
		p = 0;
		pt.x = strtol(buf+1, &p, 0);
		if(p == 0)
			error(Eshort);
		pt.y = strtol(p, &p, 0);
		if(p == 0)
			error(Eshort);
		b = strtol(p, &p, 0);
		mousetrack(b, pt.x, pt.y);
		return n;
		
	case Qmouse:
		if(n > sizeof buf-1)
			n = sizeof buf -1;