mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-09-28 15:08:47 +00:00
Merge pull request #185 from SquidDev-CC/hotfix/unpack-length
Manually specify the number of values to unpack
This commit is contained in:
commit
2a0556fa4c
@ -175,11 +175,11 @@ function os.pullEventRaw( sFilter )
|
|||||||
end
|
end
|
||||||
|
|
||||||
function os.pullEvent( sFilter )
|
function os.pullEvent( sFilter )
|
||||||
local eventData = { os.pullEventRaw( sFilter ) }
|
local eventData = table.pack( os.pullEventRaw( sFilter ) )
|
||||||
if eventData[1] == "terminate" then
|
if eventData[1] == "terminate" then
|
||||||
error( "Terminated", 0 )
|
error( "Terminated", 0 )
|
||||||
end
|
end
|
||||||
return table.unpack( eventData )
|
return table.unpack( eventData, 1, eventData.n )
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Install globals
|
-- Install globals
|
||||||
@ -550,13 +550,13 @@ end
|
|||||||
|
|
||||||
-- Install the rest of the OS api
|
-- Install the rest of the OS api
|
||||||
function os.run( _tEnv, _sPath, ... )
|
function os.run( _tEnv, _sPath, ... )
|
||||||
local tArgs = { ... }
|
local tArgs = table.pack( ... )
|
||||||
local tEnv = _tEnv
|
local tEnv = _tEnv
|
||||||
setmetatable( tEnv, { __index = _G } )
|
setmetatable( tEnv, { __index = _G } )
|
||||||
local fnFile, err = loadfile( _sPath, tEnv )
|
local fnFile, err = loadfile( _sPath, tEnv )
|
||||||
if fnFile then
|
if fnFile then
|
||||||
local ok, err = pcall( function()
|
local ok, err = pcall( function()
|
||||||
fnFile( table.unpack( tArgs ) )
|
fnFile( table.unpack( tArgs, 1, tArgs.n ) )
|
||||||
end )
|
end )
|
||||||
if not ok then
|
if not ok then
|
||||||
if err and err ~= "" then
|
if err and err ~= "" then
|
||||||
|
@ -14,13 +14,13 @@ local function runUntilLimit( _routines, _limit )
|
|||||||
local living = count
|
local living = count
|
||||||
|
|
||||||
local tFilters = {}
|
local tFilters = {}
|
||||||
local eventData = {}
|
local eventData = { n = 0 }
|
||||||
while true do
|
while true do
|
||||||
for n=1,count do
|
for n=1,count do
|
||||||
local r = _routines[n]
|
local r = _routines[n]
|
||||||
if r then
|
if r then
|
||||||
if tFilters[r] == nil or tFilters[r] == eventData[1] or eventData[1] == "terminate" then
|
if tFilters[r] == nil or tFilters[r] == eventData[1] or eventData[1] == "terminate" then
|
||||||
local ok, param = coroutine.resume( r, table.unpack(eventData) )
|
local ok, param = coroutine.resume( r, table.unpack( eventData, 1, eventData.n ) )
|
||||||
if not ok then
|
if not ok then
|
||||||
error( param, 0 )
|
error( param, 0 )
|
||||||
else
|
else
|
||||||
@ -46,7 +46,7 @@ local function runUntilLimit( _routines, _limit )
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
eventData = { os.pullEventRaw() }
|
eventData = table.pack( os.pullEventRaw() )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ local function resumeProcess( nProcess, sEvent, ... )
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function launchProcess( tProgramEnv, sProgramPath, ... )
|
local function launchProcess( tProgramEnv, sProgramPath, ... )
|
||||||
local tProgramArgs = { ... }
|
local tProgramArgs = table.pack( ... )
|
||||||
local nProcess = #tProcesses + 1
|
local nProcess = #tProcesses + 1
|
||||||
local tProcess = {}
|
local tProcess = {}
|
||||||
tProcess.sTitle = fs.getName( sProgramPath )
|
tProcess.sTitle = fs.getName( sProgramPath )
|
||||||
@ -57,7 +57,7 @@ local function launchProcess( tProgramEnv, sProgramPath, ... )
|
|||||||
tProcess.window = window.create( parentTerm, 1, 1, w, h, false )
|
tProcess.window = window.create( parentTerm, 1, 1, w, h, false )
|
||||||
end
|
end
|
||||||
tProcess.co = coroutine.create( function()
|
tProcess.co = coroutine.create( function()
|
||||||
os.run( tProgramEnv, sProgramPath, table.unpack( tProgramArgs ) )
|
os.run( tProgramEnv, sProgramPath, table.unpack( tProgramArgs, 1, tProgramArgs.n ) )
|
||||||
if not tProcess.bInteracted then
|
if not tProcess.bInteracted then
|
||||||
term.setCursorBlink( false )
|
term.setCursorBlink( false )
|
||||||
print( "Press any key to continue" )
|
print( "Press any key to continue" )
|
||||||
@ -222,7 +222,7 @@ redrawMenu()
|
|||||||
-- Run processes
|
-- Run processes
|
||||||
while #tProcesses > 0 do
|
while #tProcesses > 0 do
|
||||||
-- Get the event
|
-- Get the event
|
||||||
local tEventData = { os.pullEventRaw() }
|
local tEventData = table.pack( os.pullEventRaw() )
|
||||||
local sEvent = tEventData[1]
|
local sEvent = tEventData[1]
|
||||||
if sEvent == "term_resize" then
|
if sEvent == "term_resize" then
|
||||||
-- Resize event
|
-- Resize event
|
||||||
@ -233,7 +233,7 @@ while #tProcesses > 0 do
|
|||||||
elseif sEvent == "char" or sEvent == "key" or sEvent == "key_up" or sEvent == "paste" or sEvent == "terminate" then
|
elseif sEvent == "char" or sEvent == "key" or sEvent == "key_up" or sEvent == "paste" or sEvent == "terminate" then
|
||||||
-- Keyboard event
|
-- Keyboard event
|
||||||
-- Passthrough to current process
|
-- Passthrough to current process
|
||||||
resumeProcess( nCurrentProcess, table.unpack( tEventData ) )
|
resumeProcess( nCurrentProcess, table.unpack( tEventData, 1, tEventData.n ) )
|
||||||
if cullProcess( nCurrentProcess ) then
|
if cullProcess( nCurrentProcess ) then
|
||||||
setMenuVisible( #tProcesses >= 2 )
|
setMenuVisible( #tProcesses >= 2 )
|
||||||
redrawMenu()
|
redrawMenu()
|
||||||
@ -280,7 +280,7 @@ while #tProcesses > 0 do
|
|||||||
-- Passthrough to all processes
|
-- Passthrough to all processes
|
||||||
local nLimit = #tProcesses -- Storing this ensures any new things spawned don't get the event
|
local nLimit = #tProcesses -- Storing this ensures any new things spawned don't get the event
|
||||||
for n=1,nLimit do
|
for n=1,nLimit do
|
||||||
resumeProcess( n, table.unpack( tEventData ) )
|
resumeProcess( n, table.unpack( tEventData, 1, tEventData.n ) )
|
||||||
end
|
end
|
||||||
if cullProcesses() then
|
if cullProcesses() then
|
||||||
setMenuVisible( #tProcesses >= 2 )
|
setMenuVisible( #tProcesses >= 2 )
|
||||||
|
@ -43,13 +43,13 @@ end
|
|||||||
local ok, param = pcall( function()
|
local ok, param = pcall( function()
|
||||||
local sFilter = resume()
|
local sFilter = resume()
|
||||||
while coroutine.status( co ) ~= "dead" do
|
while coroutine.status( co ) ~= "dead" do
|
||||||
local tEvent = { os.pullEventRaw() }
|
local tEvent = table.pack( os.pullEventRaw() )
|
||||||
if sFilter == nil or tEvent[1] == sFilter or tEvent[1] == "terminate" then
|
if sFilter == nil or tEvent[1] == sFilter or tEvent[1] == "terminate" then
|
||||||
sFilter = resume( table.unpack( tEvent ) )
|
sFilter = resume( table.unpack( tEvent, 1, tEvent.n ) )
|
||||||
end
|
end
|
||||||
if coroutine.status( co ) ~= "dead" and (sFilter == nil or sFilter == "mouse_click") then
|
if coroutine.status( co ) ~= "dead" and (sFilter == nil or sFilter == "mouse_click") then
|
||||||
if tEvent[1] == "monitor_touch" and tEvent[2] == sName then
|
if tEvent[1] == "monitor_touch" and tEvent[2] == sName then
|
||||||
sFilter = resume( "mouse_click", 1, table.unpack( tEvent, 3 ) )
|
sFilter = resume( "mouse_click", 1, table.unpack( tEvent, 3, tEvent.n ) )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if coroutine.status( co ) ~= "dead" and (sFilter == nil or sFilter == "term_resize") then
|
if coroutine.status( co ) ~= "dead" and (sFilter == nil or sFilter == "term_resize") then
|
||||||
|
Loading…
Reference in New Issue
Block a user