Advertisement
dadragon84

to do list

Nov 11th, 2013
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.24 KB | None | 0 0
  1. -- Severino Todo List
  2. -- Need 16 advanced monitors and an advanced computer
  3.  
  4. --Peripheral Wraps
  5. todo = peripheral.wrap("right")
  6. mes = peripheral.wrap("left")
  7.  
  8. --Check For Monitors
  9. if not todo then
  10.   error("No Monitor on Right Side",0)
  11. end
  12. if not mes then
  13.   error("No Monitor on Left Side",0)
  14. end    
  15.  
  16. -- Text Scale
  17. todo.setTextScale(.5)
  18. mes.setTextScale(.5)
  19.  
  20. --Define Tables
  21. todoData = {}
  22. mesData = {}
  23.  
  24. --Make Directory and Files
  25. if fs.exists("data") == false then
  26.   fs.makeDir("data")
  27. end
  28. if fs.exists("data/todo") == false then  
  29.   file = fs.open("data/todo","w")
  30.   file.close()
  31. end
  32. if fs.exists("data/mes") == false then  
  33.   file = fs.open("data/mes","w")
  34.   file.close()
  35. end  
  36.  
  37. --Check for Advanced Computers & Monitors
  38. if not term.isColor() then
  39.   error("This Program Must Be Run on an Advanced Computer",0)
  40. end
  41. if not todo.isColor() or not mes.isColor() then
  42.   error("You Must Have Color Monitors on Either Side",0)
  43. end
  44.  
  45. --Check Monitor Size
  46. w,h = mes.getSize()
  47. if w ~= 36 or h ~= 38 then
  48.   error("Left Monitor Not Correct Size,\n3 High and 2 Wide is the Correct Size.", 0)
  49. end
  50. w,h = todo.getSize()
  51. if w ~= 36 or h ~= 38 then
  52.   error("Right Monitor Not Correct Size,\n3 High and 2 Wide is Correct Size.",0)
  53. end  
  54.  
  55.  
  56. -- Text Functions
  57. function center(mon,text,line,colour)
  58.   w,h = todo.getSize()
  59.   if mon == "todo" then
  60.     todo.setCursorPos((w-string.len(text))/2+1,line)
  61.     todo.setTextColor(colour)
  62.     todo.write(text)
  63.     todo.setTextColor(colors.white)
  64.   else
  65.     mes.setCursorPos((w-string.len(text))/2+1,line)
  66.     mes.setTextColor(colour)
  67.     mes.write(text)
  68.     mes.setTextColor(colors.white)
  69.   end
  70. end
  71.  
  72. function wr(mon,x,y,text,colour)
  73.   if mon == "todo" then
  74.     todo.setCursorPos(x,y)
  75.     todo.setTextColor(colour)
  76.     todo.write(text)
  77.     todo.setTextColor(colors.white)
  78.   else
  79.     mes.setCursorPos(x,y)
  80.     mes.setTextColor(colour)
  81.     mes.write(text)
  82.     mes.setTextColor(colors.white)
  83.   end
  84. end
  85.  
  86. -- table functions
  87. function tableW(name,text)
  88.   if name == "todo" then
  89.     table.insert(todoData, text)
  90.   else
  91.     table.insert(mesData,text)
  92.   end
  93. end
  94.  
  95. --File Functions
  96. function getData()
  97.   local file = fs.open("data/todo","r")
  98.   local i = 1
  99.   while true do
  100.     todoData[i] = file.readLine()
  101.     if todoData[i] == nil then
  102.       break
  103.     else
  104.       i = i + 1            
  105.     end
  106.   end
  107.   file.close()
  108.  
  109.   local file = fs.open("data/mes","r")
  110.   for line in file.readLine do
  111.     local location = (line:find(":",1))
  112.     if location then
  113.       local usr = line:sub(1, location - 1)
  114.       local msg = line:sub(location + 1)
  115.       table.insert(mesData, {user = usr, message = msg})
  116.     end
  117.   end    
  118.  
  119.   file.close()
  120. end
  121.  
  122. function saveData()
  123.   local file = fs.open("data/todo","w")
  124.   for i = 1, #todoData do
  125.     file.writeLine(todoData[i])
  126.   end
  127.   file.close()
  128.    
  129.   local file = fs.open("data/mes","w")
  130.     for index, data in pairs(mesData) do      
  131.       file.writeLine(data.user..":"..data.message)
  132.     end  
  133.   file.close()
  134. end    
  135.                                
  136. -- Monitors
  137. function todoMon()
  138.   todo.clear()
  139.   center("todo","To-Do List",1,colors.magenta)
  140.   posx = 1
  141.   posy = 3
  142.   for i=1, #todoData do
  143.     wr("todo",posx,posy,tostring(i),colors.lime)
  144.     posx = posx + 2
  145.     wr("todo",posx,posy,todoData[i],colors.white)
  146.     posx = posx - 2
  147.     posy = posy + 2
  148.   end
  149. end
  150.  
  151. function mesMon()
  152.   mes.clear()
  153.   center("mes","Message Board",1,colors.magenta)
  154.   pX = 2
  155.   pY = 3
  156.   for i=1, #mesData do
  157.     wr("mes",pX,pY,tostring(i),colors.lime)
  158.     pX = pX + 3
  159.     wr("mes",pX,pY,mesData[i].user..":",colors.lightBlue)
  160.     pY = pY + 1
  161.     wr("mes",pX,pY,mesData[i].message,colors.white)
  162.     pX = pX - 3
  163.     pY = pY + 2
  164.   end
  165. end
  166.  
  167. -- Table functions
  168. function clear(name)
  169.   if name == "todo" then
  170.     for i=1, #todoData do
  171.       table.remove(todoData)
  172.     end
  173.   end
  174.   if name == "mes" then
  175.     for i=1, #mesData do
  176.       table.remove(mesData)    
  177.     end
  178.   end
  179. end
  180.  
  181.  
  182. -- Gui Things
  183. -- Main Menu Table
  184. local menu_options = {
  185.   [1] = {text="To-Do List", color = colors.lightBlue},
  186.   [2] = {text="Message Board", color = colors.lightBlue}
  187. }
  188.  
  189. --ToDo Menu Table
  190. local todo_options = {
  191.   [1] = {text="Add Task", color = colors.lime},
  192.   [2] = {text="Delete Task", color = colors.red}
  193. }
  194.  
  195. --Mes Menu Table
  196. local mes_options = {
  197.   [1] = {text="Add Message", color = colors.lime},
  198.   [2] = {text="Delete  Message", color = colors.red}
  199. }
  200. -- Find Terminal X Y
  201. local termX, termY = term.getSize()
  202.  
  203. -- Draw Main Menu
  204. function mainMenuDraw(selected)
  205.   local yPos = termY/2 - #menu_options/2
  206.   for index, data in pairs(menu_options) do
  207.     menu_options[index].bounds = {
  208.       x1 = termX/2 - (#data.text+4)/2,
  209.       x2 = termX/2 + (#data.text+4)/2,
  210.       y = yPos
  211.     }
  212.     term.setTextColor(data.color)
  213.     term.setCursorPos(data.bounds.x1, data.bounds.y)
  214.    
  215.     local text =
  216.       index==selected and "[ "..data.text.." ]" or
  217.       "  "..data.text.."  "
  218.     term.write(text)
  219.     yPos = yPos + 2
  220.   end
  221. end                    
  222.    
  223. -- Draw ToDo Menu
  224. function todoMenuDraw(selected)
  225.   local yPos = termY/2 - #todo_options/2
  226.   for index, data in pairs(todo_options) do
  227.     todo_options[index].bounds  = {
  228.       x = termX/2 - (#data.text+4)/2,
  229.       y = yPos
  230.     }
  231.     term.setTextColor(data.color)
  232.     term.setCursorPos(data.bounds.x,data.bounds.y)
  233.      
  234.     local text =
  235.       index == selected and "[ "..data.text.." ]" or
  236.       "  "..data.text.."  "
  237.      
  238.     term.write(text)
  239.     yPos = yPos + 2                                              
  240.   end    
  241. end
  242.  
  243. -- Draw Message Menu
  244. function mesMenuDraw(selected)
  245.   local yPos = termY/2 - #mes_options/2
  246.   for index, data in pairs(mes_options) do
  247.     mes_options[index].bounds  = {
  248.       x = termX/2 - (#data.text+4)/2,
  249.       y = yPos
  250.     }
  251.     term.setTextColor(data.color)
  252.     term.setCursorPos(data.bounds.x,data.bounds.y)
  253.      
  254.     local text =
  255.       index == selected and "[ "..data.text.." ]" or
  256.       "  "..data.text.."  "
  257.      
  258.     term.write(text)
  259.     yPos = yPos + 2                                              
  260.   end    
  261. end
  262.      
  263. -- Check Click Position                
  264. function checkClick(x,y)
  265.   for index, data in pairs(menu_options) do
  266.     if x >= data.bounds.x1 and x <= data.bounds.x2 and y == data.bounds.y then
  267.       return index
  268.     end
  269.   end
  270.   return false
  271. end      
  272.  
  273. --Display Main Menu
  274. function mainMenu()
  275.   todoMon()
  276.   mesMon()
  277.   term.clear()
  278.   term.setCursorPos(termX/2-14,1)
  279.   term.setTextColor(colors.magenta)
  280.   term.write("Message Board and To-Do List")
  281.  
  282.  
  283.   local selector = 1
  284.   while true do
  285.     mainMenuDraw(selector)
  286.     local e = {os.pullEvent()}
  287.     if e[1] == "key" then
  288.       if e[2] == keys.down then
  289.         selector = selector < #menu_options and selector+1 or 1
  290.       elseif e[2] == keys.up then
  291.         selector = selector > 1 and selector-1 or #menu_options
  292.       elseif e[2] == keys.enter then
  293.         break  
  294.       end            
  295.     end    
  296.   end  
  297.  
  298.   term.clear()
  299.   if selector == 1 then
  300.     todoMenu()
  301.   elseif selector == 2 then
  302.     mesMenu()
  303.   end  
  304. end
  305.  
  306. --Display ToDo Menu
  307. function todoMenu()
  308.   todoMon()
  309.   mesMon()
  310.  
  311.   term.clear()
  312.  
  313.   term.setCursorPos(termX/2-5,1)
  314.   term.setTextColor(colors.magenta)
  315.   term.write("To-Do List")
  316.  
  317.   term.setCursorPos(termX/2-19 ,2)
  318.   term.setTextColor(colors.white)
  319.   term.write("Press Backspace To Go Back To Main Menu")
  320.  
  321.   local selector = 1
  322.   while true do
  323.     todoMenuDraw(selector)
  324.     local e = {os.pullEvent()}
  325.     if e[1] == "key" then
  326.       if e[2] == keys.down then
  327.         selector = selector < #todo_options and selector+1 or 1
  328.       elseif e[2] == keys.up then
  329.         selector = selector > 1 and selector-1 or #todo_options
  330.       elseif e[2] == keys.backspace then
  331.         mainMenu()
  332.       elseif e[2] == keys.enter then
  333.         break
  334.       end
  335.     end
  336.   end
  337.  
  338.   term.clear()
  339.   term.setCursorPos(1,1)
  340.   if selector == 1 then
  341.     addTaskMenu()
  342.   elseif selector == 2 then
  343.     deleteTaskMenu()
  344.   end
  345. end
  346.  
  347. --Display Message Menu
  348. function mesMenu()
  349.   todoMon()
  350.   mesMon()
  351.  
  352.   term.clear()
  353.  
  354.   term.setCursorPos(termX/2-6,1)
  355.   term.setTextColor(colors.magenta)
  356.   term.write("Message Board")
  357.  
  358.   term.setCursorPos(termX/2-19 ,2)
  359.   term.setTextColor(colors.white)
  360.   term.write("Press Backspace To Go Back To Main Menu")
  361.  
  362.   local selector = 1
  363.   while true do
  364.     mesMenuDraw(selector)
  365.     local e = {os.pullEvent()}
  366.     if e[1] == "key" then
  367.       if e[2] == keys.down then
  368.         selector = selector < #mes_options and selector+1 or 1
  369.       elseif e[2] == keys.up then
  370.         selector = selector > 1 and selector-1 or #mes_options
  371.       elseif e[2] == keys.backspace then
  372.         mainMenu()
  373.       elseif e[2] == keys.enter then
  374.         break
  375.       end
  376.     end
  377.   end
  378.  
  379.   term.clear()
  380.   term.setCursorPos(1,1)
  381.   if selector == 1 then
  382.     addMesMenu()
  383.   elseif selector == 2 then
  384.     deleteMesMenu()
  385.   end
  386. end
  387.  
  388. --Add Task Menu
  389. function addTaskMenu()
  390.   term.clear()
  391.   term.setCursorPos(termX/2-13 ,1)
  392.   term.setTextColor(colors.white)
  393.   term.write("Type Task Then Press Enter")
  394.  
  395.   term.setCursorPos(2,3)
  396.   term.setTextColor(colors.lime)
  397.   term.write("> ")
  398.  
  399.   term.setTextColor(colors.white)
  400.   local task = read()
  401.  
  402.   if string.len(task) > 32 then
  403.     term.clear()
  404.     term.setCursorPos(termX/2-10,1)
  405.     term.setTextColor(colors.red)
  406.     term.write("Error: Task too long!")
  407.     sleep(2)
  408.     todoMenu()
  409.   elseif #todoData == 18 then
  410.     term.clear()
  411.     term.setCursorPos(termX/2-11,1)
  412.     term.setTextColor(colors.red)
  413.     term.write("Error: ToDo List Full!")
  414.     sleep(2)
  415.     todoMenu()    
  416.   else  
  417.     tableW("todo", task)
  418.     saveData()
  419.     todoMenu()
  420.   end  
  421. end
  422.  
  423. -- Delete Task Menu
  424. function deleteTaskMenu()
  425.   term.clear()
  426.   term.setCursorPos(termX/2-14 ,1)
  427.   term.setTextColor(colors.white)
  428.   term.write("Type Number of Task To Delete")
  429.   term.setCursorPos(termX/2-11 ,2)
  430.   term.write("Or Type 'all' to clear")
  431.   term.setCursorPos(2,3)
  432.   term.setTextColor(colors.lime)
  433.   term.write("> ")
  434.   term.setTextColor(colors.white)
  435.   number = read()
  436.   if number == "all" then
  437.     clear("todo")
  438.   elseif tonumber(number) == nil then
  439.     term.clear()
  440.     term.setCursorPos(termX/2-10 ,1)
  441.     term.setTextColor(colors.red)
  442.     term.write("Error: Not A Number!")
  443.     sleep(2)
  444.   else  
  445.     table.remove(todoData, number)
  446.   end
  447.   saveData()
  448.   todoMenu()
  449. end  
  450.  
  451. -- Add Message Menu
  452. function addMesMenu()
  453.   term.clear()
  454.   term.setCursorPos(termX/2-11 ,1)
  455.   term.setTextColor(colors.white)
  456.   term.write("Please Type Your Name:")
  457.   term.setCursorPos(2,3)
  458.   term.setTextColor(colors.lime)
  459.   term.write("> ")
  460.   term.setTextColor(colors.white)
  461.   local username = read()
  462.  
  463.   term.clear()
  464.   term.setCursorPos(termX/2-14 ,1)
  465.   term.setTextColor(colors.white)
  466.   term.write("Type Message Then Press Enter")
  467.   term.setCursorPos(2,3)
  468.   term.setTextColor(colors.lime)
  469.   term.write("> ")
  470.   term.setTextColor(colors.white)
  471.   local mes = read()
  472.  
  473.   if string.len(mes) > 32 then
  474.     term.clear()
  475.     term.setCursorPos(termX/2-10,1)
  476.     term.setTextColor(colors.red)
  477.     term.write("Error: Message Too Long!")
  478.     sleep(2)
  479.     mesMenu()
  480.   elseif #mesData == 12 then
  481.     term.clear()
  482.     term.setCursorPos(termX/2-13 ,1)
  483.     term.setTextColor(colors.red)
  484.     term.write("Error: Message Board Full!" )
  485.     sleep(2)
  486.     mesMenu()
  487.   else
  488.     n = #mesData + 1  
  489.     mesData[n] = {
  490.       user = username,
  491.       message = mes
  492.     }  
  493.      
  494.     saveData()
  495.     mesMenu()
  496.   end  
  497. end
  498.  
  499. -- Delete Message Menu
  500. function deleteMesMenu()
  501.   term.clear()
  502.   term.setCursorPos(termX/2-16 ,1)
  503.   term.setTextColor(colors.white)
  504.   term.write("Type Number of Message To Delete")
  505.   term.setCursorPos(termX/2-11 ,2)
  506.   term.write("Or Type 'all' To Clear")
  507.   term.setCursorPos(2,3)
  508.   term.setTextColor(colors.lime)
  509.   term.write("> ")
  510.   term.setTextColor(colors.white)
  511.   number = read()
  512.   if number == "all" then
  513.     clear("mes")
  514.   elseif tonumber(number) == nil then
  515.     term.clear()
  516.     term.setCursorPos(termX/2-10 ,1)
  517.     term.setTextColor(colors.red)
  518.     term.write("Error: Not a Number!")
  519.     sleep(2)
  520.   else  
  521.     table.remove(mesData, number)
  522.   end  
  523.   saveData()
  524.   mesMenu()
  525. end  
  526.  
  527. getData()
  528. mainMenu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement