wew
This commit is contained in:
parent
ddd85bdfb1
commit
7bd0c23ee9
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
*.velx
|
||||||
|
/.doc
|
||||||
|
.ktmp
|
||||||
|
debug.lua
|
30
build.lua
30
build.lua
@ -159,9 +159,23 @@ local velx_spec = struct {
|
|||||||
|
|
||||||
-- This builds Tsuki into a VELX executable.
|
-- This builds Tsuki into a VELX executable.
|
||||||
print("Compiling kernel...")
|
print("Compiling kernel...")
|
||||||
local h = io.popen("luacomp ksrc/init.lua")
|
local h = io.popen("luacomp ksrc/init.lua", "r")
|
||||||
|
os.execute("luacomp ksrc/init.lua -O debug.lua")
|
||||||
|
local krnl = h:read("*a")
|
||||||
|
h:close()
|
||||||
|
print("Generating docs and stripping comments...")
|
||||||
|
os.execute("mkdir .docs")
|
||||||
|
h = io.popen("lua utils/gendocs.lua .docs 2>.ktmp", "w")
|
||||||
|
h:write(krnl)
|
||||||
|
h:close()
|
||||||
|
h = io.popen("find .docs -depth | tsar -o", "r")
|
||||||
|
local arc = h:read("*a")
|
||||||
|
h:close()
|
||||||
|
h = io.open(".ktmp", "rb")
|
||||||
|
local data = h:read("*a")
|
||||||
|
h:close()
|
||||||
print("Compressing kernel...")
|
print("Compressing kernel...")
|
||||||
local data = M.compress(h:read("*a"))
|
data = M.compress(data)
|
||||||
print("Writing out tkrnl.velx...")
|
print("Writing out tkrnl.velx...")
|
||||||
local h = io.open("tkrnl.velx", "wb")
|
local h = io.open("tkrnl.velx", "wb")
|
||||||
local header = velx_spec({
|
local header = velx_spec({
|
||||||
@ -169,13 +183,17 @@ local header = velx_spec({
|
|||||||
compression = 1,
|
compression = 1,
|
||||||
lver = 0x53,
|
lver = 0x53,
|
||||||
fver = 1,
|
fver = 1,
|
||||||
os = 0xFF,
|
os = 0x7F,
|
||||||
psize = #data,
|
psize = #data,
|
||||||
lsize=0,
|
lsize=0,
|
||||||
ssize=0,
|
ssize=0,
|
||||||
rsize=0
|
rsize=#arc
|
||||||
})
|
})
|
||||||
|
|
||||||
h:write(header)
|
h:write(header)
|
||||||
h:write(data)
|
h:write(data)
|
||||||
h:close()
|
h:write(arc)
|
||||||
|
h:close()
|
||||||
|
print("Cleaning up...")
|
||||||
|
os.execute("rm -rf .docs")
|
||||||
|
os.execute("rm -rf .ktmp")
|
||||||
|
print("Build complete.")
|
@ -1,6 +1,6 @@
|
|||||||
---@method "Zorya 1.x (Zorya Legacy)"
|
---@page zorya_legacy "Zorya 1.x (Zorya Legacy)"
|
||||||
--[[--
|
---@doc "Zorya 1.x puts a few things in the global space that need to be removed. These include:"
|
||||||
Zorya 1.x puts a few things in the global space that need to be removed. These include:
|
---@doc "- The OEFI library"
|
||||||
- The OEFI library
|
---@doc "- The Zorya library"
|
||||||
- The Zorya library
|
---@doc ""
|
||||||
]]
|
---@doc "Note: This *should* also apply to any forks of Zorya Legacy."
|
@ -1,4 +1,2 @@
|
|||||||
---@method "Zorya NEO (Zorya 2.0)"
|
---@page zorya_neo "Zorya NEO (Zorya 2.0)"
|
||||||
--[[--
|
---@doc "There's not much to be done for Zorya NEO as the included Zorya module starts Tsuki with a nice enviroment."
|
||||||
There's not much to be done for Zorya NEO as the included Zorya module starts Tsuki with a nice enviroment.
|
|
||||||
]]
|
|
@ -1,4 +1,4 @@
|
|||||||
---@module "BIOS fixes"
|
---@section biosfixes "BIOS fixes"
|
||||||
|
|
||||||
local _biossupport = {}
|
local _biossupport = {}
|
||||||
@[[function biosfix(bios)]]
|
@[[function biosfix(bios)]]
|
||||||
|
0
ksrc/lupi2.lua
Normal file
0
ksrc/lupi2.lua
Normal file
@ -1,9 +1,15 @@
|
|||||||
|
---@module security Security
|
||||||
local security = {}
|
local security = {}
|
||||||
|
|
||||||
|
---@func checkacl
|
||||||
|
---@arg permission string "The permission to check."
|
||||||
|
---@return boolean "True if the current process has this permission."
|
||||||
function security.checkacl(permission)
|
function security.checkacl(permission)
|
||||||
local perms = acl.get("group", thread.info().egid, {})
|
local perms = acl.get("group", thread.info().egid, {})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@func getmode
|
||||||
|
---@return string "The current security mode."
|
||||||
function security.getmode()
|
function security.getmode()
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -11,4 +17,4 @@ end
|
|||||||
function security.init()
|
function security.init()
|
||||||
klog("security", 1, "Security init started.")
|
klog("security", 1, "Security init started.")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -2,4 +2,7 @@ function _P.load(...)
|
|||||||
if (security.checkacl("unsigned_code")) then
|
if (security.checkacl("unsigned_code")) then
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--#include "ksrc/stdlib/string.lua"
|
||||||
|
--#include "ksrc/stdlib/thread.lua"
|
11
ksrc/stdlib/string.lua
Normal file
11
ksrc/stdlib/string.lua
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
_P.string = {}
|
||||||
|
@[[function copylib(method)]]
|
||||||
|
_P.string.@[{method}] = string.@[{method}]
|
||||||
|
@[[end]]
|
||||||
|
|
||||||
|
@[[for k, v in pairs(string) do
|
||||||
|
copylib(k)
|
||||||
|
end]]
|
||||||
|
@[[copylib("trim")]]
|
||||||
|
@[[copylib("explode")]]
|
||||||
|
@[[copylib = nil]]
|
9
ksrc/stdlib/table.lua
Normal file
9
ksrc/stdlib/table.lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
_P.table = {}
|
||||||
|
@[[function copylib(method)]]
|
||||||
|
_P.table.@[{method}] = table.@[{method}]
|
||||||
|
@[[end]]
|
||||||
|
|
||||||
|
@[[for k, v in pairs(table) do
|
||||||
|
copylib(k)
|
||||||
|
end]]
|
||||||
|
@[[copylib = nil]]
|
BIN
tkrnl.velx
BIN
tkrnl.velx
Binary file not shown.
248
utils/gendocs.lua
Normal file
248
utils/gendocs.lua
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
local outdir = arg[1]
|
||||||
|
|
||||||
|
function string.trim(self)
|
||||||
|
return self:gsub("^%s+", ""):gsub("%s+$", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
local escapes = {
|
||||||
|
["\\"] = "\\",
|
||||||
|
["n"] = "\n",
|
||||||
|
["t"] = "\t",
|
||||||
|
["r"] = "\r"
|
||||||
|
}
|
||||||
|
local docs = {}
|
||||||
|
local cdoc
|
||||||
|
local cfunc
|
||||||
|
local function parse_string(str, close, noesc)
|
||||||
|
local s = ""
|
||||||
|
local esc = false
|
||||||
|
repeat
|
||||||
|
local c = str.read()
|
||||||
|
if not esc then
|
||||||
|
if (c ~= "\\" or noesc) then
|
||||||
|
s = s .. c
|
||||||
|
else
|
||||||
|
esc = true
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if (escapes[c]) then
|
||||||
|
s = s .. escapes[c]
|
||||||
|
else
|
||||||
|
return nil, "invalid escape"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
until str.peek(#close) == close or str.peek(#close) == ""
|
||||||
|
str.seek(#close)
|
||||||
|
return s
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parse_dec(str)
|
||||||
|
local num = ""
|
||||||
|
repeat
|
||||||
|
num = num .. str.read()
|
||||||
|
until not str.peek():match("%d") or str.peek() == ""
|
||||||
|
return tonumber(num, 10)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parse_hex(str)
|
||||||
|
if not str.peek():match("%x") then
|
||||||
|
return nil, "malformed hex"
|
||||||
|
end
|
||||||
|
local num = ""
|
||||||
|
repeat
|
||||||
|
num = num .. str.read()
|
||||||
|
until not str.peek():match("%x") or str.peek() == ""
|
||||||
|
return tonumber(num, 16)
|
||||||
|
end
|
||||||
|
local ln = 0
|
||||||
|
local function parse_line(line)
|
||||||
|
local args = {}
|
||||||
|
local idx = 1
|
||||||
|
local str = {
|
||||||
|
peek = function(amt)
|
||||||
|
amt = amt or 1
|
||||||
|
return line:sub(idx, idx+amt-1)
|
||||||
|
end,
|
||||||
|
read = function(amt)
|
||||||
|
amt = amt or 1
|
||||||
|
local data = line:sub(idx, idx+amt-1)
|
||||||
|
idx = idx + amt
|
||||||
|
return data
|
||||||
|
end,
|
||||||
|
seek = function(amt)
|
||||||
|
amt = amt or 0
|
||||||
|
idx = idx + amt
|
||||||
|
return idx
|
||||||
|
end
|
||||||
|
}
|
||||||
|
local function lassert(a, b)
|
||||||
|
return assert(a, "line #"..ln..": "..(b or "unknown error"))
|
||||||
|
end
|
||||||
|
while str.peek() ~= "" do
|
||||||
|
if (str.peek() == "\"") then
|
||||||
|
str.seek(1)
|
||||||
|
args[#args+1] = lassert(parse_string(str, "\"", false))
|
||||||
|
elseif (str.peek(2) == "0x") then
|
||||||
|
str.seek(2)
|
||||||
|
args[#args+1] = lassert(parse_hex(str))
|
||||||
|
elseif (str.peek(1):match("%d")) then
|
||||||
|
args[#args+1] = lassert(parse_dec(str))
|
||||||
|
elseif (str.peek() == "'") then
|
||||||
|
str.seek(1)
|
||||||
|
args[#args+1] = lassert(parse_string(str, "'", false))
|
||||||
|
elseif (str.peek() == " ") then
|
||||||
|
--do nothing
|
||||||
|
else
|
||||||
|
args[#args+1] = lassert(parse_string(str, " ", true))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return args
|
||||||
|
end
|
||||||
|
local function is_comment(line)
|
||||||
|
if (line:trim():sub(1, 2) == "--") then
|
||||||
|
return true, line:sub(3)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for line in io.stdin:lines() do
|
||||||
|
ln = ln+1
|
||||||
|
local com, rline = is_comment(line)
|
||||||
|
if (com) then
|
||||||
|
if (rline:match("^%-@module")) then
|
||||||
|
local args = parse_line(rline:sub(10))
|
||||||
|
if (cdoc) then
|
||||||
|
if (cfunc) then
|
||||||
|
cdoc.methods[#cdoc.methods+1] = cfunc
|
||||||
|
end
|
||||||
|
docs[#docs+1] = cdoc
|
||||||
|
end
|
||||||
|
cdoc = {
|
||||||
|
type = "module",
|
||||||
|
methods = {},
|
||||||
|
name = args[2],
|
||||||
|
mod = args[1]
|
||||||
|
}
|
||||||
|
elseif (rline:match("^%-@section")) then
|
||||||
|
local args = parse_line(rline:sub(11))
|
||||||
|
if (cdoc) then
|
||||||
|
if (cfunc) then
|
||||||
|
cdoc.methods[#cdoc.methods+1] = cfunc
|
||||||
|
end
|
||||||
|
docs[#docs+1] = cdoc
|
||||||
|
end
|
||||||
|
cdoc = {
|
||||||
|
type = "generic",
|
||||||
|
methods = {},
|
||||||
|
name = args[2],
|
||||||
|
mod = args[1]
|
||||||
|
}
|
||||||
|
elseif (rline:match("^%-@page")) then
|
||||||
|
if (cfunc) then
|
||||||
|
cdoc.methods[#cdoc.methods+1] = cfunc
|
||||||
|
end
|
||||||
|
local args = parse_line(rline:sub(8))
|
||||||
|
cfunc = {
|
||||||
|
type = "page",
|
||||||
|
doc = {},
|
||||||
|
name = args[1],
|
||||||
|
print_name = args[2]
|
||||||
|
}
|
||||||
|
elseif (rline:match("^%-@arg") and cfunc.type == "func") then
|
||||||
|
local args = parse_line(rline:sub(7))
|
||||||
|
cfunc.args[#cfunc.args+1] = {
|
||||||
|
name = args[1],
|
||||||
|
type = args[2],
|
||||||
|
doc = args[3]
|
||||||
|
}
|
||||||
|
elseif (rline:match("^%-@return") and cfunc.type == "func") then
|
||||||
|
local args = parse_line(rline:sub(10))
|
||||||
|
cfunc.ret[#cfunc.args+1] = {
|
||||||
|
type = args[1],
|
||||||
|
doc = args[2],
|
||||||
|
}
|
||||||
|
elseif (rline:match("^%-@doc")) then
|
||||||
|
local args = parse_line(rline:sub(7))
|
||||||
|
cfunc.doc[#cfunc.doc+1] = {
|
||||||
|
doc = args[1],
|
||||||
|
}
|
||||||
|
elseif (rline:match("^%-@see")) then
|
||||||
|
local args = parse_line(rline:sub(7))
|
||||||
|
cfunc.doc[#cfunc.doc+1] = {
|
||||||
|
doc = "See \27_S"..arg[2].."\27_E"
|
||||||
|
}
|
||||||
|
elseif (rline:match("^%-@vararg")) then
|
||||||
|
cfunc.vararg = true
|
||||||
|
elseif (rline:match("^%-@varret")) then
|
||||||
|
cfunc.varret = true
|
||||||
|
elseif (rline:match("^%-@func")) then
|
||||||
|
if (cfunc) then
|
||||||
|
cdoc.methods[#cdoc.methods+1] = cfunc
|
||||||
|
end
|
||||||
|
local args = parse_line(rline:sub(8))
|
||||||
|
cfunc = {
|
||||||
|
type = "func",
|
||||||
|
doc = {},
|
||||||
|
name = args[1],
|
||||||
|
ret = {},
|
||||||
|
args = {}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
io.stderr:write(line.."\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if (cfunc) then
|
||||||
|
cdoc.methods[#cdoc.methods+1] = cfunc
|
||||||
|
end
|
||||||
|
if (cdoc) then
|
||||||
|
docs[#docs+1] = cdoc
|
||||||
|
end
|
||||||
|
for i=1, #docs do
|
||||||
|
os.execute("mkdir -p \""..outdir.."/"..docs[i].mod:trim().."\"")
|
||||||
|
for j=1, #docs[i].methods do
|
||||||
|
local docc = ""
|
||||||
|
local f = io.open(outdir.."/"..docs[i].mod:trim().."/"..docs[i].methods[j].name:trim()..".tdf", "wb")
|
||||||
|
if (docs[i].methods[j].type == "func") then
|
||||||
|
local argtext = ""
|
||||||
|
local fun = docs[i].mod.."."..docs[i].methods[j].name.."("
|
||||||
|
if (#docs[i].methods[j].args > 0) then
|
||||||
|
for k=1, #docs[i].methods[j].args do
|
||||||
|
fun = fun .. docs[i].methods[j].args[k].name..":"..docs[i].methods[j].args[k].type .. ", "
|
||||||
|
argtext = argtext .. docs[i].methods[j].args[k].name .. " - " .. docs[i].methods[j].args[k].doc .. "\n"
|
||||||
|
end
|
||||||
|
if (docs[i].methods[j].vararg) then
|
||||||
|
fun = fun .. "..."
|
||||||
|
else
|
||||||
|
fun = fun:sub(1, #fun-2)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
argtext = "No arguments"
|
||||||
|
end
|
||||||
|
fun = fun .. ")"
|
||||||
|
|
||||||
|
local rettext = ""
|
||||||
|
if (#docs[i].methods[j].ret > 0) then
|
||||||
|
fun = fun .. ":"
|
||||||
|
for k=1, #docs[i].methods[j].ret do
|
||||||
|
fun = fun .. docs[i].methods[j].ret[k].type .. ", "
|
||||||
|
rettext = rettext .. docs[i].methods[j].ret[k].type .. " - " .. docs[i].methods[j].ret[k].doc .. "\n"
|
||||||
|
end
|
||||||
|
if (docs[i].methods[j].varret) then
|
||||||
|
fun = fun .. "..."
|
||||||
|
else
|
||||||
|
fun = fun:sub(1, #fun-2)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
rettext = "No return."
|
||||||
|
end
|
||||||
|
docc = docc .. fun .. "\n\nArguments:\n"..argtext.."\n\nReturns:\n"..rettext
|
||||||
|
else
|
||||||
|
docc = docc .. docs[i].methods[j].print_name .. "\n\n"
|
||||||
|
end
|
||||||
|
for k=1, #docs[i].methods[j].doc do
|
||||||
|
docc = docc..docs[i].methods[j].doc[k].doc .. "\n"
|
||||||
|
end
|
||||||
|
f:write(docc)
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user