Ajustor icon

sgMonitor

Ajustor | PRO | 05/07/18 04:11:19 PM UTC | 0 ⭐ | 613 👁️ | Never ⏰ | []
Lua |

5.41 KB

|

None

|

0 👍

/

0 👎

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

Comments