ttcompat(7) DEVICES AND MODULES ttcompat(7)
NAME
ttcompat - V7, 4BSD and XENIX STREAMS compatibility module
CONFIG
None; included by default.
SYNOPSIS
#include <sys/stream.h>
#include <sys/stropt.h>
#include <sys/ttcompat.h>
#include <sys/ttold.h>
ioctl(fd, IPUSH, "ttcompat");
DESCRIPTION
ttcompat is a STREAMS module that translates the ioctl calls
supported by the older Version 7, 4BSD and XENIX terminal
drivers into the ioctl calls supported by the termio inter-
face [see termio(7)]. All other messages pass through this
module unchanged; the behavior of read and write calls is
unchanged, as is the behavior of ioctl calls other than the
ones supported by ttcompat.
This module can be automatically pushed onto a stream using
the autopush mechanism when a terminal device is opened; it
does not have to be explicitly pushed onto a stream. This
module requires that the termios interface be supported by
the modules and the application can push the driver down-
stream. The TCGETS, TCSETS, and TCSETSF ioctl calls must be
supported; if any information set or fetched by those ioctl
calls is not supported by the modules and driver downstream,
some of the V7/4BSD/XENIX functions may not be supported.
For example, if the CBAUD bits in the c_cflag field are not
supported, the functions provided by the sg_ispeed and
sg_ospeed fields of the sgttyb structure (see below) will
not be supported. If the TCFLSH ioctl is not supported, the
function provided by the TIOCFLUSH ioctl will not be sup-
ported. If the TCXONC ioctl is not supported, the functions
provided by the TIOCSTOP and TIOCSTART ioctl calls will not
be supported. If the TIOCMBIS and TIOCMBIC ioctl calls are
not supported, the functions provided by the TIOCSDTR and
TIOCCDTR ioctl calls will not be supported.
The basic ioctl calls use the sgttyb structure defined by
<sys/ioctl.h>:
struct sgttyb {
char sgispeed;
char sgospeed;
char sgerase;
char sgkill;
int sgflags;
};
1
ttcompat(7) DEVICES AND MODULES ttcompat(7)
The sgispeed and sgospeed fields describe the input and
output speeds of the device, and reflect the values in the
ccflag field of the termios structure. The sg_erase and
sg_kill fields of the argument structure specify the erase
and kill characters respectively, and reflect the values in
the VERASE and VKILL members of the c_cc field of the ter-
mios structure.
The sg_flags field of the argument structure contains
several flags that determine the system's treatment of the
terminal. They are mapped into flags in fields of the ter-
minal state, represented by the termios structure.
Delay type 0 is always mapped into the equivalent delay type
0 in the c_oflag field of the termios structure. Other
delay mappings are performed as follows:
sg_flags c_oflag
BS1 BS1
FF1 VT1
CR1 CR2
CR2 CR3
CR3 not supported
TAB1 TAB1
TAB2 TAB2
XTABS TAB3
NL1 ONLRET|CR1
NL2 NL1
If previous TIOCLSET or TIOCLBIS ioctl calls have not
selected LITOUT or PASS8 mode, and if RAW mode is not
selected, the ISTRIP flag is set in the c_iflag field of the
termios structure, and the EVENP and ODDP flags control the
parity of characters sent to the terminal and accepted from
the terminal:
Parity is not to be generated on output or checked on input;
the character size is set to CS8 and the flag is
cleared in the c_cflag field of the termios
structure.
on
Even parity characters are to be generated on output and accepted
input; the flag is set in the c_iflag field of
the termios structure, the character size is set
to CS7 and the flag is set in the c_cflag field
of the termios structure.
on
Odd parity characters are to be generated on output and accepted
input; the flag is set in the c_iflag field, the
character size is set to CS7 and the and flags
2
ttcompat(7) DEVICES AND MODULES ttcompat(7)
are set in the c_cflag field of the termios
structure.
Even parity characters are to be generated on output
and characters of either parity are to be
accepted on input; the flag is cleared in the
c_iflag field, the character size is set to CS7
and the flag is set in the c_cflag field of the
termios structure.
The RAW flag disables all output processing (the OPOST flag
in the c_oflag field, and the XCASE flag in the c_lflag
field, are cleared in the termios structure) and input pro-
cessing (all flags in the c_iflag field other than the IXOFF
and IXANY flags are cleared in the termios structure). 8
bits of data, with no parity bit, are accepted on input and
generated on output; the character size is set to CS8 and
the PARENB and PARODD flags are cleared in the c_cflag/f1
field of the termios structure. The signal-generating and
line-editing control characters are disabled by clearing the
ISIG and ICANON/fP flags in the c_lflag field of the termios
structure.
The CRMOD flag turn input RETURN characters into NEWLINE
characters, and output and echoed NEWLINE characters to be
output as a RETURN followed by a LINEFEED. The ICRNL flag in
the c_iflag field, and the OPOST and ONLCR flags in the
c_oflag field, are set in the termios structure.
The LCASE flag maps upper-case letters in the ASCII charac-
ter set to their lower-case equivalents on input (the IUCLC
flag is set in the ciflag field), and maps lower-case
letters in the ASCII character set to their upper-case
equivalents on output (the OLCUC flag is set in the coflag
field). Escape sequences are accepted on input, and gen-
erated on output, to handle certain ASCII characters not
supported by older terminals (the XCASE flag is set in the
clflag field).
Other flags are directly mapped to flags in the termios
structure:
sgflags flags in termios structure
CBREAK complement of ICANON in clflag field
ECHO ECHO in clflag field
TANDEM IXOFF in ciflag field
Another structure associated with each terminal specifies
characters that are special in both the old Version 7 and
the newer 4BSD terminal interfaces. The following structure
is defined by <sys/ioctl.h>:
struct tchars {
3
ttcompat(7) DEVICES AND MODULES ttcompat(7)
char tintrc; /* interrupt */
char tquitc; /* quit */
char tstartc; /* start output */
char tstopc; /* stop output */
char teofc; /* end-of-file */
char tbrkc; /* input delimiter (like nl) */
};
XENIX defines the tchar structure as tc. The characters are
mapped to members of the ccc field of the termios structure
as follows:
tchars ccc index
tintrc VINTR
tquitc VQUIT
tstartc VSTART
tstopc VSTOP
teofc VEOF
tbrkc VEOL
Also associated with each terminal is a local flag word,
specifying flags supported by the new 4BSD terminal inter-
face. Most of these flags are directly mapped to flags in
the termios structure:
local flags flags in termios structure
LCRTBS not supported
LPRTERA ECHOPRT in the clflag field
LCRTERA ECHOE in the clflag field
LTILDE not supported
LTOSTOP TOSTOP in the clflag field
LFLUSHO FLUSHO in the clflag field
LNOHANG CLOCAL in the ccflag field
LCRTKIL ECHOKE in the clflag field
LCTLECH CTLECH in the clflag field
LPENDIN PENDIN in the clflag field
LDECCTQ complement of IXANY in the ciflag field
LNOFLSH NOFLSH in the clflag field
Another structure associated with each terminal is the
ltchars structure which defines control characters for the
new 4BSD terminal interface. Its structure is:
struct ltchars {
char tsuspc; /* stop process signal */
char tdsuspc; /* delayed stop process signal */
char trprntc; /* reprint line */
char tflushc; /* flush output (toggles) */
char twerasc; /* word erase */
char tlnextc; /* literal next character */
};
4
ttcompat(7) DEVICES AND MODULES ttcompat(7)
The characters are mapped to members of the ccc field of
the termios structure as follows:
ltchars ccc index
tsuspc VSUSP
tdsuspc VDSUSP
trprntc VREPRINT
tflushc VDISCARD
twerasc VWERASE
tlnextc VLNEXT
IOCTLS
ttcompat responds to the following ioctl calls. All others
are passed to the module below.
TIOCGETP The argument is a pointer to an sgttyb struc-
ture. The current terminal state is fetched;
the appropriate characters in the terminal state
are stored in that structure, as are the input
and output speeds. The values of the flags in
the sg_flags field are derived from the flags in
the terminal state and stored in the structure.
TIOCEXCL Set ``exclusive-use'' mode; no further opens are
permitted until the file has been closed.
TIOCNXCL Turn off ``exclusive-use'' mode.
TIOCSETP The argument is a pointer to an sgttyb struc-
ture. The appropriate characters and input and
output speeds in the terminal state are set from
the values in that structure, and the flags in
the terminal state are set to match the values
of the flags in the sg_flags field of that
structure. The state is changed with a TCSETSF
ioctl so that the interface delays until output
is quiescent, then throws away any unread char-
acters, before changing the modes.
TIOCSETN The argument is a pointer to an sgttyb struc-
ture. The terminal state is changed as TIOCSETP
would change it, but a TCSETS ioctl is used, so
that the interface neither delays nor discards
input.
TIOCHPCL The argument is ignored. The HUPCL flag is set
in the ccflag word of the terminal state.
TIOCFLUSH The argument is a pointer to an int variable.
If its value is zero, all characters waiting in
input or output queues are flushed. Otherwise,
the value of the int is treated as the logical
5
ttcompat(7) DEVICES AND MODULES ttcompat(7)
OR of the FREAD and FWRITE flags defined by
<sys/file.h> ; if the FREAD bit is set, all
characters waiting in input queues are flushed,
and if the FWRITE bit is set, all characters
waiting in output queues are flushed.
TIOCBRK The argument is ignored. The break bit is set
for the device.
TIOCCBRK The argument is ignored. The break bit is
cleared for the device.
TIOCSDTR The argument is ignored. The Data Terminal
Ready bit is set for the device.
TIOCCDTR The argument is ignored. The Data Terminal
Ready bit is cleared for the device.
TIOCSTOP The argument is ignored. Output is stopped as
if the STOP character had been typed.
TIOCSTART The argument is ignored. Output is restarted as
if the START character had been typed.
TIOCGETC The argument is a pointer to an tchars struc-
ture. The current terminal state is fetched,
and the appropriate characters in the terminal
state are stored in that structure.
TIOCSETC The argument is a pointer to an tchars struc-
ture. The values of the appropriate characters
in the terminal state are set from the charac-
ters in that structure.
TIOCLGET The argument is a pointer to an int. The
current terminal state is fetched, and the
values of the local flags are derived from the
flags in the terminal state and stored in the
int pointed to by the argument.
TIOCLBIS The argument is a pointer to an int whose value
is a mask containing flags to be set in the
local flags word. The current terminal state is
fetched, and the values of the local flags are
derived from the flags in the terminal state;
the specified flags are set, and the flags in
the terminal state are set to match the new
value of the local flags word.
TIOCLBIC The argument is a pointer to an int whose value
is a mask containing flags to be cleared in the
local flags word. The current terminal state is
6
ttcompat(7) DEVICES AND MODULES ttcompat(7)
fetched, and the values of the local flags are
derived from the flags in the terminal state;
the specified flags are cleared, and the flags
in the terminal state are set to match the new
value of the local flags word.
TIOCLSET The argument is a pointer to an int containing a
new set of local flags. The flags in the termi-
nal state are set to match the new value of the
local flags word.
TIOCGLTC The argument is a pointer to an ltchars struc-
ture. The values of the appropriate characters
in the terminal state are stored in that struc-
ture.
TIOCSLTC The argument is a pointer to an ltchars struc-
ture. The values of the appropriate characters
in the terminal state are set from the charac-
ters in that structure.
FIORDCHK FIORDCHK returns the number of immediately read-
able characters from the argument descriptor in
the int pointed to by the arg.
FIONREAD FIONREAD returns the number of immediately read-
able characters from the argument descriptor in
the int pointed to by the arg.
LDSMAP Calls the function emsetmap (tp, mp) if the
function is ??.
LDGMAP Calls the function emgetmap (tp, mp) if the
function is ??.
LDNMAP Calls the function emunmap (tp, mp) if the func-
tion is p??.
The following ioctls are returned as successful for the sake
of compatibility. However, nothing significant is done
(i.e., the state of the terminal is not changed in any way).
TIOCSETD LDOPEN
TIOCGETD LDCLOSE
DIOCSETP LDCHG
DIOCSETP LDSETT
DIIOGETP LDGETT
SEE ALSO
ioctl(2), termios(2), termio(7), ldterm(7).
NOTES
TIOCBRK and TIOCCBRK should be handled by the driver.
7
ttcompat(7) DEVICES AND MODULES ttcompat(7)
FIONREAD and FIORDCHK are handled in the stream head.
8