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

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

1990/0613/sys/src/9/port/devbit.c:32,381990/0623/sys/src/9/port/devbit.c:32,40 (short | long | prev | next)
1990/0327    
	ulong	*words;		/* storage */ 
	ulong	nwords;		/* total in arena */ 
	ulong	*wfree;		/* pointer to next free word */ 
1990/0623    
	Font	*font;		/* arena; looked up linearly BUG */ 
1990/0327    
	int	lastid;		/* last allocated bitmap id */ 
1990/0623    
	int	lastfid;	/* last allocated font id */ 
1990/0329    
	int	init;		/* freshly opened; init message pending */ 
1990/0613    
	int	rid;		/* read bitmap id */ 
	int	rminy;		/* read miny */ 
1990/0613/sys/src/9/port/devbit.c:126,1311990/0623/sys/src/9/port/devbit.c:128,134
1990/0324    
}; 
 
#define	NBIT	(sizeof bitdir/sizeof(Dirtab)) 
1990/0623    
#define	NINFO	150 
1990/0324    
 
void 
bitreset(void) 
1990/0613/sys/src/9/port/devbit.c:143,1511990/0623/sys/src/9/port/devbit.c:146,159
1990/0327    
	bit.map[0] = screen;	/* bitmap 0 is screen */ 
	bit.free = bit.map+1; 
	bit.lastid = -1; 
1990/0623    
	bit.lastfid = -1; 
1990/0327    
	bit.words = ialloc(conf.nbitbyte, 0); 
	bit.nwords = conf.nbitbyte/sizeof(ulong); 
	bit.wfree = bit.words; 
1990/0623    
	bit.font = ialloc(conf.nfont * sizeof(Font), 0); 
	bit.font[0] = *defont; 
	for(i=1; i<conf.nfont; i++) 
		bit.font[i].info = ialloc((NINFO+1)*sizeof(Fontchar), 0); 
1990/05313    
	Cursortocursor(&arrow); 
1990/0324    
} 
 
1990/0613/sys/src/9/port/devbit.c:199,2041990/0623/sys/src/9/port/devbit.c:207,213
1990/0324    
			error(0, Einuse); 
		} 
1990/0327    
		bit.lastid = -1; 
1990/0623    
		bit.lastfid = -1; 
1990/0613    
		bit.rid = -1; 
1990/0604    
		bit.init = 0; 
1990/05151    
		bit.ref = 1; 
1990/0613/sys/src/9/port/devbit.c:235,2401990/0623/sys/src/9/port/devbit.c:244,250
1990/0324    
{ 
1990/0327    
	int i; 
	Bitmap *bp; 
1990/0623    
	Font *fp; 
1990/0327    
 
1990/05151    
	if(c->qid!=CHDIR && (c->flag&COPEN)){ 
1990/0329    
		lock(&bit); 
1990/0613/sys/src/9/port/devbit.c:242,2471990/0623/sys/src/9/port/devbit.c:252,259
1990/0327    
			for(i=1,bp=&bit.map[1]; i<conf.nbitmap; i++,bp++) 
				if(bp->ldepth >= 0) 
					bitfree(bp); 
1990/0623    
			for(i=1,fp=&bit.font[1]; i<conf.nfont; i++,fp++) 
				fp->bits = 0; 
1990/0327    
		} 
1990/0324    
		unlock(&bit); 
	} 
1990/0613/sys/src/9/port/devbit.c:337,3421990/0623/sys/src/9/port/devbit.c:349,368
1990/0505    
			n = 3; 
			break; 
		} 
1990/0623    
		if(bit.lastfid > 0){ 
			/* 
			 * allocate font: 
			 *	'K'		1 
			 *	font id		2 
			 */ 
			if(n < 3) 
				error(0, Ebadblt); 
			p[0] = 'K'; 
			PSHORT(p+1, bit.lastfid); 
			bit.lastfid = -1; 
			n = 3; 
			break; 
		} 
1990/0613    
		if(bit.rid >= 0){ 
			/* 
			 * read 
1990/0613/sys/src/9/port/devbit.c:395,4051990/0623/sys/src/9/port/devbit.c:421,433
1990/0329    
	uchar *p, *q; 
	long m, v, miny, maxy, t, x, y; 
1990/0327    
	ulong l, nw, ws; 
1990/0504    
	int off; 
1990/0623    
	int off, i; 
1990/06111    
	Point pt, pt1, pt2; 
1990/0324    
	Rectangle rect; 
1990/05313    
	Cursor curs; 
1990/0623    
	Fontchar *fcp; 
1990/0327    
	Bitmap *bp, *src, *dst; 
1990/0623    
	Font *f; 
1990/0324    
 
	if(c->qid == CHDIR) 
		error(0, Eisdir); 
1990/0613/sys/src/9/port/devbit.c:551,5571990/0623/sys/src/9/port/devbit.c:579,585
1990/0327    
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			dst = &bit.map[v]; 
1990/0329    
			if(v>=conf.nbitmap || dst->ldepth<0) 
1990/0623    
			if(v<0 || v>=conf.nbitmap || dst->ldepth<0) 
1990/0329    
				error(0, Ebadbitmap); 
1990/0327    
			bitfree(dst); 
			m -= 3; 
1990/0613/sys/src/9/port/devbit.c:558,5631990/0623/sys/src/9/port/devbit.c:586,608
1990/0327    
			p += 3; 
1990/0604    
			break; 
 
1990/0623    
		case 'g': 
			/* 
			 * free font (free bitmap separately) 
			 *	'g'		1 
			 *	id		2 
			 */ 
			if(m < 3) 
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			f = &bit.font[v]; 
			if(v<0 || v>=conf.nfont || f->bits==0) 
				error(0, Ebadbitmap); 
			f->bits = 0; 
			m -= 3; 
			p += 3; 
			break; 
 
1990/0604    
		case 'i': 
			/* 
			 * init 
1990/0613/sys/src/9/port/devbit.c:569,5741990/0623/sys/src/9/port/devbit.c:614,665
1990/0604    
			p += 1; 
1990/0327    
			break; 
1990/0329    
 
1990/0623    
		case 'k': 
			/* 
			 * allocate font 
			 *	'k'		1 
			 *	n		2 
			 *	height		1 
			 *	ascent		1 
			 *	bitmap id	2 
			 *	fontchars	6*n 
			 * next read returns allocated font id 
			 */ 
			if(m < 7) 
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			if(v<0 || v>NINFO || m<7+6*(v+1))	/* BUG */ 
				error(0, Ebadblt); 
			for(i=1; i<conf.nfont; i++) 
				if(bit.font[i].bits == 0) 
					goto fontfound; 
			error(0, Enofont); 
		fontfound: 
			f = &bit.font[i]; 
			f->n = v; 
			f->height = p[3]; 
			f->ascent = p[4]; 
			v = GSHORT(p+5); 
			dst = &bit.map[v]; 
			if(v<0 || v>=conf.nbitmap || dst->ldepth<0) 
				error(0, Ebadbitmap); 
			m -= 7; 
			p += 7; 
			fcp = f->info; 
			for(i=0; i<=f->n; i++,fcp++){ 
				fcp->x = GSHORT(p); 
				fcp->top = p[2]; 
				fcp->bottom = p[3]; 
				fcp->left = p[4]; 
				fcp->width = p[5]; 
				fcp->top = p[2]; 
				p += 6; 
				m -= 6; 
			} 
			bit.lastfid = f - bit.font; 
			f->bits = dst; 
			break; 
 
1990/06111    
		case 'l': 
			/* 
			 * line segment 
1990/0613/sys/src/9/port/devbit.c:584,5901990/0623/sys/src/9/port/devbit.c:675,681
1990/06111    
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			dst = &bit.map[v]; 
			if(v>=conf.nbitmap || dst->ldepth<0) 
1990/0623    
			if(v<0 || v>=conf.nbitmap || dst->ldepth<0) 
1990/06111    
				error(0, Ebadbitmap); 
			off = 0; 
			if(v == 0) 
1990/0613/sys/src/9/port/devbit.c:616,6221990/0623/sys/src/9/port/devbit.c:707,713
1990/0613    
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			src = &bit.map[v]; 
			if(v>=conf.nbitmap || src->ldepth<0) 
1990/0623    
			if(v<0 || v>=conf.nbitmap || src->ldepth<0) 
1990/0613    
				error(0, Ebadbitmap); 
			miny = GLONG(p+3); 
			maxy = GLONG(p+7); 
1990/0613/sys/src/9/port/devbit.c:643,6491990/0623/sys/src/9/port/devbit.c:734,740
1990/0329    
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			dst = &bit.map[v]; 
			if(v>=conf.nbitmap || dst->ldepth<0) 
1990/0623    
			if(v<0 || v>=conf.nbitmap || dst->ldepth<0) 
1990/0329    
				error(0, Ebadbitmap); 
1990/0504    
			off = 0; 
			if(v == 0) 
1990/0613/sys/src/9/port/devbit.c:651,6571990/0623/sys/src/9/port/devbit.c:742,749
1990/0329    
			pt.x = GLONG(p+3); 
			pt.y = GLONG(p+7); 
			v = GSHORT(p+11); 
			if(v != 0)	/* BUG */ 
1990/0623    
			f = &bit.font[v]; 
			if(v<0 || v>=conf.nfont || f->bits==0 || f->bits->ldepth<0) 
1990/0329    
				error(0, Ebadblt); 
			v = GSHORT(p+13); 
			p += 15; 
1990/0613/sys/src/9/port/devbit.c:661,6671990/0623/sys/src/9/port/devbit.c:753,759
1990/0329    
				error(0, Ebadblt); 
1990/0504    
			if(off) 
				cursoroff(1); 
1990/05313    
			string(dst, pt, defont/*BUG*/, (char*)p, v); 
1990/0623    
			string(dst, pt, f, (char*)p, v); 
1990/0504    
			if(off) 
				cursoron(1); 
1990/0329    
			q++; 
1990/0613/sys/src/9/port/devbit.c:682,6881990/0623/sys/src/9/port/devbit.c:774,780
1990/0329    
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			dst = &bit.map[v]; 
			if(v>=conf.nbitmap || dst->ldepth<0) 
1990/0623    
			if(v<0 || v>=conf.nbitmap || dst->ldepth<0) 
1990/0329    
				error(0, Ebadbitmap); 
1990/0504    
			off = 0; 
			if(v == 0) 
1990/0613/sys/src/9/port/devbit.c:693,6991990/0623/sys/src/9/port/devbit.c:785,791
1990/0329    
			rect.max.y = GLONG(p+15); 
			v = GSHORT(p+19); 
			src = &bit.map[v]; 
			if(v>=conf.nbitmap || src->ldepth<0) 
1990/0623    
			if(v<0 || v>=conf.nbitmap || src->ldepth<0) 
1990/0329    
				error(0, Ebadbitmap); 
			if(src->r.min.x!=0 || src->r.min.y!=0 || src->r.max.x!=16 || src->r.max.y!=16) 
				error(0, Ebadblt); 
1990/0613/sys/src/9/port/devbit.c:727,7331990/0623/sys/src/9/port/devbit.c:819,825
1990/0329    
				error(0, Ebadblt); 
			v = GSHORT(p+1); 
			dst = &bit.map[v]; 
			if(v>=conf.nbitmap || dst->ldepth<0) 
1990/0623    
			if(v<0 || v>=conf.nbitmap || dst->ldepth<0) 
1990/0329    
				error(0, Ebadbitmap); 
1990/0504    
			off = 0; 
			if(v == 0) 


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