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

📄 textsw_edit.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
extern voidtextsw_insert_makes_visible(textsw)	Textsw		textsw;{	Textsw_view	        view = VIEW_ABS_TO_REP(textsw);	register Textsw_folio   folio = FOLIO_FOR_VIEW(view);	int			old_insert_makes_visible = folio->insert_makes_visible;	int			old_state = folio->state;	folio->insert_makes_visible = TEXTSW_ALWAYS;	folio->state |= TXTSW_DOING_EVENT;		textsw_do_insert_makes_visible(view);		folio->insert_makes_visible = old_insert_makes_visible;	folio->state = old_state;}pkg_private inttextsw_do_edit(view, unit, direction)	register Textsw_view	view;	unsigned		unit, direction;{	extern struct ei_span_result				ev_span_for_edit();	register Textsw_folio	folio = FOLIO_FOR_VIEW(view);	struct ei_span_result	span;	int			delta;	span = ev_span_for_edit(folio->views, (int)(unit|direction));			 	if ((span.flags>>16) == 0) {		    /* Don't join with next line for ERASE_LINE_END */		    if ((unit == EV_EDIT_LINE) && (direction == 0)) {	        Es_index	file_length = es_get_length(folio->views->esh);	        		if (span.last_plus_one < file_length)	            span.last_plus_one--;	    }	    	    delta = textsw_delete_span(view, span.first, span.last_plus_one,				       TXTSW_DS_ADJUST);	    if (delta == ES_CANNOT_SET) {		delta = 0;	    } else {		textsw_do_insert_makes_visible(view);		textsw_record_edit(folio, unit, direction);		delta = -delta;	    }	} else	    delta = 0;	return(delta);}extern Textsw_indextextsw_edit(abstract, unit, count, direction)	Textsw			abstract;	register unsigned	unit, count;	unsigned		direction;{	Textsw_view		view = VIEW_ABS_TO_REP(abstract);	Textsw_folio		folio = FOLIO_FOR_VIEW(view);	int			result = 0;	if (direction) direction = EV_EDIT_BACK;	switch (unit) {	  case TEXTSW_UNIT_IS_CHAR:	    unit = EV_EDIT_CHAR;	    break;	  case TEXTSW_UNIT_IS_WORD:	    unit = EV_EDIT_WORD;	    break;	  case TEXTSW_UNIT_IS_LINE:	    unit = EV_EDIT_LINE;	    break;	  default:	    return 0;	}	textsw_take_down_caret(folio);	for (; count; count--) {	    result += textsw_do_edit(view, unit, direction);	}	return(result);}pkg_private voidtextsw_input_before(view, old_insert_pos, old_length)	Textsw_view	 view;	Es_index	*old_insert_pos, *old_length;{	Textsw_folio	 	folio = FOLIO_FOR_VIEW(view);	register Ev_chain	chain = folio->views;	*old_length = es_get_length(chain->esh);	*old_insert_pos = ev_get_insert(chain);	ev_input_before(chain);}pkg_private inttextsw_input_partial(view, buf, buf_len)	Textsw_view		 view;	char			*buf;	long int		 buf_len;{	int			 status;	status = ev_input_partial(FOLIO_FOR_VIEW(view)->views, buf, buf_len);	if (status) {	    textsw_esh_failed_msg(view, "Insertion failed - ");	}        return(status);}pkg_private Es_indextextsw_input_after(view, old_insert_pos, old_length, record)	Textsw_view		view;	Es_index		old_insert_pos, old_length;	int			record;{	register Textsw_folio	folio = FOLIO_FOR_VIEW(view);	Es_index		delta;	delta = ev_input_after(folio->views, old_insert_pos, old_length);	if (delta != ES_CANNOT_SET) {	    textsw_do_insert_makes_visible(view);	    if (record) {		Es_handle	pieces;		pieces = textsw_esh_for_span(folio->first_view,				old_insert_pos, old_insert_pos+delta, ES_NULL);		textsw_record_piece_insert(folio, pieces);	    }	    if ((folio->state & TXTSW_EDITED) == 0)		textsw_possibly_edited_now_notify(folio);	    if (folio->notify_level & TEXTSW_NOTIFY_EDIT) {		textsw_notify_replaced((Textsw_opaque)folio->first_view, 			      old_insert_pos, old_length, old_insert_pos,			      old_insert_pos, delta);	    }	    (void) textsw_checkpoint(folio);	}	return(delta);}pkg_private Es_indextextsw_do_input(view, buf, buf_len, flag)	Textsw_view		 view;	char			*buf;	long int		 buf_len;	unsigned		 flag;{	register Textsw_folio	folio = FOLIO_FOR_VIEW(view);	register Ev_chain	chain = folio->views;	int			record;	Es_index		delta, old_insert_pos, old_length;	textsw_input_before(view, &old_insert_pos, &old_length);	delta = textsw_input_partial(view, buf, buf_len);	if (delta == ES_CANNOT_SET)	    return(0);	record = (TXTSW_DO_AGAIN(folio) &&		  ((folio->func_state & TXTSW_FUNC_AGAIN) == 0) );	delta = textsw_input_after(view, old_insert_pos, old_length,				   record && (buf_len > 100));	if (delta == ES_CANNOT_SET)	    return(0);	    	if ((int)ev_get(chain, EV_CHAIN_DELAY_UPDATE) == 0) { 	    ev_update_chain_display(chain);	       	    if (flag & TXTSW_UPDATE_SCROLLBAR) 	        textsw_update_scrollbars(folio, TEXTSW_VIEW_NULL);	    else if ((flag & TXTSW_UPDATE_SCROLLBAR_IF_NEEDED) &&  	              update_scrollbar(delta, old_length, buf, buf_len)) 	               textsw_update_scrollbars(folio, TEXTSW_VIEW_NULL);	}	    	    	if (record && (buf_len <= 100))	    textsw_record_input(folio, buf, buf_len);	return(delta);}extern Textsw_indextextsw_insert(abstract, buf, buf_len)	Textsw			abstract;	char			*buf;	long int		 buf_len;{	Textsw_view		 view = VIEW_ABS_TO_REP(abstract);	register Textsw_folio	 folio = FOLIO_FOR_VIEW(view);	Es_index		 result;	textsw_take_down_caret(folio);	result = textsw_do_input(view, buf, buf_len, 	         TXTSW_UPDATE_SCROLLBAR_IF_NEEDED);	return(result);}extern Textsw_indextextsw_replace_bytes(abstract, first, last_plus_one, buf, buf_len)	Textsw			 abstract;	Es_index		 first, last_plus_one;	char			*buf;	long int		 buf_len;/* This routine is a placeholder that can be documented without casting the * calling sequence to textsw_replace (the preferred name) in concrete. */{	return(textsw_replace(abstract, first, last_plus_one, buf, buf_len));}extern Textsw_indextextsw_replace(abstract, first, last_plus_one, buf, buf_len)	Textsw			 abstract;	Es_index		 first, last_plus_one;	char			*buf;	long int		 buf_len;{	extern void		textsw_remove_mark_internal();	pkg_private Ev_mark_object				 textsw_add_mark_internal();	Ev_mark_object		 saved_insert_mark;	Es_index		 saved_insert;	Textsw_view		 view = VIEW_ABS_TO_REP(abstract);	register Textsw_folio	 folio = FOLIO_FOR_VIEW(view);	register Ev_chain	 chain = folio->views;	Es_index		 result, insert_result;	int			 lower_context;	insert_result = 0;	textsw_take_down_caret(folio);	/* BUG ALERT: change this to avoid the double paint. */	if (first < last_plus_one) {	    ev_set(0, chain, EV_CHAIN_DELAY_UPDATE, TRUE, 0);	    result = textsw_delete_span(view, first, last_plus_one,					TXTSW_DS_ADJUST);	    ev_set(0, chain, EV_CHAIN_DELAY_UPDATE, FALSE, 0);	    if (result == ES_CANNOT_SET) {		if (ES_REPLACE_DIVERTED == (Es_status)LINT_CAST(			es_get(chain->esh, ES_STATUS) )) {		    result = 0;		}	    }	} else {	    result = 0;	}	if (result == ES_CANNOT_SET) {	    result = 0;	} else {	    ev_check_insert_visibility(chain);	    lower_context =	        (int) ev_get(chain, EV_CHAIN_LOWER_CONTEXT);	    ev_set(0, chain,	        EV_CHAIN_LOWER_CONTEXT, EV_NO_CONTEXT, 0);	    saved_insert = ev_get_insert(chain);	    saved_insert_mark =		textsw_add_mark_internal(folio, saved_insert,					 TEXTSW_MARK_MOVE_AT_INSERT);	    (void) ev_set_insert(chain, first);	    insert_result += textsw_do_input(view, buf, buf_len, 	                     TXTSW_DONT_UPDATE_SCROLLBAR);	    result += insert_result;	    saved_insert = textsw_find_mark_internal(folio, saved_insert_mark);	    if AN_ERROR(saved_insert == ES_INFINITY) {	    } else		(void) ev_set_insert(chain, saved_insert);	    textsw_remove_mark_internal(folio, saved_insert_mark);	    ev_set(0, chain,	        EV_CHAIN_LOWER_CONTEXT, lower_context, 0);	    ev_scroll_if_old_insert_visible(chain,	        saved_insert, insert_result);	    textsw_update_scrollbars(folio, TEXTSW_VIEW_NULL);    	}	return(result);}static intupdate_scrollbar(delta, old_length)	long int	delta, old_length;	{	long int	THRESHOLD = 20;		return ((THRESHOLD * delta) >= old_length);		}

⌨️ 快捷键说明

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