e
This commit is contained in:
102
AceVM/init
Normal file
102
AceVM/init
Normal file
@@ -0,0 +1,102 @@
|
||||
local function deepcopy(orig, copies)
|
||||
copies = copies or {}
|
||||
|
||||
if type(orig) ~= 'table' then
|
||||
return orig
|
||||
elseif copies[orig] then
|
||||
return copies[orig]
|
||||
end
|
||||
|
||||
local copy = {}
|
||||
copies[orig] = copy
|
||||
|
||||
for k, v in next, orig, nil do
|
||||
local copied_key = deepcopy(k, copies)
|
||||
local copied_val = deepcopy(v, copies)
|
||||
copy[copied_key] = copied_val
|
||||
end
|
||||
|
||||
return copy
|
||||
end
|
||||
local _VG = deepcopy(_G)
|
||||
_VG._G=_VG
|
||||
_G.deepcopy=deepcopy
|
||||
function string.split(str, delim, maxResultCountOrNil)
|
||||
assert(#delim == 1, "only delim len 1 supported for now")
|
||||
maxResultCountOrNil = (maxResultCountOrNil or 0)-1
|
||||
local rv = {}
|
||||
local buf = ""
|
||||
for i = 1, #str do
|
||||
local c = string.sub(str,i,i)
|
||||
if #rv ~= maxResultCountOrNil and c == delim then
|
||||
table.insert(rv, buf)
|
||||
buf = ""
|
||||
else
|
||||
buf = buf..c
|
||||
end
|
||||
end
|
||||
table.insert(rv, buf)
|
||||
return rv
|
||||
end
|
||||
|
||||
INTERNAL_DISKS={}
|
||||
INTERNAL_SCREENS={}
|
||||
INTERNAL_NET={}
|
||||
INTERNAL_EVENT_QUEUE={}
|
||||
INTERNAL_COMPONENT_REGESTRY={}
|
||||
INTERNAL_RUNTIME_FUNCTIONS={}
|
||||
BIOS_CORO=nil
|
||||
|
||||
function addEventRaw(...)
|
||||
INTERNAL_EVENT_QUEUE[#INTERNAL_EVENT_QUEUE+1] = {...}
|
||||
end
|
||||
|
||||
function newComponent(type, object)
|
||||
local id = tostring(#INTERNAL_COMPONENT_REGESTRY+1)
|
||||
INTERNAL_COMPONENT_REGESTRY[id] = {type=type, object=object}
|
||||
addEventRaw("componentAdded", type, object)
|
||||
return {
|
||||
remove=function()
|
||||
INTERNAL_COMPONENT_REGESTRY[id]=nil
|
||||
addEventRaw("componentRemoved", type)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
function addRuntimeFunction(func)
|
||||
INTERNAL_RUNTIME_FUNCTIONS[#INTERNAL_RUNTIME_FUNCTIONS+1] = func
|
||||
end
|
||||
|
||||
_VG.component={}
|
||||
|
||||
function _VG.component.list()
|
||||
local i = 0
|
||||
return function()
|
||||
i=i+1
|
||||
return INTERNAL_COMPONENT_REGESTRY[tostring(i)].type, INTERNAL_COMPONENT_REGESTRY[tostring(i)].object
|
||||
end
|
||||
end
|
||||
|
||||
function _VG.component.getFirst(type)
|
||||
local object={}
|
||||
for i,v in pairs(INTERNAL_COMPONENT_REGESTRY) do
|
||||
if INTERNAL_COMPONENT_REGESTRY[tostring(i)].type == type then
|
||||
object=INTERNAL_COMPONENT_REGESTRY[tostring(i)]
|
||||
break
|
||||
end
|
||||
end
|
||||
return object.object
|
||||
end
|
||||
|
||||
for i,v in ipairs(fs.list("/AceVM/components/")) do
|
||||
local file = fs.open("/AceVM/components/"..v, "r")
|
||||
local code = file.readAll()
|
||||
file.close()
|
||||
load(code)()
|
||||
end
|
||||
|
||||
local file=fs.open("/computers/0/bios.lua","r")
|
||||
local bios=file.readAll()
|
||||
file.close()
|
||||
file=nil
|
||||
load(bios,"@bios",nil,_VG)()
|
||||
Reference in New Issue
Block a user