1INIT 2WANTSCREEN aDb 3 4!Putglyph 5RESET 6 damage 0..25,0..80 7PUSH "123" 8 damage 0..1,0..1 = 0<31> 9 damage 0..1,1..2 = 0<32> 10 damage 0..1,2..3 = 0<33> 11 12!Erase 13PUSH "\e[H" 14PUSH "\e[3X" 15 damage 0..1,0..3 16 17!Scroll damages entire line in two chunks 18PUSH "\e[H\e[5@" 19 damage 0..1,5..80 20 damage 0..1,0..5 21 22!Scroll down damages entire screen in two chunks 23PUSH "\e[T" 24 damage 1..25,0..80 25 damage 0..1,0..80 26 27!Altscreen damages entire area 28PUSH "\e[?1049h" 29 damage 0..25,0..80 30PUSH "\e[?1049l" 31 damage 0..25,0..80 32 33WANTSCREEN m 34 35!Scroll invokes moverect but not damage 36PUSH "\e[5@" 37 moverect 0..1,0..75 -> 0..1,5..80 38 damage 0..1,0..5 39 40WANTSCREEN -m 41 42!Merge to cells 43RESET 44 damage 0..25,0..80 45DAMAGEMERGE CELL 46 47PUSH "A" 48 damage 0..1,0..1 = 0<41> 49PUSH "B" 50 damage 0..1,1..2 = 0<42> 51PUSH "C" 52 damage 0..1,2..3 = 0<43> 53 54!Merge entire rows 55RESET 56 damage 0..25,0..80 57DAMAGEMERGE ROW 58 59PUSH "ABCDE\r\nEFGH" 60 damage 0..1,0..5 = 0<41 42 43 44 45> 61DAMAGEFLUSH 62 damage 1..2,0..4 = 1<45 46 47 48> 63PUSH "\e[3;6r\e[6H\eD" 64 damage 2..5,0..80 65DAMAGEFLUSH 66 damage 5..6,0..80 67 68!Merge entire screen 69RESET 70 damage 0..25,0..80 71DAMAGEMERGE SCREEN 72 73PUSH "ABCDE\r\nEFGH" 74DAMAGEFLUSH 75 damage 0..2,0..5 = 0<41 42 43 44 45> 1<45 46 47 48> 76PUSH "\e[3;6r\e[6H\eD" 77DAMAGEFLUSH 78 damage 2..6,0..80 79 80!Merge entire screen with moverect 81WANTSCREEN m 82 83RESET 84 damage 0..25,0..80 85DAMAGEMERGE SCREEN 86 87PUSH "ABCDE\r\nEFGH" 88PUSH "\e[3;6r\e[6H\eD" 89 damage 0..2,0..5 = 0<41 42 43 44 45> 1<45 46 47 48> 90 moverect 3..6,0..80 -> 2..5,0..80 91DAMAGEFLUSH 92 damage 5..6,0..80 93 94!Merge scroll 95RESET 96 damage 0..25,0..80 97DAMAGEMERGE SCROLL 98 99PUSH "\e[H1\r\n2\r\n3" 100PUSH "\e[25H\n\n\n" 101 sb_pushline 80 = 31 102 sb_pushline 80 = 32 103 sb_pushline 80 = 33 104DAMAGEFLUSH 105 moverect 3..25,0..80 -> 0..22,0..80 106 damage 0..25,0..80 107 108!Merge scroll with damage 109PUSH "\e[25H" 110PUSH "ABCDE\r\nEFGH\r\n" 111 sb_pushline 80 = 112 sb_pushline 80 = 113DAMAGEFLUSH 114 moverect 2..25,0..80 -> 0..23,0..80 115 damage 22..25,0..80 = 22<41 42 43 44 45> 23<45 46 47 48> 116 117!Merge scroll with damage past region 118PUSH "\e[3;6r\e[6H1\r\n2\r\n3\r\n4\r\n5" 119DAMAGEFLUSH 120 damage 2..6,0..80 = 2<32> 3<33> 4<34> 5<35> 121 122!Damage entirely outside scroll region 123PUSH "\e[HABC\e[3;6r\e[6H\r\n6" 124 damage 0..1,0..3 = 0<41 42 43> 125DAMAGEFLUSH 126 moverect 3..6,0..80 -> 2..5,0..80 127 damage 5..6,0..80 = 5<36> 128 129!Damage overlapping scroll region 130PUSH "\e[H\e[2J" 131DAMAGEFLUSH 132 damage 0..25,0..80 133 134PUSH "\e[HABCD\r\nEFGH\r\nIJKL\e[2;5r\e[5H\r\nMNOP" 135DAMAGEFLUSH 136 moverect 2..5,0..80 -> 1..4,0..80 137 damage 0..5,0..80 = 0<41 42 43 44> 1<49 4A 4B 4C> 138 ## TODO: is this right? 139 140!Merge scroll*2 with damage 141RESET 142 damage 0..25,0..80 143DAMAGEMERGE SCROLL 144 145PUSH "\e[25H\r\nABCDE\b\b\b\e[2P\r\n" 146 sb_pushline 80 = 147 moverect 1..25,0..80 -> 0..24,0..80 148 damage 24..25,0..80 = 24<41 42 43 44 45> 149 moverect 24..25,4..80 -> 24..25,2..78 150 damage 24..25,78..80 151 sb_pushline 80 = 152DAMAGEFLUSH 153 moverect 1..25,0..80 -> 0..24,0..80 154 damage 24..25,0..80 155 ?screen_chars 23,0,24,5 = "ABE" 156