The software developed by John Ousterhout in the early 80s provides an elegant solution to most of the above problems. It is called Tool Command Language (Tcl, pronounced as "tickle") and one of its most useful extensions called, Tool Kit. Tcl is a command language very akin to shell languages on Unix systems, and also a library. Tk provides various user interface objects which are reconfigurable interactively. The software is in the public domain (at ftp.aud.alcatel.com under tcl) and has been ported to several operating systems (various versions of DOS, VMS, not windows yet!).
Tcl is a simple language whose primary function is to issue commands to interactive programs such as shells, text editors and debuggers. It is also programmable which enables the users to write more powerful commands that can be added to the built in set. Tcl is also a library package that can be embedded in application programs. Finally extensions such as the Tk toolkit, provide mechanisms for communicating between applications by sending Tcl commands back and forth. Tk extends the core Tcl facilities with commands for building user interfaces, so that the user can construct Motif like user interfaces by writing simple Tcl scripts instead of C code.
This article gives a fore taste of Tcl/Tk with an illustrated example and considers its main advantages as a teaching tool. For a more extensive list of applications the interested reader is referred to FAQ files. (These files are also stored at the ftp site: src.doc.ic.ac.uk under/packages/tcl/tclarchive.
The following commands can be stored in a file, say power.tcland sourced with wish}. Alternatively, these commands can be entered (and modified as necessary) interactively in the wish shell.
1 proc power {base p} {
2 set result 1
3 while {$p>0} {
4 set result [expr $result*$base]
5 set p [expr $p 1 ]
6 }
7 return $result
8 }
9
10 entry .base width 6 relief sunken
-textvariable base
11 label .label1 text "to the power"
12 entry .power width 6 relief sunken
-textvariable power
13 label .label2 text "is"
14 label .result -textvariable result
15 pack .base .label1 .power .label2 .result -side left \
16 -padx 1m -pady 2m
17 bind .base{set result [power $base $power] }
18 bind .power{set result [power $base $power] }
Lines 1-9 define a procedure to compute $base^{power}$ and the languge constructs are somewhat reminiscent of C shell. Line 10 defines an entry widget whose name is .base. The dot preceding the name refers to the root window, and in general a widget in the hierarchy is refered to using the full path where the component names are separated by dot. Lines 10-14 define the required widgets configured with the few options as shown. Line 15-16 define the placement of the widgets, .base, .label1, .label2 and .result} in the root window. The packer takes care of enlarging or shrinking the root window as additional widgets are defined (or deleted). Finally the bind command in lines 17-18, binds the X events to Tcl commands. In this example, when the user presses the Return key either in the entry widget .base or in .power the procedure, power is invoked and the result displayed in .result}.
More sophisticated interfaces have been built using Tcl/Tk and this short article can not do full justice to its extensive capabilities. Currently, I am working on providing a simple GUI to example programs supplied with NAG Fortran 77/90 Library, and the preliminary designs have been extremely rewarding.
One can readily appreciate its potential as a powerful tool both for teaching GUIs to senior undergraduate students and postgraduate students; as well as for commercially viable products. One of main attractions of using Tcl/Tk for building GUIs is that the required programming is at a comfortable level, and provides a convenient transition path should the applications demand more specific functionality through the use of library routines and facilities to embed Tcl in other languages such as C, C++ and Ada.
The author can be reached at the address below and would like to have your comments in this regard.
Venkat V.S.S. Sastry
Applied Mathematics and Operational Research Group
Royal Military College of Science
Shrivenham
SN6 8LA
Tel: +44 793 785315
sastry@rmcs.cran.ac.uk