we have to initialize escapec before processing arguments
[unix-history] / usr / src / usr.bin / window / wwdelchar.c
CommitLineData
53069d72 1#ifndef lint
7edc52ec 2static char sccsid[] = "@(#)wwdelchar.c 3.10 %G%";
53069d72
EW
3#endif
4
5#include "ww.h"
e908bfac 6#include "tt.h"
53069d72 7
f2a77fe1 8wwdelchar(w, row, col)
53069d72
EW
9register struct ww *w;
10{
14f251df 11 register i;
14f251df
EW
12 int nvis;
13
19f9784c
EW
14 /*
15 * First, shift the line.
16 */
14f251df
EW
17 {
18 register union ww_char *p, *q;
19
f2a77fe1 20 p = &w->ww_buf[row][col];
14f251df 21 q = p + 1;
f2a77fe1 22 for (i = w->ww_b.r - col; --i > 0;)
14f251df
EW
23 *p++ = *q++;
24 p->c_w = ' ';
25 }
19f9784c
EW
26
27 /*
28 * If can't see it, just return.
29 */
f2a77fe1
EW
30 if (row < w->ww_i.t || row >= w->ww_i.b
31 || w->ww_i.r <= 0 || w->ww_i.r <= col)
14f251df 32 return;
19f9784c 33
f2a77fe1
EW
34 if (col < w->ww_i.l)
35 col = w->ww_i.l;
19f9784c
EW
36
37 /*
38 * Now find out how much is actually changed, and fix wwns.
39 */
14f251df
EW
40 {
41 register union ww_char *buf;
42 register char *win;
43 register union ww_char *ns;
44 register char *smap;
d069a508 45 char touched;
14f251df
EW
46
47 nvis = 0;
f2a77fe1 48 smap = &wwsmap[row][col];
d069a508
EW
49 for (i = col; i < w->ww_i.r && *smap++ != w->ww_index; i++)
50 ;
51 if (i >= w->ww_i.r)
14f251df 52 return;
d069a508
EW
53 col = i;
54 buf = w->ww_buf[row];
55 win = w->ww_win[row];
56 ns = wwns[row];
57 smap = &wwsmap[row][i];
58 touched = wwtouched[row];
59 for (; i < w->ww_i.r; i++) {
60 if (*smap++ != w->ww_index)
61 continue;
04d70db4 62 touched |= WWU_TOUCHED;
d069a508
EW
63 if (win[i])
64 ns[i].c_w =
65 buf[i].c_w ^ win[i] << WWC_MSHIFT;
66 else {
14f251df 67 nvis++;
d069a508 68 ns[i] = buf[i];
14f251df 69 }
d069a508
EW
70 }
71 wwtouched[row] = touched;
14f251df 72 }
19f9784c
EW
73
74 /*
75 * Can/Should we use delete character?
76 */
f2a77fe1 77 if (tt.tt_delchar != 0 && nvis > (wwncol - col) / 2) {
14f251df
EW
78 register union ww_char *p, *q;
79
f2a77fe1 80 (*tt.tt_move)(row, col);
14f251df
EW
81 (*tt.tt_delchar)();
82
f2a77fe1 83 p = &wwos[row][col];
14f251df 84 q = p + 1;
f2a77fe1 85 for (i = wwncol - col; --i > 0;)
14f251df
EW
86 *p++ = *q++;
87 p->c_w = ' ';
88 }
53069d72 89}