thatparadox

Stargate Control

Nov 17th, 2014
24,822
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. mon = peripheral.find("monitor")
  2. sg = peripheral.find("stargate")
  3.  
  4. mon.setBackgroundColor(colors.black)
  5. mon.clear()
  6. maxEng = 50000
  7. dialling = {}
  8.  
  9. local function alarmSet(set)
  10.   rs.setOutput("left", set)
  11.   return
  12. end
  13.  
  14. function drawPowerBar() -- checks power levels and writes power bar to monitor
  15.   x,y = mon.getSize()
  16.   engPercent = (sg.energyAvailable() / (maxEng +1)) * 100 -- returns percent
  17.   for i = y, (y - y / 100 * engPercent), -1 do
  18.     mon.setCursorPos(x-2,i)
  19.     if i > y/4*3 then
  20.       mon.setBackgroundColor(colors.red)
  21.       mon.setTextColor(colors.red)
  22.     elseif i > y/2 then
  23.       mon.setBackgroundColor(colors.orange)
  24.       mon.setTextColor(colors.orange)
  25.     elseif i > y/4 then
  26.       mon.setBackgroundColor(colors.green)
  27.       mon.setTextColor(colors.green)
  28.     else
  29.       mon.setBackgroundColor(colors.lime)
  30.       mon.setTextColor(colors.lime)
  31.     end
  32.     mon.write("  ")
  33.   end
  34.   mon.setBackgroundColor(colors.black)
  35.   mon.setCursorPos(x-9,y)
  36.   mon.write(math.floor(sg.energyAvailable() / 1000).."k SU ")
  37. end
  38.  
  39. function drawChevrons() --draws cheyvrons on the screen
  40.   x,y = mon.getSize()
  41.   chevX1 = x/3
  42.   chevX2 = x/3*2+1
  43.   chevY1 = y/3-2
  44.   chevY2 = y/3*2 +2
  45.   mon.setBackgroundColor(colors.black)
  46.   for yc = chevY1-2, chevY2-2 do
  47.     for xc = chevX1-2, chevX2-2 do
  48.       mon.setCursorPos(xc, yc)
  49.       mon.write(" ")
  50.     end
  51.   end
  52.   mon.setBackgroundColor(colors.lightGray)
  53.   for i = chevX1+2, chevX2-2 do
  54.     mon.setCursorPos(i,chevY1)
  55.     mon.write(" ")
  56.   end
  57.   for i = chevX1+2, chevX2-2 do
  58.     mon.setCursorPos(i,chevY2)
  59.     mon.write(" ")
  60.   end
  61.   for i = chevY1+2, chevY2-2 do
  62.     mon.setCursorPos(chevX1,i)
  63.     mon.write(" ")
  64.   end
  65.   for i = chevY1+2, chevY2-2 do
  66.     mon.setCursorPos(chevX2, i)
  67.     mon.write(" ")
  68.   end
  69.   chev1pos = {chevX1, chevY2 }
  70.   mon.setBackgroundColor(colors.gray)
  71.   mon.setTextColor(colors.black)
  72.   mon.setCursorPos(math.floor(chev1pos[1]), math.floor(chev1pos[2])-1)
  73.   mon.write(" > ")
  74.   chev2pos = {chevX1, chevY1 + ((chevY2 - chevY1) / 2) }
  75.   mon.setCursorPos(math.floor(chev2pos[1]-1), math.floor(chev2pos[2]))
  76.   mon.write(" > ")
  77.   chev3pos = {chevX1, chevY1 }
  78.   mon.setCursorPos(math.floor(chev3pos[1]), math.floor(chev3pos[2]+1))
  79.   mon.write(" > ")
  80.   chev4pos = {chevX1 + ((chevX2 - chevX1) / 2), chevY1 }
  81.   mon.setCursorPos(math.floor(chev4pos[1]-1), math.floor(chev4pos[2]))
  82.   mon.write(" V ")
  83.   chev5pos = {chevX2, chevY1 }
  84.   mon.setCursorPos(math.floor(chev5pos[1]-2), math.floor(chev5pos[2])+1)
  85.   mon.write(" < ")
  86.   chev6pos = {chevX2, chevY1 + ((chevY2 - chevY1) / 2) }
  87.   mon.setCursorPos(math.floor(chev6pos[1]-1), math.floor(chev6pos[2]))
  88.   mon.write(" < ")
  89.   chev7pos = {chevX2, chevY2 }
  90.   mon.setCursorPos(math.floor(chev7pos[1]-2), math.floor(chev7pos[2]-1))
  91.   mon.write(" < ")
  92.   chev8pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  93.   mon.setCursorPos(math.floor(chev8pos[1]-1), math.floor(chev8pos[2]))
  94.   mon.write("   ")
  95. --  chev9pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  96. --  mon.setCursorPos(math.floor(chev8pos[1]-1), chevY1 + ((chevY2 - chevY1) / 2))
  97. --  mon.write(" 9 ")
  98.   mon.setBackgroundColor(colors.black)
  99.   mon.setCursorPos(x/2 - 4, y/2 - 1)
  100.   mon.write("           ")
  101.   mon.setCursorPos(x/2-1, y/2+4)
  102.   mon.write("     ")
  103. end
  104.  
  105. function drawChev( chevInfo )
  106.   mon.setBackgroundColor(colors.gray)
  107.   x,y = mon.getSize()
  108.   chevX1 = x/3
  109.   chevX2 = x/3*2+1
  110.   chevY1 = y/3-2
  111.   chevY2 = y/3*2 +2
  112.   if chevInfo[1] == 1 then
  113.     chev1pos = {chevX1, chevY2 }
  114.     mon.setBackgroundColor(colors.gray)
  115.     mon.setCursorPos(math.floor(chev1pos[1]), math.floor(chev1pos[2])-1)
  116.     mon.write(" "..chevInfo[2].." ")
  117.   elseif chevInfo[1] == 2 then
  118.     chev2pos = {chevX1, chevY1 + ((chevY2 - chevY1) / 2) }
  119.     mon.setCursorPos(math.floor(chev2pos[1]-1), math.floor(chev2pos[2]))
  120.     mon.write(" "..chevInfo[2].." ")
  121.   elseif chevInfo[1] == 3 then
  122.     chev3pos = {chevX1, chevY1 }
  123.     mon.setCursorPos(math.floor(chev3pos[1]), math.floor(chev3pos[2]+1))
  124.     mon.write(" "..chevInfo[2].." ")
  125.   elseif chevInfo[1] == 4 then
  126.     chev4pos = {chevX1 + ((chevX2 - chevX1) / 2), chevY1 }
  127.     mon.setCursorPos(math.floor(chev4pos[1]-1), math.floor(chev4pos[2]))
  128.     mon.write(" "..chevInfo[2].." ")
  129.   elseif chevInfo[1] == 5 then
  130.     chev5pos = {chevX2, chevY1 }
  131.     mon.setCursorPos(math.floor(chev5pos[1]-2), math.floor(chev5pos[2])+1)
  132.     mon.write(" "..chevInfo[2].." ")
  133.   elseif chevInfo[1] == 6 then
  134.     chev6pos = {chevX2, chevY1 + ((chevY2 - chevY1) / 2) }
  135.     mon.setCursorPos(math.floor(chev6pos[1]-1), math.floor(chev6pos[2]))
  136.     mon.write(" "..chevInfo[2].." ")
  137.   elseif chevInfo[1] == 7 then
  138.     chev7pos = {chevX2, chevY2 }
  139.     mon.setCursorPos(math.floor(chev7pos[1]-2), math.floor(chev7pos[2]-1))
  140.     mon.write(" "..chevInfo[2].." ")
  141.   elseif chevInfo[1] == 8 then
  142.     chev8pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  143.     mon.setCursorPos(math.floor(chev8pos[1]-1), math.floor(chev8pos[2]))
  144.     mon.write(" "..chevInfo[2].." ")
  145.   elseif chevInfo[1] == 9 then
  146.     chev9pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  147.     mon.setCursorPos(math.floor(chev8pos[1]-1), chevY1 + ((chevY2 - chevY1) / 2))
  148.     mon.write(" "..chevInfo[2].." ")
  149.   mon.setBackgroundColor(colors.black)
  150. end
  151.  
  152. end
  153.  
  154. function drawSgStatus(status) -- draws stargate status
  155.   if status ~= "Idle" then
  156.   term.setCursorPos(1,2)
  157.   write(status) --needed for sting length because sting.len() won't work with stargateStatus()
  158.   xc, yc = term.getCursorPos()
  159.   term.clear()
  160.   term.setCursorPos(1,2)
  161.   write("> ")
  162.   if xc%2 == 1 then
  163.     xc = xc+1
  164.     even = true
  165.   else
  166.     even = false
  167.   end
  168.   mon.setBackgroundColor(colors.black)
  169.   if status == "Connected" then
  170.     mon.setTextColor(colors.lightBlue)
  171.   elseif status == "Dialling" then
  172.     mon.setTextColor(colors.orange)
  173.   else
  174.     mon.setTextColor(colors.green)
  175.   end
  176.   x,y = mon.getSize()
  177.   mon.setCursorPos((x/2+1) - 6, y/2+2)
  178.   mon.write("            ")
  179.   mon.setCursorPos((x/2+1) - (xc/2-1), y/2+2)
  180.   mon.write(status)
  181.   if even == true then
  182.     mon.write(".")
  183.   end
  184.   end
  185. end
  186.  
  187. function drawIris(state) --draws button to control the Iris
  188.   mon.setBackgroundColor(colors.lightGray)
  189.   ok, result = pcall(sg.openIris)
  190.   if ok == false then
  191.     mon.setTextColor(colors.red)
  192.   elseif state == true then
  193.     sg.closeIris()
  194.     mon.setTextColor(colors.lime)
  195.   else
  196.     mon.setTextColor(colors.black)
  197.     sg.openIris()
  198.   end
  199.   s = "   IRIS   "
  200.   i = 1
  201.   for  yc = y/3-1, y/3*2 +1 do
  202.     char = string.sub(s, i, i)
  203.     mon.setCursorPos(6, yc)
  204.     mon.write(" "..char.." ")
  205.     i = i+1
  206.   end
  207.   if state == true then
  208.     mon.setTextColor(colors.lime)
  209.   else
  210.     mon.setTextColor(colors.black)
  211.   end
  212. end
  213.  
  214. function drawLocalAddress() -- draws the address stargate being controlled
  215.   x,y = mon.getSize()
  216.   mon.setBackgroundColor(colors.black)
  217.   mon.setTextColor(colors.lightGray)
  218.   mon.setCursorPos(x/2-7, 1)
  219.   mon.write("Stargate Address:")
  220.   mon.setCursorPos(x/2-3, 2)
  221.   mon.write(sg.localAddress())
  222. end
  223.  
  224. function drawDial() -- draws the button to access the dialing menu
  225.   x,y = mon.getSize()
  226.   state, int = sg.stargateState()
  227.   for yc = y-3, y-1 do
  228.     for xc = x/2-5, x/2 do
  229.       if state == "Idle" then
  230.         mon.setBackgroundColor(colors.lightGray)
  231.       else
  232.         mon.setBackgroundColor(colors.gray)
  233.       end
  234.       mon.setCursorPos(xc,yc)
  235.       mon.write(" ")
  236.     end
  237.   end
  238.   mon.setCursorPos(x/2-4, y-2)
  239.   mon.setTextColor(colors.black)
  240.   mon.write("DIAL")
  241. end
  242.  
  243. function drawTerm() -- draws the button to terminate the stargate connection to another gate
  244.   x,y = mon.getSize()
  245.   state, int = sg.stargateState()
  246.   for yc = y-3, y-1 do
  247.     for xc = x/2+2, x/2+7 do
  248.       if state == "Connected" or state == "Connecting" or state == "Dialling" then
  249.         mon.setBackgroundColor(colors.lightGray)
  250.       else
  251.         mon.setBackgroundColor(colors.gray)
  252.       end
  253.       mon.setCursorPos(xc,yc)
  254.       mon.write(" ")
  255.     end
  256.   end
  257.   mon.setCursorPos(x/2+3, y-2)
  258.   mon.setTextColor(colors.black)
  259.   mon.write("TERM")
  260. end
  261.  
  262. function securityButton() -- draws the button to access the security menu
  263.   x,y = mon.getSize()
  264.   mon.setBackgroundColor(colors.lightGray)
  265.   sOK, result = pcall(sg.openIris)
  266.   if sOK == false then
  267.     mon.setTextColor(colors.red)
  268.   else
  269.     mon.setTextColor(colors.black)
  270.   end
  271.   s = " DEFENCE "
  272.   i = 1
  273.   for  yc = y/3-1, y/3*2 +1 do
  274.     char = string.sub(s, i, i)
  275.     mon.setCursorPos(2, yc)
  276.     mon.write(" "..char.." ")
  277.     i = i+1
  278.   end
  279.   mon.setBackgroundColor(colors.black)
  280. end
  281.  
  282. function drawSecurityPageTop() --draws the top of the security menu, all the addresses stored in the security table
  283.   mon.setBackgroundColor(colors.black)
  284.   mon.clear()
  285.   mon.setTextColor(colors.black)
  286.   x,y = mon.getSize()
  287.   for yc = 1,y-3 do
  288.     if yc%2 == 1 then
  289.       mon.setBackgroundColor(colors.lightBlue)
  290.     else
  291.       mon.setBackgroundColor(colors.lightGray)
  292.     end
  293.     for xc = 1,x do
  294.       mon.setCursorPos(xc, yc)
  295.       mon.write(" ")
  296.     end
  297.     mon.setCursorPos(x/2-4, yc)
  298.     mon.write("Add Address")
  299.   end
  300.   if fs.exists("secList") then
  301.     file = fs.open("secList","r")
  302.     secInfo = textutils.unserialize(file.readAll())
  303.     file.close()
  304.     if string.len(textutils.serialize(secInfo)) > 7 then
  305.     for k,v in pairs(secInfo) do
  306.       mon.setCursorPos(1,i)
  307.         if k%2 == 1 then
  308.           mon.setBackgroundColor(colors.lightBlue)
  309.         else
  310.           mon.setBackgroundColor(colors.lightGray)
  311.         end
  312.         mon.setCursorPos(1, k)
  313.         mon.write(v.name)
  314.         mon.setCursorPos(x/2-4, k)
  315.         mon.write("           ")
  316.         mon.setCursorPos(x/2 - string.len(v.address)/2 +1, k)
  317.         mon.write(v.address)
  318.         mon.setCursorPos(x,k)
  319.         mon.setBackgroundColor(colors.red)
  320.         mon.write("X")
  321.     end
  322.     end
  323.   end
  324.   mon.setBackgroundColor(colors.black)
  325. end
  326.  
  327. function drawSecurityPageBottom(listType) -- draws the buttons at the bottom of the security page
  328.   for yc = y-2, y do
  329.     for xc = 1, x do
  330.       mon.setCursorPos(xc, yc)
  331.       if listType == "BLACKLIST" then
  332.         mon.setBackgroundColor(colors.black)
  333.         mon.setTextColor(colors.white)
  334.       elseif listType == "WHITELIST" then
  335.         mon.setBackgroundColor(colors.white)
  336.         mon.setTextColor(colors.black)
  337.       elseif listType == "NONE" then
  338.         mon.setBackgroundColor(colors.gray)
  339.         mon.setTextColor(colors.white)
  340.       end
  341.       mon.write(" ")
  342.     end
  343.   end
  344.   mon.setCursorPos((x/2 - tonumber(string.len(listType)/2)+1), y-1)
  345.   mon.write(listType)
  346.   mon.setCursorPos(x-5, y-1)
  347.   mon.write("BACK")
  348.   mon.setBackgroundColor(colors.black)
  349. end  
  350.  
  351. function drawHome() -- draws the home screen
  352.   mon.setBackgroundColor(colors.black)
  353.   x,y = mon.getSize()
  354.   mon.clear()
  355.   mon.setCursorPos(1,y)
  356.   mon.setTextColor(colors.gray)
  357.   mon.setBackgroundColor(colors.black)
  358.   mon.write("thatParadox")
  359.   drawPowerBar()
  360.   drawChevrons()
  361.   status, int = sg.stargateState()
  362.   drawSgStatus(tostring(status))
  363.   drawHistoryButton()
  364.   if sg.irisState()  == "Open" then
  365.     drawIris(false)
  366.   else
  367.     drawIris(true)
  368.   end
  369.   drawLocalAddress()
  370.   securityButton()
  371.   drawDial()
  372.   mon.setCursorBlink(false)
  373.   drawTerm()
  374. end
  375.  
  376. function drawBookmarksPage()
  377.   mon.setBackgroundColor(colors.black)
  378.   mon.clear()
  379.   mon.setTextColor(colors.black)
  380.   x,y = mon.getSize()
  381.   for yc = 1,y-3 do
  382.     if yc%2 == 1 then
  383.       mon.setBackgroundColor(colors.lightBlue)
  384.     else
  385.       mon.setBackgroundColor(colors.lightGray)
  386.     end
  387.     for xc = 1,x do
  388.       mon.setCursorPos(xc, yc)
  389.       mon.write(" ")
  390.     end
  391.   end
  392.   for i= 1,y do
  393.     if i%2 == 1 then
  394.       mon.setBackgroundColor(colors.lightBlue)
  395.     else
  396.       mon.setBackgroundColor(colors.lightGray)
  397.     end
  398.     if fs.exists(tostring(i)) then
  399.       file = fs.open(tostring(i),"r")
  400.       bookmark = textutils.unserialize(file.readAll())
  401.       file.close()
  402.       mon.setCursorPos(1,i)
  403.       for k,v in pairs(bookmark) do
  404.         if k == "name" then
  405.           mon.write(v)
  406.           mon.setCursorPos(x/2, i)
  407.           mon.write(bookmark.address)
  408.           mon.setCursorPos(x,i)
  409.           mon.setBackgroundColor(colors.red)
  410.           mon.write("X")
  411.         end
  412.       end
  413.     elseif i < y-2 then
  414.       mon.setCursorPos(1, i)
  415.       mon.write("Add Address")
  416.     end
  417.   end
  418.   mon.setCursorPos(x/2, y-1)
  419.   mon.setBackgroundColor(colors.black)
  420.   mon.setTextColor(colors.white)
  421.   mon.write("BACK")
  422. end
  423.  
  424. function drawRemoteIris()
  425.   mon.setBackgroundColor(colors.black)
  426.   x,y = mon.getSize()
  427.   mon.setCursorPos(x/2-1, y/2+4)
  428.   mon.write("IRIS.")
  429. end
  430.  
  431. function inputPage(type)
  432.   mon.clear()
  433.   term.redirect(mon)
  434.   term.setBackgroundColor(colors.lightGray)
  435.   term.clear()
  436.   x,y = term.getSize()
  437.   term.setCursorPos(x/2-8, y/2-2)
  438.   print("Set an address name")
  439.   term.setCursorPos(x/2 - 4, y/2)
  440.   print("         ")
  441.   term.setCursorPos(x/2 - 4, y/2)
  442.   nameInput = read()
  443.   addressInput = "nil"
  444.   term.setBackgroundColor(colors.lightGray)
  445.   term.clear()
  446.   term.setCursorPos(x/2-9, y/2-4)
  447.   print("Enter Stargate address")
  448.   if type == "secEntry" then
  449.     term.setCursorPos(x/2-10, y/2-2)
  450.     print("DO NOT ENTER ANY HYPHONS")
  451.   end
  452.   term.setBackgroundColor(colors.black)
  453.   term.setCursorPos(x/2 - 5, y/2)
  454.   print("           ")
  455.   term.setCursorPos(x/2 - 5, y/2)
  456.   addressInput = string.upper(read())
  457.   newGate ={name = nameInput, address = addressInput}
  458.   term.redirect(term.native())
  459.   return newGate
  460. end
  461.  
  462. function drawRemoteAddress()
  463.   mon.setBackgroundColor(colors.black)
  464.   x,y = mon.getSize()
  465.   mon.setCursorPos((x/2+1) - string.len(sg.remoteAddress())/2, y/2-2)
  466.   mon.write(sg.remoteAddress())
  467. end
  468.  
  469. function drawHistoryButton()
  470.   mon.setBackgroundColor(colors.lightGray)
  471.   mon.setTextColor(colors.black)
  472.   s = " HISTORY "
  473.   i = 1
  474.   for  yc = y/3-1, y/3*2 +1 do
  475.     char = string.sub(s, i, i)
  476.     mon.setCursorPos(x-7, yc)
  477.     mon.write(" "..char.." ")
  478.     i = i+1
  479.   end
  480. end
  481.  
  482. function addToHistory(address)
  483.   if fs.exists("history") then
  484.     file = fs.open("history", "r")
  485.     history = textutils.unserialize(file.readAll())
  486.     file.close()
  487.   else
  488.     history ={}
  489.     print("")
  490.     print("")
  491.     print("no history file")
  492.   end
  493.   if textutils.serialize(history) == false then
  494.     history = {}
  495.     print("")
  496.     print("")
  497.     print("couldn't serialize")
  498.   end
  499.   test = textutils.serialize(historyTable)
  500.   --if string.len(test) < 7 then
  501.     --history = {}
  502.     --print("")
  503.     --print("")
  504.     --print("string.len too short")
  505.   --end
  506.   table.insert(history, 1, address)
  507.   file = fs.open("history", "w")
  508.   file.write(textutils.serialize(history))
  509.   file.close()
  510. end
  511.  
  512. function drawHistoryPage()
  513.   mon.setBackgroundColor(colors.black)
  514.   mon.clear()
  515.   mon.setTextColor(colors.black)
  516.   x,y = mon.getSize()
  517.   for yc = 1,y-3 do
  518.     if yc%2 == 1 then
  519.       mon.setBackgroundColor(colors.lightBlue)
  520.     else
  521.       mon.setBackgroundColor(colors.lightGray)
  522.     end
  523.     for xc = 1,x do
  524.       mon.setCursorPos(xc, yc)
  525.       mon.write(" ")
  526.     end
  527.   end
  528.   if fs.exists("history") then
  529.     file = fs.open("history","r")
  530.     historyTable = textutils.unserialize(file.readAll())
  531.     file.close()
  532.     test = textutils.serialize(historyTable)
  533.     if string.len(test) > 7 then
  534.       for k,v in pairs(historyTable) do
  535.         if k%2 == 1 then
  536.           mon.setBackgroundColor(colors.lightBlue)
  537.         else
  538.           mon.setBackgroundColor(colors.lightGray)
  539.         end
  540.         mon.setCursorPos(1,k)
  541.         mon.write(v)
  542.         mon.setCursorPos(x/2+7, k)
  543.         mon.setBackgroundColor(colors.blue)
  544.         mon.write("SAVE")
  545.         mon.setCursorPos(x-8, k)
  546.         mon.setBackgroundColor(colors.red)
  547.         mon.write("BAN/ALLOW")
  548.         clickLimit = k
  549.       end
  550.     end
  551.     test = {}
  552.   end
  553.   mon.setBackgroundColor(colors.black)
  554.   for yc = y-2, y do
  555.     for xc = 1,x do
  556.       mon.setCursorPos(xc, yc)
  557.       mon.write(" ")
  558.     end
  559.   end
  560.   mon.setCursorPos(x/2, y-1)
  561.   mon.setTextColor(colors.white)
  562.   mon.write("BACK")
  563. end
  564.  
  565. function historyInputPage(address)
  566.   cx, cy = term.getCursorPos()
  567.   mon.clear()
  568.   term.redirect(mon)
  569.   term.setBackgroundColor(colors.lightGray)
  570.   term.clear()
  571.   x,y = term.getSize()
  572.   term.setCursorPos(x/2-8, y/2-2)
  573.   print("Set an address name")
  574.   term.setCursorPos(x/2 - 4, y/2)
  575.   print("         ")
  576.   term.setCursorPos(x/2 - 4, y/2)
  577.   nameInput = read()
  578.   addressInput = "nil"
  579.   newGate ={name = nameInput, address = address}
  580.   term.redirect(term.native())
  581.   term.clear()
  582.   term.setCursorPos(1,1)
  583.   return newGate
  584. end
  585.  
  586.  
  587. if fs.exists("currentSec") then -- checks to see if there's list of gates stored for security reasons
  588.   file = fs.open("currentSec", "r")
  589.   currentSec = file.readAll()
  590.   file.close()
  591. else
  592.   currentSec = "NONE"
  593. end
  594. mon.setTextScale(1)
  595. drawHome()
  596. while true do
  597.   event, param1, param2, param3 = os.pullEvent()
  598.   if event == "monitor_touch" then
  599.     x,y = mon.getSize()
  600.     if param2 >= 6 and param2 <= 8 and param3 >= y/3-2 and param3 <= y/3*2+1 then --opens or closes the Iris
  601.       if sg.irisState() == "Closed" then
  602.         ok, result = pcall(sg.openIris)
  603.         if ok then
  604.           drawIris(false)
  605.         end
  606.       else
  607.         ok, result = pcall(sg.closeIris)
  608.           if ok then
  609.             drawIris(true)
  610.           end
  611.       end
  612.     elseif param2 >= 2 and param2 <= 4 and param3 >= y/3-2 and param3 <= y/3*2+1 then -- click has opened the security menu
  613.       sOK, result = pcall(sg.openIris)
  614.       if sOK then
  615.       while true do
  616.         drawSecurityPageTop()
  617.         drawSecurityPageBottom(currentSec)
  618.         event, param1, param2, param3 = os.pullEvent()
  619.         if event == "monitor_touch" then
  620.           if param3 >= y-2 then --checks if the user's touch is at the bottom of the screen with the buttons
  621.             if param2 >= x-8 then -- "back" button has been pushed, returns user to home menu
  622.               drawHome()
  623.               break
  624.             elseif param2 < x-6 then -- Click has changed the security type, cycles through "BLACKLIST", "WHITELIST", "NONE"
  625.               if currentSec == "BLACKLIST" then
  626.                 currentSec = "WHITELIST"
  627.               elseif currentSec == "WHITELIST" then
  628.                 currentSec = "NONE"        
  629.               elseif currentSec == "NONE" then
  630.                   currentSec = "BLACKLIST"
  631.               end
  632.               file = fs.open("currentSec", "w")
  633.               file.write(currentSec)
  634.               file.close()
  635.             end
  636.           elseif param2 > x - 3 then -- delete record
  637.               file = fs.open("secList", "r")
  638.               secList = textutils.unserialize(file.readAll())
  639.               file.close()
  640.               table.remove(secList, param3)
  641.               file = fs.open("secList", "w")
  642.               file.write(textutils.serialize(secList))
  643.               file.close()
  644.               drawSecurityPageTop()
  645.           elseif param3 < y - 2 then -- check if empty, if so add new entry  
  646.             if fs.exists("secList") == false then
  647.               secList = {}
  648.               table.insert(secList, 1, inputPage())
  649.               file = fs.open("secList", "w")
  650.               file.write(textutils.serialize(secList))
  651.               file.close()
  652.             else
  653.               file = fs.open("secList", "r")
  654.               secList = textutils.unserialize(file.readAll())
  655.               file.close()
  656.               table.insert(secList, 1, inputPage("secEntry"))
  657.               file = fs.open("secList", "w")
  658.               file.write(textutils.serialize(secList))
  659.               file.close()
  660.             end
  661.             drawSecurityPageTop()
  662.             drawSecurityPageBottom(currentSec)
  663.           end
  664.         else -- if an event that isn't a users touch happens the screen will return to the home screen (in case of incoming connection)
  665.           drawHome()
  666.           break
  667.         end
  668.       end
  669.       end
  670.     elseif param2 > x/2-5 and param2 <= x/2 and param3 >= y-3 and param3 <= y-1 then -- Click has opened dial menu
  671.       status, int = sg.stargateState()
  672.       if status == "Idle" then
  673.       while true do
  674.         drawBookmarksPage()
  675.         event, param1, param2, param3 = os.pullEvent()
  676.         if event == "monitor_touch" then
  677.           if param3 >= y-2 then -- user clicked back
  678.             drawHome()
  679.             break
  680.           elseif param2 > x-2 then -- user clicked delete on a bookmark
  681.             if fs.exists(tostring(param3)) then
  682.               fs.delete(tostring(param3))
  683.             end
  684.           else -- user has clicked on a bookmark
  685.             if fs.exists(tostring(param3)) then
  686.               file = fs.open(tostring(param3), "r")
  687.               gateData = textutils.unserialize(file.readAll()) -- GATE DATA VARIABLE!!!
  688.               file.close()
  689.               drawHome()
  690.               for k,v in pairs(gateData) do
  691.                 if k == "address" then
  692.                   ok, result = pcall(sg.dial, v)
  693.                   if ok then
  694.                     status, int = sg.stargateState()
  695.                     drawSgStatus(status)
  696.                     address = v
  697.                     addToHistory(v)
  698.                   else
  699.                     drawSgStatus("Error")
  700.                   end
  701.                 end
  702.                 sleep(.5)
  703.               end
  704.               break
  705.             else
  706.               x,y = mon.getSize()
  707.               for i = 1,y do
  708.                 if fs.exists(tostring(i)) == false then
  709.                   file = fs.open(tostring(i), "w")
  710.                   file.write(textutils.serialize(inputPage()))
  711.                   file.close()
  712.                   break
  713.                 end
  714.               end
  715.             end
  716.           end
  717.         else
  718.           drawHome()
  719.           break
  720.         end
  721.       end
  722.       end
  723.     elseif param2 > x-7 and param2 < x-4 and param3 >= y/3-2 and param3 <= y/3*2+1 then -- Click has opened history menu
  724.       while true do
  725.         drawHistoryPage()
  726.         event, param1, param2, param3 = os.pullEvent()
  727.         if event == "monitor_touch" then
  728.           if param3 >= y-2 then -- user clicked back
  729.             drawHome()
  730.             break --might break everything
  731.           elseif param2 >= x/2+7 and param2 <= x/2+10 and param3 <= clickLimit then -- user has clicked save.
  732.             if fs.exists("history") then
  733.               file = fs.open("history", "r")
  734.               history = textutils.unserialize(file.readAll())
  735.               file.close()
  736.               for i = 1,y do
  737.                 if fs.exists(tostring(i)) == false then
  738.                   file = fs.open(tostring(i), "w")
  739.                   file.write(textutils.serialize(historyInputPage(history[param3])))
  740.                   file.close()
  741.                   break
  742.                 end
  743.               end
  744.             end
  745.           elseif param2 >= x-9 and param3 <= clickLimit then -- user click "ban/allow"
  746.             if fs.exists("history") then
  747.               file = fs.open("history", "r")
  748.               history = textutils.unserialize(file.readAll())
  749.               file.close()
  750.               if fs.exists("secList") == false then
  751.                 secList = {}
  752.                 table.insert(secList, 1, historyInputPage(history[param3]))
  753.                 file = fs.open("secList", "w")
  754.                 file.write(textutils.serialize(secList))
  755.                 file.close()
  756.               else
  757.                 file = fs.open("secList", "r")
  758.                 secList = textutils.unserialize(file.readAll())
  759.                 file.close()
  760.                 table.insert(secList, 1, historyInputPage(history[param3]))
  761.                 file = fs.open("secList", "w")
  762.                 file.write(textutils.serialize(secList))
  763.                 file.close()
  764.               end
  765.             end
  766.           end
  767.           drawHome()
  768.           break  
  769.         end    
  770.       end
  771.     elseif param2 > x/2+2 and param2 <= x/2+7 and param3 >= y-3 and param3 <= y-1 then -- user clicked TERM
  772.       ok, result = pcall(sg.disconnect)
  773.       drawChevrons()
  774.     end
  775.   elseif event == "sgDialIn" then
  776.     mon.setTextColor(colors.orange)
  777.     drawRemoteAddress()
  778.     alarmSet(true)
  779.     if fs.exists("currentSec") then
  780.       file = fs.open("currentSec", "r")
  781.       currentSec = file.readAll()
  782.       file.close()
  783.     end
  784.     if fs.exists("secList") then
  785.       file = fs.open("secList", "r")
  786.       secList = textutils.unserialize(file.readAll())
  787.       for k,v in pairs(secList) do
  788.         address = v.address
  789.         if string.sub(v.address,1,7) == param2 or v.address == param2 then
  790.           if currentSec == "BLACKLIST" then
  791.             sg.closeIris()
  792.             drawIris(true)
  793.           elseif currentSec == "WHITELIST" then
  794.               sg.openIris()
  795.               drawIris(false)
  796.           else
  797.             sg.openIris()
  798.             drawIris(false)
  799.           end
  800.           secGate = true
  801.         end
  802.       end
  803.     end
  804.     if secGate == true and currentSec == "WHITELIST" then
  805.       sg.openIris()
  806.       drawIris(false)
  807.       gateSec = false
  808.     end
  809.     addToHistory(param2)
  810.   elseif event == "sgMessageReceived" then
  811.     if param2 == "Open" then
  812.       mon.setTextColor(colors.lime)
  813.       drawRemoteIris()
  814.     elseif param2 == "Closed" then
  815.       mon.setTextColor(colors.red)
  816.       drawRemoteIris()
  817.     end  
  818.   elseif event == "sgStargateStateChange" or "sgChevronEngaged" then
  819.     drawDial()
  820.     drawPowerBar()
  821.     drawTerm()
  822.     status, int = sg.stargateState()
  823.     drawSgStatus(tostring(status))
  824.     if status == "idle" then
  825.       isConnected = false
  826.     else
  827.       isConnected = true
  828.     end
  829.     if event == "sgChevronEngaged" then
  830.       mon.setTextColor(colors.orange)
  831.       drawChev({param2, param3})
  832.       if param2 == 1 then
  833.         dialling = {}
  834.       end
  835.       table.insert(dialling, param2, param3)
  836.       drawRemoteAddress()
  837.     elseif param2 == "Idle" then
  838.       alarmSet(false)
  839.       drawChevrons()
  840.     elseif param2 == "Connected" then
  841.       alarmSet(false)
  842.       mon.setTextColor(colors.lightBlue)
  843.       drawRemoteAddress()
  844.       for k,v in pairs(dialling) do
  845.         drawChev({k,v})
  846.       end
  847.       sg.sendMessage(sg.irisState())
  848.     end
  849.   end
  850. end
RAW Paste Data