static char sccsid
[] = "@(#)wwinschar.c 3.14 %G%";
* Copyright (c) 1983 Regents of the University of California,
* All rights reserved. Redistribution permitted subject to
* the terms of the Berkeley Software License Agreement.
wwinschar(w
, row
, col
, c
)
register union ww_char
*p
, *q
;
p
= &w
->ww_buf
[row
][w
->ww_b
.r
];
for (i
= w
->ww_b
.r
- col
; --i
> 0;)
* If can't see it, just return.
if (row
< w
->ww_i
.t
|| row
>= w
->ww_i
.b
|| w
->ww_i
.r
<= 0 || w
->ww_i
.r
<= col
)
* Now find out how much is actually changed, and fix wwns.
register union ww_char
*buf
;
register union ww_char
*ns
;
smap
= &wwsmap
[row
][col
];
for (i
= col
; i
< w
->ww_i
.r
&& *smap
++ != w
->ww_index
; i
++)
touched
= wwtouched
[row
];
for (; i
< w
->ww_i
.r
; i
++) {
if (*smap
++ != w
->ww_index
)
buf
[i
].c_w
^ win
[i
] << WWC_MSHIFT
;
wwtouched
[row
] = touched
;
* Can/Should we use delete character?
if (tt
.tt_hasinsert
&& nvis
> (wwncol
- col
) / 2) {
register union ww_char
*p
, *q
;
tt
.tt_nmodes
= c
>> WWC_MSHIFT
& tt
.tt_availmodes
;
(*tt
.tt_putc
)(c
& WWC_CMASK
);
for (i
= wwncol
- col
; --i
> 0;)