made skex2 use the previous include-external-files feature so you can run it outside the kernel.

This commit is contained in:
Izaya 2017-08-27 03:52:09 +10:00
parent 292ced2368
commit 1834eadb29
3 changed files with 107 additions and 99 deletions

View File

@ -15,7 +15,7 @@ modules/lib/sha256.lua
modules/net/net-ext.lua
modules/applications/luash.lua
modules/applications/genkernel.lua
modules/applications/skex2.lua
fwrap skex exec/skex2.lua
modules/util/tape.lua
modules/util/fs-automount.lua
modules/setup.lua

106
exec/skex2.lua Normal file
View File

@ -0,0 +1,106 @@
local tA = {...}
local ft, p, fp, ct, il, it, c, C = {}, 1, fp or tA[1] or "", {}, "", {}, "", C -- file table, pointer, filename, command table, input line, input table, command, content
function ct.readfile(fp,rp)
if not fp then return end
if not rp then ft = {} end
local f=io.open(fp,"rb")
if f then
C=f:read("*a")
f:close()
for l in C:gmatch("[^\n]+") do
ft[#ft+1] = l
end
end
end
function ct.writefile(nfp)
if not nfp then nfp = fp end
print(nfp)
f=io.open(nfp,"wb")
if f then
for k,v in ipairs(ft) do
print(v)
f:write(v.."\n")
end
coroutine.yield()
f:close()
coroutine.yield()
print(f.b)
end
end
function ct.list(s,e)
s,e = s or 1, e or #ft
for i = s,e do
if ft[i] then
print(tostring(i).."\t"..ft[i])
end
end
end
function ct.sp(np)
if np then
if np > #ft then
np = #ft
elseif np < 1 then
np = 0
end
p=np
end
end
function ct.pointer(np)
ct.sp(np)
print(p)
end
function ct.insert(np)
ct.sp(np)
while true do
io.write(tostring(p).."\t")
local l=io.read()
if l == "." then break end
table.insert(ft,p,l)
p=p+1
end
end
function ct.append(np)
if np then np=np+1 end
ct.insert(np)
end
function ct.substitute(np)
ct.sp(np)
table.remove(ft,p)
ct.insert(np)
end
function ct.delete(np)
ct.sp(np)
table.remove(ft,p)
end
function ct.filename(np)
if np then fp = np end
print(fp)
end
ct.o = ct.readfile
ct.w = ct.writefile
ct.l = ct.list
ct.p = ct.pointer
ct.i = ct.insert
ct.a = ct.append
ct.s = ct.substitute
ct.d = ct.delete
ct.f = ct.filename
ct.readfile(fp)
while true do
io.write("skex2> ")
il,it=io.read(),{}
for w in il:gmatch("%S+") do
it[#it+1] = w
end
c=table.remove(it,1)
if c == "quit" or c == "q" then
break
elseif c:sub(1,1) == "!" then
print(pcall(load(c:sub(2))))
elseif ct[c] ~= nil then
ct[c](table.unpack(it))
end
end

View File

@ -1,98 +0,0 @@
function skex2(fp)
local ft, p, fp, ct, il, it, c, C = {}, 1, fp or "", {}, "", {}, "", C -- file table, pointer, filename, command table, input line, input table, command, content
function ct.readfile(fp,rp)
if not fp then return end
if not rp then ft = {} end
local f=io.open(fp,"rb")
if f then
C=f:read("*a")
f:close()
for l in C:gmatch("[^\n]+") do
ft[#ft+1] = l
end
end
end
function ct.writefile(nfp)
if not nfp then nfp = fp end
print(nfp)
f=io.open(nfp,"wb")
if f then
for k,v in ipairs(ft) do
f:write(v.."\n")
end
f:close()
end
end
function ct.list(s,e)
s,e = s or 1, e or #ft
for i = s,e do
if ft[i] then
print(tostring(i).."\t"..ft[i])
end
end
end
function ct.sp(np)
if np then p=(tonumber(np)%#ft)+1 end
end
function ct.pointer(np)
ct.sp(np)
print(p)
end
function ct.insert(np)
ct.sp(np)
while true do
local l=io.read()
if l == "." then break end
table.insert(ft,p,l)
p=p+1
end
end
function ct.append(np)
if np then np=np+1 end
ct.insert(np)
end
function ct.substitute(np)
ct.sp(np)
table.remove(ft,p)
ct.insert(np)
end
function ct.delete(np)
ct.sp(np)
table.remove(ft,p)
end
function ct.filename(np)
if np then fp = np end
print(fp)
end
ct.o = ct.readfile
ct.w = ct.writefile
ct.l = ct.list
ct.p = ct.pointer
ct.i = ct.insert
ct.a = ct.append
ct.s = ct.substitute
ct.d = ct.delete
ct.f = ct.filename
ct.readfile(fp)
while true do
io.write("skex2> ")
il,it=io.read(),{}
for w in il:gmatch("%S+") do
it[#it+1] = w
end
c=table.remove(it,1)
if c == "quit" or c == "q" then
break
elseif c:sub(1,1) == "!" then
print(pcall(load(c:sub(2))))
elseif ct[c] ~= nil then
ct[c](table.unpack(it))
end
end
end
if not skex then
skex = skex2
end