getstr.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 77 行

C
77
字号
#ifdef lintstatic char *sccsid = "@(#)getstr.c	4.1	(ULTRIX)	7/2/90";#endif lint# include	"curses.ext"/* *	This routine gets a string starting at (_cury,_curx) * * 7/2/81 (Berkeley) @(#)getstr.c	1.4 */wgetstr(win,str)WINDOW	*win; char	*str;{	char myerase, mykill;	char rownum[256], colnum[256];	int doecho = SP->fl_echoit;	int savecb = SP->fl_rawmode;	register int cpos = 0;	register int ch;	register char *cp = str;#ifdef DEBUG	if (outf) fprintf(outf, "doecho %d, savecb %d\n", doecho, savecb);#endif	myerase = erasechar();	mykill = killchar();	noecho(); crmode();	for (;;) {		rownum[cpos] = win->_cury;		colnum[cpos] = win->_curx;		if (! (win->_flags&_ISPAD))			wrefresh(win);		ch = wgetch(win);		if (ch <= 0 ||ch == ERR || ch == '\n' || ch == '\r')			break;		if (ch == myerase || ch == KEY_LEFT || ch == KEY_BACKSPACE) {			if (cpos > 0) {				cp--; cpos--;				if (doecho) {					wmove(win, rownum[cpos], colnum[cpos]);					wclrtoeol(win);				}			}		} else if (ch == mykill) {			cp = str;			cpos = 0;			if (doecho) {				wmove(win, rownum[cpos], colnum[cpos]);				wclrtoeol(win);			}		} else {			*cp++ = ch;			cpos++;			if (doecho) {				waddch(win, ch);			}		}	}	*cp = '\0';	if (doecho)		echo();	if (!savecb)		nocrmode();	waddch(win, '\n');	if (win->_flags & _ISPAD);		wrefresh(win);	if (ch == ERR)		return ERR;	return OK;}

⌨️ 快捷键说明

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