forked from Hyperion/HyperionOS
124 lines
2.8 KiB
Plaintext
124 lines
2.8 KiB
Plaintext
local args={...}
|
|
local drivers=args[1]
|
|
local log=args[2]
|
|
local bootDisk=args[3]
|
|
local driverutil=args[4]
|
|
local wd="/"
|
|
log.api.log("Bootdrive is "..bootDisk)
|
|
if not drivers.disk then
|
|
error("WTF") -- ???
|
|
end
|
|
|
|
local disks={}
|
|
local mounts={
|
|
["/"]=bootDisk
|
|
}
|
|
local meta={}
|
|
|
|
local function refreshDisks()
|
|
local diskstmp={}
|
|
local tmp={}
|
|
for i,v in driverutil.list("disk") do
|
|
tmp[#tmp+1] = v
|
|
end
|
|
for _,d in ipairs(tmp) do
|
|
for i,v in d.api.list() do
|
|
if diskstmp[i]==nil then
|
|
diskstmp[i]=v
|
|
end
|
|
end
|
|
end
|
|
disks=diskstmp
|
|
end
|
|
refreshDisks()
|
|
--[[
|
|
meta=load("return "..(disks[bootDisk].readAllText("/sys/fs/meta.ltn") or "{}"), "meta")()
|
|
if not meta then error("Meta failed to load") end
|
|
]]
|
|
local function resolve(path)
|
|
if path:sub(1,1)~="/" then path=wd..path end
|
|
local currmatch="/"
|
|
for i,_ in pairs(mounts) do
|
|
if string.hasPrefix(path, i) then
|
|
if #i>#currmatch then
|
|
currmatch=i
|
|
end
|
|
end
|
|
end
|
|
local drive=disks[mounts[currmatch]]
|
|
local newPath=string.getSuffix(path, currmatch)
|
|
return drive, newPath
|
|
end
|
|
|
|
local fs={}
|
|
|
|
function fs.list(path)
|
|
local drive, newPath = resolve(path)
|
|
return drive.list(newPath)
|
|
end
|
|
|
|
function fs.readAllText(path)
|
|
local drive, newPath = resolve(path)
|
|
return drive.readAllText(newPath)
|
|
end
|
|
|
|
function fs.writeAllText(path, content)
|
|
local drive, newPath = resolve(path)
|
|
return drive.writeAllText(newPath, content)
|
|
end
|
|
|
|
function fs.delete(path)
|
|
local drive, newPath = resolve(path)
|
|
return drive.delete(newPath)
|
|
end
|
|
|
|
function fs.exists(path)
|
|
local drive, newPath = resolve(path)
|
|
return (drive.fileExists(newPath) or drive.directoryExists(newPath))
|
|
end
|
|
|
|
function fs.fileExists(path)
|
|
local drive, newPath = resolve(path)
|
|
return drive.fileExists(newPath)
|
|
end
|
|
|
|
function fs.directoryExists(path)
|
|
local drive, newPath = resolve(path)
|
|
return drive.directoryExists(newPath)
|
|
end
|
|
|
|
function fs.createFile(path)
|
|
local drive, newPath = resolve(path)
|
|
return drive.makeFile(newPath)
|
|
end
|
|
|
|
function fs.createDirectory(path)
|
|
local drive, newPath = resolve(path)
|
|
return drive.makeDirectory(newPath)
|
|
end
|
|
|
|
fs.mkDir=fs.createDirectory
|
|
fs.mkFile=fs.createFile
|
|
fs.isDir=fs.directoryExists
|
|
fs.isFile=fs.fileExists
|
|
|
|
function fs.getWorkingDir()
|
|
return wd
|
|
end
|
|
|
|
function fs.setWorkingDir(dir)
|
|
if type(dir)~="string" then error("Invailid path") end
|
|
if dir:sub(1,1)~="/" then dir=wd..dir end
|
|
if dir:sub(#dir,#dir)~="/" then dir=dir.."/" end
|
|
if not fs.isDir(dir) then error("Invailid path") end
|
|
end
|
|
|
|
function fs.loadAsFunc(path)
|
|
local file = fs.readAllText(path)
|
|
return load(file, path, "t", setmetatable({},{
|
|
__index=_G,
|
|
__metatable=false
|
|
}))
|
|
end
|
|
|
|
return fs |