Tcl編 ~その2~
多言語対応でHello, world!
実行環境のデフォルトの言語で挨拶するときは
> c:\activetcl\bin\tclsh.exe hello.tcl
明示的に言語を指定するときは
> c:\activetcl\bin\tclsh.exe hello.tcl ja
以下のように訳文を用意していない言語を指定するとROOT.msgが使われるみたい。
> c:\activetcl\bin\tclsh.exe hello.tcl en
hello.tcl
#-*- mode:tcl; coding:cp932 -*-
package require msgcat
namespace import ::msgcat::mc
::msgcat::mcload [file join [file dirname [info script]] msgs]
lassign $argv locale
if {$locale ne ""} {
::msgcat::mclocale $locale
}
puts [mc MSG1]
msgs/ROOT.msg
#-*- mode:tcl; coding:utf-8 -*-
::msgcat::mcflmset {
MSG1 "Hello, world!"
}
msgs/ja.msg
#-*- mode:tcl; coding:utf-8 -*-
::msgcat::mcflmset {
MSG1 "こんにちは、世界!"
}
プロセス間通信でHello, world!
コマンドプロンプトを2つ開いて、一方で
> c:\activetcl\bin\tclsh.exe hello1.tcl
のようにサーバーを実行し、他方で
> c:\activetcl\bin\tclsh.exe hello2.tcl
のようにクライアントを実行すると、クライアント側にHello, world!が表示される。
TCP
hello1.tcl
proc echo {sock} {
set data [gets $sock]
if {[eof $sock]} {
close $sock
} else {
puts $sock $data
}
}
proc listen {sock host port} {
fconfigure $sock -buffering line -encoding utf-8 -translation crlf
fileevent $sock readable [list echo $sock]
}
socket -server listen 9999
vwait forever
hello2.tcl
set sock [socket localhost 9999]
fconfigure $sock -buffering line -encoding utf-8 -translation crlf
puts $sock "Hello, world!"
puts [gets $sock]
DDE
hello1.tcl
package require dde
set response ""
proc echo {data} {
global response
set response $data
}
dde servername -handle echo -- Echo
vwait forever
hello2.tcl
package require dde
dde execute TclEval Echo "Hello, world!"
puts [dde request TclEval Echo response]