forked from Hyperion/HyperionOS
working on require needs to be done before EOW
This commit is contained in:
124
src/disks/1h/sys/fs/init
Normal file
124
src/disks/1h/sys/fs/init
Normal file
@@ -0,0 +1,124 @@
|
||||
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
|
||||
Reference in New Issue
Block a user