'''Q.''' Is there a way a user can press a "stop" button, for example, to stop the running script without killing the main application? '''A1.''' by mailto:kris.klindworth@carle.com : You can get much of the effect you want by selectively redefining key TCL commands. You could, for instance, have the cancel button set a "cancelled" global. Then, you can define a cancelled function which checks for the existence of this global and calls "error" if it is exists. Finally, you can redefine commands like while so that they will insert a call to the cancelled command at the top of each loop. It might look something like this... proc cancelled {} { global cancelled # give the user a chance to hit the cancel button update if [info exists cancelled] { error "Script Cancelled by User" } } rename while _while proc while {condition body} { uplevel [list _while $condition "cancelled;$body"] } If you redefine the proc command and the loop commands then you will get pretty good coverage. You might also want use the after command to set a time limit on the execution. Something like... set timeLimit 1000 set timerId [after $timeLimit {set timedOut 1}] Then you would have the cancelled function check this variable as well. Just be sure that you run "after cancel $timerId" and unset the cancelled and timedOut variables when you return from the users scripts. '''A2.''' by Michael Barth mailto:m.barth@de.bosch.com : The solution I have implemented is simple: create a new process with the user script. Additionally you can redirect the standard output of the "user process" to a text widget. # tcl code not tested: button .interrupt -command {close $FID} pack .interrupt set FID [open |userscript r] fileevent readable $FID writeToTextWidget ''(From posts in news:comp.lang.tcl, slightly adapted by RS. Note however that frequent updates make long runs last even longer ;-)''