# ticket

tkt_uuid: 578460ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: tree
priority: 5 Medium
foundin: None
resolution: Fixed
title: struct::tree move within same parent
comment:
  The documentation for the tree move command states:
  "Make the specified nodes children of parent, inserting them into 
  the parent's child list at the index given by index. "

  From this, I expect a node being moved to always end up with the 
  given index (assuming it is valid) after it is moved.

  Example:
  package require struct
  struct::tree mytree
  mytree insert root node0 node1 node2
  mytree move root 1 node0
  mytree children root

  Expected result:
  node1 node0 node2

  Actual result:
  node0 node1 node2


  There are several tests in the test suite that support the existing 
  behavior, so maybe I misunderstand the way it is supposed to 
  work.  If that's the case, then the documentation for this command 
  should be expanded to describe the behavior (and maybe why).


tkt_uuid: 3085417fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Build System & Testing
priority: 5 Medium
foundin: None
resolution: Fixed
title: nnsd not installed
comment:
  The nano name service daemon is not installed. This appears to have happened between tcllib versions1.11 and 1.12 . Thhe support/installation/modules.tcl  does not list nnsd as an application. Adding the line :

  Application nnsd 

  fixes this bug. Corrected file attached.


tkt_uuid: 519189ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Combobox bugs (and patch)
comment:
  Hello,

  the combobox has some small bugs I included a patch
  for:

  1. the selection is not cleared when the widget loses
  the focus
      (resulting in weird colour display when explicitly
  setting colours 
       other than the default)
  2. the dropdown list does not honour the the colours
  requested for      the entry widget (always displayed
  in dark grey).

  I have included a diff as well as the complete new
  combobox source.

  Regards,
            Bastien


tkt_uuid: 627960ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: smtpd
priority: 5 Medium
foundin: None
resolution: Accepted
title: welcome string hostname
comment:
  The welcome string is now "220 [info hostname] ..." also
  if you call "smtpd::start localhost" .

  This patch addresses this issue.


tkt_uuid: 3593689fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 9 Immediate
foundin: None
resolution: Fixed
title: Busyloop in [struct::list nextperm]
comment:
  If you do:

     package require struct::list 1.8.1
     struct::list nextperm {1 10 9 8 7 6 5 4 3 2}

  You get a script that takes an excessively long time to respond (and that will eventually produce a weird error; might take a *long* time!). The problem is that there is a loop that has the wrong condition, using '>=' as an ordering relation directly on values (that happen to be numeric) rather than using [string compare] to do the comparison.

  Change:

      while { $aj >= [set al [lindex $perm $l]] } {

  to:

      while { [string compare $aj [set al [lindex $perm $l]]] >= 0 } {

  This will fix the problem by making string comparison be used throughout.


tkt_uuid: 748758ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Duplicate
title: ::ftp::NList + WS in FileNames
comment:
  Hi,

    I have files like:
      ttwosadmin2 Wed Jun 04 11:39:11 MEST 2003.tar.gz
    on a ftp-server.
    if I use the command:
      foreach F [::ftp::NList $FH [info hostname]*] { ... }
    I get every part of the name as single token
    like: ttwosadmin2, Wed, Jun ...


  mfg

    aotto


tkt_uuid: 1016141fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3d
priority: 5 Medium
foundin: None
resolution: Fixed
title: pop3d test suite reports package version conflict
comment:
  platform: sparc solaris 8
  tcl: 8.5a2 cvs snapshot
  tcllib: latest cvs snapshot

  From: "Andreas Kupries" <andreask@activestate.com>

  > Module: pop3
  > modules/pop3/pop3.test
  > - tcltest 2.2.6
  > - pop3    1.6.1
  >
  > Module: pop3d
  > modules/pop3d/pop3d.test
  > skipped pop3d.test: conflicting versions provided for
  package
  > "md5": 2.0.1, then 1.4.3
  > modules/pop3d/pop3d_dbox.test
  > skipped pop3d_dbox.test: conflicting versions
  provided for
  > package "md5": 2.0.1, then 1.4.3
  > modules/pop3d/pop3d_udb.test
  > - pop3d::udb 1.1
  >
  > Any ideas what might be going on here?

  Something loaded the v1 md5, some other part wants md5
  v2, and the package
  system of the core balks at the conflict. Bug.


tkt_uuid: 849829ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Fixed
title: AutoScroll not set in TK 8.5a0
comment:
  When Tk 8.5a0 is used to run tkChat 1.128,
  the chat area does not scroll to make
  new messages visible.

  Further examination shows that
  $Options(AutoScroll) is false, so
  apparently [tkchat::scroll_set] is
  failing to enable it.

  This probably traces back to a flaw
  in Tk 8.5a0, but the tkchat maintainer
  is probably best to continue the analysis.


tkt_uuid: 967906ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: bwidget - Font Chooser Cursor Usage
comment:
  In the font chooser, the listbox cannot be navigated with the cursor key. Adding the bottom two lines to  SelectFont::create corrects this

  bind $lbf <space>           $script
  bind $lbf <1>               [list focus %W]
  +bind $lbf <Up>    $script
  +bind $lbf <Down>   $script


tkt_uuid: 548832ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Fixed
title: Tcl version of mime::qp_encode broken
comment:
  The mime package has a preference for Trf's
  quoted-printable command, but falls back to a pure Tcl
  implementation when Trf is not present.

  In tcllib 0.8 (mime package version 1.2 iirc),
  mime::qp_encode correctly encoded the equal sign as
  =3D.  Currently in tcllib 1.2 (mime package version
  1.3.1) mime::qp_encode does NOT encode the equal sign. 
  This causes the quoted-printable output of the mime
  package to not be decodable by many other programs
  (such as pine).

  A (rather simple) patch is attached.


tkt_uuid: 1014795fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: base64
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: tcl crashes when I b64 encode files
comment:
  I have a few files I want to encode into base64. Some are small, others are around 4 or 5 Mb. It takes so long to encode the large ones that I just kill the process and give up.

  But my attention caught the fact that one particular file always crasheed wish or tclsh. It is a 4,731,340-byte ZIP file. The file is OK, I can open it like any other. Whenever I try to encode it with ::base64::encode, however, I get this window title...

  Fatal Error in Wish

  ... and this error message:

  unable to realloc 5857536 bytes

  It also occurs with tclsh, except for the "Fatal Error in Wish" title, of course.

  So I went after a few 4 or 5-Mb zip files in my disk, did some more testing and saw that roughly 7 out of every 10 files make wish.exe crash.

  Intrigued by the "5857536" figure, I went after bigger files: 7 Mb, 8 Mb, 15 Mb, 24 Mb and 65 Mb. About 10 of them. Sometimes I get a different figure, "9326961" appeared twice, but "5857536" still is the most frequent one.

  I stil can use Cygwin-based b64.exe. No problems with that one.

  Now I am using ActiveTcl 8.4.7, but I also saw the problem in 8.4.6.

  My OS is Windows 98 SE.


tkt_uuid: 522529ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Fixed
title: possible log file parsing bug
comment:
  I have been seeing, during the past week or two, the
  following phenom:

  dkfI don't run the Tk test suite very often as it is
  much touchier than the Tcl test suite. In particular,
  some features (like focus handling and restacking
  timings) seem to be highly dependent on your window
  manager, and I also have problems because my Sun
  workstation has a lot more fonts than normal (I suspect
  that it is configured with extra font servers, but
  can't be bothered to check.)Sat Feb 23 14:33:54 2002
  217.118.43.2 [NEW USER] Bman  
  dan_kuchler.Sat Feb 23 19:46:49 2002 12.234.155.3 [NEW
  USER] ericm  
  dan_kuchlerhi there dude 


tkt_uuid: 554062ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: stooop
priority: 5 Medium
foundin: None
resolution: None
title: tcllib test suite failures for stoop
comment:
  With the latest Tcl cvs head (well, as of at least the
  past day or two), the tcllib test suite has begun
  showing 8 failures.  I don't know whether this is a
  fundamental change in tcltest, tcl, or tcllib, or the
  tcllib test suite.

  Platform SPARC Solaris 2.6, Sun C compiler, Tcl 8.4a5
  from May 8:

  $ make test
  /usr/tcl84/bin/tclsh8.4 `echo
  /vol/tclsrcsol/tcl84/tcllib/all.tcl` -modules "base64
  calendar cmdline comm control crc csv counter doctools
  dns exif struct fileutil ftp ftpd javascript html irc
  math md5 mime ncgi nntp pop3 pop3d profiler smtpd
  textutil uri log htmlparse report sha1 stooop"
  tcllib tests
  Tests running in working dir: 
  /vol/tclsrcsol/tcl84/tcllib
  Only sourcing test files that match:  *.test
  Tests began at Thu May 09 06:56:21 EDT 2002
  Module: base64
  modules/base64/base64.test
  base64 2.2 (pure Tcl)
  modules/base64/uuencode.test
  notice    invalid uuencoded string: padding string to a
  multiple of 4.
  notice    invalid uuencoded string: padding string to a
  multiple of 4.
  modules/base64/yencode.test

  ==== yencode-1.0 yencode yEnc test file FAILED
  ==== Contents of test case:

      set enc [yencode::yencode -file $datafile]
      set dec [yencode::ydecode $d]
      set chk [yencode::loaddata $datafile]
      string match $dec $chk

  ---- Result was:
  couldn't open "yencode.test.data": no such file or
  directory
  ---- Result should have been (exact matching):
  0
  ---- Test generated error; Return code was: 1
  ---- Return code should have been one of: 0 2
  ==== yencode-1.0 FAILED


  Module: calendar
  modules/calendar/gregorian.test

  Module: cmdline
  modules/cmdline/cmdline.test
  modules/cmdline/typedCmdline.test

  Module: comm
  modules/comm/comm.test
  comm 4.0
  self @ 55116
  Waiting for spawned comm system to boot
  Slave @ 55117
  Running tests

  Module: control
  modules/control/do.test
  modules/control/no-op.test

  Module: crc
  modules/crc/cksum.test
  modules/crc/crc32.test
  modules/crc/sum.test

  Module: csv
  modules/csv/csv.test
  csv 0.3
  - struct 1.2.1

  Module: counter
  modules/counter/counter.test
  incr scaler 12 microseconds per iteration
  incr array 16 microseconds per iteration
  rawcount 32 microseconds per iteration
  simple 72 microseconds per iteration
  lastn 153 microseconds per iteration
  lastn 154 microseconds per iteration
  hist 186 microseconds per iteration
  hist2x 282 microseconds per iteration
  Pausing during timehist tests
  timehist 259 microseconds per iteration

  Module: doctools
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: dns
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: exif
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: struct
  modules/struct/graph.test
  modules/struct/matrix.test
  modules/struct/queue.test
  modules/struct/stack.test
  modules/struct/tree.test

  Module: fileutil
  modules/fileutil/fileutil.test
  fileutil 1.4

  Module: ftp
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: ftpd
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: javascript
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: html
  modules/html/html.test

  Module: irc
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: math
  modules/math/calculus.test
  Method: eulerStep
  Result (0.0): 1.0
  Result (1.0): 2.0
  Result (2.0): 3.0
  Result (3.0): 4.0
  Result (4.0): 5.0
  Result (5.0): 6.0
  Result (6.0): 7.0
  Result (7.0): 8.0
  Result (8.0): 9.0
  Result (9.0): 10.0
  Result (0.0): 1.0 -0.1
  Result (0.1): 0.99 -0.19
  Result (0.2): 0.971 -0.27
  Result (0.3): 0.944 -0.3401
  Result (0.4): 0.90999 -0.40049
  Result (0.5): 0.869941 -0.45144
  Result (0.6): 0.824797 -0.4932901
  Result (0.7): 0.77546799 -0.52644079
  Result (0.8): 0.722823911 -0.55134351
  Result (0.9): 0.66768956 -0.5684915501
  Result (1.0): 0.61084040499 -0.57841135109
  Result (1.1): 0.552999269881 -0.58165425648
  Result (1.2): 0.494833844233 -0.57878875782
  Result (1.3): 0.436954968451 -0.570393266461
  Result (1.4): 0.379915641805 -0.55704943666
  Result (1.5): 0.324210698139 -0.539336057175
  Result (1.6): 0.270277092421 -0.517823521271
  Result (1.7): 0.218494740294 -0.493068878386
  Result (1.8): 0.169187852456 -0.465611464577
  Result (1.9): 0.122626705998 -0.435969103365
  Method: heunStep
  Result (0.0): 1.0
  Result (1.0): 2.0
  Result (2.0): 3.0
  Result (3.0): 4.0
  Result (4.0): 5.0
  Result (5.0): 6.0
  Result (6.0): 7.0
  Result (7.0): 8.0
  Result (8.0): 9.0
  Result (9.0): 10.0
  Result (0.0): 0.995 -0.095
  Result (0.1): 0.981 -0.180025
  Result (0.2): 0.958992625 -0.2552175
  Result (0.3): 0.929951999375 -0.320800049375
  Result (0.4): 0.894826234687 -0.377065484378
  Result (0.5): 0.854530882498 -0.424367428236
  Result (0.6): 0.809943322403 -0.463111119249
  Result (0.7): 0.761898049463 -0.493744622953
  Result (0.8): 0.711182820035 -0.516750475356
  Result (0.9): 0.658535610776 -0.532637795724
  Result (1.0): 0.604642342128 -0.541934899175
  Result (1.1): 0.550135314996 -0.54518243176
  Result (1.2): 0.495592307404 -0.542927043509
  Result (1.3): 0.441536276733 -0.535715608361
  Result (1.4): 0.388435612555 -0.524089993815
  Result (1.5): 0.33670488508 -0.508582377626
  Result (1.6): 0.28670603478 -0.489711103946
  Result (1.7): 0.238749949731 -0.467977066855
  Result (1.8): 0.193098378632 -0.443860605394
  Result (1.9): 0.149966129226 -0.417818890825
  Method: rungeKuttaStep
  Result (0.0): 1.0
  Result (1.0): 2.0
  Result (2.0): 3.0
  Result (3.0): 4.0
  Result (4.0): 5.0
  Result (5.0): 6.0
  Result (6.0): 7.0
  Result (7.0): 8.0
  Result (8.0): 9.0
  Result (9.0): 10.0
  Result (0.0): 0.995958333333 -0.0958354166667
  Result (0.1): 0.982748574648 -0.181711736628
  Result (0.2): 0.9613622125 -0.257745017496
  Result (0.3): 0.932775605745 -0.324134745107
  Result (0.4): 0.897942049319 -0.381154050992
  Result (0.5): 0.857784809578 -0.429140146517
  Result (0.6): 0.813191104556 -0.468485044978
  Result (0.7): 0.765006997688 -0.499626633435
  Result (0.8): 0.714033167813 -0.523040146908
  Result (0.9): 0.661021513347 -0.53923008872
  Result (1.0): 0.606672544499 -0.54872263237
  Result (1.1): 0.55163351419 -0.552058532372
  Result (1.2): 0.49649723593 -0.54978656401
  Result (1.3): 0.441801535162 -0.54245750502
  Result (1.4): 0.388029279606 -0.530618665792
  Result (1.5): 0.335608933674 -0.514808968781
  Result (1.6): 0.284915582207 -0.495554572501
  Result (1.7): 0.236272369459 -0.473365030702
  Result (1.8): 0.189952300346 -0.448729973058
  Result (1.9): 0.146180352526 -0.422116289995
  5.0 0.909090909091 15.0 0.818181818182 25.0
  0.727272727273 35.0 0.636363636364 45.0 0.545454545455
  55.0 0.454545454545 65.0 0.363636363636 75.0
  0.272727272727 85.0 0.181818181818 95.0 0.0909090909091
  5.0 0.0909090909091 15.0 0.181818181818 25.0
  0.272727272727 35.0 0.363636363636 45.0 0.454545454545
  55.0 0.545454545455 65.0 0.636363636364 75.0
  0.727272727273 85.0 0.818181818182 95.0 0.909090909091
  modules/math/combinatorics.test
  modules/math/geometry.test
  modules/math/math.test

  Module: md5
  modules/md5/md5.test
  md5 1.4.2 (pure Tcl)

  Module: mime
  modules/mime/mime.test

  Module: ncgi
  modules/ncgi/ncgi.test
  NO
  NO
  DELIM
  env array elements created:     SERVER_PORT REQUEST_URI
  QUERY_STRING CONTENT_TYPE CONTENT_LENGTH SERVER_NAME
  HTTPS REQUEST_METHOD

  Module: nntp
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: pop3
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: pop3d
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: profiler
  modules/profiler/profiler.test

  Module: smtpd
  Error:  No test files remain after applying your match
  and skip patterns!

  Module: textutil
  modules/textutil/adjust.test
  modules/textutil/expander.test
  modules/textutil/repeat.test
  modules/textutil/split.test
  modules/textutil/tabify.test
  modules/textutil/textutil.test
  modules/textutil/trim.test

  Module: uri
  modules/uri/uri.test
  modules/uri/urn.test

  Module: log
  modules/log/log.test
  log 1.0.1

  Module: htmlparse
  modules/htmlparse/htmlparse.test
  htmlparse 0.2

  Module: report
  modules/report/report.test
  report 0.3
  - struct  1.2.1

  Module: sha1
  modules/sha1/sha1.test
  sha1 1.0.2 (pure Tcl)

  Module: stooop
  modules/stooop/stooop.test

  ==== stooop-86 verify member writing and unsetting
  within class procedures in member data
      checking mode
      (it seems that unset tracing prevents error
  reporting at this time (bug?)) FAILED
  ==== Contents of test case:

      set interpreter [interp create]
      $interpreter eval {
          # reset any existing environment variables:
          foreach name [array names env STOOOP*] {unset
  env($name)}
          set env(STOOOPCHECKDATA) 1
      }
      $interpreter eval "source $source; namespace import
  stooop::*"
      set result [$interpreter eval {
          class a {}
          proc a::a {this} {}
          proc a::~a {this} {}
          proc a::p {this} {
              set b::($this,m) 0
          }
          proc a::q {this} {
              set b::(n) 0
          }
          proc a::r {this} {
              unset b::($this,m)
          }
          proc a::s {this} {
              unset b::(n)
          }
          set o [new a]
          class b {}
          set b::($o,m) 0
          set b::(n) 0
          catch {a::p $o} message; lappend ::result
  $message
          catch {a::q $o} message; lappend ::result
  $message
          catch {a::r $o} message; lappend ::result bug
          catch {a::s $o} message; lappend ::result bug
          delete $o

          class A {
              proc A {this} {}
              proc ~A {this} {}
              proc p {this} {
                  set B::($this,m) 0
              }
              proc q {this} {
                  set B::(n) 0
              }
              proc r {this} {
                  unset B::($this,m)
              }
              proc s {this} {
                  unset B::(n)
              }
          }
          set o [new A]
          class B {
              set ($o,m) 0
              set (n) 0
          }
          class A {
              catch {p $o} message; lappend ::result
  $message
              catch {q $o} message; lappend ::result
  $message
              catch {r $o} message; lappend ::result bug
              catch {s $o} message; lappend ::result bug
          }
          delete $o

          class c {}
          class c::d {}
          proc c::d::d {this} {}
          proc c::d::~d {this} {}
          proc c::d::p {this} {
              set c::e::($this,m) 0
          }
          proc c::d::q {this} {
              set c::e::(n) 0
          }
          proc c::d::r {this} {
              unset c::e::($this,m)
          }
          proc c::d::s {this} {
              unset c::e::(n)
          }
          class c::e {}
          set o [new c::d]
          set c::e::($o,m) 0
          set c::e::(n) 0
          catch {c::d::p $o} message; lappend ::result
  $message
          catch {c::d::q $o} message; lappend ::result
  $message
          catch {c::d::r $o} message; lappend ::result
  bug
          catch {c::d::s $o} message; lappend ::result
  bug
          delete $o

          class C {
              class D {
                  proc D {this} {}
                  proc ~D {this} {}
                  proc p {this} {
                      set C::E::($this,m) 0
                  }
                  proc q {this} {
                      set C::E::(n) 0
                  }
                  proc r {this} {
                      unset C::E::($this,m)
                  }
                  proc s {this} {
                      unset C::E::(n)
                  }
              }
              set ::o [new D]
              class E {
                  set ($o,m) 0
                  set (n) 0
              }
              class D {
                  catch {p $o} message; lappend ::result
  $message
                  catch {q $o} message; lappend ::result
  $message
                  catch {r $o} message; lappend ::result
  bug
                  catch {s $o} message; lappend ::result
  bug
              }
          }
          catch {C::D::p $o} message; lappend ::result
  $message
          catch {C::D::q $o} message; lappend ::result
  $message
          catch {C::D::r $o} message; lappend ::result
  bug
          catch {C::D::s $o} message; lappend ::result
  bug
          delete $o

          set ::result
      }]
      interp delete $interpreter
      set result

  ---- Result was:
  can't set "(2,m)": "::namespace" isn't a procedure
  ---- Result should have been (exact matching):
  {can't set "b::(1,m)": class access violation in
  procedure ::a::p} {can't set "b::(n)": class access
  violation in procedure ::a::q} bug bug {can't set
  "B::(2,m)": class access violation in procedure ::A::p}
  {can't set "B::(n)": class access violation in
  procedure ::A::q} bug bug {can't set "c::e::(3,m)":
  class access violation in procedure ::c::d::p} {can't
  set "c::e::(n)": class access violation in procedure
  ::c::d::q} bug bug {can't set "C::E::(4,m)": class
  access violation in procedure ::C::D::p} {can't set
  "C::E::(n)": class access violation in procedure
  ::C::D::q} bug bug {can't set "C::E::(4,m)": class
  access violation in procedure ::C::D::p} {can't set
  "C::E::(n)": class access violation in procedure
  ::C::D::q} bug bug
  ---- Test generated error; Return code was: 1
  ---- Return code should have been one of: 0 2
  ==== stooop-86 FAILED


  ==== stooop-87 verify member writing and unsetting
  within class namespaces in member data
      checking mode
      (it seems that unset tracing prevents error
  reporting at this time (bug?)) FAILED
  ==== Contents of test case:

      set interpreter [interp create]
      $interpreter eval {
          # reset any existing environment variables:
          foreach name [array names env STOOOP*] {unset
  env($name)}
          set env(STOOOPCHECKDATA) 1
      }
      $interpreter eval "source $source; namespace import
  stooop::*"
      set result [$interpreter eval {
          class a {
              set (m) 0
          }
          proc a::a {this} {
              set ($this,n) 0
          }
          proc a::~a {this} {}
          set o [new a]
          catch {class b {incr a::(m)}} message; lappend
  ::result $message
          catch {class b {incr a::($o,n)}} message;
  lappend ::result $message
          catch {class b {unset a::(m)}} message; lappend
  ::result bug
          catch {class b {unset a::($o,n)}} message;
  lappend ::result bug
          delete $o

          class A {
              set (m) 0
              proc A {this} {
                  set ($this,n) 0
              }
              proc ~A {this} {}
          }
          set o [new A]
          class B {
              catch {incr A::(m)} message; lappend
  ::result $message
              catch {incr A::($o,n)} message; lappend
  ::result $message
              catch {unset A::(m)} message; lappend
  ::result bug
              catch {unset A::($o,n)} message; lappend
  ::result bug
          }
          delete $o

          class c {}
          class c::d {
              set (m) 0
          }
          proc c::d::d {this} {
              set ($this,n) 0
          }
          proc c::d::~d {this} {}
          set o [new c::d]
          catch {class c::e {incr c::d::(m)}} message;
  lappend ::result $message
          catch {class c::e {incr c::d::($o,n)}} message;
  lappend ::result $message
          catch {class c::e {unset c::d::(m)}} message;
  lappend ::result bug
          catch {class c::e {unset c::d::($o,n)}}
  message; lappend ::result bug
          delete $o

          class C {
              class D {
                  set (m) 0
                  proc D {this} {
                      set ($this,n) 0
                  }
                  proc ~D {this} {}
              }
              set ::o [new D]
              class B {
                  catch {incr C::D::(m)} message; lappend
  ::result $message
                  catch {incr C::D::($o,n)} message;
  lappend ::result $message
                  catch {unset C::D::(m)} message;
  lappend ::result bug
                  catch {unset C::D::($o,n)} message;
  lappend ::result bug
              }
          }
          catch {incr C::D::(m)} message; lappend
  ::result $message
          catch {incr C::D::($o,n)} message; lappend
  ::result $message
          catch {unset C::D::(m)} message; lappend
  ::result bug
          catch {unset C::D::($o,n)} message; lappend
  ::result bug
          delete $o

          set ::result
      }]
      interp delete $interpreter
      set result

  ---- Result was:
  can't set "(m)": "::namespace" isn't a procedure
  ---- Result should have been (exact matching):
  {can't set "a::(m)": class access violation in class b
  namespace} {can't set "a::(1,n)": class access
  violation in class b namespace} bug bug {can't set
  "A::(m)": class access violation in class B namespace}
  {can't set "A::(2,n)": class access violation in class
  B namespace} bug bug {can't set "c::d::(m)": class
  access violation in class c::e namespace} {can't set
  "c::d::(3,n)": class access violation in class c::e
  namespace} bug bug {can't set "C::D::(m)": class access
  violation in class C::B namespace} {can't set
  "C::D::(4,n)": class access violation in class C::B
  namespace} bug bug {can't read "C::D::(m)": no such
  element in array} {can't read "C::D::(4,n)": no such
  element in array} bug bug
  ---- Test generated error; Return code was: 1
  ---- Return code should have been one of: 0 2
  ==== stooop-87 FAILED


  ==== stooop-89 verify both data and procedure static
  access in member data checking mode FAILED
  ==== Contents of test case:

      set interpreter [interp create]
      $interpreter eval {
          # reset any existing environment variables:
          foreach name [array names env STOOOP*] {unset
  env($name)}
          set env(STOOOPCHECKDATA) 1
      }
      $interpreter eval "source $source; namespace import
  stooop::*"
      set result [$interpreter eval {
          class a {
              set (m) 0
          }
          proc a::a {this} {
              set ($this,n) 0
          }
          proc a::~a {this} {}
          proc a::p {this} {
              incr (m)
              incr b::(o)
          }
          proc a::q {object} {
              incr ($object,n)
              incr b::($object,p)
          }
          class b {
              set (o) 0
          }
          proc b::b {this} a {} {
              set ($this,p) 0
          }
          proc b::~b {this} {}
          proc b::r {this} {
              incr (o)
              incr a::(m)
          }
          proc b::s {object} {
              incr ($object,p)
              incr a::($object,n)
          }
          set o [new b]
          catch {a::p $o} message; lappend ::result
  $message
          catch {a::q $o} message; lappend ::result
  $message
          catch {b::r $o} message; lappend ::result
  $message
          catch {b::s $o} message; lappend ::result
  $message
          delete $o

          class A {
              set (m) 0
              proc A {this} {
                  set ($this,n) 0
              }
              proc ~A {this} {}
              proc p {this} {
                  incr (m)
                  incr B::(o)
              }
              proc q {object} {
                  incr ($object,n)
                  incr B::($object,p)
              }
          }
          class B {
              set (o) 0
              proc B {this} A {} {
                  set ($this,p) 0
              }
              proc ~B {this} {}
              proc r {this} {
                  incr (o)
                  incr A::(m)
              }
              proc s {object} {
                  incr ($object,p)
                  incr A::($object,n)
              }
          }
          set o [new B]
          catch {A::p $o} message; lappend ::result
  $message
          catch {A::q $o} message; lappend ::result
  $message
          catch {B::r $o} message; lappend ::result
  $message
          catch {B::s $o} message; lappend ::result
  $message
          delete $o

          class c {}
          class c::d {
              set (m) 0
          }
          proc c::d::d {this} {
              set ($this,n) 0
          }
          proc c::d::~d {this} {}
          proc c::d::p {this} {
              incr (m)
              incr c::e::(o)
          }
          proc c::d::q {object} {
              incr ($object,n)
              incr c::e::($object,p)
          }
          class c::e {
              set (o) 0
          }
          proc c::e::e {this} c::d {} {
              set ($this,p) 0
          }
          proc c::e::~e {this} {}
          proc c::e::r {this} {
              incr (o)
              incr c::d::(m)
          }
          proc c::e::s {object} {
              incr ($object,p)
              incr c::d::($object,n)
          }
          set o [new c::e]
          catch {c::d::p $o} message; lappend ::result
  $message
          catch {c::d::q $o} message; lappend ::result
  $message
          catch {c::e::r $o} message; lappend ::result
  $message
          catch {c::e::s $o} message; lappend ::result
  $message
          delete $o

          class C {
              class D {
                  set (m) 0
                  proc D {this} {
                      set ($this,n) 0
                  }
                  proc ~D {this} {}
                  proc p {this} {
                      incr (m)
                      incr C::E::(o)
                  }
                  proc q {object} {
                      incr ($object,n)
                      incr C::E::($object,p)
                  }
              }
              class E {
                  set (o) 0
                  proc E {this} C::D {} {
                      set ($this,p) 0
                  }
                  proc ~E {this} {}
                  proc r {this} {
                      incr (o)
                      incr C::D::(m)
                  }
                  proc s {object} {
                      incr ($object,p)
                      incr C::D::($object,n)
                  }
              }
              set ::o [new E]
              catch {D::p $o} message; lappend ::result
  $message
              catch {D::q $o} message; lappend ::result
  $message
              catch {E::r $o} message; lappend ::result
  $message
              catch {E::s $o} message; lappend ::result
  $message
          }
          catch {C::D::p $o} message; lappend ::result
  $message
          catch {C::D::q $o} message; lappend ::result
  $message
          catch {C::E::r $o} message; lappend ::result
  $message
          catch {C::E::s $o} message; lappend ::result
  $message
          delete $o

          set ::result
      }]
      interp delete $interpreter
      set result

  ---- Result was:
  can't set "(m)": "::namespace" isn't a procedure
  ---- Result should have been (exact matching):
  {can't set "b::(o)": class access violation in
  procedure ::a::p} {can't set "b::(1,p)": class access
  violation in procedure ::a::q} {can't set "a::(m)":
  class access violation in procedure ::b::r} {can't set
  "a::(1,n)": class access violation in procedure ::b::s}
  {can't set "B::(o)": class access violation in
  procedure ::A::p} {can't set "B::(2,p)": class access
  violation in procedure ::A::q} {can't set "A::(m)":
  class access violation in procedure ::B::r} {can't set
  "A::(2,n)": class access violation in procedure ::B::s}
  {can't set "c::e::(o)": class access violation in
  procedure ::c::d::p} {can't set "c::e::(3,p)": class
  access violation in procedure ::c::d::q} {can't set
  "c::d::(m)": class access violation in procedure
  ::c::e::r} {can't set "c::d::(3,n)": class access
  violation in procedure ::c::e::s} {can't set
  "C::E::(o)": class access violation in procedure
  ::C::D::p} {can't set "C::E::(4,p)": class access
  violation in procedure ::C::D::q} {can't set
  "C::D::(m)": class access violation in procedure
  ::C::E::r} {can't set "C::D::(4,n)": class access
  violation in procedure ::C::E::s} {can't set
  "C::E::(o)": class access violation in procedure
  ::C::D::p} {can't set "C::E::(4,p)": class access
  violation in procedure ::C::D::q} {can't set
  "C::D::(m)": class access violation in procedure
  ::C::E::r} {can't set "C::D::(4,n)": class access
  violation in procedure ::C::E::s}
  ---- Test generated error; Return code was: 1
  ---- Return code should have been one of: 0 2
  ==== stooop-89 FAILED


  ==== stooop-90 verify member data checking when "array
  set" is used FAILED
  ==== Contents of test case:

      set interpreter [interp create]
      $interpreter eval {
          # reset any existing environment variables:
          foreach name [array names env STOOOP*] {unset
  env($name)}
          set env(STOOOPCHECKDATA) 1
      }
      $interpreter eval "source $source; namespace import
  stooop::*"
      set result [$interpreter eval {
          class a {}
          proc a::a {this} {}
          proc a::~a {this} {}
          proc a::p {this} {
              array set b:: "$this,m 0"
          }
          proc a::q {this} {
              array set b:: {n 0}
          }
          set o [new a]
          class b {}
          array set b:: "$o,m 0 n 0"
          catch {a::p $o} message; lappend ::result
  $message
          catch {a::q $o} message; lappend ::result
  $message
          delete $o

          class A {
              proc A {this} {}
              proc ~A {this} {}
              proc p {this} {
                  array set B:: "$this,m 0"
              }
              proc q {this} {
                  array set B:: {n 0}
              }
          }
          set o [new A]
          class B {
              array set B:: "$o,m 0 n 0"
          }
          class A {
              catch {p $o} message; lappend ::result
  $message
              catch {q $o} message; lappend ::result
  $message
          }
          delete $o

          class c {}
          class c::d {}
          proc c::d::d {this} {}
          proc c::d::~d {this} {}
          proc c::d::p {this} {
              array set c::e:: "$this,m 0"
          }
          proc c::d::q {this} {
              array set c::e:: {n 0}
          }
          class c::e {}
          set o [new c::d]
          array set c::e:: "$o,m 0 n 0"
          catch {c::d::p $o} message; lappend ::result
  $message
          catch {c::d::q $o} message; lappend ::result
  $message
          delete $o

          class C {
              class D {
                  proc D {this} {}
                  proc ~D {this} {}
                  proc p {this} {
                      array set C::E:: "$this,m 0"
                  }
                  proc q {this} {
                      array set C::E:: {n 0}
                  }
              }
              set ::o [new D]
              class E {
                  array set C::E:: "$o,m 0 n 0"
              }
              class D {
                  catch {p $o} message; lappend ::result
  $message
                  catch {q $o} message; lappend ::result
  $message
              }
          }
          catch {C::D::p $o} message; lappend ::result
  $message
          catch {C::D::q $o} message; lappend ::result
  $message
          delete $o

          set ::result
      }]
      interp delete $interpreter
      set result

  ---- Result was:
  can't set "B::(2,m)": "::namespace" isn't a procedure
  ---- Result should have been (exact matching):
  {can't set "b::(1,m)": class access violation in
  procedure ::a::p} {can't set "b::(n)": class access
  violation in procedure ::a::q} {can't set "B::(2,m)":
  class access violation in procedure ::A::p} {can't set
  "B::(n)": class access violation in procedure ::A::q}
  {can't set "c::e::(3,m)": class access violation in
  procedure ::c::d::p} {can't set "c::e::(n)": class
  access violation in procedure ::c::d::q} {can't set
  "C::E::(4,m)": class access violation in procedure
  ::C::D::p} {can't set "C::E::(n)": class access
  violation in procedure ::C::D::q} {can't set
  "C::E::(4,m)": class access violation in procedure
  ::C::D::p} {can't set "C::E::(n)": class access
  violation in procedure ::C::D::q}
  ---- Test generated error; Return code was: 1
  ---- Return code should have been one of: 0 2
  ==== stooop-90 FAILED


  ==== stooop-95 objects checking from namespace body and
  namespace procedure FAILED
  ==== Contents of test case:

      set interpreter [interp create]
      $interpreter eval {
          # reset any existing environment variables:
          foreach name [array names env STOOOP*] {unset
  env($name)}
          set env(STOOOPCHECKOBJECTS) 1
      }
      $interpreter eval "source $source; namespace import
  stooop::*"
      # alias puts to be able to collect standard output
  data:
      proc appendResult {string} {lappend ::result
  $string}
      $interpreter alias puts appendResult
      set result {}
      $interpreter eval {
          class a {
              proc a {this} {}
              proc ~a {this} {}
          }
          namespace eval n {
              proc p {} {
                  new a
              }
              namespace eval m {
                  proc q {} {
                      new a
                  }
              }
          }
          stooop::record
          namespace eval n {
              new a
          }
          stooop::report
          n::p
          stooop::report
          namespace eval n::m {
              new a
          }
          stooop::report
          n::m::q
          stooop::report
          delete 1 2 3 4
      }
      interp delete $interpreter
      set result

  ---- Result was:
  {stooop::record invoked from top level} {stooop::report
  invoked from top level:} {+ ::a(1) + ::namespace}
  {stooop::report invoked from top level:} {+ ::a(1) +
  ::namespace} {+ ::a(2) + ::n::p} {stooop::report
  invoked from top level:} {+ ::a(1) + ::namespace} {+
  ::a(2) + ::n::p} {+ ::a(3) + ::namespace}
  {stooop::report invoked from top level:} {+ ::a(1) +
  ::namespace} {+ ::a(2) + ::n::p} {+ ::a(3) +
  ::namespace} {+ ::a(4) + ::n::m::q}
  ---- Result should have been (exact matching):
  {stooop::record invoked from top level} {stooop::report
  invoked from top level:} {+ ::a(1) + namespace ::n}
  {stooop::report invoked from top level:} {+ ::a(1) +
  namespace ::n} {+ ::a(2) + ::n::p} {stooop::report
  invoked from top level:} {+ ::a(1) + namespace ::n} {+
  ::a(2) + ::n::p} {+ ::a(3) + namespace ::n::m}
  {stooop::report invoked from top level:} {+ ::a(1) +
  namespace ::n} {+ ::a(2) + ::n::p} {+ ::a(3) +
  namespace ::n::m} {+ ::a(4) + ::n::m::q}
  ==== stooop-95 FAILED


  ==== stooop-96 objects checking from within derived
  class constructor FAILED
  ==== Contents of test case:

      set interpreter [interp create]
      $interpreter eval {
          # reset any existing environment variables:
          foreach name [array names env STOOOP*] {unset
  env($name)}
          set env(STOOOPCHECKOBJECTS) 1
      }
      $interpreter eval "source $source; namespace import
  stooop::*"
      # alias puts to be able to collect standard output
  data:
      proc appendResult {string} {lappend ::result
  $string}
      $interpreter alias puts appendResult
      set result {}
      $interpreter eval {
          class a {
              proc a {this i} {}
              proc ~a {this} {}
          }
          class b {
              proc b {this} a {[new c]} {}
              proc ~b {this} {}
          }
          class c {
              proc c {this} {}
              proc ~c {this} {}
          }
          stooop::record
          new b
          stooop::report

          class A {
              class a {
                  proc a {this i} {}
                  proc ~a {this} {}
              }
              class b {
                  proc b {this} a {[new c]} {}
                  proc ~b {this} {}
              }
              class c {
                  proc c {this} {}
                  proc ~c {this} {}
              }
              stooop::record
              new b
              stooop::report
          }

      }
      interp delete $interpreter
      set result

  ---- Result was:
  {stooop::record invoked from top level} {stooop::report
  invoked from top level:} {+ ::b(1) + top level} {+
  ::c(2) + ::b::b} {stooop::record invoked from
  ::namespace} {stooop::report invoked from ::namespace:}
  {+ ::A::b(3) + ::namespace} {+ ::c(4) + ::A::b::b}
  ---- Result should have been (exact matching):
  {stooop::record invoked from top level} {stooop::report
  invoked from top level:} {+ ::b(1) + top level} {+
  ::c(2) + ::b::b} {stooop::record invoked from namespace
  ::A} {stooop::report invoked from namespace ::A:} {+
  ::A::b(3) + namespace ::A} {+ ::c(4) + ::A::b::b}
  ==== stooop-96 FAILED


  ==== stooop-97 objects checking with debugging
  procedures invocation from namespace body
      and namespace procedure FAILED
  ==== Contents of test case:

      set interpreter [interp create]
      $interpreter eval {
          # reset any existing environment variables:
          foreach name [array names env STOOOP*] {unset
  env($name)}
          set env(STOOOPCHECKOBJECTS) 1
      }
      $interpreter eval "source $source; namespace import
  stooop::*"
      # alias puts to be able to collect standard output
  data:
      proc appendResult {string} {lappend ::result
  $string}
      $interpreter alias puts appendResult
      set result {}
      $interpreter eval {
          class a {
              proc a {this} {}
              proc ~a {this} {}
          }
          namespace eval n {
              proc p {} {
                  stooop::record
                  new a
                  stooop::report
              }
              namespace eval m {
                  proc q {} {
                      stooop::record
                      new a
                      stooop::report
                  }
              }
          }
          n::p
          n::m::q
          namespace eval n {
              stooop::record
              new a
              stooop::report
          }

      }
      interp delete $interpreter
      set result

  ---- Result was:
  {stooop::record invoked from ::n::p} {stooop::report
  invoked from ::n::p:} {+ ::a(1) + ::n::p}
  {stooop::record invoked from ::n::m::q} {stooop::report
  invoked from ::n::m::q:} {+ ::a(2) + ::n::m::q}
  {stooop::record invoked from ::namespace}
  {stooop::report invoked from ::namespace:} {+ ::a(3) +
  ::namespace}
  ---- Result should have been (exact matching):
  {stooop::record invoked from ::n::p} {stooop::report
  invoked from ::n::p:} {+ ::a(1) + ::n::p}
  {stooop::record invoked from ::n::m::q} {stooop::report
  invoked from ::n::m::q:} {+ ::a(2) + ::n::m::q}
  {stooop::record invoked from namespace ::n}
  {stooop::report invoked from namespace ::n:} {+ ::a(3)
  + namespace ::n}
  ==== stooop-97 FAILED

  env array elements created:     STOOOPCHECKOBJECTS


  Tests ended at Thu May 09 07:00:07 EDT 2002
  all.tcl:        Total   2012    Passed  1996    Skipped
  8       Failed  8
  Sourced 36 Test Files.
  Files with failing tests: base64/yencode.test
  stooop/stooop.test
  Number of tests skipped for each constraint:
          3       badTest
          5       pcOnly


tkt_uuid: 470211ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: uri
priority: 5 Medium
foundin: None
resolution: Accepted
title: urn: scheme handling for uri module
comment:
  This is a package to extend the uri module of tcllib to
  handle the urn: scheme.

  package require uri::urn
  uri::split urn:uddi-org:app
  etc.


tkt_uuid: 861277ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: htmlparse
priority: 5 Medium
foundin: None
resolution: Fixed
title: htmlparse.tcl: backslashes in content
comment:
  htmlparse::parse fails if backslashes appear in content:

  htmlparse::parse "<p>\\</p>"
    ==> error "Missing close-brace"


tkt_uuid: 2683544fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: tklib :: plotchart
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: clipped x-labels due to font size
comment:
  I use in my application a bigger font with "font configure TkDefaultFont -size 11 -weight bold" and PlotChart 1.6.1. 
  In xy-plots the x-label is clipped, since there is a fixed size for the labels and tics (pymax), not a font-dependent size.


tkt_uuid: 1480703fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: app: tkchat
priority: 5 Medium
foundin: None
resolution: Accepted
title: console support for platforms without native support
comment:
  TkChat only provides console support if either tkcon is 
  available or the platform is non-unix and has a console 
  built in. This patch (adopted from http://wiki.tcl.tk/
  786) makes the Tk console available also if there is no 
  native ::console command.

  Note that the patch is for the version 1.334 since I 
  can not currently fetch the most current version (due 
  to sourceforge outage ...)


tkt_uuid: 3601370fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 9 Immediate
foundin: None
resolution: Fixed
title: Doctools nroff/groff output not supported by tcltk-man2html
comment:
  This is related to Tcl bug 3600058 "Doctools nroff/groff output not supported by tcltk-man2html" (https://sourceforge.net/tracker/index.php?func=detail&aid=3600058&group_id=10894&atid=110894).  Most of the cases listed here are invalid input or invalid nroff.  Valid nroff not supported by the Tcl tool is being addressed in the Tcl bug.

  Required action: most of the issues below have proposed fixes, and those fixes have been implemented (or are being implemented) in a patch.  Mostly I need to get a YES/NO on each proposed fix (and for NO a suggested approach).

  Issue #1: Rendering of Copyright is inappropriate for files in the public domain

  c_get_copyright in doctools/mpformats/_common.tcl currently renders public domain as "Copyright (c) Public domain".  Suggested fix is to handle "public domain" as a special case that doesn't get a "Copyright (c)" prefix.

  Issue #2: Some Copyright statements include the word "copyright"

  Invalid input problem; examples are amazon-s3/S3.man and amazon-s3/xsxp.man.  Option A is to strip leading "copyring" and/or "(c)" from the copyright parameter.  Option B is to fix the .man pages, but I'm hesitant to do so as (i) this probably should require the copyright holder's approval; and (ii) if any authors maintain their own upstream repositories the change should be committed there.  Proposed fix is A (as a workaround), and to request authors to approve or make a change to the source.

  Issue #3: Doctools can generate nroff output where non-directive lines start with a period (invalid nroff)

  See for example snit/snitfaq.man, where [example] blocks may contain widget names like '.text'.  Suggested fix is that the nroff formatter (mpformats/_nroff.tcl) should quote leading "." on non-directive lines.

  Issue #4: Doctools can still generate nroff output where non-directive lines start with a period

  Parts of the nroff output are explicitly handled by mpformats/fmt.nroff, in particular the output of keywords.  If a keyword starts with a period (e.g. .dtx in docstrip/docstrip.man) it will be sorted to the front of the keyword list and result in invalid nroff output.  Suggested fix is to explicitly check for a quote a leading period in the keyword line (in fmt.nroff).

  Issue #5: Bad output from ldap/ldap.man

  This turns out to be a bad input problem - the .man file has "[call ::ldap::searchInit]" in the middle of a paragraph, instead of "[cmd ::ldap::searchInit]".

  Issue #6: Bad output from pop3/pop3.man

  This turns out to be a bad input problem - the .man file has a trailing period on the line "[opt_def -retr-mode ...].".

  Issue #7: Spaces in man page names

  struct/graph1.man, struct/matrix1.man, and struct/struct_tree1.man all have [manpage_begin] statements in which the name contains a space: {struct::graph v1} {struct::matrix v1} and {struct::tree v1} respectively.  Proposed fix is to use underscore (_) instead of space, giving struct::graph_v1, struct::matrix_v1, and struct::tree_v1.

  Issue #8: Inappropriate copyright statements

  A number of files contain copyright statements in formats that may not have appropriate legal effect.

    No date:
    expander: COPYRIGHT: merge-copyrights: unrecognised format: Copyright (c) William H. Duquette, http://www.wjduquette.com/expand
    smtpd: COPYRIGHT: merge-copyrights: unrecognised format: Copyright (c) Pat Thoyts <patthoyts@users.sourceforge.net>
    Invalid date:
    namespacex: COPYRIGHT: merge-copyrights: unrecognised format: Copyright (c) 200? Neil Madden (http://wiki.tcl.tk/12790)
    namespacex: COPYRIGHT: merge-copyrights: unrecognised format: Copyright (c) 200? Various (http://wiki.tcl.tk/1489)
    soundex: COPYRIGHT: merge-copyrights: unrecognised format: Copyright (c) ????, Algorithm: Donald E. Knuth
    Weird date:
    OpenTcp: CATEGORY: merge-copyrights: unrecognised date format: Copyright (c) 1996-7 Sun Microsystems, Inc.

  I'm really not sure how to handle these.  Best option may be to request the authors to fix their copyright statements.  The effect is that for now these authors won't (necessarily) be reflected in the summary of copyright holders that is added to the table of contents.

  Issue #9: Multiple definitions for coroutine, doctools::idx, interp, tie, try, 

  Tcllib packages define man pages with the same name as Tcl core commands coroutine, interp and try.  Proposed fix is to add a "tcllib" prefix to Tclllib pages, and fix up references.

  Within Tcllib there are multiple man pages providing definitions of doctools::idx and tie.  Proposed fix is to add a version suffix (as for graph/matrix/tree) and fix up references.

  Issue #10: Unvestigated

  Once the above issues are resolved there remain three more types of error when converting .man --(doctools)--> .n --(tcltk-man2html)--> .html:

  A. struct_list: make-manpage-section: ignoring .TP after .TP
  B. treeql: EXAMPLES: output-directive: unrecognized format directive: ... TODO ...
  C. calculus.n: reference error: Out of place end-quote: {<PRE>Dy'' + ky = 0
  x = 0: y = 1
  x = L: y = 0</PRE>}

  The causes have not yet been investigated.


tkt_uuid: 3106208fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: tree itemconfigure mishandling of node names
comment:
  The original description, as submitted to ActiveState:
  ========================================
  I am currently using version 1.8 of the BWidget library. I have found an  error (or lack of documentation) in the Tree library. I am using the tree structure in my software to display connections between devices. Each node in  my tree is named using the unique ID of the device which the tree node represents (these are integer values). When doing an "itemconfigure" in my code I run into an error. The error is caused by using integer values for node names. The error is described below.

  In the code section (below) taken from Tree::itemconfigure there exists a case when a node name is the same value as a flag value (in my system I had a node named 16 and a flag value that turned out to be 16). When doing the lsearch to find the idx of the node, the search finds the index of the flag value 16 (and assumes this is the node). When it does the incr to get the corresponding flag value it is really picking up a node name. In my system I also have node names that are strings. In my case the code was picking up a node name that was a string and when trying to set the flag it was doing an "|" with a flag value and a string (which causes Tcl to crash).

   if { $data(upd,level) < 3 && $flag } {
        if { [set idx [lsearch -exact $data(upd,nodes) $node]] == -1 } {
           lappend data(upd,nodes) $node $flag
        } else {
           incr idx
           set flag [expr {[lindex $data(upd,nodes) $idx] | $flag}]
           set data(upd,nodes) [lreplace $data(upd,nodes) $idx $idx $flag]
        }

  I do not see any documentation stating that node names cannot be integer values. As a result, I deem this to be a bug that should be addressed.
  If you are not the people who deal with Tcl bug, please pass this on to the people who fix bugs. Thanks.
  ========================================

  My fix for the problem is attached.


tkt_uuid: 2123233fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: yaml
priority: 5 Medium
foundin: None
resolution: Fixed
title: bad [string first|last] syntax?
comment:
  This code in [::yaml::_getFoldedString]
  looks suspcious:

   if {[string first $token "\n"] >= 0} { ; # multi-line
       set data(current) [expr {$len - [string last $token "\n"]}]


  I suspect the arguments have their
  order incorrect.  They should follow
  the pattern:

   string first $needle $haystack

  Searching for $token in the string "\n"
  doesn't look right.  If it is right, a
  comment of explanation would help.


tkt_uuid: 565051ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: csv::split parsing bug
comment:
  csv::split handles a quoted, null field incorrectly if
  the field is neither the first nor the last field in a
  line/record:

  % info tclversion
  8.3
  % info patch
  8.3.3
  % package require csv
  0.2
  % ::csv::split {1 2 "" ""} { }
  1 2 {"} {}
  % ::csv::split {"" ""} { }
  {} {}
  % ::csv::split {"" "" ""} { }
  {} {"} {}

  A change to the character map seems to fix the problem:

  % proc ::csv::split {line {sepChar ,}} {
      regsub -all -- {(^\"|\"$)} $line \0 line
      set line [string map [list \
      $sepChar\"\"\" $sepChar\0\" \
      \"\"\"$sepChar \"\0$sepChar \
      \"\"$sepChar $sepChar \
      \"\"           \" \
      \"             \0 \
      ] $line]
      set end 0
      while {[regexp -indices -start $end --
  {(\0)[^\0]*(\0)} $line \
      -> start end]} {
  set start [lindex $start 0]
  set end   [lindex $end 0]
  set range [string range $line $start $end]
  if {[string first $sepChar $range] >= 0} {
      set line [string replace $line $start $end \
      [string map [list $sepChar \1] $range]]
  }
  incr end
      }
      set line [string map [list $sepChar \0 \1 $sepChar
  \0 {} ] $line]
      return [::split $line \0]
  }
  % ::csv::split {"" "" "" "" "" ""} { }
  {} {} {} {} {} {}


tkt_uuid: 862491ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 7 High
foundin: None
resolution: Fixed
title: fileutil::find ... no catch around 'cd'
comment:
  Cd sequences are not checked to see if the succeed. 
  I.e. failed due to permissions. 
  If failure occurs the code terminates. I would rather 
  it skip the problem children in a find. This problem has 
  been reproduced in both WIN32 & HP-UX


tkt_uuid: 501577ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 8
foundin: None
resolution: Works For Me
title: Delete reorders requests?
comment:
  On a mailbox with multiple messages, the following does not process all of them:

  package require pop3 ; # from TclLib

  proc checkmail {} {
      set chan [::pop3::open pop-server.san.rr.com xxxxx secret]
      set x [lindex [::pop3::status $chan] 0]
      puts "x=$x"
      for {set i 0} {$i < $x} {incr i} {
          set msg [::pop3::retrieve $chan [expr $i+1]]
          puts "len msg=[string length $msg]"
          ::pop3::delete $chan [expr $i + 1]
      }
      ::pop3::close $chan
  }

  checkmail

  Instead, it seems to only process the first few messages, failing to retrieve or delete the others.

  If the messages are being renumbered by the deletion, then the man page entry stating
  Note, the indices are not reordered on the server,
  should be fixed, but that doesn't seem to be the problem.


tkt_uuid: 784157ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 8
foundin: None
resolution: Fixed
title: ::fileutil::find is now dependent upon Tcl8.4
comment:
  In fixing fileutil.tcl: Fixed SF tcllib bug [647974], the 
  Tcl8.4 [file system ...] command was used in the ::find 
  proc. 

  The fileutil.tcl has a package require for 8.2 but 
  Tcl8.2 ... Tcl8.3 interpreters will no longer be able to 
  use ::fileutil::find or ::fileutil::findByPattern


tkt_uuid: 693194ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: textutil
priority: 5 Medium
foundin: None
title: string map vs regsub (textutils)
comment:
           ./textutil/tabify.tcl:94:    regsub -all --
  $str $string "\t" string
           ./textutil/tabify.tcl:102:    regsub -all --
  "\t" $string $str string
   
  These two lines can probably be redone with string map,
  which will speed the code up significantly.


tkt_uuid: 1060353fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ldap
priority: 5 Medium
foundin: None
resolution: Invalid
title: ldap::search problem with spaces in filter specs
comment:
  The original report is
  http://bugs.activestate.com/show_bug.cgi?id=34774

  Running Active State Tcl 8.4.7 on Windows 2000 server.

  Problem with ldap package in tcllib 1.6. Ldap search
  does not pick up CNs with space in the CN name.

  % set tcl_version
  8.4

  % info patchlevel
  8.4.7

  % package require ldap
  1.2

  Ldap search does not pick up CNs with space in the name.

  TestCase.

  Search with "General*" works.

  % ldap::search $donnelly "o=HBF" "cn=General*" {cn}
  {{CN=General Management,O=HBF} {}}

  Search with "General Managemernt" fails.

  % ldap::search $donnelly "o=HBF" "cn=General Management" {}
  % 

  The filter string needs to be enclosed in "{}" or a list.

  % set f [ list "cn=General Management" ]
  {cn=General Management}

  (bin) 244 % ldap::search $donnellyServer "o=HBF" $f {cn}
  {{CN=General Management,O=HBF} {}}

  Doco may need to be updated.


tkt_uuid: 3122382fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: tablelist
priority: 5 Medium
foundin: None
resolution: None
title: findTabs returns 0 and callers fail
comment:
  The first loop from tablelist::findTabs is able to return 0 without providing data to idx1Name and idx2Name ... thus commands like tablelist::addActiveTag will crash with error "can't read tabIdx1: no such variable"

  seen in version tklib0.5

  thx


tkt_uuid: 1254937fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Duplicate
title: Binary files get an extra line feed at the end
comment:
  Binary mime parts get an extra line feed at the end,
  before the border.

  I have submitted patch 1254934 as a proposal to fix
  this problem.


tkt_uuid: 1951544fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tcllib: request for new module
priority: 6
foundin: None
title: YAML module add
comment:
  I impremented a load/dump library for YAML.

  Now, the library name is YAPT.(YAml Parser for Tcl)
  But according to the naming convention of tcllib, this library name might be 'yaml'?

  Although whichever of two names is satisfactory for me, I want to continue development by the determined name.

  Comments?


tkt_uuid: 1735601fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: grammar_fa
priority: 5 Medium
foundin: None
title: grammar::fa::op::toRegexp
comment:
  Just wanted to log this natural companion of fromRegexp.

  I don't need it myself right now, but I might do in the 
  future, and about a month ago two colleagues mentioned 
  it would be nice if their program could also convert the 
  automata it generated to regexps...

  I'll probably fill this RFE myself, eventually, unless 
  someone beats me to it. :-)


tkt_uuid: 720934ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math
priority: 9 Immediate
foundin: None
resolution: Fixed
title: Test failures in math::fuzzy
comment:
  When running the testsuite for 'math' I get three
  failures in the math::fuzzy testsuite. Attached the log
  for the whole math package.


tkt_uuid: 477130ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Big combobox api changes not documented
comment:
  In revision 1.14 of the combobox the LabelFrame was
  removed from the ComboBox (looking at the changelog for
  some speedimprovement).

  All the docs especially Changes.txt do not mention
  this. Also the html doc was not updated.

  It's nice that it's faster but why just ditch a lot of 
  functionality (ok I'm not 100% objective since I was
  using that functionality :) )?

  I'll personally settle for a mention of it in the docs
  =) I'll make a slow combobox myself I guess...

  Thanks,

  Ric


tkt_uuid: 582828ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: exif
priority: 5 Medium
foundin: None
resolution: Accepted
title: Patches exif.tcl for Digital IXUS
comment:
  I've been trying to use the tcllib Exif parser to process
  pictures taken with my Canon Digital IXUS camera.
  It turns out that the IXUS's image files contain a
  »makerNote« field which doesn't have various fields
  used by other Canon cameras. The attached patch
  upgrades the »makerNote« procedure to do some
  more checks for non-existing fields and such.


tkt_uuid: 567428ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: problem with tmml documentation
comment:
  The following modules have a problem with the way their
  tmml documentation generates nroff:

  counter/counter.man
  fileutil/fileutil.man
  ftp/ftp.man
  ftpd/ftpd.man
  html/html.man
  irc/irc.man
  javascript/javascript.man
  log/log.man
  math/combinatorics.man
  math/math.man
  mime/mime.man
  mime/smtp.man
  ncgi/ncgi.man
  nntp/nntp.man
  pop3/pop3.man
  profiler/profiler.man
  report/report.man
  smtpd/smtpd.man
  stooop/stooop.man
  textutil/expander.man

  The nroff that gets generated starts out with:

  '\" -*- tcl -*- doctools manpage

  But that causes Sun's nroff to fail to format the man page.
  The error that is caused says:

  $ man -s n counter
  Reformatting page.  Wait...unknown preprocessor specifier -


tkt_uuid: 503336ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
title: Add no_softbreak flag to qp_encode
comment:
  Add the argument "no_softbreak" with a default value 
  of false to the argument list of mime::qp_encode.
  If this flag is set to true, the extra handling of 
  lines longer than 72 (shouldn't it be 76?) characters 
  should be skipped.

  Reason:  It is possible to qp_encode the subject 
  string. If you do this and the subject exceeds 72 
  characters, a soft break is inserted. This scrambles 
  the entire message at least if read with Outlook 
  Express. If the insertion of soft breaks is skipped, 
  it appears to work right with subject strings of 
  arbitrary length (tried with strings up to about 200 
  chars).


tkt_uuid: 458023ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ncgi
priority: 5 Medium
foundin: None
resolution: Fixed
title: urlStub always returns ""
comment:
  cgi::urlStub is intended to return either 
  env(SCRIPT_NAME) or a value set by a previous call to 
  the proc.  It's missing a global env declaration and 
  so always fails to find a value for SCRIPT_NAME and 
  returns "" instead.

  The patch is simple, in ncgi.tcl:

   proc ncgi::urlStub {{url {}}} { 
       variable urlStub 
  +    global env
       if {[string length $url]} {


tkt_uuid: 759881ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tcllib: request for new module
priority: 9 Immediate
foundin: None
title: Move TclDES extension into tcllib
comment:
  I am interensted in moving my TclDES 0.5 extension into
  tcllib. Doing this would make it more accessible to the
  Tcl community. I want to continue to be the maintainer
  of the extension. The des extension, currently in
  tcllib but not listed, would be deprecated or replaced
  with the code of TclDES and/or TclDESjr.

  There is possibly an issue with import/export
  restrictions with TclDES since it contains support for
  3DES (considered "strong encryption"). There is not so
  much a problem with TclDESjr, which does not contain
  3DES. Placing TclDES into the tcllib distribution may
  "taint" the entire distribution, per se.

  A middle ground may be to place TclDESjr into tcllib,
  leaving TclDES as a separate extension. The problem
  with this is that plain DES is relatively weak
  encryption and not used for many applications these
  days. Still, it is easy enough to derive 3DES from
  plain DES, so perhaps, TclDESjr is sufficient.
  Conversly, if deriving 3DES from plain DES is so
  simple, why worry about it and just place both TclDES
  and TclDESjr into tcllib.


tkt_uuid: 1078504fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 3 Low
foundin: None
resolution: Out of Date
title: application generates error
comment:
  Attempt to startup tkchat today results in this error
  being raised:

   $ tkchat.tcl
  Error in startup script: can't find package jlib
      while executing
  "package require jlib            "
      (procedure "logonChat" line 13)
      invoked from within
  "logonChat"
      (procedure "::tkchat::Init" line 202)
      invoked from within
  "::tkchat::Init"
      ("eval" body line 1)
      invoked from within
  "eval [linsert $argv 0 ::tkchat::Init]"
      invoked from within
  "if {![info exists ::URLID]} {
      eval [linsert $argv 0 ::tkchat::Init]
  }"
      (file "/projects/xopsrc/bin/tkchat.tcl" line 6560)

  What is jlib and where does one get it to install it?
  Seems like either tkchat should come with it, or it
  should come in tcllib or the tcl distribution if tkchat
  is going to depend on it.
  I don't even see a README in the tclapps distribution
  that references the library.

  There is, however, a note about irbridge being
  dependent on jlib.


tkt_uuid: 528390ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: example_begin/_end unsatisfactory
comment:
  The current implementation of example_begin/example_end
  produces centered literal text. If you have more than
  one example, they will not line up unless the longest
  lines are the same. This is - in my opinion - not very
  pleasant to look at.


tkt_uuid: 1378556fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: tie
priority: 5 Medium
foundin: None
resolution: Accepted
title: tie file buffering isn't disabled on windows
comment:
  In package 'tie::std::file 1.0', on Windows, after tie
  log file compaction, tie log file is re-opened with
  buffering enabled. The buffering should be disabled.


tkt_uuid: 3288793fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Accepted
title: ftp::List does not work inside tkcon
comment:
  the proposed fix is to replace:
  proc ::ftp::__ftp_ls {args} {
          foreach i [eval ::ftp::List_org $args] {
              puts $i
          }
      }
  with:
      proc ::ftp::__ftp_ls {args} {
          set rc [eval ::ftp::List_org $args]
          foreach i $rc {
              puts $i
          }
          return $rc
      }

  in ftp.tcl file.


tkt_uuid: 1171533fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Rejected
title: ScrolledWindow/Notebook widgets result in hang
comment:
  Hi,

  The following code results in a "hang" state with
  BWidget1.7 on solaris2.8/tcl8.4 when "update idletasks"
  is called. 

      package require BWidget
      set swg [ScrolledWindow .swg]
      set wg [NoteBook $swg.nb]
      pack $wg -fill both -expand 1 ;# use of grid
  instead of pack resolves this issue
      update idletasks ;# it hangs here

  The same code works fine with BWidget1.4.1. After some
  debugging, I found out that the problem sees to occur
  due to changes commited to 1.5 version of scrollw.tcl file:

  ----------------------------
  revision 1.5
  date: 2003/02/25 09:51:03;  author: hobbs;  state: Exp;
   lines: +108 -180
          * scrollw.tcl: complete rewrite of
  ScrolledWindow widget to
          address infinite loop scrollbar problems.  This
  one is much
          simpler and does not suffer the infinite loop.
   There still seems
          to be an issue with shrinking smaller than one
  scrollbar width /
          height in size, but that's not common (nor
  fatal).  Addresses
          [Patch #671821, #520903] [Bug #472718, #564691]
  ----------------------------

  Am I facing the shrinking issue mentioned in this log
  message?


  Hemang.


tkt_uuid: 864530ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: md5
priority: 8
foundin: None
resolution: Wont Fix
title: md5::md5 -- incompatible API change in 2.0
comment:
  Previously, [md5::md5 $data] returned a result as a hex
  string; as of version 2.0, it returns it as binary.
  Although this is noted in the ChangeLog, it is easy to
  miss, and is sure to cause many hard-to-track-down
  errors when users upgrade to the next release of tcllib.

  This seems like a gratuitous incompatibility.  Please
  make '-hex' the default, for compatibility with tclllib
  1.4, and add a '-bin' or '-binary' option for those
  that want the new behaviour.


tkt_uuid: 458446ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: BWidget: faster ListBox inserts
comment:
  Motivation:

  The BWidget ListBox insert command isn't a speed demon.
  This is not
  too noticable for small lists, but it gets rather slow
  for big ones
  E.g. inserting 500 entries with just -text and -image
  attributes set 
       takes approx. 1 second on a Pentium III 550MHz.

  Problem analysis:

  The bulk of the time in ListBox::insert gets eaten by a
  call to
  Widget::init. In Widget::init, most of the time is used
  by
  initializing and parsing from standard options
  database. The example
  from above uses ~1250msec for building up the std.
  options and
  ~250msec to apply specific options for the item.

  Proposed patch:

  Two functions to speed up inserts of many items that
  are all almost
  equal. 

  First, Widget::copyinit. This works almost like the
  normal init, but
  saves time by copying standard option initialization
  from a given
  template. It then applies specific item options (just
  like init).

  Second, ListBox::multipleinsert. This also works like
  its pendant
  ListBox::insert, but knows about the aforementioned
  Widget::copyinit
  function. I shortly thought of changing the original
  'insert', but the
  effects of a change there would not be backward
  compatible.

  Sideeffects:
  None to existing code. A widget function more to
  document for the user
  (ListBox::multipleinsert).

  Results:
  The speedup of using multipleinsert is a factor of 2
  when used almost
  exactly like a multiple call to insert.
  That is:

      set l
      foreach n {name1 name2 name3 ... namen} {
          lappend l $n "-text $n -image something.gif"
      }
      $list multipleinsert end $l

  is 2 times faster than its pendant

      foreach n {name1 name2 name3 ... namen} {
          $list insert end $n -text $n -image
  something.gif
      }

  Assuming that, e.g. all images used are the same (as in
  the example
  above, the speedup is factor 3 by using:
      set l
      foreach n {name1 name2 name3 ... namen} {
          if {[llength $l] == 0} {
              lappend l $n "-text $n -image
  something.gif"
  } else {
              lappend l $n "-text $n"
          }
      $list multipleinsert end $l


  Code:

  In listbox.tcl:

  # Bastien Chevreux (bach@mwgdna.com)
  # The multipleinsert command performs inserts several
  items at once into
  #  the list. It is faster than calling insert multiple
  times as it uses the
  #  Widget::copyinit command for initializing all items
  after the 1st. The 
  #  speedup factor is between 2 and 3 for typical usage,
  but could be higher
  #  for inserts with many options.
  #
  # Syntax: path and index are as in the insert command
  #         args is a list of even numbered elements
  where the 1st of each pair
  #          corresponds to the item of 'insert' and the
  second to args of 'insert'.
  #
  ------------------------------------------------------------------------------
  #  Command ListBox::multipleinsert
  #
  ------------------------------------------------------------------------------
  proc ListBox::multipleinsert { path index args } {
      variable $path
      upvar 0  $path data

      # If we got only one list as arg, take the first
  element as args
      # This enables callers to use 
      #   $list multipleinsert index $thelist
      # instead of
      #   eval $list multipleinsert index $thelist

      if {[llength $args] == 1} {
  set args [lindex $args 0]
      }

      set count 0
      foreach {item iargs} $args {
  if { [lsearch $data(items) $item] != -1 } {
      return -code error "item \"$item\" already exists"
  }

  if {$count==0} {
      Widget::init ListBox::Item $path.$item $iargs
      set firstpath $path.$item
  } else {
      Widget::copyinit ListBox::Item $firstpath
  $path.$item $iargs
  }

  if { ![string compare $index "end"] } {
      eval lappend data(items) $item
  } else {
      set data(items) [linsert $data(items) $index
  $item]
  }
  set data(upd,create,$item) $item

  incr count
      }

      _redraw_idle $path 2
      return $item
  }

         

  In widget.tcl:

  # Bastien Chevreux (bach@mwgdna.com)
  #
  # copyinit performs basically the same job as init, but
  it uses a
  #  existing template to initialize its values. So,
  first a perferct copy
  #  from the template is made just to be altered by any
  existing options
  #  afterwards.
  # But this still saves time as the first initialization
  parsing block is
  #  skipped.
  # As additional bonus, items that differ in just a few
  options can be
  #  initialized faster by leaving out the options that
  are equal.

  # This function is currently used only by
  ListBox::multipleinsert, but other
  #  calls should follow :)

  #
  ------------------------------------------------------------------------------
  #  Command Widget::copyinit
  #
  ------------------------------------------------------------------------------
  proc Widget::copyinit { class templatepath path options
  } {
      upvar 0 ${class}::opt classopt
      upvar 0 ${class}::$path:opt  pathopt
      upvar 0 ${class}::$path:mod  pathmod
      upvar 0 ${class}::$path:init pathinit

      upvar 0 ${class}::$templatepath:opt  
  templatepathopt
      upvar 0 ${class}::$templatepath:mod  
  templatepathmod
      upvar 0 ${class}::$templatepath:init 
  templatepathinit

      if { [info exists pathopt] } {
  unset pathopt
      }
      if { [info exists pathmod] } {
  unset pathmod
      }

      # We use the template widget for option db copying,
  but it has to exist!
      array set pathmod  [array get templatepathmod]
      array set pathopt  [array get templatepathopt]
      array set pathinit [array get templatepathinit]

      set Widget::_class($path) $class
      foreach {option value} $options {
          if { ![info exists classopt($option)] } {
              unset pathopt
              unset pathmod
              return -code error "unknown option
  \"$option\""
          }
          set optdesc $classopt($option)
          set type    [lindex $optdesc 0]
          if { ![string compare $type "Synonym"] } {
              set option  [lindex $optdesc 1]
              set optdesc $classopt($option)
              set type    [lindex $optdesc 0]
          }
          set pathopt($option)
  [$Widget::_optiontype($type) $option $value [lindex
  $optdesc 3]]
  set pathinit($option) $pathopt($option)
      }
  }


tkt_uuid: 532677ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: apps : tkchat
priority: 5 Medium
foundin: None
title: new tkchat smiley proposed
comment:
  I would like to submit this diff for adding the blush
  smiley.  The image is from the tik tcl/tk aol IM
  browser, but is similar to the h2h one, etc.

  The code is a bit messy because of the } that I used in
  the ascii smiley.  There are inconsistent variations
  for expressing a blush - I chose a set from I think a
  java class I found while googling.


tkt_uuid: 740499ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: Missing docu for suppressing a drag in the -draginitcmd
comment:
  Sometimes, it's very handy, to be able to suppress a
  drag in the -draginitcmd (say, for example, a tree
  widget has nodes, which are dragable and others, which
  are not, in the logic of the application). It seems,
  the current implemention allows this (see proc
  DragSite::_init_drag) --- if the -draginitcmd returns
  {} instead of the expected 3 elements lists, there is
  no error raised, but some explicte cleanup. The
  documentation doesn't mention this. I propose, to add
  something like

  "If the command returns an empty string, the drag will
  be suppressed."

  at the end of the DragSite:register -draginitcmd
  documentation.


tkt_uuid: 1646625fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: doctools
priority: 9 Immediate
foundin: None
resolution: Not Applicable Here
title: doctools - html backend - backslashes wrong in doc example
comment:
  Looking at http://tcllib.sourceforge.net/doc/des.html I see that the backslashes in the example are doubled. This has proved very confusing to at least one user, and caused him to have needless problems.


tkt_uuid: 603953ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Duplicate
title: Scrolledframe on Mac OSX - 10.1.5
comment:
  It looks like scrolled frames/windows don't work properly under 
  Mac OSX 10.1.5. The scrollbars appear but cannot be moved. I 
  see the same behaviour in the demos provided with BW and my 
  own code.

  Thanks


tkt_uuid: 1206499fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 5 Medium
foundin: None
resolution: Fixed
title: struct::list flatten throws error for valid list
comment:
  this script throws error:
  %set a [list \[a\] \[b\]]
  {[a]} {[b]}
  %  struct::list flatten $a
  invalid command name "a"

  this is the errorInfo:
  invalid command name "a"
      while executing
  "a"
      invoked from within
  "::lappend result [a]"
      ("eval" body line 1)
      invoked from within
  "eval [::list ::lappend result] $item"
      (procedure "::struct::list::Lflatten" line 26)
      invoked from within
  "::struct::list::Lflatten {{[a]} {[b]}}"
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 [linsert $args 0 ::struct::list::$sub]"
      (procedure "struct::list" line 15)
      invoked from within
  "struct::list flatten $a"


tkt_uuid: 3076576fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math
priority: 5 Medium
foundin: None
resolution: Fixed
title: Wrong number of arguments in test isprime-2.0 of numtheory
comment:
  Test isprime-2.0 uses a mock-up Miller-Rabin test procedure, but the number of arguments is 3, instead of 4.

  Here is the report:

  ==== modules/math/numtheory.test isprime-2.0 FAILED =========
  ==== Contents of test case:

     ::math::numtheory::Miller--Rabin 127 -randommr 500

  ---- Result was:
  ---- Return code should have been one of: 0 2
  ---- errorInfo: wrong # args: should be "::math::numtheory::Miller--Rabin n s d a"
      while executing
  "::math::numtheory::Miller--Rabin 127 -randommr 500"
      ("uplevel" body line 2)
      invoked from within
  "uplevel 1 $script"
  ---- Result should have been:

  ==== modules/math/numtheory.test isprime-2.0 ====


tkt_uuid: 710658ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Focusproblem with Widget::focusOK
comment:
  We have some internally developed widgets which return
  an empty string on unknown commands/options. This
  causes problems for Widget::focusOK in widget.tcl,
  which uses cget -editable:

  Errorinfo: can't use empty string as operand of "!"
      while executing
  "if {($code == 0) && !$value} {
          return 0
      }"
      (procedure "focusOK" line 27)
      invoked from within
  "focusOK $cur"
      (procedure "Widget::focusNext" line 36)
      invoked from within
  "Widget::focusNext .apar2"
      invoked from within
  "focus [Widget::focusNext .apar2]"
      (command bound to event)

  May I suggest that line 1301 in widget.tcl is changed from:

      if {($code == 0) && !$value} {

  to:

      if {($code == 0) && $value == 0} {

  which is not only safer, but also easier to read, imo.


tkt_uuid: 951568ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtp
priority: 9 Immediate
foundin: None
resolution: Fixed
title: Problems sending long messages.
comment:
  From Peter Campbell on comp.lang.tcl
  Message-ID: <DSSnc.1164$FN.128726@news02.tsnz.net>

  I have done some more debugging and found the problem
  to be with the "Trf"
  package, an incompatibility. The transform function of
  the "trf" package
  sends back a command "query/ratio" which the
  "smtp::wdata" function does not
  know - this returns the error.

  I included some debugging information in the mime
  package to delve deeper
  into the code and find the original error messages,
  rather than the message
  as reported by the application.

  By editing "smtp.tcl" and removing the usage of Trf the
  sending of the email
  works.
  ie: remove the trf line at the top, so create our own
  transform procedure.
  smtp.tcl; line 37:
  if {[catch {package require Trf  2.0}]} {
      # Trf is not available, but we can live without it
  as long as the
      # transform and unstack procs are defined.

      # Warning!
      # This is a fragile emulation of the more general
  calling sequence
      # that appears to work with this code here.

      proc transform {args} {
   upvar state mystate
   set mystate(size) 1
      }
      proc unstack {channel} {
          # do nothing
          return
      }
      set ::smtp::trf 0
  }

  The following is the output from my debugging:



  The following is the output from my debugging:

  (Desktop) 11 % smtp::sendmessage $multiT -servers [list
  {localhost}] -debug
  1 \
  >  -header [list From "<pc@acs.co.nz>"] \
  >  -header [list To pc@acs.co.nz] \
  >  -header [list Subject "Invoice TEST"]
  Trying localhost...
  <-- 220 hermes.acs.co.nz ESMTP Sendmail 8.11.6/8.11.6;
  Tue, 11 May 2004
  09:39:31 +1200
  --> EHLO localhost (wait upto 300 seconds)
  <-- 250-hermes.acs.co.nz Hello dhcp67.acs.co.nz
  [192.168.100.67], pleased to
  meet you
  <-- 250-ENHANCEDSTATUSCODES
  <-- 250-8BITMIME
  <-- 250-SIZE
  <-- 250-DSN
  <-- 250-ONEX
  <-- 250-ETRN
  <-- 250-XUSR
  <-- 250 HELP
  --> ONEX (wait upto 300 seconds)
  <-- 250 2.0.0 Only one transaction
  --> MAIL FROM:<pc@acs.co.nz> (wait upto 600 seconds)
  <-- 250 2.1.0 <pc@acs.co.nz>... Sender ok
  --> RCPT TO:<pc@acs.co.nz> (wait upto 3600 seconds)
  <-- 250 2.1.5 <pc@acs.co.nz>... Recipient ok
  --> DATA (wait upto 300 seconds)
  <-- 354 Enter mail, end with "." on a line by itself
  result =
  ecode = NONE
  einfo = Unknown command "query/ratio"
      while executing
  "error "Unknown command \"$command\"""
      ("default" arm line 2)
      invoked from within
  "switch -- $command {
   create/read
       -
          create/write
              -
          clear/write
              -
          delete/write {
              set s..."
      (procedure "::smtp::wdata" line 6)
      invoked from within
  "::smtp::wdata ::smtp::1 query/ratio {}"


  I am sure the correct way to solve this problem is to
  update the
  "smtp::wdata" procedure to handle the "query/ratio"
  command (and any others
  that the Trf package provides).

  Plus enhance the flow of error messages within the
  mime/smtp package so the
  original error information is not lost.


tkt_uuid: 443613ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Fixed
title: new binary translation breaks pop3::send
comment:
  Just downloaded ActiveTcl 8.3.3.2 and found pop3's new 
  binary translation mode breaks the send proc...

  Connecting to some of my email accounts now hangs my 
  email script (indefinitely?). Things worked fine with 
  the old tcllib 0.8...

  I believe the problem lies in the fact that the send 
  proc now (i.e. in the new binary mode) only appends LF-
  s to commands it "puts" to the POP3 server. If I'm not 
  mistaken the official line termination sequence for 
  POP3 is CRLF. And POP3 servers expecting this may 
  therefore wait awhile before sending anything back...

  A solution might be to change the channel translation 
  command (in ::pop3::open) into:

      fconfigure $chan -translation binary crlf

  I hope this helps.

  -- AH.


tkt_uuid: 785416ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: None
priority: 7 High
foundin: None
resolution: Out of Date
title: BWidget ScrolledWindow problem
comment:
  The BWidget ScrolledWindow widget no longer honours the
  '-borderwidth' and '-relief' options. This patch solves
  this problem.

  Kind regards,

  Jos.


tkt_uuid: 440046ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 3 Low
foundin: None
resolution: Fixed
title: latest md5 test suite fails
comment:
  Note that the category list is missing the md5 module.

  I downloaded the nightly cvs snapshot on the scriptics
  ftp site on July 10, 2001 around 9:30 AM EDT.

  When I am in the top level of the tcllib directory and
  do a make test I get this error for the md5 library:

  Module: md5
  modules/md5/md5.test
  md5 1.4 (pure Tcl)

  ==== md5-1.0 md5 FAILED
  ==== Contents of test case:

      catch {::md5::md5} result
      set result

  ---- Result was:
  wrong # args: should be "::md5::md5 msg"
  ---- Result should have been (exact matching):
  no value given for parameter "msg" to "::md5::md5"
  ==== md5-1.0 FAILED

  ==== md5-1.1 md5 FAILED
  ==== Contents of test case:

      catch {::md5::hmac} result
      set result

  ---- Result was:
  wrong # args: should be "::md5::hmac key text"
  ---- Result should have been (exact matching):
  no value given for parameter "key" to "::md5::hmac"
  ==== md5-1.1 FAILED

  ==== md5-1.2 md5 FAILED
  ==== Contents of test case:

      catch {::md5::hmac key} result
      set result

  ---- Result was:
  wrong # args: should be "::md5::hmac key text"
  ---- Result should have been (exact matching):
  no value given for parameter "text" to "::md5::hmac"
  ==== md5-1.2 FAILED


tkt_uuid: 1451784fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Out of Date
title: Bwidget notebook highlight looks bad on OS X
comment:
  The Bwidget notebook on OS X has a glitch in which the notebook tab, 
  when it has focus, turns black and obscures the label. I went into 
  notebook.tcl and added a switch statement with a specific color 
  (LightSkyBlue) for OS X. Diff and before/after screenshots attached.


tkt_uuid: 729709ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 6
foundin: None
resolution: Fixed
title: tkchat no longer pops to top or beeps on alerts
comment:
  somewhere in the last change or two, tkchat at least
  for me has lost the functionality of alerting me when
  someone whispers to my login id.

  I am running sparc/solaris 2.8, with tcl/tk 8.4.2
  installed and the latest tcllib from cvs.

  Up until the past few weeks, if I had tkchat running,
  then opened netscape, dtmail, or dtterm windows on top
  of tkchat, a whisper would result in a beep sound and
  the window raising.

  This no longer is the case.

  from $HOME/.tkchatrc, I see:

  array set Options {
  Alert,ACTION 1
  Alert,ALL 0
  Alert,ME 1
  Alert,NORMAL 1
  Alert,RAISE 1
  Alert,SOUND 1
  Alert,TOPIC 0
  AnimEmoticons 1
  AutoConnect 1
  AutoScroll 1

  plus more.

  It _appears_ to be configured properly - the menus have
  the appropriate check boxes highlighted.


tkt_uuid: 514475ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tcllib: request for new module
priority: 8
foundin: None
title: request to add listx to tcllib
comment:
  listx is a project by one or more of the Tcl community
  to create an integrated list handling command for tcl.
  It would consist of a superset of (all?) commonly
  existing extension Tcl list handling functions.  See
  http://www.purl.org/net/akupries/tcltk.html for details
  .


tkt_uuid: 868315ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: Dialog widget hangs in BWidget 1.7
comment:
  When I issue the "draw" command to a Dialog widget in
  BWidget 1.7, the entire application hangs.  

  I am using ActiveTcl 8.4.5 on WinXP Pro.

  The code below illustrates the error.  Switching to
  BWidget 1.6 makes it work.
   

   # DialogTest.tcl
   #
   # A test of the BWidget Dialog widget.

   package require -exact BWidget 1.7

   button .b -text "Dialog" -command {ShowDialog}
   pack .b

   proc ShowDialog {args} {
  Dialog .prompt \
  -title {???} \
  -parent .b \
  -place above

  label .prompt.label -text "This is a dialog!\nDid it
  work?"

  pack .prompt.label

  .prompt add -text Okay -command {.prompt enddialog Okay}
  .prompt add -text Cancel -command {.prompt enddialog
  Cancel}

  set Prompt [.prompt draw]

  destroy .prompt
   }
   


tkt_uuid: 1813193fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: ftp - FXP - cross server transfer not going through client
comment:
  Is it possible to add FXP support? RFC959 describes the implementation of FXP as follows:

        When data is to be transferred between two servers, A and B (refer
        to Figure 2), the user-PI, C, sets up control connections with
        both server-PI's.  One of the servers, say A, is then sent a PASV
        command telling him to "listen" on his data port rather than
        initiate a connection when he receives a transfer service command.
        When the user-PI receives an acknowledgment to the PASV command,
        which includes the identity of the host and port being listened
        on, the user-PI then sends A's port, a, to B in a PORT command; a
        reply is returned.  The user-PI may then send the corresponding
        service commands to A and B.  Server B initiates the connection
        and the transfer proceeds.  The command-reply sequence is listed
        below where the messages are vertically synchronous but
        horizontally asynchronous:

           User-PI - Server A                User-PI - Server B
           ------------------                ------------------

           C->A : Connect                    C->B : Connect
           C->A : PASV
           A->C : 227 Entering Passive Mode. A1,A2,A3,A4,a1,a2
                                             C->B : PORT A1,A2,A3,A4,a1,a2
                                             B->C : 200 Okay
           C->A : STOR                       C->B : RETR
                      B->A : Connect to HOST-A, PORT-a


  If you would like to discuss this with me any further, please contact me at: pill_uk@hotmail.com


tkt_uuid: 435471ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: paned window problem
comment:
  When adding a large widget to a pane of a paned window,
  the panes already present do no keep their relative
  sizes. Try the following example:

    package require BWidget

    wm geometry . 500x500
    update idletasks

    # Create paned window
    pack [PanedWindow .p -side left] -fill both -expand
  true

    # Top pane
    set p1 [.p add -weight 100]

    update idletasks
    after 1000

    # Middle pane
    set p2 [.p add -weight 100]

    update idletasks
    after 1000

    # Bottom pane
    set p3 [.p add -weight 50]
    pack [text $p3.t] -fill both -expand true

  The text-widget added to the bottom pane gets most of
  the space on the screen. Previous versions of BWidgets
  PanedWindow respected the relative sizes of the panes
  already present.

  Please find attached the version of panedw.tcl with the
  old behaviour but compatible with BWidget 1.3.1

  Kind regards, 

  Jos.


tkt_uuid: 1272983fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: snit
priority: 5 Medium
foundin: None
resolution: Fixed
title: snit v2 - rename-1.5 panic with Tcl 8.5
comment:
  $ setenv TCLTEST_OPTIONS "-verbose bpste"
  $ /local/src/tcl/solaris/tclsh sak.tcl test snit
  Shell is "/local/src/tcl/solaris/tclsh"
  tcllib tests
  Test platform: "SunOS-5.9-sun4u" using Tcl 8.5a4
  Tests running in working dir:  /local/src/tcllib
  Only running tests that match:  *
  Skipping test files that match:  l.*.test
  Only sourcing test files that match:  *.test
  Tests began at Thu Aug 25 13:49:09 -0400 2005
  Module: snit
  modules/snit/snit.test
  - Tcl  8.5
  - snit 2.0
  ...
  ---- rename-1.5 start
  TclAppendLimitedToObj called with shared object
  child killed: SIGABRT
      while executing
  "exec [info nameofexecutable]  [file join $distribution
  all.tcl]  -modules $modules  >@ stdout 2>@ stderr"
      (procedure "__test" line 12)
      invoked from within
  "__$cmd"
      (file "sak.tcl" line 2287)


tkt_uuid: 2993200fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: base64
priority: 7 High
foundin: None
title: ascii85 encode/decode implementation in pure tcl
comment:
  When working with postscript files sometimes the need arises to work with ascii85 encoded strings as described in the Postscript Language Reference Manual.
  Here is an implementation on pure Tcl for inclusion on tcllib.


tkt_uuid: 2947213fffffffffffffffffffffffffffffffff
type: Bug
status: Open
subsystem: tclapps :: tkchat
priority: 7 High
foundin: None
resolution: None
title: Repeated short history
comment:
  When history loading is the default "ask', if I answer a non-zero number of days to the dialog that pops up on startup, the requested amount of history is properly loaded, but the last pageful of history is repeated after the line "++++ End Of History ++++", with their timestamps.

  When reloading history afterwards through the Debug menu, the effect disappears.
  I suspect the startup-time loading of recent history is not disabled by the dialog, and fires after the loading itself.

  This is 1.477 on both Windows and Linux, and has been present for several Tkchat versions.


tkt_uuid: 686065ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Fixed
title: popups!
comment:
  When the multi-line entry is used
  to enter an action message
  (one that begins /me) and that
  message spans multiple lines,
  tkchat pops up a window for 
  each line.


tkt_uuid: 739387ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Invalid
title: -ERR authorization first on pop3::open
comment:
  I have trouble connecting to one of my mailservers with
  pop3::open. 
  It gives me:
  +OK (for socket)
  +OK (for user)
  -ERR autorization fist (for password), I will enquire
  as to the specifics of this server, but I wanted to
  post this first in case anyone else had come across a
  similar problem.

  My other mailserver works with no problems.

  I will attempt to investigate this myself and post
  followup if I find something.


tkt_uuid: 517599ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
title: Let mpexpand warn against visual tags
comment:
  Change the "mpexpand" application to optionally warn 
  the user when processing strong/emph tags => Reminder 
  to .man writer to use semantic tags, not visual ones.


tkt_uuid: 638236ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: BWidget: Entry "-state disabled" doesn't gray
comment:
  There is a difference between TK's entry and BWidget's
  Entry
  concerning the -state disabled option.

  % package require BWidget
  1.4.1
  % pack [label .l1 -text "Tk entry"]
  % pack [entry .e1]
  % pack [label .l2 -text "BWidget Entry"]
  % pack [Entry .e2]

  # Make both entries yellow ==> okay
  % .e1 configure -bg yellow
  % .e2 configure -bg yellow

  # Disable both entries ==> !!! .e1 becomes gray, .e2
  stays yellow
  % .e1 configure -state disabled
  % .e2 configure -state disabled

  # Disable both entries ==> okay, yellow
  % .e1 configure -state normal
  % .e2 configure -state normal 

  # Get -disabledbackground option==> BWidget fails
  %  .e1 cget -disabledbackground 
  SystemButtonFace
  %  .e2 cget -disabledbackground
  unknown option "-disabledbackground"
  %  .e2 cget -disabledforeground
  SystemDisabledText


tkt_uuid: 1660234fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: ico
priority: 5 Medium
foundin: None
resolution: Fixed
title: Bugs in ico::getFileIcon
comment:
  There are a few errors in ico.tcl which stop ico::getFileIcon from working correctly for me. I've put a revised copy of it below, with the changes commented, and the problems I was getting without those changes...

  proc ::ico::getFileIcon {file args} {
      set ext [file extension $file]
      if {[catch {registry get HKEY_CLASSES_ROOT\\$ext ""} doctype] || \
          [catch {registry get HKEY_CLASSES_ROOT\\$doctype\\DefaultIcon ""} icon]} {
          set icon "%SystemRoot%\\System32\\shell32.dll,0"
      } ;# (1)
      set index [lindex [split $icon ,] 1]
      set icon [lindex [split $icon ,] 0]
      if {$index == ""} { set index 0 }
      set icon [string trim $icon "@'\" "]
      while {[regexp -nocase {%([a-z]+)%} $icon -> var]} {
          set icon [string map [list %$var% $::env($var)] $icon] ;# (2)
      }
      set icon [string map [list %1 $file] $icon]
      if {$index < 0} {
          if {![catch {eval [list getIconByName $file [string trimleft $index -]] $args} output]} {
              return $output
          }
          set index 0
      }
      return [eval [list getIcon $icon [lindex [icons $icon] $index]] $args] ;# (3) and (4)
  }


  (1) There was an extra period before the $ext in the if which caused it to fail to find all file extensions
  (2) The patterns to map were quoted, instead of using [list], which caused backslashes in the paths to be removed, breaking them and preventing the files from being found correctly later on
  (3) The [list] was closed after the $args, instead of before, so the $args didn't expand properly, and getIcon was throwing errors like 'unknown option "res 32"'
  (4) Changed both uses of $file to $icon, otherwise you get "unsupported file type <type>" errors for everything but .exe, .ico and .dll (ie, files which actually contain icons themselves, rather than having an icon registered for them in the registry)

  With those changes, it works without any problems (tested with a half-dozen different file types, including files containing icons (.exe and .ico), and ones which don't (.tcl, .txt, .pub, .hlp, .fakeFileType), all of which showed the right icon, with no options and with -res 32). All of this is on Windows XP Home SP2, incidently:

  % parray tcl_platform
  tcl_platform(byteOrder) = littleEndian
  tcl_platform(machine)   = intel
  tcl_platform(os)        = Windows NT
  tcl_platform(osVersion) = 5.1
  tcl_platform(platform)  = windows
  tcl_platform(user)      = User
  tcl_platform(wordSize)  = 4

  Hope that's some help,
  Mike Griffiths (talvo@talvo.com)


tkt_uuid: 1494997fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: statistics
priority: 5 Medium
foundin: None
resolution: None
title: Can't load in slave interpreter
comment:
  This bug affects the math::statistics package, but I 
  assume it might affect many other packages in tcllib.

  Consider the following:

  % package require math::statistics
  0.1.3
  (bin) 2 % interp create kk
  kk
  (bin) 3 % interp eval kk {package require 
  math::statistics}
  can't read "::argv0": no such variable

  math::statistics can be loaded successfully in the 
  top interpreter, but fails when trying to load it 
  into a slave interpreter. The issue is that the 
  package internally tries to get the value of ::argv0
  to assess whether this is an interactive session so 
  as to perform a regression testing, but ::argv0 does 
  not exists in interpreters different from {}.

  Juan Carlos---


tkt_uuid: 2824771fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: doctools test case 50.0.1 fails
comment:
  CVS head of tcllib and tcl 8.6, built on sparc solaris 8 using sun's c compiler.

  The following is one of several similar errors that occurred yesterday when I tried running the tcllib test suite against tcl 8.6 cvs head.

  ---- doctools-idx-50.0.1 start

  ==== doctools-idx-50.0.1 doctools::idx deserialize = docidx, nokeys, ok FAILED
  ==== Contents of test case:

              I deserialize = $data docidx
              doctools::idx::structure print [I serialize]
          
  ---- Test generated error; Return code was: 1
  ---- Return code should have been one of: 0 2
  ---- errorInfo: Unable to locate or load plugin "docidx" (ERROR for slave interp
  1 : can not find channel named "stdout")
      while executing
  "::pluginmgr::Snit_methodload ::pluginmgr ::pluginmgr::Snit_inst1 ::doctools::id
  x::import::Snit_inst1::fmt-docidx ::doctools::idx::import::Snit_inst1::..."
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 $command $args"
      invoked from within
  "$plugin load $format"
      (procedure "::doctools::idx::import::Snit_methodGetPlugin" line 12)
      invoked from within
  "::doctools::idx::import::Snit_methodGetPlugin ::doctools::idx::import ::doctool
  s::idx::import::Snit_inst1 ::IN ::IN docidx"
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 $command $args"
      invoked from within
  "$self GetPlugin $format"
      (procedure "::doctools::idx::import::Snit_hmethodimport_text" line 7)
      invoked from within
  "::doctools::idx::import::Snit_hmethodimport_text ::doctools::idx::import ::doct
  ools::idx::import::Snit_inst1 ::IN ::IN {[index_begin KWIC INDEX]
  [inde..."
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 $command $args"
      invoked from within
  "$myimporter import text $data $format"
      (procedure "::doctools::idx::Snit_methodImport" line 17)
      invoked from within
  "::doctools::idx::Snit_methodImport ::doctools::idx ::doctools::idx::Snit_inst90
   ::I ::I docidx {[index_begin KWIC INDEX]
  [index_end]
  }"
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 $command $args"
      invoked from within
  "$self Import $format $data"
      (procedure "::doctools::idx::Snit_hmethoddeserialize_=" line 19)
      invoked from within
  "::doctools::idx::Snit_hmethoddeserialize_= ::doctools::idx ::doctools::idx::Sni
  t_inst90 ::I ::I {[index_begin KWIC INDEX]
  [index_end]
  } docidx"
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 $command $args"
      invoked from within
  "I deserialize = $data docidx"
      ("uplevel" body line 2)
      invoked from within
  "uplevel 1 $script"
  ---- errorCode: NONE
  ==== doctools-idx-50.0.1 FAILED


tkt_uuid: 500654ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Duplicate
title: man pages not formatted
comment:
  On some systems (at least mine) the tcllib man pages
  cannot be displayed with the normal 'man csv' command.

  Instead the formatted page, only a lot of error
  messages  showed up.

  make install works smoothly.

  man.macros is in place.

  It seems, the problem is the inclusion of man.macros
  into the tcllib man pages with the instruction
  .so man.macros

  If I copy the context of man.macros directly into the
  man page and remove the '.so man.macros' instruction,
  everything works.

  The tcl core man pages have man.macros literaly
  included and work smoothly. The inclusion is done by a
  sed command during the installation process. Out of
  Tcl8.3.4 Makefile on Linux (after ./configure):

          @echo "Installing command (.n) docs";
          @cd $(TOP_DIR)/doc; for i in *.n; \
              do \
              rm -f $(MANN_INSTALL_DIR)/$$i; \
              sed -e '/man\.macros/r man.macros' -e
  '/man\.macros/d' \
                      $$i > $(MANN_INSTALL_DIR)/$$i; \
              chmod 444 $(MANN_INSTALL_DIR)/$$i; \
              done;

  (see target install-doc).


tkt_uuid: 3477684fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: crc
priority: 5 Medium
foundin: None
resolution: Fixed
title: CRC of binary string: bad parsing
comment:
  Calculating the CRC of a binary string can break the library.
  This happens when the input binary string includes the ASCII code for text symbol '-'.
  The proc parsing the input data breaks the input binary string into options because of '-'
  See attached file with example.


tkt_uuid: 1196567fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: app: tkchat
priority: 5 Medium
foundin: None
resolution: Accepted
title: Automatic clean-up of the NickList
comment:
  This adds automatic removal of old nicks and 
  associated data (ie Color and Visibility) from the 
  resource file.
  Old nicks are removed after 30 days of non-usage, 
  except for your own. This is done through the 
  addition of a time stamp to the nick in the NickList.

  The 30 days is hard-coded but it should be easy 
  enough to make it into a configurable menu option.

  Old resource files are automatically updated to the 
  new format.


tkt_uuid: 3167244fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: hook(n) man page renders incorrectly
comment:
  The hook man page renders incorrecty in the REFERENCE section. There is a staircase effect which sends output to the right.
  Attached is the result of "man n hook > hook.txt"
  Error messages on stderr are:
  $ man n hook > hook.txt
  <standard input>:385: warning: macro `CE:' not defined (probably missing space after `CE')
  <standard input>:424: warning: macro `CE,' not defined (probably missing space after `CE')
  <standard input>:437: warning: macro `CE,' not defined (probably missing space after `CE')
  <standard input>:449: warning: macro `CE.' not defined (probably missing space after `CE')
  <standard input>:543: warning: macro `CE,' not defined (probably missing space after `CE')


tkt_uuid: 1720896fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: general request
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: test suite enhancement - bug report files
comment:
  I'd like to request that, as a part of the tcllib test suite, one or more files be generated when tests fail, that would contain information formatted in such a way as to make submission of the bugs to the web site relatively trivial.

  In this way, after someone runs the tests, they could, if they so wanted, pop over to the sf.net site and submit a series of bug reports on problems seen.


tkt_uuid: 2192812fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: inifile
priority: 5 Medium
foundin: None
resolution: Out of Date
title: commentchar function not defined in ini namespace
comment:
  man page for inifile has the commentchar function as 

  ini::commentchar ?char? 

  but code has 

  proc commentchar { {new {} } } { ..

  need to change the above line to : 


  proc ::ini::commentchar { {new {}} } {

  in inifile.tcl


tkt_uuid: 626819ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: incomplete doc for tree
comment:
  In the docs for tree the "widget command" 
  for "pathName find findInfo ?confine?" (an interesting and 
  needed function) and
  "pathName line node" (if that is public function?) is 
  missing.


tkt_uuid: 769871ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Wont Fix
title: 2 apparent protocol violations
comment:
  These may not matter but as I'm troublshooting
  obscure failures they come to my attention.

  Disclaimer: I haven't coded much with smtp/mime so my 
  authority for these claims is the O'Reilly 
  book "Programming Internet Email", David Wood.

  1. Wood says the headers for MIME parts should never 
  contain the MIME-version header. Yet they do appear.

  2. Boundary strings should never include '=' yet they do.

  Woods also comments that Content-ID is optional and 
  rare and must be world-unique. Is there value in tcllib 
  mime generating this header?

  Thanks for any clarification,
  Roy Terry
  (still stuck with premature socket close when reloading 
  the mime parts from a file)


tkt_uuid: 567079ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: `make dist` recursion
comment:
  A `make dist` in the top directory of tcllib
  leads to infinite recursion of copying tcllib
  files into a subdirectory, then that subdir
  into its subdir. etc.

  Simple workaround, and better practice, is
  to do builds from another directory, but it's
  common for people to build in the source
  directory, and if they `make dist` they
  will fill their disks.


tkt_uuid: 2225148fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: struct :: list
priority: 3 Low
foundin: None
resolution: Not Applicable Here
title: struct::list test suite problems against tcl 8.6 cvs head
comment:
  I understand there is no use trying to keep tcllib up to date with a moving target. I just wanted to bring this up so that someone could be thinking about it.

  Tcl 8.6 cvs head (as of yesterday)
  tcllib cvs head 

  ==== assign-4.4 assign method FAILED
  ==== Contents of test case:

      catch {assign {foo bar}} msg ; set msg

  ---- Result was:
  foo bar
  ---- Result should have been (exact matching):
  wrong # args: should be "::struct::list::Lassign list varName ?varName ...?"
  ==== assign-4.4 FAILED

  ==== repeat-4.2 repeat command FAILED
  ==== Contents of test case:

      catch {repeat a} msg
      set msg

  ---- Result was:
  expected integer but got "a"
  ---- Result should have been (exact matching):
  wrong # args: should be "::struct::list::Lrepeat positiveCount value ?value ...?
  "
  ==== repeat-4.2 FAILED
  ==== repeat-4.4 repeat command FAILED
  ==== Contents of test case:

      catch {repeat 0 b} msg
      set msg

  ---- Result was:

  ---- Result should have been (exact matching):
  must have a count of at least 1
  ==== repeat-4.4 FAILED

  ---- repeat-4.5 start

  ==== repeat-4.5 repeat command FAILED
  ==== Contents of test case:

      catch {repeat -1 b} msg
      set msg

  ---- Result was:
  bad count "-1": must be integer >= 0
  ---- Result should have been (exact matching):
  must have a count of at least 1
  ==== repeat-4.5 FAILED


tkt_uuid: 1643952fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Out of Date
title: CommRunHook evaluates event hooks twice
comment:
  It seems there was a change between the 4.3 and 4.4 versions to execute event hooks from CommRunHook instead of inside each of the individual event procs.  Inside CommRunHook, the event callback is executed using 'eval $cmd'.  Because of this, some of the variables advertised as being in scope for the callback script are not in scope (i.e. for a connect event fid, addr, and remport).  Replacing the 'eval $cmd' line inside CommRunHook with 'uplevel 1 $cmd' fixes this issue.


tkt_uuid: 1104059fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: pop3
priority: 3 Low
foundin: None
resolution: Not Applicable Here
title: Allow easy use of TLS with pop3
comment:
  As more and more services allow to use POP3 with
  SSL/TLS it would be a nice move to support SSL within
  the POP3 package.

  For SSL enabled servers listening only on an SSL port
  this is trivial, just use the tls::socket instead of
  the normal one for the connect.

  Using the POP3 STLS Command (StartTLS), is a bit more
  complex, but not that hard to do, its just an extra
  step in authentification and some logic to do a
  tls::import on the open channel.

  Michael


tkt_uuid: 815405ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: pop3::top Hangs under wish/tkcon
comment:
  I have a script that runs fine under tclsh84.
  When run by wish it hangs and then begins to
  take 100% of cpu. May work with 1 or 2 messages but 
  hangs consistently with more.

  I haved tried supplying a bgerror handler and supplying  
  a do-nothing log::log proc. Still hangs when

  Script attached

  INPUT: (add to top of script)
  mailserver
  login
  pass


  Windows 2000
  Tcl/Tk 8.4.2


tkt_uuid: 2018141fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: ldap
priority: 5 Medium
foundin: None
resolution: Accepted
title: Reimpl. of search filter strings parsing/encoding
comment:
  This patch reimplements parsing and encoding of search filter strings, namely:
  * Implemented proper syntax parsing using regexps only when really applicable. The parser appears to be enough robust for errors in filter specifications.
  * Options in attribute descriptions are now permitted (but not used, see below).
  * Implemented full support for extensible match rules.

  Test suite with pretty complete coverage for this code is also provided.

  Other changes include:
  * Removed artifical restriction of permitted types of search result PDUs: this removes module misbehaving when presented with a PDU tagged with apptype 19 (search continuation).
  * Fixed RFC number in leading commend in ldap.tcl.
  * Added Vim modelines to ldap.tcl and ldap.test to force braindamaged indentation mode used in these files.

  This patch should fix bugs 1751871 and 1852718.

  The ldap module with this patch applied works for me against Windows Server 2003 LDAP directory.

  Note on options: while LDAP RFCs mention one standard attribute description option "binary" which requires special encoding when transmitting associated attribute values, I failed to understand both its applicability to client requests and whether its usage has any sense in search representation of filter strings. So the proposed implementation parses it, but does nothing besides this.


tkt_uuid: 526833ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: Missing commands example_begin/_end
comment:
  In the current official release the commands
  "example_begin" and "example_end" are missing from the
  doctools module. These commands are available in the
  development branch, but as they provide the best means
  for showing code, they should be available in the
  release version.


tkt_uuid: 2340320fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: Entry invoke is not reachable
comment:
  Hi (very) Dear Tcl maintainers !

  The _path_command of the Entry widget 
  does not take into account for the 
  invoke command.

  () 49 % package require BWidget
  1.8
  () 50 % Entry .myentry
  .myentry
  () 52 % catch {.myentry invoke} errmsg
  1
  () 53 % puts $errorInfo
  bad option "invoke": must be bbox, cget, configure, delete, get, icursor, index, insert, scan, selection, validate, or xview
      while executing
  ".myentry:cmd invoke"
      ("eval" body line 1)
      invoked from within
  "eval [linsert $larg 0 $path:cmd $cmd]"
      (procedure "Entry::_path_command" line 5)
      invoked from within
  "Entry::_path_command .myentry $cmd $args"
      (procedure ".myentry" line 1)
      invoked from within
  ".myentry invoke"


  The _path_command should be updated to

  proc Entry::_path_command { path cmd larg } {
      if {\
           [string equal $cmd "configure"] || \
           [string equal $cmd "cget"] || \
           [string equal $cmd "invoke"] \
           } {
          return [eval [linsert $larg 0 Entry::$cmd $path]]
      } else {
          return [eval [linsert $larg 0 $path:cmd $cmd]]
      }
  }

  Best regards,

  Michaël


tkt_uuid: 511689ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Duplicate
title: man page formatting problem found
comment:
  the mime map page had a formatted command inside of a
  line of text, where it was not being observed.
  I am attempted to append a patch for the problem.


tkt_uuid: 1329212fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 8
foundin: None
resolution: Fixed
title: Many test failures in module pop3
comment:
  Please, find the log-file attached. Any fixes for the
  code and/or tests would be highly appreciated.

  I'm seeing these on FreeBSD-6/amd64.

  pop3d tests, seem fine, however.


tkt_uuid: 717594ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: dns
priority: 8
foundin: None
resolution: Fixed
title: bgerror in dns::TcpEvent
comment:
  if a dns reply comes back that is too short (e.g.,
  server doesn't wait for tcp connection to gracefully
  drain, the call to "binary scan" won't create variable
  "id" and "flags", which will cause a bgerror to get
  thrown when those variables are references a few lines
  later.


tkt_uuid: 1385688fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: pop3 - New retrieval method + minor performance improvement
comment:
  Attached is the entire pop3.tcl with the proposed 
  changes.  I took the liberty of bumping up the 
  version from 1.6.3 to 1.7.  Note that this code has 
  actually been in operation for almost two years.

  First a minor performance improvement in RetrFast - 
  don't spend time splitting potentially large message 
  if not doing any debug logging.

  Second is a new retrieval method - tofile.
  Since POP3 messages can be very large, with 
  attachments that may never need to be processed in 
  tcl, to minimize memory usage, it may be best to 
  write the retrieved message to a temp file and return 
  the temp filename instead of the entire message.

  # Alex Hisen (alex@am.net) 2005-12-18:
  # In order to provide support for the new tofile 
  retrieval method
  # we need a way to generate temporary file 
  paths/names.
  # We first try to use an AOLserver command if 
  available.
  # If not we try to see if our version of Tcl supports
  # the file tempfile subcommand (see TIP #210:
  # http://www.tcl.tk/cgi-bin/tct/tip/210.html )
  # Finally we fallback to the tcllib fileutil package.
  # Note that our package require fileutil is caught, 
  so even
  # if you don't have any of the three methods, this 
  package
  # will work fine as long as you don't use tofile 
  retrieval.
  #
  # The Tempfile proc we create in our namespace 
  operates
  # the way TIP #210 prescribes - it opens the file for 
  write,
  # returns the open file channel, and sets the 
  supplied variable
  # to the full path and name of the created temporary 
  file. 


tkt_uuid: 476729ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Fixed
title: documentation bug regarding DisplayMsg
comment:
  andreas kupries requested that i log this doc bug
  against ftp.  Additional information about the
  DisplayMsg aspects of the ftp module are available at
  http://mini.net/cgi-bin/wikit/2444.html .  These are
  needed in the man page.


tkt_uuid: 3035014fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: uuid
priority: 5 Medium
foundin: None
resolution: Wont Fix
title: "uuid::generate" returns binary data
comment:
  UUID 1.0.1 returns binary data and not a string representation of the UUID:
          % package require uuid
          1.0.1
          % uuid::generate
          ß4:GjK@QÐ2E`Á

  http://tcllib.sourceforge.net/doc/uuid.html


tkt_uuid: 472009ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Fixed
title: mime/smtp/Trf
comment:
    mime/smtp/Trf package bug

    the proc "smtp::wdata(949)" got a command
  "create/read" form procedure
    "transform(902)". This command is not supported

  <-- 220 linux02.otto-net ESMTP Sendmail
  8.11.2/8.11.2/SuSE Linux 8.11.1-0.5; Wed, 17 Oct 2001
  10:47:02 +0200
  --> EHLO localhost (wait upto 300 seconds)
  <-- 250-linux02.otto-net Hello localhost [127.0.0.1],
  pleased to meet you
  <-- 250-ENHANCEDSTATUSCODES
  <-- 250-8BITMIME
  <-- 250-SIZE
  <-- 250-DSN
  <-- 250-ONEX
  <-- 250-ETRN
  <-- 250-XUSR
  <-- 250 HELP
  --> ONEX (wait upto 300 seconds)
  <-- 250 2.0.0 Only one transaction
  --> MAIL FROM:<dev2usr@linux02> (wait upto 600 seconds)
  <-- 250 2.1.0 <dev2usr@linux02>... Sender ok
  --> RCPT TO:<dev1usr@linux02> (wait upto 3600 seconds)
  <-- 250 2.1.5 <dev1usr@linux02>... Recipient ok
  --> DATA (wait upto 300 seconds)
  <-- 354 Enter mail, end with "." on a line by itself
  Call: smtp::wtextaux ::smtp::1 ::mime::1
  Call: smtp::wdata ::smtp::1 create/write {}
  Call: smtp::wdata ::smtp::1 create/read {}
  --> RSET (wait upto 0 seconds)
  --> QUIT (wait upto 0 seconds)
  Unknown command "create/read"
      while executing
  "error "Unknown command \"$command\"""
      ("default" arm line 2)
      invoked from within
  "switch -- $command {
          create/write
              -
          clear/write
              -
          delete/write {
              set state(crP) 0
          ..."
      (procedure "smtp::wdata" line 8)
      invoked from within
  "smtp::wdata ::smtp::1 create/read {}"
      invoked from within
  "transform -attach $state(sd) -command [list
  smtp::wdata $token]"
      (procedure "smtp::wtextaux" line 11)
      invoked from within
  "smtp::wtextaux $token $part "
      invoked from within
  "smtp::sendmessage $M1  -debug  yes     \
                                                  -header
  [ list To "Dev1Usr <dev1usr@linux02>" ] \
                                                  -header
  [ list From "Andreas Otto <dev2usr@linux02>..."


tkt_uuid: 1267112fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: doctools - Add table support
comment:
  When composing the units man page, I used [example] to
  format the tables of units, because that appeared
  similar to preformatted, and was the only way I saw to
  make a table.

  It would be better if doctools supported [table]
  commands.  The html, latex, and nroff engines could be
  extended to support table output.  Tmml and wiki
  formats don't support tables, so those engines would
  have to generate some equivalent, perhaps preformatted,
  output.


tkt_uuid: 792619ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Duplicate
title: tk binding problem in Gnome and Ximian
comment:
  I am having a problem binding the double click event to 
  a tk listbox
  which is embedded in BWidget frames. The code works in 
  KDE and in a
  VNC viewer, however. When I double-click, it does 
  nothing but highlight the selected item
  in the listbox. When I change the binding event in my 
  code to
  single-click, it works correctly, however. I tried to move 
  the custom
  bindtag before the class bindings, however I'm receiving 
  the same
  behavior.


  Code snippet ...
  ...
  ...

  #! /usr/bin/wish

  set rt [catch {set version [package require BWidget]} 
  err]
  if {$rt != 0 } {
   tk_messageBox -icon error -type ok -title "Missing 
  BWidgets" -message
  \
    "Missing BWidgets package."
   exit
  }
   
  set tlist [list  "element1" "element2"]
  set mainframe [MainFrame .mainframe]
   
  # NoteBook creation
  set frame    [$mainframe getframe]
  set notebook [NoteBook $frame.nb]

  # Create Top-level tab frames 
  set components_frame [$notebook insert end tab1 -
  text "Tab1"]
  # Create subordinate tab frames
  set components_nb [NoteBook 
  $components_frame.components_nb]
  set frame [$components_nb insert end tab2 -text "Tab2"]
  set topf  [frame $frame.topf]

   # Paned Windows
  set pw1   [PanedWindow $topf.pw -side top]
  set pane  [$pw1 add ]
  set pw2   [PanedWindow $pane.pw -side left]
  set tpane [$pw2 add -weight 3]

  # Major subframes
  set tbox [TitleFrame $tpane.tbox -text "Widgets"]

  # Placing layout frames and major subframes
  pack $tbox -padx 2 -side left -fill both -expand yes
  pack $pw1 -fill both -expand yes
  pack $pw2 -fill both -expand yes 
  pack $topf -fill both -expand yes 

  # Types listbox
  set sw_t       [ScrolledWindow [$tbox getframe].sw -
  auto both]
  set tlistbox [listbox [$sw_t getframe].lb -height 18 -
  width 20 \
   -highlightthickness 0 -listvar ::tlist] 
  $sw_t setwidget $tlistbox
  bindtags $tlistbox [linsert [bindtags $tlistbox] 3 
  tlist_Tag]  
  bind tlist_Tag <Double-Button-1> {puts HI}

  pack $sw_t -fill both -expand yes

  $notebook compute_size
  pack $notebook -fill both -expand yes -padx 4 -pady 4
  $notebook raise [$notebook page 0]

  $components_nb compute_size
  pack $components_nb -fill both -expand yes -padx 4 -
  pady 4
  $components_nb raise [$components_nb page 0]

  pack $mainframe -fill both -expand yes


tkt_uuid: 643337ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: html
priority: 5 Medium
foundin: None
resolution: Fixed
title: ::html::textInput does not process args
comment:
  The documentation for ::html::textInput reads:

  ::html::textInput name args
  Generate an INPUT form tag with type TEXT. This uses
  ::html::formValue. The args is any additional tag
  attributes you want to put into the INPUT tag.

  However, it takes args as the value of the text entry.

  For example: 

      ::html::textInput foo width=40

  generates:

      <input type="text" name="foo" value="width=40"
  size="45">

  Instead of:

     <input type="text" name="foo"  size="45"width=40>


tkt_uuid: 1274120fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: crc
priority: 5 Medium
foundin: None
resolution: Fixed
title: package overwrites ::v
comment:
  The crc packages writes to
  the variable "v" without
  resolution control.  This means
  if a variable ::v exists, it will be
  overwritten by the crc16 and
  crc32 packages.

  Attached patch corrects
  the problem.

  Patch also adds int(.)
  coercion protection to
  the calculation of signbit
  to avoid trouble if/when
  Tcl converts to supporting
  bignums.


tkt_uuid: 1655119fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tar
priority: 5 Medium
foundin: None
resolution: Fixed
title: Possible permissions problem with tar
comment:
  (Some of this was posted to comp.lang.tcl):

  I have a simple script that uses the tcllib tar command.  It tar creates a tar file containing a directory.  The directory contains subdirectories.  Each of those sub-directories contain the following
  sub-directories:

  exec/
  export/
  server/
  lib/

  The directory tree looks this way:

  devdir_4.1/
          subdir1/
                     exec/
                              bin/
                                  file1
                                  file2
                                  file3

                     export/
                                  file1
                                  file2
                                  file3

                     lib/
                                  file1
                                  file2
                                  file3

                     server/
                              bin/
                                  file1

          subdir2/
                     exec/
                              bin/
                                  file1
                                  file2
                                  file3
                     export/
                                  file1
                                  file2
                                  file3

                     lib/
                                  file1
                                  file2
                                  file3

                     server/
                              bin/
                                  file1

  ...  etc

  The problem I am having is that it is not archiving the exec/ directory.   The export/ directory does contain some of the same executables that are located in the exec/ directory.  But, when you do a tar tvf on the tarfile that is created, there is one instance of the
  exec directory in one of the subdirs, but none of the others.  It's as if the exec/ directory gets passed over.

  Here is my script:

  #!/usr/bin/tclsh

  lappend auto_path /export/kdp/dev/tcl/lib
  package require tar

  ::tar::create tarball.tar devdir_4.1 

  I got an e-mail respnse from an Aaron F. requesting a tarball so he could look at the problem.  Because of company proprietary issues, I could not send the originals.  So, I dummied up a set of files in a tarball.  I created a directory structure that contained files from /bin and /lib (on my linux box) to simulate the kind of files each directory contained.  When I ran the script against the new tarball, it worked just fine.  So, apparently, there is  something else weird going on.    I'm thinking now it may be some sort of permissions problem.  Other notes of interest:

  - I am grabbing files from across a local network via NFS.
  - None of the files are symbolically linked.
  - The directory that I am tarring from was populated by various operating systems (Solaris, HP-UX, Linux, AIX).

  Thanks for your great work.  
  Have a nice day,
  Keith Pickett


tkt_uuid: 498104ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Invalid
title: Add -textvariable to ProgressBar
comment:
  We needed to include text above a progress bar (as there is a progress dialog) for "xx% complete", 
  etc.  This seemed a general enough need that we patched progressbar.tcl rather than write our 
  own wrapper.  Here's the patch.


tkt_uuid: 620753ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: New options for labelframe
comment:
  Hi,

  The BWidget LabelFrame widget uses a BWidget Label
  widget to display a label or a frame. Currently only a
  -text option is available to set the text of the label
  frame. This patch will also provide the -textvariable,
  -image and -bitmap options to set the label text or
  image.

  Jos.


tkt_uuid: 2941841fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: htmlparse
priority: 5 Medium
foundin: None
resolution: Fixed
title: htmlparse crashes on really badly formed html
comment:
  % htmlparse::parse  "<a<a/>>" 
  extra characters after close-brace

  The string being parsed here is nonsense.  I'm not sure what a sane way to parse it would be.  Perhaps as a singleton tag named "a<a" followed by a naked ">".

  Erroring out is undesirable, because it doesn't attempt to do any partial parsing.


tkt_uuid: 861721ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: nntp
priority: 5 Medium
foundin: None
resolution: Fixed
title: NNTP is binary, yEnc is being corrupted
comment:
  Because of yEnc, binary must be downloadable.

  I have an 'expect' program to download a newsgroup,
  and I can make a lot of criteria choices based on the
  headers. The main purpose is to download pictures,
  then I use uudeview and xv next. I've used it forever,
  and wrote it before there was an nntp.tcl.

  95% of the yEncs were corrupted. I thought it was Usenet
  servers along the way doing the corruption. Recently I started
  downloading again, and now a high percentage of pictures are
  in yEnc format. Because I was getting almost nothing now, I
  investigated.

  I'm on a new dual-G5 running Unix. When I tried Netscape
  on this box, the yEncs were decoding. When I saved one of
  those to a file and compared it to my program's download,
  there was corruption alright. It apparently has to do with
  'expect' using Tcl's Unicode expectations. I tried adding
  'fconfigure's, but it didn't affect 'expect'.

  I decided to rewrite my program using the NNTP procs, and
  it was still corrupted. Then I added this line after the one
  'socket' command in nntp.tcl:

  fconfigure $sock -encoding binary

  Finally, yEncs were no longer being corrupted.

  tcllib 1.5 from TclTKAquaWithBatteries.


tkt_uuid: 1076923fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Fixed
title: ftp::close failing
comment:
  I'm consistently getting an error while 
  calling ::ftp::close after downloading multiple files. The 
  error message reads 
    error reading "sock1868": connection reset by peer 
    while executing "gets $sock bufline" 
    (procedure "::ftp::StateHandler" line 16)


  I dug into this a bit and it appears to be a timing error.. 
  It occurs after a "QUIT" has been sent to the server 
  and ::ftp::StateHandler is trying to read the goodbye 
  lines but the connection gets reset before it can do so.

  The simplest solution two fold: first wrap the "gets" in a 
  catch and setting number to 0 when it fails. Second, in 
  the error handling code don't give error 
  message "Service not available" if $ftp(State) 
  eq "quit_sent". I've attached a file with the updated 
  procedure with the fix.

  An annoying aspect of this bug is that it occurs in a 
  background handler and there's a vwait that doesn't get 
  satisfied--effectively making this uncatchable.


tkt_uuid: 1242740fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Fixed
title: Error in tkcat::addAction
comment:
  In the wild, with tkchat v1.301 I got abrupt the error:


  can't read "tags": no such variable
  can't read "tags": no such variable
      while executing
  "$w insert $mark "\n" $tags"
      (procedure "::tkchat::addAction" line 38)
      invoked from within
  "::tkchat::addAction .txt $color $nick $msg $mark
  $timestamp $opts"
      (procedure "::tkjabber::parseMsg" line 47)
      invoked from within
  "::tkjabber::parseMsg $from $m(-body) $color end
  $timestamp"
      ("groupchat" arm line 23)
      invoked from within
  "switch -- $type {
          chat {
              set from $m(-from)
              set w .txt
              set name $from
              if { [regexp {([^/]+)/(.+)} $m(-from) ->
  conf name] } {
                  i..."
      (procedure "::tkjabber::MsgCB" line 42)
      invoked from within
  etc.


  Can't say, what triggered this, but it seems, that
  tkchat::addAction is too credulous. In the line 

    $w insert $mark "\n" $tags

  it depends on the variable tags to exist. But this
  variable is only set within this foreach loop in the proc:

      foreach { str url } [parseStr $str] {
         ....
      }

  which will run 0 times, if [parseStr] returns the empty
  list (which is possible, as a look at that proc shows
  and the error msg demonstrates), let tags unset.

   


tkt_uuid: 534334ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 8
foundin: None
resolution: Fixed
title: add tk-specific man page macro: tkoption
comment:
  standard tk widget man pages have a section 
  named "Widget Specific Options" that has a format that 
  is tedious to code with the existing mpexpand formats. 
  Options are typically described like this:

  -----------------------
  Command-Line Name: -value
  Database Name: value
  Database Class: Value


  Specifies the value for the foo widget.
  -----------------------

  To mark this up with the existing man page markup one 
  needs to create a definitions list for the list of 
  option names, which is tedious. I suppose there are 
  other ways, too. 

  I propose a special keyword just for this construct. 
  I've written one for the html renderer as a prototype. 
  It is used like this:

  ------------------------
  [tkoption -value value Value "Specifies the value for 
  the foo widget."]
  ------------------------

  It takes four arguments: the command line name, the 
  database name, the database class, and a description. 
  The description could be left off of the API, since 
  normal paragraphs would work, too. In my prototype 
  implementation, if the db name or class is null, those 
  parts don't appear in the output. This, for 
  megawidgets that may not have option database support.

  I've attached my hacked version of fmt.html with the 
  proposed macro. To make it work, one also needs to add 
  the macro to a foreach command in mpexpand where it 
  makes interp aliases for each of the macros. I don't 
  know if this is the best implementation, but it's a 
  starting point...


tkt_uuid: 886385ffffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: control
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Enhanced do...while|until [prefix] [suffix] Control Structur
comment:
  This one came out of my customer demand! Pat Thoyts 
  and Donal K. Fellows suggested me to submit it here.

  The submission is in form of a TIP. Please search 
  for "sample implementation" to get to the code.

  Please also see at the end of it, untried version of tests. 
  Please search for "tests for do" to get to the code

  TIP 
  Title 
  Enhanced do...while|until [prefix] [suffix] Control 
  Structure 
  Version 
  $Revision: 1.4 
  Author 
  Bhushit Joshipura 
  State 
  Draft 
  Type 
  Project 
  Vote 
  Pending 
  Created 
  20-Jan-2004 
  Keywords 
  control structure, do, while, until, prefix, suffix 
  ~ Abstract 
  This TIP proposes the introduction of an enhancement 
  on do...while|until control structure already present in 
  TCLLib. It proposes to add prefix statement list and 
  suffix statement list to prepend and append to 
  statement body of do...while|until for the "while" part 
  (second loop onwards) of the loop. 
  ~ Rationale 
  Theoretically only two controls - if and goto - are 
  sufficient to implement all algorithms. However, 
  languages provide more control structures for better 
  representation of algorithms. 
  do...while|until is a useful structure in itself for parsing, 
  file reading etc. With little pain, a while loop does the 
  job too. However, when it comes to nesting, 
  do...while|until into another, equivalent while loop starts 
  becoming clumsier. 
  In situations where do...while|until is used in testing, if 
  the statement body of do...while|until changes state of 
  entity being tested, next iteration is bound to have side 
  effects. At that time, proposed prefix and suffix 
  statements come handy. 
  While it is still possible to handle all of these in a while 
  loop, nesting becomes a nightmare. 
  Proposed solution is more elegant, in spirit of 
  do...while|until's spirit of treating first pass specially. 
  ~ Implementation in Other Languages 
  C, C++, Java, Pascal have do...while. Perl has 
  do...while|until. Python does not have any equivalent. 
  ~ Grammar and Behavior 
  |do { 
  | 
  |} while|until { } [ prefix { }] [suffix { statements2>}] 
  1. are executed 
  2. while|until is evaluated 
  3. while associated are true ( or until are false ) 
  3.1 are executed 
  It is necessary to specify one and only one of "while" 
  or "until" with proper condition block following it. 
  ~Sample Invocations 
  set x 1 
  |do { 
  |    puts "Hello world!" 
  |    incr x 
  |} until { $x > 3 } prefix { 
  |    puts "prefix begin" 
  |    puts $x 
  |    puts "prefix end" 
  |} suffix { 
  |    puts "suffix begin" 
  |    puts $x 
  |    puts "suffix end" 
  |} 
  ~Contrast 
  Contrast above code with its while loop equivalent 
  |set x 1 
  |set firsttime "yes" 
  |while { $x <= 3 } { 
  |    if { $firsttime == "no" } { 
  | puts "prefix begin" 
  | puts $x 
  | puts "prefix end" 
  |    } 
  |    puts "Hello world!" 
  |    incr x 
  |   if { $firsttime == "no" } { 
  | puts "suffix begin" 
  | puts $x 
  | puts "suffix end" 
  |    } 
  |    set firsttime "no" 
  |} 
  ~Sample Implementation 
  |# do.tcl -- 
  |# 
  |#        Tcl implementation of a "do ... while|until" loop. 
  |#        Once first iteration gets over, body can be 
  augmented using prefix or suffix 
  |# 
  |# Originally written for the "Texas Tcl Shootout" 
  programming contest 
  |# at the 2000 Tcl Conference in Austin/Texas. 
  |# 
  |# Copyright for TCLLib implementation was 
  |# Copyright (c) 2001 by Reinhard Max 
  |# 
  |# Added prefix and suffix by Bhushit Joshipura, 
  December 15, 2003 
  |# Bhushit does not know what happens to copyrights 
  |# 
  |# See the file "license.terms" for information on usage 
  and redistribution 
  |# of this file, and for a DISCLAIMER OF ALL 
  WARRANTIES. 
  |# 
  |# 
  |namespace eval ::control { 
  | 
  |    proc do {body args} { 
  | 
  | # 
  | # Implements a "do body while|until test [ [prefix | 
  suffix] bodyparts ]" loop 
  | # 
  | # It is almost as fast as builtin "while" command for 
  loops with 
  | # more than just a few iterations. 
  | # 
  | 
  | set len [llength $args] 
  | if {$len != 6 && $len != 4 && $len !=2 && $len != 0} { 
  |     set proc [namespace current]::[lindex [info level 0] 
  0] 
  |     return -code error "wrong # args: should be \"$proc 
  body\" or \"$proc body \[until|while\] test\" or \"$proc 
  body \[until|while\] test \[ \[ prefix | suffix \] bodyparts 
  \]" 
  | } 
  | set test 0 
  | set bodyprefix "" 
  | set bodysuffix "" 
  | set whileOrUntil "" 
  | 
  | foreach { argument value } $args { 
  |     switch -exact -- $argument { 
  | "while" { 
  |     if { $whileOrUntil == "" } { 
  | set whileOrUntil $argument 
  | set test $value 
  |     } else { 
  | return -code error \ 
  |     "\"$argument\" found after \"$whileOrUntil\"" 
  |     } 
  | } 
  | "until" { 
  |     if { $whileOrUntil == "" } { 
  | set whileOrUntil $argument 
  | set test !($value) 
  |     } else { 
  | return -code error \ 
  |     "\"$argument\" found after \"$whileOrUntil\"" 
  |     } 
  | } 
  | "prefix" { 
  |     # last of prefix will be considered 
  |     set bodyprefix $value 
  | } 
  | "suffix" { 
  |     # last of suffix will be considered 
  |     set bodysuffix $value 
  | } 
  | default { 
  |     return -code error \ 
  | "bad option \"$whileOrUntil\": must be until, while, 
  prefix or suffix" 
  | } 
  |     } 
  | } 
  | 
  | # the first invocation of the body 
  | set code [catch { uplevel 1 $body } result] 
  | 
  | # decide what to do upon the return code: 
  | # 
  | #               0 - the body executed successfully 
  | #               1 - the body raised an error 
  | #               2 - the body invoked [return] 
  | #               3 - the body invoked [break] 
  | #               4 - the body invoked [continue] 
  | # everything else - return and pass on the results 
  | # 
  | switch -exact -- $code { 
  |     0 {} 
  |     1 { 
  | return -errorinfo [ErrorInfoAsCaller uplevel do]  \ 
  |     -errorcode $::errorCode -code error $result 
  |     } 
  |     3 { 
  | # FRINK: nocheck 
  | return 
  |     } 
  |     4 {} 
  |     default { 
  | return -code $code $result 
  |     } 
  | } 
  | 
  | set body [ format "%s\n%s\n%s" $bodyprefix $body 
  $bodysuffix ] 
  | 
  | # the rest of the loop 
  | set code [catch {uplevel 1 [list while $test $body]} 
  result] 
  | if {$code == 1} { 
  |     return -errorinfo [ErrorInfoAsCaller while do] \ 
  | -errorcode $::errorCode -code error $result 
  | } 
  | return -code $code $result 
  | 
  |    } 
  |} 
  ~Copyright 
  This document is placed in public domain. 


  Tests for do

  # do.test --
  #
  #         Tests for [control::do]
  # 
  # RCS: @(#) $Id: do.test,v 1.6 2003/05/01 22:40:13 
  patthoyts Exp $
  #

  package forget control
  catch {namespace delete control}

  # Direct loading of provide script -- support testing even
  # when not installed.  And be sure we test the local copy
  # and not some later version that may be installed.
  source [file join [file dirname [info script]] control.tcl]
  namespace import ::control::do

  package require tcltest
  namespace import -force 
  tcltest::test ::tcltest::cleanupTests

  # This constraint restricts certain tests to run on tcl 
  8.3+
  if {[package vsatisfies [package provide tcltest] 2.0]} {
      # tcltest2.0+ has an API to specify a test constraint
      ::tcltest::testConstraint tcl8.3plus \
          [expr {[package vsatisfies [package provide Tcl] 
  8.3]}]
  } else {
      # In tcltest1.0, a global variable needs to be set 
  directly.
      set ::tcltest::testConstraints(tcl8.3plus) \
          [expr {[package vsatisfies [package provide Tcl] 
  8.3]}]
  }

  # ----------------------------------------
  test {do-1.0} {do ... while} {
      set x 0
      do {incr x} while {$x < 10}
      set x
  } 10

  # ----------------------------------------
  test {do-1.1} {do ... until} {
      set x 0
      do {incr x} until {$x > 10}
      set x
  } 11

  # ----------------------------------------
  test {do-1.2} {break} {
      set x 0
      do {
  incr x
  if {$x == 5} {break}
      } until {$x == 10}
      set x
  } 5

  # ----------------------------------------
  test {do-1.3} {continue} {

      set x 0
      set xx [list]
      do {
  incr x
  if {$x == 5} {continue}
  lappend xx $x
      } until {$x == 10}
      set xx
  } {1 2 3 4 6 7 8 9 10}

  # ----------------------------------------
  test {do-1.4} {error} {
      catch {
  set x 0
  do {
      incr x
      if {$x == 5} {foo}
  } while {$x < 10}
      } result
      list $x $result
  } {5 {invalid command name "foo"}}

  # ----------------------------------------
  test {do-1.5} {return} {
      proc foo {} {
  set x 0
  do {
      incr x
      if {$x == 5} { return $x }
  } while {$x < 10}
      }
      set result [foo]
      rename foo ""
      set result
  } 5

  # ----------------------------------------
  test {do-1.6} {break in the first loop} {
      set x 0
      do {
  break
  incr x
      } while {$x < 10}
      set x
  } 0

  # ----------------------------------------
  test {do-1.7} {continue in the first loop} {
      set x 0
      set xx [list]
      do {
  incr x
  if {$x == 1} {continue}
  lappend xx $x
      } until {$x == 10}
      set xx
  } {2 3 4 5 6 7 8 9 10}

  # ----------------------------------------
  test {do-1.8} {error in the first loop} {
      set x 0
      catch {
  do {
      foo
      incr x
  } until {$x == 10}
      } result
      list $x $result
  } {0 {invalid command name "foo"}}

  # ----------------------------------------
  test {do-1.9} {[do ... while] with false condition} {
      set x 0
      do {
  incr x
      } while 0
      set x
  } 1

  # ----------------------------------------
  test do-1.10 {[do ... until] with true condition} {
      set x 0
      do {
  incr x
      } until 1
      set x
  } 1

  # ----------------------------------------
  test do-1.11 {third arg is neither while nor until} {
      set x 0
      catch {
  do {
      incr x
  } foo 1
  set x
      } result
      list $x $result
  } {0 {bad option "foo": must be until, or while}}

  # ----------------------------------------
  test do-1.12 {stack traces for errors in the first 
  iteration} {
      proc a {} b
      proc b {} {do c while 1}
      proc c {} d
      catch a
      set ::errorInfo
  } {invalid command name "d"
      while executing
  "d"
      (procedure "c" line 1)
      invoked from within
  "c"
      ("do" body line 1)
      invoked from within
  "do c while 1"
      (procedure "b" line 1)
      invoked from within
  "b"
      (procedure "a" line 1)
      invoked from within
  "a"}

  # ----------------------------------------
  test do-1.14 {stack traces for errors in subsequent 
  iterations} tcl8.3plus {
      proc a {} b
      proc b {} {
  set i 10
  do {
      incr i -1
      c $i
  } while {$i}
      }
      proc c {i} {if {$i==5} e}
      catch a
      set ::errorInfo
  } {invalid command name "e"
      while executing
  "e"
      (procedure "c" line 1)
      invoked from within
  "c $i"
      ("do" body line 3)
      invoked from within
  "do {
      incr i -1
      c $i
  } while {$i}"
      (procedure "b" line 3)
      invoked from within
  "b"
      (procedure "a" line 1)
      invoked from within
  "a"}

  # ----------------------------------------
  test do-2.0 {one-shot do} {
      set x 0
      do {incr x}
      set x
  } 1

  # ----------------------------------------
  test do-2.1 {one-shot do with break} {
      set x 0
      do {incr x; break; incr x}
      set x
  } 1

  # ----------------------------------------
  test do-2.2 {wrong no of arguments} {
      set x 0
      set res [catch {do {incr x} foo} ret]
      list $x $res $errorInfo
  } {0 1 {wrong # args: should be "::control::do body" 
  or "::control::do body [until|while] test"
      while executing
  "do {incr x} foo"}}

  # ----------------------------------------
  test do-2.3 {wrong no of arguments} {} {
      set res [catch do]
      if {[string match \
       {no value given for parameter "body" 
  to "do"*} \
       $::errorInfo]
      } then {
  set ::errorInfo {wrong # args: should be "do 
  body args"
      while executing
  "do"}
      }
      list $res $::errorInfo
  } {1 {wrong # args: should be "do body args"
      while executing
  "do"}}

  # ----------------------------------------
  test do-2.4 {one-shot do with error} {
      set x 0
      set res [catch {do {
  incr x
  foo
  incr x
      }}]
      list $x $res $::errorInfo
  } {1 1 {invalid command name "foo"
      while executing
  "foo"
      ("do" body line 3)
      invoked from within
  "do {
  incr x
  foo
  incr x
      }"}}

  cleanupTests

  if {[info exists ::argv0] && $::argv0 == [info script]} {
      # a proc that wastes some time
      proc something {n} {
  for {set i 0} {$i < $n} {incr i} {}
      }
      
      proc main {} {
  # run it for the first time to get it byte compiled
  something 1

  set payload {
      something 10
      incr x
  }
  puts "\nComparing performance of do-while, do-
  until and builtin while..."
  set format "%-8s : %20s for %4d iteration(s)."
  foreach c {1 10 5000} {
      puts ""
      foreach {descr script} {
  {do while} {do $payload while {$x < 
  $c}}
  {do until} {do $payload until {$x == 
  $c}}
  {while} {while {$x < $c} $payload}
      } {
  set x 0
  puts [format $format $descr [lrange 
  [time $script 1] 0 1] $x]
      }
  }
      }
      main
  }

  # Local variables:
  # mode: tcl
  # End:


tkt_uuid: 3606621fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Installation
priority: 5 Medium
foundin: None
resolution: Fixed
title: man pages collision with tcl-8.6.0
comment:
   package dev-tcltk/tcllib-9999 NOT merged
   * 
   * Detected file collision(s):
   * 
   * /usr/share/man/mann/zlib.n.xz
   * /usr/share/man/mann/variable.n.xz
   * /usr/share/man/mann/string.n.xz
   * /usr/share/man/mann/coroutine.n.xz
   * 
   * Searching all installed packages for file collisions...
   * 
   * Press Ctrl-C to Stop
   * 
  Some man pages from tcllib collide with tcl-8.6 installation.

   * dev-lang/tcl-8.6.0
   * /usr/share/man/mann/coroutine.n.xz
   * /usr/share/man/mann/string.n.xz
   * /usr/share/man/mann/variable.n.xz
   * /usr/share/man/mann/zlib.n.xz
   * 


tkt_uuid: 2819151fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Development Tools
priority: 5 Medium
foundin: None
resolution: Fixed
title: Link to SF webdav file upload form for releases
comment:
  The SF webdav file upload form for release archives is at.
  https://frs.sourceforge.net/webupload

  Save the info in the developer/release mgr docs.


tkt_uuid: 1392879fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: inifile
priority: 5 Medium
foundin: None
resolution: None
title: inifile: docs and code at odds
comment:
  The inifile docs for the open command say "Opens an INI
  file and returns a handle that is used by other
  commands. Mode has the same types as the open command.
  The default mode is r+."  But the code only allows
  r/w[+], not append mode.  


tkt_uuid: 460230ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct
priority: 5 Medium
foundin: None
resolution: None
title: there should be an 'exists -key xyz'
comment:
  There is no way to tell whether a node's key exists or
  not.  If you try and get it and it doesn't exist, it
  fails with an error.  There ought to be a command that
  you can use to see if it exists or not.


tkt_uuid: 454718ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: control
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Semephore
comment:
  With packages that provide a call back mechanism, it is
  possible to have many essentially background processes.
  Take the http:: package. It is possible to have many
  http::geturl requests running simultaneously, but there
  is really no default way to coordinate the call backs for
  the various open requests.

  A semephore package with the ability to wait on any
  number of call backs is desirable. Using a generic
  waitany routine would require that I be aware of the
  internal variables of the http package to wait on
  changes of these variables. Implimenting all of this in
  a single semephore package allows the same
  functionality without the need to have knowledge of the
  internals of a package.

  As a staring point I submit the following. There may
  have to be changes due to multi-threaded tcl code, but
  its a start none the less.

  #  semephore.tcl
  #  Impementation of semephores
  #
  #  Semephore::Signal token
  #  Semephore::Wait   ?pattern?   - returns token
  #  Semephore::Reset  token

  package provide SemephorePkg 2.1

  # 2.1 - October 22, 2000
  #     - fixed a bug that would result in a very slow
  memory leak

  namespace eval Semephore {
    variable SemData
    array set SemData {}
    variable SemAny 0

    namespace export Signal Wait Reset
  }


  # -------------------------------------------------
  Signal ----
  # Signal a semephore
  proc Semephore::Signal { SemToken } {
    variable SemData
    variable SemAny

    if {![info exist SemData($SemToken)]} then {
       set SemData($SemToken) 1
    } else {
       incr SemData($SemToken)
    }
    incr SemAny
  }

  # -------------------------------------------------
  Wait ----
  # Wait for a semephore
  # Note: Resetting a semephore does not signal it.

  proc Semephore::Wait { args } {
    variable SemData
    variable SemAny

    set Pattern [lindex $args 0]
    if {"$Pattern" == ""} then { set Pattern "*" }
    set FoundFlag 0
    set FoundName ""
    if {$SemAny != 0} then {
      foreach n [array names SemData $Pattern] {
        if {$SemData($n) > 0} then {
          set FoundName $n
          set FoundFlag 1
          break
        }
      }
    }
    while {!$FoundFlag} {
      vwait Semephore::SemAny
      foreach n [array names SemData $Pattern] {
        if {$SemData($n) > 0} then {
          set FoundName $n
          set FoundFlag 1
          break
        }
      }
    }
    if {[incr SemData($FoundName) -1] == 0} then {
      unset SemData($FoundName)
    }
    incr SemAny -1
    return $FoundName
  }

  # -------------------------------------------------
  Reset ----
  # Reset a semephore
  # Note: Resetting a semephore does not signal it.

  proc Semephore::Reset { SemToken } {
    variable SemData
    variable SemAny

    if {[info exist SemData($SemToken)]} then {
      incr SemAny -$SemData($SemToken)
    }
    set SemData($SemToken) 0
  }


tkt_uuid: 1079712fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Works For Me
title: listbox item selection abnormally cancelled
comment:
  Version: ACTIVETCL 8.4.8.0
               BWidgets 1.7

  When using multiple selection widgets like
  listbox/combobox...in a same window,
  if you mouse-click other ones like combobox
  and select something, the selected item
  in listbox will be unselected at once,
  and if you use command:
  "set sel [listbox_path curselection]"

  $sel will be an empty string.
  This potentially denies the usage of listbox with some 
  other stuff.


tkt_uuid: 3423097fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: smtp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: smtp lacks -timeout option
comment:
  There's a need for such option, to assure reliability for scipts using smtp client package. I made a simple "experiment": while sending a few mails simply pulled ethernet plug out of the socket - the script went "frozen" for several minutes (didn't measure...), until I plugged it in again. IMHO there should be possibility to give up ("-timeout x", where "-timeout 0" could mean "keep trying unlimited time"), And perhaps it could be improved a bit: to keep the entire script responsible, even in the case of network problems, like loss of connectivity?


tkt_uuid: 1536890fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ncgi
priority: 5 Medium
foundin: None
resolution: Duplicate
title: regexp usage is inefficient and can hang
comment:
  using regexp in ::ncgi::nvlist is slower that the 
  usage of string methods (although it looks better).
  regexp also causes problems with bigger data which can 
  cause ncgi to get stuck (try running it on big post 
  data).
  replace:

  if {![regexp -- (.*)=(.*) $x dummy varname val]} {
            set varname anonymous
            set val $x
        }


  with: 
  set idx [string last "=" $x]
  if {$idx==-1} {
     set varname anonymous
    set val $x
  } else {
      set varname [string range $x 0 [expr {$idx-1}]]
      set val [string range $x [expr {$idx+1}] end]
  }


tkt_uuid: 2872536fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
resolution: Fixed
title: stripPath checks partial path components
comment:
  Example:
  (woof) 51 % fileutil::stripPath c:/temp c:/tempx/foo/bar
  foo/bar

  Should return c:/tempx/foo/bar

  My guess is it does a prefix string comparison without checking if next char is a dir seprator or not.


tkt_uuid: 2038217fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: irc
priority: 5 Medium
foundin: None
resolution: Fixed
title: the irc package is misusing namespace variables
comment:
  The irc package neglects to use [variable] within the namespace eval to get the right scope in proc ::irc::connection.

  The following is an example:
  % set ::sock "I'm a global value"
  I'm a global value
  % source ./irc.tcl
  % set c [::irc::connection] 
  ::irc::irc0::network
  % set ::sock
  % 

  The following namespace variables should be used with [variable]:
  sock, dispatch, linedata, config, logger

  Right now this totally defeats the purpose of using a namespace.


  It also results in this interesting bug if the dispatch global variable exists.

  % set dispatch global
  % set c [irc::connection]
  can't array set "dispatch": variable isn't array

  You may want to check the bug tracker for similar bugs from existing globals that the irc package tries to overwrite.

  There may be more problems lurking in the irc package.


tkt_uuid: 3105412fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: csv
priority: 5 Medium
foundin: None
resolution: Duplicate
title: ::csv incorrect format implementation on LINE BREAK records
comment:
  Hi,

  Hope this post will allow you to fixe this annoying problem...

  Many thanks
  Cyril ROUX

  ===========
  According to "Network Working Group" (rfc4180 - October 2005) about CSV format :
  2.  Definition of the CSV Format
     6.  Fields containing line breaks (CRLF), double quotes, and commas
         should be enclosed in double-quotes.  For example:

         "aaa","b CRLF
         bb","ccc" CRLF
         zzz,yyy,xxx

  That is to say tcllib ::csv package have to take into account LINE BREAK the
  same way it manages separatorChar (,) and delimiterChar (")...

  ==========
  Especialy, bug can be fixed in "join" procedure by adding line break (\n) to
  match list of special characters (, and ") that generate quoting records :
  proc ::csv::join {values {sepChar ,} {delChar \"}} {
      set out ""
      set sep {}
      foreach val $values {
          if {[string match "*\[${delChar}$sepChar\n\]*" $val]} {
              append out $sep${delChar}[string map [list $delChar ${delChar}${delChar}] $val]${delChar}
          } else {
              append out $sep${val}
          }
          set sep $sepChar
      }
      return $out
  }

  ==========
  To reproduce this problem jus t create a matrix with records containing line break
  then dump it in a CSV file, then read CSV file back in TCL and consistency will be lost !

  lappend ::auto_path [file join  /sw/freetools/tcl/8.5.6/Linux/rh4/x86_64  lib]

  package require csv
  package require struct::matrix

  struct::matrix M
  M add columns 3
  M insert row 0 { "name" "code" "description" }
  M add row { "me" {if ( test == null ){
    var = false;
  } else {
    var = true;
  }
  } {code by:
  me in JAVA} }

  #display matrix
  M format 2string

  #then we can see consistency is preserved
  #-----+----------------------+------------
  #name | code                 | description
  #-----+----------------------+------------
  #me   | if ( test == null ){ | code by:   
  #     |   var = false;       | me in JAVA 
  #     | } else {             |           
  #     |   var = true;        |          
  #     | }                    |           
  #-----+----------------------+------------

  # dump matrix in CSV file
  set CSV [open /tmp/test.csv w]
  ::csv::writematrix ::M $CSV
  close $CSV

  #CSV file is without delimiters around
  #any values with LINE BREAK :
  #
  #name,code,description
  #me,if ( test == null ){
  #  var = false;
  #} else {
  #  var = true;
  #}
  #,code by:
  #me in JAVA

  # Recover CSV
  set CSV [open /tmp/test.csv r]
  ::csv::read2matrix $CSV Mread , auto
  close $CSV

  #display matrix
  Mread format 2string

  #then now we can see consistency is lost due to NO delimiters used when line breaks!!!
  #+--------------+--------------------+-----------+
  #|name          |code                |description|
  #|--------------+--------------------+------------
  #|me            |if ( test == null ){|           |
  #|--------------+--------------------+------------
  #|  var = false;|                    |           |
  #|--------------+--------------------+------------
  #|} else {      |                    |           |
  #|--------------+--------------------+------------
  #|  var = true; |                    |           |
  #|--------------+--------------------+------------
  #|}             |                    |           |
  #|--------------+--------------------+------------
  #|              |code by:            |           |
  #|--------------+--------------------+------------
  #|me in JAVA    |                    |           |
  #| -------------+--------------------+------------


tkt_uuid: 725557ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 8
foundin: None
resolution: Fixed
title: tcllib installer failure
comment:
  I fetched the 20030419 cvs snapshot from Activestate
  ftp site.
  $ rm -rf tcllib
  $ gtar xfz tcllib-20030419.tar.gz
  $ mkdir tcllib/unix
  $ cd tcllib/unix
  $ ../configure --prefix=/usr/tcllib
  $ make all
  $ make install
   $ make install;exit                  
  /usr/tcl84/bin/tclsh8.4 `echo ../installer.tcl` \
          -pkg-path   /usr/tcl84/lib/tcllib1.4 \
          -no-examples -no-html -no-nroff \
          -no-wait -no-gui
  Installing Tcllib 1.4
  You have chosen the following configuration ...

  Packages:      /usr/tcl84/lib/tcllib1.4
  Examples:      Not installed.
  Documentation: Not installed.

  .........error copying "../modules/calendar/tclIndex"
  to "/usr/tcl84/lib/tcllib1.4/calendar/tclIndex": file
  already exists
      while executing
  "file copy [file join $distribution modules $module
  tclIndex]  [file join $libdir $module]"
      (procedure "_tci" line 5)
      invoked from within
  "_tci calendar /usr/tcl84/lib/tcllib1.4"
      ("eval" body line 1)
      invoked from within
  "eval $guide($m,$type) $m $args"
      (procedure "xinstall" line 4)
      invoked from within
  "xinstall   pkg $config(pkg,path)"
      (procedure "doinstall" line 5)
      invoked from within
  "doinstall"
      (procedure "main" line 11)
      invoked from within
  "main"
      (file "../installer.tcl" line 579)
  *** Error code 1
  make: Fatal error: Command failed for target
  `install-libraries'
  Connection closed.


tkt_uuid: 1416821fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: treeql
priority: 5 Medium
foundin: None
resolution: Fixed
title: treeql: test suite bug
comment:
  with -debug 1:

  * treeql 1.3
  > tree : pure Tcl

  test name 'treeql-tcl-0.3' re-used; prior use in
  /local/src/tcllib/modules/treeql/treeql.testsuite
  test name 'treeql-tcl-0.3' re-used; prior use in
  /local/src/tcllib/modules/treeql/treeql.testsuite


tkt_uuid: 481292ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: tcllib: request for new module
priority: 5 Medium
foundin: None
title: new package proposal: stooop
comment:
  This is not really a patch, but I am offering to add
  the Tcl only OO extension stooop (at
  http://jfontain.free.fr/).

  I think it is ready to go (has own namespace,
  documentation, test suite and examples).

  Please let me know if you need anything else.

  URL: http://jfontain.free.fr/stooop-4.1.1.tar.gz
  Best regards,

  Jean-Luc


tkt_uuid: 712951ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: Potential infinite loop in doctools::cvs::scanLog
comment:
  In doctools/cvs.tcl, ~line 63:

  while { ! [regexp "(-----*)|(=====*)" $line] } {
      append comment $line "\n"
      incr i
      set line [lindex $text $i]
  }

  This will fail to terminate if the input doesn't end
  with a "-----*" or "=====*" line.  The while loop
  controlling clause should also include a test for " ...
  && $i < $n", to account for the possibility of bad
  input.


tkt_uuid: 446997ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: sha1
priority: 5 Medium
foundin: None
resolution: Fixed
title: sha1 fails on 64-bit platform
comment:
  % package require sha1
  1.0
  % sha1::sha1 abc     
  integer value too large to represent as non-long
  integer
  % set errorInfo
  integer value too large to represent as non-long
  integer
      while executing
  "format %0.8x%0.8x%0.8x%0.8x%0.8x $H0 $H1 $H2 $H3 $H4"
      (procedure "sha1::sha1" line 112)
      invoked from within
  "sha1::sha1 abc"


tkt_uuid: 532246ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: NoteBook tabs text not entirely visible
comment:
  Using BWidget 1.4.0 NoteBook widget:

  The lower portion of the text on the tabs gets 
  truncated on all tabs except the selected tab.

  The text should appear in its entirety on all tabs.


tkt_uuid: 934702ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: tcllib: request for new module
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Add a XML parsing module to tcllib
comment:
  As there is no XML parsing module in either the tcl
  core distro nor the Tcllib yet, there is a large class
  of modules not really nicely includeable into tcllib
  (nearly everything xml related). 

  A Tcllib XML parsing module would be really nice,
  especially if linked to a DOM module using the
  ::struct::tree (not super efficient but standard). 

  Candidates would be the TclXML package from the tclxml
  project or a new development. 

  A new development could unify the two most used C
  extensions in the area (TclXML and tDOM).


tkt_uuid: 1725717fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: plotchart
priority: 5 Medium
foundin: None
resolution: None
title: package load writes to stdout
comment:
  When loading the plotchart package two lines are written to stdout. It is assumed that these are debug statements which were left active during checkin.

  The offending lines are in scaling.tcl, lines 140-141.
  To fix change line 139.


tkt_uuid: 1589111fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: Wrong keysym in combobox code
comment:
  This part of the BWidget Combobox code does work as
  intended (if it does) only by bug:

  proc ComboBox::_auto_post { path key } {
      ...
      if {([string length $key] > 1 && [string tolower
  $key] != $key) && \
  [string equal $key "Backspace"] != 0 && \
  [string equal $key "Up"] != 0 && \
  [string equal $key "Down"] != 0} {
   return
      }
      ...
  }

  There isn't a keysym "Backspace", that is "BackSpace".


tkt_uuid: 2807256fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: Combobox sets X-selection
comment:
  When selecting an item in a Combobox, the X-selection is also set. Personally, I find this "feature" annoying. (I'm not sure about standards compliance, though.)

  The purpose of a combobox is to select an item from a list, not to select characters from a text for copy/paste actions.
  In case there is doubt about the usefulness of this feature, it could be made an option to the Combobox command.

  The attached patch against BWidget 1.8.0 turns this behaviour off.


tkt_uuid: 1484791fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: list
priority: 5 Medium
foundin: None
title: lmap and lfilter procs (like 'lmap' on the wiki)
comment:
  I am used to these two little procs, and I would like
  to see them in tcllib, as I do not want have always to
  'reinvent the wheel'.

  I know that [struct::list map] and [struct::list
  filter] already are in tcllib, but I feel more
  comfortable with the ability, not to define trivial
  procs like :

  proc first {list} {lindex $list 0}
  struct::list map $mylist first

  Here are the ones I like:

  proc lmap {var list cmd} {
      upvar $var elt
      set out ""
      foreach elt $list {
          lappend out [uplevel $cmd]
      }
      return $out
  }
  proc lfilter {var list condition} {
      upvar $var x
      set out ""
      foreach x $list {if {[uplevel expr $condition]}
  {lappend out $x}}
      return $out
  }

  Of course, if we adopt these two, we should
  differentiate  the existing from the new with a prefix.
  'l' seems nice to me, you might prefer something else.

  Hope this will be useful.

  Stéphane Arnold


tkt_uuid: 492563ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: relative domain when parsing email addresses
comment:
  I am submitting a request for a feature for
  mime::
  package.
  If I do mime::parseaddress on some addresses,
  I am getting them parsed against the machine name.
  But I have a very complicated server with a lot of
  domain names pointed to it. I need an option for
  mime::parseaddress to parse addresses relative
  not to machine name but to domain directly provided.
  for example
  set zinfo [mime::parseaddress -mydomain qq.com
  "addr1@qq.com"]
                                  Thank you
                                  Denis Medvedev
  P.S. where is a distribution of tcllib1.1?
  I can't download it from sourceforge - bad requests...
  If you can, please update the distribution of tcllib
  on ftp.scriptics.com - there is only  version 0.8


tkt_uuid: 2890743fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Fixed
title: comm crashes on large amount of data from server
comment:
  Since Tcl 8.0, using lindex and lreplace forces comm to have received a well-formed list from the comm server. If there is a large amount of data from the server, it is possible that the list does not become well-formed before running up against memory constraints resulting in a crash.


tkt_uuid: 1061759fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Make pop3 non-blocking
comment:
  Hi,

  I was using tcllib code for a plugin in amsn* to check
  pop3 email. The problem was that every time the email
  was checked it blocked amsn while it was checking.
  Therefore I suggest changing the code such that it is
  non-blocking. I have made a start (and possibly all the
  changes necessary). I made the ::pop3::open, and
  ::pop3::send both non-blocking which I think should
  then include all other functions (haven't looked)?

  Just note that Im not sure which version of pop3 I
  started with (someone else copied the code originally).
  Also in trying to make it non-blocking I went around in
  a couple of circles before getting it correct, so may
  have removed some code that could be reinserted.

  Now that it is complete it is not so hard to
  understand, and I recommend having a look at what I
  have done and possibly implementing it into pop3 in tcllib.

  Also to note, the way I have done it (to make it
  simpler) was that it is blocking to the calling process
  but not the program in entirety. This was ok for what I
  was doing as the calls to it were done by the after
  command which creates a new process and doesn't block
  the whole program.

  If you have any comments or questions don't hesistate
  to contact me at my sf email. Or by posting here.

  Lio.

  *PS The code was copied and a reference that the code
  was from tcllib was made, hope this is ok? if not tell
  me and I will remove.


tkt_uuid: 1567155fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: blowfish
priority: 5 Medium
foundin: None
resolution: Fixed
title: blowfish appending extra NULL chars
comment:
  It appears blowfish is appending some NULL characters 
  at the end of a string when decrypting a string.  I 
  noticed this when I couldn’t get a simple 
  encrypt/decrypt script to work.  Visually, the 
  strings do match but there are “hidden” NULL 
  characters appended to the decrypted string.  I was 
  able to tell that by writing out the string to a file 
  and then performing an octal dump.  Here is this 
  simple script and the result when I run it.


  Thanks

  Al Silverstein
  asilver@net-sense.com


  #!/usr/local/ActiveTcl/bin/tclsh

  package require blowfish
  package require base64

  set KEY abc

  set clear_text secret

  set enc_string [::blowfish::blowfish -dir encrypt -
  mode cbc -iv 12345678  -key $KEY $clear_text]

  set decr_string [::blowfish::blowfish  -dir decrypt -
  mode cbc -iv 12345678  -key $KEY $enc_string]


  puts "Encrypted String is <$enc_string>"

  if { "$clear_text" == "$decr_string" } {
          puts "Success"
  } else {
          puts "clear_text <$clear_text> is NOT equal 
  to decr_string <$decr_string>"
  }

  set aa [open clear_text.txt "w"]
  set bb [open decr_string.txt "w"]

  puts $aa $clear_text
  puts $bb $decr_string

  close $aa
  close $bb


   ---------------------------------------------

  Here is what happens when I run the script:


  asilver@sys-1:~/tcl2> ./blowfish_test2.tcl

  Encrypted String is <Ã½Ã
  clear_text <secret> is NOT equal to decr_string 
  <secret>
  asilver@sys-1:~/tcl2>



  -----------------------------------------------

  Here is the octal dump:

  asilver@sys-1:~/tcl2> od -h clear_text.txt
  0000000 6573 7263 7465 000a
  0000007

  asilver@sys-1:~/tcl2> od -h decr_string.txt
  0000000 6573 7263 7465 0000 000a
  0000011
  asilver@sys-1:~/tcl2>


tkt_uuid: 1108569fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Fixed
title: latest tkchat.kit at least fails
comment:
  Since the tkchat code, by itself, no longer runs
  without bits and pieces of things installed that are
  undocumented, I've been running tkchat from the
  tkchat.kit mentioned at http://wiki.tcl.tk/tkchat . 
  Today, when I downloaded the version there, and
  attempted to run it on my sparc solaris 8 machine, I
  got an error about being unable to find tls.  So I
  downloaded from the sdarchive the latest tls.kit ,
  which sdarchive says works on solaris 8.  Here is the
  error that appears if the tls.kit starkit is in the
  same directory as tkchat.kit:

  couldn't load library
  "/volws/lwv28/ldatae/bin/tls.kit/lib/tls/SunOS-sparc/tls.so":
  no such file or directory
      while executing
  "load
  /volws/lwv28/ldatae/bin/tls.kit/lib/tls/SunOS-sparc/tls.so
  "
      ("package ifneeded" script)
      invoked from within
  "package require tls"
      ("foreach" body line 4)
      invoked from within
  "foreach tlsname {tls.kit tls-win.kit tls-lin.kit} {    
      if { [file exists [file join $kitdir $tlsname]] } {
          source [file join $kitdir $tls..."
      (file "/volws/lwv28/ldatae/bin/tkchat.kit/main.tcl"
  line 5)
      invoked from within
  "source /volws/lwv28/ldatae/bin/tkchat.kit/main.tcl"
      ("uplevel" body line 1)
      invoked from within
  "uplevel [list source [file join $self main.tcl]]"

  sdx.kit says:

   $ sdx lsk /ldatae/bin/tls.kit           

  /ldatae/bin/tls.kit:
                              dir  lib/
          92  2004/03/22 02:23:41  main.tcl

  /ldatae/bin/tls.kit/lib:
                              dir  tls/

  /ldatae/bin/tls.kit/lib/tls:
                              dir  Darwin-ppc/
                              dir  Linux-x86/
                              dir  OpenBSD-x86/
                              dir  Solaris-sparc/
                              dir  Windows-x86/
         552  2004/03/22 02:51:38  pkgIndex.tcl
        5289  2004/03/22 02:52:13  tls.tcl

  /ldatae/bin/tls.kit/lib/tls/Darwin-ppc:
       41564  2004/03/22 02:32:12  tls.dylib

  /ldatae/bin/tls.kit/lib/tls/Linux-x86:
     1119770  2004/03/22 02:26:32  tls.so

  /ldatae/bin/tls.kit/lib/tls/OpenBSD-x86:
       38807  2004/09/07 08:37:21  tls.so

  /ldatae/bin/tls.kit/lib/tls/Solaris-sparc:
       46000  2004/02/13 19:38:53  tls.so

  /ldatae/bin/tls.kit/lib/tls/Windows-x86:
      536576  2004/03/21 21:24:22  tls.dll

  It appears that tkchat is generating the directory
  names differently than tls.kit has them named...


tkt_uuid: 1253947fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Invalid
title: installer script fails with non-existing directories
comment:
  I updated the complete directory tree for Tcllib, using
  cvs update (without any options) and then ran the
  installer script like this:

  > tclsh installer.tcl

  The only option I set in the GUI that came up was to
  use a "dry run." 

  The script initially failed with error messages from
  [glob] complaining about asn/*.tcl and so on. When I
  removed this and other directories that were not
  present in my directory tree but were listed in
  "installed_modules.tcl", it all worked, that is the
  "dry" installation produced a long list of files that
  were detected and actions that were supposedly taken.

  Presumably I should have used the ./configure script
  and the resulting make file, but "installer.tcl" is
  such an inviting name ;)


tkt_uuid: 1393564fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math
priority: 5 Medium
foundin: None
resolution: Fixed
title: erorr in ::math::linearalgebra::angle
comment:
  Hello,

  There is an error in:

  ::math::linearalgebra::angle

  instead of:

  set n1 [norm_2 $vect1]
  set n2 [norm_2 $vect2]

  it should be:

  set n1 [norm $vect1]
  set n2 [norm $vect2]

  or also:

  set n1 [norm_two $vect1]
  set n2 [norm_two $vect2]

  Also, there is no cross product fucnction in the
  package. It is a VERY common need for 3D vectors.

   Regards,


tkt_uuid: 1897841fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: stringprep
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: nameprep test 5 fails
comment:
  sparc solaris 9 , sun c compiler, cvs head for tcl 8.5 and tcllib:

  ---- nameprep-5 start

  ==== nameprep-5 Case folding U+2121 U+33C6 U+1D7BB FAILED
  ==== Contents of test case:

          list [catch {::stringprep::stringprep nameprep  [encoding convertfrom ut
  f-8 $input]} res] $res
      
  ---- Result was:
  1 prohibited_character
  ---- Result should have been (exact matching):
  0 telc?kg?
  ==== nameprep-5 FAILED


tkt_uuid: 1852685fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: ip
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: ::ip::isOverlap should support IPv6
comment:
  ::ip::isOverlap should support IPv6

  tcl>package require ip
  1.1.1
  tcl>::ip::isOverlap 10.35.1.0/24 10.35.1.5
  1
  tcl>::ip::isOverlap 2002:0a23:0100::/80 2002:0a23:0100::5 
  Error: expected integer but got "2002:0a23:0100::"


tkt_uuid: 1043581fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: SelectFont: add a -relief option?
comment:
  Hi all,

  I am facing a problem with the SelectFont command 
  from the BWidget toolkit. SelectFont is a dual "nature" 
  command, as it can present itself as a dialogo or a 
  toolbar.
  I am trying to use it as a toolbar. However, in toolbars 
  usually all widgets have a flat relief, whcih changes to 
  raised when the mouse gets over a widget. This, cannot 
  be done with the current implementation of SelectFont, 
  which does not even have a -relief option. It would be a 
  good idea to at least add a "-relief" option to the 
  widget, even if it applies to all the internal sub-widgets 
  simultaneously...

  George


tkt_uuid: 1040372fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
title: generalise ::fileutil::stripPwd to any prefix
comment:
  It would be useful if stripPwd was [stripPrefix
  $somepath $someprefix] which returned a path relative
  to $someprefix, instead of only [pwd].
   


tkt_uuid: 782735ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ncgi
priority: 5 Medium
foundin: None
resolution: Fixed
title: import file
comment:
  documentation refers to [importFile] but implementation 
  still has [import_file]

  attempt to invoke import_file gives
  invalid command name "pre"

  which is not surprising


tkt_uuid: 1046955fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: BWidget 1.7.0: Tree::insert does not find parent node
comment:
  To the maintainer of BWidget's Tree widget:

  When inserting an element into a parent tree node which
  contained an ampersand (&) in the node name, this
  parent node is not found and an error is issued by
  Tree::insert.

  The following code shows the behaviour:

  package require BWidget 1.7
  frame .ftop
  pack .ftop
  set sampleTree .ftop.tsample
  Tree $sampleTree
  pack $sampleTree
  $sampleTree insert end root "/First&IT" -text "First&IT"
  $sampleTree insert end "/First&IT" "Abc" -text "Abc"

  The error is:

  node "/First&IT" does not exist
      while executing
  "Tree::insert .ftop.tsample end /First&IT Abc -text Abc"
      ("eval" body line 1)
      invoked from within
  "eval [linsert $args 0 Tree::$cmd .ftop.tsample]"
      (procedure ".ftop.tsample" line 1)
      invoked from within
  "$sampleTree insert end "/First&IT" "Abc" -text "Abc""
      (file
  "/home/users/roger/Dev/TclTk/Singles/treetest.tcl" line 17)

  When removing the "&" character from the insert
  commands it works.

  The attached one-line patch solves the problem: The
  parent node name is not converted to canonical form
  with _node_name before checking if the array entry exists.

  The patch does the following:

  set parent [_node_name $path $parent]

  This call overwrites parent with the canonical (mapped
  special characters) node name, add this line just
  before the [info exists data($parent)] line.

  The patch worked fine for me. I did not check the rest
  of the tree.tcl for other missing _node_name calls --
  maybe there are more...

  -- Roger

  PS: Thanks for the cool Tree widget!


tkt_uuid: 953854ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: htmlparse
priority: 1 Zero
foundin: None
resolution: Accepted
title: Errors when parsing HTML to a tree
comment:
     Hello,

  In func

  proc ::htmlparse::mapEscapes

  line: return [subst $new]
  should change to:
     return [subst -nobackslashes -novariables $new]

  If not, if new has a backslash \, the subs breaks the 
  string (specially noted in paths on Windows)

  -------
  In func

  ::htmlparse::Reorder

  Lines:
      if {
         $sibling == {} ||
         (![string compare $tp [$tree get $sibling type]])
                   } {
                       break
                   }
  Should change to:
         if { $sibling == "" } { break }
         if { [lsearch "h1 h2 h3 h4 h5 h6 p li" [$tree get
                   $sibling type]] != -1 } {
      break
       }

    Second option is less agressive when reordering tags.

    Regards,

    Ramon Ribó
    ramsan@cimne.upc.es


tkt_uuid: 1892687fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Build System & Testing
priority: 5 Medium
foundin: None
resolution: Fixed
title: sak.tcl test shell add fails
comment:
  I tried to add a shell for testing to sak.tcl but get a not so informative stack trace:
  (this is inside msys/mingw, using AS Tcl shells)

  $ c:/tools/bin/tclsh85.exe sak.tcl test shell add c:/tools/bin/tclsh85.exe
  invalid command name "::uplevel"
      while executing
  "::uplevel #0 {set I 0
  set {C {} {}} 0
  set {N 0 P} {}
  set {N 0 M} 1158662637
  }"
      invoked from within
  "$ip eval [list ::uplevel \#0 $data]"
      (procedure "::tie::std::file::Snit_methodReplay" line 30)
      invoked from within
  "$self Replay"
      (procedure "::tie::std::file::Snit_methodLoadJournal" line 7)
      invoked from within
  "$self LoadJournal"
      (procedure "::tie::std::file::Snit_methodget" line 7)
      invoked from within
  "$dso get"
      (procedure "Connect" line 6)
      invoked from within
  "Connect thearray $open $merge $dso"
      (procedure "tie::tie" line 42)
      invoked from within
  "tie::tie ::pregistry::Snit_inst2::data file ~/.Tcllib/Registry"
      ("eval" body line 1)
      invoked from within
  "eval [linsert $value 0 tie::tie [myvar data]]"
      (procedure "::pregistry::Snit_methodTIE" line 9)
      invoked from within
  "::sak::registry::pregistry1 TIE -tie {file ~/.Tcllib/Registry}"
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 $command"
      (procedure "::snit::RT.method.configurelist" line 37)
      invoked from within
  "$self configurelist $args"
      (procedure "::pregistry::Snit_constructor" line 5)
      invoked from within
  "::pregistry::Snit_constructor ::pregistry ::pregistry::Snit_inst2 ::sak::registry::pregistry1 ::sak::registry::pregistry1 -tie {file ~/.Tcllib/Registr..."
      ("eval" body line 1)
      invoked from within
  "eval [linsert $arglist 0  ${type}::Snit_constructor $type $selfns $instance $instance]"
      (procedure "RT.ConstructInstance" line 9)
      invoked from within
  "RT.ConstructInstance $type $selfns $name $args"
      (procedure "::snit::RT.type.typemethod.create" line 45)
      invoked from within
  "pregistry %AUTO%  -tie [list file $state]"
      (procedure "Setup" line 11)
      invoked from within
  "Setup"
      (procedure "sak::registry::local" line 2)
      invoked from within
  "sak::registry::local  get||default Tests Shells {}"
      (procedure "sak::test::shell::add" line 8)
      invoked from within
  "sak::test::shell::add $argv"
      (procedure "sak::test::shell" line 9)
      invoked from within
  "sak::test::$cmd $argv"
      (file "./support/devel/sak/test/cmd.tcl" line 25)
      invoked from within


tkt_uuid: 564767ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: profiler
priority: 5 Medium
foundin: None
resolution: Fixed
title: Missing variable initialization in dump
comment:
  The result var in profiler::dump is not initialized. This leads
  to a runtime error when [array names callCount $pattern] 
  returns an empty list.

  FIX: 

  proc ::profiler::dump {{pattern *}} {
      variable callCount
      variable compileTime
      variable totalRuntime
      variable callers
      variable descendantTime
      variable descendants
      variable statTime

      foreach name [lsort [array names callCount $pattern]] {

  ###############    FIX here  
  set result [list];
  ###############    FIX end

  set i [expr {[string length $name] + 1}]

  ...


tkt_uuid: 2054498fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Race condition in ftp::Get -variable
comment:
  While using the METAR package by Jos Decoster (http://wiki.tcl.tk/19635) I frequently get an error from the ftp package:

  can't read "ftp(GetData)": no such element in array
      while executing
  "set returnData $ftp(GetData)"
      (procedure "::ftp::StateHandler" line 778)
      invoked from within
  "::ftp::StateHandler 0 sock19"
  Error in plug-in weather:
  can't read "ftp(GetData)": no such element in array
      while executing
  "set returnData $ftp(GetData)"
      (procedure "::ftp::StateHandler" line 778)
      invoked from within
  "::ftp::StateHandler 0 sock19"

  Investigation shows that this appears to be caused by a race condition between the data and control socket. The error shows up when the control event handler sees the "226 File send OK" report before the event handler on the data socket fires and processes the incoming file contents.

  Here's the log with VERBOSE and DEBUG on:

  debug      | Starting new connection with: 
  debug      |   no option
  debug     control | C: Connection from 140.90.128.71:21
  debug      | -> rc="220"
  -> msgtext="220 Authorized users only. All activity may be monitored and reported."
  -> state="user"
  debug      | ---> USER anonymous
  debug     control | C: 220 Authorized users only. All activity may be monitored and reported.
  debug      | -> rc="331"
  -> msgtext="331 Please specify the password."
  -> state="passwd"
  debug      | ---> PASS anonymous
  debug     control | C: 331 Please specify the password.
  debug      | -> rc="230"
  -> msgtext="230 Login successful."
  -> state="connect"
  debug     control | C: 230 Login successful.
  debug      | -> rc="   "
  -> msgtext=""
  -> state="type"
  debug      | ---> TYPE I
  debug      | -> rc="200"
  -> msgtext="200 Switching to Binary mode."
  -> state="type_sent"
  debug     control | C: 200 Switching to Binary mode.
  debug      | -> rc="   "
  -> msgtext=""
  -> state="cd"
  debug      | ---> CWD data/observations/metar/stations
  debug      | -> rc="250"
  -> msgtext="250 Directory successfully changed."
  -> state="cd_sent"
  debug     control | C: 250 Directory successfully changed.
  debug      | -> rc="   "
  -> msgtext=""
  -> state="get_active"
  debug     data | D: Port is 33870
  debug      | ---> PORT 192,168,1,2,132,78
  debug      | -> rc="200"
  -> msgtext="200 PORT command successful. Consider using PASV."
  -> state="get_open"
  debug      | ---> RETR EHAM.TXT
  debug     control | C: 200 PORT command successful. Consider using PASV.
  debug      | -> rc="150"
  -> msgtext="150 Opening BINARY mode data connection for EHAM.TXT (62 bytes)."
  -> state="get_sent"
  debug     control | C: 150 Opening BINARY mode data connection for EHAM.TXT (62 bytes).
  debug      | -> rc="226"
  -> msgtext="226 File send OK."
  -> state="get_close"
  debug     data | D: Connection from 140.90.128.71:20
  debug     data | D: Port closed

  I guess the error will only show up for small files. On larger files I can imagine that the last part of the file may be missing, but I haven't actually seen that happen.

  I haven't yet come up with a solution for this problem. I fear it's not going to be straight forward. Temporarily removing the fileevent from the control socket may be a possibility.


tkt_uuid: 595240ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
title: patch for mime & mbot example files
comment:
  andreas - attached are two files

  1. a small patch to mime.tcl that makes it more robust with 
  respect to a common mime encoding error

  2. some new files that go under modules/mime/examples/

  thanks!

  /mtr


tkt_uuid: 1763707fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: ::ftp::Get returns "" in mode inline + error
comment:
  contrary to the man-page ::ftp::Get returns the empty string when in mode $ftp(inline) and an error occurs.

  -------------------------------------
  % packa requi ftp
  2.4.8
  % set conn [ftp::Open localhost  user pass]
  0
  % set erg [ftp::Get $conn not_existing_file -variable var]
  error     error | E: Error retrieving file "not_existing_file"!:
  error     invalid command name "ftp::Open"
  error         while executing
  error     "ftp::Open localhost  user pass"
  % puts $erg

  %
  ------------------------------------
  This is 7 line before the end of ftp::Get 

  2 lines after that:
  CloseDataConn $s is only called if $ftp(inline) is false.
  Is this correct?

  In the normal configuration I am unable to retrieve the info about the error. Am I suppost to redefine the DisplayMsg for this?

  thanks for your efforts
  Albrecht Mucha MediTec GmbH
  a.mucha at mdtec . de


tkt_uuid: 772535ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: snit
priority: 3 Low
foundin: None
title: snit: implementation of mymethod command
comment:
  To deal with renaming of objects snit provides the 
  command [mymethod] to create code which can be 
  given to callback handlers.

  The generated code essentially refers to the variable 
  $Snit_instance in the unchanging private namespace of 
  the object, which contains the current name of the 
  intance = instance command.

  Example:
       mymethod foo
  generates
       "$Snit_instance foo"

  This is variable reference is a bit problematic. The code 
  executing the callback __must not__ any list command 
  when adding additional arguments to the callback. Which 
  is usual. The moment a list command is used, for 
  example [linsert], or [lappend] to build up the full cllback 
  command the variable reference will be quoted in braces, 
  and the final command will look like:

       "{$Snit_instance} foo arg1 arg2 ..."

  [eval]'ing this fails.

  Example stacktrace

  invalid command 
  name "$::ttable::ttable::Snit_inst1::Snit_instance"
      while executing
  "{$::ttable::ttable::Snit_inst1::Snit_instance} 
  NColChanged 0 3"
      ("uplevel" body line 1)
      invoked from within
  "uplevel #0 [linsert $options(-ncolcommand) end 
  $oldncols $ncols]"
      (procedure "Snit_configure-data" line 42)
      invoked from within

  You see how the command is constructed, and the 
  additional quoting generated by this.

  The big problem is that the usage of list commands to 
  construct an eval'able callback is the usual way of doing 
  this.


tkt_uuid: 1898189fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: special
priority: 5 Medium
foundin: None
resolution: None
title: Unbalanced parenthesis in elliptic.tcl
comment:
  Hi,
  The line #209 of the file elliptic.tcl
  contains the evaluation of an expression containing an unbalanced parenthesis :

  return [expr {sqrt(...)}]

  where the closing parenthesis does not exist in the source.
  This prevents the math package from being included as-is in a compiled starkit or starpack.

  Best regards,

  Michaël


tkt_uuid: 1060245fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 9 Immediate
foundin: None
resolution: Fixed
title: bee: Corrupt file in CVS
comment:
  File
    modules/bee/examples.torrent
  is corrupt on Windows (missing -kb flag; use 'cvs
  admin' to fix.)


tkt_uuid: 1377937fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: missing tcl.m4
comment:
  The bwidget 1.7.0 source tarball is missing tcl.m4,
  which is needed by autoconf in order to build the
  configure script.

  Please either include tcl.m4 or generate the configure
  script before making a source tarball.


tkt_uuid: 3071973fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: math
priority: 5 Medium
foundin: None
title: add Kruskal-Wallis test to math::statistics
comment:
  I have done an implementation of the Kruskal-Wallis test. Feel free to adapt this and tweak it for the needs of math::statistics. Personally, I would make two commands from this code (the names can be something else more descriptive of course):

  ::math::statistics::test-Kruskal-Wallis ?data ...?
  ::math::statistics::rank ?data ...?

  Find the implementation here: http://wiki.tcl.tk/27149


tkt_uuid: 922877ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: bwidget PasswdDlg - honour labelwidth and fix return binding
comment:
  Fixes the BWidget PasswdDlg widget so that it doesn't ignore the 
  -labelwidth option when calculating the label width.

  Also reinstalled the Return binding so that return now moves through 
  the widgets rather than always selecting OK (i.e. more like the 
  behaviour of various login managers on Windows, Unix)


tkt_uuid: 2340355fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Combobox path to entry
comment:
  Hi,

  There is no current method to test the bindings 
  of the entry based on the Combobox widget because 
  the API does not provide the path to the 
  entry.
  Suppose the method "getentry" exists.
  One can generate an event so that the command 
  bound to the entry is fired.

  () 49 % package require BWidget
  1.8
  () 50 % ComboBox .mycbb
  .mycbb
  () 52 % set ntr [.mycbb getentry]
  .mycbb.e
  () 54 % configure .mycbb -command {puts "COUCOU !"}
  () 57 % pack .mycbb
  () 63 % focus -force .mycbb.e;event generate .mycbb.e <Return>
  COUCOU !

  To be able to do this script, I added the following 
  method which returns the path to the entry.

  proc ComboBox::getentry { path } {
      return $path.e
  }

  I would be very pleased if that method was added 
  to BWidget's Entry, or if someone show me another 
  way to do this.

  By the way, thank you for the great work on Tcllib.

  Best regards,

  Michaël


tkt_uuid: 961452ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: plotchart
priority: 5 Medium
foundin: None
resolution: None
title: Plotchart does not handle "missing values"
comment:
  (Reminder)
  Plotchart currently does not handle missing values
  (empty strings). Adding such a feature is not too
  difficult though


tkt_uuid: 2935347fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Accepted
title: bug 2935339 (::ftpd::config)
comment:
  Here's a fix for bug 2935339 which is where calling ::ftpd::config a second time resets previously set values.The problem is that it uses cmdline::getoptions but supplies the application default values instead of the current values.


tkt_uuid: 547336ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtp
priority: 5 Medium
foundin: None
resolution: Fixed
title: [package require Trf] twice
comment:
  There are two instances of
  [catch {package require Trf}]
  in smtp.tcl.  When there is no Trf package
  installed, the invokes a costly [tclPkgUnknown]
  in a default Tcl installation.  There's no
  need to pay this price twice.  After the
  first [package require] you have it if it's
  available.  Use [package present] in the second
  instance.


tkt_uuid: 1047058fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: md5
priority: 5 Medium
foundin: None
resolution: Fixed
title: document end of options switch -- for md5 2
comment:
  The md5 package has trouble with strings containing -
  as first character, so there is support for -- as end
  of options...

  example:

  # this errors
  md5::md5 -hex -flabber
  # this does not
  md5::md5 -hex -- -flabber

  So everything is fine, but the switch isn't documented....

  Optionally it could be an idea to just interpret the
  last argument as string if neither -file nor -channel
  is given and only one argument is left, would safe md5
  from the classical nuisance we have with switch...


  Michael


tkt_uuid: 1613224fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: too much braced message header values (::mime::getheader)
comment:
  Hello,

  currently experienced, that an eMail had for one message part a Content-ID like "abc$def$ghi@jklmnop".

  Using ::mime::getheader on that message part returned:

      % set header [::mime::getheader ::mime::3-2]
      Content-ID {{<002401c71848_6fba22d0$a500a8c0@dittc48ca0f6af>}}
      % dict get $header Content-ID
      {<002401c71848_6fba22d0$a500a8c0@dittc48ca0f6af>}
      % ::mime::getheader ::mime::3-2 Content-ID
      {<002401c71848_6fba22d0$a500a8c0@dittc48ca0f6af>}

  I expected to get a once-braced value, but not a twice-braced value.

  I used the mime package v1.5 from the tcllib 1.9 in tcl/tk 8.4.13 and 8.5a4.

  IMHO this is a misbehaviour, a bug.

  Thanks,

  Martin Lemburg


tkt_uuid: 1800420fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: doctools nroff output for type/arg reversed
comment:
  This markup:


    [section Arguments]
    [list_begin arguments]

    [arg_def [type Ns_Sls] *sls in/out]

    An opaque SLS slot handle.


  Produces this HTML output:


    ARGUMENTS

    Ns_Sls *sls (in/out)
      An opaque SLS slot handle.



  Which is correct. The nroff output looks like this:


    ARGUMENTS
      *sls Ns_Sls (in/out)
        An opaque SLS slot handle.


  The type and argument names have switched position, which looks weird.


tkt_uuid: 436386ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 3 Low
foundin: None
resolution: Works For Me
title: BWidget demo bug
comment:
       In the BWidget demo, choose the 'Dialog' tab, 
  then select 'Abort, Retry, Ignore' in the 'Message 
  Dialog' frame.  Click 'Show', and an error message 
  appears "Error: Bad default value "": must be...".  
  The stack trace is:

  bad -default value "": must be abort, retry, ignore, 
  ok, cancel, no, or yes
      while executing
  "tk_messageBox -icon info -default {} -message 
  {Message for MessageBox} -type abortretryignore -title 
  Information"
      ("eval" body line 1)
      invoked from within
  "eval tk_messageBox [array get tkMBoxArgs"
      (procedure "MessageDlg::create" line 80)
      invoked from within
  "MessageDlg::create .msgdlg -parent . -message 
  {Message for MessageBox} -type abortretryignore -icon 
  info -buttons {}"
      ("eval" body line 1)
      invoked from within
  "eval MessageDlg::create $path $args"
      (procedure "MessageDlg" line 1)
      invoked from within
  "MessageDlg .msgdlg -parent .  -message "Message for 
  MessageBox"  -type    $msg(type)  -icon    $msg
  (icon)  -buttons $msg(buttons)"
      (procedure "DemoDlg::_show_msgdlg" line 5)
      invoked from within
  "DemoDlg::_show_msgdlg"
      invoked from within
  ".mainframe.frame.nb.fdemoDlg.titf3.f.but invoke"
      ("uplevel" body line 1)
      invoked from within
  "uplevel #0 [list $w invoke]"
      (procedure "tkButtonUp" line 9)
      invoked from within
  "tkButtonUp .mainframe.frame.nb.fdemoDlg.titf3.f.but
  "
      (command bound to event)


tkt_uuid: 3163541fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: grammar_peg
priority: 5 Medium
foundin: None
resolution: Fixed
title: Possibly wrong call of ict_match_token
comment:
   in line 116 of grammar_peg/peg_interp.tcl:
              ict_match_token "Expected $ch"
  should read
              ict_match_token $ch "Expected $ch"

  See, e.g. <http://wiki.tcl.tk/15512> for more details


tkt_uuid: 709123ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: csv
priority: 5 Medium
foundin: None
resolution: Fixed
title: ::csv::split with | as separator
comment:
  I am trying to use ::csv::split2matrix with | as the
  separator char.

  set trec "REC|DPI|AD1|AD2|AD3"
  set sepchar "|"
  set line [::csv::split $trec $sepchar]
  puts $line

  - -----> {"} {} {"REC} DPI AD1 AD2 AD3

  set trec "REC,DPI,AD1,AD2,AD3"
  set sepchar ","
  set line [::csv::split $trec $sepchar]
  puts $line

  - -----> REC DPI AD1 AD2 AD3


tkt_uuid: 3425271fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Installation
priority: 5 Medium
foundin: None
resolution: Accepted
title: Template files not installed
comment:
  The *.template files for "page" are not installed, needed by certain parser generators.
  Their lack causes the app "page" to err out by default.
  Patches to installer use "_trt" - suggested abbreviation, maybe not the best choice.
  Also included a patch to the "page" demo to add the installed "page" dir to the auto_path so that the plugins can be found; probably not the best solution, take as suggestion, reminder. :)


tkt_uuid: 1531199fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: add color chooser to font selector
comment:
  Hi,

  for the aMSN project we modified the bwidget library a
  bit, one of the changes that might be nice to include
  upstream is the addition of a color chooser in the font
  selector. The patch attached is how this is done in the
  modified amsn bwidget, it also adds an option to not
  show the size selector (this is because in msn chats
  you have no way of specifying the size of you outgoing
  messages)

  I hope these changes can be done upstream.

  Kind regards,

  Sander Hoentjen


tkt_uuid: 763669ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Problems with qp_encode and encoded_word, no_softbreak
comment:
  There are a number of bugs in qp_encode:

  When in no_softbreak mode it eats the last character.

  When in encoded_word mode it:

  - inserts softbreaks for lines over 72 chars
  - does not encode underscores leading to them being 
  decoded as spaces
  - does not encode question marks, potentially leading to 
  badly broken encoded words
  - does not encode tabs

  I have attached a patch to fix these and also to test them 
  and a couple of other RFC2047 requirements. With regard to 
  softbreaks in encoded words it's still not legal to just let 
  them ron on as an encoded word is not meant to be longer 
  than 75 characters itself. I'll file a bug report and patch for 
  that soon.

  Matthew


tkt_uuid: 634258ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Invalid
title: package require tcllib returns "Don't ..
comment:
  etc. -- it seems this is a bit unconventional and
  really belongs in the docs --- package require
  <package> should  return package <package> not found or
  a version string. I expect to load a tcllib package
  when I do a package require so that I can maintain my
  code and still upgrade -- instead I get programming
  instructions..  


tkt_uuid: 3603562fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tklib: crosshair
priority: 7 High
foundin: None
title: confine crosshair::crosshair to a canvas area
comment:
  Hi,

  Sorry but I could not find a crosshair category.

  Currently the Tklib crosshair::crosshair  creates the crosshair in the whole canvas. To make this more flexible it would be better to have the ability to confine the crosshair to a location in the canvas (or a series of locations in a canvas).

  In my case I am using PlotChart to create a series of plots. I would like to confine the crosshair in the plot area only. In other words I do not want the cross hairs to extend pass the axis of the graph and running over the plot labels and titles.

  This enhancement can easily be done by passing the BBox (llx lly urx ury) to crosshair. Store the bbox in a crosshair name space variable and when drawing the lines in the move procedure use the bbox boundary as the start and end points of the lines drawn.

  In the case of a series of locations in a canvas, the user can pass a list of BBoxes when the mouse pointer enters one of those areas the same approach will be done with the move procedure but in that case using the BBox associated with that area. Plotchart allows the user to put more than one plot in a canvas. Therefore this will be an even more versatil implementation of crosshair.

  Thanks in advance,
  Frank


tkt_uuid: 2593520fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: json
priority: 5 Medium
foundin: None
resolution: Fixed
title: json one-line fix for number parsing
comment:
  in json::_json2dict, when parsing a number value
  (line 192ff.), the code essentially does:
  string is double -failindex last $txt
  set num [string range $txt 0 [expr {$last - 1}]]

  WHAT: this code works fine for cases like
  attr: 123,
  but not for cases with whitespace after the number,
  e.g. if it's the last attribute of an object
  attr: 123
          }

  WHY: due to "last" being set to failindex
  (the character that fails the "is double" test),
  the resulting "num" also contains all whitespace
  after the number and before the failing char.

  FIX: add a "string trimright" to the num definition.


tkt_uuid: 704171ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: doctools
priority: 7 High
foundin: None
resolution: Not Applicable Here
title: doctools - ease of use - no quoting required
comment:
  Would be nicer if most commands did not require a 
  single argument. For example, I would like [comment] to 
  take any number of args so that I can simply type the 
  comment w/o bothering to open/close quoting.


tkt_uuid: 1854986fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 7 High
foundin: None
resolution: None
title: repeat-4.x test suite failures
comment:
  Using the cvs head for tcllib and tcl, I am seeing:

  ---- repeat-4.1 start

  ==== repeat-4.1 repeat command FAILED
  ==== Contents of test case:

      catch {repeat} msg
      set msg

  ---- Result was:
  wrong # args: should be "::struct::list::Lrepeat positiveCount value ?value ...?"
  ---- Result should have been (exact matching):
  wrong # args: should be "lrepeat positiveCount value ?value ...?"
  ==== repeat-4.1 FAILED

  ---- repeat-4.2 start

  ==== repeat-4.2 repeat command FAILED
  ==== Contents of test case:

      catch {repeat a} msg
      set msg

  ---- Result was:
  wrong # args: should be "::struct::list::Lrepeat positiveCount value ?value ...?"
  ---- Result should have been (exact matching):
  wrong # args: should be "lrepeat positiveCount value ?value ...?"
  ==== repeat-4.2 FAILED

  As one last error - despite these failures, the end of the test run reported :
  @@ End 1198158410
  all.tcl:        Total   4       Passed  4       Skipped 0       Failed  0
  Sourced 1 Test Files.
  Sourced 0 Test Files.
  Passed   14828 of  15016
  Skipped    185 of  15016
  Failed       3 of  15016
  #Errors      0

  which is really confusing - there are FAILed tests, yet 0 errors...


tkt_uuid: 1232385fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 5 Medium
foundin: None
resolution: Wont Fix
title: struct::list filter -not switch
comment:
  Feature Request:

  Add -not switch to ::struct::list filter command so that 
  you can both filter and filter out.  This behavior mirrors 
  the tcl core lsearch -not switch.


tkt_uuid: 723402ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: tree
priority: 8
foundin: None
title: Key/Value Filtering Support: myTree children $node -key len*
comment:
  It sure would be nice to be able to collect children of a 
  node within a struct::tree by filtering for key names 
  and/or values.

  CURRENT:
  myTree children $node
  -->> {List of Children Nodes of $node}


  PROPOSED:
  myTree children $node -key len*
  --> {List of nodes that have a key value matching "len*"

  myTree children $node -key length -value >50
  -->> {List of children who have a key name "length" and 
  the value of that key is greaterthan "50".

  myTree children -allchildren -- $node -key length
  --> the "-allchildren" option would toggle the search to 
  extract any sub-children through the rest of the structure 
  from the given node that have a -key of "length" -- same 
  capabilities for -value search also.

  For each example, the search options could be either 
  conventional glob/string matching and/or regexp.

  The last example would be particularly useful when 
  trying to quickly extract ALL nodes from a tree structure 
  that meet some particular characteristic(s) instead of 
  walking the entire structure node-by-node....  This would 
  greatly enhance the speed and performance for making 
  global changes quickly without evaluating ever node - 
  especially if a list of nodes is obtained quickly with one 
  command.

  This would also permit users to quickly digest statistics 
  about the structure without a walk -command -- sub-
  command strcutre to build up results based on a walk.


  Any Questions?

  David Bigelow
  davidhbigelow@compuserve.com


tkt_uuid: 674333ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtpd
priority: 5 Medium
foundin: None
resolution: Fixed
title: smtpd: Tcl requirement not specified
comment:
   package require Tcl $requiredVersion

  should be added to the package. Would
  be nice to add checks to the index script
  (pkgIndex.tcl file) as in other tcllib packages
  as well.


tkt_uuid: 478818ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: tcllib: request for new module
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: date/time/calendar module for tcllib
comment:
  Although the clock command accomplishes alot of
  date/time functionality, there are still some
  functionality that can be added. This module should add
  those new functionalities.


tkt_uuid: 2915921fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
title: Add commands for extended punctuation (em-dash, en-dash)
comment:
  It would be convenient to have a set of markup commands which would produce special punctuation signs on output.
  Of most interest are "wide dashes", namely, em-dash and en-dash.
  Such commands could be named as [mdash] and [ndash] respectively, and produce:
  [mdash]: &mdash; in HTML and \(em in nroff;
  [ndash]: &ndash; in HTML and \(en in nroff.

  Ideally, it would be nice to have a generic framework for defining special markup commands which would generate assigned Unicode characters on output, but I think this can't play together with nroff as it's not yet really Unicode-aware (while it's being developed to finally become UTF-8 compliant).
  So the two commands I proposed above could facilitate creation of a bit more beautiful manpages while being portable.


tkt_uuid: 780704ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: Clear value of combobox
comment:
  When a BWidget ComboBox has an empty list of values,
  the value can no longer be cleared. This patch addes an
  'clearvalue' proc.

  Jos.


tkt_uuid: 587533ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: tree
priority: 5 Medium
foundin: None
resolution: Fixed
title: lappend error message misquoted.
comment:
  In the ::struct::tree::_lappend routine, when the incorrect 
  number of arguments is supplied, the error message 
  states

  "wrong # args: should be tree set node ?-key key? value"

  I think that what should be in this error message is

  "wrong # args: should be tree lappend node ?-key key? 
  value"


tkt_uuid: 3593146fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Build System & Testing
priority: 5 Medium
foundin: None
resolution: Accepted
title: Fails to build under windows with cygwin installed
comment:
  Here is an enhanced version of configure.in that makes tcllib build via configure/make under windows with cygwin installed but using native compiler with a non-cygwin tclsh. Please mind th eusage if CYGPATH to pass the arguments to the tclsh properly.
  Do not forget to rerun autoconf when using the new configure.in


tkt_uuid: 949049ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Invalid
title: Combobox error : unknown option "-label"
comment:
  Error in startup script: unknown option "-label"
      while executing
  "error "unknown option \"$option\"""
      (procedure "Widget::parseArgs" line 7)
      invoked from within
  "Widget::parseArgs ComboBox $args"
      (procedure "ComboBox::create" line 3)
      invoked from within
  "ComboBox $parent.mscCombo -label "MSC"  -labelwidth 
  5 -labelanchor w  -textvariable save::mscNo  -values { 
  apollo athena mscE mscS }  -width 8  -helpt..."
      (procedure "_MscCell" line 7)
      invoked from within
  "_MscCell  [$mscCellFrame getframe]"
      (procedure "save::create" line 11)
      invoked from within
  "save::create $notebook"
      invoked from within
  "set f0  [save::create $notebook]"


tkt_uuid: 481022ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: matrix
priority: 5 Medium
foundin: None
title: new matrix related methods requested
comment:
  1. Ability to tell matrix to print itself out (ala
  parray)

  2. Ability to give matrix a term to search for, with
  ability to either search any column of a row, or
  particular columns (or column ranges)


tkt_uuid: 620852ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Fixed
title: Extra CRs added during copymessage (WinX
comment:
  file model.cnv is attached. Following sequence should 
  reproduce file exactly but it introduces differences
  (Problem exists under WinXP but not Linux)
  Generally an extra CR seems to get inserted into the file
  after a certain number of chars

  Jasper Taylor@SPIROGRAPH /cygdrive/m/Documents and 
  Settings/Jasper Taylor/My Documents/Tests
  $ tclsh
  % info patchlevel
  8.4.0
  % package require mime
  1.3.2
  % mime::initialize -canonical text/plain -file model.cnv
  ::mime::1
  % set f [open model.mm1 w]
  file8a4f20
  % fconfigure $f -translation binary
  % mime::copymessage ::mime::1 $f
  % close $f
  % set g [open model.cnv1 w]
  file8a4f20
  % fconfigure $g -translation binary
  % mime::initialize -file model.mm1
  ::mime::2
  % puts -nonewline $g [mime::getbody ::mime::2]
  % close $g
  % diff model.cnv model.cnv1
  152c152,153
  < $c create line 153.208211621 304.213304026 
  153.208211621 304.213304026 -capsty
  le round -tags {arc00103 startblob realwidth
  (4.83329818985)} -width 4.8332981898
  5
  ---
  > $
  > c create line 153.208211621 304.213304026 
  153.208211621 304.213304026 -capstyl
  e round -tags {arc00103 startblob realwidth
  (4.83329818985)} -width 4.83329818985

  229a231
  >
  child process exited abnormally


tkt_uuid: 1053086fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: A new widget for scrolling many widgets with a ScrolledWidge
comment:
  Hi all,

  I recently needed the functionality of scrolling two 
  canvas widgets simultaneously, both of them embedded 
  in a ScrolledWindow widget. Of course there are 
  hundrends of references for doinh it in c.l.t., but not 
  easy to use code. So I decided it to write a BWidget 
  widget for doing exactly this.

  The attched code is a first implementation of such a 
  widget. Of course name/options are open to 
  discussion :-)

  The idea behind the new widget is simple: when a 
  new "MultipleScrollableWidgets" widget is created, only a 
  frame widget (without a border) is created. Then the 
  user is expected to create all the widgets that will be 
  scrolled as children of this frame. Also the user *must* 
  pack/place/grid the children onto the frame, in any way 
  he wants (i.e. like notebook pages).

  Then, each child widget must be declared to the 
  MultipleScrollableWidgets widget with 
  method "addwidget". Only declared widgets will be 
  scrolled. Finally a ScrolledWindow can be created, 
  having the MultipleScrollableWidgets widget as 
  its "scrollable" widget.

  The current implementation has also an option (-scroll) 
  to addwidget, for specifying whether each added widget 
  will scroll in the x & y direction. I.e,  you can add two 
  canvases both of which will be scrolled in the x 
  direction, but only the second will be scrollable in the y 
  direction (i.e. because the first holds some header items 
  we want always visible...)

  Any ideas are welcomed. Of course, the final target 
  should be to add such a widget in BWidgets :-)


tkt_uuid: 1522881fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib
priority: 5 Medium
foundin: None
resolution: Fixed
title: widget::panelframe add method generates an error
comment:
  Fix: the line

  foreach {ipadx ipady} [_padval $opts(-pad)] { break }

  in widget::panelframe method add should be

  foreach {ipadx ipady} [$self _padval $opts(-pad)] { break }


tkt_uuid: 1091766fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclbench
priority: 2
foundin: None
resolution: Fixed
title: runbench.tcl - documentation not up to date
comment:
  tclbench CVS as of 2004-12-27.

  doc/runbench.1 has

         -errors
                Takes  a  boolean  value  (0 or 1). True
  means that
                errors are thrown, else they are ignored.

  The runbench.tcl script itself exects:

          -throwerrors            # propagate errors in
  benchmarks files 

  The -threads option understood by the script isn't
  documented at all.


tkt_uuid: 3517145fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: listbox updates unnecessary when selection doersnot change,
comment:
  Here is a tiny enhancement for the listbox (from V1.29.2.6 in bwidget 1.9.5) widget to avoid redrawing when selection does not change. This happens frequently when a listbox with hottrack enabled displays image and text and the cursor is moved in the area right to image and text where only the background is displayed. I also detected that the listbox sometimes jumps between two entries when the cursor is positioned just between the entries for this case, at least under Linux with Tk8.5.9

  proc ListBox::selection { path cmd args } {
      variable $path
      upvar 0  $path data

      set oldsel $data(selitems);
      switch -- $cmd {
          set {
              set data(selitems) {}
              foreach item $args {
                  if { [lsearch -exact $data(selitems) $item] == -1 } {
                      if { [lsearch -exact $data(items) $item] != -1 } {
                          lappend data(selitems) $item
                      }
                  }
              }
          }
          add {
              foreach item $args {
                  if { [lsearch -exact $data(selitems) $item] == -1 } {
                      if { [lsearch -exact $data(items) $item] != -1 } {
                          lappend data(selitems) $item
                      }
                  }
              }
          }
          remove {
              foreach item $args {
                  if { [set idx [lsearch -exact $data(selitems) $item]] != -1 } {
                      set data(selitems) [lreplace $data(selitems) $idx $idx]
                  }
              }
          }
          clear {
              set data(selitems) {}
          }
          get {
              return $data(selitems)
          }
          includes {
              return [expr {[lsearch -exact $data(selitems) $args] != -1}]
          }
          default {
              return
          }
      }
      if {[string compare $oldsel $data(selitems)]} {
  _redraw_idle $path 1
      }
      return;
  }


tkt_uuid: 3422990fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tepam
priority: 5 Medium
foundin: None
resolution: Fixed
title: Some tepam tests require Tk without constraints.
comment:
  The test files adbox_widgets.test, adbox_all.test and proc_interactive.test explicitly require Tk without using any constraints.
  This causes errors in the test run when Tk is not present.


tkt_uuid: 3308051fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 5 Medium
foundin: None
resolution: Accepted
title: struct::list equal is not commutative in special case
comment:
  tclsh Session:
  % struct::list equal [list [list a]] {{a}}
  0
  % struct::list equal {{a}} [list [list a]]
  1

  Looks like a bug to me;)

  Proposed patch attachted.


tkt_uuid: 844660ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: install
priority: 5 Medium
foundin: None
resolution: None
title: tklib will not install documentation for some
comment:
  done
  Installing documentation for cursor
  install: `/opt/tcl8.5a0/man/mann/cursor.n' mode
  mismatch (0644 != 0444)
  Installing documentation for datefield
  install: `/opt/tcl8.5a0/man/mann/datefield.n' mode
  mismatch (0644 != 0444)
  Installing documentation for ipentry
  install: stat: ./modules/ipentry/*.n: No such file or
  directory
  install: installation of `./modules/ipentry/*.n' failed
  Installing documentation for autoscroll
  install: stat: ./modules/autoscroll/*.n: No such file
  or directory
  install: installation of `./modules/autoscroll/*.n' failed
  *** Error code 1 (ignored)
  chmod 444 /opt/tcl8.5a0/man/mann/*
  /usr/local/bin/install -c -m 644 ./man.macros
  /opt/tcl8.5a0/man


  The files in ipentry and autoscroll end in .man not .n


tkt_uuid: 900165ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: BWidget progressbar problem
comment:
  Hi, 
   
  The BWidget progressbar fails when using large values. This is 
  the code in version 1.7.0: 
   
  $path.bar coords rect -1 0 [expr {$val*$w/$max}] $h 
   
  Large integer values used for val and max will cause wrapping 
  problems for 32 bit integers. Making the new calculation using 
  doubles will fix the problem: 
   
  $path.bar coords rect -1 0 [expr {double($val)*$w/$max}] $h 
   
   
  Kind regards, 
   
  Jos. 


tkt_uuid: 467876ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Out of Date
title: tkchat pops up User Info boxes
comment:
  After clicking on a user's name the site responds 
  with USERINFO lines. These get interpreted by 
  showInfo to display pop up boxes. When the display is 
  refreshed the same info is displayed repeatedly 
  filling the screen with User Info windows. 

  The attached patch keeps track of the User Info 
  strings displayed and only creates a toplevel if the 
  string is new.

  The patch also fixes the say proc a little to remove 
  unneeded puts.  

  Steve


tkt_uuid: 1597589fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: diagrams
priority: 5 Medium
foundin: None
resolution: Out of Date
title: Various issues with the diagrams package
comment:
  Yeeling reported on the Tclers' chat the following 
  issues:
  - No package provide yet
  - circle string radius - does not work
  - line [getpos ..] [getpos ..] - does not work
  - arrows built from two or more line segments would be 
    nice


tkt_uuid: 567982ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: dynhelp: balloon + variable
comment:
  Some time ago, someone asked on comp.lang.tcl if it was
  possible with BWidget dynhelp to have both balloon help
  and variable help at the same time. This patch makes
  this possible.

  Jos.


tkt_uuid: 1094294fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 7 High
foundin: None
resolution: Fixed
title: Some format cmds mangle text w/ nroff formatter
comment:
  See this sample doctools markup (please note, that the
  first sentence used in the example is in fact out of
  the wild - the snitfaq.man of snit 0.97):

  [manpage_begin foo n 0.97]
  [description]

  In this example, [cmd text] is the [term type] command and
  [cmd .mytext] is the [term instance] command.
  Some other explanations.

  [manpage_end]

  Processed with mpexpand, this nroff is generated:

  '\"
  '\" Generated from file foo.man' by tcllib/doctools
  with format 'nroff'
  '\"
  .so man.macros
  .TH "foo" n 0.97  ""
  .BS
  .SH "NAME"
  foo \-
  .SH "DESCRIPTION"
  In this example, \fBtext\fR is the \fItype\fR command and
  \fB.mytext\fR is the \fIinstance\fR command.
  Some other explanations.

  Viewed with man (at least under linux, man 2.3.19) the
  text out of the source line starting with [cmd .mytext]
  is not shown.

  It is important, that the line in the document source
  starts with [cmd] and that the argument given to [cmd]
  starts with a dot (as widget names do, which makes it
  not so unlikely, that that happes, as the real life
  example shows); if [cmd] is used somewhere in the line,
  the displayed man page looks OK, even if the argument
  given to [cmd] starts with a dot.

  It's apparently the line starting \fB. which confuses
  groff. (This is just a guess, my nroff is so rusty, I
  hardly remember nasty little details.) 

  The [emph], [strong], [arg], [var] (and eventually
  other formatting commands) have the same problem, if
  used at the start of a line in the document source -
  probably every markup, which is possible in continuous
  text, which ends up using nr_bld, nr_ul and nr_bolds
  (at least) out of _nroff.tcl.


tkt_uuid: 3316478fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: simulation::random
priority: 7 High
foundin: None
resolution: Fixed
title: prng_rectangle is overwritten by prng_block implementation
comment:
  he implementation of prng_Block is mis-named as prng_Rectangle, overwriting the prng_Rectangle procedure coming just before it.
  Making both Rectangle and Block unusable.


tkt_uuid: 765321ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 5 Medium
foundin: None
resolution: Fixed
title: lcsInvertMerge dies with: can't read "type": no such variabl
comment:
  Create following proc

  proc diff2 {s1 s2} {
      set l1 [split $s1 {}]
      set l2 [split $s2 {}]
      set x [::struct::list longestCommonSubsequence $l1 $l2]
      ::struct::list lcsInvertMerge $x [llength $l1]
  [llength $l2]
  }

  call with:

     diff2 ab "a b"

  and it dies with

  can't read "type": no such variable
      while executing
  "string equal $type unchanged"
      (procedure "LcsInvertMerge2" line 24)
      invoked from within
  "LcsInvertMerge2 [::lindex $lcsData 0] [::lindex
  $lcsData 1] $len1 $len2"
      (procedure "::struct::list::LcsInvertMerge" line 2)
      invoked from within
  "::struct::list::LcsInvertMerge {{0 1} {0 2}} 2 3"
      ("eval" body line 1)
      invoked from within
  "eval [linsert $args 0 ::struct::list::$sub"
      (procedure "::struct::list" line 16)
      invoked from within
  "::struct::list lcsInvertMerge $x [llength $l1]
  [llength $l2]"
      (procedure "diff2" line 5)
      invoked from within
  "diff2 ab "a b""

  Hope this is enough info.

  Regards,

  Ashley Sanders a.sanders@mcc.ac.uk


tkt_uuid: 553980ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: struct
priority: 8
foundin: None
resolution: Accepted
title: skiplist struct
comment:
  Code for a skiplist implementation, from Keith Vetter:

  "I'd like to submit a module for tcllib to be part of
  the ::struct group. The module implements skip lists
  which a data structure similar to balanced trees but
  which are faster and simpler."


tkt_uuid: 611595ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: ncgi
priority: 8
foundin: None
resolution: Accepted
title: file upload support + fix for binary
comment:
  the attached path adds two functions to ncgi to support
  file upload. ncgi::import_file gives information about
  an uploaded file (modelled on the cgi.tcl interface but
  adds a -data option to get the data without writing it
  to a local file)  ncgi::tempfile is used to generate a
  temporary filename, maybe that belongs in fileutils. 

  I've also fixed a bug (I think) relating to uploading
  binary files which is to put stdin into -translation
  binary -encoding binary before reading the form data.
  Without this I was seeing translation of cr to nl cr in
  the uploaded data.  The changed version passes the test
  suite no problem but then so does the original so the
  binary test obviously isn't triggering this bug. 
  haven't got time just now to put together a test that
  does trigger the bug, sorry.


tkt_uuid: 753170ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Invalid
title: ScrolledWindow hang
comment:
  A dialogue box that works OK with a frame causes a hang
  when it is replaced by a ScrolledWindow -- sorry there
  is so much stuff in the attached example file but I
  couldn't get the hang to happen with just the
  ScrolledWindow on its own

  [jaspert@spirograph Run]$ uname -r
  2.4.20-8
  [jaspert@spirograph Run]$ /usr/local/ActiveTcl/bin/wish
  % info patchlevel
  8.4.3
  % package require BWidget
  1.6
  % source disag.tcl
  % Disaggregate .mswindow00001.canvas {Desktop} white
  generated 1.0 {} Default {} {} 0 0 0

  <at this point it is hung>


tkt_uuid: 2059415fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: None
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: ctext error when widget destroyed
comment:
  Hi,

  The following error message appears :

  invalid command name ".t._t"
  invalid command name ".t._t"
      while executing
  "$twin search -count length -regexp -- {([^\s\(\{\[\}\]\)\.\t\n\r;\"'\|,]+)} $si $end"
      (procedure "ctext::highlight" line 25)
      invoked from within
  "ctext::highlight .t 1.0 1.19"
      ("after" script)

  This error is reported in background.

  The reason for that bug is that "after" scripts are not cleaned after the destruction of the ctext widget.
  Looking at the ctext::highlight command, it is triggered by the following after sequence :

  after idle [list ctext::highlight $self $lineStart $lineEnd]

  in ctext::instanceCmd command.
  Other "after" script are associated with the command "ctext::comments" as well.

  A solution is to keep track of all after script generated, and to clean them when the widget is destroyed.
  For example, one can add a variable to keep track of the last after script associated with the highlight command :

  namespace eval ctext {
      variable lastafterscript ""
  }

  One can store the after ID with :

  set ::ctext::lastafterscript [after idle [list ctext::highlight $self $lineStart $lineEnd]]

  The Destroy method may contain :

  proc ctext::event:Destroy {win dWin} {
    after cancel $ctext::lastafterscript

  That solves the problem for one ctext only, and only for the last "after" highlight command.
  The real fix needs to store all after scripts, for the current ctext widget only.

  The bug can be reproduced with the unit test script in attachment.

  Regards,

  Michaël


tkt_uuid: 561416ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtp
priority: 5 Medium
foundin: None
resolution: Fixed
title: can't handle list of mail servers
comment:
  problem
  -------
  the procedure smtp::sendmessage has the option
  '-servers' for a list of available mail servers.
  Unfortunately the variable state(readable) is not reset
  after a failed connection the other servers in the list
  will also fail.

  solution
  --------
  in procedure smtp::initialize add

     set state(readable) 0

  at the beginning of the loop

     foreach server $options(-servers) {
       ...
     }

  best regards
  -- Beat Jucker


tkt_uuid: 630381ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Fixed
title: Cannot save multi-part MIME
comment:
  I am using the ActiveTcl 8.4.1 which I downloaded and installed yesterday
  on a Windows ME machine

  Trying to save a multi-part MIME with the command
      mime::copymessage $multiT $stream
  I get this error message:

  cannot open libcrypt
  cannot open libcrypt
      while executing
  "md5 -- $key"
      (procedure "mime::copymessageaux" line 62)
      invoked from within
  "mime::copymessageaux $token $channel "
      invoked from within
  "mime::copymessage $multiT $stream"

  It occurs to me that this might be something to do with US export controls
          --Jasper


tkt_uuid: 3379585fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Invalid
title: comm does not work in tclsh
comment:
  I tried to use ::comm as server in tclsh 8.5.9 and it does not work. sending a request works but i receive no answer. tclsh is not blocking.

  I used the following code to send a command using comm.

  package require comm
  ::comm::comm send 51439 set test 1


tkt_uuid: 1571751fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: Installer
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: [OSX] Install paths for tcllib 1.9
comment:
  The default install path for executables came up as "/System/Library/bin". 
  It should default to the /usr path. I will leave it up to you where in /usr it 
  should default to (/usr/local/bin ?).

  Submitted by: Robert Hicks <sigzero@gmail.com>


tkt_uuid: 955473ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Fixed
title: Fatal error: tkchat requires winico
comment:
  Tkchat 1.160 requires the Winico extension, which is
  considerably less common than other extensions. This
  stops tkchat from loading (on Windows at least) if that
  extension isn't actually present.

  Please wrap the require of winico in a catch and only
  do the rest of the winico-related initialisation if the
  extension is loaded correctly.


tkt_uuid: 505299ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: BWidget errors with multiple screens
comment:
  While trying the BWidget 1.3.1 demo on Windows 2000 
  with Tcl 8.3.3 (the ActiveState 8.3.3 release) I found 
  a problem with the ComboBox widget when run on the 
  second monitor of a multi-screen windows system.

  Running the demo app on screen 2, when I select the 
  ComboBox button to show the list, the list appears on 
  the primary monitor! Running the app on the primary 
  monitor is OK.

  A similar problem occurs with the dialog demos. The 
  color picker, font selector, progression, and password 
  dialogs all appear on the wrong monitor. The message 
  box appears on the _correct_ monitor but not the 
  template dialog.

  Finally the tree page doesn't work at all if run on 
  the secondary monitor although it's fine on the 
  primary monitor. The error stack is attached.

  So I assume this is a toplevel problem - and indeed 
  from wish doing 'toplevel .t' on the secondary screen 
  puts a toplevel widget on the primary screen. Placing 
  the widget on screen 1 'wm geometry .t' 
  gives '200x200+0+0' and top left of monitor 2 (which 
  is to the left of monitor 1) gives '200x200+-1024+0'


tkt_uuid: 1886636fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: snit
priority: 6
foundin: None
resolution: Not Applicable Here
title: [clock] inside snit::widgetadaptor
comment:
  In Tcl 8.5.0 with snit 2.2.1:

  ----
  package require snit
  snit::widgetadaptor sframe {
  option -foo[clock format [clock seconds] -format "%Y"]
  constructor {args} { installhull using frame }
  }
  ----

  Produces:
  ----
  invalid command name "::tcl::clock::format"
  ----


tkt_uuid: 1409219fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ntp
priority: 7 High
foundin: None
resolution: Fixed
title: Bug in use of package ceptcl
comment:
  When package 'udp' is looked for in "ntp/time.tcl", the
  variable "options(-protocol)" is set to udp. For
  'ceptcl' however the variable "options(protocol)" is
  modified. Note the missing dash "-" before "protocol".
  I believe that that is wrong and should be
  "options(-protocol)" as well, i.e. with a dash.


tkt_uuid: 1371186fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib
priority: 5 Medium
foundin: None
resolution: Fixed
title: "make check" fails for tklib
comment:
  A bug in sak.tcl is causing "make check" to fail with
  an error:

  3: Consistency of package versions ...
  ------------------------------------------------------
    Indexed, no provider:           widget::all
  can't read "::pf(ctext_tcl)": no such element in array
      while executing
  "format "%-*s | %s" $maxl $p $::pf($p)"
      (procedure "validate_versions_cmp" line 14)
      invoked from within
  "validate_versions_cmp ip pp"
  ...

  Looks like a typo where '::pf' should be 'pp'

  Attached is a patch to fix this problem.


tkt_uuid: 1582535fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Fixed
title: Infinite loop in StateHandler
comment:
  Hello,

  I have discovered a series of events which cause the 
  StateHandler proc to be called in an infinite loop. A 
  possible scenario to trigger this is the following:
   - open a ftp connection and start a get
   - make sure the control connection times out because 
  of network errors
   - try the ftp::Close proc and notice the "infinite 
  number of loops" exception of tcl.

  The reason for this to happen is that the 
  StateHandler passes through the [eof $ftp(CtrlSock)] 
  branch, where it goes back to vwait in 'WaitComplete 
  $s 0', without taking away the cause of the event. 
  Meaning the ftp(CtrlSock) is still readable, and so 
  the StateHandler is called again, and again, ...

  I have added a patchfile for this against revision 
  1.43 of ftp.tcl.

  Greetings,
  Guy


tkt_uuid: 2840147fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: tar
priority: 5 Medium
foundin: None
resolution: Accepted
title: Add prefix to name of file added to tarball
comment:
  The git-archive utility has an option --prefix described as:

    --prefix=<prefix>/
        Prepend <prefix>/ to each filename in the archive.

  I found this useful in the case that the the parent directory of what I'm wrapping up as a tarball isn't named the way I'd like root directory within the tarball to be named. However, I also needed to add a few files to the tarball, and my command-line tar didn't have a corresponding option. Therefore I turned to adding a -prefix option to the tcllib [tar::add] command.

  The main change needed to implement this was to split [tar::createHeader] into two commands [tar::statFile] and [tar::formatHeader], as [tar::createHeader] hardwired the in-archive name of a file to be the same as the name in the normal file system. I think this is a good change, as it also opens up for adding items to a tarball that don't first have to exist within the normal filesystem (a kind of [tar::put], if you will).

  Another change required was that [tar::writefile] takes another argument: the name to use in the archive. [tar::add] and [tar::create] have been modified accordingly.

  While testing this, I also discovered a bug in the current [tar::add]: one cannot in general assume that the end of an archive occurs 1024 bytes before the end of the file. The catch is that tarballs are written with a specific "blocksize" (often 20 records, i.e., 10Kb), and are supposed to consist of an integral number of complete blocks. Therefore there may be extra padding after the 1024 end-of-archive nulls, and it is then impossible to tell if an all-null record at the end of a tarball is nulls at the end of a file, end-of-archive nulls, or padding until the end of a block. The only safe way to find the end is to read the tarball from the beginning.

  I added a third option -quick to [tar::add] which selects the old seek-from-end method of finding where to put the header for the first new file, but made the default be to read the tarball from start.

  Being a tcllib developer, I can probably check this into CVS myself, but I think you should have a chance to look at it first.


tkt_uuid: 766765ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: tree
priority: 8
foundin: None
title: myTree keys node ?PatternMatch?
comment:
  It sure would be nice to query only the keys you need 
  from a strut::tree.  -- Like you can with Arrays.

  For Example:

  ARRAY NAMES:  array get names *NAME_*

  New Key Name Extraction: 

  myTree keys %n *NAME_*

  This would save a lot of extra analysis if the information 
  could be extracted directly using pattern matching 
  instead of extracting all keys.

  Any Questions?

  David Bigelow


tkt_uuid: 714209ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 8
foundin: None
resolution: Fixed
title: test failure: struct module
comment:
  Test platform: tcl 8.4.2 on intel Windows 2000

  Module:struct
  modules/struct/graph.test
  modules/struct/list.test

  ==== flatten-2.1 flatten errors FAILED
  ==== Contents of test case:

      list [catch {flatten} msg] $msg

  ---- Result was:
  1 {no value given for parameter "?-full?" to
  "::struct::list::Assign"}
  ---- Result should have been (exact matching):
  1 {wrong # args: should be "::struct::list::Assign
  ?-full? ?--? sequence"}
  ==== flatten-2.1 FAILED


tkt_uuid: 1727793fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: apps : request for new app
priority: 5 Medium
foundin: None
title: ijbridge: Add nick address to jabber WHOIS return
comment:
  Currently it is not possible from jabber to determine the host from which an IRC user is logged in (the host field is usually empty) This makes it impossible to check if an IRC user might be a well known troll.

  However the response 311 on the WHOIS request does contain the required info. Therefore I request an additional line Address: is added to the return.

  The following changes should be enough to add this:

  In proc client::registerhandlers

  # change the 311 registerevent to (I was unable to test if [additional] is what's needed:
  $cn registerevent 311 {
  set ::client::whois(realname) [msg]
  set ::client::whois(address) [additional]
  }

  # and in the 318 registerevent add:
  append info "Address: $whois(address)"


tkt_uuid: 1408807fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: asn
priority: 5 Medium
foundin: None
resolution: Fixed
title: Unversioned dependency on package log
comment:
  asn package depends on package log from tcllib.
  Current version of package doesn't work with log 1.0.2
  (as distributed with tcllib 1.4). 

  This can cause problem when I use last version of asn
  package from CVS, and rely on log package from system
  provided tcllib.

  I think that usage of log package can be removed from
  asn altogether, since it is not essential for operation
  of th e package, and needed only for debugging purpose
  (which is now covered by test suite), but at least
  particular working version should be required. 

  1.2 (from tcllib 1.7) would definitely do, and may be
  even 1.1, but I don't have machine with 1.1 handy


tkt_uuid: 700327ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: base64
priority: 5 Medium
foundin: None
resolution: Fixed
title: uuencode/uudecode using Trf
comment:
  The following bug occurs when trying to uuencode a line
  beginning with '-' using the uuencode command in
  Trf(from base64/uuencode.tcl):

  Error: ::uuencode: wrong # args, all options require an
  argument

  Errorinfo: ::uuencode: wrong # args, all options
  require an argument
      while executing
  "::uuencode -mode encode $s"

  Using '--' to stop processing of arguments should fix it.

  tcllib1.3/base64/uuencode.tcl

  line 81:

   return [::uuencode -mode encode $s]

  should be:

    return [::uuencode -mode encode -- $s]

  Same with the call to uudecode.

  The bug was discovered using ActiveState Tcl 8.4.2, but
  also exists in the CVS repository as far as I can tell.


tkt_uuid: 1272836fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: bignum :: float
priority: 5 Medium
foundin: None
resolution: None
title: math::bigfloat - failed tests with Tcl 8.5
comment:
  ==== bigfloat-round-1.0 eval : 'tostr [round [fromstr
  $x]]' FAILED
  ==== Contents of test case:
  uplevel 1 $code
  ---- Result was:
  1
  ---- Result should have been (exact matching):
  0
  ==== bigfloat-round-1.0 FAILED


  ==== bigfloat-round-1.0 eval : 'tostr [round [fromstr
  $x]]' FAILED
  ==== Contents of test case:
  uplevel 1 $code
  ---- Result was:
  -1
  ---- Result should have been (exact matching):
  0
  ==== bigfloat-round-1.0 FAILED


tkt_uuid: 1161942fffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: exif
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Adds most EXIF-2.2 tags to exif.tcl
comment:
  Add most EXIF-2.2 tags to exif.tcl
  This patch adds most of the EXIF-2.2 tags and some
  Olympus makernotes to exif.tcl. If an unknown tag is
  found, the script will report this tag as unknown tag
  instead of crashing.
  I checked the script with lots of personal photos as
  well as some sample images found on www.exif.org.

  - Matthias

  mlange_lists(at)yahoo.de

  --> This is a repost because I missed the checkbox for
  the file upload ...


tkt_uuid: 3036841fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: docstrip
priority: 5 Medium
foundin: None
resolution: Fixed
title: Bad links
comment:
  There are three bad links to tug.org in the man page.  Not sure where these are currently located since I don't know what was there before.  The links are listed below:


    [1]    The tclldoc package and class, http://tug.org/tex-archive/macros/latex/contrib/tclldoc/.

         [2]    The DocStrip utility, http://tug.org/tex-archive/macros/latex/base/docstrip.dtx.

         [3]    The doc and shortvrb Packages, http://tug.org/tex-archive/macros/latex/base/doc.dtx.


tkt_uuid: 224477ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 5 Medium
resolution: Fixed
title: pop3::list and pop3::top can hang
comment:
  Depending on the POP3 server, [pop3::list] and [pop3::top] can hang
  forever.  I've tracked this down to the termination condition in the while loop
  (duplicated in both routines):

          while {1} {
              set line [gets $chan]
              # End of the message is a line with just "."
              if {$line == "."} {;# <== here's the problem
                  break
              } elseif { ... }

  When the POP3 server uses CR+LF as the line terminator (which IIRC
  is what it's supposed to do) and $chan uses -translation binary (which
  pop3::open sets), then '$line' ends up containing ".\r", not ".".

  Suggested fix:

  replace 
  if {$line == "."} { ... }
  with
  if {[string equal [string trimright $line] "."]}  { ... }

  This seems to fix the problem for me.


tkt_uuid: 466228ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: apps : tkchat
priority: 5 Medium
foundin: None
title: tkchat, Cut, copy, paste should work
comment:
  The chat currently has no cut/copy/paste 
  functionality. It should be added (especially for 
  pasting urls inot a message).


tkt_uuid: 827645ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: htmlparse
priority: 5 Medium
foundin: None
resolution: Fixed
title: Missing documentation on contents of tree
comment:
  With the 2tree command there is no documentation on
  what actually lies within the tree. Ie. that the tag is
  specified within the "type" key and  character data
  appears in a child with a type of "PCDATA". Without
  this documentation usage of the tree is a bit of a mystery.


tkt_uuid: 1904210fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: linearalgebra
priority: 5 Medium
foundin: None
resolution: Invalid
title: eigenvector-1.0 fails
comment:
  ---- Result was:
  {{0.70710678118654757 -0.70710678118654735} {0.70710678118654746 0.70710678118654768}} {3.0 1.0}
  ---- Result should have been (numbers matching):
  {{0.707107 -0.707107} {0.707107 0.707107}} {3.0 1.0}
  ==== eigenvectors-1.0 FAILED

  Something in matchNumbers seems to go wrong.
  It compares to 6 decimals, and according to that the actual result should match IMHO.


tkt_uuid: 527114ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tcllib: request for new module
priority: 5 Medium
foundin: None
title: Import pop3 demon in Pool
comment:
  Import the pop3 demon in package
  Pool_Net into tcllib, possibly
  modified. This will make testing
  the pop3 client possible. And it
  completes the pop3 implementation.


tkt_uuid: 2686560fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: crc
priority: 8
foundin: None
resolution: Fixed
title: memleak in crc::cksum
comment:
  calling crc::cksum over and over causes a huge memleak.

  while { 1 } {
          set a [crc::cksum helloworld]
  }

  doing the same with crc::crc32 doesnt.


tkt_uuid: 456883ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Cannot dnd into empty ListBox
comment:
  This seems to be an old problem. I found traces in
  a google search but the patch mentioned was nowhere 
  to be found :(.

  I noticed the behaviour in a current cvs version of
  bwidget.


tkt_uuid: 1312869fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Duplicate
title: Fix locale problems (Bugs #911580 and #1276561)
comment:
  This patch fixes mime::parsedatetime such that 
  it doesn't rely on the user locale. 
   
  mime::parsedatetime is used for protocol 
  elements in SMTP and MIME.  These 
  should always be locale independent i.e. in 
  English. 
   


tkt_uuid: 476733ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
title: add new example - validating ftp url
comment:
  andreas kupries asked me to log this feature request -
  at http://mini.net/cgi-bin/wikit/2444.html is code
  making use of the ftp and url modules to validate ftp
  urls.  With a couple of changes to ftp module so that
  it actually works with uri (read the uri doc for geturl
  for details) this code could be trivially changed to
  validate any url that uri supports.


tkt_uuid: 553835ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: stooop
priority: 5 Medium
foundin: None
resolution: Fixed
title: Use [uplevel 1].
comment:
  The [uplevel] command is used a great deal throughout
  stooop, but in all examples I saw, the optional "level"
  argument is omitted.

  It will improve performance if an explicit [uplevel 1]
  is used, rather than depending on the default.

  When the level argument is omitted, [uplevel] spends
  time trying to convert its first argument to an
  integer -- wasted time.


tkt_uuid: 530059ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
title: Stricter check of incoming manpages
comment:
  The application of a format to a manpage should 
  perform stricter checks to ensure that the manpage
  is correct, i.e. conforming to the specification 
  in "format.man".

  This is a followup to the bug report

  "[528392] Missing commands in nroff format"

  which is invalid per se, but exposes that error
  messages generated during generation of the output
  may indicate errors in the manpage itself, and not
  in the doctools.


tkt_uuid: 509776ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: None
priority: 6
foundin: None
resolution: Not Applicable Here
title: Locale dependant test failures
comment:
  Several test scripts asume ::argv0 to always be there,
  which is not the case for a slave interpreter. The
  tests run fine by themselves but fail from under the
  all.tcl harness... This one-line patch addresses the
  problem.

  -mi

  P.S. Some other tests (mime decode/encode) fail because
  they assume the C/iso-8859-1 locale. To pass they must
  run with LANG=C set...


tkt_uuid: 1049503fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Fixed
title: Error messages go missing on Windows
comment:
  On Windows, you normally don't have a working proper
  console so any messages sent to stdout or stderr get
  lost.  These should either get logged (most cases) or
  popped up in dialog boxes (occasionally appropriate). 
  Offending lines (in tkchat.tcl v1.191)

  74: puts stderr $::errorInfo
  433: puts "ERROR: $new"
  445: puts "ERROR: $new"
  1734: puts [string map [list "\"" ""] $message]
  6081: puts "OPENSTREAM"


tkt_uuid: 1416803fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 5 Medium
foundin: None
resolution: Fixed
title: list: test suite bugs
comment:
  with -debug 1:

  * struct::list 1.5
  test name 'list-lcs-2.13' re-used; prior use in
  /local/src/tcllib/modules/struct/list.test
  test name 'list-lcs2-2.13' re-used; prior use in
  /local/src/tcllib/modules/struct/list.test


tkt_uuid: 2538424fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: base64
priority: 5 Medium
foundin: None
resolution: Fixed
title: unset in namespace has global side effects
comment:
  revision 1.29 of base64.tcl (latest revision) has an unset in the namespace eval base64 call when Trf isn't present. The specific line is:

  199: unset base64_tmp i char len val

  It also uses base64_tmp, i, char, len, and val earlier within the namespace eval. Since they're never declared with a "variable" call, they're resolved to global namespace. So the following example results in unappreciated behavior:

  set i 0
  package require base64
  puts $i

  The variable i is unset by base64. This should really be fixed by removing the "unset" call in namespace eval, and instead declaring these temporary variables in namespace scope with calls to variable.


  Fix:
  add after line 161: variable base64_tmp; variable i; variable char; variable len; variable val
  remove line 199: unset base64_tmp i char len val


tkt_uuid: 731759ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Accepted
title: line endings wrong for buildmessage
comment:
  Using buildmessage and therefore buildmessageaux to generate a 
  mime message results in the headers and boundaries having LF as 
  their line ending. According to RFC2045 these should be CRLF. 

  This may also apply to copymessage/copymessageaux also although 
  it may be using channels to do the translation I'm not sure.

  I have attached a suggested patch for mime.tcl

  Thanks

  Matthew


tkt_uuid: 1688650fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: grammar_peg
priority: 5 Medium
foundin: None
resolution: Fixed
title: latest docs not installing
comment:
  when I attempt to install the latest tcllib docs, I get:
  Generating /projects/sprs_lwv/tcl85/man/mann/peg.n
  Doctools Error in macro at line 728, column 0:
  [section {BUGS, IDEAS, FEEDBACK...]
  --> (FmtError) Manpage error (nolistcmd), "section BUGS, IDEAS, FEEDBACK" : Comm
  and not allowed inside of a list.
      while executing
  "::doctools::_format dt \[comment\ \{-*-\ tcl\ -*-\ doctools\ manpage\}\]\n\[man
  page_begin\ grammar::peg\ n\ 0.1\]\n\[copyright\ \{2005\ Andreas\ Kupri..."
      ("eval" body line 1)
      invoked from within
  "eval [list ::doctools::_$cmd $name] $args"
      (procedure "::doctools::DoctoolsProc" line 15)
      invoked from within
  "dt format [get_input $f]"
      (procedure "_man" line 26)
      invoked from within
  "_man grammar_peg nroff n /projects/sprs_lwv/tcl85/man/mann"
      ("eval" body line 1)
      invoked from within
  "eval $guide($m,$type) $m $args"
      (procedure "xinstall" line 4)
      invoked from within
  "xinstall doc nroff n    $config(doc,nroff,path)"
      (procedure "doinstall" line 19)
      invoked from within
  "doinstall"
      (procedure "main" line 11)
      invoked from within
  "main"
      (file "../installer.tcl" line 594)
  gmake: *** [install] Error 1


tkt_uuid: 1784836fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Documentation
priority: 5 Medium
foundin: None
resolution: Accepted
title: various items of note in the cvs head README files
comment:
  The top level README files have some typos (prefered instead of preferred, for instance). I also note, though, that I see no reference to TIP#190 file format being permitted for a Tcllib module.

  Is that something that should be considered to add to the documentation, since TIP 190 uses Tcllib as its primary source of examples of how one might make use of tcl modules?


tkt_uuid: 484850ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: math
priority: 5 Medium
foundin: None
title: Add "log-gamma" proc to math module
comment:
  The tcler's wiki has several procs implementing 
  factorial code.  It would be useful, once one decided 
  which of the implementations matched the current math 
  module style, to add one to the math modu


tkt_uuid: 546423ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: Documentation
priority: 5 Medium
foundin: None
resolution: Out of Date
title: tcllib manpage
comment:
  tcllib should have its own manpage. I would have added
  it myself via cvs but wasn't sure where it should go,
  so I'll leave it to whomever is most in tune with the
  doc's.


tkt_uuid: 3141568fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
resolution: Fixed
title: find errors out on broken directory soft links
comment:
  fileutil::find errors out on broken directory soft links.  I am running ActiveTcl 8.5.9.1 on
  Windows XP and fileutil 1.14.4 from the Activestate Teapot.

  See attached error.tcl script.  Basically, the link1_test link points to a non-existent
  directory, and then "glob -nocomplain -directory link1_test -- *" errors out.  (One could
  argue that this should not error out because "glob -nocomplain -directory non_existent_dir -- *"
  does not error out, but that's not a tcllib issue.)

      [510] ./error.tcl
      first find results: ./.error.tcl.un~ ./error.tcl ./error.tcl+ ./.error.tcl.swp ./dir1_test ./link1_test
      couldn't read directory "C:/temp/tmp/link1_test/*": no such file or directory
          while executing
      "glob -nocomplain -directory $current -types f          -- *"
          (procedure "GLOBF" line 2)
          invoked from within
      "GLOBF $current"
          (procedure "find" line 48)
          invoked from within
      "find . {string match *}"
          invoked from within
      "set findResults2 [find . {string match *}]"
          (file "./error.tcl" line 19)

  I worked around this by adding a test at the beginning of GLOBF and GLOBD.

      proc ::fileutil::GLOBF {current} {
          if {([file type $current] eq {link}) && ![file exists [file readlink $current]]} {
              return {}
          }
          ...


tkt_uuid: 593254ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ncgi
priority: 5 Medium
foundin: None
resolution: Fixed
title: setValue doesn't work right w/ multipart
comment:
  ncgi::setValue doesn't work right with multipart forms,
  if you pass it a string with spaces in it, because of
  the way it gets treated by ncgi::value.  See new test case.


tkt_uuid: 3382519fffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: bwidget 1.x
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: "Font" option configuration for selected page of NoteBook
comment:
  In documentation for BWidget it is stated that with "itemconfigure" command user can query/modify any option that can be used during NoteBook widget creation.
  With current version of BWidget (1.9.5) there is no possibility to change "-font" option for single page.
  I've made few modifications to file "notebook.tcl", and right now it is possible to do that.
  Modified file is attached to this report - maybe it is worth to include it in official release.

  Best regards to all,
  Michal.


tkt_uuid: 2038279fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Fixed
title: The ftp package is misusing namespace variables
comment:
  $ tclsh8.5 
  % set serial global; set VERBOSE global; set DEBUG global;
  global
  % source ./ftp.tcl
  % set serial
  0
  % set VERBOSE
  0
  % ...

  It would probably help to audit tcllib's usage of namespace eval with set, so that we can fix these missing [variable] problems that result in globals being overwritten.

  See also:
  http://wiki.tcl.tk/1030


tkt_uuid: 1155390fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: asteroids
priority: 5 Medium
foundin: None
resolution: Fixed
title: app:asteroids: missing music reset
comment:
  The "music" in the game asteroids does not reset to its
  initial speed when you start a new game. After playing
  a fair number of games, it's going at a silly speed
  even on the initial level...


tkt_uuid: 1416762fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: calculus
priority: 5 Medium
foundin: None
resolution: Fixed
title: calculus: test suite bug
comment:
  with -debug 1:

  * math::calculus 0.6.1
  test name 'NewtonRaphson-2.1' re-used; prior use in
  /local/src/tcllib/modules/math/calculus.test


tkt_uuid: 1774995fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Duplicate
title: error in comm error processing
comment:
  (I woulda sworn I submitted this once; sorry if it's a duplicate)

  In comm there is this code in proc CommRunHook. Notice how catch saves its output in "res" but the return statement for case 1 uses $result:

      ...
  commDebug {puts stderr "<$chan> /interp $interp"}
  set code [catch {interp eval $interp $cmd} res]
      } else {
  commDebug {puts stderr "<$chan> /main"}
  set code [catch {uplevel 1 $cmd} res]
      }

      # Perform the return code propagation promised
      # to the hook scripts.
      switch -exact -- $code {
  0 {}
  1 {
      return -errorinfo $::errorInfo -errorcode $::errorCode -code error $result
  }
  3 {return}
  4 {}
  default {return -code $code $res}
      }


tkt_uuid: 1316040fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: grammar_fa
priority: 4
foundin: None
resolution: Fixed
title: grammar_fa/*.test prints extra info
comment:
  dacceptor.test, dexec.test, fa.test, and faop.test
  include gratuitous puts commands, cluttering the log.


tkt_uuid: 1443461fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: ListBox delete doesn't cleanup in help.
comment:
  ListBox items can have a helptext argument. In
  _set_help namespace variable "help" gets filled. In
  delete the content of array help is however not updated.
  If you add "Widget::getVariable $path help" after
  "upvar 0 $path data" and
  "array unset help $item" after " data(items) [lreplace
  $data(items) $idx $idx]" then this bug is fixed.

  m.d.nauta@hetnet.nl


tkt_uuid: 520940ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: apps : request for new app
priority: 5 Medium
foundin: None
title: New application bundle - tcldevapps
comment:
  I'd like to suggest a new bundle created in tcllib -
  this might be called tcldevapps.  The idea would be
  development tools for the Tcl programmer.

  The first application I would like to see in that suite
  would be tkinspect.  Another might be one of the
  debugging tools.  There are likely other applications
  that are of use to the developer that would fall into
  this category.


tkt_uuid: 1735135fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: math
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: tcllib math::linearalgebra additions (matrix stuff)
comment:
  you can find at the bottom of this page http://wiki.tcl.tk/778 additions made by me for linearalgebra package.

  I hope you can include it into the tree.

   (actually only matrix rank is missing, but it would require combinatory functions; matrix determinant is computed with cofactor expansion, that -yes- is cpu expensive. I'll do a better version using Gauss-Jordan elimination in the future)


tkt_uuid: 3094654fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: http :: autoproxy
priority: 3 Low
foundin: None
resolution: Fixed
title: Autoproxy man page - before options
comment:
  On the man page, section "Options": some options have a "-" as first character, some dont.
  IMHO they all should have one (or none, as the - is given in the configure method description)


tkt_uuid: 495976ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 8
foundin: None
resolution: Fixed
title: install copies from base dir not modules
comment:
  install.sh tries to copy from the base directory, not
  the modules subdirectory, so cp does not find the
  module directories:

  daruma# ./install.sh
  cp: cannot stat `base64/*.tcl': No such file or directory
  [etc]

  Fix: either cd to modules before the for loop, or
  change the cp commands in the for loop from:

      cp -f $j/*.tcl $TCLINSTALL/lib/tcllib1.1/$j ; \
      cp -f $j/*.n   $TCLINSTALL/man/mann ; \

  to:

      cp -f modules/$j/*.tcl $TCLINSTALL/lib/tcllib1.1/$j ; \
      cp -f modules/$j/*.n   $TCLINSTALL/man/mann ; \


tkt_uuid: 1177108fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: graph
priority: 5 Medium
foundin: None
resolution: Fixed
title: graph.tcl uses global variable
comment:
  When graph.tcl is sourced as the struct package is
  loaded, the following expression is evaluated near the
  beginning:

  if {
      ![catch {package require cgraph} version] &&
      [package vcompare $version 0.6] > 0
  }

  in this instance $version is created as a global
  variable, which has the potential to clash with with
  values defined in the program loading the package.

  Since tcllib packages are supposed to make rigorous use
  of namespaces, the above expression would be better if
  it read:

  if {
      ![catch {package require cgraph}
  ::struct::graph::version] &&
      [package vcompare $::struct::graph::version 0.6] > 0
  }


tkt_uuid: 2999022fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: map
priority: 5 Medium
foundin: None
resolution: Fixed
title: map::slippy Losing floating point in a few methods
comment:
  map::slippy tile 2geo tile  and  map::slippy point 2geo point  have there first/inter most computations returning integers instead of floating points. 
  Code from  map::slippy tile 2geo tile:
    set lat   [expr {$radtodeg * (atan(sinh($pi * (1 - 2 * $row / $tiles))))}]   <--  $row/$tiles  should be between 0-1 but always computes to 0.
    set lon   [expr {$col / $tiles * 360.0 - 180.0}]   <---  Same with $col/$tiles.

  Evample:
  (LBA_OSM_NEW) 5 % ::map::slippy tile 2geo [list 11 504 775]
  11 85.05112877983284 -180.0
  (LBA_OSM_NEW) 6 % ::map::slippy tile 2geo [list 11 775 504]
  11 85.05112877983284 -180.0


  Easy fix by casting with a 1.0*$row ...   By the way, great package.

  Thanks,

  -Matt


tkt_uuid: 1414589fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: snit
priority: 7 High
foundin: None
resolution: Fixed
title: [package require snit] stomps on $::dir
comment:
  % set dir "Important Data"
  Important Data
  % package require snit     
  1.1
  % set dir
  /local/src/tcllib/modules/snit


  Stay in your own namespace, snit!


  :)


tkt_uuid: 1446320fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib
priority: 5 Medium
foundin: None
resolution: Out of Date
title: widget::dialog -modal local option does not work
comment:
  Specifying the "-modal local" option to a
  widget::dialog does not make the dialog modal. It
  actually would generate an error because of invalid
  -local option to grab but the offending line is under a
  catch so the error gets ignored.
  A patch to fix this is:

  195c195,201
  <           catch {grab -$option(-modal) $win}
  ---
  >           catch {
  >                 if {$options(-modal) eq "local"} {
  >                     grab $win
  >                 } else {
  >                     grab -$option(-modal) $win
  >                 }
  >             }

  /Ashok


tkt_uuid: 740478ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: make install fails due to a documentation bug
comment:
  while attempting to install the latest CVS snapshot for
  tcllib, I get this error, causing installation to cease:

  Generating /volws/lwv26/ldatae/man/mann/irc.n
  @--> invalid command name "target"
      while executing
  "::doctools::_format dt {[comment {-*- tcl -*- doctools
  manpage}]
  [manpage_begin irc n 0.4]
  [moddesc   {Low Level Tcl IRC Interface}]
  [titledesc {Creat..."
      ("eval" body line 1)
      invoked from within
  "eval [list ::doctools::_$cmd $name] $args"
      (procedure "::doctools::DoctoolsProc" line 15)
      invoked from within
  "dt format [get_input $f]"
      (procedure "_man" line 17)
      invoked from within
  "_man irc nroff n /volws/lwv26/ldatae/man/mann"
      ("eval" body line 1)
      invoked from within
  "eval $guide($m,$type) $m $args"
      (procedure "xinstall" line 4)
      invoked from within
  "xinstall doc nroff n    $config(doc,nroff,path)"
      (procedure "doinstall" line 18)
      invoked from within
  "doinstall"
      (procedure "main" line 11)
      invoked from within
  "main"
      (file "../installer.tcl" line 484)
  *** Error code 1
  make: Fatal error: Command failed for target `install'

  Seems like installation should continue even when an
  error like this had occurred.


tkt_uuid: 833034ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: ScrolledWindow fails after managed widget is destroyed
comment:
  ScrolledWindow should be more robust, when the managed
  widget is destroyed, like it was for BWidget 1.5.

  Application background:
  -----------------------
  (1) After creating a ScrolledWindows $sw it has no
  widget and displays a gray background.
  (2) After assigning a widget [$sw setwidget $w] it
  manages the widget $w.
  (3) With 1.6 's not possible anymore to return to state
  (1).

  With BWidget 1.5 it was possible to destroy the widget $w.
  But BWidget 1.6 fails to display anything even after a
  fresh     
  [$sw setwidget ...].

  It would also be nice to have a
      $sw setwidget {}
  making the ScrolledWindow $sw manage no widget.

  Script illustrating the problem
  (runs with 1.5, fails with 1.6):
  -----------------------------
  catch {console show}
  package require -exact BWidget 1.6

  set sw [ScrolledWindow .sw -scrollbar both -auto both]
  pack $sw -fill both -expand yes
  wm geometry . 400x600

  for {set i 0} {$i < 2} {incr i} {
      text .text$i
      .text$i insert end [string repeat "This is text
  window $i\n" 5]
  }

  puts "The ScrolledWindow has no widget"
  after 3000 {$sw setwidget .text0; puts "Set widget 0"}
  after 6000 {destroy .text0; puts "Destroy widget 0"}
  after 9000 {$sw setwidget .text1; puts "Set widget 1"}


tkt_uuid: 531231ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtp
priority: 2
foundin: None
resolution: Invalid
title: Error not caught: sendmessage, bad args
comment:
  George@Orwellian.Org writes:

  I constructed smtp::sendmessage arguments without
  including an originator/From, which is an error.

  I was running smtp::sendmessage via 'catch' and got:

  ****errmsg='can't read "aprops(error)": no such element
  in array'.

  Which means the smtp code blew up rather than
  report the error.

  Here is where the error occurred in proc sendmessage:

  puts  $::fd_Trace "Originator='$originator'."
          set addrs [mime::parseaddress $originator]
  puts $::fd_Trace "addrs='$addrs'."
          if {[llength $addrs] > 1} {
              error "too many mailboxes in $who:
  $originator"
          }
          array set aprops [lindex $addrs 0]
  puts $::fd_Trace "Here#1, array names aprops = [array
  names aprops]"
          if {$aprops(error) != ""} {
              error "error in $who: $aprops(error)"
          }

  Here is my runtime diagnostic: 

  Originator=''.
  addrs=''.
  Here#1, array names aprops =
  ****Error: Build_SMTP2='smtp::sendmessage $part -debug
  0 -servers {mx02.earthlink.net}   -header {Subject
  {Email from Somebody}}   -header {To {"The Somebody
  Meister" <Somebody@earthlink.net>}}'.

  ----

  I'd also like to note a "gotcha".

  I first was sending email to two recipients,
  one at Road Runner NYC, one at Earthlink.

  It blew up because I was pointing to RR's SMTP server,
  and it wouldn't "relay" for the Earthlink address.

  I looked at the doc for smtp::sendmessage, saw that
  the -servers option would take a list of SMTP servers,
  and ran it again with both the RR and Earthlink SMTP
  servers specified.

  Same error.

  So, the description of the -servers option is useless
  in telling the programmer what it's for.

  I had to look at the source code to see what it
  actually did.

  It would be convenient to be able to either pair
  recipients with their server, or --- best --- be able
  to give an option saying to use DNS to get MX records
  for the recipient.

  One should not have to hard-code SMTP server names
  into their scripts. That's a ticking time-bomb.


tkt_uuid: 784515ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Documentation
priority: 7 High
foundin: None
resolution: Fixed
title: Obsolete module instructions in README
comment:
  The overall tcllib README file describes how to add new 
  modules to Makefile.in.  A casual inspection of Makefile.in 
  reveals that it's not done this way anymore.  README should 
  be updated to reflect the new method.


tkt_uuid: 485717ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: csv
priority: 5 Medium
foundin: None
title: add csvdiff to examples directory
comment:
  during the development of the csv module, the author,
  andreas kupries, wrote a csvdiff application that
  demonstrates yet again the usefulness of the
  application.


tkt_uuid: 1969847fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: yaml
priority: 5 Medium
foundin: None
resolution: Fixed
title: Testsuite failures
comment:
  Attached a quick run of the testsuite.

  It seems that a 'switch' command in yaml is not protected against the occurrence of '-' in its input, leading to misinterpretation as option.

  I.e. the code contains

      switch $ch

  and it should better be

     switch -- $ch


tkt_uuid: 472259ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: cmdline
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: getoptions -- help or error?
comment:
  In the ::cmdline::getoptions procedure, there is no
  way to differentiate between a user who wants help
  and passes a -? or -help option, and a user who has
  entered an unknown option.  In both cases, the
  getoptions proc calls
      error [cmdline::usage $optlist $usage]

  I would suggest the attached patch which:
  1. changes [error] to [return -code -1] if the user
     wants help, to differentiate from a real error
  2. changes the error string if a real error
     occurred.


tkt_uuid: 707009ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
resolution: Fixed
title: fileutil::stripPwd [pwd] produces error
comment:
  Hello,
  fileutil::stripPwd produces an error when called like
      fileutil::stripPwd [pwd]
  While I would suggest to return '.' in this case, it
  might make  sense to return $path unchanged, but in any
  case it should not produce an error.

  I attach a version where '.' is returned in this
  particular case - and some typos corrected.
  Best regards
  Helmut Giese


tkt_uuid: 486547ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: struct :: graph
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: note for future struct::graph developmen
comment:
  Perl has a number of modules dealing with graphs -
  perhaps some useful code could be garnered by looking
  at modules such as
  http://www.cpan.org//authors/id/N/NE/NEILB/ where the
  author has a collection of
  modules for reading and writing directed graphs in a
  variety of formats. 


tkt_uuid: 3604129fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: imap4
priority: 5 Medium
foundin: None
resolution: Accepted
title: added imap "copy" command
comment:
  I've added a proc for the imap "copy" function, which is needed if you want to move a message from one mailbox to another.  Currently, it's not possible to move messages between folders with the imap4 library. This proc fixes that problem.

  To add this feature, paste the following proc below the "proc expunge" function in imap4.tcl

  May I ask that you add this patch to the imap library ?

  Thanks!

  -john



     # copy : copy a message to a destination mailbox
     proc copy {chan msgid mailbox} {
         if {[simplecmd $chan COPY SELECT [list $msgid $mailbox]]} {
             return 1
         }
         return 0
     }


tkt_uuid: 1909681fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: md5crypt
priority: 5 Medium
foundin: None
resolution: Works For Me
title: Tcl version of md5crypt::aprcrypt error for some values
comment:
  Tested with 
    tcl8.5a4 & tcllib 1.8.01 
    &
    tcl8.5.2b1 & tcllib 1.10

  If tcllib is installed without the tcllibc module,
  certain values cause md5crypt::aprcrypt to fail with an error as shown below.

  % package require md5crypt
  1.1.0
  % md5crypt::aprcrypt a c
  can't use empty string as operand of "|"

  % set ::errorInfo
  can't use empty string as operand of "|"
      while executing
  "expr {([lindex $V 3] << 16) | ([lindex $V  9] << 8) | [lindex $V 15]}"
      (procedure "::md5crypt::md5crypt_tcl" line 71)
      invoked from within
  "md5crypt::aprcrypt a c"


  When tcllibc is present the error doesn't occur.


tkt_uuid: 3536133fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Build System & Testing
priority: 5 Medium
foundin: None
resolution: Accepted
title: Installation fails...
comment:
  Installing tklib in a cross-compilation environment fails. The problem is in Makefile.in, where the option -app-path is not used.

  The following:
  install:
  $(TCLSH_PROG) `$(CYGPATH) $(srcdir)/installer.tcl` \
  -no-examples -no-html \
  -pkg-path   $(DESTDIR)$(pkglibdir) \
  -nroff-path $(DESTDIR)$(mandir)/mann \
  -no-wait -no-gui

  Must be changed to:

  install:
  $(TCLSH_PROG) `$(CYGPATH) $(srcdir)/installer.tcl` \
  -no-examples -no-html \
  -pkg-path   $(DESTDIR)$(pkglibdir) \
  -app-path   $(DESTDIR)$(bindir) \
  -nroff-path $(DESTDIR)$(mandir)/mann \
  -no-wait -no-gui


tkt_uuid: 476804ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: ftp
priority: 3 Low
foundin: None
title: geturl handlers in protocol packages
comment:
  The uri module implements a general geturl method which
  delegates to the scheme handler. Thus uri::geturl
  file:// is handled by the uri packaage, uri::geturl
  http:// is passed off to http::geturl.

  We should implement a geturl procedure in the ftp
  package and in any other package implementing such
  internet protocols (gopher, news?)


tkt_uuid: 1779624fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: log
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Execute a command only when debug is active.
comment:
  e.g display the results of info script when debug is active. 

  something like:
   
  ::log::lvSuppressLE emergency 0

  ::log::log debug [ info script ]


tkt_uuid: 1492527fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Rejected
title: bwidget - Dialog uses tk_messageBox: frozen gui.
comment:
  Executing the attached code on wish from ActiveState 8.
  4.[11,13] results
  on an unresponsive gui when the user does something of 
  this:

  * click the Dialog's button labeled as "click me!". 
  Then click the ok
    button on the messagebox. [Win2KSP4, ActiveState Tcl/
  Tk 8.4.11].

  * click the dialog's button labeled as "click me!", 
  then click the
    Dialog's title bar, the click the Ok button on the
    messagebox. [WinXPSP2, ActiveState Tcl/Tk 8.4.13].

  * click the dialog's button labeled as "click me!", the 
  click the Ok
    button on the messagebox, click again the "click me!" 
  button, click
    again the messagebox Ok button [WinXPSP2, ActiveState 
  Tcl/Tk 8.4.13].

  The OS/Tcl version combination is just the setup 
  available to
  me. Nothing beyond that was tested.


tkt_uuid: 1009003fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: graph
priority: 5 Medium
foundin: None
resolution: Invalid
title: "graph arcs -in, -out" broken?
comment:
  I can't thank you enough for support. ::struct::graph 
  can save my project. 

  In the following program using ::struct version 2.0, I 
  expected to see no loops and exactly 2 arcs between 2 
  dissimilar nodes. I am getting something different.

  BTW, I have applied your earlier change for null graphs 
  before running this.

  Thanks in advance,
  -Bhushit

  ######### graph1.tcl ###########
  package require struct
  puts [ package versions struct ]
  set x [ ::struct::graph ]
  puts "created $x"

  set a [ $x node insert ]
  set b [ $x node insert ]

  set c [ $x arc insert $a $b ]
  set d [ $x arc insert $b $a ]
  puts "inserted $c from $a to $b"
  puts "inserted $d from $b to $a"

  set e [ $x arc insert $a $b ]
  set f [ $x arc insert $b $a ]
  puts "inserted $e from $a to $b"
  puts "inserted $f from $b to $a"

  foreach n1 [ $x nodes ] {
      foreach n2 [ $x nodes ] {
  foreach arc [ $x arcs -out $n1 -in $n2 ] {
      puts "from $n1 to $n2 : $arc"
  }
      }
  }

  ######## output #########
  expectk5.40.0 > source graph1.tcl
  2.0 1.4 1.3
  created ::graph9
  inserted arc1 from node1 to node2
  inserted arc2 from node2 to node1
  inserted arc3 from node1 to node2
  inserted arc4 from node2 to node1
  from node2 to node2 : arc1
  from node2 to node2 : arc3
  from node2 to node2 : arc1
  from node2 to node2 : arc3
  from node2 to node1 : arc1
  from node2 to node1 : arc3
  from node2 to node1 : arc2
  from node2 to node1 : arc4
  from node1 to node2 : arc2
  from node1 to node2 : arc4
  from node1 to node2 : arc1
  from node1 to node2 : arc3
  from node1 to node1 : arc2
  from node1 to node1 : arc4
  from node1 to node1 : arc2
  from node1 to node1 : arc4

  ###### expected output #######
  expectk5.40.0 > source graph1.tcl
  2.0 1.4 1.3
  created ::graph9
  inserted arc1 from node1 to node2
  inserted arc2 from node2 to node1
  inserted arc3 from node1 to node2
  inserted arc4 from node2 to node1
  from node2 to node1 : arc2
  from node2 to node1 : arc4
  from node1 to node2 : arc1
  from node1 to node2 : arc3

  ### Difference between 2.0 and my graph.tcl ###
  ### < mine, > released ###

  1134,1139c1134
  <     if { [ info exists ina ] } {
  <       unset ina
  <     }
  <     if { [ info exists outa ] } {
  <       unset outa
  <     }
  ---
  >     unset ina outa
  1145,1147c1140
  <     if { [ info exists arcn ] } {
  <       unset arcn
  <     }
  ---
  >     unset arcn
  2703,2708d2695
  < 
  <     array set nodeAttr  {}
  <     array set arcAttr   {}
  <     array set inArcs    {}
  <     array set outArcs   {}
  <     array set arcNodes  {}


tkt_uuid: 3470437fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: tklib :: ico
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Padding on and mask rasters incorrect.
comment:
  in proc ::ico::getAndMaskFromColors {colors}

  Padding calculation might look better like this:

    append l [string repeat 0 [expr {(32 - ([string length $l] % 32))%32}]]


tkt_uuid: 746960ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: BWidget Tree insert bug
comment:
  In the current implementation of the BWidget tree
  widget, not enough checks are performed when
  adding new nodes into the tree.

  For example, the current code allows
  somebody to create a new tree node
  that contains into its node name any
  instances of the characters &, |, ^, !.
  However, if you add such nodes, expect
  problems: as a canvas widget is
  used for implementing the widget and these
  characters have special meaning in tag
  names (are considered operators - the
  canvas man page does not stress this issue but thats
  another story :-)) you end
  up with various errors when the widget gets
  drawn (for example errors during
  canvas bbox). The user is not
  always able to trace down the source of error
  (I had to check the canvas implementation to
  locate the error message, see what the
  code tried to do (a search upon the tags)
  and then go to the man page to find out what is wrong).

  I can think of two possible solutions:
  1) Check for these characters when a node is created
  and through an error if any of these characters are used.
  2) Allow these characters, but silently replace them
  with something else.

  George


tkt_uuid: 1329642fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: logger
priority: 5 Medium
foundin: None
resolution: Fixed
title: logger::disable/enable/setlevel ignored
comment:
  The global commands for setting a loglevel are ignored
  by global loggers created after their execution. This
  is surprising and will IMHO trip many application
  authors, as tehy will likely set the log level for
  their application before loggers in packaged are created.


tkt_uuid: 551133ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: csv
priority: 5 Medium
foundin: None
resolution: Fixed
title: csvdiff duplicate key bug
comment:
  csvdiff expects that there are no 'keys' within either
  the first or second input files.  This results in
  erroneous differences reported currently.

  the --help option doesn't mention this limitation and
  there is no man page to mention this limitation, so I
  will file this behavior as a bug.

  I know I'd prefer to have duplicates retained and
  diffed...


tkt_uuid: 1263071fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: snit
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: -configuremethod
comment:
  Things like:

      option -text      -configuremethod [list SetText 1]
      method SetText {num option value} {
  $win.lbl$num configure -text $value
  set options($option) $value
      }

  wont work. Perhaps the callback should be concatenated 
  (uplevel) when executed.

  snit 1.0


tkt_uuid: 830075ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 7 High
foundin: None
resolution: Fixed
title: fileutil::cat doesn't concatenate files
comment:
  fileutil::cat only accepts one filename as an argument,
  whereas the real cat takes files and concatenates them
  together.


tkt_uuid: 3556779fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: widget
priority: 5 Medium
foundin: None
resolution: Out of Date
title: No calendar in August
comment:
  I use widget_calendar with this command:
  widget::calendar .z5fd.app.frdia.date -dateformat "%Y-%m-%d" -language de -textvariable zAr_uiDia(exposureDate)  -command z5ui_selectedDate

  In July all works fine  ..  today, Index 08 = August ???
  Executing the script i get:

  bad index "08": must be integer?[+-]integer? or end?[+-]integer? (looks like invalid octal number)
  bad index "08": must be integer?[+-]integer? or end?[+-]integer? (looks like invalid octal number)
      while executing
  "lindex $LANGS(mn,$lang) $month"
      (procedure "::widget::calendar::Snit_methodformatMY" line 9)
      invoked from within
  "$self formatMY $data(month) $data(year)"
      (procedure "::widget::calendar::Snit_methodRefresh" line 42)
      invoked from within
  ".z5fd.app.frstor.date Refresh"
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 [linsert $args 0 $self]"
      invoked from within
  "::snit::RT.CallInstance ::widget::calendar::Snit_inst1 Refresh"
      ("after" script)
  bad index "08": must be integer?[+-]integer? or end?[+-]integer? (looks like invalid octal number)
  bad index "08": must be integer?[+-]integer? or end?[+-]integer? (looks like invalid octal number)
      while executing
  "lindex $LANGS(mn,$lang) $month"
      (procedure "::widget::calendar::Snit_methodformatMY" line 9)
      invoked from within
  "$self formatMY $data(month) $data(year)"
      (procedure "::widget::calendar::Snit_methodRefresh" line 42)
      invoked from within
  ".z5fd.app.frstor.date Refresh"
      ("uplevel" body line 1)
      invoked from within
  "uplevel 1 [linsert $args 0 $self]"
      invoked from within
  "::snit::RT.CallInstance ::widget::calendar::Snit_inst1 Refresh"
      ("after" script)

  I got this error both - on a linux-System and on win7, 
     active-tcl 8.5.11,  tklib 0.5

  well, i hope, you can help
  regards Bernd


tkt_uuid: 620062ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Fixed
title: bug in retrieve
comment:
  There is a bug in the main loop within the 
  pop3::retrieve proc. I think this bug may be caused 
  by the fact that the Tcl 8.3 scan command behaves 
  differently from the documentation. In the loop over 
  index from start to end, there is a switch statement. 
  This bug may occur for either the retr or the list 
  elements in the switch statement.
  The bug is caused by these lines:

  set sizeStr [::pop3::send $chan "RETR $index"]
  if {[scan $sizeStr {%d %s} size dummy] < 0} {
  .....

  Note that it is expected that sizeStr contains a 
  decimal number and a string. The result "< 0" will be 
  returned if neither a decimal nor a string is found. 
  But, I have tested the scan function under Tcl 8.3 and 
  it appears to return 0, NOT -1, if no conversions are 
  performed! For example, the Tcl command

  scan "This is a dummy string" {%d %s} d s

  will return 0 under Tcl 8.3 and neither d nor s will be 
  defined. Since the code currently checks for -1, the 
  code crashes because the decimal variable "size" is 
  not defined.

  This bug should be easy to fix. Just change the test 
  from <0 to <=0. Even better would be to make sure 
  that the number of conversions is at least as high as 
  the index of interest into the conversion set. By this I 
  mean the following:
  If the format is {%d %s} and we are interested only in 
  the first %d parameter, then the test should be 
  if {[scan $sizeStr {%d %s} size dummy] < 1} {
    handle no size
  } else {
    use $size
  }

  As another example we should have in the list branch:

  if {[scan $sizeStr {%d %d %s} dummy size dummy] 
  < 2} {
    handle no size
  } else {
    use $size
  }
  because we need at least two conversions to get size 
  defined.


tkt_uuid: 1752755fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: An error dialog pops up while ListBox is resizing
comment:
  (See also discussion at http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/97c4892c68312e6b/1b31a8239ee3d4cd?lnk=raot#1b31a8239ee3d4cd , although the initial ideas at what went wrong were wrong).

  Run the attached file, click the button and you'll get this error dialog:
  ----------------------------
  unknown widget .sw.lb.a1
  unknown widget .sw.lb.a1
      while executing
  "Widget::cget $path $option"
      (procedure "Widget::getoption" line 6)
      invoked from within
  "Widget::getoption $path.$item $option"
      (procedure "_getoption" line 2)
      invoked from within
  "_getoption $path $item -foreground"
      (procedure "_redraw_selection" line 11)
      invoked from within
  "_redraw_selection $path"
      (procedure "_update_select_fill" line 13)
      invoked from within
  "_update_select_fill $path"
      (procedure "ListBox::_resize" line 27)
      invoked from within
  "ListBox::_resize .sw.lb"
      (command bound to event)
  ----------------------------

  Note that the whole callstack is inside BWidget's ListBox class.

  I'm running "ActiveState ActiveTcl 8.4.14.0.272572   Nov 26, 2006", according to the readme and the software. This contains BWidget 1.8. I'm on Windows XP SP2.) 

  Something appears to be going wrong while resizing, but only if the -selectfill true option is set, I think only if the ListBox is inside a ScrollWindow. At the time of the resize, I can see the scrollbars pop up and immediatly disappear again(indeed they are not needed at all in this case).

  As a bonus bug(?): it is not possible to add items whose name contains :: or ends in : . From the errors, it seems like this is because the name passed in is directly used as a variable name.

  As noted in the newsgroup, the bug can be worked around by not causing the resize at that point in the code, although I have no idea why. The solution in the newsgroup (after 1 [list .b configure -text "[.b cget -text]aaaa"] ) doesn't always work, after 5 ... does seem to work, and for my own code, I have inserted an 'update idletasks' in between changing the listbox contents and the change to the other widgets (those changes then cause the resize).


tkt_uuid: 765667ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 4
foundin: None
resolution: Fixed
title: Backward tabbing over ComboBox needs 2 tabs.
comment:
  package require BWidget

  entry .w1
  ComboBox .w2
  entry .w3

  pack .w1 .w2 .w3
  focus .w1

  While 'tabbing forward' over the entries (with the Tab
  key), only one tab is needed, to leave the ComboBox
  (.w2) and to have the focus on .w3. While 'tabbing
  backward' (with Shift-Tab), there are two Shilft-Tab
  events necessary, to go from .w2 to w1. 

  Expected behaviour: For backward tabbing, only one
  Shilft-Tab is needed, to go to the next (previous) widget.


tkt_uuid: 557520ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: smtp
priority: 5 Medium
foundin: None
resolution: Accepted
title: smtp::sendmessage -maxsecs
comment:
  A patch to workaround bug #557040. Rather than automatically
  calculate a timeout for SMTP acknowledging acceptance of
  message body (DATA), allow the user to specify a 
  timeout (default 120 seconds).


tkt_uuid: 1798413fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Documenting related commands on one man page
comment:
  It's difficult to write a man page about multiple commands. Here's an example:

  http://naviserver.sourceforge.net/n/naviserver/files/ns_memoize.html
  http://naviserver.cvs.sourceforge.net/naviserver/naviserver/doc/src/mann/ns_memoize.man?view=markup


  - Each command is given a numbered anchor, so to link to ns_memoize_flush the link is: .../ns_memoize.html#2. This will change if commands are added, removed or reordered.


  - If you use the [cmd ...] markup, the name of the command becomes a link but only if it has the same name as the page current page.

  In the example above, ns_memoize is a link to itself. However ns_memoize_flush is not a link at all. Neither is ns_cache_eval, which is documented on another page (named ns_cache).

  What would be useful is if each mention of a command would link to it's definition, i.e. .../ns_cache.html#ns_cache_eval


  - Some commands are in the form of subcommands, like Tcl's 'string'. It would be useful to be able to refer to  a subcommand like: [cmd "string is"] and have it parse the space and link to the correct place.


tkt_uuid: 1751871fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ldap
priority: 5 Medium
foundin: None
resolution: Fixed
title: ldap::search : too many nested evaluations (infinite loop?)
comment:
  Hello 

  I have a trouble trying to search a element.
  this element is names eduid. When I'm trying to search on it , I obtain the following display:
  tcl> ldap::search $handle "ou=people,dc=XXX,dc=com" "eduid=ed148869" "uid"
  too many nested evaluations (infinite loop?)

  this uid exists as a search on the name return that:
  tcl> ldap::search $handle "ou=people,dc=XXX,dc=com" "uid=AERTY" "eduid"
  {eduid=ed043414,ou=people,dc=XXX,dc=com {eduid ed043414}}

  can you help me?

  regards
  Jerome


tkt_uuid: 981605ffffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: calendar
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: BWidget Calendar Dialog
comment:
  This adds support for a calendar dialog, very similar
  to the iwidget version.  The dialog operates in one of
  two modes: dialog or popup.  The latter is just a
  special case of the former, but returns after one date
  is selected and offers no confirmation or cancellation
  buttons.  An embeddable method that fires virtual
  <<CalendarSelection>> events is on the TODO list.

  Also adds a manual page to the BWman directory, and
  files to the demo directory are modified to include the
  calendar as either a separate note book page or as a
  sub frame of the Dialogs page.  I couldn't decide where
  it would fit best.


tkt_uuid: 731252ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: apps : tkchat
priority: 5 Medium
foundin: None
title: enhanced tkchat help requested
comment:
  When I check the tkchat Help menu item as well as /help in
  tkchat, I don't see commands such as /?<regexp> .  Thus,
  it appears this feature, and perhaps others, are not
  documented
  at this time anywhere other than within the source code.

  After determining where best this info should be found
  (perhaps in a  special help menu item?) , perhaps
  environment variables, features,  commands, etc. that
  one  can use within tkchat, but which have no menu
  setting, could be documented?


tkt_uuid: 1042613fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Can't drag into an emtpy tree widget
comment:
  A drag to a tree widget does not work, if the
  destination tree doesn't have any nodes. 

  This script illustrates the problem:

  package require BWidget

  proc dropcmd {dest source dropInfo operation dataType
  data} {
      set sourceTree [winfo parent $source]
      $dest insert end root $data \
           -text [$sourceTree itemcget $data -text]
      $sourceTree delete $data
  } 

  set t1 [Tree .t1 -dragenabled 1]
  $t1 insert end root aNode -text "A sample Node"

  set t2 [Tree .t2 -dropenabled 1 \
              -dropovermode w \
              -dropcmd dropcmd]
  # If the destination tree has at least one node,
  everything works
  # $t2 insert end root anotherNode  -text "Another node"

  pack $t1 $t2 -side left

  If the destination tree doesn't have a node, the
  dropcmd will not be called. As far, as I've debugged
  the problem, the reason, that the dropcmd isn't called,
  is in  Tree::_drop_cmd:
      if {[llength $data(dnd,node)]
          && [llength [set cmd [Widget::getoption $path
  -dropcmd]]]} {
          return [uplevel \#0 $cmd \
                      [list $path $source $data(dnd,node)
  $op $type $dnddata]]
      }
  If the destination tree doesn't have a node,
  $data(dnd,node) is empty (but should be "widget", as
  far, as I can tell)


tkt_uuid: 712028ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 3 Low
foundin: None
resolution: Works For Me
title: v1.6 bug in LabelEntry Creation
comment:
  invalid command name ".#BWidget#frame"
      while executing
  "$path cget $realopt"
      (procedure "Widget::_test_tkresource" line 6)
      invoked from within
  "$Widget::_optiontype($type) $option $value [lindex
  $optdesc 3]"
      (procedure "Widget::init" line 62)
      invoked from within
  "Widget::init LabelFrame $path $args"
      (procedure "LabelFrame::create" line 2)
      invoked from within
  "LabelFrame::create .payroll.f.le0.labf -text {Payroll
  Date} -width 20 -anchor w -relief flat -borderwidth 0
  -focus .payroll.f.le0.e"
      ("eval" body line 1)
      invoked from within
  "eval LabelFrame::create $path.labf $maps(.labf) 
  -relief flat -borderwidth 0 -focus $path.e"
      (procedure "LabelEntry::create" line 8)
      invoked from within
  "LabelEntry::create .payroll.f.le0 -label {Payroll
  Date} -labelwidth 20 -labelanchor w -textvariable
  var_payroll_date"
      ("eval" body line 1)
      invoked from within
  "eval LabelEntry::create $path $args"
      (procedure "LabelEntry" line 1)
      invoked from within
  "LabelEntry $f -label $label -labelwidth 20
  -labelanchor w -textvariable $textvar"
      (procedure "gui_LabelEntry" line 6)
      invoked from within
  "gui_LabelEntry $gui_payroll.le0 "Payroll Date"
  var_payroll_date "
      invoked from within
  "grid [gui_LabelEntry $gui_payroll.le0 "Payroll Date"
  var_payroll_date ] -sticky e"
      (file "payroll.tcl" line 473)
      invoked from within
  "source payroll.tcl"


tkt_uuid: 1403369fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: ldap
priority: 5 Medium
foundin: None
title: Fix non-standard usage of TLS
comment:
  Well, I am not sure if we have a standard, actually. I
  know that SMTP can use TLS, with graceful fallback if
  TLS is not available.

  The ldap package also has code using TLS, but it was
  done differently and there is no graceful fallback.

  Please have a look at ldap and see if it can be
  (re)done similarly to SMTP.


tkt_uuid: 1862246fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: None
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: tcl tutorial
comment:
  You should not start a sentence with Tcl command names because that "may" confuse a non-english reader.

  On http://www.tcl.tk/man/tcl8.5/tutorial/Tcl2.html:

  "Set always returns the contents..."

  "The set command always returns the contents..."

  and:

  "Set can also be invoked with only one argument. When called with just one argument, it will return the contents of that argument."

  "The set command can also be invoked with only one argument. When called with just one argument, it will return the contents of that argument."

  BTW...there is no category for the "Tcl Tutorial".


tkt_uuid: 1549391fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: asn
priority: 5 Medium
foundin: None
title: allow decoding as basic ASN type for implicit types
comment:
  Currently the asnGet* procs will check the tag of the 
  raw data to make sure that the raw data is indeed what 
  it should be. For instance the asnGetInteger will 
  check if the tag is 0x02.
  This makes it complicated to decode types in protocols 
  where a new tag is implicitly defined for a basic 
  ASN.1 type. For instance the SNMP MIB defines a 
  TimeTick as an implicit integer, but assigns the tag 
  0x43. Trying to decode this using asnGetInteger will 
  fail because of the internal consistency check. To 
  decode raw data like this you will thus have to change 
  the tag to the 0x02 tag to decode it.

  I therefore request either a new class of procs that 
  will ignore the tag and decode it anyway. This would 
  give a class of functions asnGetAsInteger or maybe a 
  flag -nocomplain,
  or a whole new approach where you will have a mapping 
  from protocol to ASN.1 type and then have a decode 
  proc, for example:

  decode {[list 0x43 0x02] $raw}


tkt_uuid: 978962ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 7 High
foundin: None
resolution: Fixed
title: tkchat timestamp problems.
comment:
  dkfFor example, too often it gets the tabs wrong (puts
  a zero tab at the start of every line) and odd things
  happen when you have timestams visible but entry/exit
  messages off...
  patthoytsThe main issues I have are that it breaks the
  history download when turned off. If there are hidden
  users then we still get a timestamp. And as dkf has
  said, if you hide the timestamps it doesn't align the
  tab spacing properly.
  dkfIf you turn timestamps on then off again, the
  loaded history ends up correct.
  dkfAnd seems to stay that way thereafter.
  dkfThe other issues are less critical. You just get
  blank lines...


tkt_uuid: 3487731fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pki
priority: 5 Medium
foundin: None
resolution: Duplicate
title: parse_csr errors
comment:
  Running:

  set csr [::pki::pkcs::create_csr $key [list C AU ST NSW L Sydney O imap OU bsd CN test]]
  set pcsr [::pki::pkcs::parse_csr $csr]

  result:

  Unknown hashing algorithm: unknown
      while executing
  "::pki::verify $signature $cert_req_info_saved $keylist"
      (procedure "::pki::pkcs::parse_csr" line 52)
      invoked from within
  "::pki::pkcs::parse_csr $csr"

  resulting from the caught error:

  Expected Sequence (0x30), but got 01
      while executing
  "::asn::asnGetSequence plaintext message"

  in ::pki::verify called by parse_csr


tkt_uuid: 978510ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Fixed
title: tkchat should add "package require Tcl 8.4"
comment:
  I tried running tkchat.tcl under Tcl 8.3, but it blew
  up because several places in the code require 8.4
  (lsearch switches, etc.).  You might want to add a
  "package require Tcl 8.4".  

  If anyone decides to support 8.3, contact me for a list
  of bugs I encountered.  I managed to get it to at least
  come up and display a few messages with only a few
  changes, but there might be deeper problems I haven't
  encountered yet.

  --willdye ("BobaFudd" on tkchat)


tkt_uuid: 3539249fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: aes
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Error in encrypting.
comment:
  Hello I am using the following tcl code 

  -[base64_encode [aes::aes -dir encrypt -key $key $email]]. 

  I generate a random key, when I want to decrypt the value using this code 

  -set decrypted_email [aes::aes -dir decrypt -key $key [base64_decode $email]] 

  I sometimes get this error:-

  can't use empty string as operand of "&"
      while executing
  "expr {($v << 2) | (($w & 0x30) >> 4)}"


tkt_uuid: 1844104fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: json
priority: 5 Medium
foundin: None
resolution: Fixed
title: json test suite failures against tcl 8.5
comment:
  Platform: sparc solaris 9
  tcl: cvs head 8.5
  tcllib: cvs head

  The following tests failed:
  ==== json-1.1 test JSON widget FAILED
  ==== Contents of test case:
  set res [json::json2dict $JSON(widget)]
  ---- Result was:
  widget {debug on window {title {Sample Widget} name main_window width 500 height
   500} text {data {Click Here} size 36 style bold name null hOffset 250 vOffset 1
  00 alignment center onMouseUp {sun1.opacity = (sun1.opacity / 100) * 90;}}}
  ---- Result should have been (exact matching):
  widget {window {width 500 height 500 name main_window title {Sample Widget}} tex
  t {vOffset 100 name null style bold data {Click Here} onMouseUp {sun1.opacity = 
  (sun1.opacity / 100) * 90;} alignment center hOffset 250 size 36} debug on}
  ==== json-1.1 FAILED

  ==== json-1.2 test JSON glossary FAILED
  ==== Contents of test case:
  set res [json::json2dict $JSON(glossary)]
  ---- Result was:
  glossary {title {example glossary} mixlist {{a "" str} -0.09 null {} {member tru
  e}} GlossDiv {title S GlossList {{ID SGML GlossTerm {Standard \" Language} Acron
  ym SGML\\ Abbrev {ISO 8879:1986} GlossDef {A meta-markup language, used ...} Glo
  ssSeeAlso {GML XML markup}}}}}
  ---- Result should have been (exact matching):
  glossary {mixlist {{a "" str} -0.09 null {} {member true}} title {example glossa
  ry} GlossDiv {GlossList {{GlossSeeAlso {GML XML markup} GlossTerm {Standard \" L
  anguage} Acronym SGML\\ ID SGML Abbrev {ISO 8879:1986} GlossDef {A meta-markup l
  anguage, used ...}}} title S}}
  ==== json-1.2 FAILED

  ==== json-1.4 test JSON menu FAILED
  ==== Contents of test case:
  set res [json::json2dict $JSON(menu)]
  ---- Result was:
  menu {id file value File: unival ?: popup {menuitem {{value Open onclick OpenDoc
  ()} {value Close onclick CloseDoc()}}}}
  ---- Result should have been (exact matching):
  menu {popup {menuitem {{value Open onclick OpenDoc()} {value Close onclick Close
  Doc()}}} value File: id file unival ?:}
  ==== json-1.4 FAILED



  ==== json-1.8 test JSON menu2 FAILED
  ==== Contents of test case:
  set res [json::json2dict $JSON(menu2)]
  ---- Result was:
  menu {header Viewer items {{id Open} {id OpenNew label {Open New}} null {id Zoom
  In label {Zoom In}} {id ZoomOut label {Zoom Out}} null {id Help} {id About label
   {About Viewer...}}}}
  ---- Result should have been (exact matching):
  menu {header Viewer items {{id Open} {label {Open New} id OpenNew} null {label {
  Zoom In} id ZoomIn} {label {Zoom Out} id ZoomOut} null {id Help} {label {About V
  iewer...} id About}}}
  ==== json-1.8 FAILED


  ==== json-1.9 test JSON array FAILED
  ==== Contents of test case:
  set res [json::json2dict $JSON(array)]
  ---- Result was:
  {precision zip Latitude 37.7668 Longitude -122.3959 Address {} City {SAN FRANCIS
  CO} State CA Zip 94107 Country US} {precision zip Latitude 37.371991 Longitude -
  122.026020 Address {} City SUNNYVALE State CA Zip 94085 Country US}
  ---- Result should have been (exact matching):
  {Country US Latitude 37.7668 precision zip State CA City {SAN FRANCISCO} Address
   {} Zip 94107 Longitude -122.3959} {Country US Latitude 37.371991 precision zip 
  State CA City SUNNYVALE Address {} Zip 94085 Longitude -122.026020}
  ==== json-1.9 FAILED


tkt_uuid: 410797ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 4
foundin: None
resolution: Fixed
title: missing config module
comment:
  I checked tcllib out of CVS, and the installation is a
  bit foobared. It wants a /config directory with
  install-sh and mkinstalldir.  The Makefile.in file
  seems to have some troubles as well...  For instance,
  there is no INSTALL_DATA, amongst other things


tkt_uuid: 1011102fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: counter
priority: 9 Immediate
foundin: None
resolution: Not Applicable Here
title: counter - dependent on ncgi & html, not in code, nor docs
comment:
  The HTML generation facilities of the counter package
  depend on the html and ncgi packages, but do not
  require them or check if they are present.

  Either the html generation code should be moved out of
  the counter package or be protected with appropriate
  checks/lazy pkg requires if html generation is used.


tkt_uuid: 3058654fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: doctools
priority: 8
foundin: None
resolution: Not Applicable Here
title: Incorrect nroff generation
comment:
  When generating nroff from a [titledesc] directive, it's important that the description of commands all be placed on a single line. This is because the apropos search tool assumes that these descriptions are on a single line following the ".SH NAME" directive. Right now, you generate output here that is multiline in some cases (found when preparing HTML documentation for the Thread package with Tcl's 'make html', which failed; that's now fixed, but even so...) It's also expected that the part of the NAME description before the \- will be a list of commands described by the manual page, and not the name of the manual page itself. This makes a difference when manual pages describe multiple commands or when the name is not a "good" filename (e.g., by containing a colon).

  It would also be useful if the generation of nroff from [example] used .CS/.CE to surround the example code instead of .nf/.fi as that is converted better. (.CS always marks sample code in some sense, .nf is used for many purposes.)


tkt_uuid: 2820851fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: fix dynamichelp issues
comment:
  This patch fixes some issues with dynamic help. One of the issues is that help for a menu sometimes stays visible when the menu is unmapped (on Unix). This is an example script:

  pack [frame .f -width 200 -height 200]
  pack [label .l -textvariable statusvar]
  . configure -menu [menu .m -tearoff 0]
  .m add cascade -label "File" -menu [menu .m.f -tearoff 0]
  .m.f add command -label "New"
  DynamicHelp::add .m.f -type menu -variable statusvar
  DynamicHelp::add .m.f -type menu -index 0 -text "help for New"

  Now click on "File", and then move the mouse cursor upwards (out of the window), and click again. The menu is unmapped, but on Unix, the help stays visible. The patch should fix this.

  Other issues addressed in this patch are:
  - Make "-helpcmd" available also when dynamichelp is included in another widget.
  - Make sure that -helpcmd is always called at global scope (with uplevel #0).
  - Sometimes a <Leave> event may be called twice. Protect against this.
  - When _unset_help is called, the _top widget should only be destroyed when it is a balloon.


tkt_uuid: 955446ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftpd
priority: 7 High
foundin: None
resolution: Fixed
title: 227 reply non-recommended - causes failures
comment:
  ftpd.tcl (tcllib1.6) currently sends:
  227 Entering Passive Mode. 192,168,1,100,13,209

  The recommeded standard is
  227 Entering Passive Mode (192,168,1,100,13,209).

  Note the added parens. and the move of period to
  end of string.

  When I made this change my client, a Linux-based ROM-
  disk DVR (Digital Video Recorder) started working. So not
  much chance to change things on client.

  Seems in this case it's just a better idea to 
  exactly match the recommendation rather than
  vary slightly.


tkt_uuid: 1008619fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: htmlparse
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: htmlparse::2tree gets the HTML Doc structure wrong
comment:
  The following shows how to repeat the bug.

  $ cat wrong.tcl
   package require htmlparse
   set indent 0
   set t [struct::tree]
   set html
  {<html><head></head><body><h1>heading</h1><p>ayaken!</p></body></html>}
   proc painter {tree act node} {
          global indent
          if {$act == "enter"} then {
                  incr indent
                  puts ">[string repeat - [expr
  {$indent-1}]][$tree get $node type]"
          } else {
                  puts "<[string repeat - [expr
  {$indent-1}]][$tree get $node type]"
                  incr indent -1
          }
   }

   htmlparse::2tree $html $t
   $t walk root -order both -type dfs {act node} {painter
  $t $act $node}

   $ tclsh wrong.tcl
   >root
   >-hmstart
   >--html
   >---head
   <---head
   >---body
   >----h1
   >-----PCDATA
   <-----PCDATA
   >-----p
   >------PCDATA
   <------PCDATA
   <-----p
   <----h1
   <---body
   <--html
   <-hmstart
   <root

  You can see the p element is wrong in the hierarchy, it
  got sorted as a child of the h1 element, not, as it
  should be, as its sibling.

  I assume it's htmlparse innards which get it wrong, not
  2tree only, just a guess though.


  If there's need to contact me, I'm reachable at
  Ephaeton (at) gmx (dot) net.


tkt_uuid: 620754ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Patch to allow TkResource with toplevels
comment:
  Hi,

  When declaring a new widget based on the BWidget frame
  work it is possible to take default options from other
  widgets using 'TkResource'. When taking such default
  options from a toplevel, this toplevel is displayed
  (when taking from another widget, it is not displayed
  because it is not packed/gridded/placed). 

  This patch withdraws the toplevel used to get default
  options from.

  Jos.


tkt_uuid: 548224ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Fixed
title: hpupdate status incorrectly displays
comment:
  The idea in this demo is that one will, on a
  regular basis, update a series of files and then upload
  them via ftp to an http server.

  It depends on a proc called Touch to update a file's
  update date , which then it uses to determine which
  files were changed since that date.

  On my SPARC Solaris 8, using Tcl/Tk 8.4, the Touch
  proc does NOT update the file.  This results in the
  demo program not functioning properly.

  The strange thing is that I don't see a reason for it
  to fail.  And in fact, no errors occur - but the file's
  date never changes.

  I will continue searching for a solution.


tkt_uuid: 1349154fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: irc
priority: 5 Medium
foundin: None
resolution: Accepted
title: Patch to return channel from connection
comment:
  Just a small and trivial little patch which will return the channel 
  used for a particular connection. Useful at least for setting stuff 
  like -encoding, although that should probably be handled by a 
  separate command.

  setox:~/Proging/tcllib setok$ diff /Library/Tcl/tcllib1.7/irc/irc.tcl 
  irc.tcl 
  10c10
  < package provide irc 0.5
  ---
  > package provide irc 0.6
  144a145,154
  >       # Return socket for this IRC connection, or "" if one does 
  not yet
  >       # exist.
  > 
  >       proc cmd-socket {} {
  >           variable sock
  > 
  >           return $sock
  >       }
  > 
  > 


tkt_uuid: 1187190fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: app: tkchat
priority: 5 Medium
foundin: None
resolution: Accepted
title: Update status icon when window regains focus
comment:
  Currently the status icon is only update when 
  restoring from the system tray.
  If the chat window doesn't have focus the number of 
  new messages is updated on both the window title and 
  the status icon, when regaining focus only the window 
  title is updated. This patch updates the status icon 
  as well.

  tkchatStatus1 is a minimal change to enable this.
  tkchatStatus2 is the way I think it should be done :)


tkt_uuid: 473656ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: pop3::retrieve blocking forever
comment:
  Hi folks!

  I tried to use pop3::retrive and found a problem. It
  blocks while reading
  the message. I examined the code and found that it
  blocks on line 

  set msgBuffer [read $chan $size]

  I made a few tests and found that the message size if
  always less than
  $size. This was tested with qpopper v2.43, qpopper
  v4.0.3, cucipop v1.31.

  Another problem is handling "^\.". When a line begins
  with a dot (.) it is
  prefixed with a (.). It is client responsability to
  remove this extra (.)
  before exibiting the message.

  The patch below (seems to) fix both problems.

  I apologize for my poor english.

  Thanks in advance,

  Edesio
  edesio@ieee.org


tkt_uuid: 1960369fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: bignum :: float
priority: 5 Medium
foundin: None
resolution: Fixed
title: todouble returns 0.0 when it should not
comment:
  There appears to be a bug in math::bigfloat::todouble, which returns 0.0 when it should not. This is illustrated by the following.

  package require math::bigfloat
  namespace import ::math::bigfloat::*
  set foo [fromstr 317.22 4]

  In 8.4.1.4 the following prints 317.220, but in 8.5 it prints 0.000.

  set sr [todouble $foo]
  puts [format "%6.2f" $sr]

  If I convert the bigfloat to a string, then convert the string back to
  a float using scan, as below, the result is 317.220 in 8.5 as well as
  8.4.14.

  set str [tostr $foo]
  scan $str "%f" sr
  puts [format "%6.2f" $sr] 


tkt_uuid: 459186ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: stats - deprecated
priority: 4
foundin: None
resolution: Out of Date
title: counter & stats modules are almost same
comment:
  A cursory look at the diffs of counter.tcl and stats.tcl files
  gives the impression that both are essentially the same.
  Moreover, the ChangeLog file under counter module says:

  2000-10-02  Brent Welch <welch@ajubasolutions.com>

          * NAME CHANGE from "stats" to "counter"
          * counter.tcl: Changed shading of histogram labels.


  I think having two such modules with almost the same 
  functionality can lead to several problems, including confusing
  users on which module to use as well as code maintenance.

  Therefore, it would be best to delete one of the two modules
  -- I don't care which one. It it is not possible to delete one of the
  modules then the procs common to both should be merged into
  a single new library module and then both the modules should 
  refer/call the procs in the new library module.


tkt_uuid: 599306ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 8
foundin: None
resolution: Fixed
title: master index exposes unsupported pkgs
comment:
  dgp
  Uh, oh.  The "master" pkgIndex.tcl file for tcllib
  bypasses sanity checks. 
  dgp
  Can't think it through now; will report as a bug.
  aku
  What checks are bypassed ? Or do you mean its mere
  presence bypasses some checks in the safe stuff ?
  schlenk
  The pkgIndex.tcl file in tcllib1.3 main directory can
  load packages that can not be loaded directly, so it
  bypasses access restrictions.
  dgp
  I mean because it offers [package ifneeded] scripts for
  packages, the actual indexes for those packages lose
  any control they have.
  dgp
  take a look at the pkgIndex.tcl for control
  steveo saunters in.
  dgp
   if {![package vsatisfies [package provide Tcl] 8.2]}
  {return}
  package ifneeded control 0.1.1 [list source [file join
  $dir control.tcl]]
      * suchenwi goes home - a great weekend to y'all! 
  dgp
  It's coded that way to prevent any attempts to load
  control 0.1.1 into a pre-Tcl-8.2 interp.
  dgp
  But the tcllib pkgIndex.tcl is giving away the secret.
  suchenwi macht wie eine Banane ...
  dgp
  I know this was a big problem when prepping the 1.3
  release.
  dgp
  ...but this wasn't the right solution.
  schlenk
  So we have more than one bug: 1. bad pkgIndex.tcl for
  tcllib, that bypasses sanity checks 2. bad security
  checks, that allow loading of packages, that should not
  be loadable in a safe interp
  aku
  Yeah, I see.
  schlenk
  3. Inconvenient access for safe interp to tcllib modules.
  aku
  The alternative is to source all subordinate package
  indices directly, no ?
  aku
  ... Or maybe inlining them into the main package index. ...
  dgp
  I can't devote the time and attention required to come
  up with the right solution right now.
  dgp
  I recall from the previous discussion that just about
  every alternative has problems.


tkt_uuid: 985839ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtp
priority: 5 Medium
foundin: None
resolution: Fixed
title: Can't send mail to Yahoo
comment:
  Using the smtp and mime packages to send email, I am
  having trouble sending email to Yahoo using Windows XP.
   It works fine from a Linux machine, also sending mail
  from the windows machine to hotmail.com works.  I am
  using the following code:

  proc send_simple_message {recipient email_server
  subject body} {
      package require smtp
      package require mime
      
      set token [mime::initialize -canonical text/plain \
     -string $body]
      mime::setheader $token Subject $subject
      
      puts [smtp::sendmessage $token \
        -recipients $recipient -servers $email_server]
      mime::finalize $token
  }
  send_simple_message andrewthompson10@hotmail.com
  mx3.mail.yahoo.com \
      "This is the subject." "\n\n This is the message.\n"


  It gives me an error:

  key message-id not in header
     while executing 
  "error "key $mixed not in header""

  This appears to be on line 1282 of mime.tcl.

  I tried to add things to the header with the following
  code inside proc send_simple_message:

  mime::setheader $token Subject $subject
  mime::setheader $token Message-ID \
  "<3140374180748234979238742391784313234@localhost>"
  mime::setheader $token Date "July 4, 2004"
      


  And I ended up with the following error:

  can't unset "state(route)": no such element in array
  while executing 
  "unset state($prop)"

  This appears to be referring to line 2675 of mime.tcl
  (I would expect that the catch would take care of the
  error, but apparently not).


tkt_uuid: 1710644fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: treeql
priority: 5 Medium
foundin: None
resolution: Fixed
title: No {expand} for you!
comment:
  The file treeql85.tcl uses the
  {expand} syntax which is no longer
  approved.  Migrate to the {*} replacement.


tkt_uuid: 3601313fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: stack
priority: 5 Medium
foundin: None
resolution: Fixed
title: Simplify version requirement for TclOO
comment:
  Since tcloo is available only for 8.5+ and 8.5 already provides enhanced package version handling, the version requirement can be shortened to [package require TclOO 0.6.1 1] or [package require TclOO 0.6.1-] (to accept any newer version). Applies to both ::struct::queue and ::struct::stack.


tkt_uuid: 476988ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: textutil
priority: 5 Medium
foundin: None
resolution: Fixed
title: splitx and the empty string
comment:
  Using splitx on an empty string does not return

  an empty list.



  # test script

  package require textutil

  namespace import ::textutil::split::splitx

  puts [llength [split ""]]  ;# ==> 0

  puts [llength [splitx ""]] ;# ==> 1





  The first line of the splitx should be

    if {[string length $str]==0} {return {}}


tkt_uuid: 979894ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtp
priority: 5 Medium
foundin: None
resolution: Out of Date
title: username and password options are missing
comment:
  One of my web service providers recently started requiring all
  email use SMTP authorization - username/password. POP before
  SMTP was no longer good enough due to spammers.

  In the latest TCLLIB 1.6.1 there are username/password options
  in the smtp package for smtp::sendmessage invocations.

  Well, in the documentation. Not the code.

  I could really use to have these options available - TCLLIB can't
  send mail anymore without them, for me.

  ----

  I'm sourcing these TCLLIB 1.6.1 modules:

     base64.tcl,  md5.tcl, mime.tcl, smtp.tcl

  I uploaded those modules to source them because the hosting
  sit has an older TCLLIB installed.

  ----

  The MIME module gave me this error:

  can't read "::major": no such variable
      while executing
  "if {$::major < 2} {

  I altered the other two references to $::major from $major
  to get around this error.


tkt_uuid: 899225ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Fixed
title: tests pop3-6.* hang
comment:
  The [setupServer] command hangs
  in tests pop3-6.0 and pop3-6.1 when
  running the pop3 tests.  The hangs
  trace to the [vwait] command within
  [::subserv::muservSpawn] .

  This is on Linux/Alpha, a 64-bit system.


tkt_uuid: 1106375fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: snit
priority: 5 Medium
foundin: None
resolution: Fixed
title: Widget Error on failed object's construction
comment:
  ** Widget Error: when an object's constructor fails, the 
  object is not destroyed **


     Let's take the following example.
     Here's a widgetadaptor providing an extension of 
  the 'label' widget.

  package require snit 0.97
  ::snit::widgetadaptor mylabel {
     
     delegate method * to hull
     delegate option * to hull 

     constructor {args} {
        installhull using label
        $win configurelist $args
        puts "** $win created"
     }

     destructor {
        puts "** $win destroyed"
     }
  }   

     when I (wrongly) create an instance 
     (for example, I use an unsupported option),
     the instance is not not destroyed !
    
  mylabel .myL -strangeoption xyz

     the following error is correctly raised
    
  ** .myL destroyed
  Error in constructor: unknown option "-strangeoption" 
   
     but the ".myL" object still exists !
     This is in contrast with 'standard' widgets, because if 
  you write:
    
  label .myL -strangeoption xyz
    
     then an error is raised and the object is not created.

  I also experimented with 'widgetadaptor' ... the 
  behaviour is still wrong.
  Finally I experimented with 'type' ... the behaviour is 
  correct. 


tkt_uuid: 1027568fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: MainFrame: showstatusbar does not restore bottom frame.
comment:
  Hi,

  For the MainFrame widget the following occurs.

  .mf showstatusbar none
  .mf showstatusbar progression

  The first time showstatusbar with "none" is specified
  it unmaps the bottom frame. Then when progression
  is specified the bottom frame is not mapped. The
  status bar and progressbar come back but not the
  bottom frame they were in.

  I was able to fix it by modifying the showstatusbar proc
  to pack the bottom frame and not just the status bar
  when the name argument is not "none".

  Greg Pierce


tkt_uuid: 3607261fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: tklib :: widget :: dateentry
priority: 5 Medium
foundin: None
resolution: Duplicate
title: Calendar closes by clicking year/month navigation arrow.
comment:
  I have modified dateentry <ButtonPress> binding not to close a calendar by clicking items tagged with "cbutton".


tkt_uuid: 839066ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: bwidget - Binding for whole Tree Area
comment:
  I'm using BWidgets for creating a user interface for a
  test system.
  Among other things this user interfaces shows and
  handles data presented as a tree (which I have realized
  by BWidgets). By this I have to be able to show a
  context menu when the mouse is clicked upon the
  BWidgets tree. This means I need a binding not only for
  the text or the image of a node but for the entire tree
  area.

  I made a litte enhancement in the module tree.tcl which
  offers me the command
      $tree bindArea $event $script

  I added the following lines:
  15d14
  < #     - Tree::bindArea
  443,448d441
  < #
  ----------------------------------------------------------------------------
  < #  Command Tree::bindArea (added by MHO - Sigos GmbH)
  < #
  ----------------------------------------------------------------------------
  < proc Tree::bindArea { path event script } {
  <   bind $path.c $event $script
  < }


  I think this enhancement is useful for all users of
  BWidgets and therefore I would be encouraged, if you
  could take this enhancement over into the next version
  of BWidgets.

  Best regards
  Monika Holzammer

  E-Mail: Monika.Holzammer@sigos.de


tkt_uuid: 773246ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: snit
priority: 3 Low
foundin: None
resolution: Not Applicable Here
title: snit: Multi-delegation for options
comment:
  For options it sometimes makes sense to delegate 
  changes to more than one component of a megawidget.

  For example: -background, -foreground of a megawidget 
  may go to all components.

  Currently we have no convenient way to specify such 
  multi-delegation. We can do it through an 'onconfigure' 
  handler, but this is inconvenient.


tkt_uuid: 1633074fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: app: tkchat
priority: 5 Medium
foundin: None
resolution: Accepted
title: tkchat extra features
comment:
  Hi,

  This patch is a diff of tkchat.tcl (1.356) and the modified tkchat.tcl with following features:

  New commands:
  -------------

  * /wikip <text>

  Search wikipedia with specified text

  * /wikid <text>

  Search Wiktionary with specified text

  Updated commands:
  -----------------

  * /googlefight

  Web interface changed

  New feature:
  ------------

  * Highlight and raise alert for specified subjects

  Specify subjects as 'string match' patterns. If a message matches a specified subject, it will be colored (background yellow by default). The subjects are saved in the tkchat resource file. The background color is adjustable through the colors dialog. It's also possible to trigger an alert when a message matches a subject.

  Kind regards,

  Jos.


tkt_uuid: 918099ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: smtp
priority: 7 High
foundin: None
resolution: Accepted
title: SMTP AUTH support (RFC 2554)
comment:
  This patch adds support for the SMTP AUTH extension
  (RFC 2554). Currently this only deals with the LOGIN
  authentication mechanism but additional support for
  CRAM-MD5 and DIGEST-MD5 is planned.


tkt_uuid: 756334ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: ComboBox doesn't take focus during keyboard traversal
comment:
  A ComboBox with -editable false doesn't take the focus
  during keyboard traversal even with an explicite
  -takefocus 1.

  It's documented to work this way, but it's IMHO the
  wrong behaviour. Even with -editable false the user is
  able to select a value with the arrow keys. As it is
  know, with a ComboBox with -editable false, a User must
  always leaf the keyboard and first click the ComboBox,
  to choose a value.

  Proposed behaviour: with a explicite -takefocus 1 the
  ComboBox takes always the focus during keyboard
  traversal, even if -editable false.


tkt_uuid: 1695137fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: doctools - Misc processing ideas
comment:
  The results of the 'wordlist' and 'semantic' backends, see RFE 1695128, and RFE 1695126, can be used in lots of interesting ways. This RFE is a reminder of some of them, and the processing required.

  - spellchecking the words
  - word statistics
    -> find keywords for a document, set of documents
    (Need algorithm references which do stuff like this
     automatically - Bayes usable ?)


tkt_uuid: 1565836fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ldap
priority: 5 Medium
foundin: None
resolution: Fixed
title: ldapx man page ambiguous
comment:
  I grabbed the latest tcllib cvs snapshot from the
  activestate repository this morning. I ran the
  makefile, with a goal of installing it with tcl 8.5.

  I get this set of warnings:

  Generating /volws/lwv27/ldatae/man/mann/ldapx.n
  Manpage warning (sectambig): (Sub)Section title "Data"
  causes ambiguous section 
  references.
  Manpage warning (sectambig): (Sub)Section title
  "Options" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title
  "Example" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title "Data"
  causes ambiguous section 
  references.
  Manpage warning (sectambig): (Sub)Section title
  "Options" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title
  "Methods" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title
  "Example" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title "Data"
  causes ambiguous section 
  references.
  Manpage warning (sectambig): (Sub)Section title
  "Options" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title
  "Example" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title "Data"
  causes ambiguous section 
  references.
  Manpage warning (sectambig): (Sub)Section title
  "Options" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title
  "Methods" causes ambiguous secti
  on references.
  Manpage warning (sectambig): (Sub)Section title
  "Example" causes ambiguous secti
  on references.


tkt_uuid: 1556310fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: linearalgebra
priority: 5 Medium
foundin: None
resolution: Invalid
title: "scale" exists as a Tk widget - name conflict when importing
comment:
  As "nurwodah" found out on the chat, the linear algebra
  package exports a procedure "scale". If you do:

    namespace import ::math::linearalgebra::*

  in wish or have Tk loaded in another way, then
  the name "scale" conflicts with the scale widget.

  We need to repair this ...


tkt_uuid: 526404ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: tclbench
priority: 5 Medium
foundin: None
resolution: Accepted
title: new [catch] benchmark: complex bodies
comment:
  On finding an error, [catch] scans all exceptionRanges
  of the bytecode. I am planning to patch
  GetExceptRangeForPc (in generic/tclExecute.c) with a
  faster algorithm (see Tcl-patch  #453709).

  I enclose here a patch which is necessary to illustrate
  the improvement, as it is only important when [catch]
  is part of a complex proc body, with many ranges and
  many nesting levels.

  Any comments before I commit?


tkt_uuid: 1533868fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ldap
priority: 5 Medium
foundin: None
resolution: Fixed
title: Connection not properly marked as unbound in ::ldap::unbind
comment:
  The connection is not properly marked as unbound 
  in ::ldap::unbind.

  A local variable is modified, instead of the array 
  used to remember the connection parameters.


tkt_uuid: 714947ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: widget
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: widget: digraph.tcl needs TIP 44 update
comment:
  Doesn't seem to be a Category for
  the "widget" directory of the tcllib
  project repository.

  Anyhow the file

  cvsroot/tcllib/widget/library/digraph.tcl

  calls internal Tk commands by their
  pre-Tk-8.4 names.  This code needs
  an update to work with Tk 8.4.


tkt_uuid: 520269ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
title: .man format files need comments
comment:
  The .man files  we are producing for processing by the
  doctools package currently seem to have so method for
  placing comments in the file. Placing '#' lines results
  in the tcl-style comment appeating in the output.
  Needless to say I want to add an emacs local variable
  block and the usual license header to the file. Plus
  comments are handy for breaking up the file in to sections.

  So: lines beginning with a # are comments to be ignored
  by the formatters??


tkt_uuid: 1023973fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: record
priority: 5 Medium
foundin: None
resolution: Fixed
title: error in assigning structs #auto numbers
comment:
  if you create a record with #auto this gives record
  xxx1 $_count($defn_)= 1
  and then a second with #auto this gives record xxx2
  $_count($defn_) = 2
  then delete first record $_count($defn_)= 1

  now create some more records when $_count($defn_)= 2
  get error "Instances $inst_ already exists" from Create
  because of decrement of in Delete

  bug fix


  proc ::struct::record::Delete {sub_ item_} {

      variable _recorddefn
      variable _defn
      variable _count
      variable _defaults

      ##
      ## We just semi-blindly prepend :: to the record_
  argument
      ##
      if {![string match "::*" "$item_"]} {set item_
  "::$item_"}

      switch -- $sub_ {

          instance -
          instances -
          inst    {


              if {[Exists instance $item_]} {
          
  set ns $_defn($item_)
                  foreach A [info commands ${item_}.*] {
      Delete inst $A
                  }
          
                  catch {
                      foreach {k v} [array get [Ns
  $item_]values $item_,*] {
                          
                          unset [Ns $item_]values($k)
                      }
                      set i [lsearch [set [Ns
  $item_]instances] $item_]
                      set [Ns $item_]instances [lreplace
  [set [Ns $item_]instances] $i $i]
                      unset _defn($item_)
                  }
                  # NO NO!! we must have a monotonically
  incrementing record count
  # otherwise the next but one creation could fail as
  we will recreate this record and then
  # next time try to create a record ontop of a deleted
  on [of course we could have a free list ha ha!]
  # gst  
                  #incr _count($ns) -1
          
              } else {
                  #error "$item_ is not a instance"
              }
          }
          record  -
          records   {


              ##
              ##  Delete the instances for this
              ##  record
              ##
              foreach I [Show instance "$item_"] {
                  catch {Delete instance "$I"}
              }

              catch {
                  unset _recorddefn($item_)
                  unset _defaults($item_)
                  unset _count($item_)
                  namespace delete ::struct::record${item_}
              }

              
          }
          default   {
              error "Wrong arguments to delete"
          }

      }; # end switch

      catch { uplevel #0 [list interp alias {} $item_ {}]}

      return

  }; # end proc ::struct::record::Delete


  garyt@bmb.leeds.ac.uk


tkt_uuid: 1475968fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: comm - use canonical ids for remote host connections
comment:
  Hi,

  The comm man page mentions the following limitation:

  ---------
  WARNING: The host must always be specified in the same
  form (e.g., as either a fully qualified domain name,
  plain hostname or an IP address).
  ---------

  I use {<port> <hostname>} to connect to the remote comm
  channel. However, the id listed on the remote
  interpreter is of the form {<port> <hostip>}. As a
  result, it ends up creating one extra channel for
  communication between remote hosts. See below:

  # Host1 = mavis
  mavis:219> wish
  % package require comm
  4.2.1
  % comm::comm config -local 0
  % comm::comm self
  40048
  % hi    <----- "hi" printed from "hlavana-u5" below
  comm::comm ids
  40048 {32807 64.102.40.12}  <--- remote id uses ipaddr
  % comm::comm send {32807 hlavana-u5} {puts hi}
  % comm::comm ids
  40048 {32807 64.102.40.12} {32807 hlavana-u5}
  % 

  # Host2 = hlavana-u5
  hlavana-u5:52> wish
  %  package require comm
  4.2.1
  % comm::comm config -local 0
  % comm::comm self
  32807
  % comm::comm send {40048 mavis} {puts hi}
  % comm::comm ids
  32807 {40048 mavis}
  % hi  <---- "hi" printed from "mavis" host
  comm::comm ids
  32807 {40048 mavis} {40048 64.102.16.217}
  % 

  For the above case, I would expect the [comm::comm ids]
  command to return exactly the same values in both the
  interpreters once the connection is established between
  the two -- something like:

  {32807 hlavana-u5.cisco.com} {40048 mavis.cisco.com}

  In addition to the above issue, the $id value set for
  the callback hooks are also not consistent. So, the
  comm package should be enhanced to remove this
  limitation and always use the canonical id internally.
  It should not differentiate between whether the id is
  specified simply as "40048", or "40048 localhost", or
  "40048 mavis", or "40048 mavis.cisco.com", or "40048
  64.102.16.217". 

  Note that the [comm::comm self], [comm::comm ids] and
  $id variable set for callback hooks should return the
  cannonical forms of the id.

  Hemang.


tkt_uuid: 528929ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Dynamic balloonhelp bug (and patch)
comment:
  In some rare cases (race condition depending on
  balloonhelp configuration and user mousemovements), the
  procedure for destroying a balloonhelp interferes with
  the procedure still building the display, causing
  errors like:

  bad window path name ".help_shell"
      (procedure "DynamicHelp::_show_help" line 22)
      invoked from within
  "DynamicHelp::_show_help .bla.topf.tb0.bbox4.b1 329
  198"
      ("after" script)

  Hard to reproduce with a script, sorry.

  A quick resolution to this is to check if the targeted
  help window still exists in the ::_show_help procedure
  (see attached diff file, it's a twoline patch).


tkt_uuid: 520907ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Out of Date
title: Notebook tab color bug (and patch)
comment:
  Motivation:

  Using another color than the standard grey, I saw that
  the Notebokk tabs do not honor the chosen background
  color. The submitted patch goes a step further and adds
  a -tabbackground (similar to -activebackground) option
  to be able to specify another colour if wanted.

  The attached tar contains a diff to the actual head,
  the complete new notebook.tcl source and the updated
  documentation should the patch be accepted.


tkt_uuid: 2897419fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: statistics
priority: 8
foundin: None
resolution: Fixed
title: beta-distribution-1.0 test failure (sol 2.8, sparc, 8.4.19)
comment:
  Enclosed a test failure on a solaris 2.8 / sparc machine. Tcl 8.4.19/HEAD.

  ==== beta-distribution-1.0 Test pdf-beta FAILED
  ==== Contents of test case:

      set x [list  [::math::statistics::pdf-beta 1.3 2.4 0.2]  [::math::statistics::pdf-beta 1 1 0.5]  [::math::statistics::pdf-beta 3.7 0.9 0.0]  [::math::statistics::pdf-beta 1.8 4.2 1.0]  [::math::statistics::pdf-beta 320 400 0.4]  [::math::statistics::pdf-beta 500   1 0.2]  [::math::statistics::pdf-beta 1000 1000 0.50]]

  ---- Test generated error; Return code was: 1
  ---- Return code should have been one of: 0 2
  ---- errorInfo: floating-point value too small to represent
      while executing
  "expr {exp($term1 + $term2)}"
      (procedure "::math::statistics::pdf-beta" line 24)
      invoked from within
  "::math::statistics::pdf-beta 500   1 0.2"
      invoked from within
  "list  [::math::statistics::pdf-beta 1.3 2.4 0.2]  [::math::statistics::pdf-beta 1 1 0.5]  [::math::statistics::pdf-beta 3.7 0.9 0.0]  [::math::statist..."
      invoked from within
  "set x [list  [::math::statistics::pdf-beta 1.3 2.4 0.2]  [::math::statistics::pdf-beta 1 1 0.5]  [::math::statistics::pdf-beta 3.7 0.9 0.0]  [::math::..."
      ("uplevel" body line 2)
      invoked from within
  "uplevel 1 $script"
  ---- errorCode: ARITH UNDERFLOW {floating-point value too small to represent}
  ==== beta-distribution-1.0 FAILED

  Any ideas where I should look in code or test for the problem ?


tkt_uuid: 3389655fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tcl :: chan :: *
priority: 5 Medium
foundin: None
resolution: Fixed
title: memchan not working
comment:
  testing in tkcon produces these responses (also tested with 8.5.10)

  ...(Tcl8.6b1.2 / Tk8.6b1.2)
  % package require TclOO
  0.6.2
  % package require tcl::chan::memchan
  1.0.1 

  % set fid [::tcl::chan::memchan]
  can't read "content": no such variable 

  % package require tcl::chan::variable
  1.0.1 

  % set fid [::tcl::chan::variable buffer]
  can't read "allowed(write)": no such variable 


tkt_uuid: 1935658fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: app: tkchat
priority: 5 Medium
foundin: None
resolution: Accepted
title: Minor issue on a change the font settings
comment:
  Hello,

  When I did try to change default font for tkchat window, using Preferences->Fonts dialog, I noticed that some controls (a few buttons and labels) change itself too (become to use the same font face). Tested platform is Linux.

  Look, please, on the font faces: Preferences->Colors, Preferences->Options dialogs, and a clock plugin then.

  I found that those widgets have an extra font settings. It seems, it's enough just to remove the font setting in a few places to get an expectected output.

  BUT, I don't know how the same widgets look on other platforms (Windows or MAC) when the default font is changed, so, perhaps, my tweaks are unneeded at all.

  The path was tested on the current tkchat revision: 1.422. It works for _me_.

  Thanks.

  Sergei Gavrikov


tkt_uuid: 1815027fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib
priority: 5 Medium
foundin: None
resolution: None
title: ::tooltip::show; wrong order of window checking
comment:
  The evaluation "{!$we || (!$wm && !$wc)}" if the window exists is to late:

  -----------
  set we [winfo exists $w]
  set wc [string match $w* [eval [list winfo containing] \
                                    [winfo pointerxy $w]]]
  set wm [string equal [winfo class $w] "Menu"]
  if {!$we || (!$wm && !$wc)} {
     return
  }
  ------------

  It's after "[winfo pointerxy $w]" where it already crashes.

  Should be:
  -------------
  set we [winfo exists $w]
  if {!$we} {return}
  set wc [string match $w* [eval [list winfo containing] \
                                    [winfo pointerxy $w]]]
  set wm [string equal [winfo class $w] "Menu"]
  if {!$wm && !$wc} {
      return
  }
  -------------


tkt_uuid: 977354ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Accepted
title: cosmetic problem(s) in TkChat about box...
comment:
  I noticed this a while ago and finally got annoyed 
  enough to fix it.  Patch attached, please commit.


tkt_uuid: 856280ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: log
priority: 5 Medium
foundin: None
title: Add deletion callbacks to logger
comment:
  At the moment there is no (public) way to do a clean
  shutdown of the logger system. If one uses a custom
  logproc that opens files etc. it is not possible to
  detect the correct time a logfile should be closed etc. 

  So a mechanism to associate a destructor with the
  logging service would be very nice to cleanup things,
  without extra bookkeeping.

  Either a new subcommand of ${log} or as an option to
  logger::init, the procs should be called when a delete
  operation is performed, walking the tree from the
  children to the root of the tree.

  Michael 


tkt_uuid: 1416794fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: snit
priority: 5 Medium
foundin: None
resolution: Fixed
title: snit: test suite bugs
comment:
  with -debug 1:

  * snit 1.1
  test name 'htypemethod1.5' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'dtypemethod-1.3' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'dtypemethod-1.8' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'dtypemethod-4.7' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'creation-1.7' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'creation-1.8' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'creation-1.9' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'method-1.5' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'method-1.9' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'method-1.10' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'hmethod-1.5' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'dmethod-1.3' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'dmethod-1.8' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'dmethod-4.7' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'widgetadaptor-1.9' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'widgetadaptor-1.11' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'installhull-1.4' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'iinfo-1.1' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'tinfo-1.1' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'typevar_var-1.5' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'optionsyntax-2.2' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'optionsyntax-2.3' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'optionsyntax-2.4' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'cgetcache-1.3' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'configurecache-1.3' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'validatemethod-1.3' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'hastypeinfo-1.2' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'hastypedestroy-1.2' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'hasinstances-1.2' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'hasinstances-1.3' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test
  test name 'hasinfo-1.2' re-used; prior use in
  /local/src/tcllib/modules/snit/snit.test


tkt_uuid: 1098051fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math
priority: 5 Medium
foundin: None
resolution: None
title: bignum::rshift is wrong for negative inputs.
comment:
  Test cases to consider:

  [10:04]kbkOh, by the way, >> is wrong as well.
  [10:05]akuAre you talking about bignum::rshift ?
  [10:05]kbkUhm, yeah. -1>>1 is -1, not 0; -3>>1 is -2,
  not -1.
  [10:06]akuWell, rshift is not tested by the bignum
  testsuite.
  [10:06]kbkWell, I suppose that I've just proposed a
  couple of tests, then. 
  [10:07]akuYep
  [10:08]akuI will cut&paste this into a bug report

  And a solution, by Kevin:

  [10:08]kbkFixing that one is: A>>B = ~(~A>>B) =
  -((-A-1)>>B)-1

  Note: ~A is defined as (-A)-1 (Infinite precision
  two-complement).

  The general context is a talk on the chat about bignums
  in Tcl (core-level), something Kevin is working on, and
  for complete seamlessness he has to impl. all bitops,
  i.e. &, |. ^. Through this we also looked at the tcllib
  bignum code in this area. Especially as there is a RFE
  pending for more bitops as well.

  [10:11]akuWe might have to look at the
  set/clear/test-bit operators as well I guess.
  [10:12]kbkWell, for tcllib's bignums, we don't have
  to make them algebraically consistent with 2-s comp
  ints, because they can't appear in [expr].


tkt_uuid: 440064ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Fixed
title: some code cleanup example/hpupdate.tcl
comment:
  I changed a few coding nits in the
  ftp/example/hpupdate.tcl file hoping against hope to
  fix at least one of the problems I have with it - the
  program tries to show me the difference, but what it
  shows doesn't reflect the real difference.  The
  original author is no longer supporting the program; he
  has written a significantly better app that replaces
  hpupdate, but it is all in german and my german is too
  rust.

  Anyways, I'm attaching my patches.  Mainly i added --
  to the switches ; which has the potential of making
  them safer if the variables happen to contain a - in
  their data, added some explicit return codes, etc.


tkt_uuid: 1273537fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: base64
priority: 3 Low
foundin: None
resolution: Not Applicable Here
title: uuencode pad character confusion/mess
comment:
  A number of testsuites for packages which have
  accelerators are written to load and test all available
  accelerators.

  The uuencode testsuite is not written to that form yet,
  but should, as we have pure Tcl, critcl, and Trf
  accelerators.

  It is written to select one of the available
  accelerators and test that. It however gets confused if
  there are both critcl and Trf present. It loads and
  uses critcl, but some test uuencode-1.4 reacts to the
  presence of Trf and changes to expect different
  results. This mismatch causes it to fail.

  The results are in disagreement about the padding
  character. Trf uses tilde (~), and pure Tcl/critcl use
  the backtick (`). Why the difference ? Do we have a
  document providing an authoritative answer to this ?


tkt_uuid: 440049ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 3 Low
foundin: None
resolution: Fixed
title: latest report module test suite fails
comment:
  Note that I didn't see a category for report when
  filing this msg on sf.net

  I downloaded the latest tcllib from the nightly cvs at
  scriptics on July 10, 2001 at 9:30 AM EDT.

  Module: report
  modules/report/report.test
  report 0.1
  - struct 1.1

  ==== report-2.0 style definition errors FAILED
  ==== Contents of test case:

      catch {::report::defstyle} result
      set result

  ---- Result was:
  wrong # args: should be "::report::defstyle styleName
  arguments body"
  ---- Result should have been (exact matching):
  no value given for parameter "styleName" to
  "::report::defstyle"
  ==== report-2.0 FAILED

  ==== report-2.1 style definition error FAILED
  ==== Contents of test case:

      catch {::report::defstyle foo} result
      set result

  ---- Result was:
  wrong # args: should be "::report::defstyle styleName
  arguments body"
  ---- Result should have been (exact matching):
  no value given for parameter "arguments" to
  "::report::defstyle"
  ==== report-2.1 FAILED

  ==== report-2.2 style definition errors FAILED
  ==== Contents of test case:

      catch {::report::defstyle foo {}} result
      set result

  ---- Result was:
  wrong # args: should be "::report::defstyle styleName
  arguments body"
  ---- Result should have been (exact matching):
  no value given for parameter "body" to
  "::report::defstyle"
  ==== report-2.2 FAILED
  ==== report-2.3 style definition errors FAILED
  ==== Contents of test case:

      catch {::report::defstyle foo {} {} bla} result
      set result

  ---- Result was:
  wrong # args: should be "::report::defstyle styleName
  arguments body"
  ---- Result should have been (exact matching):
  called "::report::defstyle" with too many arguments
  ==== report-2.3 FAILED

  ==== report-3.0 style deletion errors FAILED
  ==== Contents of test case:

      catch {::report::rmstyle} result
      set result

  ---- Result was:
  wrong # args: should be "::report::rmstyle styleName"
  ---- Result should have been (exact matching):
  no value given for parameter "styleName" to
  "::report::rmstyle"
  ==== report-3.0 FAILED

  ==== report-4.0 style introspection error FAILED
  ==== Contents of test case:

      catch {::report::stylearguments} result
      set result

  ---- Result was:
  wrong # args: should be "::report::stylearguments
  styleName"
  ---- Result should have been (exact matching):
  no value given for parameter "styleName" to
  "::report::stylearguments"
  ==== report-4.0 FAILED

  ==== report-4.2 style introspection error FAILED
  ==== Contents of test case:
      catch {::report::stylebody} result
      set result

  ---- Result was:
  wrong # args: should be "::report::stylebody styleName"
  ---- Result should have been (exact matching):
  no value given for parameter "styleName" to
  "::report::stylebody"
  ==== report-4.2 FAILED

  ==== report-6.0 report errors FAILED
  ==== Contents of test case:

      catch {report myreport} msg
      set msg

  ---- Result was:
  wrong # args: should be "report name columns args"
  ---- Result should have been (exact matching):
  no value given for parameter "columns" to "report"
  ==== report-6.0 FAILED

  ==== report-10.0 column sizes FAILED
  ==== Contents of test case:

      report myreport 3
      catch {myreport size} result
      myreport destroy
      set result

  ---- Result was:
  wrong # args: should be "::report::_size name column
  ?size?"
  ---- Result should have been (exact matching):
  no value given for parameter "column" to
  "::report::_size"
  ==== report-10.0 FAILED

  ==== report-12.0 padding FAILED
  ==== Contents of test case:

      report myreport 3
      catch {myreport pad} result
      myreport destroy
      set result

  ---- Result was:
  wrong # args: should be "::report::_pad name column
  ?where? ?string?"
  ---- Result should have been (exact matching):
  no value given for parameter "column" to
  "::report::_pad"
  ==== report-12.0 FAILED

  ==== report-13.0 justification FAILED
  ==== Contents of test case:

      report myreport 3
      catch {myreport justify} result
      myreport destroy
      set result

  ---- Result was:
  wrong # args: should be "::report::_justify name column
  ?jvalue?"
  ---- Result should have been (exact matching):
  no value given for parameter "column" to
  "::report::_justify"
  ==== report-13.0 FAILED

  ==== report-15.0 separator templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-15.0 FAILED

  ==== report-16.0 separator templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-16.0 FAILED

  ==== report-17.0 separator templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-17.0 FAILED

  ==== report-18.0 separator templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-18.0 FAILED

  ==== report-19.0 separator templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-19.0 FAILED

  ==== report-20.0 separator templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-20.0 FAILED

  ==== report-21.0 separator templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-21.0 FAILED

  ==== report-22.0 data templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-22.0 FAILED

  ==== report-23.0 data templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-23.0 FAILED

  ==== report-24.0 data templates FAILED
  ==== Contents of test case:

          report myreport 1
          catch [list myreport $template] result
          myreport destroy
          set result
      
  ---- Result was:
  wrong # args: should be "::report::_tAction name
  template cmd args"
  ---- Result should have been (exact matching):
  no value given for parameter "cmd" to
  "::report::_tAction"
  ==== report-24.0 FAILED

  ==== report-27.0 formatting errors FAILED
  ==== Contents of test case:

      report           myreport 5
      catch {myreport printmatrix} result
      myreport destroy
      set result

  ---- Result was:
  wrong # args: should be "::report::_printmatrix name
  matrix"
  ---- Result should have been (exact matching):
  no value given for parameter "matrix" to
  "::report::_printmatrix"
  ==== report-27.0 FAILED


  ==== report-28.0 formatting errors FAILED
  ==== Contents of test case:

      report           myreport 5
      catch {myreport printmatrix2channel} result
      myreport destroy
      set result

  ---- Result was:
  wrong # args: should be "::report::_printmatrix2channel
  name matrix chan"
  ---- Result should have been (exact matching):
  no value given for parameter "matrix" to
  "::report::_printmatrix2channel"
  ==== report-28.0 FAILED

  ==== report-28.1 formatting errors FAILED
  ==== Contents of test case:

      report           myreport 5
      ::struct::matrix mymatrix
      catch {myreport printmatrix2channel mymatrix}
  result
      mymatrix destroy
      myreport destroy
      set result

  ---- Result was:
  wrong # args: should be "::report::_printmatrix2channel
  name matrix chan"
  ---- Result should have been (exact matching):
  no value given for parameter "chan" to
  "::report::_printmatrix2channel"
  ==== report-28.1 FAILED


tkt_uuid: 704187ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: doctools - manpage_begin doc error re args
comment:
  The doc I have says:
  manpage_begin command section version 
  This command begins a manpage. Nothing is allowed to 
  precede it. Arguments are the name of the command 
  described by the manpage, the section of the manpages 
  this manpages lives in, the version of the module 
  containing the command, the name of the module itself 
  and two descriptions, one short for the command and 
  one a bit longer for the module. Both have to fit on one 
  line.

  NOTICE: the descriptive verbiage calls out "two 
  descriptions" which the summary line does not show.
  Seems a contradiction; either the summary or the 
  verbiage needs changing.


tkt_uuid: 492156ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: textutil
priority: 5 Medium
foundin: None
resolution: Accepted
title: New expand method 'textcmd'
comment:
  Enclosed a patch which reintroduces 
  the 'raw_text_hook' known to the expand application in 
  the form of 'textcmd', a macro which is run for all 
  plain text encountered in a template.


tkt_uuid: 723684ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: tree
priority: 5 Medium
foundin: None
title: ADD: ::struct::tree -delete -- myTree
comment:
  Currently there appears to be no way to delete 
  a ::struct::tree without usign non-lib functions to capture 
  what is availiable.

  CURRENT METHOD:
  rename myTree {}


  PROPOSED METHOD:
  ::struct::tree -delete -- myTree


  Any Questions?

  David Bigelow
  davidhbigelow@compuserve.com


tkt_uuid: 2906751fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: plotchart
priority: 5 Medium
foundin: None
resolution: Fixed
title: right and left axes confused
comment:
  If I create an XYplot with a right axis, the data are displayed in the correct locations, but the left axis's ticks show the scale of the right axis.  The right axis's ticks show the correct scale, but there doesn't seem to be any way to set their format.

  The attached script demonstrates the problem.


tkt_uuid: 462015ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 8
foundin: None
resolution: Rejected
title: find names not prefixed with pwd
comment:
  @ashland [~/download/tcl] $ find |less
  .
  ./CVS
  ./CVS/Root
  ./CVS/Repository
  ./CVS/Entries
  ./compat
  ./compat/CVS
  ./compat/CVS/Root

  @ashland [~/download/tcl] $ find `pwd` |less

  /home/davidw/download/tcl
  /home/davidw/download/tcl/CVS
  /home/davidw/download/tcl/CVS/Root
  /home/davidw/download/tcl/CVS/Repository
  /home/davidw/download/tcl/CVS/Entries
  /home/davidw/download/tcl/compat
  /home/davidw/download/tcl/compat/CVS
  /home/davidw/download/tcl/compat/CVS/Root

  tcllib's find does not exhibit this behaviour - it
  *always* prefixes [pwd] to the results.


tkt_uuid: 2795699fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: yaml
priority: 5 Medium
foundin: None
resolution: Fixed
title: does not work on TCL 8.4?
comment:
  I tried copying the tcllib 1.11.1 yaml package into my ActiveTcl 8.4.19 lib and got "can't read data(current)" when I ran ::yaml::yaml2dict.  Looking at the yaml code, it looks like it relies on TCL 8.5 array behavior where "incr a(1)" is legal even if a(1) doesn't exist yet.  That wasn't legal in TCL 8.4, so despite the fact that dict was backported to 8.4 and yaml package requires dict if running on a TCL version < 8.5, it doesn't actually work in 8.4.

  I haven't gone through the code changing the incr calls on uninitialized data(current) because I was afraid there might be other TCL 8.4 incompatibilities beyond just those, but I may do that in the near future after my current project ships (until then I can't really justify a lot of yak shaving).


tkt_uuid: 1007934fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: None
title: Typo in man page for struct::pool
comment:
  Example 2 for the struct::pool extension mentions:

      set fd {open "|backendApplication" w+}

  Of course, this should be:

      set fd [open "|backendApplication" w+]


  I probably had the "Caps Lock" on when typing this,

  Greetings,

  Erik Leunissen
  ============


tkt_uuid: 1191326fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ldap
priority: 5 Medium
foundin: None
resolution: Fixed
title: ldap::add cannot handle multi-valuated attributes
comment:
  ::ldap::add cannot add entries with multiple values for an 
  attribute. 
   
  My test program: 
   
  ----------------------------------------------------- 
  #!/usr/local/bin/tclsh8.4 
   
  package require ldap 
  set ldapfd [::ldap::connect ldap.my.domain] 
   
  ::ldap::bind $ldapfd "cn=admin,o=test" "mypassword" 
  set dn "cn=Test,ou=persons,o=test" 
   
  set attrval1 { 
      objectClass person 
      cn          Test 
      sn          Test 
      telephoneNumber {+31415926535 +27182818285} 
  } 
   
  set attrval2 { 
      objectClass person 
      cn          {Test User} 
      sn          Test 
      telephoneNumber +31415926535 
      telephoneNumber +27182818285 
  } 
   
  ::ldap::add $ldapfd $dn $attrval1 
   
  ::ldap::disconnect $ldapfd 
  ----------------------------------------------------- 
   
  When $attrval2 is given to ::ldap::add, I get an error 
  since telephoneNumber is repeated twice. 
   
  When $attrval1 is given to ::ldap::add, there is one 
  occurrence of the telephoneNumber with the two 
  numbers, which is not the required result. 
   
  This may (also) be a documentation problem. 


tkt_uuid: 1005948fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
title: LabelComboBox and LabelSpinBox
comment:
  It was - convenient to have such widgets with
  properties ComboBox and SpinBox in the version 1.2.x.
  It is convenient and readable at writing a code, and
  for example the command "$w -state disbled" will effect
  (to change color) both on Label and on ComboBox.
  In fact is LabelEntry - why to not make LabelComboBox
  and LabelSpinBox? :)
  Itself would write and send - a patch, but it is not
  confident, that I can write a good code.


tkt_uuid: 981545ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: better -exportselection behavior
comment:
  The following patch was sent to me as a recommendation
  for better behavior on unix.  It looks OK to me, but
  someone should double-check that it doesn't look too
  funky on unix (where is has more noticeable effect):

  I tried to turn off the -exportselection option for the
  ComboBox.  The result was the entry text was still
  selected, but now it did not deselect even if other
  places in the app grabbed the selection.  There appear
  to be now way to get rid of the selection after this.

  The following patch to ActiveTcl fixes this problem.

  --- lib/bwidget1.7/combobox.tcl.dist2004-05-26
  09:23:49.000000000 +0200
  +++ lib/bwidget1.7/combobox.tcl2004-05-26
  09:34:08.000000000 +0200
  @@ -599,7 +599,9 @@
           }
       }
       $path.e selection clear
  -    $path.e selection range 0 end
  +    if {[$path.e cget -exportselection]} {
  +        $path.e selection range 0 end
  +    }
   }


tkt_uuid: 1942472fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: doctools test hardcode author <aku>
comment:
  Some of the doctools tests fail for latex output because the authorname is hardcoded to aku.

  Seen this for the doctools tests 13.x 


tkt_uuid: 1566460fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math
priority: 5 Medium
foundin: None
resolution: Fixed
title: math-fuzzy-ManyCompares-1.1 fails with Tcl 8.5
comment:
  ==== math-fuzzy-ManyCompares-1.1 Compare fails due to
  missing braces FAILED
  ==== Contents of test case:

     set tol_eq 0
     set tol_ne 0
     set tol_ge 0
     set tol_gt 0
     set tol_le 0
     set tol_lt 0

     for { set i -1000 } { $i <= 1000 } { incr i } {
        if { $i == 0 } continue

        #
        # NOTE: The braces in the assignment for y are
  missing on purpose!
        #
        set x [expr {1.01/double($i)}]
        set y [expr (2.1*$x)*(double($i)/2.1)]

        if { [teq $y 1.01] } { incr tol_eq }
        if { [tne $y 1.01] } { incr tol_ne }
        if { [tge $y 1.01] } { incr tol_ge }
        if { [tgt $y 1.01] } { incr tol_gt }
        if { [tle $y 1.01] } { incr tol_le }
        if { [tlt $y 1.01] } { incr tol_lt }
     }
     set result [list $tol_eq $tol_ne $tol_ge $tol_gt
  $tol_le $tol_lt]
     set intended {2000 0 2000 0 2000 0}
     set equal 1
     foreach r $result i $intended {
        if { $r != $i } {
           set equal 0
        }
     }
     set equal

  ---- Result was:
  1
  ---- Result should have been (exact matching):
  0
  ==== math-fuzzy-ManyCompares-1.1 FAILED


tkt_uuid: 893259ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tcllib: request for new module
priority: 8
foundin: None
title: Add simple plotting and charting package
comment:
  I have written a simple package for drawing plots and
  charts:
  - xy-plots
  - piecharts
  - barcharts
  - polar plots

  (I would like to add some simple 3D presentations too)

  It is still very much in its infancy, but I include
  the source nonetheless for early comments and
  suggestions.

  The basic design criterium was:

  Provide an easy-to-use package. It may not be as
  flexible as some others, but by offering lots of
  different chart types it should be worth looking
  into.


tkt_uuid: 1316063fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tie
priority: 4
foundin: None
resolution: Fixed
title: tie/tie_rarray_comm.test prints extra info
comment:
  tie_rarray_comm.test includes gratuitous puts commands,
  cluttering the log.  It prints something about "self @
  xxxx," waiting for spawned comm system to boot" etc.


tkt_uuid: 687923ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: stooop
priority: 6
foundin: None
resolution: Fixed
title: tcllib.sourceforge.net/doc/stooop.html points to itself
comment:
  At the end of the document above, a link points to the
  full HTML documentation for stooop.
  Unfortunately, it points to the current document, which
  is the HTML version of the manual page, instead of the
  large HTML document shipped with stooop.
  As the author, is there anything I can do to help
  resolve this issue?

  Many thanks in advance,  Jean-Luc (jfontain@free.fr)


tkt_uuid: 1928856fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftpd
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: fsCmd list - no socket as parameter?
comment:
  When the fsCmd-proc is called with "list" or "nlist" as command, the third parameter should be the socket for the answer. But when i print the args-var the values are only:

  / {list {}}

  there's no socket for the Answer!


tkt_uuid: 1416886fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: uri
priority: 5 Medium
foundin: None
resolution: Fixed
title: uri: test suite bugs
comment:
  with -debug 1:

  * uri 1.1.5
  WARNING: removeFile removing
  "/local/src/tcllib/__testdata":
    not created by makeFile
  WARNING: removeFile removing
  "/local/src/tcllib/__testdata":
    not a file
  test name 'uri-5.14-0' re-used; prior use in
  /local/src/tcllib/modules/uri/uri.test
  WARNING: cleanupTests deleting
  /local/src/tcllib/__testdata...


tkt_uuid: 2807147fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: buttonbox -homogeneous widths
comment:
  In buttonbox.tcl, the code which is used to ensure homogeneous button widths is bad. It can't accomodate buttons of which the width changes after they are initially drawn. This can be solved by using grid's -uniform option instead of -minsize, as in the attached patch. The code is much cleaner too.


tkt_uuid: 1611929fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 8
foundin: None
resolution: Fixed
title: Suggestions for improving doctools documentation
comment:
  I recently put together a fairly large man page for my Amazon S3 library.
  In developing the library, I wrote all the documentation into a plain text file before writing the code. Then it came time to format the manual page in a way that would be easy to incorporate into Tcllib. I had trouble. :-)

  I recognise that Tcllib is a free resource maintained by many out of the goodness of their heart. I would like, in that spirit, to describe some of the things
  that gave me trouble in writing the manual pages, and to suggest some improvements.
  I do not intend this to be interpreted as demands, criticisms of past work, or ingratitude in any way. I would like this to be interpreted merely as suggestions
  on how the documentation could be more helpful to those in my situation: people trying to follow existing standards in developing new libraries for Tcl.

  Note too that I make a lot of rhetorical questions. Many of these I still don't know the answer to, but I don't expect any sort of specific reply to any of the
  comments, complaints, suggestions, or questions. I offer this purely in the spirit of "here is my experience, and if you'd like to improve that for others, I thank you for your time."


  I think there are two giant unobviousnesses from reading the doctools pages.

  1) What does a manual page look like?

  2) How do you process manual pages into readable documentation?

  As for the first part, let's look at doctools_fmt. (I haven't tried to do any directory or TOC work.)

  The new EBNF grammar is helpful, but confusing at the same time. *My* confusion comes perhaps from using EBNF in RFCs and such (which is where I assume the "EBNF" comes from), and having the EBNF shown here not follow the same rules. There is no literal "]" anywhere in the EBNF, so already it's obvious that something is "wrong" with the EBNF. THe "COMMENT" production yields "comment", but neither [comment] nor [comment here comes stuff] is a valid command. 

  It would be helpful to give a reference to how to interpret the EBNF, just in terms of the syntactic elements such as curly braces. (Since it looks like curly braces are the only "extended" feature, perhaps simply mentioning that it means "zero or more times" would be sufficient.)


  The block after the sentence "Then we define rules for all the keywords. Here we introduce our knowledge that some commands allow only whitespace after them." could be completely eliminated simply by using the same spelling for both sets of terms. Why equate EX_BEGIN to "example_begin" when you could just use "EXAMPLE_BEGIN"? It's also incorrect to state that some commands allow only whitespace after them, when what is really meant is they disallow non-whitespace text between the end of the command and the start of the next command. 
  It also looks, on first glance, the the block of EBNF after that already indicates where a "text_chunk" or a "regular_text" can appear. Indeed, the last chunk of EBNF is the only chunk that's notably useful. That the EBNF lacks the information about what arguments the formatting commands take 
  (which could have been in the second block) is also a stumbling block, inducing scrolling up and 
  down looking for the various details needed to type one line of manual.

  For example, in the second block you could just have
    BULLET ::= "[" "bullet" "]"
    SECTION ::= "[" "section" ARG "]"
  and then ARG could be defined as
    ARG ::= (all text except WHITE or "]") | QUOTE (all text except QUOTE) QUOTE
    QUOTE ::= (a literal " mark)

  Alternately, just giving a good example would clarify a lot of things, since the intent is to describe rather than prescribe.

  Those who work with other markup languages might find it surprising that when [comment] takes a single argument, [comment here is text] is illegal and must be [comment "here is text"]. That it takes Tcl-style quoting (with " or {} but not ') might be more surprising. (Or not, of course.)

  In understanding this stuff, it's often useful to have even a simple example, or a ferinstance, for unobvious manipulations of never-before-seen terms. "Vset varname value" - what's a "document variable"? Is it like a macro? Is it something that the processing engine plug-in uses?  Adding a comment like "Useful in the same way a global constant is in a program" or "helpful when a phrase that might change is repeated in several places in the manual" or some such might help.

  see_also doesn't describe the format of its arguments. If they're links, it's unobvious what format they need to be in. Similary for keywords. Funny enough, the "see also" on this page are *not* links, while the keywords *are* links, which would seem counterintuitive. The labels to see_also identifying the document don't identify the document; they give the human-readable name of the document, and assume the reader can identify the document from the name. (A URL, for example, would identify the document, or an argument that the processing engine could turn into a URL.) The statement that "each argument is a single keyword" confuses the fact that it's actually (in this document) an entire [uri] production it seems.

  It's not obvious what the difference between [arg] and [arg_def] is, given the description; similarly for other pairs of similar terms. For things like [arg] and [cmd], I would use the expression "formats the argument /text/ as the name of a command argument" rather than "declaring" something. Particularly given that [call] actually declares something in the sense that I (at least) think of as a declaration. I think programmers normally think of "declarations" as something you later refer back to, rather than simply formatting commands. The authors of the doctools probably think of it as declaring the text as something to the formatting engine, but I think that's confusing for users of the formatting engine. What does the "declaration" of a namespace imply, beyond simply formatting it a certain color? Does it show up anywhere else? I would think that only [call] and [section] actually declare something, as such. Possibly [keyword] and [see_also] as well, as they seem to move the text around some. Otherwise, [emph] would declare the word to be emphasised.

  All the different "declares that the argument /text/ is the name of ..." don't really say anything, in the same sense that {incr x ; # increment x} isn't a useful comment. It might be useful to have a call or two as an example, formatted, and show what the markup is for each element of the call. Have a Tcl proc with positional, optional, and -keyword based arguments, an expr function, a Tk widget creation call, a widget call, and a ITcl/Snit/whatever call, and show the markup for each in the example section. (See the next paragraph for why this would be helpful.)

  The documentation for list_begin is confusing, if for no other reason than it is unclear which half of the nested list the "what" refers to. Is it [list_begin arg] or [list_begin arg_def]? An example of each use would probably be helpful. Mentioning that it is the [call] tag that actually places the call in the list at the top of the man page would also be useful. A_LIST is confusing because it tells only half the story, and you have to go read the prose about the "list_begin" command (several screens away) to figure out there's an argument-matching condition. Does the list of options need to have [option] in it? That is, should it be [opt_def -possible] or should it be 
  [opt_def [option -possible]] or should it be 
  [opt_def [opt [option -possible]]]? Or is it just 
  [lst_item [option -possible]]?

  What's the difference between [cmd_def] and [call]? Impossible to guess from the documentation. Given the unobvious-to-the-uninitiated behavior of [call], the description of [usage] is even more incomprehensible.

  What's the difference between [para] and [nl]? Why is one permitted only inside lists and the other permitted only outside lists? Is there a user-interesting reason for this, or is it simply a restriction of the formatting engines?

  The "Example" section is useless. It should at a minimum mention where to get the source of man pages. While almost every possible construct is used here, I suspect they're not used correctly, since there is no actual documentation of (for example) tkoptions, args, etc. I.e., it may be an example of how the formatting looks, but not how it is supposed to be used.

  The description of everything is in a really difficult order. It's neither alphabetical, nor top-down, nor bottom-up. 

  As for the processing, giving an example of how to invoke dtp.kit would help. I'm not sure where I got mine (it was recently downloaded, tho), but simply double-clicking the .kit under Windows simply says it can't read "C:\Document", indicating it's not handling directory spaces correctly. Figuring out that it needs to be invoked from the command line as 
    tclsh dtp.kit doc html S3.man >S3.html
  was unnecessarily difficult. True, it's giving options for setting the processing engine and all, so it's understandable why it's difficult, but the documentation should address this, possibly in a section called "GETTING STARTED", so it's easy to find. Adding a -version flag/option/etc would probably be a good idea.

  I think that any or all of these four overhauls would make the documentation much more useful:

  1) Fix the EBNF to actually generate valid documents when expanded. Put in the work to deal with the literal text, the arguments, etc. Either that, or drop the first two blocks, since they're basically uninformative given the third block.

  2) Give a pointer to an example manual page that uses all the features in the correct way. Create a namespace called "docexample" and create in it a command with options and optional arguments, tk-style commands, and so on. Give people a skeleton framework from which to work.

  3) Give instructions on finding and using the latest version of the processing program, at least to the extent that a user can figure out whether what they've written matches what the program will process. If they can't even experiment, it's difficult to get right. Simply a URL to where the latest release is stored along with instructions on invoking it to generate (say) HTML, would be helpful. 

  4) Improve the error messages. I'm personally used to using systems that don't tell you where the error is, requiring adding text a paragraph at a time so you know what you changed since it last worked. Many aren't. I know it's difficult, tho, probably moreso with a plug-in architecture. Perhaps offer hints or, again, a skeleton to start with.

  My guess is that 2 and 3 are probably pretty easy for those currently in-the-know about this tool, and that they'd also produce the most bang for the buck.


