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

📄 ll_init.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/*	Copyright (c) 1984 AT&T	*//*	  All Rights Reserved  	*//*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*//*	The copyright notice above does not evidence any   	*//*	actual or intended publication of such source code.	*/#ifndef lintstatic	char sccsid[] = "@(#)ll_init.c 1.1 92/07/30 SMI"; /* from S5R3 1.5.1.1 */#endif#include "curses.ext"/* * Figure out (roughly) how much each of these capabilities costs. * In the parameterized cases, we just take a typical case and * use that value.  This is done only once at startup, since it * would be too expensive for intensive use. */_init_costs(){	int c_il0, c_il100;	char *tparm();	/*	 * Insert line costs.  These are a mess, they do not take into	 * account parameterized insert line, but rather assume 1 at a time.	 * Cost is # chars to insert one line k lines from bottom of screen.	 */	if (insert_line) {#ifdef DEBUG		if(outf) fprintf(outf, "real insert line\n");#endif		c_il0 = _cost_fn(insert_line,0);		c_il100 = _cost_fn(insert_line,100);	} else if (change_scroll_region && save_cursor && restore_cursor) {#ifdef DEBUG		if(outf) fprintf(outf, "use scrolling region\n");#endif		c_il0 = 2*_cost_fn(change_scroll_region,lines-1) +			2*_cost_fn(restore_cursor,0) +			_cost_fn(save_cursor,0) + _cost_fn(scroll_reverse,0);		c_il100 = c_il0;	} else {#ifdef DEBUG		if(outf) fprintf(outf, "no insert line\n");#endif		c_il0 = c_il100 = INFINITY;	}	_cost(ilfixed) = c_il0;	_cost(ilvar) = ((long)(c_il100 - c_il0)<<5) / 100 ;#ifdef DEBUG	if(outf) fprintf(outf,"_init_costs, ilfixed %d, ilvar %d/32,\ c_il0 %d, c_il100 %d\n", _cost(ilfixed), _cost(ilvar), c_il0, c_il100);#endif	/* This is also a botch: treated as cost to insert k characters */	_cost(icfixed) = 0;	if (enter_insert_mode && exit_insert_mode)		_cost(icfixed) += _cost_fn(enter_insert_mode,0) +			       _cost_fn(exit_insert_mode,0);	if (parm_ich)		_cost(icfixed) = _cost_fn(tparm(parm_ich, 10), 10);	else if (insert_character)		_cost(icfixed) = 0;	else if (_cost(icfixed) == 0)		_cost(icfixed) = INFINITY;	_cost(icvar) = 1;	/* for the character itself */	if (!parm_ich) {		if (insert_character)			_cost(icvar) += _cost_fn(insert_character,1);		if (insert_padding)			_cost(icvar) += _cost_fn(insert_padding,1);	}	if (parm_dch) {		_cost(dcfixed) = _cost_fn(tparm(parm_dch, 10), 1);		_cost(dcvar) = 0;	} else if (delete_character) {		_cost(dcfixed) = 0;		_cost(dcvar) = _cost_fn(delete_character,0);	} else {		_cost(dcfixed) = INFINITY;		_cost(dcvar) = INFINITY;	}	if (enter_delete_mode)		_cost(dcfixed) += _cost_fn(enter_delete_mode,0);	if (exit_delete_mode)		_cost(dcfixed) += _cost_fn(exit_delete_mode,0);#ifdef DEBUG	if (outf) {		fprintf(outf, "icfixed %d=%d+%d, icvar=%d\n",			_cost(icfixed), _cost_fn(enter_insert_mode,0),			_cost_fn(exit_insert_mode,0), _cost(icvar));		fprintf(outf, "from ich1 %x '%s' %d\n",			insert_character, insert_character,			_cost_fn(insert_character,1));		fprintf(outf, "ip %x '%s' %d\n", insert_padding,			insert_padding, _cost_fn(insert_padding,1));		fprintf(outf, "dcfixed %d, dcvar %d\n", _cost(dcfixed), _cost(dcvar));	}#endif	_cost(Cursor_address)	= _cost_fn(tparm(cursor_address,8,10),1);	_cost(Cursor_home)	= _cost_fn(cursor_home,1);	_cost(Carriage_return)	= _cost_fn(carriage_return,1);	_cost(Tab)		= _cost_fn(tab,1);	_cost(Back_tab)		= _cost_fn(back_tab,1);	_cost(Cursor_left)	= _cost_fn(cursor_left,1);	_cost(Cursor_right)	= _cost_fn(cursor_right,1);	_cost(Cursor_down)	= _cost_fn(cursor_down,1);	_cost(Cursor_up)	= _cost_fn(cursor_up,1);	_cost(Clr_eol)		= _cost_fn(clr_eol,1);	_cost(Clr_bol)		= _cost_fn(clr_bol,1);	_cost(Parm_left_cursor)	= _cost_fn(tparm(parm_left_cursor, 10),1);	_cost(Parm_right_cursor)= _cost_fn(tparm(parm_right_cursor, 10),1);	_cost(Parm_up_cursor)	= _cost_fn(tparm(parm_up_cursor, 10),1);	_cost(Parm_down_cursor)	= _cost_fn(tparm(parm_down_cursor, 10),1);	_cost(Erase_chars)	= _cost_fn(tparm(erase_chars, 10),1);	_cost(Column_address)	= _cost_fn(tparm(column_address, 10),1);	_cost(Row_address)	= _cost_fn(tparm(row_address, 8),1);	_cost(Clr_eol)		= _cost_fn(tparm(clr_eol, 8),1);}static counter = 0;/* ARGSUSED */_countchar(ch)char ch;{	counter++;}/* * Figure out the _cost in characters to print this string. * Due to padding, we can't just use strlen, so instead we * feed it through tputs and trap the results. * Even if the terminal uses xon/xoff handshaking, count the * pad chars here since they estimate the real time to do the * operation, useful in calculating costs. */static_cost_fn(str, affcnt)char *str;{	int save_xflag = xon_xoff;	if (str == NULL)		return INFINITY;	counter = 0;	xon_xoff = 0;	tputs(str, affcnt, _countchar);	xon_xoff = save_xflag;	return counter;}_init_acs(){	register int i;	register chtype *nacsmap = SP->acsmap;	register char *cp;	register int to_get, must_output;	/* Default acs chars for regular ASCII terminals */	for (i=0; i<0400; i++)		nacsmap[i] = '+';	/* There are a few we'll hardwire defaults in. */#define unmap(x)	(&(x) - &acs_map[0])						    /* Dec VT100 symbols */	nacsmap[unmap(ACS_DIAMOND)] = '*';		/* ` */	nacsmap[unmap(ACS_CKBOARD)] = ':';		/* a */	nacsmap[unmap(ACS_DEGREE)] = '\'';		/* f */	nacsmap[unmap(ACS_PLMINUS)] = '#';		/* g */	/* nacsmap[unmap(ACS_LRCORNER)] = '+'; */	/* j */	/* nacsmap[unmap(ACS_URCORNER)] = '+'; */	/* k */	/* nacsmap[unmap(ACS_ULCORNER)] = '+'; */	/* l */	/* nacsmap[unmap(ACS_LLCORNER)] = '+'; */	/* m */	/* nacsmap[unmap(ACS_PLUS)] = '+'; */	/* n */	nacsmap[unmap(ACS_S1)] = '-';		/* o */	nacsmap[unmap(ACS_HLINE)] = '-';		/* q */	nacsmap[unmap(ACS_S9)] = '_';		/* s */	/* nacsmap[unmap(ACS_LTEE)] = '+'; */	/* t */	/* nacsmap[unmap(ACS_RTEE)] = '+'; */	/* u */	/* nacsmap[unmap(ACS_BTEE)] = '+'; */	/* v */	/* nacsmap[unmap(ACS_TTEE)] = '+'; */	/* w */	nacsmap[unmap(ACS_VLINE)] = '|';		/* x */	nacsmap[unmap(ACS_BULLET)] = 'o';		/* ~ */							/* Teletype 5420 symbols */	nacsmap[unmap(ACS_LARROW)] = '<';		/* , */	nacsmap[unmap(ACS_RARROW)] = '>';		/* + */	nacsmap[unmap(ACS_DARROW)] = 'v';		/* . */	nacsmap[unmap(ACS_UARROW)] = '^';		/* - */	nacsmap[unmap(ACS_BOARD)] = '#';		/* h */	nacsmap[unmap(ACS_BLOCK)] = '#';		/* 0 */	nacsmap[unmap(ACS_LANTERN)] = '#';		/* i */	/* Now do mapping for terminals own ACS, if any */	if (acs_chars)		for (cp=acs_chars; *cp; ) {			to_get = *cp++;		/* to get this ... */			must_output = *cp++;	/* must output this ... */#ifdef DEBUG			if (outf) fprintf(outf, "acs %d, was %d, now %d\n",						to_get, nacsmap[to_get], must_output);#endif			nacsmap[to_get] = must_output | A_ALTCHARSET;		}	acs_map = nacsmap;}

⌨️ 快捷键说明

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