diff --git a/build.cfg b/build.cfg index 3ba9dc7..e6e1d4c 100755 --- a/build.cfg +++ b/build.cfg @@ -12,7 +12,7 @@ modules/lib/readline.lua modules/lib/shutil.lua modules/applications/luash.lua modules/applications/genkernel.lua -modules/applications/skex.lua +modules/applications/skex2.lua modules/util/fs-automount.lua modules/setup.lua modules/base/footer.lua diff --git a/modules/applications/skex2.lua b/modules/applications/skex2.lua new file mode 100644 index 0000000..45bff16 --- /dev/null +++ b/modules/applications/skex2.lua @@ -0,0 +1,96 @@ +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") + C=f:read("*a") + f:close() + for l in C:gmatch("[^\n]+") do + ft[#ft+1] = l + 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 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