thislooksfun

main

Dec 10th, 2012
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.29 KB | None | 0 0
  1. --[[tlfOS Main API]]--
  2.  
  3. function loadAPIs()
  4.   local apis = fs.list("&SYS&tlf/apis")
  5.  
  6.   for i = 1, #apis do
  7.     os.unloadAPI("&SYS&tlf/apis/"..apis[i])
  8.   end
  9.   for i = 1, #apis do
  10.     os.loadAPI("&SYS&tlf/apis/"..apis[i])
  11.   end
  12. end
  13.  
  14. function fileMenu(bool, i, tFold, tProg)
  15.   local file = ""
  16.   local title = ""
  17.   local w,h = term.getSize()
  18.  
  19.   for i = 1, w - 2 do
  20.     if i == math.floor((w - 2)/ 2) then
  21.       title = title.."+"
  22.     else
  23.       title = title.."-"
  24.     end
  25.   end
  26.  
  27.   if bool then
  28.     file = tFold[sel]
  29.   else
  30.     file = tProg[sel]
  31.   end
  32.  
  33.   screen.displayWindow(title, {""}, 1, h - 2)
  34.  
  35.   p1, p2, p3 = screen.refresh()
  36. end
  37.  
  38. function main(user, admin)
  39.   local dir = ""
  40.   local path = {}
  41.   local w, h = term.getSize()
  42.   local tFiles = fs.list(dir)
  43.   local tFolders = {}
  44.   local tPrograms = {}
  45.   local iMaxFold = 0
  46.   local iMaxProg = 0
  47.   local sMaxFold = ""
  48.   local sMaxProg = ""
  49.   local fold = true
  50.   local sel = 1
  51.   local updateFile = true
  52.   local start = 1
  53.   local middle = 1
  54.  
  55.  
  56.   while true do
  57.     local p1, p2, p3 = screen.refresh(2,4)
  58.     if p1 == "char" and string.lower(p2) == "q" and admin then
  59.       term.clear()
  60.       term.setCursorPos(1,1)
  61.       return
  62.     elseif p1 == "char" and string.lower(p2) == "r" then
  63.       os.reboot()
  64.     elseif p1 == "char" and string.lower(p2) == "l" then
  65.       loadAPIs()
  66.     elseif p1 == "char" and string.lower(p2) == "m" then
  67.       fileMenu(fold, sel, tFolders, tPrograms)
  68.     elseif p1 == "key" then
  69.       if p2 == 200 then
  70.         if sel > 1 then
  71.           sel = sel - 1
  72.         end
  73.       elseif p2 == 208 then
  74.         if (fold and sel < #tFolders) or (not fold and sel < #tPrograms) then
  75.           sel = sel + 1
  76.         end
  77.       elseif p2 == 203 and not fold then
  78.         fold = true
  79.         sel = 1
  80.       elseif p2 == 205 and fold then
  81.         fold = false
  82.         sel = 1
  83.       elseif p2 == 28 then
  84.         if fold then
  85.           table.insert(path, "/"..tFolders[sel])
  86.           sel = 1
  87.         else
  88.           if dir ~= "" then dir = dir.."/" end
  89.           shell.setDir(dir)
  90.           shell.run(tPrograms[sel])
  91.         end
  92.       elseif p2 == 14 then
  93.         table.remove(path, #path)
  94.         fold = true
  95.         sel = 1
  96.       end
  97.       updateFile = true
  98.     end
  99.    
  100.     if updateFile then
  101.       screen.clear(true, true, user)
  102.       updateFile = false
  103.       dir = ""
  104.       tFolders = {}
  105.       tPrograms = {}
  106.       iMaxFold = 0
  107.       iMaxProg = 0
  108.       sMaxFold = ""
  109.       sMaxProg = ""
  110.       start = 1
  111.      
  112.       for i = 1, #path do
  113.         dir = dir..path[i]
  114.       end
  115.      
  116.       tFiles = fs.list(dir)
  117.      
  118.       for i = 1, #tFiles do
  119.         p1 = string.find(tFiles[i], "&SYS&")
  120.         p2 = string.find(tFiles[i], ".DS_Store")
  121.         if (p1 ~= 1 or admin) and p2 == nil then
  122.           if fs.isDir(dir.."/"..tFiles[i]) then
  123.             table.insert(tFolders, tFiles[i])
  124.             if #tFiles[i] > iMaxFold then iMaxFold = #tFiles[i] end
  125.           else
  126.             table.insert(tPrograms, tFiles[i])
  127.             if #tFiles[i] > iMaxProg then iMaxProg = #tFiles[i] end
  128.           end
  129.         end
  130.       end
  131.      
  132.       if #tFolders == 0 then
  133.         fold = false
  134.       end
  135.      
  136.       for i = 1, iMaxFold do
  137.         sMaxFold = sMaxFold.." "
  138.       end
  139.       for i = 1, iMaxProg do
  140.         sMaxProg = sMaxProg.." "
  141.       end
  142.      
  143.       text.printCentered('"'..dir..'"',  4, 2, math.floor(w/2) - 1)
  144.       text.printCentered('"'..dir..'"',  4, math.floor(w/2) + 1, w)
  145.      
  146.       middle = math.floor((h - 9)/2, 0)
  147.      
  148.       if #tFolders > h - 7 then
  149.         start = sel - middle + 1
  150.         for i = 1, h - 9 do
  151.           if (sel < middle and i == sel and fold) or (sel >= middle and i == middle and fold) then
  152.             text.printCentered("[> "..sMaxFold.." <]", i + 6, 2, math.floor(w/2) - 1)
  153.           else
  154.             text.printCentered("[  "..sMaxFold.."  ]", i + 6, 2, math.floor(w/2) - 1)
  155.           end
  156.           if start > 1 and middle + sel < #tFolders then
  157.             text.printCentered(tFolders[start - i], i + 6, 2, math.floor(w/2) - 1)
  158.           elseif start > 1 and middle + sel >= #tFolders then
  159.             text.printCentered(tFolders[#tFolders - i], i + 6, 2, math.floor(w/2) - 1)
  160.           else
  161.             text.printCentered(tFolders[i], i + 6, 2, math.floor(w/2) - 1)
  162.           end
  163.         end
  164.         text.printCentered("vvvvv", h - 1, 2, math.floor(w/2) - 1)
  165.       else
  166.         for i = 1, #tFolders do
  167.           if i == sel and fold then
  168.             text.printCentered("[> "..sMaxFold.." <]", i + 6, 2, math.floor(w/2) - 1)
  169.           else
  170.             text.printCentered("[  "..sMaxFold.."  ]", i + 6, 2, math.floor(w/2) - 1)
  171.           end
  172.           text.printCentered(tFolders[i], i + 6, 2, math.floor(w/2) - 1)
  173.         end
  174.       end
  175.      
  176.       if #tPrograms > h - 7 then
  177.         start = sel - middle + 1
  178.         if start + (h - 9) > #tPrograms then
  179.           start = #tPrograms - (h - 9) + 1
  180.         end
  181.         for i = 1, h - 9 do
  182.           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
  183.             text.printCentered("[> "..sMaxProg.." <]", i + 6, math.floor(w/2) + 1, w)
  184.           else
  185.             text.printCentered("[  "..sMaxProg.."  ]", i + 6, math.floor(w/2) + 1, w)
  186.           end
  187.           if start > 1 then
  188.             text.printCentered(tPrograms[start + i - 1], i + 6, math.floor(w/2) + 1, w)
  189.           else
  190.             text.printCentered(tPrograms[i], i + 6, math.floor(w/2) + 1, w)
  191.           end
  192.         end
  193.         if start > 1 then
  194.           text.printCentered("^^"..sMaxProg.."^^", 6, math.floor(w/2) + 1, w)
  195.         end
  196.         if start + (h - 9) - 1 < #tPrograms then
  197.           text.printCentered("vv"..sMaxProg.."vv", h - 2, math.floor(w/2) + 1, w)
  198.         end
  199.       else
  200.         for i = 1, #tPrograms do
  201.           if i == sel and not fold then
  202.             text.printCentered("[> "..sMaxProg.." <]", i + 6, math.floor(w/2) + 1, w)
  203.           else
  204.             text.printCentered("[  "..sMaxProg.."  ]", i + 6, math.floor(w/2) + 1, w)
  205.           end
  206.           text.printCentered(tPrograms[i], i + 6, math.floor(w/2) + 1, w)
  207.         end
  208.       end
  209.     end
  210.   end
  211. end
Advertisement
Add Comment
Please, Sign In to add comment