STREAMS Modules ldterm(7M)
NAME
ldterm - standard STREAMS terminal line discipline module
SYNOPSIS
#include
#include
int ioctl(fd,IPUSH,"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
ccflag word of the termio/termios structure, or by the
IGNBRK, IGNPAR, PARMRK, or INPCK flags in the ciflag 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 IXOF
flag in the ciflag word and the delays specified in the
coflag 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:
MBREAK Depending on the state of the BRKINT flag,
either an interrupt signal is generated or the
message is treated as if it were an MDATA mes-
sage containing a single ASCI NUL character
when this message is received.
MDATA 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
SunOS 5.11 Last change: 7 Jun1999 1
STREAMS Modules ldterm(7M)
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), MSTOP and MSTART mes-
sages are sent downstream. If the IXOF flag is
set and input is to be stopped or started as a
result of flow-control considerations, MSTOPI
and MSTARTI messages are sent downstream.
MDATA messages are sent downstream, as neces-
sary, to perform echoing.
If a signal is to be generated, an MFLUSH mes-
sage with a flag byte of FLUSHR is placed on the
read queue. If the signal is also to flush out-
put, an MFLUSH 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:
MFLUSH The write queue of the module is flushed of all
its data messages and the message is passed
downstream.
MIOCTL The function of this ioctl is performed and the
message 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.
MDATA If the OPOST flag is set, or both the XCASE and
ICANON flags are set, output processing is per-
formed and the processed message is passed
downstream along with any MDELAY messages gen-
erated. Otherwise, the message is passed down-
stream without change.
MCTL If the size of the data buffer associated with
the message is the size of struct iocblk,
ldterm will perform functional negotiation to
SunOS 5.11 Last change: 7 Jun1999 2
STREAMS Modules ldterm(7M)
determine where the termio(7I) processing is to
be done. If the command field of the iocblk
structure (ioccmd) is set to MCNOCANON, the
input canonical processing normally performed
on MDATA messages is disabled and those mes-
sages 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 pro-
gram that performs this processing). If the
command is MCDOCANON, all input processing is
enabled. If the command is MCPARTCANON, then
an MDATA message containing a termios struc-
ture is expected to be attached to the original
MCTL message. The ldterm module will examine
the iflag, oflag, and lflag fields of the ter-
mios 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.
MFLUSH The read queue of the module is flushed of all
its data messages and all data in the record
being accumulated are also flushed. The mes-
sage is passed upstream.
MIOCACK 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 acknowledgment
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
SunOS 5.11 Last change: 7 Jun1999 3
STREAMS Modules ldterm(7M)
module are changed. If a mode change requires options at
the stream head to be changed, an MSETOPTS 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 possi-
ble additional processing.
TCFLSH
If the argument is 0, an MFLUSH 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 MFLUSH 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 MFLUSH 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 MSTOP message is sent downstream. If the argument is
1 and output is stopped, an MSTART message is sent
downstream. If the argument is 2 and input is not
already stopped, an MSTOPI message is sent downstream.
If the argument is 3 and input is stopped, an MSTARTI
message is sent downstream.
TCSBRK
The message is passed downstream, so the driver has a
chance to drain the data and then send an MIOCACK mes-
sage upstream.
EUCWSET
This call takes a pointer to an eucioc structure, and
uses it to set the EUC line discipline's local defini-
tion 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
MCTL messages. When this call is received and the
euciocstructure contains valid data, the line discipline
changes into EUC handling mode once the euciocdata is
SunOS 5.11 Last change: 7 Jun1999 4
STREAMS Modules ldterm(7M)
completely transferred to an internal data structure.
EUCWGET
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
SunOS 5.11 Last change: 7 Jun1999 5
|