1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2024-06-25 14:43:22 +00:00
CC-Tweaked/src/main/resources/assets/computercraft/lua/rom/programs/monitor.lua
2019-12-07 10:33:47 +00:00

66 lines
1.8 KiB
Lua

local function printUsage()
print( "Usage: monitor <name> <program> <arguments>" )
return
end
local tArgs = { ... }
if #tArgs < 2 then
printUsage()
return
end
local sName = tArgs[1]
if peripheral.getType( sName ) ~= "monitor" then
print( "No monitor named " .. sName )
return
end
local sProgram = tArgs[2]
local sPath = shell.resolveProgram( sProgram )
if sPath == nil then
print( "No such program: " .. sProgram )
return
end
print( "Running " .. sProgram .. " on monitor " .. sName )
local monitor = peripheral.wrap( sName )
local previousTerm = term.redirect( monitor )
local co = coroutine.create( function()
shell.run( sProgram, table.unpack( tArgs, 3 ) )
end )
local function resume( ... )
local ok, param = coroutine.resume( co, ... )
if not ok then
printError( param )
end
return param
end
local ok, param = pcall( function()
local sFilter = resume()
while coroutine.status( co ) ~= "dead" do
local tEvent = table.pack( os.pullEventRaw() )
if sFilter == nil or tEvent[1] == sFilter or tEvent[1] == "terminate" then
sFilter = resume( table.unpack( tEvent, 1, tEvent.n ) )
end
if coroutine.status( co ) ~= "dead" and (sFilter == nil or sFilter == "mouse_click") then
if tEvent[1] == "monitor_touch" and tEvent[2] == sName then
sFilter = resume( "mouse_click", 1, table.unpack( tEvent, 3, tEvent.n ) )
end
end
if coroutine.status( co ) ~= "dead" and (sFilter == nil or sFilter == "term_resize") then
if tEvent[1] == "monitor_resize" and tEvent[2] == sName then
sFilter = resume( "term_resize" )
end
end
end
end )
term.redirect( previousTerm )
if not ok then
printError( param )
end