Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ () — Motorola System V 88k Release 3.2 Version 1.2C

Media Vault

Software Library

Restoration Projects

Artifacts Sought



  TERMIO(7)                                               TERMIO(7)



  NAME
       termio - general terminal interface

  DESCRIPTION
       All of the asynchronous communications ports use the same
       general interface, no matter what hardware is involved.  The
       remainder of this section discusses the common features of
       this interface.

       When a terminal file is opened, it normally causes the
       process to wait until a connection is established.  In
       practice, users' programs seldom open terminal files; they
       are opened by getty and become a user's standard input,
       output, and error files.  The very first terminal file
       opened by the process group leader of a terminal file not
       already associated with a process group becomes the control
       terminal for that process group.  The control terminal plays
       a special role in handling quit and interrupt signals, as
       discussed below.  The control terminal is inherited by a
       child process during a fork(2).  A process can break this
       association by changing its process group using setpgrp(2).

       A terminal associated with one of these files ordinarily
       operates in full-duplex mode.  Characters may be typed at
       any time, even while output is occurring, and are only lost
       when the system's character input buffers become completely
       full, which is rare, or when the user has accumulated the
       maximum allowed number of input characters that have not yet
       been read by some program.  Currently, this limit is 256
       characters.  When the input limit is reached, the buffer is
       flushed and all the saved characters are thrown away without
       notice.

       Normally, terminal input is processed in units of lines.  A
       line is delimited by a new-line (ASCII LF) character, an
       end-of-file (ASCII EOT) character, or an end-of-line
       character.  This means that a program attempting to read
       will be suspended until an entire line has been typed.
       Also, no matter how many characters are requested in the
       read call, at most one line will be returned.  It is not,


  Page 1                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



       however, necessary to read a whole line at once; any number
       of characters may be requested in a read, even one, without
       losing information.

       During input, erase and kill processing is normally done.
       By default, the character # erases the last character typed,
       except that it will not erase beyond the beginning of the
       line.  By default, the character @ kills (deletes) the
       entire input line, and optionally outputs a new-line
       character.  Both these characters operate on a key-stroke
       basis, independently of any backspacing or tabbing that may
       have been done.  Both the erase and kill characters may be
       entered literally by preceding them with the escape
       character (\).  In this case the escape character is not
       read.  The erase and kill characters may be changed.

       Certain characters have special functions on input.  These
       functions and their default character values are summarized
       as follows:

       INTR    (Rubout or ASCII DEL) generates an interrupt signal
               which is sent to all processes with the associated
               control terminal.  Normally, each such process is
               forced to terminate, but arrangements may be made
               either to ignore the signal or to receive a trap to
               an agreed-upon location; see signal(2).

       QUIT    (Control-| or ASCII FS) generates a quit signal.
               Its treatment is identical to the interrupt signal
               except that, unless a receiving process has made
               other arrangements, it will not only be terminated
               but a core image file (called core) will be created
               in the current working directory.

       SWTCH   (Control-z or ASCII SUB) is used by the job control
               facility, shl, to change the current layer to the
               control layer.

       ERASE   (#) erases the preceding character.  It will not
               erase beyond the start of a line, as delimited by a


  Page 2                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



               NL, EOF, or EOL character.

       KILL    (@) deletes the entire line, as delimited by a NL,
               EOF, or EOL character.

       EOF     (Control-d or ASCII EOT) may be used to generate an
               end-of-file from a terminal.  When received, all the
               characters waiting to be read are immediately passed
               to the program, without waiting for a new-line, and
               the EOF is discarded.  Thus, if there are no
               characters waiting, which is to say the EOF occurred
               at the beginning of a line, zero characters will be
               passed back, which is the standard end-of-file
               indication.

       NL      (ASCII LF) is the normal line delimiter.  It can not
               be changed or escaped.

       EOL     (ASCII NUL) is an additional line delimiter, like
               NL.  It is not normally used.

       EOL2    is another additional line delimiter.

       STOP    (Control-s or ASCII DC3) can be used to temporarily
               suspend output.  It is useful with CRT terminals to
               prevent output from disappearing before it can be
               read.  While output is suspended, STOP characters
               are ignored and not read.

       START   (Control-q or ASCII DC1) is used to resume output
               which has been suspended by a STOP character.  While
               output is not suspended, START characters are
               ignored and not read.  The start/stop characters can
               not be changed or escaped.

       The character values for INTR, QUIT, SWTCH, ERASE, KILL,
       EOF, and EOL may be changed to suit individual tastes.  The
       ERASE, KILL, and EOF characters may be escaped by a
       preceding \ character, in which case no special function is
       done.


  Page 3                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



       When the carrier signal from the data-set drops, a hang-up
       signal is sent to all processes that have this terminal as
       the control terminal.  Unless other arrangements have been
       made, this signal causes the processes to terminate.  If the
       hang-up signal is ignored, any subsequent read returns with
       an end-of-file indication.  Thus, programs that read a
       terminal and test for end-of-file can terminate
       appropriately when hung up on.

       When one or more characters are written, they are
       transmitted to the terminal as soon as previously-written
       characters have finished typing.  Input characters are
       echoed by putting them in the output queue as they arrive.
       If a process produces characters more rapidly than they can
       be typed, it will be suspended when its output queue exceeds
       some limit.  When the queue has drained down to some
       threshold, the program is resumed.

       Several ioctl(2) system calls apply to terminal files.  The
       primary calls use the following structure, defined in
       <termio.h>:

            #define      NCC  8
            struct       termio {
                  unsigned    short   c_iflag;/* input modes */
                  unsigned    short   c_oflag;/* output modes */
                  unsigned    short   c_cflag;/* control modes */
                  unsigned    short   c_lflag;/* local modes */
                  char        c_line; /* line discipline */
                  unsigned    char    c_cc[NCC];/* control chars */
            };

       The special control characters are defined by the array
       c_cc.  The relative positions and initial values for each
       function are as follows:
            0   VINTR    DEL
            1   VQUIT    FS
            2   VERASE   #
            3   VKILL    @
            4   VEOF     EOT


  Page 4                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



            5   VEOL     NUL
            6   reserved
            7   SWTCH

       The c_iflag field describes the basic terminal input
       control:

            IGNBRK  0000001  Ignore break condition.
            BRKINT  0000002  Signal interrupt on break.
            IGNPAR  0000004  Ignore characters with parity errors.
            PARMRK  0000010  Mark parity errors.
            INPCK   0000020  Enable input parity check.
            ISTRIP  0000040  Strip character.
            INLCR   0000100  Map NL to CR on input.
            IGNCR   0000200  Ignore CR.
            ICRNL   0000400  Map CR to NL on input.
            IUCLC   0001000  Map upper-case to lower-case on input.
            IXON    0002000  Enable start/stop output control.
            IXANY   0004000  Enable any character to restart output.
            IXOFF   0010000  Enable start/stop input control.

       If IGNBRK is set, the break condition (a character framing
       error with data all zeros) is ignored, that is, not put on
       the input queue and therefore not read by any process.
       Otherwise if BRKINT is set, the break condition will
       generate an interrupt signal and flush both the input and
       output queues.  If IGNPAR is set, characters with other
       framing and parity errors are ignored.

       If PARMRK is set, a character with a framing or parity error
       which is not ignored is read as the three-character
       sequence:  0377, 0, X, where X is the data of the character
       received in error.  To avoid ambiguity in this case, if
       ISTRIP is not set, a valid character of 0377 is read as
       0377, 0377.  If PARMRK is not set, a framing or parity error
       which is not ignored is read as the character NUL (0).

       If INPCK is set, input parity checking is enabled.  If INPCK
       is not set, input parity checking is disabled.  This allows
       output parity generation without input parity errors.


  Page 5                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



       If ISTRIP is set, valid input characters are first stripped
       to 7-bits, otherwise all 8-bits are processed.

       If INLCR is set, a received NL character is translated into
       a CR character.  If IGNCR is set, a received CR character is
       ignored (not read).  Otherwise if ICRNL is set, a received
       CR character is translated into a NL character.

       If IUCLC is set, a received upper-case alphabetic character
       is translated into the corresponding lower-case character.

       If IXON is set, start/stop output control is enabled.  A
       received STOP character will suspend output and a received
       START character will restart output.  All start/stop
       characters are ignored and not read.  If IXANY is set, any
       input character, will restart output which has been
       suspended.

       If IXOFF is set, the system will transmit START/STOP
       characters when the input queue is nearly empty/full.

       The initial input control value is all-bits-clear.

       The c_oflag field specifies the system treatment of output:

            OPOST   0000001  Postprocess output.
            OLCUC   0000002  Map lower case to upper on output.
            ONLCR   0000004  Map NL to CR-NL on output.
            OCRNL   0000010  Map CR to NL on output.
            ONOCR   0000020  No CR output at column 0.
            ONLRET  0000040  NL performs CR function.
            OFILL   0000100  Use fill characters for delay.
            OFDEL   0000200  Fill is DEL, else NUL.
            NLDLY   0000400  Select new-line delays:
            NL0     0
            NL1     0000400
            CRDLY   0003000  Select carriage-return delays:
            CR0     0
            CR1     0001000
            CR2     0002000


  Page 6                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



            CR3     0003000
            TABDLY  0014000  Select horizontal-tab delays:
            TAB0    0
            TAB1    0004000
            TAB2    0010000
            TAB3    0014000  Expand tabs to spaces.
            BSDLY   0020000  Select backspace delays:
            BS0     0
            BS1     0020000
            VTDLY   0040000  Select vertical-tab delays:
            VT0     0
            VT1     0040000
            FFDLY   0100000  Select form-feed delays:
            FF0     0
            FF1     0100000

       If OPOST is set, output characters are post-processed as
       indicated by the remaining flags, otherwise characters are
       transmitted without change.

       If OLCUC is set, a lower-case alphabetic character is
       transmitted as the corresponding upper-case character.  This
       function is often used in conjunction with IUCLC.

       If ONLCR is set, the NL character is transmitted as the CR-
       NL character pair.  If OCRNL is set, the CR character is
       transmitted as the NL character.  If ONOCR is set, no CR
       character is transmitted when at column 0 (first position).
       If ONLRET is set, the NL character is assumed to do the
       carriage-return function; the column pointer will be set to
       0 and the delays specified for CR will be used.  Otherwise
       the NL character is assumed to do just the line-feed
       function; the column pointer will remain unchanged.  The
       column pointer is also set to 0 if the CR character is
       actually transmitted.

       The delay bits specify how long transmission stops to allow
       for mechanical or other movement when certain characters are
       sent to the terminal.  In all cases a value of 0 indicates
       no delay.  If OFILL is set, fill characters will be


  Page 7                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



       transmitted for delay instead of a timed delay.  This is
       useful for high baud rate terminals which need only a
       minimal delay.  If OFDEL is set, the fill character is DEL,
       otherwise NUL.

       If a form-feed or vertical-tab delay is specified, it lasts
       for about 2 seconds.

       New-line delay lasts about 0.10 seconds.  If ONLRET is set,
       the carriage-return delays are used instead of the new-line
       delays.  If OFILL is set, two fill characters will be
       transmitted.

       Carriage-return delay type 1 is dependent on the current
       column position, type 2 is about 0.10 seconds, and type 3 is
       about 0.15 seconds.  If OFILL is set, delay type 1 transmits
       two fill characters, and type 2, four fill characters.

       Horizontal-tab delay type 1 is dependent on the current
       column position.  Type 2 is about 0.10 seconds.  Type 3
       specifies that tabs are to be expanded into spaces.  If
       OFILL is set, two fill characters will be transmitted for
       any delay.

       Backspace delay lasts about 0.05 seconds.  If OFILL is set,
       one fill character will be transmitted.

       The actual delays depend on line speed and system load.

       The initial output control value is all bits clear.

       The c_cflag field describes the hardware control of the
       terminal:

            CBAUD   0000017  Baud rate:
            B0      0        Hang up
            B50     0000001  50 baud
            B75     0000002  75 baud
            B110    0000003  110 baud
            B134    0000004  134 baud


  Page 8                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



            B150    0000005  150 baud
            B200    0000006  200 baud
            B300    0000007  300 baud
            B600    0000010  600 baud
            B1200   0000011  1200 baud
            B1800   0000012  1800 baud
            B2400   0000013  2400 baud
            B4800   0000014  4800 baud
            B9600   0000015  9600 baud
            B19200  0000016 19200 baud
            EXTA    0000016  External A
            B38400  0000017  38400 baud
            EXTB    0000017  External B
            CSIZE   0000060  Character size:
            CS5     0        5 bits
            CS6     0000020  6 bits
            CS7     0000040  7 bits
            CS8     0000060  8 bits
            CSTOPB  0000100  Send two stop bits, else one.
            CREAD   0000200  Enable receiver.
            PARENB  0000400  Parity enable.
            PARODD  0001000  Odd parity, else even.
            HUPCL   0002000  Hang up on last close.
            CLOCAL  0004000  Local line, else dial-up.
            RCV1EN  0010000
            XMT1EN  0020000
            LOBLK   0040000  Block layer output.

       The CBAUD bits specify the baud rate.  The zero baud rate,
       B0, is used to hang up the connection.  If B0 is specified,
       the data-terminal-ready signal will not be asserted.
       Normally, this will disconnect the line.  For any particular
       hardware, impossible speed changes are ignored.

       The CSIZE bits specify the character size in bits for both
       transmission and reception.  This size does not include the
       parity bit, if any.  If CSTOPB is set, two stop bits are
       used, otherwise one stop bit.  For example, at 110 baud, two
       stops bits are required.



  Page 9                                                   May 1989


















  TERMIO(7)                                               TERMIO(7)



       If PARENB is set, parity generation and detection is enabled
       and a parity bit is added to each character.  If parity is
       enabled, the PARODD flag specifies odd parity if set,
       otherwise even parity is used.

       If CREAD is set, the receiver is enabled.  Otherwise no
       characters will be received.

       If HUPCL is set, the line will be disconnected when the last
       process with the line open closes it or terminates.  That
       is, the data-terminal-ready signal will not be asserted.

       If CLOCAL is set, the line is assumed to be a local, direct
       connection with no modem control.  Otherwise modem control
       is assumed.

       If LOBLK is set, the output of a job control layer will be
       blocked when it is not the current layer.  Otherwise the
       output generated by that layer will be multiplexed onto the
       current layer.

       The initial hardware control value after open is B300, CS8,
       CREAD, HUPCL.

       The c_lflag field of the argument structure is used by the
       line discipline to control terminal functions.  The basic
       line discipline (0) provides the following:

            ISIG    0000001  Enable signals.
            ICANON  0000002  Canonical input (erase and kill processing).
            XCASE   0000004  Canonical upper/lower presentation.
            ECHO    0000010  Enable echo.
            ECHOE   0000020  Echo erase character as BS-SP-BS.
            ECHOK   0000040  Echo NL after kill character.
            ECHONL  0000100  Echo NL.
            NOFLSH  0000200  Disable flush after interrupt or quit.

       If ISIG is set, each input character is checked against the
       special control characters INTR, SWTCH, and QUIT.  If an
       input character matches one of these control characters, the


  Page 10                                                  May 1989


















  TERMIO(7)                                               TERMIO(7)



       function associated with that character is performed.  If
       ISIG is not set, no checking is done.  Thus these special
       input functions are possible only if ISIG is set.  These
       functions may be disabled individually by changing the value
       of the control character to an unlikely or impossible value
       (e.g., 0377).

       If ICANON is set, canonical processing is enabled.  This
       enables the erase and kill edit functions, and the assembly
       of input characters into lines delimited by NL, EOF, and
       EOL.  If ICANON is not set, read requests are satisfied
       directly from the input queue.  A read will not be satisfied
       until at least MIN characters have been received or the
       timeout value TIME has expired between characters.  This
       allows fast bursts of input to be read efficiently while
       still allowing single character input.  The MIN and TIME
       values are stored in the position for the EOF and EOL
       characters, respectively.  The time value represents tenths
       of seconds.

       If XCASE is set, and if ICANON is set, an upper-case letter
       is accepted on input by preceding it with a \ character, and
       is output preceded by a \ character.  In this mode, the
       following escape sequences are generated on output and
       accepted on input:

            for: use:
            `    \'
            |    \!
            ~    \^
            {    \(
            }    \)
            \    \\

       For example, A is input as \a, \n as \\n, and \N as \\\n.

       If ECHO is set, characters are echoed as received.

       When ICANON is set, the following echo functions are
       possible.  If ECHO and ECHOE are set, the erase character is


  Page 11                                                  May 1989


















  TERMIO(7)                                               TERMIO(7)



       echoed as ASCII BS SP BS, which will clear the last
       character from a CRT screen.  If ECHOE is set and ECHO is
       not set, the erase character is echoed as ASCII SP BS.  If
       ECHOK is set, the NL character will be echoed after the kill
       character to emphasize that the line will be deleted.  Note
       that an escape character preceding the erase or kill
       character removes any special function.  If ECHONL is set,
       the NL character will be echoed even if ECHO is not set.
       This is useful for terminals set to local echo (so-called
       half duplex).  Unless escaped, the EOF character is not
       echoed.  Because EOT is the default EOF character, this
       prevents terminals that respond to EOT from hanging up.

       If NOFLSH is set, the normal flush of the input and output
       queues associated with the quit, switch, and interrupt
       characters will not be done.

       The initial line-discipline control value is all bits clear.

       The primary ioctl(2) system calls have the form:

            ioctl (fildes, command, arg)
            struct termio *arg;

       The commands using this form are:

            TCGETA    Get the parameters associated with the
                      terminal and store in the termio structure
                      referenced by arg.

            TCSETA    Set the parameters associated with the
                      terminal from the structure referenced by
                      arg.  The change is immediate.

            TCSETAW   Wait for the output to drain before setting
                      the new parameters.  This form should be used
                      when changing parameters that will affect
                      output.

            TCSETAF   Wait for the output to drain, then flush the


  Page 12                                                  May 1989


















  TERMIO(7)                                               TERMIO(7)



                      input queue and set the new parameters.

       Additional ioctl(2) calls have the form:

            ioctl (fildes, command, arg)
            int arg;

       The commands using this form are:

            TCSBRK    Wait for the output to drain.  If arg is 0,
                      then send a break (zero bits for 0.25
                      seconds).

            TCXONC    Start/stop control.  If arg is 0, suspend
                      output; if 1, restart suspended output.

            TCFLSH    If arg is 0, flush the input queue; if 1,
                      flush the output queue; if 2, flush both the
                      input and output queues.

  FILES
       /dev/tty*

  SEE ALSO
       stty(1) in the User's Reference Manual.
       fork(2), ioctl(2), setpgrp(2), signal(2) in the Programmer's
       Reference Manual.















  Page 13                                                  May 1989
















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