version 1.1, 2005/08/26 00:36:53
|
version 1.4, 2005/08/29 18:14:50
|
Line 0
|
Line 1
|
|
#!/usr/bin/wish |
|
|
|
############################################################## |
|
# Global flags and variables |
|
############################################################## |
|
|
|
# Flags |
|
set waiting_for_key 0 |
|
set question_asked 0 |
|
set timer_started 0 |
|
|
|
# Channel to talk to the MRC device |
|
set MRC 0 |
|
|
|
# Mapping of MCR codes to keys: button(code) |
|
set buttoncode 256 |
|
for {set i 1} {$i <=8} {incr i} { |
|
set button($buttoncode) $i |
|
set buttoncode [expr $buttoncode*2] |
|
} |
|
|
|
|
|
############################################################## |
|
# Procedures for talking with MRC |
|
############################################################## |
|
|
|
# Open the given device for MRC. Return 0 if successful, 1 otherwise |
|
proc open_mrc {device} { |
|
global MRC |
|
set result [catch {set MRC [open $device r+]}] |
|
if {$result !=0} { |
|
return $result |
|
} |
|
fconfigure $MRC -blocking 0 -translation binary \ |
|
-encoding binary -buffering none -mode 57600,n,8,1 |
|
|
|
puts $MRC s |
|
after 200 |
|
read $MRC |
|
puts $MRC r |
|
after 200 |
|
read $MRC |
|
return 0 |
|
} |
|
|
|
|
|
|
|
# Return the key pressed or 0 |
|
proc readbuffer {} { |
|
global MRC button |
|
set key 0 |
|
set message [read $MRC] |
|
binary scan $message s key |
|
set key [expr $key & 0xFFFF] |
|
if {[catch {set key $button($key)}] == 0} { |
|
return $key |
|
} |
|
return 0 |
|
} |
|
|
|
############################################################## |
|
# Setup |
|
############################################################## |
|
|
|
|
|
|
|
# Main menu |
|
|
|
menu .mbar -type menubar -relief ridge -borderwidth 2 |
|
pack .mbar -fill x |
|
|
|
menubutton .mbar.file -text File -menu .mbar.file.m -underline 0 \ |
|
-relief raised -borderwidth 2 |
|
pack .mbar.file -side left |
|
set m [menu .mbar.file.m] |
|
$m add command -label "Open" -state disabled |
|
$m add command -label "Save as..." -state disabled |
|
$m add command -label "Save" -state disabled |
|
$m add separator |
|
$m add command -label "Quit" -command exit |
|
|
|
menubutton .mbar.edit -text Edit -underline 0 -state disabled\ |
|
-relief raised -borderwidth 2 |
|
pack .mbar.edit -side left |
|
|
|
menubutton .mbar.help -text Help -menu .mbar.help.m -underline 0\ |
|
-relief raised -borderwidth 2 |
|
pack .mbar.help -side right |
|
set m [menu .mbar.help.m] |
|
$m add command -label "About..." -command { |
|
tk_dialog .about "About Puks" \ |
|
"Система управления кнопками. |
|
(C) Teytelman, 2002 (MCR code) |
|
(C) Boris Veytsman, 2005 (Tcl/Tk version)"\ |
|
info 0 "OK"} |
|
|
|
|
|
#Teams |
|
frame .teams |
|
pack .teams -side top |
|
for {set i 0} {$i < 8} {incr i} { |
|
frame .teams.frame($i) |
|
pack .teams.frame($i) -side top -fill x |
|
label .teams.frame($i).button -text 0 |
|
pack .teams.frame($i).button -side left |
|
entry .teams.frame($i).name -width 60 -textvariable name($i) |
|
pack .teams.frame($i).name -side left |
|
entry .teams.frame($i).score -width 6 -textvariable score($i) |
|
pack .teams.frame($i).score -side left |
|
} |
|
|
|
# button .start -text "Start" -command start |
|
# pack .start |
|
# label .pressed |
|
# pack .pressed |
|
|
|
|
|
proc start {} { |
|
global SRLFILE state idle waiting |
|
readbuffer |
|
.start configure -state disabled -command {} |
|
set state $waiting |
|
} |
|
|
|
proc body {} { |
|
global state idle waiting |
|
update idletasks |
|
if { $state == $waiting } { |
|
set pressed [readbuffer] |
|
if { $pressed != 0 } { |
|
# set state $idle |
|
# .start configure -state active -command start |
|
.pressed configure -text "Pressed $pressed" |
|
puts $pressed |
|
readbuffer } |
|
} else { |
|
readbuffer |
|
} |
|
after 10 body |
|
} |
|
|
|
#body |
|
|
|
|
|
|
|
|
|
|