Add code
This commit is contained in:
parent
58106ec5b8
commit
96461a9929
1 changed files with 168 additions and 0 deletions
168
bios.lua
Normal file
168
bios.lua
Normal file
|
@ -0,0 +1,168 @@
|
|||
term.clear()
|
||||
term.setBackgroundColour(32768)
|
||||
term.setTextColor(1)
|
||||
term.setCursorPos(1,1)
|
||||
|
||||
_G._FEATHER_VERSION = "0.1.0"
|
||||
|
||||
function write(out)
|
||||
bx,by = term.getSize()
|
||||
cx,cy = term.getCursorPos()
|
||||
i = 1
|
||||
l = string.len(out) + 1
|
||||
|
||||
local function lnbreak()
|
||||
cx,cy = term.getCursorPos()
|
||||
term.setCursorPos(1, cy + 1)
|
||||
end
|
||||
|
||||
while l > i do
|
||||
if string.char(string.byte(out, i)) .. string.char(string.byte(out, i + 1)) == "\n" then
|
||||
lnbreak()
|
||||
i = i + 1
|
||||
else
|
||||
term.write(string.char(string.byte(out, i)))
|
||||
end
|
||||
cx,cy = term.getCursorPos()
|
||||
|
||||
if cx > bx then
|
||||
lnbreak()
|
||||
cx,cy = term.getCursorPos()
|
||||
end
|
||||
|
||||
if cy > by then
|
||||
term.scroll(1)
|
||||
term.setCursorPos(1, by)
|
||||
cx,cy = term.getCursorPos()
|
||||
end
|
||||
|
||||
i = i + 1
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
function print(out)
|
||||
write(out .. "\n")
|
||||
return
|
||||
end
|
||||
|
||||
print("FeatherBIOS " .. _G._FEATHER_VERSION)
|
||||
print("LDR: print now available")
|
||||
|
||||
-- Before you ask why I don't implement os.pullEventRaw
|
||||
-- that is because it literally is just an alias to
|
||||
-- coroutine.yield even in the official BIOS.
|
||||
--
|
||||
-- Hence just use coroutine.yield(filter) as it will function
|
||||
-- identically to os.pullEventRaw(filter). os.pullEvent
|
||||
-- is implemented here basically the same way.
|
||||
|
||||
function totab(...)
|
||||
local x = {}
|
||||
for i,v in ipairs(arg) do
|
||||
table.insert(x,v)
|
||||
end
|
||||
return x
|
||||
end
|
||||
|
||||
function os.pullEvent(filter)
|
||||
local data = totab(coroutine.yield(filter))
|
||||
if data[1] == "terminate" then
|
||||
error("Terminated")
|
||||
end
|
||||
return data
|
||||
end
|
||||
|
||||
print("LDR: os.pullEvent now available")
|
||||
|
||||
function read()
|
||||
local x = ""
|
||||
local done = false
|
||||
while not done do
|
||||
local data = os.pullEvent()
|
||||
if data[1] == "char" then
|
||||
write(data[2])
|
||||
x = x .. data[2]
|
||||
elseif data[1] == "key" then
|
||||
if data[2] == 28 then -- Enter key
|
||||
done = true
|
||||
write("\n")
|
||||
elseif data[2] == 14 and #x ~= 0 then -- Backspace key
|
||||
cx,cy = term.getCursorPos()
|
||||
bx,by = term.getSize()
|
||||
if cx == 1 then
|
||||
term.setCursorPos(bx, cy - 1)
|
||||
else
|
||||
term.setCursorPos(cx - 1, cy)
|
||||
end
|
||||
write(" ")
|
||||
if cx == 1 then
|
||||
term.setCursorPos(bx, cy - 1)
|
||||
else
|
||||
term.setCursorPos(cx - 1, cy)
|
||||
end
|
||||
x = x:sub(1, -2)
|
||||
elseif data[2] == 15 then -- Tab key
|
||||
write(" ")
|
||||
x = x .. " "
|
||||
end
|
||||
end
|
||||
end
|
||||
return x
|
||||
end
|
||||
|
||||
print("LDR: read now available")
|
||||
|
||||
-- Backport Lua 5.2/5.3 features to Lua 5.1
|
||||
if _VERSION == "Lua 5.1" then
|
||||
local nload = load
|
||||
local nloadstring = loadstring
|
||||
function load(inp, chunkname, env)
|
||||
if type(inp) == "function" then
|
||||
local func, err = nload(inp, chunkname)
|
||||
if func then
|
||||
if env then
|
||||
env._ENV = env
|
||||
setfenv(func, env)
|
||||
end
|
||||
return func
|
||||
else
|
||||
return nil, err
|
||||
end
|
||||
elseif type(inp) == "string" then
|
||||
local func, err = nloadstring(inp, chunkname)
|
||||
if func then
|
||||
if env then
|
||||
env._ENV = env
|
||||
setfenv(func, env)
|
||||
end
|
||||
return func
|
||||
else
|
||||
return nil, err
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function loadfile(filename, env)
|
||||
local file = fs.open(filename, "r")
|
||||
if not file then return nil end
|
||||
|
||||
local func, err = load(file.readAll(), "@" .. filename, env)
|
||||
file.close()
|
||||
return func, err
|
||||
end
|
||||
|
||||
function dofile(filename)
|
||||
local file, e = loadfile(filename, _G)
|
||||
if file then
|
||||
return file()
|
||||
else
|
||||
error(e)
|
||||
end
|
||||
end
|
||||
|
||||
print("LDR: dofile now available")
|
||||
|
||||
print("LDR: Booting...")
|
||||
dofile("/boot.lua")
|
Loading…
Reference in a new issue