commit
3e98d1aaf6
@ -1,5 +1,5 @@
|
||||
optimise no
|
||||
listmods no
|
||||
test no
|
||||
log no
|
||||
listmods yes
|
||||
test yes
|
||||
log yes
|
||||
opath kernel.lua
|
||||
|
@ -77,13 +77,13 @@ print(tostring(#tm).." modules loaded.\n")
|
||||
-- Generate source
|
||||
print("Generating source")
|
||||
if cfg.listmods == "yes" then
|
||||
ss=ss.."modules,_OSVERSION={"
|
||||
ss=ss.."_MOD,_OSVERSION,_BD={"
|
||||
for k,v in ipairs(tm) do
|
||||
ss=ss..'"'..v..'",'
|
||||
end
|
||||
ss=ss.."},"
|
||||
if _OSVERSION == nil then
|
||||
ss=ss..'"MultICE '..io.popen("git rev-parse HEAD"):read("*a"):sub(1,7)..'"\n'
|
||||
ss=ss..'"MultICE '..io.popen("git rev-parse HEAD"):read("*a"):sub(1,7)..'","'..os.date("%Y/%m/%d %H:%M %z")..'"\n'
|
||||
else
|
||||
ss=ss..'"MultICE DR0"\n'
|
||||
end
|
||||
|
@ -1,14 +1,11 @@
|
||||
base/header.lua
|
||||
drivers/dterm.lua
|
||||
library/print.lua
|
||||
drivers/keyboard.lua
|
||||
library/net.lua
|
||||
library/fs-min.lua
|
||||
library/fs-std.lua
|
||||
library/fs-ext.lua
|
||||
library/fs-util.lua
|
||||
util/fs-automount.lua
|
||||
util/sinit.lua
|
||||
applications/shutil.lua
|
||||
applications/evproxy-srv.lua
|
||||
applications/evproxy-client.lua
|
||||
applications/luash.lua
|
||||
base/footer.lua
|
||||
|
25
configs/everything-debug.cfg
Normal file
25
configs/everything-debug.cfg
Normal file
@ -0,0 +1,25 @@
|
||||
base/loadlin.lua
|
||||
base/header.lua
|
||||
debug/ocemu-display.lua
|
||||
debug/ocemu-heartbeat.lua
|
||||
library/print.lua
|
||||
library/fs-min.lua
|
||||
library/fs-std.lua
|
||||
library/fs-util.lua
|
||||
util/fs-automount.lua
|
||||
drivers/tty.lua
|
||||
drivers/kbd.lua
|
||||
util/autogpu.lua
|
||||
library/net.lua
|
||||
net/ping.lua
|
||||
library/base64.lua
|
||||
library/fs-ext.lua
|
||||
library/readline.lua
|
||||
applications/nshd.lua
|
||||
applications/nshc.lua
|
||||
applications/shutil.lua
|
||||
applications/skex2.lua
|
||||
applications/luash.lua
|
||||
applications/ircbridge.lua
|
||||
applications/autoluash.lua
|
||||
base/footer.lua
|
23
configs/everything-noinit.cfg
Normal file
23
configs/everything-noinit.cfg
Normal file
@ -0,0 +1,23 @@
|
||||
base/loadlin.lua
|
||||
base/header.lua
|
||||
library/print.lua
|
||||
library/fs-min.lua
|
||||
library/fs-std.lua
|
||||
library/fs-util.lua
|
||||
util/fs-automount.lua
|
||||
drivers/tty.lua
|
||||
drivers/kbd.lua
|
||||
util/autogpu.lua
|
||||
library/net.lua
|
||||
net/ping.lua
|
||||
library/base64.lua
|
||||
library/fs-ext.lua
|
||||
library/readline.lua
|
||||
applications/nshd.lua
|
||||
applications/nshc.lua
|
||||
applications/shutil.lua
|
||||
applications/skex2.lua
|
||||
applications/luash.lua
|
||||
applications/ircbridge.lua
|
||||
applications/autoluash.lua
|
||||
base/footer.lua
|
24
configs/everything.cfg
Normal file
24
configs/everything.cfg
Normal file
@ -0,0 +1,24 @@
|
||||
base/loadlin.lua
|
||||
base/header.lua
|
||||
library/print.lua
|
||||
library/fs-min.lua
|
||||
library/fs-std.lua
|
||||
library/fs-util.lua
|
||||
util/fs-automount.lua
|
||||
drivers/tty.lua
|
||||
drivers/kbd.lua
|
||||
util/autogpu.lua
|
||||
library/net.lua
|
||||
net/ping.lua
|
||||
library/base64.lua
|
||||
library/fs-ext.lua
|
||||
library/readline.lua
|
||||
applications/nshd.lua
|
||||
applications/nshc.lua
|
||||
applications/shutil.lua
|
||||
applications/skex2.lua
|
||||
applications/luash.lua
|
||||
applications/ircbridge.lua
|
||||
util/sinit.lua
|
||||
applications/autoluash.lua
|
||||
base/footer.lua
|
13
configs/headless.cfg
Normal file
13
configs/headless.cfg
Normal file
@ -0,0 +1,13 @@
|
||||
base/header.lua
|
||||
library/print.lua
|
||||
library/net.lua
|
||||
library/readline.lua
|
||||
applications/nshd.lua
|
||||
applications/luash.lua
|
||||
applications/shutil.lua
|
||||
library/fs-min.lua
|
||||
library/fs-std.lua
|
||||
library/fs-ext.lua
|
||||
util/fs-automount-min.lua
|
||||
util/loadeeprom.lua
|
||||
base/footer.lua
|
@ -1,10 +1,12 @@
|
||||
base/header.lua
|
||||
drivers/dterm.lua
|
||||
library/print.lua
|
||||
drivers/keyboard.lua
|
||||
drivers/tty.lua
|
||||
drivers/kbd.lua
|
||||
util/autogpu.lua
|
||||
library/net.lua
|
||||
applications/shutil.lua
|
||||
applications/evproxy-client.lua
|
||||
library/readline.lua
|
||||
applications/nshc.lua
|
||||
applications/luash.lua
|
||||
applications/autoluash.lua
|
||||
util/loadeeprom.lua
|
||||
base/footer.lua
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Building MultICE
|
||||
MultICE uses a relatively simple build system. It has been tested on Arch Linux, Debian Linux, OpenOS and Plan9k.
|
||||
## 1. Choose modules.
|
||||
The system is made out of modules from the `modules/` directory. When you run the build script, it assembles them, and optionally optomises the code for space.
|
||||
The system is made out of modules from the `modules/` directory. When you run the build script, it assembles them, and optionally optimises the code for space.
|
||||
There are a number of preconfigured module sets in the `config/` directory, and you can of course you can write your own.
|
||||
|
||||
The build system defaults to a file called `modules.cfg` in the current directory. You can specify a config file using `--modconfig=file.cfg`.
|
||||
|
57
doc/skex2.md
Normal file
57
doc/skex2.md
Normal file
@ -0,0 +1,57 @@
|
||||
# skex2
|
||||
|
||||
## interactive line editor
|
||||
|
||||
skex2 is a simple but functional line editor for MultICE.
|
||||
|
||||
### invocation
|
||||
|
||||
To start skex2, simply run skex(filename) from the Lua prompt.
|
||||
|
||||
### usage
|
||||
|
||||
Generally, commands and arguments are entered in the form of `command argument1 argument2 argument3` with the exception of inline execution, which is in the form of `!lua code here`.
|
||||
|
||||
If skex does not understand what you mean, it will output a line with a question mark.
|
||||
|
||||
### commands
|
||||
|
||||
#### q - quit skex2
|
||||
|
||||
Exits the program.
|
||||
|
||||
#### l \[start\] \[end\] - list contents
|
||||
|
||||
Output the lines from start to end, inclusive.
|
||||
|
||||
#### f \[filename\] - set the filename
|
||||
|
||||
This sets the filename to be used for I/O, or prints the current one.
|
||||
|
||||
#### r \[filename\] - load file
|
||||
|
||||
Reads from *filename* or the current set via **f**
|
||||
|
||||
#### w \[filename\] - write to file
|
||||
|
||||
Writes to *filename* or the current set via **f**
|
||||
|
||||
#### p \[line\] - print or set current line
|
||||
|
||||
As skex2 is a line editor, your pointer is a line, and this either prints the current one or sets a new one.
|
||||
|
||||
#### a \[line\] - append to buffer
|
||||
|
||||
Appends lines after the current line or *line* until a line with only . is entered.
|
||||
|
||||
#### i \[line\] - insert into buffer
|
||||
|
||||
Inserts lines before the current line or *line* until a line with only . is entered.
|
||||
|
||||
#### s \[line\] - replace line
|
||||
|
||||
Removes the current line or *line* and enters insert mode
|
||||
|
||||
#### e - executes the contents of the buffer
|
||||
|
||||
Basically converts it into one big string and loads it.
|
20
modules.cfg
20
modules.cfg
@ -1,18 +1,20 @@
|
||||
base/header.lua
|
||||
drivers/dterm.lua
|
||||
library/print.lua
|
||||
drivers/keyboard.lua
|
||||
library/net.lua
|
||||
library/fs-min.lua
|
||||
library/fs-std.lua
|
||||
library/fs-ext.lua
|
||||
library/fs-util.lua
|
||||
library/base64.lua
|
||||
util/fs-automount.lua
|
||||
net/ping.lua
|
||||
drivers/tty.lua
|
||||
drivers/kbd.lua
|
||||
util/autogpu.lua
|
||||
library/net.lua
|
||||
library/fs-ext.lua
|
||||
library/readline.lua
|
||||
library/base64.lua
|
||||
applications/nshd.lua
|
||||
applications/nshc.lua
|
||||
applications/shutil.lua
|
||||
applications/evproxy-srv.lua
|
||||
applications/evproxy-client.lua
|
||||
applications/ircbridge.lua
|
||||
applications/luash.lua
|
||||
applications/ircbridge.lua
|
||||
applications/autoluash.lua
|
||||
base/footer.lua
|
||||
|
1
modules/applications/autoluash.lua
Normal file
1
modules/applications/autoluash.lua
Normal file
@ -0,0 +1 @@
|
||||
luash()
|
@ -1,17 +0,0 @@
|
||||
function nshc(evPP,nid)
|
||||
write("\f")
|
||||
while true do
|
||||
if ev[1] == "net_msg" then
|
||||
local V,msg=false,tostring(ev[4])
|
||||
if ev[3] == evPP and ev[2] == nid then
|
||||
if msg:sub(1,3) == "dis" then
|
||||
h("display",msg:sub(4))
|
||||
end
|
||||
end
|
||||
elseif ev[1] == "key_down" then
|
||||
ns(nid,evPP,"key"..tostring(ev[3]))
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end
|
||||
|
@ -1,20 +0,0 @@
|
||||
evPP,tEPs="nsh",{}
|
||||
s("netsh daemon",function()
|
||||
while true do
|
||||
if ev[1] == "net_msg" then
|
||||
local V,msg=false,tostring(ev[4])
|
||||
for k,v in ipairs(tEPs) do if ev[2] == v then V=true end end
|
||||
if ev[3] == evPP and V then
|
||||
if msg:sub(1,3) == "key" then
|
||||
h("key_down",ev[2],tonumber(msg:sub(4)),0)
|
||||
end
|
||||
end
|
||||
elseif ev[1] == "display" then
|
||||
for k,v in ipairs(tEPs) do
|
||||
ns(v,evPP,"dis"..tostring(ev[2]))
|
||||
end
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end)
|
||||
|
@ -26,7 +26,7 @@ function ircb(h,p,n) -- host, port
|
||||
if t and f and p and ms then
|
||||
t,f,p,ms = ub64(t),n..":"..ub64(f),ub64(p),ub64(ms)
|
||||
for k,v in ipairs(tM) do
|
||||
v.broadcast(nP,t,f,p,ms)
|
||||
v.broadcast(nVL,nP,t,f,p,ms)
|
||||
end
|
||||
end
|
||||
else
|
||||
|
@ -29,7 +29,7 @@ function ircb(h,p,n) -- host, port
|
||||
if t and f and p and ms then
|
||||
t,f,p,ms = ub64(t),n..":"..ub64(f),ub64(p),ub64(ms)
|
||||
for k,v in ipairs(tM) do
|
||||
v.broadcast(nP,t,f,p,ms)
|
||||
v.broadcast(nVL,nP,t,f,p,ms)
|
||||
end
|
||||
end
|
||||
else
|
||||
|
@ -1,7 +1,13 @@
|
||||
function luash(si)
|
||||
s("lua shell",function()
|
||||
if _OSVERSION and _BD then
|
||||
write(_OSVERSION.." (built at ".._BD..")\t")
|
||||
end
|
||||
print(tostring(computer.freeMemory()/1024).."K free.",_G.motd)
|
||||
print(_VERSION)
|
||||
while true do
|
||||
h("display","> ")
|
||||
write("> ")
|
||||
print(pcall(load(readln())))
|
||||
end
|
||||
end)
|
||||
end,si)
|
||||
end
|
||||
|
30
modules/applications/nshc.lua
Normal file
30
modules/applications/nshc.lua
Normal file
@ -0,0 +1,30 @@
|
||||
function nshc_w(evPP,nid)
|
||||
local sI = E().sI or 1
|
||||
while true do
|
||||
if ev[1] == "net_msg" then
|
||||
local V,msg=false,tostring(ev[4])
|
||||
if ev[3] == evPP and ev[2] == nid then
|
||||
if msg:sub(1,3) == "dis" then
|
||||
write(msg:sub(4))
|
||||
end
|
||||
end
|
||||
elseif ev[1] == "key" and ev[2] == sI and ev[3] == 29 and ev[4] == 27 then
|
||||
break
|
||||
elseif ev[1] == "key" and ev[2] == sI then
|
||||
ns(nid,evPP,"key"..tostring(ev[3]))
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
ns(nid,evPP,"exit")
|
||||
end
|
||||
|
||||
function nshc(P,nid)
|
||||
ns(nid,P,"initnsh")
|
||||
while true do
|
||||
if ev[1] == "net_msg" and ev[2] == nid and ev[3] == P then
|
||||
break
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
nshc_w(ev[4],nid)
|
||||
end
|
37
modules/applications/nshd.lua
Normal file
37
modules/applications/nshd.lua
Normal file
@ -0,0 +1,37 @@
|
||||
function nshd_w(evPP,cA,sI)
|
||||
s("netsh daemon - "..tostring(sI),function()
|
||||
while true do
|
||||
if ev[1] == "net_msg" then
|
||||
local msg=tostring(ev[4])
|
||||
if ev[3] == evPP and ev[2] == cA then
|
||||
if msg:sub(1,3) == "key" then
|
||||
h("key",tT[cT][3].sI,tonumber(msg:sub(4)),0)
|
||||
elseif msg == "exit" then pcall(killsession,sI) break
|
||||
end
|
||||
end
|
||||
elseif ev[1] == "display" and ev[3] == tT[cT][3].sI then
|
||||
ns(cA,evPP,"dis"..tostring(ev[2]))
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end,{["sI"]=sI})
|
||||
end
|
||||
|
||||
function nshd(P)
|
||||
s("nshd",function()
|
||||
local Cc=1
|
||||
while true do
|
||||
if ev[1] == "net_msg" and ev[3] == P then
|
||||
if ev[4] == "initnsh" then
|
||||
nnID="nsh-"..tostring(Cc)
|
||||
Cc=Cc+1
|
||||
ns(ev[2],P,nnID)
|
||||
nshd_w(nnID,ev[2],nnID)
|
||||
luash({["sI"]=nnID})
|
||||
print("[nshd]Spawned "..nnID.." for "..tostring(ev[2]))
|
||||
end
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end,{["sI"]="log"})
|
||||
end
|
10
modules/applications/proc-utils.lua
Normal file
10
modules/applications/proc-utils.lua
Normal file
@ -0,0 +1,10 @@
|
||||
function pkill(P)
|
||||
tT[P] = nil
|
||||
end
|
||||
function killsession(sI)
|
||||
for k,v in ipairs(tT) do
|
||||
if v[3].sI == sI then
|
||||
pkill(k)
|
||||
end
|
||||
end
|
||||
end
|
@ -1,10 +1,12 @@
|
||||
function ps()
|
||||
local S=""
|
||||
for k,v in pairs(tT) do
|
||||
print(v[1])
|
||||
S=S..("pid: "..tostring(k).."\tname: "..tostring(v[1]).."\tenv={")
|
||||
for l,w in pairs(v[3]) do S=S..(tostring(l).." = "..tostring(w)..", ") end
|
||||
S=S.."}\n"
|
||||
end
|
||||
return S
|
||||
end
|
||||
function mem()
|
||||
print("Total: "..tostring(computer.totalMemory()/1024).."K")
|
||||
print("Free: "..tostring(computer.freeMemory()/1024).."K")
|
||||
print("Used: "..tostring((computer.totalMemory()-computer.freeMemory())/1024).."K")
|
||||
return "Total:\t"..tostring(computer.totalMemory()/1024).."K\nFree:\t"..tostring(computer.freeMemory()/1024).."K\nUsed:\t"..tostring((computer.totalMemory()-computer.freeMemory())/1024).."K"
|
||||
end
|
||||
|
68
modules/applications/skex2.lua
Normal file
68
modules/applications/skex2.lua
Normal file
@ -0,0 +1,68 @@
|
||||
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
|
@ -5,7 +5,7 @@ while #tT > 0 do
|
||||
if C.status(v[2])~="dead" then
|
||||
C.resume(v[2],table.unpack(ev))
|
||||
else
|
||||
T.remove(tT,k)
|
||||
tT[k] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,10 +1,14 @@
|
||||
tT,p,C,T={},1,coroutine,table
|
||||
function s(n,f,e)
|
||||
T.insert(tT,{n,C.create(f),(e or {})})
|
||||
tT,p,cT,pC,C,T,TS,TN={},1,1,1,coroutine,table,tostring,tonumber
|
||||
function E()
|
||||
if tT[cT] ~= nil then return tT[cT][3] end
|
||||
end
|
||||
function l()
|
||||
return eV
|
||||
return ev
|
||||
end
|
||||
function h(...)
|
||||
computer.pushSignal(...)
|
||||
end
|
||||
function s(n,f,e)
|
||||
tT[pC]={n,C.create(f),(e or E() or {})}
|
||||
pC=pC+1
|
||||
end
|
||||
|
9
modules/base/loadlin.lua
Normal file
9
modules/base/loadlin.lua
Normal file
@ -0,0 +1,9 @@
|
||||
if pcall(require,"computer") then
|
||||
print("OpenOS detected.")
|
||||
print(os.getenv("_"))
|
||||
local computer = require "computer"
|
||||
local process = require "process"
|
||||
os.execute("cp "..os.getenv("_").." /tmp/init.lua")
|
||||
computer.setBootAddress(computer.tmpAddress())
|
||||
computer.shutdown(true)
|
||||
end
|
8
modules/debug/ocemu-display.lua
Normal file
8
modules/debug/ocemu-display.lua
Normal file
@ -0,0 +1,8 @@
|
||||
s("ocemu display server",function()
|
||||
while true do
|
||||
if ev[1] == "display" then
|
||||
component.invoke(component.list("ocemu")(),"log",ev[2] or "")
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end)
|
11
modules/debug/ocemu-heartbeat.lua
Normal file
11
modules/debug/ocemu-heartbeat.lua
Normal file
@ -0,0 +1,11 @@
|
||||
_G.DEBUG=true
|
||||
s("heartbeat",function()
|
||||
while true do
|
||||
if _G.DEBUG then
|
||||
component.invoke(component.list("ocemu")(),"log","heartbeat:"..tostring(computer.uptime()))
|
||||
component.invoke(component.list("ocemu")(),"log",T.unpack(ev))
|
||||
component.invoke(component.list("ocemu")(),"log","processes:\n"..ps())
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end)
|
10
modules/drivers/kbd.lua
Normal file
10
modules/drivers/kbd.lua
Normal file
@ -0,0 +1,10 @@
|
||||
function kbd(kA,sI)
|
||||
s("kbd: "..kA:sub(1,8)..","..tostring(sI),function()
|
||||
while true do
|
||||
if ev[1] == "key_down" and ev[2] == kA then
|
||||
h("key",sI,ev[3],ev[4])
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end)
|
||||
end
|
35
modules/drivers/tty.lua
Normal file
35
modules/drivers/tty.lua
Normal file
@ -0,0 +1,35 @@
|
||||
function tty(gA,sA,sI,fg,bg)
|
||||
local gP,cx,cy = component.proxy(gA),1,1
|
||||
gP.bind(sA)
|
||||
local sx, sy = gP.getResolution()
|
||||
gP.setResolution(sx,sy)
|
||||
gP.setForeground(bg or 0xFFFFFF)
|
||||
gP.setBackground(bg or 0x000000)
|
||||
gP.fill(1,1,sx,sy," ")
|
||||
local function cv()
|
||||
if cx > sx then cx,cy=1,cy+1 end
|
||||
if cx < 1 then cx,cy=1,cy-1 end
|
||||
if cy < 1 then cx,cy=1,1 end
|
||||
if cy > sy then gP.copy(1,2,sx,sy-1,0,-1) gP.fill(1,sy,sx,1," ") cx,cy=1,sy end
|
||||
end
|
||||
local function wl(str)
|
||||
for c in str:gmatch(".") do
|
||||
if c == "\n" then cx,cy=1,cy+1
|
||||
elseif c == "\r" then cx=1
|
||||
elseif c == "\f" then cx=1 cy=1 gP.fill(1, 1, sx, sy, " ")
|
||||
elseif c == "\t" then cx=(cx+4-((cx+4)%4))+1
|
||||
elseif c == "\127" then cx=cx-1 gP.set(cx,cy," ")
|
||||
else gP.set(cx,cy,c) cx=cx+1
|
||||
end cv()
|
||||
end
|
||||
end
|
||||
s("tty: "..gA:sub(1,8)..","..sA:sub(1,8),function()
|
||||
while true do
|
||||
eT = ev
|
||||
if eT[1] == "display" and eT[3] == sI then
|
||||
wl(tostring(eT[2]))
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end)
|
||||
end
|
6
modules/library/base64-passthrough.lua
Normal file
6
modules/library/base64-passthrough.lua
Normal file
@ -0,0 +1,6 @@
|
||||
function b64(data)
|
||||
return component.invoke(component.list("data")(),"encode64",data)
|
||||
end
|
||||
function ub64(data)
|
||||
return component.invoke(component.list("data")(),"decode64",data)
|
||||
end
|
@ -21,6 +21,14 @@ function fread(h,n)
|
||||
end
|
||||
return false
|
||||
end
|
||||
function freadall(f)
|
||||
local s=""
|
||||
repeat
|
||||
c=fread(f,2048)
|
||||
s=s..c
|
||||
until c==""
|
||||
return s
|
||||
end
|
||||
function fwrite(h,d)
|
||||
if hT[h] then
|
||||
return hT[h][1].write(hT[h][2],d)
|
||||
|
@ -17,14 +17,9 @@ function fmove(i,o)
|
||||
frm(i)
|
||||
end
|
||||
function fload(i)
|
||||
local f,s = fopen(i,"rb"),""
|
||||
local f = fopen(i,"rb")
|
||||
if f then
|
||||
local c=fread(f,math.huge)
|
||||
repeat
|
||||
s=s..c
|
||||
c=fread(f,math.huge)
|
||||
until c == nil
|
||||
load(s)
|
||||
return load(freadall(f))
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
@ -1,4 +1,4 @@
|
||||
tM,nP,nID,nVL = {}, 4096, computer.address(), 1
|
||||
tM,nP,nID,nVL = {}, 4096, computer.address():sub(1,8), 1
|
||||
for a,t in component.list("modem") do
|
||||
table.insert(tM,component.proxy(a))
|
||||
component.proxy(a).open(nVL)
|
||||
|
@ -1,10 +1,10 @@
|
||||
function print(...)
|
||||
for k,v in pairs({...}) do
|
||||
h("display",tostring(v).."\n")
|
||||
end
|
||||
end
|
||||
function write(...)
|
||||
for k,v in pairs({...}) do
|
||||
h("display",tostring(v))
|
||||
h("display",tostring(v),E().sI or 1)
|
||||
end
|
||||
end
|
||||
function print(...)
|
||||
for k,v in pairs({...}) do
|
||||
write(tostring(v).."\n")
|
||||
end
|
||||
end
|
||||
|
19
modules/library/readline.lua
Normal file
19
modules/library/readline.lua
Normal file
@ -0,0 +1,19 @@
|
||||
function readln()
|
||||
local s,si="",E().sI or 1
|
||||
write("|")
|
||||
while true do
|
||||
if ev[1] == "key" and ev[2] == si then
|
||||
if ev[3] == 13 then
|
||||
write("\127\n")
|
||||
C.yield()
|
||||
return s
|
||||
elseif ev[3] == 8 then
|
||||
if s:len()>0 then s=s:sub(1,-2) write("\127\127|") end
|
||||
elseif ev[3] > 31 and ev[3] < 127 then
|
||||
s=s..string.char(ev[3]) write("\127"..string.char(ev[3]).."|")
|
||||
end
|
||||
end
|
||||
C.yield()
|
||||
end
|
||||
end
|
||||
|
2
modules/util/autogpu.lua
Normal file
2
modules/util/autogpu.lua
Normal file
@ -0,0 +1,2 @@
|
||||
tty(component.list("gpu")(),component.list("screen")(),1)
|
||||
kbd(component.list("keyboard")(),1)
|
13
modules/util/sinit.lua
Normal file
13
modules/util/sinit.lua
Normal file
@ -0,0 +1,13 @@
|
||||
s("init",function()
|
||||
local f=fopen("boot:/init.cfg","rb")
|
||||
write("")
|
||||
if f then
|
||||
local c=freadall(f)
|
||||
for l in c:gmatch("[^\n]+") do
|
||||
write("[init] "..l..": ")
|
||||
local pf=fload(l)
|
||||
print(pcall(pf))
|
||||
C.yield()
|
||||
end
|
||||
end
|
||||
end)
|
Loading…
Reference in New Issue
Block a user