Guest User

libloader

a guest
May 31st, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.23 KB | None | 0 0
  1. local preload = { }
  2. local loaded = { }
  3. local searchers = { }
  4. local searchpath
  5. searchpath = function(name, path, sep, rep)
  6.   if sep == nil then
  7.     sep = "."
  8.   end
  9.   if rep == nil then
  10.     rep = "/"
  11.   end
  12.   local err = "Could not find " .. tostring(name) .. "\n"
  13.   local currDir = shell.getRunningProgram()
  14.   path = path:gsub("%./", tostring(currDir) .. "/")
  15.   name = name:gsub("[" .. tostring(sep) .. "]", rep)
  16.   path = path:gsub("[?]", name)
  17.   for test in path:gmatch("[^;]+") do
  18.     if fs.exists(test) and not fs.isDir(test) then
  19.       return test
  20.     else
  21.       err = err .. "  " .. tostring(test) .. "\n"
  22.     end
  23.   end
  24.   return nil, err
  25. end
  26. local preloadSearcher
  27. preloadSearcher = function(name)
  28.   if package.preload[name] then
  29.     return package.preload[name]
  30.   end
  31.   return nil, "Could not find " .. tostring(name) .. " in package.preload"
  32. end
  33. local simplePathSearcher
  34. simplePathSearcher = function(name)
  35.   local path = searchpath(name, package.path)
  36.   return dofile, path
  37. end
  38. table.insert(searchers, preloadSearcher)
  39. table.insert(searchers, simplePathSearcher)
  40. require = function(name)
  41.   local errors = { }
  42.   if not loaded[name] then
  43.     local loader = nil
  44.     local arg = nil
  45.     for _, searcher in ipairs(searchers) do
  46.       loader, arg = searcher(name)
  47.       if loader ~= nil then
  48.         break
  49.       else
  50.         table.insert(errors, arg)
  51.       end
  52.     end
  53.     if loader ~= nil then
  54.       local status, res = xpcall(function()
  55.         return loader(arg)
  56.       end, function(err)
  57.         return "An error occured while loading " .. tostring(name) .. " " .. tostring(tostring(err))
  58.       end)
  59.       if (not status) then
  60.         error(res)
  61.       end
  62.       loaded[name] = res or { }
  63.     else
  64.       local errStr = "Failed to load module " .. tostring(name) .. "\n"
  65.       for _, err in ipairs(errors) do
  66.         errStr = errStr .. tostring(err) .. "\n"
  67.       end
  68.       error(errStr)
  69.     end
  70.   end
  71.   return loaded[name]
  72. end
  73. package = {
  74.   preload = preload,
  75.   searchers = searchers,
  76.   loaded = loaded,
  77.   path = "./?.lua;./lib/?.lua;./lib/?;./bin/?.lua;./bin/?;/lib/?.lua;/lib/?;/bin/?.lua;/bin/?",
  78.   searchpath = searchpath
  79. }
  80. return {
  81.   setPath = function(path)
  82.     package.path = path
  83.   end
  84. }
Advertisement
Add Comment
Please, Sign In to add comment