static char *sccsid
= "@(#)wwwrite.c 3.17 84/01/16";
if (hascursor
= w
->ww_hascursor
)
if (w
->ww_wstate
== 0 && !ISCTRL(*p
)) {
register union ww_char
*bp
;
if (w
->ww_insert
) { /* this is very slow */
wwinschar(w
, w
->ww_cur
.r
, w
->ww_cur
.c
,
*p
++ | w
->ww_modes
<< WWC_MSHIFT
);
bp
= bq
= &w
->ww_buf
[w
->ww_cur
.r
][w
->ww_cur
.c
];
if ((i
= w
->ww_b
.r
- w
->ww_cur
.c
) > n
)
while (--i
>= 0 && !ISCTRL(*p
))
bp
++->c_w
= *p
++ | w
->ww_modes
<< WWC_MSHIFT
;
col
= MAX(w
->ww_cur
.c
, w
->ww_i
.l
);
col1
= MIN(w
->ww_cur
.c
, w
->ww_i
.r
);
if (w
->ww_cur
.r
>= w
->ww_i
.t
&& w
->ww_cur
.r
< w
->ww_i
.b
)
register union ww_char
*ns
= wwns
[w
->ww_cur
.r
];
register char *smap
= &wwsmap
[w
->ww_cur
.r
][col
];
register char *win
= w
->ww_win
[w
->ww_cur
.r
];
char touched
= wwtouched
[w
->ww_cur
.r
];
bp
= w
->ww_buf
[w
->ww_cur
.r
];
for (i
= col
; i
< col1
; i
++)
if (*smap
++ == w
->ww_index
) {
wwtouched
[w
->ww_cur
.r
] = touched
;
if (w
->ww_cur
.c
>= w
->ww_w
.r
) {
if (++w
->ww_cur
.r
>= w
->ww_w
.b
) {
w
->ww_cur
.r
= w
->ww_w
.b
- 1;
if (w
->ww_w
.b
< w
->ww_b
.b
) {
(void) wwscroll1(w
, w
->ww_i
.t
,
8 - (w
->ww_cur
.c
- w
->ww_w
.l
& 7);
if (w
->ww_cur
.c
>= w
->ww_w
.r
) {
if (--w
->ww_cur
.c
< w
->ww_w
.l
) {
w
->ww_cur
.c
= w
->ww_w
.r
- 1;
if (--w
->ww_cur
.r
< w
->ww_w
.t
) {
if (w
->ww_w
.t
> w
->ww_b
.t
) {
(void) wwscroll1(w
, w
->ww_i
.t
,
if (++w
->ww_cur
.c
>= w
->ww_w
.r
) {
w
->ww_buf
-= w
->ww_w
.t
- w
->ww_b
.t
;
w
->ww_b
.b
= w
->ww_b
.t
+ w
->ww_b
.nr
;
wwclreos(w
, w
->ww_w
.t
, w
->ww_w
.l
);
wwclreos(w
, w
->ww_cur
.r
, w
->ww_cur
.c
);
wwclreol(w
, w
->ww_cur
.r
, w
->ww_cur
.c
);
wwinsline(w
, w
->ww_cur
.r
);
wwdelline(w
, w
->ww_cur
.r
);
wwdelchar(w
, w
->ww_cur
.r
, w
->ww_cur
.c
);
w
->ww_cur
.r
= w
->ww_w
.t
+
(unsigned)(*p
++ - ' ') % w
->ww_w
.nr
;
w
->ww_cur
.c
= w
->ww_w
.l
+
(unsigned)(*p
++ - ' ') % w
->ww_w
.nc
;