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