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