1INIT 2UTF8 1 3WANTSTATE s 4 5!Linefeed 6PUSH "\n"x24 7 ?cursor = 24,0 8PUSH "\n" 9 scrollrect 0..25,0..80 => +1,+0 10 ?cursor = 24,0 11 12RESET 13 14!Index 15PUSH "\e[25H" 16PUSH "\eD" 17 scrollrect 0..25,0..80 => +1,+0 18 19RESET 20 21!Reverse Index 22PUSH "\eM" 23 scrollrect 0..25,0..80 => -1,+0 24 25RESET 26 27!Linefeed in DECSTBM 28PUSH "\e[1;10r" 29 ?cursor = 0,0 30PUSH "\n"x9 31 ?cursor = 9,0 32PUSH "\n" 33 scrollrect 0..10,0..80 => +1,+0 34 ?cursor = 9,0 35 36!Linefeed outside DECSTBM 37PUSH "\e[20H" 38 ?cursor = 19,0 39PUSH "\n" 40 ?cursor = 20,0 41 42!Index in DECSTBM 43PUSH "\e[9;10r" 44PUSH "\e[10H" 45PUSH "\eM" 46 ?cursor = 8,0 47PUSH "\eM" 48 scrollrect 8..10,0..80 => -1,+0 49 50!Reverse Index in DECSTBM 51PUSH "\e[25H" 52 ?cursor = 24,0 53PUSH "\n" 54 # no scrollrect 55 ?cursor = 24,0 56 57!Linefeed in DECSTBM+DECSLRM 58PUSH "\e[?69h" 59PUSH "\e[3;10r\e[10;40s" 60PUSH "\e[10;10H\n" 61 scrollrect 2..10,9..40 => +1,+0 62 63!IND/RI in DECSTBM+DECSLRM 64PUSH "\eD" 65 scrollrect 2..10,9..40 => +1,+0 66PUSH "\e[3;10H\eM" 67 scrollrect 2..10,9..40 => -1,+0 68 69!DECRQSS on DECSTBM 70PUSH "\eP\$qr\e\\" 71 output "\eP1\$r3;10r\e\\" 72 73!DECRQSS on DECSLRM 74PUSH "\eP\$qs\e\\" 75 output "\eP1\$r10;40s\e\\" 76 77!Setting invalid DECSLRM with !DECVSSM is still rejected 78PUSH "\e[?69l\e[;0s\e[?69h" 79 80RESET 81 82!Scroll Down 83PUSH "\e[S" 84 scrollrect 0..25,0..80 => +1,+0 85 ?cursor = 0,0 86PUSH "\e[2S" 87 scrollrect 0..25,0..80 => +2,+0 88 ?cursor = 0,0 89PUSH "\e[100S" 90 scrollrect 0..25,0..80 => +25,+0 91 92!Scroll Up 93PUSH "\e[T" 94 scrollrect 0..25,0..80 => -1,+0 95 ?cursor = 0,0 96PUSH "\e[2T" 97 scrollrect 0..25,0..80 => -2,+0 98 ?cursor = 0,0 99PUSH "\e[100T" 100 scrollrect 0..25,0..80 => -25,+0 101 102!SD/SU in DECSTBM 103PUSH "\e[5;20r" 104PUSH "\e[S" 105 scrollrect 4..20,0..80 => +1,+0 106PUSH "\e[T" 107 scrollrect 4..20,0..80 => -1,+0 108 109RESET 110 111!SD/SU in DECSTBM+DECSLRM 112PUSH "\e[?69h" 113PUSH "\e[3;10r\e[10;40s" 114 ?cursor = 0,0 115PUSH "\e[3;10H" 116 ?cursor = 2,9 117PUSH "\e[S" 118 scrollrect 2..10,9..40 => +1,+0 119PUSH "\e[?69l" 120PUSH "\e[S" 121 scrollrect 2..10,0..80 => +1,+0 122 123!Invalid boundaries 124RESET 125 126PUSH "\e[100;105r\eD" 127PUSH "\e[5;2r\eD" 128 129RESET 130WANTSTATE -s+me 131 132!Scroll Down move+erase emulation 133PUSH "\e[S" 134 moverect 1..25,0..80 -> 0..24,0..80 135 erase 24..25,0..80 136 ?cursor = 0,0 137PUSH "\e[2S" 138 moverect 2..25,0..80 -> 0..23,0..80 139 erase 23..25,0..80 140 ?cursor = 0,0 141 142!Scroll Up move+erase emulation 143PUSH "\e[T" 144 moverect 0..24,0..80 -> 1..25,0..80 145 erase 0..1,0..80 146 ?cursor = 0,0 147PUSH "\e[2T" 148 moverect 0..23,0..80 -> 2..25,0..80 149 erase 0..2,0..80 150 ?cursor = 0,0 151 152!DECSTBM resets cursor position 153PUSH "\e[5;5H" 154 ?cursor = 4,4 155PUSH "\e[r" 156 ?cursor = 0,0 157