|
我曾經(jīng)學(xué)習(xí)如何設(shè)置UG的后處理器,進入后處理構(gòu)造器后,原來進行設(shè)置時,要用到tcl語言,自己不會但通過搜索網(wǎng)上的教程和程序,也能基本滿足使用要求,但總是心里沒底的感覺。
& Z3 y7 F [9 ?. K' C) X, `' ^6 J原來這個tcl語言是可以學(xué)習(xí)的,有空下載點資料來學(xué)習(xí)一下。
6 S9 Z$ [+ u7 F0 w( f& m/ k& v- Q資料:: g& A& a2 I, g _
TCL語言 Tcl (最早稱為“工具命令語言”"Tool Command Language", 但是目前已經(jīng)不是這個含義,不過我們?nèi)匀环Q呼它為TCL)是一種 腳本語言。 由John Ousterhout創(chuàng)建。 TCL很好學(xué),功能很強大。TCL經(jīng)常被用于 快速原型開發(fā),腳本編程, GUI和測試等方面。 Tcl (最早稱為“工具命令語言”"Tool Command Language", 但是目前已經(jīng)不是這個含義,不過我們?nèi)匀环Q呼它為TCL)是一種 腳本語言。 由John Ousterhout創(chuàng)建。 TCL很好學(xué),功能很強大。TCL經(jīng)常被用于 快速原型開發(fā),腳本編程, GUI和測試等方面。TCL念作“踢叩” "tickle". Tcl的特性包括: * 任何東西都是一條命令,包括語法結(jié)構(gòu)(for, if等)。 * 任何事物都可以重新定義和重載。 * 所有的數(shù)據(jù)類型都可以看作字符串。 * 語法規(guī)則相當(dāng)簡單 * 提供事件驅(qū)動給Socket和文件。基于時間或者用戶定義的事件也可以。 * 動態(tài)的域定義。 * 很容易用C, C++,或者Java擴展。 * 解釋語言,代碼能夠動態(tài)的改變。 * 完全的Unicode支持。 * 平臺無關(guān)。Win32, UNIX, Mac 上都可以跑。 * 和Windows的GUI緊密集成。 Tk * 代碼緊湊,易于維護。 TCL本身不提供面向?qū)ο蟮闹С帧5钦Z言本身很容易擴展到支持面向?qū)ο蟆TS多C語言擴展都提供面向?qū)ο竽芰Γ╔OTcl, Incr Tcl 等。另外SNIT擴展本身就是用TCL寫的。 使用最廣泛的TCL擴展是TK。 TK提供了各種OS平臺下的圖形用戶界面GUI。連強大的Python語言都不單獨提供自己的GUI,而是提供接口適配到TK上。另一個流行的擴展包是Expect. Expect提供了通過終端自動執(zhí)行命令的能力,例如(passwd, ftp, telnet等命令驅(qū)動的外殼). 具體例子 下面是TCL程序的例子: #!/bin/sh # next line restarts using tclsh in path \
) g- t0 n8 f0 E; k" F exec tclsh ${1+"$@"} # echo server that can handle multiple # simultaneous connections.
( r' ^; _. W3 ~* v3 ^* H# X proc newConnection { sock addr port } { # client connections will be handled in # line-buffered, non-blocking mode 7 J* N# x! ~( k
fconfigure $sock -blocking no -buffering line # call handleData when socket is readable
" D1 f( u" f4 T5 T" w) n fileevent $sock readable [ list handleData $sock ] } % C! g: A2 ?6 {9 t
proc handleData {
: r9 x( R1 X9 X& L; E e: Z5 |# u2 X# y puts $sock [ gets $sock ] if { [ eof $sock ] } { close $sock } } 9 i6 P& T" _: g: `
# handle all connections to port given # as argument when server was invoked # by calling newConnection * i: j0 a* \4 ?; F
set port [ lindex $argv 0 ]
; P: l- d9 q' c$ r' D4 L socket -server newConnection $port # enter the event loop by waiting
; G9 T) H& {; [1 E # on a dummy variable that is otherwise # unused. ; F) L7 {( A; E) m( o- @9 E" t
vwait forever
$ r: {! W5 B+ x1 C3 `2 J+ K8 c 另外一個TK的例子 (來自 A simple A/D clock) 它使用了定時器時間,3行就顯示了一個時鐘。
# g2 c& k; t8 ~/ X proc every {ms body} {eval $body; after $ms [info level 0]} pack [label .clock -textvar time] 3 p3 E7 j1 B( |0 e6 j5 r# f
every 1000 {set ::time [clock format [clock sec]
6 C9 K; R6 h( ^: K5 K( O- h/ d-format %H:%M:%S]} # RS
" t) ~/ z+ r% u* ^, K# z 解釋:第一行定義了過程every, 每隔ms毫秒,就重新執(zhí)行body代碼。第二行創(chuàng)建了標(biāo)簽起內(nèi)容由time變量決定。第3行中設(shè)置定時器,time變量從當(dāng)前時間中每秒更新一次。 $ k; x. P. e; r3 E
+ p- X5 p4 W6 g# ~3 u# d
" M0 \0 V1 \4 x/ u' C6 _
6 u2 k t x% @* R6 K( | |
|