plan 9 kernel history: overview | file list | diff list

1990/0613/port/devbit.c (diff list | history)

1990/06111/sys/src/9/port/devbit.c:34,391990/0613/sys/src/9/port/devbit.c:34,42 (short | long | prev | next)
1990/0327    
	ulong	*wfree;		/* pointer to next free word */ 
	int	lastid;		/* last allocated bitmap id */ 
1990/0329    
	int	init;		/* freshly opened; init message pending */ 
1990/0613    
	int	rid;		/* read bitmap id */ 
	int	rminy;		/* read miny */ 
	int	rmaxy;		/* read maxy */ 
1990/0324    
}bit; 
 
1990/0327    
#define	FREE	0x80000000 
1990/06111/sys/src/9/port/devbit.c:196,2011990/0613/sys/src/9/port/devbit.c:199,205
1990/0324    
			error(0, Einuse); 
		} 
1990/0327    
		bit.lastid = -1; 
1990/0613    
		bit.rid = -1; 
1990/0604    
		bit.init = 0; 
1990/05151    
		bit.ref = 1; 
1990/05313    
		Cursortocursor(&arrow); 
1990/06111/sys/src/9/port/devbit.c:258,2641990/0613/sys/src/9/port/devbit.c:262,272
1990/0324    
long 
bitread(Chan *c, void *va, long n) 
{ 
1990/0327    
	uchar *p; 
1990/0613    
	uchar *p, *q; 
	long miny, maxy, t, x, y; 
	ulong l, nw, ws; 
	int off; 
	Bitmap *src; 
1990/0327    
 
1990/0324    
	if(c->qid & CHDIR) 
		return devdirread(c, va, n, bitdir, NBIT, devgen); 
1990/06111/sys/src/9/port/devbit.c:329,3341990/0613/sys/src/9/port/devbit.c:337,384
1990/0505    
			n = 3; 
			break; 
		} 
1990/0613    
		if(bit.rid >= 0){ 
			/* 
			 * read 
			 *	data		bytewidth*(maxy-miny) 
			 */ 
			src = &bit.map[bit.rid]; 
			if(src->ldepth<0) 
				error(0, Ebadbitmap); 
			off = 0; 
			if(bit.rid == 0) 
				off = 1; 
			miny = bit.rminy; 
			maxy = bit.rmaxy; 
			if(miny>maxy || miny<src->r.min.y || maxy>src->r.max.y) 
				error(0, Ebadblt); 
			ws = 1<<(3-src->ldepth);	/* pixels per byte */ 
			/* set l to number of bytes of incoming data per scan line */ 
			if(src->r.min.x >= 0) 
				l = (src->r.max.x+ws-1)/ws - src->r.min.x/ws; 
			else{	/* make positive before divide */ 
				t = (-src->r.min.x)+ws-1; 
				t = (t/ws)*ws; 
				l = (t+src->r.max.x+ws-1)/ws; 
			} 
			if(n < l*(maxy-miny)) 
				error(0, Ebadblt); 
			if(off) 
				cursoroff(1); 
			n = 0; 
			p = va; 
			for(y=miny; y<maxy; y++){ 
				q = (uchar*)addr(src, Pt(src->r.min.x, y)); 
				q += (src->r.min.x&((sizeof(ulong))*ws-1))/8; 
				for(x=0; x<l; x++) 
					*p++ = K2U(*q++); 
				n += l; 
			} 
			if(off) 
				cursoron(1); 
			bit.rid = -1; 
			break; 
		} 
1990/0505    
		error(0, Ebadblt); 
 
	default: 
1990/06111/sys/src/9/port/devbit.c:552,5571990/0613/sys/src/9/port/devbit.c:602,632
1990/06111    
				cursoron(1); 
			m -= 22; 
			p += 22; 
1990/0613    
			break; 
 
		case 'r': 
			/* 
			 * read 
			 *	'r'		1 
			 *	src id		2 
			 *	miny		4 
			 *	maxy		4 
			 */ 
			if(m < 11) 
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			src = &bit.map[v]; 
			if(v>=conf.nbitmap || src->ldepth<0) 
				error(0, Ebadbitmap); 
			miny = GLONG(p+3); 
			maxy = GLONG(p+7); 
			if(miny>maxy || miny<src->r.min.y || maxy>src->r.max.y) 
				error(0, Ebadblt); 
			bit.rid = v; 
			bit.rminy = miny; 
			bit.rmaxy = maxy; 
			p += 11; 
			m -= 11; 
1990/06111    
			break; 
 
1990/0329    
		case 's': 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)