/// This is the state change table. It's indexed first by current state and then by the next /// character in the pty stream. use definitions::Action; pub static STATE_CHANGE: [[u8; 256]; 16] = vt_state_table! { State::Anywhere => { 0x18 => (Action::Execute, State::Ground), 0x1a => (Action::Execute, State::Ground), 0x1b => State::Escape, }, State::Ground => { 0x00...0x17 => Action::Execute, 0x19 => Action::Execute, 0x1c...0x1f => Action::Execute, 0x20...0x7f => Action::Print, 0x80...0x8f => Action::Execute, 0x91...0x9a => Action::Execute, 0x9c => Action::Execute, // Beginning of UTF-8 2 byte sequence 0xc2...0xdf => (State::Utf8, Action::BeginUtf8), // Beginning of UTF-8 3 byte sequence 0xe0...0xef => (State::Utf8, Action::BeginUtf8), // Beginning of UTF-8 4 byte sequence 0xf0...0xf4 => (State::Utf8, Action::BeginUtf8), }, State::Escape => { 0x00...0x17 => Action::Execute, 0x19 => Action::Execute, 0x1c...0x1f => Action::Execute, 0x7f => Action::Ignore, 0x20...0x2f => (Action::Collect, State::EscapeIntermediate), 0x30...0x4f => (Action::EscDispatch, State::Ground), 0x51...0x57 => (Action::EscDispatch, State::Ground), 0x59 => (Action::EscDispatch, State::Ground), 0x5a => (Action::EscDispatch, State::Ground), 0x5c => (Action::EscDispatch, State::Ground), 0x60...0x7e => (Action::EscDispatch, State::Ground), 0x5b => State::CsiEntry, 0x5d => State::OscString, 0x50 => State::DcsEntry, 0x58 => State::SosPmApcString, 0x5e => State::SosPmApcString, 0x5f => State::SosPmApcString, }, State::EscapeIntermediate => { 0x00...0x17 => Action::Execute, 0x19 => Action::Execute, 0x1c...0x1f => Action::Execute, 0x20...0x2f => Action::Collect, 0x7f => Action::Ignore, 0x30...0x7e => (Action::EscDispatch, State::Ground) }, State::CsiEntry => { 0x00...0x17 => Action::Execute, 0x19 => Action::Execute, 0x1c...0x1f => Action::Execute, 0x7f => Action::Ignore, 0x20...0x2f => (Action::Collect, State::CsiIntermediate), 0x3a => State::CsiIgnore, 0x30...0x39 => (Action::Param, State::CsiParam), 0x3b => (Action::Param, State::CsiParam), 0x3c...0x3f => (Action::Collect, State::CsiParam), 0x40...0x7e => (Action::CsiDispatch, State::Ground) }, State::CsiIgnore => { 0x00...0x17 => Action::Execute, 0x19 => Action::Execute, 0x1c...0x1f => Action::Execute, 0x20...0x3f => Action::Ignore, 0x7f => Action::Ignore, 0x40...0x7e => State::Ground, }, State::CsiParam => { 0x00...0x17 => Action::Execute, 0x19 => Action::Execute, 0x1c...0x1f => Action::Execute, 0x30...0x39 => Action::Param, 0x3b => Action::Param, 0x7f => Action::Ignore, 0x3a => State::CsiIgnore, 0x3c...0x3f => State::CsiIgnore, 0x20...0x2f => (Action::Collect, State::CsiIntermediate), 0x40...0x7e => (Action::CsiDispatch, State::Ground) }, State::CsiIntermediate => { 0x00...0x17 => Action::Execute, 0x19 => Action::Execute, 0x1c...0x1f => Action::Execute, 0x20...0x2f => Action::Collect, 0x7f => Action::Ignore, 0x30...0x3f => State::CsiIgnore, 0x40...0x7e => (Action::CsiDispatch, State::Ground), }, State::DcsEntry => { 0x00...0x17 => Action::Ignore, 0x19 => Action::Ignore, 0x1c...0x1f => Action::Ignore, 0x7f => Action::Ignore, 0x3a => State::DcsIgnore, 0x20...0x2f => (Action::Collect, State::DcsIntermediate), 0x30...0x39 => (Action::Param, State::DcsParam), 0x3b => (Action::Param, State::DcsParam), 0x3c...0x3f => (Action::Collect, State::DcsParam), 0x40...0x7e => State::DcsPassthrough }, State::DcsIntermediate => { 0x00...0x17 => Action::Ignore, 0x19 => Action::Ignore, 0x1c...0x1f => Action::Ignore, 0x20...0x2f => Action::Collect, 0x7f => Action::Ignore, 0x30...0x3f => State::DcsIgnore, 0x40...0x7e => State::DcsPassthrough }, State::DcsIgnore => { 0x00...0x17 => Action::Ignore, 0x19 => Action::Ignore, 0x1c...0x1f => Action::Ignore, 0x20...0x7f => Action::Ignore, 0x9c => State::Ground }, State::DcsParam => { 0x00...0x17 => Action::Ignore, 0x19 => Action::Ignore, 0x1c...0x1f => Action::Ignore, 0x30...0x39 => Action::Param, 0x3b => Action::Param, 0x7f => Action::Ignore, 0x3a => State::DcsIgnore, 0x3c...0x3f => State::DcsIgnore, 0x20...0x2f => (Action::Collect, State::DcsIntermediate), 0x40...0x7e => State::DcsPassthrough }, State::DcsPassthrough => { 0x00...0x17 => Action::Put, 0x19 => Action::Put, 0x1c...0x1f => Action::Put, 0x20...0x7e => Action::Put, 0x7f => Action::Ignore, 0x9c => State::Ground, }, State::SosPmApcString => { 0x00...0x17 => Action::Ignore, 0x19 => Action::Ignore, 0x1c...0x1f => Action::Ignore, 0x20...0x7f => Action::Ignore, 0x9c => State::Ground }, State::OscString => { 0x00...0x06 => Action::Ignore, 0x07 => State::Ground, 0x08...0x17 => Action::Ignore, 0x19 => Action::Ignore, 0x1c...0x1f => Action::Ignore, 0x20...0xff => Action::OscPut, } }; pub static ENTRY_ACTIONS: &'static [Action] = &[ Action::None, // State::Anywhere Action::Clear, // State::CsiEntry Action::None, // State::CsiIgnore Action::None, // State::CsiIntermediate Action::None, // State::CsiParam Action::Clear, // State::DcsEntry Action::None, // State::DcsIgnore Action::None, // State::DcsIntermediate Action::None, // State::DcsParam Action::Hook, // State::DcsPassthrough Action::Clear, // State::Escape Action::None, // State::EscapeIntermediate Action::None, // State::Ground Action::OscStart, // State::OscString Action::None, // State::SosPmApcString Action::None, // State::Utf8 ]; pub static EXIT_ACTIONS: &'static [Action] = &[ Action::None, // State::Anywhere Action::None, // State::CsiEntry Action::None, // State::CsiIgnore Action::None, // State::CsiIntermediate Action::None, // State::CsiParam Action::None, // State::DcsEntry Action::None, // State::DcsIgnore Action::None, // State::DcsIntermediate Action::None, // State::DcsParam Action::Unhook, // State::DcsPassthrough Action::None, // State::Escape Action::None, // State::EscapeIntermediate Action::None, // State::Ground Action::OscEnd, // State::OscString Action::None, // State::SosPmApcString Action::None, // State::Utf8 ];