local raw_loadfile=... _G._OSVERSION="OpenOS 1.8.10" local component=component local computer=computer local unicode=unicode _G.runlevel="S" local shutdown=computer.shutdown computer.runlevel=function()return _G.runlevel end computer.shutdown=function(reboot) _G.runlevel=reboot and 6 or 0 if os.sleep then computer.pushSignal("shutdown") os.sleep(0.1) end shutdown(reboot) end local w,h local screen=component.list("screen",true)() local gpu=screen and component.list("gpu",true)() if gpu then gpu=component.proxy(gpu) if not gpu.getScreen()then gpu.bind(screen) end _G.boot_screen=gpu.getScreen() w,h=gpu.maxResolution() gpu.setResolution(w,h) gpu.setBackground(0x000000) gpu.setForeground(0xFFFFFF) gpu.fill(1,1,w,h," ") end local y=1 local uptime=computer.uptime local pull=computer.pullSignal local last_sleep=uptime() local function status(msg) if gpu then gpu.set(1,y,msg) if y==h then gpu.copy(1,2,w,h-1,0,-1) gpu.fill(1,h,w,1," ") else y=y+1 end end if uptime()-last_sleep>1 then local signal=table.pack(pull(0)) if signal.n>0 then computer.pushSignal(table.unpack(signal,1,signal.n)) end last_sleep=uptime() end end status("Booting ".._OSVERSION.."...") local function dofile(file) status("> "..file) local program,reason=raw_loadfile(file) if program then local result=table.pack(pcall(program)) if result[1]then return table.unpack(result,2,result.n) else error(result[2]) end else error(reason) end end status("Initializing package management...") local package=dofile("/lib/package.lua") do _G.component=nil _G.computer=nil _G.process=nil _G.unicode=nil _G.package=package package.loaded.component=component package.loaded.computer=computer package.loaded.unicode=unicode package.loaded.buffer=dofile("/lib/buffer.lua") package.loaded.filesystem=dofile("/lib/filesystem.lua") _G.io=dofile("/lib/io.lua") end status("Initializing file system...") require("filesystem").mount(computer.getBootAddress(),"/") status("Running boot scripts...") local function rom_invoke(method,...) return component.invoke(computer.getBootAddress(),method,...) end local scripts={} for _,file in ipairs(rom_invoke("list","boot"))do local path="boot/"..file if not rom_invoke("isDirectory",path)then table.insert(scripts,path) end end table.sort(scripts) for i=1,#scripts do dofile(scripts[i]) end status("Initializing components...") for c,t in component.list()do computer.pushSignal("component_added",c,t) end status("Initializing system...") computer.pushSignal("init") require("event").pull(1,"init") _G.runlevel=1