Commit | Line | Data |
---|---|---|
2c7129ee | 1 | #ifndef lint |
7edc52ec | 2 | static char sccsid[] = "@(#)wwinsline.c 3.6 %G%"; |
2c7129ee EW |
3 | #endif |
4 | ||
5 | #include "ww.h" | |
6 | ||
f2a77fe1 | 7 | wwinsline(w, row) |
2c7129ee | 8 | register struct ww *w; |
f2a77fe1 | 9 | int row; |
2c7129ee EW |
10 | { |
11 | register i; | |
14f251df | 12 | register union ww_char **cpp, **cqq; |
74f2441e | 13 | register union ww_char *cp; |
f2a77fe1 | 14 | int row1, row2; |
14f251df | 15 | char deleted; |
74f2441e | 16 | int visible; |
2c7129ee EW |
17 | |
18 | /* | |
14f251df | 19 | * Scroll first. |
2c7129ee | 20 | */ |
f2a77fe1 EW |
21 | if ((row1 = row) < w->ww_i.t) { |
22 | row1 = w->ww_i.t; | |
74f2441e EW |
23 | visible = 0; |
24 | } else | |
25 | visible = 1; | |
f2a77fe1 EW |
26 | if ((row2 = w->ww_b.b) > w->ww_i.b) { |
27 | row2 = w->ww_i.b; | |
28 | } | |
29 | deleted = wwscroll1(w, row1, row2, -1, visible); | |
14f251df | 30 | |
2c7129ee | 31 | /* |
14f251df EW |
32 | * Fix the buffer. |
33 | * But leave clearing the last line for wwclreol(). | |
2c7129ee | 34 | */ |
f2a77fe1 | 35 | cpp = &w->ww_buf[w->ww_b.b]; |
14f251df | 36 | cqq = cpp - 1; |
74f2441e | 37 | cp = *cqq; |
f2a77fe1 | 38 | for (i = w->ww_b.b - row; --i > 0;) |
14f251df | 39 | *--cpp = *--cqq; |
74f2441e | 40 | *cqq = cp; |
2c7129ee | 41 | |
2c7129ee | 42 | /* |
14f251df | 43 | * Now clear the last line. |
2c7129ee | 44 | */ |
74f2441e | 45 | if (visible) |
f2a77fe1 | 46 | wwclreol1(w, row, w->ww_b.l, deleted); |
74f2441e | 47 | else |
f2a77fe1 | 48 | for (i = w->ww_b.nc; --i >= 0;) |
74f2441e | 49 | cp++->c_w = ' '; |
2c7129ee | 50 | } |