forked from Hyperion/HyperionOS
57 lines
1.5 KiB
Plaintext
57 lines
1.5 KiB
Plaintext
local sys = {}
|
|
local fs = require("sys.fs")
|
|
|
|
function sys.spawn(func, name, envars, args)
|
|
return coroutine.yield(0x10, func, name, envars, args)
|
|
end
|
|
|
|
function sys.spawnFromFile(path, name, envars, args)
|
|
local data = fs.readAllText(path)
|
|
if not data then
|
|
error("File not found: "..path,2)
|
|
end
|
|
local func, err = load(data, "@"..path)
|
|
if not func then
|
|
error("Error loading file "..path..": "..tostring(err),2)
|
|
end
|
|
return coroutine.yield(0x10, func, name, envars, args)
|
|
end
|
|
|
|
function sys.spawnAndWait(func, name, envars, args)
|
|
local task = coroutine.yield(0x10, func, name, envars, args)
|
|
local oldsignal = sys.getSignalHandler(17)
|
|
local exit = false
|
|
sys.setSignalHandler(17, function()
|
|
local tasks = sys.getChildrenTasks(task)
|
|
if not tasks[task] then
|
|
exit = true
|
|
end
|
|
end)
|
|
while not exit do
|
|
coroutine.yield()
|
|
end
|
|
sys.setSignalHandler(17, oldsignal)
|
|
return task
|
|
end
|
|
|
|
function sys.spawnFromFileAndWait(path, name, envars, args)
|
|
local data = fs.readAllText(path)
|
|
if not data then
|
|
error("File not found: "..path,2)
|
|
end
|
|
local func, err = load(data, "@"..path)
|
|
if not func then
|
|
error("Error loading file "..path..": "..tostring(err),2)
|
|
end
|
|
return sys.spawnAndWait(func, name, envars, args)
|
|
end
|
|
|
|
function sys.exit(code)
|
|
return coroutine.yield(0x11, code)
|
|
end
|
|
|
|
function sys.getTaskInfo(task)
|
|
return coroutine.yield(0x12, task)
|
|
end
|
|
|
|
return sys |