Lua no OpenWrt não vem completa "de fábrica". é preciso instalar (se o espaço de memória permitir) módulos adicionais.
Abaixo, temos a relação das principais que foram necessárias para cada projeto. Aqui cabe dizer que há um grande projeto, que é o
acesso aos leds do roteador turbinado. Desse projeto derivou outro que é o acesso remoto via leds (uma saída não invasiva para controlar o meio externo via MR3020).
(Não está na ordem é que foram instalados)
Luabitop
root@ROOter:~# lua
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio (double int32)
> require "bit"
> a=32
> print (bit.lshift(a,4))
512
Um exemplo muito interessante: calcula quantos números primos existem de 1 a m, onde m pode ser 1.000.000!
local bit = require("bit")
local band, bxor = bit.band, bit.bxor
local rshift, rol = bit.rshift, bit.rol
local m = tonumber(arg and arg[1]) or 1000000
if m < 2 then m = 2 end
local count = 0
local p = {}
for i=0,(m+31)/32 do p[i] = -1 end
for i=2,m do
if band(rshift(p[rshift(i, 5)], i), 1) ~= 0 then
count = count + 1
for j=i+i,m,i do
local jx = rshift(j, 5)
p[jx] = band(p[jx], rol(-2, j))
end
end
end
io.write(string.format("Found %d primes up to %d\n", count, m))
Nixio
(Obs: nixio é muito importante e há diversos módulos )
> require "nixio"
> a=nixio.uname()
> print (a)
table: 0x9171c8
> a=32
> print (nixio.bit.rshift(a,4))
2
> a=256
> print (nixio.bit.rshift(a,4))
16
> print (nixio.bit.lshift(a,2)
>> ^C