File:  [Local Repository] / tclpuks / prgsrc / puks.tcl
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Mon Aug 29 14:22:27 2005 UTC (18 years, 10 months ago) by boris
Branches: MAIN
CVS tags: HEAD
Added

    1: #!/usr/bin/wish
    2: 
    3: ##############################################################
    4: #    Global flags and variables
    5: ##############################################################
    6: 
    7: # Flags
    8: set waiting_for_key 0
    9: set question_asked 0
   10: set timer_started 0
   11: 
   12: # Channel to talk to the MRC device
   13: set MRC 0
   14: 
   15: #  Mapping of MCR codes to keys:  button(code)
   16: set buttoncode 256
   17: for {set i 1} {$i <=8} {incr i} {
   18:     set button($buttoncode) $i
   19:     set buttoncode [expr $buttoncode*2]
   20: }
   21: 
   22: 
   23: ##############################################################
   24: #  Procedures for talking with MRC
   25: ##############################################################
   26: 
   27: # Open the given device for MRC.  Return 0 if successful, 1 otherwise
   28: proc open_mrc {device} {
   29:     global MRC
   30:     set result [catch {set MRC [open $device r+]}]
   31:     if {$result !=0} {
   32: 	return $result
   33:     }
   34:     fconfigure $MRC -blocking 0  -translation binary \
   35: 	-encoding binary -buffering none -mode  57600,n,8,1
   36:     
   37:     puts $MRC s
   38:     after 200
   39:     read $MRC
   40:     puts $MRC r
   41:     after 200
   42:     read $MRC
   43:     return 0
   44: }
   45:     
   46: 
   47: 
   48: # Return the key pressed or 0
   49: proc readbuffer {} {
   50:     global MRC  button
   51:     set key 0
   52:     set message [read $MRC]
   53:     binary scan $message s key
   54:     set key [expr $key & 0xFFFF]
   55:     if {[catch {set key $button($key)}] == 0} {
   56: 	return $key
   57:     }
   58:     return 0
   59: }
   60: 
   61: ##############################################################
   62: #   Setup
   63: ##############################################################
   64: 
   65: button .start -text "Start" -command start
   66: pack .start
   67: label .pressed 
   68: pack .pressed
   69: 
   70: 
   71: proc start {} {
   72:     global SRLFILE state idle waiting
   73:     readbuffer
   74:     .start configure -state disabled -command {}
   75:     set state $waiting
   76: }
   77: 
   78: proc body  {} {
   79:     global state idle waiting
   80:     update idletasks
   81:     if { $state == $waiting } {
   82: 	set pressed [readbuffer]
   83: 	if { $pressed != 0 } {
   84: #	    set state $idle
   85: #	    .start configure -state active -command start
   86: 	    .pressed configure -text "Pressed $pressed"
   87: 	    puts $pressed
   88: 	    readbuffer	}
   89:     } else {
   90: 	readbuffer
   91:     }
   92:     after 10 body
   93: }
   94: 
   95: body 
   96: 
   97: 
   98: 
   99: 
  100: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>