2018-01-20 12:18:13 +00:00
|
|
|
local colors = _G.colors
|
|
|
|
local os = _G.os
|
|
|
|
local settings = _G.settings
|
|
|
|
local term = _G.term
|
|
|
|
|
2016-12-11 19:24:52 +00:00
|
|
|
local bootOptions = {
|
2018-01-20 12:18:13 +00:00
|
|
|
{ prompt = os.version() },
|
|
|
|
{ prompt = 'Opus' , args = { '/sys/boot/opus.boot' } },
|
|
|
|
{ prompt = 'Opus Shell' , args = { '/sys/boot/opus.boot', 'sys/apps/shell' } },
|
2016-12-11 19:24:52 +00:00
|
|
|
}
|
|
|
|
local bootOption = 2
|
2018-01-20 12:18:13 +00:00
|
|
|
if settings then
|
|
|
|
settings.load('.settings')
|
|
|
|
bootOption = tonumber(settings.get('opus.boot_option') or 2) or 2
|
|
|
|
end
|
2016-12-11 19:24:52 +00:00
|
|
|
|
|
|
|
local function startupMenu()
|
|
|
|
while true do
|
|
|
|
term.clear()
|
|
|
|
term.setCursorPos(1, 1)
|
|
|
|
print('Select startup mode')
|
|
|
|
print()
|
|
|
|
for k,option in pairs(bootOptions) do
|
|
|
|
print(k .. ' : ' .. option.prompt)
|
|
|
|
end
|
|
|
|
print('')
|
|
|
|
term.write('> ')
|
2018-01-20 12:18:13 +00:00
|
|
|
local ch = tonumber(_G.read())
|
2016-12-11 19:24:52 +00:00
|
|
|
if ch and bootOptions[ch] then
|
|
|
|
return ch
|
|
|
|
end
|
|
|
|
end
|
2018-01-20 12:18:13 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
local function splash()
|
|
|
|
local w, h = term.current().getSize()
|
|
|
|
|
|
|
|
term.setTextColor(colors.white)
|
|
|
|
if not term.isColor() then
|
|
|
|
local str = 'Opus OS'
|
|
|
|
term.setCursorPos((w - #str) / 2, h / 2)
|
|
|
|
term.write(str)
|
|
|
|
else
|
|
|
|
term.setBackgroundColor(colors.black)
|
|
|
|
term.clear()
|
|
|
|
local opus = {
|
|
|
|
'fffff00',
|
|
|
|
'ffff07000',
|
|
|
|
'ff00770b00 4444',
|
|
|
|
'ff077777444444444',
|
|
|
|
'f07777744444444444',
|
|
|
|
'f0000777444444444',
|
|
|
|
'070000111744444',
|
|
|
|
'777770000',
|
|
|
|
'7777000000',
|
|
|
|
'70700000000',
|
|
|
|
'077000000000',
|
|
|
|
}
|
|
|
|
for k,line in ipairs(opus) do
|
|
|
|
term.setCursorPos((w - 18) / 2, k + (h - #opus) / 2)
|
|
|
|
term.blit(string.rep(' ', #line), string.rep('a', #line), line)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
local str = 'Press any key for menu'
|
|
|
|
term.setCursorPos((w - #str) / 2, h)
|
|
|
|
term.write(str)
|
2016-12-11 19:24:52 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
term.clear()
|
2018-01-20 12:18:13 +00:00
|
|
|
splash()
|
|
|
|
|
2017-09-04 21:41:46 +00:00
|
|
|
local timerId = os.startTimer(1.5)
|
2016-12-11 19:24:52 +00:00
|
|
|
while true do
|
|
|
|
local e, id = os.pullEvent()
|
|
|
|
if e == 'timer' and id == timerId then
|
|
|
|
break
|
|
|
|
end
|
|
|
|
if e == 'char' then
|
|
|
|
bootOption = startupMenu()
|
2018-01-20 12:18:13 +00:00
|
|
|
if settings then
|
|
|
|
settings.set('opus.boot_option', bootOption)
|
|
|
|
settings.save('.settings')
|
|
|
|
end
|
2016-12-11 19:24:52 +00:00
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-01-20 12:18:13 +00:00
|
|
|
term.clear()
|
|
|
|
term.setCursorPos(1, 1)
|
|
|
|
if bootOptions[bootOption].args then
|
|
|
|
os.run(_G.getfenv(1), table.unpack(bootOptions[bootOption].args))
|
|
|
|
else
|
|
|
|
print(bootOptions[bootOption].prompt)
|
|
|
|
end
|