Files
Halyde/init.lua
T

89 lines
2.4 KiB
Lua

local gpu = component.proxy(component.list("gpu")())
local resX, resY = gpu.getResolution()
local function loadfile(file)
checkArg(1, file, "string")
local handle = component.invoke(computer.getBootAddress(), "open", file, "r")
local data = ""
repeat
local tmpdata = component.invoke(computer.getBootAddress(), "read", handle, math.huge or math.maxinteger)
data = data .. (tmpdata or "")
until not tmpdata
component.invoke(computer.getBootAddress(), "close", handle)
return assert(load(data, "=" .. file))
end
local function handleError(errorMessage)
return(errorMessage.."\n \n"..debug.traceback())
end
function loadBoot()
local foundArchitecture = false
for _, arch in pairs(computer.getArchitectures()) do
if arch == "Lua 5.3" then
foundArchitecture = true
break
end
end
if foundArchitecture then
local _, errorMesage = computer.setArchitecture("Lua 5.3")
if errorMessage then
error(errorMessage)
end
else
gpu.set(1, 1, "Required architecture (Lua 5.3) is not supported.")
gpu.set(1, 2, "Halting.")
while true do
computer.pullSignal()
end
end
loadfile("/halyde/kernel/boot.lua")(loadfile)
end
gpu.setBackground(0x000000)
gpu.fill(1, 1, resX, resY, " ")
-- Copying low-level functions in case of post-preload failure
local pullSignal = computer.pullSignal
local beep = computer.beep
local result, reason = xpcall(loadBoot, handleError)
if not result then
local bgColor
if gpu.getDepth() == 1 then
bgColor = 0x000000
else
bgColor = 0x000080
end
gpu.setBackground(bgColor)
gpu.fill(1, 1, resX, resY, " ")
local function render()
gpu.setForeground(0xFFFFFF)
local i = 2
reason = "A fatal error has occurred.\nHalyde cannot continue.\n \n" .. tostring(reason or "unknown error"):gsub("\t", " ")
for line in string.gmatch(reason, "([^\n]*)\n?") do
gpu.set(2, i, line)
i = i + 1
end
gpu.set(1, resY - 1, string.rep("", resX))
gpu.setForeground(bgColor)
gpu.setBackground(0xFFFFFF)
gpu.set(2, resY, "🠅 🠄 🠇 🠆")
gpu.setForeground(0xFFFFFF)
gpu.setBackground(bgColor)
gpu.set(4, resY, " / ")
gpu.set(9, resY, " / ")
gpu.set(14, resY, " / ")
gpu.set(20, resY, "Scroll" .. string.rep(" ", resX - 21))
end
render()
beep(440, 0.2)
beep(465, 0.2)
beep(440, 0.2)
beep(370, 0.5)
while true do -- TODO: Make this scrollable
pullSignal()
end
end