Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local preload = { }
- local loaded = { }
- local searchers = { }
- local searchpath
- searchpath = function(name, path, sep, rep)
- if sep == nil then
- sep = "."
- end
- if rep == nil then
- rep = "/"
- end
- local err = "Could not find " .. tostring(name) .. "\n"
- local currDir = shell.getRunningProgram()
- path = path:gsub("%./", tostring(currDir) .. "/")
- name = name:gsub("[" .. tostring(sep) .. "]", rep)
- path = path:gsub("[?]", name)
- for test in path:gmatch("[^;]+") do
- if fs.exists(test) and not fs.isDir(test) then
- return test
- else
- err = err .. " " .. tostring(test) .. "\n"
- end
- end
- return nil, err
- end
- local preloadSearcher
- preloadSearcher = function(name)
- if package.preload[name] then
- return package.preload[name]
- end
- return nil, "Could not find " .. tostring(name) .. " in package.preload"
- end
- local simplePathSearcher
- simplePathSearcher = function(name)
- local path = searchpath(name, package.path)
- return dofile, path
- end
- table.insert(searchers, preloadSearcher)
- table.insert(searchers, simplePathSearcher)
- require = function(name)
- local errors = { }
- if not loaded[name] then
- local loader = nil
- local arg = nil
- for _, searcher in ipairs(searchers) do
- loader, arg = searcher(name)
- if loader ~= nil then
- break
- else
- table.insert(errors, arg)
- end
- end
- if loader ~= nil then
- local status, res = xpcall(function()
- return loader(arg)
- end, function(err)
- return "An error occured while loading " .. tostring(name) .. " " .. tostring(tostring(err))
- end)
- if (not status) then
- error(res)
- end
- loaded[name] = res or { }
- else
- local errStr = "Failed to load module " .. tostring(name) .. "\n"
- for _, err in ipairs(errors) do
- errStr = errStr .. tostring(err) .. "\n"
- end
- error(errStr)
- end
- end
- return loaded[name]
- end
- package = {
- preload = preload,
- searchers = searchers,
- loaded = loaded,
- path = "./?.lua;./lib/?.lua;./lib/?;./bin/?.lua;./bin/?;/lib/?.lua;/lib/?;/bin/?.lua;/bin/?",
- searchpath = searchpath
- }
- return {
- setPath = function(path)
- package.path = path
- end
- }
Advertisement
Add Comment
Please, Sign In to add comment