Compare commits
No commits in common. "ba1bf9339d7dbc6927678b521dc792b4b4e5ec8f" and "bfdcfbd0407ce803b24cf66f52cc4f932de1edfa" have entirely different histories.
ba1bf9339d
...
bfdcfbd040
@ -1,69 +0,0 @@
|
|||||||
local preproc = {}
|
|
||||||
preproc.directives = {}
|
|
||||||
|
|
||||||
function preproc.parsewords(line) -- string -- table -- Returns a table of words from the string *line*, parsing quotes and escapes.
|
|
||||||
local rt = {""}
|
|
||||||
local escaped, quoted = false, false
|
|
||||||
for c in line:gmatch(".") do
|
|
||||||
if escaped then
|
|
||||||
rt[#rt] = rt[#rt]..c
|
|
||||||
elseif c == '"' or c == "'" then
|
|
||||||
quoted = not quoted
|
|
||||||
elseif c == "\\" then
|
|
||||||
escaped = true
|
|
||||||
elseif c:match("%s") and not quoted and rt[#rt]:len() > 0 then
|
|
||||||
rt[#rt+1] = ""
|
|
||||||
else
|
|
||||||
rt[#rt] = rt[#rt]..c
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return rt
|
|
||||||
end
|
|
||||||
|
|
||||||
function preproc.line(line) -- string -- -- Returns either a function - which can be called to get lines until it returns nil - or a string from processing *line* using preprocessor directives.
|
|
||||||
if line:match("^%-%-#") then
|
|
||||||
local directive, args = line:match("^%-%-#(%S+)%s(.+)")
|
|
||||||
print(directive,args)
|
|
||||||
local args = preproc.parsewords(args)
|
|
||||||
if preproc.directives[directive] then
|
|
||||||
return preproc.directives[directive](table.unpack(args))
|
|
||||||
else
|
|
||||||
error("unknown preprocessor directive: "..directive)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return line
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function preproc.preproc(...) -- string -- string -- Returns the output from preprocessing the files listed in *...*.
|
|
||||||
local tA = {...}
|
|
||||||
local output = ""
|
|
||||||
for _,fname in ipairs(tA) do
|
|
||||||
local f,e = io.open(fname)
|
|
||||||
if not f then error("unable to open file "..fname..": "..e) end
|
|
||||||
for line in f:lines() do
|
|
||||||
local r = preproc.line(line)
|
|
||||||
if type(r) == "function" then
|
|
||||||
while true do
|
|
||||||
local rs = r()
|
|
||||||
if not rs then break end
|
|
||||||
output = output .. rs .. "\n"
|
|
||||||
end
|
|
||||||
else
|
|
||||||
output = output .. r .. "\n"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return output
|
|
||||||
end
|
|
||||||
|
|
||||||
preproc.directives.include = preproc.preproc
|
|
||||||
|
|
||||||
return setmetatable(preproc,{__call=function(_,...)
|
|
||||||
local tA = {...}
|
|
||||||
local out = table.remove(tA,#tA)
|
|
||||||
local f,e = io.open(out,"wb")
|
|
||||||
if not f then error("unable to open file "..out..": "..e) end
|
|
||||||
f:write(preproc.preproc(table.unpack(tA)))
|
|
||||||
f:close()
|
|
||||||
end})
|
|
@ -1,3 +0,0 @@
|
|||||||
{["name"]="preproc",
|
|
||||||
["description"]="Lua preprocessor library",
|
|
||||||
["authors"]="Izaya"}
|
|
@ -1,114 +0,0 @@
|
|||||||
local unionfs = {}
|
|
||||||
|
|
||||||
local function normalise(path)
|
|
||||||
return table.concat(fs.segments(path),"/")
|
|
||||||
end
|
|
||||||
|
|
||||||
function unionfs.create(...) -- string -- table -- Returns a unionfs object of the directories specified in *...*.
|
|
||||||
local paths,fids,fc = {...}, {}, 0
|
|
||||||
for k,v in pairs(paths) do
|
|
||||||
paths[k] = "/"..normalise(v)
|
|
||||||
end
|
|
||||||
local proxy = {}
|
|
||||||
local function realpath(path)
|
|
||||||
path = path or ""
|
|
||||||
for k,v in pairs(paths) do
|
|
||||||
if fs.exists(v.."/"..path) then
|
|
||||||
return v.."/"..path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return paths[1].."/"..path
|
|
||||||
end
|
|
||||||
|
|
||||||
function proxy.setLabel()
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
function proxy.spaceUsed()
|
|
||||||
return fs.spaceUsed(paths[1])
|
|
||||||
end
|
|
||||||
function proxy.spaceTotal()
|
|
||||||
return fs.spaceTotal(paths[1])
|
|
||||||
end
|
|
||||||
function proxy.isReadOnly()
|
|
||||||
return fs.isReadOnly(paths[1])
|
|
||||||
end
|
|
||||||
function proxy.isDirectory(path)
|
|
||||||
return fs.isDirectory(realpath(path))
|
|
||||||
end
|
|
||||||
function proxy.lastModified(path)
|
|
||||||
return fs.lastModified(realpath(path))
|
|
||||||
end
|
|
||||||
function proxy.getLabel()
|
|
||||||
return fs.getLabel(paths[1])
|
|
||||||
end
|
|
||||||
|
|
||||||
function proxy.exists(path)
|
|
||||||
return fs.exists(realpath(path))
|
|
||||||
end
|
|
||||||
function proxy.remove(path)
|
|
||||||
return fs.remove(realpath(path))
|
|
||||||
end
|
|
||||||
function proxy.size(path)
|
|
||||||
return fs.size(realpath(path))
|
|
||||||
end
|
|
||||||
|
|
||||||
function proxy.list(path)
|
|
||||||
local nt,rt = {},{}
|
|
||||||
if #fs.segments(path) < 1 then
|
|
||||||
for k,v in pairs(paths) do
|
|
||||||
for l,m in ipairs(fs.list(v.."/"..path)) do
|
|
||||||
nt[m] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for k,v in pairs(nt) do
|
|
||||||
rt[#rt+1] = k
|
|
||||||
end
|
|
||||||
table.sort(rt)
|
|
||||||
return rt
|
|
||||||
else
|
|
||||||
return fs.list(realpath(path))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function proxy.open(path,mode)
|
|
||||||
local fh, r = fs.open(realpath(path),mode)
|
|
||||||
if not fh then return fh, r end
|
|
||||||
fids[fc] = fh
|
|
||||||
fc = fc + 1
|
|
||||||
return fc - 1
|
|
||||||
end
|
|
||||||
|
|
||||||
function proxy.close(fid)
|
|
||||||
if not fids[fid] then
|
|
||||||
return false, "file not open"
|
|
||||||
end
|
|
||||||
local rfh = fids[fid]
|
|
||||||
fids[fid] = nil
|
|
||||||
return rfh:close()
|
|
||||||
end
|
|
||||||
function proxy.write(fid,d)
|
|
||||||
if not fids[fid] then
|
|
||||||
return false, "file not open"
|
|
||||||
end
|
|
||||||
return fids[fid]:write(d)
|
|
||||||
end
|
|
||||||
function proxy.read(fid,d)
|
|
||||||
if not fids[fid] then
|
|
||||||
return false, "file not open"
|
|
||||||
end
|
|
||||||
local rb = fids[fid]:read(d)
|
|
||||||
if rb == "" then rb = nil end
|
|
||||||
return rb
|
|
||||||
end
|
|
||||||
function proxy.seek(fid,d)
|
|
||||||
if not fids[fid] then
|
|
||||||
return false, "file not open"
|
|
||||||
end
|
|
||||||
return fids[fid]:seek(d)
|
|
||||||
end
|
|
||||||
|
|
||||||
return proxy
|
|
||||||
end
|
|
||||||
|
|
||||||
return unionfs
|
|
@ -1,3 +0,0 @@
|
|||||||
{["name"]="libunionfs",
|
|
||||||
["description"]="Library for creating unionfs filesystem objects.",
|
|
||||||
["authors"]="Izaya"}
|
|
@ -102,18 +102,6 @@ function start()
|
|||||||
os.kill(v)
|
os.kill(v)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return os.spawn(function()
|
|
||||||
local last = computer.uptime()
|
|
||||||
while true do
|
|
||||||
local tE = {coroutine.yield()}
|
|
||||||
if computer.uptime() > last + cfg.rtimer then
|
|
||||||
for k,v in pairs(proxies) do
|
|
||||||
v.read()
|
|
||||||
end
|
|
||||||
last = computer.uptime()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,"vtunnel")
|
|
||||||
end
|
end
|
||||||
function vt.stop()
|
function vt.stop()
|
||||||
for k,v in pairs(proxies) do
|
for k,v in pairs(proxies) do
|
||||||
@ -159,6 +147,16 @@ function vt.settimer(time)
|
|||||||
end
|
end
|
||||||
|
|
||||||
vt.start = start
|
vt.start = start
|
||||||
package.loaded.vtunnel = vt
|
_G.libs.vtunnel = vt
|
||||||
|
|
||||||
return vt
|
start()
|
||||||
|
local last = computer.uptime()
|
||||||
|
while true do
|
||||||
|
local tE = {coroutine.yield()}
|
||||||
|
if computer.uptime() > last + cfg.rtimer then
|
||||||
|
for k,v in pairs(proxies) do
|
||||||
|
v.read()
|
||||||
|
end
|
||||||
|
last = computer.uptime()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user