* make the current screen look like "win" over the area coverd by
* %G% (Berkeley) @(#)refresh.c 1.5
* make sure were in visual state
* initialize loop parameters
curwin
= (win
== curscr
);
if (win
->_clear
|| curscr
->_clear
|| curwin
) {
if ((win
->_flags
& _FULLWIN
) || curscr
->_clear
) {
ly
= lx
= curscr
->_curx
= curscr
->_cury
= 0;
fprintf(outf
, "REFRESH(%0.2o): curwin = %d\n", win
, curwin
);
fprintf(outf
, "REFRESH:\n\tfirstch\tlastch\n");
for (wy
= 0; wy
< win
->_maxy
; wy
++) {
fprintf(outf
, "%d\t%d\t%d\n", wy
, win
->_firstch
[wy
], win
->_lastch
[wy
]);
if (win
->_firstch
[wy
] != _NOCHANGE
)
if (makech(win
, wy
) == ERR
)
win
->_firstch
[wy
] = _NOCHANGE
;
if (ly
>= 0 && ly
< win
->_maxy
&& lx
>= 0 && lx
< win
->_maxx
) {
win
->_cury
= win
->_curx
= 0;
mvcur(ly
, lx
, win
->_cury
+ win
->_begy
, win
->_curx
+ win
->_begx
);
curscr
->_cury
= win
->_cury
+ win
->_begy
;
curscr
->_curx
= win
->_curx
+ win
->_begx
;
* make a change on the screen
reg
char *nsp
, *csp
, *ce
;
reg
int nlsp
, clsp
; /* last space in lines */
csp
= &curscr
->_y
[wy
+ win
->_begy
][wx
+ win
->_begx
];
for (ce
= &win
->_y
[wy
][win
->_maxx
- 1]; *ce
== ' '; ce
--)
mvcur(ly
, lx
, y
, wx
+ win
->_begx
);
fprintf(outf
, "MAKECH: 1: wx = %d, lx = %d\n", wx
, lx
);
while (*nsp
!= *csp
&& wx
<= lch
) {
if (ce
!= NULL
&& wx
>= nlsp
&& *nsp
== ' ') {
* check for clear to end-of-line
ce
= &curscr
->_y
[ly
][COLS
- 1];
clsp
= ce
- curscr
->_y
[ly
] - win
->_begx
;
fprintf(outf
, "MAKECH: clsp = %d, nlsp = %d\n", clsp
, nlsp
);
if (clsp
- nlsp
>= strlen(CE
)
fprintf(outf
, "MAKECH: using CE\n");
* enter/exit standout mode as appropriate
if (SO
&& (*nsp
&_STANDOUT
) != (curscr
->_flags
&_STANDOUT
)) {
curscr
->_flags
|= _STANDOUT
;
curscr
->_flags
&= ~_STANDOUT
;
if (wx
>= win
->_maxx
&& wy
== win
->_maxy
- 1)
if ((win
->_flags
&(_ENDLINE
|_STANDOUT
)) == (_ENDLINE
|_STANDOUT
))
win
->_flags
&= ~_STANDOUT
;
putchar((*csp
= *nsp
) & 0177);
if (win
->_flags
&_FULLWIN
&& !curwin
)
ly
= win
->_begy
+win
->_cury
;
lx
= win
->_begx
+win
->_curx
;
else if (win
->_flags
&_SCROLLWIN
) {
putchar((*csp
++ = *nsp
) & 0177);
if (UC
&& (*nsp
& _STANDOUT
)) {
if (!MS
&& (*nsp
& _STANDOUT
) && (*csp
& _STANDOUT
)) {
win
->_flags
&= ~_STANDOUT
;
fprintf(outf
, "MAKECH: 2: wx = %d, lx = %d\n", wx
, lx
);
if (lx
== wx
+ win
->_begx
) /* if no change */
fprintf(outf
, "MAKECH: 3: wx = %d, lx = %d\n", wx
, lx
);
if ((win
->_flags
& _STANDOUT
) && !MS
) {
win
->_flags
&= ~_STANDOUT
;