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

📄 chared.c

📁 asterisk 是一个很有知名度开源软件
💻 C
📖 第 1 页 / 共 2 页
字号:
	el->el_chared.c_undo.ptr = el->el_line.cursor;	el->el_chared.c_undo.dsize = size;}#ifdef notdef/* ce__endword(): *	Go to the end of this word according to emacs */protected char *ce__endword(char *p, char *high, int n){	p++;	while (n--) {		while ((p < high) && isspace((unsigned char) *p))			p++;		while ((p < high) && !isspace((unsigned char) *p))			p++;	}	p--;	return (p);}#endif/* cv__endword(): *	Go to the end of this word according to vi */protected char *cv__endword(char *p, char *high, int n){	p++;	while (n--) {		while ((p < high) && isspace((unsigned char) *p))			p++;		if (isalnum((unsigned char) *p))			while ((p < high) && isalnum((unsigned char) *p))				p++;		else			while ((p < high) && !(isspace((unsigned char) *p) ||			    isalnum((unsigned char) *p)))				p++;	}	p--;	return (p);}/* ch_init(): *	Initialize the character editor */protected intch_init(EditLine *el){	el->el_line.buffer		= (char *) el_malloc(EL_BUFSIZ);	if (el->el_line.buffer == NULL)		return (-1);	(void) memset(el->el_line.buffer, 0, EL_BUFSIZ);	el->el_line.cursor		= el->el_line.buffer;	el->el_line.lastchar		= el->el_line.buffer;	el->el_line.limit		= &el->el_line.buffer[EL_BUFSIZ - 2];	el->el_chared.c_undo.buf	= (char *) el_malloc(EL_BUFSIZ);	if (el->el_chared.c_undo.buf == NULL)		return (-1);	(void) memset(el->el_chared.c_undo.buf, 0, EL_BUFSIZ);	el->el_chared.c_undo.action	= NOP;	el->el_chared.c_undo.isize	= 0;	el->el_chared.c_undo.dsize	= 0;	el->el_chared.c_undo.ptr	= el->el_line.buffer;	el->el_chared.c_vcmd.action	= NOP;	el->el_chared.c_vcmd.pos	= el->el_line.buffer;	el->el_chared.c_vcmd.ins	= el->el_line.buffer;	el->el_chared.c_kill.buf	= (char *) el_malloc(EL_BUFSIZ);	if (el->el_chared.c_kill.buf == NULL)		return (-1);	(void) memset(el->el_chared.c_kill.buf, 0, EL_BUFSIZ);	el->el_chared.c_kill.mark	= el->el_line.buffer;	el->el_chared.c_kill.last	= el->el_chared.c_kill.buf;	el->el_map.current		= el->el_map.key;	el->el_state.inputmode		= MODE_INSERT; /* XXX: save a default */	el->el_state.doingarg		= 0;	el->el_state.metanext		= 0;	el->el_state.argument		= 1;	el->el_state.lastcmd		= ED_UNASSIGNED;	el->el_chared.c_macro.nline	= NULL;	el->el_chared.c_macro.level	= -1;	el->el_chared.c_macro.macro	= (char **) el_malloc(EL_MAXMACRO *	    sizeof(char *));	if (el->el_chared.c_macro.macro == NULL)		return (-1);	return (0);}/* ch_reset(): *	Reset the character editor */protected voidch_reset(EditLine *el){	el->el_line.cursor		= el->el_line.buffer;	el->el_line.lastchar		= el->el_line.buffer;	el->el_chared.c_undo.action	= NOP;	el->el_chared.c_undo.isize	= 0;	el->el_chared.c_undo.dsize	= 0;	el->el_chared.c_undo.ptr	= el->el_line.buffer;	el->el_chared.c_vcmd.action	= NOP;	el->el_chared.c_vcmd.pos	= el->el_line.buffer;	el->el_chared.c_vcmd.ins	= el->el_line.buffer;	el->el_chared.c_kill.mark	= el->el_line.buffer;	el->el_map.current		= el->el_map.key;	el->el_state.inputmode		= MODE_INSERT; /* XXX: save a default */	el->el_state.doingarg		= 0;	el->el_state.metanext		= 0;	el->el_state.argument		= 1;	el->el_state.lastcmd		= ED_UNASSIGNED;	el->el_chared.c_macro.level	= -1;	el->el_history.eventno		= 0;}/* ch_enlargebufs(): *	Enlarge line buffer to be able to hold twice as much characters. *	Returns 1 if successful, 0 if not. */protected intch_enlargebufs(el, addlen)	EditLine *el;	size_t addlen;{	size_t sz, newsz;	char *newbuffer, *oldbuf, *oldkbuf;	sz = el->el_line.limit - el->el_line.buffer + EL_LEAVE;	newsz = sz * 2;	/*	 * If newly required length is longer than current buffer, we need	 * to make the buffer big enough to hold both old and new stuff.	 */	if (addlen > sz) {		while(newsz - sz < addlen)			newsz *= 2;	}	/*	 * Reallocate line buffer.	 */	newbuffer = el_realloc(el->el_line.buffer, newsz);	if (!newbuffer)		return 0;	/* zero the newly added memory, leave old data in */	(void) memset(&newbuffer[sz], 0, newsz - sz);	    	oldbuf = el->el_line.buffer;	el->el_line.buffer = newbuffer;	el->el_line.cursor = newbuffer + (el->el_line.cursor - oldbuf);	el->el_line.lastchar = newbuffer + (el->el_line.lastchar - oldbuf);	el->el_line.limit  = &newbuffer[newsz - EL_LEAVE];	/*	 * Reallocate kill buffer.	 */	newbuffer = el_realloc(el->el_chared.c_kill.buf, newsz);	if (!newbuffer)		return 0;	/* zero the newly added memory, leave old data in */	(void) memset(&newbuffer[sz], 0, newsz - sz);	oldkbuf = el->el_chared.c_kill.buf;	el->el_chared.c_kill.buf = newbuffer;	el->el_chared.c_kill.last = newbuffer +					(el->el_chared.c_kill.last - oldkbuf);	el->el_chared.c_kill.mark = el->el_line.buffer +					(el->el_chared.c_kill.mark - oldbuf);	/*	 * Reallocate undo buffer.	 */	newbuffer = el_realloc(el->el_chared.c_undo.buf, newsz);	if (!newbuffer)		return 0;	/* zero the newly added memory, leave old data in */	(void) memset(&newbuffer[sz], 0, newsz - sz);	el->el_chared.c_undo.ptr = el->el_line.buffer +				    (el->el_chared.c_undo.ptr - oldbuf);	el->el_chared.c_undo.buf = newbuffer;		if (!hist_enlargebuf(el, sz, newsz))		return 0;	return 1;}/* ch_end(): *	Free the data structures used by the editor */protected voidch_end(EditLine *el){	el_free((ptr_t) el->el_line.buffer);	el->el_line.buffer = NULL;	el->el_line.limit = NULL;	el_free((ptr_t) el->el_chared.c_undo.buf);	el->el_chared.c_undo.buf = NULL;	el_free((ptr_t) el->el_chared.c_kill.buf);	el->el_chared.c_kill.buf = NULL;	el_free((ptr_t) el->el_chared.c_macro.macro);	el->el_chared.c_macro.macro = NULL;	ch_reset(el);}/* el_insertstr(): *	Insert string at cursorI */public intel_insertstr(EditLine *el, const char *s){	size_t len;	if ((len = strlen(s)) == 0)		return (-1);	if (el->el_line.lastchar + len >= el->el_line.limit) {		if (!ch_enlargebufs(el, len))			return (-1);	}	c_insert(el, (int)len);	while (*s)		*el->el_line.cursor++ = *s++;	return (0);}/* el_deletestr(): *	Delete num characters before the cursor */public voidel_deletestr(EditLine *el, int n){	if (n <= 0)		return;	if (el->el_line.cursor < &el->el_line.buffer[n])		return;	c_delbefore(el, n);		/* delete before dot */	el->el_line.cursor -= n;	if (el->el_line.cursor < el->el_line.buffer)		el->el_line.cursor = el->el_line.buffer;}/* c_gets(): *	Get a string */protected intc_gets(EditLine *el, char *buf){	char ch;	int len = 0;	for (ch = 0; ch == 0;) {		if (el_getc(el, &ch) != 1)			return (ed_end_of_file(el, 0));		switch (ch) {		case 0010:	/* Delete and backspace */		case 0177:			if (len > 1) {				*el->el_line.cursor-- = '\0';				el->el_line.lastchar = el->el_line.cursor;				buf[len--] = '\0';			} else {				el->el_line.buffer[0] = '\0';				el->el_line.lastchar = el->el_line.buffer;				el->el_line.cursor = el->el_line.buffer;				return (CC_REFRESH);			}			re_refresh(el);			ch = 0;			break;		case 0033:	/* ESC */		case '\r':	/* Newline */		case '\n':			break;		default:			if (len >= EL_BUFSIZ)				term_beep(el);			else {				buf[len++] = ch;				*el->el_line.cursor++ = ch;				el->el_line.lastchar = el->el_line.cursor;			}			re_refresh(el);			ch = 0;			break;		}	}	buf[len] = ch;	return (len);}/* c_hpos(): *	Return the current horizontal position of the cursor */protected intc_hpos(EditLine *el){	char *ptr;	/*	 * Find how many characters till the beginning of this line.	 */	if (el->el_line.cursor == el->el_line.buffer)		return (0);	else {		for (ptr = el->el_line.cursor - 1;		     ptr >= el->el_line.buffer && *ptr != '\n';		     ptr--)			continue;		return (el->el_line.cursor - ptr - 1);	}}

⌨️ 快捷键说明

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