control_code/dec/
mode.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 nom;
16
17#[derive(Eq, PartialEq, Copy, Clone, Debug)]
18pub enum Mode {
19	ApplicationCursor,
20	Ansi,
21	SmallFont,
22	SmoothScroll,
23	ReverseVideo,
24	Origin,
25	AutoWrap,
26	AutoRepeat,
27	FormFeed,
28	PrintComplete,
29	CursorVisible,
30	CursorRTL,
31	HebrewKeyboard,
32	HebrewEncoding,
33	Ascii,
34	NorthAmericanKeyboard,
35	ProPrinterEmulation,
36	VerticalCoupling,
37	PageCoupling,
38	ApplicationKeypad,
39	Backspace,
40	DataProcessing,
41	SetMargins,
42	LimitedTransmission,
43	KeyPosition,
44	Saver,
45	NoClear,
46	CopyRTL,
47	AutoResize,
48	Modem,
49	AutoAnswerback,
50	ConcealAnswerback,
51	IgnoreNull,
52	HalfDuplex,
53	SecondaryKeyboard,
54	Overscan,
55	NumLock,
56	CapsLock,
57	HostIndicatorLed,
58}
59
60impl Mode {
61	#[inline]
62	pub fn parse<'a>(value: u32) -> Result<Self, nom::ErrorKind> {
63		match value {
64			1   => Ok(Mode::ApplicationCursor),
65			2   => Ok(Mode::Ansi),
66			3   => Ok(Mode::SmallFont),
67			4   => Ok(Mode::SmoothScroll),
68			5   => Ok(Mode::ReverseVideo),
69			6   => Ok(Mode::Origin),
70			7   => Ok(Mode::AutoWrap),
71			8   => Ok(Mode::AutoRepeat),
72			18  => Ok(Mode::FormFeed),
73			19  => Ok(Mode::PrintComplete),
74			25  => Ok(Mode::CursorVisible),
75			34  => Ok(Mode::CursorRTL),
76			35  => Ok(Mode::HebrewKeyboard),
77			36  => Ok(Mode::HebrewEncoding),
78			42  => Ok(Mode::Ascii),
79			57  => Ok(Mode::NorthAmericanKeyboard),
80			58  => Ok(Mode::ProPrinterEmulation),
81			61  => Ok(Mode::VerticalCoupling),
82			64  => Ok(Mode::PageCoupling),
83			66  => Ok(Mode::ApplicationKeypad),
84			67  => Ok(Mode::Backspace),
85			68  => Ok(Mode::DataProcessing),
86			69  => Ok(Mode::SetMargins),
87			73  => Ok(Mode::LimitedTransmission),
88			81  => Ok(Mode::KeyPosition),
89			97  => Ok(Mode::Saver),
90			95  => Ok(Mode::NoClear),
91			96  => Ok(Mode::CopyRTL),
92			98  => Ok(Mode::AutoResize),
93			99  => Ok(Mode::Modem),
94			100 => Ok(Mode::AutoAnswerback),
95			101 => Ok(Mode::ConcealAnswerback),
96			102 => Ok(Mode::IgnoreNull),
97			103 => Ok(Mode::HalfDuplex),
98			104 => Ok(Mode::SecondaryKeyboard),
99			106 => Ok(Mode::Overscan),
100			108 => Ok(Mode::NumLock),
101			109 => Ok(Mode::CapsLock),
102			110 => Ok(Mode::HostIndicatorLed),
103
104			_ => Err(nom::ErrorKind::Custom(9004)),
105		}
106	}
107}
108
109impl Into<u32> for Mode {
110	#[inline]
111	fn into(self) -> u32 {
112		match self {
113			Mode::ApplicationCursor     => 1,
114			Mode::Ansi                  => 2,
115			Mode::SmallFont             => 3,
116			Mode::SmoothScroll          => 4,
117			Mode::ReverseVideo          => 5,
118			Mode::Origin                => 6,
119			Mode::AutoWrap              => 7,
120			Mode::AutoRepeat            => 8,
121			Mode::FormFeed              => 18,
122			Mode::PrintComplete         => 19,
123			Mode::CursorVisible         => 25,
124			Mode::CursorRTL             => 34,
125			Mode::HebrewKeyboard        => 35,
126			Mode::HebrewEncoding        => 36,
127			Mode::Ascii                 => 42,
128			Mode::NorthAmericanKeyboard => 57,
129			Mode::ProPrinterEmulation   => 58,
130			Mode::VerticalCoupling      => 61,
131			Mode::PageCoupling          => 64,
132			Mode::ApplicationKeypad     => 66,
133			Mode::Backspace             => 67,
134			Mode::DataProcessing        => 68,
135			Mode::SetMargins            => 69,
136			Mode::LimitedTransmission   => 73,
137			Mode::KeyPosition           => 81,
138			Mode::NoClear               => 95,
139			Mode::CopyRTL               => 96,
140			Mode::Saver                 => 97,
141			Mode::AutoResize            => 98,
142			Mode::Modem                 => 99,
143			Mode::AutoAnswerback        => 100,
144			Mode::ConcealAnswerback     => 101,
145			Mode::IgnoreNull            => 102,
146			Mode::HalfDuplex            => 103,
147			Mode::SecondaryKeyboard     => 104,
148			Mode::Overscan              => 106,
149			Mode::NumLock               => 108,
150			Mode::CapsLock              => 109,
151			Mode::HostIndicatorLed      => 110,
152		}
153	}
154}