SHOW:
|
|
- or go back to the newest paste.
| 1 | false | |
| 2 | {
| |
| 3 | render = {
| |
| 4 | "local mon = peripheral.find(\"monitor\") if mon then mon.setTextScale(0.5) end", | |
| 5 | "local sx,sy = term.getSize()", | |
| 6 | "letters = {}",
| |
| 7 | "letters[1] = {",
| |
| 8 | " path = \"/S\", --path to paint file", | |
| 9 | " x = -8, --start x", | |
| 10 | " xsize = 17, --horizontal size of paint file", | |
| 11 | " xmult = 1 --multiplies the x coord", | |
| 12 | "}", | |
| 13 | "letters[2] = {",
| |
| 14 | " path = \"/o\",", | |
| 15 | " x = letters[1].x+letters[1].xsize,", | |
| 16 | " xsize = 17,", | |
| 17 | " xmult = 1", | |
| 18 | "}", | |
| 19 | "letters[3] = {",
| |
| 20 | " path = \"/n\",", | |
| 21 | " x = letters[2].x+letters[2].xsize,", | |
| 22 | " xsize = 17,", | |
| 23 | " xmult = 1", | |
| 24 | "}", | |
| 25 | "letters[4] = {",
| |
| 26 | " path = \"/a\",", | |
| 27 | " x = letters[3].x+letters[3].xsize,", | |
| 28 | " xsize = 17,", | |
| 29 | " xmult = 1", | |
| 30 | "}", | |
| 31 | "letters[5] = {",
| |
| 32 | " path = \"/r\",", | |
| 33 | " x = letters[4].x+letters[4].xsize,", | |
| 34 | " xsize = 17,", | |
| 35 | " xmult = 1", | |
| 36 | "}", | |
| 37 | "letters[6] = {",
| |
| 38 | " path = \"/X\",", | |
| 39 | " x = letters[5].x+letters[5].xsize+10,", | |
| 40 | " xsize = 33,", | |
| 41 | " xmult = 1.23", | |
| 42 | "}", | |
| 43 | "--letters[8].x = (sx/2)-(letters[8].xsize/2)", | |
| 44 | "local totalWidth = 0", | |
| 45 | "for a = 1, #letters do", | |
| 46 | " totalWidth = totalWidth + letters[a].xsize", | |
| 47 | " if a > 1 then", | |
| 48 | " totalWidth = totalWidth + letters[a].x-letters[a-1].x", | |
| 49 | " end", | |
| 50 | "end", | |
| 51 | "", | |
| 52 | "clearLines = function(start,stop)", | |
| 53 | " local cx,cy = term.getCursorPos()", | |
| 54 | " for y = start,stop do", | |
| 55 | " term.setCursorPos(1,y)", | |
| 56 | " term.clearLine()", | |
| 57 | " end", | |
| 58 | " term.setCursorPos(cx,cy)", | |
| 59 | "end", | |
| 60 | "p = {}",
| |
| 61 | "l = {}",
| |
| 62 | "for a = 1, #letters do", | |
| 63 | " p[a] = paintutils.loadImage(letters[a].path)", | |
| 64 | " l[a] = letters[a]", | |
| 65 | "end", | |
| 66 | "", | |
| 67 | "_G.render = function(x,spacing,reverse)", | |
| 68 | " term.setBackgroundColor(colors.black)", | |
| 69 | " clearLines(1,35)", | |
| 70 | " for a = reverse and #p or 1, reverse and 1 or #p, reverse and -1 or 1 do", | |
| 71 | " local drawX = (x+l[a].x)-((spacing*l[a].xmult)*(a-(#letters/2)))", | |
| 72 | " if a == 8 then --draw \"X\"", | |
| 73 | "-- drawX = 1", | |
| 74 | " end", | |
| 75 | " paintutils.drawImage(p[a],drawX,l[a].y or 2)", | |
| 76 | " end", | |
| 77 | "end", | |
| 78 | "--render(1,1)", | |
| 79 | }, | |
| 80 | o = {
| |
| 81 | "", | |
| 82 | "", | |
| 83 | " 000000000000000", | |
| 84 | " 077777777777770", | |
| 85 | " 078888888888880", | |
| 86 | " 078800000007880", | |
| 87 | " 07880 07880", | |
| 88 | " 07880 07880", | |
| 89 | " 07880 07880", | |
| 90 | " 07880 07880", | |
| 91 | " 07880 07880", | |
| 92 | " 07880 07880", | |
| 93 | " 07880 07880", | |
| 94 | " 07880 07880", | |
| 95 | " 078800000007880", | |
| 96 | " 078877777777880", | |
| 97 | " 078888888888880", | |
| 98 | " 000000000000000", | |
| 99 | }, | |
| 100 | S = {
| |
| 101 | "", | |
| 102 | "", | |
| 103 | " 000000000000000", | |
| 104 | " 077777777777770", | |
| 105 | " 078888888888880", | |
| 106 | " 078800000008880", | |
| 107 | " 07880 00000", | |
| 108 | " 07880 ", | |
| 109 | " 078800000000000", | |
| 110 | " 078877777777770", | |
| 111 | " 078888888888880", | |
| 112 | " 000000000007880", | |
| 113 | " 07880", | |
| 114 | " 00000 07880", | |
| 115 | " 077700000007880", | |
| 116 | " 078877777777880", | |
| 117 | " 078888888888880", | |
| 118 | " 000000000000000", | |
| 119 | }, | |
| 120 | n = {
| |
| 121 | "", | |
| 122 | "", | |
| 123 | " 000000000 00000", | |
| 124 | " 077777770 07770", | |
| 125 | " 078888880 07880", | |
| 126 | " 078888880 07880", | |
| 127 | " 078800070 07880", | |
| 128 | " 07880 070 07880", | |
| 129 | " 07880 070 07880", | |
| 130 | " 07880 070 07880", | |
| 131 | " 07880 070 07880", | |
| 132 | " 07880 070 07880", | |
| 133 | " 07880 070 07880", | |
| 134 | " 07880 070007880", | |
| 135 | " 07880 078777880", | |
| 136 | " 07880 078888880", | |
| 137 | " 07880 078888880", | |
| 138 | " 00000 000000000", | |
| 139 | }, | |
| 140 | a = {
| |
| 141 | "", | |
| 142 | "", | |
| 143 | " 000000000000000", | |
| 144 | " 077777777777770", | |
| 145 | " 078888888888880", | |
| 146 | " 078800000007880", | |
| 147 | " 07880 07880", | |
| 148 | " 07880 07880", | |
| 149 | " 078800000007880", | |
| 150 | " 078877777777880", | |
| 151 | " 078888888888880", | |
| 152 | " 078800000007880", | |
| 153 | " 07880 07880", | |
| 154 | " 07880 07880", | |
| 155 | " 07880 07880", | |
| 156 | " 07880 07880", | |
| 157 | " 07880 07880", | |
| 158 | " 00000 00000", | |
| 159 | }, | |
| 160 | sonarx = {
| |
| 161 | "{{{m=1,x=10,t=128,c=\" \",b=1,y=3},{m=1,x=11,t=128,c=\" \",b=1,y=3},{m=1,x=12,t=128,c=\" \",b=1,y=3},{m=1,x=13,t=128,c=\" \",b=1,y=3},{m=1,x=14,t=128,c=\" \",b=1,y=3},{m=1,x=15,t=128,c=\" \",b=1,y=3},{m=1,x=16,t=128,c=\" \",b=1,y=3},{m=1,x=17,t=128,c=\" \",b=1,y=3},{m=1,x=18,t=128,c=\" \",b=1,y=3},{m=1,x=19,t=128,c=\" \",b=1,y=3},{m=1,x=20,t=128,c=\" \",b=1,y=3},{m=1,x=21,t=128,c=\" \",b=1,y=3},{m=1,x=22,t=128,c=\" \",b=1,y=3},{m=1,x=23,t=128,c=\" \",b=1,y=3},{m=1,x=24,t=128,c=\" \",b=1,y=3},{m=1,x=10,t=128,c=\" \",b=1,y=4},{m=1,x=11,t=128,c=\" \",b=128,y=4},{m=1,x=12,t=128,c=\" \",b=128,y=4},{m=1,x=13,t=128,c=\" \",b=128,y=4},{m=1,x=14,t=128,c=\" \",b=128,y=4},{m=1,x=15,t=128,c=\" \",b=128,y=4},{m=1,x=16,t=128,c=\" \",b=128,y=4},{m=1,x=17,t=128,c=\" \",b=128,y=4},{m=1,x=18,t=128,c=\" \",b=128,y=4},{m=1,x=19,t=128,c=\" \",b=128,y=4},{m=1,x=20,t=128,c=\" \",b=128,y=4},{m=1,x=21,t=128,c=\" \",b=128,y=4},{m=1,x=22,t=128,c=\" \",b=128,y=4},{m=1,x=23,t=128,c=\" \",b=128,y=4},{m=1,x=24,t=128,c=\" \",b=1,y=4},{m=1,x=10,t=128,c=\" \",b=1,y=5},{m=1,x=11,t=128,c=\" \",b=128,y=5},{m=1,x=12,t=128,c=\" \",b=256,y=5},{m=1,x=13,t=128,c=\" \",b=256,y=5},{m=1,x=14,t=128,c=\" \",b=256,y=5},{m=1,x=15,t=128,c=\" \",b=256,y=5},{m=1,x=16,t=128,c=\" \",b=256,y=5},{m=1,x=17,t=128,c=\" \",b=256,y=5},{m=1,x=18,t=128,c=\" \",b=256,y=5},{m=1,x=19,t=128,c=\" \",b=256,y=5},{m=1,x=20,t=128,c=\" \",b=256,y=5},{m=1,x=21,t=128,c=\" \",b=256,y=5},{m=1,x=22,t=128,c=\" \",b=256,y=5},{m=1,x=23,t=128,c=\" \",b=256,y=5},{m=1,x=24,t=128,c=\" \",b=1,y=5},{m=1,x=10,t=128,c=\" \",b=1,y=6},{m=1,x=11,t=128,c=\" \",b=128,y=6},{m=1,x=12,t=128,c=\" \",b=256,y=6},{m=1,x=13,t=128,c=\" \",b=256,y=6},{m=1,x=14,t=128,c=\" \",b=1,y=6},{m=1,x=15,t=128,c=\" \",b=1,y=6},{m=1,x=16,t=128,c=\" \",b=1,y=6},{m=1,x=17,t=128,c=\" \",b=1,y=6},{m=1,x=18,t=128,c=\" \",b=1,y=6},{m=1,x=19,t=128,c=\" \",b=1,y=6},{m=1,x=20,t=128,c=\" \",b=1,y=6},{m=1,x=21,t=128,c=\" \",b=256,y=6},{m=1,x=22,t=128,c=\" \",b=256,y=6},{m=1,x=23,t=128,c=\" \",b=256,y=6},{m=1,x=24,t=128,c=\" \",b=1,y=6},{m=1,x=10,t=128,c=\" \",b=1,y=7},{m=1,x=11,t=128,c=\" \",b=128,y=7},{m=1,x=12,t=128,c=\" \",b=256,y=7},{m=1,x=13,t=128,c=\" \",b=256,y=7},{m=1,x=14,t=128,c=\" \",b=1,y=7},{m=1,x=20,t=128,c=\" \",b=1,y=7},{m=1,x=21,t=128,c=\" \",b=1,y=7},{m=1,x=22,t=128,c=\" \",b=1,y=7},{m=1,x=23,t=128,c=\" \",b=1,y=7},{m=1,x=24,t=128,c=\" \",b=1,y=7},{m=1,x=10,t=128,c=\" \",b=1,y=8},{m=1,x=11,t=128,c=\" \",b=128,y=8},{m=1,x=12,t=128,c=\" \",b=256,y=8},{m=1,x=13,t=128,c=\" \",b=256,y=8},{m=1,x=14,t=128,c=\" \",b=1,y=8},{m=1,x=10,t=128,c=\" \",b=1,y=9},{m=1,x=11,t=128,c=\" \",b=128,y=9},{m=1,x=12,t=128,c=\" \",b=256,y=9},{m=1,x=13,t=128,c=\" \",b=256,y=9},{m=1,x=14,t=128,c=\" \",b=1,y=9},{m=1,x=15,t=128,c=\" \",b=1,y=9},{m=1,x=16,t=128,c=\" \",b=1,y=9},{m=1,x=17,t=128,c=\" \",b=1,y=9},{m=1,x=18,t=128,c=\" \",b=1,y=9},{m=1,x=19,t=128,c=\" \",b=1,y=9},{m=1,x=20,t=128,c=\" \",b=1,y=9},{m=1,x=21,t=128,c=\" \",b=1,y=9},{m=1,x=22,t=128,c=\" \",b=1,y=9},{m=1,x=23,t=128,c=\" \",b=1,y=9},{m=1,x=24,t=128,c=\" \",b=1,y=9},{m=1,x=10,t=128,c=\" \",b=1,y=10},{m=1,x=11,t=128,c=\" \",b=128,y=10},{m=1,x=12,t=128,c=\" \",b=256,y=10},{m=1,x=13,t=128,c=\" \",b=256,y=10},{m=1,x=14,t=128,c=\" \",b=128,y=10},{m=1,x=15,t=128,c=\" \",b=128,y=10},{m=1,x=16,t=128,c=\" \",b=128,y=10},{m=1,x=17,t=128,c=\" \",b=128,y=10},{m=1,x=18,t=128,c=\" \",b=128,y=10},{m=1,x=19,t=128,c=\" \",b=128,y=10},{m=1,x=20,t=128,c=\" \",b=128,y=10},{m=1,x=21,t=128,c=\" \",b=128,y=10},{m=1,x=22,t=128,c=\" \",b=128,y=10},{m=1,x=23,t=128,c=\" \",b=128,y=10},{m=1,x=24,t=128,c=\" \",b=1,y=10},{m=1,x=10,t=128,c=\" \",b=1,y=11},{m=1,x=11,t=128,c=\" \",b=128,y=11},{m=1,x=12,t=128,c=\" \",b=256,y=11},{m=1,x=13,t=128,c=\" \",b=256,y=11},{m=1,x=14,t=128,c=\" \",b=256,y=11},{m=1,x=15,t=128,c=\" \",b=256,y=11},{m=1,x=16,t=128,c=\" \",b=256,y=11},{m=1,x=17,t=128,c=\" \",b=256,y=11},{m=1,x=18,t=128,c=\" \",b=256,y=11},{m=1,x=19,t=128,c=\" \",b=256,y=11},{m=1,x=20,t=128,c=\" \",b=256,y=11},{m=1,x=21,t=128,c=\" \",b=256,y=11},{m=1,x=22,t=128,c=\" \",b=256,y=11},{m=1,x=23,t=128,c=\" \",b=256,y=11},{m=1,x=24,t=128,c=\" \",b=1,y=11},{m=1,x=10,t=128,c=\" \",b=1,y=12},{m=1,x=11,t=128,c=\" \",b=1,y=12},{m=1,x=12,t=128,c=\" \",b=1,y=12},{m=1,x=13,t=128,c=\" \",b=1,y=12},{m=1,x=14,t=128,c=\" \",b=1,y=12},{m=1,x=15,t=128,c=\" \",b=1,y=12},{m=1,x=16,t=128,c=\" \",b=1,y=12},{m=1,x=17,t=128,c=\" \",b=1,y=12},{m=1,x=18,t=128,c=\" \",b=1,y=12},{m=1,x=19,t=128,c=\" \",b=1,y=12},{m=1,x=20,t=128,c=\" \",b=1,y=12},{m=1,x=21,t=128,c=\" \",b=128,y=12},{m=1,x=22,t=128,c=\" \",b=256,y=12},{m=1,x=23,t=128,c=\" \",b=256,y=12},{m=1,x=24,t=128,c=\" \",b=1,y=12},{m=1,x=20,t=128,c=\" \",b=1,y=13},{m=1,x=21,t=128,c=\" \",b=128,y=13},{m=1,x=22,t=128,c=\" \",b=256,y=13},{m=1,x=23,t=128,c=\" \",b=256,y=13},{m=1,x=24,t=128,c=\" \",b=1,y=13},{m=1,x=10,t=128,c=\" \",b=1,y=14},{m=1,x=11,t=128,c=\" \",b=1,y=14},{m=1,x=12,t=128,c=\" \",b=1,y=14},{m=1,x=13,t=128,c=\" \",b=1,y=14},{m=1,x=14,t=128,c=\" \",b=1,y=14},{m=1,x=20,t=128,c=\" \",b=1,y=14},{m=1,x=21,t=128,c=\" \",b=128,y=14},{m=1,x=22,t=128,c=\" \",b=256,y=14},{m=1,x=23,t=128,c=\" \",b=256,y=14},{m=1,x=24,t=128,c=\" \",b=1,y=14},{m=1,x=10,t=128,c=\" \",b=1,y=15},{m=1,x=11,t=128,c=\" \",b=128,y=15},{m=1,x=12,t=128,c=\" \",b=128,y=15},{m=1,x=13,t=128,c=\" \",b=128,y=15},{m=1,x=14,t=128,c=\" \",b=1,y=15},{m=1,x=15,t=128,c=\" \",b=1,y=15},{m=1,x=16,t=128,c=\" \",b=1,y=15},{m=1,x=17,t=128,c=\" \",b=1,y=15},{m=1,x=18,t=128,c=\" \",b=1,y=15},{m=1,x=19,t=128,c=\" \",b=1,y=15},{m=1,x=20,t=128,c=\" \",b=1,y=15},{m=1,x=21,t=128,c=\" \",b=128,y=15},{m=1,x=22,t=128,c=\" \",b=256,y=15},{m=1,x=23,t=128,c=\" \",b=256,y=15},{m=1,x=24,t=128,c=\" \",b=1,y=15},{m=1,x=10,t=128,c=\" \",b=1,y=16},{m=1,x=11,t=128,c=\" \",b=128,y=16},{m=1,x=12,t=128,c=\" \",b=256,y=16},{m=1,x=13,t=128,c=\" \",b=256,y=16},{m=1,x=14,t=128,c=\" \",b=128,y=16},{m=1,x=15,t=128,c=\" \",b=128,y=16},{m=1,x=16,t=128,c=\" \",b=128,y=16},{m=1,x=17,t=128,c=\" \",b=128,y=16},{m=1,x=18,t=128,c=\" \",b=128,y=16},{m=1,x=19,t=128,c=\" \",b=128,y=16},{m=1,x=20,t=128,c=\" \",b=128,y=16},{m=1,x=21,t=128,c=\" \",b=128,y=16},{m=1,x=22,t=128,c=\" \",b=256,y=16},{m=1,x=23,t=128,c=\" \",b=256,y=16},{m=1,x=24,t=128,c=\" \",b=1,y=16},{m=1,x=10,t=128,c=\" \",b=1,y=17},{m=1,x=11,t=128,c=\" \",b=128,y=17},{m=1,x=12,t=128,c=\" \",b=256,y=17},{m=1,x=13,t=128,c=\" \",b=256,y=17},{m=1,x=14,t=128,c=\" \",b=256,y=17},{m=1,x=15,t=128,c=\" \",b=256,y=17},{m=1,x=16,t=128,c=\" \",b=256,y=17},{m=1,x=17,t=128,c=\" \",b=256,y=17},{m=1,x=18,t=128,c=\" \",b=256,y=17},{m=1,x=19,t=128,c=\" \",b=256,y=17},{m=1,x=20,t=128,c=\" \",b=256,y=17},{m=1,x=21,t=128,c=\" \",b=256,y=17},{m=1,x=22,t=128,c=\" \",b=256,y=17},{m=1,x=23,t=128,c=\" \",b=256,y=17},{m=1,x=24,t=128,c=\" \",b=1,y=17},{m=1,x=10,t=128,c=\" \",b=1,y=18},{m=1,x=11,t=128,c=\" \",b=1,y=18},{m=1,x=12,t=128,c=\" \",b=1,y=18},{m=1,x=13,t=128,c=\" \",b=1,y=18},{m=1,x=14,t=128,c=\" \",b=1,y=18},{m=1,x=15,t=128,c=\" \",b=1,y=18},{m=1,x=16,t=128,c=\" \",b=1,y=18},{m=1,x=17,t=128,c=\" \",b=1,y=18},{m=1,x=18,t=128,c=\" \",b=1,y=18},{m=1,x=19,t=128,c=\" \",b=1,y=18},{m=1,x=20,t=128,c=\" \",b=1,y=18},{m=1,x=21,t=128,c=\" \",b=1,y=18},{m=1,x=22,t=128,c=\" \",b=1,y=18},{m=1,x=23,t=128,c=\" \",b=1,y=18},{m=1,x=24,t=128,c=\" \",b=1,y=18}},{{m=1,x=10,t=128,c=\" \",y=3,b=1},{m=1,x=11,t=128,c=\" \",y=3,b=1},{m=1,x=12,t=128,c=\" \",y=3,b=1},{m=1,x=13,t=128,c=\" \",y=3,b=1},{m=1,x=14,t=128,c=\" \",y=3,b=1},{m=1,x=15,t=128,c=\" \",y=3,b=1},{m=1,x=16,t=128,c=\" \",y=3,b=1},{m=1,x=17,t=128,c=\" \",y=3,b=1},{m=1,x=18,t=128,c=\" \",y=3,b=1},{m=1,x=19,t=128,c=\" \",y=3,b=1},{m=1,x=20,t=128,c=\" \",y=3,b=1},{m=1,x=21,t=128,c=\" \",y=3,b=1},{m=1,x=22,t=128,c=\" \",y=3,b=1},{m=1,x=23,t=128,c=\" \",y=3,b=1},{m=1,x=24,t=128,c=\" \",y=3,b=1},{m=1,x=10,t=128,c=\" \",y=4,b=1},{m=1,x=11,t=128,c=\" \",y=4,b=128},{m=1,x=12,t=128,c=\" \",y=4,b=128},{m=1,x=13,t=128,c=\" \",y=4,b=128},{m=1,x=14,t=128,c=\" \",y=4,b=128},{m=1,x=15,t=128,c=\" \",y=4,b=128},{m=1,x=16,t=128,c=\" \",y=4,b=128},{m=1,x=17,t=128,c=\" \",y=4,b=128},{m=1,x=18,t=128,c=\" \",y=4,b=128},{m=1,x=19,t=128,c=\" \",y=4,b=128},{m=1,x=20,t=128,c=\" \",y=4,b=128},{m=1,x=21,t=128,c=\" \",y=4,b=128},{m=1,x=22,t=128,c=\" \",y=4,b=128},{m=1,x=23,t=128,c=\" \",y=4,b=128},{m=1,x=24,t=128,c=\" \",y=4,b=1},{m=1,x=10,t=128,c=\" \",y=5,b=1},{m=1,x=11,t=128,c=\" \",y=5,b=128},{m=1,x=12,t=128,c=\" \",y=5,b=256},{m=1,x=13,t=128,c=\" \",y=5,b=256},{m=1,x=14,t=128,c=\" \",y=5,b=256},{m=1,x=15,t=128,c=\" \",y=5,b=256},{m=1,x=16,t=128,c=\" \",y=5,b=256},{m=1,x=17,t=128,c=\" \",y=5,b=256},{m=1,x=18,t=128,c=\" \",y=5,b=256},{m=1,x=19,t=128,c=\" \",y=5,b=256},{m=1,x=20,t=128,c=\" \",y=5,b=256},{m=1,x=21,t=128,c=\" \",y=5,b=256},{m=1,x=22,t=128,c=\" \",y=5,b=256},{m=1,x=23,t=128,c=\" \",y=5,b=256},{m=1,x=24,t=128,c=\" \",y=5,b=1},{m=1,x=10,t=128,c=\" \",y=6,b=1},{m=1,x=11,t=128,c=\" \",y=6,b=128},{m=1,x=12,t=128,c=\" \",y=6,b=256},{m=1,x=13,t=128,c=\" \",y=6,b=256},{m=1,x=14,t=128,c=\" \",y=6,b=1},{m=1,x=15,t=128,c=\" \",y=6,b=1},{m=1,x=16,t=128,c=\" \",y=6,b=1},{m=1,x=17,t=128,c=\" \",y=6,b=1},{m=1,x=18,t=128,c=\" \",y=6,b=1},{m=1,x=19,t=128,c=\" \",y=6,b=1},{m=1,x=20,t=128,c=\" \",y=6,b=1},{m=1,x=21,t=128,c=\" \",y=6,b=128},{m=1,x=22,t=128,c=\" \",y=6,b=256},{m=1,x=23,t=128,c=\" \",y=6,b=256},{m=1,x=24,t=128,c=\" \",y=6,b=1},{m=1,x=10,t=128,c=\" \",y=7,b=1},{m=1,x=11,t=128,c=\" \",y=7,b=128},{m=1,x=12,t=128,c=\" \",y=7,b=256},{m=1,x=13,t=128,c=\" \",y=7,b=256},{m=1,x=14,t=128,c=\" \",y=7,b=1},{m=1,x=20,t=128,c=\" \",y=7,b=1},{m=1,x=21,t=128,c=\" \",y=7,b=128},{m=1,x=22,t=128,c=\" \",y=7,b=256},{m=1,x=23,t=128,c=\" \",y=7,b=256},{m=1,x=24,t=128,c=\" \",y=7,b=1},{m=1,x=10,t=128,c=\" \",y=8,b=1},{m=1,x=11,t=128,c=\" \",y=8,b=128},{m=1,x=12,t=128,c=\" \",y=8,b=256},{m=1,x=13,t=128,c=\" \",y=8,b=256},{m=1,x=14,t=128,c=\" \",y=8,b=1},{m=1,x=20,t=128,c=\" \",y=8,b=1},{m=1,x=21,t=128,c=\" \",y=8,b=128},{m=1,x=22,t=128,c=\" \",y=8,b=256},{m=1,x=23,t=128,c=\" \",y=8,b=256},{m=1,x=24,t=128,c=\" \",y=8,b=1},{m=1,x=10,t=128,c=\" \",y=9,b=1},{m=1,x=11,t=128,c=\" \",y=9,b=128},{m=1,x=12,t=128,c=\" \",y=9,b=256},{m=1,x=13,t=128,c=\" \",y=9,b=256},{m=1,x=14,t=128,c=\" \",y=9,b=1},{m=1,x=20,t=128,c=\" \",y=9,b=1},{m=1,x=21,t=128,c=\" \",y=9,b=128},{m=1,x=22,t=128,c=\" \",y=9,b=256},{m=1,x=23,t=128,c=\" \",y=9,b=256},{m=1,x=24,t=128,c=\" \",y=9,b=1},{m=1,x=10,t=128,c=\" \",y=10,b=1},{m=1,x=11,t=128,c=\" \",y=10,b=128},{m=1,x=12,t=128,c=\" \",y=10,b=256},{m=1,x=13,t=128,c=\" \",y=10,b=256},{m=1,x=14,t=128,c=\" \",y=10,b=1},{m=1,x=20,t=128,c=\" \",y=10,b=1},{m=1,x=21,t=128,c=\" \",y=10,b=128},{m=1,x=22,t=128,c=\" \",y=10,b=256},{m=1,x=23,t=128,c=\" \",y=10,b=256},{m=1,x=24,t=128,c=\" \",y=10,b=1},{m=1,x=10,t=128,c=\" \",y=11,b=1},{m=1,x=11,t=128,c=\" \",y=11,b=128},{m=1,x=12,t=128,c=\" \",y=11,b=256},{m=1,x=13,t=128,c=\" \",y=11,b=256},{m=1,x=14,t=128,c=\" \",y=11,b=1},{m=1,x=20,t=128,c=\" \",y=11,b=1},{m=1,x=21,t=128,c=\" \",y=11,b=128},{m=1,x=22,t=128,c=\" \",y=11,b=256},{m=1,x=23,t=128,c=\" \",y=11,b=256},{m=1,x=24,t=128,c=\" \",y=11,b=1},{m=1,x=10,t=128,c=\" \",y=12,b=1},{m=1,x=11,t=128,c=\" \",y=12,b=128},{m=1,x=12,t=128,c=\" \",y=12,b=256},{m=1,x=13,t=128,c=\" \",y=12,b=256},{m=1,x=14,t=128,c=\" \",y=12,b=1},{m=1,x=20,t=128,c=\" \",y=12,b=1},{m=1,x=21,t=128,c=\" \",y=12,b=128},{m=1,x=22,t=128,c=\" \",y=12,b=256},{m=1,x=23,t=128,c=\" \",y=12,b=256},{m=1,x=24,t=128,c=\" \",y=12,b=1},{m=1,x=10,t=128,c=\" \",y=13,b=1},{m=1,x=11,t=128,c=\" \",y=13,b=128},{m=1,x=12,t=128,c=\" \",y=13,b=256},{m=1,x=13,t=128,c=\" \",y=13,b=256},{m=1,x=14,t=128,c=\" \",y=13,b=1},{m=1,x=20,t=128,c=\" \",y=13,b=1},{m=1,x=21,t=128,c=\" \",y=13,b=128},{m=1,x=22,t=128,c=\" \",y=13,b=256},{m=1,x=23,t=128,c=\" \",y=13,b=256},{m=1,x=24,t=128,c=\" \",y=13,b=1},{m=1,x=10,t=128,c=\" \",y=14,b=1},{m=1,x=11,t=128,c=\" \",y=14,b=128},{m=1,x=12,t=128,c=\" \",y=14,b=256},{m=1,x=13,t=128,c=\" \",y=14,b=256},{m=1,x=14,t=128,c=\" \",y=14,b=1},{m=1,x=20,t=128,c=\" \",y=14,b=1},{m=1,x=21,t=128,c=\" \",y=14,b=128},{m=1,x=22,t=128,c=\" \",y=14,b=256},{m=1,x=23,t=128,c=\" \",y=14,b=256},{m=1,x=24,t=128,c=\" \",y=14,b=1},{m=1,x=10,t=128,c=\" \",y=15,b=1},{m=1,x=11,t=128,c=\" \",y=15,b=128},{m=1,x=12,t=128,c=\" \",y=15,b=256},{m=1,x=13,t=128,c=\" \",y=15,b=256},{m=1,x=14,t=128,c=\" \",y=15,b=1},{m=1,x=15,t=128,c=\" \",y=15,b=1},{m=1,x=16,t=128,c=\" \",y=15,b=1},{m=1,x=17,t=128,c=\" \",y=15,b=1},{m=1,x=18,t=128,c=\" \",y=15,b=1},{m=1,x=19,t=128,c=\" \",y=15,b=1},{m=1,x=20,t=128,c=\" \",y=15,b=1},{m=1,x=21,t=128,c=\" \",y=15,b=128},{m=1,x=22,t=128,c=\" \",y=15,b=256},{m=1,x=23,t=128,c=\" \",y=15,b=256},{m=1,x=24,t=128,c=\" \",y=15,b=1},{m=1,x=10,t=128,c=\" \",y=16,b=1},{m=1,x=11,t=128,c=\" \",y=16,b=128},{m=1,x=12,t=128,c=\" \",y=16,b=256},{m=1,x=13,t=128,c=\" \",y=16,b=256},{m=1,x=14,t=128,c=\" \",y=16,b=128},{m=1,x=15,t=128,c=\" \",y=16,b=128},{m=1,x=16,t=128,c=\" \",y=16,b=128},{m=1,x=17,t=128,c=\" \",y=16,b=128},{m=1,x=18,t=128,c=\" \",y=16,b=128},{m=1,x=19,t=128,c=\" \",y=16,b=128},{m=1,x=20,t=128,c=\" \",y=16,b=128},{m=1,x=21,t=128,c=\" \",y=16,b=128},{m=1,x=22,t=128,c=\" \",y=16,b=256},{m=1,x=23,t=128,c=\" \",y=16,b=256},{m=1,x=24,t=128,c=\" \",y=16,b=1},{m=1,x=10,t=128,c=\" \",y=17,b=1},{m=1,x=11,t=128,c=\" \",y=17,b=128},{m=1,x=12,t=128,c=\" \",y=17,b=256},{m=1,x=13,t=128,c=\" \",y=17,b=256},{m=1,x=14,t=128,c=\" \",y=17,b=256},{m=1,x=15,t=128,c=\" \",y=17,b=256},{m=1,x=16,t=128,c=\" \",y=17,b=256},{m=1,x=17,t=128,c=\" \",y=17,b=256},{m=1,x=18,t=128,c=\" \",y=17,b=256},{m=1,x=19,t=128,c=\" \",y=17,b=256},{m=1,x=20,t=128,c=\" \",y=17,b=256},{m=1,x=21,t=128,c=\" \",y=17,b=256},{m=1,x=22,t=128,c=\" \",y=17,b=256},{m=1,x=23,t=128,c=\" \",y=17,b=256},{m=1,x=24,t=128,c=\" \",y=17,b=1},{m=1,x=10,t=128,c=\" \",y=18,b=1},{m=1,x=11,t=128,c=\" \",y=18,b=1},{m=1,x=12,t=128,c=\" \",y=18,b=1},{m=1,x=13,t=128,c=\" \",y=18,b=1},{m=1,x=14,t=128,c=\" \",y=18,b=1},{m=1,x=15,t=128,c=\" \",y=18,b=1},{m=1,x=16,t=128,c=\" \",y=18,b=1},{m=1,x=17,t=128,c=\" \",y=18,b=1},{m=1,x=18,t=128,c=\" \",y=18,b=1},{m=1,x=19,t=128,c=\" \",y=18,b=1},{m=1,x=20,t=128,c=\" \",y=18,b=1},{m=1,x=21,t=128,c=\" \",y=18,b=1},{m=1,x=22,t=128,c=\" \",y=18,b=1},{m=1,x=23,t=128,c=\" \",y=18,b=1},{m=1,x=24,t=128,c=\" \",y=18,b=1}},{{m=1,x=10,t=128,c=\" \",y=3,b=1},{m=1,x=11,t=128,c=\" \",y=3,b=1},{m=1,x=12,t=128,c=\" \",y=3,b=1},{m=1,x=13,t=128,c=\" \",y=3,b=1},{m=1,x=14,t=128,c=\" \",y=3,b=1},{m=1,x=15,t=128,c=\" \",y=3,b=1},{m=1,x=16,t=128,c=\" \",y=3,b=1},{m=1,x=17,t=128,c=\" \",y=3,b=1},{m=1,x=18,t=128,c=\" \",y=3,b=1},{m=1,x=20,t=128,c=\" \",y=3,b=1},{m=1,x=21,t=128,c=\" \",y=3,b=1},{m=1,x=22,t=128,c=\" \",y=3,b=1},{m=1,x=23,t=128,c=\" \",y=3,b=1},{m=1,x=24,t=128,c=\" \",y=3,b=1},{m=1,x=10,t=128,c=\" \",y=4,b=1},{m=1,x=11,t=128,c=\" \",y=4,b=128},{m=1,x=12,t=128,c=\" \",y=4,b=128},{m=1,x=13,t=128,c=\" \",y=4,b=128},{m=1,x=14,t=128,c=\" \",y=4,b=128},{m=1,x=15,t=128,c=\" \",y=4,b=128},{m=1,x=16,t=128,c=\" \",y=4,b=128},{m=1,x=17,t=128,c=\" \",y=4,b=128},{m=1,x=18,t=128,c=\" \",y=4,b=1},{m=1,x=20,t=128,c=\" \",y=4,b=1},{m=1,x=21,t=128,c=\" \",y=4,b=128},{m=1,x=22,t=128,c=\" \",y=4,b=128},{m=1,x=23,t=128,c=\" \",y=4,b=128},{m=1,x=24,t=128,c=\" \",y=4,b=1},{m=1,x=10,t=128,c=\" \",y=5,b=1},{m=1,x=11,t=128,c=\" \",y=5,b=128},{m=1,x=12,t=128,c=\" \",y=5,b=256},{m=1,x=13,t=128,c=\" \",y=5,b=256},{m=1,x=14,t=128,c=\" \",y=5,b=256},{m=1,x=15,t=128,c=\" \",y=5,b=256},{m=1,x=16,t=128,c=\" \",y=5,b=256},{m=1,x=17,t=128,c=\" \",y=5,b=256},{m=1,x=18,t=128,c=\" \",y=5,b=1},{m=1,x=20,t=128,c=\" \",y=5,b=1},{m=1,x=21,t=128,c=\" \",y=5,b=128},{m=1,x=22,t=128,c=\" \",y=5,b=256},{m=1,x=23,t=128,c=\" \",y=5,b=256},{m=1,x=24,t=128,c=\" \",y=5,b=1},{m=1,x=10,t=128,c=\" \",y=6,b=1},{m=1,x=11,t=128,c=\" \",y=6,b=128},{m=1,x=12,t=128,c=\" \",y=6,b=256},{m=1,x=13,t=128,c=\" \",y=6,b=256},{m=1,x=14,t=128,c=\" \",y=6,b=256},{m=1,x=15,t=128,c=\" \",y=6,b=256},{m=1,x=16,t=128,c=\" \",y=6,b=256},{m=1,x=17,t=128,c=\" \",y=6,b=256},{m=1,x=18,t=128,c=\" \",y=6,b=1},{m=1,x=20,t=128,c=\" \",y=6,b=1},{m=1,x=21,t=128,c=\" \",y=6,b=128},{m=1,x=22,t=128,c=\" \",y=6,b=256},{m=1,x=23,t=128,c=\" \",y=6,b=256},{m=1,x=24,t=128,c=\" \",y=6,b=1},{m=1,x=10,t=128,c=\" \",y=7,b=1},{m=1,x=11,t=128,c=\" \",y=7,b=128},{m=1,x=12,t=128,c=\" \",y=7,b=256},{m=1,x=13,t=128,c=\" \",y=7,b=256},{m=1,x=14,t=128,c=\" \",y=7,b=1},{m=1,x=15,t=128,c=\" \",y=7,b=1},{m=1,x=16,t=128,c=\" \",y=7,b=1},{m=1,x=17,t=128,c=\" \",y=7,b=128},{m=1,x=18,t=128,c=\" \",y=7,b=1},{m=1,x=20,t=128,c=\" \",y=7,b=1},{m=1,x=21,t=128,c=\" \",y=7,b=128},{m=1,x=22,t=128,c=\" \",y=7,b=256},{m=1,x=23,t=128,c=\" \",y=7,b=256},{m=1,x=24,t=128,c=\" \",y=7,b=1},{m=1,x=10,t=128,c=\" \",y=8,b=1},{m=1,x=11,t=128,c=\" \",y=8,b=128},{m=1,x=12,t=128,c=\" \",y=8,b=256},{m=1,x=13,t=128,c=\" \",y=8,b=256},{m=1,x=14,t=128,c=\" \",y=8,b=1},{m=1,x=16,t=128,c=\" \",y=8,b=1},{m=1,x=17,t=128,c=\" \",y=8,b=128},{m=1,x=18,t=128,c=\" \",y=8,b=1},{m=1,x=20,t=128,c=\" \",y=8,b=1},{m=1,x=21,t=128,c=\" \",y=8,b=128},{m=1,x=22,t=128,c=\" \",y=8,b=256},{m=1,x=23,t=128,c=\" \",y=8,b=256},{m=1,x=24,t=128,c=\" \",y=8,b=1},{m=1,x=10,t=128,c=\" \",y=9,b=1},{m=1,x=11,t=128,c=\" \",y=9,b=128},{m=1,x=12,t=128,c=\" \",y=9,b=256},{m=1,x=13,t=128,c=\" \",y=9,b=256},{m=1,x=14,t=128,c=\" \",y=9,b=1},{m=1,x=16,t=128,c=\" \",y=9,b=1},{m=1,x=17,t=128,c=\" \",y=9,b=128},{m=1,x=18,t=128,c=\" \",y=9,b=1},{m=1,x=20,t=128,c=\" \",y=9,b=1},{m=1,x=21,t=128,c=\" \",y=9,b=128},{m=1,x=22,t=128,c=\" \",y=9,b=256},{m=1,x=23,t=128,c=\" \",y=9,b=256},{m=1,x=24,t=128,c=\" \",y=9,b=1},{m=1,x=10,t=128,c=\" \",y=10,b=1},{m=1,x=11,t=128,c=\" \",y=10,b=128},{m=1,x=12,t=128,c=\" \",y=10,b=256},{m=1,x=13,t=128,c=\" \",y=10,b=256},{m=1,x=14,t=128,c=\" \",y=10,b=1},{m=1,x=16,t=128,c=\" \",y=10,b=1},{m=1,x=17,t=128,c=\" \",y=10,b=128},{m=1,x=18,t=128,c=\" \",y=10,b=1},{m=1,x=20,t=128,c=\" \",y=10,b=1},{m=1,x=21,t=128,c=\" \",y=10,b=128},{m=1,x=22,t=128,c=\" \",y=10,b=256},{m=1,x=23,t=128,c=\" \",y=10,b=256},{m=1,x=24,t=128,c=\" \",y=10,b=1},{m=1,x=10,t=128,c=\" \",y=11,b=1},{m=1,x=11,t=128,c=\" \",y=11,b=128},{m=1,x=12,t=128,c=\" \",y=11,b=256},{m=1,x=13,t=128,c=\" \",y=11,b=256},{m=1,x=14,t=128,c=\" \",y=11,b=1},{m=1,x=16,t=128,c=\" \",y=11,b=1},{m=1,x=17,t=128,c=\" \",y=11,b=128},{m=1,x=18,t=128,c=\" \",y=11,b=1},{m=1,x=20,t=128,c=\" \",y=11,b=1},{m=1,x=21,t=128,c=\" \",y=11,b=128},{m=1,x=22,t=128,c=\" \",y=11,b=256},{m=1,x=23,t=128,c=\" \",y=11,b=256},{m=1,x=24,t=128,c=\" \",y=11,b=1},{m=1,x=10,t=128,c=\" \",y=12,b=1},{m=1,x=11,t=128,c=\" \",y=12,b=128},{m=1,x=12,t=128,c=\" \",y=12,b=256},{m=1,x=13,t=128,c=\" \",y=12,b=256},{m=1,x=14,t=128,c=\" \",y=12,b=1},{m=1,x=16,t=128,c=\" \",y=12,b=1},{m=1,x=17,t=128,c=\" \",y=12,b=128},{m=1,x=18,t=128,c=\" \",y=12,b=1},{m=1,x=20,t=128,c=\" \",y=12,b=1},{m=1,x=21,t=128,c=\" \",y=12,b=128},{m=1,x=22,t=128,c=\" \",y=12,b=256},{m=1,x=23,t=128,c=\" \",y=12,b=256},{m=1,x=24,t=128,c=\" \",y=12,b=1},{m=1,x=10,t=128,c=\" \",y=13,b=1},{m=1,x=11,t=128,c=\" \",y=13,b=128},{m=1,x=12,t=128,c=\" \",y=13,b=256},{m=1,x=13,t=128,c=\" \",y=13,b=256},{m=1,x=14,t=128,c=\" \",y=13,b=1},{m=1,x=16,t=128,c=\" \",y=13,b=1},{m=1,x=17,t=128,c=\" \",y=13,b=128},{m=1,x=18,t=128,c=\" \",y=13,b=1},{m=1,x=20,t=128,c=\" \",y=13,b=1},{m=1,x=21,t=128,c=\" \",y=13,b=128},{m=1,x=22,t=128,c=\" \",y=13,b=256},{m=1,x=23,t=128,c=\" \",y=13,b=256},{m=1,x=24,t=128,c=\" \",y=13,b=1},{m=1,x=10,t=128,c=\" \",y=14,b=1},{m=1,x=11,t=128,c=\" \",y=14,b=128},{m=1,x=12,t=128,c=\" \",y=14,b=256},{m=1,x=13,t=128,c=\" \",y=14,b=256},{m=1,x=14,t=128,c=\" \",y=14,b=1},{m=1,x=16,t=128,c=\" \",y=14,b=1},{m=1,x=17,t=128,c=\" \",y=14,b=128},{m=1,x=18,t=128,c=\" \",y=14,b=1},{m=1,x=19,t=128,c=\" \",y=14,b=1},{m=1,x=20,t=128,c=\" \",y=14,b=1},{m=1,x=21,t=128,c=\" \",y=14,b=128},{m=1,x=22,t=128,c=\" \",y=14,b=256},{m=1,x=23,t=128,c=\" \",y=14,b=256},{m=1,x=24,t=128,c=\" \",y=14,b=1},{m=1,x=10,t=128,c=\" \",y=15,b=1},{m=1,x=11,t=128,c=\" \",y=15,b=128},{m=1,x=12,t=128,c=\" \",y=15,b=256},{m=1,x=13,t=128,c=\" \",y=15,b=256},{m=1,x=14,t=128,c=\" \",y=15,b=1},{m=1,x=16,t=128,c=\" \",y=15,b=1},{m=1,x=17,t=128,c=\" \",y=15,b=128},{m=1,x=18,t=128,c=\" \",y=15,b=256},{m=1,x=19,t=128,c=\" \",y=15,b=128},{m=1,x=20,t=128,c=\" \",y=15,b=128},{m=1,x=21,t=128,c=\" \",y=15,b=128},{m=1,x=22,t=128,c=\" \",y=15,b=256},{m=1,x=23,t=128,c=\" \",y=15,b=256},{m=1,x=24,t=128,c=\" \",y=15,b=1},{m=1,x=10,t=128,c=\" \",y=16,b=1},{m=1,x=11,t=128,c=\" \",y=16,b=128},{m=1,x=12,t=128,c=\" \",y=16,b=256},{m=1,x=13,t=128,c=\" \",y=16,b=256},{m=1,x=14,t=128,c=\" \",y=16,b=1},{m=1,x=16,t=128,c=\" \",y=16,b=1},{m=1,x=17,t=128,c=\" \",y=16,b=128},{m=1,x=18,t=128,c=\" \",y=16,b=256},{m=1,x=19,t=128,c=\" \",y=16,b=256},{m=1,x=20,t=128,c=\" \",y=16,b=256},{m=1,x=21,t=128,c=\" \",y=16,b=256},{m=1,x=22,t=128,c=\" \",y=16,b=256},{m=1,x=23,t=128,c=\" \",y=16,b=256},{m=1,x=24,t=128,c=\" \",y=16,b=1},{m=1,x=10,t=128,c=\" \",y=17,b=1},{m=1,x=11,t=128,c=\" \",y=17,b=128},{m=1,x=12,t=128,c=\" \",y=17,b=256},{m=1,x=13,t=128,c=\" \",y=17,b=256},{m=1,x=14,t=128,c=\" \",y=17,b=1},{m=1,x=16,t=128,c=\" \",y=17,b=1},{m=1,x=17,t=128,c=\" \",y=17,b=128},{m=1,x=18,t=128,c=\" \",y=17,b=256},{m=1,x=19,t=128,c=\" \",y=17,b=256},{m=1,x=20,t=128,c=\" \",y=17,b=256},{m=1,x=21,t=128,c=\" \",y=17,b=256},{m=1,x=22,t=128,c=\" \",y=17,b=256},{m=1,x=23,t=128,c=\" \",y=17,b=256},{m=1,x=24,t=128,c=\" \",y=17,b=1},{m=1,x=10,t=128,c=\" \",y=18,b=1},{m=1,x=11,t=128,c=\" \",y=18,b=1},{m=1,x=12,t=128,c=\" \",y=18,b=1},{m=1,x=13,t=128,c=\" \",y=18,b=1},{m=1,x=14,t=128,c=\" \",y=18,b=1},{m=1,x=16,t=128,c=\" \",y=18,b=1},{m=1,x=17,t=128,c=\" \",y=18,b=1},{m=1,x=18,t=128,c=\" \",y=18,b=1},{m=1,x=19,t=128,c=\" \",y=18,b=1},{m=1,x=20,t=128,c=\" \",y=18,b=1},{m=1,x=21,t=128,c=\" \",y=18,b=1},{m=1,x=22,t=128,c=\" \",y=18,b=1},{m=1,x=23,t=128,c=\" \",y=18,b=1},{m=1,x=24,t=128,c=\" \",y=18,b=1}},{{m=1,x=10,t=128,c=\" \",b=1,y=3},{m=1,x=11,t=128,c=\" \",b=1,y=3},{m=1,x=12,t=128,c=\" \",b=1,y=3},{m=1,x=13,t=128,c=\" \",b=1,y=3},{m=1,x=14,t=128,c=\" \",b=1,y=3},{m=1,x=15,t=128,c=\" \",b=1,y=3},{m=1,x=16,t=128,c=\" \",b=1,y=3},{m=1,x=17,t=128,c=\" \",b=1,y=3},{m=1,x=18,t=128,c=\" \",b=1,y=3},{m=1,x=19,t=128,c=\" \",b=1,y=3},{m=1,x=20,t=128,c=\" \",b=1,y=3},{m=1,x=21,t=128,c=\" \",b=1,y=3},{m=1,x=22,t=128,c=\" \",b=1,y=3},{m=1,x=23,t=128,c=\" \",b=1,y=3},{m=1,x=24,t=128,c=\" \",b=1,y=3},{m=1,x=10,t=128,c=\" \",b=1,y=4},{m=1,x=11,t=128,c=\" \",b=128,y=4},{m=1,x=12,t=128,c=\" \",b=128,y=4},{m=1,x=13,t=128,c=\" \",b=128,y=4},{m=1,x=14,t=128,c=\" \",b=128,y=4},{m=1,x=15,t=128,c=\" \",b=128,y=4},{m=1,x=16,t=128,c=\" \",b=128,y=4},{m=1,x=17,t=128,c=\" \",b=128,y=4},{m=1,x=18,t=128,c=\" \",b=128,y=4},{m=1,x=19,t=128,c=\" \",b=128,y=4},{m=1,x=20,t=128,c=\" \",b=128,y=4},{m=1,x=21,t=128,c=\" \",b=128,y=4},{m=1,x=22,t=128,c=\" \",b=128,y=4},{m=1,x=23,t=128,c=\" \",b=128,y=4},{m=1,x=24,t=128,c=\" \",b=1,y=4},{m=1,x=10,t=128,c=\" \",b=1,y=5},{m=1,x=11,t=128,c=\" \",b=128,y=5},{m=1,x=12,t=128,c=\" \",b=256,y=5},{m=1,x=13,t=128,c=\" \",b=256,y=5},{m=1,x=14,t=128,c=\" \",b=256,y=5},{m=1,x=15,t=128,c=\" \",b=256,y=5},{m=1,x=16,t=128,c=\" \",b=256,y=5},{m=1,x=17,t=128,c=\" \",b=256,y=5},{m=1,x=18,t=128,c=\" \",b=256,y=5},{m=1,x=19,t=128,c=\" \",b=256,y=5},{m=1,x=20,t=128,c=\" \",b=256,y=5},{m=1,x=21,t=128,c=\" \",b=256,y=5},{m=1,x=22,t=128,c=\" \",b=256,y=5},{m=1,x=23,t=128,c=\" \",b=256,y=5},{m=1,x=24,t=128,c=\" \",b=1,y=5},{m=1,x=10,t=128,c=\" \",b=1,y=6},{m=1,x=11,t=128,c=\" \",b=128,y=6},{m=1,x=12,t=128,c=\" \",b=256,y=6},{m=1,x=13,t=128,c=\" \",b=256,y=6},{m=1,x=14,t=128,c=\" \",b=1,y=6},{m=1,x=15,t=128,c=\" \",b=1,y=6},{m=1,x=16,t=128,c=\" \",b=1,y=6},{m=1,x=17,t=128,c=\" \",b=1,y=6},{m=1,x=18,t=128,c=\" \",b=1,y=6},{m=1,x=19,t=128,c=\" \",b=1,y=6},{m=1,x=20,t=128,c=\" \",b=1,y=6},{m=1,x=21,t=128,c=\" \",b=128,y=6},{m=1,x=22,t=128,c=\" \",b=256,y=6},{m=1,x=23,t=128,c=\" \",b=256,y=6},{m=1,x=24,t=128,c=\" \",b=1,y=6},{m=1,x=10,t=128,c=\" \",b=1,y=7},{m=1,x=11,t=128,c=\" \",b=128,y=7},{m=1,x=12,t=128,c=\" \",b=256,y=7},{m=1,x=13,t=128,c=\" \",b=256,y=7},{m=1,x=14,t=128,c=\" \",b=1,y=7},{m=1,x=20,t=128,c=\" \",b=1,y=7},{m=1,x=21,t=128,c=\" \",b=128,y=7},{m=1,x=22,t=128,c=\" \",b=256,y=7},{m=1,x=23,t=128,c=\" \",b=256,y=7},{m=1,x=24,t=128,c=\" \",b=1,y=7},{m=1,x=10,t=128,c=\" \",b=1,y=8},{m=1,x=11,t=128,c=\" \",b=128,y=8},{m=1,x=12,t=128,c=\" \",b=256,y=8},{m=1,x=13,t=128,c=\" \",b=256,y=8},{m=1,x=14,t=128,c=\" \",b=1,y=8},{m=1,x=20,t=128,c=\" \",b=1,y=8},{m=1,x=21,t=128,c=\" \",b=128,y=8},{m=1,x=22,t=128,c=\" \",b=256,y=8},{m=1,x=23,t=128,c=\" \",b=256,y=8},{m=1,x=24,t=128,c=\" \",b=1,y=8},{m=1,x=10,t=128,c=\" \",b=1,y=9},{m=1,x=11,t=128,c=\" \",b=128,y=9},{m=1,x=12,t=128,c=\" \",b=256,y=9},{m=1,x=13,t=128,c=\" \",b=256,y=9},{m=1,x=14,t=128,c=\" \",b=1,y=9},{m=1,x=15,t=128,c=\" \",b=1,y=9},{m=1,x=16,t=128,c=\" \",b=1,y=9},{m=1,x=17,t=128,c=\" \",b=1,y=9},{m=1,x=18,t=128,c=\" \",b=1,y=9},{m=1,x=19,t=128,c=\" \",b=1,y=9},{m=1,x=20,t=128,c=\" \",b=1,y=9},{m=1,x=21,t=128,c=\" \",b=128,y=9},{m=1,x=22,t=128,c=\" \",b=256,y=9},{m=1,x=23,t=128,c=\" \",b=256,y=9},{m=1,x=24,t=128,c=\" \",b=1,y=9},{m=1,x=10,t=128,c=\" \",b=1,y=10},{m=1,x=11,t=128,c=\" \",b=128,y=10},{m=1,x=12,t=128,c=\" \",b=256,y=10},{m=1,x=13,t=128,c=\" \",b=256,y=10},{m=1,x=14,t=128,c=\" \",b=128,y=10},{m=1,x=15,t=128,c=\" \",b=128,y=10},{m=1,x=16,t=128,c=\" \",b=128,y=10},{m=1,x=17,t=128,c=\" \",b=128,y=10},{m=1,x=18,t=128,c=\" \",b=128,y=10},{m=1,x=19,t=128,c=\" \",b=128,y=10},{m=1,x=20,t=128,c=\" \",b=128,y=10},{m=1,x=21,t=128,c=\" \",b=128,y=10},{m=1,x=22,t=128,c=\" \",b=256,y=10},{m=1,x=23,t=128,c=\" \",b=256,y=10},{m=1,x=24,t=128,c=\" \",b=1,y=10},{m=1,x=10,t=128,c=\" \",b=1,y=11},{m=1,x=11,t=128,c=\" \",b=128,y=11},{m=1,x=12,t=128,c=\" \",b=256,y=11},{m=1,x=13,t=128,c=\" \",b=256,y=11},{m=1,x=14,t=128,c=\" \",b=256,y=11},{m=1,x=15,t=128,c=\" \",b=256,y=11},{m=1,x=16,t=128,c=\" \",b=256,y=11},{m=1,x=17,t=128,c=\" \",b=256,y=11},{m=1,x=18,t=128,c=\" \",b=256,y=11},{m=1,x=19,t=128,c=\" \",b=256,y=11},{m=1,x=20,t=128,c=\" \",b=256,y=11},{m=1,x=21,t=128,c=\" \",b=256,y=11},{m=1,x=22,t=128,c=\" \",b=256,y=11},{m=1,x=23,t=128,c=\" \",b=256,y=11},{m=1,x=24,t=128,c=\" \",b=1,y=11},{m=1,x=10,t=128,c=\" \",b=1,y=12},{m=1,x=11,t=128,c=\" \",b=128,y=12},{m=1,x=12,t=128,c=\" \",b=256,y=12},{m=1,x=13,t=128,c=\" \",b=256,y=12},{m=1,x=14,t=128,c=\" \",b=1,y=12},{m=1,x=15,t=128,c=\" \",b=1,y=12},{m=1,x=16,t=128,c=\" \",b=1,y=12},{m=1,x=17,t=128,c=\" \",b=1,y=12},{m=1,x=18,t=128,c=\" \",b=1,y=12},{m=1,x=19,t=128,c=\" \",b=1,y=12},{m=1,x=20,t=128,c=\" \",b=1,y=12},{m=1,x=21,t=128,c=\" \",b=128,y=12},{m=1,x=22,t=128,c=\" \",b=256,y=12},{m=1,x=23,t=128,c=\" \",b=256,y=12},{m=1,x=24,t=128,c=\" \",b=1,y=12},{m=1,x=10,t=128,c=\" \",b=1,y=13},{m=1,x=11,t=128,c=\" \",b=128,y=13},{m=1,x=12,t=128,c=\" \",b=256,y=13},{m=1,x=13,t=128,c=\" \",b=256,y=13},{m=1,x=14,t=128,c=\" \",b=1,y=13},{m=1,x=20,t=128,c=\" \",b=1,y=13},{m=1,x=21,t=128,c=\" \",b=128,y=13},{m=1,x=22,t=128,c=\" \",b=256,y=13},{m=1,x=23,t=128,c=\" \",b=256,y=13},{m=1,x=24,t=128,c=\" \",b=1,y=13},{m=1,x=10,t=128,c=\" \",b=1,y=14},{m=1,x=11,t=128,c=\" \",b=128,y=14},{m=1,x=12,t=128,c=\" \",b=256,y=14},{m=1,x=13,t=128,c=\" \",b=256,y=14},{m=1,x=14,t=128,c=\" \",b=1,y=14},{m=1,x=20,t=128,c=\" \",b=1,y=14},{m=1,x=21,t=128,c=\" \",b=128,y=14},{m=1,x=22,t=128,c=\" \",b=256,y=14},{m=1,x=23,t=128,c=\" \",b=256,y=14},{m=1,x=24,t=128,c=\" \",b=1,y=14},{m=1,x=10,t=128,c=\" \",b=1,y=15},{m=1,x=11,t=128,c=\" \",b=128,y=15},{m=1,x=12,t=128,c=\" \",b=256,y=15},{m=1,x=13,t=128,c=\" \",b=256,y=15},{m=1,x=14,t=128,c=\" \",b=1,y=15},{m=1,x=20,t=128,c=\" \",b=1,y=15},{m=1,x=21,t=128,c=\" \",b=128,y=15},{m=1,x=22,t=128,c=\" \",b=256,y=15},{m=1,x=23,t=128,c=\" \",b=256,y=15},{m=1,x=24,t=128,c=\" \",b=1,y=15},{m=1,x=10,t=128,c=\" \",b=1,y=16},{m=1,x=11,t=128,c=\" \",b=128,y=16},{m=1,x=12,t=128,c=\" \",b=256,y=16},{m=1,x=13,t=128,c=\" \",b=256,y=16},{m=1,x=14,t=128,c=\" \",b=1,y=16},{m=1,x=20,t=128,c=\" \",b=1,y=16},{m=1,x=21,t=128,c=\" \",b=128,y=16},{m=1,x=22,t=128,c=\" \",b=256,y=16},{m=1,x=23,t=128,c=\" \",b=256,y=16},{m=1,x=24,t=128,c=\" \",b=1,y=16},{m=1,x=10,t=128,c=\" \",b=1,y=17},{m=1,x=11,t=128,c=\" \",b=128,y=17},{m=1,x=12,t=128,c=\" \",b=256,y=17},{m=1,x=13,t=128,c=\" \",b=256,y=17},{m=1,x=14,t=128,c=\" \",b=1,y=17},{m=1,x=20,t=128,c=\" \",b=1,y=17},{m=1,x=21,t=128,c=\" \",b=128,y=17},{m=1,x=22,t=128,c=\" \",b=256,y=17},{m=1,x=23,t=128,c=\" \",b=256,y=17},{m=1,x=24,t=128,c=\" \",b=1,y=17},{m=1,x=10,t=128,c=\" \",b=1,y=18},{m=1,x=11,t=128,c=\" \",b=1,y=18},{m=1,x=12,t=128,c=\" \",b=1,y=18},{m=1,x=13,t=128,c=\" \",b=1,y=18},{m=1,x=14,t=128,c=\" \",b=1,y=18},{m=1,x=20,t=128,c=\" \",b=1,y=18},{m=1,x=21,t=128,c=\" \",b=1,y=18},{m=1,x=22,t=128,c=\" \",b=1,y=18},{m=1,x=23,t=128,c=\" \",b=1,y=18},{m=1,x=24,t=128,c=\" \",b=1,y=18}},{{m=1,x=10,t=128,c=\" \",b=1,y=3},{m=1,x=11,t=128,c=\" \",b=1,y=3},{m=1,x=12,t=128,c=\" \",b=1,y=3},{m=1,x=13,t=128,c=\" \",b=1,y=3},{m=1,x=14,t=128,c=\" \",b=1,y=3},{m=1,x=15,t=128,c=\" \",b=1,y=3},{m=1,x=16,t=128,c=\" \",b=1,y=3},{m=1,x=17,t=128,c=\" \",b=1,y=3},{m=1,x=18,t=128,c=\" \",b=1,y=3},{m=1,x=19,t=128,c=\" \",b=1,y=3},{m=1,x=20,t=128,c=\" \",b=1,y=3},{m=1,x=21,t=128,c=\" \",b=1,y=3},{m=1,x=22,t=128,c=\" \",b=1,y=3},{m=1,x=23,t=128,c=\" \",b=1,y=3},{m=1,x=24,t=128,c=\" \",b=1,y=3},{m=1,x=10,t=128,c=\" \",b=1,y=4},{m=1,x=11,t=128,c=\" \",b=128,y=4},{m=1,x=12,t=128,c=\" \",b=128,y=4},{m=1,x=13,t=128,c=\" \",b=128,y=4},{m=1,x=14,t=128,c=\" \",b=128,y=4},{m=1,x=15,t=128,c=\" \",b=128,y=4},{m=1,x=16,t=128,c=\" \",b=128,y=4},{m=1,x=17,t=128,c=\" \",b=128,y=4},{m=1,x=18,t=128,c=\" \",b=128,y=4},{m=1,x=19,t=128,c=\" \",b=128,y=4},{m=1,x=20,t=128,c=\" \",b=128,y=4},{m=1,x=21,t=128,c=\" \",b=128,y=4},{m=1,x=22,t=128,c=\" \",b=128,y=4},{m=1,x=23,t=128,c=\" \",b=128,y=4},{m=1,x=24,t=128,c=\" \",b=1,y=4},{m=1,x=10,t=128,c=\" \",b=1,y=5},{m=1,x=11,t=128,c=\" \",b=128,y=5},{m=1,x=12,t=128,c=\" \",b=256,y=5},{m=1,x=13,t=128,c=\" \",b=256,y=5},{m=1,x=14,t=128,c=\" \",b=256,y=5},{m=1,x=15,t=128,c=\" \",b=256,y=5},{m=1,x=16,t=128,c=\" \",b=256,y=5},{m=1,x=17,t=128,c=\" \",b=256,y=5},{m=1,x=18,t=128,c=\" \",b=256,y=5},{m=1,x=19,t=128,c=\" \",b=256,y=5},{m=1,x=20,t=128,c=\" \",b=256,y=5},{m=1,x=21,t=128,c=\" \",b=256,y=5},{m=1,x=22,t=128,c=\" \",b=256,y=5},{m=1,x=23,t=128,c=\" \",b=256,y=5},{m=1,x=24,t=128,c=\" \",b=1,y=5},{m=1,x=10,t=128,c=\" \",b=1,y=6},{m=1,x=11,t=128,c=\" \",b=128,y=6},{m=1,x=12,t=128,c=\" \",b=256,y=6},{m=1,x=13,t=128,c=\" \",b=256,y=6},{m=1,x=14,t=128,c=\" \",b=1,y=6},{m=1,x=15,t=128,c=\" \",b=1,y=6},{m=1,x=16,t=128,c=\" \",b=1,y=6},{m=1,x=17,t=128,c=\" \",b=1,y=6},{m=1,x=18,t=128,c=\" \",b=1,y=6},{m=1,x=19,t=128,c=\" \",b=1,y=6},{m=1,x=20,t=128,c=\" \",b=1,y=6},{m=1,x=21,t=128,c=\" \",b=128,y=6},{m=1,x=22,t=128,c=\" \",b=256,y=6},{m=1,x=23,t=128,c=\" \",b=256,y=6},{m=1,x=24,t=128,c=\" \",b=1,y=6},{m=1,x=10,t=128,c=\" \",b=1,y=7},{m=1,x=11,t=128,c=\" \",b=128,y=7},{m=1,x=12,t=128,c=\" \",b=256,y=7},{m=1,x=13,t=128,c=\" \",b=256,y=7},{m=1,x=14,t=128,c=\" \",b=1,y=7},{m=1,x=20,t=128,c=\" \",b=1,y=7},{m=1,x=21,t=128,c=\" \",b=128,y=7},{m=1,x=22,t=128,c=\" \",b=256,y=7},{m=1,x=23,t=128,c=\" \",b=256,y=7},{m=1,x=24,t=128,c=\" \",b=1,y=7},{m=1,x=10,t=128,c=\" \",b=1,y=8},{m=1,x=11,t=128,c=\" \",b=128,y=8},{m=1,x=12,t=128,c=\" \",b=256,y=8},{m=1,x=13,t=128,c=\" \",b=256,y=8},{m=1,x=14,t=128,c=\" \",b=1,y=8},{m=1,x=20,t=128,c=\" \",b=1,y=8},{m=1,x=21,t=128,c=\" \",b=128,y=8},{m=1,x=22,t=128,c=\" \",b=256,y=8},{m=1,x=23,t=128,c=\" \",b=256,y=8},{m=1,x=24,t=128,c=\" \",b=1,y=8},{m=1,x=10,t=128,c=\" \",b=1,y=9},{m=1,x=11,t=128,c=\" \",b=128,y=9},{m=1,x=12,t=128,c=\" \",b=256,y=9},{m=1,x=13,t=128,c=\" \",b=256,y=9},{m=1,x=14,t=128,c=\" \",b=1,y=9},{m=1,x=15,t=128,c=\" \",b=1,y=9},{m=1,x=16,t=128,c=\" \",b=1,y=9},{m=1,x=17,t=128,c=\" \",b=1,y=9},{m=1,x=18,t=128,c=\" \",b=1,y=9},{m=1,x=19,t=128,c=\" \",b=1,y=9},{m=1,x=20,t=128,c=\" \",b=1,y=9},{m=1,x=21,t=128,c=\" \",b=128,y=9},{m=1,x=22,t=128,c=\" \",b=256,y=9},{m=1,x=23,t=128,c=\" \",b=256,y=9},{m=1,x=24,t=128,c=\" \",b=1,y=9},{m=1,x=10,t=128,c=\" \",b=1,y=10},{m=1,x=11,t=128,c=\" \",b=128,y=10},{m=1,x=12,t=128,c=\" \",b=256,y=10},{m=1,x=13,t=128,c=\" \",b=256,y=10},{m=1,x=14,t=128,c=\" \",b=128,y=10},{m=1,x=15,t=128,c=\" \",b=128,y=10},{m=1,x=16,t=128,c=\" \",b=128,y=10},{m=1,x=17,t=128,c=\" \",b=128,y=10},{m=1,x=18,t=128,c=\" \",b=128,y=10},{m=1,x=19,t=128,c=\" \",b=128,y=10},{m=1,x=20,t=128,c=\" \",b=128,y=10},{m=1,x=21,t=128,c=\" \",b=128,y=10},{m=1,x=22,t=128,c=\" \",b=256,y=10},{m=1,x=23,t=128,c=\" \",b=256,y=10},{m=1,x=24,t=128,c=\" \",b=1,y=10},{m=1,x=10,t=128,c=\" \",b=1,y=11},{m=1,x=11,t=128,c=\" \",b=128,y=11},{m=1,x=12,t=128,c=\" \",b=256,y=11},{m=1,x=13,t=128,c=\" \",b=256,y=11},{m=1,x=14,t=128,c=\" \",b=256,y=11},{m=1,x=15,t=128,c=\" \",b=256,y=11},{m=1,x=16,t=128,c=\" \",b=256,y=11},{m=1,x=17,t=128,c=\" \",b=256,y=11},{m=1,x=18,t=128,c=\" \",b=256,y=11},{m=1,x=19,t=128,c=\" \",b=256,y=11},{m=1,x=20,t=128,c=\" \",b=256,y=11},{m=1,x=21,t=128,c=\" \",b=256,y=11},{m=1,x=22,t=128,c=\" \",b=256,y=11},{m=1,x=23,t=128,c=\" \",b=256,y=11},{m=1,x=24,t=128,c=\" \",b=1,y=11},{m=1,x=10,t=128,c=\" \",b=1,y=12},{m=1,x=11,t=128,c=\" \",b=128,y=12},{m=1,x=12,t=128,c=\" \",b=256,y=12},{m=1,x=13,t=128,c=\" \",b=256,y=12},{m=1,x=14,t=128,c=\" \",b=1,y=12},{m=1,x=15,t=128,c=\" \",b=1,y=12},{m=1,x=16,t=128,c=\" \",b=1,y=12},{m=1,x=17,t=128,c=\" \",b=1,y=12},{m=1,x=18,t=128,c=\" \",b=1,y=12},{m=1,x=19,t=128,c=\" \",b=1,y=12},{m=1,x=20,t=128,c=\" \",b=128,y=12},{m=1,x=21,t=128,c=\" \",b=256,y=12},{m=1,x=22,t=128,c=\" \",b=1,y=12},{m=1,x=23,t=128,c=\" \",b=1,y=12},{m=1,x=24,t=128,c=\" \",b=1,y=12},{m=1,x=10,t=128,c=\" \",b=1,y=13},{m=1,x=11,t=128,c=\" \",b=128,y=13},{m=1,x=12,t=128,c=\" \",b=256,y=13},{m=1,x=13,t=128,c=\" \",b=256,y=13},{m=1,x=14,t=128,c=\" \",b=1,y=13},{m=1,x=19,t=128,c=\" \",b=1,y=13},{m=1,x=20,t=128,c=\" \",b=128,y=13},{m=1,x=21,t=128,c=\" \",b=256,y=13},{m=1,x=22,t=128,c=\" \",b=1,y=13},{m=1,x=10,t=128,c=\" \",b=1,y=14},{m=1,x=11,t=128,c=\" \",b=128,y=14},{m=1,x=12,t=128,c=\" \",b=256,y=14},{m=1,x=13,t=128,c=\" \",b=256,y=14},{m=1,x=14,t=128,c=\" \",b=1,y=14},{m=1,x=19,t=128,c=\" \",b=1,y=14},{m=1,x=20,t=128,c=\" \",b=128,y=14},{m=1,x=21,t=128,c=\" \",b=256,y=14},{m=1,x=22,t=128,c=\" \",b=1,y=14},{m=1,x=23,t=128,c=\" \",b=1,y=14},{m=1,x=24,t=128,c=\" \",b=1,y=14},{m=1,x=10,t=128,c=\" \",b=1,y=15},{m=1,x=11,t=128,c=\" \",b=128,y=15},{m=1,x=12,t=128,c=\" \",b=256,y=15},{m=1,x=13,t=128,c=\" \",b=256,y=15},{m=1,x=14,t=128,c=\" \",b=1,y=15},{m=1,x=19,t=128,c=\" \",b=1,y=15},{m=1,x=20,t=128,c=\" \",b=128,y=15},{m=1,x=21,t=128,c=\" \",b=256,y=15},{m=1,x=22,t=128,c=\" \",b=128,y=15},{m=1,x=23,t=128,c=\" \",b=128,y=15},{m=1,x=24,t=128,c=\" \",b=1,y=15},{m=1,x=10,t=128,c=\" \",b=1,y=16},{m=1,x=11,t=128,c=\" \",b=128,y=16},{m=1,x=12,t=128,c=\" \",b=256,y=16},{m=1,x=13,t=128,c=\" \",b=256,y=16},{m=1,x=14,t=128,c=\" \",b=1,y=16},{m=1,x=19,t=128,c=\" \",b=1,y=16},{m=1,x=20,t=128,c=\" \",b=128,y=16},{m=1,x=21,t=128,c=\" \",b=256,y=16},{m=1,x=22,t=128,c=\" \",b=256,y=16},{m=1,x=23,t=128,c=\" \",b=256,y=16},{m=1,x=24,t=128,c=\" \",b=1,y=16},{m=1,x=10,t=128,c=\" \",b=1,y=17},{m=1,x=11,t=128,c=\" \",b=128,y=17},{m=1,x=12,t=128,c=\" \",b=256,y=17},{m=1,x=13,t=128,c=\" \",b=256,y=17},{m=1,x=14,t=128,c=\" \",b=1,y=17},{m=1,x=19,t=128,c=\" \",b=1,y=17},{m=1,x=20,t=128,c=\" \",b=128,y=17},{m=1,x=21,t=128,c=\" \",b=256,y=17},{m=1,x=22,t=128,c=\" \",b=256,y=17},{m=1,x=23,t=128,c=\" \",b=256,y=17},{m=1,x=24,t=128,c=\" \",b=1,y=17},{m=1,x=10,t=128,c=\" \",b=1,y=18},{m=1,x=11,t=128,c=\" \",b=1,y=18},{m=1,x=12,t=128,c=\" \",b=1,y=18},{m=1,x=13,t=128,c=\" \",b=1,y=18},{m=1,x=14,t=128,c=\" \",b=1,y=18},{m=1,x=19,t=128,c=\" \",b=1,y=18},{m=1,x=20,t=128,c=\" \",b=1,y=18},{m=1,x=21,t=128,c=\" \",b=1,y=18},{m=1,x=22,t=128,c=\" \",b=1,y=18},{m=1,x=23,t=128,c=\" \",b=1,y=18},{m=1,x=24,t=128,c=\" \",b=1,y=18}},{{m=1,b=1,t=128,c=\" \",y=2,x=2},{m=1,b=1,t=128,c=\" \",y=2,x=3},{m=1,b=1,t=128,c=\" \",y=2,x=4},{m=1,b=1,t=128,c=\" \",y=2,x=5},{m=1,b=1,t=128,c=\" \",y=2,x=6},{m=1,b=1,t=128,c=\" \",y=2,x=7},{m=1,b=1,t=128,c=\" \",y=2,x=8},{m=1,b=1,t=128,c=\" \",y=2,x=9},{m=1,b=1,t=128,c=\" \",y=2,x=10},{m=1,b=1,t=128,c=\" \",y=2,x=11},{m=1,b=1,t=128,c=\" \",y=2,x=12},{m=1,b=1,t=128,c=\" \",y=2,x=13},{m=1,b=1,t=128,c=\" \",y=2,x=22},{m=1,b=1,t=128,c=\" \",y=2,x=23},{m=1,b=1,t=128,c=\" \",y=2,x=24},{m=1,b=1,t=128,c=\" \",y=2,x=25},{m=1,b=1,t=128,c=\" \",y=2,x=26},{m=1,b=1,t=128,c=\" \",y=2,x=27},{m=1,b=1,t=128,c=\" \",y=2,x=28},{m=1,b=1,t=128,c=\" \",y=2,x=29},{m=1,b=1,t=128,c=\" \",y=2,x=30},{m=1,b=1,t=128,c=\" \",y=2,x=31},{m=1,b=1,t=128,c=\" \",y=2,x=32},{m=1,b=1,t=128,c=\" \",y=2,x=33},{m=1,b=1,t=128,c=\" \",y=3,x=2},{m=1,b=128,t=128,c=\" \",y=3,x=3},{m=1,b=128,t=128,c=\" \",y=3,x=4},{m=1,b=128,t=128,c=\" \",y=3,x=5},{m=1,b=128,t=128,c=\" \",y=3,x=6},{m=1,b=128,t=128,c=\" \",y=3,x=7},{m=1,b=128,t=128,c=\" \",y=3,x=8},{m=1,b=128,t=128,c=\" \",y=3,x=9},{m=1,b=128,t=128,c=\" \",y=3,x=10},{m=1,b=128,t=128,c=\" \",y=3,x=11},{m=1,b=128,t=128,c=\" \",y=3,x=12},{m=1,b=1,t=128,c=\" \",y=3,x=13},{m=1,b=1,t=128,c=\" \",y=3,x=14},{m=1,b=1,t=128,c=\" \",y=3,x=21},{m=1,b=1,t=128,c=\" \",y=3,x=22},{m=1,b=128,t=128,c=\" \",y=3,x=23},{m=1,b=128,t=128,c=\" \",y=3,x=24},{m=1,b=128,t=128,c=\" \",y=3,x=25},{m=1,b=128,t=128,c=\" \",y=3,x=26},{m=1,b=128,t=128,c=\" \",y=3,x=27},{m=1,b=128,t=128,c=\" \",y=3,x=28},{m=1,b=128,t=128,c=\" \",y=3,x=29},{m=1,b=128,t=128,c=\" \",y=3,x=30},{m=1,b=128,t=128,c=\" \",y=3,x=31},{m=1,b=128,t=128,c=\" \",y=3,x=32},{m=1,b=1,t=128,c=\" \",y=3,x=33},{m=1,b=1,t=128,c=\" \",y=4,x=2},{m=1,b=128,t=128,c=\" \",y=4,x=3},{m=1,b=256,t=128,c=\" \",y=4,x=4},{m=1,b=256,t=128,c=\" \",y=4,x=5},{m=1,b=128,t=128,c=\" \",y=4,x=6},{m=1,b=128,t=128,c=\" \",y=4,x=7},{m=1,b=128,t=128,c=\" \",y=4,x=8},{m=1,b=256,t=128,c=\" \",y=4,x=9},{m=1,b=256,t=128,c=\" \",y=4,x=10},{m=1,b=256,t=128,c=\" \",y=4,x=11},{m=1,b=128,t=128,c=\" \",y=4,x=12},{m=1,b=128,t=128,c=\" \",y=4,x=13},{m=1,b=1,t=128,c=\" \",y=4,x=14},{m=1,b=1,t=128,c=\" \",y=4,x=21},{m=1,b=128,t=128,c=\" \",y=4,x=22},{m=1,b=128,t=128,c=\" \",y=4,x=23},{m=1,b=256,t=128,c=\" \",y=4,x=24},{m=1,b=256,t=128,c=\" \",y=4,x=25},{m=1,b=256,t=128,c=\" \",y=4,x=26},{m=1,b=128,t=128,c=\" \",y=4,x=27},{m=1,b=128,t=128,c=\" \",y=4,x=28},{m=1,b=128,t=128,c=\" \",y=4,x=29},{m=1,b=256,t=128,c=\" \",y=4,x=30},{m=1,b=256,t=128,c=\" \",y=4,x=31},{m=1,b=256,t=128,c=\" \",y=4,x=32},{m=1,b=1,t=128,c=\" \",y=4,x=33},{m=1,b=1,t=128,c=\" \",y=5,x=2},{m=1,b=128,t=128,c=\" \",y=5,x=3},{m=1,b=256,t=128,c=\" \",y=5,x=4},{m=1,b=256,t=128,c=\" \",y=5,x=5},{m=1,b=256,t=128,c=\" \",y=5,x=6},{m=1,b=128,t=128,c=\" \",y=5,x=7},{m=1,b=128,t=128,c=\" \",y=5,x=8},{m=1,b=128,t=128,c=\" \",y=5,x=9},{m=1,b=256,t=128,c=\" \",y=5,x=10},{m=1,b=256,t=128,c=\" \",y=5,x=11},{m=1,b=256,t=128,c=\" \",y=5,x=12},{m=1,b=128,t=128,c=\" \",y=5,x=13},{m=1,b=1,t=128,c=\" \",y=5,x=14},{m=1,b=1,t=128,c=\" \",y=5,x=21},{m=1,b=128,t=128,c=\" \",y=5,x=22},{m=1,b=256,t=128,c=\" \",y=5,x=23},{m=1,b=256,t=128,c=\" \",y=5,x=24},{m=1,b=256,t=128,c=\" \",y=5,x=25},{m=1,b=128,t=128,c=\" \",y=5,x=26},{m=1,b=128,t=128,c=\" \",y=5,x=27},{m=1,b=128,t=128,c=\" \",y=5,x=28},{m=1,b=256,t=128,c=\" \",y=5,x=29},{m=1,b=256,t=128,c=\" \",y=5,x=30},{m=1,b=256,t=128,c=\" \",y=5,x=31},{m=1,b=256,t=128,c=\" \",y=5,x=32},{m=1,b=1,t=128,c=\" \",y=5,x=33},{m=1,b=1,t=128,c=\" \",y=6,x=2},{m=1,b=128,t=128,c=\" \",y=6,x=3},{m=1,b=256,t=128,c=\" \",y=6,x=4},{m=1,b=256,t=128,c=\" \",y=6,x=5},{m=1,b=256,t=128,c=\" \",y=6,x=6},{m=1,b=256,t=128,c=\" \",y=6,x=7},{m=1,b=128,t=128,c=\" \",y=6,x=8},{m=1,b=128,t=128,c=\" \",y=6,x=9},{m=1,b=128,t=128,c=\" \",y=6,x=10},{m=1,b=256,t=128,c=\" \",y=6,x=11},{m=1,b=256,t=128,c=\" \",y=6,x=12},{m=1,b=256,t=128,c=\" \",y=6,x=13},{m=1,b=1,t=128,c=\" \",y=6,x=14},{m=1,b=1,t=128,c=\" \",y=6,x=15},{m=1,b=1,t=128,c=\" \",y=6,x=20},{m=1,b=1,t=128,c=\" \",y=6,x=21},{m=1,b=128,t=128,c=\" \",y=6,x=22},{m=1,b=256,t=128,c=\" \",y=6,x=23},{m=1,b=256,t=128,c=\" \",y=6,x=24},{m=1,b=128,t=128,c=\" \",y=6,x=25},{m=1,b=128,t=128,c=\" \",y=6,x=26},{m=1,b=128,t=128,c=\" \",y=6,x=27},{m=1,b=256,t=128,c=\" \",y=6,x=28},{m=1,b=256,t=128,c=\" \",y=6,x=29},{m=1,b=256,t=128,c=\" \",y=6,x=30},{m=1,b=256,t=128,c=\" \",y=6,x=31},{m=1,b=256,t=128,c=\" \",y=6,x=32},{m=1,b=1,t=128,c=\" \",y=6,x=33},{m=1,b=1,t=128,c=\" \",y=7,x=2},{m=1,b=1,t=128,c=\" \",y=7,x=3},{m=1,b=256,t=128,c=\" \",y=7,x=4},{m=1,b=256,t=128,c=\" \",y=7,x=5},{m=1,b=256,t=128,c=\" \",y=7,x=6},{m=1,b=256,t=128,c=\" \",y=7,x=7},{m=1,b=256,t=128,c=\" \",y=7,x=8},{m=1,b=128,t=128,c=\" \",y=7,x=9},{m=1,b=128,t=128,c=\" \",y=7,x=10},{m=1,b=128,t=128,c=\" \",y=7,x=11},{m=1,b=256,t=128,c=\" \",y=7,x=12},{m=1,b=256,t=128,c=\" \",y=7,x=13},{m=1,b=128,t=128,c=\" \",y=7,x=14},{m=1,b=1,t=128,c=\" \",y=7,x=15},{m=1,b=1,t=128,c=\" \",y=7,x=16},{m=1,b=1,t=128,c=\" \",y=7,x=19},{m=1,b=1,t=128,c=\" \",y=7,x=20},{m=1,b=128,t=128,c=\" \",y=7,x=21},{m=1,b=256,t=128,c=\" \",y=7,x=22},{m=1,b=256,t=128,c=\" \",y=7,x=23},{m=1,b=128,t=128,c=\" \",y=7,x=24},{m=1,b=128,t=128,c=\" \",y=7,x=25},{m=1,b=128,t=128,c=\" \",y=7,x=26},{m=1,b=256,t=128,c=\" \",y=7,x=27},{m=1,b=256,t=128,c=\" \",y=7,x=28},{m=1,b=256,t=128,c=\" \",y=7,x=29},{m=1,b=256,t=128,c=\" \",y=7,x=30},{m=1,b=256,t=128,c=\" \",y=7,x=31},{m=1,b=1,t=128,c=\" \",y=7,x=32},{m=1,b=1,t=128,c=\" \",y=7,x=33},{m=1,b=1,t=128,c=\" \",y=8,x=3},{m=1,b=1,t=128,c=\" \",y=8,x=4},{m=1,b=1,t=128,c=\" \",y=8,x=5},{m=1,b=1,t=128,c=\" \",y=8,x=6},{m=1,b=1,t=128,c=\" \",y=8,x=7},{m=1,b=1,t=128,c=\" \",y=8,x=8},{m=1,b=1,t=128,c=\" \",y=8,x=9},{m=1,b=1,t=128,c=\" \",y=8,x=10},{m=1,b=1,t=128,c=\" \",y=8,x=11},{m=1,b=1,t=128,c=\" \",y=8,x=12},{m=1,b=128,t=128,c=\" \",y=8,x=13},{m=1,b=256,t=128,c=\" \",y=8,x=14},{m=1,b=128,t=128,c=\" \",y=8,x=15},{m=1,b=1,t=128,c=\" \",y=8,x=16},{m=1,b=1,t=128,c=\" \",y=8,x=17},{m=1,b=1,t=128,c=\" \",y=8,x=18},{m=1,b=1,t=128,c=\" \",y=8,x=19},{m=1,b=128,t=128,c=\" \",y=8,x=20},{m=1,b=256,t=128,c=\" \",y=8,x=21},{m=1,b=256,t=128,c=\" \",y=8,x=22},{m=1,b=1,t=128,c=\" \",y=8,x=23},{m=1,b=1,t=128,c=\" \",y=8,x=24},{m=1,b=1,t=128,c=\" \",y=8,x=25},{m=1,b=1,t=128,c=\" \",y=8,x=26},{m=1,b=1,t=128,c=\" \",y=8,x=27},{m=1,b=1,t=128,c=\" \",y=8,x=28},{m=1,b=1,t=128,c=\" \",y=8,x=29},{m=1,b=1,t=128,c=\" \",y=8,x=30},{m=1,b=1,t=128,c=\" \",y=8,x=31},{m=1,b=1,t=128,c=\" \",y=8,x=32},{m=1,b=1,t=128,c=\" \",y=9,x=12},{m=1,b=1,t=128,c=\" \",y=9,x=13},{m=1,b=128,t=128,c=\" \",y=9,x=14},{m=1,b=256,t=128,c=\" \",y=9,x=15},{m=1,b=256,t=128,c=\" \",y=9,x=16},{m=1,b=1,t=128,c=\" \",y=9,x=17},{m=1,b=1,t=128,c=\" \",y=9,x=18},{m=1,b=256,t=128,c=\" \",y=9,x=19},{m=1,b=256,t=128,c=\" \",y=9,x=20},{m=1,b=256,t=128,c=\" \",y=9,x=21},{m=1,b=1,t=128,c=\" \",y=9,x=22},{m=1,b=1,t=128,c=\" \",y=9,x=23},{m=1,b=1,t=128,c=\" \",y=10,x=13},{m=1,b=1,t=128,c=\" \",y=10,x=14},{m=1,b=256,t=128,c=\" \",y=10,x=15},{m=1,b=256,t=128,c=\" \",y=10,x=16},{m=1,b=256,t=128,c=\" \",y=10,x=17},{m=1,b=256,t=128,c=\" \",y=10,x=18},{m=1,b=256,t=128,c=\" \",y=10,x=19},{m=1,b=256,t=128,c=\" \",y=10,x=20},{m=1,b=1,t=128,c=\" \",y=10,x=21},{m=1,b=1,t=128,c=\" \",y=10,x=22},{m=1,b=1,t=128,c=\" \",y=11,x=14},{m=1,b=1,t=128,c=\" \",y=11,x=15},{m=1,b=256,t=128,c=\" \",y=11,x=16},{m=1,b=256,t=128,c=\" \",y=11,x=17},{m=1,b=256,t=128,c=\" \",y=11,x=18},{m=1,b=256,t=128,c=\" \",y=11,x=19},{m=1,b=1,t=128,c=\" \",y=11,x=20},{m=1,b=1,t=128,c=\" \",y=11,x=21},{m=1,b=1,t=128,c=\" \",y=12,x=13},{m=1,b=1,t=128,c=\" \",y=12,x=14},{m=1,b=256,t=128,c=\" \",y=12,x=15},{m=1,b=256,t=128,c=\" \",y=12,x=16},{m=1,b=256,t=128,c=\" \",y=12,x=17},{m=1,b=256,t=128,c=\" \",y=12,x=18},{m=1,b=256,t=128,c=\" \",y=12,x=19},{m=1,b=256,t=128,c=\" \",y=12,x=20},{m=1,b=1,t=128,c=\" \",y=12,x=21},{m=1,b=1,t=128,c=\" \",y=12,x=22},{m=1,b=1,t=128,c=\" \",y=13,x=12},{m=1,b=1,t=128,c=\" \",y=13,x=13},{m=1,b=128,t=128,c=\" \",y=13,x=14},{m=1,b=256,t=128,c=\" \",y=13,x=15},{m=1,b=256,t=128,c=\" \",y=13,x=16},{m=1,b=1,t=128,c=\" \",y=13,x=17},{m=1,b=1,t=128,c=\" \",y=13,x=18},{m=1,b=256,t=128,c=\" \",y=13,x=19},{m=1,b=256,t=128,c=\" \",y=13,x=20},{m=1,b=128,t=128,c=\" \",y=13,x=21},{m=1,b=1,t=128,c=\" \",y=13,x=22},{m=1,b=1,t=128,c=\" \",y=13,x=23},{m=1,b=1,t=128,c=\" \",y=14,x=3},{m=1,b=1,t=128,c=\" \",y=14,x=4},{m=1,b=1,t=128,c=\" \",y=14,x=5},{m=1,b=1,t=128,c=\" \",y=14,x=6},{m=1,b=1,t=128,c=\" \",y=14,x=7},{m=1,b=1,t=128,c=\" \",y=14,x=8},{m=1,b=1,t=128,c=\" \",y=14,x=9},{m=1,b=1,t=128,c=\" \",y=14,x=10},{m=1,b=1,t=128,c=\" \",y=14,x=11},{m=1,b=1,t=128,c=\" \",y=14,x=12},{m=1,b=128,t=128,c=\" \",y=14,x=13},{m=1,b=256,t=128,c=\" \",y=14,x=14},{m=1,b=256,t=128,c=\" \",y=14,x=15},{m=1,b=1,t=128,c=\" \",y=14,x=16},{m=1,b=1,t=128,c=\" \",y=14,x=17},{m=1,b=1,t=128,c=\" \",y=14,x=18},{m=1,b=1,t=128,c=\" \",y=14,x=19},{m=1,b=256,t=128,c=\" \",y=14,x=20},{m=1,b=256,t=128,c=\" \",y=14,x=21},{m=1,b=128,t=128,c=\" \",y=14,x=22},{m=1,b=1,t=128,c=\" \",y=14,x=23},{m=1,b=1,t=128,c=\" \",y=14,x=24},{m=1,b=1,t=128,c=\" \",y=14,x=25},{m=1,b=1,t=128,c=\" \",y=14,x=26},{m=1,b=1,t=128,c=\" \",y=14,x=27},{m=1,b=1,t=128,c=\" \",y=14,x=28},{m=1,b=1,t=128,c=\" \",y=14,x=29},{m=1,b=1,t=128,c=\" \",y=14,x=30},{m=1,b=1,t=128,c=\" \",y=14,x=31},{m=1,b=1,t=128,c=\" \",y=14,x=32},{m=1,b=1,t=128,c=\" \",y=15,x=2},{m=1,b=1,t=128,c=\" \",y=15,x=3},{m=1,b=128,t=128,c=\" \",y=15,x=4},{m=1,b=128,t=128,c=\" \",y=15,x=5},{m=1,b=128,t=128,c=\" \",y=15,x=6},{m=1,b=128,t=128,c=\" \",y=15,x=7},{m=1,b=128,t=128,c=\" \",y=15,x=8},{m=1,b=128,t=128,c=\" \",y=15,x=9},{m=1,b=128,t=128,c=\" \",y=15,x=10},{m=1,b=128,t=128,c=\" \",y=15,x=11},{m=1,b=128,t=128,c=\" \",y=15,x=12},{m=1,b=256,t=128,c=\" \",y=15,x=13},{m=1,b=256,t=128,c=\" \",y=15,x=14},{m=1,b=1,t=128,c=\" \",y=15,x=15},{m=1,b=1,t=128,c=\" \",y=15,x=16},{m=1,b=1,t=128,c=\" \",y=15,x=19},{m=1,b=1,t=128,c=\" \",y=15,x=20},{m=1,b=256,t=128,c=\" \",y=15,x=21},{m=1,b=256,t=128,c=\" \",y=15,x=22},{m=1,b=128,t=128,c=\" \",y=15,x=23},{m=1,b=128,t=128,c=\" \",y=15,x=24},{m=1,b=128,t=128,c=\" \",y=15,x=25},{m=1,b=128,t=128,c=\" \",y=15,x=26},{m=1,b=128,t=128,c=\" \",y=15,x=27},{m=1,b=128,t=128,c=\" \",y=15,x=28},{m=1,b=128,t=128,c=\" \",y=15,x=29},{m=1,b=128,t=128,c=\" \",y=15,x=30},{m=1,b=128,t=128,c=\" \",y=15,x=31},{m=1,b=1,t=128,c=\" \",y=15,x=32},{m=1,b=1,t=128,c=\" \",y=15,x=33},{m=1,b=1,t=128,c=\" \",y=16,x=2},{m=1,b=128,t=128,c=\" \",y=16,x=3},{m=1,b=256,t=128,c=\" \",y=16,x=4},{m=1,b=256,t=128,c=\" \",y=16,x=5},{m=1,b=256,t=128,c=\" \",y=16,x=6},{m=1,b=256,t=128,c=\" \",y=16,x=7},{m=1,b=128,t=128,c=\" \",y=16,x=8},{m=1,b=128,t=128,c=\" \",y=16,x=9},{m=1,b=128,t=128,c=\" \",y=16,x=10},{m=1,b=256,t=128,c=\" \",y=16,x=11},{m=1,b=256,t=128,c=\" \",y=16,x=12},{m=1,b=256,t=128,c=\" \",y=16,x=13},{m=1,b=1,t=128,c=\" \",y=16,x=14},{m=1,b=1,t=128,c=\" \",y=16,x=15},{m=1,b=1,t=128,c=\" \",y=16,x=20},{m=1,b=1,t=128,c=\" \",y=16,x=21},{m=1,b=128,t=128,c=\" \",y=16,x=22},{m=1,b=256,t=128,c=\" \",y=16,x=23},{m=1,b=256,t=128,c=\" \",y=16,x=24},{m=1,b=128,t=128,c=\" \",y=16,x=25},{m=1,b=128,t=128,c=\" \",y=16,x=26},{m=1,b=128,t=128,c=\" \",y=16,x=27},{m=1,b=256,t=128,c=\" \",y=16,x=28},{m=1,b=256,t=128,c=\" \",y=16,x=29},{m=1,b=256,t=128,c=\" \",y=16,x=30},{m=1,b=256,t=128,c=\" \",y=16,x=31},{m=1,b=128,t=128,c=\" \",y=16,x=32},{m=1,b=1,t=128,c=\" \",y=16,x=33},{m=1,b=1,t=128,c=\" \",y=17,x=2},{m=1,b=128,t=128,c=\" \",y=17,x=3},{m=1,b=256,t=128,c=\" \",y=17,x=4},{m=1,b=256,t=128,c=\" \",y=17,x=5},{m=1,b=256,t=128,c=\" \",y=17,x=6},{m=1,b=128,t=128,c=\" \",y=17,x=7},{m=1,b=128,t=128,c=\" \",y=17,x=8},{m=1,b=128,t=128,c=\" \",y=17,x=9},{m=1,b=256,t=128,c=\" \",y=17,x=10},{m=1,b=256,t=128,c=\" \",y=17,x=11},{m=1,b=256,t=128,c=\" \",y=17,x=12},{m=1,b=128,t=128,c=\" \",y=17,x=13},{m=1,b=1,t=128,c=\" \",y=17,x=14},{m=1,b=1,t=128,c=\" \",y=17,x=21},{m=1,b=128,t=128,c=\" \",y=17,x=22},{m=1,b=256,t=128,c=\" \",y=17,x=23},{m=1,b=256,t=128,c=\" \",y=17,x=24},{m=1,b=256,t=128,c=\" \",y=17,x=25},{m=1,b=128,t=128,c=\" \",y=17,x=26},{m=1,b=128,t=128,c=\" \",y=17,x=27},{m=1,b=128,t=128,c=\" \",y=17,x=28},{m=1,b=256,t=128,c=\" \",y=17,x=29},{m=1,b=256,t=128,c=\" \",y=17,x=30},{m=1,b=256,t=128,c=\" \",y=17,x=31},{m=1,b=256,t=128,c=\" \",y=17,x=32},{m=1,b=1,t=128,c=\" \",y=17,x=33},{m=1,b=1,t=128,c=\" \",y=18,x=2},{m=1,b=128,t=128,c=\" \",y=18,x=3},{m=1,b=256,t=128,c=\" \",y=18,x=4},{m=1,b=256,t=128,c=\" \",y=18,x=5},{m=1,b=128,t=128,c=\" \",y=18,x=6},{m=1,b=128,t=128,c=\" \",y=18,x=7},{m=1,b=128,t=128,c=\" \",y=18,x=8},{m=1,b=256,t=128,c=\" \",y=18,x=9},{m=1,b=256,t=128,c=\" \",y=18,x=10},{m=1,b=256,t=128,c=\" \",y=18,x=11},{m=1,b=128,t=128,c=\" \",y=18,x=12},{m=1,b=128,t=128,c=\" \",y=18,x=13},{m=1,b=1,t=128,c=\" \",y=18,x=14},{m=1,b=1,t=128,c=\" \",y=18,x=21},{m=1,b=128,t=128,c=\" \",y=18,x=22},{m=1,b=128,t=128,c=\" \",y=18,x=23},{m=1,b=256,t=128,c=\" \",y=18,x=24},{m=1,b=256,t=128,c=\" \",y=18,x=25},{m=1,b=256,t=128,c=\" \",y=18,x=26},{m=1,b=128,t=128,c=\" \",y=18,x=27},{m=1,b=128,t=128,c=\" \",y=18,x=28},{m=1,b=128,t=128,c=\" \",y=18,x=29},{m=1,b=256,t=128,c=\" \",y=18,x=30},{m=1,b=256,t=128,c=\" \",y=18,x=31},{m=1,b=256,t=128,c=\" \",y=18,x=32},{m=1,b=1,t=128,c=\" \",y=18,x=33},{m=1,b=1,t=128,c=\" \",y=19,x=2},{m=1,b=128,t=128,c=\" \",y=19,x=3},{m=1,b=256,t=128,c=\" \",y=19,x=4},{m=1,b=128,t=128,c=\" \",y=19,x=5},{m=1,b=128,t=128,c=\" \",y=19,x=6},{m=1,b=128,t=128,c=\" \",y=19,x=7},{m=1,b=256,t=128,c=\" \",y=19,x=8},{m=1,b=256,t=128,c=\" \",y=19,x=9},{m=1,b=256,t=128,c=\" \",y=19,x=10},{m=1,b=128,t=128,c=\" \",y=19,x=11},{m=1,b=128,t=128,c=\" \",y=19,x=12},{m=1,b=1,t=128,c=\" \",y=19,x=13},{m=1,b=1,t=128,c=\" \",y=19,x=14},{m=1,b=1,t=128,c=\" \",y=19,x=21},{m=1,b=1,t=128,c=\" \",y=19,x=22},{m=1,b=128,t=128,c=\" \",y=19,x=23},{m=1,b=128,t=128,c=\" \",y=19,x=24},{m=1,b=256,t=128,c=\" \",y=19,x=25},{m=1,b=256,t=128,c=\" \",y=19,x=26},{m=1,b=128,t=128,c=\" \",y=19,x=27},{m=1,b=128,t=128,c=\" \",y=19,x=28},{m=1,b=128,t=128,c=\" \",y=19,x=29},{m=1,b=128,t=128,c=\" \",y=19,x=30},{m=1,b=256,t=128,c=\" \",y=19,x=31},{m=1,b=256,t=128,c=\" \",y=19,x=32},{m=1,b=1,t=128,c=\" \",y=19,x=33},{m=1,b=1,t=128,c=\" \",y=20,x=2},{m=1,b=1,t=128,c=\" \",y=20,x=3},{m=1,b=1,t=128,c=\" \",y=20,x=4},{m=1,b=1,t=128,c=\" \",y=20,x=5},{m=1,b=1,t=128,c=\" \",y=20,x=6},{m=1,b=1,t=128,c=\" \",y=20,x=7},{m=1,b=1,t=128,c=\" \",y=20,x=8},{m=1,b=1,t=128,c=\" \",y=20,x=9},{m=1,b=1,t=128,c=\" \",y=20,x=10},{m=1,b=1,t=128,c=\" \",y=20,x=11},{m=1,b=1,t=128,c=\" \",y=20,x=12},{m=1,b=1,t=128,c=\" \",y=20,x=13},{m=1,b=1,t=128,c=\" \",y=20,x=22},{m=1,b=1,t=128,c=\" \",y=20,x=23},{m=1,b=1,t=128,c=\" \",y=20,x=24},{m=1,b=1,t=128,c=\" \",y=20,x=25},{m=1,b=1,t=128,c=\" \",y=20,x=26},{m=1,b=1,t=128,c=\" \",y=20,x=27},{m=1,b=1,t=128,c=\" \",y=20,x=28},{m=1,b=1,t=128,c=\" \",y=20,x=29},{m=1,b=1,t=128,c=\" \",y=20,x=30},{m=1,b=1,t=128,c=\" \",y=20,x=31},{m=1,b=1,t=128,c=\" \",y=20,x=32},{m=1,b=1,t=128,c=\" \",y=20,x=33}}}",
| |
| 162 | }, | |
| 163 | pain = {
| |
| 164 | "--[[", | |
| 165 | " PAIN picture editor for ComputerCraft", | |
| 166 | " Get it with", | |
| 167 | " pastebin get wJQ7jav0 pain", | |
| 168 | " std pb wJQ7jav0 pain", | |
| 169 | " std ld pain pain", | |
| 170 | " ", | |
| 171 | " This is a stable release. You fool!", | |
| 172 | "--]]", | |
| 173 | "", | |
| 174 | "local displayHelp = function()", | |
| 175 | " local progname = fs.getName(shell.getRunningProgram())", | |
| 176 | " print(progname..\" <filename>\")", | |
| 177 | " print(\"Press F1 in program for more.\")", | |
| 178 | "end", | |
| 179 | "", | |
| 180 | "local pMode = 0", | |
| 181 | "", | |
| 182 | "local tArg = {...}",
| |
| 183 | "if (not tArg[1]) and shell then", | |
| 184 | " return displayHelp()", | |
| 185 | "end", | |
| 186 | "", | |
| 187 | "if tArg[2] == \"view\" then", | |
| 188 | " pMode = 1", | |
| 189 | "elseif tArg[2] == \"moo\" then", | |
| 190 | " return print(\"This PAIN does not have Super Cow Powers.\")", | |
| 191 | "end", | |
| 192 | "", | |
| 193 | "local fileName", | |
| 194 | "if not term.isColor() then", | |
| 195 | " error(\"Only for Advanced computers\")", | |
| 196 | "end", | |
| 197 | "local barmsg = \"Press F1 for help.\"", | |
| 198 | "local tse = textutils.serialise", | |
| 199 | "local tun = textutils.unserialise", | |
| 200 | "local paintEncoded", | |
| 201 | "local lastPaintEncoded", | |
| 202 | "local frame = 1", | |
| 203 | "local doRender = false", | |
| 204 | "local metaHistory = {}",
| |
| 205 | "local bepimode = false --this is a family-friendly program! now stand still while I murder you", | |
| 206 | "local evenDrawGrid = true --will you evenDraw(the)Grid ?", | |
| 207 | "local renderBlittle = false --whether or not to render all in blittle", | |
| 208 | "local firstTerm, blittleTerm = term.current()", | |
| 209 | "local firstBG = term.getBackgroundColor()", | |
| 210 | "local firstTX = term.getTextColor()", | |
| 211 | "", | |
| 212 | "local grid", | |
| 213 | "", | |
| 214 | "local yield = function()", | |
| 215 | " os.queueEvent(\"yield\")", | |
| 216 | " os.pullEvent(\"yield\")", | |
| 217 | "end", | |
| 218 | "", | |
| 219 | "local paint = {",
| |
| 220 | " scrollX = 0,", | |
| 221 | " scrollY = 0,", | |
| 222 | " t = colors.gray,", | |
| 223 | " b = colors.white,", | |
| 224 | " m = 1, --in case you want to use PAIN as a level editor or something", | |
| 225 | " c = \" \",", | |
| 226 | " doGray = false,", | |
| 227 | "}", | |
| 228 | "", | |
| 229 | "local scr_x, scr_y = term.getSize()", | |
| 230 | "local scrollX, scrollY = 0, 0", | |
| 231 | "", | |
| 232 | "local keysDown = {}",
| |
| 233 | "local miceDown = {}",
| |
| 234 | "", | |
| 235 | "local doRenderBar = 1 -- 1 and 0. Not true or false", | |
| 236 | "", | |
| 237 | "local fixstr = function(str)", | |
| 238 | " return str:gsub(\"\\\\(%d%d%d)\",string.char)", | |
| 239 | "end", | |
| 240 | "", | |
| 241 | "local choice = function(input,breakkeys)", | |
| 242 | " repeat", | |
| 243 | " event, key = os.pullEvent(\"key\")", | |
| 244 | " if type(key) == \"number\" then key = keys.getName(key) end", | |
| 245 | " if key == nil then key = \" \" end", | |
| 246 | " if type(breakkeys) == \"table\" then", | |
| 247 | " for a = 1, #breakkeys do", | |
| 248 | " if key == breakkeys[a] then", | |
| 249 | " return \"\"", | |
| 250 | " end", | |
| 251 | " end", | |
| 252 | " end", | |
| 253 | " until string.find(input, key)", | |
| 254 | " return key", | |
| 255 | "end", | |
| 256 | "local explode = function(div,str)", | |
| 257 | " if (div=='') then return false end", | |
| 258 | " local pos,arr = 0,{}",
| |
| 259 | " for st,sp in function() return string.find(str,div,pos,true) end do", | |
| 260 | " table.insert(arr,str:sub(pos,st-1))", | |
| 261 | " pos = sp + 1", | |
| 262 | " end", | |
| 263 | " table.insert(arr,str:sub(pos))", | |
| 264 | " return arr", | |
| 265 | "end", | |
| 266 | "", | |
| 267 | "local function cutString(max_line_length, str) --from stack overflow", | |
| 268 | " local lines = {}",
| |
| 269 | " local line", | |
| 270 | " str:gsub('(%s*)(%S+)', ",
| |
| 271 | " function(spc, word) ", | |
| 272 | " if not line or #line + #spc + #word > max_line_length then", | |
| 273 | " table.insert(lines, line)", | |
| 274 | " line = word", | |
| 275 | " else", | |
| 276 | " line = line..spc..word", | |
| 277 | " end", | |
| 278 | " end", | |
| 279 | " )", | |
| 280 | " table.insert(lines, line)", | |
| 281 | " return lines", | |
| 282 | "end", | |
| 283 | "", | |
| 284 | "local cutUp = function(len,tbl)", | |
| 285 | " local output = {}",
| |
| 286 | " local e = 0", | |
| 287 | " local s", | |
| 288 | " for a = 1, #tbl do", | |
| 289 | " if #(tbl[a]:gsub(\" \",\"\")) == 0 then", | |
| 290 | " s = {\"\"}",
| |
| 291 | " else", | |
| 292 | " s = cutString(len,tbl[a])", | |
| 293 | " end", | |
| 294 | " for b = 1, #s do", | |
| 295 | " table.insert(output,s[b])", | |
| 296 | " end", | |
| 297 | " end", | |
| 298 | " return output", | |
| 299 | "end", | |
| 300 | "", | |
| 301 | "local getEvents = function(...)", | |
| 302 | " local output", | |
| 303 | " while true do", | |
| 304 | " output = {os.pullEvent()}",
| |
| 305 | " for a = 1, #arg do", | |
| 306 | " if type(arg[a]) == \"boolean\" then", | |
| 307 | " if doRender == arg[a] then", | |
| 308 | " return {}",
| |
| 309 | " end", | |
| 310 | " elseif output[1] == arg[a] then", | |
| 311 | " return unpack(output)", | |
| 312 | " end", | |
| 313 | " end", | |
| 314 | " end", | |
| 315 | "end", | |
| 316 | "", | |
| 317 | "local sanitize = function(sani,tize)", | |
| 318 | " local _,x = string.find(sani,tize)", | |
| 319 | " if x then", | |
| 320 | " return sani:sub(x+1)", | |
| 321 | " else", | |
| 322 | " return sani", | |
| 323 | " end", | |
| 324 | "end", | |
| 325 | "local ro = function(input, max)", | |
| 326 | " return math.floor(input % max)", | |
| 327 | "end", | |
| 328 | "", | |
| 329 | "local guiHelp = function()", | |
| 330 | " term.redirect(firstTerm)", | |
| 331 | " scr_x, scr_y = term.current().getSize()", | |
| 332 | " local _helpText = [[", | |
| 333 | "", | |
| 334 | " 'PAIN' Help Page", | |
| 335 | "Programmed by LDDestroier/EldidiStroyrr", | |
| 336 | "", | |
| 337 | "(use UP/DOWN or scrollwheel, exit with Q)", | |
| 338 | "If you want to use PAIN to its full capacity, then READ EVERYTHING HERE! It's not TOO long, and it's completely worth it!", | |
| 339 | "", | |
| 340 | "Syntax:", | |
| 341 | ">pain <filename> [view]", | |
| 342 | "", | |
| 343 | "[view]: disable all writing capability to view a file", | |
| 344 | "", | |
| 345 | "You can see what colors are selected based on the word \"PAIN\" on the hotbar.", | |
| 346 | "", | |
| 347 | "Hotkeys:", | |
| 348 | " left/right ctrl: toggle the menu", | |
| 349 | "", | |
| 350 | " left click:", | |
| 351 | " +shift = drag and let go to make a line", | |
| 352 | " -alone = place pixel", | |
| 353 | "", | |
| 354 | " right click: delete pixel", | |
| 355 | "", | |
| 356 | " middle click OR \"t\": place text down with current colors", | |
| 357 | "", | |
| 358 | " \"[\" or mouse scroll down:", | |
| 359 | " +shift = change to previous text color", | |
| 360 | " -alone = change to previous background color", | |
| 361 | "", | |
| 362 | " \"]\" or mouse scroll up:", | |
| 363 | " +shift = change to next text color", | |
| 364 | " -alone = change to next background color", | |
| 365 | "", | |
| 366 | " spacebar:", | |
| 367 | " +shift = toggle grid", | |
| 368 | " -alone = toggle bar visibility", | |
| 369 | "", | |
| 370 | " arrowkeys:", | |
| 371 | " +shift = move entire picture", | |
| 372 | " +tab = move one pixel at a time", | |
| 373 | " -alone = looks around the canvas smoothly", | |
| 374 | "", | |
| 375 | " \"+\" (or equals):", | |
| 376 | " +left alt = swap the current frame with the next frame", | |
| 377 | " -alone = change to next frame", | |
| 378 | "", | |
| 379 | " \"-\":", | |
| 380 | " +left alt = swap the current frame with the previous frame", | |
| 381 | " -alone = change to previous frame", | |
| 382 | "", | |
| 383 | " \"a\": set the coordinates to 0,0", | |
| 384 | "", | |
| 385 | " \"b\": toggle redirect to blittle, to preview in teletext characters", | |
| 386 | "", | |
| 387 | " \"c\": input coordinates to move the canvas to", | |
| 388 | "", | |
| 389 | " \"g\": toggle grayscale mode. everything is in shades of gray. if you Save, it saves in grayscale.", | |
| 390 | "", | |
| 391 | " \"f\":", | |
| 392 | " +shift = fill all empty pixels with background color", | |
| 393 | " -alone = absolutely nothing", | |
| 394 | "", | |
| 395 | " \"m\": set metadata for pixels (for game makers, otherwise safe to ignore)", | |
| 396 | "", | |
| 397 | "", | |
| 398 | " Le Menu (access with CTRL):", | |
| 399 | "", | |
| 400 | " -left click on a menu item to select it.", | |
| 401 | " -if you click on the menubar, let go on an option to select it.", | |
| 402 | "", | |
| 403 | " \"Save\"", | |
| 404 | " Saves all frames to a specially formatted PAIN paint file. The format PAIN uses is very inefficient despite my best efforts, so Export if you don't use text or multiple frame.", | |
| 405 | "", | |
| 406 | " \"Export\"", | |
| 407 | " Exports current frame to the basic paint format, which doesn't save text, but is WAY more space-efficient. Specify a path, too.", | |
| 408 | "", | |
| 409 | " \"Del. Frame\"", | |
| 410 | " Deletes the current frame. Tells you off if you try to delete the only frame.", | |
| 411 | "", | |
| 412 | " \"Clear\"", | |
| 413 | " Deletes all pixels on the current frame.", | |
| 414 | "", | |
| 415 | " \"Exit\"", | |
| 416 | " Durr I dunno, I think it exits.", | |
| 417 | "", | |
| 418 | "", | |
| 419 | "I hope my PAIN causes you joy.", | |
| 420 | "]]", | |
| 421 | " _helpText = explode(\"\\n\",_helpText)", | |
| 422 | " helpText = cutUp(scr_x,_helpText)", | |
| 423 | " local helpscroll = 0", | |
| 424 | " term.setBackgroundColor(colors.gray)", | |
| 425 | " term.setTextColor(colors.white)", | |
| 426 | " term.clear()", | |
| 427 | " local evt, key", | |
| 428 | " while true do", | |
| 429 | " term.clear()", | |
| 430 | " for a = 1, scr_y do", | |
| 431 | " term.setCursorPos(1,a)", | |
| 432 | " term.clearLine()", | |
| 433 | " term.write(helpText[a-helpscroll] or \"\")", | |
| 434 | " end", | |
| 435 | " repeat", | |
| 436 | " evt,key = os.pullEvent()", | |
| 437 | " until evt == \"key\" or evt == \"mouse_scroll\"", | |
| 438 | " if evt == \"key\" then", | |
| 439 | " if key == keys.up then", | |
| 440 | " helpscroll = helpscroll + 1", | |
| 441 | " elseif key == keys.down then", | |
| 442 | " helpscroll = helpscroll - 1", | |
| 443 | " elseif key == keys.pageUp then", | |
| 444 | " helpscroll = helpscroll + scr_y", | |
| 445 | " elseif key == keys.pageDown then", | |
| 446 | " helpscroll = helpscroll - scr_y", | |
| 447 | " elseif (key == keys.q) or (key == keys.space) then", | |
| 448 | " doRender = true", | |
| 449 | " if renderBlittle then term.redirect(blittleTerm) end", | |
| 450 | " scr_x, scr_y = term.current().getSize()", | |
| 451 | " return", | |
| 452 | " end", | |
| 453 | " elseif evt == \"mouse_scroll\" then", | |
| 454 | " helpscroll = helpscroll - key", | |
| 455 | " end", | |
| 456 | " if helpscroll > 0 then", | |
| 457 | " helpscroll = 0", | |
| 458 | " elseif helpscroll < -(#helpText-(scr_y-3)) then", | |
| 459 | " helpscroll = -(#helpText-(scr_y-3))", | |
| 460 | " end", | |
| 461 | " end", | |
| 462 | "end", | |
| 463 | "", | |
| 464 | "local tableRemfind = function(tbl, str)", | |
| 465 | " local out = tbl", | |
| 466 | " for a = 1, #tbl do", | |
| 467 | " if tbl[a] == str then", | |
| 468 | " table.remove(out,a)", | |
| 469 | " return out,a", | |
| 470 | " end", | |
| 471 | " end", | |
| 472 | " return {}",
| |
| 473 | "end", | |
| 474 | "", | |
| 475 | "local stringShift = function(str,amt)", | |
| 476 | " return str:sub(ro(amt-1,#str)+1)..str:sub(1,ro(amt-1,#str))", | |
| 477 | "end", | |
| 478 | "", | |
| 479 | "local deepCopy", | |
| 480 | "deepCopy = function(obj)", | |
| 481 | " if type(obj) ~= 'table' then return obj end", | |
| 482 | " local res = {}",
| |
| 483 | " for k, v in pairs(obj) do res[deepCopy(k)] = deepCopy(v) end", | |
| 484 | " return res", | |
| 485 | "end", | |
| 486 | "", | |
| 487 | "local renderBottomBar = function(txt)", | |
| 488 | " term.setCursorPos(1,scr_y)", | |
| 489 | " term.setBackgroundColor(colors.lightGray)", | |
| 490 | " term.setTextColor(colors.black)", | |
| 491 | " term.clearLine()", | |
| 492 | " term.write(txt)", | |
| 493 | "end", | |
| 494 | "", | |
| 495 | "local bottomPrompt = function(txt,history,cho,breakkeys)", | |
| 496 | " renderBottomBar(txt)", | |
| 497 | " local out", | |
| 498 | " sleep(0)", | |
| 499 | " if cho then", | |
| 500 | " out = choice(cho,breakkeys)", | |
| 501 | " else", | |
| 502 | " out = read(_,history)", | |
| 503 | " end", | |
| 504 | " return out", | |
| 505 | "end", | |
| 506 | "", | |
| 507 | "local getDotsInLine = function( startX, startY, endX, endY ) --stolen from the paintutils API...hehehe", | |
| 508 | " local out = {}",
| |
| 509 | " ", | |
| 510 | " startX = math.floor(startX)", | |
| 511 | " startY = math.floor(startY)", | |
| 512 | " endX = math.floor(endX)", | |
| 513 | " endY = math.floor(endY)", | |
| 514 | "", | |
| 515 | " if startX == endX and startY == endY then", | |
| 516 | " out = {{x=startX,y=startY}}",
| |
| 517 | " return out", | |
| 518 | " end", | |
| 519 | " ", | |
| 520 | " local minX = math.min( startX, endX )", | |
| 521 | " if minX == startX then", | |
| 522 | " minY = startY", | |
| 523 | " maxX = endX", | |
| 524 | " maxY = endY", | |
| 525 | " else", | |
| 526 | " minY = endY", | |
| 527 | " maxX = startX", | |
| 528 | " maxY = startY", | |
| 529 | " end", | |
| 530 | " ", | |
| 531 | " local xDiff = maxX - minX", | |
| 532 | " local yDiff = maxY - minY", | |
| 533 | " ", | |
| 534 | " if xDiff > math.abs(yDiff) then", | |
| 535 | " local y = minY", | |
| 536 | " local dy = yDiff / xDiff", | |
| 537 | " for x=minX,maxX do", | |
| 538 | " table.insert(out,{x=x,y=math.floor(y+0.5)})",
| |
| 539 | " y = y + dy", | |
| 540 | " end", | |
| 541 | " else", | |
| 542 | " local x = minX", | |
| 543 | " local dx = xDiff / yDiff", | |
| 544 | " if maxY >= minY then", | |
| 545 | " for y=minY,maxY do", | |
| 546 | " table.insert(out,{x=math.floor(x+0.5),y=y})",
| |
| 547 | " x = x + dx", | |
| 548 | " end", | |
| 549 | " else", | |
| 550 | " for y=minY,maxY,-1 do", | |
| 551 | " table.insert(out,{x=math.floor(x+0.5),y=y})",
| |
| 552 | " x = x - dx", | |
| 553 | " end", | |
| 554 | " end", | |
| 555 | " end", | |
| 556 | " return out", | |
| 557 | "end", | |
| 558 | "", | |
| 559 | "local movePaintEncoded = function(pe,xdiff,ydiff)", | |
| 560 | " local outpootis = deepCopy(pe)", | |
| 561 | " for a = 1, #outpootis do", | |
| 562 | " outpootis[a].x = outpootis[a].x+xdiff", | |
| 563 | " outpootis[a].y = outpootis[a].y+ydiff", | |
| 564 | " end", | |
| 565 | " return outpootis", | |
| 566 | "end", | |
| 567 | "", | |
| 568 | "local clearRedundant = function(dots)", | |
| 569 | " local input = {}",
| |
| 570 | " local pheight = 0", | |
| 571 | " local pwidth = 0", | |
| 572 | " for a = 1, #dots do", | |
| 573 | " if dots[a].y > pheight then", | |
| 574 | " pheight = dots[a].y", | |
| 575 | " end", | |
| 576 | " if dots[a].x > pwidth then", | |
| 577 | " pwidth = dots[a].x", | |
| 578 | " end", | |
| 579 | " end", | |
| 580 | " for a = 1, #dots do", | |
| 581 | " if not input[dots[a].y] then input[dots[a].y] = {} end",
| |
| 582 | " input[dots[a].y][dots[a].x] = dots[a]", | |
| 583 | " end", | |
| 584 | " local output = {}",
| |
| 585 | " local frame = 0", | |
| 586 | " for y = 1, pheight do", | |
| 587 | " for x = 1, pwidth do", | |
| 588 | " if input[y] then", | |
| 589 | " if input[y][x] then", | |
| 590 | " table.insert(output,input[y][x])", | |
| 591 | " end", | |
| 592 | " end", | |
| 593 | " if frame >= 50 then", | |
| 594 | " --yield()", | |
| 595 | " frame = 0", | |
| 596 | " end", | |
| 597 | " end", | |
| 598 | " end", | |
| 599 | " return output", | |
| 600 | "end", | |
| 601 | "", | |
| 602 | "local grayOut = function(color)", | |
| 603 | " local c = deepCopy(_G.colors)", | |
| 604 | " local grays = {",
| |
| 605 | " [c.white] = c.white,", | |
| 606 | " [c.orange] = c.lightGray,", | |
| 607 | " [c.magenta] = c.lightGray,", | |
| 608 | " [c.lightBlue] = c.lightGray,", | |
| 609 | " [c.yellow] = c.white,", | |
| 610 | " [c.lime] = c.lightGray,", | |
| 611 | " [c.pink] = c.lightGray,", | |
| 612 | " [c.gray] = c.gray,", | |
| 613 | " [c.lightGray] = c.lightGray,", | |
| 614 | " [c.cyan] = c.lightGray,", | |
| 615 | " [c.purple] = c.gray,", | |
| 616 | " [c.blue] = c.gray,", | |
| 617 | " [c.brown] = c.gray,", | |
| 618 | " [c.green] = c.lightGray,", | |
| 619 | " [c.red] = c.gray,", | |
| 620 | " [c.black] = c.black,", | |
| 621 | " }", | |
| 622 | " local newColor = grays[color] or 1", | |
| 623 | " return newColor", | |
| 624 | "end", | |
| 625 | "", | |
| 626 | "local getOnscreenCoords = function(tbl,_x,_y)", | |
| 627 | " local screenTbl = {}",
| |
| 628 | " for a = 1, #tbl do", | |
| 629 | " if tbl[a].x+paint.scrollX > 0 and tbl[a].x+paint.scrollX <= scr_x then", | |
| 630 | " if tbl[a].y+paint.scrollY > 0 and tbl[a].y+paint.scrollY <= scr_y then", | |
| 631 | " table.insert(screenTbl,{tbl[a].x+paint.scrollX,tbl[a].y+paint.scrollY})",
| |
| 632 | " end", | |
| 633 | " end", | |
| 634 | " end", | |
| 635 | " if not _x and _y then", | |
| 636 | " return screenTbl", | |
| 637 | " else", | |
| 638 | " for a = 1, #screenTbl do", | |
| 639 | " if screenTbl[a][1] == _x and screenTbl[a][2] == _y then", | |
| 640 | " return true", | |
| 641 | " end", | |
| 642 | " end", | |
| 643 | " return false", | |
| 644 | " end", | |
| 645 | "end", | |
| 646 | "", | |
| 647 | "local fillTool = function(info,cx,cy,color,layer) --takes a frame, not the whole paintEncoded", | |
| 648 | " local x,y", | |
| 649 | " local output = {}",
| |
| 650 | " for a = 1, #info do", | |
| 651 | " if (info[a].x == cx) and (info[a].y == cy) then", | |
| 652 | " x = cx", | |
| 653 | " y = cy", | |
| 654 | " replaceColor = info[a].b", | |
| 655 | " break", | |
| 656 | " end", | |
| 657 | " end", | |
| 658 | " if not x and y then", | |
| 659 | " return", | |
| 660 | " end", | |
| 661 | " if color == replaceColor then", | |
| 662 | " return", | |
| 663 | " end", | |
| 664 | " table.insert(output,{",
| |
| 665 | " [\"x\"] = x,", | |
| 666 | " [\"y\"] = y,", | |
| 667 | " [\"b\"] = color,", | |
| 668 | " [\"t\"] = color,", | |
| 669 | " [\"c\"] = \" \",", | |
| 670 | " [\"m\"] = paint.m", | |
| 671 | " })", | |
| 672 | " local loops = 0", | |
| 673 | " local tAffectedPoints = {",
| |
| 674 | " [1] = {",
| |
| 675 | " x = x+tTerm.scroll.x,", | |
| 676 | " z = z+tTerm.scroll.z", | |
| 677 | " }", | |
| 678 | " }", | |
| 679 | " while #tAffectedPoints > 0 do", | |
| 680 | " if loops%200 == 0 then", | |
| 681 | " sleep(0.05)", | |
| 682 | " end", | |
| 683 | " for i=-1,1,2 do", | |
| 684 | " local x = tAffectedPoints[1][\"x\"]+i", | |
| 685 | " local z = tAffectedPoints[1][\"z\"]", | |
| 686 | " if tBlueprint[layer][x][z] == replaceColor and x >= tTerm.viewable.sX and x <= tTerm.viewable.eX and z >= tTerm.viewable.sZ and z <= tTerm.viewable.eZ then", | |
| 687 | " drawPoint(x,z,color,layer,true,true)", | |
| 688 | " table.insert(tAffectedPoints,{[\"x\"] = x,[\"z\"] = z})",
| |
| 689 | " end", | |
| 690 | " x = tAffectedPoints[1][\"x\"]", | |
| 691 | " z = tAffectedPoints[1][\"z\"]+i", | |
| 692 | " if tBlueprint[layer][x][z] == replaceColor and x >= tTerm.viewable.sX and x <= tTerm.viewable.eX and z >= tTerm.viewable.sZ and z <= tTerm.viewable.eZ then", | |
| 693 | " drawPoint(x,z,color,layer,true,true)", | |
| 694 | " table.insert(tAffectedPoints,{[\"x\"] = x,[\"z\"] = z})",
| |
| 695 | " end", | |
| 696 | " end", | |
| 697 | " table.remove(tAffectedPoints,1)", | |
| 698 | " loops = loops+1", | |
| 699 | " end", | |
| 700 | "end", | |
| 701 | "", | |
| 702 | "local saveFile = function(path,info)", | |
| 703 | " local output = {}",
| |
| 704 | " for a = 1, #info do", | |
| 705 | " output[a] = clearRedundant(info[a])", | |
| 706 | " if a % 8 == 0 then yield() end", | |
| 707 | " end", | |
| 708 | " local fileout = textutils.serialize(output):gsub(\" \",\"\"):gsub(\"\\n\",\"\"):gsub(\" = \",\"=\"):gsub(\",}\",\"}\")", | |
| 709 | " if #fileout >= fs.getFreeSpace(fs.getDir(path)) then", | |
| 710 | " barmsg = \"Not enough space.\"", | |
| 711 | " return", | |
| 712 | " end", | |
| 713 | " local file = fs.open(path,\"w\")", | |
| 714 | " file.write(fileout)", | |
| 715 | " file.close()", | |
| 716 | "end", | |
| 717 | "local renderBar = function(msg,dontSetVisible)", | |
| 718 | " local tsv = term.current().setVisible", | |
| 719 | " if (doRenderBar == 0) or renderBlittle then return end", | |
| 720 | " if tsv and (not dontSetVisible) then tsv(false) end", | |
| 721 | " term.setCursorPos(1,scr_y)", | |
| 722 | " term.setBackgroundColor(colors.lightGray)", | |
| 723 | " term.setTextColor(colors.black)", | |
| 724 | " term.clearLine()", | |
| 725 | " term.setBackgroundColor(paint.b)", | |
| 726 | " term.setTextColor(paint.t)", | |
| 727 | " term.setCursorPos(2,scr_y)", | |
| 728 | " term.write(\"PAIN\")", | |
| 729 | " term.setBackgroundColor(colors.lightGray)", | |
| 730 | " term.setTextColor(colors.black)", | |
| 731 | " term.setCursorPos(7,scr_y)", | |
| 732 | " term.write(msg..\" Frame: \"..frame..\"/\"..#paintEncoded)", | |
| 733 | " term.write(\" (X:\"..paint.scrollX..\" Y:\"..paint.scrollY..\")\")", | |
| 734 | " if tsv and (not dontSetVisible) then tsv(true) end", | |
| 735 | "end", | |
| 736 | "", | |
| 737 | "local rendback = {",
| |
| 738 | " b = colors.black,", | |
| 739 | " t = colors.gray,", | |
| 740 | "}", | |
| 741 | "", | |
| 742 | "local getTablePaint = function(pe)", | |
| 743 | " local output = {}",
| |
| 744 | " for a = 1, #pe do", | |
| 745 | " if not output[pe[a].y] then output[pe[a].y] = {} end",
| |
| 746 | " output[pe[a].y][pe[a].x] = pe[a]", | |
| 747 | " end", | |
| 748 | " return output", | |
| 749 | "end", | |
| 750 | "", | |
| 751 | "local renderPainyThings = function(xscroll,yscroll,doGrid)", | |
| 752 | " if bepimode then", | |
| 753 | " grid = {",
| |
| 754 | " \"Bepis\",", | |
| 755 | " \"episB\",", | |
| 756 | " \"pisBe\",", | |
| 757 | " \"isBep\",", | |
| 758 | " \"sBepi\",", | |
| 759 | " }", | |
| 760 | " else", | |
| 761 | " grid = {",
| |
| 762 | " \"%%..\",", | |
| 763 | " \"%%..\",", | |
| 764 | " \"%%..\",", | |
| 765 | " \"..%%\",", | |
| 766 | " \"..%%\",", | |
| 767 | " \"..%%\",", | |
| 768 | " }", | |
| 769 | " end", | |
| 770 | " term.setBackgroundColor(rendback.b)", | |
| 771 | " term.setTextColor(rendback.t)", | |
| 772 | " local badchar = \"/\"", | |
| 773 | " local blittlelabel = \"blittle max\"", | |
| 774 | " local screenlabel = \"screen max\"", | |
| 775 | " if doGrid then", | |
| 776 | " for y = 1, scr_y-(renderBlittle and 0 or doRenderBar) do", | |
| 777 | " term.setCursorPos(1,y)", | |
| 778 | " --the single most convoluted line I've ever written that works, and I love it", | |
| 779 | " term.write(stringShift(grid[ro(y+(yscroll+2),#grid)+1],xscroll+1):rep(math.ceil(scr_x/#grid[ro(y+(yscroll+2),#grid)+1])):sub(1,scr_x))", | |
| 780 | " term.setCursorPos(1,y)", | |
| 781 | " if ((scr_y+1)-yscroll) == y then --regular limit", | |
| 782 | " term.write( (string.rep(\"@\", ( (scr_x) ) - (#screenlabel+2) ) ..screenlabel:gsub(\" \",\"@\"):upper()..\"@@\"):sub(xscroll>0 and xscroll or 0) )", | |
| 783 | " elseif (((scr_y*3)+1)-yscroll) == y then --blittle limit", | |
| 784 | " term.write( (string.rep(\"@\", ( ((scr_x*2)) ) - (#blittlelabel+2) )..blittlelabel:gsub(\" \",\"@\"):upper()..\"@@\"):sub(xscroll>0 and xscroll or 0) )", | |
| 785 | " end", | |
| 786 | " --Stupid easter eggs, ho!--", | |
| 787 | " if 1000-yscroll == y then", | |
| 788 | " term.setCursorPos(1000-xscroll,y)", | |
| 789 | " term.write(\" What ARE you doing? Stop messing around! \")", | |
| 790 | " end", | |
| 791 | " if 2016-yscroll == y then", | |
| 792 | " term.setCursorPos(200-xscroll,y)", | |
| 793 | " term.write(\" MOTHER 3 is the best RPG ever. \")", | |
| 794 | " end", | |
| 795 | " if 2017-yscroll == y then", | |
| 796 | " term.setCursorPos(200-xscroll,y)", | |
| 797 | " term.write(\" Wouldn't you agree? \")", | |
| 798 | " end", | |
| 799 | " if 800-yscroll == y then", | |
| 800 | " term.setCursorPos(1700-xscroll,y)", | |
| 801 | " term.write(\" Which would you say is better? \")", | |
| 802 | " end", | |
| 803 | " if 801-yscroll == y then", | |
| 804 | " term.setCursorPos(1700-xscroll,y)", | |
| 805 | " term.write(\" Cave Story or Braid? \")", | |
| 806 | " end", | |
| 807 | " if 802-yscroll == y then", | |
| 808 | " term.setCursorPos(1700-xscroll,y)", | |
| 809 | " term.write(\" It depends what you're looking for. \")", | |
| 810 | " end", | |
| 811 | " --Is this the end?--", | |
| 812 | " if (xscroll > scr_x) and (xscroll < (scr_x*2)+1) then --blittle limit", | |
| 813 | " for y = 1, scr_y do", | |
| 814 | " if y+yscroll <= (scr_y*3) then", | |
| 815 | " if not (y == scr_y and doRenderBar == 1) then", | |
| 816 | " term.setCursorPos((scr_x+1)-(xscroll-scr_x),y)", | |
| 817 | " term.write(\"@\")", | |
| 818 | " end", | |
| 819 | " end", | |
| 820 | " end", | |
| 821 | " elseif (xscroll > 0) then --regular limit", | |
| 822 | " for y = 1, scr_y do", | |
| 823 | " if y+yscroll <= scr_y then", | |
| 824 | " if not (y == scr_y and doRenderBar == 1) then", | |
| 825 | " term.setCursorPos((scr_x+1)-xscroll,y)", | |
| 826 | " term.write(\"@\")", | |
| 827 | " end", | |
| 828 | " end", | |
| 829 | " end", | |
| 830 | " end", | |
| 831 | " end", | |
| 832 | " --render areas that won't save", | |
| 833 | " if xscroll < 0 then", | |
| 834 | " for y = 1, scr_y do", | |
| 835 | " if not (y == scr_y and doRenderBar == 1) then", | |
| 836 | " term.setCursorPos(1,y)", | |
| 837 | " term.write(badchar:rep(-xscroll))", | |
| 838 | " end", | |
| 839 | " end", | |
| 840 | " end", | |
| 841 | " if yscroll < 0 then", | |
| 842 | " for y = 1, -yscroll do", | |
| 843 | " if not (y == scr_y and doRenderBar == 1) then", | |
| 844 | " term.setCursorPos(1,y)", | |
| 845 | " term.write(badchar:rep(scr_x))", | |
| 846 | " end", | |
| 847 | " end", | |
| 848 | " end", | |
| 849 | " else", | |
| 850 | " term.clear()", | |
| 851 | " end", | |
| 852 | "end", | |
| 853 | "", | |
| 854 | "renderPAIN = function(dots,xscroll,yscroll,doPain)", | |
| 855 | " local tsv = term.current().setVisible", | |
| 856 | " if tsv then tsv(false) end", | |
| 857 | " local beforeTX,beforeBG = term.getTextColor(), term.getBackgroundColor()", | |
| 858 | " local cx,cy = term.getCursorPos()", | |
| 859 | " local FUCK, SHIT = pcall(function()", | |
| 860 | " if doPain then", | |
| 861 | " renderPainyThings(xscroll,yscroll,evenDrawGrid)", | |
| 862 | " renderBar(barmsg,true)", | |
| 863 | " end", | |
| 864 | " for a = 1, #dots do", | |
| 865 | " local d = dots[a]", | |
| 866 | " if doPain then", | |
| 867 | " if not ((d.y-yscroll >= 1 and d.y-yscroll <= scr_y-(renderBlittle and 0 or (doRenderBar or 0))) and (d.x-xscroll >= 1 and d.x-xscroll <= scr_x)) then", | |
| 868 | " d = nil", | |
| 869 | " end", | |
| 870 | " end", | |
| 871 | " if d then", | |
| 872 | " term.setCursorPos(d.x-(xscroll or 0),d.y-(yscroll or 0))", | |
| 873 | " term.setTextColor((paint.doGray and grayOut(d.t)) or d.t)", | |
| 874 | " term.setBackgroundColor((paint.doGray and grayOut(d.b)) or d.b)", | |
| 875 | " term.write(d.c)", | |
| 876 | " end", | |
| 877 | " end", | |
| 878 | " end)", | |
| 879 | " term.setBackgroundColor(beforeBG)", | |
| 880 | " term.setTextColor(beforeTX)", | |
| 881 | " term.setCursorPos(cx,cy)", | |
| 882 | " if tsv then tsv(true) end", | |
| 883 | " if not FUCK then error(SHIT) end --GODDAMN IT", | |
| 884 | "end", | |
| 885 | "", | |
| 886 | "renderPAINFS = function(filename,xscroll,yscroll,frameNo,doPain)", | |
| 887 | " local tun, tse = textutils.unserialize, textutils.serialize", | |
| 888 | " local file = fs.open(filename,\"r\")", | |
| 889 | " local contents = file.readAll()", | |
| 890 | " local amntFrames", | |
| 891 | " file.close()", | |
| 892 | " local tcontents = tun(contents)", | |
| 893 | " if type(tcontents) ~= \"table\" then", | |
| 894 | " tcontents = importFromNFP(contents)", | |
| 895 | " else", | |
| 896 | " amntFrames = #tcontents", | |
| 897 | " tcontents = tcontents[frameNo or 1]", | |
| 898 | " end", | |
| 899 | " renderPAIN(tcontents,xscroll,yscroll,doPain)", | |
| 900 | " return amntFrames", | |
| 901 | "end", | |
| 902 | "", | |
| 903 | "local getBlittle = function()", | |
| 904 | " if not blittle then", | |
| 905 | " local geet = http.get(\"http://pastebin.com/raw/ujchRSnU\")", | |
| 906 | " if not geet then", | |
| 907 | " return false", | |
| 908 | " else", | |
| 909 | " geet = geet.readAll()", | |
| 910 | " local file = fs.open(\"/.templittle/blittle\",\"w\")", | |
| 911 | " file.write(geet)", | |
| 912 | " file.close()", | |
| 913 | " os.loadAPI(\"/.templittle/blittle\")", | |
| 914 | " fs.delete(\"/.templittle/\")", | |
| 915 | " if not blittleTerm then", | |
| 916 | " blittleTerm = blittle.createWindow()", | |
| 917 | " end", | |
| 918 | " return blittleTerm, firstTerm", | |
| 919 | " end", | |
| 920 | " else", | |
| 921 | " if not blittleTerm then", | |
| 922 | " blittleTerm = blittle.createWindow()", | |
| 923 | " end", | |
| 924 | " return blittleTerm, firstTerm", | |
| 925 | " end", | |
| 926 | "end", | |
| 927 | "", | |
| 928 | "local putDownText = function(x,y)", | |
| 929 | " term.setCursorPos(x,y)", | |
| 930 | " term.setTextColor((paint.doGray and grayOut(paint.t)) or paint.t)", | |
| 931 | " term.setBackgroundColor((paint.doGray and grayOut(paint.b)) or paint.b)", | |
| 932 | " local msg = read()", | |
| 933 | " if #msg > 0 then", | |
| 934 | " for a = 1, #msg do", | |
| 935 | " table.insert(paintEncoded[frame],{x=a+(x+paint.scrollX)-1,y=y+paint.scrollY,t=paint.t,b=paint.b,c=msg:sub(a,a),m=paint.m})",
| |
| 936 | " end", | |
| 937 | " end", | |
| 938 | "end", | |
| 939 | "", | |
| 940 | "local deleteDot = function(x,y)", | |
| 941 | " local good = false", | |
| 942 | " for a = #paintEncoded[frame],1,-1 do", | |
| 943 | " local b = paintEncoded[frame][a]", | |
| 944 | " if (x == b.x) and (y == b.y) then", | |
| 945 | " table.remove(paintEncoded[frame],a)", | |
| 946 | " good = true", | |
| 947 | " end", | |
| 948 | " end", | |
| 949 | " return good", | |
| 950 | "end", | |
| 951 | "", | |
| 952 | "CTB = function(_color) --Color To Blit", | |
| 953 | " local blitcolors = {",
| |
| 954 | " [colors.white] = \"0\",", | |
| 955 | " [colors.orange] = \"1\",", | |
| 956 | " [colors.magenta] = \"2\",", | |
| 957 | " [colors.lightBlue] = \"3\",", | |
| 958 | " [colors.yellow] = \"4\",", | |
| 959 | " [colors.lime] = \"5\",", | |
| 960 | " [colors.pink] = \"6\",", | |
| 961 | " [colors.gray] = \"7\",", | |
| 962 | " [colors.lightGray] = \"8\",", | |
| 963 | " [colors.cyan] = \"9\",", | |
| 964 | " [colors.purple] = \"a\",", | |
| 965 | " [colors.blue] = \"b\",", | |
| 966 | " [colors.brown] = \"c\",", | |
| 967 | " [colors.green] = \"d\",", | |
| 968 | " [colors.red] = \"e\",", | |
| 969 | " [colors.black] = \"f\",", | |
| 970 | " }", | |
| 971 | " return blitcolors[_color] or \"f\"", | |
| 972 | "end", | |
| 973 | "", | |
| 974 | "BTC = function(_color) --Blit To Color", | |
| 975 | " local blitcolors = {",
| |
| 976 | " [\"0\"] = colors.white,", | |
| 977 | " [\"1\"] = colors.orange,", | |
| 978 | " [\"2\"] = colors.magenta,", | |
| 979 | " [\"3\"] = colors.lightBlue,", | |
| 980 | " [\"4\"] = colors.yellow,", | |
| 981 | " [\"5\"] = colors.lime,", | |
| 982 | " [\"6\"] = colors.pink,", | |
| 983 | " [\"7\"] = colors.gray,", | |
| 984 | " [\"8\"] = colors.lightGray,", | |
| 985 | " [\"9\"] = colors.cyan,", | |
| 986 | " [\"a\"] = colors.purple,", | |
| 987 | " [\"b\"] = colors.blue,", | |
| 988 | " [\"c\"] = colors.brown,", | |
| 989 | " [\"d\"] = colors.green,", | |
| 990 | " [\"e\"] = colors.red,", | |
| 991 | " [\"f\"] = colors.black,", | |
| 992 | " }", | |
| 993 | " return blitcolors[_color]", | |
| 994 | "end", | |
| 995 | "", | |
| 996 | "exportToNFP = function(input)", | |
| 997 | " local doop = {}",
| |
| 998 | " local p = input", | |
| 999 | " local pheight = 0", | |
| 1000 | " local pwidth = 0", | |
| 1001 | " for a = 1, #p do", | |
| 1002 | " if p[a].y > pheight then", | |
| 1003 | " pheight = p[a].y", | |
| 1004 | " end", | |
| 1005 | " if p[a].x > pwidth then", | |
| 1006 | " pwidth = p[a].x", | |
| 1007 | " end", | |
| 1008 | " end", | |
| 1009 | " for k,v in pairs(p) do", | |
| 1010 | " if not doop[v.y] then doop[v.y] = {} end",
| |
| 1011 | " doop[v.y][v.x] = CTB(v.b)", | |
| 1012 | " end", | |
| 1013 | " for y = 1, pheight do", | |
| 1014 | " if doop[y] then", | |
| 1015 | " for x = 1, pwidth do", | |
| 1016 | " if doop[y][x] then", | |
| 1017 | " nfpoutput = nfpoutput..doop[y][x]", | |
| 1018 | " else", | |
| 1019 | " nfpoutput = nfpoutput..\" \"", | |
| 1020 | " end", | |
| 1021 | " end", | |
| 1022 | " end", | |
| 1023 | " nfpoutput = nfpoutput..\"\\n\"", | |
| 1024 | " end", | |
| 1025 | " return nfpoutput", | |
| 1026 | "end", | |
| 1027 | "", | |
| 1028 | "importFromNFP = function(theInput)", | |
| 1029 | " local output = {}",
| |
| 1030 | " local input = explode(\"\\n\",theInput)", | |
| 1031 | " for a = 1, #input do", | |
| 1032 | " line = input[a]", | |
| 1033 | " for b = 1, #line do", | |
| 1034 | " if (line:sub(b,b) ~= \" \") and BTC(line:sub(b,b)) then", | |
| 1035 | " table.insert(output,{",
| |
| 1036 | " x = b,", | |
| 1037 | " y = a,", | |
| 1038 | " t = colors.white,", | |
| 1039 | " b = BTC(line:sub(b,b)) or colors.black,", | |
| 1040 | " c = \" \",", | |
| 1041 | " })", | |
| 1042 | " end", | |
| 1043 | " end", | |
| 1044 | " end", | |
| 1045 | " return output", | |
| 1046 | "end", | |
| 1047 | "", | |
| 1048 | "local getTheDoots = function(pe)", | |
| 1049 | " local hasBadDots = false", | |
| 1050 | " local baddestX,baddestY = 1,1", | |
| 1051 | " barmsg = \"Checking...\"", | |
| 1052 | " for b = 1, #pe do", | |
| 1053 | " local doot = pe[b]", | |
| 1054 | " if doot.x <= 0 or doot.y <= 0 then", | |
| 1055 | " hasBadDots = true", | |
| 1056 | " if doot.x < baddestX then", | |
| 1057 | " baddestX = doot.x", | |
| 1058 | " end", | |
| 1059 | " if doot.y < baddestY then", | |
| 1060 | " baddestY = doot.y", | |
| 1061 | " end", | |
| 1062 | " end", | |
| 1063 | " if b % 64 == 0 then yield() end", | |
| 1064 | " end", | |
| 1065 | " return baddestX, baddestY", | |
| 1066 | "end", | |
| 1067 | "", | |
| 1068 | "local function deepcompare(t1,t2,ignore_mt)", | |
| 1069 | " local ty1 = type(t1)", | |
| 1070 | " local ty2 = type(t2)", | |
| 1071 | " if ty1 ~= ty2 then return false end", | |
| 1072 | " -- non-table types can be directly compared", | |
| 1073 | " if ty1 ~= 'table' and ty2 ~= 'table' then return t1 == t2 end", | |
| 1074 | " -- as well as tables which have the metamethod __eq", | |
| 1075 | " local mt = getmetatable(t1)", | |
| 1076 | " if not ignore_mt and mt and mt.__eq then return t1 == t2 end", | |
| 1077 | " for k1,v1 in pairs(t1) do", | |
| 1078 | " local v2 = t2[k1]", | |
| 1079 | " if v2 == nil or not deepcompare(v1,v2) then return false end", | |
| 1080 | " end", | |
| 1081 | " for k2,v2 in pairs(t2) do", | |
| 1082 | " local v1 = t1[k2]", | |
| 1083 | " if v1 == nil or not deepcompare(v1,v2) then return false end", | |
| 1084 | " end", | |
| 1085 | " return true", | |
| 1086 | "end", | |
| 1087 | "", | |
| 1088 | "local displayMenu = function()", | |
| 1089 | " menuOptions = {\"Save\",\"Export\",\"Del.frame\",\"Clear\",\"Exit\"}",
| |
| 1090 | " local diss = \" \"..table.concat(menuOptions,\" \")", | |
| 1091 | " local cleary = scr_y-math.floor(#diss/scr_x)", | |
| 1092 | " for a = cleary,scr_y do", | |
| 1093 | " term.setCursorPos(1,a)", | |
| 1094 | " term.setBackgroundColor(colors.lightGray)", | |
| 1095 | " term.clearLine()", | |
| 1096 | " end", | |
| 1097 | " local menuPoses = {}",
| |
| 1098 | " local menuFunctions = {",
| |
| 1099 | " [1] = function() --Save", | |
| 1100 | " local hasBadDots = false", | |
| 1101 | " for a = 1, #paintEncoded do", | |
| 1102 | " local radx,rady = getTheDoots(paintEncoded[a])", | |
| 1103 | " if radx ~= 1 or rady ~= 1 then", | |
| 1104 | " hasBadDots = true", | |
| 1105 | " end", | |
| 1106 | " end", | |
| 1107 | " if hasBadDots then", | |
| 1108 | " local ting = bottomPrompt(\"Dot(s) are OoB! Save or fix? (Y/N/F)\",_,\"ynf\",{keys.leftCtrl,keys.rightCtrl})",
| |
| 1109 | " if ting == \"f\" then", | |
| 1110 | " for a = 1, #paintEncoded do", | |
| 1111 | " local baddestX, baddestY = getTheDoots(paintEncoded[a])", | |
| 1112 | " paintEncoded[a] = movePaintEncoded(paintEncoded[a],-(baddestX-1),-(baddestY-1))", | |
| 1113 | " end", | |
| 1114 | " elseif ting ~= \"y\" then", | |
| 1115 | " barmsg = \"\"", | |
| 1116 | " return false", | |
| 1117 | " end", | |
| 1118 | " end", | |
| 1119 | " local output = deepCopy(paintEncoded)", | |
| 1120 | " if paint.doGray then", | |
| 1121 | " for a = 1, #paintEncoded do", | |
| 1122 | " for b = 1, #paintEncoded[a] do", | |
| 1123 | " output[a][b].b = grayOut(paintEncoded[a][b].b)", | |
| 1124 | " output[a][b].t = grayOut(paintEncoded[a][b].t)", | |
| 1125 | " if not output[a][b].m then output[a][b].m = 1 end", | |
| 1126 | " end", | |
| 1127 | " if a % 2 == 0 then yield() end", | |
| 1128 | " end", | |
| 1129 | " end", | |
| 1130 | " saveFile(fileName,output)", | |
| 1131 | " lastPaintEncoded = deepCopy(paintEncoded)", | |
| 1132 | " term.setCursorPos(9,scr_y)", | |
| 1133 | " barmsg = \"Saved as '\"..fileName..\"'\"", | |
| 1134 | " doRender = true", | |
| 1135 | " end,", | |
| 1136 | " [2] = function() --Export", | |
| 1137 | " nfpoutput = \"\"", | |
| 1138 | " local exportName = bottomPrompt(\"Export to: /\")", | |
| 1139 | " if fs.combine(\"\",exportName) == \"\" then return end", | |
| 1140 | " if fs.isReadOnly(exportName) then", | |
| 1141 | " barmsg = \"That's read-only.\"", | |
| 1142 | " doRender = true", | |
| 1143 | " return", | |
| 1144 | " end", | |
| 1145 | " if fs.exists(exportName) then", | |
| 1146 | " if bottomPrompt(\"Overwrite? (Y/N)\",_,\"yn\",{keys.leftCtrl,keys.rightCtrl}) ~= \"y\" then return end",
| |
| 1147 | " end", | |
| 1148 | " local output = exportToNFP(paintEncoded[frame])", | |
| 1149 | " local file = fs.open(exportName,\"w\")", | |
| 1150 | " file.write(output)", | |
| 1151 | " file.close()", | |
| 1152 | " doRender = true", | |
| 1153 | " barmsg = \"Exported as '\"..exportName..\"'\"", | |
| 1154 | " return", | |
| 1155 | " end,", | |
| 1156 | " [3] = function() --Del.Frame", | |
| 1157 | " local outcum = bottomPrompt(\"Thou art sure? (Y/N)\",_,\"yn\",{keys.leftCtrl,keys.rightCtrl})",
| |
| 1158 | " if outcum == \"y\" then", | |
| 1159 | " if #paintEncoded == 1 then", | |
| 1160 | " barmsg = \"Ha! You can't do that.\"", | |
| 1161 | " return", | |
| 1162 | " end", | |
| 1163 | " table.remove(paintEncoded,frame)", | |
| 1164 | " barmsg = \"Deleted frame \"..frame..\".\"", | |
| 1165 | " if paintEncoded[frame-1] then", | |
| 1166 | " frame = frame - 1", | |
| 1167 | " else", | |
| 1168 | " frame = frame + 1", | |
| 1169 | " end", | |
| 1170 | " if #paintEncoded < frame then", | |
| 1171 | " repeat", | |
| 1172 | " frame = frame - 1", | |
| 1173 | " until #paintEncoded >= frame", | |
| 1174 | " end", | |
| 1175 | " --renderPAIN(paintEncoded[frame],paint.scrollX,paint.scrollY,true)", | |
| 1176 | " end", | |
| 1177 | " doRender = true", | |
| 1178 | " end,", | |
| 1179 | " [4] = function() --Clear", | |
| 1180 | " local outcum = bottomPrompt(\"Clear the frame? (Y/N)\",_,\"yn\",{keys.leftCtrl,keys.rightCtrl})",
| |
| 1181 | " if outcum == \"y\" then", | |
| 1182 | " paintEncoded[frame] = {}",
| |
| 1183 | " barmsg = \"Cleared frame \"..frame..\".\"", | |
| 1184 | " --renderPAIN(paintEncoded[frame],paint.scrollX,paint.scrollY,true)", | |
| 1185 | " end", | |
| 1186 | " doRender = true", | |
| 1187 | " end,", | |
| 1188 | " [5] = function() --Exit", | |
| 1189 | " if not deepcompare(lastPaintEncoded,paintEncoded) then", | |
| 1190 | " local outcum = bottomPrompt(\"Abandon unsaved work? (Y/N)\",_,\"yn\",{keys.leftCtrl,keys.rightCtrl})",
| |
| 1191 | " sleep(0)", | |
| 1192 | " if outcum == \"y\" then", | |
| 1193 | " return \"exit\"", | |
| 1194 | " else", | |
| 1195 | " doRender = true", | |
| 1196 | " return nil", | |
| 1197 | " end", | |
| 1198 | " else", | |
| 1199 | " return \"exit\"", | |
| 1200 | " end", | |
| 1201 | " end,", | |
| 1202 | " }", | |
| 1203 | " local cursor = 1", | |
| 1204 | " local redrawmenu = true", | |
| 1205 | " local initial = os.time()", | |
| 1206 | " local clickdelay = 0.003", | |
| 1207 | " while true do", | |
| 1208 | " if redrawmenu then", | |
| 1209 | " term.setCursorPos(2,cleary)", | |
| 1210 | " term.clearLine()", | |
| 1211 | " for a = 1, #menuOptions do", | |
| 1212 | " if a == cursor then", | |
| 1213 | " term.setTextColor(colors.black)", | |
| 1214 | " term.setBackgroundColor(colors.white)", | |
| 1215 | " else", | |
| 1216 | " term.setTextColor(colors.black)", | |
| 1217 | " term.setBackgroundColor(colors.lightGray)", | |
| 1218 | " end", | |
| 1219 | " menuPoses[a] = {term.getCursorPos()}",
| |
| 1220 | " write(menuOptions[a])", | |
| 1221 | " term.setBackgroundColor(colors.lightGray)", | |
| 1222 | " if a ~= #menuOptions then", | |
| 1223 | " write(\" \")", | |
| 1224 | " end", | |
| 1225 | " end", | |
| 1226 | " redrawmenu = false", | |
| 1227 | " end", | |
| 1228 | " local event,key,x,y = getEvents(\"key\",\"char\",\"mouse_click\",\"mouse_up\",\"mouse_drag\")", | |
| 1229 | " if event == \"key\" then", | |
| 1230 | " if key == keys.left then", | |
| 1231 | " redrawmenu = true", | |
| 1232 | " cursor = cursor - 1", | |
| 1233 | " elseif key == keys.right then", | |
| 1234 | " redrawmenu = true", | |
| 1235 | " cursor = cursor + 1", | |
| 1236 | " elseif key == keys.enter then", | |
| 1237 | " local res = menuFunctions[cursor]()", | |
| 1238 | " if res == \"exit\" then", | |
| 1239 | " return \"exit\"", | |
| 1240 | " else", | |
| 1241 | " return", | |
| 1242 | " end", | |
| 1243 | " elseif key == keys.leftCtrl or key == keys.rightCtrl then", | |
| 1244 | " doRender = true", | |
| 1245 | " return", | |
| 1246 | " end", | |
| 1247 | " elseif event == \"char\" then", | |
| 1248 | " for a = 1, #menuOptions do", | |
| 1249 | " if key:lower() == menuOptions[a]:sub(1,1):lower() and a ~= cursor then", | |
| 1250 | " cursor = a", | |
| 1251 | " redrawmenu = true", | |
| 1252 | " break", | |
| 1253 | " end", | |
| 1254 | " end", | |
| 1255 | " elseif event == \"mouse_click\" or event == \"mouse_up\" then", | |
| 1256 | " if y < cleary then", | |
| 1257 | " return", | |
| 1258 | " elseif key == 1 and initial+clickdelay < os.time() then --key? more like button", | |
| 1259 | " for a = 1, #menuPoses do", | |
| 1260 | " if y == menuPoses[a][2] then", | |
| 1261 | " if x >= menuPoses[a][1] and x <= menuPoses[a][1]+#menuOptions[a] then", | |
| 1262 | " local res = menuFunctions[a]()", | |
| 1263 | " if res == \"exit\" then", | |
| 1264 | " return \"exit\"", | |
| 1265 | " else", | |
| 1266 | " return", | |
| 1267 | " end", | |
| 1268 | " end", | |
| 1269 | " end", | |
| 1270 | " end", | |
| 1271 | " end", | |
| 1272 | " --elseif event == \"mouse_drag\" then", | |
| 1273 | " end", | |
| 1274 | " if (initial+clickdelay < os.time()) and string.find(event,\"mouse\") then", | |
| 1275 | " if key == 1 then --key? key? what key? all I see is button!", | |
| 1276 | " for a = 1, #menuPoses do", | |
| 1277 | " if y == menuPoses[a][2] then", | |
| 1278 | " if x >= menuPoses[a][1] and x <= menuPoses[a][1]+#menuOptions[a] then", | |
| 1279 | " cursor = a", | |
| 1280 | " redrawmenu = true", | |
| 1281 | " break", | |
| 1282 | " end", | |
| 1283 | " end", | |
| 1284 | " end", | |
| 1285 | " end", | |
| 1286 | " end", | |
| 1287 | " if cursor < 1 then", | |
| 1288 | " cursor = #menuOptions", | |
| 1289 | " elseif cursor > #menuOptions then", | |
| 1290 | " cursor = 1", | |
| 1291 | " end", | |
| 1292 | " end", | |
| 1293 | "end", | |
| 1294 | "", | |
| 1295 | "local lastMX,lastMY", | |
| 1296 | "", | |
| 1297 | "local doNonEventDrivenMovement = function() --what a STUPID function name, man", | |
| 1298 | " local didMove", | |
| 1299 | " while true do", | |
| 1300 | " didMove = false", | |
| 1301 | " if (not keysDown[keys.leftShift]) and (not isDragging) and (not keysDown[keys.tab]) then", | |
| 1302 | " if keysDown[keys.right] then", | |
| 1303 | " paint.scrollX = paint.scrollX + 1", | |
| 1304 | " didMove = true", | |
| 1305 | " elseif keysDown[keys.left] then", | |
| 1306 | " paint.scrollX = paint.scrollX - 1", | |
| 1307 | " didMove = true", | |
| 1308 | " end", | |
| 1309 | " if keysDown[keys.down] then", | |
| 1310 | " paint.scrollY = paint.scrollY + 1", | |
| 1311 | " didMove = true", | |
| 1312 | " elseif keysDown[keys.up] then", | |
| 1313 | " paint.scrollY = paint.scrollY - 1", | |
| 1314 | " didMove = true", | |
| 1315 | " end", | |
| 1316 | " if didMove then", | |
| 1317 | " if lastMX and lastMY then", | |
| 1318 | " if miceDown[1] then", | |
| 1319 | " os.queueEvent(\"mouse_click\",1,lastMX,lastMY)", | |
| 1320 | " end", | |
| 1321 | " if miceDown[2] then", | |
| 1322 | " os.queueEvent(\"mouse_click\",2,lastMX,lastMY)", | |
| 1323 | " end", | |
| 1324 | " end", | |
| 1325 | " doRender = true", | |
| 1326 | " end", | |
| 1327 | " end", | |
| 1328 | " sleep(0)", | |
| 1329 | " end", | |
| 1330 | "end", | |
| 1331 | "", | |
| 1332 | "local linePoses = {}",
| |
| 1333 | "local dragPoses = {}",
| |
| 1334 | "", | |
| 1335 | "local getInput = function() --gotta catch them all", | |
| 1336 | " local button, x, y, oldmx, oldmy, origx, origy", | |
| 1337 | " local isDragging = false", | |
| 1338 | " local proceed = false", | |
| 1339 | " renderBar(barmsg)", | |
| 1340 | " while true do", | |
| 1341 | " doRender = false", | |
| 1342 | " local oldx,oldy = paint.scrollX,paint.scrollY", | |
| 1343 | " local evt = {getEvents(\"mouse_scroll\",\"mouse_click\", \"mouse_drag\",\"mouse_up\",\"key\",\"key_up\",true)}",
| |
| 1344 | " if (evt[1] == \"mouse_scroll\") and (not viewing) then", | |
| 1345 | " local dir = evt[2]", | |
| 1346 | " if dir == 1 then", | |
| 1347 | " if keysDown[keys.leftShift] or keysDown[keys.rightShift] then", | |
| 1348 | " paint.t = paint.t * 2", | |
| 1349 | " if paint.t > 32768 then", | |
| 1350 | " paint.t = 32768", | |
| 1351 | " end", | |
| 1352 | " else", | |
| 1353 | " paint.b = paint.b * 2", | |
| 1354 | " if paint.b > 32768 then", | |
| 1355 | " paint.b = 32768", | |
| 1356 | " end", | |
| 1357 | " end", | |
| 1358 | " else", | |
| 1359 | " if keysDown[keys.leftShift] or keysDown[keys.rightShift] then", | |
| 1360 | " paint.t = math.ceil(paint.t / 2)", | |
| 1361 | " if paint.t < 1 then", | |
| 1362 | " paint.t = 1", | |
| 1363 | " end", | |
| 1364 | " else", | |
| 1365 | " paint.b = math.ceil(paint.b / 2)", | |
| 1366 | " if paint.b < 1 then", | |
| 1367 | " paint.b = 1", | |
| 1368 | " end", | |
| 1369 | " end", | |
| 1370 | " end", | |
| 1371 | " renderBar(barmsg)", | |
| 1372 | " elseif ((evt[1] == \"mouse_click\") or (evt[1] == \"mouse_drag\")) and (not viewing) then", | |
| 1373 | " if evt[1] == \"mouse_click\" then", | |
| 1374 | " origx, origy = evt[3], evt[4]", | |
| 1375 | " end", | |
| 1376 | " oldmx,oldmy = x or evt[3], y or evt[4]", | |
| 1377 | " lastMX,lastMY = evt[3],evt[4]", | |
| 1378 | " button,x,y = evt[2],evt[3],evt[4]", | |
| 1379 | " if renderBlittle then", | |
| 1380 | " x = 2*x", | |
| 1381 | " y = 3*y", | |
| 1382 | " lastMX = 2*lastMX", | |
| 1383 | " lastMY = 3*lastMY", | |
| 1384 | " end", | |
| 1385 | " linePoses = {{x=oldmx,y=oldmy},{x=x,y=y}}",
| |
| 1386 | " miceDown[button] = true", | |
| 1387 | " doRender = true", | |
| 1388 | " if y <= scr_y-(renderBlittle and 0 or doRenderBar) then", | |
| 1389 | " if (button == 3) then", | |
| 1390 | " putDownText(x,y)", | |
| 1391 | " miceDown = {}",
| |
| 1392 | " keysDown = {}",
| |
| 1393 | " elseif button == 1 then", | |
| 1394 | " if keysDown[keys.leftShift] and evt[1] == \"mouse_click\" then", | |
| 1395 | " isDragging = true", | |
| 1396 | " end", | |
| 1397 | " if isDragging then", | |
| 1398 | " if evt[1] == \"mouse_click\" then", | |
| 1399 | " dragPoses[1] = {x=x,y=y}",
| |
| 1400 | " end", | |
| 1401 | " dragPoses[2] = {x=x,y=y}",
| |
| 1402 | " else", | |
| 1403 | " if evt[1] == \"mouse_drag\" then", | |
| 1404 | " local points = getDotsInLine(linePoses[1].x,linePoses[1].y,linePoses[2].x,linePoses[2].y)", | |
| 1405 | " for a = 1, #points do", | |
| 1406 | " table.insert(paintEncoded[frame],{",
| |
| 1407 | " x = points[a].x + paint.scrollX,", | |
| 1408 | " y = points[a].y + paint.scrollY,", | |
| 1409 | " c = paint.c,", | |
| 1410 | " b = paint.b,", | |
| 1411 | " t = paint.t,", | |
| 1412 | " m = paint.m,", | |
| 1413 | " })", | |
| 1414 | " end", | |
| 1415 | " else", | |
| 1416 | " table.insert(paintEncoded[frame],{",
| |
| 1417 | " x = x + paint.scrollX,", | |
| 1418 | " y = y + paint.scrollY,", | |
| 1419 | " c = paint.c,", | |
| 1420 | " b = paint.b,", | |
| 1421 | " t = paint.t,", | |
| 1422 | " m = paint.m,", | |
| 1423 | " })", | |
| 1424 | " end", | |
| 1425 | " end", | |
| 1426 | " elseif button == 2 and y <= scr_y-(renderBlittle and 0 or doRenderBar) then", | |
| 1427 | " deleteDot(x+paint.scrollX,y+paint.scrollY)", | |
| 1428 | " end", | |
| 1429 | " elseif origy >= scr_y-(renderBlittle and 0 or doRenderBar) then", | |
| 1430 | " keysDown = {}",
| |
| 1431 | " local res = displayMenu()", | |
| 1432 | " if res == \"exit\" then break end", | |
| 1433 | " doRender = true", | |
| 1434 | " end", | |
| 1435 | " elseif (evt[1] == \"mouse_up\") and (not viewing) then", | |
| 1436 | " origx,origy = 0,0", | |
| 1437 | " local button = evt[2]", | |
| 1438 | " miceDown[button] = false", | |
| 1439 | " oldmx,oldmy = nil,nil", | |
| 1440 | " lastMX, lastMY = nil,nil", | |
| 1441 | " if isDragging then", | |
| 1442 | " local points = getDotsInLine(dragPoses[1].x,dragPoses[1].y,dragPoses[2].x,dragPoses[2].y)", | |
| 1443 | " for a = 1, #points do", | |
| 1444 | " table.insert(paintEncoded[frame],{",
| |
| 1445 | " x = points[a].x + paint.scrollX,", | |
| 1446 | " y = points[a].y + paint.scrollY,", | |
| 1447 | " c = paint.c,", | |
| 1448 | " b = paint.b,", | |
| 1449 | " t = paint.t,", | |
| 1450 | " m = paint.m,", | |
| 1451 | " })", | |
| 1452 | " end", | |
| 1453 | " doRender = true", | |
| 1454 | " end", | |
| 1455 | " isDragging = false", | |
| 1456 | " elseif evt[1] == \"key\" then", | |
| 1457 | " local key = evt[2]", | |
| 1458 | " if (not keysDown[keys.leftShift]) and (keysDown[keys.tab]) then", | |
| 1459 | " if key == keys.right and (not keysDown[keys.right]) then", | |
| 1460 | " paint.scrollX = paint.scrollX + 1", | |
| 1461 | " doRender = true", | |
| 1462 | " elseif key == keys.left and (not keysDown[keys.left]) then", | |
| 1463 | " paint.scrollX = paint.scrollX - 1", | |
| 1464 | " doRender = true", | |
| 1465 | " end", | |
| 1466 | " if key == keys.down and (not keysDown[keys.down]) then", | |
| 1467 | " paint.scrollY = paint.scrollY + 1", | |
| 1468 | " doRender = true", | |
| 1469 | " elseif key == keys.up and (not keysDown[keys.up]) then", | |
| 1470 | " paint.scrollY = paint.scrollY - 1", | |
| 1471 | " doRender = true", | |
| 1472 | " end", | |
| 1473 | " end", | |
| 1474 | " keysDown[key] = true", | |
| 1475 | " if key == keys.space then", | |
| 1476 | " if keysDown[keys.leftShift] then", | |
| 1477 | " evenDrawGrid = not evenDrawGrid", | |
| 1478 | " else", | |
| 1479 | " doRenderBar = math.abs(doRenderBar-1)", | |
| 1480 | " end", | |
| 1481 | " doRender = true", | |
| 1482 | " end", | |
| 1483 | " if key == keys.b then", | |
| 1484 | " local blTerm, oldTerm = getBlittle()", | |
| 1485 | " renderBlittle = not renderBlittle", | |
| 1486 | " term.setBackgroundColor(colors.black)", | |
| 1487 | " term.clear()", | |
| 1488 | " if renderBlittle then", | |
| 1489 | " term.redirect(blTerm)", | |
| 1490 | " blTerm.setVisible(true)", | |
| 1491 | " else", | |
| 1492 | " term.redirect(oldTerm)", | |
| 1493 | " blTerm.setVisible(false)", | |
| 1494 | " end", | |
| 1495 | " doRender = true", | |
| 1496 | " scr_x, scr_y = term.current().getSize()", | |
| 1497 | " end", | |
| 1498 | " if (key == keys.c) and (not renderBlittle) then", | |
| 1499 | " local newX = tonumber(bottomPrompt(\"Goto X:\"))", | |
| 1500 | " local newY", | |
| 1501 | " if newX then", | |
| 1502 | " newY = tonumber(bottomPrompt(\"Goto Y:\"))", | |
| 1503 | " paint.scrollX = newX or paint.scrollX", | |
| 1504 | " paint.scrollY = newY or paint.scrollY", | |
| 1505 | " end", | |
| 1506 | " doRender = true", | |
| 1507 | " end", | |
| 1508 | " if (keysDown[keys.leftShift]) and (not isDragging) then", | |
| 1509 | " if key == keys.left then", | |
| 1510 | " paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],-1,0)", | |
| 1511 | " doRender = true", | |
| 1512 | " elseif key == keys.right then", | |
| 1513 | " paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],1,0)", | |
| 1514 | " doRender = true", | |
| 1515 | " elseif key == keys.up then", | |
| 1516 | " paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],0,-1)", | |
| 1517 | " doRender = true", | |
| 1518 | " elseif key == keys.down then", | |
| 1519 | " paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],0,1)", | |
| 1520 | " doRender = true", | |
| 1521 | " end", | |
| 1522 | " end", | |
| 1523 | " if keysDown[keys.leftAlt] then", | |
| 1524 | " if #paintEncoded > 1 then", | |
| 1525 | " if key == keys.equals and paintEncoded[frame+1] then --basically plus", | |
| 1526 | " local first = deepCopy(paintEncoded[frame])", | |
| 1527 | " local next = deepCopy(paintEncoded[frame+1])", | |
| 1528 | " paintEncoded[frame] = next", | |
| 1529 | " paintEncoded[frame+1] = first", | |
| 1530 | " frame = frame + 1", | |
| 1531 | " barmsg = \"Swapped prev frame.\"", | |
| 1532 | " end", | |
| 1533 | " if key == keys.minus and paintEncoded[frame-1] then", | |
| 1534 | " local first = deepCopy(paintEncoded[frame])", | |
| 1535 | " local next = deepCopy(paintEncoded[frame-1])", | |
| 1536 | " paintEncoded[frame] = next", | |
| 1537 | " paintEncoded[frame-1] = first", | |
| 1538 | " frame = frame - 1", | |
| 1539 | " barmsg = \"Swapped next frame.\"", | |
| 1540 | " end", | |
| 1541 | " end", | |
| 1542 | " end", | |
| 1543 | " if not renderBlittle then", | |
| 1544 | " if key == keys.m then", | |
| 1545 | " local incum = bottomPrompt(\"Set meta: \",metaHistory)", | |
| 1546 | " paint.m = incum:gsub(\" \",\"\") ~= \"\" and incum or paint.m", | |
| 1547 | " if paint.m ~= metaHistory[#metaHistory] then", | |
| 1548 | " table.insert(metaHistory,paint.m)", | |
| 1549 | " end", | |
| 1550 | " doRender = true", | |
| 1551 | " end", | |
| 1552 | " if key == keys.f7 then", | |
| 1553 | " bepimode = not bepimode", | |
| 1554 | " doRender = true", | |
| 1555 | " end", | |
| 1556 | " if key == keys.t then", | |
| 1557 | " renderBottomBar(\"Click to place text.\")", | |
| 1558 | " local mevt", | |
| 1559 | " repeat", | |
| 1560 | " mevt = {os.pullEvent(\"mouse_click\")}",
| |
| 1561 | " until mevt[2] == 1 and mevt[4] < scr_y-(renderBlittle and 0 or doRenderBar)", | |
| 1562 | " local x,y = mevt[3],mevt[4]", | |
| 1563 | " if renderBlittle then", | |
| 1564 | " x = 2*x", | |
| 1565 | " y = 3*y", | |
| 1566 | " end", | |
| 1567 | " putDownText(x,y)", | |
| 1568 | " miceDown = {}",
| |
| 1569 | " keysDown = {}",
| |
| 1570 | " end", | |
| 1571 | " if not keysDown[keys.leftAlt] then", | |
| 1572 | " if key == keys.equals then --basically 'plus'", | |
| 1573 | " if not paintEncoded[frame+1] then", | |
| 1574 | " paintEncoded[frame+1] = {}",
| |
| 1575 | " local sheet = paintEncoded[frame]", | |
| 1576 | " if keysDown[keys.leftShift] then", | |
| 1577 | " paintEncoded[frame+1] = deepCopy(sheet)", | |
| 1578 | " end", | |
| 1579 | " end", | |
| 1580 | " frame = frame + 1", | |
| 1581 | " doRender = true", | |
| 1582 | " elseif key == keys.minus then", | |
| 1583 | " if frame > 1 then", | |
| 1584 | " frame = frame - 1", | |
| 1585 | " doRender = true", | |
| 1586 | " end", | |
| 1587 | " end", | |
| 1588 | " end", | |
| 1589 | " if (key == keys.leftCtrl or key == keys.rightCtrl) then", | |
| 1590 | " keysDown = {}",
| |
| 1591 | " local res = displayMenu()", | |
| 1592 | " if res == \"exit\" then break end", | |
| 1593 | " doRender = true", | |
| 1594 | " end", | |
| 1595 | " end", | |
| 1596 | " if (key == keys.f and keysDown[keys.leftShift]) then", | |
| 1597 | " local deredots = {}",
| |
| 1598 | " for a = 1, #paintEncoded[frame] do", | |
| 1599 | " local dot = paintEncoded[frame][a]", | |
| 1600 | " if dot.x-paint.scrollX > 0 and dot.x-paint.scrollX <= scr_x then", | |
| 1601 | " if dot.y-paint.scrollY > 0 and dot.y-paint.scrollY <= scr_y then", | |
| 1602 | " table.insert(deredots,{dot.x-paint.scrollX, dot.y-paint.scrollY})",
| |
| 1603 | " end", | |
| 1604 | " end", | |
| 1605 | " end", | |
| 1606 | " for y = 1, scr_y-(renderBlittle and 0 or doRenderBar) do", | |
| 1607 | " for x = 1, scr_x do", | |
| 1608 | " local good = true", | |
| 1609 | " for a = 1, #deredots do", | |
| 1610 | " if (deredots[a][1] == x) and (deredots[a][2] == y) then", | |
| 1611 | " good = bad", | |
| 1612 | " break", | |
| 1613 | " end", | |
| 1614 | " end", | |
| 1615 | " if good then", | |
| 1616 | " table.insert(paintEncoded[frame],{",
| |
| 1617 | " x = x+paint.scrollX,", | |
| 1618 | " y = y+paint.scrollY,", | |
| 1619 | " c = \" \",", | |
| 1620 | " t = paint.t,", | |
| 1621 | " b = paint.b,", | |
| 1622 | " m = paint.m,", | |
| 1623 | " })", | |
| 1624 | " end", | |
| 1625 | " end", | |
| 1626 | " end", | |
| 1627 | " doRender = true", | |
| 1628 | " end", | |
| 1629 | " if key == keys.g then", | |
| 1630 | " paint.doGray = not paint.doGray", | |
| 1631 | " doRender = true", | |
| 1632 | " end", | |
| 1633 | " if key == keys.a then", | |
| 1634 | " paint.scrollX = 0", | |
| 1635 | " paint.scrollY = 0", | |
| 1636 | " doRender = true", | |
| 1637 | " end", | |
| 1638 | " if key == keys.f1 then", | |
| 1639 | " guiHelp()", | |
| 1640 | " end", | |
| 1641 | " if key == keys.leftBracket then", | |
| 1642 | " os.queueEvent(\"mouse_scroll\",2,1,1)", | |
| 1643 | " elseif key == keys.rightBracket then", | |
| 1644 | " os.queueEvent(\"mouse_scroll\",1,1,1)", | |
| 1645 | " end", | |
| 1646 | " elseif evt[1] == \"key_up\" then", | |
| 1647 | " local key = evt[2]", | |
| 1648 | " keysDown[key] = false", | |
| 1649 | " end", | |
| 1650 | " if (oldx~=paint.scrollX) or (oldy~=paint.scrollY) then", | |
| 1651 | " doRender = true", | |
| 1652 | " end", | |
| 1653 | " if doRender then", | |
| 1654 | " renderPAIN(paintEncoded[frame],paint.scrollX,paint.scrollY,true)", | |
| 1655 | " doRender = false", | |
| 1656 | " end", | |
| 1657 | " end", | |
| 1658 | "end", | |
| 1659 | "", | |
| 1660 | "if not shell then return end", | |
| 1661 | "", | |
| 1662 | "fileName = shell.resolve(tostring(tArg[1]))", | |
| 1663 | "", | |
| 1664 | "if not fs.exists(fileName) then", | |
| 1665 | " paintEncoded = {{}}",
| |
| 1666 | "else", | |
| 1667 | " local file = fs.open(fileName,\"r\")", | |
| 1668 | " local contents = file.readAll()", | |
| 1669 | " file.close()", | |
| 1670 | " if type(tun(contents)) ~= \"table\" then", | |
| 1671 | " if pMode ~= 1 then print(\"Importing from NFP...\") end", | |
| 1672 | " paintEncoded = {importFromNFP(contents)}",
| |
| 1673 | " if fileName:sub(-4,-1) == \".nfp\" then", | |
| 1674 | " fileName = fileName:sub(1,-5)", | |
| 1675 | " end", | |
| 1676 | " else", | |
| 1677 | " paintEncoded = tun(contents)", | |
| 1678 | " end", | |
| 1679 | "end", | |
| 1680 | "", | |
| 1681 | "paintEncoded = tun(tse(paintEncoded):gsub(\"bg\",\"b\"):gsub(\"txt\",\"t\"):gsub(\"char\",\"c\"):gsub(\"meta\",\"m\")) -- gotta have backwards compatibility, sorta", | |
| 1682 | "", | |
| 1683 | "if not paintEncoded[frame] then paintEncoded = {paintEncoded} end",
| |
| 1684 | "if pMode == 1 then", | |
| 1685 | " doRenderBar = 0", | |
| 1686 | " renderPAIN(paintEncoded[tonumber(tArg[5]) or 1],tonumber(tArg[3]) or 0,tonumber(tArg[4]) or 0)", | |
| 1687 | " sleep(0)", | |
| 1688 | " return", | |
| 1689 | "else", | |
| 1690 | " renderPAIN(paintEncoded[frame],paint.scrollX,paint.scrollY,true)", | |
| 1691 | "end", | |
| 1692 | "lastPaintEncoded = deepCopy(paintEncoded)", | |
| 1693 | "", | |
| 1694 | "parallel.waitForAny(getInput,doNonEventDrivenMovement)", | |
| 1695 | "", | |
| 1696 | "term.setCursorPos(1,scr_y)", | |
| 1697 | "term.setBackgroundColor(colors.black)", | |
| 1698 | "term.clearLine()", | |
| 1699 | }, | |
| 1700 | r = {
| |
| 1701 | "", | |
| 1702 | "", | |
| 1703 | " 000000000000000", | |
| 1704 | " 077777777777770", | |
| 1705 | " 078888888888880", | |
| 1706 | " 078800000007880", | |
| 1707 | " 07880 07880", | |
| 1708 | " 07880 07880", | |
| 1709 | " 078800000007880", | |
| 1710 | " 078877777777880", | |
| 1711 | " 078888888888880", | |
| 1712 | " 078800000078000", | |
| 1713 | " 07880 0780 ", | |
| 1714 | " 07880 078000", | |
| 1715 | " 07880 078770", | |
| 1716 | " 07880 078880", | |
| 1717 | " 07880 078880", | |
| 1718 | " 00000 000000", | |
| 1719 | }, | |
| 1720 | X = {
| |
| 1721 | "", | |
| 1722 | " 000000000000 000000000000", | |
| 1723 | " 0777777777700 0077777777770", | |
| 1724 | " 0788777888770 0778887778880", | |
| 1725 | " 0788877788870 0788877788880", | |
| 1726 | " 07888877788800 00788777888880", | |
| 1727 | " 008888877788700 007887778888800", | |
| 1728 | " 000000000078700007880000000000 ", | |
| 1729 | " 007880088800 ", | |
| 1730 | " 0088888800 ", | |
| 1731 | " 00888800 ", | |
| 1732 | " 0088888800 ", | |
| 1733 | " 007880088700 ", | |
| 1734 | " 000000000078800008870000000000 ", | |
| 1735 | " 007777777778800 008877777777700", | |
| 1736 | " 07888877788800 00788777888870", | |
| 1737 | " 0788877788870 0788877788880", | |
| 1738 | " 0788777888770 0778887778880", | |
| 1739 | " 0787778887700 0077887777880", | |
| 1740 | " 000000000000 000000000000", | |
| 1741 | }, | |
| 1742 | progdor = {
| |
| 1743 | "--[[", | |
| 1744 | " PROGDOR file bundling program", | |
| 1745 | "", | |
| 1746 | "Download with:", | |
| 1747 | " pastebin get YXx5jjMV progdor", | |
| 1748 | " std ld progdor progdor", | |
| 1749 | "", | |
| 1750 | "This is a stable release. You fool!", | |
| 1751 | "--]]", | |
| 1752 | "", | |
| 1753 | "local doCompress = false --even if this is false, it will decompress compressed files. nifty, huh?", | |
| 1754 | "", | |
| 1755 | "local tArg = {...}",
| |
| 1756 | "local input = tArg[1]", | |
| 1757 | "local outpath = tArg[2]", | |
| 1758 | "", | |
| 1759 | "local progdor = fs.getName(shell.getRunningProgram())", | |
| 1760 | "local dir = shell.dir()", | |
| 1761 | "local displayHelp = function()", | |
| 1762 | " local txt = progdor..\" <input> [output]\\nCompression is \"..tostring(doCompress):upper()..\".\"", | |
| 1763 | " return print(txt)", | |
| 1764 | "end", | |
| 1765 | "", | |
| 1766 | "local yield = function()", | |
| 1767 | " os.queueEvent(\"yield\")", | |
| 1768 | " os.pullEvent(\"yield\")", | |
| 1769 | "end", | |
| 1770 | "", | |
| 1771 | "-- CCA API START --", | |
| 1772 | "", | |
| 1773 | "local bit = bit32", | |
| 1774 | "--[[", | |
| 1775 | "local function pack(bn1, bn2)", | |
| 1776 | " bytes = {}",
| |
| 1777 | " bytes[1] = bit.band(bn1, 0xFF)", | |
| 1778 | " bytes[2] = bit.rshift(bn1, 8) + bit.lshift(bit.band(bn2, 0xF), 4)", | |
| 1779 | " bytes[3] = bit.rshift(bn2, 4)", | |
| 1780 | " return bytes[1], bytes[2], bytes[3]", | |
| 1781 | "end", | |
| 1782 | "local function upack(b1, b2, b3)", | |
| 1783 | " bn1 = b1 + bit.lshift(bit.band(b2, 0xF), 8)", | |
| 1784 | " bn2 = bit.lshift(b3,4) + bit.band(bit.rshift(b2, 4), 0xF)", | |
| 1785 | " return bn1, bn2", | |
| 1786 | "end", | |
| 1787 | "--]]", | |
| 1788 | "local function pack(bn1, bn2)", | |
| 1789 | " return bit.band(bn1, 0xFF), bit.rshift(bn1, 8) + bit.lshift(bit.band(bn2, 0xF), 4), bit.rshift(bn2, 4)", | |
| 1790 | "end", | |
| 1791 | "local function upack(b1, b2, b3)", | |
| 1792 | " return (b1 + bit.lshift(bit.band(b2, 0xF), 8)), (bit.lshift(b3,4) + bit.band(bit.rshift(b2, 4), 0xF))", | |
| 1793 | "end", | |
| 1794 | "local function createDict(bool)", | |
| 1795 | " local ret = {}",
| |
| 1796 | " for i = 1, 255 do", | |
| 1797 | " if bool then", | |
| 1798 | " ret[string.char(i)] = i", | |
| 1799 | " else", | |
| 1800 | " ret[i] = string.char(i)", | |
| 1801 | " end", | |
| 1802 | " end", | |
| 1803 | " if not bool then ret[256] = 256 end", | |
| 1804 | " return ret", | |
| 1805 | "end", | |
| 1806 | "local function cp(sInput)", | |
| 1807 | " local dic = createDict(true)", | |
| 1808 | " local s = \"\"", | |
| 1809 | " local ch", | |
| 1810 | " local dlen = 256", | |
| 1811 | " local result = {}",
| |
| 1812 | " local temp", | |
| 1813 | " for i = 1, #sInput do", | |
| 1814 | " if dlen == 4095 then", | |
| 1815 | " result[#result + 1] = dic[s]", | |
| 1816 | " result[#result + 1] = 256", | |
| 1817 | " dic = createDict(true)", | |
| 1818 | " dlen = 256", | |
| 1819 | " s = \"\"", | |
| 1820 | " end", | |
| 1821 | " ch = sInput:sub(i, i)", | |
| 1822 | " temp = s..ch", | |
| 1823 | " if dic[temp] then", | |
| 1824 | " s = temp", | |
| 1825 | " else", | |
| 1826 | " result[#result + 1] = dic[s]", | |
| 1827 | " dlen = dlen +1", | |
| 1828 | " dic[temp] = dlen ", | |
| 1829 | " s = ch", | |
| 1830 | " end", | |
| 1831 | " end", | |
| 1832 | " result[#result + 1] = dic[s]", | |
| 1833 | " ", | |
| 1834 | " return result", | |
| 1835 | "end", | |
| 1836 | "local function dc(data)", | |
| 1837 | " local dic = createDict(false) ", | |
| 1838 | " local entry", | |
| 1839 | " local ch", | |
| 1840 | " local currCode", | |
| 1841 | " local result = {}",
| |
| 1842 | " result[#result + 1] = dic[data[1]]", | |
| 1843 | " prefix = dic[data[1]]", | |
| 1844 | " for i = 2, #data do", | |
| 1845 | " currCode = data[i]", | |
| 1846 | " if currCode == 256 then", | |
| 1847 | " dic = createDict(false)", | |
| 1848 | " prefix = \"\"", | |
| 1849 | " else", | |
| 1850 | " entry = dic[currCode]", | |
| 1851 | " if entry then--exists in dictionary", | |
| 1852 | " ch = entry:sub(1, 1) ", | |
| 1853 | " result[#result + 1] = entry", | |
| 1854 | " if prefix ~= \"\" then", | |
| 1855 | " dic[#dic+1] = prefix .. ch", | |
| 1856 | " end", | |
| 1857 | " else ", | |
| 1858 | " ch = prefix:sub(1, 1)", | |
| 1859 | " result[#result + 1] = prefix..ch", | |
| 1860 | " dic[#dic + 1] = prefix..ch", | |
| 1861 | " end", | |
| 1862 | " ", | |
| 1863 | " prefix = dic[currCode]", | |
| 1864 | " end", | |
| 1865 | " end", | |
| 1866 | " ", | |
| 1867 | " return table.concat(result)", | |
| 1868 | "end", | |
| 1869 | "local function trim(inp)", | |
| 1870 | " for i = 0,2 do", | |
| 1871 | " if inp[#inp] == 0 then", | |
| 1872 | " inp[#inp] = nil", | |
| 1873 | " end", | |
| 1874 | " end", | |
| 1875 | "end", | |
| 1876 | "local function decompress(input)", | |
| 1877 | " local rec = {}",
| |
| 1878 | " for i = 1, #input, 3 do", | |
| 1879 | " if i % 66 == 0 then", | |
| 1880 | " yield()", | |
| 1881 | " end", | |
| 1882 | " rec[#rec+1], rec[#rec+2] = upack(input[i], input[i+1] or 0, input[i+2] or 0)", | |
| 1883 | " end", | |
| 1884 | " trim(rec)", | |
| 1885 | " return dc(rec)", | |
| 1886 | "end", | |
| 1887 | "local function compress(input)", | |
| 1888 | " local rec = {}",
| |
| 1889 | " local data = cp(input)", | |
| 1890 | " for i=1, #data, 2 do", | |
| 1891 | " yield()", | |
| 1892 | " rec[#rec+1], rec[#rec+2], rec[#rec+3] = pack(data[i], data[i+1] or 0)", | |
| 1893 | " end", | |
| 1894 | " trim(rec)", | |
| 1895 | " return rec", | |
| 1896 | "end", | |
| 1897 | "", | |
| 1898 | "-- CCA API END --", | |
| 1899 | "", | |
| 1900 | "local fixstr = function(str)", | |
| 1901 | " return str:gsub(\"\\\\(%d%d%d)\",string.char)", | |
| 1902 | "end", | |
| 1903 | "", | |
| 1904 | "local explode = function(div,str)", | |
| 1905 | " if (div=='') then return false end", | |
| 1906 | " local pos,arr = 0,{}",
| |
| 1907 | " for st,sp in function() return string.find(str,div,pos,true) end do", | |
| 1908 | " table.insert(arr,str:sub(pos,st-1))", | |
| 1909 | " pos = sp + 1", | |
| 1910 | " end", | |
| 1911 | " table.insert(arr,str:sub(pos))", | |
| 1912 | " return arr", | |
| 1913 | "end", | |
| 1914 | "local sanitize = function(sani,tize)", | |
| 1915 | " local _,x = string.find(sani,tize)", | |
| 1916 | " if x then", | |
| 1917 | " return sani:sub(x+1)", | |
| 1918 | " else", | |
| 1919 | " return sani", | |
| 1920 | " end", | |
| 1921 | "end", | |
| 1922 | "local tablize = function(input)", | |
| 1923 | " if type(input) == \"string\" then", | |
| 1924 | " return explode(\"\\n\",input)", | |
| 1925 | " elseif type(input) == \"table\" then", | |
| 1926 | " return table.concat(input,\"\\n\")", | |
| 1927 | " end", | |
| 1928 | "end", | |
| 1929 | "local compyress = function(input)", | |
| 1930 | " return string.char(unpack(compress(input)))", | |
| 1931 | "end", | |
| 1932 | "local decompyress = function(input)", | |
| 1933 | " local out = {}",
| |
| 1934 | " for a = 1, #input do", | |
| 1935 | " table.insert(out,string.byte(input:sub(a,a)))", | |
| 1936 | " end", | |
| 1937 | " return decompress(out)", | |
| 1938 | "end", | |
| 1939 | "local listAll", | |
| 1940 | "listAll = function(_path, _files, noredundant)", | |
| 1941 | " local path = _path or \"\"", | |
| 1942 | " local files = _files or {}",
| |
| 1943 | " if #path > 1 then table.insert(files, path) end", | |
| 1944 | " for _, file in ipairs(fs.list(path)) do", | |
| 1945 | " local path = fs.combine(path, file)", | |
| 1946 | " if (file ~= thisProgram) then", | |
| 1947 | " local guud = true", | |
| 1948 | " if guud then", | |
| 1949 | " if fs.isDir(path) then", | |
| 1950 | " listAll(path, files, noredundant)", | |
| 1951 | " else", | |
| 1952 | " table.insert(files, path)", | |
| 1953 | " end", | |
| 1954 | " end", | |
| 1955 | " end", | |
| 1956 | " end", | |
| 1957 | " if noredundant then", | |
| 1958 | " for a = 1, #files do", | |
| 1959 | " if fs.isDir(tostring(files[a])) then", | |
| 1960 | " if #fs.list(tostring(files[a])) ~= 0 then", | |
| 1961 | " table.remove(files,a)", | |
| 1962 | " end", | |
| 1963 | " end", | |
| 1964 | " end", | |
| 1965 | " end", | |
| 1966 | " return files", | |
| 1967 | "end", | |
| 1968 | "if not (input) then", | |
| 1969 | " return displayHelp()", | |
| 1970 | "end", | |
| 1971 | "if not outpath then", | |
| 1972 | " outpath = input", | |
| 1973 | "end", | |
| 1974 | "", | |
| 1975 | "local choice = function(input,verbose)", | |
| 1976 | " if not input then", | |
| 1977 | " input = \"yn\"", | |
| 1978 | " end", | |
| 1979 | " if verbose then", | |
| 1980 | " write(\"[\")", | |
| 1981 | " for a = 1, #input do", | |
| 1982 | " write(input:sub(a,a):upper())", | |
| 1983 | " if a < #input then", | |
| 1984 | " write(\",\")", | |
| 1985 | " end", | |
| 1986 | " end", | |
| 1987 | " write(\"]?\")", | |
| 1988 | " end", | |
| 1989 | " local evt,char", | |
| 1990 | " repeat", | |
| 1991 | " evt,char = os.pullEvent(\"char\")", | |
| 1992 | " until string.find(input:lower(),char:lower())", | |
| 1993 | " if verbose then", | |
| 1994 | " print(char:upper())", | |
| 1995 | " end", | |
| 1996 | " local pos = string.find(input:lower(),char:lower())", | |
| 1997 | " return pos, char:lower()", | |
| 1998 | "end", | |
| 1999 | "", | |
| 2000 | "function doPack(input,output,doCompress,verbose) --make sure that shell exists before using verbose mode", | |
| 2001 | " local tx = term.getTextColor()", | |
| 2002 | " if not fs.exists(input) then return 3 end", | |
| 2003 | " if fs.isReadOnly(output) then return 5 end", | |
| 2004 | " local packageSelf = true", | |
| 2005 | " local packageReadOnly = true", | |
| 2006 | " local ro_asked = false", | |
| 2007 | " local ps_asked = false", | |
| 2008 | " if fs.isDir(input) then", | |
| 2009 | " local out = {}",
| |
| 2010 | " local list = listAll(input,nil,true)", | |
| 2011 | " if verbose then", | |
| 2012 | " for a = 1, #list do --this checks for self and read-only files", | |
| 2013 | " if fs.isReadOnly(list[a]) and (not ro_asked) then", | |
| 2014 | " write(\"Include read-only files? \")", | |
| 2015 | " if choice(\"yn\",true) == 2 then", | |
| 2016 | " packageReadOnly = false", | |
| 2017 | " end", | |
| 2018 | " ro_asked = true", | |
| 2019 | " end", | |
| 2020 | " if fs.combine(\"\",list[a]) == shell.getRunningProgram() and (not ps_asked) then", | |
| 2021 | " write(\"Include self? \")", | |
| 2022 | " if choice(\"yn\",true) == 2 then", | |
| 2023 | " packageSelf = false", | |
| 2024 | " end", | |
| 2025 | " ps_asked = true", | |
| 2026 | " end", | |
| 2027 | " end", | |
| 2028 | " end", | |
| 2029 | " for a = 1, #list do --this loop gets shit done", | |
| 2030 | " local is_self = fs.combine(\"\",list[a]) == fs.combine(\"\",shell.getRunningProgram())", | |
| 2031 | " if not ((is_self and not packageSelf) or (fs.isReadOnly(list[a]) and not packageReadOnly)) then", | |
| 2032 | " if verbose then", | |
| 2033 | " write(\"[\")", | |
| 2034 | " if term.isColor() then term.setTextColor(colors.lightGray) end", | |
| 2035 | " write(sanitize(list[a],fs.combine(dir,input)))", | |
| 2036 | " term.setTextColor(tx)", | |
| 2037 | " write(\"]\")", | |
| 2038 | " end", | |
| 2039 | " if fs.isDir(list[a]) then", | |
| 2040 | " out[sanitize(list[a],fs.combine(dir,input))] = true", | |
| 2041 | " else", | |
| 2042 | " local file = fs.open(list[a],\"r\")", | |
| 2043 | " local cont = file.readAll()", | |
| 2044 | " file.close()", | |
| 2045 | " if doCompress then", | |
| 2046 | " out[sanitize(list[a],fs.combine(dir,input))] = tablize(compyress(cont))", | |
| 2047 | " else", | |
| 2048 | " out[sanitize(list[a],fs.combine(dir,input))] = tablize(cont)", | |
| 2049 | " end", | |
| 2050 | " end", | |
| 2051 | " local tx = term.getTextColor()", | |
| 2052 | " if fs.getName(list[a]):lower() == \"peasant\" then", | |
| 2053 | " if term.isColor() then", | |
| 2054 | " term.setTextColor(colors.orange)", | |
| 2055 | " end", | |
| 2056 | " print(\" BURNINATED\")", | |
| 2057 | " else", | |
| 2058 | " if term.isColor() then", | |
| 2059 | " term.setTextColor(colors.green)", | |
| 2060 | " end", | |
| 2061 | " print(\" GOOD\")", | |
| 2062 | " end", | |
| 2063 | " term.setTextColor(tx)", | |
| 2064 | " else", | |
| 2065 | " if fs.getName(list[a]):lower() == \"peasant\" then", | |
| 2066 | " print(\"Spared \"..list[a])", | |
| 2067 | " else", | |
| 2068 | " print(\"Skipped \"..list[a])", | |
| 2069 | " end", | |
| 2070 | " end", | |
| 2071 | " end", | |
| 2072 | " if fs.isDir(output) then fs.delete(output) end", | |
| 2073 | " local file = fs.open(output,\"w\")", | |
| 2074 | " file.writeLine(doCompress)", | |
| 2075 | " file.write(fixstr(textutils.serialize(out)))", | |
| 2076 | " file.close()", | |
| 2077 | " return 1", | |
| 2078 | " else", | |
| 2079 | " local file = fs.open(input,\"r\")", | |
| 2080 | " local isCompy = file.readLine()", | |
| 2081 | " local list = file.readAll()", | |
| 2082 | " file.close()", | |
| 2083 | " local list = textutils.unserialize(list)", | |
| 2084 | " if type(list) ~= \"table\" then", | |
| 2085 | " return 4", | |
| 2086 | " end", | |
| 2087 | " if fs.exists(output) then", | |
| 2088 | " fs.delete(output)", | |
| 2089 | " end", | |
| 2090 | " local amnt = 0", | |
| 2091 | " for k,v in pairs(list) do", | |
| 2092 | " amnt = amnt + 1", | |
| 2093 | " end", | |
| 2094 | " local num = 0", | |
| 2095 | " for k,v in pairs(list) do", | |
| 2096 | " num = num + 1", | |
| 2097 | " if v == true then", | |
| 2098 | " fs.makeDir(fs.combine(output,fs.combine(k,dir)))", | |
| 2099 | " else", | |
| 2100 | " local file = fs.open(fs.combine(output,fs.combine(k,dir)),\"w\")", | |
| 2101 | " if verbose then", | |
| 2102 | " write(\"[\")", | |
| 2103 | " if term.isColor() then term.setTextColor(colors.lightGray) end", | |
| 2104 | " write(k)", | |
| 2105 | " term.setTextColor(tx)", | |
| 2106 | " write(\"]\")", | |
| 2107 | " end", | |
| 2108 | " if isCompy:gsub(\" \",\"\") == \"true\" then", | |
| 2109 | " file.write(decompyress(tablize(v)))", | |
| 2110 | " else", | |
| 2111 | " file.write(tablize(v))", | |
| 2112 | " end", | |
| 2113 | " file.close()", | |
| 2114 | " local tx = term.getTextColor()", | |
| 2115 | " if fs.getName(k):lower() == \"peasant\" then", | |
| 2116 | " if term.isColor() then", | |
| 2117 | " term.setTextColor(colors.orange)", | |
| 2118 | " end", | |
| 2119 | " print(\" UNBURNINATED\")", | |
| 2120 | " else", | |
| 2121 | " if term.isColor() then", | |
| 2122 | " term.setTextColor(colors.green)", | |
| 2123 | " end", | |
| 2124 | " print(\" GOOD\")", | |
| 2125 | " end", | |
| 2126 | " term.setTextColor(tx)", | |
| 2127 | " end", | |
| 2128 | " end", | |
| 2129 | " return 2", | |
| 2130 | " end", | |
| 2131 | "end", | |
| 2132 | "", | |
| 2133 | "local success, res = pcall( function() return doPack(input,outpath,doCompress,true) end ) --functionized it!", | |
| 2134 | "", | |
| 2135 | "if not success then", | |
| 2136 | " term.setTextColor(colors.white)", | |
| 2137 | " print(\"\\n***Something went wrong!***\")", | |
| 2138 | " return printError(res)", | |
| 2139 | "end", | |
| 2140 | "", | |
| 2141 | "if res then", | |
| 2142 | " local msgs = {",
| |
| 2143 | " [1] = \"Successfully packed '\"..input..\"/' as '\"..outpath..\"'\",", | |
| 2144 | " [2] = \"Successfully unpacked '\"..input..\"' to '\"..outpath..\"/'\",", | |
| 2145 | " [3] = \"That file/folder does not exist.\",", | |
| 2146 | " [4] = \"That file isn't a packed folder.\",", | |
| 2147 | " [5] = \"You don't have permission.\",", | |
| 2148 | " }", | |
| 2149 | " print(msgs[res])", | |
| 2150 | "end", | |
| 2151 | }, | |
| 2152 | test = {
| |
| 2153 | "local mon = peripheral.find(\"monitor\")", | |
| 2154 | "term.redirect(mon)", | |
| 2155 | "os.loadAPI(\"pain\")", | |
| 2156 | "shell.run(\"render\")", | |
| 2157 | "term.setBackgroundColor(colors.black)", | |
| 2158 | "term.clear()", | |
| 2159 | "local space = 2", | |
| 2160 | "local dif = 0.4", | |
| 2161 | "function ion(txt)", | |
| 2162 | " term.native().setCursorPos(1,2)", | |
| 2163 | " term.native().write(txt..\" \")", | |
| 2164 | "end", | |
| 2165 | "--pain.renderPAINFS(\"BETA\",2,4)", | |
| 2166 | "local reverse = false", | |
| 2167 | "while true do", | |
| 2168 | " _G.render(1,space,reverse)", | |
| 2169 | " if (math.abs(space) >= 3) or (space <= 0.2) then", | |
| 2170 | " dif = dif*-1", | |
| 2171 | " --if space <= 1 then reverse = not reverse end", | |
| 2172 | " reverse = not reverse", | |
| 2173 | " end", | |
| 2174 | " space = space + dif", | |
| 2175 | " ion(space..\"/\"..dif)", | |
| 2176 | " sleep(0.2)", | |
| 2177 | "end", | |
| 2178 | }, | |
| 2179 | } |