BSD 4_3_Net_2 release
[unix-history] / usr / src / usr.bin / window / ww.h
index 8e152b6..9acbc8e 100644 (file)
@@ -2,23 +2,47 @@
  * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
  * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * This code is derived from software contributed to Berkeley by
+ * Edward Wang at The University of California, Berkeley.
  *
  *
- *     @(#)ww.h        3.50 (Berkeley) %G%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ww.h        3.63 (Berkeley) 3/2/91
  */
 
  */
 
+#ifdef OLD_TTY
 #include <sgtty.h>
 #include <sgtty.h>
+#else
+#include <termios.h>
+#endif
 #include <setjmp.h>
 #include <setjmp.h>
+#include <machine/endian.h>
 
 #define NWW    30              /* maximum number of windows */
 
 
 #define NWW    30              /* maximum number of windows */
 
@@ -93,21 +117,26 @@ struct ww {
 
        /* state of a tty */
 struct ww_tty {
 
        /* state of a tty */
 struct ww_tty {
+#ifdef OLD_TTY
        struct sgttyb ww_sgttyb;
        struct tchars ww_tchars;
        struct ltchars ww_ltchars;
        int ww_lmode;
        int ww_ldisc;
        struct sgttyb ww_sgttyb;
        struct tchars ww_tchars;
        struct ltchars ww_ltchars;
        int ww_lmode;
        int ww_ldisc;
+#else
+       struct termios ww_termios;
+#endif
        int ww_fflags;
 };
 
 union ww_char {
        short c_w;              /* as a word */
        struct {
        int ww_fflags;
 };
 
 union ww_char {
        short c_w;              /* as a word */
        struct {
-#if defined(vax) || defined(MIPSEL)
+#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
                char C_c;       /* the character part */
                char C_m;       /* the mode part */
                char C_c;       /* the character part */
                char C_m;       /* the mode part */
-#else
+#endif
+#if BYTE_ORDER == BIG_ENDIAN
                char C_m;       /* the mode part */
                char C_c;       /* the character part */
 #endif
                char C_m;       /* the mode part */
                char C_c;       /* the character part */
 #endif
@@ -197,14 +226,15 @@ union ww_char **wwos;             /* the old (current) screen */
 union ww_char **wwns;          /* the new (desired) screen */
 char *wwtouched;               /* wwns changed flags */
 struct ww_update *wwupd;       /* for display update */
 union ww_char **wwns;          /* the new (desired) screen */
 char *wwtouched;               /* wwns changed flags */
 struct ww_update *wwupd;       /* for display update */
-extern int wwbaudmap[];                /* maps stty() baud rate code into number */
-int wwbaud;                    /* wwbaudmap[wwoldtty.ww_sgttyb.sg_ospeed] */
+int wwospeed;                  /* output baud rate, copied from wwoldtty */
+int wwbaud;                    /* wwospeed converted into actual number */
 int wwcursorrow, wwcursorcol;  /* where we want the cursor to be */
 int wwerrno;                   /* error number */
 
        /* statistics */
 int wwnflush, wwnwr, wwnwre, wwnwrz, wwnwrc;
 int wwnwwr, wwnwwra, wwnwwrc;
 int wwcursorrow, wwcursorcol;  /* where we want the cursor to be */
 int wwerrno;                   /* error number */
 
        /* statistics */
 int wwnflush, wwnwr, wwnwre, wwnwrz, wwnwrc;
 int wwnwwr, wwnwwra, wwnwwrc;
+int wwntokdef, wwntokuse, wwntokbad, wwntoksave, wwntokc;
 int wwnupdate, wwnupdline, wwnupdmiss;
 int wwnupdscan, wwnupdclreol, wwnupdclreos, wwnupdclreosmiss, wwnupdclreosline;
 int wwnread, wwnreade, wwnreadz, wwnreadc;
 int wwnupdate, wwnupdline, wwnupdmiss;
 int wwnupdscan, wwnupdclreol, wwnupdclreos, wwnupdclreosmiss, wwnupdclreosline;
 int wwnread, wwnreade, wwnreadz, wwnreadc;
@@ -220,7 +250,7 @@ int wwnselect, wwnselecte, wwnselectz;
 #define wwupdate()     wwupdate1(0, wwnrow);
 
        /* things for handling input */
 #define wwupdate()     wwupdate1(0, wwnrow);
 
        /* things for handling input */
-int wwrint();          /* interrupt handler */
+void wwrint();         /* interrupt handler */
 struct ww *wwcurwin;   /* window to copy input into */
 char *wwib;            /* input (keyboard) buffer */
 char *wwibe;           /* wwib + sizeof buffer */
 struct ww *wwcurwin;   /* window to copy input into */
 char *wwib;            /* input (keyboard) buffer */
 char *wwibe;           /* wwib + sizeof buffer */
@@ -235,7 +265,8 @@ char wwintr;                /* interrupting */
 char wwsetjmp;         /* want a longjmp() from wwrint() and wwchild() */
 jmp_buf wwjmpbuf;      /* jmpbuf for above */
 #define wwinterrupt()  wwintr
 char wwsetjmp;         /* want a longjmp() from wwrint() and wwchild() */
 jmp_buf wwjmpbuf;      /* jmpbuf for above */
 #define wwinterrupt()  wwintr
-#define wwsetintr()    (wwintr = 1, wwsetjmp ? longjmp(wwjmpbuf, 1) : 0)
+#define wwsetintr()    do { wwintr = 1; if (wwsetjmp) longjmp(wwjmpbuf, 1); } \
+                       while (0)
 #define wwclrintr()    (wwintr = 0)
 
        /* the window virtual terminal */
 #define wwclrintr()    (wwintr = 0)
 
        /* the window virtual terminal */
@@ -251,15 +282,16 @@ jmp_buf wwjmpbuf; /* jmpbuf for above */
 #define WWT_DIM                "HE=\\ErP:HS=\\EsP:mh=\\EsP:"
 #define WWT_USR                "XE=\\Er`:XS=\\Es`:"
 #define WWT_ALDL       "al=\\EL:dl=\\EM:"
 #define WWT_DIM                "HE=\\ErP:HS=\\EsP:mh=\\EsP:"
 #define WWT_USR                "XE=\\Er`:XS=\\Es`:"
 #define WWT_ALDL       "al=\\EL:dl=\\EM:"
-#define WWT_IMEI       "im=\\E@:ei=\\EO:mi:"
+#define WWT_IMEI       "im=\\E@:ei=\\EO:ic=:mi:" /* XXX, ic for emacs bug */
+#define WWT_IC         "ic=\\EP:"
 #define WWT_DC         "dc=\\EN:"
 char wwwintermcap[1024];       /* terminal-specific but window-independent
                                   part of the window termcap */
 
        /* our functions */
 struct ww *wwopen();
 #define WWT_DC         "dc=\\EN:"
 char wwwintermcap[1024];       /* terminal-specific but window-independent
                                   part of the window termcap */
 
        /* our functions */
 struct ww *wwopen();
-int wwchild();
-int wwsuspend();
+void wwchild();
+void wwsuspend();
 char **wwalloc();
 char *wwerror();
 
 char **wwalloc();
 char *wwerror();