1 /// This is the state change table. It's indexed first by current state and then by the next 2 /// character in the pty stream. 3 use crate::definitions::{pack, Action, State}; 4 5 use vte_generate_state_changes::generate_state_changes; 6 7 // Generate state changes at compile-time 8 pub static STATE_CHANGES: [[u8; 256]; 16] = state_changes(); 9 generate_state_changes!(state_changes, { 10 Anywhere { 11 0x18 => (Ground, Execute), 12 0x1a => (Ground, Execute), 13 0x1b => (Escape, None), 14 }, 15 16 Ground { 17 0x00..=0x17 => (Anywhere, Execute), 18 0x19 => (Anywhere, Execute), 19 0x1c..=0x1f => (Anywhere, Execute), 20 0x20..=0x7f => (Anywhere, Print), 21 0x80..=0x8f => (Anywhere, Execute), 22 0x91..=0x9a => (Anywhere, Execute), 23 0x9c => (Anywhere, Execute), 24 // Beginning of UTF-8 2 byte sequence 25 0xc2..=0xdf => (Utf8, BeginUtf8), 26 // Beginning of UTF-8 3 byte sequence 27 0xe0..=0xef => (Utf8, BeginUtf8), 28 // Beginning of UTF-8 4 byte sequence 29 0xf0..=0xf4 => (Utf8, BeginUtf8), 30 }, 31 32 Escape { 33 0x00..=0x17 => (Anywhere, Execute), 34 0x19 => (Anywhere, Execute), 35 0x1c..=0x1f => (Anywhere, Execute), 36 0x7f => (Anywhere, Ignore), 37 0x20..=0x2f => (EscapeIntermediate, Collect), 38 0x30..=0x4f => (Ground, EscDispatch), 39 0x51..=0x57 => (Ground, EscDispatch), 40 0x59 => (Ground, EscDispatch), 41 0x5a => (Ground, EscDispatch), 42 0x5c => (Ground, EscDispatch), 43 0x60..=0x7e => (Ground, EscDispatch), 44 0x5b => (CsiEntry, None), 45 0x5d => (OscString, None), 46 0x50 => (DcsEntry, None), 47 0x58 => (SosPmApcString, None), 48 0x5e => (SosPmApcString, None), 49 0x5f => (SosPmApcString, None), 50 }, 51 52 EscapeIntermediate { 53 0x00..=0x17 => (Anywhere, Execute), 54 0x19 => (Anywhere, Execute), 55 0x1c..=0x1f => (Anywhere, Execute), 56 0x20..=0x2f => (Anywhere, Collect), 57 0x7f => (Anywhere, Ignore), 58 0x30..=0x7e => (Ground, EscDispatch), 59 }, 60 61 CsiEntry { 62 0x00..=0x17 => (Anywhere, Execute), 63 0x19 => (Anywhere, Execute), 64 0x1c..=0x1f => (Anywhere, Execute), 65 0x7f => (Anywhere, Ignore), 66 0x20..=0x2f => (CsiIntermediate, Collect), 67 0x30..=0x39 => (CsiParam, Param), 68 0x3a..=0x3b => (CsiParam, Param), 69 0x3c..=0x3f => (CsiParam, Collect), 70 0x40..=0x7e => (Ground, CsiDispatch), 71 }, 72 73 CsiIgnore { 74 0x00..=0x17 => (Anywhere, Execute), 75 0x19 => (Anywhere, Execute), 76 0x1c..=0x1f => (Anywhere, Execute), 77 0x20..=0x3f => (Anywhere, Ignore), 78 0x7f => (Anywhere, Ignore), 79 0x40..=0x7e => (Ground, None), 80 }, 81 82 CsiParam { 83 0x00..=0x17 => (Anywhere, Execute), 84 0x19 => (Anywhere, Execute), 85 0x1c..=0x1f => (Anywhere, Execute), 86 0x30..=0x39 => (Anywhere, Param), 87 0x3a..=0x3b => (Anywhere, Param), 88 0x7f => (Anywhere, Ignore), 89 0x3c..=0x3f => (CsiIgnore, None), 90 0x20..=0x2f => (CsiIntermediate, Collect), 91 0x40..=0x7e => (Ground, CsiDispatch), 92 }, 93 94 CsiIntermediate { 95 0x00..=0x17 => (Anywhere, Execute), 96 0x19 => (Anywhere, Execute), 97 0x1c..=0x1f => (Anywhere, Execute), 98 0x20..=0x2f => (Anywhere, Collect), 99 0x7f => (Anywhere, Ignore), 100 0x30..=0x3f => (CsiIgnore, None), 101 0x40..=0x7e => (Ground, CsiDispatch), 102 }, 103 104 DcsEntry { 105 0x00..=0x17 => (Anywhere, Ignore), 106 0x19 => (Anywhere, Ignore), 107 0x1c..=0x1f => (Anywhere, Ignore), 108 0x7f => (Anywhere, Ignore), 109 0x20..=0x2f => (DcsIntermediate, Collect), 110 0x30..=0x39 => (DcsParam, Param), 111 0x3a..=0x3b => (DcsParam, Param), 112 0x3c..=0x3f => (DcsParam, Collect), 113 0x40..=0x7e => (DcsPassthrough, None), 114 }, 115 116 DcsIntermediate { 117 0x00..=0x17 => (Anywhere, Ignore), 118 0x19 => (Anywhere, Ignore), 119 0x1c..=0x1f => (Anywhere, Ignore), 120 0x20..=0x2f => (Anywhere, Collect), 121 0x7f => (Anywhere, Ignore), 122 0x30..=0x3f => (DcsIgnore, None), 123 0x40..=0x7e => (DcsPassthrough, None), 124 }, 125 126 DcsIgnore { 127 0x00..=0x17 => (Anywhere, Ignore), 128 0x19 => (Anywhere, Ignore), 129 0x1c..=0x1f => (Anywhere, Ignore), 130 0x20..=0x7f => (Anywhere, Ignore), 131 0x9c => (Ground, None), 132 }, 133 134 DcsParam { 135 0x00..=0x17 => (Anywhere, Ignore), 136 0x19 => (Anywhere, Ignore), 137 0x1c..=0x1f => (Anywhere, Ignore), 138 0x30..=0x39 => (Anywhere, Param), 139 0x3a..=0x3b => (Anywhere, Param), 140 0x7f => (Anywhere, Ignore), 141 0x3c..=0x3f => (DcsIgnore, None), 142 0x20..=0x2f => (DcsIntermediate, Collect), 143 0x40..=0x7e => (DcsPassthrough, None), 144 }, 145 146 DcsPassthrough { 147 0x00..=0x17 => (Anywhere, Put), 148 0x19 => (Anywhere, Put), 149 0x1c..=0x1f => (Anywhere, Put), 150 0x20..=0x7e => (Anywhere, Put), 151 0x7f => (Anywhere, Ignore), 152 0x9c => (Ground, None), 153 }, 154 155 SosPmApcString { 156 0x00..=0x17 => (Anywhere, Ignore), 157 0x19 => (Anywhere, Ignore), 158 0x1c..=0x1f => (Anywhere, Ignore), 159 0x20..=0x7f => (Anywhere, Ignore), 160 0x9c => (Ground, None), 161 }, 162 163 OscString { 164 0x00..=0x06 => (Anywhere, Ignore), 165 0x07 => (Ground, None), 166 0x08..=0x17 => (Anywhere, Ignore), 167 0x19 => (Anywhere, Ignore), 168 0x1c..=0x1f => (Anywhere, Ignore), 169 0x20..=0xff => (Anywhere, OscPut), 170 } 171 }); 172