Annotation of capa/capa51/GUITools/seating.tcl, revision 1.1
1.1 ! albertel 1: proc RSgetSeats { file } {
! 2: set seats ""
! 3: set fileId [open $file ]
! 4: while { 1 } {
! 5: set line [gets $fileId]
! 6: if { [eof $fileId] } { break }
! 7: set location [string first " #" $line]
! 8: incr location -1
! 9: if { $location > 0 } { set line [string range $line 0 $location] }
! 10: set line [string trim $line]
! 11: lappend seats $line
! 12: }
! 13: return $seats
! 14: }
! 15:
! 16: proc RSprocessSeats { seats moveVar unmoveVar } {
! 17: upvar $moveVar move
! 18: upvar $unmoveVar unmove
! 19: set length [llength $seats]
! 20: for {set i 0} {$i < $length} {incr i} {
! 21: set seat [lindex $seats $i]
! 22: if { [set location [string first " !" $seat]] > 0 } {
! 23: incr location -1
! 24: set seat [string trim [string range $seat 0 $location] ]
! 25: set unmove($i) $seat
! 26: } else {
! 27: lappend move $seat
! 28: }
! 29: }
! 30: }
! 31:
! 32: proc RSdoAssignment { movable unmovableVar outputfile } {
! 33: upvar $unmovableVar unmovable
! 34:
! 35: set fileId [open $outputfile "w"]
! 36: set totallength [expr {[llength $movable] + [llength [array names unmovable]]}]
! 37: for { set i 0 } { $i < $totallength } { incr i } {
! 38: if { [set which [lsearch [array names unmovable] $i]] != -1} {
! 39: set which [lindex [array names unmovable] $which]
! 40: set seat $unmovable($which)
! 41: unset unmovable($which)
! 42: } else {
! 43: set which [expr int(rand() * [llength $movable])]
! 44: set seat [lindex $movable $which]
! 45: set movable [lreplace $movable $which $which]
! 46: }
! 47: puts $fileId $seat
! 48: }
! 49: close $fileId
! 50: }
! 51:
! 52: proc RSassign {file output seed} {
! 53: set move ""
! 54: expr srand($seed)
! 55: RSprocessSeats [RSgetSeats $file] move unmove
! 56: RSdoAssignment $move unmove $output
! 57: }
! 58:
! 59: proc RSopenFile { num which } {
! 60: global gRS
! 61: set gRS($num.$which) [tk_getOpenFile]
! 62: }
! 63:
! 64: proc RSsaveFile { num which } {
! 65: global gRS
! 66: set gRS($num.$which) [tk_getSaveFile]
! 67: }
! 68:
! 69: proc RSrun { num } {
! 70: global gRS
! 71: RSassign $gRS($num.file) $gRS($num.output) $gRS($num.seed)
! 72: displayMessage "Done"
! 73: }
! 74:
! 75: proc RSstart {num} {
! 76: global gRS
! 77: set gRS($num.file) ""
! 78: set gRS($num.output) ""
! 79: set gRS($num.seed) 100
! 80:
! 81: set window [toplevel .randomSeating$num]
! 82:
! 83: set infoFrame [frame $window.infoFrame]
! 84: set pathFrame [frame $window.pathFrame]
! 85: set seedFrame [frame $window.seedFrame]
! 86: set buttonFrame [frame $window.buttonFrame]
! 87: pack $infoFrame $pathFrame $seedFrame $buttonFrame
! 88:
! 89: set inputFrame [frame $pathFrame.inputFrame]
! 90: set outputFrame [frame $pathFrame.outputFrame]
! 91: pack $inputFrame $outputFrame
! 92:
! 93: label $inputFrame.label -text "Input File:"
! 94: set ientryFrame [frame $inputFrame.ientryFrame]
! 95: button $inputFrame.select -text "Select File" \
! 96: -command "RSopenFile $num file"
! 97: pack $inputFrame.label $ientryFrame $inputFrame.select -side left
! 98: entry $ientryFrame.entry -textvariable gRS($num.file) \
! 99: -xscrollcommand "$ientryFrame.scroll set"
! 100: scrollbar $ientryFrame.scroll -orient h -command \
! 101: "$ientryFrame.entry xview"
! 102: pack $ientryFrame.entry $ientryFrame.scroll
! 103: pack configure $ientryFrame.scroll -fill x
! 104:
! 105: label $outputFrame.label -text "Output File:"
! 106: set oentryFrame [frame $outputFrame.oentryFrame]
! 107: button $outputFrame.select -text "Select File" \
! 108: -command "RSsaveFile $num output"
! 109: pack $outputFrame.label $oentryFrame $outputFrame.select -side left
! 110: entry $oentryFrame.entry -textvariable gRS($num.output) \
! 111: -xscrollcommand "$oentryFrame.scroll set"
! 112: scrollbar $oentryFrame.scroll -orient h -command \
! 113: "$oentryFrame.entry xview"
! 114: pack $oentryFrame.entry $oentryFrame.scroll
! 115: pack configure $oentryFrame.scroll -fill x
! 116:
! 117: scale $seedFrame.seed -from 1 -to 30000 -variable gRS($num.seed) \
! 118: -label "Random number seed" -orient h -length 300
! 119: pack $seedFrame.seed
! 120:
! 121: button $buttonFrame.assign -text Assign -command "RSrun $num"
! 122: button $buttonFrame.exit -text "Exit" -command \
! 123: "unset gRS($num.file); unset gRS($num.output); unset gRS($num.seed); destroy $window"
! 124: pack $buttonFrame.assign $buttonFrame.exit -side left
! 125: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>