Uma boa função em Prisma é a es.pabra() que chama um programa externo capturando sua saída. Aproveitando isso criei um simples script que monitora a bateria, mostrando uma mensagem quando estiver descarregando.
Segue o código para análise, bons estudos. Qualquer dúvida posta nos comentários!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
/* * 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(); |
Por enquanto é isso, até mais!