Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ttcompat(7) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ioctl(2)

ldterm(7)

termio(7)

termios(3C)






       ttcompat(7)                                              ttcompat(7)


       NAME
             ttcompat - V7, 4BSD and XENIX STREAMS compatibility module

       SYNOPSIS
             #include <sys/stream.h>
             #include <sys/stropts.h>
             #include <sys/ttold.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 interface
             [see termio(7)].  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 with the
             autopush(1M) 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 downstream.
             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 supported.  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/ioctl.h:

                   struct sgttyb {
                        char sg_ispeed;
                        char sg_ospeed;
                        char sg_erase;
                        char sg_kill;


                           Copyright 1994 Novell, Inc.               Page 1













      ttcompat(7)                                              ttcompat(7)


                       int  sg_flags;
                  };

            The sg_ispeed and sg_ospeed fields describe the input and
            output speeds of the device, and reflect the values in the
            c_cflag field of the termios structure.  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 terminal state,
            represented by the termios structure.

            Delay type 0 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         not supported
                  TAB1        TAB1
                  TAB2        TAB2
                  XTABS       TAB3
                  NL1         ONLRET|CR1
                  NL2         NL1

            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:

                  Parity is not to be generated on output or checked on
                  input:

                        The character size is set to CS8 and the flag is
                        cleared in the c_cflag field of the termios
                        structure.



                          Copyright 1994 Novell, Inc.               Page 2













       ttcompat(7)                                              ttcompat(7)


                   Even parity characters are to be generated on output and
                   accepted on input:

                         The flag is set in the c_iflag field of the
                         termios structure, the character size is set to
                         CS7 and the flag is set in the c_cflag field of
                         the termios structure.

                   Odd parity characters are to be generated on output and
                   accepted on input:

                         The flag is set in the c_iflag field, the
                         character size is set to CS7 and the and flags are
                         set in the c_cflag field of the termios structure.

                   Even parity characters are to be generated on output and
                   characters of either parity are to be accepted on input:

                         The flag is cleared in the c_iflag field, the
                         character size is set to CS7 and the flag is set
                         in the c_cflag field of the termios structure.

             The RAW flag disables all output processing (the OPOST flag in
             the c_oflag field, and the XCASE flag in the c_lflag 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).  8 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_lflag field of the termios structure.

             The CRMOD flag turns input RETURN characters into NEWLINE
             characters, and output and echoed NEWLINE characters to be
             output as a 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 character
             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 generated on output, to


                           Copyright 1994 Novell, Inc.               Page 3













      ttcompat(7)                                              ttcompat(7)


            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/ioctl.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,
            specifying flags supported by the new 4BSD terminal interface.
            Most of these flags are directly mapped to flags in the
            termios structure:








                          Copyright 1994 Novell, Inc.               Page 4













       ttcompat(7)                                              ttcompat(7)


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

             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     VSUSP
                   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.  The values of the flags in the


                           Copyright 1994 Novell, Inc.               Page 5













      ttcompat(7)                                              ttcompat(7)


                        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
                        (except by a privileged user) are permitted 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.

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

            TIOCBRK     The argument is ignored.  The break bit is set for
                        the device.

            TIOCCBRK    The argument is ignored.  The break bit is cleared
                        for the device.





                          Copyright 1994 Novell, Inc.               Page 6













       ttcompat(7)                                              ttcompat(7)


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



                           Copyright 1994 Novell, Inc.               Page 7













      ttcompat(7)                                              ttcompat(7)


            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.

            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    FIORDCHK returns the number of immediately
                        readable characters.  The argument is ignored.

            FIONREAD    FIONREAD returns the number of immediately
                        readable characters in the int pointed to by the
                        argument.

            LDSMAP      Calls the function emsetmap(tp, mp) if the
                        function is configured in the kernel.

            LDGMAP      Calls the function emgetmap(tp, mp) if the
                        function is configured in the kernel.

            LDNMAP      Calls the function emunmap(tp, mp) if the function
                        is configured in the kernel.

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

                  TIOCSETD    LDOPEN
                  TIOCGETD    LDCLOSE
                  DIOCSETP    LDCHG
                  DIOCSETP    LDSETT
                  DIIOGETP    LDGETT

      REFERENCES
            ioctl(2), ldterm(7), termio(7), termios(3C)

      NOTICES
            TIOCBRK and TIOCCBRK should be handled by the driver.
            FIONREAD and FIORDCHK are handled in the stream head.


                          Copyright 1994 Novell, Inc.               Page 8








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