Changeset 122840


Ignore:
Timestamp:
Jul 31, 2014, 5:04:52 PM (5 years ago)
Author:
shasha@…
Message:

fixed Ctrl-C issues

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/gsoc14-interactive/base/src/port/port.tcl

    r122307 r122840  
    52375237namespace eval portclient::questions {
    52385238       
     5239        package require Tclx
    52395240        ##
    52405241        # Function that handles printing of a timeout.
     
    52455246        #        The default action to be taken in the occurence of a timeout.
    52465247        proc ui_timeout {def timeout} {
    5247                 # Gap between printing of each dot
    5248                 set sec 0
    5249                
    5250                 # Prints time like 5...4...3...2...1...0
    5251                 while {$timeout >= 0} {
    5252                         after $sec {puts -nonewline "\r"}
    5253                         after $sec {puts -nonewline "Continuing in "}
    5254                         incr sec 1000
    5255                         after $sec puts -nonewline [format "%02d" $timeout]
    5256                         after $sec flush stdout
    5257                         after $sec {puts -nonewline ". Press Ctrl-C to exit: "}
    5258                         after $sec flush stdout
     5248                fconfigure stdin -blocking 0
     5249
     5250                signal error {TERM INT}
     5251                while {$timeout >= 0} {
     5252                        if {[catch {set inp [read stdin]} err]} {
     5253                                return -code error "Ctrl-C"
     5254                        }
     5255                        if {$inp eq "\n"} {
     5256                                return $def
     5257                        }
     5258                        puts -nonewline "\r"
     5259                        puts -nonewline [format "Continuing in %02d s. Press Ctrl-C to exit: " $timeout]
     5260                        flush stdout
     5261                        after 1000
    52595262                        incr timeout -1
    52605263                }
    5261                 after $sec set result def
    5262                 vwait result
    52635264                puts ""
     5265                fconfigure stdin -blocking 1
     5266                signal -restart error {TERM INT}
    52645267                return $def
    52655268        }
     
    53405343                # User input (probably requires some input error checking code)
    53415344                while 1 {
    5342                         set input [gets stdin]
     5345                        signal error {TERM INT}
     5346                        if {[catch {set input [gets stdin]} err]} {
     5347                                return -code error "Ctrl-C"
     5348                        }
     5349                        signal -restart error {TERM INT}
    53435350                        if {$input in {y Y}} {
    53445351                                return 0
     
    53635370        #        The port/list of ports for which the question is being asked.
    53645371        proc ui_ask_singlechoice {msg name ports} {
    5365                
     5372                package require Tclx
    53665373                ui_choice $msg $name $ports
    53675374                               
     
    53705377                        puts -nonewline "Enter a number to select an option: "
    53715378                        flush stdout
    5372                         set input [gets stdin]
     5379                        signal error {TERM INT}
     5380                        if {[catch {set input [gets stdin]} err]} {
     5381                                return -code error "Ctrl-C"
     5382                        }
     5383                        signal -restart error {TERM INT}
    53735384                        if {($input <= [llength $ports] && [string is integer -strict $input])} {
    53745385                                return $input
     
    53965407                        puts -nonewline "Enter the numbers to select the options: "
    53975408                        flush stdout
    5398                         set input [gets stdin]
     5409                        signal error {TERM INT}
     5410                        if {[catch {set input [gets stdin]} err]} {
     5411                                return -code error "Ctrl-C"
     5412                        }
     5413                        signal -restart error {TERM INT}
    53995414                        set count 0
    54005415                        # check if input is non-empty and otherwise fine
Note: See TracChangeset for help on using the changeset viewer.