version 1.1, 1995/10/18 08:46:59 |
version 1.2, 1996/02/23 14:10:58 |
|
|
/* $NetBSD: wwwrite.c,v 1.3 1995/09/28 10:36:01 tls Exp $ */ |
/* $NetBSD: wwwrite.c,v 1.5 1996/02/08 21:49:19 mycroft Exp $ */ |
|
|
/* |
/* |
* Copyright (c) 1983, 1993 |
* Copyright (c) 1983, 1993 |
|
|
#if 0 |
#if 0 |
static char sccsid[] = "@(#)wwwrite.c 8.1 (Berkeley) 6/6/93"; |
static char sccsid[] = "@(#)wwwrite.c 8.1 (Berkeley) 6/6/93"; |
#else |
#else |
static char rcsid[] = "$NetBSD: wwwrite.c,v 1.3 1995/09/28 10:36:01 tls Exp $"; |
static char rcsid[] = "$NetBSD: wwwrite.c,v 1.5 1996/02/08 21:49:19 mycroft Exp $"; |
#endif |
#endif |
#endif /* not lint */ |
#endif /* not lint */ |
|
|
|
|
#include "char.h" |
#include "char.h" |
|
|
#define UPDATE() \ |
#define UPDATE() \ |
if (!w->ww_noupdate && w->ww_cur.r >= 0 && w->ww_cur.r < wwnrow && \ |
if (!ISSET(w->ww_wflags, WWW_NOUPDATE) && w->ww_cur.r >= 0 && \ |
wwtouched[w->ww_cur.r]) \ |
w->ww_cur.r < wwnrow && wwtouched[w->ww_cur.r]) \ |
wwupdate1(w->ww_cur.r, w->ww_cur.r + 1) |
wwupdate1(w->ww_cur.r, w->ww_cur.r + 1) |
|
|
/* |
/* |
|
|
register char *p; |
register char *p; |
int n; |
int n; |
{ |
{ |
char hascursor; |
int hascursor; |
char *savep = p; |
char *savep = p; |
char *q = p + n; |
char *q = p + n; |
char *r = 0; |
char *r = 0; |
|
|
#ifdef lint |
#ifdef lint |
s = 0; /* define it before possible use */ |
s = 0; /* define it before possible use */ |
#endif |
#endif |
if (hascursor = w->ww_hascursor) |
hascursor = ISSET(w->ww_wflags, WWW_HASCURSOR); |
|
if (hascursor) |
wwcursor(w, 0); |
wwcursor(w, 0); |
while (p < q && !w->ww_stopped && (!wwinterrupt() || w->ww_nointr)) { |
while (p < q && !ISSET(w->ww_pflags, WWP_STOPPED) && |
|
(!wwinterrupt() || ISSET(w->ww_wflags, WWW_NOINTR))) { |
if (r && !*p) { |
if (r && !*p) { |
p = r; |
p = r; |
q = s; |
q = s; |
|
|
continue; |
continue; |
} |
} |
if (w->ww_wstate == 0 && |
if (w->ww_wstate == 0 && |
(isprt(*p) || w->ww_unctrl && isunctrl(*p))) { |
(isprt(*p) || ISSET(w->ww_wflags, WWW_UNCTRL) && |
|
isunctrl(*p))) { |
register i; |
register i; |
register union ww_char *bp; |
register union ww_char *bp; |
int col, col1; |
int col, col1; |
|
|
if (w->ww_insert) { /* this is very slow */ |
if (ISSET(w->ww_wflags, WWW_INSERT)) { |
|
/* this is very slow */ |
if (*p == '\t') { |
if (*p == '\t') { |
p++; |
p++; |
w->ww_cur.c += 8 - |
w->ww_cur.c += 8 - |
|
|
bp++->c_w = *p++ |
bp++->c_w = *p++ |
| w->ww_modes << WWC_MSHIFT; |
| w->ww_modes << WWC_MSHIFT; |
i++; |
i++; |
} else if (w->ww_unctrl && isunctrl(*p)) { |
} else if (ISSET(w->ww_wflags, WWW_UNCTRL) && |
|
isunctrl(*p)) { |
r = p + 1; |
r = p + 1; |
s = q; |
s = q; |
p = unctrl(*p); |
p = unctrl(*p); |
|
|
if (w->ww_cur.r >= w->ww_i.t |
if (w->ww_cur.r >= w->ww_i.t |
&& w->ww_cur.r < w->ww_i.b) { |
&& w->ww_cur.r < w->ww_i.b) { |
register union ww_char *ns = wwns[w->ww_cur.r]; |
register union ww_char *ns = wwns[w->ww_cur.r]; |
register char *smap = &wwsmap[w->ww_cur.r][col]; |
register unsigned char *smap = |
|
&wwsmap[w->ww_cur.r][col]; |
register char *win = w->ww_win[w->ww_cur.r]; |
register char *win = w->ww_win[w->ww_cur.r]; |
int nchanged = 0; |
int nchanged = 0; |
|
|
|
|
case 0: |
case 0: |
switch (*p++) { |
switch (*p++) { |
case '\n': |
case '\n': |
if (w->ww_mapnl) |
if (ISSET(w->ww_wflags, WWW_MAPNL)) |
crlf: |
crlf: |
w->ww_cur.c = w->ww_w.l; |
w->ww_cur.c = w->ww_w.l; |
lf: |
lf: |
|
|
w->ww_wstate = 0; |
w->ww_wstate = 0; |
switch (*p++) { |
switch (*p++) { |
case '@': |
case '@': |
w->ww_insert = 1; |
SET(w->ww_wflags, WWW_INSERT); |
break; |
break; |
case 'A': |
case 'A': |
up: |
up: |
|
|
wwdelchar(w, w->ww_cur.r, w->ww_cur.c); |
wwdelchar(w, w->ww_cur.r, w->ww_cur.c); |
break; |
break; |
case 'O': |
case 'O': |
w->ww_insert = 0; |
CLR(w->ww_wflags, WWW_INSERT); |
break; |
break; |
case 'P': |
case 'P': |
wwinschar(w, w->ww_cur.r, w->ww_cur.c, ' ', 0); |
wwinschar(w, w->ww_cur.r, w->ww_cur.c, ' ', 0); |