2019-07-14 20:52:56 +10:00
iofs = { }
iofs.files = { }
iofs.fds = { }
iofs.nextfd = 0
iofs.component = { }
local function rfalse ( )
return false
end
function iofs . component . getLabel ( )
return " iofs "
end
iofs.component . spaceUsed , iofs.component . spaceTotal , iofs.component . isReadOnly , iofs.component . isDirectory , iofs.component . size , iofs.component . setLabel = function ( ) return computer.totalMemory ( ) - computer.freeMemory ( ) end , computer.totalMemory , rfalse , rfalse , rfalse , rfalse
function iofs . component . exists ( fname )
return iofs.files [ fname ] ~= nil
end
function iofs . component . list ( )
local t = { }
for k , v in pairs ( iofs.files ) do
t [ # t + 1 ] = k
end
return t
end
function iofs . component . open ( fname , mode )
fname = fname : gsub ( " / " , " " )
if iofs.files [ fname ] then
local r , w , c , s = iofs.files [ fname ] ( mode )
iofs.fds [ iofs.nextfd ] = { [ " read " ] = r or rfalse , [ " write " ] = w or rfalse , [ " seek " ] = s or rfalse , [ " close " ] = c or rfalse }
iofs.nextfd = iofs.nextfd + 1
return iofs.nextfd - 1
end
return false
end
function iofs . component . read ( fd , count )
if iofs.fds [ fd ] then
return iofs.fds [ fd ] . read ( count )
end
end
function iofs . component . write ( fd , data )
if iofs.fds [ fd ] then
return iofs.fds [ fd ] . write ( data )
end
end
function iofs . component . close ( fd )
if iofs.fds [ fd ] then
iofs.fds [ fd ] . close ( )
end
iofs.fds [ fd ] = nil
end
function iofs . component . seek ( fd , ... )
if iofs.fds [ fd ] then
return iofs.fds [ fd ] . seek ( ... )
end
end
2019-07-18 13:51:10 +10:00
function iofs . register ( fname , fopen ) -- Register a new iofs node with the name *fname* that will run the function *fopen* when opened. This function should return a function for read, a function for write, function for close, and optionally, a function for seek, in that order.
2019-07-14 20:52:56 +10:00
iofs.files [ fname ] = fopen
end
fs.mounts . iofs = iofs.component