control_code/dec/
csi.rs

1//            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2//                    Version 2, December 2004
3//
4// Copyleft (ↄ) meh. <meh@schizofreni.co> | http://meh.schizofreni.co
5//
6// Everyone is permitted to copy and distribute verbatim or modified
7// copies of this license document, and changing it is allowed as long
8// as the name is changed.
9//
10//            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11//   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12//
13//  0. You just DO WHAT THE FUCK YOU WANT TO.
14
15use smallvec::SmallVec;
16use DEC::T as DEC;
17use DEC::*;
18
19#[inline]
20pub fn normal(id: u8, modifier: Option<u8>, args: &[Option<u32>]) -> Option<DEC> {
21	match (id, modifier) {
22		(b'r', None) => DECSTBM(args),
23
24		(b'q', Some(b' ')) => DECSCUSR(args),
25		(b'p', Some(b'!')) => DECSTR(args),
26
27		_ => None
28	}
29}
30
31#[inline]
32pub fn private(id: u8, modifier: Option<u8>, args: &[Option<u32>]) -> Option<DEC> {
33	match (id, modifier) {
34		(b'h', None) => SM(args),
35		(b'l', None) => RM(args),
36
37		(b'~', Some(b'\'')) => DECDC(args),
38		(b'}', Some(b'\'')) => DECIC(args),
39
40		_ => None
41	}
42}
43
44with_args!(SM<args> -> DEC, ?
45	args.iter().map(|d| d.unwrap_or(0))
46		.map(Mode::parse)
47		.collect::<Result<SmallVec<_>, _>>()
48		.map(Set));
49
50with_args!(RM<args> -> DEC, ?
51	args.iter().map(|d| d.unwrap_or(0))
52		.map(Mode::parse)
53		.collect::<Result<SmallVec<_>, _>>()
54		.map(Reset));
55
56with_args!(DECDC<1, args> -> DEC,
57	DeleteColumn(arg!(args[0] => 1)));
58
59with_args!(DECIC<1, args> -> DEC,
60	InsertColumn(arg!(args[0] => 1)));
61
62with_args!(DECSCUSR<1, args> -> DEC,
63	CursorStyle(arg!(args[0] => 0) as u8));
64
65with_args!(DECSTBM<2, args> -> DEC,
66	ScrollRegion {
67		top:    arg!(args[0] => 1).saturating_sub(1),
68		bottom: arg!(args[1])
69			.and_then(|v| if v == 0 { None } else { Some(v) })
70			.map(|b| b.saturating_sub(1)),
71	});
72
73with_args!(DECSTR -> DEC,
74	SoftReset);
75
76// TODO: DECCARA
77// TODO: DECCRA
78// TODO: DECELF
79// TODO: DECERA
80// TODO: DECFNK
81// TODO: DECFRA
82// TODO: DECINVM
83// TODO: DECKBD
84// TODO: DECLFKC
85// TODO: DECLL
86// TODO: DECLTOD
87// TODO: DECPCTERM
88// TODO: DECPKA
89// TODO: DECPKFMR
90// TODO: DECRARA
91// TODO: DECRPDE
92// TODO: DECRPKT
93// TODO: DECRPM
94// TODO: DECRQCRA
95// TODO: DECRQDE
96// TODO: DECRQKD
97// TODO: DECRQKT
98// TODO: DECRQM
99// TODO: DECRQPKFM
100// TODO: DECRQPSR
101// TODO: DECRQTSR
102// TODO: DECRQUPSS
103// TODO: DECSACE
104// TODO: DECSASD
105// TODO: DECSCA
106// TODO: DECSCL
107// TODO: DECSCP
108// TODO: DECSCPP
109// TODO: DECSCS
110// TODO: DECSDDT
111// TODO: DECSDPT
112// TODO: DECSED
113// TODO: DECSEL
114// TODO: DECSERA
115// TODO: DECSFC
116// TODO: DECSKCV
117// TODO: DECSLCK
118// TODO: DECSLPP
119// TODO: DECSLRM
120// TODO: DECSMBV
121// TODO: DECSMKR
122// TODO: DECSNLS
123// TODO: DECSPP
124// TODO: DECSPPCS
125// TODO: DECSPRTT
126// TODO: DECSR
127// TODO: DECSRC
128// TODO: DECSRFR
129// TODO: DECSSCLS
130// TODO: DECSSDT
131// TODO: DECSSL
132// TODO: DECST8C
133// TODO: DECSTRL
134// TODO: DECSWBV
135// TODO: DECTID
136// TODO: DECTME
137// TODO: DECTSR
138// TODO: DECTST
139// TODO: DECXCPR
140// TODO: DSR-CPR
141// TODO: DSR-DIR
142// TODO: DSR-XCPR
143// TODO: DSR-KBD
144// TODO: DSR-MSR
145// TODO: DSR-DECCKSR
146// TODO: DSR-OS
147// TODO: DSR-PP
148// TODO: DSR-UDK