xref: /plan9/sys/src/ape/cmd/pdksh/tty.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1*7dd7cddfSDavid du Colombier /*
2*7dd7cddfSDavid du Colombier 	tty.h -- centralized definitions for a variety of terminal interfaces
3*7dd7cddfSDavid du Colombier 
4*7dd7cddfSDavid du Colombier 	created by DPK, Oct. 1986
5*7dd7cddfSDavid du Colombier 
6*7dd7cddfSDavid du Colombier 	Rearranged to work with autoconf, added TTY_state, get_tty/set_tty
7*7dd7cddfSDavid du Colombier 						Michael Rendell, May '94
8*7dd7cddfSDavid du Colombier 
9*7dd7cddfSDavid du Colombier 	last edit:	30-Jul-1987	D A Gwyn
10*7dd7cddfSDavid du Colombier */
11*7dd7cddfSDavid du Colombier /* $Id$ */
12*7dd7cddfSDavid du Colombier 
13*7dd7cddfSDavid du Colombier /* some useful #defines */
14*7dd7cddfSDavid du Colombier #ifdef EXTERN
15*7dd7cddfSDavid du Colombier # define I__(i) = i
16*7dd7cddfSDavid du Colombier #else
17*7dd7cddfSDavid du Colombier # define I__(i)
18*7dd7cddfSDavid du Colombier # define EXTERN extern
19*7dd7cddfSDavid du Colombier # define EXTERN_DEFINED
20*7dd7cddfSDavid du Colombier #endif
21*7dd7cddfSDavid du Colombier 
22*7dd7cddfSDavid du Colombier /* Don't know of a system on which including sys/ioctl.h with termios.h
23*7dd7cddfSDavid du Colombier  * causes problems.  If there is one, these lines need to be deleted and
24*7dd7cddfSDavid du Colombier  * aclocal.m4 needs to have stuff un-commented.
25*7dd7cddfSDavid du Colombier  */
26*7dd7cddfSDavid du Colombier #ifdef SYS_IOCTL_WITH_TERMIOS
27*7dd7cddfSDavid du Colombier # define SYS_IOCTL_WITH_TERMIOS
28*7dd7cddfSDavid du Colombier #endif /* SYS_IOCTL_WITH_TERMIOS */
29*7dd7cddfSDavid du Colombier #ifdef SYS_IOCTL_WITH_TERMIO
30*7dd7cddfSDavid du Colombier # define SYS_IOCTL_WITH_TERMIO
31*7dd7cddfSDavid du Colombier #endif /* SYS_IOCTL_WITH_TERMIO */
32*7dd7cddfSDavid du Colombier 
33*7dd7cddfSDavid du Colombier #ifdef	HAVE_TERMIOS_H
34*7dd7cddfSDavid du Colombier # include <termios.h>
35*7dd7cddfSDavid du Colombier # ifdef SYS_IOCTL_WITH_TERMIOS
36*7dd7cddfSDavid du Colombier #  if !(defined(sun) && !defined(__svr4__)) /* too many warnings on sunos */
37*7dd7cddfSDavid du Colombier     /* Need to include sys/ioctl.h on some systems to get the TIOCGWINSZ
38*7dd7cddfSDavid du Colombier      * stuff (eg, digital unix).
39*7dd7cddfSDavid du Colombier      */
40*7dd7cddfSDavid du Colombier #   include <sys/ioctl.h>
41*7dd7cddfSDavid du Colombier #  endif /* !(sun && !__svr4__) */
42*7dd7cddfSDavid du Colombier # endif /* SYS_IOCTL_WITH_TERMIOS */
43*7dd7cddfSDavid du Colombier typedef struct termios TTY_state;
44*7dd7cddfSDavid du Colombier #else
45*7dd7cddfSDavid du Colombier # ifdef HAVE_TERMIO_H
46*7dd7cddfSDavid du Colombier #  include <termio.h>
47*7dd7cddfSDavid du Colombier #  ifdef SYS_IOCTL_WITH_TERMIO
48*7dd7cddfSDavid du Colombier #   include <sys/ioctl.h> /* see comment above in termios stuff */
49*7dd7cddfSDavid du Colombier #  endif /* SYS_IOCTL_WITH_TERMIO */
50*7dd7cddfSDavid du Colombier #  if _BSD_SYSV			/* BRL UNIX System V emulation */
51*7dd7cddfSDavid du Colombier #   ifndef NTTYDISC
52*7dd7cddfSDavid du Colombier #    define	TIOCGETD	_IOR( 't', 0, int )
53*7dd7cddfSDavid du Colombier #    define	TIOCSETD	_IOW( 't', 1, int )
54*7dd7cddfSDavid du Colombier #    define	NTTYDISC	2
55*7dd7cddfSDavid du Colombier #   endif
56*7dd7cddfSDavid du Colombier #   ifndef TIOCSTI
57*7dd7cddfSDavid du Colombier #    define	TIOCSTI		_IOW( 't', 114, char )
58*7dd7cddfSDavid du Colombier #   endif
59*7dd7cddfSDavid du Colombier #   ifndef TIOCSPGRP
60*7dd7cddfSDavid du Colombier #    define	TIOCSPGRP	_IOW( 't', 118, int )
61*7dd7cddfSDavid du Colombier #   endif
62*7dd7cddfSDavid du Colombier #  endif /* _BSD_SYSV */
63*7dd7cddfSDavid du Colombier typedef struct termio TTY_state;
64*7dd7cddfSDavid du Colombier # else /* HAVE_TERMIO_H */
65*7dd7cddfSDavid du Colombier /* Assume BSD tty stuff.  Uses TIOCGETP, TIOCSETN; uses TIOCGATC/TIOCSATC if
66*7dd7cddfSDavid du Colombier  * available, otherwise it uses TIOCGETC/TIOCSETC (also uses TIOCGLTC/TIOCSLTC
67*7dd7cddfSDavid du Colombier  * if available)
68*7dd7cddfSDavid du Colombier  */
69*7dd7cddfSDavid du Colombier #  ifdef _MINIX
70*7dd7cddfSDavid du Colombier #   include <sgtty.h>
71*7dd7cddfSDavid du Colombier #   define TIOCSETN	TIOCSETP
72*7dd7cddfSDavid du Colombier #  else
73*7dd7cddfSDavid du Colombier #   include <sys/ioctl.h>
74*7dd7cddfSDavid du Colombier #  endif
75*7dd7cddfSDavid du Colombier typedef struct {
76*7dd7cddfSDavid du Colombier 	struct sgttyb	sgttyb;
77*7dd7cddfSDavid du Colombier #  ifdef TIOCGATC
78*7dd7cddfSDavid du Colombier 	struct lchars	lchars;
79*7dd7cddfSDavid du Colombier #  else /* TIOCGATC */
80*7dd7cddfSDavid du Colombier 	struct tchars	tchars;
81*7dd7cddfSDavid du Colombier #   ifdef TIOCGLTC
82*7dd7cddfSDavid du Colombier 	struct ltchars	ltchars;
83*7dd7cddfSDavid du Colombier #   endif /* TIOCGLTC */
84*7dd7cddfSDavid du Colombier #  endif /* TIOCGATC */
85*7dd7cddfSDavid du Colombier } TTY_state;
86*7dd7cddfSDavid du Colombier # endif /* HAVE_TERMIO_H */
87*7dd7cddfSDavid du Colombier #endif /* HAVE_TERMIOS_H */
88*7dd7cddfSDavid du Colombier 
89*7dd7cddfSDavid du Colombier /* Flags for set_tty() */
90*7dd7cddfSDavid du Colombier #define TF_NONE		0x00
91*7dd7cddfSDavid du Colombier #define TF_WAIT		0x01	/* drain output, even it requires sleep() */
92*7dd7cddfSDavid du Colombier #define TF_MIPSKLUDGE	0x02	/* kludge to unwedge RISC/os 5.0 tty driver */
93*7dd7cddfSDavid du Colombier 
94*7dd7cddfSDavid du Colombier EXTERN int		tty_fd I__(-1);	/* dup'd tty file descriptor */
95*7dd7cddfSDavid du Colombier EXTERN int		tty_devtty;	/* true if tty_fd is from /dev/tty */
96*7dd7cddfSDavid du Colombier EXTERN TTY_state	tty_state;	/* saved tty state */
97*7dd7cddfSDavid du Colombier 
98*7dd7cddfSDavid du Colombier extern int	get_tty ARGS((int fd, TTY_state *ts));
99*7dd7cddfSDavid du Colombier extern int	set_tty ARGS((int fd, TTY_state *ts, int flags));
100*7dd7cddfSDavid du Colombier extern void	tty_init ARGS((int init_ttystate));
101*7dd7cddfSDavid du Colombier extern void	tty_close ARGS((void));
102*7dd7cddfSDavid du Colombier 
103*7dd7cddfSDavid du Colombier /* be sure not to interfere with anyone else's idea about EXTERN */
104*7dd7cddfSDavid du Colombier #ifdef EXTERN_DEFINED
105*7dd7cddfSDavid du Colombier # undef EXTERN_DEFINED
106*7dd7cddfSDavid du Colombier # undef EXTERN
107*7dd7cddfSDavid du Colombier #endif
108*7dd7cddfSDavid du Colombier #undef I__
109