Tcl Library Source Code

Hex Artifact Content
Login

Artifact 6f36bcf1c4a75e696f6cc7bd44a0e5dd876fd7b1:


0000: 23 21 2f 62 69 6e 2f 73 68 0a 23 20 2d 2a 2d 20  #!/bin/sh.# -*- 
0010: 74 63 6c 20 2d 2a 2d 20 5c 0a 65 78 65 63 20 74  tcl -*- \.exec t
0020: 63 6c 73 68 20 22 24 30 22 20 24 7b 31 2b 22 24  clsh "$0" ${1+"$
0030: 40 22 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  @"}..# ---------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0070: 2d 2d 2d 2d 2d 0a 23 20 50 65 72 66 6f 72 6d 20  -----.# Perform 
0080: 76 61 72 69 6f 75 73 20 63 68 65 63 6b 73 20 61  various checks a
0090: 6e 64 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  nd operations on
00a0: 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f   the distributio
00b0: 6e 2e 0a 23 20 53 41 4b 20 3d 20 53 77 69 73 73  n..# SAK = Swiss
00c0: 20 41 72 6d 79 20 4b 6e 69 66 65 2e 0a 0a 73 65   Army Knife...se
00d0: 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 20  t distribution  
00e0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
00f0: 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0a 6c 61  info script]].la
0100: 70 70 65 6e 64 20 61 75 74 6f 5f 70 61 74 68 20  ppend auto_path 
0110: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 73   [file join $dis
0120: 74 72 69 62 75 74 69 6f 6e 20 6d 6f 64 75 6c 65  tribution module
0130: 73 5d 0a 0a 73 6f 75 72 63 65 20 5b 66 69 6c 65  s]..source [file
0140: 20 6a 6f 69 6e 20 24 64 69 73 74 72 69 62 75 74   join $distribut
0150: 69 6f 6e 20 74 63 6c 6c 69 62 5f 76 65 72 73 69  ion tcllib_versi
0160: 6f 6e 2e 74 63 6c 5d 20 3b 20 23 20 47 65 74 20  on.tcl] ; # Get 
0170: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
0180: 69 6f 6e 2e 0a 0a 63 61 74 63 68 20 7b 65 76 61  ion...catch {eva
0190: 6c 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66  l file delete -f
01a0: 6f 72 63 65 20 5b 67 6c 6f 62 20 5b 66 69 6c 65  orce [glob [file
01b0: 20 72 6f 6f 74 6e 61 6d 65 20 5b 69 6e 66 6f 20   rootname [info 
01c0: 73 63 72 69 70 74 5d 5d 2e 74 6d 70 2e 2a 5d 7d  script]].tmp.*]}
01d0: 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..# ------------
01e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0210: 2d 2d 0a 0a 70 72 6f 63 20 74 63 6c 66 69 6c 65  --..proc tclfile
0220: 73 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61  s {} {.    globa
0230: 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 20  l distribution. 
0240: 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69     package requi
0250: 72 65 20 66 69 6c 65 75 74 69 6c 0a 20 20 20 20  re fileutil.    
0260: 73 65 74 20 66 6c 20 5b 66 69 6c 65 75 74 69 6c  set fl [fileutil
0270: 3a 3a 66 69 6e 64 42 79 50 61 74 74 65 72 6e 20  ::findByPattern 
0280: 24 64 69 73 74 72 69 62 75 74 69 6f 6e 20 2d 67  $distribution -g
0290: 6c 6f 62 20 2a 2e 74 63 6c 5d 0a 20 20 20 20 70  lob *.tcl].    p
02a0: 72 6f 63 20 74 63 6c 66 69 6c 65 73 20 7b 7d 20  roc tclfiles {} 
02b0: 5b 6c 69 73 74 20 72 65 74 75 72 6e 20 24 66 6c  [list return $fl
02c0: 5d 0a 20 20 20 20 72 65 74 75 72 6e 20 24 66 6c  ].    return $fl
02d0: 0a 7d 0a 0a 70 72 6f 63 20 6d 6f 64 74 63 6c 66  .}..proc modtclf
02e0: 69 6c 65 73 20 7b 6d 6f 64 75 6c 65 73 7d 20 7b  iles {modules} {
02f0: 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d 66 69 6c  .    global mfil
0300: 65 73 20 67 75 69 64 65 0a 20 20 20 20 6c 6f 61  es guide.    loa
0310: 64 5f 6d 6f 64 69 6e 66 6f 0a 20 20 20 20 73 65  d_modinfo.    se
0320: 74 20 6d 66 69 6c 65 73 20 5b 6c 69 73 74 5d 0a  t mfiles [list].
0330: 20 20 20 20 66 6f 72 65 61 63 68 20 6d 20 24 6d      foreach m $m
0340: 6f 64 75 6c 65 73 20 7b 0a 09 65 76 61 6c 20 24  odules {..eval $
0350: 67 75 69 64 65 28 24 6d 2c 70 6b 67 29 20 24 6d  guide($m,pkg) $m
0360: 20 5f 5f 64 75 6d 6d 79 5f 5f 0a 20 20 20 20 7d   __dummy__.    }
0370: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 6d 66 69  .    return $mfi
0380: 6c 65 73 0a 7d 0a 0a 0a 70 72 6f 63 20 6d 6f 64  les.}...proc mod
0390: 75 6c 65 73 20 7b 7d 20 7b 0a 20 20 20 20 67 6c  ules {} {.    gl
03a0: 6f 62 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f  obal distributio
03b0: 6e 0a 20 20 20 20 73 65 74 20 66 6c 20 5b 6c 69  n.    set fl [li
03c0: 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  st].    foreach 
03d0: 66 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c  f [glob -nocompl
03e0: 61 69 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  ain [file join $
03f0: 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6d 6f 64  distribution mod
0400: 75 6c 65 73 20 2a 5d 5d 20 7b 0a 09 69 66 20 7b  ules *]] {..if {
0410: 21 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f  ![file isdirecto
0420: 72 79 20 24 66 5d 7d 20 7b 63 6f 6e 74 69 6e 75  ry $f]} {continu
0430: 65 7d 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20  e}..if {[string 
0440: 6d 61 74 63 68 20 43 56 53 20 5b 66 69 6c 65 20  match CVS [file 
0450: 74 61 69 6c 20 24 66 5d 5d 7d 20 7b 63 6f 6e 74  tail $f]]} {cont
0460: 69 6e 75 65 7d 0a 0a 09 69 66 20 7b 21 5b 66 69  inue}...if {![fi
0470: 6c 65 20 65 78 69 73 74 73 20 5b 66 69 6c 65 20  le exists [file 
0480: 6a 6f 69 6e 20 24 66 20 70 6b 67 49 6e 64 65 78  join $f pkgIndex
0490: 2e 74 63 6c 5d 5d 7d 20 7b 63 6f 6e 74 69 6e 75  .tcl]]} {continu
04a0: 65 7d 0a 0a 09 6c 61 70 70 65 6e 64 20 66 6c 20  e}...lappend fl 
04b0: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 5d 0a 20  [file tail $f]. 
04c0: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 66 6c 20     }.    set fl 
04d0: 5b 6c 73 6f 72 74 20 24 66 6c 5d 0a 20 20 20 20  [lsort $fl].    
04e0: 70 72 6f 63 20 6d 6f 64 75 6c 65 73 20 7b 7d 20  proc modules {} 
04f0: 5b 6c 69 73 74 20 72 65 74 75 72 6e 20 24 66 6c  [list return $fl
0500: 5d 0a 20 20 20 20 72 65 74 75 72 6e 20 24 66 6c  ].    return $fl
0510: 0a 7d 0a 0a 70 72 6f 63 20 6d 6f 64 75 6c 65 73  .}..proc modules
0520: 5f 6d 6f 64 20 7b 6d 7d 20 7b 0a 20 20 20 20 72  _mod {m} {.    r
0530: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 73  eturn [expr {[ls
0540: 65 61 72 63 68 20 2d 65 78 61 63 74 20 5b 6d 6f  earch -exact [mo
0550: 64 75 6c 65 73 5d 20 24 6d 5d 20 3e 20 30 7d 5d  dules] $m] > 0}]
0560: 0a 7d 0a 0a 70 72 6f 63 20 6c 6f 61 64 5f 6d 6f  .}..proc load_mo
0570: 64 69 6e 66 6f 20 7b 7d 20 7b 0a 20 20 20 20 67  dinfo {} {.    g
0580: 6c 6f 62 61 6c 20 64 69 73 74 72 69 62 75 74 69  lobal distributi
0590: 6f 6e 20 6d 6f 64 75 6c 65 73 20 67 75 69 64 65  on modules guide
05a0: 0a 20 20 20 20 73 6f 75 72 63 65 20 5b 66 69 6c  .    source [fil
05b0: 65 20 6a 6f 69 6e 20 24 64 69 73 74 72 69 62 75  e join $distribu
05c0: 74 69 6f 6e 20 69 6e 73 74 61 6c 6c 65 64 5f 6d  tion installed_m
05d0: 6f 64 75 6c 65 73 2e 74 63 6c 5d 20 3b 20 23 20  odules.tcl] ; # 
05e0: 47 65 74 20 6c 69 73 74 20 6f 66 20 69 6e 73 74  Get list of inst
05f0: 61 6c 6c 65 64 20 6d 6f 64 75 6c 65 73 2e 0a 20  alled modules.. 
0600: 20 20 20 73 6f 75 72 63 65 20 5b 66 69 6c 65 20     source [file 
0610: 6a 6f 69 6e 20 24 64 69 73 74 72 69 62 75 74 69  join $distributi
0620: 6f 6e 20 69 6e 73 74 61 6c 6c 5f 61 63 74 69 6f  on install_actio
0630: 6e 2e 74 63 6c 5d 20 3b 20 23 20 47 65 74 20 6c  n.tcl] ; # Get l
0640: 69 73 74 20 6f 66 20 69 6e 73 74 61 6c 6c 65 64  ist of installed
0650: 20 6d 6f 64 75 6c 65 73 2e 0a 20 20 20 20 70 72   modules..    pr
0660: 6f 63 20 6c 6f 61 64 5f 6d 6f 64 69 6e 66 6f 20  oc load_modinfo 
0670: 7b 7d 20 7b 7d 0a 20 20 20 20 72 65 74 75 72 6e  {} {}.    return
0680: 0a 7d 0a 0a 70 72 6f 63 20 69 6d 6f 64 75 6c 65  .}..proc imodule
0690: 73 20 7b 7d 20 7b 67 6c 6f 62 61 6c 20 6d 6f 64  s {} {global mod
06a0: 75 6c 65 73 20 3b 20 6c 6f 61 64 5f 6d 6f 64 69  ules ; load_modi
06b0: 6e 66 6f 20 3b 20 72 65 74 75 72 6e 20 24 6d 6f  nfo ; return $mo
06c0: 64 75 6c 65 73 7d 0a 0a 70 72 6f 63 20 69 6d 6f  dules}..proc imo
06d0: 64 75 6c 65 73 5f 6d 6f 64 20 7b 6d 7d 20 7b 0a  dules_mod {m} {.
06e0: 20 20 20 20 67 6c 6f 62 61 6c 20 6d 6f 64 75 6c      global modul
06f0: 65 73 0a 20 20 20 20 6c 6f 61 64 5f 6d 6f 64 69  es.    load_modi
0700: 6e 66 6f 0a 20 20 20 20 72 65 74 75 72 6e 20 5b  nfo.    return [
0710: 65 78 70 72 20 7b 5b 6c 73 65 61 72 63 68 20 2d  expr {[lsearch -
0720: 65 78 61 63 74 20 24 6d 6f 64 75 6c 65 73 20 24  exact $modules $
0730: 6d 5d 20 3e 20 30 7d 5d 0a 7d 0a 0a 0a 70 72 6f  m] > 0}].}...pro
0740: 63 20 6c 6f 61 64 70 6b 67 6c 69 73 74 20 7b 66  c loadpkglist {f
0750: 6e 61 6d 65 7d 20 7b 0a 20 20 20 20 73 65 74 20  name} {.    set 
0760: 66 20 5b 6f 70 65 6e 20 24 66 6e 61 6d 65 20 72  f [open $fname r
0770: 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6c 69  ].    foreach li
0780: 6e 65 20 5b 73 70 6c 69 74 20 5b 72 65 61 64 20  ne [split [read 
0790: 24 66 5d 20 5c 6e 5d 20 7b 0a 09 66 6f 72 65 61  $f] \n] {..forea
07a0: 63 68 20 7b 6e 20 76 7d 20 24 6c 69 6e 65 20 62  ch {n v} $line b
07b0: 72 65 61 6b 0a 09 73 65 74 20 70 28 24 6e 29 20  reak..set p($n) 
07c0: 24 76 0a 20 20 20 20 7d 0a 20 20 20 20 63 6c 6f  $v.    }.    clo
07d0: 73 65 20 24 66 0a 20 20 20 20 72 65 74 75 72 6e  se $f.    return
07e0: 20 5b 61 72 72 61 79 20 67 65 74 20 70 5d 0a 7d   [array get p].}
07f0: 0a 0a 70 72 6f 63 20 69 70 61 63 6b 61 67 65 73  ..proc ipackages
0800: 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20 20 23 20   {args} {.    # 
0810: 44 65 74 65 72 6d 69 6e 65 20 69 6e 64 65 78 65  Determine indexe
0820: 64 20 70 61 63 6b 61 67 65 73 20 28 69 66 6e 65  d packages (ifne
0830: 65 64 65 64 2c 20 70 6b 67 49 6e 64 65 78 2e 74  eded, pkgIndex.t
0840: 63 6c 29 0a 0a 20 20 20 20 67 6c 6f 62 61 6c 20  cl)..    global 
0850: 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 0a 20 20  distribution..  
0860: 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
0870: 61 72 67 73 5d 20 3d 3d 20 30 7d 20 7b 73 65 74  args] == 0} {set
0880: 20 61 72 67 73 20 5b 6d 6f 64 75 6c 65 73 5d 7d   args [modules]}
0890: 0a 0a 20 20 20 20 61 72 72 61 79 20 73 65 74 20  ..    array set 
08a0: 70 20 7b 7d 0a 20 20 20 20 66 6f 72 65 61 63 68  p {}.    foreach
08b0: 20 6d 20 24 61 72 67 73 20 7b 0a 09 73 65 74 20   m $args {..set 
08c0: 66 20 5b 6f 70 65 6e 20 5b 66 69 6c 65 20 6a 6f  f [open [file jo
08d0: 69 6e 20 24 64 69 73 74 72 69 62 75 74 69 6f 6e  in $distribution
08e0: 20 6d 6f 64 75 6c 65 73 20 24 6d 20 70 6b 67 49   modules $m pkgI
08f0: 6e 64 65 78 2e 74 63 6c 5d 20 72 5d 0a 09 66 6f  ndex.tcl] r]..fo
0900: 72 65 61 63 68 20 6c 69 6e 65 20 5b 73 70 6c 69  reach line [spli
0910: 74 20 5b 72 65 61 64 20 24 66 5d 20 5c 6e 5d 20  t [read $f] \n] 
0920: 7b 0a 09 20 20 20 20 69 66 20 7b 20 5b 72 65 67  {..    if { [reg
0930: 65 78 70 20 7b 23 7d 20 20 20 20 20 20 20 20 24  exp {#}        $
0940: 6c 69 6e 65 5d 7d 20 7b 63 6f 6e 74 69 6e 75 65  line]} {continue
0950: 7d 0a 09 20 20 20 20 69 66 20 7b 21 5b 72 65 67  }..    if {![reg
0960: 65 78 70 20 7b 69 66 6e 65 65 64 65 64 7d 20 24  exp {ifneeded} $
0970: 6c 69 6e 65 5d 7d 20 7b 63 6f 6e 74 69 6e 75 65  line]} {continue
0980: 7d 0a 09 20 20 20 20 72 65 67 73 75 62 20 7b 5e  }..    regsub {^
0990: 2e 2a 69 66 6e 65 65 64 65 64 20 7d 20 24 6c 69  .*ifneeded } $li
09a0: 6e 65 20 7b 7d 20 6c 69 6e 65 0a 09 20 20 20 20  ne {} line..    
09b0: 72 65 67 73 75 62 20 7b 28 5b 30 2d 39 5d 29 20  regsub {([0-9]) 
09c0: 5c 5b 2e 2a 24 7d 20 20 24 6c 69 6e 65 20 7b 5c  \[.*$}  $line {\
09d0: 31 7d 20 6c 69 6e 65 0a 0a 09 20 20 20 20 66 6f  1} line...    fo
09e0: 72 65 61 63 68 20 7b 6e 20 76 7d 20 24 6c 69 6e  reach {n v} $lin
09f0: 65 20 62 72 65 61 6b 0a 09 20 20 20 20 73 65 74  e break..    set
0a00: 20 70 28 24 6e 29 20 24 76 0a 09 7d 0a 09 63 6c   p($n) $v..}..cl
0a10: 6f 73 65 20 24 66 0a 20 20 20 20 7d 0a 20 20 20  ose $f.    }.   
0a20: 20 72 65 74 75 72 6e 20 5b 61 72 72 61 79 20 67   return [array g
0a30: 65 74 20 70 5d 0a 7d 0a 0a 0a 70 72 6f 63 20 70  et p].}...proc p
0a40: 70 61 63 6b 61 67 65 73 20 7b 61 72 67 73 7d 20  packages {args} 
0a50: 7b 0a 20 20 20 20 23 20 44 65 74 65 72 6d 69 6e  {.    # Determin
0a60: 65 20 70 72 6f 76 69 64 65 64 20 70 61 63 6b 61  e provided packa
0a70: 67 65 73 20 28 70 72 6f 76 69 64 65 2c 20 2a 2e  ges (provide, *.
0a80: 74 63 6c 20 2d 20 70 6b 67 49 6e 64 65 78 2e 74  tcl - pkgIndex.t
0a90: 63 6c 29 0a 0a 20 20 20 20 67 6c 6f 62 61 6c 20  cl)..    global 
0aa0: 20 20 20 70 20 70 66 20 63 75 72 72 65 6e 74 66     p pf currentf
0ab0: 69 6c 65 0a 20 20 20 20 61 72 72 61 79 20 73 65  ile.    array se
0ac0: 74 20 70 20 7b 7d 0a 0a 20 20 20 20 69 66 20 7b  t p {}..    if {
0ad0: 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 20  [llength $args] 
0ae0: 3d 3d 20 30 7d 20 7b 0a 09 73 65 74 20 66 69 6c  == 0} {..set fil
0af0: 65 73 20 5b 74 63 6c 66 69 6c 65 73 5d 0a 20 20  es [tclfiles].  
0b00: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 73 65 74 20    } else {..set 
0b10: 66 69 6c 65 73 20 5b 6d 6f 64 74 63 6c 66 69 6c  files [modtclfil
0b20: 65 73 20 24 61 72 67 73 5d 0a 20 20 20 20 7d 0a  es $args].    }.
0b30: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 66 20 24  .    foreach f $
0b40: 66 69 6c 65 73 20 7b 0a 09 23 20 57 65 20 69 67  files {..# We ig
0b50: 6e 6f 72 65 20 70 61 63 6b 61 67 65 20 69 6e 64  nore package ind
0b60: 69 63 65 73 20 61 6e 64 20 61 6c 6c 20 66 69 6c  ices and all fil
0b70: 65 73 20 6e 6f 74 20 69 6e 20 61 20 6d 6f 64 75  es not in a modu
0b80: 6c 65 2e 0a 0a 09 69 66 20 7b 5b 73 74 72 69 6e  le....if {[strin
0b90: 67 20 65 71 75 61 6c 20 70 6b 67 49 6e 64 65 78  g equal pkgIndex
0ba0: 2e 74 63 6c 20 5b 66 69 6c 65 20 74 61 69 6c 20  .tcl [file tail 
0bb0: 24 66 5d 5d 7d 20 7b 63 6f 6e 74 69 6e 75 65 7d  $f]]} {continue}
0bc0: 0a 09 69 66 20 7b 21 5b 72 65 67 65 78 70 20 6d  ..if {![regexp m
0bd0: 6f 64 75 6c 65 73 20 24 66 5d 7d 20 20 20 20 20  odules $f]}     
0be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bf0: 20 20 7b 63 6f 6e 74 69 6e 75 65 7d 0a 0a 09 73    {continue}...s
0c00: 65 74 20 66 68 20 5b 6f 70 65 6e 20 24 66 20 72  et fh [open $f r
0c10: 5d 0a 0a 09 23 20 53 6f 75 72 63 65 20 74 68 65  ]...# Source the
0c20: 20 63 6f 64 65 20 69 6e 74 6f 20 61 20 73 75 62   code into a sub
0c30: 2d 69 6e 74 65 72 70 72 65 74 65 72 2e 20 54 68  -interpreter. Th
0c40: 65 20 73 75 62 20 69 6e 74 65 72 70 72 65 74 65  e sub interprete
0c50: 72 0a 09 23 20 6f 76 65 72 6c 6f 61 64 73 20 27  r..# overloads '
0c60: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 27  package provide'
0c70: 20 73 6f 20 74 68 61 74 20 74 68 65 20 69 6e 66   so that the inf
0c80: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 09  ormation about..
0c90: 23 20 6e 65 77 20 70 61 63 6b 61 67 65 73 20 67  # new packages g
0ca0: 6f 65 73 20 64 69 72 65 63 74 6c 79 20 74 6f 20  oes directly to 
0cb0: 75 73 2e 20 57 65 20 61 6c 73 6f 20 6d 61 6b 65  us. We also make
0cc0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 0a 09   sure that the..
0cd0: 23 20 73 75 62 20 69 6e 74 65 72 70 72 65 74 65  # sub interprete
0ce0: 72 20 64 6f 65 73 6e 27 74 20 6b 69 6c 6c 20 75  r doesn't kill u
0cf0: 73 2c 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20  s, and will not 
0d00: 67 65 74 20 73 74 75 63 6b 0a 09 23 20 65 61 72  get stuck..# ear
0d10: 6c 79 20 62 79 20 74 72 79 69 6e 67 20 74 6f 20  ly by trying to 
0d20: 6c 6f 61 64 20 6f 74 68 65 72 20 66 69 6c 65 73  load other files
0d30: 2c 20 6f 72 20 77 68 65 6e 20 63 72 65 61 74 69  , or when creati
0d40: 6e 67 0a 09 23 20 70 72 6f 63 65 64 75 72 65 73  ng..# procedures
0d50: 20 69 6e 20 6e 61 6d 65 73 70 61 63 65 73 20 77   in namespaces w
0d60: 68 69 63 68 20 64 6f 20 6e 6f 74 20 65 78 69 73  hich do not exis
0d70: 74 20 64 75 65 20 74 6f 20 75 73 0a 09 23 20 64  t due to us..# d
0d80: 69 73 61 62 6c 69 6e 67 20 6d 6f 73 74 20 6f 66  isabling most of
0d90: 20 74 68 65 20 70 61 63 6b 61 67 65 20 6d 61 6e   the package man
0da0: 61 67 65 6d 65 6e 74 2e 0a 0a 09 73 65 74 20 63  agement....set c
0db0: 75 72 72 65 6e 74 66 69 6c 65 20 5b 65 76 61 6c  urrentfile [eval
0dc0: 20 66 69 6c 65 20 6a 6f 69 6e 20 5b 6c 72 61 6e   file join [lran
0dd0: 67 65 20 5b 66 69 6c 65 20 73 70 6c 69 74 20 24  ge [file split $
0de0: 66 5d 20 65 6e 64 2d 31 20 65 6e 64 5d 5d 0a 0a  f] end-1 end]]..
0df0: 09 73 65 74 20 69 70 20 5b 69 6e 74 65 72 70 20  .set ip [interp 
0e00: 63 72 65 61 74 65 5d 0a 09 69 6e 74 65 72 70 20  create]..interp 
0e10: 61 6c 69 61 73 20 24 69 70 20 70 61 63 6b 61 67  alias $ip packag
0e20: 65 20 7b 7d 20 78 50 61 63 6b 61 67 65 0a 09 69  e {} xPackage..i
0e30: 6e 74 65 72 70 20 61 6c 69 61 73 20 24 69 70 20  nterp alias $ip 
0e40: 73 6f 75 72 63 65 20 20 7b 7d 20 78 4e 55 4c 4c  source  {} xNULL
0e50: 0a 09 69 6e 74 65 72 70 20 61 6c 69 61 73 20 24  ..interp alias $
0e60: 69 70 20 75 6e 6b 6e 6f 77 6e 20 7b 7d 20 78 4e  ip unknown {} xN
0e70: 55 4c 4c 0a 09 69 6e 74 65 72 70 20 61 6c 69 61  ULL..interp alia
0e80: 73 20 24 69 70 20 70 72 6f 63 20 20 20 20 7b 7d  s $ip proc    {}
0e90: 20 78 4e 55 4c 4c 0a 09 69 6e 74 65 72 70 20 61   xNULL..interp a
0ea0: 6c 69 61 73 20 24 69 70 20 65 78 69 74 20 20 20  lias $ip exit   
0eb0: 20 7b 7d 20 78 4e 55 4c 4c 0a 09 69 66 20 7b 5b   {} xNULL..if {[
0ec0: 63 61 74 63 68 20 7b 24 69 70 20 65 76 61 6c 20  catch {$ip eval 
0ed0: 5b 72 65 61 64 20 24 66 68 5d 7d 20 6d 73 67 5d  [read $fh]} msg]
0ee0: 7d 20 7b 0a 09 20 20 20 20 23 70 75 74 73 20 22  } {..    #puts "
0ef0: 45 52 52 4f 52 20 69 6e 20 24 63 75 72 72 65 6e  ERROR in $curren
0f00: 74 66 69 6c 65 3a 5c 6e 24 6d 73 67 5c 6e 22 0a  tfile:\n$msg\n".
0f10: 09 7d 0a 09 63 6c 6f 73 65 20 24 66 68 0a 09 69  .}..close $fh..i
0f20: 6e 74 65 72 70 20 64 65 6c 65 74 65 20 24 69 70  nterp delete $ip
0f30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 65 74 20  .    }..    set 
0f40: 20 20 70 70 20 5b 61 72 72 61 79 20 67 65 74 20    pp [array get 
0f50: 70 5d 0a 20 20 20 20 75 6e 73 65 74 20 70 0a 20  p].    unset p. 
0f60: 20 20 20 72 65 74 75 72 6e 20 24 70 70 20 0a 7d     return $pp .}
0f70: 0a 0a 70 72 6f 63 20 78 4e 55 4c 4c 20 20 20 20  ..proc xNULL    
0f80: 7b 61 72 67 73 7d 20 7b 7d 0a 70 72 6f 63 20 78  {args} {}.proc x
0f90: 50 61 63 6b 61 67 65 20 7b 63 6d 64 20 61 72 67  Package {cmd arg
0fa0: 73 7d 20 7b 0a 0a 20 20 20 20 69 66 20 7b 5b 73  s} {..    if {[s
0fb0: 74 72 69 6e 67 20 65 71 75 61 6c 20 24 63 6d 64  tring equal $cmd
0fc0: 20 70 72 6f 76 69 64 65 5d 7d 20 7b 0a 09 67 6c   provide]} {..gl
0fd0: 6f 62 61 6c 20 70 20 70 66 20 63 75 72 72 65 6e  obal p pf curren
0fe0: 74 66 69 6c 65 0a 09 66 6f 72 65 61 63 68 20 7b  tfile..foreach {
0ff0: 6e 20 76 7d 20 24 61 72 67 73 20 62 72 65 61 6b  n v} $args break
1000: 0a 0a 09 23 20 4e 6f 20 76 65 72 73 69 6f 6e 20  ...# No version 
1010: 73 70 65 63 69 66 69 65 64 2c 20 74 68 69 73 20  specified, this 
1020: 69 73 20 61 6e 20 69 6e 71 75 69 72 79 2c 20 77  is an inquiry, w
1030: 65 20 69 67 6e 6f 72 65 20 74 68 65 73 65 2e 0a  e ignore these..
1040: 09 69 66 20 7b 24 76 20 3d 3d 20 7b 7d 7d 20 7b  .if {$v == {}} {
1050: 72 65 74 75 72 6e 7d 0a 0a 09 73 65 74 20 70 28  return}...set p(
1060: 24 6e 29 20 24 76 0a 09 73 65 74 20 70 66 28 24  $n) $v..set pf($
1070: 6e 29 20 24 63 75 72 72 65 6e 74 66 69 6c 65 0a  n) $currentfile.
1080: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
1090: 0a 7d 0a 0a 0a 0a 70 72 6f 63 20 73 65 70 20 7b  .}....proc sep {
10a0: 7d 20 7b 70 75 74 73 20 7e 7e 7e 7e 7e 7e 7e 7e  } {puts ~~~~~~~~
10b0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
10c0: 7d 0a 0a 70 72 6f 63 20 67 65 6e 64 6f 63 20 7b  }..proc gendoc {
10d0: 66 6d 74 20 65 78 74 20 61 72 67 73 7d 20 7b 0a  fmt ext args} {.
10e0: 20 20 20 20 67 6c 6f 62 61 6c 20 64 69 73 74 72      global distr
10f0: 69 62 75 74 69 6f 6e 0a 20 20 20 20 67 6c 6f 62  ibution.    glob
1100: 61 6c 20 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 0a  al tcl_platform.
1110: 0a 20 20 20 20 73 65 74 20 6e 75 6c 6c 20 30 0a  .    set null 0.
1120: 20 20 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67      if {![string
1130: 20 63 6f 6d 70 61 72 65 20 24 66 6d 74 20 6e 75   compare $fmt nu
1140: 6c 6c 5d 7d 20 7b 73 65 74 20 6e 75 6c 6c 20 31  ll]} {set null 1
1150: 7d 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  }.    if {[lleng
1160: 74 68 20 24 61 72 67 73 5d 20 3d 3d 20 30 7d 20  th $args] == 0} 
1170: 7b 73 65 74 20 61 72 67 73 20 5b 6d 6f 64 75 6c  {set args [modul
1180: 65 73 5d 7d 0a 0a 20 20 20 20 73 65 74 20 6d 70  es]}..    set mp
1190: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  e [file join $di
11a0: 73 74 72 69 62 75 74 69 6f 6e 20 6d 6f 64 75 6c  stribution modul
11b0: 65 73 20 64 6f 63 74 6f 6f 6c 73 20 6d 70 65 78  es doctools mpex
11c0: 70 61 6e 64 5d 0a 20 20 20 20 69 66 20 7b 24 74  pand].    if {$t
11d0: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74  cl_platform(plat
11e0: 66 6f 72 6d 29 20 21 3d 20 22 75 6e 69 78 22 7d  form) != "unix"}
11f0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d   {.        set m
1200: 70 65 20 5b 6c 69 73 74 20 5b 69 6e 66 6f 20 6e  pe [list [info n
1210: 61 6d 65 6f 66 65 78 65 63 75 74 61 62 6c 65 5d  ameofexecutable]
1220: 20 24 6d 70 65 5d 0a 20 20 20 20 7d 0a 20 20 20   $mpe].    }.   
1230: 20 73 65 74 20 3a 3a 65 6e 76 28 54 43 4c 4c 49   set ::env(TCLLI
1240: 42 50 41 54 48 29 20 5b 66 69 6c 65 20 6a 6f 69  BPATH) [file joi
1250: 6e 20 24 64 69 73 74 72 69 62 75 74 69 6f 6e 20  n $distribution 
1260: 6d 6f 64 75 6c 65 73 5d 0a 0a 20 20 20 20 69 66  modules]..    if
1270: 20 7b 21 24 6e 75 6c 6c 7d 20 7b 0a 09 66 69 6c   {!$null} {..fil
1280: 65 20 6d 6b 64 69 72 20 5b 66 69 6c 65 20 6a 6f  e mkdir [file jo
1290: 69 6e 20 64 6f 63 20 24 66 6d 74 5d 0a 20 20 20  in doc $fmt].   
12a0: 20 7d 0a 0a 20 20 20 20 66 6f 72 65 61 63 68 20   }..    foreach 
12b0: 6d 20 24 61 72 67 73 20 7b 0a 09 73 65 74 20 66  m $args {..set f
12c0: 6c 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c  l [glob -nocompl
12d0: 61 69 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  ain [file join $
12e0: 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6d 6f 64  distribution mod
12f0: 75 6c 65 73 20 24 6d 20 2a 2e 6d 61 6e 5d 5d 0a  ules $m *.man]].
1300: 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66  .if {[llength $f
1310: 6c 5d 20 3d 3d 20 30 7d 20 7b 63 6f 6e 74 69 6e  l] == 0} {contin
1320: 75 65 7d 0a 0a 09 69 66 20 7b 24 6e 75 6c 6c 7d  ue}...if {$null}
1330: 20 7b 0a 09 20 20 20 20 73 65 74 20 74 6d 70 20   {..    set tmp 
1340: 20 20 20 5b 6f 70 65 6e 20 5b 73 65 74 20 74 6d     [open [set tm
1350: 70 6e 61 6d 65 20 5b 66 69 6c 65 20 72 6f 6f 74  pname [file root
1360: 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70  name [info scrip
1370: 74 5d 5d 2e 74 6d 70 2e 5b 70 69 64 5d 5d 20 77  t]].tmp.[pid]] w
1380: 5d 0a 09 20 20 20 20 73 65 74 20 74 61 72 67 65  ]..    set targe
1390: 74 20 2d 0a 09 20 20 20 20 73 65 74 20 73 74 64  t -..    set std
13a0: 6f 75 74 20 24 74 6d 70 0a 09 20 20 20 20 73 65  out $tmp..    se
13b0: 74 20 73 74 64 65 72 72 20 24 74 6d 70 0a 09 7d  t stderr $tmp..}
13c0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74   else {..    set
13d0: 20 73 74 64 6f 75 74 20 73 74 64 6f 75 74 0a 09   stdout stdout..
13e0: 20 20 20 20 73 65 74 20 73 74 64 65 72 72 20 73      set stderr s
13f0: 74 64 65 72 72 0a 09 7d 0a 09 66 6f 72 65 61 63  tderr..}..foreac
1400: 68 20 66 20 24 66 6c 20 7b 0a 09 20 20 20 20 69  h f $fl {..    i
1410: 66 20 7b 21 24 6e 75 6c 6c 7d 20 7b 0a 20 20 20  f {!$null} {.   
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1430: 20 74 61 72 67 65 74 20 5b 66 69 6c 65 20 6a 6f   target [file jo
1440: 69 6e 20 64 6f 63 20 24 66 6d 74 20 5c 0a 20 20  in doc $fmt \.  
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
1470: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69  ile rootname [fi
1480: 6c 65 20 74 61 69 6c 20 24 66 5d 5d 2e 24 65 78  le tail $f]].$ex
1490: 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t].             
14a0: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
14b0: 73 74 73 20 24 74 61 72 67 65 74 5d 20 0a 20 20  sts $target] .  
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d0: 20 20 26 26 20 5b 66 69 6c 65 20 6d 74 69 6d 65    && [file mtime
14e0: 20 24 74 61 72 67 65 74 5d 20 3e 20 5b 66 69 6c   $target] > [fil
14f0: 65 20 6d 74 69 6d 65 20 24 66 5d 7d 20 7b 0a 20  e mtime $f]} {. 
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1510: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20     continue.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
1530: 20 20 20 7d 0a 09 20 20 20 20 70 75 74 73 20 22     }..    puts "
1540: 47 65 6e 20 28 24 66 6d 74 29 3a 20 24 66 22 0a  Gen ($fmt): $f".
1550: 0a 09 20 20 20 20 73 65 74 20 20 20 20 20 63 6d  ..    set     cm
1560: 64 20 24 6d 70 65 0a 09 20 20 20 20 6c 61 70 70  d $mpe..    lapp
1570: 65 6e 64 20 63 6d 64 20 2d 6d 6f 64 75 6c 65 20  end cmd -module 
1580: 24 6d 0a 09 20 20 20 20 69 66 20 7b 24 6e 75 6c  $m..    if {$nul
1590: 6c 7d 20 7b 6c 61 70 70 65 6e 64 20 63 6d 64 20  l} {lappend cmd 
15a0: 2d 64 65 70 72 65 63 61 74 65 64 7d 0a 09 20 20  -deprecated}..  
15b0: 20 20 6c 61 70 70 65 6e 64 20 63 6d 64 20 24 66    lappend cmd $f
15c0: 6d 74 20 24 66 20 24 74 61 72 67 65 74 20 3e 40  mt $f $target >@
15d0: 20 24 73 74 64 6f 75 74 20 32 3e 40 20 24 73 74   $stdout 2>@ $st
15e0: 64 65 72 72 0a 09 20 20 20 20 69 66 20 7b 5b 63  derr..    if {[c
15f0: 61 74 63 68 20 7b 0a 09 09 65 76 61 6c 20 65 78  atch {...eval ex
1600: 65 63 20 24 63 6d 64 0a 09 20 20 20 20 7d 20 6d  ec $cmd..    } m
1610: 73 67 5d 7d 20 7b 0a 09 09 70 75 74 73 20 24 6d  sg]} {...puts $m
1620: 73 67 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 69 66  sg..    }..}..if
1630: 20 7b 24 6e 75 6c 6c 7d 20 7b 0a 09 20 20 20 20   {$null} {..    
1640: 63 61 74 63 68 20 7b 63 6c 6f 73 65 20 24 74 6d  catch {close $tm
1650: 70 7d 0a 09 20 20 20 20 63 61 74 63 68 20 7b 66  p}..    catch {f
1660: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
1670: 65 20 24 74 6d 70 6e 61 6d 65 7d 0a 09 7d 0a 20  e $tmpname}..}. 
1680: 20 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20 67 64 2d     }.}..proc gd-
1690: 63 6c 65 61 6e 75 70 20 7b 7d 20 7b 0a 20 20 20  cleanup {} {.   
16a0: 20 67 6c 6f 62 61 6c 20 74 63 6c 6c 69 62 5f 76   global tcllib_v
16b0: 65 72 73 69 6f 6e 0a 0a 20 20 20 20 70 75 74 73  ersion..    puts
16c0: 20 7b 43 6c 65 61 6e 69 6e 67 20 75 70 2e 2e 2e   {Cleaning up...
16d0: 7d 0a 0a 20 20 20 20 73 65 74 20 20 20 20 20 20  }..    set      
16e0: 20 20 66 6c 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f    fl [glob -noco
16f0: 6d 70 6c 61 69 6e 20 74 63 6c 6c 69 62 2d 24 7b  mplain tcllib-${
1700: 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e 7d 2a  tcllib_version}*
1710: 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 66 20  ].    foreach f 
1720: 24 66 6c 20 7b 0a 09 70 75 74 73 20 22 20 20 20  $fl {..puts "   
1730: 20 44 65 6c 65 74 69 6e 67 20 24 66 20 2e 2e 2e   Deleting $f ...
1740: 22 0a 09 63 61 74 63 68 20 7b 66 69 6c 65 20 64  "..catch {file d
1750: 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 66 7d  elete -force $f}
1760: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
1770: 6e 0a 7d 0a 0a 70 72 6f 63 20 67 64 2d 67 65 6e  n.}..proc gd-gen
1780: 2d 61 72 63 68 69 76 65 73 20 7b 7d 20 7b 0a 20  -archives {} {. 
1790: 20 20 20 67 6c 6f 62 61 6c 20 74 63 6c 6c 69 62     global tcllib
17a0: 5f 76 65 72 73 69 6f 6e 0a 0a 20 20 20 20 70 75  _version..    pu
17b0: 74 73 20 7b 47 65 6e 65 72 61 74 69 6e 67 20 61  ts {Generating a
17c0: 72 63 68 69 76 65 73 2e 2e 2e 7d 0a 0a 20 20 20  rchives...}..   
17d0: 20 73 65 74 20 74 61 72 20 5b 61 75 74 6f 5f 65   set tar [auto_e
17e0: 78 65 63 6f 6b 20 74 61 72 5d 0a 20 20 20 20 69  xecok tar].    i
17f0: 66 20 7b 24 74 61 72 20 21 3d 20 7b 7d 7d 20 7b  f {$tar != {}} {
1800: 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22 20  .        puts " 
1810: 20 20 20 47 7a 69 70 70 65 64 20 74 61 72 62 61     Gzipped tarba
1820: 6c 6c 20 28 74 63 6c 6c 69 62 2d 24 7b 74 63 6c  ll (tcllib-${tcl
1830: 6c 69 62 5f 76 65 72 73 69 6f 6e 7d 2e 74 61 72  lib_version}.tar
1840: 2e 67 7a 29 2e 2e 2e 22 0a 20 20 20 20 20 20 20  .gz)...".       
1850: 20 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 20   catch {.       
1860: 20 20 20 20 20 65 78 65 63 20 24 74 61 72 20 63       exec $tar c
1870: 66 20 2d 20 74 63 6c 6c 69 62 2d 24 7b 74 63 6c  f - tcllib-${tcl
1880: 6c 69 62 5f 76 65 72 73 69 6f 6e 7d 20 7c 20 67  lib_version} | g
1890: 7a 69 70 20 2d 2d 62 65 73 74 20 3e 20 74 63 6c  zip --best > tcl
18a0: 6c 69 62 2d 24 7b 74 63 6c 6c 69 62 5f 76 65 72  lib-${tcllib_ver
18b0: 73 69 6f 6e 7d 2e 74 61 72 2e 67 7a 0a 20 20 20  sion}.tar.gz.   
18c0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
18d0: 73 65 74 20 62 7a 69 70 20 5b 61 75 74 6f 5f 65  set bzip [auto_e
18e0: 78 65 63 6f 6b 20 62 7a 69 70 32 5d 0a 20 20 20  xecok bzip2].   
18f0: 20 20 20 20 20 69 66 20 7b 24 62 7a 69 70 20 21       if {$bzip !
1900: 3d 20 7b 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20  = {}} {.        
1910: 20 20 20 20 70 75 74 73 20 22 20 20 20 20 42 7a      puts "    Bz
1920: 69 70 70 65 64 20 74 61 72 62 61 6c 6c 20 28 74  ipped tarball (t
1930: 63 6c 6c 69 62 2d 24 7b 74 63 6c 6c 69 62 5f 76  cllib-${tcllib_v
1940: 65 72 73 69 6f 6e 7d 2e 74 61 72 2e 62 7a 32 29  ersion}.tar.bz2)
1950: 2e 2e 2e 22 0a 20 20 20 20 20 20 20 20 20 20 20  ...".           
1960: 20 65 78 65 63 20 74 61 72 20 63 66 20 2d 20 74   exec tar cf - t
1970: 63 6c 6c 69 62 2d 24 7b 74 63 6c 6c 69 62 5f 76  cllib-${tcllib_v
1980: 65 72 73 69 6f 6e 7d 20 7c 20 62 7a 69 70 32 20  ersion} | bzip2 
1990: 3e 20 74 63 6c 6c 69 62 2d 24 7b 74 63 6c 6c 69  > tcllib-${tclli
19a0: 62 5f 76 65 72 73 69 6f 6e 7d 2e 74 61 72 2e 62  b_version}.tar.b
19b0: 7a 32 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  z2.        }.   
19c0: 20 7d 0a 0a 20 20 20 20 73 65 74 20 7a 69 70 20   }..    set zip 
19d0: 5b 61 75 74 6f 5f 65 78 65 63 6f 6b 20 7a 69 70  [auto_execok zip
19e0: 5d 0a 20 20 20 20 69 66 20 7b 24 7a 69 70 20 21  ].    if {$zip !
19f0: 3d 20 7b 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20  = {}} {.        
1a00: 70 75 74 73 20 22 20 20 20 20 5a 69 70 20 61 72  puts "    Zip ar
1a10: 63 68 69 76 65 20 20 20 20 20 28 74 63 6c 6c 69  chive     (tclli
1a20: 62 2d 24 7b 74 63 6c 6c 69 62 5f 76 65 72 73 69  b-${tcllib_versi
1a30: 6f 6e 7d 2e 7a 69 70 29 2e 2e 2e 22 0a 20 20 20  on}.zip)...".   
1a40: 20 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20       catch {.   
1a50: 20 20 20 20 20 20 20 20 20 65 78 65 63 20 24 7a           exec $z
1a60: 69 70 20 2d 72 20 20 20 74 63 6c 6c 69 62 2d 24  ip -r   tcllib-$
1a70: 7b 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e 7d  {tcllib_version}
1a80: 2e 7a 69 70 20 20 20 20 20 20 20 20 20 20 20 20  .zip            
1a90: 20 74 63 6c 6c 69 62 2d 24 7b 74 63 6c 6c 69 62   tcllib-${tcllib
1aa0: 5f 76 65 72 73 69 6f 6e 7d 0a 20 20 20 20 20 20  _version}.      
1ab0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73    }.    }..    s
1ac0: 65 74 20 73 64 78 20 5b 61 75 74 6f 5f 65 78 65  et sdx [auto_exe
1ad0: 63 6f 6b 20 73 64 78 5d 0a 20 20 20 20 69 66 20  cok sdx].    if 
1ae0: 7b 24 73 64 78 20 21 3d 20 7b 7d 7d 20 7b 0a 09  {$sdx != {}} {..
1af0: 66 69 6c 65 20 72 65 6e 61 6d 65 20 74 63 6c 6c  file rename tcll
1b00: 69 62 2d 24 7b 74 63 6c 6c 69 62 5f 76 65 72 73  ib-${tcllib_vers
1b10: 69 6f 6e 7d 20 74 63 6c 6c 69 62 2e 76 66 73 0a  ion} tcllib.vfs.
1b20: 0a 09 70 75 74 73 20 22 20 20 20 20 53 74 61 72  ..puts "    Star
1b30: 6b 69 74 20 20 20 20 20 20 20 20 20 28 74 63 6c  kit         (tcl
1b40: 6c 69 62 2d 24 7b 74 63 6c 6c 69 62 5f 76 65 72  lib-${tcllib_ver
1b50: 73 69 6f 6e 7d 2e 6b 69 74 29 2e 2e 2e 22 0a 09  sion}.kit)..."..
1b60: 65 78 65 63 20 73 64 78 20 77 72 61 70 20 74 63  exec sdx wrap tc
1b70: 6c 6c 69 62 0a 09 66 69 6c 65 20 72 65 6e 61 6d  llib..file renam
1b80: 65 20 20 20 74 63 6c 6c 69 62 20 74 63 6c 6c 69  e   tcllib tclli
1b90: 62 2d 24 7b 74 63 6c 6c 69 62 5f 76 65 72 73 69  b-${tcllib_versi
1ba0: 6f 6e 7d 2e 6b 69 74 0a 0a 09 69 66 20 7b 21 5b  on}.kit...if {![
1bb0: 66 69 6c 65 20 65 78 69 73 74 73 20 74 63 6c 6b  file exists tclk
1bc0: 69 74 5d 7d 20 7b 0a 09 20 20 20 20 70 75 74 73  it]} {..    puts
1bd0: 20 22 20 20 20 20 4e 6f 20 74 63 6c 6b 69 74 20   "    No tclkit 
1be0: 70 72 65 73 65 6e 74 20 69 6e 20 63 75 72 72 65  present in curre
1bf0: 6e 74 20 77 6f 72 6b 69 6e 67 20 64 69 72 65 63  nt working direc
1c00: 74 6f 72 79 2c 20 6e 6f 20 73 74 61 72 70 61 63  tory, no starpac
1c10: 6b 2e 22 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20  k."..} else {.. 
1c20: 20 20 20 70 75 74 73 20 22 20 20 20 20 53 74 61     puts "    Sta
1c30: 72 70 61 63 6b 20 20 20 20 20 20 20 20 28 74 63  rpack        (tc
1c40: 6c 6c 69 62 2d 24 7b 74 63 6c 6c 69 62 5f 76 65  llib-${tcllib_ve
1c50: 72 73 69 6f 6e 7d 2e 65 78 65 29 2e 2e 2e 22 0a  rsion}.exe)...".
1c60: 09 20 20 20 20 65 78 65 63 20 73 64 78 20 77 72  .    exec sdx wr
1c70: 61 70 20 74 63 6c 6c 69 62 20 2d 72 75 6e 74 69  ap tcllib -runti
1c80: 6d 65 20 74 63 6c 6b 69 74 0a 09 20 20 20 20 66  me tclkit..    f
1c90: 69 6c 65 20 72 65 6e 61 6d 65 20 20 20 74 63 6c  ile rename   tcl
1ca0: 6c 69 62 20 74 63 6c 6c 69 62 2d 24 7b 74 63 6c  lib tcllib-${tcl
1cb0: 6c 69 62 5f 76 65 72 73 69 6f 6e 7d 2e 65 78 65  lib_version}.exe
1cc0: 0a 09 7d 0a 0a 09 66 69 6c 65 20 72 65 6e 61 6d  ..}...file renam
1cd0: 65 20 74 63 6c 6c 69 62 2e 76 66 73 20 74 63 6c  e tcllib.vfs tcl
1ce0: 6c 69 62 2d 24 7b 74 63 6c 6c 69 62 5f 76 65 72  lib-${tcllib_ver
1cf0: 73 69 6f 6e 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  sion}.    }..   
1d00: 20 70 75 74 73 20 7b 20 20 20 20 4b 65 65 70 69   puts {    Keepi
1d10: 6e 67 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72  ng directory for
1d20: 20 6f 74 68 65 72 20 61 72 63 68 69 76 65 20 74   other archive t
1d30: 79 70 65 73 7d 0a 0a 20 20 20 20 23 23 20 4b 65  ypes}..    ## Ke
1d40: 65 70 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ep the directory
1d50: 20 66 6f 72 20 27 73 64 78 27 20 2d 20 6b 69 74   for 'sdx' - kit
1d60: 2f 70 61 63 6b 0a 20 20 20 20 72 65 74 75 72 6e  /pack.    return
1d70: 0a 7d 0a 0a 70 72 6f 63 20 78 63 6f 70 79 66 69  .}..proc xcopyfi
1d80: 6c 65 20 7b 73 72 63 20 64 65 73 74 7d 20 7b 0a  le {src dest} {.
1d90: 20 20 20 20 23 20 64 65 73 74 20 63 61 6e 20 62      # dest can b
1da0: 65 20 64 69 72 20 6f 72 20 66 69 6c 65 0a 20 20  e dir or file.  
1db0: 20 20 67 6c 6f 62 61 6c 20 20 6d 66 69 6c 65 73    global  mfiles
1dc0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 66 69  .    lappend mfi
1dd0: 6c 65 73 20 24 73 72 63 0a 20 20 20 20 72 65 74  les $src.    ret
1de0: 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 78 63 6f 70  urn.}..proc xcop
1df0: 79 20 7b 73 72 63 20 64 65 73 74 20 72 65 63 75  y {src dest recu
1e00: 72 73 65 20 7b 70 61 74 74 65 72 6e 20 2a 7d 7d  rse {pattern *}}
1e10: 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20 66   {.    foreach f
1e20: 69 6c 65 20 5b 67 6c 6f 62 20 5b 66 69 6c 65 20  ile [glob [file 
1e30: 6a 6f 69 6e 20 24 73 72 63 20 24 70 61 74 74 65  join $src $patte
1e40: 72 6e 5d 5d 20 7b 0a 20 20 20 20 20 20 20 20 73  rn]] {.        s
1e50: 65 74 20 62 61 73 65 20 5b 66 69 6c 65 20 74 61  et base [file ta
1e60: 69 6c 20 24 66 69 6c 65 5d 0a 09 73 65 74 20 73  il $file]..set s
1e70: 75 62 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  ub  [file join $
1e80: 64 65 73 74 20 24 62 61 73 65 5d 0a 09 69 66 20  dest $base]..if 
1e90: 7b 30 20 3d 3d 20 5b 73 74 72 69 6e 67 20 63 6f  {0 == [string co
1ea0: 6d 70 61 72 65 20 43 56 53 20 24 62 61 73 65 5d  mpare CVS $base]
1eb0: 7d 20 7b 63 6f 6e 74 69 6e 75 65 7d 0a 20 20 20  } {continue}.   
1ec0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 69       if {[file i
1ed0: 73 64 69 72 65 63 74 6f 72 79 20 24 66 69 6c 65  sdirectory $file
1ee0: 5d 7d 20 74 68 65 6e 20 7b 0a 09 20 20 20 20 69  ]} then {..    i
1ef0: 66 20 7b 24 72 65 63 75 72 73 65 7d 20 7b 0a 09  f {$recurse} {..
1f00: 09 78 63 6f 70 79 20 24 66 69 6c 65 20 24 73 75  .xcopy $file $su
1f10: 62 20 24 72 65 63 75 72 73 65 20 24 70 61 74 74  b $recurse $patt
1f20: 65 72 6e 0a 09 20 20 20 20 7d 0a 20 20 20 20 20  ern..    }.     
1f30: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
1f40: 20 20 20 20 20 20 20 20 78 63 6f 70 79 66 69 6c          xcopyfil
1f50: 65 20 24 66 69 6c 65 20 24 73 75 62 0a 20 20 20  e $file $sub.   
1f60: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d 0a 0a       }.    }.}..
1f70: 0a 70 72 6f 63 20 78 78 63 6f 70 79 20 7b 73 72  .proc xxcopy {sr
1f80: 63 20 64 65 73 74 20 72 65 63 75 72 73 65 20 7b  c dest recurse {
1f90: 70 61 74 74 65 72 6e 20 2a 7d 7d 20 7b 0a 20 20  pattern *}} {.  
1fa0: 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 64 65    file mkdir $de
1fb0: 73 74 0a 20 20 20 20 66 6f 72 65 61 63 68 20 66  st.    foreach f
1fc0: 69 6c 65 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d  ile [glob -nocom
1fd0: 70 6c 61 69 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  plain [file join
1fe0: 20 24 73 72 63 20 24 70 61 74 74 65 72 6e 5d 5d   $src $pattern]]
1ff0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 62   {.        set b
2000: 61 73 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  ase [file tail $
2010: 66 69 6c 65 5d 0a 09 73 65 74 20 73 75 62 20 20  file]..set sub  
2020: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 65 73 74  [file join $dest
2030: 20 24 62 61 73 65 5d 0a 0a 09 23 20 45 78 63 6c   $base]...# Excl
2040: 75 64 65 20 43 56 53 20 61 75 74 6f 6d 61 74 69  ude CVS automati
2050: 63 61 6c 6c 79 2c 20 61 6e 64 20 70 6f 73 73 69  cally, and possi
2060: 62 6c 79 20 74 68 65 20 74 65 6d 70 20 68 69 65  bly the temp hie
2070: 72 61 72 63 68 79 0a 09 23 20 69 74 73 65 6c 66  rarchy..# itself
2080: 20 74 6f 6f 2e 0a 0a 09 69 66 20 7b 30 20 3d 3d   too....if {0 ==
2090: 20 5b 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 65   [string compare
20a0: 20 43 56 53 20 24 62 61 73 65 5d 7d 20 7b 63 6f   CVS $base]} {co
20b0: 6e 74 69 6e 75 65 7d 0a 09 69 66 20 7b 5b 73 74  ntinue}..if {[st
20c0: 72 69 6e 67 20 6d 61 74 63 68 20 74 63 6c 6c 69  ring match tclli
20d0: 62 2d 2a 20 20 20 24 62 61 73 65 5d 7d 20 7b 63  b-*   $base]} {c
20e0: 6f 6e 74 69 6e 75 65 7d 0a 09 69 66 20 7b 5b 73  ontinue}..if {[s
20f0: 74 72 69 6e 67 20 6d 61 74 63 68 20 2a 7e 20 20  tring match *~  
2100: 20 20 20 20 20 20 20 24 62 61 73 65 5d 7d 20 7b         $base]} {
2110: 63 6f 6e 74 69 6e 75 65 7d 0a 0a 20 20 20 20 20  continue}..     
2120: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 69 73 64     if {[file isd
2130: 69 72 65 63 74 6f 72 79 20 24 66 69 6c 65 5d 7d  irectory $file]}
2140: 20 74 68 65 6e 20 7b 0a 09 20 20 20 20 69 66 20   then {..    if 
2150: 7b 24 72 65 63 75 72 73 65 7d 20 7b 0a 09 09 66  {$recurse} {...f
2160: 69 6c 65 20 6d 6b 64 69 72 20 20 24 73 75 62 0a  ile mkdir  $sub.
2170: 09 09 78 78 63 6f 70 79 20 24 66 69 6c 65 20 24  ..xxcopy $file $
2180: 73 75 62 20 24 72 65 63 75 72 73 65 20 24 70 61  sub $recurse $pa
2190: 74 74 65 72 6e 0a 09 20 20 20 20 7d 0a 20 20 20  ttern..    }.   
21a0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
21b0: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
21c0: 6e 65 20 73 74 64 6f 75 74 20 2e 20 3b 20 66 6c  ne stdout . ; fl
21d0: 75 73 68 20 73 74 64 6f 75 74 0a 20 20 20 20 20  ush stdout.     
21e0: 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79         file copy
21f0: 20 2d 66 6f 72 63 65 20 24 66 69 6c 65 20 24 73   -force $file $s
2200: 75 62 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ub.        }.   
2210: 20 7d 0a 7d 0a 0a 70 72 6f 63 20 67 64 2d 61 73   }.}..proc gd-as
2220: 73 65 6d 62 6c 65 20 7b 7d 20 7b 0a 20 20 20 20  semble {} {.    
2230: 67 6c 6f 62 61 6c 20 74 63 6c 6c 69 62 5f 76 65  global tcllib_ve
2240: 72 73 69 6f 6e 20 64 69 73 74 72 69 62 75 74 69  rsion distributi
2250: 6f 6e 0a 0a 20 20 20 20 70 75 74 73 20 22 41 73  on..    puts "As
2260: 73 65 6d 62 6c 69 6e 67 20 64 69 73 74 72 69 62  sembling distrib
2270: 75 74 69 6f 6e 20 69 6e 20 64 69 72 65 63 74 6f  ution in directo
2280: 72 79 20 27 74 63 6c 6c 69 62 2d 24 7b 74 63 6c  ry 'tcllib-${tcl
2290: 6c 69 62 5f 76 65 72 73 69 6f 6e 7d 27 22 0a 0a  lib_version}'"..
22a0: 20 20 20 20 78 78 63 6f 70 79 20 24 64 69 73 74      xxcopy $dist
22b0: 72 69 62 75 74 69 6f 6e 20 74 63 6c 6c 69 62 2d  ribution tcllib-
22c0: 24 7b 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e  ${tcllib_version
22d0: 7d 20 31 0a 20 20 20 20 66 69 6c 65 20 64 65 6c  } 1.    file del
22e0: 65 74 65 20 2d 66 6f 72 63 65 20 5c 0a 09 20 20  ete -force \..  
22f0: 20 20 74 63 6c 6c 69 62 2d 24 7b 74 63 6c 6c 69    tcllib-${tclli
2300: 62 5f 76 65 72 73 69 6f 6e 7d 2f 63 6f 6e 66 69  b_version}/confi
2310: 67 20 5c 0a 09 20 20 20 20 74 63 6c 6c 69 62 2d  g \..    tcllib-
2320: 24 7b 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e  ${tcllib_version
2330: 7d 2f 6d 6f 64 75 6c 65 73 2f 66 74 70 2f 65 78  }/modules/ftp/ex
2340: 61 6d 70 6c 65 20 5c 0a 09 20 20 20 20 74 63 6c  ample \..    tcl
2350: 6c 69 62 2d 24 7b 74 63 6c 6c 69 62 5f 76 65 72  lib-${tcllib_ver
2360: 73 69 6f 6e 7d 2f 6d 6f 64 75 6c 65 73 2f 66 74  sion}/modules/ft
2370: 70 64 2f 65 78 61 6d 70 6c 65 73 20 5c 0a 09 20  pd/examples \.. 
2380: 20 20 20 74 63 6c 6c 69 62 2d 24 7b 74 63 6c 6c     tcllib-${tcll
2390: 69 62 5f 76 65 72 73 69 6f 6e 7d 2f 6d 6f 64 75  ib_version}/modu
23a0: 6c 65 73 2f 73 74 61 74 73 20 5c 0a 09 20 20 20  les/stats \..   
23b0: 20 74 63 6c 6c 69 62 2d 24 7b 74 63 6c 6c 69 62   tcllib-${tcllib
23c0: 5f 76 65 72 73 69 6f 6e 7d 2f 6d 6f 64 75 6c 65  _version}/module
23d0: 73 2f 66 69 6c 65 69 6e 70 75 74 0a 20 20 20 20  s/fileinput.    
23e0: 70 75 74 73 20 22 22 0a 20 20 20 20 72 65 74 75  puts "".    retu
23f0: 72 6e 0a 7d 0a 0a 70 72 6f 63 20 67 64 2d 67 65  rn.}..proc gd-ge
2400: 6e 2d 74 61 70 20 7b 7d 20 7b 0a 20 20 20 20 70  n-tap {} {.    p
2410: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 74  ackage require t
2420: 65 78 74 75 74 69 6c 0a 20 20 20 20 70 61 63 6b  extutil.    pack
2430: 61 67 65 20 72 65 71 75 69 72 65 20 66 69 6c 65  age require file
2440: 75 74 69 6c 0a 20 20 20 20 67 6c 6f 62 61 6c 20  util.    global 
2450: 74 63 6c 6c 69 62 5f 6e 61 6d 65 20 74 63 6c 6c  tcllib_name tcll
2460: 69 62 5f 76 65 72 73 69 6f 6e 20 64 69 73 74 72  ib_version distr
2470: 69 62 75 74 69 6f 6e 20 74 63 6c 5f 70 6c 61 74  ibution tcl_plat
2480: 66 6f 72 6d 0a 0a 20 20 20 20 73 65 74 20 6d 6f  form..    set mo
2490: 64 75 6c 65 73 20 5b 69 6d 6f 64 75 6c 65 73 5d  dules [imodules]
24a0: 0a 20 20 20 20 73 65 74 20 20 20 20 20 6c 69 6e  .    set     lin
24b0: 65 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 23 20  es [list].    # 
24c0: 48 65 61 64 65 72 0a 20 20 20 20 6c 61 70 70 65  Header.    lappe
24d0: 6e 64 20 6c 69 6e 65 73 20 7b 66 6f 72 6d 61 74  nd lines {format
24e0: 20 20 7b 54 63 6c 44 65 76 4b 69 74 20 50 72 6f    {TclDevKit Pro
24f0: 6a 65 63 74 20 46 69 6c 65 7d 7d 0a 20 20 20 20  ject File}}.    
2500: 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 7b 66  lappend lines {f
2510: 6d 74 76 65 72 20 20 32 2e 30 7d 0a 20 20 20 20  mtver  2.0}.    
2520: 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 7b 66  lappend lines {f
2530: 6d 74 74 6f 6f 6c 20 7b 54 63 6c 44 65 76 4b 69  mttool {TclDevKi
2540: 74 20 54 63 6c 41 70 70 20 50 61 63 6b 61 67 65  t TclApp Package
2550: 44 65 66 69 6e 69 74 69 6f 6e 7d 20 32 2e 35 7d  Definition} 2.5}
2560: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e  .    lappend lin
2570: 65 73 20 7b 7d 0a 20 20 20 20 6c 61 70 70 65 6e  es {}.    lappen
2580: 64 20 6c 69 6e 65 73 20 22 23 23 20 20 53 61 76  d lines "##  Sav
2590: 65 64 20 61 74 20 3a 20 5b 63 6c 6f 63 6b 20 66  ed at : [clock f
25a0: 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63  ormat [clock sec
25b0: 6f 6e 64 73 5d 5d 22 0a 20 20 20 20 6c 61 70 70  onds]]".    lapp
25c0: 65 6e 64 20 6c 69 6e 65 73 20 22 23 23 20 20 42  end lines "##  B
25d0: 79 20 20 20 20 20 20 20 3a 20 24 74 63 6c 5f 70  y       : $tcl_p
25e0: 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 22 0a 20  latform(user)". 
25f0: 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73     lappend lines
2600: 20 7b 23 23 7d 0a 20 20 20 20 6c 61 70 70 65 6e   {##}.    lappen
2610: 64 20 6c 69 6e 65 73 20 22 23 23 20 20 47 65 6e  d lines "##  Gen
2620: 65 72 61 74 65 64 20 62 79 20 5c 22 5b 66 69 6c  erated by \"[fil
2630: 65 20 74 61 69 6c 20 5b 69 6e 66 6f 20 73 63 72  e tail [info scr
2640: 69 70 74 5d 5d 20 74 61 70 5c 22 22 0a 20 20 20  ipt]] tap\"".   
2650: 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 22   lappend lines "
2660: 23 23 20 20 6f 66 20 24 74 63 6c 6c 69 62 5f 6e  ##  of $tcllib_n
2670: 61 6d 65 20 24 74 63 6c 6c 69 62 5f 76 65 72 73  ame $tcllib_vers
2680: 69 6f 6e 22 0a 20 20 20 20 6c 61 70 70 65 6e 64  ion".    lappend
2690: 20 6c 69 6e 65 73 20 7b 7d 0a 20 20 20 20 6c 61   lines {}.    la
26a0: 70 70 65 6e 64 20 6c 69 6e 65 73 20 7b 23 23 23  ppend lines {###
26b0: 23 23 23 23 23 7d 0a 20 20 20 20 6c 61 70 70 65  #####}.    lappe
26c0: 6e 64 20 6c 69 6e 65 73 20 7b 23 23 23 23 23 7d  nd lines {#####}
26d0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e  .    lappend lin
26e0: 65 73 20 7b 23 23 23 7d 0a 20 20 20 20 6c 61 70  es {###}.    lap
26f0: 70 65 6e 64 20 6c 69 6e 65 73 20 7b 23 23 7d 0a  pend lines {##}.
2700: 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65      lappend line
2710: 73 20 7b 23 7d 0a 0a 20 20 20 20 23 20 42 75 6e  s {#}..    # Bun
2720: 64 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20  dle definition. 
2730: 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73     lappend lines
2740: 20 7b 7d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {}.    lappend 
2750: 6c 69 6e 65 73 20 7b 23 20 23 23 23 23 23 23 23  lines {# #######
2760: 23 23 23 23 23 23 23 23 7d 0a 20 20 20 20 6c 61  ########}.    la
2770: 70 70 65 6e 64 20 6c 69 6e 65 73 20 7b 23 20 43  ppend lines {# C
2780: 6f 6d 70 6c 65 74 65 20 62 75 6e 64 6c 65 7d 0a  omplete bundle}.
2790: 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65      lappend line
27a0: 73 20 7b 7d 0a 20 20 20 20 6c 61 70 70 65 6e 64  s {}.    lappend
27b0: 20 6c 69 6e 65 73 20 5b 6c 69 73 74 20 50 61 63   lines [list Pac
27c0: 6b 61 67 65 20 5b 6c 69 73 74 20 24 74 63 6c 6c  kage [list $tcll
27d0: 69 62 5f 6e 61 6d 65 20 24 74 63 6c 6c 69 62 5f  ib_name $tcllib_
27e0: 76 65 72 73 69 6f 6e 5d 5d 0a 20 20 20 20 6c 61  version]].    la
27f0: 70 70 65 6e 64 20 6c 69 6e 65 73 20 22 42 61 73  ppend lines "Bas
2800: 65 20 20 20 20 20 40 54 41 50 5f 44 49 52 40 22  e     @TAP_DIR@"
2810: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e  .    lappend lin
2820: 65 73 20 22 50 6c 61 74 66 6f 72 6d 20 2a 22 0a  es "Platform *".
2830: 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65      lappend line
2840: 73 20 22 44 65 73 63 20 20 20 20 20 7b 54 63 6c  s "Desc     {Tcl
2850: 6c 69 62 3a 20 42 75 6e 64 6c 65 20 6f 66 20 61  lib: Bundle of a
2860: 6c 6c 20 70 61 63 6b 61 67 65 73 7d 22 0a 20 20  ll packages}".  
2870: 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20    lappend lines 
2880: 22 50 61 74 68 20 20 20 20 20 70 6b 67 49 6e 64  "Path     pkgInd
2890: 65 78 2e 74 63 6c 22 0a 20 20 20 20 6c 61 70 70  ex.tcl".    lapp
28a0: 65 6e 64 20 6c 69 6e 65 73 20 22 50 61 74 68 20  end lines "Path 
28b0: 20 20 20 20 5b 6a 6f 69 6e 20 24 6d 6f 64 75 6c      [join $modul
28c0: 65 73 20 22 5c 6e 50 61 74 68 20 20 20 20 20 22  es "\nPath     "
28d0: 5d 22 0a 0a 20 20 20 20 73 65 74 20 20 73 74 72  ]"..    set  str
28e0: 69 70 20 5b 6c 6c 65 6e 67 74 68 20 5b 66 69 6c  ip [llength [fil
28f0: 65 20 73 70 6c 69 74 20 24 64 69 73 74 72 69 62  e split $distrib
2900: 75 74 69 6f 6e 5d 5d 0a 20 20 20 20 69 6e 63 72  ution]].    incr
2910: 20 73 74 72 69 70 20 32 0a 0a 20 20 20 20 66 6f   strip 2..    fo
2920: 72 65 61 63 68 20 6d 20 24 6d 6f 64 75 6c 65 73  reach m $modules
2930: 20 7b 0a 09 23 20 46 69 6c 65 20 73 65 74 20 6f   {..# File set o
2940: 66 20 6d 6f 64 75 6c 65 20 2e 2e 2e 0a 0a 09 6c  f module ......l
2950: 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 7b 7d 0a  append lines {}.
2960: 09 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 22  .lappend lines "
2970: 23 20 23 23 23 23 23 23 23 23 23 5b 3a 3a 74 65  # #########[::te
2980: 78 74 75 74 69 6c 3a 3a 73 74 72 52 65 70 65 61  xtutil::strRepea
2990: 74 20 7b 23 7d 20 5b 73 74 72 69 6e 67 20 6c 65  t {#} [string le
29a0: 6e 67 74 68 20 24 6d 5d 5d 22 20 3b 20 23 20 7b  ngth $m]]" ; # {
29b0: 7d 0a 09 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73  }..lappend lines
29c0: 20 22 23 20 4d 6f 64 75 6c 65 20 5c 22 24 6d 5c   "# Module \"$m\
29d0: 22 22 0a 09 73 65 74 20 6e 20 30 0a 09 66 6f 72  ""..set n 0..for
29e0: 65 61 63 68 20 7b 70 20 76 7d 20 5b 70 70 61 63  each {p v} [ppac
29f0: 6b 61 67 65 73 20 24 6d 5d 20 7b 0a 09 20 20 20  kages $m] {..   
2a00: 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 22   lappend lines "
2a10: 23 20 5c 5b 5b 66 6f 72 6d 61 74 20 25 31 64 20  # \[[format %1d 
2a20: 5b 69 6e 63 72 20 6e 5d 5d 5c 5d 20 20 20 20 7c  [incr n]]\]    |
2a30: 20 5c 22 24 70 5c 22 22 0a 09 7d 0a 09 6c 61 70   \"$p\""..}..lap
2a40: 70 65 6e 64 20 6c 69 6e 65 73 20 22 23 20 2d 2d  pend lines "# --
2a50: 2d 2d 2d 2d 2d 2b 22 0a 09 6c 61 70 70 65 6e 64  -----+"..lappend
2a60: 20 6c 69 6e 65 73 20 7b 7d 0a 09 6c 61 70 70 65   lines {}..lappe
2a70: 6e 64 20 6c 69 6e 65 73 20 5b 6c 69 73 74 20 50  nd lines [list P
2a80: 61 63 6b 61 67 65 20 5b 6c 69 73 74 20 5f 5f 24  ackage [list __$
2a90: 6d 20 30 2e 30 5d 5d 0a 09 6c 61 70 70 65 6e 64  m 0.0]]..lappend
2aa0: 20 6c 69 6e 65 73 20 22 50 6c 61 74 66 6f 72 6d   lines "Platform
2ab0: 20 2a 22 0a 09 6c 61 70 70 65 6e 64 20 6c 69 6e   *"..lappend lin
2ac0: 65 73 20 22 44 65 73 63 20 20 20 20 20 7b 54 63  es "Desc     {Tc
2ad0: 6c 6c 69 62 20 6d 6f 64 75 6c 65 7d 22 0a 09 6c  llib module}"..l
2ae0: 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 48 69 64  append lines Hid
2af0: 64 65 6e 0a 09 6c 61 70 70 65 6e 64 20 6c 69 6e  den..lappend lin
2b00: 65 73 20 22 42 61 73 65 20 20 20 20 20 40 54 41  es "Base     @TA
2b10: 50 5f 44 49 52 40 2f 24 6d 22 0a 0a 09 66 6f 72  P_DIR@/$m"...for
2b20: 65 61 63 68 20 66 20 5b 6d 6f 64 74 63 6c 66 69  each f [modtclfi
2b30: 6c 65 73 20 24 6d 5d 20 7b 0a 09 20 20 20 20 6c  les $m] {..    l
2b40: 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 22 50 61  append lines "Pa
2b50: 74 68 20 20 20 20 20 5b 66 69 6c 65 75 74 69 6c  th     [fileutil
2b60: 3a 3a 73 74 72 69 70 4e 20 24 66 20 24 73 74 72  ::stripN $f $str
2b70: 69 70 5d 22 0a 09 7d 0a 0a 09 23 20 50 61 63 6b  ip]"..}...# Pack
2b80: 61 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 64 75  ages in the modu
2b90: 6c 65 20 2e 2e 2e 0a 09 66 6f 72 65 61 63 68 20  le .....foreach 
2ba0: 7b 70 20 76 7d 20 5b 70 70 61 63 6b 61 67 65 73  {p v} [ppackages
2bb0: 20 24 6d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70   $m] {..    lapp
2bc0: 65 6e 64 20 6c 69 6e 65 73 20 7b 7d 0a 09 20 20  end lines {}..  
2bd0: 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20    lappend lines 
2be0: 5b 6c 69 73 74 20 50 61 63 6b 61 67 65 20 5b 6c  [list Package [l
2bf0: 69 73 74 20 24 70 20 24 76 5d 5d 0a 09 20 20 20  ist $p $v]]..   
2c00: 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 22   lappend lines "
2c10: 53 65 65 20 20 20 5b 6c 69 73 74 20 5f 5f 24 6d  See   [list __$m
2c20: 5d 22 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ]"..    lappend 
2c30: 6c 69 6e 65 73 20 22 50 6c 61 74 66 6f 72 6d 20  lines "Platform 
2c40: 2a 22 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  *"..    lappend 
2c50: 6c 69 6e 65 73 20 22 44 65 73 63 20 20 20 20 20  lines "Desc     
2c60: 7b 54 63 6c 6c 69 62 20 70 61 63 6b 61 67 65 7d  {Tcllib package}
2c70: 22 0a 09 7d 0a 09 6c 61 70 70 65 6e 64 20 6c 69  "..}..lappend li
2c80: 6e 65 73 20 7b 7d 0a 09 6c 61 70 70 65 6e 64 20  nes {}..lappend 
2c90: 6c 69 6e 65 73 20 7b 23 7d 0a 09 6c 61 70 70 65  lines {#}..lappe
2ca0: 6e 64 20 6c 69 6e 65 73 20 22 23 20 23 23 23 23  nd lines "# ####
2cb0: 23 23 23 23 23 5b 3a 3a 74 65 78 74 75 74 69 6c  #####[::textutil
2cc0: 3a 3a 73 74 72 52 65 70 65 61 74 20 7b 23 7d 20  ::strRepeat {#} 
2cd0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
2ce0: 6d 5d 5d 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  m]]".    }..    
2cf0: 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20 7b 7d  lappend lines {}
2d00: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e  .    lappend lin
2d10: 65 73 20 7b 23 7d 0a 20 20 20 20 6c 61 70 70 65  es {#}.    lappe
2d20: 6e 64 20 6c 69 6e 65 73 20 7b 23 23 7d 0a 20 20  nd lines {##}.  
2d30: 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65 73 20    lappend lines 
2d40: 7b 23 23 23 7d 0a 20 20 20 20 6c 61 70 70 65 6e  {###}.    lappen
2d50: 64 20 6c 69 6e 65 73 20 7b 23 23 23 23 23 7d 0a  d lines {#####}.
2d60: 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 6e 65      lappend line
2d70: 73 20 7b 23 23 23 23 23 23 23 23 7d 0a 0a 20 20  s {########}..  
2d80: 20 20 23 20 57 72 69 74 65 20 64 65 66 69 6e 69    # Write defini
2d90: 74 69 6f 6e 0a 20 20 20 20 73 65 74 20 20 20 20  tion.    set    
2da0: 66 20 5b 6f 70 65 6e 20 5b 66 69 6c 65 20 6a 6f  f [open [file jo
2db0: 69 6e 20 24 64 69 73 74 72 69 62 75 74 69 6f 6e  in $distribution
2dc0: 20 74 63 6c 6c 69 62 2e 74 61 70 5d 20 77 5d 0a   tcllib.tap] w].
2dd0: 20 20 20 20 70 75 74 73 20 20 24 66 20 5b 6a 6f      puts  $f [jo
2de0: 69 6e 20 24 6c 69 6e 65 73 20 5c 6e 5d 0a 20 20  in $lines \n].  
2df0: 20 20 63 6c 6f 73 65 20 24 66 0a 20 20 20 20 72    close $f.    r
2e00: 65 74 75 72 6e 0a 7d 0a 0a 0a 70 72 6f 63 20 67  eturn.}...proc g
2e10: 64 2d 74 69 70 35 35 20 7b 7d 20 7b 0a 20 20 20  d-tip55 {} {.   
2e20: 20 67 6c 6f 62 61 6c 20 74 63 6c 6c 69 62 5f 76   global tcllib_v
2e30: 65 72 73 69 6f 6e 20 74 63 6c 6c 69 62 5f 6e 61  ersion tcllib_na
2e40: 6d 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20  me distribution 
2e50: 63 6f 6e 74 72 69 62 75 74 6f 72 73 0a 20 20 20  contributors.   
2e60: 20 63 6f 6e 74 72 69 62 75 74 6f 72 73 0a 0a 20   contributors.. 
2e70: 20 20 20 73 65 74 20 6d 64 20 7b 49 64 65 6e 74     set md {Ident
2e80: 69 66 69 65 72 3a 20 25 4e 0a 54 69 74 6c 65 3a  ifier: %N.Title:
2e90: 20 20 54 63 6c 20 53 74 61 6e 64 61 72 64 20 4c    Tcl Standard L
2ea0: 69 62 72 61 72 79 0a 44 65 73 63 72 69 70 74 69  ibrary.Descripti
2eb0: 6f 6e 3a 20 54 68 69 73 20 70 61 63 6b 61 67 65  on: This package
2ec0: 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20   is intended to 
2ed0: 62 65 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20  be a collection 
2ee0: 6f 66 0a 20 20 20 20 54 63 6c 20 70 61 63 6b 61  of.    Tcl packa
2ef0: 67 65 73 20 74 68 61 74 20 70 72 6f 76 69 64 65  ges that provide
2f00: 20 75 74 69 6c 69 74 79 20 66 75 6e 63 74 69 6f   utility functio
2f10: 6e 73 20 75 73 65 66 75 6c 20 74 6f 20 61 0a 20  ns useful to a. 
2f20: 20 20 20 6c 61 72 67 65 20 63 6f 6c 6c 65 63 74     large collect
2f30: 69 6f 6e 20 6f 66 20 54 63 6c 20 70 72 6f 67 72  ion of Tcl progr
2f40: 61 6d 6d 65 72 73 2e 0a 52 69 67 68 74 73 3a 20  ammers..Rights: 
2f50: 42 53 44 0a 56 65 72 73 69 6f 6e 3a 20 25 56 0a  BSD.Version: %V.
2f60: 55 52 4c 3a 20 68 74 74 70 3a 2f 2f 74 63 6c 6c  URL: http://tcll
2f70: 69 62 2e 73 6f 75 72 63 65 66 6f 72 67 65 2e 6e  ib.sourceforge.n
2f80: 65 74 2f 0a 41 72 63 68 69 74 65 63 74 75 72 65  et/.Architecture
2f90: 3a 20 74 63 6c 0a 7d 0a 0a 20 20 20 20 72 65 67  : tcl.}..    reg
2fa0: 73 75 62 20 7b 56 65 72 73 69 6f 6e 3a 20 25 56  sub {Version: %V
2fb0: 7d 20 24 6d 64 20 22 56 65 72 73 69 6f 6e 3a 20  } $md "Version: 
2fc0: 24 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e 22  $tcllib_version"
2fd0: 20 6d 64 0a 20 20 20 20 72 65 67 73 75 62 20 7b   md.    regsub {
2fe0: 49 64 65 6e 74 69 66 69 65 72 3a 20 25 4e 7d 20  Identifier: %N} 
2ff0: 24 6d 64 20 22 49 64 65 6e 74 69 66 69 65 72 3a  $md "Identifier:
3000: 20 24 74 63 6c 6c 69 62 5f 6e 61 6d 65 22 20 6d   $tcllib_name" m
3010: 64 0a 20 20 20 20 66 6f 72 65 61 63 68 20 70 65  d.    foreach pe
3020: 72 73 6f 6e 20 5b 6c 73 6f 72 74 20 5b 61 72 72  rson [lsort [arr
3030: 61 79 20 6e 61 6d 65 73 20 63 6f 6e 74 72 69 62  ay names contrib
3040: 75 74 6f 72 73 5d 5d 20 7b 0a 20 20 20 20 20 20  utors]] {.      
3050: 20 20 73 65 74 20 6d 61 69 6c 20 24 63 6f 6e 74    set mail $cont
3060: 72 69 62 75 74 6f 72 73 28 24 70 65 72 73 6f 6e  ributors($person
3070: 29 0a 20 20 20 20 20 20 20 20 72 65 67 73 75 62  ).        regsub
3080: 20 7b 40 7d 20 20 24 6d 61 69 6c 20 22 20 61 74   {@}  $mail " at
3090: 20 22 20 6d 61 69 6c 0a 20 20 20 20 20 20 20 20   " mail.        
30a0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 2e 7d  regsub -all {\.}
30b0: 20 24 6d 61 69 6c 20 22 20 64 6f 74 20 22 20 6d   $mail " dot " m
30c0: 61 69 6c 0a 20 20 20 20 20 20 20 20 61 70 70 65  ail.        appe
30d0: 6e 64 20 6d 64 20 22 43 6f 6e 74 72 69 62 75 74  nd md "Contribut
30e0: 6f 72 3a 20 24 70 65 72 73 6f 6e 20 3c 24 6d 61  or: $person <$ma
30f0: 69 6c 3e 5c 6e 22 0a 20 20 20 20 7d 0a 0a 20 20  il>\n".    }..  
3100: 20 20 73 65 74 20 66 20 5b 6f 70 65 6e 20 5b 66    set f [open [f
3110: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 73 74 72 69  ile join $distri
3120: 62 75 74 69 6f 6e 20 44 45 53 43 52 49 50 54 49  bution DESCRIPTI
3130: 4f 4e 2e 74 78 74 5d 20 77 5d 0a 20 20 20 20 70  ON.txt] w].    p
3140: 75 74 73 20 24 66 20 24 6d 64 0a 20 20 20 20 63  uts $f $md.    c
3150: 6c 6f 73 65 20 24 66 0a 7d 0a 0a 23 20 46 69 6c  lose $f.}..# Fil
3160: 6c 20 74 68 65 20 67 6c 6f 62 61 6c 20 61 72 72  l the global arr
3170: 61 79 20 6f 66 20 63 6f 6e 74 72 69 62 75 74 6f  ay of contributo
3180: 72 73 20 74 6f 20 74 63 6c 6c 69 62 20 62 79 20  rs to tcllib by 
3190: 70 72 6f 63 65 73 73 69 6e 67 20 74 68 65 0a 23  processing the.#
31a0: 20 43 68 61 6e 67 65 4c 6f 67 20 65 6e 74 72 69   ChangeLog entri
31b0: 65 73 2e 0a 23 0a 70 72 6f 63 20 63 6f 6e 74 72  es..#.proc contr
31c0: 69 62 75 74 6f 72 73 20 7b 7d 20 7b 0a 20 20 20  ibutors {} {.   
31d0: 20 67 6c 6f 62 61 6c 20 64 69 73 74 72 69 62 75   global distribu
31e0: 74 69 6f 6e 20 63 6f 6e 74 72 69 62 75 74 6f 72  tion contributor
31f0: 73 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  s.    if {![info
3200: 20 65 78 69 73 74 73 20 63 6f 6e 74 72 69 62 75   exists contribu
3210: 74 6f 72 73 5d 20 7c 7c 20 5b 61 72 72 61 79 20  tors] || [array 
3220: 73 69 7a 65 20 63 6f 6e 74 72 69 62 75 74 6f 72  size contributor
3230: 73 5d 20 3d 3d 20 30 7d 20 7b 0a 20 20 20 20 20  s] == 0} {.     
3240: 20 20 20 67 65 74 5f 63 6f 6e 74 72 69 62 75 74     get_contribut
3250: 6f 72 73 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  ors [file join $
3260: 64 69 73 74 72 69 62 75 74 69 6f 6e 20 43 68 61  distribution Cha
3270: 6e 67 65 4c 6f 67 5d 0a 0a 20 20 20 20 20 20 20  ngeLog]..       
3280: 20 66 6f 72 65 61 63 68 20 66 20 5b 67 6c 6f 62   foreach f [glob
3290: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5b 66 69   -nocomplain [fi
32a0: 6c 65 20 6a 6f 69 6e 20 24 64 69 73 74 72 69 62  le join $distrib
32b0: 75 74 69 6f 6e 20 6d 6f 64 75 6c 65 73 20 2a 5d  ution modules *]
32c0: 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ] {.            
32d0: 69 66 20 7b 21 5b 66 69 6c 65 20 69 73 64 69 72  if {![file isdir
32e0: 65 63 74 6f 72 79 20 24 66 5d 7d 20 7b 63 6f 6e  ectory $f]} {con
32f0: 74 69 6e 75 65 7d 0a 20 20 20 20 20 20 20 20 20  tinue}.         
3300: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d     if {[string m
3310: 61 74 63 68 20 43 56 53 20 5b 66 69 6c 65 20 74  atch CVS [file t
3320: 61 69 6c 20 24 66 5d 5d 7d 20 7b 63 6f 6e 74 69  ail $f]]} {conti
3330: 6e 75 65 7d 0a 20 20 20 20 20 20 20 20 20 20 20  nue}.           
3340: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
3350: 74 73 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 66  ts [file join $f
3360: 20 43 68 61 6e 67 65 4c 6f 67 5d 5d 7d 20 7b 63   ChangeLog]]} {c
3370: 6f 6e 74 69 6e 75 65 7d 0a 20 20 20 20 20 20 20  ontinue}.       
3380: 20 20 20 20 20 67 65 74 5f 63 6f 6e 74 72 69 62       get_contrib
3390: 75 74 6f 72 73 20 5b 66 69 6c 65 20 6a 6f 69 6e  utors [file join
33a0: 20 24 66 20 43 68 61 6e 67 65 4c 6f 67 5d 0a 20   $f ChangeLog]. 
33b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d         }.    }.}
33c0: 0a 0a 70 72 6f 63 20 67 65 74 5f 63 6f 6e 74 72  ..proc get_contr
33d0: 69 62 75 74 6f 72 73 20 7b 63 68 61 6e 67 65 6c  ibutors {changel
33e0: 6f 67 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c  og} {.    global
33f0: 20 63 6f 6e 74 72 69 62 75 74 6f 72 73 0a 20 20   contributors.  
3400: 20 20 73 65 74 20 66 20 5b 6f 70 65 6e 20 24 63    set f [open $c
3410: 68 61 6e 67 65 6c 6f 67 20 72 5d 0a 20 20 20 20  hangelog r].    
3420: 77 68 69 6c 65 20 7b 21 5b 65 6f 66 20 24 66 5d  while {![eof $f]
3430: 7d 20 7b 0a 20 20 20 20 20 20 20 20 67 65 74 73  } {.        gets
3440: 20 24 66 20 6c 69 6e 65 0a 20 20 20 20 20 20 20   $f line.       
3450: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 5b   if {[regexp {^[
3460: 5c 64 2d 5d 2b 5c 73 2b 28 2e 2a 3f 29 3c 28 2e  \d-]+\s+(.*?)<(.
3470: 2a 3f 29 3e 7d 20 24 6c 69 6e 65 20 72 20 6e 61  *?)>} $line r na
3480: 6d 65 20 6d 61 69 6c 5d 7d 20 7b 0a 20 20 20 20  me mail]} {.    
3490: 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65          set name
34a0: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 6e   [string trim $n
34b0: 61 6d 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ame].           
34c0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
34d0: 74 73 20 6e 61 6d 65 73 28 24 6e 61 6d 65 29 5d  ts names($name)]
34e0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
34f0: 20 20 20 20 73 65 74 20 63 6f 6e 74 72 69 62 75      set contribu
3500: 74 6f 72 73 28 24 6e 61 6d 65 29 20 24 6d 61 69  tors($name) $mai
3510: 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  l.            }.
3520: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a          }.    }.
3530: 20 20 20 20 63 6c 6f 73 65 20 24 66 0a 7d 0a 0a      close $f.}..
3540: 70 72 6f 63 20 76 61 6c 69 64 61 74 65 5f 69 6d  proc validate_im
3550: 6f 64 75 6c 65 73 5f 63 6d 70 20 7b 69 6d 76 61  odules_cmp {imva
3560: 72 20 64 6d 76 61 72 7d 20 7b 0a 20 20 20 20 75  r dmvar} {.    u
3570: 70 76 61 72 20 24 69 6d 76 61 72 20 69 6d 20 24  pvar $imvar im $
3580: 64 6d 76 61 72 20 64 6d 0a 0a 20 20 20 20 66 6f  dmvar dm..    fo
3590: 72 65 61 63 68 20 6d 20 5b 6c 73 6f 72 74 20 5b  reach m [lsort [
35a0: 61 72 72 61 79 20 6e 61 6d 65 73 20 69 6d 5d 5d  array names im]]
35b0: 20 7b 0a 09 69 66 20 7b 21 5b 69 6e 66 6f 20 65   {..if {![info e
35c0: 78 69 73 74 73 20 64 6d 28 24 6d 29 5d 7d 20 7b  xists dm($m)]} {
35d0: 0a 09 20 20 20 20 70 75 74 73 20 22 20 20 49 6e  ..    puts "  In
35e0: 73 74 61 6c 6c 65 64 2c 20 64 6f 65 73 20 6e 6f  stalled, does no
35f0: 74 20 65 78 69 73 74 3a 20 24 6d 22 0a 09 7d 0a  t exist: $m"..}.
3600: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 65 61 63      }.    foreac
3610: 68 20 6d 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61  h m [lsort [arra
3620: 79 20 6e 61 6d 65 73 20 64 6d 5d 5d 20 7b 0a 09  y names dm]] {..
3630: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
3640: 73 20 69 6d 28 24 6d 29 5d 7d 20 7b 0a 09 20 20  s im($m)]} {..  
3650: 20 20 70 75 74 73 20 22 20 20 4d 69 73 73 69 6e    puts "  Missin
3660: 67 20 69 6e 20 69 6e 73 74 61 6c 6c 65 72 3a 20  g in installer: 
3670: 20 20 20 20 20 24 6d 22 0a 09 7d 0a 20 20 20 20       $m"..}.    
3680: 7d 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  }.    return.}..
3690: 70 72 6f 63 20 76 61 6c 69 64 61 74 65 5f 69 6d  proc validate_im
36a0: 6f 64 75 6c 65 73 20 7b 7d 20 7b 0a 20 20 20 20  odules {} {.    
36b0: 66 6f 72 65 61 63 68 20 6d 20 5b 69 6d 6f 64 75  foreach m [imodu
36c0: 6c 65 73 5d 20 7b 73 65 74 20 69 6d 28 24 6d 29  les] {set im($m)
36d0: 20 2e 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20   .}.    foreach 
36e0: 6d 20 5b 6d 6f 64 75 6c 65 73 5d 20 20 7b 73 65  m [modules]  {se
36f0: 74 20 64 6d 28 24 6d 29 20 2e 7d 0a 0a 20 20 20  t dm($m) .}..   
3700: 20 76 61 6c 69 64 61 74 65 5f 69 6d 6f 64 75 6c   validate_imodul
3710: 65 73 5f 63 6d 70 20 69 6d 20 64 6d 0a 20 20 20  es_cmp im dm.   
3720: 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20   return.}..proc 
3730: 76 61 6c 69 64 61 74 65 5f 69 6d 6f 64 75 6c 65  validate_imodule
3740: 73 5f 6d 6f 64 20 7b 6d 7d 20 7b 0a 20 20 20 20  s_mod {m} {.    
3750: 61 72 72 61 79 20 73 65 74 20 69 6d 20 7b 7d 0a  array set im {}.
3760: 20 20 20 20 61 72 72 61 79 20 73 65 74 20 64 6d      array set dm
3770: 20 7b 7d 0a 20 20 20 20 69 66 20 7b 5b 69 6d 6f   {}.    if {[imo
3780: 64 75 6c 65 73 5f 6d 6f 64 20 24 6d 5d 7d 20 7b  dules_mod $m]} {
3790: 73 65 74 20 69 6d 28 24 6d 29 20 2e 7d 0a 20 20  set im($m) .}.  
37a0: 20 20 69 66 20 7b 5b 6d 6f 64 75 6c 65 73 5f 6d    if {[modules_m
37b0: 6f 64 20 20 24 6d 5d 7d 20 7b 73 65 74 20 64 6d  od  $m]} {set dm
37c0: 28 24 6d 29 20 2e 7d 0a 0a 20 20 20 20 76 61 6c  ($m) .}..    val
37d0: 69 64 61 74 65 5f 69 6d 6f 64 75 6c 65 73 5f 63  idate_imodules_c
37e0: 6d 70 20 69 6d 20 64 6d 0a 20 20 20 20 72 65 74  mp im dm.    ret
37f0: 75 72 6e 0a 7d 0a 70 72 6f 63 20 76 61 6c 69 64  urn.}.proc valid
3800: 61 74 65 5f 76 65 72 73 69 6f 6e 73 5f 63 6d 70  ate_versions_cmp
3810: 20 7b 69 70 76 61 72 20 70 70 76 61 72 7d 20 7b   {ipvar ppvar} {
3820: 0a 20 20 20 20 75 70 76 61 72 20 24 69 70 76 61  .    upvar $ipva
3830: 72 20 69 70 20 24 70 70 76 61 72 20 70 70 0a 20  r ip $ppvar pp. 
3840: 20 20 20 73 65 74 20 6d 61 78 6c 20 30 0a 20 20     set maxl 0.  
3850: 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b    foreach name [
3860: 61 72 72 61 79 20 6e 61 6d 65 73 20 69 70 5d 20  array names ip] 
3870: 7b 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  {if {[string len
3880: 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 24 6d 61  gth $name] > $ma
3890: 78 6c 7d 20 7b 73 65 74 20 6d 61 78 6c 20 5b 73  xl} {set maxl [s
38a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61  tring length $na
38b0: 6d 65 5d 7d 7d 0a 20 20 20 20 66 6f 72 65 61 63  me]}}.    foreac
38c0: 68 20 6e 61 6d 65 20 5b 61 72 72 61 79 20 6e 61  h name [array na
38d0: 6d 65 73 20 70 70 5d 20 7b 69 66 20 7b 5b 73 74  mes pp] {if {[st
38e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d  ring length $nam
38f0: 65 5d 20 3e 20 24 6d 61 78 6c 7d 20 7b 73 65 74  e] > $maxl} {set
3900: 20 6d 61 78 6c 20 5b 73 74 72 69 6e 67 20 6c 65   maxl [string le
3910: 6e 67 74 68 20 24 6e 61 6d 65 5d 7d 7d 0a 0a 20  ngth $name]}}.. 
3920: 20 20 20 66 6f 72 65 61 63 68 20 70 20 5b 6c 73     foreach p [ls
3930: 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  ort [array names
3940: 20 69 70 5d 5d 20 7b 0a 09 69 66 20 7b 21 5b 69   ip]] {..if {![i
3950: 6e 66 6f 20 65 78 69 73 74 73 20 70 70 28 24 70  nfo exists pp($p
3960: 29 5d 7d 20 7b 0a 09 20 20 20 20 70 75 74 73 20  )]} {..    puts 
3970: 22 20 20 49 6e 64 65 78 65 64 2c 20 6e 6f 20 70  "  Indexed, no p
3980: 72 6f 76 69 64 65 72 3a 20 20 20 20 20 20 20 20  rovider:        
3990: 20 20 20 24 70 22 0a 09 7d 0a 20 20 20 20 7d 0a     $p"..}.    }.
39a0: 20 20 20 20 66 6f 72 65 61 63 68 20 70 20 5b 6c      foreach p [l
39b0: 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65  sort [array name
39c0: 73 20 70 70 5d 5d 20 7b 0a 09 69 66 20 7b 21 5b  s pp]] {..if {![
39d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 69 70 28 24  info exists ip($
39e0: 70 29 5d 7d 20 7b 0a 09 20 20 20 20 70 75 74 73  p)]} {..    puts
39f0: 20 22 20 20 50 72 6f 76 69 64 65 64 2c 20 6e 6f   "  Provided, no
3a00: 74 20 69 6e 64 65 78 65 64 3a 20 20 20 20 20 20  t indexed:      
3a10: 20 20 20 20 5b 66 6f 72 6d 61 74 20 22 25 2d 2a      [format "%-*
3a20: 73 20 7c 20 25 73 22 20 24 6d 61 78 6c 20 24 70  s | %s" $maxl $p
3a30: 20 24 3a 3a 70 66 28 24 70 29 5d 22 0a 09 7d 0a   $::pf($p)]"..}.
3a40: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 65 61 63      }.    foreac
3a50: 68 20 70 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61  h p [lsort [arra
3a60: 79 20 6e 61 6d 65 73 20 69 70 5d 5d 20 7b 0a 09  y names ip]] {..
3a70: 69 66 20 7b 0a 09 20 20 20 20 5b 69 6e 66 6f 20  if {..    [info 
3a80: 65 78 69 73 74 73 20 70 70 28 24 70 29 5d 20 26  exists pp($p)] &
3a90: 26 20 21 5b 73 74 72 69 6e 67 20 65 71 75 61 6c  & ![string equal
3aa0: 20 24 70 70 28 24 70 29 20 24 69 70 28 24 70 29   $pp($p) $ip($p)
3ab0: 5d 0a 09 7d 20 7b 0a 09 20 20 20 20 70 75 74 73  ]..} {..    puts
3ac0: 20 22 20 20 49 6e 64 65 78 2f 70 72 6f 76 69 64   "  Index/provid
3ad0: 65 64 20 76 65 72 73 69 6f 6e 73 20 64 69 66 66  ed versions diff
3ae0: 65 72 3a 20 5b 66 6f 72 6d 61 74 20 22 25 2d 2a  er: [format "%-*
3af0: 73 20 7c 20 25 38 73 20 7c 20 25 38 73 22 20 24  s | %8s | %8s" $
3b00: 6d 61 78 6c 20 24 70 20 24 69 70 28 24 70 29 20  maxl $p $ip($p) 
3b10: 24 70 70 28 24 70 29 5d 22 0a 09 7d 0a 20 20 20  $pp($p)]"..}.   
3b20: 20 7d 0a 7d 0a 0a 70 72 6f 63 20 76 61 6c 69 64   }.}..proc valid
3b30: 61 74 65 5f 76 65 72 73 69 6f 6e 73 20 7b 7d 20  ate_versions {} 
3b40: 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20 7b 70  {.    foreach {p
3b50: 20 76 7d 20 5b 69 70 61 63 6b 61 67 65 73 5d 20   v} [ipackages] 
3b60: 7b 73 65 74 20 69 70 28 24 70 29 20 24 76 7d 0a  {set ip($p) $v}.
3b70: 20 20 20 20 66 6f 72 65 61 63 68 20 7b 70 20 76      foreach {p v
3b80: 7d 20 5b 70 70 61 63 6b 61 67 65 73 5d 20 7b 73  } [ppackages] {s
3b90: 65 74 20 70 70 28 24 70 29 20 24 76 7d 0a 0a 20  et pp($p) $v}.. 
3ba0: 20 20 20 76 61 6c 69 64 61 74 65 5f 76 65 72 73     validate_vers
3bb0: 69 6f 6e 73 5f 63 6d 70 20 69 70 20 70 70 0a 20  ions_cmp ip pp. 
3bc0: 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f     return.}..pro
3bd0: 63 20 76 61 6c 69 64 61 74 65 5f 76 65 72 73 69  c validate_versi
3be0: 6f 6e 73 5f 6d 6f 64 20 7b 6d 7d 20 7b 0a 20 20  ons_mod {m} {.  
3bf0: 20 20 66 6f 72 65 61 63 68 20 7b 70 20 76 7d 20    foreach {p v} 
3c00: 5b 69 70 61 63 6b 61 67 65 73 20 24 6d 5d 20 7b  [ipackages $m] {
3c10: 73 65 74 20 69 70 28 24 70 29 20 24 76 7d 0a 20  set ip($p) $v}. 
3c20: 20 20 20 66 6f 72 65 61 63 68 20 7b 70 20 76 7d     foreach {p v}
3c30: 20 5b 70 70 61 63 6b 61 67 65 73 20 24 6d 5d 20   [ppackages $m] 
3c40: 7b 73 65 74 20 70 70 28 24 70 29 20 24 76 7d 0a  {set pp($p) $v}.
3c50: 0a 20 20 20 20 76 61 6c 69 64 61 74 65 5f 76 65  .    validate_ve
3c60: 72 73 69 6f 6e 73 5f 63 6d 70 20 69 70 20 70 70  rsions_cmp ip pp
3c70: 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70  .    return.}..p
3c80: 72 6f 63 20 76 61 6c 69 64 61 74 65 5f 74 65 73  roc validate_tes
3c90: 74 73 75 69 74 65 5f 6d 6f 64 20 7b 6d 7d 20 7b  tsuite_mod {m} {
3ca0: 0a 20 20 20 20 67 6c 6f 62 61 6c 20 64 69 73 74  .    global dist
3cb0: 72 69 62 75 74 69 6f 6e 0a 20 20 20 20 69 66 20  ribution.    if 
3cc0: 7b 5b 6c 6c 65 6e 67 74 68 20 5b 67 6c 6f 62 20  {[llength [glob 
3cd0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5b 66 69 6c  -nocomplain [fil
3ce0: 65 20 6a 6f 69 6e 20 24 64 69 73 74 72 69 62 75  e join $distribu
3cf0: 74 69 6f 6e 20 6d 6f 64 75 6c 65 73 20 24 6d 20  tion modules $m 
3d00: 2a 2e 74 65 73 74 5d 5d 5d 20 3d 3d 20 30 7d 20  *.test]]] == 0} 
3d10: 7b 0a 09 70 75 74 73 20 22 20 20 57 69 74 68 6f  {..puts "  Witho
3d20: 75 74 20 74 65 73 74 73 75 69 74 65 20 3a 20 24  ut testsuite : $
3d30: 6d 22 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  m".    }.    ret
3d40: 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 76 61 6c 69  urn.}..proc vali
3d50: 64 61 74 65 5f 74 65 73 74 73 75 69 74 65 73 20  date_testsuites 
3d60: 7b 7d 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68  {} {.    foreach
3d70: 20 6d 20 5b 6d 6f 64 75 6c 65 73 5d 20 7b 0a 09   m [modules] {..
3d80: 76 61 6c 69 64 61 74 65 5f 74 65 73 74 73 75 69  validate_testsui
3d90: 74 65 5f 6d 6f 64 20 24 6d 0a 20 20 20 20 7d 0a  te_mod $m.    }.
3da0: 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72      return.}..pr
3db0: 6f 63 20 76 61 6c 69 64 61 74 65 5f 70 6b 67 49  oc validate_pkgI
3dc0: 6e 64 65 78 5f 6d 6f 64 20 7b 6d 7d 20 7b 0a 20  ndex_mod {m} {. 
3dd0: 20 20 20 67 6c 6f 62 61 6c 20 64 69 73 74 72 69     global distri
3de0: 62 75 74 69 6f 6e 0a 20 20 20 20 69 66 20 7b 5b  bution.    if {[
3df0: 6c 6c 65 6e 67 74 68 20 5b 67 6c 6f 62 20 2d 6e  llength [glob -n
3e00: 6f 63 6f 6d 70 6c 61 69 6e 20 5b 66 69 6c 65 20  ocomplain [file 
3e10: 6a 6f 69 6e 20 24 64 69 73 74 72 69 62 75 74 69  join $distributi
3e20: 6f 6e 20 6d 6f 64 75 6c 65 73 20 24 6d 20 70 6b  on modules $m pk
3e30: 67 49 6e 64 65 78 2e 74 63 6c 5d 5d 5d 20 3d 3d  gIndex.tcl]]] ==
3e40: 20 30 7d 20 7b 0a 09 70 75 74 73 20 22 20 20 57   0} {..puts "  W
3e50: 69 74 68 6f 75 74 20 70 61 63 6b 61 67 65 20 69  ithout package i
3e60: 6e 64 65 78 20 3a 20 24 6d 22 0a 20 20 20 20 7d  ndex : $m".    }
3e70: 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70  .    return.}..p
3e80: 72 6f 63 20 76 61 6c 69 64 61 74 65 5f 70 6b 67  roc validate_pkg
3e90: 49 6e 64 65 78 20 7b 7d 20 7b 0a 20 20 20 20 67  Index {} {.    g
3ea0: 6c 6f 62 61 6c 20 64 69 73 74 72 69 62 75 74 69  lobal distributi
3eb0: 6f 6e 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6d  on.    foreach m
3ec0: 20 5b 6d 6f 64 75 6c 65 73 5d 20 7b 0a 09 76 61   [modules] {..va
3ed0: 6c 69 64 61 74 65 5f 70 6b 67 49 6e 64 65 78 5f  lidate_pkgIndex_
3ee0: 6d 6f 64 20 24 6d 0a 20 20 20 20 7d 0a 20 20 20  mod $m.    }.   
3ef0: 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20   return.}..proc 
3f00: 76 61 6c 69 64 61 74 65 5f 64 6f 63 5f 65 78 69  validate_doc_exi
3f10: 73 74 65 6e 63 65 5f 6d 6f 64 20 7b 6d 7d 20 7b  stence_mod {m} {
3f20: 0a 20 20 20 20 67 6c 6f 62 61 6c 20 64 69 73 74  .    global dist
3f30: 72 69 62 75 74 69 6f 6e 0a 20 20 20 20 69 66 20  ribution.    if 
3f40: 7b 5b 6c 6c 65 6e 67 74 68 20 5b 67 6c 6f 62 20  {[llength [glob 
3f50: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5b 66 69 6c  -nocomplain [fil
3f60: 65 20 6a 6f 69 6e 20 24 64 69 73 74 72 69 62 75  e join $distribu
3f70: 74 69 6f 6e 20 6d 6f 64 75 6c 65 73 20 24 6d 20  tion modules $m 
3f80: 7b 2a 2e 5b 31 33 6e 5d 7d 5d 5d 5d 20 3d 3d 20  {*.[13n]}]]] == 
3f90: 30 7d 20 7b 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67  0} {..if {[lleng
3fa0: 74 68 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70  th [glob -nocomp
3fb0: 6c 61 69 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  lain [file join 
3fc0: 24 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6d 6f  $distribution mo
3fd0: 64 75 6c 65 73 20 24 6d 20 7b 2a 2e 6d 61 6e 7d  dules $m {*.man}
3fe0: 5d 5d 5d 20 3d 3d 20 30 7d 20 7b 0a 09 20 20 20  ]]] == 0} {..   
3ff0: 20 70 75 74 73 20 22 20 20 57 69 74 68 6f 75 74   puts "  Without
4000: 20 2a 20 61 6e 79 20 2a 2a 20 6d 61 6e 70 61 67   * any ** manpag
4010: 65 73 20 3a 20 24 6d 22 0a 09 7d 0a 20 20 20 20  es : $m"..}.    
4020: 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 6c 65 6e 67  } elseif {[lleng
4030: 74 68 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70  th [glob -nocomp
4040: 6c 61 69 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  lain [file join 
4050: 24 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6d 6f  $distribution mo
4060: 64 75 6c 65 73 20 24 6d 20 7b 2a 2e 6d 61 6e 7d  dules $m {*.man}
4070: 5d 5d 5d 20 3d 3d 20 30 7d 20 7b 0a 09 70 75 74  ]]] == 0} {..put
4080: 73 20 22 20 20 57 69 74 68 6f 75 74 20 64 6f 63  s "  Without doc
4090: 74 6f 6f 6c 73 20 6d 61 6e 70 61 67 65 73 20 3a  tools manpages :
40a0: 20 24 6d 22 0a 20 20 20 20 7d 20 65 6c 73 65 20   $m".    } else 
40b0: 7b 0a 09 66 6f 72 65 61 63 68 20 66 20 5b 67 6c  {..foreach f [gl
40c0: 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5b  ob -nocomplain [
40d0: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 73 74 72  file join $distr
40e0: 69 62 75 74 69 6f 6e 20 6d 6f 64 75 6c 65 73 20  ibution modules 
40f0: 24 6d 20 7b 2a 2e 5b 31 33 6e 5d 7d 5d 5d 20 7b  $m {*.[13n]}]] {
4100: 0a 09 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65  ..    if {![file
4110: 20 65 78 69 73 74 73 20 5b 66 69 6c 65 20 72 6f   exists [file ro
4120: 6f 74 6e 61 6d 65 20 24 66 5d 2e 6d 61 6e 5d 7d  otname $f].man]}
4130: 20 7b 0a 09 09 70 75 74 73 20 22 20 20 20 20 20   {...puts "     
4140: 6e 6f 20 2e 6d 61 6e 20 65 71 75 69 76 61 6c 65  no .man equivale
4150: 6e 74 20 3a 20 24 66 22 0a 09 20 20 20 20 7d 0a  nt : $f"..    }.
4160: 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  .}.    }.    ret
4170: 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 76 61 6c 69  urn.}..proc vali
4180: 64 61 74 65 5f 64 6f 63 5f 65 78 69 73 74 65 6e  date_doc_existen
4190: 63 65 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f 62  ce {} {.    glob
41a0: 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a  al distribution.
41b0: 20 20 20 20 66 6f 72 65 61 63 68 20 6d 20 5b 6d      foreach m [m
41c0: 6f 64 75 6c 65 73 5d 20 7b 0a 09 76 61 6c 69 64  odules] {..valid
41d0: 61 74 65 5f 64 6f 63 5f 65 78 69 73 74 65 6e 63  ate_doc_existenc
41e0: 65 5f 6d 6f 64 20 24 6d 0a 20 20 20 20 7d 0a 20  e_mod $m.    }. 
41f0: 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 0a 70 72     return.}...pr
4200: 6f 63 20 76 61 6c 69 64 61 74 65 5f 64 6f 63 5f  oc validate_doc_
4210: 6d 61 72 6b 75 70 5f 6d 6f 64 20 7b 6d 7d 20 7b  markup_mod {m} {
4220: 0a 20 20 20 20 67 65 6e 64 6f 63 20 6e 75 6c 6c  .    gendoc null
4230: 20 6e 75 6c 6c 20 24 6d 0a 20 20 20 20 72 65 74   null $m.    ret
4240: 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 76 61 6c 69  urn.}..proc vali
4250: 64 61 74 65 5f 64 6f 63 5f 6d 61 72 6b 75 70 20  date_doc_markup 
4260: 7b 7d 20 7b 0a 20 20 20 20 67 65 6e 64 6f 63 20  {} {.    gendoc 
4270: 6e 75 6c 6c 20 6e 75 6c 6c 0a 20 20 20 20 72 65  null null.    re
4280: 74 75 72 6e 0a 7d 0a 0a 0a 70 72 6f 63 20 72 75  turn.}...proc ru
4290: 6e 2d 66 72 69 6e 6b 20 7b 61 72 67 73 7d 20 7b  n-frink {args} {
42a0: 0a 20 20 20 20 67 6c 6f 62 61 6c 20 64 69 73 74  .    global dist
42b0: 72 69 62 75 74 69 6f 6e 0a 0a 20 20 20 20 73 65  ribution..    se
42c0: 74 20 74 6d 70 20 5b 66 69 6c 65 20 72 6f 6f 74  t tmp [file root
42d0: 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70  name [info scrip
42e0: 74 5d 5d 2e 74 6d 70 2e 5b 70 69 64 5d 0a 0a 20  t]].tmp.[pid].. 
42f0: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength 
4300: 24 61 72 67 73 5d 20 3d 3d 20 30 7d 20 7b 0a 09  $args] == 0} {..
4310: 73 65 74 20 66 69 6c 65 73 20 5b 74 63 6c 66 69  set files [tclfi
4320: 6c 65 73 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20  les].    } else 
4330: 7b 0a 09 73 65 74 20 66 69 6c 65 73 20 5b 6d 6f  {..set files [mo
4340: 64 74 63 6c 66 69 6c 65 73 20 24 61 72 67 73 5d  dtclfiles $args]
4350: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 6f 72 65  .    }..    fore
4360: 61 63 68 20 66 20 24 66 69 6c 65 73 20 7b 0a 09  ach f $files {..
4370: 70 75 74 73 20 22 46 52 49 4e 4b 20 7e 7e 7e 7e  puts "FRINK ~~~~
4380: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
4390: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
43a0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 22 0a 09 70  ~~~~~~~~~~~~"..p
43b0: 75 74 73 20 22 24 66 2e 2e 2e 22 0a 09 70 75 74  uts "$f..."..put
43c0: 73 20 22 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  s "~~~~~~~~~~~~~
43d0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
43e0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
43f0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 22 0a 0a 09 63 61 74  ~~~~~~~~~"...cat
4400: 63 68 20 7b 65 78 65 63 20 66 72 69 6e 6b 20 32  ch {exec frink 2
4410: 3e 20 24 74 6d 70 20 2d 48 20 24 66 7d 0a 09 73  > $tmp -H $f}..s
4420: 65 74 20 64 61 74 61 20 5b 67 65 74 5f 69 6e 70  et data [get_inp
4430: 75 74 20 24 74 6d 70 5d 0a 09 69 66 20 7b 5b 73  ut $tmp]..if {[s
4440: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61  tring length $da
4450: 74 61 5d 20 3e 20 30 7d 20 7b 0a 09 20 20 20 20  ta] > 0} {..    
4460: 70 75 74 73 20 24 64 61 74 61 0a 09 7d 0a 20 20  puts $data..}.  
4470: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 20 7b 66    }.    catch {f
4480: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
4490: 65 20 24 74 6d 70 7d 0a 20 20 20 20 72 65 74 75  e $tmp}.    retu
44a0: 72 6e 0a 7d 0a 0a 70 72 6f 63 20 72 75 6e 2d 70  rn.}..proc run-p
44b0: 72 6f 63 68 65 63 6b 20 7b 61 72 67 73 7d 20 7b  rocheck {args} {
44c0: 0a 20 20 20 20 67 6c 6f 62 61 6c 20 64 69 73 74  .    global dist
44d0: 72 69 62 75 74 69 6f 6e 0a 0a 20 20 20 20 69 66  ribution..    if
44e0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 73   {[llength $args
44f0: 5d 20 3d 3d 20 30 7d 20 7b 0a 09 73 65 74 20 66  ] == 0} {..set f
4500: 69 6c 65 73 20 5b 74 63 6c 66 69 6c 65 73 5d 0a  iles [tclfiles].
4510: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 73 65      } else {..se
4520: 74 20 66 69 6c 65 73 20 5b 6d 6f 64 74 63 6c 66  t files [modtclf
4530: 69 6c 65 73 20 24 61 72 67 73 5d 0a 20 20 20 20  iles $args].    
4540: 7d 0a 0a 20 20 20 20 66 6f 72 65 61 63 68 20 66  }..    foreach f
4550: 20 24 66 69 6c 65 73 20 7b 0a 09 70 75 74 73 20   $files {..puts 
4560: 22 50 52 4f 43 48 45 43 4b 20 7e 7e 7e 7e 7e 7e  "PROCHECK ~~~~~~
4570: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
4580: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
4590: 7e 7e 7e 7e 7e 7e 7e 22 0a 09 70 75 74 73 20 22  ~~~~~~~"..puts "
45a0: 24 66 20 2e 2e 2e 22 0a 09 70 75 74 73 20 22 7e  $f ..."..puts "~
45b0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
45c0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
45d0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
45e0: 7e 7e 7e 7e 7e 22 0a 0a 09 63 61 74 63 68 20 7b  ~~~~~"...catch {
45f0: 65 78 65 63 20 70 72 6f 63 68 65 63 6b 20 3e 40  exec procheck >@
4600: 20 73 74 64 6f 75 74 20 24 66 7d 0a 20 20 20 20   stdout $f}.    
4610: 7d 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  }.    return.}..
4620: 70 72 6f 63 20 67 65 74 5f 69 6e 70 75 74 20 7b  proc get_input {
4630: 66 7d 20 7b 72 65 74 75 72 6e 20 5b 72 65 61 64  f} {return [read
4640: 20 5b 73 65 74 20 69 66 20 5b 6f 70 65 6e 20 24   [set if [open $
4650: 66 20 72 5d 5d 5d 5b 63 6c 6f 73 65 20 24 69 66  f r]]][close $if
4660: 5d 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ]}..# ----------
4670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46a0: 2d 2d 2d 2d 0a 23 20 48 65 6c 70 0a 0a 70 72 6f  ----.# Help..pro
46b0: 63 20 5f 5f 68 65 6c 70 20 7b 7d 20 7b 0a 20 20  c __help {} {.  
46c0: 20 20 70 75 74 73 20 73 74 64 6f 75 74 20 7b 0a    puts stdout {.
46d0: 09 43 6f 6d 6d 61 6e 64 73 20 61 76 61 6c 61 62  .Commands avalab
46e0: 6c 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 73  le through the s
46f0: 77 69 73 73 20 61 72 6d 79 20 6b 6e 69 66 65 20  wiss army knife 
4700: 61 6b 61 20 53 41 4b 3a 0a 0a 09 68 65 6c 70 20  aka SAK:...help 
4710: 20 20 20 20 2d 20 54 68 69 73 20 68 65 6c 70 0a      - This help.
4720: 0a 09 2f 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ../Configuration
4730: 0a 09 76 65 72 73 69 6f 6e 20 20 2d 20 52 65 74  ..version  - Ret
4740: 75 72 6e 20 74 63 6c 6c 69 62 20 76 65 72 73 69  urn tcllib versi
4750: 6f 6e 20 6e 75 6d 62 65 72 0a 09 6d 61 6a 6f 72  on number..major
4760: 20 20 20 20 2d 20 52 65 74 75 72 6e 20 74 63 6c      - Return tcl
4770: 6c 69 62 20 6d 61 6a 6f 72 20 76 65 72 73 69 6f  lib major versio
4780: 6e 20 6e 75 6d 62 65 72 0a 09 6d 69 6e 6f 72 20  n number..minor 
4790: 20 20 20 2d 20 52 65 74 75 72 6e 20 74 63 6c 6c     - Return tcll
47a0: 69 62 20 6d 69 6e 6f 72 20 76 65 72 73 69 6f 6e  ib minor version
47b0: 20 6e 75 6d 62 65 72 0a 09 6e 61 6d 65 20 20 20   number..name   
47c0: 20 20 2d 20 52 65 74 75 72 6e 20 74 63 6c 6c 69    - Return tclli
47d0: 62 20 70 61 63 6b 61 67 65 20 6e 61 6d 65 0a 0a  b package name..
47e0: 09 2f 44 65 76 65 6c 6f 70 6d 65 6e 74 0a 09 6d  ./Development..m
47f0: 6f 64 75 6c 65 73 20 20 20 20 20 20 20 20 20 20  odules          
4800: 2d 20 52 65 74 75 72 6e 20 6c 69 73 74 20 6f 66  - Return list of
4810: 20 6d 6f 64 75 6c 65 73 2e 0a 20 20 20 20 20 20   modules..      
4820: 20 20 63 6f 6e 74 72 69 62 75 74 6f 72 73 20 20    contributors  
4830: 20 20 20 2d 20 50 72 69 6e 74 20 61 20 6c 69 73     - Print a lis
4840: 74 20 6f 66 20 63 6f 6e 74 72 69 62 75 74 6f 72  t of contributor
4850: 73 20 74 6f 20 74 63 6c 6c 69 62 2e 0a 09 6c 6d  s to tcllib...lm
4860: 6f 64 75 6c 65 73 20 20 20 20 20 20 20 20 20 2d  odules         -
4870: 20 53 65 65 20 61 62 6f 76 65 2c 20 68 6f 77 65   See above, howe
4880: 76 65 72 20 6f 6e 65 20 6d 6f 64 75 6c 65 20 70  ver one module p
4890: 65 72 20 6c 69 6e 65 0a 09 69 6d 6f 64 75 6c 65  er line..imodule
48a0: 73 20 20 20 20 20 20 20 20 20 2d 20 52 65 74 75  s         - Retu
48b0: 72 6e 20 6c 69 73 74 20 6f 66 20 6d 6f 64 75 6c  rn list of modul
48c0: 65 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20  es known to the 
48d0: 69 6e 73 74 61 6c 6c 65 72 2e 0a 0a 09 70 61 63  installer....pac
48e0: 6b 61 67 65 73 20 20 20 20 20 20 20 20 20 2d 20  kages         - 
48f0: 52 65 74 75 72 6e 20 69 6e 64 65 78 65 64 20 70  Return indexed p
4900: 61 63 6b 61 67 65 73 20 69 6e 20 74 63 6c 6c 69  ackages in tclli
4910: 62 2c 20 70 6c 75 73 20 76 65 72 73 69 6f 6e 73  b, plus versions
4920: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4930: 20 20 20 20 20 20 6f 6e 65 20 70 61 63 6b 61 67        one packag
4940: 65 20 70 65 72 20 6c 69 6e 65 2e 20 45 78 74 72  e per line. Extr
4950: 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 0a 09  acted from the..
4960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4970: 20 20 20 70 61 63 6b 61 67 65 20 69 6e 64 69 63     package indic
4980: 65 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  es found in the 
4990: 6d 6f 64 75 6c 65 73 2e 0a 09 70 72 6f 76 69 64  modules...provid
49a0: 65 64 20 20 20 20 20 20 20 20 20 2d 20 52 65 74  ed         - Ret
49b0: 75 72 6e 20 6c 69 73 74 20 61 6e 64 20 76 65 72  urn list and ver
49c0: 73 69 6f 6e 73 20 6f 66 20 70 72 6f 76 69 64 65  sions of provide
49d0: 64 20 70 61 63 6b 61 67 65 73 0a 09 20 20 20 20  d packages..    
49e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
49f0: 69 6e 20 63 6f 6e 74 72 61 73 74 20 74 6f 20 69  in contrast to i
4a00: 6e 64 65 78 65 64 29 2e 0a 09 76 63 6f 6d 70 61  ndexed)...vcompa
4a10: 72 65 20 70 6b 67 6c 69 73 74 20 2d 20 43 6f 6d  re pkglist - Com
4a20: 70 61 72 65 20 70 61 63 6b 61 67 65 20 6c 69 73  pare package lis
4a30: 74 20 6f 66 20 70 72 65 76 69 6f 75 73 20 27 70  t of previous 'p
4a40: 61 63 6b 61 67 65 73 27 0a 09 20 20 20 20 20 20  ackages'..      
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 6c               cal
4a60: 6c 20 77 69 74 68 20 63 75 72 72 65 6e 74 20 70  l with current p
4a70: 61 63 6b 61 67 65 73 2e 20 4d 61 72 6b 73 20 61  ackages. Marks a
4a80: 6c 6c 20 6e 65 77 0a 09 20 20 20 20 20 20 20 20  ll new..        
4a90: 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 75             and u
4aa0: 6e 63 68 61 6e 67 65 64 20 70 61 63 6b 61 67 65  nchanged package
4ab0: 73 20 66 6f 72 20 68 69 67 68 65 72 20 61 74 74  s for higher att
4ac0: 65 6e 74 69 6f 6e 2e 0a 0a 20 20 20 20 20 20 20  ention...       
4ad0: 20 76 61 6c 69 64 61 74 65 20 3f 6d 6f 64 75 6c   validate ?modul
4ae0: 65 2e 2e 3f 20 20 20 20 20 2d 20 43 68 65 63 6b  e..?     - Check
4af0: 20 6c 69 73 74 65 64 20 6d 6f 64 75 6c 65 73 20   listed modules 
4b00: 66 6f 72 20 70 72 6f 62 6c 65 6d 73 2e 0a 20 20  for problems..  
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b30: 46 6f 72 20 61 6c 6c 20 6d 6f 64 75 6c 65 73 20  For all modules 
4b40: 69 66 20 6e 6f 6e 65 20 73 70 65 63 69 66 69 65  if none specifie
4b50: 64 2e 0a 0a 09 74 65 73 74 20 3f 6d 6f 64 75 6c  d....test ?modul
4b60: 65 2e 2e 2e 3f 20 20 20 20 20 20 20 20 2d 20 52  e...?        - R
4b70: 75 6e 20 74 65 73 74 73 75 69 74 65 20 66 6f 72  un testsuite for
4b80: 20 6c 69 73 74 65 64 20 6d 6f 64 75 6c 65 73 2e   listed modules.
4b90: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 20              For 
4bb0: 61 6c 6c 20 6d 6f 64 75 6c 65 73 20 69 66 20 6e  all modules if n
4bc0: 6f 6e 65 20 73 70 65 63 69 66 69 65 64 2e 0a 0a  one specified...
4bd0: 09 2f 52 65 6c 65 61 73 65 20 65 6e 67 69 6e 65  ./Release engine
4be0: 65 72 69 6e 67 0a 09 67 65 6e 64 69 73 74 20 20  ering..gendist  
4bf0: 2d 20 47 65 6e 65 72 61 74 65 20 64 69 73 74 72  - Generate distr
4c00: 69 62 75 74 69 6f 6e 20 66 72 6f 6d 20 43 56 53  ibution from CVS
4c10: 20 73 6e 61 70 73 68 6f 74 0a 20 20 20 20 20 20   snapshot.      
4c20: 20 20 67 65 6e 74 69 70 35 35 20 2d 20 47 65 6e    gentip55 - Gen
4c30: 65 72 61 74 65 20 61 20 54 49 50 35 35 2d 73 74  erate a TIP55-st
4c40: 79 6c 65 20 44 45 53 43 52 49 50 54 49 4f 4e 2e  yle DESCRIPTION.
4c50: 74 78 74 20 66 69 6c 65 2e 0a 0a 09 2f 44 6f 63  txt file..../Doc
4c60: 75 6d 65 6e 74 61 74 69 6f 6e 0a 09 6e 72 6f 66  umentation..nrof
4c70: 66 20 3f 6d 6f 64 75 6c 65 2e 2e 2e 3f 20 20 20  f ?module...?   
4c80: 20 2d 20 47 65 6e 65 72 61 74 65 20 6d 61 6e 70   - Generate manp
4c90: 61 67 65 73 0a 09 68 74 6d 6c 20 20 3f 6d 6f 64  ages..html  ?mod
4ca0: 75 6c 65 2e 2e 2e 3f 20 20 20 20 2d 20 47 65 6e  ule...?    - Gen
4cb0: 65 72 61 74 65 20 48 54 4d 4c 20 70 61 67 65 73  erate HTML pages
4cc0: 0a 09 74 6d 6d 6c 20 20 3f 6d 6f 64 75 6c 65 2e  ..tmml  ?module.
4cd0: 2e 2e 3f 20 20 20 20 2d 20 47 65 6e 65 72 61 74  ..?    - Generat
4ce0: 65 20 54 4d 4d 4c 0a 09 74 65 78 74 20 20 3f 6d  e TMML..text  ?m
4cf0: 6f 64 75 6c 65 2e 2e 2e 3f 20 20 20 20 2d 20 47  odule...?    - G
4d00: 65 6e 65 72 61 74 65 20 70 6c 61 69 6e 20 74 65  enerate plain te
4d10: 78 74 0a 09 6c 69 73 74 20 20 3f 6d 6f 64 75 6c  xt..list  ?modul
4d20: 65 2e 2e 2e 3f 20 20 20 20 2d 20 47 65 6e 65 72  e...?    - Gener
4d30: 61 74 65 20 61 20 6c 69 73 74 20 6f 66 20 6d 61  ate a list of ma
4d40: 6e 70 61 67 65 73 0a 09 77 69 6b 69 20 20 3f 6d  npages..wiki  ?m
4d50: 6f 64 75 6c 65 2e 2e 2e 3f 20 20 20 20 2d 20 47  odule...?    - G
4d60: 65 6e 65 72 61 74 65 20 77 69 6b 69 20 6d 61 72  enerate wiki mar
4d70: 6b 75 70 0a 09 6c 61 74 65 78 20 3f 6d 6f 64 75  kup..latex ?modu
4d80: 6c 65 2e 2e 2e 3f 20 20 20 20 2d 20 47 65 6e 65  le...?    - Gene
4d90: 72 61 74 65 20 4c 61 54 65 58 20 70 61 67 65 73  rate LaTeX pages
4da0: 0a 09 64 76 69 20 20 20 3f 6d 6f 64 75 6c 65 2e  ..dvi   ?module.
4db0: 2e 2e 3f 20 20 20 20 2d 20 53 65 65 20 6c 61 74  ..?    - See lat
4dc0: 65 78 2c 20 2b 20 63 6f 6e 76 65 72 73 69 6f 6e  ex, + conversion
4dd0: 20 74 6f 20 64 76 69 0a 09 70 73 20 20 20 20 3f   to dvi..ps    ?
4de0: 6d 6f 64 75 6c 65 2e 2e 2e 3f 20 20 20 20 2d 20  module...?    - 
4df0: 53 65 65 20 64 76 69 2c 20 20 20 2b 20 63 6f 6e  See dvi,   + con
4e00: 76 65 72 73 69 6f 6e 20 74 6f 20 50 6f 73 74 53  version to PostS
4e10: 63 72 69 70 74 0a 20 20 20 20 7d 0a 7d 0a 0a 23  cript.    }.}..#
4e20: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
4e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
4e60: 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a  # Configuration.
4e70: 0a 70 72 6f 63 20 5f 5f 6e 61 6d 65 20 20 20 20  .proc __name    
4e80: 7b 7d 20 7b 67 6c 6f 62 61 6c 20 74 63 6c 6c 69  {} {global tclli
4e90: 62 5f 6e 61 6d 65 20 20 20 20 3b 20 70 75 74 73  b_name    ; puts
4ea0: 20 24 74 63 6c 6c 69 62 5f 6e 61 6d 65 7d 0a 70   $tcllib_name}.p
4eb0: 72 6f 63 20 5f 5f 76 65 72 73 69 6f 6e 20 7b 7d  roc __version {}
4ec0: 20 7b 67 6c 6f 62 61 6c 20 74 63 6c 6c 69 62 5f   {global tcllib_
4ed0: 76 65 72 73 69 6f 6e 20 3b 20 70 75 74 73 20 24  version ; puts $
4ee0: 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e 7d 0a  tcllib_version}.
4ef0: 70 72 6f 63 20 5f 5f 6d 69 6e 6f 72 20 20 20 7b  proc __minor   {
4f00: 7d 20 7b 67 6c 6f 62 61 6c 20 74 63 6c 6c 69 62  } {global tcllib
4f10: 5f 76 65 72 73 69 6f 6e 20 3b 20 70 75 74 73 20  _version ; puts 
4f20: 5b 6c 69 6e 64 65 78 20 5b 73 70 6c 69 74 20 24  [lindex [split $
4f30: 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e 20 2e  tcllib_version .
4f40: 5d 20 31 5d 7d 0a 70 72 6f 63 20 5f 5f 6d 61 6a  ] 1]}.proc __maj
4f50: 6f 72 20 20 20 7b 7d 20 7b 67 6c 6f 62 61 6c 20  or   {} {global 
4f60: 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e 20 3b  tcllib_version ;
4f70: 20 70 75 74 73 20 5b 6c 69 6e 64 65 78 20 5b 73   puts [lindex [s
4f80: 70 6c 69 74 20 24 74 63 6c 6c 69 62 5f 76 65 72  plit $tcllib_ver
4f90: 73 69 6f 6e 20 2e 5d 20 30 5d 7d 0a 0a 23 20 2d  sion .] 0]}..# -
4fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
4fe0: 44 65 76 65 6c 6f 70 6d 65 6e 74 0a 0a 70 72 6f  Development..pro
4ff0: 63 20 5f 5f 69 6d 6f 64 75 6c 65 73 20 7b 7d 20  c __imodules {} 
5000: 20 7b 70 75 74 73 20 5b 69 6d 6f 64 75 6c 65 73   {puts [imodules
5010: 5d 7d 0a 70 72 6f 63 20 5f 5f 6d 6f 64 75 6c 65  ]}.proc __module
5020: 73 20 7b 7d 20 20 7b 70 75 74 73 20 5b 6d 6f 64  s {}  {puts [mod
5030: 75 6c 65 73 5d 7d 0a 70 72 6f 63 20 5f 5f 6c 6d  ules]}.proc __lm
5040: 6f 64 75 6c 65 73 20 7b 7d 20 7b 70 75 74 73 20  odules {} {puts 
5050: 5b 6a 6f 69 6e 20 5b 6d 6f 64 75 6c 65 73 5d 20  [join [modules] 
5060: 5c 6e 5d 7d 0a 0a 0a 70 72 6f 63 20 6e 70 61 72  \n]}...proc npar
5070: 72 61 79 20 7b 61 7d 20 7b 0a 20 20 20 20 75 70  ray {a} {.    up
5080: 76 61 72 20 24 61 20 70 61 63 6b 61 67 65 73 0a  var $a packages.
5090: 0a 20 20 20 20 73 65 74 20 6d 61 78 6c 20 30 0a  .    set maxl 0.
50a0: 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
50b0: 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e   [lsort [array n
50c0: 61 6d 65 73 20 70 61 63 6b 61 67 65 73 5d 5d 20  ames packages]] 
50d0: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  {.        if {[s
50e0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61  tring length $na
50f0: 6d 65 5d 20 3e 20 24 6d 61 78 6c 7d 20 7b 0a 20  me] > $maxl} {. 
5100: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d             set m
5110: 61 78 6c 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  axl [string leng
5120: 74 68 20 24 6e 61 6d 65 5d 0a 20 20 20 20 20 20  th $name].      
5130: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f    }.    }.    fo
5140: 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72  reach name [lsor
5150: 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 70  t [array names p
5160: 61 63 6b 61 67 65 73 5d 5d 20 7b 0a 20 20 20 20  ackages]] {.    
5170: 20 20 20 20 70 75 74 73 20 73 74 64 6f 75 74 20      puts stdout 
5180: 5b 66 6f 72 6d 61 74 20 22 25 2d 2a 73 20 25 73  [format "%-*s %s
5190: 22 20 24 6d 61 78 6c 20 24 6e 61 6d 65 20 24 70  " $maxl $name $p
51a0: 61 63 6b 61 67 65 73 28 24 6e 61 6d 65 29 5d 0a  ackages($name)].
51b0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
51c0: 0a 7d 0a 0a 70 72 6f 63 20 5f 5f 70 61 63 6b 61  .}..proc __packa
51d0: 67 65 73 20 7b 7d 20 7b 0a 20 20 20 20 61 72 72  ges {} {.    arr
51e0: 61 79 20 73 65 74 20 70 61 63 6b 61 67 65 73 20  ay set packages 
51f0: 5b 69 70 61 63 6b 61 67 65 73 5d 0a 20 20 20 20  [ipackages].    
5200: 6e 70 61 72 72 61 79 20 70 61 63 6b 61 67 65 73  nparray packages
5210: 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70  .    return.}..p
5220: 72 6f 63 20 5f 5f 70 72 6f 76 69 64 65 64 20 7b  roc __provided {
5230: 7d 20 7b 0a 20 20 20 20 61 72 72 61 79 20 73 65  } {.    array se
5240: 74 20 70 61 63 6b 61 67 65 73 20 5b 70 70 61 63  t packages [ppac
5250: 6b 61 67 65 73 5d 0a 20 20 20 20 6e 70 61 72 72  kages].    nparr
5260: 61 79 20 70 61 63 6b 61 67 65 73 0a 20 20 20 20  ay packages.    
5270: 72 65 74 75 72 6e 0a 7d 0a 0a 0a 70 72 6f 63 20  return.}...proc 
5280: 5f 5f 76 63 6f 6d 70 61 72 65 20 7b 7d 20 7b 0a  __vcompare {} {.
5290: 20 20 20 20 67 6c 6f 62 61 6c 20 61 72 67 76 0a      global argv.
52a0: 20 20 20 20 73 65 74 20 6f 6c 64 70 6c 69 73 74      set oldplist
52b0: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 30   [lindex $argv 0
52c0: 5d 0a 0a 20 20 20 20 61 72 72 61 79 20 73 65 74  ]..    array set
52d0: 20 63 75 72 70 6b 67 20 5b 69 70 61 63 6b 61 67   curpkg [ipackag
52e0: 65 73 5d 0a 20 20 20 20 61 72 72 61 79 20 73 65  es].    array se
52f0: 74 20 6f 6c 64 70 6b 67 20 5b 6c 6f 61 64 70 6b  t oldpkg [loadpk
5300: 67 6c 69 73 74 20 24 6f 6c 64 70 6c 69 73 74 5d  glist $oldplist]
5310: 0a 0a 20 20 20 20 66 6f 72 65 61 63 68 20 70 20  ..    foreach p 
5320: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63 75 72  [array names cur
5330: 70 6b 67 5d 20 7b 73 65 74 20 5f 5f 28 24 70 29  pkg] {set __($p)
5340: 20 2e 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20   .}.    foreach 
5350: 70 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 6f  p [array names o
5360: 6c 64 70 6b 67 5d 20 7b 73 65 74 20 5f 5f 28 24  ldpkg] {set __($
5370: 70 29 20 2e 7d 0a 20 20 20 20 73 65 74 20 75 6e  p) .}.    set un
5380: 69 66 69 65 64 20 5b 6c 73 6f 72 74 20 5b 61 72  ified [lsort [ar
5390: 72 61 79 20 6e 61 6d 65 73 20 5f 5f 5d 5d 0a 20  ray names __]]. 
53a0: 20 20 20 75 6e 73 65 74 20 5f 5f 0a 0a 20 20 20     unset __..   
53b0: 20 73 65 74 20 6d 61 78 6c 20 30 0a 20 20 20 20   set maxl 0.    
53c0: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 75 6e  foreach name $un
53d0: 69 66 69 65 64 20 7b 0a 20 20 20 20 20 20 20 20  ified {.        
53e0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
53f0: 74 68 20 24 6e 61 6d 65 5d 20 3e 20 24 6d 61 78  th $name] > $max
5400: 6c 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  l} {.           
5410: 20 73 65 74 20 6d 61 78 6c 20 5b 73 74 72 69 6e   set maxl [strin
5420: 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 0a  g length $name].
5430: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a          }.    }.
5440: 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
5450: 20 24 75 6e 69 66 69 65 64 20 7b 0a 09 73 65 74   $unified {..set
5460: 20 73 75 66 66 69 78 20 22 22 0a 09 69 66 20 7b   suffix ""..if {
5470: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 75  ![info exists cu
5480: 72 70 6b 67 28 24 6e 61 6d 65 29 5d 7d 20 7b 73  rpkg($name)]} {s
5490: 65 74 20 63 75 72 70 6b 67 28 24 6e 61 6d 65 29  et curpkg($name)
54a0: 20 22 2d 2d 22 7d 0a 09 69 66 20 7b 21 5b 69 6e   "--"}..if {![in
54b0: 66 6f 20 65 78 69 73 74 73 20 6f 6c 64 70 6b 67  fo exists oldpkg
54c0: 28 24 6e 61 6d 65 29 5d 7d 20 7b 73 65 74 20 6f  ($name)]} {set o
54d0: 6c 64 70 6b 67 28 24 6e 61 6d 65 29 20 20 20 22  ldpkg($name)   "
54e0: 2d 2d 22 20 3b 20 61 70 70 65 6e 64 20 73 75 66  --" ; append suf
54f0: 66 69 78 20 22 20 4e 45 57 22 7d 0a 09 69 66 20  fix " NEW"}..if 
5500: 7b 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24  {[string equal $
5510: 6f 6c 64 70 6b 67 28 24 6e 61 6d 65 29 20 24 63  oldpkg($name) $c
5520: 75 72 70 6b 67 28 24 6e 61 6d 65 29 5d 7d 20 7b  urpkg($name)]} {
5530: 61 70 70 65 6e 64 20 73 75 66 66 69 78 20 22 20  append suffix " 
5540: 5c 74 3c 3c 3c 22 7d 0a 20 20 20 20 20 20 20 20  \t<<<"}.        
5550: 70 75 74 73 20 73 74 64 6f 75 74 20 5b 66 6f 72  puts stdout [for
5560: 6d 61 74 20 22 25 2d 2a 73 20 25 2d 2a 73 20 25  mat "%-*s %-*s %
5570: 2d 2a 73 22 20 24 6d 61 78 6c 20 24 6e 61 6d 65  -*s" $maxl $name
5580: 20 38 20 24 6f 6c 64 70 6b 67 28 24 6e 61 6d 65   8 $oldpkg($name
5590: 29 20 38 20 24 63 75 72 70 6b 67 28 24 6e 61 6d  ) 8 $curpkg($nam
55a0: 65 29 5d 24 73 75 66 66 69 78 0a 20 20 20 20 7d  e)]$suffix.    }
55b0: 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 0a  .    return.}...
55c0: 0a 70 72 6f 63 20 5f 5f 74 65 73 74 20 7b 7d 20  .proc __test {} 
55d0: 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 61 72 67  {.    global arg
55e0: 76 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 20  v distribution. 
55f0: 20 20 20 23 20 52 75 6e 20 74 65 73 74 73 75 69     # Run testsui
5600: 74 65 0a 0a 20 20 20 20 73 65 74 20 6d 6f 64 75  te..    set modu
5610: 6c 65 73 20 24 61 72 67 76 0a 20 20 20 20 69 66  les $argv.    if
5620: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 6f 64 75   {[llength $modu
5630: 6c 65 73 5d 20 3d 3d 20 30 7d 20 7b 0a 09 73 65  les] == 0} {..se
5640: 74 20 6d 6f 64 75 6c 65 73 20 5b 6d 6f 64 75 6c  t modules [modul
5650: 65 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 65  es].    }..    e
5660: 78 65 63 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66  xec [info nameof
5670: 65 78 65 63 75 74 61 62 6c 65 5d 20 5c 0a 09 20  executable] \.. 
5680: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64     [file join $d
5690: 69 73 74 72 69 62 75 74 69 6f 6e 20 61 6c 6c 2e  istribution all.
56a0: 74 63 6c 5d 20 5c 0a 09 20 20 20 20 2d 6d 6f 64  tcl] \..    -mod
56b0: 75 6c 65 73 20 24 6d 6f 64 75 6c 65 73 20 5c 0a  ules $modules \.
56c0: 09 20 20 20 20 3e 40 20 73 74 64 6f 75 74 20 32  .    >@ stdout 2
56d0: 3e 40 20 73 74 64 65 72 72 0a 20 20 20 20 72 65  >@ stderr.    re
56e0: 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 63 68 65  turn.}..proc che
56f0: 63 6b 6d 6f 64 20 7b 7d 20 7b 0a 20 20 20 20 67  ckmod {} {.    g
5700: 6c 6f 62 61 6c 20 61 72 67 76 0a 20 20 20 20 73  lobal argv.    s
5710: 65 74 20 66 61 69 6c 20 30 0a 20 20 20 20 66 6f  et fail 0.    fo
5720: 72 65 61 63 68 20 6d 20 24 61 72 67 76 20 7b 0a  reach m $argv {.
5730: 09 69 66 20 7b 21 5b 6d 6f 64 75 6c 65 73 5f 6d  .if {![modules_m
5740: 6f 64 20 24 6d 5d 7d 20 7b 0a 09 20 20 20 20 70  od $m]} {..    p
5750: 75 74 73 20 22 20 20 42 6f 67 75 73 20 6d 6f 64  uts "  Bogus mod
5760: 75 6c 65 3a 20 24 6d 22 0a 09 20 20 20 20 73 65  ule: $m"..    se
5770: 74 20 66 61 69 6c 20 31 0a 09 7d 0a 20 20 20 20  t fail 1..}.    
5780: 7d 0a 20 20 20 20 69 66 20 7b 24 66 61 69 6c 7d  }.    if {$fail}
5790: 20 7b 0a 09 70 75 74 73 20 22 20 20 53 74 6f 70   {..puts "  Stop
57a0: 2e 22 0a 09 72 65 74 75 72 6e 20 30 0a 20 20 20  ."..return 0.   
57b0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 31 0a   }.    return 1.
57c0: 7d 0a 0a 70 72 6f 63 20 5f 5f 76 61 6c 69 64 61  }..proc __valida
57d0: 74 65 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f 62  te {} {.    glob
57e0: 61 6c 20 61 72 67 76 0a 20 20 20 20 69 66 20 7b  al argv.    if {
57f0: 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 76 5d 20  [llength $argv] 
5800: 3d 3d 20 30 7d 20 7b 0a 09 5f 76 61 6c 69 64 61  == 0} {.._valida
5810: 74 65 5f 61 6c 6c 0a 20 20 20 20 7d 20 65 6c 73  te_all.    } els
5820: 65 20 7b 0a 09 69 66 20 7b 21 5b 63 68 65 63 6b  e {..if {![check
5830: 6d 6f 64 5d 7d 20 7b 72 65 74 75 72 6e 7d 0a 09  mod]} {return}..
5840: 66 6f 72 65 61 63 68 20 6d 20 24 61 72 67 76 20  foreach m $argv 
5850: 7b 0a 09 20 20 20 20 5f 76 61 6c 69 64 61 74 65  {..    _validate
5860: 5f 6d 6f 64 75 6c 65 20 24 6d 0a 09 7d 0a 20 20  _module $m..}.  
5870: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d    }.    return.}
5880: 0a 0a 70 72 6f 63 20 5f 76 61 6c 69 64 61 74 65  ..proc _validate
5890: 5f 61 6c 6c 20 7b 7d 20 7b 0a 20 20 20 20 67 6c  _all {} {.    gl
58a0: 6f 62 61 6c 20 74 63 6c 6c 69 62 5f 6e 61 6d 65  obal tcllib_name
58b0: 20 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e 0a   tcllib_version.
58c0: 20 20 20 20 73 65 74 20 69 20 30 0a 0a 20 20 20      set i 0..   
58d0: 20 70 75 74 73 20 22 56 61 6c 69 64 61 74 69 6e   puts "Validatin
58e0: 67 20 24 74 63 6c 6c 69 62 5f 6e 61 6d 65 20 24  g $tcllib_name $
58f0: 74 63 6c 6c 69 62 5f 76 65 72 73 69 6f 6e 20 64  tcllib_version d
5900: 65 76 65 6c 6f 70 6d 65 6e 74 22 0a 20 20 20 20  evelopment".    
5910: 70 75 74 73 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  puts "==========
5920: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5930: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5940: 3d 3d 3d 3d 3d 3d 3d 3d 3d 22 0a 20 20 20 20 70  =========".    p
5950: 75 74 73 20 22 5b 69 6e 63 72 20 69 5d 3a 20 45  uts "[incr i]: E
5960: 78 69 73 74 65 6e 63 65 20 6f 66 20 74 65 73 74  xistence of test
5970: 73 75 69 74 65 73 20 2e 2e 2e 22 0a 20 20 20 20  suites ...".    
5980: 70 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  puts "----------
5990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
59a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
59b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20  ------------".  
59c0: 20 20 76 61 6c 69 64 61 74 65 5f 74 65 73 74 73    validate_tests
59d0: 75 69 74 65 73 0a 20 20 20 20 70 75 74 73 20 22  uites.    puts "
59e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
59f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a10: 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20 70 75 74 73  ------".    puts
5a20: 20 22 22 0a 0a 20 20 20 20 70 75 74 73 20 22 5b   ""..    puts "[
5a30: 69 6e 63 72 20 69 5d 3a 20 45 78 69 73 74 65 6e  incr i]: Existen
5a40: 63 65 20 6f 66 20 70 61 63 6b 61 67 65 20 69 6e  ce of package in
5a50: 64 69 63 65 73 20 2e 2e 2e 22 0a 20 20 20 20 70  dices ...".    p
5a60: 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  uts "-----------
5a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20  -----------".   
5aa0: 20 76 61 6c 69 64 61 74 65 5f 70 6b 67 49 6e 64   validate_pkgInd
5ab0: 65 78 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d  ex.    puts "---
5ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5af0: 2d 2d 2d 22 0a 20 20 20 20 70 75 74 73 20 22 22  ---".    puts ""
5b00: 0a 0a 20 20 20 20 70 75 74 73 20 22 5b 69 6e 63  ..    puts "[inc
5b10: 72 20 69 5d 3a 20 43 6f 6e 73 69 73 74 65 6e 63  r i]: Consistenc
5b20: 79 20 6f 66 20 70 61 63 6b 61 67 65 20 76 65 72  y of package ver
5b30: 73 69 6f 6e 73 20 2e 2e 2e 22 0a 20 20 20 20 70  sions ...".    p
5b40: 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  uts "-----------
5b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20  -----------".   
5b80: 20 76 61 6c 69 64 61 74 65 5f 76 65 72 73 69 6f   validate_versio
5b90: 6e 73 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d  ns.    puts "---
5ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5bd0: 2d 2d 2d 22 0a 20 20 20 20 70 75 74 73 20 22 22  ---".    puts ""
5be0: 0a 0a 20 20 20 20 70 75 74 73 20 22 5b 69 6e 63  ..    puts "[inc
5bf0: 72 20 69 5d 3a 20 49 6e 73 74 61 6c 6c 65 64 20  r i]: Installed 
5c00: 76 73 2e 20 64 65 76 65 6c 6f 70 65 64 20 6d 6f  vs. developed mo
5c10: 64 75 6c 65 73 20 2e 2e 2e 22 0a 20 20 20 20 70  dules ...".    p
5c20: 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  uts "-----------
5c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20  -----------".   
5c60: 20 76 61 6c 69 64 61 74 65 5f 69 6d 6f 64 75 6c   validate_imodul
5c70: 65 73 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d  es.    puts "---
5c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5cb0: 2d 2d 2d 22 0a 20 20 20 20 70 75 74 73 20 22 22  ---".    puts ""
5cc0: 0a 0a 20 20 20 20 70 75 74 73 20 22 5b 69 6e 63  ..    puts "[inc
5cd0: 72 20 69 5d 3a 20 45 78 69 73 74 65 6e 63 65 20  r i]: Existence 
5ce0: 6f 66 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  of documentation
5cf0: 20 2e 2e 2e 22 0a 20 20 20 20 70 75 74 73 20 22   ...".    puts "
5d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d30: 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20 76 61 6c 69  ------".    vali
5d40: 64 61 74 65 5f 64 6f 63 5f 65 78 69 73 74 65 6e  date_doc_existen
5d50: 63 65 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d  ce.    puts "---
5d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d90: 2d 2d 2d 22 0a 20 20 20 20 70 75 74 73 20 22 22  ---".    puts ""
5da0: 0a 0a 20 20 20 20 70 75 74 73 20 22 5b 69 6e 63  ..    puts "[inc
5db0: 72 20 69 5d 3a 20 56 61 6c 69 64 61 74 65 20 64  r i]: Validate d
5dc0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6d 61 72  ocumentation mar
5dd0: 6b 75 70 20 28 64 6f 63 74 6f 6f 6c 73 29 20 2e  kup (doctools) .
5de0: 2e 2e 22 0a 20 20 20 20 70 75 74 73 20 22 2d 2d  ..".    puts "--
5df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e20: 2d 2d 2d 2d 22 0a 20 20 20 20 76 61 6c 69 64 61  ----".    valida
5e30: 74 65 5f 64 6f 63 5f 6d 61 72 6b 75 70 0a 20 20  te_doc_markup.  
5e40: 20 20 70 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d    puts "--------
5e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a  --------------".
5e80: 20 20 20 20 70 75 74 73 20 22 22 0a 0a 20 20 20      puts ""..   
5e90: 20 70 75 74 73 20 22 5b 69 6e 63 72 20 69 5d 3a   puts "[incr i]:
5ea0: 20 53 74 61 74 69 63 20 73 79 6e 74 61 78 20 63   Static syntax c
5eb0: 68 65 63 6b 20 2e 2e 2e 22 0a 20 20 20 20 70 75  heck ...".    pu
5ec0: 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ts "------------
5ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 0a 20 20 20  ----------"..   
5f00: 20 73 65 74 20 66 72 69 6e 6b 20 20 20 20 5b 61   set frink    [a
5f10: 75 74 6f 5f 65 78 65 63 6f 6b 20 66 72 69 6e 6b  uto_execok frink
5f20: 5d 0a 20 20 20 20 73 65 74 20 70 72 6f 63 68 65  ].    set proche
5f30: 63 6b 20 5b 61 75 74 6f 5f 65 78 65 63 6f 6b 20  ck [auto_execok 
5f40: 70 72 6f 63 68 65 63 6b 5d 0a 0a 20 20 20 20 69  procheck]..    i
5f50: 66 20 7b 24 66 72 69 6e 6b 20 20 20 20 3d 3d 20  f {$frink    == 
5f60: 7b 7d 7d 20 7b 70 75 74 73 20 22 20 20 54 6f 6f  {}} {puts "  Too
5f70: 6c 20 27 66 72 69 6e 6b 27 20 20 20 20 6e 6f 74  l 'frink'    not
5f80: 20 66 6f 75 6e 64 2c 20 6e 6f 20 63 68 65 63 6b   found, no check
5f90: 22 7d 0a 20 20 20 20 69 66 20 7b 24 70 72 6f 63  "}.    if {$proc
5fa0: 68 65 63 6b 20 3d 3d 20 7b 7d 7d 20 7b 70 75 74  heck == {}} {put
5fb0: 73 20 22 20 20 54 6f 6f 6c 20 27 70 72 6f 63 68  s "  Tool 'proch
5fc0: 65 63 6b 27 20 6e 6f 74 20 66 6f 75 6e 64 2c 20  eck' not found, 
5fd0: 6e 6f 20 63 68 65 63 6b 22 7d 0a 20 20 20 20 69  no check"}.    i
5fe0: 66 20 7b 28 24 66 72 69 6e 6b 20 3d 3d 20 7b 7d  f {($frink == {}
5ff0: 29 20 7c 7c 20 28 24 70 72 6f 63 68 65 63 6b 20  ) || ($procheck 
6000: 3d 3d 20 7b 7d 29 7d 20 7b 0a 09 70 75 74 73 20  == {})} {..puts 
6010: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "---------------
6020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6040: 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20 7d 0a 20  -------".    }. 
6050: 20 20 20 69 66 20 7b 28 24 66 72 69 6e 6b 20 3d     if {($frink =
6060: 3d 20 7b 7d 29 20 26 26 20 28 24 70 72 6f 63 68  = {}) && ($proch
6070: 65 63 6b 20 3d 3d 20 7b 7d 29 7d 20 7b 0a 09 72  eck == {})} {..r
6080: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 20 20 20 20  eturn.    }.    
6090: 69 66 20 7b 24 66 72 69 6e 6b 20 20 20 20 21 3d  if {$frink    !=
60a0: 20 7b 7d 7d 20 7b 0a 09 72 75 6e 2d 66 72 69 6e   {}} {..run-frin
60b0: 6b 0a 09 70 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d  k..puts "-------
60c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
60d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
60e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22  ---------------"
60f0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24  .    }.    if {$
6100: 70 72 6f 63 68 65 63 6b 20 20 20 20 21 3d 20 7b  procheck    != {
6110: 7d 7d 20 7b 0a 09 72 75 6e 2d 70 72 6f 63 68 65  }} {..run-proche
6120: 63 6b 0a 09 70 75 74 73 20 22 2d 2d 2d 2d 2d 2d  ck..puts "------
6130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6160: 22 0a 20 20 20 20 7d 0a 20 20 20 20 70 75 74 73  ".    }.    puts
6170: 20 22 22 0a 0a 20 20 20 20 72 65 74 75 72 6e 0a   ""..    return.
6180: 7d 0a 0a 70 72 6f 63 20 5f 76 61 6c 69 64 61 74  }..proc _validat
6190: 65 5f 6d 6f 64 75 6c 65 20 7b 6d 7d 20 7b 0a 20  e_module {m} {. 
61a0: 20 20 20 67 6c 6f 62 61 6c 20 74 63 6c 6c 69 62     global tcllib
61b0: 5f 6e 61 6d 65 20 74 63 6c 6c 69 62 5f 76 65 72  _name tcllib_ver
61c0: 73 69 6f 6e 0a 20 20 20 20 73 65 74 20 69 20 30  sion.    set i 0
61d0: 0a 0a 20 20 20 20 70 75 74 73 20 22 56 61 6c 69  ..    puts "Vali
61e0: 64 61 74 69 6e 67 20 24 74 63 6c 6c 69 62 5f 6e  dating $tcllib_n
61f0: 61 6d 65 20 24 74 63 6c 6c 69 62 5f 76 65 72 73  ame $tcllib_vers
6200: 69 6f 6e 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20  ion development 
6210: 2d 2d 20 24 6d 22 0a 20 20 20 20 70 75 74 73 20  -- $m".    puts 
6220: 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  "===============
6230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6250: 3d 3d 3d 3d 22 0a 20 20 20 20 70 75 74 73 20 22  ====".    puts "
6260: 5b 69 6e 63 72 20 69 5d 3a 20 45 78 69 73 74 65  [incr i]: Existe
6270: 6e 63 65 20 6f 66 20 74 65 73 74 73 75 69 74 65  nce of testsuite
6280: 73 20 2e 2e 2e 22 0a 20 20 20 20 70 75 74 73 20  s ...".    puts 
6290: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "---------------
62a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
62b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
62c0: 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20 76 61 6c  -------".    val
62d0: 69 64 61 74 65 5f 74 65 73 74 73 75 69 74 65 5f  idate_testsuite_
62e0: 6d 6f 64 20 24 6d 0a 20 20 20 20 70 75 74 73 20  mod $m.    puts 
62f0: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "---------------
6300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6320: 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20 70 75 74  -------".    put
6330: 73 20 22 22 0a 0a 20 20 20 20 70 75 74 73 20 22  s ""..    puts "
6340: 5b 69 6e 63 72 20 69 5d 3a 20 45 78 69 73 74 65  [incr i]: Existe
6350: 6e 63 65 20 6f 66 20 70 61 63 6b 61 67 65 20 69  nce of package i
6360: 6e 64 69 63 65 73 20 2e 2e 2e 22 0a 20 20 20 20  ndices ...".    
6370: 70 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  puts "----------
6380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
63a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20  ------------".  
63b0: 20 20 76 61 6c 69 64 61 74 65 5f 70 6b 67 49 6e    validate_pkgIn
63c0: 64 65 78 5f 6d 6f 64 20 24 6d 0a 20 20 20 20 70  dex_mod $m.    p
63d0: 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  uts "-----------
63e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
63f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20  -----------".   
6410: 20 70 75 74 73 20 22 22 0a 0a 20 20 20 20 70 75   puts ""..    pu
6420: 74 73 20 22 5b 69 6e 63 72 20 69 5d 3a 20 43 6f  ts "[incr i]: Co
6430: 6e 73 69 73 74 65 6e 63 79 20 6f 66 20 70 61 63  nsistency of pac
6440: 6b 61 67 65 20 76 65 72 73 69 6f 6e 73 20 2e 2e  kage versions ..
6450: 2e 22 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d  .".    puts "---
6460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6490: 2d 2d 2d 22 0a 20 20 20 20 76 61 6c 69 64 61 74  ---".    validat
64a0: 65 5f 76 65 72 73 69 6f 6e 73 5f 6d 6f 64 20 24  e_versions_mod $
64b0: 6d 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d 2d  m.    puts "----
64c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64f0: 2d 2d 22 0a 20 20 20 20 70 75 74 73 20 22 22 0a  --".    puts "".
6500: 0a 20 20 20 20 23 70 75 74 73 20 22 5b 69 6e 63  .    #puts "[inc
6510: 72 20 69 5d 3a 20 49 6e 73 74 61 6c 6c 65 64 20  r i]: Installed 
6520: 76 73 2e 20 64 65 76 65 6c 6f 70 65 64 20 6d 6f  vs. developed mo
6530: 64 75 6c 65 73 20 2e 2e 2e 22 0a 20 20 20 20 70  dules ...".    p
6540: 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  uts "-----------
6550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20  -----------".   
6580: 20 76 61 6c 69 64 61 74 65 5f 69 6d 6f 64 75 6c   validate_imodul
6590: 65 73 5f 6d 6f 64 20 24 6d 0a 20 20 20 20 70 75  es_mod $m.    pu
65a0: 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ts "------------
65b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
65c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
65d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20  ----------".    
65e0: 70 75 74 73 20 22 22 0a 0a 20 20 20 20 70 75 74  puts ""..    put
65f0: 73 20 22 5b 69 6e 63 72 20 69 5d 3a 20 45 78 69  s "[incr i]: Exi
6600: 73 74 65 6e 63 65 20 6f 66 20 64 6f 63 75 6d 65  stence of docume
6610: 6e 74 61 74 69 6f 6e 20 2e 2e 2e 22 0a 20 20 20  ntation ...".   
6620: 20 70 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d   puts "---------
6630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20  -------------". 
6660: 20 20 20 76 61 6c 69 64 61 74 65 5f 64 6f 63 5f     validate_doc_
6670: 65 78 69 73 74 65 6e 63 65 5f 6d 6f 64 20 24 6d  existence_mod $m
6680: 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d 2d 2d  .    puts "-----
6690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66c0: 2d 22 0a 20 20 20 20 70 75 74 73 20 22 22 0a 0a  -".    puts ""..
66d0: 20 20 20 20 70 75 74 73 20 22 5b 69 6e 63 72 20      puts "[incr 
66e0: 69 5d 3a 20 56 61 6c 69 64 61 74 65 20 64 6f 63  i]: Validate doc
66f0: 75 6d 65 6e 74 61 74 69 6f 6e 20 6d 61 72 6b 75  umentation marku
6700: 70 20 28 64 6f 63 74 6f 6f 6c 73 29 20 2e 2e 2e  p (doctools) ...
6710: 22 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d 2d  ".    puts "----
6720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6750: 2d 2d 22 0a 20 20 20 20 76 61 6c 69 64 61 74 65  --".    validate
6760: 5f 64 6f 63 5f 6d 61 72 6b 75 70 5f 6d 6f 64 20  _doc_markup_mod 
6770: 24 6d 0a 20 20 20 20 70 75 74 73 20 22 2d 2d 2d  $m.    puts "---
6780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
67a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
67b0: 2d 2d 2d 22 0a 20 20 20 20 70 75 74 73 20 22 22  ---".    puts ""
67c0: 0a 0a 20 20 20 20 70 75 74 73 20 22 5b 69 6e 63  ..    puts "[inc
67d0: 72 20 69 5d 3a 20 53 74 61 74 69 63 20 73 79 6e  r i]: Static syn
67e0: 74 61 78 20 63 68 65 63 6b 20 2e 2e 2e 22 0a 20  tax check ...". 
67f0: 20 20 20 70 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d     puts "-------
6800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22  ---------------"
6830: 0a 0a 20 20 20 20 73 65 74 20 66 72 69 6e 6b 20  ..    set frink 
6840: 20 20 20 5b 61 75 74 6f 5f 65 78 65 63 6f 6b 20     [auto_execok 
6850: 66 72 69 6e 6b 5d 0a 20 20 20 20 73 65 74 20 70  frink].    set p
6860: 72 6f 63 68 65 63 6b 20 5b 61 75 74 6f 5f 65 78  rocheck [auto_ex
6870: 65 63 6f 6b 20 70 72 6f 63 68 65 63 6b 5d 0a 0a  ecok procheck]..
6880: 20 20 20 20 69 66 20 7b 24 66 72 69 6e 6b 20 20      if {$frink  
6890: 20 20 3d 3d 20 7b 7d 7d 20 7b 70 75 74 73 20 22    == {}} {puts "
68a0: 20 20 54 6f 6f 6c 20 27 66 72 69 6e 6b 27 20 20    Tool 'frink'  
68b0: 20 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 6e 6f 20    not found, no 
68c0: 63 68 65 63 6b 22 7d 0a 20 20 20 20 69 66 20 7b  check"}.    if {
68d0: 24 70 72 6f 63 68 65 63 6b 20 3d 3d 20 7b 7d 7d  $procheck == {}}
68e0: 20 7b 70 75 74 73 20 22 20 20 54 6f 6f 6c 20 27   {puts "  Tool '
68f0: 70 72 6f 63 68 65 63 6b 27 20 6e 6f 74 20 66 6f  procheck' not fo
6900: 75 6e 64 2c 20 6e 6f 20 63 68 65 63 6b 22 7d 0a  und, no check"}.
6910: 20 20 20 20 69 66 20 7b 28 24 66 72 69 6e 6b 20      if {($frink 
6920: 3d 3d 20 7b 7d 29 20 7c 7c 20 28 24 70 72 6f 63  == {}) || ($proc
6930: 68 65 63 6b 20 3d 3d 20 7b 7d 29 7d 20 7b 0a 09  heck == {})} {..
6940: 70 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  puts "----------
6950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20  ------------".  
6980: 20 20 7d 0a 20 20 20 20 69 66 20 7b 28 24 66 72    }.    if {($fr
6990: 69 6e 6b 20 3d 3d 20 7b 7d 29 20 26 26 20 28 24  ink == {}) && ($
69a0: 70 72 6f 63 68 65 63 6b 20 3d 3d 20 7b 7d 29 7d  procheck == {})}
69b0: 20 7b 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d   {..return.    }
69c0: 0a 20 20 20 20 69 66 20 7b 24 66 72 69 6e 6b 20  .    if {$frink 
69d0: 20 20 20 21 3d 20 7b 7d 7d 20 7b 0a 09 72 75 6e     != {}} {..run
69e0: 2d 66 72 69 6e 6b 20 24 6d 0a 09 70 75 74 73 20  -frink $m..puts 
69f0: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "---------------
6a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a20: 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20 7d 0a 20  -------".    }. 
6a30: 20 20 20 69 66 20 7b 24 70 72 6f 63 68 65 63 6b     if {$procheck
6a40: 20 20 20 20 21 3d 20 7b 7d 7d 20 7b 0a 09 72 75      != {}} {..ru
6a50: 6e 2d 70 72 6f 63 68 65 63 6b 20 24 6d 0a 09 70  n-procheck $m..p
6a60: 75 74 73 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  uts "-----------
6a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20  -----------".   
6aa0: 20 7d 0a 20 20 20 20 70 75 74 73 20 22 22 0a 0a   }.    puts ""..
6ab0: 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 20      return.}..# 
6ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
6b00: 20 52 65 6c 65 61 73 65 20 65 6e 67 69 6e 65 65   Release enginee
6b10: 72 69 6e 67 0a 0a 70 72 6f 63 20 5f 5f 67 65 6e  ring..proc __gen
6b20: 64 69 73 74 20 7b 7d 20 7b 0a 20 20 20 20 67 64  dist {} {.    gd
6b30: 2d 63 6c 65 61 6e 75 70 0a 20 20 20 20 67 64 2d  -cleanup.    gd-
6b40: 74 69 70 35 35 0a 20 20 20 20 67 64 2d 61 73 73  tip55.    gd-ass
6b50: 65 6d 62 6c 65 0a 20 20 20 20 67 64 2d 67 65 6e  emble.    gd-gen
6b60: 2d 61 72 63 68 69 76 65 73 0a 0a 20 20 20 20 70  -archives..    p
6b70: 75 74 73 20 2e 2e 2e 44 6f 6e 65 0a 20 20 20 20  uts ...Done.    
6b80: 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 5f  return.}..proc _
6b90: 5f 67 65 6e 74 69 70 35 35 20 7b 7d 20 7b 0a 20  _gentip55 {} {. 
6ba0: 20 20 20 67 64 2d 74 69 70 35 35 0a 20 20 20 20     gd-tip55.    
6bb0: 70 75 74 73 20 22 43 72 65 61 74 65 64 20 44 45  puts "Created DE
6bc0: 53 43 52 49 50 54 49 4f 4e 2e 74 78 74 22 0a 20  SCRIPTION.txt". 
6bd0: 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f     return.}..pro
6be0: 63 20 5f 5f 63 6f 6e 74 72 69 62 75 74 6f 72 73  c __contributors
6bf0: 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c   {} {.    global
6c00: 20 63 6f 6e 74 72 69 62 75 74 6f 72 73 0a 20 20   contributors.  
6c10: 20 20 63 6f 6e 74 72 69 62 75 74 6f 72 73 0a 20    contributors. 
6c20: 20 20 20 66 6f 72 65 61 63 68 20 70 65 72 73 6f     foreach perso
6c30: 6e 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20  n [lsort [array 
6c40: 6e 61 6d 65 73 20 63 6f 6e 74 72 69 62 75 74 6f  names contributo
6c50: 72 73 5d 5d 20 7b 0a 20 20 20 20 20 20 20 20 70  rs]] {.        p
6c60: 75 74 73 20 22 24 70 65 72 73 6f 6e 20 3c 24 63  uts "$person <$c
6c70: 6f 6e 74 72 69 62 75 74 6f 72 73 28 24 70 65 72  ontributors($per
6c80: 73 6f 6e 29 3e 22 0a 20 20 20 20 7d 0a 20 20 20  son)>".    }.   
6c90: 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20   return.}..proc 
6ca0: 5f 5f 74 61 70 20 7b 7d 20 7b 0a 20 20 20 20 67  __tap {} {.    g
6cb0: 64 2d 67 65 6e 2d 74 61 70 0a 20 20 20 20 70 75  d-gen-tap.    pu
6cc0: 74 73 20 22 43 72 65 61 74 65 64 20 54 63 6c 20  ts "Created Tcl 
6cd0: 44 65 76 20 4b 69 74 20 5c 22 74 63 6c 6c 69 62  Dev Kit \"tcllib
6ce0: 2e 74 61 70 5c 22 22 0a 7d 0a 0a 0a 23 20 2d 2d  .tap\"".}...# --
6cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 44  ------------.# D
6d30: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 0a 70 72  ocumentation..pr
6d40: 6f 63 20 5f 5f 68 74 6d 6c 20 20 7b 7d 20 7b 67  oc __html  {} {g
6d50: 6c 6f 62 61 6c 20 61 72 67 76 20 3b 20 69 66 20  lobal argv ; if 
6d60: 7b 21 5b 63 68 65 63 6b 6d 6f 64 5d 7d 20 72 65  {![checkmod]} re
6d70: 74 75 72 6e 20 3b 20 65 76 61 6c 20 67 65 6e 64  turn ; eval gend
6d80: 6f 63 20 68 74 6d 6c 20 20 68 74 6d 6c 20 24 61  oc html  html $a
6d90: 72 67 76 7d 0a 70 72 6f 63 20 5f 5f 6e 72 6f 66  rgv}.proc __nrof
6da0: 66 20 7b 7d 20 7b 67 6c 6f 62 61 6c 20 61 72 67  f {} {global arg
6db0: 76 20 3b 20 69 66 20 7b 21 5b 63 68 65 63 6b 6d  v ; if {![checkm
6dc0: 6f 64 5d 7d 20 72 65 74 75 72 6e 20 3b 20 65 76  od]} return ; ev
6dd0: 61 6c 20 67 65 6e 64 6f 63 20 6e 72 6f 66 66 20  al gendoc nroff 
6de0: 6e 20 20 20 20 24 61 72 67 76 7d 0a 70 72 6f 63  n    $argv}.proc
6df0: 20 5f 5f 74 6d 6d 6c 20 20 7b 7d 20 7b 67 6c 6f   __tmml  {} {glo
6e00: 62 61 6c 20 61 72 67 76 20 3b 20 69 66 20 7b 21  bal argv ; if {!
6e10: 5b 63 68 65 63 6b 6d 6f 64 5d 7d 20 72 65 74 75  [checkmod]} retu
6e20: 72 6e 20 3b 20 65 76 61 6c 20 67 65 6e 64 6f 63  rn ; eval gendoc
6e30: 20 74 6d 6d 6c 20 20 74 6d 6d 6c 20 24 61 72 67   tmml  tmml $arg
6e40: 76 7d 0a 70 72 6f 63 20 5f 5f 74 65 78 74 20 20  v}.proc __text  
6e50: 7b 7d 20 7b 67 6c 6f 62 61 6c 20 61 72 67 76 20  {} {global argv 
6e60: 3b 20 69 66 20 7b 21 5b 63 68 65 63 6b 6d 6f 64  ; if {![checkmod
6e70: 5d 7d 20 72 65 74 75 72 6e 20 3b 20 65 76 61 6c  ]} return ; eval
6e80: 20 67 65 6e 64 6f 63 20 74 65 78 74 20 20 74 78   gendoc text  tx
6e90: 74 20 20 24 61 72 67 76 7d 0a 70 72 6f 63 20 5f  t  $argv}.proc _
6ea0: 5f 77 69 6b 69 20 20 7b 7d 20 7b 67 6c 6f 62 61  _wiki  {} {globa
6eb0: 6c 20 61 72 67 76 20 3b 20 69 66 20 7b 21 5b 63  l argv ; if {![c
6ec0: 68 65 63 6b 6d 6f 64 5d 7d 20 72 65 74 75 72 6e  heckmod]} return
6ed0: 20 3b 20 65 76 61 6c 20 67 65 6e 64 6f 63 20 77   ; eval gendoc w
6ee0: 69 6b 69 20 20 77 69 6b 69 20 24 61 72 67 76 7d  iki  wiki $argv}
6ef0: 0a 70 72 6f 63 20 5f 5f 6c 61 74 65 78 20 7b 7d  .proc __latex {}
6f00: 20 7b 67 6c 6f 62 61 6c 20 61 72 67 76 20 3b 20   {global argv ; 
6f10: 69 66 20 7b 21 5b 63 68 65 63 6b 6d 6f 64 5d 7d  if {![checkmod]}
6f20: 20 72 65 74 75 72 6e 20 3b 20 65 76 61 6c 20 67   return ; eval g
6f30: 65 6e 64 6f 63 20 6c 61 74 65 78 20 74 65 78 20  endoc latex tex 
6f40: 20 24 61 72 67 76 7d 0a 70 72 6f 63 20 5f 5f 64   $argv}.proc __d
6f50: 76 69 20 20 20 7b 7d 20 7b 0a 20 20 20 20 67 6c  vi   {} {.    gl
6f60: 6f 62 61 6c 20 61 72 67 76 20 3b 20 69 66 20 7b  obal argv ; if {
6f70: 21 5b 63 68 65 63 6b 6d 6f 64 5d 7d 20 72 65 74  ![checkmod]} ret
6f80: 75 72 6e 0a 20 20 20 20 5f 5f 6c 61 74 65 78 0a  urn.    __latex.
6f90: 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 5b      file mkdir [
6fa0: 66 69 6c 65 20 6a 6f 69 6e 20 64 6f 63 20 64 76  file join doc dv
6fb0: 69 5d 0a 20 20 20 20 63 64 20 20 20 20 20 20 20  i].    cd       
6fc0: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 64 6f 63    [file join doc
6fd0: 20 64 76 69 5d 0a 20 20 20 20 66 6f 72 65 61 63   dvi].    foreac
6fe0: 68 20 66 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d  h f [glob -nocom
6ff0: 70 6c 61 69 6e 20 2e 2e 2f 6c 61 74 65 78 2f 2a  plain ../latex/*
7000: 2e 74 65 78 5d 20 7b 0a 09 70 75 74 73 20 22 47  .tex] {..puts "G
7010: 65 6e 20 28 64 76 69 29 3a 20 24 66 22 0a 09 65  en (dvi): $f"..e
7020: 78 65 63 20 6c 61 74 65 78 20 24 66 20 31 3e 40  xec latex $f 1>@
7030: 20 73 74 64 6f 75 74 20 32 3e 40 20 73 74 64 65   stdout 2>@ stde
7040: 72 72 0a 20 20 20 20 7d 0a 20 20 20 20 63 64 20  rr.    }.    cd 
7050: 2e 2e 2f 2e 2e 0a 7d 0a 70 72 6f 63 20 5f 5f 70  ../...}.proc __p
7060: 73 20 20 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f  s   {} {.    glo
7070: 62 61 6c 20 61 72 67 76 20 3b 20 69 66 20 7b 21  bal argv ; if {!
7080: 5b 63 68 65 63 6b 6d 6f 64 5d 7d 20 72 65 74 75  [checkmod]} retu
7090: 72 6e 0a 20 20 20 20 5f 5f 64 76 69 0a 20 20 20  rn.    __dvi.   
70a0: 20 66 69 6c 65 20 6d 6b 64 69 72 20 5b 66 69 6c   file mkdir [fil
70b0: 65 20 6a 6f 69 6e 20 64 6f 63 20 70 73 5d 0a 20  e join doc ps]. 
70c0: 20 20 20 63 64 20 20 20 20 20 20 20 20 20 5b 66     cd         [f
70d0: 69 6c 65 20 6a 6f 69 6e 20 64 6f 63 20 70 73 5d  ile join doc ps]
70e0: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 66 20 5b  .    foreach f [
70f0: 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  glob -nocomplain
7100: 20 2e 2e 2f 64 76 69 2f 2a 2e 64 76 69 5d 20 7b   ../dvi/*.dvi] {
7110: 0a 09 70 75 74 73 20 22 47 65 6e 20 28 64 76 69  ..puts "Gen (dvi
7120: 29 3a 20 24 66 22 0a 09 65 78 65 63 20 64 76 69  ): $f"..exec dvi
7130: 70 73 20 2d 6f 20 5b 66 69 6c 65 20 72 6f 6f 74  ps -o [file root
7140: 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20  name [file tail 
7150: 24 66 5d 5d 2e 70 73 20 24 66 20 31 3e 40 20 73  $f]].ps $f 1>@ s
7160: 74 64 6f 75 74 20 32 3e 40 20 73 74 64 65 72 72  tdout 2>@ stderr
7170: 0a 20 20 20 20 7d 0a 20 20 20 20 63 64 20 2e 2e  .    }.    cd ..
7180: 2f 2e 2e 0a 7d 0a 0a 70 72 6f 63 20 5f 5f 6c 69  /...}..proc __li
7190: 73 74 20 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f  st  {} {.    glo
71a0: 62 61 6c 20 61 72 67 76 20 3b 20 69 66 20 7b 21  bal argv ; if {!
71b0: 5b 63 68 65 63 6b 6d 6f 64 5d 7d 20 72 65 74 75  [checkmod]} retu
71c0: 72 6e 0a 20 20 20 20 65 76 61 6c 20 67 65 6e 64  rn.    eval gend
71d0: 6f 63 20 6c 69 73 74 20 6c 20 24 61 72 67 76 0a  oc list l $argv.
71e0: 20 20 20 20 0a 20 20 20 20 73 65 74 20 46 49 4c      .    set FIL
71f0: 45 53 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70  ES [glob -nocomp
7200: 6c 61 69 6e 20 64 6f 63 2f 6c 69 73 74 2f 2a 2e  lain doc/list/*.
7210: 6c 5d 0a 20 20 20 20 73 65 74 20 4c 49 53 54 20  l].    set LIST 
7220: 5b 6f 70 65 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  [open [file join
7230: 20 64 6f 63 20 6c 69 73 74 20 6d 61 6e 70 61 67   doc list manpag
7240: 65 73 2e 74 63 6c 5d 20 77 5d 0a 0a 20 20 20 20  es.tcl] w]..    
7250: 66 6f 72 65 61 63 68 20 66 69 6c 65 20 24 46 49  foreach file $FI
7260: 4c 45 53 20 7b 0a 20 20 20 20 20 20 20 20 73 65  LES {.        se
7270: 74 20 66 20 5b 6f 70 65 6e 20 24 66 69 6c 65 20  t f [open $file 
7280: 72 5d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20  r].        puts 
7290: 24 4c 49 53 54 20 5b 72 65 61 64 20 24 66 5d 0a  $LIST [read $f].
72a0: 20 20 20 20 20 20 20 20 63 6c 6f 73 65 20 24 66          close $f
72b0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 6c 6f 73 65  .    }.    close
72c0: 20 24 4c 49 53 54 0a 0a 20 20 20 20 65 76 61 6c   $LIST..    eval
72d0: 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f   file delete -fo
72e0: 72 63 65 20 24 46 49 4c 45 53 0a 0a 20 20 20 20  rce $FILES..    
72f0: 72 65 74 75 72 6e 0a 7d 0a 0a 23 20 2d 2d 2d 2d  return.}..# ----
7300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 73 65 74 20  ----------..set 
7340: 63 6d 64 20 5b 6c 69 6e 64 65 78 20 24 61 72 67  cmd [lindex $arg
7350: 76 20 30 5d 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74  v 0].if {[llengt
7360: 68 20 5b 69 6e 66 6f 20 70 72 6f 63 73 20 5f 5f  h [info procs __
7370: 24 63 6d 64 5d 5d 20 3d 3d 20 30 7d 20 7b 0a 20  $cmd]] == 0} {. 
7380: 20 20 20 70 75 74 73 20 73 74 64 65 72 72 20 22     puts stderr "
7390: 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20  unknown command 
73a0: 24 63 6d 64 22 0a 20 20 20 20 73 65 74 20 66 6c  $cmd".    set fl
73b0: 20 7b 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20   {}.    foreach 
73c0: 70 20 5b 6c 73 6f 72 74 20 5b 69 6e 66 6f 20 70  p [lsort [info p
73d0: 72 6f 63 73 20 5f 5f 2a 5d 5d 20 7b 0a 09 6c 61  rocs __*]] {..la
73e0: 70 70 65 6e 64 20 66 6c 20 5b 73 74 72 69 6e 67  ppend fl [string
73f0: 20 72 61 6e 67 65 20 24 70 20 32 20 65 6e 64 5d   range $p 2 end]
7400: 0a 20 20 20 20 7d 0a 20 20 20 20 70 75 74 73 20  .    }.    puts 
7410: 73 74 64 65 72 72 20 22 75 73 65 3a 20 5b 6a 6f  stderr "use: [jo
7420: 69 6e 20 24 66 6c 20 22 2c 20 22 5d 22 0a 20 20  in $fl ", "]".  
7430: 20 20 65 78 69 74 20 31 0a 7d 0a 0a 73 65 74 20    exit 1.}..set 
7440: 20 61 72 67 76 20 5b 6c 72 61 6e 67 65 20 24 61   argv [lrange $a
7450: 72 67 76 20 31 20 65 6e 64 5d 0a 69 6e 63 72 20  rgv 1 end].incr 
7460: 61 72 67 63 20 2d 31 0a 0a 5f 5f 24 63 6d 64 0a  argc -1..__$cmd.
7470: 65 78 69 74 20 30 0a                             exit 0.