2020-05-12 03:55:05 -04:00
function loadfile ( p ) -- string -- function -- 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
2020-05-12 03:55:05 -04:00
function runfile ( p , ... ) -- string -- -- runs file *p* with arbitrary arguments in the current thread
2019-01-08 02:01:07 -05:00
return loadfile ( p ) ( ... )
2018-11-02 12:05:41 -04:00
end
2020-05-12 03:55:05 -04: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-15 22:37:29 -05:00
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-06-25 03:19:50 -04:00
package.path = " ./?;./?.lua;/boot/lib/?.lua;/pkg/lib/?.lua;/boot/lib/?/init.lua;/pkg/lib/?/init.lua "
package.loaded = { computer = computer , component = component , fs = fs , buffer = buffer }
2020-05-12 03:55:05 -04: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-11 11:59:20 -04:00
if not package.loaded [ f ] or force then
2020-06-25 02:29:12 -04:00
local ln = f : gsub ( " %. " , " / " )
2020-06-25 03:19:50 -04:00
for d in package.path : gmatch ( " [^;]+ " ) do
local p = d : gsub ( " %? " , ln )
if fs.exists ( p ) and not fs.isDirectory ( p ) then
package.loaded [ f ] = runfile ( p )
break
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-05-12 03:55:05 -04:00
function reload ( f ) -- string -- table -- Reloads library *f* from disk into memory.
2020-04-11 11:59:20 -04:00
return require ( f , true )
end