#---------------------------------------------------
# Listbox special routines for searching and filtering
# the contents of a listbox
#---------------------------------------------------

proc filterlist {lb pat savename} {
       
	global $savename
        set x -1

        if {$pat==""} { restorelist $lb $savename ; return }
        set saved 0

        # save the original contents of the listbox
        catch {[set saved [set [set savename]("SAVED")]]}
	if {$saved==0} then {
		set [set savename]("SAVED") [$lb size]
                set listsize [$lb size]
		for {set i 0} {$i<$listsize} {incr i} {
			set [set savename]($i) [$lb get $i]
		}
	}


	for {set i 0} {$i<[$lb size]} {incr i} {
		set tmp [$lb get $i]
		if {[regexp $pat $tmp]} then {
			set tmparray([incr x]) $tmp
		}
	}

	$lb delete 0 end

	for {set i 0} {$i<=$x} {incr i} {
		$lb insert end $tmparray($i)
	}

}

proc restorelist {lb name} {
	global $name

        set num [set [set name]("SAVED")]
        $lb delete 0 end
        for {set i 0} {$i<$num} {incr i} {
		$lb insert end "[set [set name]([set i])]"
                update
	}
}


proc searchlist {lb pat from} {
	if {$pat==""} return
	incr from
	for {set i $from} {$i<[$lb size]} {incr i} {
		if {[regexp $pat [$lb get $i]]} {
			$lb yview $i
			break
		}
	}
}

