diff --git a/module/sched.lua b/module/sched.lua index 898e190..fbc71cb 100644 --- a/module/sched.lua +++ b/module/sched.lua @@ -1,13 +1,19 @@ -tTasks,nPid,nTimeout,cPid = {},1,1,0 -function os.spawn(f,n) - tTasks[nPid] = {["c"]=coroutine.create(f),["n"]=n,["p"]=nPid} - for k,v in pairs(tTasks[cPid] or {}) do - tTasks[nPid][k] = tTasks[nPid][k] or v +do +tTasks,nPid,nTimeout,cPid = {},1,1,0 -- table of tasks, next process ID, event timeout, current PID +function os.spawn(f,n) -- creates a process from function *f* with name *n* + tTasks[nPid] = {["c"]=coroutine.create(f),["n"]=n,["p"]=nPid,e={}} + if tTasks[cPid] then + for k,v in pairs(tTasks[cPid].e) do + tTasks[nPid].e[k] = tTasks[nPid].e[k] or v + end end nPid = nPid + 1 return nPid - 1 end -function sched() +function os.kill(pid) -- removes process *pid* from the task list + tTasks[pid] = nil +end +function sched() -- the actual scheduler function while #tTasks > 0 do local tEv = {computer.pullSignal(nTimeout)} for k,v in pairs(tTasks) do @@ -20,3 +26,14 @@ function sched() end end end +function os.setenv(k,v) -- set's the current process' environment variable *k* to *v*, which is passed to children + if tTasks[cPid] then + tTasks[cPid].e[k] = v + end +end +function os.getenv(k) -- gets a process' *k* environment variable + if tTasks[cPid] then + return tTasks[cPid].e[k] + end +end +end