shellex: fix aliasing and colorize grep

This commit is contained in:
kepler155c@gmail.com
2019-05-13 09:30:27 -04:00
parent 9f3070bbdc
commit 180f0f9b93
5 changed files with 132 additions and 26 deletions

96
ignore/plc.lua Normal file
View File

@@ -0,0 +1,96 @@
local os = _G.os
local peripheral = _G.peripheral
local running, modemSide
local tasks = { }
local sides = { 'front', 'back', 'left', 'right', 'top', 'bottom' }
for _,v in pairs(sides) do
if peripheral.getType(v) == 'modem' and not peripheral.call(v, 'isWireless') then
modemSide = v
break
end
end
if not modemSide then
error('Must be conncted to a wired modem')
end
print('Using modem at side: ' .. modemSide)
peripheral.call(modemSide, 'open', 42)
local function addTask(fn)
local task
task = {
co = coroutine.create(fn)
}
table.insert(tasks, task)
return task
end
local function run()
if #tasks > 0 then
local event = { }
while true do
for n = #tasks, 1, -1 do
local task = tasks[n]
if coroutine.status(task.co) == 'dead' then
table.remove(tasks, n)
elseif task.filter == nil or task.filter == event[1] or event[1] == "terminate" then
local ok, param = coroutine.resume(task.co, table.unpack(event))
if not ok then
_G.printError(param)
else
task.filter = param
end
if coroutine.status(task.co) == 'dead' then
table.remove(tasks, n)
end
end
end
if #tasks == 0 then
break
end
event = { os.pullEventRaw() }
end
end
end
local function startProgram(program)
print('Starting: ' .. program.name)
local sandbox = { }
for k,v in pairs(_ENV) do
sandbox[k] = v
end
local env = setmetatable(sandbox, { __index = _G })
local fn, m = load(program.data, program.name, nil, env)
if fn then
running = addTask(function()
pcall(fn)
print('Ended: ' .. program.name)
end)
else
_G.printError(m)
end
end
addTask(function()
print('Waiting for program...')
while true do
local _, side, dport, dhost, msg = os.pullEvent('modem_message')
if side == modemSide and dport == 42 and dhost == os.getComputerID() then
if running and coroutine.status(running.co) ~= 'dead' then
coroutine.resume(running.co, 'terminate')
end
if msg.type == 'start' then
startProgram(msg)
end
os.queueEvent('dummy')
end
end
end)
run()