shell-script-pt
[Top][All Lists]
Advanced

[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]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]