Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Severino Todo List
- -- Need 16 advanced monitors and an advanced computer
- --Peripheral Wraps
- todo = peripheral.wrap("right")
- mes = peripheral.wrap("left")
- --Check For Monitors
- if not todo then
- error("No Monitor on Right Side",0)
- end
- if not mes then
- error("No Monitor on Left Side",0)
- end
- -- Text Scale
- todo.setTextScale(.5)
- mes.setTextScale(.5)
- --Define Tables
- todoData = {}
- mesData = {}
- --Make Directory and Files
- if fs.exists("data") == false then
- fs.makeDir("data")
- end
- if fs.exists("data/todo") == false then
- file = fs.open("data/todo","w")
- file.close()
- end
- if fs.exists("data/mes") == false then
- file = fs.open("data/mes","w")
- file.close()
- end
- --Check for Advanced Computers & Monitors
- if not term.isColor() then
- error("This Program Must Be Run on an Advanced Computer",0)
- end
- if not todo.isColor() or not mes.isColor() then
- error("You Must Have Color Monitors on Either Side",0)
- end
- --Check Monitor Size
- w,h = mes.getSize()
- if w ~= 36 or h ~= 38 then
- error("Left Monitor Not Correct Size,\n3 High and 2 Wide is the Correct Size.", 0)
- end
- w,h = todo.getSize()
- if w ~= 36 or h ~= 38 then
- error("Right Monitor Not Correct Size,\n3 High and 2 Wide is Correct Size.",0)
- end
- -- Text Functions
- function center(mon,text,line,colour)
- w,h = todo.getSize()
- if mon == "todo" then
- todo.setCursorPos((w-string.len(text))/2+1,line)
- todo.setTextColor(colour)
- todo.write(text)
- todo.setTextColor(colors.white)
- else
- mes.setCursorPos((w-string.len(text))/2+1,line)
- mes.setTextColor(colour)
- mes.write(text)
- mes.setTextColor(colors.white)
- end
- end
- function wr(mon,x,y,text,colour)
- if mon == "todo" then
- todo.setCursorPos(x,y)
- todo.setTextColor(colour)
- todo.write(text)
- todo.setTextColor(colors.white)
- else
- mes.setCursorPos(x,y)
- mes.setTextColor(colour)
- mes.write(text)
- mes.setTextColor(colors.white)
- end
- end
- -- table functions
- function tableW(name,text)
- if name == "todo" then
- table.insert(todoData, text)
- else
- table.insert(mesData,text)
- end
- end
- --File Functions
- function getData()
- local file = fs.open("data/todo","r")
- local i = 1
- while true do
- todoData[i] = file.readLine()
- if todoData[i] == nil then
- break
- else
- i = i + 1
- end
- end
- file.close()
- local file = fs.open("data/mes","r")
- for line in file.readLine do
- local location = (line:find(":",1))
- if location then
- local usr = line:sub(1, location - 1)
- local msg = line:sub(location + 1)
- table.insert(mesData, {user = usr, message = msg})
- end
- end
- file.close()
- end
- function saveData()
- local file = fs.open("data/todo","w")
- for i = 1, #todoData do
- file.writeLine(todoData[i])
- end
- file.close()
- local file = fs.open("data/mes","w")
- for index, data in pairs(mesData) do
- file.writeLine(data.user..":"..data.message)
- end
- file.close()
- end
- -- Monitors
- function todoMon()
- todo.clear()
- center("todo","To-Do List",1,colors.magenta)
- posx = 1
- posy = 3
- for i=1, #todoData do
- wr("todo",posx,posy,tostring(i),colors.lime)
- posx = posx + 2
- wr("todo",posx,posy,todoData[i],colors.white)
- posx = posx - 2
- posy = posy + 2
- end
- end
- function mesMon()
- mes.clear()
- center("mes","Message Board",1,colors.magenta)
- pX = 2
- pY = 3
- for i=1, #mesData do
- wr("mes",pX,pY,tostring(i),colors.lime)
- pX = pX + 3
- wr("mes",pX,pY,mesData[i].user..":",colors.lightBlue)
- pY = pY + 1
- wr("mes",pX,pY,mesData[i].message,colors.white)
- pX = pX - 3
- pY = pY + 2
- end
- end
- -- Table functions
- function clear(name)
- if name == "todo" then
- for i=1, #todoData do
- table.remove(todoData)
- end
- end
- if name == "mes" then
- for i=1, #mesData do
- table.remove(mesData)
- end
- end
- end
- -- Gui Things
- -- Main Menu Table
- local menu_options = {
- [1] = {text="To-Do List", color = colors.lightBlue},
- [2] = {text="Message Board", color = colors.lightBlue}
- }
- --ToDo Menu Table
- local todo_options = {
- [1] = {text="Add Task", color = colors.lime},
- [2] = {text="Delete Task", color = colors.red}
- }
- --Mes Menu Table
- local mes_options = {
- [1] = {text="Add Message", color = colors.lime},
- [2] = {text="Delete Message", color = colors.red}
- }
- -- Find Terminal X Y
- local termX, termY = term.getSize()
- -- Draw Main Menu
- function mainMenuDraw(selected)
- local yPos = termY/2 - #menu_options/2
- for index, data in pairs(menu_options) do
- menu_options[index].bounds = {
- x1 = termX/2 - (#data.text+4)/2,
- x2 = termX/2 + (#data.text+4)/2,
- y = yPos
- }
- term.setTextColor(data.color)
- term.setCursorPos(data.bounds.x1, data.bounds.y)
- local text =
- index==selected and "[ "..data.text.." ]" or
- " "..data.text.." "
- term.write(text)
- yPos = yPos + 2
- end
- end
- -- Draw ToDo Menu
- function todoMenuDraw(selected)
- local yPos = termY/2 - #todo_options/2
- for index, data in pairs(todo_options) do
- todo_options[index].bounds = {
- x = termX/2 - (#data.text+4)/2,
- y = yPos
- }
- term.setTextColor(data.color)
- term.setCursorPos(data.bounds.x,data.bounds.y)
- local text =
- index == selected and "[ "..data.text.." ]" or
- " "..data.text.." "
- term.write(text)
- yPos = yPos + 2
- end
- end
- -- Draw Message Menu
- function mesMenuDraw(selected)
- local yPos = termY/2 - #mes_options/2
- for index, data in pairs(mes_options) do
- mes_options[index].bounds = {
- x = termX/2 - (#data.text+4)/2,
- y = yPos
- }
- term.setTextColor(data.color)
- term.setCursorPos(data.bounds.x,data.bounds.y)
- local text =
- index == selected and "[ "..data.text.." ]" or
- " "..data.text.." "
- term.write(text)
- yPos = yPos + 2
- end
- end
- -- Check Click Position
- function checkClick(x,y)
- for index, data in pairs(menu_options) do
- if x >= data.bounds.x1 and x <= data.bounds.x2 and y == data.bounds.y then
- return index
- end
- end
- return false
- end
- --Display Main Menu
- function mainMenu()
- todoMon()
- mesMon()
- term.clear()
- term.setCursorPos(termX/2-14,1)
- term.setTextColor(colors.magenta)
- term.write("Message Board and To-Do List")
- local selector = 1
- while true do
- mainMenuDraw(selector)
- local e = {os.pullEvent()}
- if e[1] == "key" then
- if e[2] == keys.down then
- selector = selector < #menu_options and selector+1 or 1
- elseif e[2] == keys.up then
- selector = selector > 1 and selector-1 or #menu_options
- elseif e[2] == keys.enter then
- break
- end
- end
- end
- term.clear()
- if selector == 1 then
- todoMenu()
- elseif selector == 2 then
- mesMenu()
- end
- end
- --Display ToDo Menu
- function todoMenu()
- todoMon()
- mesMon()
- term.clear()
- term.setCursorPos(termX/2-5,1)
- term.setTextColor(colors.magenta)
- term.write("To-Do List")
- term.setCursorPos(termX/2-19 ,2)
- term.setTextColor(colors.white)
- term.write("Press Backspace To Go Back To Main Menu")
- local selector = 1
- while true do
- todoMenuDraw(selector)
- local e = {os.pullEvent()}
- if e[1] == "key" then
- if e[2] == keys.down then
- selector = selector < #todo_options and selector+1 or 1
- elseif e[2] == keys.up then
- selector = selector > 1 and selector-1 or #todo_options
- elseif e[2] == keys.backspace then
- mainMenu()
- elseif e[2] == keys.enter then
- break
- end
- end
- end
- term.clear()
- term.setCursorPos(1,1)
- if selector == 1 then
- addTaskMenu()
- elseif selector == 2 then
- deleteTaskMenu()
- end
- end
- --Display Message Menu
- function mesMenu()
- todoMon()
- mesMon()
- term.clear()
- term.setCursorPos(termX/2-6,1)
- term.setTextColor(colors.magenta)
- term.write("Message Board")
- term.setCursorPos(termX/2-19 ,2)
- term.setTextColor(colors.white)
- term.write("Press Backspace To Go Back To Main Menu")
- local selector = 1
- while true do
- mesMenuDraw(selector)
- local e = {os.pullEvent()}
- if e[1] == "key" then
- if e[2] == keys.down then
- selector = selector < #mes_options and selector+1 or 1
- elseif e[2] == keys.up then
- selector = selector > 1 and selector-1 or #mes_options
- elseif e[2] == keys.backspace then
- mainMenu()
- elseif e[2] == keys.enter then
- break
- end
- end
- end
- term.clear()
- term.setCursorPos(1,1)
- if selector == 1 then
- addMesMenu()
- elseif selector == 2 then
- deleteMesMenu()
- end
- end
- --Add Task Menu
- function addTaskMenu()
- term.clear()
- term.setCursorPos(termX/2-13 ,1)
- term.setTextColor(colors.white)
- term.write("Type Task Then Press Enter")
- term.setCursorPos(2,3)
- term.setTextColor(colors.lime)
- term.write("> ")
- term.setTextColor(colors.white)
- local task = read()
- if string.len(task) > 32 then
- term.clear()
- term.setCursorPos(termX/2-10,1)
- term.setTextColor(colors.red)
- term.write("Error: Task too long!")
- sleep(2)
- todoMenu()
- elseif #todoData == 18 then
- term.clear()
- term.setCursorPos(termX/2-11,1)
- term.setTextColor(colors.red)
- term.write("Error: ToDo List Full!")
- sleep(2)
- todoMenu()
- else
- tableW("todo", task)
- saveData()
- todoMenu()
- end
- end
- -- Delete Task Menu
- function deleteTaskMenu()
- term.clear()
- term.setCursorPos(termX/2-14 ,1)
- term.setTextColor(colors.white)
- term.write("Type Number of Task To Delete")
- term.setCursorPos(termX/2-11 ,2)
- term.write("Or Type 'all' to clear")
- term.setCursorPos(2,3)
- term.setTextColor(colors.lime)
- term.write("> ")
- term.setTextColor(colors.white)
- number = read()
- if number == "all" then
- clear("todo")
- elseif tonumber(number) == nil then
- term.clear()
- term.setCursorPos(termX/2-10 ,1)
- term.setTextColor(colors.red)
- term.write("Error: Not A Number!")
- sleep(2)
- else
- table.remove(todoData, number)
- end
- saveData()
- todoMenu()
- end
- -- Add Message Menu
- function addMesMenu()
- term.clear()
- term.setCursorPos(termX/2-11 ,1)
- term.setTextColor(colors.white)
- term.write("Please Type Your Name:")
- term.setCursorPos(2,3)
- term.setTextColor(colors.lime)
- term.write("> ")
- term.setTextColor(colors.white)
- local username = read()
- term.clear()
- term.setCursorPos(termX/2-14 ,1)
- term.setTextColor(colors.white)
- term.write("Type Message Then Press Enter")
- term.setCursorPos(2,3)
- term.setTextColor(colors.lime)
- term.write("> ")
- term.setTextColor(colors.white)
- local mes = read()
- if string.len(mes) > 32 then
- term.clear()
- term.setCursorPos(termX/2-10,1)
- term.setTextColor(colors.red)
- term.write("Error: Message Too Long!")
- sleep(2)
- mesMenu()
- elseif #mesData == 12 then
- term.clear()
- term.setCursorPos(termX/2-13 ,1)
- term.setTextColor(colors.red)
- term.write("Error: Message Board Full!" )
- sleep(2)
- mesMenu()
- else
- n = #mesData + 1
- mesData[n] = {
- user = username,
- message = mes
- }
- saveData()
- mesMenu()
- end
- end
- -- Delete Message Menu
- function deleteMesMenu()
- term.clear()
- term.setCursorPos(termX/2-16 ,1)
- term.setTextColor(colors.white)
- term.write("Type Number of Message To Delete")
- term.setCursorPos(termX/2-11 ,2)
- term.write("Or Type 'all' To Clear")
- term.setCursorPos(2,3)
- term.setTextColor(colors.lime)
- term.write("> ")
- term.setTextColor(colors.white)
- number = read()
- if number == "all" then
- clear("mes")
- elseif tonumber(number) == nil then
- term.clear()
- term.setCursorPos(termX/2-10 ,1)
- term.setTextColor(colors.red)
- term.write("Error: Not a Number!")
- sleep(2)
- else
- table.remove(mesData, number)
- end
- saveData()
- mesMenu()
- end
- getData()
- mainMenu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement