pelican/boot.lua
2023-07-08 20:30:45 +01:00

106 lines
3.4 KiB
Lua

-- Initialise global variables related to booting.
_G._KERNEL_ROOT = "/"
_G._KERNEL_LOCS = {}
_G._BOOT_DEFAULT = nil
_G._PELICAN_DEBUG = false
_G._PELICAN_VERSION = "0.1.0"
_G._PELICAN_CONFIG_LOCATION = ""
print("Pelican " .. _G._PELICAN_VERSION)
print("Searching for Pelican configuration.")
local directories = {}
directories[1] = "/"
local x = 2
local s = 1
local v = true
while v and _G._PELICAN_CONFIG_LOCATION == "" do
local files = fs.list(directories[s])
for i = 1, #files do
if fs.isDir(fs.combine(directories[s], files[i])) then
table.insert(directories, x, directories[s] .. files[i])
x = x + 1
elseif fs.getName(fs.combine(directories[s], files[i])) == "pelican.conf.lua" then
_G._PELICAN_CONFIG_LOCATION = fs.combine(directories[s], files[i])
end
end
table.remove(directories, s)
s = s + 1
if directories[s] == nil then
v = false
end
end
if _G._PELICAN_CONFIG_LOCATION ~= "" then
print("Found config at " .. _G._PELICAN_CONFIG_LOCATION .. ".")
dofile(_G._PELICAN_CONFIG_LOCATION)
print("Config applied!")
else
print("No config found.")
if not _G._PELICAN_DEBUG then
term.clear()
term.setCursorPos(1, 1)
end
end
if #_G._KERNEL_LOCS ~= 0 and _G._BOOT_DEFAULT == nil then
print("")
if not _G._PELICAN_DEBUG then
term.clear()
term.setCursorPos(1, 1)
end
print("These kernels are available to boot to: ")
for i = 1, #_G._KERNEL_LOCS do
print(i.. ". " .. _G._KERNEL_LOCS[i])
end
print("To boot one of these kernels, type boot followed by the index number.")
print("Just type boot to boot kernel #1.")
print("")
end
local boot = false
if _G._BOOT_DEFAULT ~= nil and _G._KERNEL_LOCS[_G._BOOT_DEFAULT] ~= nil then
boot = _G._KERNEL_LOCS[_G._BOOT_DEFAULT]
end
if not boot then
print("No default kernel set. Dropping to shell.")
while not boot do
write("> ")
local cmd = read()
if cmd == "restart" or cmd == "reboot" then
os.reboot()
elseif cmd:find("^boot") and cmd ~= "boot" then
cmd = cmd:gsub("boot ", "")
if _G._KERNEL_LOCS[tonumber(cmd)] then
boot = _G._KERNEL_LOCS[tonumber(cmd)]
elseif fs.exists(cmd) then
boot = cmd
else
print("Please enter a valid kernel index number or kernel path.")
end
elseif cmd == "boot" then
if _G._KERNEL_LOCS[1] then
boot = _G._KERNEL_LOCS[1]
else
print("Please enter a kernel path.")
end
elseif cmd == "shutdown" or cmd == "poweroff" or cmd == "halt" then
os.shutdown()
elseif cmd == "help" then
print("shutdown - halts execution")
print("boot - executes a kernel")
print("restart - restarts computer")
print("help - prints help information")
print("version - prints version information")
elseif cmd == "version" then
print("Pelican boot loader version " .. _G._PELICAN_VERSION)
print("This software is licensed under the GNU General Public License.")
print("More information about this software can be found online at:")
print("https://git.colean.cc/canaryos/pelican")
end
end
end
dofile(boot)