dmesg logging

This commit is contained in:
Mikayla Fischler 2022-05-16 12:50:51 -04:00
parent 11b89b679d
commit bdd8af1873

View File

@ -21,7 +21,8 @@ local LOG_DEBUG = true
local _log_sys = {
path = "/log.txt",
mode = MODE.APPEND,
file = nil
file = nil,
dmesg_out = nil
}
---@type function
@ -30,7 +31,8 @@ local free_space = fs.getFreeSpace
-- initialize logger
---@param path string file path
---@param write_mode MODE
log.init = function (path, write_mode)
---@param dmesg_redirect? table terminal/window to direct dmesg to
log.init = function (path, write_mode, dmesg_redirect)
_log_sys.path = path
_log_sys.mode = write_mode
@ -39,6 +41,12 @@ log.init = function (path, write_mode)
else
_log_sys.file = fs.open(path, "w+")
end
if dmesg_redirect then
_log_sys.dmesg_out = dmesg_redirect
else
_log_sys.dmesg_out = term.current()
end
end
-- private log write function
@ -76,6 +84,64 @@ local _log = function (msg)
end
end
-- write a message to the dmesg output
---@param msg string message to write
local _write = function (msg)
local out = _log_sys.dmesg_out
local out_w, out_h = out.getSize()
local lines = { msg }
-- wrap if needed
if string.len(msg) > out_w then
local remaining = true
local s_start = 1
local s_end = out_w
local i = 1
lines = {}
while remaining do
local line = string.sub(msg, s_start, s_end)
if line == "" then
remaining = false
else
lines[i] = line
s_start = s_end + 1
s_end = s_end + out_w
i = i + 1
end
end
end
-- output message
for i = 1, #lines do
local cur_x, cur_y = out.getCursorPos()
if cur_x > 1 then
if cur_y == out_h then
out.scroll(1)
out.setCursorPos(1, cur_y)
else
out.setCursorPos(1, cur_y + 1)
end
end
out.write(lines[i])
end
end
-- dmesg style logging for boot because I like linux-y things
---@param msg string message
---@param show_term? boolean whether or not to show on terminal output
log.dmesg = function (msg, show_term)
local message = string.format("[%10.3f] ", os.clock()) .. msg
if show_term then _write(message) end
_log(message)
end
-- log debug messages
---@param msg string message
---@param trace? boolean include file trace