Tcl에 표준으로 포함되어 있는 패키지 몇 개를 소개합니다.
- dde - 데이타 교환(윈도우즈 전용)
- http - http 통신
- msgcat - 메세지 카탈로그
- opt - 옵션 해석
- registry - 레지스트리 제어(윈도우즈 전용)
- tcltest - 테스트 유틸리티
http
http 서버와 통신을 할수 있습니다. 프락시 서버를 경유하여 파일을 다운로드할 수 있습니다.
package require http 1.0
if {$argc < 2} {
puts stderr "Usage: $argv0 url file"
exit 1
}
set url [lindex $argv 0]
set file [lindex $argv 1]
set out [open $file w]
proc progress {token total current} {
puts -nonewline "."
}
http_config -proxyhost proxy.foo.co.kr -proxyport 8080
set token [http_get $url -progress progress \
-headers {Pragma no-cache} -channel $out]
close $out
upvar #0 $token state
puts $state(http)
foreach {key value} $state(meta) {
puts "$key: $value"
}
exit 0
msgcat
메세지 카탈로그를 사용하여 영어와 한국어 표시를 전환할 수 있습니다.
# sample.tcl
package require msgcat
namespace import msgcat::*
msgcat::mcload [file join [file dirname [info script]] msg]
set env(LANG) KO
pack [button .b -text [mc "Push Me"]]
# msg/KO.msg
mcset KO "Push Me" "눌러주세요"
registry
윈도우즈의 레지스트리 설정과 값을 얻어올 수 있습니다.
package require registry
set key {HKEY_CURRENT_USER\Software\foo}
registry set $key font {굴림체}
puts [registry get $key font]
dde
Tcl 어플리케이션 사이의 메시지 교환을 할 수 있습니다. 윈도우즈 어플리케이션(Work나 Excel)사이의 조작도 가능합니다.
# server
package require dde
dde servername foo
pack [entry .e -textvariable var]
# client
package require dde
button .b -text Send -command {
dde execute -async TclEval foo {set var Hello!}
}
pack .b
tcltest
테스트를 행하기 위한 유틸리티.툴 입니다.
# alltest.tcl
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest
namespace import ::tcltest::*
}
set ::tcltest::testSingleFile false
set ::tcltest::testsDirectory [file dir [info script]]
foreach file [::tcltest::getMatchingFiles] {
if {[catch {source $file} msg]} {
puts stderr $msg
}
}
::tcltest::cleanupTests 1
Error: No test files remain after applying your match and skip patterns!
a.tcl: Total 0 Passed 0 Skipped 0 Failed 0
Sourced 0 Test Files.