1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1982-2012 AT&T Intellectual Property * 5* and is licensed under the * 6* Eclipse Public License, Version 1.0 * 7* by AT&T Intellectual Property * 8* * 9* A copy of the License is available at * 10* http://www.eclipse.org/org/documents/epl-v10.html * 11* (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12* * 13* Information and Software Systems Research * 14* AT&T Research * 15* Florham Park NJ * 16* * 17* David Korn <dgk@research.att.com> * 18* * 19***********************************************************************/ 20#pragma prototyped 21 22#ifndef _terminal_ 23#define _terminal_ 1 24 25#include "FEATURE/ttys" 26/* 27 * terminal interface 28 * complicated by the fact that there are so many variations 29 * This will use POSIX <termios.h> interface where available 30 */ 31 32#ifdef _hdr_termios 33# include <termios.h> 34# if __sgi__ || sgi /* special hack to eliminate ^M problem */ 35# ifndef ECHOCTL 36# define ECHOCTL ECHOE 37# endif /* ECHOCTL */ 38# ifndef CNSUSP 39# define CNSUSP CNSWTCH 40# endif /* CNSUSP */ 41# endif /* sgi */ 42# ifdef _NEXT_SOURCE 43# define _lib_tcgetattr 1 44# define _lib_tcgetpgrp 1 45# endif /* _NEXT_SOURCE */ 46#else 47# if defined(_sys_termios) && defined(_lib_tcgetattr) 48# include <sys/termios.h> 49# define _hdr_termios 50# else 51# undef _sys_termios 52# endif /* _sys_termios */ 53#endif /* _hdr_termios */ 54 55#ifdef _hdr_termios 56# undef _hdr_sgtty 57# undef tcgetattr 58# undef tcsetattr 59# undef tcgetpgrp 60# undef tcsetpgrp 61# undef cfgetospeed 62# ifndef TCSANOW 63# define TCSANOW TCSETS 64# define TCSADRAIN TCSETSW 65# define TCSAFLUSH TCSETSF 66# endif /* TCSANOW */ 67 /* The following corrects bugs in some implementations */ 68# if defined(TCSADFLUSH) && !defined(TCSAFLUSH) 69# define TCSAFLUSH TCSADFLUSH 70# endif /* TCSADFLUSH */ 71# ifndef _lib_tcgetattr 72# undef tcgetattr 73# define tcgetattr(fd,tty) ioctl(fd, TCGETS, tty) 74# undef tcsetattr 75# define tcsetattr(fd,action,tty) ioctl(fd, action, tty) 76# undef cfgetospeed 77# define cfgetospeed(tp) ((tp)->c_cflag & CBAUD) 78# endif /* _lib_tcgetattr */ 79# undef TIOCGETC 80# if SHOPT_OLDTERMIO /* use both termios and termio */ 81# ifdef _hdr_termio 82# include <termio.h> 83# else 84# ifdef _sys_termio 85# include <sys/termio.h> 86# define _hdr_termio 1 87# else 88# undef SHOPT_OLDTERMIO 89# endif /* _sys_termio */ 90# endif /* _hdr_termio */ 91# endif /* SHOPT_OLDTERMIO */ 92#else 93# define cfgetospeed(tp) ((tp)->c_cflag & CBAUD) 94# undef SHOPT_OLDTERMIO 95# ifdef _hdr_termio 96# include <termio.h> 97# else 98# ifdef _sys_termio 99# include <sys/termio.h> 100# define _hdr_termio 1 101# endif /* _sys_termio */ 102# endif /* _hdr_termio */ 103# ifdef _hdr_termio 104# define termios termio 105# undef TIOCGETC 106# define tcgetattr(fd,tty) ioctl(fd, TCGETA, tty) 107# define tcsetattr(fd,action,tty) ioctl(fd, action, tty) 108 109# ifdef _sys_bsdtty 110# include <sys/bsdtty.h> 111# endif /* _sys_bsdtty */ 112# else 113# ifdef _hdr_sgtty 114# include <sgtty.h> 115# ifndef LPENDIN 116# ifdef _sys_nttyio 117# include <sys/nttyio.h> 118# endif /* _sys_nttyio */ 119# endif /* LPENDIN */ 120# define termios sgttyb 121# ifdef TIOCSETN 122# undef TCSETAW 123# endif /* TIOCSETN */ 124# ifdef TIOCGETP 125# define tcgetattr(fd,tty) ioctl(fd, TIOCGETP, tty) 126# define tcsetattr(fd,action,tty) ioctl(fd, action, tty) 127# else 128# define tcgetattr(fd,tty) gtty(fd, tty) 129# define tcsetattr(fd,action,tty) stty(fd, tty) 130# endif /* TIOCGETP */ 131# endif /* _hdr_sgtty */ 132# endif /* hdr_termio */ 133 134# ifndef TCSANOW 135# ifdef TCSETAW 136# define TCSANOW TCSETA 137# ifdef u370 138 /* delays are too long, don't wait for output to drain */ 139# define TCSADRAIN TCSETA 140# else 141# define TCSADRAIN TCSETAW 142# endif /* u370 */ 143# define TCSAFLUSH TCSETAF 144# else 145# ifdef TIOCSETN 146# define TCSANOW TIOCSETN 147# define TCSADRAIN TIOCSETN 148# define TCSAFLUSH TIOCSETP 149# endif /* TIOCSETN */ 150# endif /* TCSETAW */ 151# endif /* TCSANOW */ 152#endif /* _hdr_termios */ 153 154/* set ECHOCTL if driver can echo control charaters as ^c */ 155#ifdef LCTLECH 156# ifndef ECHOCTL 157# define ECHOCTL LCTLECH 158# endif /* !ECHOCTL */ 159#endif /* LCTLECH */ 160#ifdef LNEW_CTLECH 161# ifndef ECHOCTL 162# define ECHOCTL LNEW_CTLECH 163# endif /* !ECHOCTL */ 164#endif /* LNEW_CTLECH */ 165#ifdef LNEW_PENDIN 166# ifndef PENDIN 167# define PENDIN LNEW_PENDIN 168# endif /* !PENDIN */ 169#endif /* LNEW_PENDIN */ 170#ifndef ECHOCTL 171# ifndef VEOL 172# define RAWONLY 1 173# endif /* !VEOL */ 174#endif /* !ECHOCTL */ 175 176#ifdef _sys_filio 177# ifndef FIONREAD 178# include <sys/filio.h> 179# endif /* FIONREAD */ 180#endif /* _sys_filio */ 181/* set FIORDCHK if you can check for characters in input queue */ 182#ifdef FIONREAD 183# ifndef FIORDCHK 184# define FIORDCHK FIONREAD 185# endif /* !FIORDCHK */ 186#endif /* FIONREAD */ 187 188extern int tty_alt(int); 189extern void tty_cooked(int); 190extern int tty_get(int,struct termios*); 191extern int tty_raw(int,int); 192extern int tty_check(int); 193extern int tty_set(int, int, struct termios*); 194extern int sh_ioctl(int,int,void*,int); 195#define ioctl(a,b,c) sh_ioctl(a,b,c,sizeof(c)) 196#ifdef _lib_tcgetattr 197 extern int sh_tcgetattr(int,struct termios*); 198 extern int sh_tcsetattr(int,int,struct termios*); 199# define tcgetattr(a,b) sh_tcgetattr(a,b) 200# define tcsetattr(a,b,c) sh_tcsetattr(a,b,c) 201#endif 202 203#endif /* _terminal_ */ 204