*** empty log message ***
authorJim Blandy <jimb@redhat.com>
Sat, 14 Mar 1992 20:43:29 +0000 (20:43 +0000)
committerJim Blandy <jimb@redhat.com>
Sat, 14 Mar 1992 20:43:29 +0000 (20:43 +0000)
src/callproc.c
src/m/pfa50.h
src/sysdep.c
src/unexec.c

index cc2c2d7..fff728a 100644 (file)
@@ -1,5 +1,5 @@
 /* Synchronous subprocess invocation for GNU Emacs.
-   Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1988, 1992 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -382,7 +382,6 @@ child_setup (in, out, err, new_argv, env, set_pgrp, current_dir)
      If using vfork and C_ALLOCA it is safe because that changes
      the superior's static variables as if the superior had done alloca
      and will be cleaned up in the usual way.  */
-
   {
     register unsigned char *temp;
     register int i;
@@ -438,6 +437,11 @@ child_setup (in, out, err, new_argv, env, set_pgrp, current_dir)
   close (out);
   close (err);
 
+#ifdef USG
+  setpgrp ();                  /* No arguments but equivalent in this case */
+#else
+  setpgrp (pid, pid);
+#endif /* USG */
   setpgrp_of_tty (pid);
 
 #ifdef vipc
index b946490..2368a53 100644 (file)
@@ -1,4 +1,4 @@
-/* machine description file for PFU A-series.
+/* Machine description file for PFU A-series.
    Copyright (C) 1988 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -112,4 +112,3 @@ and this notice must be preserved on all copies.  */
 #define NO_SIOCTL_H
 
 #undef SIGIO
-
index fd526e3..1483898 100644 (file)
@@ -1,5 +1,5 @@
 /* Interfaces to system-dependent kernel and library entries.
-   Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1988, 1992 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -100,10 +100,7 @@ extern char *sys_errlist[];
 #endif /* DGUX */
 
 #include <sys/ioctl.h>
-
-#ifdef APOLLO
-#undef TIOCSTART
-#endif
+#include "systerm.h"
 
 #ifdef BSD
 #ifdef BSD4_1
@@ -126,63 +123,10 @@ extern char *sys_errlist[];
 #define LLITOUT 0
 #endif /* 4.1 */
 
-#ifdef HAVE_TERMIOS
-#include <termio.h>
-#include <termios.h>
-#ifdef TIOCGETP
-#undef TIOCGETP
-#endif
-#define TIOCGETP TCGETS
-#undef TIOCSETN
-#define TIOCSETN TCSETSW
-#undef TIOCSETP
-#define TIOCSETP TCSETSF
-#undef TCSETAW
-#define TCSETAW TCSETS
-#define TERMINAL struct termios
-#define OSPEED(str) (str.c_cflag & CBAUD)
-#define SETOSPEED(str,new) (str.c_cflag = (str.c_cflag & ~CBAUD) | (new))
-#define TABS_OK(str) ((str.c_oflag & TABDLY) != TAB3)
-#else
-#define tcgetattr(fd, addr) ioctl (fd, TIOCGETP, addr)
-#endif /* HAVE_TERMIOS */
-
-#ifdef HAVE_TERMIO
-#include <termio.h>
-#undef TIOCGETP
-#define TIOCGETP TCGETA
-#undef TIOCSETN
-/* Wait for output to finish before switching modes.
-   Otherwise screen can be garbaged.  */
-#define TIOCSETN TCSETAW
-#undef TIOCSETP
-#define TIOCSETP TCSETAF
-#define TERMINAL struct termio
-#define OSPEED(str) (str.c_cflag & CBAUD)
-#define SETOSPEED(str,new) (str.c_cflag = (str.c_cflag & ~CBAUD) | (new))
-#define TABS_OK(str) ((str.c_oflag & TABDLY) != TAB3)
-#endif /* HAVE_TERMIO */
-
-#ifdef BROKEN_TIOCGETC
-#undef TIOCGETC  /* Avoid confusing some conditionals that test this.  */
-#endif
-
 #ifdef BROKEN_TIOCGWINSZ
 #undef TIOCGWINSZ
 #endif
 
-#ifndef HAVE_TERMIO
-#ifndef VMS
-#include <sgtty.h>
-#define TERMINAL struct sgttyb
-#define OSPEED(str) str.sg_ospeed
-#define SETOSPEED(str,new) (str.sg_ospeed = (new))
-#define TABS_OK(str) ((str.sg_flags & XTABS) != XTABS)
-#undef TCSETAW
-#define TCSETAW TIOCSETN
-#endif /* not VMS */
-#endif /* not HAVE_TERMIO */
-
 #ifdef USG
 #include <sys/utsname.h>
 #include <string.h>
@@ -198,13 +142,6 @@ extern char *sys_errlist[];
 #include <sys/ptem.h>
 #endif
 #endif /* TIOCGWINSZ */
-#ifdef NEED_TIME_H
-#include <time.h>
-#else /* not NEED_TIME_H */
-#ifdef HAVE_TIMEVAL
-#include <sys/time.h>
-#endif /* HAVE_TIMEVAL */
-#endif /* not NEED_TIME_H */
 #endif /* USG */
 
 #ifdef NEED_BSDTTY
@@ -225,9 +162,11 @@ extern char *sys_errlist[];
 #include <sys/pty.h>
 #endif
 
-#ifdef BROKEN_FIONREAD
-#undef FIONREAD
-#undef FASYNC
+/* saka@pfu.fujitsu.co.JP writes:
+   FASYNC defined in this file. But, FASYNC don't working.
+   so no problem, because unrequest_sigio only need. */
+#if defined (pfa)
+#include <sys/file.h>
 #endif
 
 extern int quit_char;
@@ -244,23 +183,8 @@ extern int quit_char;
 #include "ndir.h"
 #endif /* NONSYSTEM_DIR_LIBRARY */
 
-#include "emacssignal.h"
-
-#ifndef sigunblock
-#define sigunblock(SIG) \
-{ SIGMASKTYPE omask = sigblock (SIGEMPTYMASK); sigsetmask (omask & ~SIG); }
-#endif
-
-/* Define SIGCHLD as an alias for SIGCLD.  There are many conditionals
-   testing SIGCHLD.  */
-
-#ifndef VMS
-#ifdef SIGCLD
-#ifndef SIGCHLD
-#define SIGCHLD SIGCLD
-#endif /* not SIGCHLD */
-#endif /* SIGCLD */
-#endif /* not VMS */
+#include "syssignal.h"
+#include "systime.h"
 
 static int baud_convert[] =
 #ifdef BAUD_CONVERT
@@ -274,6 +198,12 @@ static int baud_convert[] =
 
 extern short ospeed;
 
+/* The file descriptor for Emacs's input terminal.
+   Under Unix, this is always left zero;
+   under VMS, we place the input channel number here.
+   This allows us to write more code that works for both VMS and Unix.  */
+static int input_fd;
+
 #ifdef VMS
 static struct iosb
 {
@@ -293,7 +223,6 @@ int process_ef = 0;
 int input_eflist;
 int timer_eflist;
 
-static int input_chan;
 static $DESCRIPTOR (input_dsc, "TT");
 static int terminator_mask[2] = { 0, 0 };
 
@@ -311,14 +240,11 @@ static struct sensemode {
   unsigned long tt_char : 24, scr_len : 8;
   unsigned long tt2_char;
 } sensemode_iosb;
-#define TERMINAL struct sensemode
-#define OSPEED(str) (str.xmit_baud)
-#define TABS_OK(str) ((str.tt_char & TT$M_MECHTAB) != 0)
 #endif /* VMS */
 
 discard_tty_input ()
 {
-  TERMINAL buf;
+  struct emacs_tty buf;
 
   if (noninteractive)
     return;
@@ -330,8 +256,8 @@ discard_tty_input ()
 
 #ifdef VMS
   end_kbd_input ();
-  SYS$QIOW (0, input_chan, IO$_READVBLK|IO$M_PURGE, input_iosb, 0, 0,
-           &buf, 0, 0, terminator_mask, 0, 0);
+  SYS$QIOW (0, input_fd, IO$_READVBLK|IO$M_PURGE, input_iosb, 0, 0,
+           &buf.main, 0, 0, terminator_mask, 0, 0);
   queue_kbd_input ();
 #else /* not VMS */
 #ifdef APOLLO
@@ -340,12 +266,8 @@ discard_tty_input ()
     ioctl (0, TIOCFLUSH, &zero);
   }
 #else /* not Apollo */
-  tcgetattr (0, &buf);
-#ifndef HAVE_TCATTR
-  ioctl (0, TIOCSETP, &buf);
-#else
-  tcsetattr (0, TCSAFLUSH, &buf);
-#endif
+  EMACS_GET_TTY (input_fd, &buf);
+  EMACS_SET_TTY (input_fd, &buf, 0);
 #endif /* not Apollo */
 #endif /* not VMS */
 }
@@ -367,20 +289,39 @@ stuff_char (c)
 
 init_baud_rate ()
 {
-  TERMINAL sg;
-
   if (noninteractive)
     ospeed = 0;
   else
     {
 #ifdef VMS
-      SYS$QIOW (0, input_chan, IO$_SENSEMODE, &sg, 0, 0,
+      struct sensemode sg;
+
+      SYS$QIOW (0, input_fd, IO$_SENSEMODE, &sg, 0, 0,
                &sg.class, 12, 0, 0, 0, 0 );
-#else
-      SETOSPEED (sg, B9600);
+      ospeed = sg.xmit_baud;
+#else /* not VMS */
+#ifdef HAVE_TERMIO
+      struct termio sg;
+
+      sg.c_cflag = (sg.c_cflag & ~CBAUD) | B9600;
+      tcgetattr (0, &sg);
+      ospeed = sg.c_cflag & CBAUD;
+#else /* neither VMS nor TERMIO */
+#ifdef HAVE_TERMIOS
+      struct termios sg;
+
+      sg.c_cflag = (sg.c_cflag & ~CBAUD) | B9600;
       tcgetattr (0, &sg);
+      ospeed = sg.c_cflag & CBAUD;
+#else /* neither VMS nor TERMIO nor TERMIOS */
+      struct sgttyb sg;
+      
+      sg.sg_ospeed = B9600;
+      ioctl (0, TIOCGETP, &sg);
+      ospeed = sg.sg_ospeed;
+#endif /* not HAVE_TERMIOS */
+#endif /* not HAVE_TERMIO */
 #endif /* not VMS */
-      ospeed = OSPEED (sg);
     }
    
   baud_rate = (ospeed < sizeof baud_convert / sizeof baud_convert[0]
@@ -498,57 +439,64 @@ flush_pending_output (channel)
 child_setup_tty (out)
      int out;
 {
-  TERMINAL s;
+  struct emacs_tty s;
+
+  EMACS_GET_TTY (out, &s);
 
-  tcgetattr (out, &s);
 #ifdef HAVE_TERMIO
-  s.c_oflag |= OPOST;          /* Enable output postprocessing */
-  s.c_oflag &= ~ONLCR;         /* Disable map of NL to CR-NL on output */
-  s.c_oflag &= ~(NLDLY|CRDLY|TABDLY|BSDLY|VTDLY|FFDLY);        /* No output delays */
-  s.c_lflag &= ~ECHO;          /* Disable echo */
-  s.c_lflag |= ISIG;           /* Enable signals */
-  s.c_iflag &= ~IUCLC;         /* Disable map of upper case to lower on input */
-  s.c_oflag &= ~OLCUC;         /* Disable map of lower case to upper on output */
-/* said to be unnecesary
-  s.c_cc[VMIN] = 1;            /* minimum number of characters to accept
-  s.c_cc[VTIME] = 0;           /* wait forever for at least 1 character
-*/
-  s.c_lflag |= ICANON;         /* Enable erase/kill and eof processing */
-  s.c_cc[VEOF] = 04;           /* insure that EOF is Control-D */
-  s.c_cc[VERASE] = 0377;       /* disable erase processing */
-  s.c_cc[VKILL] = 0377;                /* disable kill processing */
+  s.main.c_oflag |= OPOST;     /* Enable output postprocessing */
+  s.main.c_oflag &= ~ONLCR;    /* Disable map of NL to CR-NL on output */
+  s.main.c_oflag &= ~(NLDLY|CRDLY|TABDLY|BSDLY|VTDLY|FFDLY);
+                               /* No output delays */
+  s.main.c_lflag &= ~ECHO;     /* Disable echo */
+  s.main.c_lflag |= ISIG;      /* Enable signals */
+  s.main.c_iflag &= ~IUCLC;    /* Disable map of upper case to lower on
+                                  input */
+  s.main.c_oflag &= ~OLCUC;    /* Disable map of lower case to upper on
+                                  output */
+#if 0
+  /* Said to be unnecesary:  */
+  s.main.c_cc[VMIN] = 1;       /* minimum number of characters to accept  */
+  s.main.c_cc[VTIME] = 0;      /* wait forever for at least 1 character  */
+#endif
+
+  s.main.c_lflag |= ICANON;    /* Enable erase/kill and eof processing */
+  s.main.c_cc[VEOF] = 04;      /* insure that EOF is Control-D */
+  s.main.c_cc[VERASE] = 0377;  /* disable erase processing */
+  s.main.c_cc[VKILL] = 0377;   /* disable kill processing */
+
 #ifdef HPUX
-  s.c_cflag = (s.c_cflag & ~CBAUD) | B9600; /* baud rate sanity */
+  s.main.c_cflag = (s.main.c_cflag & ~CBAUD) | B9600; /* baud rate sanity */
 #endif /* HPUX */
+
 #ifdef AIX
 /* AIX enhanced edit loses NULs, so disable it */
 #ifndef IBMR2AIX
-  s.c_line = 0;
-  s.c_iflag &= ~ASCEDIT;
+  s.main.c_line = 0;
+  s.main.c_iflag &= ~ASCEDIT;
 #endif
   /* Also, PTY overloads NUL and BREAK.
      don't ignore break, but don't signal either, so it looks like NUL.  */
-  s.c_iflag &= ~IGNBRK;
-  s.c_iflag &= ~BRKINT;
-/* QUIT and INTR work better as signals, so disable character forms */
-  s.c_cc[VQUIT] = 0377;
-  s.c_cc[VINTR] = 0377;
-  s.c_cc[VEOL] = 0377;
-  s.c_lflag &= ~ISIG;
-  s.c_cflag = (s.c_cflag & ~CBAUD) | B9600; /* baud rate sanity */
+  s.main.c_iflag &= ~IGNBRK;
+  s.main.c_iflag &= ~BRKINT;
+  /* QUIT and INTR work better as signals, so disable character forms */
+  s.main.c_cc[VQUIT] = 0377;
+  s.main.c_cc[VINTR] = 0377;
+  s.main.c_cc[VEOL] = 0377;
+  s.main.c_lflag &= ~ISIG;
+  s.main.c_cflag = (s.main.c_cflag & ~CBAUD) | B9600; /* baud rate sanity */
 #endif /* AIX */
 
 #else /* not HAVE_TERMIO */
-  s.sg_flags &= ~(ECHO | CRMOD | ANYP | ALLDELAY | RAW | LCASE | CBREAK | TANDEM);
-  s.sg_erase = 0377;
-  s.sg_kill = 0377;
+
+  s.main.sg_flags &= ~(ECHO | CRMOD | ANYP | ALLDELAY | RAW | LCASE
+                      | CBREAK | TANDEM);
+  s.main.sg_erase = 0377;
+  s.main.sg_kill = 0377;
+
 #endif /* not HAVE_TERMIO */
 
-#ifndef HAVE_TCATTR
-  ioctl (out, TIOCSETN, &s);
-#else
-  tcsetattr (out, TCSADRAIN, &s);
-#endif
+  EMACS_SET_TTY (out, &s, 0);
 
 #ifdef BSD4_1
   if (interrupt_input)
@@ -569,15 +517,7 @@ child_setup_tty (out)
 setpgrp_of_tty (pid)
      int pid;
 {
-#ifdef IBMR2AIX
-  tcsetpgrp ( 0, pid);
-#else
-#ifdef TIOCSPGRP
-  ioctl (0, TIOCSPGRP, &pid);
-#else
-  /* Just ignore this for now and hope for the best */
-#endif
-#endif
+  EMACS_SET_TTY_PGRP (input_fd, pid);
 }
 
 /* Record a signal code and the handler for it.  */
@@ -617,11 +557,7 @@ sys_suspend ()
 #else
 #ifdef SIGTSTP
 
-#ifdef BSD
-  killpg (getpgrp (0), SIGTSTP);
-#else
-  kill (-getpgrp (0), SIGTSTP);
-#endif
+  EMACS_KILLPG (getpgrp (0), SIGTSTP);
 
 #else /* No SIGTSTP */
 #ifdef USG_JOBCTRL /* If you don't know what this is don't mess with it */
@@ -790,26 +726,21 @@ unrequest_sigio ()
 #endif /* FASYNC */
 #endif /* F_SETFL */
 \f
-TERMINAL old_gtty;             /* The initial tty mode bits */
+/* The initial tty mode bits */
+struct emacs_tty old_tty;
 
 int term_initted;              /* 1 if outer tty status has been recorded */
 
+#ifdef BSD4_1
+/* BSD 4.1 needs to keep track of the lmode bits in order to start
+   sigio.  */
+int lmode;
+#endif
+
 #ifdef F_SETOWN
 int old_fcntl_owner;
 #endif /* F_SETOWN */
 
-#ifdef TIOCGLTC
-struct ltchars old_ltchars;
-#endif /* TIOCGLTC */
-
-#ifdef TIOCGETC
-struct tchars old_tchars;
-int old_lmode;
-
-int lmode;                     /* Current lmode value. */
-                               /* Needed as global for 4.1 */
-#endif /* TIOCGETC */
-
 /* This may also be defined in stdio,
    but if so, this does no harm,
    and using the same name avoids wasting the other one's space.  */
@@ -829,10 +760,8 @@ static struct ltchars new_ltchars = {-1,-1,-1,-1,-1,-1};
 
 init_sys_modes ()
 {
-  TERMINAL tty;
-#ifdef TIOCGETC
-  struct tchars tchars;
-#endif
+  struct emacs_tty tty;
+
 #ifdef VMS
 #if 0
   static int oob_chars[2] = {0, 1 << 7}; /* catch C-g's */
@@ -866,115 +795,147 @@ init_sys_modes ()
     ((unsigned) 1 << (process_ef % 32));
   timer_eflist = ((unsigned) 1 << (input_ef % 32)) |
     ((unsigned) 1 << (timer_ef % 32));
-  SYS$QIOW (0, input_chan, IO$_SENSEMODE, &old_gtty, 0, 0,
-           &old_gtty.class, 12, 0, 0, 0, 0);
 #ifndef VMS4_4
   sys_access_reinit ();
 #endif
-#else /* not VMS */
-  tcgetattr (0, &old_gtty);
 #endif /* not VMS */
+
+  EMACS_GET_TTY (input_fd, &old_tty);
+
   if (!read_socket_hook && EQ (Vwindow_system, Qnil))
     {
-      tty = old_gtty;
+      tty = old_tty;
 
 #ifdef HAVE_TERMIO
-      tty.c_iflag |= (IGNBRK); /* Ignore break condition */
-      tty.c_iflag &= ~ICRNL;   /* Disable map of CR to NL on input */
+      tty.main.c_iflag |= (IGNBRK);    /* Ignore break condition */
+      tty.main.c_iflag &= ~ICRNL;      /* Disable map of CR to NL on input */
 #ifdef ISTRIP
-      tty.c_iflag &= ~ISTRIP;  /* don't strip 8th bit on input */
+      tty.main.c_iflag &= ~ISTRIP;     /* don't strip 8th bit on input */
 #endif
-      tty.c_lflag &= ~ECHO;    /* Disable echo */
-      tty.c_lflag &= ~ICANON;  /* Disable erase/kill processing */
-      tty.c_lflag |= ISIG;     /* Enable signals */
+      tty.main.c_lflag &= ~ECHO;       /* Disable echo */
+      tty.main.c_lflag &= ~ICANON;     /* Disable erase/kill processing */
+      tty.main.c_lflag |= ISIG;        /* Enable signals */
       if (flow_control)
        {
-         tty.c_iflag |= IXON;  /* Enable start/stop output control */
+         tty.main.c_iflag |= IXON;     /* Enable start/stop output control */
 #ifdef IXANY
-         tty.c_iflag &= ~IXANY;
+         tty.main.c_iflag &= ~IXANY;
 #endif /* IXANY */
        }
       else
-       tty.c_iflag &= ~IXON;   /* Disable start/stop output control */
-      tty.c_oflag &= ~ONLCR;   /* Disable map of NL to CR-NL on output */
-      tty.c_oflag &= ~TAB3;    /* Disable tab expansion */
+       tty.main.c_iflag &= ~IXON;      /* Disable start/stop output control */
+      tty.main.c_oflag &= ~ONLCR;      /* Disable map of NL to CR-NL 
+                                          on output */
+      tty.main.c_oflag &= ~TAB3;       /* Disable tab expansion */
 #ifdef CS8
       if (meta_key)
        {
-         tty.c_cflag |= CS8;   /* allow 8th bit on input */
-         tty.c_cflag &= ~PARENB;/* Don't check parity */
+         tty.main.c_cflag |= CS8;      /* allow 8th bit on input */
+         tty.main.c_cflag &= ~PARENB;/* Don't check parity */
        }
 #endif
-      tty.c_cc[VINTR] = quit_char;     /* C-g (usually) gives SIGINT */
+      tty.main.c_cc[VINTR] = quit_char;        /* C-g (usually) gives SIGINT */
       /* Set up C-g for both SIGQUIT and SIGINT.
         We don't know which we will get, but we handle both alike
         so which one it really gives us does not matter.  */
-      tty.c_cc[VQUIT] = quit_char;
-      tty.c_cc[VMIN] = 1;      /* Input should wait for at least 1 char */
-      tty.c_cc[VTIME] = 0;     /* no matter how long that takes.  */
+      tty.main.c_cc[VQUIT] = quit_char;
+      tty.main.c_cc[VMIN] = 1; /* Input should wait for at least 1 char */
+      tty.main.c_cc[VTIME] = 0;        /* no matter how long that takes.  */
 #ifdef VSWTCH
-      tty.c_cc[VSWTCH] = CDEL; /* Turn off shell layering use of C-z */
+      tty.main.c_cc[VSWTCH] = CDEL;    /* Turn off shell layering use
+                                          of C-z */
 #endif /* VSWTCH */
 #if defined (mips) || defined (HAVE_TCATTR)
              /* The following code looks like the right thing in general,
                but it is said to cause a crash on USG V.4.
                Let's play safe by turning it on only for the MIPS.  */
 #ifdef VSUSP
-      tty.c_cc[VSUSP] = CDEL;  /* Turn off mips handling of C-z.  */
+      tty.main.c_cc[VSUSP] = CDEL;     /* Turn off mips handling of C-z.  */
 #endif /* VSUSP */
 #ifdef V_DSUSP
-      tty.c_cc[V_DSUSP] = CDEL;        /* Turn off mips handling of C-y.  */
+      tty.main.c_cc[V_DSUSP] = CDEL;   /* Turn off mips handling of C-y.  */
 #endif /* V_DSUSP */
 #endif /* mips or HAVE_TCATTR */
 #ifdef AIX
 #ifndef IBMR2AIX
       /* AIX enhanced edit loses NULs, so disable it */
-      tty.c_line = 0;
-      tty.c_iflag &= ~ASCEDIT;
+      tty.main.c_line = 0;
+      tty.main.c_iflag &= ~ASCEDIT;
 #else
-      tty.c_cc[VSTRT] = 255;
-      tty.c_cc[VSTOP] = 255;
-      tty.c_cc[VSUSP] = 255;
-      tty.c_cc[VDSUSP] = 255;
+      tty.main.c_cc[VSTRT] = 255;
+      tty.main.c_cc[VSTOP] = 255;
+      tty.main.c_cc[VSUSP] = 255;
+      tty.main.c_cc[VDSUSP] = 255;
 #endif /* IBMR2AIX */
       /* Also, PTY overloads NUL and BREAK.
         don't ignore break, but don't signal either, so it looks like NUL.
         This really serves a purpose only if running in an XTERM window
         or via TELNET or the like, but does no harm elsewhere.  */
-      tty.c_iflag &= ~IGNBRK;
-      tty.c_iflag &= ~BRKINT;
+      tty.main.c_iflag &= ~IGNBRK;
+      tty.main.c_iflag &= ~BRKINT;
 #endif
 #else /* if not HAVE_TERMIO */
 #ifdef VMS
-      tty.tt_char |= TT$M_NOECHO;
+      tty.main.tt_char |= TT$M_NOECHO;
       if (meta_key)
-       tty.tt_char |= TT$M_EIGHTBIT
+       tty.main.tt_char |= TT$M_EIGHTBIT
       if (flow_control)
-       tty.tt_char |= TT$M_TTSYNC;
+       tty.main.tt_char |= TT$M_TTSYNC;
       else
-       tty.tt_char &= ~TT$M_TTSYNC;
-      tty.tt2_char |= TT2$M_PASTHRU | TT2$M_XON;
+       tty.main.tt_char &= ~TT$M_TTSYNC;
+      tty.main.tt2_char |= TT2$M_PASTHRU | TT2$M_XON;
 #else /* not VMS (BSD, that is) */
-      tty.sg_flags &= ~(ECHO | CRMOD | XTABS);
+      tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS);
       if (meta_key)
-       tty.sg_flags |= ANYP;
-      tty.sg_flags |= interrupt_input ? RAW : CBREAK;
+       tty.main.sg_flags |= ANYP;
+      tty.main.sg_flags |= interrupt_input ? RAW : CBREAK;
 #endif /* not VMS (BSD, that is) */
 #endif /* not HAVE_TERMIO */
 
-#ifdef VMS
-      SYS$QIOW (0, input_chan, IO$_SETMODE, &input_iosb, 0, 0,
-               &tty.class, 12, 0, 0, 0, 0);
-#else
-#ifndef HAVE_TCATTR
-      ioctl (0, TIOCSETN, &tty);
-#else
-      tcsetattr (0, TCSADRAIN, &tty);
+      /* If going to use CBREAK mode, we must request C-g to interrupt
+        and turn off start and stop chars, etc.  If not going to use
+        CBREAK mode, do this anyway so as to turn off local flow
+        control for user coming over network on 4.2; in this case,
+        only t_stopc and t_startc really matter.  */
+#ifndef HAVE_TERMIO
+#ifdef TIOCGETC
+      /* Note: if not using CBREAK mode, it makes no difference how we
+        set this */
+      tty.tchars = new_tchars;
+      tty.tchars.t_intrc = quit_char;
+      if (flow_control)
+       {
+         tty.tchars.t_startc = '\021';
+         tty.tchars.t_stopc = '\023';
+       }
+
+/* LPASS8 is new in 4.3, and makes cbreak mode provide all 8 bits.  */
+#ifndef LPASS8
+#define LPASS8 0
 #endif
-#endif /* not VMS */
+
+#ifdef BSD4_1
+#define LNOFLSH 0100000
+#endif
+
+      tty.lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | old_tty.lmode;
+      
+#ifdef BSD4_1
+      lmode = tty.lmode;
+#endif
+
+#endif /* TIOCGETC */
+#endif /* not HAVE_TERMIO */
+
+#ifdef TIOCGLTC
+      tty.ltchars = new_ltchars;
+#endif /* TIOCGLTC */
+
+      EMACS_SET_TTY (input_fd, &tty, 0);
 
       /* This code added to insure that, if flow-control is not to be used,
         we have an unlocked screen at the start. */
+
 #ifdef TCXONC
       if (!flow_control) ioctl (0, TCXONC, 1);
 #endif
@@ -998,49 +959,9 @@ init_sys_modes ()
 #endif
 #endif
 
-      /* If going to use CBREAK mode, we must request C-g to interrupt
-        and turn off start and stop chars, etc.  If not going to use
-        CBREAK mode, do this anyway so as to turn off local flow
-        control for user coming over network on 4.2; in this case,
-        only t_stopc and t_startc really matter.  */
-#ifdef TIOCGLTC
-      ioctl (0, TIOCGLTC, &old_ltchars);
-#endif /* TIOCGLTC */
-#ifndef HAVE_TERMIO
-#ifdef TIOCGETC
-      ioctl (0, TIOCGETC, &old_tchars);
-      ioctl (0, TIOCLGET, &old_lmode);
-
-      /* Note: if not using CBREAK mode, it makes no difference how we set this */
-      tchars = new_tchars;
-      tchars.t_intrc = quit_char;
-      if (flow_control)
-       {
-         tchars.t_startc = '\021';
-         tchars.t_stopc = '\023';
-       }
-/* LPASS8 is new in 4.3, and makes cbreak mode provide all 8 bits.  */
-#ifndef LPASS8
-#define LPASS8 0
-#endif
-
-#ifdef BSD4_1
-#define LNOFLSH 0100000
-#endif
-
-      lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | old_lmode;
-
-      ioctl (0, TIOCSETC, &tchars);
-      ioctl (0, TIOCLSET, &lmode);
-#endif /* TIOCGETC */
-#endif /* not HAVE_TERMIO */
-#ifdef TIOCGLTC
-      ioctl (0, TIOCSLTC, &new_ltchars);
-#endif /* TIOCGLTC */
-
 #ifdef VMS
 /*  Appears to do nothing when in PASTHRU mode.
-      SYS$QIOW (0, input_chan, IO$_SETMODE|IO$M_OUTBAND, 0, 0, 0,
+      SYS$QIOW (0, input_fd, IO$_SETMODE|IO$M_OUTBAND, 0, 0, 0,
                interrupt_signal, oob_chars, 0, 0, 0, 0);
 */
       queue_kbd_input (0);
@@ -1088,6 +1009,7 @@ init_sys_modes ()
        SCREEN_GARBAGED_P (XSCREEN (Vterminal_screen)) = 1;
 #endif
     }
+
   term_initted = 1;
 }
 
@@ -1096,16 +1018,10 @@ init_sys_modes ()
    
 tabs_safe_p ()
 {
-  TERMINAL tty;
-  if (noninteractive)
-    return 1;
-#ifdef VMS
-  SYS$QIOW (0, input_chan, IO$_SENSEMODE, &tty, 0, 0,
-           &tty.class, 12, 0, 0, 0, 0);
-#else
-  tcgetattr (0, &tty);
-#endif /* not VMS */
-  return (TABS_OK (tty));
+  struct emacs_tty tty;
+
+  EMACS_GET_TTY (input_fd, &tty);
+  return EMACS_TTY_TABS_OK (&tty);
 }
 
 /* Get terminal size from system.
@@ -1115,40 +1031,57 @@ tabs_safe_p ()
 get_screen_size (widthp, heightp)
      int *widthp, *heightp;
 {
-/* Define the 4.3 names in terms of the Sun names
-   if the latter exist and the former do not.  */
-#ifdef TIOCGSIZE
-#ifndef TIOCGWINSZ
-#define TIOCGWINSZ TIOCGSIZE
-#define winsize ttysize
-#define ws_row ts_lines
-#define ws_col ts_cols
-#endif
-#endif /* Sun */
 
-/* Do it using the 4.3 names if possible.  */
 #ifdef TIOCGWINSZ
+
+  /* BSD-style.  */
   struct winsize size;
-  *widthp = 0;
-  *heightp = 0;
-  if (ioctl (0, TIOCGWINSZ, &size) < 0)
-    return;
-  *widthp = size.ws_col;
-  *heightp = size.ws_row;
-#else /* not TIOCGWNSIZ */
+
+  if (ioctl (input_fd, TIOCGWINSZ, &size) == -1)
+    *widthp = *heightp = 0;
+  else
+    {
+      *widthp = size.ws_col;
+      *heightp = size.ws_row;
+    }
+
+#else
+#ifdef TIOCGSIZE
+
+  /* SunOS - style.  */
+  struct ttysize size;  
+
+  if (ioctl (input_fd, TIOCGSIZE, &size) == -1)
+    *widthp = *heightp = 0;
+  else
+    {
+      *widthp = size.ts_cols;
+      *heightp = size.ts_lines;
+    }
+
+#else
 #ifdef VMS
-  TERMINAL tty;
-  SYS$QIOW (0, input_chan, IO$_SENSEMODE, &tty, 0, 0,
+
+  struct sensemode tty;
+  
+  SYS$QIOW (0, input_fd, IO$_SENSEMODE, &tty, 0, 0,
            &tty.class, 12, 0, 0, 0, 0);
   *widthp = tty.scr_wid;
   *heightp = tty.scr_len;
+
 #else /* system doesn't know size */
+
   *widthp = 0;
   *heightp = 0;
-#endif /* system does not know size */
-#endif /* not TIOCGWINSZ */
+
+#endif /* not VMS */
+#endif /* not SunOS-style */
+#endif /* not BSD-style */
 }
+
 \f
+/* Prepare the terminal for exiting Emacs; move the cursor to the
+   bottom of the screen, turn off interrupt-driven I/O, etc.  */
 reset_sys_modes ()
 {
   if (noninteractive)
@@ -1183,15 +1116,7 @@ reset_sys_modes ()
   fsync (fileno (stdout));
 #endif
 #endif
-#ifdef TIOCGLTC
-  ioctl (0, TIOCSLTC, &old_ltchars);
-#endif /* TIOCGLTC */
-#ifndef HAVE_TERMIO
-#ifdef TIOCGETC
-  ioctl (0, TIOCSETC, &old_tchars);
-  ioctl (0, TIOCLSET, &old_lmode);
-#endif /* TIOCGETC */
-#endif /* not HAVE_TERMIO */
+
 #ifdef F_SETFL
 #ifdef F_SETOWN                /* F_SETFL does not imply existance of F_SETOWN */
   if (interrupt_input)
@@ -1205,17 +1130,9 @@ reset_sys_modes ()
   if (interrupt_input)
     reset_sigio ();
 #endif /* BSD4_1 */
-#ifdef VMS
-  end_kbd_input ();
-  SYS$QIOW (0, input_chan, IO$_SETMODE, &input_iosb, 0, 0,
-           &old_gtty.class, 12, 0, 0, 0, 0);
-#else /* not VMS */
-#ifndef HAVE_TCATTR
-  while (ioctl (0, TCSETAW, &old_gtty) < 0 && errno == EINTR);
-#else
-  while (tcsetattr (0, TCSADRAIN, &old_gtty) < 0 && errno == EINTR);
-#endif
-#endif /* not VMS */
+
+  while (EMACS_SET_TTY (input_fd, &old_tty, 0) < 0 && errno == EINTR)
+    ;
 
 #ifdef AIX
   hft_reset ();
@@ -1281,9 +1198,9 @@ init_vms_input ()
 {
   int status;
   
-  if (input_chan == 0)
+  if (input_fd == 0)
     {
-      status = SYS$ASSIGN (&input_dsc, &input_chan, 0, 0);
+      status = SYS$ASSIGN (&input_dsc, &input_fd, 0, 0);
       if (! (status & 1))
        LIB$STOP (status);
     }
@@ -1293,7 +1210,7 @@ init_vms_input ()
 
 stop_vms_input ()
 {
-  return SYS$DASSGN (input_chan);
+  return SYS$DASSGN (input_fd);
 }
 
 short input_buffer;
@@ -1306,7 +1223,7 @@ queue_kbd_input ()
   int status;
   waiting_for_ast = 0;
   stop_input = 0;
-  status = SYS$QIO (0, input_chan, IO$_READVBLK,
+  status = SYS$QIO (0, input_fd, IO$_READVBLK,
                    &input_iosb, kbd_input_ast, 1,
                    &input_buffer, 1, 0, terminator_mask, 0, 0);
 }
@@ -1418,7 +1335,7 @@ end_kbd_input ()
 #endif
   if (LIB$AST_IN_PROG ())  /* Don't wait if suspending from kbd_buffer_store_event! */
     {
-      SYS$CANCEL (input_chan);
+      SYS$CANCEL (input_fd);
       return;
     }
 
@@ -1427,7 +1344,7 @@ end_kbd_input ()
   SYS$CLREF (input_ef);
   waiting_for_ast = 1;
   stop_input = 1;
-  SYS$CANCEL (input_chan);
+  SYS$CANCEL (input_fd);
   SYS$SETAST (1);
   SYS$WAITFR (input_ef);
   waiting_for_ast = 0;
@@ -2826,7 +2743,7 @@ readdirver (dirp)
 \f
 /* Functions for VMS */
 #ifdef VMS
-#include "pwd.h"
+#include "vms-pwd.h"
 #include <acldef.h>
 #include <chpdef.h>
 #include <jpidef.h>
index 4d4cf20..5417f76 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
+/* Copyright (C) 1985, 1986, 1987, 1988, 1992 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -995,7 +995,7 @@ adjust_lnnoptrs (writedesc, readdesc, new_name)
 {
   register int nsyms;
   register int new;
-#ifdef amdahl_uts
+#if defined (amdahl_uts) || defined (pfa)
   SYMENT symentry;
   AUXENT auxentry;
 #else