Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ttcompat(7) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ioctl(2)

termios(3C)

ldterm(7)

termio(7)

ttcompat(7)                                                     ttcompat(7)

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

SYNOPSIS
     #include <sys/stream.h>
     #include <sys/stropt.h>
     #include <sys/ttcompat.h>
     #include <sys/ttold.h>

     ioctl(fd, IPUSH, "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 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 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 ccflag field are not supported, the func-
     tions provided by the sgispeed and sgospeed 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 pro-
     vided by the TIOCSTOP and TIOCSTART ioctl calls will not be supported.
     If the TIOCMBIS and TIOCMBIC ioctl calls are not supported, the func-
     tions 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 sgispeed;
              char sgospeed;
              char sgerase;
              char sgkill;
              int  sgflags;
          };







Page 1                       Reliant UNIX 5.44                Printed 11/98

ttcompat(7)                                                     ttcompat(7)

     The sgispeed and sgospeed fields describe the input and output
     speeds of the device, and reflect the values in the ccflag field of
     the termios structure. The sgerase and sgkill fields of the argument
     structure specify the erase and kill characters respectively, and
     reflect the values in the VERASE and VKILL members of the ccc field
     of the termios structure.

     The sgflags 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
     coflag field of the termios structure. Other delay mappings are per-
     formed as follows:

          sgflags    coflag
          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 ciflag 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 ccflag
        field of the termios structure.

     -  Even parity characters are to be generated on output and accepted
        on input; the flag is set in the ciflag field of the termios
        structure, the character size is set to CS7 and the flag is set in
        the ccflag field of the termios structure.

     -  Odd parity characters are to be generated on output and accepted on
        input; the flag is set in the ciflag field, the character size is
        set to CS7 and the and flags are set in the ccflag 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 ciflag field, the character size is set to CS7 and the flag
        is set in the ccflag field of the termios structure.


Page 2                       Reliant UNIX 5.44                Printed 11/98

ttcompat(7)                                                     ttcompat(7)

     The RAW flag disables all output processing (the OPOST flag in the
     coflag field, and the XCASE flag in the clflag field, are cleared in
     the termios structure) and input processing (all flags in the ciflag
     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 ccflag field of the
     termios structure. The signal-generating and line-editing control
     characters are disabled by clearing the ISIG and ICANON flags in the
     clflag 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 fol-
     lowed by a LINEFEED. The ICRNL flag in the ciflag field, and the
     OPOST and ONLCR flags in the coflag field, are set in the termios
     structure.

     The LCASE flag maps uppercase letters in the ASCII character set to
     their lowercase equivalents on input (the IUCLC flag is set in the
     ciflag field), and maps lowercase letters in the ASCII character set
     to their uppercase equivalents on output (the OLCUC flag is set in the
     coflag field). Escape sequences are accepted on input, and generated
     on output, to handle certain ASCII characters not supported by older
     terminals (the XCASE flag is set in the clflag field).

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

          sgflags    flags in termios structure
          CBREAK      complement of ICANON in clflag field
          ECHO        ECHO in clflag field
          TANDEM      IXOFF in ciflag 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>:



















Page 3                       Reliant UNIX 5.44                Printed 11/98

ttcompat(7)                                                     ttcompat(7)

          struct tchars
          {
              char tintrc;   /* interrupt */
              char tquitc;   /* quit */
              char tstartc;  /* start output */
              char tstopc;   /* stop output */
              char teofc;    /* end-of-file */
              char tbrkc;    /* input delimiter (like nl) */
          };

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

          tchars      ccc index
          tintrc     VINTR
          tquitc     VQUIT
          tstartc    VSTART
          tstopc     VSTOP
          teofc      VEOF
          tbrkc      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:

          local flags    flags in termios structure
          LCRTBS         not supported
          LPRTERA        ECHOPRT in the clflag field
          LCRTERA        ECHOE in the clflag field
          LTILDE         not supported
          LTOSTOP        TOSTOP in the clflag field
          LFLUSHO        FLUSHO in the clflag field
          LNOHANG        CLOCAL in the ccflag field
          LCRTKIL        ECHOKE in the clflag field
          LCTLECH        CTLECH in the clflag field
          LPENDIN        PENDIN in the clflag field
          LDECCTQ        complement of IXANY in the ciflag field
          LNOFLSH        NOFLSH in the clflag field

     Another structure associated with each terminal is the ltchars struc-
     ture which defines control characters for the new 4BSD terminal inter-
     face. Its structure is:

          struct ltchars
          {
              char tsuspc;   /* stop process signal */
              char tdsuspc;  /* delayed stop process signal */
              char trprntc;  /* reprint line */
              char tflushc;  /* flush output (toggles) */
              char twerasc;  /* word erase */
              char tlnextc;  /* literal next character */
          };


Page 4                       Reliant UNIX 5.44                Printed 11/98

ttcompat(7)                                                     ttcompat(7)

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

          ltchars     ccc index
          tsuspc     VSUSP
          tdsuspc    VDSUSP
          trprntc    VREPRINT
          tflushc    VDISCARD
          twerasc    VWERASE
          tlnextc    VLNEXT

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

     TIOCGETP     The argument is a pointer to an sgttyb structure. The
                  current terminal state is fetched; the appropriate char-
                  acters in the terminal state are stored in that struc-
                  ture, as are the input and output speeds. The values of
                  the flags in the sgflags field are derived from the
                  flags in the terminal state and stored in the structure.

     TIOCEXCL     Set "exclusive-use" mode; no further opens 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 sgflags field of that struc-
                  ture. 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
                  ccflag 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.


Page 5                       Reliant UNIX 5.44                Printed 11/98

ttcompat(7)                                                     ttcompat(7)

     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.

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



Page 6                       Reliant UNIX 5.44                Printed 11/98

ttcompat(7)                                                     ttcompat(7)

     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 char-
                  acters. The argument is ignored.

     FIONREAD     FIONREAD returns the number of immediately readable char-
                  acters 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 compa-
     tibility. However, nothing significant is done (i.e. the state of the
     terminal is not changed in any way).

          TIOCSETD     LDOPEN
          TIOCGETD     LDCLOSE
          DIOCSETP     LDCHG
          DIOCSETP     LDSETT
          DIIOGETP     LDGETT

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

SEE ALSO
     ioctl(2), termios(3C), ldterm(7), termio(7).















Page 7                       Reliant UNIX 5.44                Printed 11/98

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