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