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

📄 textsw_field.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	Es_index		 first, last_plus_one;	char			 buf[MY_BUF_SIZE];	int			 str_length = MY_BUF_SIZE;	int			 do_search = TRUE;		/* 	 * This procedure should only be called if field flag is set to	 * TEXTSW_FIELD_FORWARD, TEXTSW_FIELD_BACKWARD, 	 * TEXTSW_DELIMITER_FORWARD, TEXTSW_DELIMITER_BACKWARD.	 */ 		if (textsw_get_selection(view, &first, &last_plus_one, NULL, 0)) {	    if ((last_plus_one-first) < MY_BUF_SIZE)               str_length =  (last_plus_one-first);                     textsw_get(VIEW_REP_TO_ABS(view), TEXTSW_CONTENTS, first, buf, str_length);                    if (str_length == MY_BUF_SIZE)                str_length--;                               buf[str_length] = NULL;                        if (field_flag == TEXTSW_NOT_A_FIELD) {	        if (str_length > ONE_FIELD_LENGTH) {	            (void) window_bell(WINDOW_FROM_VIEW(view));	            return(FALSE);			/* Not a vaild marker size */	        }	        start_marker = buf;	        do_search = FALSE;	    } else {	        do_search = check_selection(buf, str_length, &first, &last_plus_one,	                             start_marker, strlen(start_marker), field_flag);	    }	} else { 	     if (field_flag == TEXTSW_NOT_A_FIELD) {	/* Matching must have a selection */	        (void) window_bell(WINDOW_FROM_VIEW(view));		return(FALSE);	    }		    first = last_plus_one = ev_get_insert(textsw->views);	}   					return (textsw_match_field_and_normalize(	    view, &first, &last_plus_one,	    start_marker, strlen(start_marker), field_flag, do_search));	    }static voidmy_destroy_proc (frame)	Frame		frame;{	Textsw_view	view = (Textsw_view) window_get(frame, WIN_CLIENT_DATA, 0);	Textsw_folio	folio = FOLIO_FOR_VIEW(view);		window_set(frame, FRAME_NO_CONFIRM, TRUE, 0);	window_destroy(frame);		match_frame = folio->match_frame = NULL;}static voidselect_text_backward(view, panel)	Textsw_view	view;	Panel		panel;{	int		value = (int)panel_get(				   panel_items[(int)CHOICE_ITEM], PANEL_VALUE);	switch (value) {	    case 0 : 	         (void) textsw_match_selection_and_normalize(view, ")", TEXTSW_DELIMITER_BACKWARD);	        break;	    case 1 : 	        (void) textsw_match_selection_and_normalize(view, "\"", TEXTSW_DELIMITER_BACKWARD);	        break;	    	    case 2 : 	        (void) textsw_match_selection_and_normalize(view, "'", TEXTSW_DELIMITER_BACKWARD);	        break;	    case 3 : 	        (void) textsw_match_selection_and_normalize(view, "`", TEXTSW_DELIMITER_BACKWARD);	        break;	    case 4 : 	        (void) textsw_match_selection_and_normalize(view, "}", TEXTSW_DELIMITER_BACKWARD);	        break;	    case 5 : 	        (void) textsw_match_selection_and_normalize(view, "]", TEXTSW_DELIMITER_BACKWARD);	        break;	    	    case 6 : 	        (void) textsw_match_selection_and_normalize(view, "<|", TEXTSW_DELIMITER_BACKWARD);	        break;	    case 7 : 	        (void) textsw_match_selection_and_normalize(view, "*/", TEXTSW_DELIMITER_BACKWARD);	        break;	}   			   }static voidselect_enclose_text(view, panel)	Textsw_view	view;	Panel		panel;{	Textsw_folio    folio= FOLIO_FOR_VIEW(view);	int		value = (int)panel_get(				   panel_items[(int)CHOICE_ITEM], PANEL_VALUE);	int		first, last_plus_one;			first = last_plus_one = ev_get_insert(folio->views);		   	switch (value) {	    case 0 : 	                          (void) textsw_match_field_and_normalize(view, &first, &last_plus_one, ")", 1, TEXTSW_DELIMITER_ENCLOSE, FALSE);	        break;	    case 1 : 	        (void) textsw_match_field_and_normalize(view, &first, &last_plus_one, "\"", 1, TEXTSW_DELIMITER_ENCLOSE, FALSE);	        break;	    	    case 2 : 	        (void) textsw_match_field_and_normalize(view, &first, &last_plus_one, "'", 1, TEXTSW_DELIMITER_ENCLOSE, FALSE);	        break;	    case 3 : 	        (void) textsw_match_field_and_normalize(view, &first, &last_plus_one, "`", 1, TEXTSW_DELIMITER_ENCLOSE, FALSE);	        break;	    case 4 : 	        (void) textsw_match_field_and_normalize(view, &first, &last_plus_one, "}", 1, TEXTSW_DELIMITER_ENCLOSE, FALSE);	        break;	    case 5 : 	        (void) textsw_match_field_and_normalize(view, &first, &last_plus_one, "]", 1, TEXTSW_DELIMITER_ENCLOSE, FALSE);	        break;	    	    case 6 : 	        (void) textsw_match_field_and_normalize(view, &first, &last_plus_one, "<|", 2, TEXTSW_DELIMITER_ENCLOSE, FALSE);	        break;	    case 7 : 	        (void) textsw_match_field_and_normalize(view, &first, &last_plus_one, "*/", 2, TEXTSW_DELIMITER_ENCLOSE, FALSE);	        break;	}   			   }static voidselect_text_forward(view, panel)	Textsw_view	view;	Panel		panel;{	int		value = (int)panel_get(				   panel_items[(int)CHOICE_ITEM], PANEL_VALUE);	switch (value) {	    case 0 : 	         (void) textsw_match_selection_and_normalize(view, "(", TEXTSW_DELIMITER_FORWARD);	        break;	    case 1 : 	        (void) textsw_match_selection_and_normalize(view, "\"", TEXTSW_DELIMITER_FORWARD);	        break;	    	    case 2 : 	        (void) textsw_match_selection_and_normalize(view, "'", TEXTSW_DELIMITER_FORWARD);	        break;	    case 3 : 	        (void) textsw_match_selection_and_normalize(view, "`", TEXTSW_DELIMITER_FORWARD);	        break;	    case 4 : 	        (void) textsw_match_selection_and_normalize(view, "{", TEXTSW_DELIMITER_FORWARD);	        break;	    case 5 : 	        (void) textsw_match_selection_and_normalize(view, "[", TEXTSW_DELIMITER_FORWARD);	        break;	    	    case 6 : 	        (void) textsw_match_selection_and_normalize(view, "|>", TEXTSW_DELIMITER_FORWARD);	        break;	    case 7 : 	        (void) textsw_match_selection_and_normalize(view, "/*", TEXTSW_DELIMITER_FORWARD);	        break;	}   			   }	static voidcmd_proc(item, event)	Panel_item	item;    	Event		*event;{	pkg_private Textsw_view   view_from_panel_item();	Textsw_view	view = view_from_panel_item(item);	Textsw_folio 	folio = FOLIO_FOR_VIEW(view);	Panel		panel = panel_get(item, PANEL_PARENT_PANEL, 0);		if (item == panel_items[(int)BACKWARD_ITEM]) {	    select_text_backward(view, panel);	} else if (item == panel_items[(int)ENCLOSE_ITEM]) {	    select_enclose_text(view, panel);	} else if (item == panel_items[(int)FORWARD_ITEM]) {	    select_text_forward(view, panel);	} else if (item == panel_items[(int)BLINK_PARENT_ITEM]) {	    (void) blink_window(VIEW_REP_TO_ABS(view), 3);	} else if (item == panel_items[(int)DONE_ITEM]) {	    (void) my_destroy_proc(folio->match_frame);	    	} 	}static voidcreate_match_item(panel, view)   	Panel		panel;  	Textsw_view	view;{	char		*curly_bracket = " { }  ";	char		*parenthesis = 	" ( )  ";	char		*double_quote =  " \" \"  ";	char		*single_quote =  " ' '  ";	char		*back_qoute = " ` `  ";	char		*square_bracket = " [ ]  ";	char		*field_marker = " |> <|  ";	char		*comment =  " /* */  ";		char		*done = "Done";	char		*backward = "Backward";	char		*enclose =  "Expand";	char		*forward =  "Forward";	char		*blink_parent =  "Blink Owner";                panel_items[(int)BACKWARD_ITEM] = panel_create_item(panel, PANEL_BUTTON,            PANEL_LABEL_X,                 ATTR_COL(0),            PANEL_LABEL_Y,                 ATTR_ROW(0),            PANEL_LABEL_IMAGE,                        panel_button_image(panel, backward, 8, NULL),            PANEL_NOTIFY_PROC,		   cmd_proc,	    HELP_DATA,			   "textsw:fieldbackward",	    0);                     panel_items[(int)ENCLOSE_ITEM] =  panel_create_item(panel, PANEL_BUTTON,	    PANEL_LABEL_IMAGE,                        panel_button_image(panel, enclose, 8, NULL),            PANEL_NOTIFY_PROC,  	cmd_proc, 	    HELP_DATA,			   "textsw:fieldforward",            0);                     panel_items[(int)FORWARD_ITEM] =  panel_create_item(panel, PANEL_BUTTON,                        PANEL_LABEL_IMAGE,                        panel_button_image(panel, forward, 8, NULL),            PANEL_NOTIFY_PROC, 		   cmd_proc,            0);          panel_items[(int)BLINK_PARENT_ITEM] =  panel_create_item(panel,PANEL_BUTTON,            PANEL_LABEL_X,                 ATTR_COL(58),            PANEL_LABEL_Y,                 ATTR_ROW(0),            PANEL_LABEL_IMAGE,                        panel_button_image(panel, blink_parent, 0, NULL),            PANEL_NOTIFY_PROC, 		   cmd_proc, 	    HELP_DATA,			   "textsw:fieldblink",            0);                                 panel_items[(int)DONE_ITEM] =   panel_create_item(panel, PANEL_BUTTON,            PANEL_LABEL_Y,                 ATTR_ROW(0),                       PANEL_LABEL_IMAGE,                        panel_button_image(panel, done, 7, NULL),            PANEL_NOTIFY_PROC,		   cmd_proc,	    HELP_DATA,			   "textsw:fielddone",	    0);	       	panel_items[(int)CHOICE_ITEM] = panel_create_item(panel, PANEL_CHOICE,            PANEL_LABEL_X,                 ATTR_COL(0),            PANEL_LABEL_Y,                 ATTR_ROW(1),                       PANEL_CHOICE_STRINGS, 	parenthesis, double_quote,                         		single_quote, back_qoute,                         		curly_bracket, square_bracket,             			  	field_marker, comment, 0,	    HELP_DATA,			"textsw:fieldchoice",            0);	                                              }extern Paneltextsw_create_match_panel(frame, view)	Frame		frame;	Textsw_view	view;{	Panel		panel;		panel = (Panel)(LINT_CAST(window_create((Window)frame, PANEL,			  HELP_DATA,	"textsw:fieldpanel",	    		  0)));	create_match_item(panel, view);  		return(panel);  }static Notify_valuebase_frame_event_proc(base_frame, event, arg, type)    Frame base_frame;    Event *event;    Notify_arg arg;    Notify_event_type type;{    Notify_value value = notify_next_event_func(base_frame, event, arg, type);    switch (event_action(event)) {      case WIN_REPAINT:      case TXTSW_OPEN:      case MS_RIGHT:	if (window_get(base_frame, FRAME_CLOSED)) {	     if (window_get(match_frame, WIN_SHOW))	         window_set(match_frame, WIN_SHOW, FALSE, 0);	} else {	    if (!window_get(match_frame, WIN_SHOW))	         window_set(match_frame, WIN_SHOW, TRUE, 0);	}	break;    }    return value;}					extern voidtextsw_create_match_frame(view)	Textsw_view	view;{			Textsw_folio    folio= FOLIO_FOR_VIEW(view);	Frame		base_frame = (Frame) window_get(view, WIN_OWNER); 	Panel		panel;	char		*label = "Find Marked Text";	static int	already_interposed;		if (!base_frame) {	    (void)textsw_alert_for_old_interface(view);	    return;	}		if (match_frame) {	    register int	match_frame_fd = (int) window_get(match_frame, WIN_FD, 0);	    register int	root_fd;	       	     folio->match_frame = match_frame;  /* In case the popup is for a different textsw */   	     window_set(folio->match_frame, WIN_CLIENT_DATA, view, 0);   	     	    if (win_getlink(match_frame_fd, WL_COVERING) == WIN_NULLLINK) {	       (void) blink_window(folio->match_frame, 5);	    } else {	        root_fd = rootfd_for_toolfd(match_frame_fd);	        wmgr_top(match_frame_fd, root_fd);	        (void)close (root_fd);	    }	    return;	    }	    	  	match_frame = folio->match_frame = window_create(base_frame, FRAME,			FRAME_SHOW_LABEL, TRUE,			FRAME_DONE_PROC, my_destroy_proc,			0);	window_set(folio->match_frame, WIN_CLIENT_DATA, view, 0);			panel = textsw_create_match_panel(folio->match_frame, view);		if (!already_interposed)	    notify_interpose_event_func(base_frame, base_frame_event_proc, NOTIFY_SAFE);	else	    already_interposed = TRUE;	    	(void) window_fit(panel);	(void) window_fit(folio->match_frame);	textsw_set_pop_up_location (base_frame, folio->match_frame);	(void) window_set(folio->match_frame, FRAME_LABEL, label, WIN_SHOW, TRUE, 0);}/* *  If the pattern is matched, return the index where it is found, *  else return -1. */extern inttextsw_match_bytes(abstract, first, last_plus_one, start_sym, start_sym_len,                   end_sym, end_sym_len, field_flag)	Textsw		 abstract;	/* find in this textsw */	Textsw_index	*first;		/* start here, return start of 					 * found pattern here */	Textsw_index	*last_plus_one;	/* return end of found pattern */	char		*start_sym, *end_sym;		/* begin and end pattern */	int		 start_sym_len, end_sym_len;	/* patterns length */	unsigned	 field_flag;{	Textsw_folio	folio = FOLIO_FOR_VIEW(VIEW_ABS_TO_REP(abstract));	int		save_first = *first;	int		save_last_plus_one = *last_plus_one;		if ((field_flag == TEXTSW_DELIMITER_FORWARD) || 	    (field_flag == TEXTSW_FIELD_FORWARD)) {	    (void) textsw_match_field(folio, first, last_plus_one, 	                          start_sym, start_sym_len,			          end_sym,   end_sym_len, field_flag, TRUE);	} else {	    (void) textsw_match_field(folio, first, last_plus_one, 	    		          end_sym,   end_sym_len,	                          start_sym, start_sym_len, field_flag, 	                          ((field_flag == TEXTSW_DELIMITER_BACKWARD) ||	                          (field_flag == TEXTSW_FIELD_BACKWARD)));	}		          			    	if ((*first == ES_CANNOT_SET) || (*last_plus_one == ES_CANNOT_SET)) {	    *first = save_first;	    *last_plus_one = save_last_plus_one;	    return -1;	} else {	    return *first;	}}

⌨️ 快捷键说明

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