OC-Copper/oc/ecomponents/base

45 lines
1.1 KiB
Plaintext

-- I, 20kdc, release this into the public domain.
-- No warranty is provided, implied or otherwise.
-- 'Copper' networking implementation
-- TINY EDITION (This node doesn't do routing.)
-- for EEPROM usage.
-- NOTE: space is considered "explicit", newline isn't. tab is always deleted.
-- Variables:
-- TH (hostname)
-- TX (modem proxy)
-- TC (the string "copper")
-- S (short for 'string')
-- C (short for 'component')
-- Functions:
-- CG: Get Component
-- TN: Decode Name
-- TR: Receive Message handling (returns s/d/m rather than using a callback)
-- TS: Send Message (notably, this has no 'from')
-- TB: The TX.broadcast function
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