WSCONS(4D) WSCONS(4D)


NAME


wscons - 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 workstation console
to be diverted to a STREAMS device, enabling window systems 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 handles 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 workstation
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


The Solaris kernel terminal emulator provides ANSI X3.64 emulation both
on SPARC and x86 systems.


On SPARC systems, the PROM monitor is used to emulate an ANSI X3.64
terminal if the kernel terminal emulator is not available for emulation.
See visual_io(4I) for more details.


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 systems, 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(8) for more information. Both SPARC and x86 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) inclusive
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 single 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 functions.


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 (with certain
exceptions noted below) default to 1. If more parameters are supplied,
the first n parameters are used by kernel terminal emulator. In contrast,
only the last n parameters are used by PROM based emulator, where n is
the number required by that particular command character.


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
(interpreted 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:

o Control sequence syntax

o Hexadecimal equivalent of control characters where applicable

o Control function name and ANSI or Sun abbreviation (if any).

o Description of parameters required, if any

o Description of the control function

o 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. Current 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 characters are not intermixed with
the text, this results in faster scrolling


Reverse Line-feed,
CTRL-K,
0xB
With kernel terminal emulator (while remaining at
the same character position on the line), the
cursor moves down one line. However, with PROM
based emulator (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 current
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 cursor 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 positions
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
current line and all lines below the current line. The cursor
position 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
portion 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 position
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 starting
with the current cursor position. Shifts the tail of the current
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 printing
characters in the data stream are rendered according to the parameter
until the next occurrence of this escape sequence in the data stream.
With PROM-based emulator, 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.

In addition to the two renditions mentioned above, the following ISO
6429-1983 graphic rendition values support color text with kernel
terminal emulator:

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. On SPARC, 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) are white-on-black. This comprises the initial setting of the
screen mode on reset. On x86 systems, use ESC[q to set black-on-
white.


White On Black (SUNWOB),
ESC[q

Takes no parameters. On SPARC, 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) are black-on-white. Initial setting of the screen mode on
reset is black on white. On x86 systems, use ESC[p to set white-on-
black.


ESC[#r
Set Scrolling (SUNSCRL)

Takes one parameter, n (default 0). Sets to n an internal register
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 redirection
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(7) for descriptions of the following attributes:


+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Stable |
+--------------------+-----------------+

SEE ALSO


ioctl(2), poll(2), read(2), write(2), console(4D), visual_io(4I),
eeprom(8)

WARNINGS


The redirection ioctls block while there is I/O outstanding on the device
instance being redirected. If you try to redirect the workstation console
while there is a outstanding read, the workstation console will hang
until the read completes.


August 29, 2021 WSCONS(4D)