1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2024-06-26 07:03:22 +00:00
CC-Tweaked/src/main/resources/data/computercraft/lua/rom/programs/monitor.lua
SquidDev 5e462adc5c Relocate all resource files
- textures/{block,item}s -> textures/{block,item}
 - assets/*/{advancements,lua,recipes} -> data/*/...
2019-04-02 13:18:43 +01: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