pkgsrc/editors/beav/patches/patch-ab
dholland 17f83b2552 Rip out struct sgttyb. And <termio.h>. This is 2014.
Should fix the build on Solaris and most other OSes that don't keep a
museum of historical BSD curiosities on tap.

Also, make the termios code already present actually work instead of
zeroing some things, using uninitialized values for others, and
thereby hanging up the tty. Given that some of the logic apparently
came from Debian patches, I'm not impressed. (I suppose Linux probably
doesn't honor hangup via setting the speed to 0.)

While here also fix up the window size handling.

Input now works properly for me (on NetBSD) and it didn't before I
started mucking around, so it seems like generally a step forward.

PKGREVISION -> 1.
2014-09-12 03:54:13 +00:00

229 lines
5.5 KiB
Text

$NetBSD: patch-ab,v 1.6 2014/09/12 03:54:13 dholland Exp $
Rip out struct sgttyb and termio and other prehistoric stuff. Use only
termios, except leave the OS2 and MINIX cases alone. The latter
probably should be removed too, but let's wait to hear from some Minix
users.
Also, make the termios code that was already here actually work.
--- termio.c.orig 2014-09-12 03:38:15.000000000 +0000
+++ termio.c
@@ -12,9 +12,6 @@
#include <errno.h>
#include <stdio.h>
#include <signal.h>
-#ifdef BSD
-#include <sys/ioctl.h>
-#else
#ifdef OS2
#ifndef __EMX__
#define INCL_NOPM
@@ -28,15 +25,10 @@
#include <sgtty.h>
#define O_NDELAY O_NONBLOCK
#else
-#ifdef __GLIBC__
+#include <sys/ioctl.h>
#include <termios.h>
-#else
-#include <termio.h>
-#endif /* __GLIBC__ */
#endif /* MINIX */
#endif /* OS2 */
-#endif /* BSD */
-#include <errno.h>
#include <fcntl.h>
#include "def.h"
int kbdflgs; /* saved keyboard fd flags */
@@ -44,10 +36,6 @@ int kbdpoll; /* in O_NDELAY mode
int kbdqp; /* there is a char in kbdq */
char kbdq; /* char we've already read */
-#ifdef BSD
-struct sgttyb otermb;
-struct sgttyb ntermb;
-#else
#ifdef OS2
#ifndef __EMX__
KBDINFO kbst, kbst_std;
@@ -58,21 +46,12 @@ struct sgttyb otermio; /* original term
struct sgttyb ntermio; /* charactoristics to use inside */
struct tchars tchars, tcharsorig;
#else
-#ifdef __GLIBC__
-#include <sys/ioctl.h>
+#include <termios.h>
struct termios otermio;
struct termios ntermio;
-#else
-struct termio otermio; /* original terminal characteristics */
-struct termio ntermio; /* charactoristics to use inside */
-#endif /* __GLIBC__ */
#endif /* MINIX */
#endif /* OS2 */
-#endif /* BSD */
-#ifndef OS2
-//extern errno; /* System error number -- Necessary when compiling in BSD 1.13 */
-#endif
int nrow; /* Terminal size, rows. */
int ncol; /* Terminal size, columns. */
@@ -86,42 +65,37 @@ int ncol; /* Terminal size, columns.
void
ttopen ()
{
-#ifdef BSD
-#ifdef ULTRIX
+#if !defined(OS2) && !defined(MINIX)
+
+#if defined(TIOCGWINSZ)
struct winsize ttysize;
-#else
+#elif defined(TIOCGSIZE)
struct ttysize ttysize;
#endif
- ioctl (0, TIOCGETP, &otermb); /* save settings */
- ntermb = otermb; /* setup new settings */
- ntermb.sg_flags &= ~ECHO;
- ntermb.sg_flags |= RAW;
- ioctl (0, TIOCSETP, &ntermb); /* and activate them */
- kbdpoll = FALSE;
-
/* on all screens we are not sure of the initial position
of the cursor */
ttrow = 999;
ttcol = 999;
-#ifdef ULTRIX
+#if defined(TIOCGWINSZ)
if (ioctl (0, TIOCGWINSZ, &ttysize) == 0)
{
nrow = ttysize.ws_row;
ncol = ttysize.ws_col;
-#else
+ } else
+#elif defined(TIOCGSIZE)
if (ioctl (0, TIOCGSIZE, &ttysize) == 0)
{
nrow = ttysize.ts_lines;
ncol = ttysize.ts_cols;
+ } else
#endif /* ULTRIX */
- }
- else
{
nrow = NROW;
ncol = NCOL;
}
-#else
+#endif /* not OS2 or MINIX */
+
#ifdef OS2
setmode (1, O_BINARY);
#else
@@ -137,33 +111,23 @@ ttopen ()
tchars.t_stopc = tchars.t_eofc = tchars.t_brkc = -1;
ioctl (0, TIOCSETC, &tchars);
#else
-#ifdef __GLIBC__
tcgetattr(0,&otermio);
-#else
- ioctl (0, TCGETA, &otermio);/* save old settings */
- ntermio.c_line = otermio.c_line;
-#endif
+#if 0 /* horribly wrong -- never do this! */
ntermio.c_iflag = 0; /* setup new settings */
ntermio.c_oflag = 0;
ntermio.c_cflag = otermio.c_cflag;
ntermio.c_lflag = 0;
+#else
+ ntermio = otermio;
+ ntermio.c_lflag &= ~(ECHO|ECHONL|ECHOCTL|ISIG|ICANON);
+#endif
ntermio.c_cc[VMIN] = 1;
ntermio.c_cc[VTIME] = 0;
-#ifdef __GLIBC__
tcsetattr(0,TCSANOW,&ntermio);
-#else
- ioctl (0, TCSETAW, &ntermio); /* and activate them */
-#endif
#endif /* MINIX */
kbdflgs = fcntl (0, F_GETFL, 0);
kbdpoll = FALSE;
#endif /* OS2 */
- /* on all screens we are not sure of the initial position of the cursor */
- ttrow = 999;
- ttcol = 999;
- nrow = NROW;
- ncol = NCOL;
-#endif /* BSD */
}
/*
@@ -174,10 +138,6 @@ ttopen ()
void
ttclose ()
{
-#ifdef BSD
- if (ioctl (0, TIOCSETP, &otermb) == -1) /* restore terminal settings */
- printf ("closing ioctl on dev 0 failure, error = %d\n", errno);
-#else
#ifdef OS2
setmode (1, O_TEXT);
#else
@@ -186,17 +146,12 @@ ttclose ()
ioctl (0, TIOCSETC, &tcharsorig) == -1)
printf ("closing ioctl on dev 0 failure, error = %d\n", errno);
#else
-#ifdef __GLIBC__
if( tcsetattr(0,TCSANOW,&otermio) == -1)
-#else
- if (ioctl (0, TCSETAW, &otermio) == -1) /* restore terminal settings */
-#endif
printf ("closing ioctl on dev 0 failure, error = %d\n", errno);
#endif /* MINIX */
if (fcntl (0, F_SETFL, kbdflgs) == -1)
printf ("closing fcntl on dev 0 failure, error = %d\n", errno);
#endif /* OS2 */
-#endif /* BSD */
}
#ifdef OS2
@@ -235,7 +190,7 @@ ttcooked (void)
#endif
}
-#endif
+#endif /* OS2 */
/*
* Write a character to the display. On VMS, terminal output is buffered, and
@@ -336,7 +291,7 @@ int ttgetc ()
kbdqp = FALSE;
else
{
-#ifdef BSD
+#if defined(FIONREAD)
int count;
if (kbdpoll && (ioctl (0, FIONREAD, &count), count == 0))
@@ -372,7 +327,7 @@ int ttkeyready ()
#else
if (!kbdqp)
{
-#ifdef BSD
+#if defined(FIONREAD)
int count;
if (!kbdpoll && (ioctl (0, FIONREAD, &count), count == 0))
@@ -389,7 +344,7 @@ int ttkeyready ()
kbdpoll = TRUE; /* fix in 1.13 */
kbdqp = (1 == read (0, &kbdq, 1));
#endif /* MINIX */
-#endif /* BSD */
+#endif /* FIONREAD */
}
return (kbdqp);