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」ボタンを押した場合と同じ動作をするので、これでプログラムを終了させています。