terminal.h revision 34f9b3eef6fdadbda0a846aa4d68691ac40eace5
f0cb5ab1344f9596bef788d2312629a152869f4eNeil Madden/***********************************************************************
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* This software is part of the ast package *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* Copyright (c) 1982-2009 AT&T Intellectual Property *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* and is licensed under the *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* Common Public License, Version 1.0 *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* by AT&T Intellectual Property *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* A copy of the License is available at *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* http://www.opensource.org/licenses/cpl1.0.txt *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* Information and Software Systems Research *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* AT&T Research *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* Florham Park NJ *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* David Korn <dgk@research.att.com> *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster* *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster***********************************************************************/
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#pragma prototyped
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifndef _terminal_
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#define _terminal_ 1
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#include "FEATURE/ttys"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/*
8d75f7fba11e555d87ff0f6f2a7504681c482e0bNeil Madden * terminal interface
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * complicated by the fact that there are so many variations
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This will use POSIX <termios.h> interface where available
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifdef _hdr_termios
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <termios.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# if __sgi__ || sgi /* special hack to eliminate ^M problem */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef ECHOCTL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define ECHOCTL ECHOE
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* ECHOCTL */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef CNSUSP
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define CNSUSP CNSWTCH
f0cb5ab1344f9596bef788d2312629a152869f4eNeil Madden# endif /* CNSUSP */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* sgi */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef _NEXT_SOURCE
f0cb5ab1344f9596bef788d2312629a152869f4eNeil Madden# define _lib_tcgetattr 1
f0cb5ab1344f9596bef788d2312629a152869f4eNeil Madden# define _lib_tcgetpgrp 1
f0cb5ab1344f9596bef788d2312629a152869f4eNeil Madden# endif /* _NEXT_SOURCE */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# if defined(_sys_termios) && defined(_lib_tcgetattr)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <sys/termios.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define _hdr_termios
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef _sys_termios
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* _sys_termios */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* _hdr_termios */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifdef _hdr_termios
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef _hdr_sgtty
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef tcgetattr
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef tcsetattr
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef tcgetpgrp
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef tcsetpgrp
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef cfgetospeed
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef TCSANOW
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSANOW TCSETS
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSADRAIN TCSETSW
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSAFLUSH TCSETSF
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* TCSANOW */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /* The following corrects bugs in some implementations */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# if defined(TCSADFLUSH) && !defined(TCSAFLUSH)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSAFLUSH TCSADFLUSH
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* TCSADFLUSH */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef _lib_tcgetattr
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef tcgetattr
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define tcgetattr(fd,tty) ioctl(fd, TCGETS, tty)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef tcsetattr
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define tcsetattr(fd,action,tty) ioctl(fd, action, tty)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef cfgetospeed
8d75f7fba11e555d87ff0f6f2a7504681c482e0bNeil Madden# define cfgetospeed(tp) ((tp)->c_cflag & CBAUD)
8d75f7fba11e555d87ff0f6f2a7504681c482e0bNeil Madden# endif /* _lib_tcgetattr */
f0cb5ab1344f9596bef788d2312629a152869f4eNeil Madden# undef TIOCGETC
f0cb5ab1344f9596bef788d2312629a152869f4eNeil Madden# if SHOPT_OLDTERMIO /* use both termios and termio */
8d75f7fba11e555d87ff0f6f2a7504681c482e0bNeil Madden# ifdef _hdr_termio
8d75f7fba11e555d87ff0f6f2a7504681c482e0bNeil Madden# include <termio.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef _sys_termio
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <sys/termio.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define _hdr_termio 1
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef SHOPT_OLDTERMIO
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* _sys_termio */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* _hdr_termio */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* SHOPT_OLDTERMIO */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define cfgetospeed(tp) ((tp)->c_cflag & CBAUD)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef SHOPT_OLDTERMIO
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef _hdr_termio
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <termio.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef _sys_termio
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <sys/termio.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define _hdr_termio 1
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* _sys_termio */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* _hdr_termio */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef _hdr_termio
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define termios termio
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef TIOCGETC
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define tcgetattr(fd,tty) ioctl(fd, TCGETA, tty)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define tcsetattr(fd,action,tty) ioctl(fd, action, tty)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef _sys_bsdtty
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <sys/bsdtty.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* _sys_bsdtty */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef _hdr_sgtty
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <sgtty.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef LPENDIN
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef _sys_nttyio
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <sys/nttyio.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* _sys_nttyio */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* LPENDIN */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define termios sgttyb
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef TIOCSETN
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# undef TCSETAW
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* TIOCSETN */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef TIOCGETP
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define tcgetattr(fd,tty) ioctl(fd, TIOCGETP, tty)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define tcsetattr(fd,action,tty) ioctl(fd, action, tty)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define tcgetattr(fd,tty) gtty(fd, tty)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define tcsetattr(fd,action,tty) stty(fd, tty)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* TIOCGETP */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* _hdr_sgtty */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* hdr_termio */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef TCSANOW
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef TCSETAW
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSANOW TCSETA
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef u370
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /* delays are too long, don't wait for output to drain */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSADRAIN TCSETA
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSADRAIN TCSETAW
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* u370 */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSAFLUSH TCSETAF
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# else
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifdef TIOCSETN
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSANOW TIOCSETN
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSADRAIN TIOCSETN
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define TCSAFLUSH TIOCSETP
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* TIOCSETN */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* TCSETAW */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* TCSANOW */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* _hdr_termios */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/* set ECHOCTL if driver can echo control charaters as ^c */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifdef LCTLECH
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef ECHOCTL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define ECHOCTL LCTLECH
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* !ECHOCTL */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* LCTLECH */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifdef LNEW_CTLECH
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef ECHOCTL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define ECHOCTL LNEW_CTLECH
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* !ECHOCTL */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* LNEW_CTLECH */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifdef LNEW_PENDIN
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef PENDIN
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define PENDIN LNEW_PENDIN
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* !PENDIN */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* LNEW_PENDIN */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifndef ECHOCTL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef VEOL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define RAWONLY 1
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* !VEOL */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* !ECHOCTL */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifdef _sys_filio
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef FIONREAD
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# include <sys/filio.h>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* FIONREAD */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* _sys_filio */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/* set FIORDCHK if you can check for characters in input queue */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifdef FIONREAD
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# ifndef FIORDCHK
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# define FIORDCHK FIONREAD
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster# endif /* !FIORDCHK */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* FIONREAD */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterextern int tty_alt(int);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterextern void tty_cooked(int);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterextern int tty_get(int,struct termios*);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterextern int tty_raw(int,int);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterextern int tty_check(int);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterextern int tty_set(int, int, struct termios*);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif /* _terminal_ */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster