4 # type these things in the window
5 # a-z 0-9 add character to queue or to repeat string
6 # spc insert morse space
7 # # clear, make us repeat
8 # = clear, do not repeat
12 frame .b -width 20 -height 20
13 pack .b -padx 70 -pady 20 -fill none
14 . configure -background {#222}
17 proc lamp-off {} { .b configure -background black }
18 proc lamp-on {} { .b configure -background red }
21 global errorCode errorInfo
23 "==========BGERROR==========
27 ===========================
35 foreach {key value} $morselist {
36 bind . [string tolower $key] [list morse-key $key $value]
38 bind . {#} { repeat 1 }
40 bind . <Key-space> { morse-add " " | }
41 fconfigure stdout -buffering none
45 global repeating morse_after morse_queue morse_repeat
50 if {[info exists morse_after]} {
51 after cancel $morse_after
58 uplevel #0 source morse-tester
61 proc morse-add {key dotsdashes} {
62 global repeating morse_queue morse_repeat morse_after
63 append morse_queue $dotsdashes
64 if {$repeating} { append morse_repeat $dotsdashes }
65 if {![info exists morse_after]} morse-next
69 proc morse-key {key dotsdashes} {
70 morse-add $key "$dotsdashes "
77 proc after-units {units script} {
78 global unit_ms morse_after
79 set morse_after [after [expr {$units * $unit_ms}] $script]
83 lamp-off; after-units $units morse-next
87 global morse_queue morse_repeat morse_after
88 if {![string length $morse_queue]} {
89 if {![string length $morse_repeat]} { unset morse_after; return }
90 set morse_queue "|$morse_repeat"
92 set c [string index $morse_queue 0]
93 set morse_queue [string range $morse_queue 1 end]
95 . { lamp-on; after-units 1 {space 1} }
96 _ { lamp-on; after-units 3 {space 1} }