Commit | Line | Data |
---|---|---|
53069d72 | 1 | #ifndef lint |
861cd1ed | 2 | static char *sccsid = "@(#)wwdelchar.c 3.4 83/08/16"; |
53069d72 EW |
3 | #endif |
4 | ||
5 | #include "ww.h" | |
e908bfac | 6 | #include "tt.h" |
53069d72 | 7 | |
14f251df | 8 | wwdelchar(w, line, col) |
53069d72 EW |
9 | register struct ww *w; |
10 | { | |
14f251df EW |
11 | register i; |
12 | int row = line - w->ww_scroll; | |
13 | int nvis; | |
14 | ||
15 | { | |
16 | register union ww_char *p, *q; | |
17 | ||
18 | p = &w->ww_buf[line][col]; | |
19 | q = p + 1; | |
20 | for (i = w->ww_w.nc - col - 1; --i >= 0;) | |
21 | *p++ = *q++; | |
22 | p->c_w = ' '; | |
23 | } | |
24 | if (row < 0 || row >= w->ww_w.nr) | |
25 | return; | |
26 | { | |
27 | register union ww_char *buf; | |
28 | register char *win; | |
29 | register union ww_char *ns; | |
30 | register char *smap; | |
861cd1ed | 31 | char *touched; |
14f251df EW |
32 | |
33 | nvis = 0; | |
34 | smap = &wwsmap[row + w->ww_w.t][col + w->ww_w.l]; | |
35 | for (i = w->ww_w.nc - col; i > 0; i--) | |
36 | if (*smap == w->ww_index) | |
37 | break; | |
38 | else { | |
39 | smap++; | |
40 | col++; | |
41 | } | |
42 | if (i <= 0) | |
43 | return; | |
44 | buf = &w->ww_buf[line][col]; | |
45 | win = &w->ww_win[row][col]; | |
46 | ns = &wwns[row + w->ww_w.t][col + w->ww_w.l]; | |
861cd1ed | 47 | touched = &wwtouched[row + w->ww_w.t]; |
14f251df EW |
48 | for (; --i >= 0;) { |
49 | if (*win) { | |
50 | if ((*win & (WWM_COV|WWM_GLS)) != 0) { | |
51 | ns++; | |
52 | buf++; | |
861cd1ed | 53 | } else { |
14f251df EW |
54 | ns++->c_w = buf++->c_w |
55 | ^ *win++ << WWC_MSHIFT; | |
861cd1ed EW |
56 | *touched = 1; |
57 | } | |
14f251df | 58 | } else { |
861cd1ed | 59 | *touched = 1; |
14f251df EW |
60 | *ns++ = *buf++; |
61 | win++; | |
62 | nvis++; | |
63 | } | |
64 | } | |
65 | } | |
66 | col += w->ww_w.l; | |
67 | row += w->ww_w.t; | |
68 | if (nvis > (wwncol - col) / 2) { | |
69 | register union ww_char *p, *q; | |
70 | ||
71 | (*tt.tt_move)(row, col); | |
72 | (*tt.tt_delchar)(); | |
73 | ||
74 | p = &wwos[row][col]; | |
75 | q = p + 1; | |
76 | for (i = wwncol - col - 1; --i >= 0;) | |
77 | *p++ = *q++; | |
78 | p->c_w = ' '; | |
79 | } | |
53069d72 | 80 | } |