SCCS-vsn: usr.bin/window/main.c 3.5
SCCS-vsn: usr.bin/window/wwinit.c 3.8
SCCS-vsn: usr.bin/window/wwopen.c 3.3
SCCS-vsn: usr.bin/window/ww.h 3.10
SCCS-vsn: usr.bin/window/wwframe.c 3.7
SCCS-vsn: usr.bin/window/wwlabel.c 3.5
SCCS-vsn: usr.bin/window/wwunframe.c 3.7
SCCS-vsn: usr.bin/window/wwbox.c 3.2
-static char *sccsid = "@(#)main.c 3.4 83/08/19";
+static char *sccsid = "@(#)main.c 3.5 83/08/19";
(void) fprintf(stderr, "Can't open command window.\r\n");
goto bad;
}
(void) fprintf(stderr, "Can't open command window.\r\n");
goto bad;
}
- if ((framewin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
+ if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
+ == 0) {
(void) wwflush();
(void) fprintf(stderr, "Can't open frame window.\r\n");
goto bad;
(void) wwflush();
(void) fprintf(stderr, "Can't open frame window.\r\n");
goto bad;
- * @(#)ww.h 3.9 83/08/19
+ * @(#)ww.h 3.10 83/08/19
char **ww_win; /* the window */
union ww_char **ww_buf; /* the buffer */
char **ww_cov; /* the covered-by array */
char **ww_win; /* the window */
union ww_char **ww_buf; /* the buffer */
char **ww_cov; /* the covered-by array */
+ char **ww_fmap; /* map for frame and box windows */
short *ww_nvis; /* how many ww_buf chars are visible per row */
int ww_pty; /* file descriptor of pty */
int ww_tty; /* . . . tty */
short *ww_nvis; /* how many ww_buf chars are visible per row */
int ww_pty; /* file descriptor of pty */
int ww_tty; /* . . . tty */
#define WWS_INCHILD 2 /* forked, in child */
#define WWS_DEAD 3 /* child died */
#define WWS_INCHILD 2 /* forked, in child */
#define WWS_DEAD 3 /* child died */
- /* flags to wwopen() */
-#define WWO_PTY 0x01 /* want pty */
-#define WWO_REVERSE 0x02 /* make it all reverse video */
-#define WWO_GLASS 0x04 /* make it all glass */
-
- /* flags for wwfmap */
+ /* flags for ww_fmap */
#define WWF_U 0x01
#define WWF_R 0x02
#define WWF_D 0x04
#define WWF_U 0x01
#define WWF_R 0x02
#define WWF_D 0x04
#define WWF_LABEL 0x40
#define WWF_TOP 0x80
#define WWF_LABEL 0x40
#define WWF_TOP 0x80
+ /* flags to wwopen() */
+#define WWO_PTY 0x01 /* want pty */
+#define WWO_REVERSE 0x02 /* make it all reverse video */
+#define WWO_GLASS 0x04 /* make it all glass */
+#define WWO_FRAME 0x08 /* this is a frame window */
+
/* special ww_index value */
#define WWX_NOBODY NWW
/* special ww_index value */
#define WWX_NOBODY NWW
char wwwrap; /* terminal has auto wrap around */
int wwdtablesize; /* result of getdtablesize() call */
char **wwsmap; /* the screen map */
char wwwrap; /* terminal has auto wrap around */
int wwdtablesize; /* result of getdtablesize() call */
char **wwsmap; /* the screen map */
-char **wwfmap; /* the frame map */
union ww_char **wwos; /* the old (current) screen */
union ww_char **wwns; /* the new (desired) screen */
char *wwtouched; /* wwns changed flags */
union ww_char **wwos; /* the old (current) screen */
union ww_char **wwns; /* the new (desired) screen */
char *wwtouched; /* wwns changed flags */
#define wwsetcursor(r,c) (wwcursorrow = (r), wwcursorcol = (c))
#define wwcurtowin(w) wwsetcursor(wwcurrow(w), wwcurcol(w))
#define wwbell() putchar(CTRL(g))
#define wwsetcursor(r,c) (wwcursorrow = (r), wwcursorcol = (c))
#define wwcurtowin(w) wwsetcursor(wwcurrow(w), wwcurcol(w))
#define wwbell() putchar(CTRL(g))
+#define wwunbox(w) wwunframe(w)
/* the window virtual terminal */
#define WWT_TERM "TERM=window"
/* the window virtual terminal */
#define WWT_TERM "TERM=window"
-static char *sccsid = "@(#)wwbox.c 3.1 83/08/18";
+static char *sccsid = "@(#)wwbox.c 3.2 83/08/19";
r1 = r + nr - 1;
c1 = c + nc - 1;
r1 = r + nr - 1;
c1 = c + nc - 1;
- wwframec(w, r, c, WWF_D|WWF_R, 0);
+ wwframec(w, r, c, WWF_D|WWF_R);
for (i = c + 1; i < c1; i++)
for (i = c + 1; i < c1; i++)
- wwframec(w, r, i, WWF_L|WWF_R, 0);
- wwframec(w, r, i, WWF_L|WWF_D, 0);
+ wwframec(w, r, i, WWF_L|WWF_R);
+ wwframec(w, r, i, WWF_L|WWF_D);
for (i = r + 1; i < r1; i++)
for (i = r + 1; i < r1; i++)
- wwframec(w, i, c1, WWF_U|WWF_D, 0);
- wwframec(w, i, c1, WWF_U|WWF_L, 0);
+ wwframec(w, i, c1, WWF_U|WWF_D);
+ wwframec(w, i, c1, WWF_U|WWF_L);
for (i = c1 - 1; i > c; i--)
for (i = c1 - 1; i > c; i--)
- wwframec(w, r1, i, WWF_R|WWF_L, 0);
- wwframec(w, r1, i, WWF_R|WWF_U, 0);
+ wwframec(w, r1, i, WWF_R|WWF_L);
+ wwframec(w, r1, i, WWF_R|WWF_U);
for (i = r1 - 1; i > r; i--)
for (i = r1 - 1; i > r; i--)
- wwframec(w, i, c, WWF_D|WWF_U, 0);
-}
-
-wwunbox(w)
-struct ww *w;
-{
- wwunframe1(w, 0);
+ wwframec(w, i, c, WWF_D|WWF_U);
-static char *sccsid = "@(#)wwframe.c 3.6 83/08/19";
+static char *sccsid = "@(#)wwframe.c 3.7 83/08/19";
if ((a2 || a3) && b3)
code |= WWF_R;
if (code)
if ((a2 || a3) && b3)
code |= WWF_R;
if (code)
- wwframec(wframe, r, c, code|WWF_TOP, 1);
+ wwframec(wframe, r, c, code|WWF_TOP);
b2 = b3;
}
if ((a1 || a2) && b1 && b2)
b2 = b3;
}
if ((a1 || a2) && b1 && b2)
- wwframec(wframe, r, c, WWF_L|WWF_TOP, 1);
+ wwframec(wframe, r, c, WWF_L|WWF_TOP);
}
if (w->ww_w.b < wwnrow) {
}
if (w->ww_w.b < wwnrow) {
if ((a2 || a3) && b3)
code |= WWF_R;
if (code)
if ((a2 || a3) && b3)
code |= WWF_R;
if (code)
- wwframec(wframe, r, c, code, 1);
+ wwframec(wframe, r, c, code);
b2 = b3;
}
if ((a1 || a2) && b1 && b2)
b2 = b3;
}
if ((a1 || a2) && b1 && b2)
- wwframec(wframe, r, c, WWF_L, 1);
+ wwframec(wframe, r, c, WWF_L);
if ((a2 || a3) && b3)
code |= WWF_D;
if (code)
if ((a2 || a3) && b3)
code |= WWF_D;
if (code)
- wwframec(wframe, r, c, code, 1);
+ wwframec(wframe, r, c, code);
b2 = b3;
}
if ((a1 || a2) && b1 && b2)
b2 = b3;
}
if ((a1 || a2) && b1 && b2)
- wwframec(wframe, r, c, WWF_U, 1);
+ wwframec(wframe, r, c, WWF_U);
}
if (w->ww_w.r < wwncol) {
}
if (w->ww_w.r < wwncol) {
if ((a2 || a3) && b3)
code |= WWF_D;
if (code)
if ((a2 || a3) && b3)
code |= WWF_D;
if (code)
- wwframec(wframe, r, c, code, 1);
+ wwframec(wframe, r, c, code);
b2 = b3;
}
if ((a1 || a2) && b1 && b2)
b2 = b3;
}
if ((a1 || a2) && b1 && b2)
- wwframec(wframe, r, c, WWF_U, 1);
+ wwframec(wframe, r, c, WWF_U);
-wwframec(f, rr, cc, code, dofmap)
+wwframec(f, rr, cc, code)
register struct ww *f;
register rr, cc;
char code;
register struct ww *f;
register rr, cc;
char code;
char oldcode;
if (rr < f->ww_w.t || rr >= f->ww_w.b
char oldcode;
if (rr < f->ww_w.t || rr >= f->ww_w.b
return;
{
register struct ww *w;
return;
{
register struct ww *w;
w = wwindex[wwsmap[rr][cc]];
if (w->ww_order > f->ww_order) {
w = wwindex[wwsmap[rr][cc]];
if (w->ww_order > f->ww_order) {
wwsmap[rr][cc] = f->ww_index;
}
}
wwsmap[rr][cc] = f->ww_index;
}
}
+
+ r = rr - f->ww_w.t;
+ c = cc - f->ww_w.l;
+ if (f->ww_fmap != 0) {
- fmap = &wwfmap[rr][cc];
+ fmap = &f->ww_fmap[r][c];
oldcode = *fmap;
*fmap |= code;
if (code & WWF_TOP)
oldcode = *fmap;
*fmap |= code;
if (code & WWF_TOP)
- register r, c;
-
- r = rr - f->ww_w.t;
- c = cc - f->ww_w.l;
{
register char *win = &f->ww_win[r][c];
{
register char *win = &f->ww_win[r][c];
-static char *sccsid = "@(#)wwinit.c 3.7 83/08/19";
+static char *sccsid = "@(#)wwinit.c 3.8 83/08/19";
for (i = 0; i < wwnrow; i++)
for (j = 0; j < wwncol; j++)
wwsmap[i][j] = WWX_NOBODY;
for (i = 0; i < wwnrow; i++)
for (j = 0; j < wwncol; j++)
wwsmap[i][j] = WWX_NOBODY;
- if ((wwfmap = wwalloc(wwnrow, wwncol, sizeof (char))) == 0)
- goto bad;
- for (i = 0; i < wwnrow; i++)
- for (j = 0; j < wwncol; j++)
- wwfmap[i][j] = 0;
wwos = (union ww_char **)
wwalloc(wwnrow, wwncol, sizeof (union ww_char));
wwos = (union ww_char **)
wwalloc(wwnrow, wwncol, sizeof (union ww_char));
-static char *sccsid = "@(#)wwlabel.c 3.4 83/08/18";
+static char *sccsid = "@(#)wwlabel.c 3.5 83/08/19";
register char *fmap;
char *touched;
register char *fmap;
char *touched;
- if ((i = w->ww_w.t - 1 - f->ww_w.t) < 0)
- j = w->ww_w.l + where;
- j = MAX(j, f->ww_w.l);
- win = &f->ww_win[i][j - f->ww_w.l];
- buf = &f->ww_buf[f->ww_scroll + i][j - f->ww_w.l];
+
+ i = w->ww_w.t - 1 - f->ww_w.t;
+ if (i < 0)
+ return -1;
+ j = w->ww_w.l + where - f->ww_w.l;
+ if (j < 0)
+ j = 0;
+ win = &f->ww_win[i][j];
+ buf = &f->ww_buf[f->ww_scroll + i][j];
+ fmap = &f->ww_fmap[i][j];
+
- j = MIN(w->ww_w.r, f->ww_w.r) - j;
+ j = MIN(w->ww_w.r, f->ww_w.r) - j;
for (; j > 0 && *l;)
for (p = unctrl(*l++); j > 0 && *p; j--) {
/* can't label if not already framed */
for (; j > 0 && *l;)
for (p = unctrl(*l++); j > 0 && *p; j--) {
/* can't label if not already framed */
-static char *sccsid = "@(#)wwopen.c 3.2 83/08/19";
+static char *sccsid = "@(#)wwopen.c 3.3 83/08/19";
for (i = 0; i < w->ww_w.nr; i++)
for (j = 0; j < w->ww_w.nc; j++)
w->ww_cov[i][j] = WWX_NOBODY;
for (i = 0; i < w->ww_w.nr; i++)
for (j = 0; j < w->ww_w.nc; j++)
w->ww_cov[i][j] = WWX_NOBODY;
+
+ if (flags & WWO_FRAME) {
+ w->ww_fmap = wwalloc(w->ww_w.nr, w->ww_w.nc, sizeof (char));
+ if (w->ww_fmap == 0)
+ goto bad;
+ for (i = 0; i < wwnrow; i++)
+ for (j = 0; j < wwncol; j++)
+ w->ww_fmap[i][j] = 0;
+ }
w->ww_buf = (union ww_char **)
wwalloc(w->ww_nline, w->ww_w.nc, sizeof (union ww_char));
w->ww_buf = (union ww_char **)
wwalloc(w->ww_nline, w->ww_w.nc, sizeof (union ww_char));
-static char *sccsid = "@(#)wwunframe.c 3.6 83/08/18";
+static char *sccsid = "@(#)wwunframe.c 3.7 83/08/19";
#endif
#include "ww.h"
wwunframe(w)
register struct ww *w;
#endif
#include "ww.h"
wwunframe(w)
register struct ww *w;
-{
- wwunframe1(w, 1);
-}
-
-wwunframe1(w, dofmap)
-register struct ww *w;
-char dofmap;
{
register i, j;
register char *win;
{
register i, j;
register char *win;
for (i = w->ww_w.t; i < w->ww_w.b; i++) {
win = w->ww_win[i - w->ww_w.t];
for (i = w->ww_w.t; i < w->ww_w.b; i++) {
win = w->ww_win[i - w->ww_w.t];
+ if (w->ww_fmap)
+ fmap = w->ww_fmap[i];
for (j = w->ww_w.l; j < w->ww_w.r; j++) {
if (*win & WWM_GLS) {
win++;
for (j = w->ww_w.l; j < w->ww_w.r; j++) {
if (*win & WWM_GLS) {
win++;
continue;
}
*win++ |= WWM_GLS;
continue;
}
*win++ |= WWM_GLS;
*fmap++ = 0;
if (wwsmap[i][j] == w->ww_index) {
wwsmap[i][j] = WWX_NOBODY;
*fmap++ = 0;
if (wwsmap[i][j] == w->ww_index) {
wwsmap[i][j] = WWX_NOBODY;