Changeset 146653 for trunk/base


Ignore:
Timestamp:
Mar 15, 2016, 12:54:06 AM (4 years ago)
Author:
ijackson@…
Message:

Replace tabs with whitespaces.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/base/src/port/port.tcl

    r146650 r146653  
    53315331# Create namespace for questions
    53325332namespace eval portclient::questions {
    5333        
    5334         package require Tclx
    5335         ##
    5336         # Function that handles printing of a timeout.
    5337         #
    5338         # @param time
    5339         #        The amount of time for which a timeout is to occur.
    5340         # @param def
    5341         #        The default action to be taken in the occurence of a timeout.
    5342         proc ui_timeout {def timeout} {
    5343                 fconfigure stdin -blocking 0
    5344 
    5345                 signal error {TERM INT}
    5346                 while {$timeout >= 0} {
    5347                         if {[catch {set inp [read stdin]} err]} {
    5348                                 return -code error "Ctrl-C"
    5349                         }
    5350                         if {$inp eq "\n"} {
    5351                                 return $def
    5352                         }
    5353                         puts -nonewline "\r"
    5354                         puts -nonewline [format "Continuing in %02d s. Press Ctrl-C to exit: " $timeout]
    5355                         flush stdout
    5356                         after 1000
    5357                         incr timeout -1
    5358                 }
    5359                 puts ""
    5360                 fconfigure stdin -blocking 1
    5361                 signal -restart error {TERM INT}
    5362                 return $def
    5363         }
    5364        
    5365         ##
    5366         # Main function that displays numbered choices for a multiple choice question.
    5367         #
    5368         # @param msg
    5369         #        The question specific message that is to be printed before asking the question.
    5370         # @param ???name???
    5371         #        May be a qid will be of better use instead as the client does not do anything port specific.
    5372         # @param ports
    5373         #        The list of ports for which the question is being asked.
    5374         proc ui_choice {msg name ports} {
    5375                 # Print the main message
    5376                 puts $msg
    5377                
    5378                 # Print portname or port list suitably
    5379                 set i 1
    5380                 foreach port $ports {
    5381                         puts -nonewline " $i) "
    5382                         puts [string map {@ " @" ( " ("} $port]
    5383                         incr i
    5384                 }
    5385         }
    5386        
    5387         ##
    5388         # Displays a question with 'yes' and 'no' as options.
    5389         # Waits for user input indefinitely unless a timeout is specified.
    5390         # Shows the list of port passed to it without any numbers.
    5391         #
    5392         # @param msg
    5393         #        The question specific message that is to be printed before asking the question.
    5394         # @param ???name???
    5395         #        May be a qid will be of better use instead as the client does not do anything port specific.
    5396         # @param ports
    5397         #        The port/list of ports for which the question is being asked.
    5398         # @param def
    5399         #        The default answer to the question.
    5400         # @param timeout
    5401         #                The amount of time for which a timeout is to occur.
    5402         # @param question
    5403         #        Custom question message. Defaults to "Continue?".
    5404         proc ui_ask_yesno {msg name ports def {timeout 0} {question "Continue?"}} {
    5405                 # Set number default to the given letter default
    5406                 if {$def == {y}} {
    5407                         set default 0
    5408                 } else {
    5409                         set default 1
    5410                 }
    5411                
    5412                 puts -nonewline $msg
    5413                 set leftmargin " "
    5414                
    5415                 # Print portname or port list suitably
    5416                 if {[llength $ports] == 1} {
    5417                         puts -nonewline " "
    5418                         puts [string map {@ " @"} $ports]
    5419                 } elseif {[llength $ports] == 0} {
    5420                 } else {
    5421                         puts ""
    5422                         foreach port $ports {
    5423                                 puts -nonewline $leftmargin 
    5424                                 puts [string map {@ " @"} $port]
    5425                         }
    5426                 }
    5427                
    5428                 # Check if timeout is set or not
    5429                 if {$timeout > 0} {
    5430                         # Run ui_timeout and skip the rest of the stuff here
    5431                         return [ui_timeout $default $timeout]
    5432                 }
    5433                                
    5434                 # Check for the default and print accordingly
    5435                 if {$def == {y}} {
    5436                         puts -nonewline "${question} \[Y/n\]: "
    5437                         flush stdout
    5438                 } else {
    5439                         puts -nonewline "${question} \[y/N\]: "
    5440                         flush stdout
    5441                 }
    5442                
    5443                 # User input (probably requires some input error checking code)
    5444                 while 1 {
    5445                         signal error {TERM INT}
    5446                         if {[catch {set input [gets stdin]} err]} {
    5447                                 return -code error "Ctrl-C"
    5448                         }
    5449                         signal -restart error {TERM INT}
    5450                         if {$input in {y Y}} {
    5451                                 return 0
    5452                         } elseif {$input in {n N}} {
    5453                                 return 1
    5454                         } elseif {$input == ""} {
    5455                                 return $default
    5456                         } else {
    5457                                 puts "Please enter either 'y' or 'n'."
    5458                         }
    5459                 }
    5460         }
    5461        
    5462         ##
    5463         # Displays a question with a list of numbered choices and asks the user to enter a number to specify their choice.
    5464         # Waits for user input indefinitely.
    5465         #
    5466         # @param msg
    5467         #        The question specific message that is to be printed before asking the question.
    5468         # @param ???name???
    5469         #        May be a qid will be of better use instead as the client does not do anything port specific.
    5470         # @param ports
    5471         #        The port/list of ports for which the question is being asked.
    5472         proc ui_ask_singlechoice {msg name ports} {
    5473                 ui_choice $msg $name $ports
    5474                                
    5475                 # User Input (single input restriction)
    5476                 while 1 {
    5477                         puts -nonewline "Enter a number to select an option: "
    5478                         flush stdout
    5479                         signal error {TERM INT}
    5480                         if {[catch {set input [gets stdin]} err]} {
    5481                                 return -code error "Ctrl-C"
    5482                         }
    5483                         signal -restart error {TERM INT}
    5484                         if {($input <= [llength $ports] && [string is integer -strict $input])} {
    5485                                 return $input
    5486                         } else {
    5487                                 puts "Please enter an index from the above list."
    5488                         }
    5489                 }
    5490         }
    5491        
    5492         ##
    5493         # Displays a question with a list of numbered choices and asks the user to enter a space separated string of numbers to specify their choice.
    5494         # Waits for user input indefinitely.
    5495         #
    5496         # @param msg
    5497         #        The question specific message that is to be printed before asking the question.
    5498         # @param ???name???
    5499         #        May be a qid will be of better use instead as the client does not do anything port specific.
    5500         # @param ports
    5501         #        The list of ports for which the question is being asked.
    5502         proc ui_ask_multichoice {msg name ports} {
    5503                
    5504                 ui_choice $msg $name $ports
    5505                                
    5506                 # User Input (with Multiple input parsing)
    5507                 while 1 {
    5508                         puts -nonewline "Enter the numbers to select the options: "
    5509                         flush stdout
    5510                         signal error {TERM INT}
    5511                         if {[catch {set input [gets stdin]} err]} {
    5512                                 return -code error "Ctrl-C"
    5513                         }
    5514                         signal -restart error {TERM INT}
    5515                         set count 0
    5516                         # check if input is non-empty and otherwise fine
    5517                         if {$input == ""} {
    5518                                 continue
    5519                         }
    5520                         foreach num $input {
    5521                                 if {($num <= [llength $ports] && [string is integer -strict $num])} {
    5522                                         incr count
    5523                                 } else {
    5524                                         puts "Please enter numbers separated by a space which are indices from the above list."
    5525                                         break
    5526                                 }
    5527                         }
    5528                         if {$count == [llength $input]} {
    5529                                 return $input
    5530                         }
    5531                 }
    5532         }
     5333   
     5334    package require Tclx
     5335    ##
     5336    # Function that handles printing of a timeout.
     5337    #
     5338    # @param time
     5339    #        The amount of time for which a timeout is to occur.
     5340    # @param def
     5341    #        The default action to be taken in the occurence of a timeout.
     5342    proc ui_timeout {def timeout} {
     5343        fconfigure stdin -blocking 0
     5344
     5345        signal error {TERM INT}
     5346        while {$timeout >= 0} {
     5347            if {[catch {set inp [read stdin]} err]} {
     5348                return -code error "Ctrl-C"
     5349            }
     5350            if {$inp eq "\n"} {
     5351                return $def
     5352            }
     5353            puts -nonewline "\r"
     5354            puts -nonewline [format "Continuing in %02d s. Press Ctrl-C to exit: " $timeout]
     5355            flush stdout
     5356            after 1000
     5357            incr timeout -1
     5358        }
     5359        puts ""
     5360        fconfigure stdin -blocking 1
     5361        signal -restart error {TERM INT}
     5362        return $def
     5363    }
     5364   
     5365    ##
     5366    # Main function that displays numbered choices for a multiple choice question.
     5367    #
     5368    # @param msg
     5369    #        The question specific message that is to be printed before asking the question.
     5370    # @param ???name???
     5371    #        May be a qid will be of better use instead as the client does not do anything port specific.
     5372    # @param ports
     5373    #        The list of ports for which the question is being asked.
     5374    proc ui_choice {msg name ports} {
     5375        # Print the main message
     5376        puts $msg
     5377       
     5378        # Print portname or port list suitably
     5379        set i 1
     5380        foreach port $ports {
     5381            puts -nonewline " $i) "
     5382            puts [string map {@ " @" ( " ("} $port]
     5383            incr i
     5384        }
     5385    }
     5386   
     5387    ##
     5388    # Displays a question with 'yes' and 'no' as options.
     5389    # Waits for user input indefinitely unless a timeout is specified.
     5390    # Shows the list of port passed to it without any numbers.
     5391    #
     5392    # @param msg
     5393    #        The question specific message that is to be printed before asking the question.
     5394    # @param ???name???
     5395    #        May be a qid will be of better use instead as the client does not do anything port specific.
     5396    # @param ports
     5397    #        The port/list of ports for which the question is being asked.
     5398    # @param def
     5399    #        The default answer to the question.
     5400    # @param timeout
     5401    #          The amount of time for which a timeout is to occur.
     5402    # @param question
     5403    #        Custom question message. Defaults to "Continue?".
     5404    proc ui_ask_yesno {msg name ports def {timeout 0} {question "Continue?"}} {
     5405        # Set number default to the given letter default
     5406        if {$def == {y}} {
     5407            set default 0
     5408        } else {
     5409            set default 1
     5410        }
     5411       
     5412        puts -nonewline $msg
     5413        set leftmargin " "
     5414       
     5415        # Print portname or port list suitably
     5416        if {[llength $ports] == 1} {
     5417            puts -nonewline " "
     5418            puts [string map {@ " @"} $ports]
     5419        } elseif {[llength $ports] == 0} {
     5420        } else {
     5421            puts ""
     5422            foreach port $ports {
     5423                puts -nonewline $leftmargin 
     5424                puts [string map {@ " @"} $port]
     5425            }
     5426        }
     5427       
     5428        # Check if timeout is set or not
     5429        if {$timeout > 0} {
     5430            # Run ui_timeout and skip the rest of the stuff here
     5431            return [ui_timeout $default $timeout]
     5432        }
     5433               
     5434        # Check for the default and print accordingly
     5435        if {$def == {y}} {
     5436            puts -nonewline "${question} \[Y/n\]: "
     5437            flush stdout
     5438        } else {
     5439            puts -nonewline "${question} \[y/N\]: "
     5440            flush stdout
     5441        }
     5442       
     5443        # User input (probably requires some input error checking code)
     5444        while 1 {
     5445            signal error {TERM INT}
     5446            if {[catch {set input [gets stdin]} err]} {
     5447                return -code error "Ctrl-C"
     5448            }
     5449            signal -restart error {TERM INT}
     5450            if {$input in {y Y}} {
     5451                return 0
     5452            } elseif {$input in {n N}} {
     5453                return 1
     5454            } elseif {$input == ""} {
     5455                return $default
     5456            } else {
     5457                puts "Please enter either 'y' or 'n'."
     5458            }
     5459        }
     5460    }
     5461   
     5462    ##
     5463    # Displays a question with a list of numbered choices and asks the user to enter a number to specify their choice.
     5464    # Waits for user input indefinitely.
     5465    #
     5466    # @param msg
     5467    #        The question specific message that is to be printed before asking the question.
     5468    # @param ???name???
     5469    #        May be a qid will be of better use instead as the client does not do anything port specific.
     5470    # @param ports
     5471    #        The port/list of ports for which the question is being asked.
     5472    proc ui_ask_singlechoice {msg name ports} {
     5473        ui_choice $msg $name $ports
     5474               
     5475        # User Input (single input restriction)
     5476        while 1 {
     5477            puts -nonewline "Enter a number to select an option: "
     5478            flush stdout
     5479            signal error {TERM INT}
     5480            if {[catch {set input [gets stdin]} err]} {
     5481                return -code error "Ctrl-C"
     5482            }
     5483            signal -restart error {TERM INT}
     5484            if {($input <= [llength $ports] && [string is integer -strict $input])} {
     5485                return $input
     5486            } else {
     5487                puts "Please enter an index from the above list."
     5488            }
     5489        }
     5490    }
     5491   
     5492    ##
     5493    # Displays a question with a list of numbered choices and asks the user to enter a space separated string of numbers to specify their choice.
     5494    # Waits for user input indefinitely.
     5495    #
     5496    # @param msg
     5497    #        The question specific message that is to be printed before asking the question.
     5498    # @param ???name???
     5499    #        May be a qid will be of better use instead as the client does not do anything port specific.
     5500    # @param ports
     5501    #        The list of ports for which the question is being asked.
     5502    proc ui_ask_multichoice {msg name ports} {
     5503       
     5504        ui_choice $msg $name $ports
     5505               
     5506        # User Input (with Multiple input parsing)
     5507        while 1 {
     5508            puts -nonewline "Enter the numbers to select the options: "
     5509            flush stdout
     5510            signal error {TERM INT}
     5511            if {[catch {set input [gets stdin]} err]} {
     5512                return -code error "Ctrl-C"
     5513            }
     5514            signal -restart error {TERM INT}
     5515            set count 0
     5516            # check if input is non-empty and otherwise fine
     5517            if {$input == ""} {
     5518                continue
     5519            }
     5520            foreach num $input {
     5521                if {($num <= [llength $ports] && [string is integer -strict $num])} {
     5522                    incr count
     5523                } else {
     5524                    puts "Please enter numbers separated by a space which are indices from the above list."
     5525                    break
     5526                }
     5527            }
     5528            if {$count == [llength $input]} {
     5529                return $input
     5530            }
     5531        }
     5532    }
    55335533}
    55345534
     
    55885588
    55895589if {[isatty stdin]
    5590         && [isatty stdout]
    5591         && (![info exists ui_options(ports_quiet)] || $ui_options(ports_quiet) ne "yes")
    5592         && (![info exists ui_options(ports_noninteractive)] || $ui_options(ports_noninteractive) ne "yes")} {
    5593         set ui_options(questions_yesno) portclient::questions::ui_ask_yesno
    5594         set ui_options(questions_singlechoice) portclient::questions::ui_ask_singlechoice
    5595         set ui_options(questions_multichoice) portclient::questions::ui_ask_multichoice
     5590    && [isatty stdout]
     5591    && (![info exists ui_options(ports_quiet)] || $ui_options(ports_quiet) ne "yes")
     5592    && (![info exists ui_options(ports_noninteractive)] || $ui_options(ports_noninteractive) ne "yes")} {
     5593    set ui_options(questions_yesno) portclient::questions::ui_ask_yesno
     5594    set ui_options(questions_singlechoice) portclient::questions::ui_ask_singlechoice
     5595    set ui_options(questions_multichoice) portclient::questions::ui_ask_multichoice
    55965596}
    55975597
Note: See TracChangeset for help on using the changeset viewer.