ttcompat(7M)




NAME

     ttcompat - V7, 4BSD and XENIX STREAMS compatibility module


SYNOPSIS

     #define BSD_COMP
     #include <sys/stropts.h>
     #include <sys/ioctl.h>
     ioctl(fd, I_PUSH, "ttcompat");


DESCRIPTION

     ttcompat is a STREAMS module that translates the ioctl calls
     supported  by  the older Version 7, 4BSD, and XENIX terminal
     drivers into the ioctl calls supported by the termio  inter-
     face  (see termio(7I)). All other messages pass through this
     module unchanged; the behavior of read and  write  calls  is
     unchanged,  as is the behavior of ioctl calls other than the
     ones supported by ttcompat.

     This module can be automatically pushed onto a stream  using
     the autopush  mechanism when a terminal device is opened; it
     does not have to be explicitly  pushed onto a  stream.  This
     module  requires  that the termios interface be supported by
     the modules and the application can push  the  driver  down-
     stream.  The TCGETS, TCSETS, and TCSETSF ioctl calls must be
     supported. If any information set or fetched by those  ioctl
     calls is not supported by the modules and driver downstream,
     some of the V7/4BSD/XENIX functions may  not  be  supported.
     For example, if the CBAUD bits in the  c_cflag field are not
     supported, the  functions  provided  by  the  sg_ispeed  and
     sg_ospeed  fields  of  the sgttyb structure (see below) will
     not be supported.  If the TCFLSH ioctl is not supported, the
     function  provided  by  the TIOCFLUSH ioctl will not be sup-
     ported. If the TCXONC ioctl is not supported, the  functions
     provided  by the TIOCSTOP and TIOCSTART ioctl calls will not
     be supported. If the TIOCMBIS and TIOCMBIC ioctl  calls  are
     not  supported,  the  functions provided by the TIOCSDTR and
     TIOCCDTR ioctl calls will not be supported.

     The basic ioctl calls use the sgttyb  structure  defined  by
     <sys/ttold.h> (included by <sys/ioctl.h>):

     struct   sgttyb   {
          char sg_ispeed;
          char sg_ospeed;
          char sg_erase;
          char sg_kill;
          int  sg_flags;
     };

     The sg_ispeed and sg_ospeed fields describe the   input  and
     output speeds of the device.  If the speed set on the device
     is  over B38400,  then it is reported as B38400 for compati-
     bility  reasons.  If  it  is  set to B38400 and  the current
     speed is over B38400, the change is  ignored.  See  TIOCGETP
     and  TIOCSETP  below. The sg_erase and sg_kill fields of the
     argument structure specify the  erase  and  kill  characters
     respectively, and reflect the values in the VERASE and VKILL
     members of the c_cc field of the termios structure.

     The  sg_flags  field  of  the  argument  structure  contains
     several  flags  that determine the system's treatment of the
     terminal. They are mapped into flags in fields of the termi-
     nal state, represented by the termios structure.

     Delay type 0 (NL0,  TAB0, CR0, FF0,  BS0) is  always  mapped
     into the equivalent delay type 0 in the c_oflag field of the
     termios structure. Other delay  mappings are   performed  as
     follows:

     ____________________________________________________________
    |        sg_flags       |               c_oflag             |
    |_______________________|___________________________________|
    | BS1                   |  BS1                              |
    |_______________________|___________________________________|
    | FF1                   |  VT1                              |
    |_______________________|___________________________________|
    | CR1                   |  CR2                              |
    |_______________________|___________________________________|
    | CR2                   |  CR3                              |
    |_______________________|___________________________________|
    | CR3                   |  CR0 (not supported)              |
    |_______________________|___________________________________|
    | TAB1                  |  TAB1                             |
    |_______________________|___________________________________|
    | TAB2                  |  TAB2                             |
    |_______________________|___________________________________|
    | XTABS                 |  TAB3                             |
    |_______________________|___________________________________|
    | NL1                   |  ONLRET|CR1                       |
    |_______________________|___________________________________|
    | NL2                   |  NL1                              |
    |_______________________|___________________________________|
    | NL3                   |  NL0 (not supported)              |
    |_______________________|___________________________________|

     If previous  TIOCLSET  or  TIOCLBIS  ioctl  calls  have  not
     selected  LITOUT  or  PASS8  mode,  and  if  RAW mode is not
     selected, the ISTRIP flag is set in the c_iflag field of the
     termios  structure, and the EVENP and ODDP flags control the
     parity of characters sent to the terminal and accepted  from
     the terminal, as follows:

     0 (neither EVENP nor ODDP)
           Parity is not to be generated on output or checked  on
           input.  The   character  size  is  set  to CS8 and the
           PARENB flag is cleared in the  c_cflag  field  of  the
           termios structure.

     EVENP Even parity characters are to be generated  on  output
           and  accepted  on input. The INPCK  flag is set in the
           c_iflag field of the termios structure, the  character
           size  is  set to CS7 and the PARENB flag is set in the
           c_iflag field of the termios structure.

     ODDP  Odd parity characters are to be  generated  on  output
           and  accepted  on  input. The INPCK flag is set in the
           c_iflag, the character size is  set  to  CS7  and  the
           PARENB  and  PARODD flags are set in the c_iflag field
           of the termios structure.

     EVENP|ODDP or ANYP
           Even parity characters are to be generated  on  output
           and  characters  of  either parity are to be  accepted
           on input. The INPCK flag is  cleared  in  the  c_iflag
           field, the character size is set to CS7 and the PARENB
           flag is set in the c_iflag field of the termios struc-
           ture.

     The RAW flag disables all output processing (the OPOST  flag
     in  the c_oflag field, and the XCASE and IEXTEN flags in the
     c_iflag field are cleared  in  the  termios  structure)  and
     input processing (all flags  in the c_iflag field other than
     the IXOFF and IXANY  flags   are  cleared   in  the  termios
     structure).   Eight  bits  of  data,  with no parity bit are
     accepted on input and generated  on  output;  the  character
     size  is  set  to  CS8  and  the PARENB and PARODD flags are
     cleared in the c_cflag field of the termios  structure.  The
     signal-generating  and  line-editing  control characters are
     disabled by clearing  the  ISIG  and  ICANON  flags  in  the
     c_iflag field of the termios structure.

     The CRMOD flag turns input carriage return  characters  into
     linefeed  characters,  and  output linefeed characters to be
     sent as a carriage return followed by a linefeed. The  ICRNL
     flag  in the c_iflag field, and the OPOST and ONLCR flags in
     the c_oflag field, are set in the termios structure.

     The LCASE flag maps upper-case letters in the ASCII  charac-
     ter  set to their lower-case equivalents on input (the IUCLC
     flag is set in  the  c_iflag  field),  and  maps  lower-case
     letters  in  the  ASCII  character  set  to their upper-case
     equivalents on output (the OLCUC flag is set in the  c_oflag
     field).  Escape  sequences  are  accepted on input, and gen-
     erated on output, to handle  certain  ASCII  characters  not
     supported  by  older terminals (the XCASE flag is set in the
     c_lflag field).

     Other flags are directly mapped  to  flags  in  the  termios
     structure:

     ____________________________________________________________
    |      sg_flags      |      Flags in termios structure      |
    |____________________|______________________________________|
    | CBREAK             | Complement of ICANON in c_lflag field|
    |____________________|______________________________________|
    | ECHO               | ECHO in c_lflag field                |
    |____________________|______________________________________|
    | TANDEM             | IXOFF in c_iflag field               |
    |____________________|______________________________________|

     Another structure associated with  each  terminal  specifies
     characters  that  are  special in both the old Version 7 and
     the newer 4BSD terminal interfaces. The following  structure
     is defined by <sys/ttold.h>:

     struct   tchars   {
               char t_intrc;     /* interrupt */
               char t_quitc;     /* quit */
               char t_startc; /* start output */
               char t_stopc;     /* stop output */
               char t_eofc;        /* end-of-file */
               char t_brkc;        /* input delimiter (like nl) */
          };

     XENIX defines the  tchar structure as   tc.  The  characters
     are  mapped  to  members  of  the  c_cc field of the termios
     structure as follows:

            tchars                c_cc index
            t_intrc               VINTR
            t_quitc               VQUIT
            t_startc              VSTART
            t_stopc               VSTOP
            t_eofc                VEOF
            t_brkc                VEOL

     Also associated with each terminal  is  a  local  flag  word
     (TIOCLSET  and TIOCLGET), specifying flags  supported by the
     new  4BSD  terminal  interface.  Most  of  these  flags  are
     directly mapped to flags in the termios structure:

     ____________________________________________________________
    |    Local flags    |       Flags in termios structure      |
    |___________________|_______________________________________|
    | LCRTBS            |  Not supported                        |
    |___________________|_______________________________________|
    | LPRTERA           |  ECHOPRT in the c_lflag field         |
    |___________________|_______________________________________|
    | LCRTERA           |  ECHOE in the c_lflag field           |
    |___________________|_______________________________________|
    | LTILDE            |  Not supported                        |
    |___________________|_______________________________________|
    | LMDMBUF           |  Not supported                        |
    |___________________|_______________________________________|
    | LTOSTOP           |  TOSTOP in the c_lflag field          |
    |___________________|_______________________________________|
    | LFLUSHO           |  FLUSHO in the c_lflag field          |
    |___________________|_______________________________________|
    | LNOHANG           |  CLOCAL in the c_cflag field          |
    |___________________|_______________________________________|
    | LCRTKIL           |  ECHOKE in the c_lflag field          |
    |___________________|_______________________________________|
    | LPASS8            |  CS8 in the c_cflag field             |
    |___________________|_______________________________________|
    | LCTLECH           |  CTLECH in the c_lflag field          |
    |___________________|_______________________________________|
    | LPENDIN           |  PENDIN in the c_lflag field          |
    |___________________|_______________________________________|
    | LDECCTQ           |  Complement of IXANY  in  the  c_iflag|
    |                   |  field                                |
    |___________________|_______________________________________|
    | LNOFLSH           |  NOFLSH in the c_lflag field          |
    |___________________|_______________________________________|

     Each flag has a corresponding equivalent sg_flags value. The
     sg_flags  definitions  omit  the  leading  "L"; for example,
     TIOCSETP with  sg_flags  set  to  TOSTOP  is  equivalent  to
     TIOCLSET with LTOSTOP.

     Another structure  associated  with  each  terminal  is  the
     ltchars  structure  which defines control characters for the
     new 4BSD terminal interface. Its structure is:

     struct ltchars {
        char t_suspc;  /* stop process signal */
        char t_dsuspc; /* delayed stop process signal */
        char t_rprntc; /* reprint line */
        char t_flushc; /*flush output (toggles) */
        char t_werasc; /* word erase */
        char t_lnextc; /* literal next character */
     };

     The characters are mapped to members of the  c_cc  field  of
     the termios structure as follows:

     ____________________________________________________________
    |      ltchars      |               c_cc index              |
    |___________________|_______________________________________|
    | t_suspc           |  VSUS                                 |
    |___________________|_______________________________________|
    | t_dsuspc          |  VDSUSP                               |
    |___________________|_______________________________________|
    | t_rprntc          |  VREPRINT                             |
    |___________________|_______________________________________|
    | t_flushc          |  VDISCARD                             |
    |___________________|_______________________________________|
    | t_werasc          |  VWERASE                              |
    |___________________|_______________________________________|
    | t_lnextc          |  VLNEXT                               |
    |___________________|_______________________________________|


IOCTLS

     ttcompat responds to the following ioctl calls.  All  others
     are passed to the module below.

     TIOCGETP
           The argument is a pointer to an sgttyb structure.  The
           current   terminal  state is fetched; the  appropriate
           characters in  the terminal  state are stored  in that
           structure,  as are the input and output speeds. If the
           speed is over B38400,  then B38400 is   returned.  The
           values  of the flags in the sg_flags field are derived
           from the flags in the terminal state and stored in the
           structure.

     TIOCEXCL
           Set ``exclusive-use'' mode; no further opens are  per-
           mitted until the file has been closed.

     TIOCNXCL
           Turn off ``exclusive-use'' mode.

     TIOCSETP
           The argument is a pointer to an sgttyb structure.  The
           appropriate  characters and input and output speeds in
           the terminal state are set from  the  values  in  that
           structure, and the flags in the terminal state are set
           to match the values of the flags in the sg_flags field
           of that structure. The state is changed with a TCSETSF
           ioctl so that the interface  delays  until  output  is
           quiescent,  then  throws  away  any unread characters,
           before changing the modes. If the current device speed
           is  over  B38400 for either input or output speed, and
           B38400 is specified through this  interface  for  that
           speed,  the actual device speed is not changed. If the
           device speed is B38400 or lower or if some speed other
           than B38400 is specified, then the actual speed speci-
           fied is set.

     TIOCSETN
           The argument is a pointer to an sgttyb structure.  The
           terminal  state  is  changed as  TIOCSETP would change
           it, but a TCSETS ioctl is used, so that the  interface
           neither delays nor discards input.

     TIOCHPCL
           The argument is ignored. The HUPCL flag is set in  the
           c_cflag word of the terminal state.

     TIOCFLUSH
           The argument is a pointer to an int variable.  If  its
           value is zero, all characters waiting in input or out-
           put queues are flushed. Otherwise, the  value  of  the
           int  is  treated  as  the  logical OR of the FREAD and
           FWRITE flags defined by <sys/file.h>. If the FREAD bit
           is  set,  all  characters  waiting in input queues are
           flushed, and if the FWRITE bit is set, all  characters
           waiting in output queues are flushed.

     TIOCSBRK
           The argument is ignored. The break bit is set for  the
           device.   (This   is  not  supported  by ttcompat. The
           underlying driver must support TIOCSBRK.)

     TIOCCBRK
           The argument is ignored. The break bit is cleared  for
           the  device.  (This  is not supported by ttcompat. The
           underlying driver must support TIOCCBRK.)

     TIOCSDTR
           The argument is ignored. The Data Terminal  Ready  bit
           is set for the device.

     TIOCCDTR
           The argument is ignored. The Data Terminal  Ready  bit
           is cleared for the device.

     TIOCSTOP
           The argument is ignored. Output is stopped as  if  the
           STOP character had been typed.

     TIOCSTART
           The argument is ignored. Output is restarted as if the
           START character had been typed.

     TIOCGETC
           The argument is a pointer to a tchars structure.   The
           current terminal state is fetched, and the appropriate
           characters in the terminal state are  stored  in  that
           structure.

     TIOCSETC
           The argument is a pointer to a tchars structure.   The
           values  of  the appropriate characters in the terminal
           state are set from the characters in that structure.

     TIOCLGET
           The argument is a pointer to an int. The current  ter-
           minal  state  is  fetched, and the values of the local
           flags are derived from the flags in the terminal state
           and stored in the int pointed to by the argument.

     TIOCLBIS
           The argument is a pointer to an int whose value  is  a
           mask  containing  flags  to  be set in the local flags
           word. The current terminal state is fetched,  and  the
           values  of  the local flags are derived from the flags
           in the terminal state; the specified  flags  are  set,
           and  the  flags in the terminal state are set to match
           the new value of the local flags word.

     TIOCLBIC
           The argument is a pointer to an int whose value  is  a
           mask containing flags to be cleared in the local flags
           word. The current terminal state is fetched,  and  the
           values  of  the local flags are derived from the flags
           in  the  terminal  state;  the  specified  flags   are
           cleared,  and  the flags in the terminal state are set
           to match the new value of the local flags word.

     TIOCLSET
           The argument is a pointer to an int containing  a  new
           set  of  local  flags. The flags in the terminal state
           are set to match the  new value  of  the  local  flags
           word.  (This ioctl was added because sg_flags was once
           a  16   bit  value.  The  local  modes  controlled  by
           TIOCLSET  are  equivalent  to  the modes controlled by
           TIOCSETP and sg_flags.)

     TIOCGLTC
           The argument is a pointer to an ltchars structure. The
           values  of  the appropriate characters in the terminal
           state are stored in that structure.

     TIOCSLTC
           The argument is a pointer to an ltchars structure. The
           values  of  the appropriate characters in the terminal
           state are set from the characters in that structure.

     FIORDCHK
           Returns the number of immediately readable characters.
           The  argument  is  ignored. (This ioctl is  handled in
           the stream head, not in the ttcompat module.)

     FIONREAD
           Returns the number of immediately readable  characters
           in  the int pointed to by the argument. (This ioctl is
           handled in  the  stream  head,  not  in  the  ttcompat
           module.)

     The following ioctls are returned as successful for the sake
     of compatibility. However, nothing significant is done (that
     is, the state of the terminal is not changed in any way, and
     no message is passed through to the underlying tty driver).

            TIOCSETD  LDOPEN
            TIOCGETD  LDCLOSE
            DIOCSETP  LDCHG
            DIOCSETP  LDSETT
            DIOCGETP  LDGETT

     The following old ioctls are not supported by ttcompat,  but
     are supported by Solaris tty drivers.  As with all ioctl not
     otherwise listed in this  documentation,  these  are  passed
     through to the underlying driver and are handled there.

     TIOCREMOTE
     TIOCGWINSZ         TIOCSWINSZ

     The following ioctls are  not supported by ttcompat, and are
     generally  not  supported  by  Solaris tty drivers. They are
     passed through, and the tty drivers return EINVAL.

            LDSMAP    TIOCNOTTY
            LDGMAP    TIOCOUTQ
            LDNMAP

     (Note:   LDSMAP,   LDGMAP,  and   LDNMAP   are  defined   in
     <sys/termios.h>.)


SEE ALSO


     ioctl(2), termios(3C), ldterm(7M), termio(7I)


Man(1) output converted with man2html