+proc serverList {headlineProc targetProc} {
+ global targets
+ global groupsDescription
+
+ proc targetsCmp {l r} {
+ global targets
+ return [string compare [string tolower [lindex $targets($l) 0]] \
+ [string tolower [lindex $targets($r) 0]]]
+ }
+ proc groupCmp {l r} {
+ global groupsOrder
+ if {[catch {set lo $groupsOrder($l)}]} {
+ set lo 10
+ }
+ if {[catch {set ro $groupsOrder($r)}]} {
+ set ro 10
+ }
+ return [expr $lo - $ro]
+ }
+
+ foreach tt [array names targets] {
+ lappend groupsTmp([lindex $targets($tt) 6]) $tt
+ }
+ set gts [lsort -command groupCmp [array names groupsTmp]]
+ foreach gt $gts {
+ if {[info exists groupsDescription($gt)]} {
+ eval $headlineProc [list $groupsDescription($gt)]
+ } else {
+ eval $headlineProc $gt
+ }
+ set tn [lsort -command targetsCmp $groupsTmp($gt)]
+ foreach t $tn {
+ eval $targetProc $t
+ }
+ }
+
+ rename targetsCmp {}
+}
+