The terminal driver provides
the following features:
Input processing
Command-line editing and
command recall
Control characters and
special keys
Input character validation
(read verify)
American National Standard
Institute (ANSI) escape sequence detection
Type-ahead feature
Specifiable or default
input terminators
Special operating modes,
such as NOECHO and PASTHRU
Output processing
Efficiency
Limited full-duplex operation
Formatted or unformatted
output
Dialup support
Modem control
Hangup on logout
Preservation of process
across hangups
Miscellaneous
Terminal/mailbox interaction
Autobaud detection
Out-of-band control character
handling
NOTE: Not all terminal controllers support all terminal driver capabilities.
5.1.1 Input Processing
The terminal driver
defines many terminal characteristics and read function modifiers,
which provide a wide range of options to an application program. These
options allow multiple levels of control over the terminal driver's
input process, ranging from the default of command-line editing that
provides a highly flexible user interface, to the PASTHRU mode, which
inhibits input process interpretation of data.
5.1.1.1 Command-Line Editing and Command Recall
The terminal driver input process
defines a bounded set of line editing functions. You can access these
functions with control keys on all keyboards, and with some special
keys on certain keyboards as well. You can move the cursor in single-character
increments (left arrow or Ctrl/D, right arrow or Ctrl/F) or in multicharacter
increments, to the beginning of the line (Ctrl/H) or end of the line
(Ctrl/E). The terminal driver supports both insert character and overstrike
character modes. The insert or overstrike mode is the terminal's
default characteristic[1] at the beginning of a read operation, but you can change
it with the toggle insert/overstrike key (Ctrl/A). You can delete
characters in word increments (Ctrl/J or line feed) and beginning-of-the-line
increments (Ctrl/U).
When you use the terminal driver's editing
functions, the following restrictions result:
You cannot move the cursor
to a previous line after a line wrap.
You cannot insert a character
if the insertion would force a line wrap or if a tab follows the current
cursor position.
You cannot delete a word
at the beginning of a line after a line wrap.
You cannot assign the
line editing function to other keys.
Command recall, initiated by Ctrl/B or the up
arrow, returns the last line entered to the command-line buffer. At this point, you edit or
reenter the line by pressing the Return key. DCL extends command recall
up to the last 254 commands by using the TRM$M_TM_NORECALL modifier
to disable the terminal driver's recall mechanism.
Any control key that is not defined by line editing
is ignored. For application programs that require control key input
but do not perform QIO functions with special read modifiers, the
SET TERMINAL/NOLINE_EDIT DCL command disables command-line editing.
5.1.1.2 Control Characters and Special Keys
A control character is a character
that controls action at the terminal rather than passing data to a
process. An ASCII control character has a code between 0 and 31, and
127 (hexadecimal 0 through 1F, and 7F); that is, all normal control
characters plus DELETE. (Table C-1 lists the numeric values for all control characters.)
You enter some control characters at the terminal
by simultaneously pressing the Ctrl key and a character key, such
as Ctrl/x. Table 5-1 lists the terminal control characters. You can
change control character echo strings (Ctrl/C, Ctrl/Y, Ctrl/O, and
Ctrl/Z) on a systemwide basis (see the HP OpenVMS System Management
Utilities Reference Manual). You enter special keys, such as Return,
Line Feed, and Escape, by pressing a single key.
Several of the control characters do not function
as described if the DCL command SET TERMINAL/LINE_EDIT is not specified.
See the HP OpenVMS DCL Dictionary for information on line editing function keys and the SET TERMINAL
command.
The terminal performs
a carriage-return/line-feed combination (carriage return followed
by a line feed), echoes CANCEL, and performs another carriage-return/line-feed
combination. If the terminal has the ReGIS characteristic or if Ctrl/Y
is pressed, the cancel ReGIS escape sequence is sent.
Additional consequences of Ctrl/C are as follows:
The type-ahead buffer is emptied.
Ctrl/S and Ctrl/O are reset.
All queued and in-progress write operations and all
in-progress read operations are successfully completed. The status
return is SS$_CONTROLC, or SS$_CONTROLY if Ctrl/C is converted to
Ctrl/Y.
The F6 key maps to Ctrl/C on the following terminal
types: LK201, LK46W, LK461, LK463, and other compatible LK-series
keyboards.
Note that Ctrl/C is generally translated to
Ctrl/Y for processing within DCL, unless you have a Ctrl/C handler.
Use LIB$ENABLE_CTRL and LIB$DISABLE_CTRL to get Ctrl/C and Ctrl/Y
handled within your application. Example 5-4 shows a programming example that demonstrates
Ctrl/Y and Ctrl/C handling under OpenVMS.
Delete
Character (DELETE)
Removes the last character entered from the input stream.
DELETE (decimal 127 or hexadecimal 7F) is ignored if there are currently
no input characters. Hardcopy terminals echo the deleted character
enclosed in backslashes. For example, if the character z is deleted, \z\is echoed (the second backslash is
echoed after the next non-DELETE character is entered). Terminals
that have the TT$M_SCOPE characteristic echo DELETE by removing the
character.
Delete
line (Ctrl/U)
Purges
current input data. When Ctrl/U is entered before the end of a read
operation, the current input line is deleted. (In the case of a line wrap,
Ctrl/U deletes only a line at a time.) If line editing is enabled
(SET TERMINAL/LINE_EDIT is specified), the data from the beginning
of the line to the current cursor position is deleted.
Delete
word (Ctrl/J or F13) (Line feed)
Deletes the word before the cursor. Word terminators
are all control characters, space, comma, dash, period, and ! '
# $ & ' ( ) + @ [ \ ] ^ {| ~
/ : ; = ? (see Appendix C).
Discard
output (Ctrl/O)
Discards output. Action is immediate. All output is discarded until
the next read operation, the next write operation with a IO$M_CANCTRLO
modifier, or the receipt of the next Ctrl/O. The terminal echoes OUTPUT OFF. The current write operation
(if any) and write operations performed while Ctrl/O is in effect
are completed with a status return of SS$_CONTROLO.
A
second Ctrl/O, which reenables output, echoes OUTPUT ON. Ctrl/C, Ctrl/Y,
and Ctrl/T cancel Ctrl/O.
End
of line (Ctrl/E)
Moves the cursor to the end of the line.
Exit
(Ctrl/Z or F10)
Echoes EXIT when Ctrl/Z is entered as a read terminator. By convention,
Ctrl/Z constitutes end-of-file.
Interrupt
(Ctrl/Y)
Ctrl/Y
is a special interrupt or attention character that is used to invoke the command interpreter for a logged-in
process. Ctrl/Y can be enabled with an IO$M_CTRLYAST function modifier to a IO$_SETCHAR or
IO$_SETMODE function code. The command interpreter's Ctrl/Y AST
handler always takes precedence over a user program's Ctrl/Y
AST handler
Entering Ctrl/Y results in an AST to an enabled
process to signify that the user entered Ctrl/Y from the terminal.
The terminal performs a carriage-return/line-feed combination, echoes
INTERRUPT, and performs another carriage-return/line-feed combination
if the AST and echo are enabled. Ctrl/Y is ignored (and not echoed)
if the process is not enabled for the AST.
Additional
consequences of Ctrl/Y are as follows:
The type-ahead buffer is flushed.
Ctrl/S and Ctrl/O are reset.
All queued and in-progress write operations and all
in-progress read operations are successfully completed with a 0 transfer
count. The status return is SS$_CONTROLY.
The cancel ReGIS escape sequence is sent.
Move
cursor left (Ctrl/D)
Moves the cursor one position to the left.
Move
cursor right (Ctrl/F)
Moves the cursor one position to the right.
Move
cursor to beginning of line (Ctrl/H or F12) (Backspace)
Moves the cursor to the beginning
of the line.
Purge
type-ahead (Ctrl/X)
Purges the type-ahead buffer and performs a Ctrl/U operation. Action
is immediate. If a read operation is in progress, the operation is
equivalent to Ctrl/U.
Recall
(Ctrl/B or up arrow)
Recalls the last command entered. DCL extends recall to several commands.
Redisplay
input (Ctrl/R)
Redisplays current input. When
Ctrl/R is entered during a read operation, a carriage-return/line-feed
combination is echoed on the terminal, and the current contents of
the input buffer are displayed. If the current operation is a read
with prompt (IO$_READPROMPT) operation, the current prompt string
is also displayed. Ctrl/R has no effect if the characteristic TT$M_NOECHO
is set.
Restart
output (Ctrl/Q)
Controls data flow; used by terminals and the driver. Restarts data
flow to and from a terminal
if previously stopped by Ctrl/S. The action occurs immediately with
no echo. Ctrl/Q is also used to solicit read operations.
Ctrl/Q is meaningless if the line does not have the characteristic
TT$M_TTSYNC, the characteristic TT$M_READSYNC, or is not currently
stopped by Ctrl/S.
RET
(Return)
If used
during a read (input) operation, RET echoes a carriage-return/line-feed
combination. All carriage returns are filled on terminals with TT$M_CRFILL
specified.
Stop
output (Ctrl/S)
Controls data flow; used by both terminals and the terminal driver.
Ctrl/S stops all data flow; the action occurs immediately with no echo. Ctrl/S is
also used to stop read operations. Ctrl/S is meaningful only if the
terminal has either the TT$M_TTSYNC characteristic or the TT$M_READSYNC
characteristic.
TAB(Ctrl/I)
Tabs horizontally. Advances
to the next tab stop on terminals with the characteristic TT$M_MECHTAB,
but the terminal driver assumes tab stops on MODULO 8 (multiples of
8) cursor positions. On terminals without this characteristic, enough
spaces are output to move the cursor to the next MODULO 8 position.
Status
(Ctrl/T)
Displays
the current time. Ctrl/T also displays the current node and user name,
the name of the image that is running, and information about system
resources that have been used during the current terminal session.
Toggle insert/overstrike
(Ctrl/A or F14)
Changes current
edit mode from insert to overstrike, or from overstrike to insert.
The default mode (as set with SET TERMINAL/LINE_EDIT) is reset at
the beginning of each line.
5.1.1.3 Read Verify
The read verify instructions
provided by the terminal driver allow validation of data as each character
is entered. Invalid characters are not echoed and terminate the operation.
The terminal driver does not support full function field processing.
Large data entry applications should use one of the DECforms, FMS,
or TDMS layered products, which support the entire data entry environment.
5.1.1.4 Escape and Control Sequences
Escape and control sequences
provide additional terminal control not furnished by the control characters
and special keys (see “Control Characters and Special Keys”). Escape sequences are strings of
two or more characters, beginning with the escape character (decimal
27 or hexadecimal 1B), which indicate that control information follows.
Many terminals send and respond to such escape sequences to request
special character sets or to indicate the position of a cursor.
The set mode characteristic TT$M_ESCAPE (see Table 5-4) is used to specify that
terminal lines can generate valid escape sequences. Also, the read
function modifier IO$M_ESCAPE allows any read operation to terminate
on an escape sequence regardless of whether TT$M_ESCAPE is set. If
either TT$M_ESCAPE or IO$M_ESCAPE is set, the terminal driver verifies
the syntax of the escape sequences. The sequence is always considered
a read function terminator and is returned in the read buffer; a read
buffer can contain other characters that are not part of an escape
sequence, but a complete escape sequence always terminates a read
operation. The return information in the read buffer and the I/O status
block includes the position and size of the terminating escape sequence
in the data record (see “Read Verify Function”).
Any escape sequence received
from a terminal is checked for correct syntax. If the syntax is not
correct, SS$_BADESCAPE is returned as the status of the I/O. If the
escape sequence does not fit in the user buffer, SS$_PARTESCAPE is
returned. If SS$_PARTESCAPE is returned, the application program must
issue enough single-character read requests, without timeout, to read
the remaining characters in the escape sequence, while parsing the
syntax of the rest of the escape sequence. Use of the TRM$_ESCTRMOVR
item code prevents SS$_PARTESCAPE errors. No syntax integrity is guaranteed
across read operations. Escape sequences are never echoed. Valid escape
sequences take any of the following forms (hexadecimal notation):
The keywords in the escape sequences indicate
the following:
ESC
The ESC key, a byte (character)
of 1B. This character introduces the escape sequence in a 7-bit environment.
CSI
The control sequence
introducer, a byte (character) of 9B. This character introduces the
escape sequence in a 8-bit environment.
<int>
An “intermediate character” in the
range of 20 to 2F. This range includes the space character and 15
punctuation marks. An escape sequence can contain any number of intermediate
characters, or none.
<fin>
A
“final character” in the range of 30 to 7E. This range
includes uppercase and lowercase letters, numbers, and 13 punctuation
marks.
Three additional escape sequence forms are as
follows:
The keywords in the control sequences indicate
the following:
ESC
The ESC key, a byte (character)
of 1B.
[
A control sequence, a
byte (character) of 5B.
CSI
The control sequence
introducer, a byte (character) of 9B.
<par>
A parameter specifier in the range of 30 to 3F.
<int>
An “intermediate character” in the
range of 20 to 2F.
<fin>
A
“final character” in the range of 40 to 7E.
For example, the position cursor control sequence
is ESC [ Pl ; Pc H where Pl is the desired line position and Pc is
the desired column position.
The user guides for the various terminals list
valid escape and control sequences. For example, the VT100
User Guide lists the escape and control sequences for VT100
terminals.
Table C-2 lists
the valid ANSI and DIGITAL private escape sequences for terminals
that have the TT2$M_ANSICRT, TT2$M_DECCRT, TT2$M_DECCRT2, TT2$M_AVO,
TT2$M_EDIT, and TT2$M_BLOCK characteristics (see Table 5-5). Table C-2 also lists assumed and selectable ANSI modes and selectable DIGITAL
private modes. Only the names of the escape sequences and modes are
listed (for more information, see the specific user guide for the
various terminals). Unless otherwise noted, the operation of escape
sequences and modes is identical to the particular terminals that
implement these features.
5.1.1.5 Type-Ahead Feature
Input (data received)
from a terminal is always independent of concurrent output (data sent)
to a terminal. This feature is called type-ahead. Type-ahead is allowed
on all terminals, unless explicitly disabled by the set mode characteristic,
inhibit type-ahead (TT$M_NOTYPEAHD; see Table 5-4 and “Set Mode”).
Data entered at the terminal is retained in the
type-ahead buffer until the user program issues an I/O request for
a read operation. At that time, the data is transferred to the program
buffer and echoed at the terminal where it was typed.
Deferring the echo until the read operation is
active allows the user process to specify function code modifiers
that modify the read operation. These modifiers can include, for example,
noecho (IO$M_NOECHO) and convert lowercase characters to uppercase
(IO$M_CVTLOW) (see Table 5-6).
If a read operation is already in progress when
the data is typed at the terminal, the data transfer and echo are
immediate.
The action of the driver when the type-ahead buffer
fills depends on the set mode characteristic TT$M_HOSTSYNC (see Table 5-4 and “Set Mode”). If TT$M_HOSTSYNC is not set, Ctrl/G
(bell) is returned to inform you that the type-ahead buffer is full. The buffer must then be
emptied, at which time a status of SS$_DATAOVERUN is returned. If TT$M_HOSTSYNC is set, the driver stops input by sending
a Ctrl/S and the terminal responds by sending no more characters.
These warning operations begin eight characters before the type-ahead
buffer fills unless the TT2$M_ALTYPEAHD characteristic is set. In
that case, the system generation parameter TTY_ALTALARM is used. The
driver sends a Ctrl/Q to restart transmission when the type-ahead
buffer empties completely, and the user has posted another READ QIO.
The type-ahead buffer length is variable, with
possible values in the range of 0 through 32,767. The length can be
set on a systemwide basis through use of the system generation parameter
TTY_TYPAHDSZ. Terminal lines that do a large amount of bulk input
should use the characteristic TT2$M_ALTYPEAHD, which allows the use
of a larger type-ahead buffer specified by the system generation parameters
TTY_ALTYPAHD and TTY_ALTALARM. (TTY_ALTYPAHD specifies the total size
of the alternate type-ahead buffer; TTY_ALTALARM specifies the threshold
at which a Ctrl/S is sent.)
Certain input-intensive applications, such as
block mode input terminals, can take advantage of an optimization
in the driver. If a terminal has the characteristic TT2$M_PASTHRU
and the read function IO$M_NOECHO is specified, data is placed directly
into the read buffer and thereby eliminates the overhead for moving
the data from the type-ahead buffer.
5.1.1.6 Line Terminators
A line terminator is the control sequence that you type
at the terminal to indicate the end of an input line. Optionally,
the application can specify a particular line terminator or class
of terminators for read operations.
Terminators are specified by an argument to the
QIO request for a read operation. By default, they can be any ASCII
control character except FF, VT, LF, TAB, or BS (see Appendix C). If line editing is enabled,
the only terminators are CR, Ctrl/Z, or an escape sequence. Control
keys that do not have an editing function are nonfunctioning keys.
If included in the request, the argument is a user-selected group
of characters (see “Read Function Terminators”).
All characters are 7-bit ASCII characters unless
data is input on an 8-bit terminal (see “Read”). The characteristic TT$M_EIGHTBIT
determines whether a terminal uses the 7-bit or 8-bit character set;
see Table 5-4. All input characters
(except some special keys; see “Control Characters and Special Keys”) are tested against the selected
terminators. The input is terminated when a match occurs or your input
buffer fills.
The terminal driver notifies the job controller
to initiate login when it detects a carriage-return
terminator on a line with no current process (provided the line is
not a secure server or the type-ahead feature has not been disabled).
A bell character is sent when the notification occurs. A notification
character other than the bell character may be specified by setting
the system generation parameter TTY_AUTOCHAR.
5.1.1.7 Special Operating Modes
The terminal
driver supports many special operating modes for terminal lines. (Table 5-4 and Table 5-5 list these modes.) All special modes are enabled
or disabled by the set mode and set characteristics functions (see “Set Mode”).
5.1.2 Output Processing
Output handling
is designed to be very efficient in the terminal driver. For example,
on multiplexers that support both silo and direct memory access (DMA)
output, the driver considers record size to decide dynamically which
mode will result in the least overhead. The block size specified by
the system generation parameter TTY_DMASIZE is the minimum size block
that can be used in a DMA operation.
5.1.2.1 Duplex Modes
The terminal driver can
execute in either half- or full-duplex mode. These modes describe
the terminal driver software, specifically the ordering algorithms
used to service read and write requests, not the terminal communication
lines.
In half-duplex mode, all read and write requests
are inserted onto one queue. The terminal driver removes requests
from the head of this queue and executes them one at a time; all requests
are executed sequentially in the order in which they were issued.
In full-duplex mode, read requests (and all other
requests except write requests) are inserted onto one queue and write
requests onto another. The existence of two queues allows the driver
to recognize the presence of two requests, such as a read request
and a write request at the same time. However, the driver does not
execute the read request and the write request simultaneously. When
it is ready to service a request, the driver decides which request—the
read request or the write request—to process next.
The following terms describe the state of a read
request:
A read request is active when the terminal driver removes that request from
the head of the I/O queue.
A read request is started when the terminal driver moves the first character
into the read buffer.
In the terminal driver, write requests usually
have priority. A write request can interrupt an active, but not started,
read request.
The terminal driver does not start a read request
until all outstanding writes are completed. This means that a read
request could be removed from the head of the read queue while write
requests are outstanding, but the first character is not moved into
the read buffer until all outstanding writes are completed.
Once a read request is started, all write requests
are queued until the read completes. However, during a read operation
many write requests can be executed before the first input character
is entered at the terminal. Terminal lines that have the TT$M_NOECHO
characteristic, or read functions that include the IO$M_NOECHO function
modifier, do not inhibit write operations in full-duplex mode.
If a write function specifies the IO$M_BREAKTHRU
modifier, the write operation is not blocked, even by an active read
operation. IO$M_BREAKTHRU does not change the order in which write
operations are queued.
When all I/O requests are entered using the Queue
I/O Request and Wait ($QIOW) system service, there can be only one
current I/O request at a time. In this case, the order in which requests
are serviced is the same for both half- and full-duplex modes.
The type-ahead buffer always buffers input data
for which there is no current read request, in both half- and full-duplex
modes.
5.1.2.2 Formatting of Output
By default, output data is subject to formatting
by the terminal driver. This formatting includes actions such as wrapping,
tab expansion, uppercase, and fallback conversions. Applications that
do not require formatting of data can write with the IO$M_NOFORMAT modifier and thereby reduce
overhead. IO$M_NOFORMAT overrides all formatting
except fallback translation. Setting the PASTHRU mode (TT2$M_PASTHRU)
is equivalent to writing with the noformat modifier.
Fallback conversions occur regardless of formatting
mode.
5.1.2.3 SET HOST Facility and Output Buffering
The SET HOST facility emulates the terminal driver in
the way it writes data to the terminal by stopping the display as
soon as the abort character is entered. However, the SET HOST facility
behaves differently from the terminal driver in that it buffers output
data from the program that is executing. Occasionally, this causes
a perception problem for the user when the program is aborted with
a Ctrl/C, Ctrl/Y, or an out-of-band abort character. The user expects
the program to terminate and the display to stop immediately.
CTDRIVER and RTPAD
When used between two systems, the SET
HOST facility consists of two components: RTPAD on the local node
and CTDRIVER on the remote node. Both components buffer output data
to enhance performance when using wide area networks. CTDRIVER performs
the initial buffering, queues the buffers for network transfer, and
returns a successful write status. The user should note that the local
terminal display reflects the output of the executing program after
the data has been buffered and transferred over the network—not
as the output buffers are filled on the remote node.
The delay between execution of an application
and the display of its output can lead to several anomalies in the
effects of Ctrl/C, Ctrl/Y, and out-of-band abort characters.
Output Line Not in Sequence Following an
Abort Character
After you enter an abort character (Ctrl/C, Ctrl/Y,
or an out-of-band abort character) that causes the input or output
to be aborted, it is possible to receive an additional line of output.
This occurs when the application program calls $QIO (either directly
or indirectly through RMS or language support routines) to output
data to a buffer at the same time the abort character
is entered.
When CTDRIVER receives the abort character (Ctrl/C,
Ctrl/Y, or an out-of-band abort character) from the network, it flushes
the current output buffers and aborts any pending read operations.
However, if the application program calls $QIO with a write operation
when the abort character is entered, the $QIO write data is still
buffered and then displayed. The data may not be the next output in
sequence from the user's point of view, since all the previous
output buffers in CTDRIVER were flushed and the data in them was not
displayed.
When using the terminal driver, the effect of
an abort character on the display screen is different. The terminal
driver does not buffer output from the application during program
execution. If the application program has just called $QIO with a
write operation when the abort character is entered, then the $QIO
write data is displayed. Because all write operations are sequential
and do not complete until the output is actually displayed, the additional
line displayed is in sequence. There is no break in the data. Normally,
the user does not notice that there is an additional line.
Extra Input Prompt Following an Abort Character
For connections between systems, the CTERM protocol
allows CTDRIVER to synchronize with RTPAD before displaying any more
data on the terminal.
Processing Abort Characters
The abort character AST is delivered after the
message describing the aborted read operation has been received. Therefore,
the read status should be set very shortly after the abort character
AST is delivered to the application. Note, however, these are still
two asynchronous events, and the application must still synchronize
with the completing read operation.
Captive Command Procedures and Ctrl/Y
CTDRIVER and RTPAD emulate the terminal driver
in that the current read operation and all pending write operations
abort when Ctrl/Y is entered. However, the pending write operations
also include all the buffered output that occurred and that would
have been output before the Ctrl/Y was entered but due to the buffering
was not.
The effect of the buffering can be confusing if
a Ctrl/Y is entered when a captive command procedure is executing.
During execution of captive command procedures, DCL has a Ctrl/Y pending.
When this AST is delivered, DCL only reenables it; no other action
is performed. In that case, if the program being executed only performs
output, it appears that the program was aborted by the Ctrl/Y. Actually,
the program completed execution before the Ctrl/Y was entered, and
the Ctrl/Y merely discarded all the buffered output.
5.1.3 Dialup Support
The operating system
supports modem control (for example, Bell 103A, Bell 113, or equivalent)
for all supported multiplexers in autoanswer, full-duplex mode. The
terminal driver does not support half-duplex operations on modems
such as the Bell 202. Also not supported are modems that use circuit
108/1 (connect data set to line signal) in place of the data terminal
ready (DTR) signal. Most U.S. and European modems use the data terminal
ready signal, which is the signal supported by the operating system.
5.1.3.1 Modem Signal Control
Dialup lines
with the characteristic TT$M_MODEM are monitored periodically to detect
a change in the modem carrier signals data set ready (DSR), calling
indicator (RING), or request to send (RTS). The system generation
parameter TTY_SCANDELTA establishes the dialup monitoring for multiplexers
that do not support modem signal transition interrupts, such as the
DZ series of controllers.
If a line's carrier signal is lost, the driver
waits 2 seconds for the carrier signal to return. If bit 0 of the
system generation parameter TTY_DIALTYPE is set to 1, the driver does
not wait. Bit 0 is 0 by default for countries with Bell System standards, but that bit should
be set to 1 for countries with International Telegraph and Telephone
Consultative Committee (CCITT) standards. If the carrier signal is
not detected during this time, the line is hung up. The hangup action
can signal the owner of the line, through a mailbox message, that
the line is no longer in use. (No dial-in message is sent; the unsolicited
character message is sufficient when the first available data is received.)
The line is not available for a minimum of 2 seconds after the hangup
sequence begins. The hangup sequence is not reversible. If the line
hangs up, all enabled Ctrl/Y and out-of-band ASTs are delivered; the Ctrl/Y AST P2 argument
is overwritten with SS$_HANGUP. The I/O operation in progress is canceled,
and the status value SS$_HANGUP is returned in the I/O status block.
DCL is responsible for process deletion after Ctrl/Y is delivered.
If the process is suspended, DCL cannot run, and therefore deletion
cannot occur, until the process is resumed.
NOTE: Some systems provide built-in serial lines using
6-pin modular jacks. These lines do not provide the minimum required
modem signals. Although the hardware may allow a dial-out connection
to be established, hangup cannot be detected and process deletion
does not occur on these lines.
For terminals with the TT$M_MODEM characteristic,
TT$M_REMOTE reflects the state of the carrier signal. TT$M_REMOTE
is set when the carrier signal changes from off to on, and cleared
when the carrier signal is lost.
A line that does not have TT$M_MODEM set does
not respond to modem signals or set the DTR signal. Modem signals
can be set and sensed manually through use of the IO$M_MAINT function
modifier (see “Set Modem Function Modifier”).
The terminal driver default modem protocol meets the requirements of the United States and of European countries.
This protocol is capable of working in automatic answer mode and can
also perform manually dialed outgoing calls. The protocol supports
the requirements of most known international telephone networks. Enhanced
modem features are used on multiplexers that support them; processor
polling is not necessary. The protocol also functions in a subset
mode for the multiplexers that do not support full modem signals.
Table 5-2 lists the control and data signals used in a full modem control
mode configuration (in a two-way simultaneous, symmetrical transmit
mode). Figure 5-1 is a flowchart
that shows a typical signal sequence for a terminal operation in this
mode. The flowchart shows the states that the modem transition code
goes through to detect different types of transitions in modem state.
These transitions allow the driver to detect loss of lines that have
been idle for several minutes. Modem states do not affect the ability
of the system to transmit characters.
Set mode function modifiers are provided to allow
a process to activate or deactivate modem control signals (see “Set Modem Function Modifier”).
Bit 1 of the system generation parameter TTY_DIALTYPE
enables alternate modem protocol
on a systemwide basis. If bit 1 is 0 (the default), the RING signal
is not used. If bit 1 is 1, the modem protocol delays setting the
DTR signal until the RING signal is detected.
Remote terminal connections have a timeout feature
for the security of dialup lines. If no channel is assigned to the
port within 30 seconds, or a port with an assigned channel is not
allocated, the DTR signal is dropped. Such action prevents an unused
terminal from tying up a line. However, there are configurations (such
as a printer connected to a remote line) in which the line should
not be dropped even though it is not being used interactively. To
bypass the 30-second timeout, set the system generation parameter
TTY_DIALTYPE to 4. (Note that if TTY_DIALTYPE is equal to 4, all dialup
lines skips the timeout waiting for a channel to be assigned.)
Table 5-2 Control and Data Signals
Signal
Source
Meaning
Transmitted
data (TxD)
Computer
The data originated by the computer and transmitted through the modem
to one or more remote terminals.
Received
data (RxD)
Modem
The
data generated by the modem in response to telephone line signals
received from a remote terminal and transferred to the computer.
Request
to send (RTS)
Computer
If present (ON condition), RTS directs the modem to assume the transmit
mode. If not present(OFF condition), RTS directs the modem to assume
the nontransmit mode after all transmit data has been transmitted.
Clear
to send (CTS)
Modem
Indicates
whether the modem is ready (ON condition) or not ready (OFF condition)
to transmit data on the telephone line.
Data
set ready (DSR)
Modem
If
present (ON condition), DSR indicates that the modem is ready to transmit
and receive; that is, the modem is connected to the line and is ready
to exchange further control signals with the computer to initiate
the exchange of data.
If DSR is not present (OFF condition), the modem is not ready
to transmit and receive. If DSR is detected, the operating system
initiates a 30-second timer. This ensures that the phone line is disconnected
if CARRIER is not detected.
Data
channel received line signal detector (CARRIER)
Modem
If present (ON condition), CARRIER indicates
that the received data channel line signal is within appropriate limits,
as specified by the modem. If not present (OFF condition), the received
signal is not within appropriate limits.
Data
terminal ready (DTR)
Computer
If present
(ON condition), DTR indicates that the computer is ready to operate,
prepares the modem to connect to the telephone line, and maintains
the connection after it has been made by other means. DTR can be present
whenever the computer is ready to transmit or receive data. If DTR
is not present (OFF condition), the modem disconnects the modem from
the line.
Calling indicator
(RING)
Modem
Indicates whether a calling signal
is being received by the modem. Bit 1 of the system generation parameter
TTY_DIALTYPE must be set (=1). If RING is detected, the operating
system initiates a 30-second timer. This ensures that the phone line
is disconnected if CARRIER is not detected.
5.1.3.2 Hangup on Logging Out
By default, logging out on a line with modem signals
will not break the connection. If TT2$M_HANGUP is set, modem signals
are dropped when the process logs out. If TT2$M_MODHANGUP is set,
no privilege is required to change the state of TT2$M_HANGUP. By setting
TT2M_HANGUP, system managers can prevent nonprivileged users who are
not logged in from tying up a dial-in line.
5.1.3.3 Preservation of a Process Across Hangups
Virtual terminal
support provides disconnectable terminals that allow a connection
to a physical terminal line to be broken without losing the job.
On Alpha and Integrity server systems, the following
SYSMAN command allows terminals to be discountable terminals:
After this command is entered, a terminal with
the TT2$M_DISCONNECT characteristic logs in as VTAn:, rather than with the physical terminal name. When a terminal is
set up in this manner, no input or output operations are allowed to
the physical device; I/O is automatically redirected to the appropriate
virtual terminal.
Following are four ways in which a terminal can
become disconnected:
Modem signals between
the host and the terminal are lost.
A user presses the BREAK
key on a terminal that has the TT2$M_SECURE characteristic.
A user enters the DCL
command DISCONNECT.
A user enters the DCL
command CONNECT/CONTINUE.
After validated as a user, you
can connect to a disconnected process in either of the following ways:
Allow the login process
to make the connection.
Enter the DCL command
CONNECT.
5.1.4 Terminal/Mailbox Interaction
Mailboxes are virtual I/O devices used to communicate
between processes. The terminal I/O driver can use a mailbox to communicate
with a user process. Chapter 4 describes the mailbox driver.
A user program can use the Assign I/O Channel
($ASSIGN) system service to associate a mailbox with
one or more terminals. The terminal driver sends messages to this
mailbox when terminal-related events that require the attention of
the user image occur.
Mailboxes used in this way carry status messages,
not terminal data, from the driver to the user program. For example,
when data is received from a terminal for which no read request is
outstanding (unsolicited data), a message is sent to the associated
mailbox to indicate data availability. On receiving this message,
the user program reads the channel assigned to the terminal to obtain
the data. Messages are sent to mailboxes under the following conditions:
Unsolicited data in the
type-ahead buffer. The use of the associated mailbox can be enabled
and disabled as a
subfunction of the read and write requests (see “Read” and “Write”). (Initially,
mailbox messages are enabled on all terminals. This is the default
state.) Therefore, the user process can enter into a dialogue with
the terminal after an unsolicited data message arrives. Then, after
the dialogue is over, the user process can reenable the unsolicited
data message function on the last I/O exchange. Only one message is
sent between read operations.
Terminal hangup. When a remote line loses
the carrier signal, it hangs up; a message is sent to the mailbox.
When hangup occurs on lines that have the characteristic TT$M_REMOTE
set, the line returns to local mode.
Broadcast messages. If the characteristic
TT2$M_BRDCSTMBX is set, broadcasts sent to a terminal are placed in
the mailbox (this is independent of the state of TT$M_NOBRDCST).
Messages placed in the mailbox have the following
content and format (see Figure 5-2):
Message type. The codes
MSG$_TRMUNSOLIC (unsolicited data), MSG$_TRMHANGUP (hangup), and MSG$_TRMBRDCST
(terminal broadcast) identify the type of message. Message types are
identified by the $MSGDEF macro.
Device unit number to
identify the terminal that sent the message.
Counted string to specify
the device name.
Controller name.
Message (for broadcasts).
Figure 5-2 Terminal Mailbox Message Format
Interaction with a mailbox associated with a terminal
occurs through standard QIO functions and ASTs. Therefore, the process
need not have outstanding read requests to an interactive terminal
to respond to the arrival of unsolicited data. The process need only
respond when the mailbox signals the availability of unsolicited data. Chapter 4 contains an example
of mailbox programming.
The ratio of terminals to mailboxes is not always
one to one. One user process can have many terminals associated with
a single mailbox.
5.1.5 Autobaud Detection
If you specify
the /AUTOBAUD qualifier with the SET TERMINAL command, automatic baud
rate detection is enabled, allowing the terminal baud rate to be set
when you log in. The baud rate is set at login by pressing the Return
key two or more times separated by an interval of at least one second.
(Pressing a key other than Return might detect the wrong baud rate;
if this occurs, wait for the login procedure to time out before continuing.)
The supported baud rates are 110, 150, 300, 600, 1200, 1800, 2400,
3600, 4800, 9600, and 19,200. Most Alpha systems can autobaud up to
57600. Parity is allowed on
these lines.
The autobaud function works with either even parity
or no parity, but not with odd parity. If a line is set to even parity
and has 7 bits of data, the line automatically switches to no parity
if a terminal not generating parity attempts to log in.
The SET TERMINAL qualifier /EIGHT_BIT specifies
that the terminal uses 8-bit ASCII code. /NOEIGHT_BIT, which is the
default, specifies 7-bit ASCII code. (If parity is specified, the
parity bit is separate from the data bits.) The optimal settings for
automatic baud rate detection on HP terminals are /NOEIGHT_BIT/PARITY=EVEN
or /EIGHT_BIT/NOPARITY, although automatic baud rate detection also
works with other combinations, such as /NOEIGHT_BIT/NOPARITY.
Table 5-5 describes
the terminal characteristic TT2$M_AUTOBAUD, which allows the baud
rate to be set automatically at login.
HP does not usually recommend specifying the /FRAME
qualifier with the SET TERMINAL command. The terminal driver selects
the frame size (the number of data bits that the device can transmit)
based on how the /PARITY and /EIGHT_BIT qualifiers are set. It might
be necessary to change these values if the terminal is not made by
HP.
5.1.6 Out-of-Band Control Character Handling
All control characters (0 through 1F hexadecimal) can
be enabled as out-of-band characters. Typing one of these characters
immediately delivers an AST to the requesting process. DCL uses this
mechanism to sense whether Ctrl/T has been entered. Out-of-band character
options allow using the IO$M_INCLUDE function modifier to include
the character in the data stream and the IO$M_TT_ABORT
function modifier to abort the current input or output operation.
[1] HP suggests that new users specify overstrike mode.