in last 10 minutes
Tutorial j. Tcl na potrzeby zajęć ALR
dokumentacja:
Tcl/Tk man,
spis komend,
tematyczny Tcl man/
Tk man,
docs 1,
docs 2,
wiki,
devel,
konf
książki/opisy:
tutorial,
sop121/E,
krótki tut. ALR,
12 zasad,
spis tut.,
-2-,
-3-,
-4-,
-5-,
-6-,
-7-,
-8-;
GUI w Tk: TkDocs,
-1-,
-2-
dokumentacje pakietów:
dict,
http,
tls,
tcllib,
tklib,
tdom,
udp,
Thread,
java,
TclX,
expect,
blt,
snack,
vfs;
OOP:
Itcl,
snit/faq,
XOTcl,
TclOO/book,
nx+nsf
inne dokumentacje: dbms:
sqlite
(sql),
metakit;
ser. www:
tclhttpd,
NaviSer,
wapp,
wibble (src);
checker: nagelfar
interpretery tclkit j. Tcl v8.4:
win32 tclkit.exe,
lin32 tclkit,
lin32 tclkit_2,
dodatkowy folder
tclkit_2 zawiera b. wiele pkg... np. tls, udp, sqlite, tcllib, tklib, ...
interpretery tclkit j. Tcl v8.6:
lin32 tclkit8.6b1,
lin32 tclkit8.6.9,
lin64 tclkit8.6.3,
win64 tclkit8.6.3.exe
tcl v8.6: używa nowych fontów pod lin, posiada cmd dict oraz pkg: Thread, TDBC, Itcl, TclOO, ...
interpretery vanilla j. Tcl v8.6 dla wielu platform
są tutaj,
lin32 vanillatclsh
30MB, zip, zawierają b. dużo pkg, m.in. tcllib
biblioteka tcllib (tcllib.tar.gz) zawiera przydatne, czysto-skryptowe pakiety Tcl-a
ulepszona konsola konsola2c.tcl, uruchamiać: ./tclkit konsola2c.tcl; pamiętać o "chmod u+x tclkit" na linux-ie
klawisze w konsoli:
ctrl+enter = uruchomienie zaznaczonego kodu lub kodu w linii, w której jest kursor;
shift+ins = Paste; ctrl+ins = Copy; ctrl+o = Open; ctrl+s = Save; ctrl+z = UnDo
urządzenia mobilne: Tcl/Tk dla Androida - androwish.org (cmd: borg, sdltk; lista pkg)
# eksperymenty z Tcl-em w konsoli...
#
wygodnie jest uzywac konsoli konsola2c.tcl
uruchamiac tak (linux):
./tclkit konsola2c.tcl
lub:
./tclkit konsola2c.tcl mojskrypt.tcl
uwaga - prawo wykonania mozna nadać tak: chmod u+x tclkit
specjalne klawisze konsoli2c:
Ctrl+Enter - uruchomienie zaznaczonego kodu
lub kodu w linii, w której jest kursor,
Ctrl+O Open - wczytuje plik zrodlowy do konsoli w miejsce kursora,
Ctrl+S Save,
Ctrl+Z UnDo
specjalne komendy konsoli2c:
_puts tekst - wyswietla tekst w oknie "output"
kons_font liczba - zmienia rozmiar czcionki konsoli (liczba to np. 15)
# komentarze
#
# tekst ...
kod tclowy; # tekst ...
Uwaga na ";" przed "#" !!!
# zmienne, wyrazenia
#
set x1 1
set x2 2
set x3 [expr {$x1+$x2}]
# wynik: 3, tak sie oblicza wyrazenia arytmetyczne
set x3a $x1+$x2
# wynik: 1+2, bo to nie dodawanie tylko string!!
# substytucje zmiennych $zm i komend [kod] oraz cytowanie
#
set z1 "$x1+$x2=$x3"
# wynik: 1+2=3
set z2 {$x1+$x2=$x3}
# wynik: $x1+$x2=$x3 bo nawiasy klamrowe "silnie cytuja"
set z3 "$x1, $x2, [expr {$x1+$x2}]"
# nawiasy kwadratowe to tzw substytucja komend
# wynik: 1, 2, 3
# instrukcje sterujace
#
if {$x<=15} {
_puts "$x jest mniejsze od 15"
} else {
_puts "$x jest mniejsze od 15"
}
# Uwaga: KONIECZNIE uzywac { } dokladnie tak jak w tych przykadach,
# tj nie mozna przenosic { do nastepnej linii !!!
# if jest bowiem zwykla komenda ktorej parametrami sa stringi z kodem,
# a komendy pisze sie w 1 linii (znak \n jest ukryty w {...})
set i 1
while {$i<10} {
_puts "i=$i"
set i [expr {$i+1}]
# lub po prostu: incr i
}
for {set i 0} {$i<5} {incr i} {_puts $i}
foreach x {qqq www eee} {_puts $x}
# procedury
#
# definicja procedury
proc mojaproc {a b} {
global c; # deklaracja zm. globalnej
return "$a,$b,$c"
}
set c 123; # zmienna globalna
# wywołanie procedury
mojaproc 11 22
# wynik: 11,22,123
# procedura tworząca zmienną o nazwie podanej przez arg
#
proc utworzZm {nazwa} {
upvar $nazwa x
set x 123
return ""
}
utworzZm a
# po wykonaniu tej proc istnieje zm. "a" o wartości 123
# operacje na stringach (komenda string)
#
set x "12345"
set y [string range $x 2 end-1]
# wynik: 34
# operacje na listach (komendy l*, np. list, lrange, lset, lindex, lappend)
# + listy mogą być dowolnie zagnieżdżone!
#
set q {1 2 3 4}
lindex $q 2
# wynik: 3
set q1 [lrange $q 2 3]
# wynik: 3 4
lset q 2 33
# efekt dzialania: $q == "1 2 33 4"
lappend q 5
# wynik: 1 2 33 4 5
# operacje na słownikach (komenda dict)
# + słowniki mogą być dowolnie zagnieżdżone!
#
set d1 {a 111 b 222}
# wynik: a 111 b 222
dict get $d1 a
# wynik: 111
dict set d1 c 333
# wynik: a 111 b 222 c 333
# jak "zdjąć" z listy pierwszy element ?
#
set li1 {1 2 3}
set x [lindex $li1 0]
# wynik: 1; pierwszy element jest w zm. "x"
set li1 [lreplace $li1 0 0]
# wynik: 2 3; zastąpiliśmy pierwszy elem. niczym