Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local barTextColour = colors.lime
- local barColour = colors.white
- local primaryColour = colors.white
- local secondaryColour = colors.lime
- local monitors = {
- }
- local printers = {
- }
- for i,v in ipairs(monitors) do
- if not peripheral.isPresent(v) or peripheral.getType(v) ~= "monitor" then
- table.remove(monitors, i)
- end
- end
- for i,v in ipairs(printers) do
- if not peripheral.isPresent(v) or peripheral.getTye(v) ~= "printer" then
- table.remove(printers, i)
- end
- end
- local taskFile = ".tasks"
- if not fs.exists(taskFile) then
- A = fs.open(taskFile, "w")
- A.write(textutils.serialize({ "Made by HD -click me!" }))
- A.close()
- end
- local A = 0
- function remoteTasks()
- for i,v in ipairs(rs.getSides()) do
- if peripheral.isPresent(v) and peripheral.getType(v) == "modem" then
- rednet.open(v)
- end
- end
- while true do
- os.queueEvent("")
- os.pullEvent()
- local id, cmd = rednet.receive()
- local cmd = textutils.unserialize(cmd)
- if type(cmd) == "table" then
- if cmd["command"] == "add" then
- local A = getTasks()
- table.insert(A, cmd["input"])
- saveTasks(A)
- elseif cmd["command"] == "del" then
- local A = getTasks()
- if A[tonumber(cmd["input"])] ~= nil then
- table.remove(A, tonumber(cmd["input"]))
- saveTasks(A)
- end
- end
- end
- end
- end
- local function clear()
- if #monitors >= 1 then
- for i,v in ipairs(monitors) do
- peripheral.call(v, "setCursorPos", 1, 1)
- peripheral.call(v, "setBackgroundColour", colors.black)
- peripheral.call(v, "setTextColour", colors.white)
- peripheral.call(v, "clear")
- end
- end
- term.setCursorPos(1,1)
- term.setBackgroundColour(colors.black)
- term.setTextColour(colors.white)
- term.clear()
- end
- function getTasks()
- if not fs.exists(taskFile) then
- return {}
- else
- local file = fs.open(taskFile, "r")
- local tmp = textutils.unserialize(file.readAll())
- file.close()
- return tmp
- end
- end
- local function redraw(screen, page)
- local text = "HD's Todo list."
- local tasks = getTasks()
- local maxX, maxY = screen.getSize()
- local maxY = maxY - 2
- --[[ Text ]]--
- --clear()
- screen.setCursorPos(1,1)
- screen.setBackgroundColour(barColour)
- screen.setTextColour(barTextColour)
- screen.clearLine()
- screen.setCursorPos(maxX/2-#text/2, 1)
- screen.write(text)
- --------------
- for i=1, maxY do
- if i % 2 == 0 then
- screen.setBackgroundColour(primaryColour)
- screen.setTextColour(secondaryColour)
- elseif i % 2 == 1 then
- screen.setBackgroundColour(secondaryColour)
- screen.setTextColour(primaryColour)
- end
- screen.setCursorPos(1, 1+i)
- screen.clearLine()
- local num = i+(maxY*(page-1))
- if tasks[num] ~= nil then
- screen.write(num..": "..tasks[num])
- else
- screen.write(num..": ")
- end
- end
- screen.setBackgroundColour(barColour)
- screen.setTextColour(barTextColour)
- screen.setCursorPos(2, maxY+2)
- screen.clearLine()
- screen.write("Back")
- screen.setCursorPos(maxX/2-#(tostring(page))/2, maxY+2)
- screen.write(tostring(page))
- screen.setCursorPos(maxX-#"Next", maxY+2)
- screen.write("Next")
- term.clear()
- term.setCursorPos(1,1)
- term.setCursorPos(2,2)
- write("HD's Todo list v1.0 (its improved :D)")
- term.setCursorPos(2, 6)
- term.setTextColour(colors.lime)
- write("Add Task")
- term.setTextColour(colors.red)
- term.setCursorPos(2, 8)
- write("Remove Task")
- term.setTextColour(colors.white)
- end
- local function showTask(pos, page, max, mon)
- local pos = pos - 1
- local screen = peripheral.wrap(mon)
- local num = pos+(max*(page-1))
- local tasks = getTasks()
- if tasks[num] ~= nil then
- clear()
- --error(num)
- --screen.write(tasks[num])
- --local sizeX, sizeY = term.getSize()
- --term.setCursorPos(sizeX/2-#"Pull any event to continue"/2, sizeY)
- --write("Pull any event to continue")
- if #monitors >= 1 then
- for i,v in ipairs(monitors) do
- peripheral.call(v, "write", tasks[num])
- local sizeX, sizeY = peripheral.call(v, "getSize")
- peripheral.call(v, "setCursorPos", (sizeX/2-#"Remove Task"/2)+1, sizeY)
- peripheral.call(v, "write", "Remove Task")
- end
- end
- end
- local ev, _, xPos, yPos = os.pullEvent("monitor_touch")
- local sizeX, sizeY = peripheral.call(_, "getSize")
- if xPos >= sizeX/2-#"Remove Task"/2 and xPos <= (sizeX/2+#"Remove Task"/2)-1 and yPos == sizeY then
- local A = getTasks()
- table.remove(A, num)
- saveTasks(A)
- else
- end
- end
- local function addTask()
- local tasks = getTasks()
- term.clear()
- term.setCursorPos(2,2)
- write("Task: ")
- tsk = read()
- table.insert(tasks, tsk)
- saveTasks(tasks)
- end
- local function delTask()
- local tasks = getTasks()
- term.clear()
- term.setCursorPos(2,2)
- write("Task number: ")
- nmbr = tonumber(read())
- if tasks[nmbr] ~= nil then
- table.remove(tasks, nmbr)
- end
- saveTasks(tasks)
- end
- function saveTasks(tbl)
- local A = fs.open(taskFile, "w")
- A.write(textutils.serialize(tbl))
- A.close()
- end
- local pageNmr = 1
- function iCanRun()
- while true do
- if monitors[1] ~= nil then
- clear()
- for _,v in ipairs(monitors) do
- local A = peripheral.wrap(v)
- redraw(A, pageNmr)
- os.queueEvent("")
- os.pullEvent()
- end
- end
- --redraw(term, pageNmr)
- local maxX, maxY = term.getSize()
- local ev, _, xPos, yPos = os.pullEvent()
- local mon = false
- if ev == "monitor_touch" then
- local mon = true
- maxX, maxY = (peripheral.wrap(_)).getSize()
- end
- if ev == "monitor_touch" then
- if xPos >= 2 and xPos <= 5 and yPos == maxY then
- if pageNmr > 1 then
- pageNmr = pageNmr - 1
- end
- elseif xPos >= maxX-4 and xPos <= maxX-1 and yPos == maxY then
- pageNmr = pageNmr + 1
- elseif yPos > 1 and yPos < maxY then
- showTask(yPos, pageNmr, maxX, _)
- end
- elseif ev == "mouse_click" then
- if yPos == 6 then
- addTask()
- elseif yPos == 8 then
- delTask()
- end
- end
- sleep(.001)
- end
- end
- parallel.waitForAny(iCanRun, remoteTasks)
Add Comment
Please, Sign In to add comment