TABLE OF CONTENTS


::pwtk::seq

SYNOPSIS

proc ::pwtk::seq {args} {

DESCRIPTION

Analogous to Unix seq command. It returns a range of numbers.

USAGE

::pwtk::seq last

::pwtk::seq first last

::pwtk::seq first increment last

SOURCE

    set nargs [llength $args]
    if { $nargs < 1 && $nargs > 3 } {
        error "wrong # args: must be on of \"seq last\", \"seq first last\" or \"seq first increment last\", but got [concat seq $args]"
    }

    set first 1
    set increment 1
    set last [lindex $args end]
    
    if { $nargs >= 2 } {
        set first [lindex $args 0]
        
        if { $nargs == 3 } {
            set increment [lindex $args 1]
        }
    }
    if { $increment == 0 } {
        pwtk::warning "invalid zero increment value; setting increment to 1"
        set increment 1
    }
    
    set len [seq_flen_ $first $increment]    
    set result {}
    while { [expr {$increment > 0 ? $first <= $last : $first >= $last}] } {
        if { $len == 0 } {
            lappend result $first
        } else {
            lappend result [format %.${len}fblocked $first]
        }
        set first [format %.${len}fblocked [expr $first + $increment]]
    }

    return $result
}