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

📄 common.c

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 C
📖 第 1 页 / 共 2 页
字号:
/*	$NetBSD: common.c,v 1.16 2003/08/07 16:44:30 agc Exp $	*//*- * Copyright (c) 1992, 1993 *	The Regents of the University of California.  All rights reserved. * * This code is derived from software contributed to Berkeley by * Christos Zoulas of Cornell University. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#include <config.h>/* * common.c: Common Editor functions */#include "el.h"/* ed_end_of_file(): *	Indicate end of file *	[^D] */protected el_action_t/*ARGSUSED*/ed_end_of_file(EditLine *el, int c __attribute__((__unused__))){	re_goto_bottom(el);	*el->el_line.lastchar = '\0';	return (CC_EOF);}/* ed_insert(): *	Add character to the line *	Insert a character [bound to all insert keys] */protected el_action_ted_insert(EditLine *el, int c){	int count = el->el_state.argument;	if (c == '\0')		return (CC_ERROR);	if (el->el_line.lastchar + el->el_state.argument >=	    el->el_line.limit) {		/* end of buffer space, try to allocate more */		if (!ch_enlargebufs(el, (size_t) count))			return CC_ERROR;	/* error allocating more */	}	if (count == 1) {		if (el->el_state.inputmode == MODE_INSERT		    || el->el_line.cursor >= el->el_line.lastchar)			c_insert(el, 1);		*el->el_line.cursor++ = c;		re_fastaddc(el);		/* fast refresh for one char. */	} else {		if (el->el_state.inputmode != MODE_REPLACE_1)			c_insert(el, el->el_state.argument);		while (count-- && el->el_line.cursor < el->el_line.lastchar)			*el->el_line.cursor++ = c;		re_refresh(el);	}	if (el->el_state.inputmode == MODE_REPLACE_1)		return vi_command_mode(el, 0);	return (CC_NORM);}/* ed_delete_prev_word(): *	Delete from beginning of current word to cursor *	[M-^?] [^W] */protected el_action_t/*ARGSUSED*/ed_delete_prev_word(EditLine *el, int c __attribute__((__unused__))){	char *cp, *p, *kp;	if (el->el_line.cursor == el->el_line.buffer)		return (CC_ERROR);	cp = c__prev_word(el->el_line.cursor, el->el_line.buffer,	    el->el_state.argument, ce__isword);	for (p = cp, kp = el->el_chared.c_kill.buf; p < el->el_line.cursor; p++)		*kp++ = *p;	el->el_chared.c_kill.last = kp;	c_delbefore(el, el->el_line.cursor - cp);	/* delete before dot */	el->el_line.cursor = cp;	if (el->el_line.cursor < el->el_line.buffer)		el->el_line.cursor = el->el_line.buffer; /* bounds check */	return (CC_REFRESH);}/* ed_delete_next_char(): *	Delete character under cursor *	[^D] [x] */protected el_action_t/*ARGSUSED*/ed_delete_next_char(EditLine *el, int c __attribute__((__unused__))){#ifdef notdef			/* XXX */#define	EL	el->el_line	(void) fprintf(el->el_errlfile,	    "\nD(b: %x(%s)  c: %x(%s) last: %x(%s) limit: %x(%s)\n",	    EL.buffer, EL.buffer, EL.cursor, EL.cursor, EL.lastchar,	    EL.lastchar, EL.limit, EL.limit);#endif	if (el->el_line.cursor == el->el_line.lastchar) {			/* if I'm at the end */		if (el->el_map.type == MAP_VI) {			if (el->el_line.cursor == el->el_line.buffer) {				/* if I'm also at the beginning */#ifdef KSHVI				return (CC_ERROR);#else				term_overwrite(el, STReof, 4);					/* then do a EOF */				term__flush();				return (CC_EOF);#endif			} else {#ifdef KSHVI				el->el_line.cursor--;#else				return (CC_ERROR);#endif			}		} else {			if (el->el_line.cursor != el->el_line.buffer)				el->el_line.cursor--;			else				return (CC_ERROR);		}	}	c_delafter(el, el->el_state.argument);	/* delete after dot */	if (el->el_line.cursor >= el->el_line.lastchar &&	    el->el_line.cursor > el->el_line.buffer)			/* bounds check */		el->el_line.cursor = el->el_line.lastchar - 1;	return (CC_REFRESH);}/* ed_kill_line(): *	Cut to the end of line *	[^K] [^K] */protected el_action_t/*ARGSUSED*/ed_kill_line(EditLine *el, int c __attribute__((__unused__))){	char *kp, *cp;	cp = el->el_line.cursor;	kp = el->el_chared.c_kill.buf;	while (cp < el->el_line.lastchar)		*kp++ = *cp++;	/* copy it */	el->el_chared.c_kill.last = kp;			/* zap! -- delete to end */	el->el_line.lastchar = el->el_line.cursor;	return (CC_REFRESH);}/* ed_move_to_end(): *	Move cursor to the end of line *	[^E] [^E] */protected el_action_t/*ARGSUSED*/ed_move_to_end(EditLine *el, int c __attribute__((__unused__))){	el->el_line.cursor = el->el_line.lastchar;	if (el->el_map.type == MAP_VI) {#ifdef VI_MOVE		el->el_line.cursor--;#endif		if (el->el_chared.c_vcmd.action != NOP) {			cv_delfini(el);			return (CC_REFRESH);		}	}	return (CC_CURSOR);}/* ed_move_to_beg(): *	Move cursor to the beginning of line *	[^A] [^A] */protected el_action_t/*ARGSUSED*/ed_move_to_beg(EditLine *el, int c __attribute__((__unused__))){	el->el_line.cursor = el->el_line.buffer;	if (el->el_map.type == MAP_VI) {			/* We want FIRST non space character */		while (isspace((unsigned char) *el->el_line.cursor))			el->el_line.cursor++;		if (el->el_chared.c_vcmd.action != NOP) {			cv_delfini(el);			return (CC_REFRESH);		}	}	return (CC_CURSOR);}/* ed_transpose_chars(): *	Exchange the character to the left of the cursor with the one under it *	[^T] [^T] */protected el_action_ted_transpose_chars(EditLine *el, int c){	if (el->el_line.cursor < el->el_line.lastchar) {		if (el->el_line.lastchar <= &el->el_line.buffer[1])			return (CC_ERROR);		else			el->el_line.cursor++;	}	if (el->el_line.cursor > &el->el_line.buffer[1]) {		/* must have at least two chars entered */		c = el->el_line.cursor[-2];		el->el_line.cursor[-2] = el->el_line.cursor[-1];		el->el_line.cursor[-1] = c;		return (CC_REFRESH);	} else		return (CC_ERROR);}/* ed_next_char(): *	Move to the right one character *	[^F] [^F] */protected el_action_t/*ARGSUSED*/ed_next_char(EditLine *el, int c __attribute__((__unused__))){	char *lim = el->el_line.lastchar;	if (el->el_line.cursor >= lim ||	    (el->el_line.cursor == lim - 1 &&	    el->el_map.type == MAP_VI &&	    el->el_chared.c_vcmd.action == NOP))		return (CC_ERROR);	el->el_line.cursor += el->el_state.argument;	if (el->el_line.cursor > lim)		el->el_line.cursor = lim;	if (el->el_map.type == MAP_VI)		if (el->el_chared.c_vcmd.action != NOP) {			cv_delfini(el);			return (CC_REFRESH);		}	return (CC_CURSOR);}/* ed_prev_word(): *	Move to the beginning of the current word *	[M-b] [b] */protected el_action_t/*ARGSUSED*/ed_prev_word(EditLine *el, int c __attribute__((__unused__))){	if (el->el_line.cursor == el->el_line.buffer)		return (CC_ERROR);	el->el_line.cursor = c__prev_word(el->el_line.cursor,	    el->el_line.buffer,	    el->el_state.argument,	    ce__isword);	if (el->el_map.type == MAP_VI)		if (el->el_chared.c_vcmd.action != NOP) {			cv_delfini(el);			return (CC_REFRESH);		}	return (CC_CURSOR);}/* ed_prev_char(): *	Move to the left one character *	[^B] [^B] */protected el_action_t/*ARGSUSED*/ed_prev_char(EditLine *el, int c __attribute__((__unused__))){	if (el->el_line.cursor > el->el_line.buffer) {		el->el_line.cursor -= el->el_state.argument;		if (el->el_line.cursor < el->el_line.buffer)			el->el_line.cursor = el->el_line.buffer;		if (el->el_map.type == MAP_VI)			if (el->el_chared.c_vcmd.action != NOP) {				cv_delfini(el);				return (CC_REFRESH);			}		return (CC_CURSOR);	} else		return (CC_ERROR);}/* ed_quoted_insert(): *	Add the next character typed verbatim *	[^V] [^V] */protected el_action_ted_quoted_insert(EditLine *el, int c){	int num;	char tc;	tty_quotemode(el);	num = el_getc(el, &tc);	c = (unsigned char) tc;	tty_noquotemode(el);	if (num == 1)		return (ed_insert(el, c));	else		return (ed_end_of_file(el, 0));}/* ed_digit(): *	Adds to argument or enters a digit */protected el_action_ted_digit(EditLine *el, int c){	if (!isdigit(c))		return (CC_ERROR);	if (el->el_state.doingarg) {			/* if doing an arg, add this in... */		if (el->el_state.lastcmd == EM_UNIVERSAL_ARGUMENT)			el->el_state.argument = c - '0';		else {			if (el->el_state.argument > 1000000)				return (CC_ERROR);			el->el_state.argument =			    (el->el_state.argument * 10) + (c - '0');		}		return (CC_ARGHACK);	}	return ed_insert(el, c);}/* ed_argument_digit(): *	Digit that starts argument *	For ESC-n */protected el_action_ted_argument_digit(EditLine *el, int c){	if (!isdigit(c))		return (CC_ERROR);	if (el->el_state.doingarg) {		if (el->el_state.argument > 1000000)			return (CC_ERROR);		el->el_state.argument = (el->el_state.argument * 10) +		    (c - '0');	} else {		/* else starting an argument */		el->el_state.argument = c - '0';		el->el_state.doingarg = 1;	}	return (CC_ARGHACK);}/* ed_unassigned(): *	Indicates unbound character *	Bound to keys that are not assigned */protected el_action_t/*ARGSUSED*/ed_unassigned(EditLine *el, int c __attribute__((__unused__))){	return (CC_ERROR);}/** ** TTY key handling. **//* ed_tty_sigint(): *	Tty interrupt character *	[^C] */protected el_action_t/*ARGSUSED*/ed_tty_sigint(EditLine *el __attribute__((__unused__)), 	      int c __attribute__((__unused__))){	return (CC_NORM);}/* ed_tty_dsusp(): *	Tty delayed suspend character *	[^Y] */protected el_action_t

⌨️ 快捷键说明

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