sgtty -> termio
Dave Decot
decot at hpisod2.cup.hp.com
Tue Apr 9 10:45:06 AEST 1991
/* Routines for managing nonechoing, one-character-at-a-time tty reads */
/* Dave Decot, hpda!decot, 851023 */
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#ifdef BSD
# include <sgtty.h>
#else /* not BSD */
# include <termio.h>
#endif
quit()
{
signal(SIGQUIT, SIG_IGN);
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGTERM, SIG_IGN);
normal();
exit(0);
}
setup()
{
signal(SIGQUIT, quit);
signal(SIGHUP, quit);
signal(SIGTERM, quit);
cbreak();
}
static int tty_mode = 0;
#ifdef TCGETA
static struct termio orig_tty;
static struct termio new_tty;
#else
static struct sgttyb orig_tty;
static struct sgttyb new_tty;
#endif
cbreak()
{
if (tty_mode == 0)
{
#ifdef TCGETA
ioctl(0, TCGETA, &orig_tty);
#else
ioctl(0, TIOCGETP, &orig_tty);
#endif
tty_mode = 1;
new_tty = orig_tty;
}
#ifdef ICANON
new_tty.c_lflag &= ~(ICANON | ECHO);
new_tty.c_cc[VMIN] = 1;
new_tty.c_cc[VTIME] = 0;
ioctl(0, TCSETA, &new_tty);
#else
new_tty.sg_flags |= CBREAK;
new_tty.sg_flags &= ~ECHO;
ioctl(0, TIOCSETN, &new_tty);
#endif
}
normal()
{
if (tty_mode == 1)
{
#ifdef TCSETA
ioctl(0, TCSETA, &orig_tty);
#else
ioctl(0, TIOCSETN, &orig_tty);
#endif
new_tty = orig_tty;
}
}
More information about the Comp.unix.wizards
mailing list