Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ldterm(7) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

pseudo(1)

console(7)

termio(7)

termios(3C)






       ldterm(7)                                                  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
             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.  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 c_iflag word and
             the delays specified in the c_oflag word.

             ldterm also handles EUC and multi-byte characters.

             When ldterm is pushed onto a stream, the open routine
             initializes the settings of the termio flags.  The default
             settings in most implementations are:
                   c_iflag = BRKINT|ICRNL|IXON|ISTRIP
                   c_oflag = OPOST|ONLCR|TAB3
                   c_cflag = 0
                   c_lflag = ISIG|ICANON|ECHO|ECHOK

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

            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


                           Copyright 1994 Novell, Inc.               Page 1













      ldterm(7)                                                  ldterm(7)


                  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 messages are sent downstream.

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

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

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

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





                          Copyright 1994 Novell, Inc.               Page 2













       ldterm(7)                                                  ldterm(7)


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

            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.

             All other messages are passed downstream unchanged.

          ioctls
             The following ioctls are processed by the ldterm module. All
             others are passed downstream.  EUC_WSET and EUC_WGET are I_STR
             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 M_SETOPTS message


                           Copyright 1994 Novell, Inc.               Page 3













      ldterm(7)                                                  ldterm(7)


                  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 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 argument is 2 and input is not
                  already stopped, an M_STOPI message is sent downstream.
                  If the argument is 3 and input is stopped, an M_STARTI
                  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 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 via M_CTL messages.

           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.





                          Copyright 1994 Novell, Inc.               Page 4













       ldterm(7)                                                  ldterm(7)


       REFERENCES
             pseudo(1), console(7), termio(7), termios(3C)














































                           Copyright 1994 Novell, Inc.               Page 5








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