fix queue pattern (from chris@maryland)
[unix-history] / usr / src / usr.bin / window / wwinsline.c
CommitLineData
2c7129ee 1#ifndef lint
7edc52ec 2static char sccsid[] = "@(#)wwinsline.c 3.6 %G%";
2c7129ee
EW
3#endif
4
5#include "ww.h"
6
f2a77fe1 7wwinsline(w, row)
2c7129ee 8register struct ww *w;
f2a77fe1 9int 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}