1INIT 2UTF8 1 3WANTSTATE se 4 5!ICH 6RESET 7 erase 0..25,0..80 8 ?cursor = 0,0 9PUSH "ACD" 10PUSH "\e[2D" 11 ?cursor = 0,1 12PUSH "\e[@" 13 scrollrect 0..1,1..80 => +0,-1 14 ?cursor = 0,1 15PUSH "B" 16 ?cursor = 0,2 17PUSH "\e[3@" 18 scrollrect 0..1,2..80 => +0,-3 19 20!ICH with DECSLRM 21PUSH "\e[?69h" 22PUSH "\e[;50s" 23PUSH "\e[20G\e[@" 24 scrollrect 0..1,19..50 => +0,-1 25 26!ICH outside DECSLRM 27PUSH "\e[70G\e[@" 28 # nothing happens 29 30!DCH 31RESET 32 erase 0..25,0..80 33 ?cursor = 0,0 34PUSH "ABBC" 35PUSH "\e[3D" 36 ?cursor = 0,1 37PUSH "\e[P" 38 scrollrect 0..1,1..80 => +0,+1 39 ?cursor = 0,1 40PUSH "\e[3P" 41 scrollrect 0..1,1..80 => +0,+3 42 ?cursor = 0,1 43 44!DCH with DECSLRM 45PUSH "\e[?69h" 46PUSH "\e[;50s" 47PUSH "\e[20G\e[P" 48 scrollrect 0..1,19..50 => +0,+1 49 50!DCH outside DECSLRM 51PUSH "\e[70G\e[P" 52 # nothing happens 53 54!ECH 55RESET 56 erase 0..25,0..80 57 ?cursor = 0,0 58PUSH "ABC" 59PUSH "\e[2D" 60 ?cursor = 0,1 61PUSH "\e[X" 62 erase 0..1,1..2 63 ?cursor = 0,1 64PUSH "\e[3X" 65 erase 0..1,1..4 66 ?cursor = 0,1 67# ECH more columns than there are should be bounded 68PUSH "\e[100X" 69 erase 0..1,1..80 70 71!IL 72RESET 73 erase 0..25,0..80 74 ?cursor = 0,0 75PUSH "A\r\nC" 76 ?cursor = 1,1 77PUSH "\e[L" 78 scrollrect 1..25,0..80 => -1,+0 79 # TODO: ECMA-48 says we should move to line home, but neither xterm nor 80 # xfce4-terminal do this 81 ?cursor = 1,1 82PUSH "\rB" 83 ?cursor = 1,1 84PUSH "\e[3L" 85 scrollrect 1..25,0..80 => -3,+0 86 87!IL with DECSTBM 88PUSH "\e[5;15r" 89PUSH "\e[5H\e[L" 90 scrollrect 4..15,0..80 => -1,+0 91 92!IL outside DECSTBM 93PUSH "\e[20H\e[L" 94 # nothing happens 95 96!IL with DECSTBM+DECSLRM 97PUSH "\e[?69h" 98PUSH "\e[10;50s" 99PUSH "\e[5;10H\e[L" 100 scrollrect 4..15,9..50 => -1,+0 101 102!DL 103RESET 104 erase 0..25,0..80 105 ?cursor = 0,0 106PUSH "A\r\nB\r\nB\r\nC" 107 ?cursor = 3,1 108PUSH "\e[2H" 109 ?cursor = 1,0 110PUSH "\e[M" 111 scrollrect 1..25,0..80 => +1,+0 112 ?cursor = 1,0 113PUSH "\e[3M" 114 scrollrect 1..25,0..80 => +3,+0 115 ?cursor = 1,0 116 117!DL with DECSTBM 118PUSH "\e[5;15r" 119PUSH "\e[5H\e[M" 120 scrollrect 4..15,0..80 => +1,+0 121 122!DL outside DECSTBM 123PUSH "\e[20H\e[M" 124 # nothing happens 125 126!DL with DECSTBM+DECSLRM 127PUSH "\e[?69h" 128PUSH "\e[10;50s" 129PUSH "\e[5;10H\e[M" 130 scrollrect 4..15,9..50 => +1,+0 131 132!DECIC 133RESET 134 erase 0..25,0..80 135PUSH "\e[20G\e[5'}" 136 scrollrect 0..25,19..80 => +0,-5 137 138!DECIC with DECSTBM+DECSLRM 139PUSH "\e[?69h" 140PUSH "\e[4;20r\e[20;60s" 141PUSH "\e[4;20H\e[3'}" 142 scrollrect 3..20,19..60 => +0,-3 143 144!DECIC outside DECSLRM 145PUSH "\e[70G\e['}" 146 # nothing happens 147 148!DECDC 149RESET 150 erase 0..25,0..80 151PUSH "\e[20G\e[5'~" 152 scrollrect 0..25,19..80 => +0,+5 153 154!DECDC with DECSTBM+DECSLRM 155PUSH "\e[?69h" 156PUSH "\e[4;20r\e[20;60s" 157PUSH "\e[4;20H\e[3'~" 158 scrollrect 3..20,19..60 => +0,+3 159 160!DECDC outside DECSLRM 161PUSH "\e[70G\e['~" 162 # nothing happens 163 164!EL 0 165RESET 166 erase 0..25,0..80 167 ?cursor = 0,0 168PUSH "ABCDE" 169PUSH "\e[3D" 170 ?cursor = 0,2 171PUSH "\e[0K" 172 erase 0..1,2..80 173 ?cursor = 0,2 174 175!EL 1 176RESET 177 erase 0..25,0..80 178 ?cursor = 0,0 179PUSH "ABCDE" 180PUSH "\e[3D" 181 ?cursor = 0,2 182PUSH "\e[1K" 183 erase 0..1,0..3 184 ?cursor = 0,2 185 186!EL 2 187RESET 188 erase 0..25,0..80 189 ?cursor = 0,0 190PUSH "ABCDE" 191PUSH "\e[3D" 192 ?cursor = 0,2 193PUSH "\e[2K" 194 erase 0..1,0..80 195 ?cursor = 0,2 196 197!SEL 198RESET 199 erase 0..25,0..80 200 ?cursor = 0,0 201PUSH "\e[11G" 202 ?cursor = 0,10 203PUSH "\e[?0K" 204 erase 0..1,10..80 selective 205 ?cursor = 0,10 206PUSH "\e[?1K" 207 erase 0..1,0..11 selective 208 ?cursor = 0,10 209PUSH "\e[?2K" 210 erase 0..1,0..80 selective 211 ?cursor = 0,10 212 213!ED 0 214RESET 215 erase 0..25,0..80 216 ?cursor = 0,0 217PUSH "\e[2;2H" 218 ?cursor = 1,1 219PUSH "\e[0J" 220 erase 1..2,1..80 221 erase 2..25,0..80 222 ?cursor = 1,1 223 224!ED 1 225RESET 226 erase 0..25,0..80 227 ?cursor = 0,0 228PUSH "\e[2;2H" 229 ?cursor = 1,1 230PUSH "\e[1J" 231 erase 0..1,0..80 232 erase 1..2,0..2 233 ?cursor = 1,1 234 235!ED 2 236RESET 237 erase 0..25,0..80 238 ?cursor = 0,0 239PUSH "\e[2;2H" 240 ?cursor = 1,1 241PUSH "\e[2J" 242 erase 0..25,0..80 243 ?cursor = 1,1 244 245!SED 246RESET 247 erase 0..25,0..80 248PUSH "\e[5;5H" 249 ?cursor = 4,4 250PUSH "\e[?0J" 251 erase 4..5,4..80 selective 252 erase 5..25,0..80 selective 253 ?cursor = 4,4 254PUSH "\e[?1J" 255 erase 0..4,0..80 selective 256 erase 4..5,0..5 selective 257 ?cursor = 4,4 258PUSH "\e[?2J" 259 erase 0..25,0..80 selective 260 ?cursor = 4,4 261 262!DECRQSS on DECSCA 263PUSH "\e[2\"q" 264PUSH "\eP\$q\"q\e\\" 265 output "\eP1\$r2\"q\e\\" 266 267WANTSTATE -s+m 268 269!ICH move+erase emuation 270RESET 271 erase 0..25,0..80 272 ?cursor = 0,0 273PUSH "ACD" 274PUSH "\e[2D" 275 ?cursor = 0,1 276PUSH "\e[@" 277 moverect 0..1,1..79 -> 0..1,2..80 278 erase 0..1,1..2 279 ?cursor = 0,1 280PUSH "B" 281 ?cursor = 0,2 282PUSH "\e[3@" 283 moverect 0..1,2..77 -> 0..1,5..80 284 erase 0..1,2..5 285 286!DCH move+erase emulation 287RESET 288 erase 0..25,0..80 289 ?cursor = 0,0 290PUSH "ABBC" 291PUSH "\e[3D" 292 ?cursor = 0,1 293PUSH "\e[P" 294 moverect 0..1,2..80 -> 0..1,1..79 295 erase 0..1,79..80 296 ?cursor = 0,1 297PUSH "\e[3P" 298 moverect 0..1,4..80 -> 0..1,1..77 299 erase 0..1,77..80 300 ?cursor = 0,1 301