$Id: cterm.txt,v 1.51 2018/02/14 04:37:26 deuce Exp $
CTerm terminal characteristics:
------------------------------
End of line behaviour (wrapping):
The cursor is moved to the first character of the next line
as soon as a character is written to the last column of the
current line, not on the next character. A tab will wrap
to the next line only if the current cursor position is the
last character on the line.
Control characters:
NUL:
In doorway mode, indicates that the next character is
a literal character. The IBM CP437 character will
be displayed. This allows ESC and other control
characters to be placed on the screen.
CR:
Move cursor position to column 1 of the current line
LF:
Move cursor position to same column of the next row.
If current row is the last row, scrolls the screen up
and fills the new row with the current attribute.
BS:
Non-destructive backspace. Moves cursor position to
the previous column unless the current column is the
first, in which case no operation is performed.
0x07:
Beep
TAB:
Moves to the next tab stop. Does not overwrite any
characters in between. If the starting position is
last column, advances to next line. If starting
position is the last column of the last line, performs
a scroll, filling the new line at bottom with the
current attribute and moves to the first character in
the new line.
Control Codes:
--------------
Control codes are in the following format:
ESC {SPACE to '/'}{'0' (ZERO) to '~'}
There may be multiple characters from the {SPACE to '/'} set
before the terminating '0' to '~'
Legal combinations which are not handled are silently dropped.
ESC D (Disabled in current code)
Scrolls window up one line filling the bottom line with the
current attribute.
SOURCE: BANSI.TXT
ESC M (Disabled in current code)
Scrolls window down one line filling the top line with the
current attribute
SOURCE: BANSI.TXT
ESC _ Application Program String
Begins a string consisting of the characters 0x08 - 0x0d and
0x20-0x7e, terminated by a String Terminator (ST)
The string is currently ignored.
ESC P Device Control String
Begins a string consisting of the characters 0x08 - 0x0d and
0x20-0x7e, terminated by a String Terminator (ST)
Supported OSC values:
"CTerm:Font:p1:<b64>"
Indicates the string is a loadable font. (CTerm 1.213)
p1 is a font slot number, which must be higher than the last
default defined font (See CSI sp D for list of predefined
fonts). <b64> is the base64 encoded font data. Font size is
deduced from the size of the data. This replaces the now
deprecated CSI = Ps1 ; Ps2 {
[ p1 [ ; p2 ] ] q
Defaults: p1 = 0 p2 = 0
Indicates the string is a sixel sequence.
p1 selects the vertical height of a single pixel. This
may be overridden by the raster attributes command, and
is deprecated. Supported values
Value Vertical Size
----- -------------
0,1,5,6 2 pixels
2 5 pixels
3,4 3 pixels
7,8,9 1 pixel
p2 indicates if unset sixels should be set to the current
background colour. If p2 is 1, positions specified as 0
remain at their current colour.
Any additional parameters are ignored.
The rest of the string is made up of sixel data characters and
sixel control functions. Sixel data characters are in the
rage of '?' (0x3f) to '~' (0x7e). Each sixel data character
represents six vertical pixels. The data is extracted by
subtracting 0x3f from the ASCII value of the character.
The least significant bit is the topmost pixel.
Sixel Control Functions
! Pn X
Graphics Repeat Introducer
The character X is repeated Pn times.
" p1 ; p2 [ ; p3 [ ; p4 ] ]
Raster Attributes
p1 indicates the vertical size in pixels of each
sixel. p2 indicates the horizontal size in pixels.
p3 and p4 define the height and width (in sixels)
respectively of a block to fill with the background
colour. This block may not extend past the current
bottom of the screen. If any pixel data characters
proceed this command, it is ignored.
# p1
Colour Select
Selects the current foreground colour from the
sixel palette.
# p1 ; p2 ; p3 ; p4 ; p5
Palette map
Defines sixel palette entry p1 and sets it as the
current foreground colour. p2 specifies the colour
space to define the colour in, the only supported
value is 2. p3, p4, and p5 specify the red, green,
and blue content as a percentage (0-100).
$
Graphics Carriage Return
Returns the active position to the left border of
the same sixel row. Generally, one pass per colour
is used. In passes after the first one, sixels
with a value of zero are not overwritten with the
background colour.
-
Graphics New Line
Moves the active position to the left border of the
next sixel row.
ESC ^ Privacy Message
Begins a string consisting of the characters 0x08 - 0x0d and
0x20-0x7e, terminated by a String Terminator (ST)
The string is currently ignored.
ESC ] Operating System Command
Begins a string consisting of the characters 0x08 - 0x0d and
0x20-0x7e, terminated by a String Terminator (ST)
Supported OSC values:
4;(pX;pY)...
Specifies one or more palette redefinitions.
pX is the palette index, and pY is the colour definition
Color format:
rgb:R/G/B
Where R, G, and B are a sequence of one to four
hex digits representing the value of the
red, green, and blue channels respectively.
SOURCE: xterm
104 [ ; Ps ... ]
Resets palette entry to default. If the entire string
is "104", resets all colours. Otherwise, only each index
separated by a semicolon is reset.
SOURCE: xterm
ESC X Start Of String
As the above strings, but may contain any characters except
a Start Of String sequence or a String Terminator sequence.
The string is currently ignored.
ESC \ String Terminator
Control Sequences:
------------------
Control sequences start with the Control Sequence Introducer which is
ESC [ CSI will be used to express this from now on.
Control sequences are in the following format:
CSI {'0' (ZERO) to '?'}{SPACE to '/'}{'@' to '~'}
There may be multiple characters from the {'0' (ZERO) to '?'}
and {SPACE to '/'} before the terminating {'@' to '~'} character.
Legal combinations not handled are silently dropped.
Illegal combinations are displayed.
Sequence Parameters:
Parameters are expressed by the {'0' (ZERO) to '?'} character set.
Sequences which use parameters use decimal parameters separated by
a ';'. The use of a ':' from the set is reserved.
If the parameter string begins with '<', '=', '>', or '?' then
this is a non-standard extension to the ANSI spec.
Pn Indicates a single numeric parameter
Pn1 ; Pn2 Two numeric parameters
Pn... Any number of numeric parameters
Ps Single selective parameter
Ps1 ; Ps1 Two selective parameters
Ps... Any numer of selective parameters
If a default is defined, the parameter is optional
CSI Pn @
Insert Character(s)
Defaults: Pn = 1
Moves text from the current position to the right edge Pn characters
to the right, with rightmost characters going off-screen and the
resulting hole being filled with the current attribute.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn A
Cursor Up
Defaults: Pn = 1
Moves the cursor position up Pn lines from the current position.
Attempting to move past the screen boundaries stops the cursor
at the screen boundary.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn B
Cursor Down
Defaults: Pn = 1
Moves the cursor position down Pn lines from the current position.
Attempting to move past the screen boundaries stops the cursor
at the screen boundary.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn C
Cursor Right
Defaults: Pn = 1
Moves the cursor position right Pn columns from the current position.
Attempting to move past the screen boundaries stops the cursor
at the screen boundary.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn D
Cursor Left
Defaults: Pn = 1
Moves the cursor position left Pn columns from the current position.
Attempting to move past the screen boundaries stops the cursor
at the screen boundary.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Ps1 ; Ps2 sp D
Font Selection
Defaults: Ps1 = 0 Ps2 = 0
"sp" indicates a single space character.
Sets font Ps1 to be the one indicated by Ps2. Currently four fonts are
supported. Ps2 must be between 0 and 255. Not all output types support
font selection. Only X11 and SDL currently do.
Supported Ps1 values:
0 - Default font
1 - Font selected by the high intensity bit when CSI [ ? 31 h
is enabled
2 - Font selected by the blink intensity bit when CSI [ ? 34 h
is enabled
3 - Font selected by both the high intensity and blink bits
when both CSI [ ? 31 h and CSI [ ? 34 h are enabled
Currently included fonts are:
0 - Codepage 437 English
1 - Codepage 1251 Cyrillic, (swiss)
2 - Russian koi8-r
3 - ISO-8859-2 Central European
4 - ISO-8859-4 Baltic wide (VGA 9bit mapped)
5 - Codepage 866 (c) Russian
6 - ISO-8859-9 Turkish
7 - haik8 codepage (use only with armscii8 screenmap)
8 - ISO-8859-8 Hebrew
9 - Ukrainian font koi8-u
10 - ISO-8859-15 West European, (thin)
11 - ISO-8859-4 Baltic (VGA 9bit mapped)
12 - Russian koi8-r (b)
13 - ISO-8859-4 Baltic wide
14 - ISO-8859-5 Cyrillic
15 - ARMSCII-8 Character set
16 - ISO-8859-15 West European
17 - Codepage 850 Multilingual Latin I, (thin)
18 - Codepage 850 Multilingual Latin I
19 - Codepage 885 Norwegian, (thin)
20 - Codepage 1251 Cyrillic
21 - ISO-8859-7 Greek
22 - Russian koi8-r (c)
23 - ISO-8859-4 Baltic
24 - ISO-8859-1 West European
25 - Codepage 866 Russian
26 - Codepage 437 English, (thin)
27 - Codepage 866 (b) Russian
28 - Codepage 885 Norwegian
29 - Ukrainian font cp866u
30 - ISO-8859-1 West European, (thin)
31 - Codepage 1131 Belarusian, (swiss)
32 - Commodore 64 (UPPER)
33 - Commodore 64 (Lower)
34 - Commodore 128 (UPPER)
35 - Commodore 128 (Lower)
36 - Atari
37 - P0T NOoDLE (Amiga)
38 - mO'sOul (Amiga)
39 - MicroKnight Plus (Amiga)
40 - Topaz Plus (Amiga)
41 - MicroKnight (Amiga)
42 - Topaz (Amiga)
Not all fonts are supported in all modes. If a font is not supported
in the current mode, no action is taken, but there should be a
non-zero 'Font Selection result' value in the Font State Report.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn E
Cursor Next Line
Defaults: Pn = 1
Moves the cursor to the first column of the line Pn down from the
current position. Moving past the bottom of the screen scrolls the
screen up the remaining number of lines filling newly added lines
with the current attribute.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn F
Cursor Preceding Line
Defaults: Pn = 1
Moves the cursor to the first column if the row Pn up from the
current position. Attempting to move past the screen boundaries
stops the cursor at the screen boundary.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn G
Cursor Character Absolute
Defaults: Pn = 1
Movies the cursor to column Pn of the current row.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn1 ; Pn2 H
CSI Pn1 ; Pn2 f
Cursor Position
Defaults: Pn1 = 1 Pn2 = 1
Moves the cursor to the Pn2th column of the Pn1th line.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Ps J
Erase in Page
Defaults: Ps = 0
Erases from the current screen according to the value of Ps
0 - Erase from the current position to the end of the screen.
1 - Erase from the current position to the start of the screen.
2 - Erase entire screen. As a violation of ECMA-048, also moves
the cursor to position 1/1 as a number of BBS programs assume
this behaviour.
Erased characters are set to the current attribute.
SOURCE BANSI.TXT
CSI Ps K
Erase in Line
Defaults: Ps = 0
Erases from the current line according to the value pf Ps
0 - Erase from the current position to the end of the line.
1 - Erase from the current position to the start of the line.
2 - Erase entire line.
Erased characters are set to the current attribute.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn L
Insert Line(s)
Defaults: Pn = 1
Inserts Pn lines at the current line position. The current line and
those after it are scrolled down and the new empty lines are filled
with the current attribute.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn M
Delete Line(s) / "ANSI" Music
Defaults: Pn = 1
Deletes the current line and the Pn - 1 lines after it scrolling the
first non-deleted line up to the current line and filling the newly
empty lines at the end of the screen with the current attribute.
If "ANSI" Music is fully enabled (CSI = 2 M), performs "ANSI" music
instead.
See "ANSI" MUSIC section for more details.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
SOURCE: BANSI.TXT
CSI = Ps M
NON-STANDARD EXTENSION.
Defaults: Ps = 0
Sets the current state of ANSI music parsing.
0 - Only CSI | will introduce an ANSI music string.
1 - Both CSI | and CSI N will introduce an ANSI music string.
2 - CSI |, CSI N, and CSI M will all introduce an ANSI music string.
In this mode, Delete Line will not be available.
SOURCE: CTerm only.
CSI N
"ANSI" Music / Not implemented.
If "ANSI" Music is set to BananaCom (CSI = 1 M) or fully enabled
(CSI = 2 M) performs "ANSI" music. See "ANSI" MUSIC section for more
details.
SOURCE: BANSI.TXT
CSI Pn P
Delete Character
Defaults: Pn = 1
Deletes the character at the current position by shifting all
characters from the current column + p1 left to the current column.
Opened blanks at the end of the line are filled with the current
attribute.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn S
Scroll Up
Defaults: Pn = 1
Scrolls all text on the screen up Pn lines. New lines emptied at the
bottom are filled with the current attribute.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI ? Ps1 ; Ps2 S
Query Graphics Information
If Ps1 is 2, and Ps2 is 1, replies with the graphics screen information
in the following format: CSI ? 2 ; 0 ; Px ; Py S
Where Px is the width of the screen in pixels and Py is the height.
SOURCE: XTerm
CSI Pn T
Scroll Down
Defaults: Pn = 1
Scrolls all text on the screen down Pn lines. New lines emptied at the
top are filled with the current attribute.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI U
NON-STANDARD (Disabled in current code)
Clear screen with default attribute.
This code is *supposed* to go to the "next page" according to the
ANSI/ECMA specs with CSI V going to "previous page"
SOURCE: BANSI.TXT
CSI Pn X
Erase Character
Defaults: Pn = 1
Erase p1 characters starting at the current character. Will not erase
past the end of line.
Erased characters are set to the current attribute.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Pn Z
Cursor Backward Tabulation
Defaults: Pn = 1
Move the cursor to the p1th preceding tab stop. Will not go past the
start of the line.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI Ps c
Device Attributes
Defaults: Ps = 0
If Ps is 0, CTerm will reply with the sequence:
CSI = 67;84;101;114;109;pN c
64;84;101;114;109 is the ASCII values of the "CTerm" string. pN is the
CVS revision ID of CTerm with dots converted to semi-colons
(e.g. "1;156"). Use the CVS revision to detect if a specific feature
is available. If you are adding features to a forked version of cterm,
please do so by adding an extra parameter to the end, not by
incrementing any existing one!
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
CSI < Ps c
CTerm Device Attributes
Defaults: Ps = 0
If Pn is 0, CTerm will reply with the sequence:
CSI < 0 ; Ps... c
Possible values for Ps:
1 - Loadable fonts are availabe via Device Control Strings
2 - Palette entries may be modified via an Operating System Command
string
3 - Pixel operations are supported (currently, sixel graphics)
4 - The current font may be selected via CSI Ps1 ; Ps2 sp D
5 - More than the standard 16 colours may by configured via
Operating System Command strings
CSI = 255 h
NON-STANDARD EXTENSION
Enable DoorWay Mode
SOURCE: BANSI.TXT
CSI ? Ps... h
NON-STANDARD EXTENSION
Set Mode
Sets one or more mode. The following modes are supported:
6 - Enable origin mode.
In this mode, position parameters are relative to the top left of
the scrolling region, not the screen. Defaults to reset.
SOURCE: Digital VT102 User Guide
7 - Enable auto wrap
This is the normal mode in which a write to the last column of a
row will move the cursor to the start of the next line triggering
a scroll if required to create a new line. Defaults to set.
SOURCE: Digital VT102 User Guide
25 - Display the cursor. Defaults to set.
SOURCE: "Installing and Using the VT320 Video Terminal"
31 - Enable bright alt character set
With this mode set, the bright (1) graphic rendition selects
characters from an alternate character set. Defaults to reset.
32 - Bright Intensity Disable
This makes the bright intensity bit not control the intensity.
Mostly for use with CSI ? 31 h to permit fonts in the same
colours. Defaults to reset.
33 - Blink to Bright Intensity Background
With this mode set, the blink (5,6) graphic renditions cause the
background colour to be high intensity rather than causing blink.
Defaults to reset.
34 - Enable blink alt character set
With this mode set, the blink (5, 6) graphic renditions selects
characters from an alternate character set. Defaults to reset
35 - Blink Disabled
This makes the blink (5, 6) graphic renditions not cause the
character to blink. Mostly for use with CSI ? 34 h to permit
fonts to be used without blinking. Defaults to reset.
80 - Sixel Scrolling Enabled
When this is set, the sixel active position begins in the
upper-left corner of the currently active text position.
When the sixel active position reaches the bottom of the
page, the page is scrolled up. At the end of the sixel
string, a sixel newline is appended, and the current cursor
position is the one in which the bottom sixel is in.
Defaults to set.
SOURCE: VT330/VT340 Programmer Reference Manual
CSI = 255 l
NON-STANDARD EXTENSION
Disable DoorWay Mode
SOURCE: BANSI.TXT
CSI ? Ps... l
NON-STANDARD EXTENSION
Reset Mode
Resets one or more mode. The following modes are supported:
6 - Origin Mode
With this mode reset, position parameters are relative to the
top left of the screen, not the scrolling region. Defaults
to reset.
SOURCE: Digital VT102 User Guide
7 - Disable auto wrap
Resetting this mode causes a write to the last column of a to
leave the cursor where it was before the write occurred,
overwriting anything which was previously written to the same
position.
SOURCE: Digital VT102 User Guide
25 - Hide the cursor. Defaults to set.
SOURCE: "Installing and Using the VT320 Video Terminal"
31 - Disable bright alt character set
With this mode reset, the bright (1) graphic rendition does not
select an alternative font. Defaults to reset.
32 - Bright Intensity Enable
When reset, bright intensity graphics rendition behaves normally.
Defaults to reset.
33 - Disable Blink to Bright Intensity Background
With this mode set, the blink (5,6) graphic renditions do not
affect the background colour. Defaults to reset.
34 - Disable blink alt character set
With this mode reset, the blink (5, 6) graphic renditions do not
select characters from an alternate character set. Defaults to
reset.
35 - Blink Enable
With this mode reset, the blink (5,6) graphic renditions behave
normally (cause the characters to blink). Defaults to reset.
80 - Sixel Scrolling Disabled
When this is reset, the sixel active position begins in the
upper-left corner of the page. Any commands that attempt to
advance the sixel position past the bottom of the page are
ignored. At the end of the sixel string, the current cursor
position is unchanged from where it was when the sixel string
started. Defaults to set.
SOURCE: VT330/VT340 Programmer Reference Manual
CSI Ps... m
Select Graphic Rendition
Defaults: Ps1 = 0
Sets or clears one or more text attributes. Unlimited parameters are
supported and are applied in received order. The following are
supported:
Blink Bold FG BG (Modified)
0 - Default attribute, white on black X X X X
1 - Bright Intensity X
2 - Dim intensity X
5 - Blink (By definition, slow blink) X
6 - Blink (By definition, fast blink) X
NOTE: Both blinks are the same speed.
7 - Negative Image - Reverses FG and BG X X
8 - Concealed characters, sets the X
foreground colour to the background
colour.
22 - Normal intensity X
25 - Steady (Not blinking) X
27 - Positive Image - Reverses FG and BG X X
NOTE: This should be a separate
attribute than 7 but this
implementation makes them equal
30 - Black foreground X
31 - Red foreground X
32 - Green foreground X
33 - Yellow foreground X
34 - Blue foreground X
35 - Magenta foreground X
36 - Cyan foreground X
37 - White foreground X
38 - Extended Foreground (see notes) X
39 - Default foreground (same as white) X
40 - Black background X
41 - Red background X
42 - Green background X
43 - Yellow background X
44 - Blue background X
45 - Magenta background X
46 - Cyan background X
47 - White background X
48 - Extended Background (see notes) X
49 - Default background (same as black) X
All others are ignored.
NOTE: For 38 and 48, two additional formats are supported, a palette
selection and a direct colour selection.
For palette selection, an additional two parameters are required
after that value. They are considered part of the 38/48, not separate
values. The first additional parameter must be a 5. The second
additional parameter specified the palette index to use. To set the
foreground to orange, and the background to a fairly dark grey, you
would send:
CSI 38 ; 5 ; 214 ; 48 ; 5 ; 238 m
The default palette is the XTerm 256-colour palette. See here:
https://jonasjacek.github.io/colors/
For direct colour selection, an additional four parameters are required
after that value. They are considered part of the 38/48, not separate
values. The first additional parameter must be a 2. The second,
third, and fourth specify the R/G/B values respectively. CTerm handles
this with an internal temporary palette, so scrollback may not have the
correct colours. The internal palette is large enough for all cells in
a 132x60 screen to have unique foreground and background colours
though, so the current screen should always be as expected.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
SOURCE: XTerm
CSI Ps n
Device Status Report
Defaults: Ps = 0
A request for a status report. CTerm handles the following three
requests:
5 - Request a DSR
CTerm will always reply with CSI 0 n indicating
"ready, no malfunction detected"
6 - Request active cursor position
CTerm will reply with CSI y ; x R where y is the current line
and x is
the current row.
255 - NON-STANDARD EXTENSION
Replies as though a CSI [ 6 n was received with the cursor in
the bottom right corner. i.e.: Returns the terminal size as
a position report.
SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
(parameters 5 and 6 only)
SOURCE: BANSI.TXT (parameter 255)
CSI = Ps n
NON-STANDARD EXTENSION
State/Mode Request/Report
Defaults: Ps = 1
When Ps is 1, CTerm will respond with a Font State Report of the form
CSI = 1 ;pF ;pR ;pS0 ;pS1 ;pS2 ;pS3 n
pF is the first available loadable-font slot number
pR is the result of the previous "Font Selection" request:
0 = successful font selection
1 = failed font selection
99 = no font selection request has been received
pS0 - pS3 contain the font slots numbers of previously successful
"Font Selection" requests into the 4 available alternate-font
style/attribute values:
pS0 - normal attribute font slot
PS1 - high intensity foreground attribute font slot
PS2 - blink attribute font slot
PS3 - high intensity blink attribute font slot
When Ps is 2, CTerm will respond with a Mode Report of the form
CSI = 2[;pN [;pN] [...]] n
Where pN represent zero or more mode values set previously
(e.g. via CSI ? pN h). Mode values cleared (disabled via CSI ? pN l)
will not be included in the set of values returned in the Mode
Report. If no modes are currently set, an empty parameter will be
included as the first and only pN.
SOURCE: CTerm only.
CSI Pn1 ; Pn2 r
NON-STANDARD EXTENSION.
Set Top and Bottom Margins
Defaults: Pn1 = 1
Pn2 = last line on screen
Selects top and bottom margins, defining the scrolling region. Pn1 is
the line number of the first line in the scrolling region. Pn2 is the
line number of the bottom line.
CSI Ps1 ; Ps2 * r
NON-STANDARD EXTENSION.
Set the output emulation speed.
If Ps1 or Ps2 are omitted, causes output speed emulation to stop
Ps1 may be empty.
Sequence is ignored if Ps1 is not empty, 0, or 1.
The value of Ps2 sets the output speed emulation as follows:
Value Speed
----- -----
empty, 0 Unlimited
1 300
2 600
3 1200
4 2400
5 4800
6 9600
7 19200
8 38400
9 57600
10 76800
11 115200
SOURCE: VT4xx Specification from http://www.vt100.net/
CSI ? Ps... s
NON-STANDARD EXTENSION
Save Mode Setting
Saves the current mode states as specified by CSI ? l and CSI ? h. If
Ps1 is omitted, saves all such states. If one or more values of Ps is
included, saves only the specified states (arguments to CSI ? l/h).
SOURCE: SyncTERM only
CSI s
NON-STANDARD EXTENSION
Save Current Position
Saves the current cursor position for later restoring with CSI u
although this is non-standard, it's so widely used in the BBS world
that any terminal program MUST implement it.
SOURCE: ANSI.SYS
CSI Ps ; Pn1 ; Pn2 ; Pn3 t
NON-STANDARD EXTENSION
Select a 24-bit colour
If Ps is 0, sets the background colour.
If Ps is 1, sets the foreground colour.
Pn1, Pn2, Pn3 contains the RGB value to set.
CTerm handles this with an internal temporary palette, so scrollback
may not have the correct colours. The internal palette is large
enough for all cells in a 132x60 screen to have unique foreground
and background colours though, so the current screen should always
be as expected.
CSI ? Ps... u
NON-STANDARD EXTENSION
Restore Mode Setting
Saves the current mode states as specified by CSI ? l and CSI ? h. If
Ps is omitted, saves all such states. If one or more values of Ps is
included, restores all the specified states (arguments to CSI ? l/h)
SOURCE: SyncTERM only
CSI u
NON-STANDARD EXTENSION
Restore Cursor Position
Move the cursor to the last position saved by CSI s. If no position
has been saved, the cursor is not moved.
SOURCE: ANSI.SYS
CSI = Ps1 ; Ps2 {
NON-STANDARD EXTENSION (Deprecated)
Defaults: Ps1 = 255 Ps2 = 0
Indicates that a font block is following.
Ps1 indicates the font slot to place the loaded font into. This must
be higher than the last default defined font (See CSI sp D for list
of predefined fonts) Ps2 indicates font size according to the
following table:
0 - 8x16 font, 4096 bytes.
1 - 8x14 font, 3584 bytes.
2 - 8x8 font, 2048 bytes.
The DCS font string should be used instead as of CTerm 1.213
SOURCE: CTerm only.
"ANSI" Music
============
This is the place where the BBS world completely fell on it's face in ANSI
usage. A programmer with either TeleMate or QModem (the first two programs to
support "ANSI" music as far as I can tell) decided they needed a method of
playing music on a BBS connection. They decided to add an "unused" ANSI code
and go their merry way. Since their product didn't implement CSI M (Delete
line) they assumed it was unused and blissfully broke the spec. They defined
"ANSI" music as:
CSI M <music string> 0x0e
They used a subset of IBM BASICs PLAY statement functionality for ANSI music
strings which often start with "MF" or "MB", so the M after the CSI was often
considered as part of the music string. You would see things such as:
CSI MFABCD 0x0e and the F would not be played as a note. This just added
further confusion to the mess.
Later on, BananaCom realized the conflict between delete line and music, so
they added *another* broken code CSI N (Properly, erase in field... not
implemented in many BBS clients) which was to provide an "unbroken" method of
playing music strings. They also used CSI Y to disambiguate delete line, CSI Y
is supposed to be a vertical tab (also not implemented in very many clients).
BananaCom also introduced many more non-standard and standard-breaking control
sequences which are not supported by CTerm.
CTerm has further introduced a standard compliant ANSI music introducer CSI |
By default, CTerm allows both CSI N and CSI | to introduce a music string.
Allowed introducers are set by CSI = p1 M as defined above.
The details of ANSI music then are as follows:
The following characters are allowed in music strings:
"aAbBcCdDeEfFgGlLmMnNoOpPsStT0123456789.-+#<> "
If any character not in this list is present, the music string is ignored as
is the introducing code.
If the introducing code is CSI M the first char is examined, and if it is
a one of "BbFfLlSs" or if it is "N" or "n" and is not followed by a decimal
digit, then the music string is treated as though an M is located in front
of the first character.
The music string is then parsed with the following sequences supported:
Mx sets misc. music parameters where x is one of the following:
F - Plays music in the foreground, waiting for music to complete
playing before more characters are processed.
B - Play music in the background, allowing normal processing to
continue.
N - "Normal" not legato, not staccato
L - Play notes legato
S - Play notes staccato
T### Sets the tempo of the music where ### is one or more decimal digits.
If the decimal number is greater than 255, it is forced to 255.
If it is less than 32, it is forced to 32. The number signifies
quarter notes per minute.
The default tempo is 120.
O### Sets the octave of the music where ### is one or more decimal digits.
If the decimal number is greater than 6, it is forced to 6.
The default octave is 4.
N### Plays a single note by number. Valid values are 0 - 71. Invalid
values are played as silence. Note zero is C in octave 0.
See following section for valid note modifiers.
A, B, C, D, E, F, G, or P Plays the named note or pause from the current
octave. An "Octave" is the rising sequence of the following notes:
C, C#, D, D#, E, F, F#, G, G#, A, A#, B
This is contrary to normal music terminology.
The special note "P" is a pause.
Notes may be followed by one or more modifier characters which
are applied in order. If one overrides a previous one, the last
is used. The valid modifiers are:
+ - Sharp. The next highest semitone is played.
Each sharp character will move up one semitone, so "C++"
is equivalent to "D".
# - Sharp. The next highest semitone is played.
Each sharp character will move up one semitone, so "C##"
is equivalent to "D".
- - Flat. The next lowest semitone is played.
Each flat character will move down one semitone, so "D--"
is equivalent to "C".
. - Duration is 1.5 times what it would otherwise be. Dots are not
cumulative, so "C.." is equivalent to "C."
### - Notelength as a reciprocal of the fraction of a whole note to
play the note for. For example, 4 would indicate a 1/4 note.
The default note length is 4.
L### Set the notelength parameter for all following notes which do not have
one specified (ie: override the quarter-note default) Legal note
lengths are 1-64 indicating the reciprocal of the fraction (ie: 4
indicates a 1/4 note).
< Move the next lowest octave.
Octave cannot go above six or below zero.
> Move to the next highest octave.
Octave cannot go above six or below zero.
The lowest playable character is C in octave zero. The frequencies for the
six C notes for the seven octaves in rising order are:
65.406, 130.810, 261.620, 523.250, 1046.500, 2093.000, 4186.000
Purists will note that the lower three octaves are not exactly one half of
the next higher octave in frequency. This is due to lost resolution of
low frequencies. The notes *sound* correct to me. If anyone can give me
an excellent reason to change them (and more correct integer values for all
notes) I am willing to do that assuming the notes still sound "right".
!!!PLEASE NOTE!!! If you are playing some ANSI Music then ask the user if they
heard it, ALWAYS follow it with an 0x0f 0x0e is the shift lock character which
*will* cause people with anything but an ANSI-BBS terminal (ie: *nix users
using the bundled telnet app) to have their screen messed up. 0x0f "undoes"
the 0x0e.