cterm.txt 34.9 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
Control characters:

15
16
17
18
19
20
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.

21
22
23
24
CR:
	Move cursor position to column 1 of the current line

LF:
25
	Move cursor position to same column of the next row.
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
	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.

56
ESC D	(Disabled in current code)
57
58
59
60
	Scrolls window up one line filling the bottom line with the
	current attribute.
	SOURCE: BANSI.TXT

61
ESC M	(Disabled in current code)
62
63
64
65
	Scrolls window down one line filling the top line with the
	current attribute
	SOURCE: BANSI.TXT

deuce's avatar
deuce committed
66
ESC _	Application Program String
deuce's avatar
deuce committed
67
68
69
70
	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
71
ESC P	Device Control String
deuce's avatar
deuce committed
72
73
74
	Begins a string consisting of the characters 0x08 - 0x0d and
	0x20-0x7e, terminated by a String Terminator (ST)
	Supported OSC values:
75
76
77
78
79
80
81
82
83
		"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 {

deuce's avatar
deuce committed
84
85
86
87
88
89
90
91
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
		[ 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.

deuce's avatar
deuce committed
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
		$ 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
163
164
165
166
		Currently supported values of p1:

		m	Request SGR parameters

deuce's avatar
deuce committed
167
168
169
170
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.
deuce's avatar
deuce committed
171

172
173
174
175
176
177
178
179
180
181
182
183
184
185
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
deuce's avatar
deuce committed
186

187
188
189
190
191
192
193
		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

deuce's avatar
deuce committed
194
195
196
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.
197
	The string is currently ignored.
deuce's avatar
deuce committed
198
199
200

ESC \	String Terminator

201
202
203
Control Sequences:
------------------

204
205
206
Control sequences start with the Control Sequence Introducer which is
ESC [  CSI will be used to express this from now on.

207
Control sequences are in the following format:
208
CSI {'0' (ZERO) to '?'}{SPACE to '/'}{'@' to '~'}
209
210
211
212
	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.
213
	Illegal combinations are displayed.
214
215
216
217

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
218
	a ';'.  The use of a ':' from the set is reserved.
219
220
221
	If the parameter string begins with '<', '=', '>', or '?' then
	this is a non-standard extension to the ANSI spec.

deuce's avatar
deuce committed
222
223
224
225
226
227
	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
228

deuce's avatar
deuce committed
229
	If a default is defined, the parameter is optional
230

deuce's avatar
deuce committed
231
CSI Pn @
deuce's avatar
deuce committed
232
	Insert Character(s)
deuce's avatar
deuce committed
233
234
	Defaults: Pn = 1
	Moves text from the current position to the right edge Pn characters
235
	to the right, with rightmost characters going off-screen and the
deuce's avatar
deuce committed
236
237
238
239
	resulting hole being filled with the current attribute.

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

deuce's avatar
deuce committed
240
CSI Pn A
deuce's avatar
deuce committed
241
	Cursor Up
deuce's avatar
deuce committed
242
243
	Defaults: Pn = 1
	Moves the cursor position up Pn lines from the current position.
deuce's avatar
deuce committed
244
245
246
247
248
	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
249
CSI Pn B
deuce's avatar
deuce committed
250
	Cursor Down
deuce's avatar
deuce committed
251
252
	Defaults: Pn = 1
	Moves the cursor position down Pn lines from the current position.
deuce's avatar
deuce committed
253
254
255
256
257
	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
258
CSI Pn C
deuce's avatar
deuce committed
259
	Cursor Right
deuce's avatar
deuce committed
260
261
	Defaults: Pn = 1
	Moves the cursor position right Pn columns from the current position.
deuce's avatar
deuce committed
262
263
264
265
266
	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
267
CSI Pn D
deuce's avatar
deuce committed
268
	Cursor Left
deuce's avatar
deuce committed
269
270
	Defaults: Pn = 1
	Moves the cursor position left Pn columns from the current position.
deuce's avatar
deuce committed
271
272
273
274
275
	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
276
CSI Ps1 ; Ps2 sp D
277
	Font Selection
deuce's avatar
deuce committed
278
	Defaults: Ps1 = 0  Ps2 = 0
279
	"sp" indicates a single space character.
deuce's avatar
deuce committed
280
281
	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
282
	font selection.  Only X11 and SDL currently do.
deuce's avatar
deuce committed
283
	Supported Ps1 values:
284
		0  - Default font
285
286
287
288
289
290
		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
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
	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)
324
325
326
327
328
		32 - Commodore 64 (UPPER)
		33 - Commodore 64 (Lower)
		34 - Commodore 128 (UPPER)
		35 - Commodore 128 (Lower)
		36 - Atari
deuce's avatar
deuce committed
329
330
		37 - P0T NOoDLE (Amiga)
		38 - mO'sOul (Amiga)
331
		39 - MicroKnight Plus (Amiga)
deuce's avatar
deuce committed
332
		40 - Topaz Plus (Amiga)
333
		41 - MicroKnight (Amiga)
deuce's avatar
deuce committed
334
335
		42 - Topaz (Amiga)

336
337
338
	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.
339

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

deuce's avatar
deuce committed
342
CSI Pn E
deuce's avatar
deuce committed
343
	Cursor Next Line
deuce's avatar
deuce committed
344
345
	Defaults: Pn = 1
	Moves the cursor to the first column of the line Pn down from the
346
347
348
	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
349
350
351

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

deuce's avatar
deuce committed
352
CSI Pn F
353
	Cursor Preceding Line
deuce's avatar
deuce committed
354
355
	Defaults: Pn = 1
	Moves the cursor to the first column if the row Pn up from the
356
357
	current position.  Attempting to move past the screen boundaries
	stops the cursor at the screen boundary.
358
359
360

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

deuce's avatar
deuce committed
361
CSI Pn G
deuce's avatar
deuce committed
362
	Cursor Character Absolute
deuce's avatar
deuce committed
363
364
	Defaults: Pn = 1
	Movies the cursor to column Pn of the current row.
365

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

deuce's avatar
deuce committed
368
369
CSI Pn1 ; Pn2 H
CSI Pn1 ; Pn2 f
370
	Cursor Position
deuce's avatar
deuce committed
371
372
	Defaults: Pn1 = 1  Pn2 = 1
	Moves the cursor to the Pn2th column of the Pn1th line.
deuce's avatar
deuce committed
373
374
375

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

deuce's avatar
deuce committed
376
CSI Ps J
deuce's avatar
deuce committed
377
	Erase in Page
deuce's avatar
deuce committed
378
379
	Defaults: Ps = 0
	Erases from the current screen according to the value of Ps
deuce's avatar
deuce committed
380
381
382
383
384
385
386
387
388
	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

deuce's avatar
deuce committed
389
CSI Ps K
deuce's avatar
deuce committed
390
	Erase in Line
deuce's avatar
deuce committed
391
392
	Defaults: Ps = 0
	Erases from the current line according to the value pf Ps
deuce's avatar
deuce committed
393
394
395
396
397
398
399
	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

deuce's avatar
deuce committed
400
CSI Pn L
deuce's avatar
deuce committed
401
	Insert Line(s)
deuce's avatar
deuce committed
402
403
	Defaults: Pn = 1
	Inserts Pn lines at the current line position.  The current line and
404
405
	those after it are scrolled down and the new empty lines are filled
	with the current attribute.
deuce's avatar
deuce committed
406
407
408

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

deuce's avatar
deuce committed
409
CSI Pn M
deuce's avatar
deuce committed
410
	Delete Line(s) / "ANSI" Music
deuce's avatar
deuce committed
411
412
	Defaults: Pn = 1
	Deletes the current line and the Pn - 1 lines after it scrolling the
deuce's avatar
deuce committed
413
414
415
416
	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
417
418
419
420
421
	See "ANSI" MUSIC section for more details.

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

deuce's avatar
deuce committed
422
423
424
425
426
427
428
429
430
431
432
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.

deuce's avatar
deuce committed
433
434
CSI N
	"ANSI" Music / Not implemented.
deuce's avatar
deuce committed
435
	If "ANSI" Music is set to BananaCom (CSI = 1 M) or fully enabled
436
	(CSI = 2 M) performs "ANSI" music.  See "ANSI" MUSIC section for more
deuce's avatar
deuce committed
437
	details.
deuce's avatar
deuce committed
438
439
440

	SOURCE: BANSI.TXT

deuce's avatar
deuce committed
441
CSI Pn P
deuce's avatar
deuce committed
442
	Delete Character
deuce's avatar
deuce committed
443
	Defaults: Pn = 1
444
445
446
447
	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
448
449
450

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

deuce's avatar
deuce committed
451
CSI Pn S
deuce's avatar
deuce committed
452
	Scroll Up
deuce's avatar
deuce committed
453
454
	Defaults: Pn = 1
	Scrolls all text on the screen up Pn lines.  New lines emptied at the
deuce's avatar
deuce committed
455
	bottom are filled with the current attribute.
deuce's avatar
deuce committed
456
457
458

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

459
460
461
462
463
464
465
466
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

deuce's avatar
deuce committed
467
CSI Pn T
deuce's avatar
deuce committed
468
	Scroll Down
deuce's avatar
deuce committed
469
470
	Defaults: Pn = 1
	Scrolls all text on the screen down Pn lines.  New lines emptied at the
deuce's avatar
deuce committed
471
	top are filled with the current attribute.
deuce's avatar
deuce committed
472
473

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

475
476
477
CSI U
	NON-STANDARD (Disabled in current code)
	Clear screen with default attribute.
deuce's avatar
deuce committed
478
479
	This code is *supposed* to go to the "next page" according to the
	ANSI/ECMA specs with CSI V going to "previous page"
480
481
482

	SOURCE: BANSI.TXT

deuce's avatar
deuce committed
483
CSI Pn X
484
	Erase Character
deuce's avatar
deuce committed
485
	Defaults: Pn = 1
486
487
	Erase p1 characters starting at the current character.  Will not erase
	past the end of line.
488
489
490
491
	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
492
CSI Pn Z
493
	Cursor Backward Tabulation
deuce's avatar
deuce committed
494
	Defaults: Pn = 1
495
	Move the cursor to the p1th preceding tab stop.  Will not go past the
deuce's avatar
deuce committed
496
	start of the line.
497
498
499

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

deuce's avatar
deuce committed
500
CSI Ps c
501
	Device Attributes
deuce's avatar
deuce committed
502
503
	Defaults: Ps = 0
	If Ps is 0, CTerm will reply with the sequence:
504
        CSI = 67;84;101;114;109;pN c
deuce's avatar
deuce committed
505
	64;84;101;114;109 is the ASCII values of the "CTerm" string.  pN is the
506
507
508
509
510
	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!
511

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

deuce's avatar
deuce committed
514
515
516
517
518
519
520
521
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:
522
	1 - Loadable fonts are availabe via Device Control Strings
deuce's avatar
deuce committed
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
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
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
	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
630
	Select Graphic Rendition
deuce's avatar
deuce committed
631
	Defaults: Ps1 = 0
deuce's avatar
deuce committed
632
	Sets or clears one or more text attributes.  Unlimited parameters are
deuce's avatar
deuce committed
633
	supported and are applied in received order.  The following are
634
	supported:
635
636
637
638
639
640
	                                        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
641
	     NOTE: Both blinks are the same speed.
642
643
	7 -  Negative Image - Reverses FG and BG           X  X  X  X
	8 -  Concealed characters, sets the                X     X  X
644
	     foreground colour to the background
645
	     colour.
646
647
648
	22 - Normal intensity                           X        X
	25 - Steady (Not blinking)                 X                X
	27 - Positive Image - Reverses FG and BG           X  X  X  X
649
	     NOTE: This should be a separate
650
651
	           attribute than 7 but this
	           implementation makes them equal
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
	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
672
673
674

	All others are ignored.

675
676
677
678
679
680
681
	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.

682
683
684
685
686
	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
687
688
689
690
691
692
693
694
695
	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/

696
	For direct colour selection, an additional four parameters are required
697
	after that value.  They are considered part of the 38/48, not separate
698
699
700
701
702
703
	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.
704

705
	SOURCE: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf
deuce's avatar
deuce committed
706
	SOURCE: XTerm
707

deuce's avatar
deuce committed
708
CSI Ps n
709
	Device Status Report
deuce's avatar
deuce committed
710
	Defaults: Ps = 0
deuce's avatar
deuce committed
711
	A request for a status report.  CTerm handles the following three
deuce's avatar
deuce committed
712
713
	requests:
	5	- Request a DSR
714
715
		  CTerm will always reply with CSI 0 n indicating 
		  "ready, no malfunction detected"
deuce's avatar
deuce committed
716
717
718
	6	- Request active cursor position
		  CTerm will reply with CSI y ; x R where y is the current line
		  and x is
719
		  the current row.
deuce's avatar
deuce committed
720
	255	- NON-STANDARD EXTENSION
721
		  Replies as though a CSI [ 6 n was received with the cursor in
722
723
		  the bottom right corner.  i.e.: Returns the terminal size as
		  a position report.
724
725

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

deuce's avatar
deuce committed
729
730
731
732
733
734
735
736
737
738
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
739
		1 = failed font selection
deuce's avatar
deuce committed
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
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
		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
794
	NON-STANDARD EXTENSION
795
	Save Mode Setting
deuce's avatar
deuce committed
796
	Saves the current mode states as specified by CSI ? l and CSI ? h.  If
deuce's avatar
deuce committed
797
798
	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
799

800
	SOURCE: SyncTERM only
801

802
803
804
805
CSI s
	NON-STANDARD EXTENSION
	Save Current Position
	Saves the current cursor position for later restoring with CSI u
806
807
	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
808

809
	SOURCE: ANSI.SYS
810

811
812
813
814
815
816
817
818
819
820
821
822
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
823
CSI ? Ps...  u
824
	NON-STANDARD EXTENSION
825
	Restore Mode Setting
deuce's avatar
deuce committed
826
	Saves the current mode states as specified by CSI ? l and CSI ? h.  If
deuce's avatar
deuce committed
827
828
	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
829

830
	SOURCE: SyncTERM only
831

832
CSI u
deuce's avatar
deuce committed
833
	NON-STANDARD EXTENSION
834
	Restore Cursor Position
835
836
	Move the cursor to the last position saved by CSI s.  If no position
	has been saved, the cursor is not moved.
837

838
	SOURCE: ANSI.SYS
839

deuce's avatar
deuce committed
840
CSI = Ps1 ; Ps2 {
841
	NON-STANDARD EXTENSION (Deprecated)
deuce's avatar
deuce committed
842
843
844
845
846
847
848
849
850
851
	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.

852
853
	The DCS font string should be used instead as of CTerm 1.213

deuce's avatar
deuce committed
854
855
	SOURCE: CTerm only.

856
857
"ANSI" Music
============
deuce's avatar
deuce committed
858
This is the place where the BBS world completely fell on it's face in ANSI
859
usage.  A programmer with either TeleMate or QModem (the first two programs to
deuce's avatar
deuce committed
860
support "ANSI" music as far as I can tell) decided they needed a method of
861
playing music on a BBS connection.  They decided to add an "unused" ANSI code
deuce's avatar
deuce committed
862
863
864
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:
865
CSI M <music string> 0x0e
deuce's avatar
deuce committed
866

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

873
874
875
876
877
878
879
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
880
881
882
883
884
885

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.

886
The details of ANSI music then are as follows:
deuce's avatar
deuce committed
887
888
889
890
891
892
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
893
894
895
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
896
897

The music string is then parsed with the following sequences supported:
898
Mx sets misc. music parameters where x is one of the following:
deuce's avatar
deuce committed
899
900
901
	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
902
	    continue.
903
	N - "Normal" not legato, not staccato
deuce's avatar
deuce committed
904
	L - Play notes legato
905
	S - Play notes staccato
deuce's avatar
deuce committed
906
T### Sets the tempo of the music where ### is one or more decimal digits.
deuce's avatar
deuce committed
907
908
909
910
911
912
913
914
915
916
	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.
917
A, B, C, D, E, F, G, or P Plays the named note or pause from the current
deuce's avatar
deuce committed
918
	octave.  An "Octave" is the rising sequence of the following notes:
deuce's avatar
deuce committed
919
920
	C, C#, D, D#, E, F, F#, G, G#, A, A#, B
	This is contrary to normal music terminology.
deuce's avatar
deuce committed
921
	The special note "P" is a pause.
deuce's avatar
deuce committed
922
923
924
925
926
	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++"
927
		is equivalent to "D".
deuce's avatar
deuce committed
928
929
	# - Sharp.  The next highest semitone is played.
		Each sharp character will move up one semitone, so "C##"
930
		is equivalent to "D".
deuce's avatar
deuce committed
931
932
	- - Flat.  The next lowest semitone is played.
		Each flat character will move down one semitone, so "D--"
933
		is equivalent to "C".
deuce's avatar
deuce committed
934
	. - Duration is 1.5 times what it would otherwise be.  Dots are not
935
936
		cumulative, so "C.." is equivalent to "C."
	### - Notelength as a reciprocal of the fraction of a whole note to
deuce's avatar
deuce committed
937
938
		play the note for.  For example, 4 would indicate a 1/4 note.
		The default note length is 4.
939
L### Set the notelength parameter for all following notes which do not have
940
941
942
	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).
943
<	Move the next lowest octave.
deuce's avatar
deuce committed
944
945
946
947
948
949
	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:
950
65.406, 130.810, 261.620, 523.250, 1046.500, 2093.000, 4186.000
deuce's avatar
deuce committed
951
952
953

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
954
low frequencies.  The notes *sound* correct to me.  If anyone can give me
deuce's avatar
deuce committed
955
956
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".
957

958
!!!PLEASE NOTE!!! If you are playing some ANSI Music then ask the user if they
959
heard it, ALWAYS follow it with an 0x0f 0x0e is the shift lock character which
960
961
962
*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.