Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought



TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



NAME
     termio - general terminal interface

DESCRIPTION
     All of the asynchronous communications ports use the same
     general interface, no matter what hardware is involved.
     This section discusses the common features of that inter-
     face.

     When a terminal file is opened, it normally causes the pro-
     cess to wait until a connection is established.  In prac-
     tice, users' programs seldom open these 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 associ-
     ated with a process group becomes the ``control terminal''
     for that process group.  The control terminal plays a spe-
     cial role in handling quit and interrupt signals, as dis-
     cussed below.  The control terminal is inherited by a child
     process during a fork(2).  A process can break this associa-
     tion 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 allowable 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, all the saved
     characters are thrown away without notice.

     Normally, terminal input is processed in units of lines.  A
     line is delimited by a newline (ASCII LF), and 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, one line, at
     most, will be returned.  It is not, 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 performed nor-
     mally.  By default, the character # erases the last charac-
     ter typed, except that it will not erase beyond the begin-
     ning of the line.  By default, the character @ kills
     (deletes) the entire input line, and optionally outputs a
     newline character.  Both these characters operate on a keys-
     troke 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



Printed 5/10/85                                          TERMIO-1





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



     read.  The default erase and kill characters may also be
     changed.

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

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

     QUIT (CTRL | 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.

     SWITCH
          (CTRL Z or ASCII SUB) is used by the job control facil-
          ity, 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 NL, EOF,
          or EOT character.

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

     EOF (CTRL 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 pro-
          gram, without waiting for a newline, and the EOF is
          discarded.  Thus, if there are no characters waiting,
          which is to say that 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 cannot be
          changed or escaped.  EOL (ASCII NULL) is an additional
          line delimiter, like NL.  It is not normally used.

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



TERMIO-2                                          Printed 5/10/85





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



          not read.

     START
          (CTRL Q or ASCII DC1) can be used to resume output that
          was suspended by a STOP character.  While output is not
          suspended, START characters are ignored and not read.
          The start/stop characters cannot be changed or escaped.

     The character values for INTR, QUIT, SWITCH, ERASE, KILL,
     EOF, and EOL may be changed to suit individual tastes.  The
     ERASE, KILL, and EOF characters may be escaped with a
     backslash (\).

     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 ter-
     minal and test for end-of-file can terminate appropriately
     when hung up on.

     When one or more characters are written, they are transmit-
     ted to the terminal as soon as previously written characters
     have finished typing.  Input characters are echoed by put-
     ting 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 pro-
     gram is resumed.

     Several ioctl(2) calls apply to terminal files.  The primary
     call 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};     /*input modes*/
               };

     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     @



Printed 5/10/85                                          TERMIO-3





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



          4    VEOF      EOT
          5    VEOL      NUL
          6    reserved
          7    SWTCH

     The c_iflag field describes the basic terminal input con-
     trol:

          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 uppercase to lowercase 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.  Oth-
     erwise, 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.

     If ISTRIP is set, valid input characters are first stripped
     to seven bits; otherwise, all eight bits are processed.

     If INCLR is set, a received NL character is translated into
     a CR character.  If IGNCR is set, a received CR character is
     not read.  Otherwise, if ICRNL is set, a received CR charac-
     ter is translated into a NL character.

     If IUCLC is set, a received uppercase letter character is
     translated into the corresponding lowercase character.



TERMIO-4                                          Printed 5/10/85





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



     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 charac-
     ters are ignored and not read.  If IXANY is set, any input
     character will restart output that has been suspended.

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

     The initial input control value is all bits clear.

     The c_oflag field specifies the system's treatment of out-
     put.

          OPOST     0000001   Postprocess output
          OLCUC     0000002   Map lowercase 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 newline delays
          NL0       0
          NL1       0000400
          CRDLY     0003000   Select carriage return delays:
          CR0       0
          CR1       0001000
          CR2       0002000
          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 lowercase letter character is transmitted
     as the corresponding uppercase letter.  This function is
     often used in conjunction with IUCLC.



Printed 5/10/85                                          TERMIO-5





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



     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 ste, the NL character is assumed to perform the
     carriage retun function; the column pointer will be set to
     zero and the delays specified for CR will be used.  Other-
     wise, the NL character is assumed to perform the line feed
     function only; the column pointer will remain unchanged.
     The column pointer is also set to zero 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 zero indi-
     cates no delay.  If OFILL is set, fill characters will be
     transmitted for delay instead of a timed delay.  This is
     useful for high baud rate terminals, which need only minimal
     delay.  If OFDEL is set, the fill character is DEL; other-
     wise, it is NUL.

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

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

     Carriage return delay type 1 depends 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 depends 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 ter-
     minal:

          CBAUD     0000017   Baud rate:
          B0        0         Hang up
          B50       0000001   50 baud



TERMIO-6                                          Printed 5/10/85





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



          B75       0000002   75 baud
          B110      0000003   110 baud
          B134      0000004   134.5 baud
          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
          EXTA      0000016   External A
          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 dialup
          LOBLK     0010000   Block layer output

     The CBAUD bits specify the baud rate.  The zero baud rate 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 is used.  For example, at 110
     baud, two stop bits are required.

     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; other-
     wise, 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.





Printed 5/10/85                                          TERMIO-7





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



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

          ISIG 0000001   Enable signals
          ICANON    0000002   Canonical input (erase and kill processing)
          XCASE     0000004   Canonical upper/lowercase 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
     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.

     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 char-
     acters, respectively.  The time value represents tenths of
     seconds.

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

          for: use:

          `    \'



TERMIO-8                                          Printed 5/10/85





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



          |    \!
          ~    \^
          {    \(
          }    \)
          \    \\

     If ECHO is set, characters are echoed as received.

     When ICANON is set, the following echo functions are possi-
     ble.  If ECHO and ECHOE are set, the erase character is
     echoed as ASCII BS-SP-BS, which will clear the last charac-
     ter from a CRT screen.  If ECHOE is set and ECHO is not set,
     the erase character will be echoed as ASCII SP-BS.  If ECHOK
     is set, the NL character will be echoed after the kill char-
     acter 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 ter-
     minals that respond to EOT from hanging up.

     If NOFLSH is set, the normal flush of input and output
     queues associated with the quit, switch, and interrupt char-
     acters 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 immedi-
          ate.

     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



Printed 5/10/85                                          TERMIO-9





TERMIO(5)       DOMAIN/IX Reference Manual (SYS5)       TERMIO(5)



          Wait for the output to drain, then flush the 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 zero, then
          send a break (zero bits for 0.25 seconds).

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

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

RELATED INFORMATION
     stty(1), fork(2), ioctl(2), setpgrp(2), signal(2)






























TERMIO-10                                         Printed 5/10/85



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