Posted to tcl by evilotto at Thu Sep 12 18:23:09 GMT 2013view raw

  1. namespace eval ::synevent {
  2. proc notify {var} {
  3. incr ::synevent::$var
  4. }
  5.  
  6. # repeatedly notify a handle at N ms intervals
  7. proc notify-interval {var interval} {
  8. incr ::synevent::$var
  9. after $interval [namespace code [info level 0]]
  10. }
  11.  
  12. proc evHandler {script var var2 op} {
  13. after idle $script
  14. }
  15.  
  16. proc on {var script} {
  17. set inf [trace vinfo ::synevent::$var]
  18. foreach t $inf {
  19. trace vdelete ::synevent::$var [lindex $t 0] [lindex $t 1]
  20. }
  21. set ::synevent::$var 0
  22. if {$script != ""} {
  23. set scriptcall [uplevel namespace code [list $script]]
  24. trace variable ::synevent::$var w [list ::synevent::evHandler $scriptcall]
  25. }
  26. }
  27.  
  28. namespace export on notify notify-interval
  29. }
  30. namespace import ::synevent::*
  31. package provide synevent 0.2
  32.