Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- called from /init.lua
- local raw_loadfile = ...
- _G._OSVERSION = "DevilPuppyOS <3"
- local component = component
- local computer = computer
- local unicode = unicode
- local process = process
- local loading = 1
- -- Runlevel information.
- local runlevel, shutdown = "S", computer.shutdown
- computer.runlevel = function() return runlevel end
- computer.shutdown = function(reboot)
- runlevel = reboot and 6 or 0
- if os.sleep then
- computer.pushSignal("shutdown")
- os.sleep(0.1) -- Allow shutdown processing.
- end
- shutdown(reboot)
- end
- local screen = component.list('screen', true)()
- for address in component.list('screen', true) do
- if #component.invoke(address, 'getKeyboards') > 0 then
- screen = address
- break
- end
- end
- _G.boot_screen = screen
- -- Report boot progress if possible.
- local gpu = component.list("gpu", true)()
- local w, h
- if gpu and screen then
- component.invoke(gpu, "bind", screen)
- w, h = component.invoke(gpu, "maxResolution")
- component.invoke(gpu, "setResolution", w, h)
- component.invoke(gpu, "setBackground", 0xbdbdbd)
- component.invoke(gpu, "setForeground", 0x474747)
- component.invoke(gpu, "fill", 1, 1, w, h, " ")
- end
- local y = 1
- local function memory()
- free = computer.freeMemory()
- total = computer.totalMemory()
- mad = "RAM: " .. free/1000 .. "kb/" .. total/1000 .. "kb"
- component.invoke(gpu, "set", w-string.len(mad),1,mad)
- end
- local function status(msg)
- memory()
- if gpu and screen then
- component.invoke(gpu, "setBackground", 0xbdbdbd)
- component.invoke(gpu, "fill", 1, h/2+2, w, 1, " ")
- component.invoke(gpu, "setBackground", 0x757575)
- component.invoke(gpu, "fill", w/2-25, h/2, loading, 1, " ")
- component.invoke(gpu, "setBackground", 0xbdbdbd)
- component.invoke(gpu, "setForeground", 0x474747)
- component.invoke(gpu, "set", w/2-math.floor(string.len(msg)/2), h/2+2, msg)
- if y == h then
- -- component.invoke(gpu, "copy", 1, 2, w, h - 1, 0, -1)
- -- component.invoke(gpu, "fill", 1, h, w, 1, " ")
- else
- y = y + 1
- end
- end
- memory()
- end
- loading = 5
- status("Запускаем " .. _OSVERSION)
- -- Custom low-level dofile implementation reading from our ROM.
- local loadfile = function(file)
- loading = loading + 1
- status("Загружаю >" .. file .. "...")
- return raw_loadfile(file)
- end
- local function dofile(file)
- local program, reason = 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("Инициализация пакетных менеджеров...")
- -- Load file system related libraries we need to load other stuff moree
- -- comfortably. This is basically wrapper stuff for the file streams
- -- provided by the filesystem components.
- local package = dofile("/lib/package.lua")
- do
- -- Unclutter global namespace now that we have the package module and a filesystem
- _G.component = nil
- _G.computer = nil
- _G.process = nil
- _G.unicode = nil
- _G.process = nil
- -- Inject the package modules into the global namespace, as in Lua.
- _G.package = package
- -- Initialize the package module with some of our own APIs.
- package.loaded.component = component
- package.loaded.computer = computer
- package.loaded.unicode = unicode
- package.loaded.process = process
- package.preload["buffer"] = loadfile("/lib/buffer.lua")
- package.preload["filesystem"] = loadfile("/lib/filesystem.lua")
- -- Inject the io modules
- _G.io = loadfile("/lib/io.lua")()
- --mark modules for delay loaded api
- package.delayed["text"] = true
- package.delayed["sh"] = true
- package.delayed["transforms"] = true
- package.delayed["term"] = true
- end
- status("Запуск файловой системы...")
- -- Mount the ROM and temporary file systems to allow working on the file
- -- system module from this point on.
- require("filesystem").mount(computer.getBootAddress(), "/")
- package.preload={}
- status("Запуск скриптов загрузки...")
- -- Run library startup scripts. These mostly initialize event handlers.
- 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("Инициализация компонентов....")
- for c, t in component.list() do
- loading = loading + 1
- computer.pushSignal("component_added", c, t)
- end
- loading = 45
- status(" Инициализация системы...")
- loading = 50
- --process.load("/lib/tools/auto.lua")
- computer.pushSignal("init") -- so libs know components are initialized.
- require("event").pull(1, "init") -- Allow init processing.
- _G.runlevel = 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement