summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/callproc.c8
-rw-r--r--src/m/pfa50.h3
-rw-r--r--src/sysdep.c559
-rw-r--r--src/unexec.c4
4 files changed, 247 insertions, 327 deletions
diff --git a/src/callproc.c b/src/callproc.c
index cc2c2d7b576..fff728a328a 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -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
diff --git a/src/m/pfa50.h b/src/m/pfa50.h
index b9464904817..2368a533707 100644
--- a/src/m/pfa50.h
+++ b/src/m/pfa50.h
@@ -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
-
diff --git a/src/sysdep.c b/src/sysdep.c
index fd526e33f9c..1483898478d 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -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 */
-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 */
}
+
+/* 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)
/* Functions for VMS */
#ifdef VMS
-#include "pwd.h"
+#include "vms-pwd.h"
#include <acldef.h>
#include <chpdef.h>
#include <jpidef.h>
diff --git a/src/unexec.c b/src/unexec.c
index 4d4cf20fd55..5417f760467 100644
--- a/src/unexec.c
+++ b/src/unexec.c
@@ -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