OC-MultICE/modules/applications/skex2.lua

69 lines
1.5 KiB
Lua

function skex(s)
local c,cs,cT,lT,lP="","",{},{},1
local function lf(s)
local f=fopen(s,"rb")
local nc=fread(f,2048)
while nc ~= nil and nc ~= "" do
c=c..nc
nc=fread(f,2048)
end
end
local function wf(s)
local f,c=fopen(s,"wb"),""
for k,v in ipairs(lT) do fwrite(f,v.."\n") end
fclose(f)
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