/*
* Monitor de bateria simples em Prisma usando es.pabra() com o programa upower (linux);
* e xmessage para a mensagem.
*/
//Sem licença (use como bem entender - o autor não será responsabilizado!)
//2017 - 12 Adalberto Amorim Felipe
// linguagemprisma@gmail.com
//Biblioteca para permitir o uso de acentos e alguns caracteres especiais no cmd e gui do windows.
//Não converte todos os tipos de utf8, basico pt-br
//estou criando em C uma biblioteca mais completa para esta funcionalidade.
//ATENÇÃO este arquivo deverá ser salvo no formato utf8
funcao parse(s)
local tmp;
a = s:analise('\n');
local info = {};
para i,v em pares(a) inicio
se v <> '\n' entao
tmp = v:analise(':');
se tipo(tmp)=='tabela' entao
se tmp[1] e tmp[3] entao
info[tmp[1]:apare()] = tmp[3]:apare();
fim
fim
fim
// -- imprima(i,v);
fim
retorne info;
fim//fim funcao
local term = inclua'terminal';
local funcao mensagem(titulo,txt, ...)
local botoes = {...};
local bts = '';
para i,v em ipares(botoes) inicio
bts = bts .. '"' .. v .. '",'
fim
bts = bts:corte(1,-2);
local cmd = 'xmessage -title ' .. titulo .. ' "' .. txt .. '" -center -buttons ' .. bts .. ' "$@" "" ;'
// imprima(cmd);
local ret,_,num = sis.execute(cmd);
se num entao retorne convnumero(num); senao retorne falso; fim
fim
local cmd = 'upower -i /org/freedesktop/UPower/devices/battery_BAT0';
local a;
local cont = 1;
local info;
enquanto 1 inicio
term.defCorletra(term.verde);
a, err = es.pabra(cmd);
se a entao
info = a:leia'*t';
a:feche();
info = parse(info);
se info.present == 'yes' entao info.present = verdadeiro;
senao
info.present = falso;
fim
imprima('bateria presente?',info.present);
se info.state == 'charging' entao info.state = 'carregando';
senaose info.state=='discharging' entao info.state='descarregando';
fim
imprima('Estado:', (info.state:troque('charging','carregando')));
imprima('Porcentagem:',info.percentage);
local perc = convnumero(info.percentage:corte(1,info.percentage:procure('%%') -1 ));
// imprima(perc);
se perc < 13 e info.state == 'descarregando' entao
local aviso = string.formate('Bateria em estado critico, conecte o carregador agora!\n\ndescarregando: %0.2f%%',perc);
imprima('Aviso::',aviso);
mensagem("Aviso", aviso, ' ok ');
fim
senao
imprima('Erro', err);
fim
sis.durma(1000);
//term.limpeTela();
term.cursorInicio();
local alt,larg = term.tamanho();
para i = 1,alt inicio
es.escreva((' '):nconcat(larg));
fim
term.cursorInicio();
imprima('------['..cont..']------');
cont=cont+1;
fim
term.defPadrao();