2020-05-12 17:55:05 +10:00
function loadfile ( p ) -- string -- function -- reads file *p* and returns a function if possible
2020-03-16 17:30:22 +11:00
local f = io.open ( p , " rb " )
2018-11-03 03:05:41 +11:00
local c = f : read ( " *a " )
f : close ( )
return load ( c , p , " t " )
end
2020-05-12 17:55:05 +10:00
function runfile ( p , ... ) -- string -- -- runs file *p* with arbitrary arguments in the current thread
2019-01-08 18:01:07 +11:00
return loadfile ( p ) ( ... )
2018-11-03 03:05:41 +11:00
end
2020-05-12 17:55:05 +10:00
function os . spawnfile ( p , n , ... ) -- string string -- number -- spawns a new process from file *p* with name *n*, with arguments following *n*.
2019-12-16 14:37:29 +11:00
local tA = { ... }
2020-03-16 17:30:22 +11: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 18:01:07 +11:00
end
2020-03-18 01:11:53 +11:00
_G.package = { }
2020-06-25 16:29:12 +10:00
package.loaded = { computer = computer , component = component , fs = fs , buffer = buffer , table = table , string = string , package = package , os = os , math = math , coroutine = coroutine }
2020-05-12 17:55:05 +10:00
function require ( f , force ) -- string boolean -- table -- 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
2020-04-12 01:59:20 +10:00
if not package.loaded [ f ] or force then
2020-06-06 19:49:26 +10:00
local lib = os.getenv ( " LIB " ) or " /boot/lib \n /pkg/lib "
2020-06-25 16:29:12 +10:00
local ln = f : gsub ( " %. " , " / " )
2019-12-20 01:51:27 +11:00
for d in lib : gmatch ( " [^ \n ]+ " ) do
2020-06-25 16:29:12 +10:00
if fs.isDirectory ( d .. " / " .. ln ) then
package.loaded [ f ] = runfile ( d .. " / " .. ln .. " /init.lua " )
elseif fs.exists ( d .. " / " .. ln .. " .lua " ) then
package.loaded [ f ] = runfile ( d .. " / " .. ln .. " .lua " )
2019-12-20 01:51:27 +11:00
end
2019-01-08 18:01:07 +11:00
end
end
2020-03-18 01:11:53 +11:00
if package.loaded [ f ] then
return package.loaded [ f ]
2019-12-19 16:14:48 +11:00
end
2019-12-20 01:51:27 +11:00
error ( " library not found: " .. f )
2018-11-03 03:05:41 +11:00
end
2020-05-12 17:55:05 +10:00
function reload ( f ) -- string -- table -- Reloads library *f* from disk into memory.
2020-04-12 01:59:20 +10:00
return require ( f , true )
end