Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --retrieve perph IDs
- local periList = peripheral.getNames()
- for i = 1, #periList do
- if peripheral.getType(periList[i]) == "monitor" then
- mon = peripheral.wrap(periList[i])
- print("Monitor wrapped as... "..periList[i])
- end
- end
- if mon == nil then -- if no monitor, don't redirect, run on main screen
- mon = term.native
- else
- term.redirect(mon)
- end
- local currentPage = 1 --start on page 1!
- local todo = {} --begin with empty todo list
- local width,height = mon.getSize() --get size of screen
- local line = height - 7 --6 lines of buttons, 1 line of border, remainder for list
- function textCol(color) --useful function, only set color if a color monitor/computer
- if mon.isColor() then
- term.setTextColor(color)
- end
- end
- function openTODO()
- local file = fs.open("todolist","r") --file should be called todolist
- if file ~= nil then --if file exists
- local data = file.readAll() --read entire file
- file.close() --close to ensure writing later
- if (textutils.unserialize(data)==nil) then --if file is invalid or blank data
- todo[1]="make todo list" --setup dummy table
- else
- todo = textutils.unserialize(data) --if its full, use data
- end
- else
- todo[1]="make todo list" --if file doesn't exist, setup dummy table
- end
- end
- function saveTODO() --reverse of previous function
- local file = fs.open("todolist","w")
- file.write(textutils.serialize(todo))
- file.close()
- end
- function displayPage(p) --change table display
- textCol(colors.blue) --blue is nice
- term.setCursorPos(1,6) --start on line 6
- for i = (1+((p-1)*line)),(p*line) do --page 1 starts at 1, if 6 lines, ends on 6. Improve?
- if todo[i] ~= nil then --if line isn't blank
- print(" "..todo[i]) --print line!
- end
- end
- end
- function printButtons() --basic add/cycle buttons
- term.setCursorPos(1,2)
- textCol(colors.green)
- term.write(" Add item")
- term.setCursorPos(1,4)
- textCol(colors.yellow)
- term.write(" Cycle page")
- end
- function itemRemove(itm) --doesn't work if in a function, investigage why...
- term.clear()
- term.setCursorPos(2,2)
- term.write("Really remove item "..itm.."?")
- term.setCursorPos(2,4)
- term.write(todo[itm])
- term.setCursorPos(2,6)
- textCol(colors.green)
- term.write("YES")
- textCol(colors.red)
- term.setCursorPos(2,8)
- term.write("NO")
- --term.write("Y for yes, N for no")
- --os.pullEvent("char")
- y=1
- while (y~=6 and y~=8) do
- --if mon == term.native then
- -- event,but,x,y = os.pullEvent("mouse_click")
- -- else
- -- event,side,x,y = os.pullEvent("monitor_touch")
- -- end
- event,side,x,y = os.pullEvent("monitor_touch")
- end
- if y == 6 then
- table.remove(todo,tonumber(itm))
- end
- end
- --end broke function -------------------------------------
- function addItem() --pretty simple
- term.clear() --clear terminal
- term.setCursorPos(2,2) --indent
- print("please see computer for input") --display on monitor
- term.redirect(term.native) --reset to terminal
- term.clear() --clear terminal
- print("Please enter new item:")
- local input = read() --get item
- for i=#todo+1,2,-1 do --for every item in the table,
- todo[i] = todo[i-1] --shift 1 position over
- end
- todo[1] = input --add to TOP of list. This is optional and can be easily undone to add to the bottom instead
- print("thanks!") --output on terminal
- term.redirect(mon) --redirect to monitor (if applicable)
- end
- --initial printing
- openTODO()
- term.clear()
- printButtons()
- displayPage(1)
- while (true) do --forever loop!
- -- if mon == term.native() then --if get where the user clicks, monitor or computer)
- -- event,but,x,y = os.pullEvent("mouse_click")
- -- else
- -- event,side,x,y = os.pullEvent("monitor_touch")
- -- end
- event,side,x,y = os.pullEvent("monitor_touch")
- if (y == 2) then -- user clicks "add item
- addItem()
- end
- if (y == 4) then -- user clicks cycle page
- if (currentPage >= #todo/(line)) then --#todo/line = max pages
- currentPage = 1
- else
- currentPage = currentPage +1
- end
- end
- if y >= 6 and y < 6+line then --user clicks a todo item
- itm = ((currentPage-1)*line)+y-5
- if todo[itm]~=nil then --item actually exists
- --itemRemove(itm)
- term.clear()
- term.setCursorPos(2,2)
- term.write("Really remove item "..itm.."?")
- term.setCursorPos(2,4)
- term.write(todo[itm])
- term.setCursorPos(2,6)
- textCol(colors.green)
- term.write("YES")
- textCol(colors.red)
- term.setCursorPos(2,8)
- term.write("NO")
- y=1
- while (y~=6 and y~=8) do
- -- if mon == term.native() then
- -- event,but,x,y = os.pullEvent("mouse_click")
- -- else
- -- event,side,x,y = os.pullEvent("monitor_touch")
- -- end
- event,side,x,y = os.pullEvent("monitor_touch")
- end
- if y == 6 then
- table.remove(todo,tonumber(itm))
- end
- end
- --ends remove code, MUCH MUCH neater in a function, but returns NIL errors if it is in one...
- end
- term.clear() --reset terminal
- printButtons() --redraw everything
- term.setCursorPos(1,1) --not needed, but keeps terminal tidy
- displayPage(currentPage)
- saveTODO() --save list so any additions/removals are preserved in case of crash.
- end
Advertisement
Add Comment
Please, Sign In to add comment