calc.tcl

簡単な電卓を作ってみました.



以下がソースです.

entry .e -relief sunken -textvariable v
frame .f -height 120 -width 120
pack .e .f -side top -fill x
set i 0
set v 0
set r 0.25
set ini 1
foreach n {7 8 9 * 4 5 6 / 1 2 3 - 0 + = C} {
  if {[string match {[0-9]*} $n]} {
    button .f.b$n -text "$n" -command "num $n"
  } elseif {$n == "="} {
    button .f.b= -text "="
  } elseif {$n == "C"} {
    button .f.bC -text "C" -command "set v 0;set ini 1"
  } else {
    button .f.b$n -text "$n" -command ".e insert end $n;set ini 0"
  }
  place .f.b$n -relx [expr ($i%4)*$r] -rely [expr ($i/4)*$r] -relw $r -relh $r
  incr i
}

bind .f.b= <1> { set v [expr $v];set ini 1}

proc num n {
  global ini v
  if {$ini} {
    set v $n
  } else {
    set v $v$n
  }
  set ini 0
}

proc tkerror err {
  global v
  set v 0
  tk_dialog .err "calc" $err warning 0 OK
}

calc.tcl

これじゃ,Tcl/Tk そのままだな.
現に上のソースを wish に渡すと動いてしまいます。


それだけじゃつまらないので、ちょっと JavaScript を使って、電卓を独立させてみます。Netscape Navigator 3.0 を使っている場合のみ、ここをクリックしてください。別なウィンドウが開いて、そこに電卓を置けました。これで他のページに行っても、いつでも計算できます(笑)。
この JavaScript は、 上田学さんの 「独学 JavaScript」 で教えてもらいました。