Posted to tcl by Stu at Wed Nov 30 14:50:10 GMT 2011view pretty

# Lgetrows --
#
#	Returns a list of lists matched
#	based on criteria.
#
# Arguments:
#	list
#	value
#	index
#	args
#
# Results:
#	list
#
proc netinfo::Lgetrows {list value index args} {
	set args [linsert $args 0 $value $index]

	set single [expr {
		[lsearch -glob $args {*\**}] == -1 &&
		[lsearch -glob $args {*\?*}] == -1 &&
		[lsearch -glob $args {*\[*\]*}] == -1
	}]

	set rows {}
	foreach row $list {
		set ok 1
		foreach {val ind} $args {
			if {[lsearch -glob [lindex $row $ind] $val] == -1} {
				set ok 0
				break
			}
		}
		if {$ok} {
			if {$single} {
				return $row
			}
			lappend rows $row
		}
	}
	return $rows
}
###