Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ldterm(7) — DG/UX R4.11MU05

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

termios(2)

console(7)

ports(7)

termio(7)



ldterm(7)                      DG/UX R4.11MU05                     ldterm(7)


NAME
       ldterm - standard STREAMS terminal line discipline module

DESCRIPTION
       ldterm is a STREAMS module that provides most of the termio(7)
       terminal interface.  This 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.  All other termio/termios functions are
       performed by ldterm; some of them, however, 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 ciflag word and
       the delays specified in the coflag word.

       ldterm also handles EUC and multi-byte characters.

       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
            When this message is received, either an interrupt signal is
            generated or the message is treated as if it were an MDATA
            message containing a single ASCII NUL character, depending on
            the state of the BRKINT flag.

       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 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
            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, MSTOPI and MSTARTI messages are sent
            downstream.

            MDATA messages are sent downstream, as necessary, to perform
            echoing.

            If a signal is to be generated, an MFLUSH message with a flag
            byte of FLUSHR is placed on the read queue.  If the signal is
            also to flush output, an MFLUSH message with a flag byte of
            FLUSHW is sent downstream.

       MCTL
            If the size of the data buffer associated with the message is
            the size of struct iocblk, ldterm will perform functional
            negotiation to determine where the termio(7) 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 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 MCDOCANON, all
            input processing is enabled.  If the command is MCPARTCANON,
            then an MDATA message containing a termios structure is
            expected to be attached to the original MCTL message.  The
            ldterm module will examine the iflag, oflag, and lflag fields of
            the termios structure and from then on will process only those
            flags which 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 message 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 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 performed and the processed message is
            passed downstream along with any MDELAY messages generated.
            Otherwise, the message is passed downstream without change.

       All other messages are passed downstream unchanged.

IOCTLS
       The following ioctls are processed by the ldterm module.  All others
       are passed downstream.  EUCWSET and EUCWGET are ISTR ioctl calls
       whereas other ioctls listed here are TRANSPARENT ioctls.

       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 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.

       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 and an MIOCACK message upstream.

       EUCWSET
            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 via MCTL messages.

       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.

SEE ALSO
       termios(2), console(7), ports(7), termio(7).
       Programmer's Guide: STREAMS.


Licensed material--property of copyright holder(s)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026