From effb6459a5febbe1619ff18c338a6a51fba5cfbc Mon Sep 17 00:00:00 2001 From: 20kdc Date: Tue, 4 Apr 2017 17:41:52 +0100 Subject: [PATCH] Make the network stack slightly smaller and add a generated "just the network stack" output file. --- oc/Makefile | 7 ++++-- oc/basestack.lua | 51 ++++++++++++++++++++++++++++++++++++++++++++ oc/ecomponents/relib | 45 ++++++++++++++++++-------------------- oc/uc-rsctl.lua | 26 ++++++++++------------ 4 files changed, 88 insertions(+), 41 deletions(-) create mode 100644 oc/basestack.lua diff --git a/oc/Makefile b/oc/Makefile index 8c6eda5..b513363 100644 --- a/oc/Makefile +++ b/oc/Makefile @@ -1,7 +1,10 @@ -all: uc-rsctl.lua +all: uc-rsctl.lua basestack.lua uc-rsctl.lua: postprocess.lua ecomponents/base ecomponents/relib ecomponents/app-rsctrl cat ecomponents/base ecomponents/relib ecomponents/app-rsctrl | lua postprocess.lua > uc-rsctl.lua +basestack.lua: postprocess.lua ecomponents/base ecomponents/relib + cat ecomponents/base ecomponents/relib | lua postprocess.lua > basestack.lua + clean: .PHONY - rm -f uc-rsctl.lua + rm -f uc-rsctl.lua basestack.lua diff --git a/oc/basestack.lua b/oc/basestack.lua new file mode 100644 index 0000000..43170ec --- /dev/null +++ b/oc/basestack.lua @@ -0,0 +1,51 @@ +S,C,TC=string,component,"copper" +function CG(n)return C.proxy(C.list(n)())end +TH,TX=CG("eeprom").getLabel(),CG("modem")TX.open(4957)TB=TX.broadcast +function TN(m)if#m<2then return end +local n,t=m:byte(1)+2t=m:sub(n+1)if#t>=n then return m:sub(2,n),m:sub(n+1)end +end +function TR(m)local h,s,m,d=m:byte(),TN(m:sub(2))if s then +d,m=TN(m)if d then +return s,d,m +end +end +end +function TS(d,m)TB(4957,TC,S.char(0,#TH-1)..TH..S.char(#d-1)..d..m)end +R1,R2,R3,R4=0x40,60,12,2.5 +RT,RA,RN,RU,R,X={},{},{},computer.uptime,math.random,255 +RP,RK,RF=function(f,x)if#RTi do +if t>RT[i][2]then +table.remove(RT,i)[1]()else +i=i+1 +end +end +end +function RC(r,f,t,d)if d and#d>=7then +local p,b,g,k=d:byte(2)+(d:byte(1)*X),d:byte(7),d:sub(1,5)if b==0x01or b==0x00then +k=t..g +if not RA[k] then +r(f,t,p,d:sub(8))else +RK(RA[k])end +RA[k]=RP(function()RA[k]=nil end,R2)if not(b~=0x01or t~=TH)then +TS(f,d:sub(1,6).."\x02")end +end +k=f..g +if b==0x02 and RN[k]then +RK(RN[k])RN[k]=nil +end +end +end +function RS(t,p,d)local g,a,j,x=S.char(p>>8,p%X,R(X)-1,R(X)-1,R(X)-1),-1 +j=function()a=a+1 +x=nil +if a~=R3 then +TS(t,g..S.char(a,1)..d)x=RP(j,R4)end +RN[t..g]=x +end j()end \ No newline at end of file diff --git a/oc/ecomponents/relib b/oc/ecomponents/relib index 249083a..367c768 100644 --- a/oc/ecomponents/relib +++ b/oc/ecomponents/relib @@ -18,31 +18,45 @@ -- RK: Kill timer. -- RC: Message receive raw. -- RF: Refresh system. --- RG: Generate 1 random char (as a number) +-- R: math.random -- RS: Send message. R1,R2,R3,R4=0x40,60,12,2.5 -RT,RA,RN,RU={},{},{},computer.uptime -function RP(f,x) + +-- It is shorter to have this (R) than not have it or localize it. *sigh* + +RT,RA,RN,RU,R,X={},{},{},computer.uptime,math.random,255 + +-- Add timer. Kill timer. +-- Refresh function to clean up & execute timers. +RP,RK,RF=function(f,x) if#RTi do + if t>RT[i][2]then + table.remove(RT,i)[1]() + else + i=i+1 + end + end end function RC(r,f,t,d) if d and#d>=7then -- Keep in mind the ID used by tables is (originalPacketToName..GID) -- ',k' unspecified value "trick" - local p,b,g,k=d:byte(2)+(d:byte(1)*256),d:byte(7),d:sub(1,5) + local p,b,g,k=d:byte(2)+(d:byte(1)*X),d:byte(7),d:sub(1,5) if b==0x01or b==0x00then k=t..g @@ -67,26 +81,9 @@ function RC(r,f,t,d) end end --- Refresh function to clean up & execute timers. -function RF() - local i,t=1,RU() - while#RT>i do - if t>RT[i][2]then - table.remove(RT,i)[1]() - else - i=i+1 - end - end -end - --- It is shorter to have this than not have it or localize it. *sigh* -function RG() - return math.random(256)-1 -end - function RS(t,p,d) -- j,x unspecified. x is used in j. - local g,a,j,x=S.char(math.floor(p/256),p%256,RG(),RG(),RG()),-1 + local g,a,j,x=S.char(p>>8,p%X,R(X)-1,R(X)-1,R(X)-1),-1 j=function() a=a+1 x=nil diff --git a/oc/uc-rsctl.lua b/oc/uc-rsctl.lua index 21158fa..6ca6c4b 100644 --- a/oc/uc-rsctl.lua +++ b/oc/uc-rsctl.lua @@ -12,18 +12,23 @@ end end function TS(d,m)TB(4957,TC,S.char(0,#TH-1)..TH..S.char(#d-1)..d..m)end R1,R2,R3,R4=0x40,60,12,2.5 -RT,RA,RN,RU={},{},{},computer.uptime -function RP(f,x)if#RTi do +if t>RT[i][2]then +table.remove(RT,i)[1]()else +i=i+1 +end +end end function RC(r,f,t,d)if d and#d>=7then -local p,b,g,k=d:byte(2)+(d:byte(1)*256),d:byte(7),d:sub(1,5)if b==0x01or b==0x00then +local p,b,g,k=d:byte(2)+(d:byte(1)*X),d:byte(7),d:sub(1,5)if b==0x01or b==0x00then k=t..g if not RA[k] then r(f,t,p,d:sub(8))else @@ -37,16 +42,7 @@ RK(RN[k])RN[k]=nil end end end -function RF()local i,t=1,RU()while#RT>i do -if t>RT[i][2]then -table.remove(RT,i)[1]()else -i=i+1 -end -end -end -function RG()return math.random(256)-1 -end -function RS(t,p,d)local g,a,j,x=S.char(math.floor(p/256),p%256,RG(),RG(),RG()),-1 +function RS(t,p,d)local g,a,j,x=S.char(p>>8,p%X,R(X)-1,R(X)-1,R(X)-1),-1 j=function()a=a+1 x=nil if a~=R3 then