WSCONS(4D) | Devices | WSCONS(4D) |
wscons - workstation console
#include <sys/strredir.h>
ioctl(fd, SRIOCSREDIR, target);
ioctl(fd, SRIOCISREDIR, target);
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.
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
SRIOCISREDIR
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.
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 -
ESC
[
params
char
In the following examples of syntactically valid escape sequences, ESC represent the single ASCII character, Escape:
ESC[m
ESC[7m
ESC[33;54H
ESC[123;456;0;;3;B
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').
The following paragraphs specify the ANSI control functions implemented by the console. Each description provides:
The wscons control character functions are:
Bell (BEL),
CTRL-G
0x7
Backspace (BS),
CTRL-H,
0x8
Tab (TAB),
CTRL-I,
0x9
Line-feed (LF),
CTRL-J,
0xA
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
Form-feed (FF)
CTRL-L,
0xC
Return (CR),
CTRL-M,
0xD
The wscons escape sequence functions are:
Escape (ESC),
CTRL-[,
0x1B
Insert Character (ICH)
ESC[#@
Cursor Up (CUU),
ESC[#A
Cursor Down (CUD),
ESC[#B
Cursor Forward (CUF),
ESC[#C
Cursor Backward (CUB),
ESC[#D
Cursor Next Line (CNL),
ESC[#E
Horizontal and Vertical Position (HVP),
ESC[#1;#2f
Cursor Position (CUP),
ESC[#1;#2H
Erase in Display (ED),
ESC[J
Erase in Line (EL),
ESC[K
Insert Line (IL),
ESC[#L
Delete Line (DL),
ESC[#M
Delete Character (DCH),
ESC[#P
Select Graphic Rendition (SGR),
ESC[#m
0
7
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
31
32
33
34
35
36
37
40
41
42
43
44
45
46
47
Black On White (SUNBOW),
ESC[p
White On Black (SUNWOB),
ESC[q
ESC[#r
Set Scrolling (SUNSCRL)
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)
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.
EBADF
ENOSTR
/dev/wscons
/dev/systty
/dev/syscon
/dev/console
See attributes(7) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Interface Stability | Stable |
ioctl(2), poll(2), read(2), write(2), console(4D), visual_io(4I), eeprom(8)
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 | OmniOS |