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

📄 pcvt_vtf.c

📁 freebsd v4.4内核源码
💻 C
📖 第 1 页 / 共 4 页
字号:
				ctp = csd_alternaterom1;#endif				break;			case '2': /* alt ROM, spec graphics */#ifdef HAVECSD_ALTERNATEROM2				ctp = csd_alternaterom2;#endif				break;			case '3': /* HP Roman 8, upper 128 chars*/#ifdef HAVECSD_ROMAN8				ctp = csd_roman8;#endif				break;			case '4': /* Dutch */#ifdef HAVECSD_DUTCH				ctp = csd_dutch;#endif				break;			case '<': /* DEC Supplemental */#ifdef HAVECSD_SUPPLEMENTAL				ctp = csd_supplemental;#endif				break;			case '=': /* Swiss */#ifdef HAVECSD_SWISS				ctp = csd_swiss;#endif				break;			case '>': /* DEC Technical */#ifdef HAVECSD_TECHNICAL				ctp = csd_technical;#endif				break;			default:				break;		}	}	swcsp(svsp, ctp);}/*---------------------------------------------------------------------------* *	device attributes *---------------------------------------------------------------------------*/voidvt_da(struct video_state *svsp){	static u_char *response = (u_char *)DA_VT220;	svsp->report_chars = response;	svsp->report_count = 18;	respond(svsp);}/*---------------------------------------------------------------------------* *	screen alignment display *---------------------------------------------------------------------------*/voidvt_aln(struct video_state *svsp){	register int i;	svsp->cur_offset = 0;	svsp->col = 0;	for(i=0; i < (svsp->screen_rows*svsp->maxcol); i++)	{		*(svsp->Crtat + svsp->cur_offset) = user_attr | 'E';		vt_selattr(svsp);		svsp->cur_offset++;		svsp->col++;	}	svsp->cur_offset = 0;	/* reset everything ! */	svsp->col = 0;	svsp->row = 0;}/*---------------------------------------------------------------------------* *	request terminal parameters *---------------------------------------------------------------------------*/voidvt_reqtparm(struct video_state *svsp){	static u_char *answr = (u_char *)"\033[3;1;1;120;120;1;0x";	svsp->report_chars = answr;	svsp->report_count = 20;	respond(svsp);}/*---------------------------------------------------------------------------* *	invoke selftest *---------------------------------------------------------------------------*/voidvt_tst(struct video_state *svsp){	clear_dld(svsp);}/*---------------------------------------------------------------------------* *	device status reports *---------------------------------------------------------------------------*/voidvt_dsr(struct video_state *svsp){	static u_char *answr = (u_char *)"\033[0n";	static u_char *panswr = (u_char *)"\033[?13n"; /* Printer Unattached */	static u_char *udkanswr = (u_char *)"\033[?21n"; /* UDK Locked */	static u_char *langanswr = (u_char *)"\033[?27;1n"; /* North American*/	static u_char buffer[16];	int i = 0;	switch(svsp->parms[0])	{		case 5:		/* return status */			svsp->report_chars = answr;			svsp->report_count = 4;			respond(svsp);			break;		case 6:		/* return cursor position */			buffer[i++] = 0x1b;			buffer[i++] = '[';			if((svsp->row+1) > 10)				buffer[i++] = ((svsp->row+1) / 10) + '0';			buffer[i++] = ((svsp->row+1) % 10) + '0';			buffer[i++] = ';';			if((svsp->col+1) > 10)				buffer[i++] = ((svsp->col+1) / 10) + '0';			buffer[i++] = ((svsp->col+1) % 10) + '0';			buffer[i++] = 'R';			buffer[i++] = '\0';			svsp->report_chars = buffer;			svsp->report_count = i;			respond(svsp);			break;		case 15:	/* return printer status */			svsp->report_chars = panswr;			svsp->report_count = 6;			respond(svsp);			break;		case 25:	/* return udk status */			svsp->report_chars = udkanswr;			svsp->report_count = 6;			respond(svsp);			break;		case 26:	/* return language status */			svsp->report_chars = langanswr;			svsp->report_count = 8;			respond(svsp);			break;		default:	/* nothing else valid */			break;	}}/*---------------------------------------------------------------------------* *	IL - insert line *---------------------------------------------------------------------------*/voidvt_il(struct video_state *svsp){	register int p = svsp->parms[0];	if((svsp->row >= svsp->scrr_beg) && (svsp->row <= svsp->scrr_end))	{		if(p <= 0)			p = 1;		else if(p > svsp->scrr_end - svsp->row)			p = svsp->scrr_end - svsp->row;		svsp->cur_offset -= svsp->col;		svsp->col = 0;		if(svsp->row == svsp->scrr_beg)			roll_down(svsp, p);		else		{		    bcopy(svsp->Crtat + svsp->cur_offset,		          svsp->Crtat + svsp->cur_offset + (p * svsp->maxcol),		          svsp->maxcol * (svsp->scrr_end-svsp->row+1-p) * CHR );		    fillw(user_attr | ' ',			  svsp->Crtat + svsp->cur_offset,			  p * svsp->maxcol);		}	}}/*---------------------------------------------------------------------------* *	ICH - insert character *---------------------------------------------------------------------------*/voidvt_ic(struct video_state *svsp){	register int p = svsp->parms[0];	if(p <= 0)		p = 1;	else if(p > svsp->maxcol-svsp->col)		p = svsp->maxcol-svsp->col;	while(p--)	{		bcopy((svsp->Crtat + svsp->cur_offset),		      (svsp->Crtat + svsp->cur_offset) + 1,		      (((svsp->maxcol)-1)-svsp->col) * CHR);		*(svsp->Crtat + svsp->cur_offset) = user_attr | ' ';		vt_selattr(svsp);	}}/*---------------------------------------------------------------------------* *	DL - delete line *---------------------------------------------------------------------------*/voidvt_dl(struct video_state *svsp){	register int p = svsp->parms[0];	if((svsp->row >= svsp->scrr_beg) && (svsp->row <= svsp->scrr_end))	{		if(p <= 0)			p = 1;		else if(p > svsp->scrr_end - svsp->row)			p = svsp->scrr_end - svsp->row;		svsp->cur_offset -= svsp->col;		svsp->col = 0;		if(svsp->row == svsp->scrr_beg)			roll_up(svsp, p);		else		{		    bcopy(svsp->Crtat + svsp->cur_offset + (p * svsp->maxcol),			  svsp->Crtat + svsp->cur_offset,			  svsp->maxcol * (svsp->scrr_end-svsp->row+1-p) * CHR );		    fillw(user_attr | ' ',			  svsp->Crtat + ((svsp->scrr_end-p+1) * svsp->maxcol),			  p * svsp->maxcol);		}	}}/*---------------------------------------------------------------------------* *	DCH - delete character *---------------------------------------------------------------------------*/voidvt_dch(struct video_state *svsp){	register int p = svsp->parms[0];	if(p <= 0)		p = 1;	else if(p > svsp->maxcol-svsp->col)		p = svsp->maxcol-svsp->col;	while(p--)	{		bcopy((svsp->Crtat + svsp->cur_offset)+1,		      (svsp->Crtat + svsp->cur_offset),		      (((svsp->maxcol)-1) - svsp->col)* CHR );		*((svsp->Crtat + svsp->cur_offset) +			((svsp->maxcol)-1)-svsp->col) = user_attr | ' ';	}}/*---------------------------------------------------------------------------* *	scroll up *---------------------------------------------------------------------------*/voidvt_su(struct video_state *svsp){	register int p = svsp->parms[0];	if(p <= 0)		p = 1;	else if(p > svsp->screen_rows-1)		p = svsp->screen_rows-1;	roll_up(svsp, p);}/*---------------------------------------------------------------------------* *	scroll down *---------------------------------------------------------------------------*/voidvt_sd(struct video_state *svsp){	register int p = svsp->parms[0];	if(p <= 0)		p = 1;	else if(p > svsp->screen_rows-1)		p = svsp->screen_rows-1;	roll_down(svsp, p);}/*---------------------------------------------------------------------------* *	ECH - erase character *---------------------------------------------------------------------------*/voidvt_ech(struct video_state *svsp){	register int p = svsp->parms[0];	if(p <= 0)		p = 1;	else if(p > svsp->maxcol-svsp->col)		p = svsp->maxcol-svsp->col;	fillw(user_attr | ' ', (svsp->Crtat + svsp->cur_offset), p);}/*---------------------------------------------------------------------------* *	media copy	(NO PRINTER AVAILABLE IN KERNEL ...) *---------------------------------------------------------------------------*/voidvt_mc(struct video_state *svsp){}/*---------------------------------------------------------------------------* *	Device Control String State Machine Entry for: * *	DECUDK - user-defined keys	and *	DECDLD - downloadable charset * *---------------------------------------------------------------------------*/voidvt_dcsentry(U_char ch, struct video_state *svsp){	switch(svsp->dcs_state)	{		case DCS_INIT:			switch(ch)			{				case '0':				case '1':				case '2':				case '3':				case '4':				case '5':				case '6':				case '7':				case '8':				case '9':	/* parameters */					svsp->parms[svsp->parmi] *= 10;					svsp->parms[svsp->parmi] += (ch -'0');					break;				case ';':	/* next parameter */					svsp->parmi =						(svsp->parmi+1 < MAXPARMS) ?						svsp->parmi+1 : svsp->parmi;					break;				case '|':	/* DECUDK */					svsp->transparent = 1;					init_udk(svsp);					svsp->dcs_state = DCS_AND_UDK;					break;				case '{':	/* DECDLD */					svsp->transparent = 1;					init_dld(svsp);					svsp->dcs_state = DCS_DLD_DSCS;					break;				default:	 /* failsafe */					svsp->transparent = 0;					svsp->state = STATE_INIT;					svsp->dcs_state = DCS_INIT;					break;			}			break;		case DCS_AND_UDK:	 /* DCS ... | */			switch(ch)			{				case '0':				case '1':				case '2':				case '3':				case '4':				case '5':				case '6':				case '7':				case '8':				case '9':	/* fkey number */					svsp->udk_fnckey *= 10;					svsp->udk_fnckey += (ch -'0');					break;				case '/':	/* Key */					svsp->dcs_state = DCS_UDK_DEF;					break;				case 0x1b:	 /* ESC */					svsp->dcs_state = DCS_UDK_ESC;					break;				default:					svsp->transparent = 0;					svsp->state = STATE_INIT;					svsp->dcs_state = DCS_INIT;					break;			}			break;		case DCS_UDK_DEF:	 /* DCS ... | fnckey / */			switch(ch)			{				case '0':				case '1':				case '2':				case '3':				case '4':				case '5':				case '6':				case '7':				case '8':				case '9':					if(svsp->udk_deflow)	/* low nibble */					{						svsp->udk_def[svsp->udk_defi] |= (ch -'0');						svsp->udk_deflow = 0;						svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ?						svsp->udk_defi : svsp->udk_defi+1;					}					else			/* high nibble */					{						svsp->udk_def[svsp->udk_defi] = ((ch -'0') << 4);						svsp->udk_deflow = 1;					}					break;				case 'a':				case 'b':				case 'c':				case 'd':				case 'e':				case 'f':					if(svsp->udk_deflow) 	/* low nibble */					{						svsp->udk_def[svsp->udk_defi] |= (ch - 'a' + 10);						svsp->udk_deflow = 0;						svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ?						svsp->udk_defi : svsp->udk_defi+1;					}					else			/* high nibble */					{						svsp->udk_def[svsp->udk_defi] = ((ch - 'a' + 10) << 4);						svsp->udk_deflow = 1;					}					break;				case 'A':				case 'B':				case 'C':				case 'D':				case 'E':				case 'F':					if(svsp->udk_deflow) 	/* low nibble */					{						svsp->udk_def[svsp->udk_defi] |= (ch - 'A' + 10);						svsp->udk_deflow = 0;						svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ?						svsp->udk_defi : svsp->udk_defi+1;					}					else			/* high nibble */					{						svsp->udk_def[svsp->udk_defi] = ((ch - 'A' + 10) << 4);						svsp->udk_deflow = 1;					}					break;				case ';':	/* next function key */					vt_udk(svsp);					svsp->dcs_state = DCS_AND_UDK;					break;				case 0x1b:	 /* ESC */					svsp->dcs_state = DCS_UDK_ESC;					break;				default:					svsp->transparent = 0;					svsp->state = STATE_INIT;					svsp->dcs_state = DCS_INIT;					break;			}			break;		case DCS_UDK_ESC:	 /* DCS ... | fkey/def ... ESC */			switch(ch)			{				case '\\':	/* ST */					vt_udk(svsp);					svsp->transparent = 0;					svsp->state = STATE_INIT;					svsp->dcs_state = DCS_INIT;					break;				default:					svsp->transparent = 0;					svsp->state = STATE_INIT;					svsp->dcs_state = DCS_INIT;					break;			}			break;		case DCS_DLD_DSCS:	 /* got DCS ... { */			if(ch >= ' ' && ch <= '/')	/* intermediates ... */			{				svsp->dld_dscs[svsp->dld_dscsi] = ch;				svsp->dld_id[svsp->dld_dscsi] = ch;				if(svsp->dld_dscsi >= DSCS_LENGTH)				{					svsp->transparent = 0;					svsp->state = STATE_INIT;					svsp->dcs_state = DCS_INIT;					svsp->dld_id[0] = '\0';				}				else				{					svsp->dld_dscsi++;				}			}

⌨️ 快捷键说明

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