184cec3c4Sedward /*
2*82b6afa4Sbostic * Copyright (c) 1983, 1993
3*82b6afa4Sbostic * The Regents of the University of California. All rights reserved.
4bac0d407Sbostic *
58e751acfSbostic * This code is derived from software contributed to Berkeley by
68e751acfSbostic * Edward Wang at The University of California, Berkeley.
78e751acfSbostic *
8122a1d9eSbostic * %sccs.include.redist.c%
984cec3c4Sedward */
1084cec3c4Sedward
11bac0d407Sbostic #ifndef lint
12*82b6afa4Sbostic static char sccsid[] = "@(#)wwdelline.c 8.1 (Berkeley) 06/06/93";
13bac0d407Sbostic #endif /* not lint */
14bac0d407Sbostic
153612e9c5Sedward #include "ww.h"
163612e9c5Sedward
wwdelline(w,row)175f188731Sedward wwdelline(w, row)
183612e9c5Sedward register struct ww *w;
195f188731Sedward int row;
203612e9c5Sedward {
213612e9c5Sedward register i;
223fb0dc45Sedward register union ww_char **cpp, **cqq;
23f40811deSedward register union ww_char *cp;
24ab5996c6Sedward int row1, row2;
253fb0dc45Sedward char deleted;
26f40811deSedward int visible;
273fb0dc45Sedward
283fb0dc45Sedward /*
293fb0dc45Sedward * Scroll first.
303fb0dc45Sedward */
315f188731Sedward if ((row1 = row) < w->ww_i.t) {
325f188731Sedward row1 = w->ww_i.t;
335f188731Sedward }
345f188731Sedward if ((row2 = w->ww_b.b) > w->ww_i.b) {
355f188731Sedward row2 = w->ww_i.b;
36f40811deSedward visible = 0;
37f40811deSedward } else
38f40811deSedward visible = 1;
39ab5996c6Sedward deleted = wwscroll1(w, row1, row2, 1, visible);
403612e9c5Sedward
413612e9c5Sedward /*
423612e9c5Sedward * Fix the buffer.
433612e9c5Sedward * But leave clearing the last line for wwclreol().
443612e9c5Sedward */
455f188731Sedward cpp = &w->ww_buf[row];
463612e9c5Sedward cqq = cpp + 1;
47f40811deSedward cp = *cpp;
485f188731Sedward for (i = w->ww_b.b - row; --i > 0;)
493612e9c5Sedward *cpp++ = *cqq++;
50f40811deSedward *cpp = cp;
513612e9c5Sedward
523612e9c5Sedward /*
533fb0dc45Sedward * Now clear the last line.
543612e9c5Sedward */
55f40811deSedward if (visible)
565f188731Sedward wwclreol1(w, w->ww_b.b - 1, w->ww_b.l, deleted);
5782187d2dSedward else {
5882187d2dSedward cp += w->ww_b.l;
595f188731Sedward for (i = w->ww_b.nc; --i >= 0;)
60f40811deSedward cp++->c_w = ' ';
613612e9c5Sedward }
6282187d2dSedward }
63