Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[tlfOS Main API]]--
- function loadAPIs()
- local apis = fs.list("&SYS&tlf/apis")
- for i = 1, #apis do
- os.unloadAPI("&SYS&tlf/apis/"..apis[i])
- end
- for i = 1, #apis do
- os.loadAPI("&SYS&tlf/apis/"..apis[i])
- end
- end
- function fileMenu(bool, i, tFold, tProg)
- local file = ""
- local title = ""
- local w,h = term.getSize()
- for i = 1, w - 2 do
- if i == math.floor((w - 2)/ 2) then
- title = title.."+"
- else
- title = title.."-"
- end
- end
- if bool then
- file = tFold[sel]
- else
- file = tProg[sel]
- end
- screen.displayWindow(title, {""}, 1, h - 2)
- p1, p2, p3 = screen.refresh()
- end
- function main(user, admin)
- local dir = ""
- local path = {}
- local w, h = term.getSize()
- local tFiles = fs.list(dir)
- local tFolders = {}
- local tPrograms = {}
- local iMaxFold = 0
- local iMaxProg = 0
- local sMaxFold = ""
- local sMaxProg = ""
- local fold = true
- local sel = 1
- local updateFile = true
- local start = 1
- local middle = 1
- while true do
- local p1, p2, p3 = screen.refresh(2,4)
- if p1 == "char" and string.lower(p2) == "q" and admin then
- term.clear()
- term.setCursorPos(1,1)
- return
- elseif p1 == "char" and string.lower(p2) == "r" then
- os.reboot()
- elseif p1 == "char" and string.lower(p2) == "l" then
- loadAPIs()
- elseif p1 == "char" and string.lower(p2) == "m" then
- fileMenu(fold, sel, tFolders, tPrograms)
- elseif p1 == "key" then
- if p2 == 200 then
- if sel > 1 then
- sel = sel - 1
- end
- elseif p2 == 208 then
- if (fold and sel < #tFolders) or (not fold and sel < #tPrograms) then
- sel = sel + 1
- end
- elseif p2 == 203 and not fold then
- fold = true
- sel = 1
- elseif p2 == 205 and fold then
- fold = false
- sel = 1
- elseif p2 == 28 then
- if fold then
- table.insert(path, "/"..tFolders[sel])
- sel = 1
- else
- if dir ~= "" then dir = dir.."/" end
- shell.setDir(dir)
- shell.run(tPrograms[sel])
- end
- elseif p2 == 14 then
- table.remove(path, #path)
- fold = true
- sel = 1
- end
- updateFile = true
- end
- if updateFile then
- screen.clear(true, true, user)
- updateFile = false
- dir = ""
- tFolders = {}
- tPrograms = {}
- iMaxFold = 0
- iMaxProg = 0
- sMaxFold = ""
- sMaxProg = ""
- start = 1
- for i = 1, #path do
- dir = dir..path[i]
- end
- tFiles = fs.list(dir)
- for i = 1, #tFiles do
- p1 = string.find(tFiles[i], "&SYS&")
- p2 = string.find(tFiles[i], ".DS_Store")
- if (p1 ~= 1 or admin) and p2 == nil then
- if fs.isDir(dir.."/"..tFiles[i]) then
- table.insert(tFolders, tFiles[i])
- if #tFiles[i] > iMaxFold then iMaxFold = #tFiles[i] end
- else
- table.insert(tPrograms, tFiles[i])
- if #tFiles[i] > iMaxProg then iMaxProg = #tFiles[i] end
- end
- end
- end
- if #tFolders == 0 then
- fold = false
- end
- for i = 1, iMaxFold do
- sMaxFold = sMaxFold.." "
- end
- for i = 1, iMaxProg do
- sMaxProg = sMaxProg.." "
- end
- text.printCentered('"'..dir..'"', 4, 2, math.floor(w/2) - 1)
- text.printCentered('"'..dir..'"', 4, math.floor(w/2) + 1, w)
- middle = math.floor((h - 9)/2, 0)
- if #tFolders > h - 7 then
- start = sel - middle + 1
- for i = 1, h - 9 do
- if (sel < middle and i == sel and fold) or (sel >= middle and i == middle and fold) then
- text.printCentered("[> "..sMaxFold.." <]", i + 6, 2, math.floor(w/2) - 1)
- else
- text.printCentered("[ "..sMaxFold.." ]", i + 6, 2, math.floor(w/2) - 1)
- end
- if start > 1 and middle + sel < #tFolders then
- text.printCentered(tFolders[start - i], i + 6, 2, math.floor(w/2) - 1)
- elseif start > 1 and middle + sel >= #tFolders then
- text.printCentered(tFolders[#tFolders - i], i + 6, 2, math.floor(w/2) - 1)
- else
- text.printCentered(tFolders[i], i + 6, 2, math.floor(w/2) - 1)
- end
- end
- text.printCentered("vvvvv", h - 1, 2, math.floor(w/2) - 1)
- else
- for i = 1, #tFolders do
- if i == sel and fold then
- text.printCentered("[> "..sMaxFold.." <]", i + 6, 2, math.floor(w/2) - 1)
- else
- text.printCentered("[ "..sMaxFold.." ]", i + 6, 2, math.floor(w/2) - 1)
- end
- text.printCentered(tFolders[i], i + 6, 2, math.floor(w/2) - 1)
- end
- end
- if #tPrograms > h - 7 then
- start = sel - middle + 1
- if start + (h - 9) > #tPrograms then
- start = #tPrograms - (h - 9) + 1
- end
- for i = 1, h - 9 do
- if (sel < middle and i == sel and not fold) or (sel >= middle and i == middle and not fold and start + (h - 9) < #tPrograms) or (start + (h - 9) >= #tPrograms and i + start - 1 == sel) then
- text.printCentered("[> "..sMaxProg.." <]", i + 6, math.floor(w/2) + 1, w)
- else
- text.printCentered("[ "..sMaxProg.." ]", i + 6, math.floor(w/2) + 1, w)
- end
- if start > 1 then
- text.printCentered(tPrograms[start + i - 1], i + 6, math.floor(w/2) + 1, w)
- else
- text.printCentered(tPrograms[i], i + 6, math.floor(w/2) + 1, w)
- end
- end
- if start > 1 then
- text.printCentered("^^"..sMaxProg.."^^", 6, math.floor(w/2) + 1, w)
- end
- if start + (h - 9) - 1 < #tPrograms then
- text.printCentered("vv"..sMaxProg.."vv", h - 2, math.floor(w/2) + 1, w)
- end
- else
- for i = 1, #tPrograms do
- if i == sel and not fold then
- text.printCentered("[> "..sMaxProg.." <]", i + 6, math.floor(w/2) + 1, w)
- else
- text.printCentered("[ "..sMaxProg.." ]", i + 6, math.floor(w/2) + 1, w)
- end
- text.printCentered(tPrograms[i], i + 6, math.floor(w/2) + 1, w)
- end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment