1 /* refresh.c */ 2 3 #include <curses.h> 4 #include "curspriv.h" 5 6 /* Wrefresh() updates window win's area of the physical screen. */ 7 void wrefresh(win) 8 WINDOW *win; 9 { 10 if (win == curscr) 11 curscr->_clear = TRUE; 12 else 13 wnoutrefresh(win); 14 doupdate(); 15 } 16 17 /****************************************************************/ 18 /* Wnoutrefresh() updates the image of the desired screen, */ 19 /* Without doing physical update (copies window win's image to */ 20 /* The _cursvar.tmpwin window, which is hidden from the user). */ 21 /****************************************************************/ 22 23 void wnoutrefresh(win) 24 register WINDOW *win; 25 { 26 register int *dst; /* start destination in temp window */ 27 register int *end; /* end destination in temp window */ 28 register int *src; /* source in user window */ 29 register int first; /* first changed char on line */ 30 register int last; /* last changed char on line */ 31 WINDOW *nscr; 32 int begy; /* window's place on screen */ 33 int begx; 34 int i; 35 int j; 36 37 nscr = _cursvar.tmpwin; 38 begy = win->_begy; 39 begx = win->_begx; 40 41 for (i = 0, j = begy; i <= win->_maxy; i++, j++) { 42 if (win->_minchng[i] != _NO_CHANGE) { 43 first = win->_minchng[i]; 44 last = win->_maxchng[i]; 45 dst = &(nscr->_line[j][begx + first]); 46 end = &(nscr->_line[j][begx + last]); 47 src = &(win->_line[i][first]); 48 49 while (dst <= end) /* copy user line to temp window */ 50 *dst++ = *src++; 51 52 first += begx; /* nscr's min/max change positions */ 53 last += begx; 54 55 if ((nscr->_minchng[j] == _NO_CHANGE) || (nscr->_minchng[j] > first)) 56 nscr->_minchng[j] = first; 57 if (last > nscr->_maxchng[j]) nscr->_maxchng[j] = last; 58 59 win->_minchng[i] = _NO_CHANGE; /* updated now */ 60 } /* if */ 61 win->_maxchng[i] = _NO_CHANGE; /* updated now */ 62 } /* for */ 63 64 if (win->_clear) { 65 win->_clear = FALSE; 66 nscr->_clear = TRUE; 67 } /* if */ 68 if (!win->_leave) { 69 nscr->_cury = win->_cury + begy; 70 nscr->_curx = win->_curx + begx; 71 } /* if */ 72 } /* wnoutrefresh */ 73