local colors = _G.colors local os = _G.os local settings = _G.settings local term = _G.term local bootOptions = { { prompt = os.version() }, { prompt = 'Opus' , args = { '/sys/boot/opus.boot' } }, { prompt = 'Opus Shell' , args = { '/sys/boot/opus.boot', 'sys/apps/shell' } }, } local bootOption = 2 if settings then settings.load('.settings') bootOption = tonumber(settings.get('opus.boot_option') or 2) or 2 end 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('> ') local ch = tonumber(_G.read()) if ch and bootOptions[ch] then return ch end end 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) end term.clear() splash() local timerId = os.startTimer(1.5) while true do local e, id = os.pullEvent() if e == 'timer' and id == timerId then break end if e == 'char' then bootOption = startupMenu() if settings then settings.set('opus.boot_option', bootOption) settings.save('.settings') end break end end 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