Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local sg = component.stargate
- local event = require("event")
- local os = require("os")
- local gpu = component.gpu
- local colors = { blue = 0x4286F4, purple = 0xB673d6, red = 0xC14141, green = 0xDA841,
- black = 0x000000, white = 0xFFFFFF, grey = 0x47494C, lightGrey = 0xBBBBBB, orange = 0xFFA500, alert = 0xFF0000}
- local selected = 0
- local w, h = gpu.getResolution()
- local addresseArray = {}
- local addresseLength = 0
- local entry = 0
- local tmpAdd = ""
- local secured = false
- local is_ended = false
- gpu.setForeground(0xffffff)
- function parseAddress(add)
- return string.format("%s-%s-%s",string.sub(add,1,4),string.sub(add,5,7),string.sub(add,8))
- end
- function alert(text)
- gpu.fill((w/2+w/4), 1, w/4, 1, " ")
- gpu.setForeground(colors.alert)
- gpu.set((w/2+w/4), 1 , text)
- gpu.setForeground(colors.white)
- end
- function getAddress()
- file = io.open("address", "r")
- if file == nil then
- file = io.open("address", "w")
- file:close()
- file = io.open("address", "r")
- end
- while file:read() ~= nil do
- if addresseLength>0 then
- file:seek("set",9*addresseLength+1)
- else
- file:seek("set",9*addresseLength)
- end
- addresseArray[addresseLength] = file:read()
- addresseLength = addresseLength+1
- end
- file:close()
- end
- function drawList()
- for i=5, h do
- if i%2==0 then
- gpu.setBackground(colors.grey)
- else
- gpu.setBackground(colors.lightGrey)
- end
- gpu.fill(1,i,w/2,1," ")
- if (i-5) < addresseLength then
- gpu.set(1,i, parseAddress(addresseArray[i-5]))
- end
- end
- end
- function drawControls()
- gpu.setBackground(colors.green)
- gpu.fill(w/2+w/4, 5, w, 10, " ")
- gpu.set((w/2+w/4)+(w-(w/2+w/4))/2, 10, "CALL")
- gpu.setBackground(colors.grey)
- gpu.fill(w/2+w/6, 20, w/4, 1, " ")
- gpu.setBackground(colors.black)
- gpu.set((w/2+w/4), 16, "ADD ADDRESS")
- gpu.setBackground(colors.blue)
- gpu.set((w/2+w/4)+(w/4)/2, 23, " SAVE ")
- gpu.setBackground(colors.orange)
- gpu.set((w/2+w/6), 23, "CANCEL")
- gpu.setBackground(colors.red)
- gpu.fill(w/2+1, 5, w/4, 10, " ")
- gpu.set((w/2+(w/4)/2), 10, "DISCONNECT")
- if sg.irisState() ~= "Offline" then
- if sg.irisState() == "Closing" then
- gpu.setBackground(colors.red)
- else
- gpu.setBackground(colors.green)
- end
- gpu.fill(w/2+1, 28, w, 10, " ")
- gpu.set((w/2+w/4)-11, 33, "TOGGLE IRIS")
- end
- gpu.setBackground(colors.black)
- end
- function main()
- gpu.setBackground(colors.black)
- getAddress()
- gpu.fill(1, 1, w, h, " ")
- gpu.set(w/2-6,1, parseAddress(sg.localAddress()))
- drawList()
- drawControls()
- end
- main()
- function clickChecker(name, id, x, y)
- if x < w/2 and y >= 5 then
- drawList()
- selected = y-5
- gpu.setBackground(colors.blue)
- gpu.fill(1,y,w/2,1, " ")
- if selected < addresseLength then
- gpu.set(1,y,parseAddress(addresseArray[selected]))
- end
- elseif x > w/2+w/4 and y>=5 and y<=10 then
- if addresseArray[selected] == nil then
- alert("PLEASE SELECT AN ADDRESS")
- else
- sg.dial(addresseArray[selected])
- if sg.irisState() ~= "Closed" then
- sg.closeIris()
- end
- end
- elseif x >= ((w/2+w/4)+(w/4)/2) and x <= (((w/2+w/4)+(w/4)/2)+6) and y==23 then
- if entry == 9 then
- file = io.open("address", "a")
- file:write(tmpAdd.."\n")
- file:close()
- tmpAdd = ""
- entry = 0
- gpu.setBackground(colors.grey)
- gpu.fill(w/2+w/6, 20, w/4, 1, " ")
- gpu.setBackground(colors.black)
- main()
- else
- alert("PLEASE ENTER A COMPLETE ADDRESS")
- end
- elseif x >= (w/2+w/6) and x <= (w/2+w/6)+6 and y==23 then
- tmpAdd = ""
- entry = 0
- gpu.setBackground(colors.grey)
- gpu.fill(w/2+w/6, 20, w/4, 1, " ")
- gpu.setBackground(colors.black)
- elseif x > w/2 and x < w/2+w/4 and y>=5 and y<=15 then
- sg.disconnect()
- elseif x > w/2 and y >= 28 and y<=38 and sg.irisState() ~= "Offline" then
- if sg.irisState() == "Closed" then
- sg.openIris()
- else
- sg.closeIris()
- end
- drawControls()
- end
- gpu.setBackground(colors.black)
- end
- function keyPress(e,add,key)
- gpu.setBackground(colors.grey)
- if ((key >=97 and key <= 122) or (key >= 48 and key <= 57)) and entry < 9 then
- gpu.set(w/2+w/6+entry, 20, string.upper(string.char(key)))
- tmpAdd = tmpAdd .. string.upper(string.char(key))
- entry = entry+1
- elseif key == 8 and entry > 0 then
- entry = entry-1
- gpu.set(w/2+w/6+entry, 20, " ")
- tmpAdd = string.sub(tmpAdd,1,entry)
- end
- gpu.setBackground(colors.black)
- end
- function isCalling(this, src, remote)
- gpu.setBackground(colors.alert)
- gpu.fill(w/4, h/4, w/2, h/2, " ")
- gpu.set(w/4+w/6, h/2, remote.." is calling")
- os.sleep(3)
- if (secured and ifIn(remote) == false and sg.irisState() ~= "Closed") then
- sg.closeIris()
- end
- main()
- end
- function ifIn(remote)
- local check = false
- for i=0, addresseLength do
- check = (parseAddress(addresseArray[i]) == remote)
- end
- return check;
- end
- function stop()
- print("soft interrupt, closing")
- event.ignore("key_up",keyPress)
- event.ignore("sgDialIn", isCalling)
- event.ignore("touch", clickChecker)
- is_ended = true
- end
- event.listen("key_up", keyPress)
- event.listen("sgDialIn", isCalling)
- event.listen("touch", clickChecker)
- event.listen("interrupted", stop)
- while not is_ended do
- os.sleep(15)
- end
Advertisement
Add Comment
Please, Sign In to add comment