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

📄 tty.c

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 C
📖 第 1 页 / 共 3 页
字号:
	new[1] = old[1] = '\0';	map = el->el_map.key;	alt = el->el_map.alt;	if (el->el_map.type == MAP_VI) {		dmap = el->el_map.vii;		dalt = el->el_map.vic;	} else {		dmap = el->el_map.emacs;		dalt = NULL;	}	for (tp = tty_map; tp->nch != -1; tp++) {		new[0] = t_n[tp->nch];		old[0] = t_o[tp->och];		if (new[0] == old[0] && !force)			continue;		/* Put the old default binding back, and set the new binding */		key_clear(el, map, (char *)old);		map[old[0]] = dmap[old[0]];		key_clear(el, map, (char *)new);		/* MAP_VI == 1, MAP_EMACS == 0... */		map[new[0]] = tp->bind[el->el_map.type];		if (dalt) {			key_clear(el, alt, (char *)old);			alt[old[0]] = dalt[old[0]];			key_clear(el, alt, (char *)new);			alt[new[0]] = tp->bind[el->el_map.type + 1];		}	}}/* tty_rawmode(): * 	Set terminal into 1 character at a time mode. */protected inttty_rawmode(EditLine *el){	if (el->el_tty.t_mode == ED_IO || el->el_tty.t_mode == QU_IO)		return (0);	if (el->el_flags & EDIT_DISABLED)		return (0);	if (tty_getty(el, &el->el_tty.t_ts) == -1) {#ifdef DEBUG_TTY		(void) fprintf(el->el_errfile, "tty_rawmode: tty_getty: %s\n",		    strerror(errno));#endif /* DEBUG_TTY */		return (-1);	}	/*         * We always keep up with the eight bit setting and the speed of the         * tty. But only we only believe changes that are made to cooked mode!         */	el->el_tty.t_eight = tty__geteightbit(&el->el_tty.t_ts);	el->el_tty.t_speed = tty__getspeed(&el->el_tty.t_ts);	if (tty__getspeed(&el->el_tty.t_ex) != el->el_tty.t_speed ||	    tty__getspeed(&el->el_tty.t_ed) != el->el_tty.t_speed) {		(void) cfsetispeed(&el->el_tty.t_ex, el->el_tty.t_speed);		(void) cfsetospeed(&el->el_tty.t_ex, el->el_tty.t_speed);		(void) cfsetispeed(&el->el_tty.t_ed, el->el_tty.t_speed);		(void) cfsetospeed(&el->el_tty.t_ed, el->el_tty.t_speed);	}	if (tty__cooked_mode(&el->el_tty.t_ts)) {		if (el->el_tty.t_ts.c_cflag != el->el_tty.t_ex.c_cflag) {			el->el_tty.t_ex.c_cflag =			    el->el_tty.t_ts.c_cflag;			el->el_tty.t_ex.c_cflag &=			    ~el->el_tty.t_t[EX_IO][MD_CTL].t_clrmask;			el->el_tty.t_ex.c_cflag |=			    el->el_tty.t_t[EX_IO][MD_CTL].t_setmask;			el->el_tty.t_ed.c_cflag =			    el->el_tty.t_ts.c_cflag;			el->el_tty.t_ed.c_cflag &=			    ~el->el_tty.t_t[ED_IO][MD_CTL].t_clrmask;			el->el_tty.t_ed.c_cflag |=			    el->el_tty.t_t[ED_IO][MD_CTL].t_setmask;		}		if ((el->el_tty.t_ts.c_lflag != el->el_tty.t_ex.c_lflag) &&		    (el->el_tty.t_ts.c_lflag != el->el_tty.t_ed.c_lflag)) {			el->el_tty.t_ex.c_lflag =			    el->el_tty.t_ts.c_lflag;			el->el_tty.t_ex.c_lflag &=			    ~el->el_tty.t_t[EX_IO][MD_LIN].t_clrmask;			el->el_tty.t_ex.c_lflag |=			    el->el_tty.t_t[EX_IO][MD_LIN].t_setmask;			el->el_tty.t_ed.c_lflag =			    el->el_tty.t_ts.c_lflag;			el->el_tty.t_ed.c_lflag &=			    ~el->el_tty.t_t[ED_IO][MD_LIN].t_clrmask;			el->el_tty.t_ed.c_lflag |=			    el->el_tty.t_t[ED_IO][MD_LIN].t_setmask;		}		if ((el->el_tty.t_ts.c_iflag != el->el_tty.t_ex.c_iflag) &&		    (el->el_tty.t_ts.c_iflag != el->el_tty.t_ed.c_iflag)) {			el->el_tty.t_ex.c_iflag =			    el->el_tty.t_ts.c_iflag;			el->el_tty.t_ex.c_iflag &=			    ~el->el_tty.t_t[EX_IO][MD_INP].t_clrmask;			el->el_tty.t_ex.c_iflag |=			    el->el_tty.t_t[EX_IO][MD_INP].t_setmask;			el->el_tty.t_ed.c_iflag =			    el->el_tty.t_ts.c_iflag;			el->el_tty.t_ed.c_iflag &=			    ~el->el_tty.t_t[ED_IO][MD_INP].t_clrmask;			el->el_tty.t_ed.c_iflag |=			    el->el_tty.t_t[ED_IO][MD_INP].t_setmask;		}		if ((el->el_tty.t_ts.c_oflag != el->el_tty.t_ex.c_oflag) &&		    (el->el_tty.t_ts.c_oflag != el->el_tty.t_ed.c_oflag)) {			el->el_tty.t_ex.c_oflag =			    el->el_tty.t_ts.c_oflag;			el->el_tty.t_ex.c_oflag &=			    ~el->el_tty.t_t[EX_IO][MD_OUT].t_clrmask;			el->el_tty.t_ex.c_oflag |=			    el->el_tty.t_t[EX_IO][MD_OUT].t_setmask;			el->el_tty.t_ed.c_oflag =			    el->el_tty.t_ts.c_oflag;			el->el_tty.t_ed.c_oflag &=			    ~el->el_tty.t_t[ED_IO][MD_OUT].t_clrmask;			el->el_tty.t_ed.c_oflag |=			    el->el_tty.t_t[ED_IO][MD_OUT].t_setmask;		}		if (tty__gettabs(&el->el_tty.t_ex) == 0)			el->el_tty.t_tabs = 0;		else			el->el_tty.t_tabs = EL_CAN_TAB ? 1 : 0;		{			int i;			tty__getchar(&el->el_tty.t_ts, el->el_tty.t_c[TS_IO]);			/*		         * Check if the user made any changes.		         * If he did, then propagate the changes to the		         * edit and execute data structures.		         */			for (i = 0; i < C_NCC; i++)				if (el->el_tty.t_c[TS_IO][i] !=				    el->el_tty.t_c[EX_IO][i])					break;			if (i != C_NCC) {				/*				 * Propagate changes only to the unprotected				 * chars that have been modified just now.				 */				for (i = 0; i < C_NCC; i++) {					if (!((el->el_tty.t_t[ED_IO][MD_CHAR].t_setmask & C_SH(i)))					    && (el->el_tty.t_c[TS_IO][i] != el->el_tty.t_c[EX_IO][i]))						el->el_tty.t_c[ED_IO][i] = el->el_tty.t_c[TS_IO][i];					if (el->el_tty.t_t[ED_IO][MD_CHAR].t_clrmask & C_SH(i))						el->el_tty.t_c[ED_IO][i] = el->el_tty.t_vdisable;				}				tty_bind_char(el, 0);				tty__setchar(&el->el_tty.t_ed, el->el_tty.t_c[ED_IO]);				for (i = 0; i < C_NCC; i++) {					if (!((el->el_tty.t_t[EX_IO][MD_CHAR].t_setmask & C_SH(i)))					    && (el->el_tty.t_c[TS_IO][i] != el->el_tty.t_c[EX_IO][i]))						el->el_tty.t_c[EX_IO][i] = el->el_tty.t_c[TS_IO][i];					if (el->el_tty.t_t[EX_IO][MD_CHAR].t_clrmask & C_SH(i))						el->el_tty.t_c[EX_IO][i] = el->el_tty.t_vdisable;				}				tty__setchar(&el->el_tty.t_ex, el->el_tty.t_c[EX_IO]);			}		}	}	if (tty_setty(el, &el->el_tty.t_ed) == -1) {#ifdef DEBUG_TTY		(void) fprintf(el->el_errfile, "tty_rawmode: tty_setty: %s\n",		    strerror(errno));#endif /* DEBUG_TTY */		return (-1);	}	el->el_tty.t_mode = ED_IO;	return (0);}/* tty_cookedmode(): *	Set the tty back to normal mode */protected inttty_cookedmode(EditLine *el){				/* set tty in normal setup */	if (el->el_tty.t_mode == EX_IO)		return (0);	if (el->el_flags & EDIT_DISABLED)		return (0);	if (tty_setty(el, &el->el_tty.t_ex) == -1) {#ifdef DEBUG_TTY		(void) fprintf(el->el_errfile,		    "tty_cookedmode: tty_setty: %s\n",		    strerror(errno));#endif /* DEBUG_TTY */		return (-1);	}	el->el_tty.t_mode = EX_IO;	return (0);}/* tty_quotemode(): *	Turn on quote mode */protected inttty_quotemode(EditLine *el){	if (el->el_tty.t_mode == QU_IO)		return (0);	el->el_tty.t_qu = el->el_tty.t_ed;	el->el_tty.t_qu.c_iflag &= ~el->el_tty.t_t[QU_IO][MD_INP].t_clrmask;	el->el_tty.t_qu.c_iflag |= el->el_tty.t_t[QU_IO][MD_INP].t_setmask;	el->el_tty.t_qu.c_oflag &= ~el->el_tty.t_t[QU_IO][MD_OUT].t_clrmask;	el->el_tty.t_qu.c_oflag |= el->el_tty.t_t[QU_IO][MD_OUT].t_setmask;	el->el_tty.t_qu.c_cflag &= ~el->el_tty.t_t[QU_IO][MD_CTL].t_clrmask;	el->el_tty.t_qu.c_cflag |= el->el_tty.t_t[QU_IO][MD_CTL].t_setmask;	el->el_tty.t_qu.c_lflag &= ~el->el_tty.t_t[QU_IO][MD_LIN].t_clrmask;	el->el_tty.t_qu.c_lflag |= el->el_tty.t_t[QU_IO][MD_LIN].t_setmask;	if (tty_setty(el, &el->el_tty.t_qu) == -1) {#ifdef DEBUG_TTY		(void) fprintf(el->el_errfile, "QuoteModeOn: tty_setty: %s\n",		    strerror(errno));#endif /* DEBUG_TTY */		return (-1);	}	el->el_tty.t_mode = QU_IO;	return (0);}/* tty_noquotemode(): *	Turn off quote mode */protected inttty_noquotemode(EditLine *el){	if (el->el_tty.t_mode != QU_IO)		return (0);	if (tty_setty(el, &el->el_tty.t_ed) == -1) {#ifdef DEBUG_TTY		(void) fprintf(el->el_errfile, "QuoteModeOff: tty_setty: %s\n",		    strerror(errno));#endif /* DEBUG_TTY */		return (-1);	}	el->el_tty.t_mode = ED_IO;	return (0);}/* tty_stty(): *	Stty builtin */protected int/*ARGSUSED*/tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv){	const ttymodes_t *m;	char x;	int aflag = 0;	const char *s, *d;	const char *name;	struct termios *tios = &el->el_tty.t_ex;	int z = EX_IO;	if (argv == NULL)		return (-1);	name = *argv++;	while (argv && *argv && argv[0][0] == '-' && argv[0][2] == '\0')		switch (argv[0][1]) {		case 'a':			aflag++;			argv++;			break;		case 'd':			argv++;			tios = &el->el_tty.t_ed;			z = ED_IO;			break;		case 'x':			argv++;			tios = &el->el_tty.t_ex;			z = EX_IO;			break;		case 'q':			argv++;			tios = &el->el_tty.t_ts;			z = QU_IO;			break;		default:			(void) fprintf(el->el_errfile,			    "%s: Unknown switch `%c'.\n",			    name, argv[0][1]);			return (-1);		}	if (!argv || !*argv) {		int i = -1;		int len = 0, st = 0, cu;		for (m = ttymodes; m->m_name; m++) {			if (m->m_type != i) {				(void) fprintf(el->el_outfile, "%s%s",				    i != -1 ? "\n" : "",				    el->el_tty.t_t[z][m->m_type].t_name);				i = m->m_type;				st = len =				    strlen(el->el_tty.t_t[z][m->m_type].t_name);			}			x = (el->el_tty.t_t[z][i].t_setmask & m->m_value)			    ?  '+' : '\0';			x = (el->el_tty.t_t[z][i].t_clrmask & m->m_value)			    ? '-' : x;			if (x != '\0' || aflag) {				cu = strlen(m->m_name) + (x != '\0') + 1;				if (len + cu >= el->el_term.t_size.h) {					(void) fprintf(el->el_outfile, "\n%*s",					    st, "");					len = st + cu;				} else					len += cu;				if (x != '\0')					(void) fprintf(el->el_outfile, "%c%s ",					    x, m->m_name);				else					(void) fprintf(el->el_outfile, "%s ",					    m->m_name);			}		}		(void) fprintf(el->el_outfile, "\n");		return (0);	}	while (argv && (s = *argv++)) {		char *p;		switch (*s) {		case '+':		case '-':			x = *s++;			break;		default:			x = '\0';			break;		}		d = s;		if ((p = strchr(s, '=')) != NULL)			*p++ = '\0';		for (m = ttymodes; m->m_name; m++)			if (strcmp(m->m_name, d) == 0 &&			    (p == NULL || m->m_type == MD_CHAR))				break;		if (!m->m_name) {			(void) fprintf(el->el_errfile,			    "%s: Invalid argument `%s'.\n", name, d);			return (-1);		}		if (p) {			int c = ffs((int)m->m_value);			int v = *p ? parse__escape((const char **const) &p) :			    el->el_tty.t_vdisable;			assert(c-- != 0);			c = tty__getcharindex(c);			assert(c != -1);			tios->c_cc[c] = v;			continue;		}		switch (x) {		case '+':			el->el_tty.t_t[z][m->m_type].t_setmask |= m->m_value;			el->el_tty.t_t[z][m->m_type].t_clrmask &= ~m->m_value;			break;		case '-':			el->el_tty.t_t[z][m->m_type].t_setmask &= ~m->m_value;			el->el_tty.t_t[z][m->m_type].t_clrmask |= m->m_value;			break;		default:			el->el_tty.t_t[z][m->m_type].t_setmask &= ~m->m_value;			el->el_tty.t_t[z][m->m_type].t_clrmask &= ~m->m_value;			break;		}	}	return (0);}#ifdef notyet/* tty_printchar(): *	DEbugging routine to print the tty characters */private voidtty_printchar(EditLine *el, unsigned char *s){	ttyperm_t *m;	int i;	for (i = 0; i < C_NCC; i++) {		for (m = el->el_tty.t_t; m->m_name; m++)			if (m->m_type == MD_CHAR && C_SH(i) == m->m_value)				break;		if (m->m_name)			(void) fprintf(el->el_errfile, "%s ^%c ",			    m->m_name, s[i] + 'A' - 1);		if (i % 5 == 0)			(void) fprintf(el->el_errfile, "\n");	}	(void) fprintf(el->el_errfile, "\n");}#endif /* notyet */

⌨️ 快捷键说明

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