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