2019-01-08 02:01:07 -05:00
function loadfile ( p ) -- reads file *p* and returns a function if possible
2020-03-16 02:30:22 -04:00
local f = io.open ( p , " rb " )
2018-11-02 12:05:41 -04:00
local c = f : read ( " *a " )
f : close ( )
return load ( c , p , " t " )
end
2019-01-08 02:01:07 -05:00
function runfile ( p , ... ) -- runs file *p* with arbitrary arguments in the current thread
return loadfile ( p ) ( ... )
2018-11-02 12:05:41 -04:00
end
2019-12-15 22:37:29 -05:00
function os . spawnfile ( p , n , ... ) -- spawns a new process from file *p* with name *n*, with arguments following *n*.
local tA = { ... }
2020-03-16 02:30:22 -04:00
return os.spawn ( function ( ) local res = { pcall ( loadfile ( p ) , table.unpack ( tA ) ) } computer.pushSignal ( " process_finished " , os.pid ( ) , table.unpack ( res ) ) dprint ( table.concat ( res ) ) end , n or p )
2019-01-08 02:01:07 -05:00
end
2020-03-17 10:11:53 -04:00
_G.package = { }
2020-03-17 23:02:37 -04:00
package.loaded = { computer = computer , component = component , fs = fs , buffer = buffer }
2020-04-11 11:59:20 -04:00
function require ( f , force ) -- searches for a library with name *f* and returns what the library returns, if possible. if *force* is set, loads the library even if it is cached
if not package.loaded [ f ] or force then
2019-12-19 09:51:27 -05:00
local lib = os.getenv ( " LIB " ) or " /boot/lib "
for d in lib : gmatch ( " [^ \n ]+ " ) do
if fs.exists ( d .. " / " .. f ) then
2020-03-17 10:11:53 -04:00
package.loaded [ f ] = runfile ( d .. " / " .. f )
2019-12-19 09:51:27 -05:00
elseif fs.exists ( d .. " / " .. f .. " .lua " ) then
2020-03-17 10:11:53 -04:00
package.loaded [ f ] = runfile ( d .. " / " .. f .. " .lua " )
2019-12-19 09:51:27 -05:00
end
2019-01-08 02:01:07 -05:00
end
end
2020-03-17 10:11:53 -04:00
if package.loaded [ f ] then
return package.loaded [ f ]
2019-12-19 00:14:48 -05:00
end
2019-12-19 09:51:27 -05:00
error ( " library not found: " .. f )
2018-11-02 12:05:41 -04:00
end
2020-04-11 11:59:20 -04:00
function reload ( f )
return require ( f , true )
end