From 180f0f9b936343f9e255f501c4519a751f31d59a Mon Sep 17 00:00:00 2001 From: "kepler155c@gmail.com" Date: Mon, 13 May 2019 09:30:27 -0400 Subject: [PATCH] shellex: fix aliasing and colorize grep --- ignore/plc.lua | 96 +++++++++++++++++++++++++++++++++++++ neural/mobRancher.lua | 14 +++--- shellex/apis/tty.lua | 13 ++++- shellex/autorun/startup.lua | 17 ++----- shellex/grep.lua | 18 ++++--- 5 files changed, 132 insertions(+), 26 deletions(-) create mode 100644 ignore/plc.lua diff --git a/ignore/plc.lua b/ignore/plc.lua new file mode 100644 index 0000000..3b582a3 --- /dev/null +++ b/ignore/plc.lua @@ -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() diff --git a/neural/mobRancher.lua b/neural/mobRancher.lua index 104f4e8..2a919a1 100644 --- a/neural/mobRancher.lua +++ b/neural/mobRancher.lua @@ -3,9 +3,9 @@ Must be run on a mob with the same height. ]] -local neural = require('neural.interface') -local Sound = require('sound') -local Util = require('util') +local neural = require('neural.interface') +local Sound = require('sound') +local Map = require('map') local os = _G.os @@ -30,7 +30,7 @@ local function resupply() end print('resupplying') for _ = 1, 2 do - local dispenser = Util.find(neural.scan(), 'name', 'minecraft:dispenser') + local dispenser = Map.find(neural.scan(), 'name', 'minecraft:dispenser') if not dispenser then print('dispenser not found') break @@ -76,7 +76,7 @@ local function kill(entity) end local function getEntities() - return Util.filter(neural.sense(), function(entity) + return Map.filter(neural.sense(), function(entity) if entity.name == BREEDING and entity.y > -.5 then return true end @@ -92,7 +92,7 @@ local function getHungry(entities) end local function randomEntity(entities) - local r = math.random(1, Util.size(entities)) + local r = math.random(1, Map.size(entities)) local i = 1 for _, v in pairs(entities) do i = i + 1 @@ -107,7 +107,7 @@ while true do local entities = getEntities() - if Util.size(entities) > MAX_GROWN then + if Map.size(entities) > MAX_GROWN then kill(randomEntity(entities)) else local entity = getHungry(entities) diff --git a/shellex/apis/tty.lua b/shellex/apis/tty.lua index 07e2e98..999139c 100644 --- a/shellex/apis/tty.lua +++ b/shellex/apis/tty.lua @@ -8,12 +8,23 @@ local cmap = { [ 0x44CC00 ] = colors.lime, [ 0xB0B00F ] = colors.yellow, [ 0xFFFFFF ] = colors.white, + + [ 0xb000b0 ] = colors.purple, + [ 0x00FF00 ] = colors.green, + [ 0xFF0000 ] = colors.red, + [ 0x00FFFF ] = colors.cyan, + [ 0x000000 ] = colors.black, } return { gpu = function() + local current = 0xFFFFFF return { - setForeground = function(c) term.setTextColor(cmap[c]) end, + setForeground = function(c) + current = c + term.setTextColor(cmap[c]) + end, + getForeground = function() return current end, } end, getViewport = term.getSize, diff --git a/shellex/autorun/startup.lua b/shellex/autorun/startup.lua index 0ffd74f..26d2752 100644 --- a/shellex/autorun/startup.lua +++ b/shellex/autorun/startup.lua @@ -1,6 +1,4 @@ -local Config = require('config') - -local kernel = _G.kernel +local fs = _G.fs local os = _G.os local settings = _G.settings @@ -13,12 +11,7 @@ function os.getenv(k) return settings.get(k) end -local config = Config.load('shell', { aliases = { } }) -if not config.openOsInit then - config.openOsInit = true - for _, alias in pairs({ 'ls', 'rm', 'cp', 'mv' }) do - config.aliases[alias] = nil - kernel.getShell().clearAlias(alias) - end - Config.update('shell', config) -end +fs.mount('rom/programs/list.lua', 'linkfs', 'packages/shellex/ls.lua') +fs.mount('rom/programs/delete.lua', 'linkfs', 'packages/shellex/rm.lua') +fs.mount('rom/programs/copy.lua', 'linkfs', 'packages/shellex/cp.lua') +fs.mount('rom/programs/move.lua', 'linkfs', 'packages/shellex/mv.lua') diff --git a/shellex/grep.lua b/shellex/grep.lua index f4cb39c..9a8af85 100644 --- a/shellex/grep.lua +++ b/shellex/grep.lua @@ -40,7 +40,7 @@ end local LABEL_COLOR = 0xb000b0 local LINE_NUM_COLOR = 0x00FF00 -local MATCH_COLOR = 0xFF0000 +local MATCH_COLOR = 0xB0B00F local COLON_COLOR = 0x00FFFF local function pop(...) @@ -115,7 +115,7 @@ local quiet = pop('q','quiet','silent') local print_count = pop('c','count') local colorize = pop('color','colour') and io.output().tty and tty.isAvailable() - +colorize = true local noop = function(...)return ...;end local setc = colorize and gpu.setForeground or noop local getc = colorize and gpu.getForeground or noop @@ -203,13 +203,19 @@ local function readLines() meta.label = file local file, reason = resolve(file) if fs.exists(file) then - curHand, reason = io.open(file, 'r') - if not curHand then - local msg = string.format("failed to read from %s: %s", meta.label, reason) + if fs.isDirectory(file) then + local msg = string.format("%s: Is a directory", meta.label) stderr:write("grep: ",msg,"\n") return false, 2 else - curFile = meta.label + curHand, reason = io.open(file, 'r') + if not curHand then + local msg = string.format("failed to read from %s: %s", meta.label, reason) + stderr:write("grep: ",msg,"\n") + return false, 2 + else + curFile = meta.label + end end else stderr:write("grep: ",file,": file not found\n")