cmdr
Hex Artifact Content
Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to tclconference@googlegroups.com
or submit via the online form by Sep 9.

Artifact eb964624e4626a6918bab7a1e09a4e280849f4d0:


0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 4d 44 52 20 2d 20 55 74 69 6c 20 2d 20 47 65  CMDR - Util - Ge
0060: 6e 65 72 61 6c 20 75 74 69 6c 69 74 69 65 73 0a  neral utilities.
0070: 0a 23 20 40 40 20 4d 65 74 61 20 42 65 67 69 6e  .# @@ Meta Begin
0080: 0a 23 20 50 61 63 6b 61 67 65 20 63 6d 64 72 3a  .# Package cmdr:
0090: 3a 75 74 69 6c 20 30 0a 23 20 4d 65 74 61 20 61  :util 0.# Meta a
00a0: 75 74 68 6f 72 20 20 20 7b 41 6e 64 72 65 61 73  uthor   {Andreas
00b0: 20 4b 75 70 72 69 65 73 7d 0a 23 20 4d 65 74 61   Kupries}.# Meta
00c0: 20 6c 6f 63 61 74 69 6f 6e 20 68 74 74 70 73 3a   location https:
00d0: 2f 2f 63 6f 72 65 2e 74 63 6c 2e 74 6b 2f 61 6b  //core.tcl.tk/ak
00e0: 75 70 72 69 65 73 2f 63 6d 64 72 0a 23 20 4d 65  upries/cmdr.# Me
00f0: 74 61 20 70 6c 61 74 66 6f 72 6d 20 74 63 6c 0a  ta platform tcl.
0100: 23 20 4d 65 74 61 20 73 75 6d 6d 61 72 79 20 20  # Meta summary  
0110: 20 20 20 49 6e 74 65 72 6e 61 6c 2e 20 47 65 6e     Internal. Gen
0120: 65 72 61 6c 20 75 74 69 6c 69 74 69 65 73 2e 0a  eral utilities..
0130: 23 20 4d 65 74 61 20 64 65 73 63 72 69 70 74 69  # Meta descripti
0140: 6f 6e 20 49 6e 74 65 72 6e 61 6c 2e 20 47 65 6e  on Internal. Gen
0150: 65 72 61 6c 20 75 74 69 6c 69 74 69 65 73 2e 0a  eral utilities..
0160: 23 20 4d 65 74 61 20 73 75 62 6a 65 63 74 20 7b  # Meta subject {
0170: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 7d 0a 23 20  command line}.# 
0180: 4d 65 74 61 20 72 65 71 75 69 72 65 20 7b 54 63  Meta require {Tc
0190: 6c 20 38 2e 35 2d 7d 0a 23 20 4d 65 74 61 20 72  l 8.5-}.# Meta r
01a0: 65 71 75 69 72 65 20 74 65 78 74 75 74 69 6c 3a  equire textutil:
01b0: 3a 61 64 6a 75 73 74 0a 23 20 4d 65 74 61 20 72  :adjust.# Meta r
01c0: 65 71 75 69 72 65 20 64 65 62 75 67 0a 23 20 4d  equire debug.# M
01d0: 65 74 61 20 72 65 71 75 69 72 65 20 64 65 62 75  eta require debu
01e0: 67 3a 3a 63 61 6c 6c 65 72 0a 23 20 40 40 20 4d  g::caller.# @@ M
01f0: 65 74 61 20 45 6e 64 0a 0a 23 20 23 20 23 23 20  eta End..# # ## 
0200: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
0210: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0220: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
0230: 23 23 23 23 23 23 0a 23 23 20 52 65 71 75 69 73  ######.## Requis
0240: 69 74 65 73 0a 0a 70 61 63 6b 61 67 65 20 72 65  ites..package re
0250: 71 75 69 72 65 20 54 63 6c 20 38 2e 35 0a 70 61  quire Tcl 8.5.pa
0260: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 64 65  ckage require de
0270: 62 75 67 0a 70 61 63 6b 61 67 65 20 72 65 71 75  bug.package requ
0280: 69 72 65 20 64 65 62 75 67 3a 3a 63 61 6c 6c 65  ire debug::calle
0290: 72 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  r..# # ## ### ##
02a0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
02b0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 0a 23 23 20 44 65 66 69 6e 69 74 69 6f 6e 0a 0a  .## Definition..
02e0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
02f0: 3a 63 6d 64 72 20 7b 0a 20 20 20 20 6e 61 6d 65  :cmdr {.    name
0300: 73 70 61 63 65 20 65 78 70 6f 72 74 20 75 74 69  space export uti
0310: 6c 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  l.    namespace 
0320: 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74 65 0a  ensemble create.
0330: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  }..namespace eva
0340: 6c 20 3a 3a 63 6d 64 72 3a 3a 75 74 69 6c 20 7b  l ::cmdr::util {
0350: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  .    namespace e
0360: 78 70 6f 72 74 20 70 61 64 72 20 64 69 63 74 73  xport padr dicts
0370: 6f 72 74 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  ort.    namespac
0380: 65 20 65 6e 73 65 6d 62 6c 65 20 63 72 65 61 74  e ensemble creat
0390: 65 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20  e.}..# # ## ### 
03a0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
03b0: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
03c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
03d0: 23 23 0a 0a 64 65 62 75 67 20 64 65 66 69 6e 65  ##..debug define
03e0: 20 63 6d 64 72 2f 75 74 69 6c 0a 64 65 62 75 67   cmdr/util.debug
03f0: 20 6c 65 76 65 6c 20 20 63 6d 64 72 2f 75 74 69   level  cmdr/uti
0400: 6c 0a 64 65 62 75 67 20 70 72 65 66 69 78 20 63  l.debug prefix c
0410: 6d 64 72 2f 75 74 69 6c 20 7b 5b 64 65 62 75 67  mdr/util {[debug
0420: 20 63 61 6c 6c 65 72 5d 20 7c 20 7d 0a 0a 23 20   caller] | }..# 
0430: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
0440: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0450: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0460: 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 72 6f  ###########..pro
0470: 63 20 3a 3a 63 6d 64 72 3a 3a 75 74 69 6c 3a 3a  c ::cmdr::util::
0480: 70 61 64 72 20 7b 6c 69 73 74 7d 20 7b 0a 20 20  padr {list} {.  
0490: 20 20 64 65 62 75 67 2e 63 6d 64 72 2f 75 74 69    debug.cmdr/uti
04a0: 6c 20 7b 7d 0a 20 20 20 20 69 66 20 7b 5b 6c 6c  l {}.    if {[ll
04b0: 65 6e 67 74 68 20 24 6c 69 73 74 5d 20 3c 3d 20  ength $list] <= 
04c0: 31 7d 20 7b 0a 09 72 65 74 75 72 6e 20 24 6c 69  1} {..return $li
04d0: 73 74 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74  st.    }.    set
04e0: 20 6d 61 78 6c 20 30 0a 20 20 20 20 66 6f 72 65   maxl 0.    fore
04f0: 61 63 68 20 73 74 72 20 24 6c 69 73 74 20 7b 0a  ach str $list {.
0500: 09 73 65 74 20 6c 20 5b 73 74 72 69 6e 67 20 6c  .set l [string l
0510: 65 6e 67 74 68 20 24 73 74 72 5d 0a 09 69 66 20  ength $str]..if 
0520: 7b 24 6c 20 3c 3d 20 24 6d 61 78 6c 7d 20 63 6f  {$l <= $maxl} co
0530: 6e 74 69 6e 75 65 0a 09 73 65 74 20 6d 61 78 6c  ntinue..set maxl
0540: 20 24 6c 0a 20 20 20 20 7d 0a 20 20 20 20 73 65   $l.    }.    se
0550: 74 20 72 65 73 20 7b 7d 0a 20 20 20 20 66 6f 72  t res {}.    for
0560: 65 61 63 68 20 73 74 72 20 24 6c 69 73 74 20 7b  each str $list {
0570: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 66 6f   lappend res [fo
0580: 72 6d 61 74 20 22 25 2d 2a 73 22 20 24 6d 61 78  rmat "%-*s" $max
0590: 6c 20 24 73 74 72 5d 20 7d 0a 20 20 20 20 72 65  l $str] }.    re
05a0: 74 75 72 6e 20 24 72 65 73 0a 7d 0a 0a 70 72 6f  turn $res.}..pro
05b0: 63 20 3a 3a 63 6d 64 72 3a 3a 75 74 69 6c 3a 3a  c ::cmdr::util::
05c0: 64 69 63 74 73 6f 72 74 20 7b 64 69 63 74 7d 20  dictsort {dict} 
05d0: 7b 0a 20 20 20 20 73 65 74 20 72 20 7b 7d 0a 20  {.    set r {}. 
05e0: 20 20 20 66 6f 72 65 61 63 68 20 6b 20 5b 6c 73     foreach k [ls
05f0: 6f 72 74 20 2d 64 69 63 74 20 5b 64 69 63 74 20  ort -dict [dict 
0600: 6b 65 79 73 20 24 64 69 63 74 5d 5d 20 7b 0a 09  keys $dict]] {..
0610: 6c 61 70 70 65 6e 64 20 72 20 24 6b 20 5b 64 69  lappend r $k [di
0620: 63 74 20 67 65 74 20 24 64 69 63 74 20 24 6b 5d  ct get $dict $k]
0630: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
0640: 6e 20 24 72 0a 7d 0a 0a 23 20 23 20 23 23 20 23  n $r.}..# # ## #
0650: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
0660: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
0670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0680: 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 70  #####.## Ready.p
0690: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 63  ackage provide c
06a0: 6d 64 72 3a 3a 75 74 69 6c 20 30 2e 31 34 0a     mdr::util 0.14.