Files
HyperionOS/Src/Hyperion-kernel/lib/modules/Hyperion/12_devfs.kmod
2026-01-29 20:29:06 -05:00

173 lines
4.3 KiB
Plaintext

--:Minify:--
--local kernel = ...
--
--local proxy = {}
--local data = {}
--
--proxy.address = "devfs0000"
--proxy.isReadOnly = false
--proxy.spaceUsed = function() return 0 end
--proxy.spaceTotal = function() return 0 end
--proxy.makeDirectory = function() error("Permission denied") end
--proxy.remove = function() error("Permission denied") end
--proxy.setLabel = function() error("Permission denied") end
--proxy.getLabel = function() return "devfs" end
--proxy.attributes = function(path) return {
-- type = proxy.type(path),
-- isReadOnly = false,
-- size = 0,
-- lastModified = 0,
-- created = 0,
-- Permissions = "666",
-- owner = "root",
-- group = "root"
--} end
--
--local function getNode(path)
-- local parts = string.split(path, "/")
-- if parts[1] == "" then
-- table.remove(parts, 1)
-- end
--
-- local node = data
-- for _, part in ipairs(parts) do
-- if node[part] then
-- node = node[part]
-- else
-- return nil
-- end
-- end
--
-- return node
--end
--
--proxy.type = function(path)
-- local node = getNode(path)
-- if node then
-- return node.type
-- else
-- return nil
-- end
--end
--
--proxy.list = function(path)
-- local node = getNode(path)
-- if node and node.type == "directory" then
-- local content = table.keys(node)
-- table.remove(content, table.indexOf(content, "type"))
-- return content
-- else
-- error("Not a directory")
-- end
--end
--
--proxy.open = function(path, mode)
-- local node = getNode(path)
-- if node and (node.type == "file" or node.type == "character device") then
-- if mode == "r" then
-- return {
-- read = node.read,
-- close = function() end
-- }
-- elseif mode == "w" then
-- return {
-- write = node.write,
-- close = function() end
-- }
-- else
-- error("Invalid mode")
-- end
-- else
-- error("Not a file"..type(node))
-- end
--end
--
--local function newStringFile(content)
-- return {
-- type = "file",
-- read = function() return content end,
-- write = function(newContent) content = newContent end
-- }
--end
--
--local function newDirectory()
-- return {
-- type = "directory"
-- }
--end
--
--data["random"] = {
-- type = "character device",
-- read = function(amount)
-- local result = ""
-- for _ = 1, amount do
-- result = result .. string.char(math.random(0, 255))
-- end
-- return result
-- end,
-- write = function() error("Permission denied") end
--}
--
--data["null"] = {
-- type = "character device",
-- read = function() return "" end,
-- write = function() end
--}
--
--data["zero"] = {
-- type = "character device",
-- read = function(amount)
-- return string.rep("\0", amount)
-- end,
-- write = function() error("Permission denied") end
--}
--
--data["rtc"] = {
-- type = "character device",
-- read = function() return kernel.computer:time() end,
-- write = function() error("Permission denied") end
--}
--
--data["rtc0"] = {
-- type = "character device",
-- read = function() return kernel.computer:time() end,
-- write = function() error("Permission denied") end
--}
--
--data["eeprom"] = {
-- type = "character device",
-- read = function() return kernel.computer:getEEPROM() end,
-- write = function(data)
-- if kernel.uid ~= 0 then
-- error("Permission denied")
-- end
-- kernel.computer:setEEPROM(data)
-- end
--}
--
--local keyboard = kernel.newFifo()
--local mouse = kernel.newFifo()
--data["input"] = newDirectory()
--data["input"]["keyboard"] = {
-- type = "pipe",
-- read = function(amount)
-- return keyboard.pop()
-- end,
-- write = function() error("Permission denied") end
--}
--data["input"]["mouse"] = {
-- type = "pipe",
-- read = function(amount)
-- return mouse.pop()
-- end,
-- write = function() error("Permission denied") end
--}
--
--data["pts"] = newDirectory()
--
--kernel.devfs = {}
--kernel.devfs.keyboard = keyboard
--kernel.devfs.mouse = mouse
--kernel.devfs.proxy = proxy
--kernel.devfs.data = data
--kernel.vfs.virtdisk(proxy)