#!/usr/bin/wish option add *Listbox*font {-*-courier-medium-r-*-*-*-120-*-*-m-*-*-*} proc readPw {l} { global Passwords set fgrp [open /etc/group r] while {[gets $fgrp line] >= 0} { if {[string index $line 0] == "#"} { continue } set groupentry [split $line ":"] set Group([lindex $groupentry 2]) \ [lindex $groupentry 0] } close $fgrp set fpw [open /etc/passwd r] while {[gets $fpw line] >= 0} { if {[string index $line 0] == "#"} { continue } set pwdentry [split $line ":"] if {[info exists Group([lindex $pwdentry 3])]} { set group $Group([lindex $pwdentry 3]) } else { set group [lindex $pwdentry 3] } set fpwdentry [format "%-12s %-12s %-38s %-25s %-20s"\ [lindex $pwdentry 0] $group \ [lindex $pwdentry 4] [lindex $pwdentry 5] \ [lindex $pwdentry 6]] set Passwords($fpwdentry) $pwdentry $l insert end $fpwdentry } close $fpw } proc newField {root label name} { global fieldvars frame ${root}.f${name} label ${root}.l${name} -text ${label} entry ${root}.e${name} -textvar ${name} pack ${root}.l${name} -side left -in ${root}.f${name} pack ${root}.e${name} -side right -in ${root}.f${name} lappend fieldvars ${name} return ${root}.f${name} } proc setPw {pwd} { global Passwords username userid groupname groupid gcos \ home shell set username [lindex $pwd 0] set userid [lindex $Passwords($pwd) 2] set groupname [lindex $pwd 1] set groupid [lindex $Passwords($pwd) 3] set gcos [lindex $Passwords($pwd) 4] set home [lindex $Passwords($pwd) 5] set shell [lindex $Passwords($pwd) 6] } proc showPw {} { if {! [winfo exists .showpw] } { toplevel .showpw frame .showpw.l frame .showpw.r lappend left [newField .showpw "Username:" username] lappend left [newField .showpw "User id:" userid] lappend left [newField .showpw "Groupname:" groupname] lappend left [newField .showpw "Group id:" groupid] lappend right [newField .showpw "GCOS:" gcos] lappend right [newField .showpw "Home:" home] lappend right [newField .showpw "Shell:" shell] eval pack $left -in .showpw.l -fill x eval pack $right -in .showpw.r -fill x pack .showpw.l .showpw.r -in .showpw -side left \ -expand true } wm deiconify .showpw raise .showpw } frame .top scrollbar .v -orient v -command ".pw yview" scrollbar .h -orient h -command ".pw xview" frame .dummy -width [winfo reqwidth .v] \ -height [winfo reqheight .h] listbox .pw -width 80 -selectmode single \ -xscrollcommand ".h set" -yscrollcommand ".v set" pack .pw -side left -fill both -in .top -expand true pack .v -side left -fill y -in .top pack .top -side top -expand true -fill both pack .h -side left -fill x -expand true pack .dummy -side left bind .pw { set item [%W curselection] setPw [%W get $item] showPw } readPw .pw