Top Up Prev Next Bottom Contents Index Search

5.4 Creating new stars derived from the TclScript star

A large number of useful stars can be derived from the TclScript star. The TkShowValues star used in example 1 on page 5-2 is such a star. That star takes inputs of any type and displays their value in a window that is optionally located in the control panel. It has three parameters (settable states):

label A string-valued parameter giving a label to identify the display.
put_in_control_panel A Boolean-valued parameter that specifies whether the display
should be put in the control panel or in its own window.
wait_between_outputs A Boolean-valued parameter that specifies whether the execution of the system should pause each time a new value is displayed. If it does, then a mouse click in the display restarts the system. Conspicuously absent is the tcl_file parameter of the TclScript star from which this is derived. The file is hard-wired into the definition of the star by the following C++ statement included in the setup method:

tcl_file =
"$PTOLEMY/src/domains/sdf/tcltk/stars/tkShowValues.tcl";
The parameter is then hidden from the user of the star by the following statement included in the constructor:

tcl_file.clearAttributes(A_SETTABLE); Thus, the user sees only the parameters that are defined in the derived star. This is a key part of customizing the star.

A second issue is that of communicating the new parameter values to the Tcl script. For example, the Tcl script will need to know the value of the label parameter in order to create the label for the display. The TclScript star automatically makes all the parameters of any derived star available as array entries in the global array whose name is given by the global variable starID. To read the value of the label parameter in the Tcl script, use the expression [set ${starID}(label)]. The confusing syntax is required to ensure that Tcl uses the value of starID as the name of the array. The string "label" is just the index into the array. The set command in Tcl, when given only one argument, returns the value of the variable whose name is given by the argument.

Some programmers may prefer an alternative way to refer to parameters that is slightly more readable. The Tcl statement

upvar #0 $starID params allows subsequent statement to refer to parameters simply as $param(param_name). The upvar command with argument #0 declares the local variable params equivalent to the global variable whose name is given by the value of starID.

Many more examples can be found in $PTOLEMY/src/domains/sdf/tcltk/stars.



Top Up Prev Next Bottom Contents Index Search

Copyright © 1990-1997, University of California. All rights reserved.