hakeの日記

Windows環境でプログラミングの勉強をしています。

qshdlg その3

qshdlg 3日目、簡単な電卓を作成しました。といっても整数の加減算しかできないへタレ電卓ですが(汗
乗除算も試したのですが上手くいきませんでした、ターミナル上の計算では上手くいくのですが、何故だろう?


qshdlg_smpl3というファイルを作って、アイコン登録
起動すると画面下に「1」〜「0」、「+」「-」「=」「Exit」ボタンが出来るので計算ができます、終了は「Exit」ボタン

#!/bin/sh

export QSHDLG_APP=qshdlg_smpl3

INPUT=/var/spool/qshdlg/input_$QSHDLG_APP
OUTPUT=/var/spool/qshdlg/output_$QSHDLG_APP
CONTROL=/var/spool/qshdlg/control_$QSHDLG_APP

qshdlg reply -v "1,2,3,4,5,6,7,8,9,0,+,-,=,Exit" -A -f lcfont -t "sample3" -c eucJP -M &

while [ ! -p $CONTROL ]
do
done

echo "メッセージを表示します" > $OUTPUT
echo 'hideDefault()' > $CONTROL

VALUE=0
STR=""

while read RET < $INPUT
do
  case $RET in
    Exit)
        echo 'reject()' > $CONTROL
        ;;
    =)
        VALUE=`expr $STR`
        STR="$VALUE"
        echo $VALUE > $OUTPUT
        ;;
    +)
        STR="$STR $RET "
        echo $STR > $OUTPUT
        ;;
    -)
        STR="$STR $RET "
        echo $STR > $OUTPUT
        ;;
    *)                     # push number(1-0)button
        STR="${STR}${RET}"
        echo $STR > $OUTPUT
        ;;
  esac
done
qshdlg reply -v "1,2,3,4,5,6,7,8,9,0,+,-,=,Exit" -A -f lcfont -t "sample3" -c eucJP -M &

今回はボタンで入力を行うので、qshdlgはreplyモード?で起動します。オプションの-v で表示させるボタンのラベルと値を指定しています。もしラベルと値が異なる場合は-l オプションでラベル名を指定します。




標準で表示される「OK」「Cancel」ボタンは今回は必要ないので

echo 'hideDefault()' > $CONTROL

で表示させなくしています、これはqshdlg起動時に-n オプションを指定することでも可能です。




押されたボタンの値は$INPUTから返されるので、もし数字ボタンと「+」「-」の場合は$STRに数式として追加させて、「=」の場合はexpr コマンドでその数式を評価して値を計算させます。
「Exit」ボタンが押された場合は

echo 'reject()' > $CONTROL

を実行、「Cansel」ボタンを押した場合と同じ動作をするので、これでプログラムを終了させています。