SHOW:
|
|
- or go back to the newest paste.
| 1 | local barTextColour = colors.lime | |
| 2 | local barColour = colors.white | |
| 3 | ||
| 4 | local primaryColour = colors.white | |
| 5 | local secondaryColour = colors.lime | |
| 6 | ||
| 7 | local monitors = {
| |
| 8 | ||
| 9 | } | |
| 10 | ||
| 11 | local printers = {
| |
| 12 | ||
| 13 | } | |
| 14 | ||
| 15 | - | if not http then |
| 15 | + | function smartPrint(text, pageTitle, printerSide) |
| 16 | - | print("In order to print a task you must have http api enabled!")
|
| 16 | + | |
| 17 | - | else |
| 17 | + | if not peripheral.isPresent(printerSide) or peripheral.getType(printerSide)~="printer" then |
| 18 | - | if fs.exists("/.smartPrint") then
|
| 18 | + | error("No printer found on "..printerSide,0)
|
| 19 | - | fs.delete("/.smartPaste")
|
| 19 | + | elseif printerSide == "" then |
| 20 | - | shell.run("pastebin get KwaqBdYt /.smartPrint")
|
| 20 | + | error("Usage: smartPrint(text, label, printerSide)", 0)
|
| 21 | end | |
| 22 | - | shell.run("pastebin get KwaqBdYt /.smartPrint")
|
| 22 | + | |
| 23 | local A = peripheral.wrap(printerSide) | |
| 24 | if A.getPaperLevel() == 0 then | |
| 25 | error("Out of paper!", 0)
| |
| 26 | - | os.loadAPI("/.smartPrint")
|
| 26 | + | elseif A.getInkLevel() == 0 then |
| 27 | error("Out of ink!",0)
| |
| 28 | end | |
| 29 | ||
| 30 | A.newPage() | |
| 31 | A.setPageTitle(pageTitle) | |
| 32 | local w,h = A.getPageSize() | |
| 33 | local k = 1 | |
| 34 | ||
| 35 | for i=1,h do | |
| 36 | A.setCursorPos(1,i) | |
| 37 | for j=1, w do | |
| 38 | A.write(text:sub(k, k)) | |
| 39 | k = k + 1 | |
| 40 | end | |
| 41 | os.queueEvent("")
| |
| 42 | os.pullEvent() | |
| 43 | end | |
| 44 | ||
| 45 | k = nil | |
| 46 | j,i = nil | |
| 47 | ||
| 48 | A.endPage() | |
| 49 | return true, A.getPaperLevel(), A.getInkLevel() | |
| 50 | end | |
| 51 | ||
| 52 | for i,v in ipairs(monitors) do | |
| 53 | if not peripheral.isPresent(v) or peripheral.getType(v) ~= "monitor" then | |
| 54 | table.remove(monitors, i) | |
| 55 | end | |
| 56 | end | |
| 57 | ||
| 58 | for i,v in ipairs(printers) do | |
| 59 | if not peripheral.isPresent(v) or peripheral.getType(v) ~= "printer" then | |
| 60 | table.remove(printers, i) | |
| 61 | end | |
| 62 | end | |
| 63 | ||
| 64 | local taskFile = ".tasks" | |
| 65 | ||
| 66 | if not fs.exists(taskFile) then | |
| 67 | A = fs.open(taskFile, "w") | |
| 68 | A.write(textutils.serialize({ "Made by HD -click me!" }))
| |
| 69 | A.close() | |
| 70 | end | |
| 71 | ||
| 72 | local A = 0 | |
| 73 | ||
| 74 | function remoteTasks() | |
| 75 | for i,v in ipairs(rs.getSides()) do | |
| 76 | if peripheral.isPresent(v) and peripheral.getType(v) == "modem" then | |
| 77 | rednet.open(v) | |
| 78 | end | |
| 79 | end | |
| 80 | ||
| 81 | while true do | |
| 82 | os.queueEvent("")
| |
| 83 | os.pullEvent() | |
| 84 | local id, cmd = rednet.receive() | |
| 85 | local cmd = textutils.unserialize(cmd) | |
| 86 | if type(cmd) == "table" then | |
| 87 | if cmd["command"] == "add" then | |
| 88 | local A = getTasks() | |
| 89 | table.insert(A, cmd["input"]) | |
| 90 | saveTasks(A) | |
| 91 | elseif cmd["command"] == "del" then | |
| 92 | local A = getTasks() | |
| 93 | if A[tonumber(cmd["input"])] ~= nil then | |
| 94 | table.remove(A, tonumber(cmd["input"])) | |
| 95 | saveTasks(A) | |
| 96 | end | |
| 97 | end | |
| 98 | end | |
| 99 | end | |
| 100 | end | |
| 101 | ||
| 102 | local function clear() | |
| 103 | if #monitors >= 1 then | |
| 104 | for i,v in ipairs(monitors) do | |
| 105 | peripheral.call(v, "setCursorPos", 1, 1) | |
| 106 | peripheral.call(v, "setBackgroundColour", colors.black) | |
| 107 | peripheral.call(v, "setTextColour", colors.white) | |
| 108 | peripheral.call(v, "clear") | |
| 109 | end | |
| 110 | end | |
| 111 | ||
| 112 | term.setCursorPos(1,1) | |
| 113 | term.setBackgroundColour(colors.black) | |
| 114 | term.setTextColour(colors.white) | |
| 115 | term.clear() | |
| 116 | end | |
| 117 | ||
| 118 | function getTasks() | |
| 119 | if not fs.exists(taskFile) then | |
| 120 | return {}
| |
| 121 | else | |
| 122 | local file = fs.open(taskFile, "r") | |
| 123 | local tmp = textutils.unserialize(file.readAll()) | |
| 124 | file.close() | |
| 125 | return tmp | |
| 126 | end | |
| 127 | end | |
| 128 | ||
| 129 | local function redraw(screen, page) | |
| 130 | ||
| 131 | local text = "HD's Todo list." | |
| 132 | local tasks = getTasks() | |
| 133 | local maxX, maxY = screen.getSize() | |
| 134 | local maxY = maxY - 2 | |
| 135 | ||
| 136 | --[[ Text ]]-- | |
| 137 | --clear() | |
| 138 | ||
| 139 | screen.setCursorPos(1,1) | |
| 140 | screen.setBackgroundColour(barColour) | |
| 141 | screen.setTextColour(barTextColour) | |
| 142 | screen.clearLine() | |
| 143 | screen.setCursorPos(maxX/2-#text/2, 1) | |
| 144 | screen.write(text) | |
| 145 | -------------- | |
| 146 | ||
| 147 | for i=1, maxY do | |
| 148 | if i % 2 == 0 then | |
| 149 | screen.setBackgroundColour(primaryColour) | |
| 150 | screen.setTextColour(secondaryColour) | |
| 151 | elseif i % 2 == 1 then | |
| 152 | screen.setBackgroundColour(secondaryColour) | |
| 153 | screen.setTextColour(primaryColour) | |
| 154 | end | |
| 155 | ||
| 156 | screen.setCursorPos(1, 1+i) | |
| 157 | - | write("HD's Todo list v1.0 (its improved :D)")
|
| 157 | + | |
| 158 | ||
| 159 | local num = i+(maxY*(page-1)) | |
| 160 | ||
| 161 | if tasks[num] ~= nil then | |
| 162 | screen.write(num..": "..tasks[num]) | |
| 163 | else | |
| 164 | screen.write(num..": ") | |
| 165 | end | |
| 166 | end | |
| 167 | ||
| 168 | screen.setBackgroundColour(barColour) | |
| 169 | screen.setTextColour(barTextColour) | |
| 170 | screen.setCursorPos(2, maxY+2) | |
| 171 | screen.clearLine() | |
| 172 | screen.write("Back")
| |
| 173 | screen.setCursorPos(maxX/2-#(tostring(page))/2, maxY+2) | |
| 174 | screen.write(tostring(page)) | |
| 175 | - | --error(num) |
| 175 | + | |
| 176 | - | --screen.write(tasks[num]) |
| 176 | + | |
| 177 | - | --local sizeX, sizeY = term.getSize() |
| 177 | + | |
| 178 | - | --term.setCursorPos(sizeX/2-#"Pull any event to continue"/2, sizeY) |
| 178 | + | |
| 179 | - | --write("Pull any event to continue")
|
| 179 | + | |
| 180 | term.setCursorPos(2,2) | |
| 181 | write("HD's Todo list v2.0")
| |
| 182 | term.setCursorPos(2, 6) | |
| 183 | term.setTextColour(colors.lime) | |
| 184 | write("Add Task")
| |
| 185 | term.setTextColour(colors.red) | |
| 186 | term.setCursorPos(2, 8) | |
| 187 | write("Remove Task")
| |
| 188 | term.setTextColour(colors.white) | |
| 189 | end | |
| 190 | ||
| 191 | local function showTask(pos, page, max, mon) | |
| 192 | local pos = pos - 1 | |
| 193 | local screen = peripheral.wrap(mon) | |
| 194 | local num = pos+(max*(page-1)) | |
| 195 | local tasks = getTasks() | |
| 196 | ||
| 197 | if tasks[num] ~= nil then | |
| 198 | clear() | |
| 199 | ||
| 200 | if #monitors >= 1 then | |
| 201 | for i,v in ipairs(monitors) do | |
| 202 | local str = tasks[num] | |
| 203 | local sizeX, sizeY = peripheral.call(v, "getSize") | |
| 204 | local k = 1 | |
| 205 | for i=1, sizeY-1 do | |
| 206 | peripheral.call(v, "setCursorPos", 1, i) | |
| 207 | for j=1, sizeX do | |
| 208 | peripheral.call(v, "write", str:sub(k,k)) | |
| 209 | k = k + 1 | |
| 210 | end | |
| 211 | end | |
| 212 | ||
| 213 | peripheral.call(v, "setCursorPos", 2, sizeY) | |
| 214 | peripheral.call(v, "write", "Delete") | |
| 215 | peripheral.call(v, "setCursorPos", sizeX-#"Print"-1, sizeY) | |
| 216 | peripheral.call(v, "write", "Print") | |
| 217 | end | |
| 218 | end | |
| 219 | end | |
| 220 | ||
| 221 | local ev, _, xPos, yPos = os.pullEvent("monitor_touch")
| |
| 222 | local sizeX, sizeY = peripheral.call(_, "getSize") | |
| 223 | if xPos >= 2 and xPos <= #"Delete"+1 and yPos == sizeY then | |
| 224 | local A = getTasks() | |
| 225 | table.remove(A, num) | |
| 226 | saveTasks(A) | |
| 227 | elseif xPos >= sizeX-#"Print"-1 and xPos <= sizeX-1 and yPos == sizeY then | |
| 228 | for i,v in ipairs(printers) do | |
| 229 | smartPrint(tasks[num], "Task #"..tostring(num), v) | |
| 230 | end | |
| 231 | else | |
| 232 | ||
| 233 | end | |
| 234 | end | |
| 235 | ||
| 236 | local function addTask() | |
| 237 | local tasks = getTasks() | |
| 238 | term.clear() | |
| 239 | term.setCursorPos(2,2) | |
| 240 | write("Task: ")
| |
| 241 | tsk = read() | |
| 242 | table.insert(tasks, tsk) | |
| 243 | saveTasks(tasks) | |
| 244 | end | |
| 245 | ||
| 246 | local function delTask() | |
| 247 | local tasks = getTasks() | |
| 248 | term.clear() | |
| 249 | term.setCursorPos(2,2) | |
| 250 | write("Task number: ")
| |
| 251 | nmbr = tonumber(read()) | |
| 252 | if tasks[nmbr] ~= nil then | |
| 253 | table.remove(tasks, nmbr) | |
| 254 | end | |
| 255 | ||
| 256 | saveTasks(tasks) | |
| 257 | end | |
| 258 | ||
| 259 | function saveTasks(tbl) | |
| 260 | local A = fs.open(taskFile, "w") | |
| 261 | A.write(textutils.serialize(tbl)) | |
| 262 | A.close() | |
| 263 | end | |
| 264 | ||
| 265 | local pageNmr = 1 | |
| 266 | ||
| 267 | function iCanRun() | |
| 268 | ||
| 269 | while true do | |
| 270 | if monitors[1] ~= nil then | |
| 271 | clear() | |
| 272 | for _,v in ipairs(monitors) do | |
| 273 | local A = peripheral.wrap(v) | |
| 274 | redraw(A, pageNmr) | |
| 275 | os.queueEvent("")
| |
| 276 | os.pullEvent() | |
| 277 | end | |
| 278 | end | |
| 279 | --redraw(term, pageNmr) | |
| 280 | ||
| 281 | local maxX, maxY = term.getSize() | |
| 282 | local ev, _, xPos, yPos = os.pullEvent() | |
| 283 | local mon = false | |
| 284 | ||
| 285 | if ev == "monitor_touch" then | |
| 286 | local mon = true | |
| 287 | maxX, maxY = (peripheral.wrap(_)).getSize() | |
| 288 | end | |
| 289 | ||
| 290 | if ev == "monitor_touch" then | |
| 291 | if xPos >= 2 and xPos <= 5 and yPos == maxY then | |
| 292 | if pageNmr > 1 then | |
| 293 | pageNmr = pageNmr - 1 | |
| 294 | end | |
| 295 | elseif xPos >= maxX-4 and xPos <= maxX-1 and yPos == maxY then | |
| 296 | pageNmr = pageNmr + 1 | |
| 297 | elseif yPos > 1 and yPos < maxY then | |
| 298 | showTask(yPos, pageNmr, maxX, _) | |
| 299 | end | |
| 300 | elseif ev == "mouse_click" then | |
| 301 | if yPos == 6 then | |
| 302 | addTask() | |
| 303 | elseif yPos == 8 then | |
| 304 | delTask() | |
| 305 | end | |
| 306 | end | |
| 307 | sleep(.001) | |
| 308 | end | |
| 309 | ||
| 310 | end | |
| 311 | ||
| 312 | parallel.waitForAny(iCanRun, remoteTasks) |