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