Synchronet now requires the libarchive development package (e.g. libarchive-dev on Debian-based Linux distros, libarchive.org for more info) to build successfully.

cterm.txt 44.6 KB
Newer Older
1 2 3
$Id$

CTerm terminal characteristics:
4 5
------------------------------

6 7 8 9 10 11 12
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.

13 14 15 16 17 18 19 20 21 22 23
I'm often asked why I don't use VT semantics for wrapping.
The primary reason is that the person asking almost certainly
doesn't know what the VT semantics are, they just want
SyncTERM to behave the same as some other terminal they like.

Not only have the VT semantics never been properly
implemented in any terminal, they even varied between
different actual hardware VT terminals.  Luckily, everything
is on the internet now, so you can see the details and results
here: https://github.com/mattiase/wraptest

24 25
Control characters:

26
0x00 - NUL:
27 28 29 30 31
	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.

32 33
0x07 - BEL:
	Beep
34

35
0x08 - BS:
36 37 38 39
	Non-destructive backspace.  Moves cursor position to
	the previous column unless the current column is the
	first, in which case no operation is performed.

40 41 42
0x09 - HT:
	Moves to the next horizontal tab stop.  Does not overwrite
	any characters in between.  If the starting position is
43 44 45 46 47 48
	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.

49 50 51 52 53 54 55 56
0x0A - 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.

0x0D - CR:
	Move cursor position to column 1 of the current line

57 58 59 60
Control Codes:
--------------

Control codes are in the following format:
deuce's avatar
deuce committed
61
ESC {'0' (ZERO) to '~'}
62 63
	Legal combinations which are not handled are silently dropped.

64 65 66 67 68
ESC E	Next Line (NEL)
	Moves to the line home position of the next line.
	(Same as CR LF)

ESC H	Set Tab (HTS)
deuce's avatar
deuce committed
69
	Sets a tab stop at the current column
70

deuce's avatar
deuce committed
71 72
	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

73
ESC M	Reverse Line Feed (RI)
deuce's avatar
deuce committed
74 75 76
	Move up one line

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
77

78
ESC P	Device Control String (DCS)
deuce's avatar
deuce committed
79 80 81
	Begins a string consisting of the characters 0x08 - 0x0d and
	0x20-0x7e, terminated by a String Terminator (ST)
	Supported OSC values:
82 83 84 85 86 87 88 89 90
		"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 {

91

deuce's avatar
deuce committed
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
		[ 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.

156

deuce's avatar
deuce committed
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
		$ q pt
		Request Status String (DECRQSS)

		pt is the intermediate and/or final characters of a control
		function to query the status of.  The terminal will send a
		response in the format

		DCS p1 $ r pt ST

		p1 is 1 if the terminal supports querying the control
		function and 0 if it does not.

		pt is the characters in the control function except the CSI
		characters.

deuce's avatar
deuce committed
172 173 174
		Currently supported values of p1:

		m	Request SGR parameters
175
		r	Request top and bottom margins
176
		s	Request left and right margins
177 178 179
		t	Request height in lines
		$|	Request width in columns
		*|	Request height in lines
deuce's avatar
deuce committed
180

181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204

		p1 [ ; p2 [ ; p3 ] ! z
		Define Macro (DECDMAC)
		Defaults: p2 = 0  p3 = 0
		
		Sets a macro to be replayed using CSI Pn * z

		p1 is the macro number to set, and make be between 0 and
		63 inclusive.

		If p2 is zero, the macro numbered p1 will be deleted. If
		p2 is one, all macros are deleted.
		
		If p3 is zero, the macro is defined using ASCII characters
		(0x20 - 0x7e and 0xa0 - 0xff only) if p3 is one, the macro
		is defined using hex pairs.
		
		When the macro is defined using hex pairs, a repeat
		sequence may be included in the format of ! Pn ; D..D ;
		Pn specifies the number of repeats (default of one instance)
		D..D is the sequence of pairs to send Pn times.  The 
		terminating ; may be left out if the sequence to be
		repeated ends at the end of the string.

205 206 207
ESC X	Start Of String (SOS)
	As the above strings, but may contain any characters except
	a Start Of String sequence or a String Terminator sequence.
deuce's avatar
deuce committed
208
	The string is currently ignored.
deuce's avatar
deuce committed
209

210 211 212
ESC \	String Terminator (ST)

ESC ]	Operating System Command (OSC)
213 214 215 216 217 218 219 220 221 222 223 224 225
	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
deuce's avatar
deuce committed
226

227 228 229 230 231 232 233
		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

234 235 236
ESC ^	Privacy Message (PM)
	Begins a string consisting of the characters 0x08 - 0x0d and
	0x20-0x7e, terminated by a String Terminator (ST)
237
	The string is currently ignored.
deuce's avatar
deuce committed
238

239 240 241 242
ESC _	Application Program String (APS)
	Begins a string consisting of the characters 0x08 - 0x0d and
	0x20-0x7e, terminated by a String Terminator (ST)
	The string is currently ignored.
deuce's avatar
deuce committed
243

244
ESC c	Reset to Initial State (RIS)
deuce's avatar
deuce committed
245 246 247
	Resets all the terminal settings, clears the screen, and homes
	the cursor.

248 249 250
Control Sequences:
------------------

251 252 253
Control sequences start with the Control Sequence Introducer which is
ESC [  CSI will be used to express this from now on.

254
Control sequences are in the following format:
255
CSI {'0' (ZERO) to '?'}{SPACE to '/'}{'@' to '~'}
256 257 258 259
	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.
260
	Illegal combinations are displayed.
261 262 263 264

Sequence Parameters:
	Parameters are expressed by the {'0' (ZERO) to '?'} character set.
	Sequences which use parameters use decimal parameters separated by
deuce's avatar
deuce committed
265
	a ';'.  The use of a ':' from the set is reserved.
266 267 268
	If the parameter string begins with '<', '=', '>', or '?' then
	this is a non-standard extension to the ANSI spec.

deuce's avatar
deuce committed
269 270 271 272 273 274
	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
275

deuce's avatar
deuce committed
276
	If a default is defined, the parameter is optional
277

278
CSI Pn @ (ICH)
deuce's avatar
deuce committed
279
	Insert Character(s)
deuce's avatar
deuce committed
280 281
	Defaults: Pn = 1
	Moves text from the current position to the right edge Pn characters
282
	to the right, with rightmost characters going off-screen and the
deuce's avatar
deuce committed
283 284 285 286
	resulting hole being filled with the current attribute.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

287 288
CSI Pn SP @ (SL)
	Scroll Left
289 290 291 292 293 294 295
	Defaults: Pn = 1
	Shifts the contents of the screen left Pn columns(s) with
	leftmost columns 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

296
CSI Pn A (CUU)
deuce's avatar
deuce committed
297
	Cursor Up
deuce's avatar
deuce committed
298 299
	Defaults: Pn = 1
	Moves the cursor position up Pn lines from the current position.
deuce's avatar
deuce committed
300 301 302 303 304
	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

305 306
CSI Pn SP A (SR)
	Scroll Right
307 308 309 310 311 312 313
	Defaults: Pn = 1
	Shifts the contents of the screen right Pn columns(s) with
	rightmost columns 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

314
CSI Pn B (CUD)
deuce's avatar
deuce committed
315
	Cursor Down
deuce's avatar
deuce committed
316 317
	Defaults: Pn = 1
	Moves the cursor position down Pn lines from the current position.
deuce's avatar
deuce committed
318 319 320 321 322
	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

323
CSI Pn C (CUF)
deuce's avatar
deuce committed
324
	Cursor Right
deuce's avatar
deuce committed
325 326
	Defaults: Pn = 1
	Moves the cursor position right Pn columns from the current position.
deuce's avatar
deuce committed
327 328 329 330 331
	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

332
CSI Pn D (CUB)
deuce's avatar
deuce committed
333
	Cursor Left
deuce's avatar
deuce committed
334 335
	Defaults: Pn = 1
	Moves the cursor position left Pn columns from the current position.
deuce's avatar
deuce committed
336 337 338 339 340
	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

341
CSI Ps1 ; Ps2 sp D (FNT)
342
	Font Selection
deuce's avatar
deuce committed
343
	Defaults: Ps1 = 0  Ps2 = 0
344
	"sp" indicates a single space character.
deuce's avatar
deuce committed
345 346
	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
347
	font selection.  Only X11 and SDL currently do.
deuce's avatar
deuce committed
348
	Supported Ps1 values:
349
		0  - Default font
deuce's avatar
deuce committed
350
		1  - Font selected by the high intensity bit when CSI ? 31 h
351
		     is enabled
deuce's avatar
deuce committed
352
		2  - Font selected by the blink intensity bit when CSI ? 34 h
353 354
		     is enabled
		3  - Font selected by both the high intensity and blink bits
deuce's avatar
deuce committed
355
		     when both CSI ? 31 h and CSI ? 34 h are enabled
356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
	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)
389 390 391 392 393
		32 - Commodore 64 (UPPER)
		33 - Commodore 64 (Lower)
		34 - Commodore 128 (UPPER)
		35 - Commodore 128 (Lower)
		36 - Atari
deuce's avatar
deuce committed
394 395
		37 - P0T NOoDLE (Amiga)
		38 - mO'sOul (Amiga)
396
		39 - MicroKnight Plus (Amiga)
deuce's avatar
deuce committed
397
		40 - Topaz Plus (Amiga)
398
		41 - MicroKnight (Amiga)
deuce's avatar
deuce committed
399 400
		42 - Topaz (Amiga)

401 402 403
	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.
404

deuce's avatar
deuce committed
405 406
	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

407
CSI Pn E (CNL)
deuce's avatar
deuce committed
408
	Cursor Next Line
deuce's avatar
deuce committed
409 410
	Defaults: Pn = 1
	Moves the cursor to the first column of the line Pn down from the
411 412 413
	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.
deuce's avatar
deuce committed
414 415 416

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

417
CSI Pn F (CPL)
418
	Cursor Preceding Line
deuce's avatar
deuce committed
419
	Defaults: Pn = 1
420
	Moves the cursor to the first column of the row Pn up from the
421 422
	current position.  Attempting to move past the screen boundaries
	stops the cursor at the screen boundary.
423 424 425

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

426
CSI Pn G (CHA)
deuce's avatar
deuce committed
427
	Cursor Character Absolute
deuce's avatar
deuce committed
428 429
	Defaults: Pn = 1
	Movies the cursor to column Pn of the current row.
430

deuce's avatar
deuce committed
431 432
	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

433
CSI Pn1 ; Pn2 H (CUP)
434
	Cursor Position
deuce's avatar
deuce committed
435 436
	Defaults: Pn1 = 1  Pn2 = 1
	Moves the cursor to the Pn2th column of the Pn1th line.
deuce's avatar
deuce committed
437 438 439

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

440
CSI Ps J (ED)
deuce's avatar
deuce committed
441
	Erase in Page
deuce's avatar
deuce committed
442 443
	Defaults: Ps = 0
	Erases from the current screen according to the value of Ps
deuce's avatar
deuce committed
444 445 446 447 448 449 450
	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.

deuce's avatar
deuce committed
451
	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
deuce's avatar
deuce committed
452 453
	SOURCE BANSI.TXT

454
CSI Ps K (EL)
deuce's avatar
deuce committed
455
	Erase in Line
deuce's avatar
deuce committed
456 457
	Defaults: Ps = 0
	Erases from the current line according to the value pf Ps
deuce's avatar
deuce committed
458 459 460 461 462 463 464
	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

465
CSI Pn L (IL)
deuce's avatar
deuce committed
466
	Insert Line(s)
deuce's avatar
deuce committed
467 468
	Defaults: Pn = 1
	Inserts Pn lines at the current line position.  The current line and
469 470
	those after it are scrolled down and the new empty lines are filled
	with the current attribute.
deuce's avatar
deuce committed
471 472 473

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

474
CSI Pn M (DL)
deuce's avatar
deuce committed
475
	Delete Line(s) / "ANSI" Music
deuce's avatar
deuce committed
476 477
	Defaults: Pn = 1
	Deletes the current line and the Pn - 1 lines after it scrolling the
deuce's avatar
deuce committed
478 479 480 481
	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.
deuce's avatar
deuce committed
482 483 484 485 486
	See "ANSI" MUSIC section for more details.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
	SOURCE: BANSI.TXT

487 488
CSI = Ps M (STERMSAM)
	SyncTERM Set ANSI Music
deuce's avatar
deuce committed
489 490 491 492 493 494 495 496 497 498
	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.

499 500
CSI N (BCAM)
	BananaCom ANSI Music
deuce's avatar
deuce committed
501
	"ANSI" Music / Not implemented.
deuce's avatar
deuce committed
502
	If "ANSI" Music is set to BananaCom (CSI = 1 M) or fully enabled
503
	(CSI = 2 M) performs "ANSI" music.  See "ANSI" MUSIC section for more
deuce's avatar
deuce committed
504
	details.
deuce's avatar
deuce committed
505 506 507

	SOURCE: BANSI.TXT

508
CSI Pn P (DCH)
deuce's avatar
deuce committed
509
	Delete Character
deuce's avatar
deuce committed
510
	Defaults: Pn = 1
511 512 513 514
	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.
deuce's avatar
deuce committed
515 516 517

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

518
CSI Pn S (SU)
deuce's avatar
deuce committed
519
	Scroll Up
deuce's avatar
deuce committed
520 521
	Defaults: Pn = 1
	Scrolls all text on the screen up Pn lines.  New lines emptied at the
deuce's avatar
deuce committed
522
	bottom are filled with the current attribute.
deuce's avatar
deuce committed
523 524 525

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

deuce's avatar
deuce committed
526 527
CSI ? Ps1 ; Ps2 S (XTSRGA)
	XTerm Set or Request Graphics Attribute
528 529 530 531 532 533
	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

deuce's avatar
deuce committed
534
CSI Pn T (SD)
deuce's avatar
deuce committed
535
	Scroll Down
deuce's avatar
deuce committed
536 537
	Defaults: Pn = 1
	Scrolls all text on the screen down Pn lines.  New lines emptied at the
deuce's avatar
deuce committed
538
	top are filled with the current attribute.
deuce's avatar
deuce committed
539 540

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
541

542 543 544
CSI U
	NON-STANDARD (Disabled in current code)
	Clear screen with default attribute.
deuce's avatar
deuce committed
545 546
	This code is *supposed* to go to the "next page" according to the
	ANSI/ECMA specs with CSI V going to "previous page"
547 548 549

	SOURCE: BANSI.TXT

deuce's avatar
deuce committed
550
CSI Pn X (ECH)
551
	Erase Character
deuce's avatar
deuce committed
552
	Defaults: Pn = 1
553 554
	Erase p1 characters starting at the current character.  Will not erase
	past the end of line.
555 556 557 558
	Erased characters are set to the current attribute.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

deuce's avatar
deuce committed
559
CSI Pn Y (CVT)
deuce's avatar
deuce committed
560 561 562 563 564 565 566
	Cursor Line Tabulation
	Defaults: Pn = 1
	Move the cursor to the Pn-th next tab stop.
	Basically the same as sending TAB Pn times.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

deuce's avatar
deuce committed
567
CSI Pn Z
568
	Cursor Backward Tabulation
deuce's avatar
deuce committed
569
	Defaults: Pn = 1
570
	Move the cursor to the p1th preceding tab stop.  Will not go past the
deuce's avatar
deuce committed
571
	start of the line.
572 573 574

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

deuce's avatar
deuce committed
575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599
CSI Pn `
	Character Position Absolute
	Defaults: Pn = 1
	Move the cursor to the specified position on the current row.
	Will not go past the end of the line.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

CSI Pn a
	Cursor Position Forward
	Defaults: Pn = 1
	Moves the cursor position forward 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 b
	Repeat
	Defaults: Pn = 1
	Repeats the previous graphic character Pn times.  Will not repeat
	escape sequences.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

deuce's avatar
deuce committed
600
CSI Ps c
601
	Device Attributes
deuce's avatar
deuce committed
602 603
	Defaults: Ps = 0
	If Ps is 0, CTerm will reply with the sequence:
604
        CSI = 67;84;101;114;109;pN c
deuce's avatar
deuce committed
605
	64;84;101;114;109 is the ASCII values of the "CTerm" string.  pN is the
606 607 608 609 610
	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!
611

deuce's avatar
deuce committed
612 613
	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

deuce's avatar
deuce committed
614 615 616 617 618 619 620
CSI Pn SP c
	Tab Stop Remove
	Defaults: None
	Removes a tab stop at postion Pn.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

deuce's avatar
deuce committed
621 622 623 624 625 626 627 628
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:
629
	1 - Loadable fonts are availabe via Device Control Strings
deuce's avatar
deuce committed
630 631 632 633 634 635
	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
636 637
	6 - Extended palette is available
	7 - Mouse is available
deuce's avatar
deuce committed
638

deuce's avatar
deuce committed
639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669
CSI Ps d
	Line Position Absolute
	Defaults: Ps = 1
	Moves to row specified by Ps.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

CSI Ps e
	Line Position Relative
	Defaults: Ps = 1
	Moves forward Ps rows.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

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 Pn g
	Clear Tab(s)
	Defaults: Pn = 0
	Deletes tab stpos according to the values of P1:
	0 - Deletes tab stop at current position.
	3 - Deletes all tab stops.
	5 - Deletes all tab stops.

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf

deuce's avatar
deuce committed
670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689
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
deuce's avatar
deuce committed
690 691 692 693 694
	9 -  X10 compatible mouse reporting
	     Mouse button presses will send a CSI M <button> <x> <y>
	     Where <button> is ' ' + button number (0-based)
	     <x> and <y> are '!' + position (0-based)
	     SOURCE: xterm
deuce's avatar
deuce committed
695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714
	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.
715 716 717
	69 - DEC Left Right Margin Mode enabled
	     Enables CSI s to set the left/right margins, and disables CSI s
	     from saving the current cursor position.
deuce's avatar
deuce committed
718 719 720 721 722 723 724 725 726
	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
deuce's avatar
deuce committed
727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773
	1000 -  Normal tracking mode mouse reporting
	     Mouse button presses will send a CSI M <button> <x> <y>
	     Where <button> is ' ' + button number (0-based)
	     Mouse button releases will use a button number of 4
	     <x> and <y> are '!' + position (0-based)
	     SOURCE: xterm
	1001 -  Highlight tracking mode mouse reporting
	     (Not supported by SyncTERM)
	     SOURCE: xterm
	1002 -  Button-event tracking mode mouse reporting
	     Mouse button presses and movement when a button is pressed
	     will send a CSI M <button> <x> <y>
	     Where <button> is ' ' + button number (0-based)
	     32 is added to the button number for movement events.
	     Mouse button releases will use a button number of 4
	     <x> and <y> are '!' + position (0-based)
	     SOURCE: xterm
	1003 -  Any-event tracking mode mouse reporting
	     Mouse button presses and movement
	     will send a CSI M <button> <x> <y>
	     Where <button> is ' ' + button number (0-based)
	     32 is added to the button number for movement events.
	     Mouse button releases will use a button number of 4
	     <x> and <y> are '!' + position (0-based)
	     If no button is pressed, it acts as though button 0 is.
	     SOURCE: xterm
	1004 -  Focus-event tracking mode mouse reporting
	     (Not supported by SyncTERM)
	     SOURCE: xterm
	1005 -  UTF-8 encoded extended coordinates
	     (Not supported by SyncTERM)
	     SOURCE: xterm
	1006 -  SGR encoded extended coordinates
	     Instead of the CSI M method, the format of mouse reporting
	     is change to CSI < Pb ; Px ; Py M for presses and
	     CSI < Pb ; Px ; Py m for releases.
	     Instead of CSI M
	     Px and Py are one-based.
	     Pb remains the same (32 added for movement)
	     Button 3 is not used for release (separate code)
	     SOURCE: xterm
	1007 -  Alternate scroll mode
	     (Not supported by SyncTERM)
	     SOURCE: xterm
	1015 -  URXVT encoded extended coordinates
	     (Not supported by SyncTERM)
	     SOURCE: xterm
deuce's avatar
deuce committed
774

deuce's avatar
deuce committed
775 776 777 778 779 780 781 782 783
CSI Pn j
	Character Position Backward
	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

deuce's avatar
deuce committed
784 785 786 787 788 789 790 791 792
CSI Pn k
	Line Position Backward
	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

deuce's avatar
deuce committed
793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814
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
deuce's avatar
deuce committed
815
	9 -  Disable X10 compatible mouse reporting
deuce's avatar
deuce committed
816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833
	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.
834 835 836 837
	69 - DEC Left Right Margin Mode disabled
	     Disables CSI s from setting the left/right margins, and changes
	     it back to saving the current cursor position.  The current
	     left/right margins are maintained.
deuce's avatar
deuce committed
838 839 840 841 842 843 844 845
	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
deuce's avatar
deuce committed
846 847 848 849 850
	1000 -  Disable Normal tracking mode mouse reporting
	     SOURCE: xterm
	1001 -  Disable Highlight tracking mode mouse reporting
	     (Not supported by SyncTERM)
	     SOURCE: xterm
851
	1002 -  Disable Button-event tracking mode mouse reporting
deuce's avatar
deuce committed
852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868
	     SOURCE: xterm
	1003 -  Disable Any-event tracking mode mouse reporting
	     SOURCE: xterm
	1004 -  Disable Focus-event tracking mode mouse reporting
	     (Not supported by SyncTERM)
	     SOURCE: xterm
	1005 -  Disable UTF-8 encoded extended coordinates
	     (Not supported by SyncTERM)
	     SOURCE: xterm
	1006 -  Disable SGR encoded extended coordinates
	     SOURCE: xterm
	1007 -  Disable Alternate scroll mode
	     (Not supported by SyncTERM)
	     SOURCE: xterm
	1015 -  Disable URXVT encoded extended coordinates
	     (Not supported by SyncTERM)
	     SOURCE: xterm
deuce's avatar
deuce committed
869 870

CSI Ps... m
871
	Select Graphic Rendition
deuce's avatar
deuce committed
872
	Defaults: Ps1 = 0
deuce's avatar
deuce committed
873
	Sets or clears one or more text attributes.  Unlimited parameters are
deuce's avatar
deuce committed
874
	supported and are applied in received order.  The following are
875
	supported:
876 877 878 879 880 881
	                                        Blink Bold FG BG TF TB (Modified)
	0 -  Default attribute, white on black     X    X  X  X  X  X
	1 -  Bright Intensity                           X        X
	2 -  Dim intensity                              X        X
	5 -  Blink (By definition, slow blink)     X                X
	6 -  Blink (By definition, fast blink)     X                X
882
	     NOTE: Both blinks are the same speed.
883 884
	7 -  Negative Image - Reverses FG and BG           X  X  X  X
	8 -  Concealed characters, sets the                X     X  X
885
	     foreground colour to the background
886
	     colour.
887 888 889
	22 - Normal intensity                           X        X
	25 - Steady (Not blinking)                 X                X
	27 - Positive Image - Reverses FG and BG           X  X  X  X
890
	     NOTE: This should be a separate
891 892
	           attribute than 7 but this
	           implementation makes them equal
893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912
	30 - Black foreground                              X     X
	31 - Red foreground                                X     X
	32 - Green foreground                              X     X
	33 - Yellow foreground                             X     X
	34 - Blue foreground                               X     X
	35 - Magenta foreground                            X     X
	36 - Cyan foreground                               X     X
	37 - White foreground                              X     X
	38 - Extended Foreground (see notes)                     X
	39 - Default foreground (same as white)	           X     X
	40 - Black background                                 X     X
	41 - Red background                                   X     X
	42 - Green background                                 X     X
	43 - Yellow background                                X     X
	44 - Blue background                                  X     X
	45 - Magenta background                               X     X
	46 - Cyan background                                  X     X
	47 - White background                                 X     X
	48 - Extended Background (see notes)                        X
	49 - Default background (same as black)               X     X
913 914 915

	All others are ignored.

916 917 918 919 920 921 922
	Blink indicates the blink bit.
	Bold indicates the bold bit.
	FG indicates the foreground colour.
	BG indicates the background colour.
	TF indicates that the Tru Colour foreground is changed.
	TB indicates that the Tru Colour background is changed.

923 924 925 926 927
	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
deuce's avatar
deuce committed
928 929 930 931 932 933 934 935 936
	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/

937
	For direct colour selection, an additional four parameters are required
938
	after that value.  They are considered part of the 38/48, not separate
939 940 941 942 943 944
	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.
945

946
	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
deuce's avatar
deuce committed
947
	SOURCE: XTerm
948

deuce's avatar
deuce committed
949
CSI Ps n
950
	Device Status Report
deuce's avatar
deuce committed
951
	Defaults: Ps = 0
deuce's avatar
deuce committed
952
	A request for a status report.  CTerm handles the following three
deuce's avatar
deuce committed
953 954
	requests:
	5	- Request a DSR
955 956
		  CTerm will always reply with CSI 0 n indicating 
		  "ready, no malfunction detected"
deuce's avatar
deuce committed
957 958 959
	6	- Request active cursor position
		  CTerm will reply with CSI y ; x R where y is the current line
		  and x is
960
		  the current row.
deuce's avatar
deuce committed
961
	255	- NON-STANDARD EXTENSION
deuce's avatar
deuce committed
962
		  Replies as though a CSI 6 n was received with the cursor in
963 964
		  the bottom right corner.  i.e.: Returns the terminal size as
		  a position report.
965 966

	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
deuce's avatar
deuce committed
967
		(parameters 5 and 6 only)
968 969
	SOURCE: BANSI.TXT (parameter 255)

deuce's avatar
deuce committed
970 971 972 973 974 975
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
976
	CSI = 1 ;pF ;pR ;pS0 ;pS1 ;pS2 ;pS3 n
deuce's avatar
deuce committed
977 978 979
	pF is the first available loadable-font slot number
	pR is the result of the previous "Font Selection" request:
		0 = successful font selection
980
		1 = failed font selection
deuce's avatar
deuce committed
981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997
		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.

998 999 1000 1001 1002
	When Ps is 3, CTerm will respond with a Mode Report of the form
	CSI = 3 ; pH ; pW n
	Where pH is the height of a character cell in pixels, and pW is
	the width of a character cell in pixels.

1003 1004 1005 1006 1007 1008 1009
	When Ps is 62, CTerm will respond with a Mode Report of the form
	CSI 32767 * {
	This indicates that 524,272 bytes are available for macro storage.
	This is not actually true, SyncTERM will use all available memory
	for macro storage, but some software checks this value, and some
	parsers don't allow more than INT16_MAX parameter values.

deuce's avatar
deuce committed
1010 1011 1012 1013 1014 1015 1016 1017 1018 1019
	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.
1020 1021
	
	SOURCE: xterm
deuce's avatar
deuce committed
1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048

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
1049
	NON-STANDARD EXTENSION
1050
	Save Mode Setting
deuce's avatar
deuce committed
1051
	Saves the current mode states as specified by CSI ? l and CSI ? h.  If
deuce's avatar
deuce committed
1052 1053
	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).
deuce's avatar
deuce committed
1054

1055
	SOURCE: SyncTERM only
1056

1057 1058 1059 1060 1061 1062
CSI Pn1 ; Pn2 s
        (Only when DEC Left Right Margin Mode  - 69 - is enabled)
	NON-STANDARD EXTENSION.
	Set Left and Right Margins
	Defaults: Pn1 = 1
	          Pn2 = last column on screen
1063
	If either Pn1 or Pn2 is zero, the current setting is retained.
1064 1065 1066 1067 1068 1069
	Selects left and right margins, defining the scrolling region. Pn1 is
	the column number of the first column in the scrolling region. Pn2 is
	the column number of the right column.

	SOURCE: xterm

1070
CSI s
1071
        (Only when DEC Left Right Margin Mode  - 69 - is disabled)
1072 1073 1074
	NON-STANDARD EXTENSION
	Save Current Position
	Saves the current cursor position for later restoring with CSI u
1075 1076
	although this is non-standard, it's so widely used in the BBS world
	that any terminal program MUST implement it.
deuce's avatar
deuce committed
1077

1078
	SOURCE: ANSI.SYS
1079

1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091
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.

deuce's avatar
deuce committed
1092
CSI ? Ps...  u
1093
	NON-STANDARD EXTENSION
1094
	Restore Mode Setting
deuce's avatar
deuce committed
1095
	Saves the current mode states as specified by CSI ? l and CSI ? h.  If
deuce's avatar
deuce committed
1096 1097
	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)
deuce's avatar
deuce committed
1098

1099
	SOURCE: SyncTERM only
1100

1101
CSI u
deuce's avatar
deuce committed
1102
	NON-STANDARD EXTENSION
1103
	Restore Cursor Position
1104 1105
	Move the cursor to the last position saved by CSI s.  If no position
	has been saved, the cursor is not moved.
1106

1107
	SOURCE: ANSI.SYS
1108

deuce's avatar
deuce committed
1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119
CSI 2 $ w
	Request Tab Stop Report
	Requests a list of tab stops.
	The list is in the form:
	
	DCS 2 $ u Pt ST
	
	The string Pt is a list of tab stops separated by /s.
	
	SOURCE: VT320

1120 1121 1122 1123 1124 1125
CSI Pn * z
	Invoke Macro (DECINVM)
	Invokes a macro.
	Pn specifies the macro number.  If Pn is not 0..63, no action is
	taken.

deuce's avatar
deuce committed
1126
CSI = Ps1 ; Ps2 {
1127
	NON-STANDARD EXTENSION (Deprecated)
deuce's avatar
deuce committed
1128 1129 1130 1131 1132 1133 1134 1135 1136 1137
	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.

1138 1139
	The DCS font string should be used instead as of CTerm 1.213

deuce's avatar
deuce committed
1140 1141
	SOURCE: CTerm only.

1142 1143
"ANSI" Music
============
deuce's avatar
deuce committed
1144
This is the place where the BBS world completely fell on it's face in ANSI
1145
usage.  A programmer with either TeleMate or QModem (the first two programs to
deuce's avatar
deuce committed
1146
support "ANSI" music as far as I can tell) decided they needed a method of
1147
playing music on a BBS connection.  They decided to add an "unused" ANSI code
deuce's avatar
deuce committed
1148 1149 1150
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:
1151
CSI M <music string> 0x0e
deuce's avatar
deuce committed
1152

1153
They used a subset of IBM BASICs PLAY statement functionality for ANSI music
1154
strings which often start with "MF" or "MB", so the M after the CSI was often
deuce's avatar
deuce committed
1155
considered as part of the music string.  You would see things such as:
1156
CSI MFABCD 0x0e and the F would not be played as a note.  This just added
deuce's avatar
deuce committed
1157 1158
further confusion to the mess.

1159 1160 1161 1162 1163 1164 1165
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.
deuce's avatar
deuce committed
1166 1167 1168 1169 1170 1171

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.

1172
The details of ANSI music then are as follows:
deuce's avatar
deuce committed
1173 1174 1175 1176 1177 1178
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
deuce's avatar
deuce committed
1179 1180 1181
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.
deuce's avatar
deuce committed
1182 1183

The music string is then parsed with the following sequences supported:
1184
Mx sets misc. music parameters where x is one of the following:
deuce's avatar
deuce committed
1185 1186 1187
	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
1188
	    continue.
1189
	N - "Normal" not legato, not staccato
deuce's avatar
deuce committed
1190
	L - Play notes legato
1191
	S - Play notes staccato
deuce's avatar
deuce committed
1192
T### Sets the tempo of the music where ### is one or more decimal digits.
deuce's avatar
deuce committed
1193 1194 1195 1196 1197 1198 1199 1200 1201 1202
	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.
1203
A, B, C, D, E, F, G, or P Plays the named note or pause from the current
deuce's avatar
deuce committed
1204
	octave.  An "Octave" is the rising sequence of the following notes:
deuce's avatar
deuce committed
1205 1206
	C, C#, D, D#, E, F, F#, G, G#, A, A#, B
	This is contrary to normal music terminology.
deuce's avatar
deuce committed
1207
	The special note "P" is a pause.
deuce's avatar
deuce committed
1208 1209 1210 1211 1212
	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++"
1213
		is equivalent to "D".
deuce's avatar
deuce committed
1214 1215
	# - Sharp.  The next highest semitone is played.
		Each sharp character will move up one semitone, so "C##"
1216
		is equivalent to "D".
deuce's avatar
deuce committed
1217 1218
	- - Flat.  The next lowest semitone is played.
		Each flat character will move down one semitone, so "D--"
1219
		is equivalent to "C".
deuce's avatar
deuce committed
1220
	. - Duration is 1.5 times what it would otherwise be.  Dots are not
1221 1222
		cumulative, so "C.." is equivalent to "C."
	### - Notelength as a reciprocal of the fraction of a whole note to
deuce's avatar
deuce committed
1223 1224
		play the note for.  For example, 4 would indicate a 1/4 note.
		The default note length is 4.
1225
L### Set the notelength parameter for all following notes which do not have
1226 1227 1228
	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).
1229
<	Move the next lowest octave.
deuce's avatar
deuce committed
1230 1231 1232 1233 1234 1235
	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:
1236
65.406, 130.810, 261.620, 523.250, 1046.500, 2093.000, 4186.000