termio(7) DG/UX 4.30 termio(7)
NAME
termio - AT&T terminal interface
DESCRIPTION
This entry discusses how the DG/UX system interfaces to
terminals. All of the asynchronous communications ports use
the same general interface, no matter what hardware is
involved.
When a terminal file is opened, it normally causes the
process to wait until a connection is established. A user's
program seldom opens these files; they are opened by getty
and become a user's standard input, output, and error files.
The 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 handles quit and interrupt signals as
discussed below. See devtty(7) for a complete description
of the control terminal.
A terminal associated with a terminal file ordinarily
operates in full-duplex mode. You can type characters at
any time, even during output; characters are lost only when
you have accumulated 256 input characters not yet read by
some program. When the input limit is reached, all the
saved characters are thrown away without warning.
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 trying 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 is returned. However, it is not necessary
to read a whole line at once; in a read you can request any
number of characters, even one, without losing information.
Erase and kill processing is normally done during input. By
default, the character # erases the last character typed,
but 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
characters operate on a keystroke basis, independent of any
backspacing or tabbing that may have been done. You can
enter both the erase and kill characters literally by
preceding them with the escape character (\). The escape
character is not read. You can change the erase and kill
characters.
Certain characters have special functions on input. These
functions and their default values are as follows:
Licensed material--property of copyright holder(s) Page 1
termio(7) DG/UX 4.30 termio(7)
INTR (Rubout or ASCII DEL) Generate an interrupt signal
that is sent to all processes with the associated
control terminal. Normally, each of these processes
is forced to terminate, but you can make the shell
either ignore the signal or receive a trap to an
agreed-upon location; see signal(2).
QUIT (<Ctrl-|> or ASCII FS) Generate a quit signal. It
behaves like INTR, except that, unless a receiving
process has made other arrangements, it terminates
and a core image file (called core) is created in
the current working directory.
SWTCH (<Ctrl-Z> or ASCII SUB) Change the current layer to
the control layer (used by the job control facility,
shl).
SUSP (<Ctrl-Z> or ASCII SUB) Generate a stop signal that
is sent to all processes in the foreground process
group for which the terminal is the controlling
terminal. This is used by other job control
facilities, such as csh.
ERASE (#) Erase the preceding character. It does not
erase beyond the start of a line, as delimited by a
NL, EOF, or EOL character.
KILL (@) Delete the entire line, as delimited by a NL,
EOF, or EOL character.
EOF (<Ctrl-D> or ASCII EOT) Generate an end-of-file from
a terminal. All the characters waiting to be read
are immediately passed to the program without
waiting for a new-line, and the EOF is discarded.
If no characters are waiting (the EOF occurred at
the beginning of a line), no characters are passed
back, which is the standard end-of-file indication.
NL (ASCII LF) Delimit a line. This is the normal line
delimiter (\n) and cannot be changed or escaped.
CR (ASCII CR) Delimit a line. This is another line
delimiter (\r) and cannot be changed or escaped.
When the ICANON and ICRNL modes (see below) are set
and IGNCR is not set, this character is translated
into a NL and has the same effect as a NL character.
EOL (ASCII NUL) Delimit a line. This line delimiter is
not normally used.
STOP (<Ctrl-S> or ASCII DC3) Suspend output temporarily.
This character is useful with CRT terminals to
Licensed material--property of copyright holder(s) Page 2
termio(7) DG/UX 4.30 termio(7)
prevent output from disappearing before it can be
read.
START (<Ctrl-Q> or ASCII DC1) Resume output suspended by a
STOP character. The START/STOP characters cannot be
changed or escaped.
The values for all of these characters except NL and CR 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.
When the carrier signal from the data set drops, a SIGHUP
signal is sent to all processes that have this terminal as
the control terminal. Unless other arrangements have been
made, this signal terminates the processes. 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 is suspended when its output queue exceeds some
limit. When the queue shrinks 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 19
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
ccc. The relative positions and initial values for each
function are as follows:
Licensed material--property of copyright holder(s) Page 3
termio(7) DG/UX 4.30 termio(7)
0 VINTR DEL
1 VQUIT FS
2 VERASE #
3 VKILL @
4 VEOF EOT
5 VEOL NUL
6 Reserved
7 SWTCH NUL
8 VSTART CTRL-Q
9 VSTOP CTRL-S
10 VSUSP CTRL-Z
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 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, it 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
that 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 that 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.
Licensed material--property of copyright holder(s) Page 4
termio(7) DG/UX 4.30 termio(7)
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 uppercase alphabetic character
is translated into the corresponding lowercase character.
If IXON is set, start/stop output control is enabled. A
received STOP character suspends output, and a received
START character restarts output. All START/STOP characters
are ignored and not read. If IXANY is set, any input
character restarts output that has been suspended, even
another STOP character.
If IXOFF is set, the system transmits 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 how the system treats output:
OPOST 0000001 Postprocess output.
OLCUC 0000002 Map lowercase to uppercase 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
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
Licensed material--property of copyright holder(s) Page 5
termio(7) DG/UX 4.30 termio(7)
If OPOST is set, output characters are postprocessed as
indicated by the remaining flags; otherwise, characters are
transmitted without change.
If OLCUC is set, a lowercase alphabetic character is
transmitted as the corresponding uppercase 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 performs a carriage
return; the column pointer is set to 0 and the delays
specified for CR are used. Otherwise the NL character
performs only a line feed; the column pointer stays the
same. 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
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
transmitted for delay instead of a timed delay. This is
useful for high baud rate terminals that 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.
Licensed material--property of copyright holder(s) Page 6
termio(7) DG/UX 4.30 termio(7)
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
B110 0000001 110 baud
B134 0000002 134.5 baud
B150 0000003 150 baud
B300 0000004 300 baud
B600 0000005 600 baud
B1200 0000006 1200 baud
B1800 0000007 1800 baud
B2400 0000010 2400 baud
B4800 0000011 4800 baud
B9600 0000012 9600 baud
B19200 0000013 19200 baud
B38400 0000014 38400 baud
0000015 Unused
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 Enable parity.
PARODD 0001000 Odd parity, else even.
HUPCL 0002000 Hang up on last close.
CLOCAL 0004000 Local line, else dial-up.
LOBLK 0010000 Block layer output.
The CBAUD bits specify the baud rate. The zero baud rate,
B0, terminates the connection. If B0 is specified, the
data-terminal-ready signal is not asserted. Normally, this
disconnects the line. Speed changes that are not supported
by the underlying hardware are ignored. The baud rates EXTA
and EXTB are driver-specific, and the rates supported by a
given device are listed in the manual entry for that device.
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;
Licensed material--property of copyright holder(s) Page 7
termio(7) DG/UX 4.30 termio(7)
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.
LOBLK may be set to indicate that output from a layer should
be blocked when the layer is not the active layer (see
shl(1)). The terminal driver takes no action when this
character is received, other than to make it available to
the user program normally.
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, suspend or quit.
TOSTOP 0000400 Send SIGTTOU for background output.
IEXTEN 0001000 Enable extended functions.
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. You can disable these
functions 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
Licensed material--property of copyright holder(s) Page 8
termio(7) DG/UX 4.30 termio(7)
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 uppercase 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
echoed as ASCII BS SP BS, which clears 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 is 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 is echoed even if ECHO is not set. This is useful
for terminals set to local echo (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.
If TOSTOP is set, the signal SIGTTOU is sent to the process
group of any process that tries to write to its controlling
terminal if it is not in the foreground process group for
that terminal. Otherwise, that process's output is sent to
the current output stream. Processes that are blocking or
ignoring SIGTTOU signals are not affected and will thus
continue to produce output.
If IEXTEN is set, the VEOL2 and VSWTCH extensions can be
Licensed material--property of copyright holder(s) Page 9
termio(7) DG/UX 4.30 termio(7)
enabled.
The initial line-discipline control value is all bits clear.
The primary ioctl 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 input
queue and set the new parameters.
Additional ioctl 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.
WARNING
The DG/UX System supports two distinct terminal drivers, the
AT&T driver and the BSD driver. In a few cases, mode
changes using the AT&T modes and ioctl calls can not be
accurately reflected in the BSD mode set, so a program that
changes modes using AT&T ioctl calls must take care that the
intent of the mode changes will be reflected for terminals
using the BSD line driver. The manual entry modemap(7)
describes the manner in which modes are mapped between the
Licensed material--property of copyright holder(s) Page 10
termio(7) DG/UX 4.30 termio(7)
two terminal drivers.
FILES
/dev/tty*
SEE ALSO
stty(1), fork(2), ioctl(2), setpgrp(2), signal(2),
cfgetispeed(3), cfgetospeed(3), cfsetispeed(3),
cfsetospeed(3), tcdrain(3), tcflow(3), tcflush(3),
tcgetattr(3), tcsetattr(3), tcsendbreak(3), modemap(7),
tty(7).
Licensed material--property of copyright holder(s) Page 11