-
Notifications
You must be signed in to change notification settings - Fork 0
/
shim_template.lua
63 lines (54 loc) · 1.94 KB
/
shim_template.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
local makePackage = require("cc.require").make
-- TODO: use string.format and placeholders
local programToLoad = shell.getRunningProgram():gsub("^.luastoned/shims/", "")
-- TODO: can a lot of this be put into a module to save disk space?
-- set up the env
-- TODO: do we need to do some env sanitation?
local clientEnv = setmetatable({
multishell = multishell,
shell = shell,
}, {
__index = _ENV
})
clientEnv.require, clientEnv.package = makePackage(clientEnv, actualProgramDir)
clientEnv.package.loaders[#package.loaders + 1] = function(name) -- If we didn't want to support multiple versions of the same module then we could modify package.path
-- TODO: implement
-- go through the dependencies of this program and load them as required
end
--[[
clientEnv.os = setmetatable({
-- https://github.com/SquidDev-CC/CC-Tweaked/blob/c45221a2d0e91eaebabc495a817c009e6dc6b321/src/main/resources/data/computercraft/lua/bios.lua#L554
loadAPI = function(name) -- TODO: implement
-- attempt to load the known dependencies
-- go through the dependencies of this program and load them as required
end,
unloadAPI = function(name) -- TODO: implement (might not need to)
end,
}, {
__index = os
})
--]]
-- copied from os.run
if settings.get("bios.strict_globals", false) then
-- load will attempt to set _ENV on this environment, which
-- throws an error with this protection enabled. Thus we set it here first.
clientEnv._ENV = clientEnv
getmetatable(clientEnv).__newindex = function(_, name)
error("Attempt to create global " .. tostring(name), 2)
end
end
local fnFile, err = loadfile(actualProgramPath, nil, clientEnv)
if fnFile then
local ok, err = pcall(fnFile, table.unpack(arg))
if not ok then
if err and err ~= "" then
printError(err) -- how does this work for theres calliong shell.cun on us?
end
return false
end
return true
end
if err and err ~= "" then
printError(err)
end
return false