⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitmapif.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
	    char_w * nchar, char_h,	    char_w*(dx - 1) + x_ofst, char_h*(sy - 1) + y_ofst, BF_S);}/* *  clear lines *  clear_lines(sl, nl, rev) clears nl lines starting at line sl with rev *  mode. If rev = 0 then normal clear else reverse clear. */clear_lines(sl, nl, rev, fcol, bcol)	int sl, nl;	int rev;	int fcol, bcol;{	if (nl == btm_m) {		clear_rect(0, 0, scr_w, scr_h, BF_S, rev?fcol:bcol, bcol);	} else if (nl > 0) {		clear_rect(x_ofst, char_h*(sl - 1) + y_ofst,			char_w*(rit_m - LFT_M + 1), char_h*nl,			BF_S, rev?fcol:bcol, bcol);	}}/* *  Clear chars *  clear_chars(x, y, nchar, rev) clears nchar characters following the *  position (x, y) with rev mode. If rev = 0 then normal clear else  *  reverse clear. */clear_chars(x, y, nchar, rev, fcol, bcol)	int x, y;	int nchar;	int rev;	int fcol, bcol;{	if (nchar > 0) {		clear_rect(char_w*(x - 1) + x_ofst, char_h*(y - 1) + y_ofst,			char_w*nchar, char_h, BF_S, rev?fcol:bcol, bcol);	}}reverse_rec(fcol, bcol)	int fcol, bcol;{	clear_rect(0, 0, scr_w, scr_h, BF_SDX, fcol^bcol, 0);}copy_char(sp, c, kanji)	register SCREEN *sp;	register unsigned int c;	int kanji;{	register char *f_addr;	register int len;	register lRectangle *sr, *dr; 	lRectangle udr;	register char **fnt_addr;	extern struct fb_map rommap;	lock_bitmap();	if (consfb->font_h == 24)		fnt_addr = ext_fnt24_addr;	else		fnt_addr = ext_fnt_addr;	if (kanji) {		dr = &char_r2;		sr = &font_r2;		len = font_len2;	} else {		dr = &char_r1;		sr = &font_r1;		len = font_len1;	}	dr->origin = sp->s_csr.csr_p;	setropfunc(BF_S, 0, fcolor, bcolor);	fbbm_rop_cinit(consfb, consfb->planemask, 0);	fbbm_rop_clear(consfb, dr);	if (kanji) {		/*		 * KANJI code... kanji char		 */		f_addr = (char *)fbbm_Krom_addr(consfb, c, sr);#ifdef CPU_DOUBLE	} else if (fnt_addr == 0) {		/*		 * no external fonts... try to use ROM fonts		 */		len = font_len2;		f_addr = (char *)fbbm_Krom_addr(consfb, c, sr);#endif#ifdef KM_ASCII	} else if (tmode == KM_ASCII) {		/*		 * terminal mode is ASCII... ASCII (ISO) char		 */		if ((c >= 0x20) && (c <= 0x7e)) {			/*			 * ASCII char			 */			f_addr = fnt_addr[c];		} else if ((c >= 0xa0) && (c <= 0xff)) {			/*			 * ISO char			 */			f_addr = fnt_addr[c - 32];		} else {			/*			 * UNKNOWN char			 */			f_addr = (caddr_t)zero;		}#endif /* KM_ASCII */	} else {		/*		 * terminal mode is not ASCII... JIS, SJIS, EUC, ...		 */		if ((c >= 0x20) && (c <= 0x7e)) {			/*			 * ASCII char			 */			f_addr = fnt_addr[c];		} else if ((c >= 0xa1) && (c <= 0xdf)) {			/*			 * KANA char			 */			f_addr = fnt_addr[c + 32];		} else {			/*			 * UNKNOWN char			 */			f_addr = (caddr_t)zero;		}	}	dr->origin.y += ch_pos;	setropfunc(BF_S, 1, fcolor, bcolor);	if (f_addr != 0) {		fbbm_rop_winit(consfb);		rommap.fm_vaddr = f_addr;		rommap.fm_offset = 0;		fbbm_rop_write(consfb, &rommap, rommap.fm_offset, len,				sr, &dr->origin, consfb->planemask);		if (sp->s_csr.csr_attributes & BOLD) {			dr->origin.x += 1;			fbbm_rop_write(consfb, &rommap, rommap.fm_offset, len,					sr, &dr->origin, consfb->planemask);		}	} else {		fbbm_rop_init(consfb, consfb->funcvec);		fbbm_rop_copy(consfb, sr, &dr->origin, 1, consfb->planemask);		if (sp->s_csr.csr_attributes & BOLD) {			dr->origin.x += 1;			fbbm_rop_copy(consfb, sr, &dr->origin, 1, consfb->planemask);		}	}	if (sp->s_csr.csr_attributes & USCORE) {		udr.origin.x = sp->s_csr.csr_p.x;		udr.origin.y = sp->s_csr.csr_p.y + ul_pos;		udr.extent.x = char_w;		udr.extent.y = 1;		setropfunc(BF_S, 1, fcolor, bcolor);		fbbm_rop_cinit(consfb, consfb->planemask, 1);		fbbm_rop_clear(consfb, &udr);	}	unlock_bitmap();}vt_flush(spc)	struct cursor *spc;{	register char *f_addr;	register int len;	register lRectangle *sr, *dr; 	lRectangle fr, cr;	register int i;	register unsigned int c;	lRectangle udr;	register char **fnt_addr;	char *oldf_addr = (char *)-1;	extern struct fb_map rommap;	if (fp == 0)		return;	cursor_off();	lock_bitmap();	if (consfb->font_h == 24)		fnt_addr = ext_fnt24_addr;	else		fnt_addr = ext_fnt_addr;	udr.origin = fpp;	udr.extent.x = fpn * char_w;	udr.extent.y = char_h;	setropfunc(BF_S, 0, fcolor, bcolor);	fbbm_rop_cinit(consfb, consfb->planemask, 0);	fbbm_rop_clear(consfb, &udr);	if (fpa & BOLD)		setropfunc(BF_S, 1, fcolor, bcolor);	else		setropfunc(BF_S, 0, fcolor, bcolor);	fbbm_rop_winit(consfb);	sr = &fr;	dr = &cr;	sr->origin.x = 0;	sr->origin.y = 0;	sr->extent.y = font_h;	dr->origin.x = fpp.x;	dr->origin.y = fpp.y + ch_pos;	for (i = 0; i < fp; i++) {		c = fbuf[i];		sr->extent.x = font_w;		dr->extent.x = char_w;		if (c & 0xff00) {			/*			 * KANJI code... kanji char			 */			sr->extent.x = font_r2.extent.x;			dr->extent.x = char_r2.extent.x;			len = font_len2;			f_addr = (char *)fbbm_Krom_addr(consfb, c, sr);#ifdef CPU_DOUBLE		} else if (fnt_addr == 0) {			/*			 * no external fonts... try to use ROM fonts			 */			sr->extent.x = font_r1.extent.x;	/*XXX*/			dr->extent.x = char_r1.extent.x;	/*XXX*/			len = font_len2;			f_addr = (char *)fbbm_Krom_addr(consfb, c, sr);#endif#ifdef KM_ASCII		} else if (tmode == KM_ASCII) {			/*			 * terminal mode is ASCII... ASCII (ISO) char			 */			len = font_len1;			if ((c >= 0x20) && (c <= 0x7e)) {				/*				 * ASCII char				 */				f_addr = fnt_addr[c];			} else if ((c >= 0xa0) && (c <= 0xff)) {				/*				 * ISO char				 */				f_addr = fnt_addr[c - 32];			} else {				/*				 * UNKNOWN char				 */				f_addr = (caddr_t)zero;			}#endif /* KM_ASCII */		} else {			/*			 * terminal mode is not ASCII... JIS, SJIS, EUC, ...			 */			len = font_len1;			if ((c >= 0x20) && (c <= 0x7e)) {				/*				 * ASCII char				 */				f_addr = fnt_addr[c];			} else if ((c >= 0xa1) && (c <= 0xdf)) {				/*				 * KANA char				 */				f_addr = fnt_addr[c + 64];			} else {				/*				 * UNKNOWN char				 */				f_addr = (caddr_t)zero;			}		}		if (f_addr != 0) {			if (oldf_addr == 0)				fbbm_rop_winit(consfb);			rommap.fm_vaddr = f_addr;			rommap.fm_offset = 0;			fbbm_rop_write(consfb, &rommap, rommap.fm_offset, len,					sr, &dr->origin, consfb->planemask);			if (fpa & BOLD) {				/*				 * Bold char				 */				dr->origin.x += 1;				fbbm_rop_write(consfb, &rommap,						rommap.fm_offset, len,						sr, &dr->origin, consfb->planemask);				dr->origin.x -= 1;			}		} else {			if (oldf_addr != 0)				fbbm_rop_init(consfb, consfb->funcvec);				fbbm_rop_copy(consfb, sr, &dr->origin, 1, consfb->planemask);			if (fpa & BOLD) {				/*				 * Bold char				 */				dr->origin.x += 1;				fbbm_rop_copy(consfb, sr, &dr->origin,						1, consfb->planemask);				dr->origin.x -= 1;			}		}		dr->origin.x += dr->extent.x;		oldf_addr = f_addr;		/*		 * sr->origin.x and sr->origin.y were changed by		 * fbpop_Krom_addr(), fb254_Krom_addr().		 */		sr->origin.x = 0;		sr->origin.y = 0;	}	if (fpa & USCORE) {		udr.origin.y += ul_pos;		udr.extent.y = 1;		setropfunc(BF_S, 1, fcolor, bcolor);		fbbm_rop_cinit(consfb, consfb->planemask, 1);		fbbm_rop_clear(consfb, &udr);	}	fp = 0;	unlock_bitmap();	dr->origin.y -= ch_pos;	cursor_on(&(spc->csr_p));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -