Title: Programming Using TclTk
1Programming Using Tcl/Tk
- Dr. Ernest J. Friedman-Hill
- ejfried_at_herzberg.ca.sandia.gov
- http//herzberg.ca.sandia.gov/
2- Programming productivity may be increased as
much as five times when a suitable high-level
language is used. - F.P.Brooks, The Mythical Man-Month
- representation is important, because how
information is represented can greatly affect how
easy it is do do different things with it. - David Marr, Vision
3Your Instructor
- SMTS in Scientific Computing at Sandia National
Labs - Writing Tcl code since Fall 1994
- Ph.D. in Chemistry, MIT 1992
- Using Tcl/Tk for systems integration, automated
test, distributed computing - Wrote XCELL Design Environment
- Friedman-Hill, E.J. and J.M. OConnor, The XCELL
Integrated Product Realization Environment A
Toolbox for Agile Construction of Custom
Parametric Design Software, Proceedings of the
1996 Agility Forum National Meeting, Boston, MA.
4What youll need
- A computer with WWW FTP access
- (UNIX preferred Win95, Win3.1 PC or Mac OK)
- Netscape Navigator (if available) for Tclets
- A Tcl/Tk installation
- http//www.sunlabs.com/research/tcl/install.html
- Binaries and source
- Textbook
- Ousterhouts Tcl and the Tk Toolkit
- (Addison-Wesley, ISBN 0-201-63337-X)
- Other reading material
- Up-to-date man pages Tk4.0 Porting document
5Other References
- Exploring Expect, Don Libes (O'Reilly, ISBN
1-56592-090-2) - Recommended reading.
- Practical Programming in Tcl and Tk, Brent Welch
(Prentice Hall, ISBN 0-13-182007-9) - Lots of examples. Comes with a source disk.
- http//www.sunlabs.com/research/tcl/
- Tcl/Tk home page. Source, docs, info.
- http//www.sunlabs.com/research/tcl/plugin/
- Home page for the new Navigator plug-in
6Who you are
- Write on a piece of paper
- Your name
- What you do
- What you want to do with Tcl/Tk
- What other computer languages you know
- Anything youd especially like to see covered
7What Ill do
- Today give an overview of the Tcl language
- Next four weeks
- Using the Tcl language
- GUI development with Tk
- Important Tcl extensions like expect
- Integrating Tcl/Tk with C and C applications
- Writing Tclets for the WWW
- Put course notes on the Web
- http//herzberg.ca.sandia.gov/TclCourse/
- PowerPoint format only (sorry)
8What youll do
- Complete several small problem sets
- Coding problems and questions
- Complete a term programming project
- You should choose a small application that fills
a real need or solves a real problem - Examples GUI for a command-line utility task
automation a game or puzzle - Briefly present your project at the last meeting
- Ask questions
- Participation in class or via email is expected
9Grading System
- Grade
- 40 Homework
- 40 Project
- 20 Participation
- Scores (None), OK, Good, Excellent
- Grading on a Curve. Mode is B.
10 Overview of Tcl/Tk
- Component technologies
- Tcl embeddable scripting language
- Tk GUI toolkit and widgets based on Tcl.
- The principle universal scripting language
controls everything functions, interfaces,
communication. - Results
- Raise the level of GUI programming simpler,
5-10x faster application development than X, raw
Win32 - Greater power programmable applications work
together cross-platform delivery - Active objects replace data with scripts.
11Outline
- Tcl scripting language.
- Tk toolkit.
- Tk applications.
- Survey of applications and extensions.
- Conclusions.
12Tcl Tool Command Language
- Interactive programs need command languages
- Typically redone for each application.
- Result weak, quirky.
- emacs and csh powerful, but can't reuse.
- Solution reusable scripting language.
- Interpreter is a C library.
- Provides basic features variables, procedures,
etc. - Applications extend with additional features.
13Scripting Language Philosophy
- Large, complex applications
- Performance important.
- Need structure.
- Goal prevent bad things.
- Interactive commands, scripting
- Performance less important.
- Minimum structure less overhead, easy
interchange. - Goal enable good things.
One language can't meet all needs?
14Two-Language Approach
Program size, complexity, reuse
1
C
Tcl
- Use Tcl for scripting, C or C for large things.
- Goals for Tcl
- Minimal syntax easy to learn and type.
- Minimal structure make things play together.
- Simple interfaces to C extensibility.
15Tcl Tool Command Language
- Simple syntax (similar to sh, C, Lisp)
- set a 47 ? 47
- Substitutions
- set b a ? 47
- set b expr a10 ? 57
- Quoting
- set b "a is a" ? a is 47
- set b expr a10 ? expr a10
16More On The Tcl Language
- Rich set of built-in commands
- Variables, associative arrays, lists.
- C-like expressions.
- Conditionals, looping
- if "x lt 3"
- puts "x is too small"
-
- Procedures.
- Access to files, subprocesses, network sockets
17More On The Tcl Language
- Only data representation is zero-terminated
strings - Easy access from C.
- Programs and data interchangeable.
- set cmd1 "exec notepad"
- ...
- eval cmd1
- (notepad.exe launches under Windows)
-
- Unfortunately, no 8-bit data
18Factorial Procedure
- Defining and using procedures is easy!
- proc fac x
- if xlt1 return 1
- expr xfac expr x-1
-
- fac 4 ? 24
19Embedding Tcl In Applications
- Application generates scripts.
- Tcl parses scripts, passes words to command
procedures. - Application extends built-in command set
- Define new object types in C.
- Implement primitive operations as new Tcl
commands. - Build complex features with Tcl scripts.
Tcl
Application
Init
Command Loop
Parser
Application Commands
Built-In Commands
- Note that the command loop can also be in the
Tcl/Tk box.
20Extensions
Tcl
Application
Extension
Init
Command Loop
Parser
Application Commands
Built-In Commands
Extension Commands
- Extensions can be developed independently
- Network communication, database access, security,
... - Applications can include combinations of
extensions.
21The Tk Toolkit
- The problem
- Too hard to build applications with nice user
interfaces. - Even harder to do so cross-platform
- The wrong solution
- C, object-oriented toolkits, Javas AWT
- Only small improvement (10-20?) must
stillprogram at a low level. - The right solution
- Raise the level of programming.
- Create interfaces by writing Tcl scripts.
22Creating User Interfaces With Tk
- Additional Tcl commands
- Create Motif-like widgets (on all platforms)
- Arrange widgets.
- Bind events to Tcl commands.
- Manipulate selection, focus, window manager, etc.
- Library of C procedures
- Create new widget classes.
- Create new geometry managers.
23What's A Tk-Based Application?
- The Tcl interpreter.
- The Tk toolkit.
- Optionally, application-specific C code
(primitives) - New commands.
- New widgets.
- Tcl scripts (compose primitives into actions)
- Build user interface.
- Respond to events.
Tcl commands
24Wish Windowing Shell
- Create user interfaces by writing Tcl scripts.
- Hello, world
- button .hello -text "Hello, world" -command exit
- pack .hello
- Simple directory browser 30 lines
- Web browser 2000 lines
- 10x less code for simple things.
25Browser Wish Script
- !/usr/local/bin/wish4.0
- listbox .list -yscroll ".scroll set" \
- -width 20 -height 20
- pack .list -side left
- scrollbar .scroll -command \
- ".list yview"
- pack .scroll -side right -fill y
- wm title . "File Browser"
- if argc gt 0
- set dir lindex argv 0
- else
- set dir .
-
- foreach i lsort glob .
- .list insert end i
-
- bind .list ltDouble-ButtonPress-1gt
- browse dir selection get
-
- bind all ltControl-cgt destroy .
- proc browse dir file
- if dir ! "."
- set file dir/file
-
- if file isdirectory file
- exec browse file
- else
- if file isfile file
- exec emacs file
- else
- error "can't browse file"
-
-
26Other Uses For Tcl
- Data representation
- Store data on disk as Tcl scripts.
- To load information, evaluate script
- Good for app configuration
- Active objects
- Store scripts in objects.
- Evaluate scripts to give objects behavior.
- Communication send Tcl scripts between
applications. - Executable content
- Active e-mail messages (Safe-Tcl)
- Web pages (Tclets)
27Status
- Runs on all UNIX/X platforms.
- Runs on Win32/Win16/Mac as of version 7.4/4.1.
- Source and documentation freely available.
- New Netscape Plug-In may increase audience.
- 100,000 developers world-wide?
- Hundreds of commercial products, free extensions.
- Newsgroup comp.lang.tcl.
- 2 introductory books (Ousterhout, Welch).
28Representative Applications
- Multimedia, groupware.
- Active e-mail messages.
- System administration.
- Testing.
- Scientific applications instrument control,
simulation, visualization, CAD. - Real-time control system for offshore platform.
- British teletext system.
- Feature animation at Walt Disney Studios.
- On-air broadcast control system for NBC.
29Popular Extensions
- Expect remote control for interactive UNIX
programs such as ftp, telnet, crypt, and fsck - !/usr/local/bin/expect
- spawn rlogin lindex argv 0
- expect -re "() "
- send "cd pwd\r"
- expect -re "() "
- send "setenv DISPLAY env(DISPLAY)\r"
- interact
- Expect is available via anonymous FTP
- ftp//ftp.cme.nist.gov/pub/expect/
30Popular Extensions, cont'd
- Archives via anonymous FTP
- ftp//ftp.neosoft.com/pub/tcl
- TclX general-purpose extensions
- POSIX system calls.
- Keyed lists.
- File scanning (similar to awk).
- Date/time manipulation.
- Debugging, help, profiling.
- Oratcl and Sybtcl access to commercial
databases. - Incr tcl object-oriented programming in Tcl.
31Popular Extensions, cont'd
- Tcl-DP socket-based remote procedure calls,
distributed objects - Sample unique ID server
- set myId 0
- proc GetId
- global myId
- incr myId
- return myId
-
- dp_MakeRPCServer 4545
- Sample client
- set server dp_MakeRPCClient foo.bar.com 4545
- dp_rpc server GetId
- Not yet updated for Tcl 7.4/4.1 socket command
32Where You Might Use Tcl and Tk
- Creating graphical user interfaces.
- Testing.
- Applications that need scripting or extension
facilities. - Platform-independent applications.
- Creating interactive content for the WWW.
33Drawbacks
- Must learn new language
- Substitution rules confusing to some people.
- Competitors JavaScript, Visual Basic
- Interpreted language has performance limits
- Surprisingly high not much worse than Java
- C interfaces incompatible with Xt, Motif library.
- Motif look-and-feel on PC, Mac for now.
34Whats up at Sun Labs?
- Create exciting Internet applications
- Netscape Plug-In available now!
- Increase accessibility
- More work on PC/Mac ports (native look and feel).
- SpecTcl interactive GUI builder (available now)
- Better development tools (debugger, etc.)
- Improving the language/toolkit
- Incremental on-the-fly compiler (some progress)
- Better support for modules, data structures.
- Dynamically loadable extensions now possible
35Summing up...
- High-level programming
- Less to learn.
- Build applications more quickly.
- Universal scripting language
- Extend and modify applications at run-time.
- Make many things work together.
- Use scripts instead of data
- Active objects, executable content.
- Tcl Tk shell of the 1990's?
36 Tcl Language Programming
- There are two parts to learning Tcl
- 1. Syntax and substitution rules
- Substitutions simple, but may be confusing at
first. - 2. Built-in commands
- Can learn individually as needed.
- Control structures are commands, not language
syntax. - TCL HAS NO FIXED GRAMMAR!
37Basics
- Tcl script
- Sequence of commands.
- Commands separated by newlines, semi-colons.
- Tcl command
- One or more words separated by white space.
- First word is command name, others are arguments.
- Returns string result.
- Examples
- set a 22 set the variable a to 22
- puts "Hello, World!" worlds shortest program
38Division Of Responsibility
Command
- Chops commands into words.
- Makes substitutions.
- Does not interpret values of words.
- Single pass operation!
Tcl Parser
Words
- Interprets words.
- Can invoke parser recursively.
- Produces string result.
Command Procedure
Result
39Arguments
- Parser assigns no meaning to arguments (quoting
by default, evaluation is special) - C x 4 y x10
- y is 14
- Tcl set x 4 set y x10
- y is "x10"
- Different commands assign different meanings to
their arguments. Type-checking must be done by
commands themselves. - set a 122
- expr 24/3.2
- eval "set a 122"
- button .b -text Hello -fg red
- string length Abracadabra
40Variable Substitution
- Syntax varName
- Variable name is letters, digits, underscores.
- This is a little white lie, actually.
- May occur anywhere in a word.
- Sample command Result
- set b 66 66
- set a b b
- set a b 66
- set a bbb 666666
- set a b.3 66.3
- set a b4 no such variable
41Command Substitution
- Syntax script
- Evaluate script, substitute result.
- May occur anywhere within a word.
- Sample command Result
- set b 8 8
- set a expr b2 10
- set a "b-3 is expr b-3" b-3 is 5
42Controlling Word Structure
- Words break at white space and semi-colons,
except - Double-quotes prevent breaks
- set a "x is x y is y"
- Curly braces prevent breaks and substitutions
- set a expr bc
- Backslashes quote special characters
- set a word\ with\ \\ and\ space
- Backslashes can escape newline (continuation)
- Substitutions don't change word structure
- set a "two words"
- set b a
43Notes on Substitution and Parsing
- Tcl substitution rules are simple and absolute
- Example comments
- set a 22 set b 33 lt- OK
- this is a comment lt- OK
- set a 22 same thing? lt- Wrong!
- set a 22 same thing lt- OK
- Parser looks at a command just once!
- Its OK to experiment
- Expressions exist that cant be written in one
command - Sometimes things get hairy cmd
44For Next Week...
- Get your Tcl/Tk environment set up
- Try the demos, especially Tks widget
- Type in Hello, World and get it to work
- Read Chapters 1 through 5 of Ousterhout