static char *sccsid
= "@(#)wwscroll.c 3.3 83/08/16";
* Scroll down one line, starting at 'line'.
* Don't adjust ww_scroll.
wwscroll1(w
, srow
, erow
, dir
, leaveit
)
* See how many lines on the screen are affected.
* And calculate srow, erow, and left at the same time.
for (i
= srow
; i
<= erow
&& w
->ww_nvis
[i
] == 0; i
++)
if ((startrow
= i
) > erow
) {
/* can't do any fancy stuff */
for (i
= erow
; i
>= srow
&& w
->ww_nvis
[i
] == 0; i
--)
if ((endrow
= i
) == startrow
)
goto out
; /* just one line is easy */
* See how much of this window is visible.
nvismax
= wwncol
* (endrow
- startrow
+ 1);
for (i
= startrow
; i
<= endrow
; i
++)
* If it's a good idea to use delete and insert line
* and the terminal can, then do it.
if (nvis
> nvismax
/ 2 && tt
.tt_delline
&& tt
.tt_insline
) {
register union ww_char
*tmp
;
register union ww_char
**cpp
, **cqq
;
(*tt
.tt_move
)(startrow
+ w
->ww_w
.t
, 0);
if (endrow
+ w
->ww_w
.t
!= wwnrow
- 1) {
(*tt
.tt_move
)(endrow
+ w
->ww_w
.t
, 0);
cpp
= &wwos
[startrow
+ w
->ww_w
.t
];
for (i
= endrow
- startrow
; --i
>= 0;)
for (i
= wwncol
; --i
>= 0;)
if (endrow
+ w
->ww_w
.t
!= wwnrow
- 1) {
(*tt
.tt_move
)(endrow
+ w
->ww_w
.t
, 0);
(*tt
.tt_move
)(startrow
+ w
->ww_w
.t
, 0);
cqq
= &wwos
[endrow
+ w
->ww_w
.t
];
for (i
= endrow
- startrow
; --i
>= 0;)
for (i
= wwncol
; --i
>= 0;)
register union ww_char
*tmp
;
register union ww_char
**cpp
, **cqq
;
cpp
= &wwns
[startrow
+ w
->ww_w
.t
];
for (i
= endrow
- startrow
; --i
>= 0;)
p
= &wwtouched
[startrow
+ w
->ww_w
.t
];
for (i
= endrow
- startrow
; --i
>= 0;)
wwredrawwin1(w
, srow
, startrow
- 1, w
->ww_scroll
+ dir
);
wwredrawwin1(w
, endrow
+ 1, erow
- leaveit
,
register union ww_char
*tmp
;
register union ww_char
**cpp
, **cqq
;
cqq
= &wwns
[endrow
+ w
->ww_w
.t
];
for (i
= endrow
- startrow
; --i
>= 0;)
q
= &wwtouched
[endrow
+ w
->ww_w
.t
];
for (i
= endrow
- startrow
; --i
>= 0;)
wwredrawwin1(w
, srow
+ leaveit
, startrow
- 1,
wwredrawwin1(w
, endrow
+ 1, erow
, w
->ww_scroll
+ dir
);
wwredrawwin1(w
, srow
, erow
- leaveit
,
wwredrawwin1(w
, srow
+ leaveit
, erow
,