[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Calculadora em linha de comando transparete
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] Calculadora em linha de comando transparete |
Date: |
Tue, 26 Jun 2012 19:02:35 -0300 |
Eu estou totalmente desbundado com o yad. Fiz uma calculadora com uma
apresentação excelente, de forma extremamente simples e usando umas 5 ou 6
linhas (uma linha, a que desenha a calculadora, é muito grande) em 2 prgs.
Veja os 2 a seguir:
$ cat calc.yad
> ~/.mem # Será usado como memória
trap 'rm ~/.mem; exit' 0 2 3 15
yad --form --columns 8 --title "Calculadora YAD + Bash + bc" \
--field='' '' --field :LBL '' --field :RO 'Casas \
decimais' --field 'Decimais!Ajusta a precisão do cálculo':BTN\
"@calc.sh '' PR" \
--field=7:BTN "@echo 1:%1\7" \
--field=4:BTN "@echo 1:%1\4" \
--field=1:BTN "@echo 1:%1\1" \
--field=,:BTN "@echo 1:%1\," \
--field=8:BTN "@echo 1:%1\8" \
--field=5:BTN "@echo 1:%1\5" \
--field=2:BTN "@echo 1:%1\2" \
--field=0:BTN "@echo 1:%1\0" \
--field=9:BTN "@echo 1:%1\9" \
--field=6:BTN "@echo 1:%1\6" \
--field=3:BTN "@echo 1:%1\3" \
--field '!Enche linguiça':BTN '' \
--field=+:BTN "@echo 1:%1\+" \
--field=×:BTN "@echo 1:%1\x" \
--field='⎷⎺!Raiz Quadrada':BTN '@./calc.sh '%1' RQ %3' \
--field='±!Troca sinal':BTN "@./calc.sh '%1' +-" \
--field=-:BTN "@echo 1:%1\-" \
--field=÷:BTN "@echo 1:%1\/" \
--field='xⁿ!Potenciação':BTN "@echo 1:%1\^" \
--field='1/x!Inverte':BTN '@./calc.sh '%1' 1X %3' \
--field==:BTN '@./calc.sh '%1' = %3' \
--field=\(:BTN "@echo 1:%1\(" \
--field='CL!Limpa':BTN "@echo 1:" \
--field='MC!Limpa memória':BTN "@./calc.sh '' MC" \
--field=\⬅:BTN "@./calc.sh %1 AP" \
--field=\):BTN "@echo 1:%1\)" \
--field='M+!Adiciona à memória':BTN "@./calc.sh '%1' M+ %3" \
--field='MR!Trás conteúdo da memória':BTN "@./calc.sh '%1' MR" \
--width 500 --no-buttons
======================================================
$ cat calc.sh
#!/bin/bash
Prec=$(expr $3 + 0 2> /dev/null) || Prec=0
case $2 in
=) Conta=$(tr 'x,' '*.' <<< "$1")
echo 1:$(echo "scale=$Prec; $Conta" | bc | tr . ,) ;;
RQ) Conta=$(tr 'x,' '*.' <<< "$1")
echo 1:$(echo "scale=$Prec; sqrt ($Conta)" | bc | tr . ,) ;;
1X) Conta=$(tr 'x,' '*.' <<< "$1")
echo 1:$(echo "scale=$Prec; 1/($Conta)" | bc | tr . ,) ;;
M+) Num=$([ -s ~/.mem ] && cat ~/.mem || echo 0)
Conta=$(tr , . <<< "$1")
bc <<< "$Conta + $Num" > ~/.mem ;;
MR) echo 1:$(cat ~/.mem) ;;
MC) > ~/.mem ;;
AP) echo 1:${1%?} ;;
PR) IFS='|' read lx lx Dec lx <<< "$(yad --form --columns 4 --title
"Decimais" \
--field "\tInforme precisão":LBL '' --field "\tentre 0 e 9
decimais":LBL '' --field '' '' --field :LBL '' \
--field 1:BTN '@echo 3:1' --field 4:BTN '@echo 3:4' --field
7:BTN '@echo 3:7' --field :BTN '' \
--field 2:BTN '@echo 3:2' --field 5:BTN '@echo 3:5' --field
8:BTN '@echo 3:8' --field 0:BTN '@echo 3:0' \
--field 3:BTN '@echo 3:3' --field 6:BTN '@echo 3:6' --field
9:BTN '@echo 3:9' --field :BTN '' --button OK)"
echo 3:$Dec ;;
+-) Conta=$(tr , . <<< "$1")
echo 1:$(echo "-1 * $Conta" | bc | tr . ,) ;;
*) echo 1:$1
esac
Se alguém quiser postar em um site desses, pode postar que eu corrijo, mas
eu mesmo não ponho por falta de tempo.
Abcs,
Julio
*
*
Em 26 de junho de 2012 17:45, Elder Marco <address@hidden> escreveu:
> **
>
>
> Em 25 de junho de 2012 13:32, Sérgio <address@hidden> escreveu:
>
> > **
> >
> >
> > Neste link[1] postei um script para tornar o uso do comando bc
> > transparente, gostaria da opinião de todos os que puderem para melhorar o
> > script. A proposta é criar um wrapper, ou seja um script que pegue os
> > parâmetros fornecidos pelo usuário e retorne os calculos pedidos.
> >
> > 1 - http://va.mu/WJEs
> >
> > Bastante útil mesmo. Gostei. No entanto, no lugar de usar o printf eu
> utilizaria a opção "scale = $decimal" do bc para definir o número de casas
> decimais. O motivo é que o printf pode falhar, já que o separador decimal
> pode mudar de um computador para outro. Ou então, alterar a variável
> de ambiente correspondente antes de chamar ele, de forma que este considere
> somente o '.' como separador decimal.
> Eu alterei o trecho, tirando o printf e deixando assim:
>
> while test -n "$1"; do
> case ${1,,} in # ${var,,} lowcase var content
> "-h" | "--help" | "") usage
> ;;
>
> "-p" | "--precision") [ $# -gt 2 ] && decimal=$2 && shift 2 ||
> usage
> ;;
>
> *) echo "scale=$decimal; $@" | bc && exit 0
> ;;
> esac
> done
>
> --
> Elder Marco
>
> GNU/Linux User: #471180
>
> "Contra o positivismo, que pára perante os fenômenos e diz: 'Há apenas
> fatos', eu digo: 'Ao contrário, fatos é o que não há; há apenas
> interpretações'. "(Nietzsche)
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
[As partes desta mensagem que não continham texto foram removidas]