Index: hunter2 ================================================================== --- hunter2 +++ hunter2 @@ -23,10 +23,12 @@ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set ::defaultWrapLength 60 set passwordFile [lindex $argv 0] set action [lindex $argv 1] set validCommands [list "listLocalKeys" "listPasswords" "listAvailablePasswords" "listUsers" "addUser" "addPassword" "authorizeUser" "authorizeUsers" "deauthorizeUser" "deauthorizeUsers" "getPassword" "updatePassword" "deletePassword" "help" "whoami"] @@ -53,17 +55,49 @@ } } return "" } + +proc _wrapString {string width {prefix ""}} { + set newString "" + + set prefixWidth [string length $prefix] + set width [expr {$width - $prefixWidth}] + while {[string length $string] > 0} { + if {[string length $string] > $width} { + set subStringIndex [string last " " $string $width] + + if {$subStringIndex == -1} { + set subStringIndex [string first " " $string] + } + } else { + set subStringIndex -1 + } + + if {$subStringIndex == -1} { + set subStringIndex end + } + set subString [string trim [string range $string 0 $subStringIndex]] + set string [string trim [string range $string $subStringIndex+1 end]] + + append newString $prefix + append newString $subString + if {$string ne ""} { + append newString "\n" + } + } + + return $newString +} proc _printHelp {channel command} { if {$command == ""} { puts $channel "Usage: hunter2 \[\]" puts $channel "" puts $channel "Actions:" - puts $channel " [join $::validCommands {, }]" + puts $channel "[_wrapString [join $::validCommands {, }] $::defaultWrapLength { }]" puts $channel "" puts $channel " hunter2 help for help with an action" } else { set args [info args $command] set printArgs [list] @@ -576,27 +610,27 @@ } } foreach passwordName $passwordNames { - puts "$passwordName - [join [_getUsersForPassword [list $passwordName]] {, }]" + puts "[_wrapString [join [_getUsersForPassword [list $passwordName]] {, }] $::defaultWrapLength "$passwordName - "]" } set ::saveRequired 0 } proc listPasswords {} { db eval {SELECT DISTINCT name FROM passwords;} row { - puts "$row(name) - [join [_getUsersForPassword [list $row(name)]] {, }]" + puts "[_wrapString [join [_getUsersForPassword [list $row(name)]] {, }] $::defaultWrapLength "$row(name) - "]" } set ::saveRequired 0 } proc listUsers {} { db eval {SELECT DISTINCT name FROM users;} row { - puts "$row(name) - [join [_getPasswordsForUser [list $row(name)]] {, }]" + puts "[_wrapString [join [_getPasswordsForUser [list $row(name)]] {, }] $::defaultWrapLength "$row(name) - "]" } set ::saveRequired 0 }