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

📄 waddch.c

📁 操作系统源代码
💻 C
字号:
#include <curses.h>#include "curspriv.h"/****************************************************************//* Newline() does line advance and returns the new cursor line.	*//* If error, return -1.						*//****************************************************************/_PROTOTYPE( static short newline, (WINDOW *win, int lin));static short newline(win, lin)WINDOW *win;int lin;{  if (++lin > win->_regbottom) {	lin--;	if (win->_scroll)		scroll(win);	else		return(-1);  }				/* if */  return(lin);}				/* newline *//****************************************************************//* Waddch() inserts character 'c' at the current cursor posi-	*//* Tion in window 'win', and takes any actions as dictated by	*//* The character.						*//****************************************************************/int waddch(win, c)WINDOW *win;int c;{  int x = win->_curx;  int y = win->_cury;  int newx;  int ch = c;  int ts = win->_tabsize;  ch &= (A_ALTCHARSET | 0xff);  if (y > win->_maxy || x > win->_maxx || y < 0 || x < 0) return(ERR);  switch (ch) {      case '\t':	for (newx = ((x / ts) + 1) * ts; x < newx; x++) {		if (waddch(win, ' ') == ERR) return(ERR);		if (win->_curx == 0)	/* if tab to next line */			return(OK);	/* exit the loop */	}	return(OK);      case '\n':	if (NONL) x = 0;	if ((y = newline(win, y)) < 0) return (ERR);	break;      case '\r':	x = 0;	break;      case '\b':	if (--x < 0)		/* no back over left margin */		x = 0;	break;      case 0x7f:	{		if (waddch(win, '^') == ERR) return(ERR);		return(waddch(win, '?'));	}      default:	if (ch < ' ') {		/* handle control chars */		if (waddch(win, '^') == ERR) return(ERR);		return(waddch(win, c + '@'));	}	ch |= (win->_attrs & ATR_MSK);	if (win->_line[y][x] != ch) {	/* only if data change */		if (win->_minchng[y] == _NO_CHANGE)			win->_minchng[y] = win->_maxchng[y] = x;		else if (x < win->_minchng[y])			win->_minchng[y] = x;		else if (x > win->_maxchng[y])			win->_maxchng[y] = x;	}			/* if */	win->_line[y][x++] = ch;	if (x > win->_maxx) {	/* wrap around test */		x = 0;		if ((y = newline(win, y)) < 0) return(ERR);	}	break;  }				/* switch */  win->_curx = x;  win->_cury = y;  return(OK);}

⌨️ 快捷键说明

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