# 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)
220.   mon.setCursorPos(x/2-3, 2)
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)
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)
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)
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
370.   securityButton()
371.   drawDial()
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)
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)
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)
457.   newGate ={name = nameInput, address = addressInput}
458.   term.redirect(term.native())
459.   return newGate
460. end
461.
463.   mon.setBackgroundColor(colors.black)
464.   x,y = mon.getSize()
465.   mon.setCursorPos((x/2+1) - string.len(sg.remoteAddress())/2, y/2-2)
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.
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.
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
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)
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
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
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)
837.     elseif param2 == "Idle" then
838.       alarmSet(false)
839.       drawChevrons()
840.     elseif param2 == "Connected" then
841.       alarmSet(false)
842.       mon.setTextColor(colors.lightBlue)