본문으로 바로가기

Tcl의 패키지

category 카테고리 없음 2024. 4. 12. 15:02

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.