148 lines
3.5 KiB
Plaintext
148 lines
3.5 KiB
Plaintext
$NetBSD: patch-ak,v 1.1 2013/04/24 02:20:36 rodent Exp $
|
|
|
|
--- term.c.orig 2005-04-15 11:11:36.000000000 +1200
|
|
+++ term.c
|
|
@@ -86,7 +86,10 @@ static char Rcs_Id[] =
|
|
#include "ispell.h"
|
|
#include "proto.h"
|
|
#include "msgs.h"
|
|
-#ifdef USG
|
|
+#if defined(__NetBSD__) || defined(linux) || defined(__sgi) || defined(__INTERIX)
|
|
+#define USE_TERMIOS
|
|
+#include <termios.h>
|
|
+#elif defined(USG)
|
|
#include <termio.h>
|
|
#else
|
|
#ifndef __DJGPP__
|
|
@@ -165,7 +168,10 @@ static int iputch (c)
|
|
return putchar (c);
|
|
}
|
|
|
|
-#ifdef USG
|
|
+#ifdef USE_TERMIOS
|
|
+static struct termios sbuf;
|
|
+static struct termios osbuf;
|
|
+#elif defined(USG)
|
|
static struct termio sbuf;
|
|
static struct termio osbuf;
|
|
#else
|
|
@@ -292,8 +298,31 @@ retry:
|
|
|
|
#endif
|
|
|
|
+#ifdef USE_TERMIOS
|
|
+ if (!isatty (0))
|
|
+ {
|
|
+ (void) fprintf (stderr, TERM_C_NO_BATCH);
|
|
+ exit (1);
|
|
+ }
|
|
+ tcgetattr(0, &osbuf);
|
|
+ termchanged = 1;
|
|
+
|
|
+ sbuf = osbuf;
|
|
+ sbuf.c_lflag &= ~(ECHO | ECHOK | ECHONL | ICANON);
|
|
+ sbuf.c_oflag &= ~(OPOST);
|
|
+ sbuf.c_iflag &= ~(INLCR | IGNCR | ICRNL);
|
|
+ sbuf.c_lflag |= ISIG;
|
|
+ sbuf.c_cc[VMIN] = 1;
|
|
+ sbuf.c_cc[VTIME] = 0;
|
|
+ tcsetattr(0, TCSANOW, &sbuf);
|
|
+
|
|
+ uerasechar = osbuf.c_cc[VERASE];
|
|
+ ukillchar = osbuf.c_cc[VKILL];
|
|
+
|
|
+#endif
|
|
+
|
|
#ifdef SIGTSTP
|
|
-#ifndef USG
|
|
+#if !(defined(USG) || defined(USE_TERMIOS))
|
|
(void) sigsetmask (1<<(SIGTSTP-1) | 1<<(SIGTTIN-1) | 1<<(SIGTTOU-1));
|
|
#endif
|
|
#endif
|
|
@@ -319,7 +348,7 @@ retry:
|
|
#endif
|
|
#endif
|
|
|
|
-#ifndef USG
|
|
+#if !(defined(USG) || defined(USE_TERMIOS))
|
|
(void) ioctl (0, TIOCGETP, (char *) &osbuf);
|
|
#ifdef TIOCGLTC
|
|
(void) ioctl (0, TIOCGLTC, (char *) &oltc);
|
|
@@ -372,7 +401,9 @@ SIGNAL_TYPE done (signo)
|
|
{
|
|
if (te)
|
|
tputs (te, 1, iputch);
|
|
-#ifdef USG
|
|
+#ifdef USE_TERMIOS
|
|
+ tcsetattr(0, TCSANOW, &osbuf);
|
|
+#elif defined(USG)
|
|
(void) ioctl (0, TCSETAW, (char *) &osbuf);
|
|
#else
|
|
(void) ioctl (0, TIOCSETP, (char *) &osbuf);
|
|
@@ -393,7 +424,9 @@ static SIGNAL_TYPE onstop (signo)
|
|
imove (li - 1, 0);
|
|
if (te)
|
|
tputs (te, 1, iputch);
|
|
-#ifdef USG
|
|
+#ifdef USE_TERMIOS
|
|
+ tcsetattr(0, TCSANOW, &osbuf);
|
|
+#elif defined(USG)
|
|
(void) ioctl (0, TCSETAW, (char *) &osbuf);
|
|
#else
|
|
(void) ioctl (0, TIOCSETP, (char *) &osbuf);
|
|
@@ -412,7 +445,9 @@ static SIGNAL_TYPE onstop (signo)
|
|
(void) signal (signo, onstop);
|
|
if (termchanged)
|
|
{
|
|
-#ifdef USG
|
|
+#ifdef USE_TERMIOS
|
|
+ tcsetattr(0, TCSANOW, &sbuf);
|
|
+#elif defined(USG)
|
|
(void) ioctl (0, TCSETAW, (char *) &sbuf);
|
|
#else
|
|
(void) ioctl (0, TIOCSETP, (char *) &sbuf);
|
|
@@ -480,7 +515,9 @@ int shellescape (buf)
|
|
}
|
|
argv[i] = NULL;
|
|
|
|
-#ifdef USG
|
|
+#ifdef USE_TERMIOS
|
|
+ tcsetattr(0, TCSANOW, &osbuf);
|
|
+#elif defined(USG)
|
|
(void) ioctl (0, TCSETAW, (char *) &osbuf);
|
|
#else
|
|
(void) ioctl (0, TIOCSETP, (char *) &osbuf);
|
|
@@ -526,7 +563,9 @@ int shellescape (buf)
|
|
(void) signal (SIGTSTP, onstop);
|
|
#endif
|
|
|
|
-#ifdef USG
|
|
+#ifdef USE_TERMIOS
|
|
+ tcsetattr(0, TCSANOW, &sbuf);
|
|
+#elif defined(USG)
|
|
(void) ioctl (0, TCSETAW, (char *) &sbuf);
|
|
#else
|
|
(void) ioctl (0, TIOCSETP, (char *) &sbuf);
|
|
@@ -562,7 +601,9 @@ void shescape (buf)
|
|
char curdir[MAXPATHLEN];
|
|
#endif
|
|
|
|
-#ifdef USG
|
|
+#ifdef USE_TERMIOS
|
|
+ tcsetattr(0, TCSANOW, &osbuf);
|
|
+#elif defined(USG)
|
|
(void) ioctl (0, TCSETAW, (char *) &osbuf);
|
|
#else
|
|
(void) ioctl (0, TIOCSETP, (char *) &osbuf);
|
|
@@ -610,7 +651,9 @@ void shescape (buf)
|
|
chdir (curdir);
|
|
#endif
|
|
|
|
-#ifdef USG
|
|
+#ifdef USE_TERMIOS
|
|
+ tcsetattr(0, TCSANOW, &sbuf);
|
|
+#elif defined(USG)
|
|
(void) ioctl (0, TCSETAW, (char *) &sbuf);
|
|
#else
|
|
(void) ioctl (0, TIOCSETP, (char *) &sbuf);
|