wscons(7D) Devices wscons(7D)NAMEwscons - workstation console
SYNOPSIS
#include <sys/strredir.h>
ioctl(fd, SRIOCSREDIR, target);
ioctl(fd, SRIOCISREDIR, target);
DESCRIPTION
The wscons workstation console consists of a workstation keyboard and
frame buffer that act together to emulate an ASCII terminal. It
includes a redirection facility that allows I/O issued to the worksta‐
tion console to be diverted to a STREAMS device, enabling window sys‐
tems to redirect output that would otherwise appear directly on the
frame buffer in corrupted form.
Redirection
The wscons redirection facility maintains a list of devices that are
designated as redirection targets through the SRIOCSREDIR ioctl
described below. Only the current entry is active; when the active
entry is closed, the most recent remaining entry becomes active. The
active entry acts as a proxy for the device being redirected and han‐
dles all read(2), write(2), ioctl(2), and poll(2) calls issued against
the redirectee.
The ioctls described below control the redirection facility. In both
cases, fd is a descriptor for the device being redirected (or worksta‐
tion console) and target is a descriptor for a STREAMS device.
SRIOCSREDIR Designates target as the source and destination
of I/O ostensibly directed to the device
denoted by fd.
SRIOCISREDIR Returns 1 if target names the device currently
acting as proxy for the device denoted by fd,
and 0 if it is not.
ANSI Standard Terminal Emulation
On SPARC systems, the PROM monitor emulates an ANSI X3.64 terminal.
On x86 systems, the Solaris console subsystem provides ANSI X3.64 emu‐
lation.
Note: The VT100 adheres the ANSI X3.64 standard. However, because the
VT100 features nonstandard extensions to ANSI X3.64, it is incompatible
with Sun terminal emulators.
The SPARC console displays 34 lines of 80 ASCII characters per line.
The x86 console displays 25 lines of 80 ASCII characters per line.
Devices with smaller text capacities may display less. On SPARC sys‐
tems, the screen-#rows screen-#columns should be set to 34 or 80
respectively, or text capacities will vary from those described above.
On SPARC systems, the screen-#rows and screen-#columns fields are
stored in NVRAM/EEPROM. See eeprom(1M) for more information. Both SPARC
and IA consoles offer scrolling, (x, y) cursor addressing ability, and
a number of other control functions.
The console cursor marks the current line and character position on the
screen. ASCII characters between 0x20 (space) and 0x7E (tilde) inclu‐
sive are printing characters. When a print character is written to the
console (and is not part of an escape sequence), it is displayed at the
current cursor position and the cursor moves one position to the right
on the current line.
On SPARC based systems, later PROM revisions have the full 8-bit ISO
Latin-1 (ISO 8859-1) character set. Earlier PROM revisions display
characters in the range 0xA0 through 0xFE as spaces.
When the cursor is at the right edge of the screen, it moves to the
first character position on the next line. When the cursor is at the
screen's right-bottom edge, the line-feed function is performed (see
CTRL-J below). The line-feed function scrolls the screen up by one or
more lines before moving the cursor to the first character position on
the next line.
Control Sequence Syntax
The wscons console defines a number of control sequences that may occur
during input. When a control sequence is written to the console, it
affects one of the control functions described below. Control sequences
are not displayed on screen.
A number of control sequences (or control character functions) are of
the form:
CTRL-x
where x represents a singe character., such as CNTRL-J for a line
feed.
Other ANSI control sequences are of the form:
ESC [ params char
Note - Spaces are included only for readability; these characters must
occur in the given sequence without the intervening spaces.
ESC ASCII escape character (ESC, CTRL-[, 0x1B).
[ Left square bracket `[' (0x5B).
params Sequence of zero or more decimal numbers made
up of digits between 0 and 9, separated by
semicolons. Parameters are represented by n in
the syntax descriptions for escape sequence
functions.
char Function character, which is different for each
control sequence and it represented by x in the
syntax descriptions for control character func‐
tions.
In the following examples of syntactically valid escape sequences, ESC
represent the single ASCII character, Escape:
ESC[m Select graphic rendition with default parameter
ESC[7m Select graphic rendition with reverse image
ESC[33;54H Set cursor position
ESC[123;456;0;;3;B Move cursor down
Syntactically valid control characters and ANSI escape sequences that
are not currently interpreted by the console are ignored.
Each control function requires a specified number of parameters. If
fewer parameters are supplied, the remaining parameters (which certain
exceptions that are noted below) default to 1. For example, if more
than the required number of parameters are supplied, only the last n is
used, where n is the number required by that particular command charac‐
ter.
Parameters which are omitted or set to 0 are reset to the default value
of 1 (with certain exceptions). For example, the command character M
requires one parameter. ESC[;M, ESC[0M, ESC[M and ESC[23;15;32;1M are
all equivalent to ESC[1M and provide a parameter value of 1. Note that
ESC[;5M (interpreted as `ESC[5M') is not equivalent to ESC[5;M (inter‐
preted as `ESC[5;1M') which is ultimately interpreted as `ESC[1M').
ANSI Control Functions
The following paragraphs specify the ANSI control functions implemented
by the console. Each description provides:
· Control sequence syntax
· Hexadecimal equivalent of control characters where applicable
· Control function name and ANSI or Sun abbreviation (if any).
· Description of parameters required, if any
· Description of the control function
· Initial setting of the mode for functions that set a mode. To
restore the initial settings, use the SUNRESET escape sequence.
Control Character Functions
The wscons control character functions are:
Bell (BEL),
CTRL-G
0x7
Used for consoles that are not equipped with an audible bell. Cur‐
rent Sun workstation models also flash the screen if the keyboard
is not the console input device.
Backspace (BS),
CTRL-H,
0x8
The cursor moves one position to the left on the current line. If
it is already at the left edge of the screen, no change takes
place.
Tab (TAB),
CTRL-I,
0x9
The cursor moves right on the current line to the next tab stop.
The tab stops are fixed at every multiple of eight columns. If the
cursor is already at the right edge of the screen, nothing change
takes place. Otherwise, the cursor moves right a minimum of one and
a maximum of eight character positions.
Line-feed (LF),
CTRL-J,
0xA
The cursor, while remaining at the same character position on the
line, moves down one line. If the cursor is at the bottom line, the
screen either scrolls up or wraps around depending on the setting
of an internal variable n (initially 1) . The internal variable can
be changed using the ESC[r control sequence. If n is greater than
zero, the entire screen (including the cursor) is scrolled up by n
lines before executing the line-feed. The top n lines scroll off
the screen and are lost. New blank lines n scroll onto the bottom
of the screen. After scrolling, move the cursor down one line to
execute the line feed.
If n is zero, wrap-around mode is entered. The ESC [ 1 r exits back
to scroll mode. If a line-feed occurs on the bottom line in wrap
mode, the cursor goes to the same character position in the top
line of the screen. During line-feeds, the line that the cursor
moves to is cleared and no scrolling occurs. Wrap-around mode is
not implemented in the window system.
On SPARC based systems, the speed at which the screen scrolls is
dependent on the amount of data waiting to be printed. Whenever a
scroll occurs and the console is in normal scroll mode (ESC [ 1 r),
it scans the rest of the data awaiting printing to see how many
line-feeds occur in it. This scan stops when the console finds a
control character from the set {VT, FF, SO, SI, DLE, DC1, DC2, DC3,
DC4, NAK, SYN, ETB, CAN, EM, SUB, ESC, FS, GS, RS, US} . At that
point, the screen is scrolled by n lines (n ≥ 1) and processing
continues. The scanned text is processed normally and fills in the
newly created lines. As long as escape codes or other control char‐
acters are not intermixed with the text, this results in faster
scrolling
Reverse Line-feed,
CTRL-K,
0xB
While remaining at the same character position on the line, the
cursor moves up one line. If the cursor is already at the top
line, no change takes place.
Form-feed (FF)
CTRL-L,
0xC
The cursor is positioned to the home position (upper-left corner)
and the entire screen is cleared.
Return (CR),
CTRL-M,
0xD
The cursor moves to the leftmost character position on the current
line.
Escape Sequence Functions
The wscons escape sequence functions are:
Escape (ESC),
CTRL-[,
0x1B
The escape character. Escape initiates a multi-character control
sequence.
Insert Character (ICH)
ESC[#@
Takes one parameter, n (default 1). Inserts n spaces at the cur‐
rent cursor position. The current line, starting at the current
cursor position inclusive, is shifted to the right by n character
positions to make room for the spaces. The rightmost n character
positions shift off the line and are lost. The position of the cur‐
sor is unchanged.
Cursor Up (CUU),
ESC[#A
Takes one parameter, n (default 1). Moves the cursor up n lines.
If the cursor is fewer than n lines from the top of the screen,
moves the cursor to the topmost line on the screen. The character
position of the cursor on the line is unchanged.
Cursor Down (CUD),
ESC[#B
Takes one parameter, (default 1). Moves the cursor down n lines.
If the cursor is fewer than n lines from the bottom of the screen,
move the cursor to the last line on the screen. The character
position of the cursor on the line is unchanged.
Cursor Forward (CUF),
ESC[#C
Takes one parameter, n (default 1). Moves the cursor to the right
by n character positions on the current line. If the cursor is
fewer than n positions from the right edge of the screen, moves
the cursor to the rightmost position on the current line.
Cursor Backward (CUB),
ESC[#D
Takes one parameter, n (default 1). Moves the cursor to the left
by n character positions on the current line. If the cursor is
fewer than n positions from the left edge of the screen, moves the
cursor to the leftmost position on the current line.
Cursor Next Line (CNL),
ESC[#E
Takes one parameter, n (default 1). Positions the cursor at the
leftmost character position on the n-th line below the current
line. If the current line is less than n lines from the bottom of
the screen, positions the cursor at the leftmost character position
on the bottom line.
Horizontal and Vertical Position (HVP),
ESC[#1;#2f
or
Cursor Position (CUP),
ESC[#1;#2H
Takes two parameters, n1 and n2 (default 1, 1). Moves the cursor
to the n2-th character position on the n1-th line. Character posi‐
tions are numbered from 1 at the left edge of the screen; line
positions are numbered from 1 at the top of the screen. Hence, if
both parameters are omitted, the default action moves the cursor to
the home position (upper left corner). If only one parameter is
supplied, the cursor moves to column 1 of the specified line.
Erase in Display (ED),
ESC[J
Takes no parameters. Erases from the current cursor position
inclusive to the end of the screen, that is, to the end of the cur‐
rent line and all lines below the current line. The cursor posi‐
tion is unchanged.
Erase in Line (EL),
ESC[K
Takes no parameters. Erases from the current cursor position
inclusive to the end of the current line. The cursor position is
unchanged.
Insert Line (IL),
ESC[#L
Takes one parameter, n (default 1). Makes room for n new lines
starting at the current line by scrolling down by n lines the por‐
tion of the screen from the current line inclusive to the bottom.
The n new lines at the cursor are filled with spaces; the bottom
n lines shift off the bottom of the screen and are lost. The posi‐
tion of the cursor on the screen is unchanged.
Delete Line (DL),
ESC[#M
Takes one parameter, n (default 1). Deletes n lines beginning
with the current line. The portion of the screen from the current
line inclusive to the bottom is scrolled upward by n lines. The
n new lines scrolling onto the bottom of the screen are filled with
spaces; the n old lines beginning at the cursor line are deleted.
The position of the cursor on the screen is unchanged.
Delete Character (DCH),
ESC[#P
Takes one parameter, n (default 1). Deletes n characters start‐
ing with the current cursor position. Shifts the tail of the cur‐
rent line to the left by n character positions from the current
cursor position, inclusive, to the end of the line. Blanks are
shifted into the rightmost n character positions. The position of
the cursor on the screen is unchanged.
Select Graphic Rendition (SGR),
ESC[#m
Takes one parameter, n (default 0). Note that unlike most escape
sequences, the parameter defaults to zero if omitted. Invokes the
graphic rendition specified by the parameter. All following print‐
ing characters in the data stream are rendered according to the
parameter until the next occurrence of this escape sequence in the
data stream. Currently only two graphic renditions are defined:
0 Normal rendition
7 Negative (reverse) image
Negative image displays characters as white-on-black if the screen
mode is currently black-on white, and vice-versa. Any non-zero
value of n is currently equivalent to 7 and selects the negative
image rendition.
On x86 systems only, the following ISO 6429-1983 graphic rendition
values support color text:
30 black foreground
31 red foreground
32 green foreground
33 brown foreground
34 blue foreground
35 magenta foreground
36 cyan foreground
37 white foreground
40 black background
41 red background
42 green background
43 brown background
44 blue background
45 magenta background
46 cyan background
47 white background
Black On White (SUNBOW),
ESC[p
Takes no parameters. Sets the screen mode to black-on-white. If
the screen mode is already black-on-white, has no effect. In this
mode spaces display as solid white, other characters as black-on-
white. The cursor is a solid black block. Characters displayed in
negative image rendition (see `Select Graphic Rendition' above) is
white-on-black. This comprises the initial setting of the screen
mode on reset.
White On Black (SUNWOB),
ESC[q
Takes no parameters. Sets the screen mode to white-on-black. If
the screen mode is already white-on-black, has no effect. In this
mode spaces display as solid black, other characters as white-on-
black. The cursor is a solid white block. Characters displayed in
negative image rendition (see `Select Graphic Rendition' above) is
black-on-white in this mode. The initial setting of the screen
mode on reset is black on white.
ESC[#r
Set Scrolling (SUNSCRL)
Takes one parameter, n (default 0). Sets to n an internal regis‐
ter which determines how many lines the screen scrolls up when a
line-feed function is performed with the cursor on the bottom line.
A parameter of 2 or 3 introduces a small amount of jump when a
scroll occurs. A parameter of 34 clears the screen rather than
scrolling. The initial setting is 1 on reset.
A parameter of zero initiates wrap mode instead of scrolling. If a
linefeed occurs on the bottom line during wrap mode, the cursor
goes to the same character position in the top line of the screen.
When a line feed occurs, the line that the cursor moves to is
cleared and no scrolling occurs. ESC [ 1 r exits back to scroll
mode.
For more information, see the description of the Line-feed (CTRL-J)
control function above.
ESC[s
Reset terminal emulator (SUNRESET)
Takes no parameters. Resets all modes to default, restores current
font from PROM. Screen and cursor position are unchanged.
RETURN VALUES
When there are no errors, the redirection ioctls have return values as
described above. Otherwise, they return −1 and set errno to indicate
the error. If the target stream is in an error state, errno is set
accordingly.
If the target stream is in an error state, errno is set accordingly.
ERRORS
EBADF target does not denote an open file.
ENOSTR target does not denote a STREAMS device.
FILES
/dev/wscons Workstation console, accessed via the redirect‐
ion facility
/dev/systty Devices that must be opened for the SRIOCSREDIR
and SRIOCISREDIR ioctls.
/dev/syscon Access system console
/dev/console Access system console
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
┌─────────────────────────────┬─────────────────────────────┐
│ ATTRIBUTE TYPE │ ATTRIBUTE VALUE │
├─────────────────────────────┼─────────────────────────────┤
│Interface Stability │Stable │
└─────────────────────────────┴─────────────────────────────┘
SEE ALSOcvcd(1M), eeprom(1M), ioctl(2), poll(2), read(2), write(2), cvc(7D),
console(7D)WARNINGS
The redirection ioctls block while there is I/O outstanding on the
device instance being redirected. If you try to redirect the worksta‐
tion console while there is a outstanding read, the workstation console
will hang until the read completes.
NOTES
The cvc facility supersedes the SunOS wscons facility and should not be
used with wscons.
SunOS 5.10 22 Sep 2000 wscons(7D)