lualoader: improve the design of the brand-/logo- mechanism

In the previous world order, any brand/logo was forced to pull in the
drawer and call drawer.add{Brand,Logo} with the name their brand/logo is
taking and a table describing it.

In the new world order, these files just need to return a table that maps
out graphics types to a table of the exact same format as what was
previously being passed back into the drawer. The appeal here is not needing
to grab a reference back to the drawer module and having a cleaner
data-driven looking format for these. The format has been renamed to 'gfx-*'
prefixes and each one can provide a logo and a brand.

drawer.addBrand/drawer.addLogo will remain in place until FreeBSD 13, as
there's no overhead to them and it's not yet worth the break in
compatibility with any pre-existing brands and logos.

Reviewed by:	freqlabs
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D24966
This commit is contained in:
Kyle Evans 2020-10-04 22:41:43 +00:00
parent 3331a1d173
commit 546f18f3da
8 changed files with 178 additions and 138 deletions

View File

@ -36,6 +36,13 @@
# xargs -n1 | sort | uniq -d; # xargs -n1 | sort | uniq -d;
# done # done
# 20201004: logo files renamed to type-agnostic gfx-*.lua
OLD_FILES+=boot/lua/logo-beastie.lua
OLD_FILES+=boot/lua/logo-beastiebw.lua
OLD_FILES+=boot/lua/logo-fbsdbw.lua
OLD_FILES+=boot/lua/logo-orb.lua
OLD_FILES+=boot/lua/logo-orbbw.lua
# 20200923: memfd_test moved to /usr/tests/sys/posixshm # 20200923: memfd_test moved to /usr/tests/sys/posixshm
OLD_FILES+=usr/tests/sys/kern/memfd_test OLD_FILES+=usr/tests/sys/kern/memfd_test

View File

@ -20,11 +20,11 @@ FILES= cli.lua \
drawer.lua \ drawer.lua \
hook.lua \ hook.lua \
loader.lua \ loader.lua \
logo-beastie.lua \ gfx-beastie.lua \
logo-beastiebw.lua \ gfx-beastiebw.lua \
logo-fbsdbw.lua \ gfx-fbsdbw.lua \
logo-orb.lua \ gfx-orb.lua \
logo-orbbw.lua \ gfx-orbbw.lua \
menu.lua \ menu.lua \
password.lua \ password.lua \
screen.lua screen.lua

View File

@ -61,6 +61,35 @@ local function menuEntryName(drawing_menu, entry)
return entry.name return entry.name
end end
local function processFile(gfxname)
if gfxname == nil then
return false, "Missing filename"
end
local ret = try_include('gfx-' .. gfxname)
if ret == nil then
return false, "Failed to include gfx-" .. gfxname
end
-- Legacy format
if type(ret) ~= "table" then
return true
end
for gfxtype, def in pairs(ret) do
if gfxtype == "brand" then
drawer.addBrand(gfxname, def)
elseif gfxtype == "logo" then
drawer.addLogo(gfxname, def)
else
return false, "Unknown graphics type '" .. gfxtype ..
"'"
end
end
return true
end
local function getBranddef(brand) local function getBranddef(brand)
if brand == nil then if brand == nil then
return nil return nil
@ -70,7 +99,18 @@ local function getBranddef(brand)
-- Try to pull it in -- Try to pull it in
if branddef == nil then if branddef == nil then
try_include('brand-' .. brand) local res, err = processFile(brand)
if not res then
-- This fallback should go away after FreeBSD 13.
try_include('brand-' .. brand)
-- If the fallback also failed, print whatever error
-- we encountered in the original processing.
if branddefs[brand] == nil then
print(err)
return nil
end
end
branddef = branddefs[brand] branddef = branddefs[brand]
end end
@ -86,7 +126,18 @@ local function getLogodef(logo)
-- Try to pull it in -- Try to pull it in
if logodef == nil then if logodef == nil then
try_include('logo-' .. logo) local res, err = processFile(logo)
if not res then
-- This fallback should go away after FreeBSD 13.
try_include('logo-' .. logo)
-- If the fallback also failed, print whatever error
-- we encountered in the original processing.
if logodefs[logo] == nil then
print(err)
return nil
end
end
logodef = logodefs[logo] logodef = logodefs[logo]
end end
@ -364,6 +415,8 @@ drawer.default_bw_logodef = 'orbbw'
-- drawer module in case it's a filesystem issue. -- drawer module in case it's a filesystem issue.
drawer.default_fallback_logodef = 'none' drawer.default_fallback_logodef = 'none'
-- These should go away after FreeBSD 13; only available for backwards
-- compatibility with old logo- files.
function drawer.addBrand(name, def) function drawer.addBrand(name, def)
branddefs[name] = def branddefs[name] = def
end end

View File

@ -27,33 +27,29 @@
-- $FreeBSD$ -- $FreeBSD$
-- --
local drawer = require("drawer") return {
logo = {
local beastie_color = { graphic = {
" \027[31m, ,", " \027[31m, ,",
" /( )`", " /( )`",
" \\ \\___ / |", " \\ \\___ / |",
" /- \027[37m_\027[31m `-/ '", " /- \027[37m_\027[31m `-/ '",
" (\027[37m/\\/ \\\027[31m \\ /\\", " (\027[37m/\\/ \\\027[31m \\ /\\",
" \027[37m/ / |\027[31m ` \\", " \027[37m/ / |\027[31m ` \\",
" \027[34mO O \027[37m) \027[31m/ |", " \027[34mO O \027[37m) \027[31m/ |",
" \027[37m`-^--'\027[31m`< '", " \027[37m`-^--'\027[31m`< '",
" (_.) _ ) /", " (_.) _ ) /",
" `.___/` /", " `.___/` /",
" `-----' /", " `-----' /",
" \027[33m<----.\027[31m __ / __ \\", " \027[33m<----.\027[31m __ / __ \\",
" \027[33m<----|====\027[31mO)))\027[33m==\027[31m) \\) /\027[33m====|", " \027[33m<----|====\027[31mO)))\027[33m==\027[31m) \\) /\027[33m====|",
" \027[33m<----'\027[31m `--' `.__,' \\", " \027[33m<----'\027[31m `--' `.__,' \\",
" | |", " | |",
" \\ / /\\", " \\ / /\\",
" \027[36m______\027[31m( (_ / \\______/", " \027[36m______\027[31m( (_ / \\______/",
" \027[36m,' ,-----' |", " \027[36m,' ,-----' |",
" `--{__________)\027[m" " `--{__________)\027[m",
},
requires_color = true,
}
} }
drawer.addLogo("beastie", {
requires_color = true,
graphic = beastie_color,
})
return true

View File

@ -27,32 +27,28 @@
-- $FreeBSD$ -- $FreeBSD$
-- --
local drawer = require("drawer") return {
logo = {
local beastiebw = { graphic = {
" , ,", " , ,",
" /( )`", " /( )`",
" \\ \\___ / |", " \\ \\___ / |",
" /- _ `-/ '", " /- _ `-/ '",
" (/\\/ \\ \\ /\\", " (/\\/ \\ \\ /\\",
" / / | ` \\", " / / | ` \\",
" O O ) / |", " O O ) / |",
" `-^--'`< '", " `-^--'`< '",
" (_.) _ ) /", " (_.) _ ) /",
" `.___/` /", " `.___/` /",
" `-----' /", " `-----' /",
" <----. __ / __ \\", " <----. __ / __ \\",
" <----|====O)))==) \\) /====|", " <----|====O)))==) \\) /====|",
" <----' `--' `.__,' \\", " <----' `--' `.__,' \\",
" | |", " | |",
" \\ / /\\", " \\ / /\\",
" ______( (_ / \\______/", " ______( (_ / \\______/",
" ,' ,-----' |", " ,' ,-----' |",
" `--{__________)" " `--{__________)",
},
}
} }
drawer.addLogo("beastiebw", {
graphic = beastiebw,
})
return true

View File

@ -27,27 +27,23 @@
-- $FreeBSD$ -- $FreeBSD$
-- --
local drawer = require("drawer") return {
logo = {
local fbsd_logo = { graphic = {
" ______", " ______",
" | ____| __ ___ ___ ", " | ____| __ ___ ___ ",
" | |__ | '__/ _ \\/ _ \\", " | |__ | '__/ _ \\/ _ \\",
" | __|| | | __/ __/", " | __|| | | __/ __/",
" | | | | | | |", " | | | | | | |",
" |_| |_| \\___|\\___|", " |_| |_| \\___|\\___|",
" ____ _____ _____", " ____ _____ _____",
" | _ \\ / ____| __ \\", " | _ \\ / ____| __ \\",
" | |_) | (___ | | | |", " | |_) | (___ | | | |",
" | _ < \\___ \\| | | |", " | _ < \\___ \\| | | |",
" | |_) |____) | |__| |", " | |_) |____) | |__| |",
" | | | |", " | | | |",
" |____/|_____/|_____/" " |____/|_____/|_____/",
},
shift = {x = 5, y = 4},
}
} }
drawer.addLogo("fbsdbw", {
graphic = fbsd_logo,
shift = {x = 5, y = 4},
})
return true

View File

@ -27,30 +27,26 @@
-- $FreeBSD$ -- $FreeBSD$
-- --
local drawer = require("drawer") return {
logo = {
local orb_color = { graphic = {
" \027[31m``` \027[31;1m`\027[31m", " \027[31m``` \027[31;1m`\027[31m",
" s` `.....---...\027[31;1m....--.``` -/\027[31m", " s` `.....---...\027[31;1m....--.``` -/\027[31m",
" +o .--` \027[31;1m/y:` +.\027[31m", " +o .--` \027[31;1m/y:` +.\027[31m",
" yo`:. \027[31;1m:o `+-\027[31m", " yo`:. \027[31;1m:o `+-\027[31m",
" y/ \027[31;1m-/` -o/\027[31m", " y/ \027[31;1m-/` -o/\027[31m",
" .- \027[31;1m::/sy+:.\027[31m", " .- \027[31;1m::/sy+:.\027[31m",
" / \027[31;1m`-- /\027[31m", " / \027[31;1m`-- /\027[31m",
" `: \027[31;1m:`\027[31m", " `: \027[31;1m:`\027[31m",
" `: \027[31;1m:`\027[31m", " `: \027[31;1m:`\027[31m",
" / \027[31;1m/\027[31m", " / \027[31;1m/\027[31m",
" .- \027[31;1m-.\027[31m", " .- \027[31;1m-.\027[31m",
" -- \027[31;1m-.\027[31m", " -- \027[31;1m-.\027[31m",
" `:` \027[31;1m`:`", " `:` \027[31;1m`:`",
" \027[31;1m.-- `--.", " \027[31;1m.-- `--.",
" .---.....----.\027[m" " .---.....----.\027[m",
},
requires_color = true,
shift = {x = 2, y = 4},
}
} }
drawer.addLogo("orb", {
requires_color = true,
graphic = orb_color,
shift = {x = 2, y = 4},
})
return true

View File

@ -27,29 +27,25 @@
-- $FreeBSD$ -- $FreeBSD$
-- --
local drawer = require("drawer") return {
logo = {
local orbbw = { graphic = {
" ``` `", " ``` `",
" s` `.....---.......--.``` -/", " s` `.....---.......--.``` -/",
" +o .--` /y:` +.", " +o .--` /y:` +.",
" yo`:. :o `+-", " yo`:. :o `+-",
" y/ -/` -o/", " y/ -/` -o/",
" .- ::/sy+:.", " .- ::/sy+:.",
" / `-- /", " / `-- /",
" `: :`", " `: :`",
" `: :`", " `: :`",
" / /", " / /",
" .- -.", " .- -.",
" -- -.", " -- -.",
" `:` `:`", " `:` `:`",
" .-- `--.", " .-- `--.",
" .---.....----." " .---.....----.",
},
shift = {x = 2, y = 4},
}
} }
drawer.addLogo("orbbw", {
graphic = orbbw,
shift = {x = 2, y = 4},
})
return true