moved fmap into struct ww and added WWO_FRAME to allocate it.
authorEdward Wang <edward@ucbvax.Berkeley.EDU>
Sat, 20 Aug 1983 08:33:04 +0000 (00:33 -0800)
committerEdward Wang <edward@ucbvax.Berkeley.EDU>
Sat, 20 Aug 1983 08:33:04 +0000 (00:33 -0800)
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

usr/src/usr.bin/window/main.c
usr/src/usr.bin/window/ww.h
usr/src/usr.bin/window/wwbox.c
usr/src/usr.bin/window/wwframe.c
usr/src/usr.bin/window/wwinit.c
usr/src/usr.bin/window/wwlabel.c
usr/src/usr.bin/window/wwopen.c
usr/src/usr.bin/window/wwunframe.c

index fedd6b3..bfebf1e 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)main.c      3.4 83/08/19";
+static char *sccsid = "@(#)main.c      3.5 83/08/19";
 #endif
 
 #include "defs.h"
 #endif
 
 #include "defs.h"
@@ -70,7 +70,8 @@ char **argv;
                (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;
index d439f46..3338205 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- *     @(#)ww.h        3.9 83/08/19    
+ *     @(#)ww.h        3.10 83/08/19   
  */
 
 #include <stdio.h>
  */
 
 #include <stdio.h>
@@ -38,6 +38,7 @@ struct ww {
        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 */
@@ -87,12 +88,7 @@ union ww_char {
 #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
@@ -101,6 +97,12 @@ union ww_char {
 #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
 
@@ -121,7 +123,6 @@ char wwcursormodes;         /* the modes for the fake cursor */
 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 */
@@ -139,6 +140,7 @@ int wwnupdate, wwntouched, wwnmiss;
 #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"
index 892e3bf..13e567d 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)wwbox.c     3.1 83/08/18";
+static char *sccsid = "@(#)wwbox.c     3.2 83/08/19";
 #endif
 
 #include "ww.h"
 #endif
 
 #include "ww.h"
@@ -15,22 +15,16 @@ int nr, nc;
 
        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);
 }
 }
index a225fee..112acb0 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)wwframe.c   3.6 83/08/19";
+static char *sccsid = "@(#)wwframe.c   3.7 83/08/19";
 #endif
 
 #include "ww.h"
 #endif
 
 #include "ww.h"
@@ -38,7 +38,7 @@ struct ww *wframe;
                                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);
                        }
                        a1 = a2;
                        a2 = a3;
                        }
                        a1 = a2;
                        a2 = a3;
@@ -46,7 +46,7 @@ struct ww *wframe;
                        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) {
@@ -68,7 +68,7 @@ struct ww *wframe;
                                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);
                        }
                        a1 = a2;
                        a2 = a3;
                        }
                        a1 = a2;
                        a2 = a3;
@@ -76,7 +76,7 @@ struct ww *wframe;
                        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 (w->ww_w.l > 0) {
        }
 
        if (w->ww_w.l > 0) {
@@ -97,7 +97,7 @@ struct ww *wframe;
                                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);
                        }
                        a1 = a2;
                        a2 = a3;
                        }
                        a1 = a2;
                        a2 = a3;
@@ -105,7 +105,7 @@ struct ww *wframe;
                        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) {
@@ -126,7 +126,7 @@ struct ww *wframe;
                                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);
                        }
                        a1 = a2;
                        a2 = a3;
                        }
                        a1 = a2;
                        a2 = a3;
@@ -134,16 +134,16 @@ struct ww *wframe;
                        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 dofmap;
 {
 {
+       register r, c;
        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
@@ -151,7 +151,6 @@ char dofmap;
                return;
        {
                register struct ww *w;
                return;
        {
                register struct ww *w;
-               register r, c;
 
                w = wwindex[wwsmap[rr][cc]];
                if (w->ww_order > f->ww_order) {
 
                w = wwindex[wwsmap[rr][cc]];
                if (w->ww_order > f->ww_order) {
@@ -165,10 +164,13 @@ char dofmap;
                        wwsmap[rr][cc] = f->ww_index;
                }
        }
                        wwsmap[rr][cc] = f->ww_index;
                }
        }
-       if (dofmap) {
+
+       r = rr - f->ww_w.t;
+       c = cc - f->ww_w.l;
+       if (f->ww_fmap != 0) {
                register char *fmap;
 
                register char *fmap;
 
-               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)
@@ -177,10 +179,6 @@ char dofmap;
        } else
                oldcode = 0;
        {
        } else
                oldcode = 0;
        {
-               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];
 
index 80fdb96..45137f3 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)wwinit.c    3.7 83/08/19";
+static char *sccsid = "@(#)wwinit.c    3.8 83/08/19";
 #endif
 
 #include "ww.h"
 #endif
 
 #include "ww.h"
@@ -55,11 +55,6 @@ wwinit()
        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));
index f2a9f38..4c51cbc 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)wwlabel.c   3.4 83/08/18";
+static char *sccsid = "@(#)wwlabel.c   3.5 83/08/19";
 #endif
 
 #include "ww.h"
 #endif
 
 #include "ww.h"
@@ -23,18 +23,25 @@ char *l;
        register char *fmap;
        char *touched;
 
        register char *fmap;
        char *touched;
 
-       if ((i = w->ww_w.t - 1 - f->ww_w.t) < 0)
+       if (f->ww_fmap == 0)
                return -1;
                return -1;
-       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];
+
        i += f->ww_w.t;
        i += f->ww_w.t;
+       j += f->ww_w.l;
        ns = &wwns[i][j];
        ns = &wwns[i][j];
-       fmap = &wwfmap[i][j];
        touched = &wwtouched[i];
        touched = &wwtouched[i];
-       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 */
index 579a000..88ef21a 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)wwopen.c    3.2 83/08/19";
+static char *sccsid = "@(#)wwopen.c    3.3 83/08/19";
 #endif
 
 #include "ww.h"
 #endif
 
 #include "ww.h"
@@ -59,6 +59,15 @@ wwopen(flags, nrow, ncol, row, col, nline)
        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));
index b1616c0..5de0d34 100644 (file)
@@ -1,18 +1,11 @@
 #ifndef lint
 #ifndef lint
-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;
@@ -21,7 +14,8 @@ char dofmap;
 
        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];
-               fmap = wwfmap[i];
+               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++;
@@ -29,7 +23,7 @@ char dofmap;
                                continue;
                        }
                        *win++ |= WWM_GLS;
                                continue;
                        }
                        *win++ |= WWM_GLS;
-                       if (dofmap)
+                       if (w->ww_fmap)
                                *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;