1 /*
2 * Copyright (c) 1983, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Edward Wang at The University of California, Berkeley.
7 *
8 * %sccs.include.redist.c%
9 */
10
11 #ifndef lint
12 static char sccsid[] = "@(#)wwdelline.c 8.1 (Berkeley) 06/06/93";
13 #endif /* not lint */
14
15 #include "ww.h"
16
wwdelline(w,row)17 wwdelline(w, row)
18 register struct ww *w;
19 int row;
20 {
21 register i;
22 register union ww_char **cpp, **cqq;
23 register union ww_char *cp;
24 int row1, row2;
25 char deleted;
26 int visible;
27
28 /*
29 * Scroll first.
30 */
31 if ((row1 = row) < w->ww_i.t) {
32 row1 = w->ww_i.t;
33 }
34 if ((row2 = w->ww_b.b) > w->ww_i.b) {
35 row2 = w->ww_i.b;
36 visible = 0;
37 } else
38 visible = 1;
39 deleted = wwscroll1(w, row1, row2, 1, visible);
40
41 /*
42 * Fix the buffer.
43 * But leave clearing the last line for wwclreol().
44 */
45 cpp = &w->ww_buf[row];
46 cqq = cpp + 1;
47 cp = *cpp;
48 for (i = w->ww_b.b - row; --i > 0;)
49 *cpp++ = *cqq++;
50 *cpp = cp;
51
52 /*
53 * Now clear the last line.
54 */
55 if (visible)
56 wwclreol1(w, w->ww_b.b - 1, w->ww_b.l, deleted);
57 else {
58 cp += w->ww_b.l;
59 for (i = w->ww_b.nc; --i >= 0;)
60 cp++->c_w = ' ';
61 }
62 }
63