ldterm(7M)
NAME
ldterm - standard STREAMS terminal line discipline module
SYNOPSIS
#include <sys/stream.h>
#include <sys/termios.h>
int ioctl(fd,I_PUSH,"ldterm");
DESCRIPTION
The ldterm STREAMS module provides most of the termio(7I)
terminal interface. The vis module does not perform the
low-level device control functions specified by flags in the
c_cflag word of the termio/termios structure, or by the
IGNBRK, IGNPAR, PARMRK, or INPCK flags in the c_iflag word
of the termio/termios structure. Those functions must be
performed by the driver or by modules pushed below the
ldterm module. The ldterm module performs all other
termio/termios functions, though some may require the
cooperation of the driver or modules pushed below ldterm and
may not be performed in some cases. These include the IXOFF
flag in the c_iflag word and the delays specified in the
c_oflag word.
The ldterm module also handles single and multi-byte charac-
ters from various codesets including both Extended Unix Code
(EUC) and non-EUC codesets.
The remainder of this section describes the processing of
various STREAMS messages on the read- and write-side.
Read-side Behavior
Various types of STREAMS messages are processed as follows:
M_BREAK
Depending on the state of the BRKINT flag, either
an interrupt signal is generated or the message
is treated as if it were an M_DATA message con-
taining a single ASCII NUL character when this
message is received.
M_DATA
This message is normally processed using the
standard termio input processing. If the ICANON
flag is set, a single input record (``line'') is
accumulated in an internal buffer and sent
upstream when a line-terminating character is
received. If the ICANON flag is not set, other
input processing is performed and the processed
data are passed upstream.
If output is to be stopped or started as a result
of the arrival of characters (usually CNTRL-Q and
CNTRL-S), M_STOP and M_START messages are sent
downstream. If the IXOFF flag is set and input is
to be stopped or started as a result of flow-
control considerations, M_STOPI and M_STARTI mes-
sages are sent downstream.
M_DATA messages are sent downstream, as neces-
sary, to perform echoing.
If a signal is to be generated, an M_FLUSH mes-
sage with a flag byte of FLUSHR is placed on the
read queue. If the signal is also to flush out-
put, an M_FLUSH message with a flag byte of
FLUSHW is sent downstream.
All other messages are passed upstream unchanged.
Write-side Behavior
Various types of STREAMS messages are processed as follows:
M_FLUSH
The write queue of the module is flushed of all its
data messages and the message is passed downstream.
M_IOCTL
The function of this ioctl is performed and the mes-
sage is passed downstream in most cases. The TCFLSH
and TCXONC ioctls can be performed entirely in the
ldterm module, so the reply is sent upstream and the
message is not passed downstream.
M_DATA
If the OPOST flag is set, or both the XCASE and ICANON
flags are set, output processing is performed and the
processed message is passed downstream along with any
M_DELAY messages generated. Otherwise, the message is
passed downstream without change.
M_CTL If the size of the data buffer associated with the
message is the size of struct iocblk, ldterm will per-
form functional negotiation to determine where the
termio(7I) processing is to be done. If the command
field of the iocblk structure (ioc_cmd) is set to
MC_NO_CANON, the input canonical processing normally
performed on M_DATA messages is disabled and those
messages are passed upstream unmodified. (This is for
the use of modules or drivers that perform their own
input processing, such as a pseudo-terminal in
TIOCREMOTE mode connected to a program that performs
this processing). If the command is MC_DO_CANON, all
input processing is enabled. If the command is
MC_PART_CANON, then an M_DATA message containing a
termios structure is expected to be attached to the
original M_CTL message. The ldterm module will examine
the iflag, oflag, and lflag fields of the termios
structure and from that point on, will process only
those flags that have not been turned ON. If none of
the above commands are found, the message is ignored.
In any case, the message is passed upstream.
M_FLUSH
The read queue of the module is flushed of all its
data messages and all data in the record being accumu-
lated are also flushed. The message is passed
upstream.
M_IOCACK
The data contained within the message, which is to be
returned to the process, are augmented if necessary,
and the message is passed upstream.
All other messages are passed downstream unchanged.
IOCTLS
The ldterm module processes the following TRANSPARENT
ioctls. All others are passed downstream.
TCGETS/TCGETA
The message is passed downstream. If an ack-
nowledgment is seen, the data provided by the
driver and modules downstream are augmented and
the acknowledgement is passed upstream.
TCSETS/TCSETSW/TCSETSF/TCSETA/TCSETAW/TCSETAF
The parameters that control the behavior of the
ldterm module are changed. If a mode change
requires options at the stream head to be
changed, an M_SETOPTS message is sent upstream.
If the ICANON flag is turned on or off, the read
mode at the stream head is changed to message-
nondiscard or byte-stream mode, respectively. If
the TOSTOP flag is turned on or off, the tostop
mode at the stream head is turned on or off,
respectively. In any case, ldterm passes the
ioctl on downstream for possible additional pro-
cessing.
TCFLSH
If the argument is 0, an M_FLUSH message with a
flag byte of FLUSHR is sent downstream and placed
on the read queue. If the argument is 1, the
write queue is flushed of all its data messages
and an M_FLUSH message with a flag byte of FLUSHW
is sent upstream and downstream. If the argument
is 2, the write queue is flushed of all its data
messages and an M_FLUSH message with a flag byte
of FLUSHRW is sent downstream and placed on the
read queue.
TCXONC
If the argument is 0 and output is not already
stopped, an M_STOP message is sent downstream. If
the argument is 1 and output is stopped, an
M_START message is sent downstream. If the argu-
ment is 2 and input is not already stopped, an
M_STOPI message is sent downstream. If the argu-
ment is 3 and input is stopped, an M_STARTI mes-
sage is sent downstream.
TCSBRK
The message is passed downstream, so the driver
has a chance to drain the data and then send an
M_IOCACK message upstream.
EUC_WSET
This call takes a pointer to an eucioc structure,
and uses it to set the EUC line discipline's
local definition for the code set widths to be
used for subsequent operations. Within the
stream, the line discipline may optionally notify
other modules of this setting using M_CTL mes-
sages. When this call is received and the
euciocstructure contains valid data, the line
discipline changes into EUC handling mode once
the euciocdata is completely transferred to an
internal data structure.
EUC_WGET
This call takes a pointer to an eucioc structure,
and returns in it the EUC code set widths
currently in use by the EUC line discipline. If
the current codeset of the line discipline is not
an EUC one, the result is meaningless.
SEE ALSO
termios(3C), console(7D), termio(7I)
STREAMS Programming Guide
Man(1) output converted with
man2html