refresh.c

来自「操作系统源代码」· C语言 代码 · 共 73 行

C
73
字号
/* refresh.c */#include <curses.h>#include "curspriv.h"/* Wrefresh() updates window win's area of the physical screen.	*/void wrefresh(win)WINDOW *win;{  if (win == curscr)	curscr->_clear = TRUE;  else	wnoutrefresh(win);  doupdate();}/****************************************************************//* Wnoutrefresh() updates the image of the desired screen,	*//* Without doing physical update (copies window win's image to	*//* The _cursvar.tmpwin window, which is hidden from the user).	*//****************************************************************/void wnoutrefresh(win)register WINDOW *win;{  register int *dst;		/* start destination in temp window */  register int *end;		/* end destination in temp window */  register int *src;		/* source in user window */  register int first;		/* first changed char on line */  register int last;		/* last changed char on line */  WINDOW *nscr;  int begy;			/* window's place on screen */  int begx;  int i;  int j;  nscr = _cursvar.tmpwin;  begy = win->_begy;  begx = win->_begx;  for (i = 0, j = begy; i <= win->_maxy; i++, j++) {	if (win->_minchng[i] != _NO_CHANGE) {		first = win->_minchng[i];		last = win->_maxchng[i];		dst = &(nscr->_line[j][begx + first]);		end = &(nscr->_line[j][begx + last]);		src = &(win->_line[i][first]);		while (dst <= end)	/* copy user line to temp window */			*dst++ = *src++;		first += begx;	/* nscr's min/max change positions */		last += begx;		if ((nscr->_minchng[j] == _NO_CHANGE) || (nscr->_minchng[j] > first))			nscr->_minchng[j] = first;		if (last > nscr->_maxchng[j]) nscr->_maxchng[j] = last;		win->_minchng[i] = _NO_CHANGE;	/* updated now */	}			/* if */	win->_maxchng[i] = _NO_CHANGE;	/* updated now */  }				/* for */  if (win->_clear) {	win->_clear = FALSE;	nscr->_clear = TRUE;  }				/* if */  if (!win->_leave) {	nscr->_cury = win->_cury + begy;	nscr->_curx = win->_curx + begx;  }				/* if */}				/* wnoutrefresh */

⌨️ 快捷键说明

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