ttcompat(7) ttcompat(7)
NAME
ttcompat - V7, 4BSD and XENIX STREAMS compatibility module
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 interface [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 downstream. 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 ccflag field are not supported, the func-
tions provided by the sgispeed and sgospeed 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 supported. If the TCXONC ioctl is not supported, the functions pro-
vided by the TIOCSTOP and TIOCSTART ioctl calls will not be supported.
If the TIOCMBIS and TIOCMBIC ioctl calls are not supported, the func-
tions 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;
};
Page 1 Reliant UNIX 5.44 Printed 11/98
ttcompat(7) 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 sgerase and sgkill fields of the argument
structure specify the erase and kill characters respectively, and
reflect the values in the VERASE and VKILL members of the ccc field
of the termios structure.
The sgflags 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 terminal state, represented by the termios
structure.
Delay type 0 is always mapped into the equivalent delay type 0 in the
coflag field of the termios structure. Other delay mappings are per-
formed as follows:
sgflags coflag
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 ciflag 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 ccflag
field of the termios structure.
- Even parity characters are to be generated on output and accepted
on input; the flag is set in the ciflag field of the termios
structure, the character size is set to CS7 and the flag is set in
the ccflag field of the termios structure.
- Odd parity characters are to be generated on output and accepted on
input; the flag is set in the ciflag field, the character size is
set to CS7 and the and flags are set in the ccflag 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 ciflag field, the character size is set to CS7 and the flag
is set in the ccflag field of the termios structure.
Page 2 Reliant UNIX 5.44 Printed 11/98
ttcompat(7) ttcompat(7)
The RAW flag disables all output processing (the OPOST flag in the
coflag field, and the XCASE flag in the clflag field, are cleared in
the termios structure) and input processing (all flags in the ciflag
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 ccflag field of the
termios structure. The signal-generating and line-editing control
characters are disabled by clearing the ISIG and ICANON flags in the
clflag field of the termios structure.
The CRMOD flag turns input RETURN characters into NEWLINE characters,
and output and echoed NEWLINE characters to be output as a RETURN fol-
lowed by a LINEFEED. The ICRNL flag in the ciflag field, and the
OPOST and ONLCR flags in the coflag field, are set in the termios
structure.
The LCASE flag maps uppercase letters in the ASCII character set to
their lowercase equivalents on input (the IUCLC flag is set in the
ciflag field), and maps lowercase letters in the ASCII character set
to their uppercase equivalents on output (the OLCUC flag is set in the
coflag field). Escape sequences are accepted on input, and generated
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>:
Page 3 Reliant UNIX 5.44 Printed 11/98
ttcompat(7) ttcompat(7)
struct tchars
{
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 interface. 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 struc-
ture which defines control characters for the new 4BSD terminal inter-
face. 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 */
};
Page 4 Reliant UNIX 5.44 Printed 11/98
ttcompat(7) 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 STREAMS module below.
TIOCGETP The argument is a pointer to an sgttyb structure. The
current terminal state is fetched; the appropriate char-
acters in the terminal state are stored in that struc-
ture, as are the input and output speeds. The values of
the flags in the sgflags 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 structure. 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 sgflags field of that struc-
ture. The state is changed with a TCSETSF ioctl so that the
interface delays until output is quiescent, then throws
away any unread characters, before changing the modes.
TIOCSETN The argument is a pointer to an sgttyb structure. 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 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.
Page 5 Reliant UNIX 5.44 Printed 11/98
ttcompat(7) ttcompat(7)
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 a tchars structure. 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 a tchars structure. The
values of the appropriate characters in the terminal
state are set from the characters 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 fetched, and the values of
the local flags are derived from the flags in the termi-
nal 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 terminal state are set
to match the new value of the local flags word.
Page 6 Reliant UNIX 5.44 Printed 11/98
ttcompat(7) ttcompat(7)
TIOCGLTC The argument is a pointer to an ltchars structure. The
values of the appropriate characters in the terminal
state are stored in that structure.
TIOCSLTC The argument is a pointer to an ltchars structure. The
values of the appropriate characters in the terminal
state are set from the characters in that structure.
FIORDCHK FIORDCHK returns the number of immediately readable char-
acters. The argument is ignored.
FIONREAD FIONREAD returns the number of immediately readable char-
acters in the int pointed to by the argument.
LDSMAP Calls the function emsetmap(tp, mp) if the function is
configured in the kernel.
LDGMAP Calls the function emgetmap(tp, mp) if the function is
configured in the kernel.
LDNMAP Calls the function emunmap(tp, mp) if the function is
configured in the kernel.
The following ioctls are returned as successful for the sake of compa-
tibility. 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
NOTES
TIOCBRK and TIOCCBRK should be handled by the driver. FIONREAD and
FIORDCHK are handled in the stream head.
SEE ALSO
ioctl(2), termios(3C), ldterm(7), termio(7).
Page 7 Reliant UNIX 5.44 Printed 11/98