make sure unavailable mode bits are not set,
[unix-history] / usr / src / usr.bin / window / ww.h
index dc02cad..a7c8f61 100644 (file)
@@ -1,5 +1,11 @@
 /*
 /*
- *     @(#)ww.h        3.26 84/03/03   
+ * @(#)ww.h    3.37 %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.
  */
 
 #include <sgtty.h>
  */
 
 #include <sgtty.h>
@@ -23,17 +29,14 @@ struct ww_pos {
 
        /* the window structure */
 struct ww {
 
        /* the window structure */
 struct ww {
+               /* general flags and states */
+       char ww_state;          /* state of window */
+       char ww_oflags;         /* wwopen flags */
+
+               /* information for overlap */
        struct ww *ww_forw;     /* doubly linked list, for overlapping info */
        struct ww *ww_back;
        struct ww *ww_forw;     /* doubly linked list, for overlapping info */
        struct ww *ww_back;
-       char ww_state;          /* state of window creation */
-       char ww_wstate;         /* state for printing charcters */
-       char ww_modes;          /* current printing modes */
-       char ww_insert :1;      /* insert mode, for printing */
-       char ww_mapnl :1;       /* map \n to \r\n */
-       char ww_hascursor :1;   /* has fake cursor */
-       char ww_hasframe :1;    /* frame it */
-       char ww_nointr : 1;     /* wwwrite() not interruptable */
-       char ww_index;          /* the index, for wwindex[] */
+       char ww_index;          /* the window index, for wwindex[] */
        char ww_order;          /* the overlapping order */
 
                /* sizes and positions */
        char ww_order;          /* the overlapping order */
 
                /* sizes and positions */
@@ -48,21 +51,34 @@ struct ww {
        char **ww_fmap;         /* map for frame and box windows */
        short *ww_nvis;         /* how many ww_buf chars are visible per row */
 
        char **ww_fmap;         /* map for frame and box windows */
        short *ww_nvis;         /* how many ww_buf chars are visible per row */
 
+               /* information for wwwrite() and company */
+       char ww_wstate;         /* state for outputting characters */
+       char ww_modes;          /* current display modes */
+       char ww_insert;         /* insert mode */
+       char ww_mapnl;          /* map \n to \r\n */
+       char ww_noupdate;       /* don't do updates in wwwrite() */
+       char ww_unctrl;         /* expand control characters */
+       char ww_nointr;         /* wwwrite() not interruptable */
+       char ww_hascursor;      /* has fake cursor */
+
                /* things for the window process and io */
                /* things for the window process and io */
-       int ww_pty;             /* file descriptor of pty */
+       char ww_ispty;          /* ww_pty is really a pty, not socket pair */
+       char ww_stopped;        /* output stopped */
+       int ww_pty;             /* file descriptor of pty or socket pair */
+       int ww_socket;          /* other end of socket pair */
        int ww_pid;             /* pid of process, if WWS_HASPROC true */
        char ww_ttyname[11];    /* "/dev/ttyp?" */
        char *ww_ob;            /* output buffer */
        char *ww_obe;           /* end of ww_ob */
        int ww_pid;             /* pid of process, if WWS_HASPROC true */
        char ww_ttyname[11];    /* "/dev/ttyp?" */
        char *ww_ob;            /* output buffer */
        char *ww_obe;           /* end of ww_ob */
-       char *ww_obp;           /* current position in ww_ob */
-       int ww_obc;             /* character count */
-       char ww_stopped;        /* output stopped */
+       char *ww_obp;           /* current read position in ww_ob */
+       char *ww_obq;           /* current write position in ww_ob */
 
                /* things for the user, they really don't belong here */
 
                /* things for the user, they really don't belong here */
+       char ww_id;             /* the user window id */
        char ww_center;         /* center the label */
        char ww_center;         /* center the label */
-       int ww_id;              /* the user window id */
+       char ww_hasframe;       /* frame it */
        char *ww_label;         /* the user supplied label */
        char *ww_label;         /* the user supplied label */
-       struct ww_pos ww_altpos;/* alternate position */
+       struct ww_dim ww_alt;   /* alternate position and size */
 };
 
        /* state of a tty */
 };
 
        /* state of a tty */
@@ -78,7 +94,7 @@ struct ww_tty {
 union ww_char {
        short c_w;              /* as a word */
        struct {
 union ww_char {
        short c_w;              /* as a word */
        struct {
-#ifndef O_SUN
+#ifndef mc68000
                char C_c;       /* the character part */
                char C_m;       /* the mode part */
 #else
                char C_c;       /* the character part */
                char C_m;       /* the mode part */
 #else
@@ -100,7 +116,9 @@ union ww_char {
 #define WWM_BLK                0x02    /* blinking */
 #define WWM_UL         0x04    /* underlined */
 #define WWM_GRP                0x08    /* graphics */
 #define WWM_BLK                0x02    /* blinking */
 #define WWM_UL         0x04    /* underlined */
 #define WWM_GRP                0x08    /* graphics */
-#define WWM_GLS                0x10    /* window only, glass, i.e. transparent */
+#define WWM_DIM                0x10    /* half intensity */
+#define WWM_USR                0x20    /* user specified mode */
+#define WWM_GLS                0x40    /* window only, glass, i.e., transparent */
 
        /* ww_state values */
 #define WWS_INITIAL    0       /* just opened */
 
        /* ww_state values */
 #define WWS_INITIAL    0       /* just opened */
@@ -118,9 +136,10 @@ union ww_char {
 
        /* flags to wwopen() */
 #define WWO_PTY                0x01            /* want pty */
 
        /* 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 */
+#define WWO_SOCKET     0x02            /* want socket pair */
+#define WWO_REVERSE    0x04            /* make it all reverse video */
+#define WWO_GLASS      0x08            /* make it all glass */
+#define WWO_FRAME      0x10            /* this is a frame window */
 
        /* special ww_index value */
 #define WWX_NOBODY     NWW
 
        /* special ww_index value */
 #define WWX_NOBODY     NWW
@@ -151,6 +170,7 @@ struct ww_tty wwwintty;             /* the terminal settings for windows */
 char *wwterm;                  /* the terminal name */
 char wwtermcap[1024];          /* place for the termcap */
 char wwkeys[512];              /* termcap fields for the function keys */
 char *wwterm;                  /* the terminal name */
 char wwtermcap[1024];          /* place for the termcap */
 char wwkeys[512];              /* termcap fields for the function keys */
+char wwwintermcap[1024];       /* termcap for windows */
 
        /* generally useful variables */
 int wwnrow, wwncol;            /* the screen size */
 
        /* generally useful variables */
 int wwnrow, wwncol;            /* the screen size */
@@ -199,21 +219,22 @@ char *wwibq;              /* current write position in buffer */
 
        /* the window virtual terminal */
 #define WWT_TERM       "TERM=window"
 
        /* the window virtual terminal */
 #define WWT_TERM       "TERM=window"
-#define WWT_TERMCAP    "WW|window|window package:\
+#define WWT_TERMCAP    "WW|window|window program:\
        :cr=^M:nl=^J:bl=^G:\
        :al=\\EL:am:le=^H:bs:cd=\\EJ:ce=\\EK:cl=\\EE:cm=\\EY%+ %+ :\
        :da:db:dc=\\EN:dl=\\EM:do=\\EB:ei=\\EO:ho=\\EH:im=\\E@:mi:\
        :cr=^M:nl=^J:bl=^G:\
        :al=\\EL:am:le=^H:bs:cd=\\EJ:ce=\\EK:cl=\\EE:cm=\\EY%+ %+ :\
        :da:db:dc=\\EN:dl=\\EM:do=\\EB:ei=\\EO:ho=\\EH:im=\\E@:mi:\
-       :nd=\\EC:ta=^I:pt:up=\\EA:"
-#define WWT_REV                "se=\\Eq:so=\\Ep:"
-#define WWT_UL         "ue=\\Es:us=\\Er:"
-#define WWT_GRP                "ae=\\EG:as=\\EF:"
+       :nd=\\EC:ta=^I:pt:up=\\EA:me=\\Er^?:"
+#define WWT_REV                "se=\\ErA:so=\\EsA:mr=\\EsA:"
+#define WWT_BLK                "BE=\\ErB:BS=\\EsB:mb=\\EsB:"
+#define WWT_UL         "ue=\\ErD:us=\\EsD:"
+#define WWT_GRP                "ae=\\ErH:as=\\EsH:"
+#define WWT_DIM                "HE=\\ErP:HS=\\EsP:mh=\\EsP:"
+#define WWT_USR                "XE=\\Er`:XS=\\Es`:"
 
        /* our functions */
 struct ww *wwopen();
 
        /* our functions */
 struct ww *wwopen();
-struct ww *wwfind();
 int wwchild();
 int wwsuspend();
 int wwchild();
 int wwsuspend();
-char *unctrl();
 char **wwalloc();
 char *wwerror();
 
 char **wwalloc();
 char *wwerror();
 
@@ -231,17 +252,3 @@ char *sprintf();
 #undef MAX
 #define MIN(x, y)      ((x) > (y) ? (y) : (x))
 #define MAX(x, y)      ((x) > (y) ? (x) : (y))
 #undef MAX
 #define MIN(x, y)      ((x) > (y) ? (y) : (x))
 #define MAX(x, y)      ((x) > (y) ? (x) : (y))
-
-#undef CTRL
-#define CTRL(c)                ('c'&0x1f)
-#define DEL            0x7f
-#define ISCTRL(c)      ((c) < ' ' & (c) != '\t' || (c) >= DEL)
-
-#if defined(O_4_1A)||defined(O_4_1C)
-int (*sigset)();
-#define signal(s, v)   sigset((s), (v))
-#else
-#define sigmask(s)     (1 << (s) - 1)
-#define sighold(s)     sigblock(sigmask(s))
-#define sigrelse(s)    sigsetmask(sigblock(0) & ~sigmask(s))
-#endif