Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ showMethods ]]--
- --[[ by Dog ]]--
- --[[ aka HydrantHunter ]]--
- --[[ pastebin: FxyJJ9R9 ]]--
- local smVer = "1.0.03"
- if not term.isColor() or pocket or turtle then error("Advanced Computer required.", 0) end
- local termX, termY = term.getSize()
- if termX < 51 or termY < 18 then error("Screen size too small. 51x18 required.", 0) end
- local myID, myName = os.getComputerID(), os.getComputerLabel()
- if not myName then myName = "Computer " .. tostring(myID) os.setComputerLabel(myName) end
- local screen = "main" --# local, network, localDetail, netDetail
- local numPerPage, drawHelp, drawLocalDevices = 14
- local nPage, nPages, localList, networkList = { }, { }, { }, { }
- nPage.top, nPage.bottom, nPage.left, nPage.right, nPage.front, nPage.back = 1, 1, 1, 1, 1 ,1
- networkList.top, networkList.bottom, networkList.left, networkList.right, networkList.front, networkList.back = { }, { }, { }, { }, { }, { }
- print("")
- print("Searching for GPS signal...")
- local x, y, z = gps.locate(1)
- local function inventoryDevices()
- for _, side in pairs(rs.getSides()) do
- localList[side] = nil --# clear localList table
- for i = #networkList[side], 1, -1 do --# clear networkList table
- networkList[side][i] = nil
- end
- if peripheral.isPresent(side) then --# populate localList & networkList tables
- if peripheral.getType(side) == "modem" and not peripheral.call(side, "isWireless") then
- localList[side] = "wired_modem"
- for _, name in pairs(peripheral.call(side, "getNamesRemote")) do
- networkList[side][#networkList[side] + 1] = name
- end
- nPages[side] = networkList[side][1] and math.ceil(#networkList[side] / numPerPage) or 1
- else
- localList[side] = peripheral.getType(side) == "modem" and "wireless_modem" or peripheral.getType(side)
- end
- end
- end
- end
- local function clearArea(yStart, bgColor, cursor)
- paintutils.drawFilledBox(1, yStart, termX, termY, bgColor or colors.black)
- if cursor then
- term.setTextColor(colors.white)
- term.setCursorPos(1, 1)
- end
- end
- do
- local helpText = {
- [4] = "Press F1 to open and close basic help.";
- [6] = "Help can also be closed by clicking the X.";
- [8] = "Click on devices to see their methods.";
- [10] = "Click on wired modems to see connected devices.";
- [12] = "CTRL-Click on wired modems to see their methods.";
- [14] = "Close modem/method screens by clicking the X.";
- [16] = "Change pages via mouse wheel or PGUP/PGDN.";
- }
- drawHelp = function()
- clearArea(3, colors.white)
- term.setTextColor(colors.black)
- for i = 4, 16, 2 do
- term.setCursorPos(2, i)
- term.write(helpText[i])
- end
- end
- end
- local function drawDeviceMethods(sSide, sModem, sDevice)
- screen = sDevice and "netDetail" or "localDetail"
- sDevice = sDevice or sModem
- term.setBackgroundColor(colors.gray)
- term.setTextColor(colors.white)
- term.setCursorPos(1, 2)
- if screen == "netDetail" then
- term.write(" " .. sSide .. " / " .. sModem .. " / " .. sDevice .. " methods" .. string.rep(" ", 36 - (#sSide + #sModem + #sDevice)))
- else
- term.write(" " .. sSide .. " / " .. sDevice .. " methods" .. string.rep(" ", 39 - (#sSide + #sDevice)))
- end
- clearArea(3)
- term.setCursorPos(1, 4)
- print(textutils.pagedTabulate(colors.yellow, screen == "netDetail" and peripheral.getMethods(sDevice) or peripheral.getMethods(sSide)))
- end
- local function drawNetworkedDevices(sSide, sModem)
- screen = "network"
- local sName = sSide .. " / " .. sModem
- term.setBackgroundColor(colors.gray)
- term.setTextColor(colors.white)
- term.setCursorPos(1, 2)
- term.write(" " .. sName:sub(1, 34) .. string.rep(" ", termX - #sName:sub(1, 34)))
- clearArea(3)
- if networkList[sSide][1] then
- local yPos, magicNumber = 3, ((nPage[sSide] - 1) * numPerPage) + 1
- term.setTextColor(colors.orange)
- for i = magicNumber, #networkList[sSide] do
- yPos = yPos + 1
- term.setCursorPos(1, yPos)
- term.write(networkList[sSide][i])
- if yPos - 3 >= numPerPage then break end
- end
- else
- term.setTextColor(colors.gray)
- term.write("No devices connected")
- end
- term.setCursorPos(1, termY)
- term.setBackgroundColor(colors.gray)
- term.setTextColor(colors.white)
- term.write(string.rep(" ", termX))
- term.setCursorPos(math.floor(termX - (#tostring(nPage[sSide]) + #tostring(nPages[sSide]) + 4)) / 2, termY)
- term.write(tostring(nPage[sSide]) .. " of " .. tostring(nPages[sSide]))
- end
- do
- local localData = {
- [5] = { "ID#: ", tostring(myID) };
- [6] = { "GPS: ", x and "X: " .. tostring(x) .. " | Y: " .. tostring(y) .. " | Z: " .. tostring(z) or "No GPS fix" };
- }
- drawLocalDevices = function()
- screen = "main"
- term.setBackgroundColor(colors.gray)
- term.setTextColor(colors.white)
- term.setCursorPos(1, 2)
- term.write(" " .. myName:sub(1, 49) .. string.rep(" ", 50 - #myName:sub(1, 49)))
- clearArea(3)
- for i = 5, 6 do
- term.setCursorPos(1, i)
- term.setTextColor(colors.lightGray)
- term.write(localData[i][1])
- term.setTextColor(colors.white)
- term.write(localData[i][2])
- end
- local yPos = 7
- for _, side in pairs(rs.getSides()) do
- yPos = yPos + 1
- term.setCursorPos(1, yPos)
- term.setTextColor(colors.green)
- term.write(side)
- term.setTextColor(colors.lightGray)
- term.write(":" .. string.rep(" ", 7 - #side))
- if localList[side] then
- term.setTextColor(localList[side] == "wired_modem" and colors.orange or colors.blue)
- else
- term.setTextColor(colors.gray)
- end
- term.write(localList[side] or "no device present")
- end
- end
- end
- local function mainLoop()
- local control, help, sSide, sModem, sDevice, tDevice = false, false
- local sideList, listCounter = { }, 0
- local screens = {
- main = { function() drawLocalDevices() end, function() clearArea(1, nil, true) error() end };
- network = { function() drawNetworkedDevices(sSide, sModem) end, function() sSide = nil sModem = nil drawLocalDevices() end };
- netDetail = { function() drawDeviceMethods(sSide, sModem, sDevice) end, function() sDevice = nil drawNetworkedDevices(sSide, sModem) end };
- localDetail = { function() drawDeviceMethods(sSide, sDevice) end, function() sSide = nil sDevice = nil drawLocalDevices() end };
- }
- for _, side in pairs(rs.getSides()) do
- listCounter = listCounter + 1
- sideList[listCounter] = side
- end
- while true do
- local event, data, mX, mY = os.pullEvent()
- if event == "mouse_click" and data == 1 then
- if mX == termX and mY == 1 then
- if help then --# Exit help
- help = false
- screens[screen][1]()
- else --# Exit screen or program
- screens[screen][2]()
- end
- elseif screen == "main" then
- for i = 8, 13 do
- if mY == i and localList[sideList[i - 7]] and mX > 8 and mX < #localList[sideList[i - 7]] + 9 then
- sSide, tDevice = sideList[i - 7], localList[sideList[i - 7]]
- if tDevice == "wired_modem" and not control then
- sModem = tDevice
- drawNetworkedDevices(sSide, sModem)
- else
- sDevice = tDevice
- drawDeviceMethods(sSide, sDevice)
- end
- break
- end
- end
- elseif screen == "network" then
- if networkList[sSide][1] then
- local yPos, magicNumber = 3, ((nPage[sSide] - 1) * numPerPage) + 1
- for i = magicNumber, #networkList[sSide] do
- yPos = yPos + 1
- if mY == yPos and mX <= #networkList[sSide][i] then
- sDevice = networkList[sSide][i]
- drawDeviceMethods(sSide, sModem, sDevice)
- break
- end
- if yPos - 3 >= numPerPage then break end
- end
- end
- end
- elseif event == "mouse_scroll" and screen == "network" and nPages[sSide] > 1 and not help then
- nPage[sSide] = data == 1 and math.min(nPage[sSide] + 1, nPages[sSide]) or math.max(nPage[sSide] - 1, 1)
- drawNetworkedDevices(sSide, sModem)
- elseif event == "key" then
- if data == keys.f1 then
- help = not help
- if help then
- drawHelp()
- else
- screens[screen][1]()
- end
- elseif data == keys.leftCtrl or data == keys.rightCtrl then
- control = true
- elseif (data == keys.pageUp or data == keys.pageDown) and screen == "network" and nPages[sSide] > 1 and not help then
- nPage[sSide] = data == keys.pageDown and math.min(nPage[sSide] + 1, nPages[sSide]) or math.max(nPage[sSide] - 1, 1)
- drawNetworkedDevices(sSide, sModem)
- elseif (data == keys.home or data == keys["end"]) and screen == "network" and nPages[sSide] > 1 and not help then
- nPage[sSide] = data == keys.home and 1 or nPages[sSide]
- drawNetworkedDevices(sSide, sModem)
- end
- elseif event == "key_up" and (data == keys.leftCtrl or data == keys.rightCtrl) then
- control = false
- elseif event == "char" then
- if data:lower() == "q" then --# Exit program
- clearArea(1, nil, true)
- return
- end
- elseif event == "peripheral" or event == "peripheral_detach" then
- inventoryDevices()
- if event == "peripheral_detach" then
- sSide, sModem, sDevice = nil, nil, nil
- if help then
- screen = "main"
- else
- drawLocalDevices()
- end
- end
- end
- end
- end
- clearArea(3)
- paintutils.drawLine(1, 1, termX - 1, 1, colors.blue) --# draw header
- term.setCursorPos(math.floor((termX - 18) / 2), 1)
- term.setTextColor(colors.lightBlue)
- term.write("showMethods " .. smVer)
- --paintutils.drawFilledBox(termX - 2, 1, termX, 3, colors.red)
- term.setCursorPos(termX, 1)
- term.setTextColor(colors.white)
- term.setBackgroundColor(colors.red)
- term.write("X")
- inventoryDevices()
- drawLocalDevices()
- mainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement