added io library and a skex version that uses it
This commit is contained in:
parent
2da090371d
commit
3bc4ceae15
65
modules/applications/skex2-io.lua
Normal file
65
modules/applications/skex2-io.lua
Normal file
@ -0,0 +1,65 @@
|
||||
function skex(s)
|
||||
local c,cs,cT,lT,lP="","",{},{},1
|
||||
local function lf(s)
|
||||
local f=io.open(s,"rb")
|
||||
c=f:read("*a")
|
||||
f:close()
|
||||
end
|
||||
local function wf(s)
|
||||
local f,c=io.open(s,"wb")
|
||||
for k,v in ipairs(lT) do f:write(v.."\n") end
|
||||
f:close()
|
||||
end
|
||||
if s then
|
||||
lf(s)
|
||||
for l in c:gmatch("(.-)\n") do lT[#lT+1]=l end
|
||||
end
|
||||
while true do
|
||||
cs=readln()
|
||||
cT={}
|
||||
for w in cs:gmatch("%S+") do cT[#cT+1]=w end
|
||||
if cT[1] == "q" then break
|
||||
elseif cT[1] == "l" then
|
||||
for i = (TN(cT[2]) or 1), (TN(cT[3]) or #lT) do
|
||||
print(TS(i).."\t"..(lT[i] or ""))
|
||||
end
|
||||
elseif cT[1] == "a" or cT[1] == "i" or cT[1] == "s" then
|
||||
if TN(cT[2]) then lP=TN(cT[2]) end
|
||||
if cT[1] == "s" then for i = 1,TN(cT[3]) do T.remove(lT,i+(TN(cT[2])-1)) end end
|
||||
if cT[1] == "a" then lP=lP+1 end
|
||||
while true do
|
||||
cs=readln()
|
||||
if cs~="." then
|
||||
T.insert(lT,lP,cs)
|
||||
lP=lP+1
|
||||
else break end
|
||||
end
|
||||
elseif cT[1] == "f" then
|
||||
s=cT[2] or s
|
||||
print(s)
|
||||
elseif cT[1] == "e" then
|
||||
c=""
|
||||
for k,v in ipairs(lT) do c=c..v.."\n" end
|
||||
print(pcall(load(c)))
|
||||
elseif cT[1] == "r" then
|
||||
s=cT[2] or s
|
||||
wf(s)
|
||||
elseif cT[1] == "w" then
|
||||
s=cT[2] or s
|
||||
wf(s)
|
||||
elseif cT[1] == "d" then
|
||||
for i = 1, TN(cT[3])-TN(cT[2]) do
|
||||
T.remove(lT,cT[2])
|
||||
end
|
||||
elseif cT[1] == "p" then
|
||||
lP=TN(cT[2]) or lP
|
||||
print(lP)
|
||||
elseif cs:sub(1,1) == "!" then
|
||||
c=""
|
||||
for k,v in ipairs(lT) do c=c..v.."\n" end
|
||||
print(pcall(load(cs:sub(2))))
|
||||
else
|
||||
print("?")
|
||||
end
|
||||
end
|
||||
end
|
31
modules/library/buffer.lua
Normal file
31
modules/library/buffer.lua
Normal file
@ -0,0 +1,31 @@
|
||||
function cB(w,c)
|
||||
local t={}
|
||||
t.b=""
|
||||
function t.w(s,d)
|
||||
s.b=s.b..TS(d)
|
||||
end
|
||||
t.write = t.w
|
||||
function t.r(s,l)
|
||||
if type(l) == "number" then
|
||||
local ns,bs=s.b:sub(1,l+1),s.b:sub(l+2)
|
||||
s.b=bs
|
||||
return ns
|
||||
elseif type(l) == "string" then
|
||||
local oS=s.b
|
||||
if l == "*a" then
|
||||
s.b=""
|
||||
return oS
|
||||
elseif l == "*l" then
|
||||
S=s.b:find("\n") or #s.b
|
||||
s.b=s.b:sub(S+1)
|
||||
rS = oS:sub(1,S-1)
|
||||
if rS:len() < 1 then return nil end
|
||||
return rS
|
||||
end
|
||||
end
|
||||
end
|
||||
t.read = t.r
|
||||
t.close = c
|
||||
w(t)
|
||||
return t
|
||||
end
|
34
modules/library/io.lua
Normal file
34
modules/library/io.lua
Normal file
@ -0,0 +1,34 @@
|
||||
_G.io = {}
|
||||
io.write = write
|
||||
function io.open(n,m)
|
||||
m=m or "rb"
|
||||
local h=fopen(n,m)
|
||||
if h then
|
||||
if h and m:sub(1,1) == "w" then
|
||||
return cB(function(bt)
|
||||
bt.s="o"
|
||||
s("io worker: "..n,function()
|
||||
while true do
|
||||
if bt.s ~= "o" and bt.b == "" then fclose(h) break end
|
||||
local nd = bt:read(2048)
|
||||
if nd ~= nil and nd ~= "" then
|
||||
fwrite(h,nd)
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end) end,function(bt) bt.s="c" end)
|
||||
elseif h and m:sub(1,1) == "r" then
|
||||
return cB(function(bt)
|
||||
local sb = ""
|
||||
repeat
|
||||
bt.b=bt.b..sb
|
||||
sb=fread(h,2048)
|
||||
until sb == "" or sb == nil
|
||||
fclose(h)
|
||||
C.yield()
|
||||
end,function() end)
|
||||
end
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user