# attachment

src: 569bf7aaf4472b5d21e891fa048d0c0a1f8c989f
target: 3613162fffffffffffffffffffffffffffffffff
filename: logger.patch
user: amitguptainn
comment:
  Attached is the patch showing code changes for saving log to a file. ''logfile" needs to be set to logfile name for enabling the log saving


src: 1543256dad79fc9576b286fd6792f316d5ddc721
target: 3584575fffffffffffffffffffffffffffffffff
filename: cmdline.patch
user: amitguptainn
comment:
  Attached file has code changes for this feature request and #3584575. It supports must,file,dir type commandline parameters.


src: 6e73380502c198a93d2e627bfe7ea88d193abd00
target: 981605ffffffffffffffffffffffffffffffffff
filename: bwidget_calendar_06282004.patch.gz
user: cmay
comment:
  Gzipped output of diffs with current CVS using -u option, apply with patch -p0 in top source bwidget directory.


src: a86dfa2fe1380d605cb3e19d1bf72e001ed48f63
target: 1935658fffffffffffffffffffffffffffffffff
filename: tkchat-20080406.patch
user: nobody@86.57.139.233
comment:
  tkchat.tcl, tkchat_clock.tcl: If someone change the default font settings, some controls are changed too. Fix that.


src: 580f1bcf8e05ef7f635ef9f2fd8020fab283298d
target: 1254934fffffffffffffffffffffffffffffffff
filename: testmd5.php
user: erl
comment:
  A PHP script to receive an HTTP uploaded file. Despite the name, it doesn't use MD5, just prints the length of the file.


# ticket

tkt_uuid: 3007956fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 7 High
foundin: None
resolution: Fixed
title: problem loading msgcat
comment:
  platform: sparc solaris 8, sun c compiler
  tcl 8.6 cvs head
  tcllib cvs head

  I decided on a whim to run the tcllib test suite today against tcl 8.6 cvs head. So far, I've encountered about 4 dozen test failures that look something like this:

  ---- doctools-idx-51.27 start

  ==== doctools-idx-51.27 doctools::idx deserialize = docidx, incbadcmd, error mes
  sage FAILED
  ==== Contents of test case:

          I deserialize = $data docidx
      
  ---- Result was:
  Unable to locate or load plugin "docidx" (ERROR for slave interp45 : can't find 
  package msgcat)
  ---- Result should have been (exact matching):
  "/vol/tclsrcsol/tcl86/tcllib/modules/doctools2idx/tests/data/bad_command" error 
  on line 1.4: Wrong#args for "key", need at least 1
  ==== doctools-idx-51.27 FAILED


  If I start up a tclsh8.6 directly, and type in package require msgcat, it is found.


tkt_uuid: 556504ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
resolution: Fixed
title: fileutil::cat won't read empty files
comment:
  fileutil::cat won't read non-empty "empty" files (where
  [file size] == 0, but the file isn't empty), as is the
  case with the files in the /proc filesystem on Linux.

  fileutil::cat /proc/[pid]/maps currently returns the
  empty string.  With the attached patch it returns the
  actual data as expected.


tkt_uuid: 1798427fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: Doctools HTML output
comment:
  It is very difficult to make the HTML output of the dtplite command presentable.


  - SECTION TITLES ARE IN ALL CAPS. It's traditional for man pages with limited formatting capability, but not necessary for a web page.

  - The Table of Contents are indented with 4 non-breaking spaces and hard returns...

  - The Synopsis is formatted using nested table. It's not necessary.

  - Paragraphs and definition lists are unclosed.

  - Examples are wrapped in a table so that a thick line will be drawn down the left edge. It's not necessary.

  - dtplite is brittle in it's expectations for where things should live. For example, to use the automatic TOC and index building function I had to create a symlink forest of 'modules'. The directory names of the modules are used as the headings in the TOC.  It's not clear how to add C library docs to this.


tkt_uuid: 3598183fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: irc
priority: 8
foundin: None
resolution: Fixed
title: Missing default detection of EOF
comment:
  The manpage says that only 3  kinds of events must be registered, and that 'defaultcmd' works as a catch-all.
  However, an EOF from the irc socket fails to trigger it, and there is no $dispatch(EOF) unless explicitly registered.
  As a consequence, a disconnection from the irc server is, by default, easily overlooked.
  (this happened to the KGB bot on core.tcl.tk when an IP change broke the connection)

  Maybe the proper fix is simply to document the fact, and promote EOF to the status of fourth mandatory callback.


tkt_uuid: 985568ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: doctools
priority: 7 High
foundin: None
title: doctools - better error messages
comment:
  The error messages generated by doctools are bad with
  regard to reporting the location they happen at. They
  should report not only what is wrong, but exactly where.


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: 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: 563380ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Duplicate
title: BWidget 8.4 padx bug
comment:
  The Tree, Listbox and ButtonBox widgets are all
  affected by the change in 8.4 that gave the frame
  widget a -padx option.

  Since these BWidgets have a padx that sets the padding
  between graphics and text, this option is actually
  passed on to Tcl.  Now the the frame widget has a padx
  option, the default padx on these widgets (20 pixels)
  is being passed to the frame, and there's a 20 pixel
  border around these widgets.


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: 1006157fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftpd
priority: 5 Medium
foundin: None
resolution: Fixed
title: ftpd LIST response mis-formatted
comment:
  ::ftpd's response to the LIST command should be
  formatted similar to the output of "ls -l", including
  owner and group values.  But when ftpd is run on
  Windows, the owner and group fields are simply omitted,
  causing the ftp clients I am working with to mis-parse
  the response.

  I investigated how the ftp server at ftp.microsoft.com
  formats its response to LIST, and I found that it uses
  the generic literal strings "owner" and "group" to fill
  the necessary fields.  So I patched ::ftpd to behave in
  the same way.

  The procedure ::ftpd::fsFile::fs needs the "list"
  option of the switch command replaced with the following:

  list {
      # [ 766112 ] report . and .. directories (linux)
      # Copied the code from 'nlst' above to handle this.

              foreach f [lsort $fileList] {
                          if {[string equal [file tail
  $f] "."] || \
                                  [string equal [file
  tail $f] ".."]} {
                              continue
                          }
  file stat $f stat
                          if {[string equal
  $tcl_platform(platform) "unix"]} {
                              set user [file attributes
  $f -owner]
                              set group [file attributes
  $f -group]
                          } else {
                              set user owner
                              set group group
                          }
      puts $outchan [format "%s %3d %s %8s %11s %s %s" \
              [PermBits $f $stat(mode)] $stat(nlink) \
                              $user $group $stat(size) \
                                      [FormDate
  $stat(mtime)] [file tail $f]]

      }
  }


tkt_uuid: 748344ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Invalid
title: Bug: packing a Tk listbox into a BWidget ScrolledWindow
comment:
  The minimal
  script to reproduce this problem appears to be:

      package require -exact BWidget 1.6
      set sw_t [ScrolledWindow .sw -auto both]
      set t_listbox [listbox [$sw_t getframe].lb]
      $sw_t setwidget $t_listbox
      pack $sw_t
      pack $t_listbox


tkt_uuid: 3325112fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Accepted
title: ftp -- too enthusiastic use of reverse DNS
comment:
  The calls to [fconfigure -peer/sockname], which incur reverse DNS lookups, are not ideally placed in the code. This matters when the reverse DNS lookup is likely to fail slowly (with a timeout). TYpical are ill-configured resolvers. Especially the lookup on the client's own IP is likely to fail when it's NATted. See https://groups.google.com/group/comp.lang.tcl/browse_frm/thread/65b6637a503f4966?hl=fr# .

   (1) [fconfigure -peername] is called unconditionally, but uses the result only in the VERBOSE case (!)

   (2) [fconfigure -sockname] is called unconditionally for the data connection, though it is only useful in active mode.


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: 3440058fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: pki
priority: 5 Medium
foundin: None
title: (pki) Key related stuff
comment:
  ::pki::rsa::generate and ::pki::pkcs::parse_key procs only handles the n,e,d vaules of a key, and calculates the size.  On file attached, there is the full info of the rsa key set.

  There is a new proc to converts the tcl stored key to pem, also with DES password encryption option, which is fully recognized by openssl.  (Not sure if it is named properly)

  However, there is a little bug i can not find yet after generating a rsa key, which sometimes makes crash the ::pki::pkcs::create_csr process, but it can be fix by generating a key then convert to pem then parse it back.

  btw, i get an "integer value too large to represent" error when generating a 4096bit length key on ::pki::_isprime, should i post it as a bug?

  Regards,

  -=Raul=-


tkt_uuid: 3513263fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: ComboBox does not work themed
comment:
  Tk 8.5.9 with bwidget 1.9.5 gives the following error:

  package require BWidget
  Widget::theme 1
  toplevel .t
  ComboBox .t.c -bwlistbox 1 -hottrack 1 -values {1 2 3 4 5 6 7 8 9 10 11 12 13 14}
  .t.c
  .t.c configure
  unknown option "-highlightbackground"


  I guess the problem is in ComboBox and Entry since they use some resources not present when theming is active.


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: 1144466fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: log
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: RFE: logger: customizable output format
comment:
  The current log output format of the logger pkg is:

  "[time] [service] [level]: 'msg'"

  I would like to see an easier method to change the
  output format instead of having to write a custom
  logproc to change it. For example, I would like to see
  the caller proc name also printed in the output message:

  "[time] [service] [proc] [level]: 'msg'"

  To support such a feature, the logger package should be
  enhanced with a new API say logger::format which would
  allow us to configure the logger output. Here's a
  suggested syntax for logger::format API:

  logger::format log ?<format>?
     where <format> allows you to specify percent
  substitutions; valid percent keys are %time,  service,
  %proc, %level, %callerstack and %message. The default
  <format> could be {[%time] [%service] [%level]:
  '%message'. If <format> is not specified, this command
  would return the format value set previously. Setting
  <format> to null {} will restore the default value.

  logger::format time ?-format <dateformat>? ?-gmt boolean?
    This cmd will allow the user to change the format of
  %time substitution. The <dateformat> would allow
  percent substitutions accepted by the [clock format
  -format ..] command. For example, if the user just
  wants to print 23:42:12 under %time, use the cmd
  [logger::format time -format %H:%M:%S]. Again the
  default value for the <dateformat> is same as for clock
  format command. If -format option is specified without
  any value, it will return the current value.

  logger::format service ?<format>?  where <format>
  supports substitutions (%parent %tail) for namespace
  qualifiers
  logger::format proc ?<format>? where <format> supports
  substitutions (%parent %tail) for namespace qualifiers 

  -----------------------Micahel's comments below--------

  I like this proposal, and it isn't really that hard to
  implement. Basically it calls for dynamic rewriting of
  the custom logging command which is called by the
  logger system with some more logic bits.
  I thought of something similar, a bit more flexible
  (but it got too complex then).

  The interesting part is, if the logger::format command
  should be a global option or a per service option. I
  can imagine good reasons for a per service option (for
  example think about tclhttpd, use one service for
  logging access to the server, then another for server
  errors and one for application code, each needs a
  different format basicallly.).

  Format inheritance would work as before. 


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: 722192ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 3 Low
foundin: None
resolution: Fixed
title: Use lsearch -exact in bwidget/tree.tcl
comment:
  The attached patch is mechanical ly replaces all
  occurrences of [lsearch] in tree.tcl with [lsearch
  -exact]; this is to avoid problems in case node IDs
  contain  "*" or other glob characters.

  I'm *pretty* sure that [lsearch -exact] is the right
  thing in all cases, since the Tree widget isn't
  documented to use glob-matching in any operation, but
  this ought to be double-checked before committing.


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: 840571ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
title: fileType: Detect video
comment:
  Extended fileType to detect various video formats

  wmf - windows media player
  rm - real media
  mov - MOV format
  ogg/theora - ogg video format.
  mpeg2


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: 656336ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: app: tkchat
priority: 5 Medium
foundin: None
resolution: Duplicate
title: Highlighting for tkchat
comment:
  This code provides to highlight interesting text in the
  tkchat message window.

  The user interface can be invoked in two ways:
  1.) Through the Find entry on the FIle menu.
  2.) By entering /find in the message post window.
  (command line) The /find command may have an optional
  argument, which will then be used as the search string.

  To highlight an exact string or regexp pattern, enter
  it in "Find text" field.  All matches in the chat
  window will be highlighted.  Should the search be a
  time consuming one, it will pause when the Find dialog
  is closed and resume when it is re-opened.

  To remove all highlighting, clear the "Find text" field
  in the Find dialog.

  Known caveats:

  Sub-strings are not highlighted separately from the
  rest of the matching text when using regexp
  sub-matching. The whole match will be highlighted the
  same. This is a limitation of of the [text] -search
  command.


tkt_uuid: 3312900fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftpd
priority: 5 Medium
foundin: None
resolution: Fixed
title: CWD operation does not perform basic checks
comment:
  CWD operation should check for existence of file (using the filesystem callback "exists" to prevent changing directories to a file)

  --- ftpd1.2.5/ftpd.tcl(revision 2177)
  +++ ftpd1.2.5/ftpd.tcl(working copy)
  @@ -824,7 +824,14 @@
   return
       }
   
  -    set data(cwd) [file join $data(cwd) $relativepath]
  +    set path [file join $data(cwd) $relativepath]
  +
  +    if {[::ftpd::Fs exists $path]} {
  +        puts $sock "550 not a directory"
  +        return
  +    }
  +
  +    set data(cwd) $path
       puts $sock "250 CWD command successful."
       return
   }


tkt_uuid: 1115335fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: mclistbox
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: mclistbox patch: select color
comment:
  years ago, I have made a small change to mclistbox to
  get short options for -foreground and -background (-fg
  and -bg) and enable -selectforeground -selectbackground.

  Here it is now as diff to the current CVS.


tkt_uuid: 914279ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: crc
priority: 5 Medium
foundin: None
resolution: Fixed
title: crc::crc32 and Trf
comment:
  When Trf is installed the data starting with the dash ('-') 
  lead to an error and end of otions option (--) doesn't work 
  either Examples: 
   
  set value "-hello world" 
   
  set x [ ::crc::crc32 $value ]  
   
  produces: 
   
  Error in startup script: bad option -hello world: must be 
  -filename, -format, -implementation or -seed 
      while executing 
  "::crc::crc32 $value " 
   
  set x [ ::crc::crc32 -- $value ]  
   
  produces: 
   
  Error in startup script: crc-zlib: wrong # args, all options 
  require an argument 
      while executing 
  "crc-zlib $s" 
      (procedure "crc::Crc32_trf" line 11) 
      invoked from within 
  "$impl [lindex $args 0] $seed" 
      (procedure "::crc::crc32" line 53) 
      invoked from within 
  "::crc::crc32 -- $value " 
   
  Changing line 167 in crc32.tcl (tcllib-1.6) from 
  binary scan [crc-zlib $s] i r 
  to 
  binary scan [crc-zlib -- $s] i r 
   
  solves the problem 
   
   


tkt_uuid: 1015402fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: fileutil
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Add cmd to fileutil: which, a wrapper around auto_execok
comment:
  I have added a which package to the tcllib v1.4 library
  we are shipping with our Quartus II software developed
  here at Altera. I thought I'd submit the package back
  to the tcllib team for possible consideration as a
  standard tcllib package. This is a pure-Tcl which
  implementation that has the same interface on
  Windows/Unix (eases cross-platform scripting a bit).
  There's not much too it. It doesn't support MacOS (we
  don't ship for MacOS so I have no way to test it) but
  it shouldn't be hard to extend to the Mac platform.


tkt_uuid: 682187ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: math
priority: 8
foundin: None
title: Add a statistics module
comment:
  The module I propose to add contains a set of
  statistical procedures for analysing and manipulating
  data. It comes with a full set of documentation and a
  reasonable set of tests.

  Though still work in progress, I would like to submit
  it, as the parts that are complete may be useful for
  somebody. 


tkt_uuid: 507242ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: crc
priority: 5 Medium
foundin: None
resolution: Fixed
title: test failed
comment:
  i got the following errors during \make test from crc:

  Module: crc
  modules/crc/cksum.test

  ==== cksum-4.0 cksum file option FAILED
  ==== Contents of test case:

      set r1 [crc::cksum -file $::argv0]
      set r2 [crc::cksum [crc::loaddata $::argv0]]
      if {$r1 != $r2} {
          set r "differing results: $r1 != $r2"
      } else {
          set r ok
      }

  ==== Test generated error:
  can't read "::argv0": no such variable
  ---- Result should have been:
  ok
  ==== cksum-4.0 FAILED

  modules/crc/crc32.test

  ==== crc32-4.0 crc32 file option FAILED
  ==== Contents of test case:

      set r1 [::crc::crc32 -file $::argv0]
      set r2 [::crc::crc32 [crc::loaddata $::argv0]]
      if {$r1 != $r2} {
          set r "differing results: $r1 != $r2"
      } else {
          set r ok
      }

  ==== Test generated error:
  can't read "::argv0": no such variable
  ---- Result should have been:
  ok
  ==== crc32-4.0 FAILED

  modules/crc/sum.test

  ==== sum-4.0 sum file option (BSD) FAILED
  ==== Contents of test case:

      set r1 [crc::sum -bsd -file $::argv0]
      set r2 [crc::sum -bsd [crc::loaddata $::argv0]]
      if {$r1 != $r2} {
          set r "differing results: $r1 != $r2"
      } else {
          set r ok
      }

  ==== Test generated error:
  can't read "::argv0": no such variable
  ---- Result should have been:
  ok
  ==== sum-4.0 FAILED


  ==== sum-4.1 sum file option (SysV) FAILED
  ==== Contents of test case:

      set r1 [crc::sum -sysv -file $::argv0]
      set r2 [crc::sum -sysv [crc::loaddata $::argv0]]
      if {$r1 != $r2} {
          set r "differing results: $r1 != $r2"
      } else {
          set r ok
      }

  ==== Test generated error:
  can't read "::argv0": no such variable
  ---- Result should have been:
  ok
  ==== sum-4.1 FAILED


  ********
  ******** solution?
  ********
  after, package require cksum in cksum.test, i added
  set ::argv0 [info script]

  that fixed it.


tkt_uuid: 914488ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Out of Date
title: Transfer rate should be under VERBOSE or DEBUG control
comment:
  This message:

    $ftp(Total) bytes sent in $elapsed seconds ($persec
  Bytes/s)

  in function ::ftp::ElapsedTime 

  is displayed as a debug message no matter what the
  value of ftp::DEBUG or ftp::VERBOSE.   I believe it
  should not be logged at all unless either of those
  flags are set to true.


tkt_uuid: 530207ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: matrix
priority: 5 Medium
foundin: None
resolution: Fixed
title: No documentation for printmatrix method
comment:
  The documentation for the ::struct::matrix module
  mentions methods for formatting the contents of a
  matrix, but it does not describe how to do this.

  It would be nice if this were illustrated with a simple
  example.


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: 530056ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: textutil
priority: 5 Medium
foundin: None
resolution: Fixed
title: Misleading error message in expander
comment:
  When a user of the expander does not pop all the 
  contexts it pushed during the expansion process the 
  core expander will access the wrong context when 
  trying to restore bracket information of an outer 
  invocation. The generated error message refers to the 
  lb variable, telling us that it is missing. But the 
  root cause is that there are still user contexts open.

  Change the expander to check that before/after levels 
  of contexts are the same and generate a better error 
  message if the levels are not the same. Maybe even 
  name the contexts which were not popped.


tkt_uuid: 535216ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math
priority: 8
foundin: None
resolution: Fixed
title: Update for ::math::fuzzy package
comment:
  I have updated the files for the fuzzy package:
  - Manual pages now available in proper nroff and html
  format
  - Test-set extended
  - Full set of procs as envisioned for the package


tkt_uuid: 1002969fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftpd
priority: 5 Medium
foundin: None
resolution: None
title: ftpd can't handle pathnames with spaces
comment:
  ftpd 1.2+ tcl 8.4.6 and .7

  I start up ftpd on my win machine and use Windows
  Explorer to create a network shortcut.  The contents of
  my C:/ directory appear in Window Explorer as expected.
   I then double-click on "/Program Files" and get empty
  directory listing.  Log output from ftpd shows that
  ftpd tried to get list from "/Program" which is
  non-existent.

  Debugging shows that ::ftpd::command::CWD gets passed
  /Program Files/ as the value of list, then 

  set relativepath [lindex $list 0]

  results in relative path getting the value /Program. 
  The line should be 

  set relativepath [lindex [list $list] 0]

  All the other file access sub-commands seem to handle
  $list the same way.  Perhaps a switch statement in
  ::ftpd::read which properly quotes the value of $list
  in the call to the file access sub-commands would be
  better than fixing each individual command.


tkt_uuid: 1446302fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Duplicate
title: 1.8: mime.tcl: patch for Bug 1276561 breaks date
comment:
  ---
  2005-10-04  Andreas Kupries <andreask@activestate.com>
  * mime.tcl: Applied patch for [SF Tcllib Bug 1276561]
  by Benjamin Riefenstahl. Fixes the handling of
  date/times, removing dependencies on the current locale.
  ---

  Apparently, the above changes break things badly:

  % set token [mime::initialize -canonical text/plain
  -string body]
  % lappend headers -servers 127.0.0.1
  % lappend headers -header [list From jfontain]
  % lappend headers -header [list Subject test]
  % lappend headers -header [list To jfontain]
  % eval smtp::sendmessage $token $headers

  And I get (look at the date):

  ---
  From: jfontain@host.company.com
  Content-ID: <13811.1141902264.1@host.company.com>
  Subject: test
  To: jfontain@host.company.com
  Date: Thu, 09 Oct 2006 12:06:21 +0100

  body
  ---

  Tcl is 8.4.12 on a x86_64 machine.


tkt_uuid: 3437641fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: valtype
priority: 5 Medium
foundin: None
title: new valtype function
comment:
  I prepare new valtype::iban file for validate Bank Identyficer Number. I think this is good add-ons for tcllib.


tkt_uuid: 552972ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: tree
priority: 5 Medium
foundin: None
title: Feature Req: addtl introspection methods
comment:
  I've made modifications to the struct::graph module
  that I've found useful in my own scripts.
   
  These modifications add several new submethods. 
  Introspection: keys (returns a list of keys), keyexists
  (returns 1 or 0 depending on whether a given key
  exists), and getall (returns a serialized list suitable
  for using with [array set]); and an append and lappend
  (to avoid doing a 'get/[l]append/set' manually).
   
  Patches for the tree.tcl, tree.test, and tree.n files
  are attached.  


tkt_uuid: 544453ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: base64
priority: 5 Medium
foundin: None
resolution: Fixed
title: uuencode::uudecode and Trf 2.1p1
comment:
  I have written a script that connects to an nntp 
  server and downloads a
  message body into a string which in turn  gets all 
  uuencoded attachments
  processed and written to a directory as files.

  First method I tried was opening a pipe to a uudecode 
  program that I found.

  This was fast and worked fine until people started 
  posting yenc encoded
  attachments to the newsgroup. The uudecode program 
  would crash when it
  encountered one of these.

  Second method I tried was the uuencode package that is 
  part of tcllib that
  comes with Active Tcl 8.3.4.2.

  This was a little slower and stack dumps on messages 
  that the former method
  was able to process correctly. I really liked that it 
  returned a list of
  lists that contained the filename mode and data.

  Third method I tried was to get the Trf package which 
  is used if available
  by the uuencode package.

  I can't get this method to work please help.

  My platform is Windows 2000.

  Below are two stack dumps
  The first one is with the Trf directory removed from 
  the lib directory.
  Notice that the first message body is correctly 
  processed.

  The second dump is with Trf installed
  notice that the first message body is not processed 
  and that the errors are
  different

  Note I am only doing "package require uudecode" I let 
  the uudecode package
  find the Trf package

  My function is included at the bottom it takes a 
  string (message body) as an
  argument
  -------------------------------------------------------
  -------
  downloaded message 30543
  decoded !krisp2_002.jpg

  downloaded message 30544
  invalid uuencoded string: length must be a multiple of 
  4
      while executing
  "decode [string range $line 1 end"
      ("true" arm line 7)
      invoked from within
  "switch -exact -- $state {
              false {
                  if {[regexp {^begin ([0-7]+) ([^\s]*)} 
  $line  -> opts(mode)
  opts
  (name)]} {
               ..."
      (procedure "uuencode::uudecode" line 36)
      invoked from within
  "uuencode::uudecode $message"
      (procedure "decode" line 3)
      invoked from within
  "decode [ join $Vmessage  \n ]"
      (procedure "getmessages" line 24)
      invoked from within
  "getmessages"
      (file "picker.tcl" line 59)
  -------------------------------------------------------
  -------
  downloaded message 30543
  ::uuencode: wrong # args, all options require an 
  argument
      while executing
  "::uuencode -mode decode $s"
      (procedure "decode" line 2)
      invoked from within
  "decode [string range $line 1 end"
      ("true" arm line 7)
      invoked from within
  "switch -exact -- $state {
              false {
                  if {[regexp {^begin ([0-7]+) ([^\s]*)} 
  $line  -> opts(mode)
  opts
  (name)]} {
               ..."
      (procedure "uuencode::uudecode" line 36)
      invoked from within
  "uuencode::uudecode $message"
      (procedure "decode" line 3)
      invoked from within
  "decode [ join $Vmessage  \n ]"
      (procedure "getmessages" line 24)
      invoked from within
  "getmessages"
      (file "picker.tcl" line 59)
  -------------------------------------------------------
  -

  proc decode { message } {

      set name_mode_data [uuencode::uudecode $message]

      foreach { element } $name_mode_data {

          set name [ lindex $element 0 ]

          set Vfile [ open $name w ]

          fconfigure $Vfile -translation binary

          puts -nonewline $Vfile [ lindex $element 2 ]

          close $Vfile

          puts "decoded $name\n"

          flush stdout

          }

  }


tkt_uuid: 836442ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 9 Immediate
foundin: None
resolution: Fixed
title: timeout with large data
comment:
  Hi,

    the "secs" parameter used in "smtp::talk" 
    calculated at line 849 in smtp.tcl:
      set secs [expr {(($state(size)>>10)+1)*3600}]
    for largs "state(size)" data the "secs" can become
    very big.

    Problem: 

    the command "smtp::hear" uses this parameter to
    setup an "after" event:

    if {$secs >= 0} {
              set state(afterID) [after [expr
  {$secs*1000}] \
                                        [list smtp::timer
  $token]]
          }

    the bug is in the code:

     [expr {$secs*1000}]

    the large secs become negative -> BUG
    the after get invoked and the error happen

    to fix this problem i add some code:

    ## correction, aotto 031105
      if {$secs > 600} {set secs 600}


  mfg

    aotto


tkt_uuid: 654976ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: app: tkchat
priority: 5 Medium
foundin: None
resolution: Invalid
title: Text highlighting for chat window
comment:
  Adds a menu entry called "Find" to the File menu. This
  menu invokes a UI to highlight a string of text in the
  chat window.


tkt_uuid: 601257ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Accepted
title: fix missing content boundary workaround
comment:
  In parsepart, the following code checks for end-of-
  content without a boundary marker. 

      while {$moreP} {
          if {$fileP} {
              if {$pos > $last} {
          #        error "termination string missing ...
                    set line "--$boundary--
              } else {
   
  Later tests on 'line' assume that 'x' contains [string 
  length $line].  If the above code sets line in this way, an 
  infinite loop occurs.

  Need to add
                    set x [string length $line]

  after 'set line'.

  Attached patch does this.


tkt_uuid: 511692ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Accepted
title: fix for mime.n mime::getproperty doc
comment:
  there was a formatting problem in the section of the .n
  where mime::getproperty was discussed.  The attached
  patch should fix this problem.


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: 1416815fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: textutil :: expander
priority: 5 Medium
foundin: None
resolution: Fixed
title: expander: test suite bug
comment:
  with -debug 1:

  * textutil::expander 1.3
  test name 'expander-3.3' re-used; prior use in
  /local/src/tcllib/modules/textutil/expander.test


tkt_uuid: 724822ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: struct :: graph
priority: 7 High
foundin: None
resolution: Not Applicable Here
title: graph - simply increased functionality in walk
comment:
  per http://mini.net/tcl/8787 there is some value in
  being able to override walk's behavior, and allow
  multiple visits of a node - particularly in the case
  that the graph is a DAG (where no cycles can exist)

  Moving the line graph.tcl 1884:

     set visited($node) .

  to before graph.tcl 1879 (in which the command is
  invoked) would permit the command to unset
  visited($node), and effectively override the visit-once
  semantics of walk for those cases.

  It's not exactly clean, but shouldn't change too much
  behavior, and I can't think of a better way to permit
  the desired behavior.


tkt_uuid: 486570ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: counter
priority: 5 Medium
foundin: None
resolution: Fixed
title: test suite failure
comment:
  Platform: sparc solaris 8, sun c compiler, tcl 8.4a4
  compiled with debug symbols and no threading

  This morning, after downloading,  building, and
  installing the latest tcl 8.4a4 and tcllib, I ran the
  tcllib test suite and got this error:

  hist2x 435 microseconds per iteration
  Pausing during timehist tests

  ==== counter-timehist counter::count FAILED
  ==== Contents of test case:

      counter::init hits -timehist 4
      catch {puts stderr "Pausing during timehist tests"}
      counter::count hits 2
      # We need to reach in and find out what bucket was
  used
      array set info [counter::get hits -all]
      set min0 $info(lastMinute)
      after [expr 4000]
      counter::count hits 4
      after [expr 4000]
      counter::count hits 8
      set result [list]
      foreach {n v} [counter::get hits -hist] {
          if {$v > 0} {
              lappend result [expr {$n - $min0}] $v
          }
      }
      set result

  ---- Result was:
  0 2 2 4 3 8
  ---- Result should have been (exact matching):
  0 2 1 4 2 8
  ==== counter-timehist FAILED

  timehist 291 microseconds per iteration


tkt_uuid: 911580ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Duplicate
title: clock scan error in ::mime::parsedatetime
comment:
  Due to a "clock scan" bug this mime function fails when use german 
  (and probably all other) locales.

  Error message:

  unable to convert date-time string "07 Mär 2004 19:04:52"
      while executing
  "clock scan $gmt"
      ("proper" arm line 3)
      invoked from within
  "switch -- $property {
          hour {
              set value [clock format $clock -format %H]
          }
          lmonth {
              return [clock form..."
      (procedure "::mime::parsedatetime" line ...)

  Simple work around in "proper" arm taht works for me:

          proper {
              set m [lindex {Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov 
  Dec} \
                    [clock format $clock -format "%m"]]
              set gmt [clock format $clock -format "%d $m %Y %H:%M:%S" \
                             -gmt true]
              if {[set diff [expr {($clock-[clock scan $gmt])/60}]] < 0} {
                  set s -
                  set diff [expr {-($diff)}]
              } else {
                  set s +
              }
              set zone [format %s%02d%02d $s [expr {$diff/60}] [expr 
  {$diff%60}]]

              return [clock format $clock \ 
                            -format "%a, %d %b %Y %H:%M:%S $zone"]
          }


  Best regards,
  Christoph


tkt_uuid: 439016ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: Enhancement of tabify.tcl in textutil
comment:
  The current version (tcllib0.8) of tabify and untabify does not behave as any editor
  would, which IMHO is counter-intuitive and thus limits their use.
  I wrote two new procs tabify2 / untabify2 which behave differently and some tests
  for them.

  Any comments will be appreciated
  Helmut Giese (hgiese@ratiosoft.com)


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: 472718ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: ScrollWindow update idletasks
comment:
  I have noticed that in some rare cases the "update 
  idletask" command added into 
  ScrolledWindow::_set_hscroll and 
  ScrolledWindow::_set_vscroll procs enter into a 
  infinite loop.
  I think loop borns when _set_hscroll or _set_vscroll 
  changes the displayed portions of the contained widget
  (setwidget), thus "update idletask" reach a 
  <configure> binding on the contained widget wich call 
  again _set_hscroll or _set_vscroll.
  Sorry I can't provide a source example, but I'm using 
  Bwidget embedded into a commercial app.


tkt_uuid: 839181ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: inifile
priority: 5 Medium
foundin: None
resolution: None
title: Not Found
comment:
  Are you  sure inifile is in the distribution of tcllib1.4 ? 
  Please verify, becouse all package work, bug inifile isn't 
  found.


tkt_uuid: 564670ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: Package fails to load
comment:
  The dns pacakge fails to load on the first "package require".

  It requires two "package require dns" to load; the first one fails with: 
            invalid command name "configure" 
                while executing 
            "configure -loglevel $options(loglevel)" 
                (in namespace eval "::dns" script line 17) 
                invoked from within 
            "namespace eval dns { 
                variable version 1.0 
                variable rcsid {$Id: dns.tcl,v 1.1 2002/03/02 01:37:46 patthoyts Exp $} 

                namespace export config..." 
                (file "D:/Program Files/ActiveState/Tcl/lib/tcllib1.3/dns/dns.tcl" line 29) 
                invoked from within 
            "source {D:/Program Files/ActiveState/Tcl/lib/tcllib1.3/dns/dns.tcl}" 
                ("package ifneeded" script) 
                invoked from within 
            "package require dns"


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: 2680202fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: md5
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: memory leak
comment:
  the problem is observed by repeatedly calculating the md5 sum on the files of a (preferrably well filled) directory in an interactive tcl shell and watching the mem size of the process:

  foreach n [glob DOWNLOAD/*] {md5::md5 -hex -file $n}

  Tested on openSuse 11.0, tcl 8.5.5 md5 2.0.7 (TEA version).

  Current workaround: exec md5sum works well so far.

  Test session:
  strobel@s11:~> tclsh
  % package require md5
  2.0.7
  %  exec ps -p [pid] v
    PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
   5935 pts/1    Sl+    0:00      0     3 24260  3716  0.0 tclsh
  %  foreach n [glob DOWNLOAD/*] {md5::md5 -hex -file $n}
  %  exec ps -p [pid] v
    PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
   5935 pts/1    Sl+    0:04      0     3 30104  9656  0.2 tclsh
  % foreach n [glob DOWNLOAD/*] {md5::md5 -hex -file $n}
  % exec ps -p [pid] v
    PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
   5935 pts/1    Rl+    0:08      0     3 36060 15632  0.3 tclsh
  %  foreach n [glob DOWNLOAD/*] {md5::md5 -hex -file $n}
  %  exec ps -p [pid] v
    PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
   5935 pts/1    Sl+    0:12      0     3 42136 21592  0.5 tclsh
  %


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: 1218397fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtp
priority: 8
foundin: None
resolution: Invalid
title: "Can't find package md5c" error
comment:
  While using the (slightly modified - added username and
  password switches) "send_simple_message" sample code
  from the SMTP (v1.4) module's help file, I receive the
  following error:

  Error in startup script

  can't find package md5c
  while executing
  "package require md5c"
  invoked from within
  "smtp::sendmessage $token -recipients $recipient
  -servers...

  Here's the actual 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
      smtp::sendmessage $token \
      -recipients $recipient -servers $email_server \
      -username <myusername> -password <mypassword>
      mime::finalize $token
  }

  send_simple_message <email> <myserver> \
                    "Auto Send" "This is an
  auto-generated message"

  Obviously, data between "<...>" contains real (though
  somewhat sensitive) data in my case...

  Jeff


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: 725231ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math
priority: 8
foundin: None
resolution: Fixed
title: math:statistics has scope errors
comment:
  the routines in the file liststat.tcl
  accept $expression arguments.

  These routines can only work correctly
  if [uplevel] is used to evaluate those
  $expression values.

  Currently [uplevel] is omitted and
  none of these commands works;
  does not even pass its own test
  suite.


tkt_uuid: 1634416fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: -geometry option to BWidget Dialog undocumented
comment:
  The Dialog BWidget supports a -geometry option (which works well for me). However, the documentation for that widget doesn't even mention this option.


tkt_uuid: 1249079fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: install
priority: 7 High
foundin: None
resolution: Out of Date
title: non-root install fails
comment:
  Configure as follows:

  ./configure --prefix=/home/yourname/foo

  make install

  Should install LIBs and APPs in "foo", the app dtplite
  trys to install as /usr/bin/dtplite, it should not.

  It should install as: /home/yourname/foo/bin/dtplite


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: 744391ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ntp
priority: 7 High
foundin: None
resolution: Fixed
title: empty result with FreeBSD tcp 37 time service
comment:
  The line in ::time::QueryTime of time.tcl:
  puts -nonewline $State(sock) "abcd"
  causes problems with a FreeBSD 4.7 time service. 

  Test against ntp.webpub.net to see that $State
  (data) is empty. 
  Removing that line fixes it - and I see it still works 
  without that line for the sample given, 
  ntp2a.mcc.ac.uk 
  According to rfc868, the server should respond 
  with the time upon connection.
  Is this line above, a hack to work around some 
  particular server implementation that needs to 
  receive bit of data before responding?  If so, could 
  it be changed to an option such as -prod? 


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: 477756ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tcllib: request for new module
priority: 5 Medium
foundin: None
title: multiplexer
comment:
  Multiplexing server available at
  http://people.debian.org/~davidw/

  Maybe this is better as an application?


tkt_uuid: 1164663fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ldap
priority: 7 High
foundin: None
resolution: Fixed
title: package require ldap fails
comment:
  "package require ldap" fails with 'can't create
  procedure "::asn::getInteger": unknown namespace"

  I suspect someone copy/pasted this function from the
  ASN.1 module and forgot to change the namespace in the
  proc declaration.


tkt_uuid: 681734ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: apps : tkchat
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: tkchat - logging data change
comment:
  It would be useful if /msg and /memo messages were
  logged uniquely in tkchat, so that someone could look
  through the log output if they needed to locate the
  whispers sent during an extended period of time of
  distraction from the chat.


tkt_uuid: 2928355fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftpd
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: ftp::Rename causes ftpd to crash
comment:
  Calling ftp::Rename as client causes the ftp-daemon into which I logged in to crash in proc ::ftpd::command::RNTO, because the variable sock is unknown. Including "upvar #0 ::ftpd::$sock data" - as used in the other procs - resolves the application error.


tkt_uuid: 1243991fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Works For Me
title: ListBox mouse selection bug
comment:
  % package require Tk 
  8.4
  % package require BWidget
  1.7
  % ListBox .l -selectmode single -selectfill true
  .l
  % pack .l
  % for { set i 0 } { $i < 10 } {incr i } {
  .l insert end $i -text "Element $i" }
  %.l delete 2

  If you try now to select an item below item '1' by clicking on it with 
  the mouse, the item one position below it will get selected instead.
  The problem subsists only with "-selectfill true". "-selectmode 
  single/multiple" has no influence.


tkt_uuid: 553732ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: base64
priority: 5 Medium
foundin: None
resolution: Wont Fix
title: uuencode.test warnings
comment:
  On my 64-bit Linux/Alpha machine, I see the following
  message from both uuencode-2.1 and uuencode-2.2:

  noticeinvalid uuencoded string: padding string to a
  multiple of 4.


tkt_uuid: 1502400fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: math
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: add an option to math::statistics::histogram
comment:
  Hi,
  math::statistics::histogram groups datas in intervals
  according to this logical scheme :
  [x0,x1] ]x1,x2] ]x2,x3] ... ]xn-1,xn]
  I'd like to have the possibility of grouping the other
  way ie :
  [x0,x1[ [x1,x2[ [x2,x3[ ... [xn-1,xn]
  This is actually the grouping method commonly used in
  France (at least).

  Thank you, arjen :)

  dcobac@free.fr


tkt_uuid: 449284ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 4
foundin: None
resolution: Fixed
title: Tree does not handle Space key
comment:
  On behalf of Matthias Kleine.

  > Hi,
  > 
  > while working with the BWidgets version 1.3.1, I 
  found 
  > a behaviour which should be corrected in future 
  BWidget 
  > versions. 
  > 
  > In file tree.tcl, function Tree::_keynav, the code 
  to 
  > handle the "space" event for navigation in the 
  BWidget 
  > tree lacks a call to the opencmd, when the tree is 
  opened 
  > (and to the closecmd, when the tree is closed).
  > 
  > For example, the left-arrow event call the following 
  code
  > when opening a tree node:
  > 
  > if { [set cmd [Widget::getoption $win -opencmd]] !
  = "" } {
  >                     uplevel \#0 $cmd $node
  > }
  > 
  > This leads to a call to the opencmd of the tree. 
  Without 
  > this call, we have no chance to control what is 
  happening 
  > when the user presses the space key.
  > 
  > Regards,
  > Matthias 


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: 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: 1584520fffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: A Category Is Missing
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: add option to tcllib's configure
comment:
  Using configure / make test gives a nice animated
  output to the console. If, however, these steps are
  within an integrated build environment, the resulting
  log is unusable.

  This animation stuff was introduced with tcllib 1.9 and
  made default behavior. So please add an option to be
  able to restore the old behavior.

  Appended is a patch for configure.in and Makefile.in
  which does just that. It introduces an option
  '--enable-animation' which defaults to enabled. But
  everybody can now run './configure --disable-animation'
  and 'make test' again returns just the plain test log.

  kind regards -- Matthias Kraft


tkt_uuid: 1769140fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
resolution: Fixed
title: findByPattern has problems with NFS-style basedirs
comment:
  Solaris 8
  Tcl 8.4

  If ::fileutil::findByPattern is fed a basedir in the form /net/<machine>/export/disk1/... the resulting file names have the form /export/disk1/... ie the NFS portion of the base directory has been removed.

  mark.thornber@gmail.com


tkt_uuid: 492234ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tcllib: request for new module
priority: 5 Medium
foundin: None
title: Documentation toolbox
comment:
  Enclosed a tar archive implementing a 
  module 'doctools', currently providing
  a simple tcl-nased markup for writing
  manpages and a processor for converting
  this format into TMML, HTML, and nroff.
  Other formats can be added at will.


tkt_uuid: 1220195fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: smtpd
priority: 5 Medium
foundin: None
resolution: Fixed
title: -deliverMIME option takes command not script prefix
comment:
  smtpd.tcl line 500 reads:

  set err [catch {$deliverMIME $tok} msg]

  should read:

  set err [catch {eval $deliverMIME $tok} msg]

  to be consistent with handling of -validate_* options,
  which take a script prefix and not a command.  This is
  noticable as a problem if one implements deliverMIME as
  (say) an object method.


tkt_uuid: 3613726fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: A Category Is Missing
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: rest package does not understand HTTP 303
comment:
  Hi all,

  While the rest package seems to handle HTTP codes 301/302 (and return an error with the Location header), it does not understand a 303 HTTP code,
  and throughs a plain error.

  All HTTP/1.1 clients should understand 303...


tkt_uuid: 424797ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftpd
priority: 5 Medium
foundin: None
resolution: Accepted
title: Behaviour diff cmp to Solaris ftp/ftpd
comment:
  When fetching files using the standard Solaris 2.6 ftp
  client, the "get" semantics are different using the
  ftpd server compared to using the standard Solaris ftp
  server. Consider the following example, where the
  remote file "test/file1" does not exist and the remote
  file "test/file2" does exist:
   
  $ ftp -n <<EOF
  open localhost 12344
  user someuser somepwd
  get test/file1 file1
  get test/file2 file2
  quit
  EOF

  Using the Solaris ftp server, the command above fetches
  the file "test/file2". Using the ftpd server, the
  command above does not fetch the file "test/file2".

  I'm not really sure whether this is an error in the ftp
  client shipped with Solaris or in the ftpd package,
  however the diff below seems to solve the problem.

  $ diff tcllib0.8/ftpd/ftpd.tcl ftpd.tcl ftpd_fix.tcl 
  1191c1211
  <       puts $sock "500 Copy Failed: $path\n$f"
  ---
  >       puts $sock "500 Copy Failed: $path $f"


tkt_uuid: 828717ffffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: profiler
priority: 7 High
foundin: None
resolution: Not Applicable Here
title: Enhancing the profiler
comment:
  Hallo,

  this patch refers to my posting at comp.lang.tcl
  'Enhancing tcllib profiler' and
  tries to improve the profiler. For a most explicit
  discussion of my ideas see
  there, here I give a short summary.

  - 'canonical' names using 'namespace origin' in
  TraceHandler
    and some workaround for empty info levels and
  tkInit's self deletion (ARRG).

  - api extension for tcl 8.4 to add and remove procedure
  and commands to
    profiling (::profiler::addCmd {name}
  ::profiler::removeCmd {name})

  - start and stop of arranging procs for profiling.
  (BTW, I'm still looking for
    better names for these procedures).
    
  This are the points which are still open, IMHO (changed
  to comp.lang.tcl)
  - tracking renames of commands and procedures. Well, my
  first try was not very
    successful.
  - automatic workaround for namespace import difficulties.
  - leaving the profiler completely, something like
  package forget ...
  - have a closer look on recursive function calls
  - and maybe some day one could measure the coverage, too.

  BTW, the diff I add is against profiler version 0.2.1.
  Again, if you are interested I can send the complete
  file and some tcltests.
  <frank/>


tkt_uuid: 1560822fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: blowfish
priority: 7 High
foundin: None
resolution: Fixed
title: decrypt (blowfish) doesn't always work
comment:
  set key "uP/AD/oGb6q/"
  set text "ececho clear"
  set foo [::blowfish::blowfish -mode ecb -dir encrypt
  -key $key $text]

  And when I am trying to decrypt that:

  ::blowfish::blowfish -mode ecb -dir decrypt -key $key $foo

  Error:

  ": must be one of -chunksize, -dir, -hex, -in, -iv,
  -key, -mode, -out
      while executing
  "::blowfish::blowfish -mode ecb -dir decrypt -key $key
  $foo"


tkt_uuid: 719616ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: None
priority: 8
foundin: None
resolution: Fixed
title: alter install.tcl to support re-installs
comment:
  Index: install.tcl
  =========================================
  ==========================
  RCS file: /cvsroot/tcllib/tcllib/install.tcl,v
  retrieving revision 1.2
  diff -w -b -r1.2 install.tcl
  18c18
  <             file copy $file $sub
  ---
  >             file copy -force -- $file $sub

  30c30
  < file copy pkgIndex.tcl $installdir
  ---
  > file copy -force -- pkgIndex.tcl $installdir


tkt_uuid: 611477ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: ProgressDlg bug
comment:
  I wrote the following simple test program (test.tcl)

  package require BWidget
  set pb [ProgressDlg .pb]
   
  $pb configure -bg red
   
  But when I try to run it I get an error message. It seems 
  to be impossible to execute the last command, because 
  the interpeter doesn't find the command .pb.
  See attached file for error description.


tkt_uuid: 2912295fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Documentation
priority: 5 Medium
foundin: None
resolution: Fixed
title: random(n) manpage needs to be renamed
comment:
  simulation::random has a manpage random(n) which has a naming collision w/ the memchan projects random(n) manpage. As discussed in #tcl with Andreas, error is in tcllib.


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: 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: 520279ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Accepted
title: New package - dns lookups in Tcl
comment:
  I have produced a dns package to permit Tcl-only Domain
  Name Service lookups using the usual fileevent
  framework to allow for timeouts and asynchronous
  network transmission. This is modelled on the http package.

  Also extends the uri package to support the dns URI
  scheme. This code should probably end up in the uri
  package later on.

  For example:
   set tok [dns::resolve www.google.com]
   dns::address $tok
   dns::cleanup $tok

   dns::resolve "dns:tcl.tk;type=MX" -command handler

  No tests but there is a .man page.


tkt_uuid: 627521ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: app: tkchat
priority: 5 Medium
foundin: None
resolution: Accepted
title: patch to searching the chat history
comment:
  This patch adds two commands /? and /! to start
  searching and cancel searching for a search string:

  /?pascal

  will search for the regular expression 'pascal' and
  mark it orange (by default). 

  /? 

  Will search again for the last expression and mark the
  next one found.

  /! will clear all markers and jump the widget back to
  [.txt see end]

  I've also added the color to the color preferences, so
  you can customize the color.


tkt_uuid: 1076400fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: html
priority: 5 Medium
foundin: None
resolution: Fixed
title: html lib doesn't seem to support DOCTYPE tag
comment:
  the html library doesn't seem to support the DOCTYPE 
  directive that should be present at the beginning of an 
  HTML document to be W3C HTML 4.* compliant.

  A suggested solution would be the addition of 
  an ::html::doctype command that would take the doc 
  type arguments e.g:

  ::html::doctype {HTML PUBLIC "-//W3C//DTD HTML 4.0 
  Transitional//EN"}

  This would cause the appropriate code be generated 
  when ::html::head is called, etc.


tkt_uuid: 1631379fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Works For Me
title: ComboBox pulldown appears on wrong screen
comment:
  This occurs when using a MacBook with osx 10.4.8, ActiveTcl 8.4.14 including BWidget 1.8. The ComboBox works OK if the app is on the notebook's own screen, but if it is on the external screen, when you click the pulldown arrow the entry list appears briefly on the left of that screen then jumps to the internal screen. Also it has the decorations, which probably shouldn't be there.


tkt_uuid: 763712ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Accepted
title: add optional charset decode to mime::getbody
comment:
  when calling mime::getbody, the body returned is still in
  the charset as specified in the Content-Type, it seems to
  me that it would be good if it could be decoded using 
  ::encoding convertfrom before being returned. As doing this 
  automatically will probably break existing scripts I have 
  added a -decode switch to getbody that when specified 
  causes the charset to be decoded.

  I've attached a patch that does this and some tests to test it. 
  I'd strongly suggest adding my patch submission #758742, 
  "charset mapencoding improvements" at the same time.

  Matthew


tkt_uuid: 1422793fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: tklib: ipentry
priority: 5 Medium
foundin: None
resolution: Accepted
title: adds -textvariable to ipentry widget
comment:
  Supports -textvariable option to ipentry widget, taking
  either array or non array variable names.  Tries to
  mimic functionality of entry widget -textvariable as
  much as possible.  Will auto-correct most invalid IP
  addresses.

  Patch include version bump to 0.2 and addition to
  manual page.


tkt_uuid: 2818958fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: linearalgebra
priority: 5 Medium
foundin: None
resolution: Fixed
title: sizing of vectors
comment:
  I was working (on http://rosettacode.org/wiki/Multiple_Regression#Tcl) with a collection of vectors which were both row-vectors and column-vectors (one being a transposition of the other) and I was trying to multiply them together to get a matrix. This was causing errors; apparently the 'shape' command from this package goes completely to pieces when faced with a list of length 1 (making everything else in the package fail miserably too).

  A scalar must be a 1x1 matrix. A vector must be a 1xN or Nx1 matrix. If these aren't true, many innocent algorithms die in a fire (and Carl Friedrich Gauss kills a kitten).


tkt_uuid: 449521ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: control
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Add waitForAny to control module
comment:
  Here is a new package for your consideration: control.  I would be happy with a different name, 
  but this is how it was originally named on the Wiki.

  For now, it contains only one method: waitForAny, which implements a [vwait] for multiple 
  variables.  It has been significantly enhanced over the version in the Wiki, in that it now returns a 
  list of the tokens waited for which have now changed, or "timeout" if a timeout occurs.  With this, 
  you can build a robust queue of multiple outstanding asynchronous events, e.g. http or SOAP 
  commands.

  If you consider this a worthy package, but lacking in an area or two, let me know and I'll be happy 
  to work on it further.  Here are some ideas for enhancement:

   * replace "magical" timeout value recognition with switch, e.g. '-timeout xxx'
   * add try_catch_finally.  I have seen and used the "trycatch" package, but I believe it is more 
  complicated than it needs to be.  The Wiki has a good one that we could use here.  When I need 
  it, I'll probably add it.

  Regards,
  Ken Cox


tkt_uuid: 1105010fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: html
priority: 1 Zero
foundin: None
resolution: Fixed
title: Font properties are printed twice
comment:
  In my tests with Tcllib 1.6:

  % ::html::font size="18"

  <font size="18"size="18">

  I inspected the source and found this in line 1183:

  ::set param [tagParam font [join $args]][join $args]

  [join $args] is called twice for some reason. I guess that is what causes the bug.

  The source of Tcllib 1.7 looks just the same.

  Luciano ES


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: 1193023fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: smtp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: smtp can have no originator/from
comment:
  Consider this code:

  -----------------------------
          # If no -originator was provided, get the
  originator from the "From"
          # header.  If there was no "From" header get it
  from the username
          # executing the script.

          set who "-originator"
          if {$originator == ""} {
              if {![info exists header($fromL)]} {
                  set originator $::tcl_platform(user)
              } else {
                  set originator [join $header($fromL) ,]

                  # Indicate that we're using the From
  header for the originator.

                  set who $fromM
              }
          }
          
  # If there's no "From" header, create a From header
  with the value
  # of -originator as the value.

          if {[lsearch -exact $lowerL $fromL] < 0} {
              lappend lowerL $fromL
              lappend mixedL $fromM
              lappend header($fromL) $originator
          }

  # ::mime::parseaddress returns a list whose elements
  are huge key-value
  # lists with info about the addresses.  In this case,
  we only want one
  # originator, so we want the length of the main list
  to be 1.

          set addrs [::mime::parseaddress $originator]
          if {[llength $addrs] > 1} {
              error "too many mailboxes in $who: $originator"
          }
          array set aprops [lindex $addrs 0]
          if {$aprops(error) != ""} {
              error "error in $who: $aprops(error)"
          }
  -----------------------------

  It is entirely possible that there is no originator,
  because tcl_platform(user) can be empty.  In that case,
  the above code will fail if no -originator is provided
  because aprops(error) will be empty.


tkt_uuid: 479935ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: MainFrame font configuration added
comment:
  Motivation:
  There is currently no way to set the menu and status
  bar fonts (sometimes needed for e.g. visually impaired)
  for the MainFrame widget.

  Remedy:
  This patch adds code to support options: -menubarfont,
  -menuentryfont and -statusbarfont at creation time of
  the widget as well as subsequent configures.

  Compatibility:
  The code extends the MainFrame configurability and does
  not interfere with older version usage.

  Bugs:
  None known so far. Documentation of these features must
  be included in the doc if accepted.

  Patch:
  The attached file contains a contextual diff and the
  complete new mainframe.tcl. BEWARE: the diff is based
  on my personal version of mainframe.tcl that already
  contains another patch (SF #470273: BWidget: MainFrame
  menu inconsistency), the new mainframe.tcl has it also
  incorporated.


tkt_uuid: 3425269fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tepam
priority: 5 Medium
foundin: None
resolution: Fixed
title: Errors in tepam demo when TkCon not present
comment:
  The tepam demo will generate an error when TkCon isn't present, due to an uninitialized variable.
  Another error will be generated because the variable "tcl_platform" is not scoped properly.
  Attached patch also applies the same "prologue" as used in all the other examples.


tkt_uuid: 688696ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: None
title: Memory Leak in tkchat
comment:
  There is a memory leak in tkchat; it does not clean up 
  unused URL-* tags anywhere.  This doesn't matter too 
  much in the main window, where URLs are fairly 
  uncommon, but the users-online window at the side is 
  filled with URLs and it gets refreshed (with completely 
  new URL-* tags) each time.  And yet none of the old 
  tags are ever deleted, resulting in the accumulation of 
  several thousand dead tags an hour!  This is not good.  
  Not good at all!

  A possible fix for this is to add the following code to the 
  procedure updateNames immediately after the line that 
  deletes the old content of the .names widget:
    foreach tagname [.names tag names] {
       if {[string match URL-* $tagname]} {
          .names tag delete $tagname
       }
    }

  Please fix this ASAP, as it is a serious leak for anyone 
  using Tkchat for longer than an hour or two (as seems 
  to be fairly common.)


tkt_uuid: 1903306fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: tklib :: plotchart
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: xyplot xconfig / yconfig -scale not working
comment:
  Using the xconfig or yconfig command with the -scale option results in an "Unknown or invalid value" error.

  Script showing problem:

  package require Tk
  package require Plotchart

  canvas .c
  pack .c

  set s [Plotchart::createXYPlot .c {0 100 10} {0 100 10}]
  $s xconfig -scale {0 200 20}


  The problem is in Plotchart::AxisConfig, in the file plotaxis.tcl around line 492.  The "idx" value is the index into a list with a single value per option, and it is used to index into the axis_option_values which has two values per option.  One possible fix is to multiply the idx by 2 before using it on the axis_option_values.

    set clear   [lindex  $axis_option_clear  $idx]
  >>  set idx [expr {2 * $idx}]
    set values  [lindex  $axis_option_values [incr idx]]


  Also, in the plotaxis.tcl file there is "console show" and "puts" command in the Plotchart::DrawXaxis routine which seem out of place.

  Thanks,
  -paul


tkt_uuid: 3599839fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
resolution: Duplicate
title: fileutil::findByPattern dies when encountering link on Win 7
comment:
  This has already been reported for Windows XP but since the defect is 3 yrs old and the fix is included in the prior defect report and I can find no way to update the comments section I am entering a new defect to "up" the visibility of this bug. 


tkt_uuid: 1540192fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: comm
priority: 7 High
foundin: None
title: RFE: add comm::comm alias subcmd (similar to interp alias)
comment:
  Hi,

  The comm package should support an alias sub-command
  which behaves similar to [interp alias] command with
  the main difference that the aliased commands get
  invoked on the remote process. 

  Here's an example of how to acheive the same using a
  wrapper proc:

  set rmt_id [getRemoteCommId]
  set lcl_id [comm::comm selfid]

  proc commAlias {lcl_id lcl_proc rmt_id rmt_proc args} {
      # Create a local proc which will invoke the remote
      # proc via comm::comm send and return its results
      proc $lcl_proc args "uplevel 1 [list \
          comm::comm send $rmt_id $rmt_proc \
                          $args \$args]"
  }

  # Create an alias for the proc foo.
  # Also pass $lcl_id as an argument so that the 
  # remote proc knows where the request is coming from
  commAlias $lcl_id foo $rmt_id foo $lcl_id

  A "comm::comm alias" sub-command would make the above
  setup very easy.

  Thanks,
  Hemang.


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: 2807227fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: ScrollableFrame issues
comment:
  There are some problems with ScrollableFrame. The following code demonstrates them:

  pack [panedwindow .pw -orient vertical] -fill both -expand 1
  .pw add [set f [frame .pw.f -relief sunken -bd 1]] -minsize 30
  .pw add [set d [frame .pw.d -relief sunken -bd 1]] -minsize 30

  grid\
      [ScrollableFrame $f.sf -height 300 -yscrollcommand [list $f.yscroll set]]\
      [scrollbar $f.yscroll -orient vertical -command [list $f.sf yview]]\
      -sticky news
  grid rowconfigure $f 0 -weight 1
  grid columnconfigure $f 0 -weight 1

  set g [$f.sf getframe]

  update

  pack\
      [button $g.a -text A -command [list destroy $g.a]]\
      [button $g.b -text B -command [list destroy $g.a $g.b]]\
      [button $g.c -text C -command [list destroy $g.a $g.b $g.c]]\
      [button $g.d -text D -command [list destroy $g.a $g.b $g.c $g.d]]\
      [button $g.e -text E -command [list destroy $g.a $g.b $g.c $g.d $g.e]]\
      [button $g.f -text F -command [list destroy $g.a $g.b $g.c $g.d $g.e $g.f]]

  Now resize the panes of the panedwindow with the mouse (just a little bit). You will see that the scrollbar becomes active even though there is no reason (yet) for it.

  A second issue can be triggered by resizing the upper pane until just 2 or 3 of the buttons are still visible. Next, move the scrollbar down such that the last buttons (E and F) are visible. Now click the E button. You will see that the ScrollableFrame misbehaves.

  The attached patch solves these issues.


tkt_uuid: 2182378fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: nameserv (aka nns)
priority: 5 Medium
foundin: None
resolution: Fixed
title: Running nameserv::search results in no such variable error.
comment:
  Running nameserv::search with no arguments results in no such variable error.  The "0" condition of the switch in ::nameserv::search-parseargs does not set oneshot.

  nameserv::search
  can't read "oneshot": no such variable
      while executing
  "list oneshot $oneshot continuous $continuous pattern $pattern"
      (procedure "search-parseargs" line 46)
      invoked from within
  "search-parseargs $args"
      (procedure "nameserv::search" line 9)
      invoked from within
  "nameserv::search"
      (file "client.tcl" line 9)


tkt_uuid: 1377945fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: Incorrect version number
comment:
  The configure.in script for bwidget-1.7.0 has this line:

  MINOR_VERSION=6

  This should really be:

  MINOR_VERSION=7

  As it is now the installed files get put into a
  directory named /usr/lib/bwidget1.6 when it should be
  bwidget 1.7


tkt_uuid: 861287ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: htmlparse
priority: 5 Medium
foundin: None
resolution: Fixed
title: htmlparse: comment delimiters
comment:
  htmlparse::parse doesn't parse comments correctly.
  One example:

  htmlparse::parse "<pre>&lt;-- a comment --></pre>"

  The closing delimiter "-->" gets turned into \01, and
  never gets turned back.  (This is legal HTML BTW, found
  in the wild).

  It also fails to recognize comments if there is a space
  between the final COM (--) and MDC (>) delimiters.


tkt_uuid: 2024843fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: special
priority: 5 Medium
foundin: None
resolution: None
title: erf is not accurate
comment:
  Problem description
  ====================

  For erf(1)
  Tcl gives 0.842638529766, while gcc 0.84270079294971

  Reproduction
  ============

  > package require math
  1.2.2
  > package require math::special
  0.1
  > ::math::special::erf 1
  0.842638529766
  ===========================================
  gcc --version
  gcc (GCC) 3.4.2
  Copyright (C) 2004 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  >cat <<EOF >erf.c
  ? #include <stdio.h>
  ? #include <stdlib.h>
  ? #include <math.h>
  ? int main(int argc, char**argv) {
  ?    printf("%16.14lf\n", erf(atof(argv[1])));
  ?    return 0;
  ? }
  ? EOF
  >gcc -o erf erf.c -lm ; erf 1
  0.84270079294971


tkt_uuid: 526835ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 8
foundin: None
resolution: Fixed
title: install.bat not quite satisfactory
comment:
  install.bat to install tcllib on Windows platforms may
  fail for two reasons:
  - The TCLINSTALL variable is set to the wrong directory
  - the user is 
     supposed to set this variable him/herself by editing
  the batch file prior
     to installation.
  - The TCLINSTALL variable may be not be set correctly
  due to problems
     with the environment space. This means that the
  files will be copied into
     an arbitrary directory \lib\tcllib1.2, rather than
  under the proper subdirectory 
     of the installation.

  A solution might be: use %1 instead of %TCLINSTALL.
  Checking that this
  first argument is not empty is easy and gives the batch
  file the opportunity to notify the user:

      if /%1 == / goto :message
      rem Install the stuff
      ...

      goto :end

      :message 
      echo Usage: install <tcl-directory>
      pause 
      :end
   


tkt_uuid: 1740574fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: javascript
priority: 5 Medium
foundin: None
resolution: Fixed
title: typographical errors in javascript package
comment:
  The documentation for the tcllib javacript package has three instances of "it's" where "its" is meant.

  ::javascript::makeMasterButton master value slavePattern boolean
      Create an HTML button that sets it's slave ....
  ::javascript::makeParentCheckbox parentName childName
      Create an HTML checkbox and tie its value to that of it's child checkbox....
  ::javascript::makeChildCheckbox parentName childName
      Create an HTML checkbox and tie its value to that of it's parent checkbox....

  Curiously, some of the "its" are right.


tkt_uuid: 1165534fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Out of Date
title: Listbox bug, a non-stop loop cause the shaking of the widge
comment:
  Following is a test code, please run it and your will
  see a ScrolledWindow shaking. 

  Before you run it, please make sure that "CP: 555  *
  AAA-I am shaking wildly 10mm dia:  59.5 mm" is in a
  single line. The length of the list item name really
  matters.

  ######### test code starts ######################
  set bwidget_path *YOUR BWIDGET PATH HERE*
  lappend auto_path $bwidget_path
  package require BWidget
                                                        
                           
  toplevel  .shaking
                                                        
                           
  set f [frame .shaking.butF]
                                                        
                           
  set sw [ScrolledWindow $f.sw -auto both\
              -relief sunken -borderwidth 2]
                                                        
                           
  set marksList [ListBox $f.lb -relief flat -borderwidth 0 \
                  -padx 0 -height 8 -width 40 -bg white]
                                                        
                           
  $sw setwidget $marksList
                                                        
                           
  grid $sw -row 0 -column 0 -columnspan 6 -pady 0 -padx 2m
                                                        
                           
  $marksList insert end 1 -text "1"
  $marksList insert end 2 -text "2"
  $marksList insert end 3 -text "3"
  $marksList insert end 4 -text "CP: 555  * AAA-I am
  shaking wildly 10mm dia:  59.5 mm"
  # make sure that "CP: 555  * AAA-I am shaking wildly
  10mm dia:  59.5 mm" is a single line
  $marksList insert end 5 -text "5"
  $marksList insert end 6 -text "6"
  $marksList insert end 7 -text "7"
  $marksList insert end 8 -text "8"
                                                        
                           
  pack $f       
  #### test code ends #################################

  #### test environment ################################
  If you run it by wish8.3, no problme at all, 
  if you run it by wish8.4, you got  a shaking widget.

  My testing environment:
        1. Redhat Linux  2.4.21-9.ELsmp
        2. BWidget-1.7.0, tcl 8.4, and tk 8.4
        3. Default font

  #### Code analysis ##################################
  Bwidget induces an endless loop through a "bind" command.
  (In Bwidget-1.7.0),
  In line 105 of listbox.tcl:
    bind ListBox <Configure> [list ListBox::_resize  %W]

  In proc ListBox::_resize, line 1139 of listbox.tcl:
  it call _update_scrollregion :

      } else {
          if {[Widget::cget $path -selectfill]} {
              _update_select_fill $path
          }
          _update_scrollregion $path # this line triggers
  an endless loop
      }

  In proc ListBox::_update_scrollregion, line 918 of
  listbox.tcl
    it call $path.c configure -scrollregion [list 0 0 $w $h] 
    This triggers ListBox <Configure> event and call
  _resize again, forming a loop.

  If you put in "puts " commands in _resize and
  _update_scrollregion
  you will see _resize and _update_scrollregion called
  alternatively
   
  Removing line 1139, "_update_scrollregion $path",
  dismantles the shaking. 


tkt_uuid: 1295737fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Installer
priority: 5 Medium
foundin: None
resolution: Out of Date
title: installer - apps on windows .tcl
comment:
  When installing the applications on Windows they should
  be given the extension .tcl, to associate them with the
  installed tclsh/wish.


tkt_uuid: 1720898fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Build System & Testing
priority: 5 Medium
foundin: None
resolution: Invalid
title: test suite problem?
comment:
  I was running the cvs head tcllib test suite against a cvs head tcl 8.5a6. A number of tests failed (which didn't surprise me). What did surprise me,however, is that there were times when the test suite output went from the "one line per module" mode into a "one line per test" mode. Here's an example:
  [  * ]  [8.5a6] profiler    ---- profiler::leaveHandler::initialize_descendent_t[  * ]  [8.5a6] profiler    PASS profiler::leaveHandler::initialize_descendent_t[  * ]  [8.5a6] profiler    ---- profiler::leaveHandler::increment_descendent_ti[   *]  [8.5a6] profiler    PASS profiler::leaveHandler::increment_descendent_ti[   *]  [8.5a6] profiler    ---- profiler-4.1                                   [   *]  [8.5a6] profiler    PASS profiler-4.1                                   [   *]  [8.5a6] profiler    ---- profiler-5.1                                   [   *]  [8.5a6] profiler    PASS profiler-5.1                                   [  * ]  [8.5a6] profiler    ---- profiler-6.1                                   [  * ]  [8.5a6] profiler    PASS profiler-6.1                                   [  * ]  [8.5a6] profiler    ---- profiler-7.1                                   [  * ]  [8.5a6] profiler    PASS profiler-7.1                                   [  * ]  [8.5a6] profiler    SKIP profiler-7.2                                   [ *  ]  [8.5a6] profiler    ---- profiler-7.2-85                                [ *  ]  [8.5a6] profiler    PASS profiler-7.2-85                                [ *  ]  [8.5a6] profiler    ---- profiler-7.3                                   [ *  ]  [8.5a6] profiler    PASS profiler-7.3                                   [ *  ]  [8.5a6] profiler    ---- profiler-7.4                                   [*   ]  [8.5a6] profiler    PASS profiler-7.4                                   [*   ]  [8.5a6] profiler    ---- profiler-7.5                                   [*   ]  [8.5a6] profiler    PASS profiler-7.5                                   [*   ]  [8.5a6] profiler    ---- profiler-8.1                                   [*   ]  [8.5a6] profiler    PASS profiler-8.1                                   [ *  ]  [8.5a6] profiler    ---- profiler-8.2 
  [ *  ]  [8.5a6] profiler    PASS profiler-8.2                                   [ *  ]  [8.5a6] profiler    ---- profiler-9.1                                   [ *  ]  [8.5a6] profiler    PASS profiler-9.1                                   [    ]  [8.5a6] profiler    ~~       T    21 P    15 S     6 F     0               


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: 1260196fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: ip
priority: 9 Immediate
foundin: None
resolution: Accepted
title: ip: various procs for ip package
comment:
  a review is requested for various additional procs for
  the tcllib ip package.

  tar.gz file contains tcl code, embedded doc, and
  optional C extension code

  html file contains html view of documentation
  man file contains a manpage style view of documentation


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: 744276ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: ftp::Get of a nonexistent file
comment:
  I'm using ftp 2.4, and mandrake linux 9.1

  This occurs when ftp::VERBOSE and ftp::DEBUG are both 0.

  Open a connection in passive mode, try to get a
  nonexistent file, and it will hang with tclkit
  200303.001, tkcon, and tclsh 8.3.3

  When ftp::VERBOSE and ftp::DEBUG are turned on, no
  problems occur.

  % package require ftp 2.4
  2.4
  % ftp::Open $server $name $pass -mode passive
  0
  % ftp::Get 0 nonexistent_file
  can't unset "ftp(state.data)": no such element in array
      while executing
  "unset ftp(state.data)"
      ("default" arm line 4)
      invoked from within
  "switch -exact -- $rc {
                  1 {
                      set ftp(State) get_close
                  }
                  default {
                    ..."
      ("get_sent" arm line 2)
      invoked from within
  "switch -exact -- $ftp(State) {
          user {
              switch -exact -- $rc {
                  2 {
                      PutsCtrlSock $s "USER $ftp(U..."
      (procedure "::ftp::StateHandler" line 71)
      invoked from within
  "::ftp::StateHandler 0 sock4"
  error     error | E: Timeout of control connection
  after 600 sec.!
  debug      | 0 bytes sent in 600 seconds (0 Bytes/s)
  1
  %


tkt_uuid: 2037560fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: inifile
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: support keys with no = sign
comment:
  imagine a ini file where you might have 
  [section]
  key

  missing the "= value" part or simply "=" to specify no value for that key

  support for this could be quite useful at times, and also not to hard to implement


tkt_uuid: 932029ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Cannot have space in pathname of combobox (FIX SUPPLIED)
comment:
  An error occurs if you try to create a combobox with a
  space in its pathname

  Here are the changes I made to get it working, please
  patch the next release, they look fairly harmless...

  $ diff BWidget-1.7.0/entry.tcl entry.tcl
  140c140
  <       "return \[Entry::_path_command $path \$cmd
  \$args\]"
  ---
  >       "return \[Entry::_path_command [list $path]
  \$cmd \$args\]"
  159c159
  <     foreach $vars [eval Widget::hasChangedX $path
  $opts] { break }
  ---
  >     foreach $vars [eval {Widget::hasChangedX $path}
  $opts] { break }
  $ diff BWidget-1.7.0/arrow.tcl arrow.tcl
  90c90
  <     eval canvas $path.c $submaps(.c)
  ---
  >     eval {canvas $path.c} $submaps(.c)

  Cheers


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: 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: 446584ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 1 Zero
foundin: None
resolution: Fixed
title: Missing documentation
comment:
  The modules "cmdline", "base64", "fileutil" and "ftp" 
  neither have manpages nor other documentation.

  The modules "mime" and "smtp" have no manpages, but 
  HTML based documentation.


tkt_uuid: 1191573fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: None
title: popup window (/msg) handling error
comment:
  I've /msg'd someone without a new popup window coming
  up. That someone then replied, generating the following:

  can't read "ChatWindows(counter)": no such element in array
  can't read "ChatWindows(counter)": no such element in array
      (reading value of variable to increment)
      invoked from within
  "incr ChatWindows(counter)"
      ("tabbed" arm line 2)
      invoked from within
  "switch $Options(OneToOne) {
      tabbed -
      popup {
          set ChatWindows(toplevel.$jid) [toplevel
  .chat[incr ChatWindows(counter)
          set ChatWindows(ti..."
      (procedure "getChatWidget" line 33)
      invoked from within
  "getChatWidget $m(-from) $name"
      ("chat" arm line 7)
      invoked from within
  "switch -- $type {
      chat {
          set from $m(-from)
          set w .txt
          set name $from
              if { [regexp {([^/]+)/(.+)} $m(-from) ->
  conf name]..."
      (procedure "::tkjabber::MsgCB" line 42)
      invoked from within
  "::tkjabber::MsgCB ::jlib::jlib2 chat -from
  tcl@tach.tclers.tk/GPS -xmlns jabber
      ("uplevel" body line 1)
      invoked from within
  "uplevel #0 $opts(-messagecommand) [list $jlibname
  $type] $arglist"
      (procedure "message_handler" line 64)
      invoked from within
  "message_handler $jlibname $xmldata     "
      ("message" arm line 2)
      invoked from within
  "switch -- $tag {
      iq {
          iq_handler $jlibname $xmldata
      }
      message {
          message_handler $jlibname $xmldata
      }
      presence {
          presence_hand..."
      (procedure "::jlib::dispatcher" line 8)
      invoked from within
  "::jlib::dispatcher ::jlib::jlib2 {message {from
  tcl@tach.tclers.tk/GPS type cha
      ("uplevel" body line 1)
      invoked from within
  "uplevel #0 "$wrapper($id,parsecmd) [list
  $wrapper($id,tree,2)]""
      (procedure "::wrapper::elementend" line 39)
      invoked from within
  "::wrapper::elementend wrap1 message -namespace
  urn:tkchat:chat"
      ("uplevel" body line 1)
      invoked from within
  "uplevel #0 $options(-elementendcommand) [list $tag]
  $empty $ns"
      invoked from within
  "ParseEvent:ElementClose $tag [array get options]"
      invoked from within
  "::sgml::parseEvent {{} {} {} {} message {} {
  xmlns='jabber:client' to='msw@all.
      ("eval" body line 1)
      invoked from within
  "eval ::sgml::parseEvent [list $tokenised] $parseOptions"
      (procedure "parse" line 60)
      invoked from within
  "parse xmlparser2 {<message xmlns='jabber:client'
  to='msw@all.tclers.tk/tkchat'
      (in namespace inscope "::xml::tclparser" script line 1)
      invoked from within
  "::namespace inscope ::xml::tclparser parse xmlparser2
  {<message xmlns='jabber:c
      ("eval" body line 1)              
      invoked from within
  "eval $classinfo(-parsecommand) [list $name] $args"
      ("parse" arm line 5)
      invoked from within
  "switch -- $method {

      configure {
          # BUG: We're not checking for legal options
          array set data $args
          eval $classinfo(-configurecommand) [..."
      (procedure "::xml::ParserCmd" line 7)
      invoked from within
  "::xml::ParserCmd xmlparser2 parse {<message
  xmlns='jabber:client' to='msw@all.t
      ("eval" body line 1)
      invoked from within
  "eval ::xml::ParserCmd xmlparser2 [list $method] $args"
      (procedure "xmlparser2" line 1)
      invoked from within
  "$p parse $xml"
      (procedure "parsereentrant" line 9)
      invoked from within
  "parsereentrant $parser $xml"
      (procedure "wrapper::parse" line 7)
      invoked from within
  "wrapper::parse $lib(wrap) $temp"
      (procedure "::jlib::recvsocket" line 22)
      invoked from within
  "::jlib::recvsocket ::jlib::jlib2"

  Don't have the time right now to track this further.


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: 2255355fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: crosshair
priority: 5 Medium
foundin: None
resolution: Fixed
title: documentation error in crosshairs module causes install fail
comment:
  In trying to build the tklib cvs head from 2008 Nov 04 against Tcl 8.6 cvs head, I get this error:

  Generating /projects/sprs_lwv/tcl86/man/mann/crosshair.n
  Doctools Error in reading macro at line 14, column 4:
  []
  --> Unexpected EOF in macro:
  [package crosshair[ package provides com...

      while executing
  "::doctools::_format dt {[comment {-*- tcl -*- doctools manpage}]
  [manpage_begin crosshair n 1.0]
  [copyright {2003 Kevin Kenny}]
  [copyright {2008 (docs..."
      ("eval" body line 1)
      invoked from within
  "eval [list ::doctools::_$cmd $name] $args"
      (procedure "::doctools::DoctoolsProc" line 15)
      invoked from within


  This looks, to me, like someone coded 
  [package crosshair[
  instead of
  [package crosshair]

  When I fix that error, and try again, I then get this error:

  Generating /projects/sprs_lwv/tcl86/man/mann/crosshair.n
  Doctools Error in macro at line 69, column 66:
  [arg
  cmdprefix]
  --> wrong # args: should be "arg text"
      while executing
  "::doctools::_format dt {[comment {-*- tcl -*- doctools manpage}]
  [manpage_begin crosshair n 1.0]
  [copyright {2003 Kevin Kenny}]
  [copyright {2008 (docs..."
      ("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 crosshair nroff n /projects/sprs_lwv/tcl86/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 485)
  gmake: *** [install] Error 1


  At line 69 and 70, it appears that the formatting line was split in the middle rather than appear on one line.

  After fixing that, the next error to appear was on line 73, where this is the error:
  Generating /projects/sprs_lwv/tcl86/man/mann/crosshair.n
  Doctools Error in macro at line 73, column 0:
  [list_begin]
  --> wrong # args: should be "list_begin what ?hint?"
      while executing
  "::doctools::_format dt {[comment {-*- tcl -*- doctools manpage}]
  [manpage_begin crosshair n 1.0]
  [copyright {2003 Kevin Kenny}]
  [copyright {2008 (docs..."
      ("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 crosshair nroff n /projects/sprs_lwv/tcl86/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 485)
  gmake: *** [install] Error 1

  I don't know what kind of an argument is needed for list_begin, so that's as far as I got in debugging the problem.


tkt_uuid: 2418580fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: log
priority: 5 Medium
foundin: None
resolution: Fixed
title: log debug level is suppressed by default
comment:
  If you do a "package require log" then "log::lvIsSuppressed debug" the command returns a 1.  All the other levels return 0.  I placed a puts statement in the eval portion of log.tcl after the suppressed array is created and debug is set to 0 but once the package finished initializing it is a one. 
  I was able to duplicate this in tcl version 8.3 on HP-UX and with activestates windows install of 8.5.2.

  I found this while trying to turn on the verbose switch in the ftp package.  I ended up having to execute "::log::lvSuppress debug 0" before executing any ftp command to get the ftp package to print anything out.

  Thanks,

  John Mercogliano


tkt_uuid: 1511333fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tar
priority: 5 Medium
foundin: None
resolution: None
title: tar: error in option handling
comment:
  tar package does not work if using options due to a bug
  in proc ::tar::parseOpts.
  e.g. ::tar::untar archive.tar -file somefile

  The following diff does show this:
  +++++++++++++++++++++++++++++++++++
  26c26
  <             set flags [lrange $opts [expr {$i + 1}]
  [expr {$i + $flags($name)}]]
  ---
  >             set $name [lrange $opts [expr {$i + 1}]
  [expr {$i + $flags($name)}]]
  +++++++++++++++++++++++++++++++++++
  Or shorter: replace 'flags' by '$name' in line 26.

  I think this was present already in 1.7

  BTW: there's a wonderfull cmdline package, why not
  using this?

  Bye,
  Gerhard Reithofer


tkt_uuid: 596000ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: html
priority: 5 Medium
foundin: None
resolution: Fixed
title: html display depends on ncgi
comment:
  The html display function needs the ncgi package from
  tcllib, but this isn't properly package required.

  Solution:

  Add [package require ncgi] to counter.

  Michael Schlenker


tkt_uuid: 447037ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 3 Low
foundin: None
resolution: Fixed
title: mime::qp_encode failures (64 bit?)
comment:
  On an Alpha XL-300 (64-bit platform) some of
  the mime tests fail:

  % source mime.test              

  ==== mime-4.4 Test qp_encode with non-US_ASCCI
  characters. FAILED
  ==== Contents of test case:

      set str1 "Test de caractères accentués : â î é ç et
  quelques contrôles \"\[|\]()\""
      mime::qp_encode $str1

  ---- Result was:
  Test de caract=FFres accentu=FFs : =FF =FF =FF =FF et
  quelques contr=FFle=
  s =22=5B=7C=5D()=22
  ---- Result should have been:
  Test de caract=E8res accentu=E9s : =E2 =EE =E9 =E7 et
  quelques contr=F4le=
  s =22=5B=7C=5D()=22
  ==== mime-4.4 FAILED


  ==== mime-5.1 Test word_encode with quoted-printable
  method FAILED
  ==== Contents of test case:

      mime::word_encode iso8859-1 quoted-printable "Test
  de contrôle effectué"

  ---- Result was:
  =?ISO-8859-1?Q?Test_de_contr=FFle_effectu=FF?=
  ---- Result should have been:
  =?ISO-8859-1?Q?Test_de_contr=F4le_effectu=E9?=
  ==== mime-5.1 FAILED


  ==== mime-5.3 Test encode+decode with quoted-printable
  method FAILED
  ==== Contents of test case:

      set enc [mime::word_encode iso8859-1
  quoted-printable "Test de contrôle effectué"]
      mime::word_decode $enc

  ---- Result was:
  iso8859-1 quoted-printable {Test de contrÿle effectuÿ}
  ---- Result should have been:
  iso8859-1 quoted-printable {Test de contrôle effectué}
  ==== mime-5.3 FAILED


tkt_uuid: 1428544fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: linearalgebra
priority: 5 Medium
foundin: None
resolution: None
title: Incorrect results from math::linearalgebra::matmul
comment:
  Make this 2 rox 1 column matrix using mkMatrix and setrow:
  {2.333 6.7801}
  Call this A so A is:
  2.333
  6.7801

  Now transpose it and call it At so it is:
  2.333 6.7801

  now do math::linearalgebra::matmul $A $At:

  The result is the error: "can't use empty string as
  operand of "*" "

  when it should be: 51.4126

  Now do math::linearalgebra::matmul $At $A:

  The result is: 51.4126
  when is should be:
      5.4429   15.8180
     15.8180   45.9698

  Other multiplication operations seem to work, it is
  this vector case that look like it fails...


tkt_uuid: 2782256fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: two potential package bugs found
comment:
  When using the version of doctools provided by teapot, I see the following two errors:

  package require doctools::nroff::man.macros
  can't find package doctools::nroff::man.macros

  even though the file doctools/nroff/man.macros-0.1.tm appears to have been installed by teacup.

  Also, I am seeing

  package require doctools::paths
  conflicting versions provided for package "doctools::paths": 0.1, then 0


tkt_uuid: 1042420fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: png
priority: 9 Immediate
foundin: None
resolution: Fixed
title: png/crc: 237 failed tests! (64-bit)
comment:
  About half of the tests on the
  png 0.1 package  (or is it
  the crc32 1.2 package?) are
  failing.  Many produce CKSUM
  where OK is expected.

  Others throw a "header checsum failed"
  error.

  Suggest one common error that hits
  a large number of tests.

  I see these failures on a 64-bit
  system, so I suspect they all
  derive from some place where
  the code has assumed 32-bit operations.


  NOTE: no "png" Category to assign to


tkt_uuid: 689258ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Segmentation fault when restoring sash coords
comment:
  We have a tool that uses the BWidget MainFrame to display 
  data on a number of panes and notebook pages. Part of the 
  functionality is that it can save and restore the configuration 
  of the various subdivisions within the frame. 
   
  We found that if these were saved under Windows and then 
  restored under Linux a segmentation fault resulted. 
   
  Attached is the file mre.tcl which implements our tool, and 
  the saved state file from Windows which causes the crash 
  when loaded under Linux (Red Hat 7.3/8.0) 
   
  Here's how to reproduce it: 
  [jaspert@spirograph Run]$ wish 
  % source mre.tcl 
  % RunEnv::Create dummy 
  .mre 
  % open EmptyWindows.shf r 
  file4 
  % RunEnv::LoadViewFile file4 {600 400 0 0} 
  Segmentation fault 
   
  Also attached is a corresponding viewfile produced under 
  Linux which does not cause the crash 


tkt_uuid: 526499ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Accepted
title: Async errors silently discarded
comment:
  In the current implementation of "comm" errors 
  happening in the receiver of a command are silently 
  discarded if the caller performed an -async invocation.

  While that means that the caller itself is not 
  interested in a possible error I believe that it 
  should not be completely discarded. It makes 
  interactions based on async calls hard to debug as 
  problems simply show as the processes not doing what 
  they are supposed to do without any indication why 
  they are doing so.

  The patch to be associated with this report will 
  extend the execution of received commands with a call 
  to [bgerror] (if available or loadable) so that such 
  errors do not get lost.


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: 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: 846422ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: struct :: matrix
priority: 5 Medium
foundin: None
resolution: Accepted
title: New sort method for matrix object
comment:
  I needed to sort a matrix, and wound up spending an
  evening 
  implementing sort methods for the struct::matrix extension.

  The methods use the heapsort algorithm, which is
  explained in "Introduction to Algorithms" by Thomas H.
  Cormen et al. (Copyright 2001 by MIT). The book's
  preface says "If you wish to implement any of the
  algorithms, you will find the translation of our pseudo
  code into your favorite programming language a fairly
  straightforward task." That was my experience -- it was
  actually pretty fun.


tkt_uuid: 232017ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
priority: 5 Medium
resolution: Not Applicable Here
title: "string" subcommands require at least Tcl8.1
comment:
  Usage of "string" subcommands: is, equal, map, repeat, replace, totitle
  are not implemented in tcl 8.0.

  tcllib modules should either "package require Tcl 8.1", or be made
  backwards compatible to tcl 8.0.

  The following tcllib source files are affected:
      base64.tcl, compare.tcl, typedCmdline.tcl, ftp.tcl, ftpd.tcl,
      html.tcl, mime.tcl, ncgi.tcl, pop3.tcl, profiler.tcl, graph.tcl,
      queue.tcl, stack.tcl, tree.tcl, uri.tcl


tkt_uuid: 1204345fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: report
priority: 5 Medium
foundin: None
resolution: Rejected
title: variable size cell
comment:
  Here is a patch that allows a reports to formatted in
  such a manner that the cell widths are variable in
  size, just big enough to fit the value. If one were to
  define a style that converts a matrix to csv format,
  the current implementation would produce something like
  the following

  foo, bar , ack ick
  I   , love , tcl      

  This patch provides the a new key word "var" for column
  size and allows the integer value "0" to indicate that
  cells in that column should be just big enough to hold
  the data. For example, the following code fragment
  would alter the results in the example below.

  $report size 0 var
  $report size 1 var
  $report size 2 0 ; # integer value 0 to indicate
  variable size

  The new output would be

  foo, bar, ack ick
  I, love, tcl      


tkt_uuid: 899211ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ntp
priority: 9 Immediate
foundin: None
resolution: Fixed
title: time-1.3 fails on 64-bit
comment:
  ==== time-1.3 time::unixtime FAILED
  ==== Contents of test case:

      global token
      list [catch {
          set t [time::unixtime $token]
          expr {(0 <= $t) && ($t <= 2147483647)}
      } m] $m

  ---- Result was:
  0 0
  ---- Result should have been (exact matching):
  0 1
  ==== time-1.3 FAILED


  This appears to test that the result
  of [time::unixtime] is a positive 32-bit
  signed integer?

  Should it be so on a 64-bit system?
  Maybe this is just testing the wrong thing?


tkt_uuid: 1346298fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: tkpiechart
priority: 2
foundin: None
resolution: Fixed
title: tkpiechart demo.tcl should go into examples dir
comment:
  Currently the tkchat tkpiechart module dir contains a
  file demo.tcl, which should probably be moved to the
  examples dir of the tklib, like the other examples.


tkt_uuid: 3440115fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pki
priority: 5 Medium
foundin: None
resolution: Fixed
title: Unknown hashing algorithm: unknown
comment:
  Using pki package contained in tcllit1.14RC0, there comes a problem (not always) after generating a rsa key pair (2048) when singing a request certificate, and it throws that error mentioned in the summary.  Same situation happen with 1.13.

  However, using the additions I posted in "Feature request" with id 3440058, which allows me to convert a generated key set to pem and write it in disk, I can generate a key, convert it to pem, and parse it again and the problem does not happen.

  I wrote a test case code fully explained attached in this report

  Regards,

  -=Raul=-


tkt_uuid: 442474ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: BWidget: minor changes to PanedWindow
comment:
  I've attached a small patch (diff -c format) for the
  BWidget paned.tcl file.

  Motivation:
  --------
  1) The paned windows are divided by sashes. At the
  moment, the shape of the sash handler is defined by the
  OS the application is running: button for UNIX, line
  for Windows. It would be nice to be able to define it
  by hand (many users prefer the complete line as sash
  handler, buttons are easily overseen and very ...
  fumbly).

  2) The actual minimum setable values for the sash
  widths consume too much screen estate.

  Remeddy:
  -------
  1) introduce a new optional argument (say: -activator)
  width the values 'button' and 'line'. If set, use this
  as sash handler; if not set, use the old OS dependent
  mechanism.
  2) allow lower values for optional argument -width

  Impact of changes to existing code:
  -------------------------
  None, behaviour is exactly the same, except lower
  values for -width argument don't throw an error.


tkt_uuid: 1547729fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib
priority: 5 Medium
foundin: None
resolution: Fixed
title: Tooltip isn't cleared correctly
comment:
  If an item has a tooltip, this tooltip is shown when
  the cursor enters this item. When I try to clear the
  tooltip with [tooltip::tooltip clear] when the cursor
  is on the item, the tooltip isn't cleared. Only after I
  move the mouse *and* click elsewhere is the tooltip
  removed.


tkt_uuid: 1841979fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: grammar_fa
priority: 5 Medium
foundin: None
resolution: Accepted
title: Tests for grammar::fa::op::toRegexp
comment:
  Here are two tests for grammar::fa::op::toRegexp and
  grammar::fa::op::toTclRegexp which do not depend on 
  details of the implementation. The idea is to construct 
  an automaton which keeps track of of remainder modulo 3 
  (in order to keep it small; one could probably pick a larger 
  divisor, but I don't think it would make the test a better 
  error detector) while scanning the digits of a number, 
  then use that to generate a Tcl regexp for numbers belonging 
  to a particular modulo class, and finally compare the 
  result of [regexp] to the result of the straightforward 
  [expr] expression. The result is the list of numbers for 
  which these don't agree, so the correct result is empty 
  in both cases.

  I'm afraid I'm not quite sure how to best turn this into 
  a formal test, however.

  This first block of code tests integers in base 10 for being 
  congruent to 2 mod 3.

  set fa [grammar::fa decimal_2_mod_3]
  $fa state add 0 1 2
  $fa symbol add 0 1 2 3 4 5 6 7 8 9
  foreach state [$fa states] {
      foreach digit [$fa symbols] {
          $fa next $state $digit --> [expr {(10*$state + $digit) % 3}]
      }
  }
  $fa start add 0
  $fa final add 2
  set RE ^([
      grammar::fa::op::toTclRegexp [grammar::fa::op::toRegexp $fa] {}
  ])\$
  set res {}
  for {set n 0} {$n<1000} {incr n} {
      if {[regexp $RE $n] != ($n % 3 == 2)} then {lappend res $n}
  }
  $fa destroy
  set res

  This second block of code tests integers in base 8 for being 
  congruent to 1 mod 3.

  set fa [grammar::fa octal_1_mod_3]
  $fa state add 0 1 2
  $fa symbol add 0 1 2 3 4 5 6 7
  foreach state [$fa states] {
      foreach digit [$fa symbols] {
          $fa next $state $digit --> [expr {(8*$state + $digit) % 3}]
      }
  }
  $fa start add 0
  $fa final add 1
  set RE ^([
      grammar::fa::op::toTclRegexp [grammar::fa::op::toRegexp $fa] {}
  ])\$
  set res {}
  for {set n 0} {$n<4096} {incr n} {
      if {[regexp $RE [format %o $n]] != ($n % 3 == 1)} then {lappend res $n}
  }
  $fa destroy
  set res

  One limitation of these tests is however that they don't check 
  all parts of the regexp; some parts of it simply require longer 
  strings than the 3 and 4 respectively digits occurring in this 
  test. I'm working on a test that generates strings from the 
  regexp instead (essentially sampling the underlying language) 
  so that (in a sense) the implication can be tried the other way 
  round as well, but this string generation is itself a generally 
  useful operation on regexps, so I'll probably add that as 
  Yet Another regexp operation...


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

  * math::statistics 0.2
  test name 'BasicStats-1.3' re-used; prior use in
  /local/src/tcllib/modules/math/statistics.test
  test name 'Samplescount-1.0' re-used; prior use in
  /local/src/tcllib/modules/math/statistics.test


tkt_uuid: 1430694fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: smtp
priority: 7 High
foundin: None
resolution: Not Applicable Here
title: smtp or socket issue causes error 400 in Windows XP Pro
comment:
  I thought I had submitted this back in 2005 but I do 
  not see it in the bug database so I am sumbitting 
  again.

  I am using tcllib mime and smtp to send email from a 
  tcl tool. Unfortunately, it seems that a socket error 
  is being thrown if the body size gets beyond around 
  10KB. I'm unsure if it's a socket issue or a tcllib 
  issue. It seems to be consistent as I have tried this 
  with 3 different body texts. I already sumbitted this 
  to ActiveState and they referred me over here. Please 
  see the submission on ActiveStates bug system. The 
  bug ID is 42067. I have upload several files there. I 
  would really appreciate it if you guys could take a 
  look at this.

  Thanks,
  Robert Joy


tkt_uuid: 1566434fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: stooop
priority: 5 Medium
foundin: None
resolution: Fixed
title: stooop-87 fails with Tcl 8.5
comment:
  In stooop-4.4.1 (tcllib-1.9-rc1):

  ==== 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 "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 1 1 bug bug
  ---- 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
  ==== stooop-87 FAILED


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: 2082457fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: cursor
priority: 5 Medium
foundin: None
resolution: Fixed
title: Cursor is not restored with mega-widgets
comment:
  Hi,

  Suppose that you want to manage the cursor of the megawidget ctext. The cursor is not correctly
  restored, because of the delegation of the
  configure on the sub-widgets.
  The fix consists in updating the tree of
  widgets, begining by the bottom,
  instead of begining by the top, as in the
  current implementation.
  A modified implementation is suggested,
  so that the previous versions are maintained.

  In the given test case, you first propagate the watch cursor over the
  widget tree, then restore back the original cursor.

      set mytext [ctext .mytext]
      set result {}
      lappend result [.mytext cget -cursor]
      ::cursor::propagate . watch
      lappend result [.mytext cget -cursor]
      ::cursor::restore .
      lappend result [.mytext cget -cursor]
      destroy $mytext
      set result $result

  The expected result would be "xterm watch xterm".
  The computed result is "xterm watch watch",
  that is, the cursor is not correctly restored
  on the ctext widget. The reason is the
  following.

  The widget .mytext cursor is backed up
  into the CURSOR variable, and the configure
  method is used to update the cursor :

  set CURSOR(.mytext) xterm
  .mytext config -cursor watch

  At that point the instance command in the
  ctext mega-widget delegates to the underlying
  text widget :

  .mytext._t configure -cursor watch

  The cursor package then propagates the configure
  down to the children widgets, begining
  by the linemap :

  set CURSOR(.mytext.l) xterm
  .mytext.l config -cursor watch

  When it comes to the underlying text, the
  backup variable is set to the wrong cursor value,
  because it has allready been updated to the
  "watch" state :

  set CURSOR(.mytext.t) watch
  .mytext.t config -cursor watch
  .mytext._t configure -cursor watch

  When the restore command is called, the
  widget .mytext is correctly updated :

  ::cursor::restore .mytext
  .mytext config -cursor xterm

  By delegation, it triggers the configure
  method on the .mytext._t sub-widget :

  .mytext._t configure -cursor xterm

  Instead, when it comes to the sub-widget directly,
  the watch cursor is configured :

  ::cursor::restore .mytext.t
  .mytext.t config -cursor watch
  .mytext._t configure -cursor watch

  The fix simply consists in restoring children first.
  This is done by implementing unpositionnal
  arguments and maintaining the previous interface
  with a special processing of options.

  See in the attachment for a test-case and
  a suggested modified version of cursor.tcl.

  Regards,

  Michaël


tkt_uuid: 1658089fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: snit
priority: 5 Medium
foundin: None
resolution: Fixed
title: snitfaq typo report
comment:
  I'm looking at the latest tcllib cvs head.

  1. Under the section "what are snit's goals", the
  first point says "a snit object should should" -
  one of those two "should"s probably should be
  deleted.

  2. Later on, under the heading "What is an abstract data type?",
  the second sentence
  begins "In systems that include include ..."
  That second "include" can be deleted.

  3. Under "Can objects be renamed?", the first example, that of a callback
  command to another object, fails to display in the formatted doc.
  Here's what I see when I do a "man -s n snitfaq"

       o    If the object is renamed, however, then $self's value will
            change.  Therefore, don't use $self for anything that will
            break if $self changes. For example, don't pass a callback
            command to another object like this:

            You'll get an error if .btn calls your command after your
            object is renamed.

  4. In this same section of doc, there is the statement:

  Instead, the your object ...

  but I think that should be:

  Instead, your object ...

  (without the "the")

  5. The bullet mentioned in (4) is also not displaying its example code.

  6. Under How do I destroy a Snit Object, the example of
  using the destroy method appears twice. The first example should
  be removed to improve the flow of reading.


tkt_uuid: 1623653fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: math :: geometry
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Polygons in pointInPolygon are always closed - no check
comment:
  In pointInPolygon there is no check if the polygon is already closed. The first point is added anyway. If it is already closed however the result is false.


tkt_uuid: 1559299fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: linearalgebra
priority: 5 Medium
foundin: None
resolution: None
title: leastSquareSVD runs into problem with simple test case
comment:
  The leastSquareSVD command produces a run-time error
  with the following simple script:

  #
  # Known relation: z = 1.0 + x + 0.1*y
  # Model this as: z = z0 + x + 0.1*y
  #
  #
  #          z0   x   y     z
  set Ab { {  1  1.0  1.0} 2.1
           {  1  2.0  1.0} 3.1
           {  1  2.0  2.0} 3.2
           {  1  4.0  2.0} 5.2
           {  1  4.0 22.0} 7.2
           {  1  5.0 -2.0} 5.8 }

  set A {}
  set b {}
  foreach {Ar br} $Ab {
      lappend A $Ar
      lappend b $br
  }
  set x [::math::linearalgebra::leastSquaresSVD $A $b}]
  puts $x             

  I must check this!


tkt_uuid: 1054636fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: general request
priority: 8
foundin: None
title: Enhance test suite to disable all accel pkgs even if present
comment:
  I think it would be useful for the tcllib test suite to
  either
  by default, or via some sort of extra makefile target, have
  the option of indicating that the user wishes the test
  suite
  to run only the tcl versions of modules through the test
  cases, rather than loading things like trf if present.

  Or maybe what is needed is a tcllib module option that
  allows the developer to do that very same thing when
  doing the package require?


tkt_uuid: 1187156fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: md5
priority: 5 Medium
foundin: None
resolution: Duplicate
title: md5::md5 -hex $data fails for some data
comment:
  md5::md5 -hex $data can fail with:
  ::hex: wrong # args, all options require an argument

  protecting the arg with: md5::md5 -hex -- $data does not 
  help.

  %set errorInfo
  ::hex: wrong # args, all options require an argument
      while executing
  "Hex $r"
      (procedure "md5::md5" line 47)
      invoked from within
  "md5::md5 -hex -- $data"
  %

  My quick fix was to modify md5x.tcl so that the 2 
  occurrences of:

  set r [Hex $r]

  are replaced with:

  set r [Hex -- $r]

  I haven't thought through exactly what's going on and 
  whether or not it's required in both instances though.

  Unfortunately I only know of one string for which this 
  occurs, and that happens to be a chunk of xml which 
  includes private information.


tkt_uuid: 3065746fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: log
priority: 3 Low
foundin: None
resolution: Not Applicable Here
title: formatted log::log for performence
comment:
  Propose to add a command:
  log::logf Level Formatpattern ?arg1? ?arg2? ?arg3?
  which is equal in functionality to:
  log::log Level [format Formatpattern ?arg1? ?arg2? ?arg3?]
  for performence reasons.
  Example:
  Current solution to log a variable contents:
  (1) log::log debug "Variable V=$V"
  Proposed solution:
  (2) log:logf debug "Variable V=%s" $V
  If log level "debug" is activated, there is little difference.
  If log level "debug" is not activated, (1) will still compose the log string, (2) will not.
  For complex cases, this might be a considerable performence difference.


tkt_uuid: 710139ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Out of Date
title: BWidget 1.4.1 ListBox dropovercmd bugs
comment:
  I encountered 2 bugs in the same proc  ListBox::_over_cmd

  1) The variable xs can escape intialisation in some case, causing runtime error.
  Can be produced by dragging (slowly) an entry vertically from
  a droppable area to a non-droppable area or reverse.

  2) -dropovercmd command, get called back with a missing parameter $path

  Below is a small context diff for the the changes:

  $ diff -c listbox.tcl*
  *** listbox.tcl Wed Mar 26 14:31:00 2003
  --- listbox.tcl.orig    Tue Aug 27 05:56:26 2002
  ***************
  *** 1164,1170 ****
            set yi   [expr {$line*$dy}]
            set ys   [expr {$yi+$dy}]
            set xi   0
  -         set xs   $xi
            set pos  $line
            if { [Widget::getoption $path -multicolumn] } {
                set nrows $data(nrows)
  --- 1164,1169 ----
  ***************
  *** 1225,1231 ****

        if { $vmode && [set cmd [Widget::getoption $path -dropovercmd]] != "" } {
            # user-defined dropover command
  !         set res   [uplevel \#0 $cmd [list $path $source $target $op $type $dnddata]]
            set code  [lindex $res 0]
            set vmode 0
            if {$code & 1} {
  --- 1224,1230 ----

        if { $vmode && [set cmd [Widget::getoption $path -dropovercmd]] != "" } {
            # user-defined dropover command
  !         set res   [uplevel \#0 $cmd [list $source $target $op $type $dnddata]]
            set code  [lindex $res 0]
            set vmode 0
            if {$code & 1} {


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: 1272783fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: docidx - failed tests with Tcl 8.5
comment:
  ==== docidx-3.0 docidx errors FAILED
  ==== Contents of test case:

      catch {new} msg
      set msg

  ---- Result was:
  wrong # args: should be "new name ..."
  ---- Result should have been (exact matching):
  wrong # args: should be "new name args"
  ==== docidx-3.0 FAILED

  ==== doctoc-3.0 doctoc errors FAILED
  ==== Contents of test case:

      catch {new} msg
      set msg

  ---- Result was:
  wrong # args: should be "new name ..."
  ---- Result should have been (exact matching):
  wrong # args: should be "new name args"
  ==== doctoc-3.0 FAILED

  ==== doctools-3.0 doctools errors FAILED
  ==== Contents of test case:

      catch {new} msg
      set msg

  ---- Result was:
  wrong # args: should be "new name ..."
  ---- Result should have been (exact matching):
  wrong # args: should be "new name args"
  ==== doctools-3.0 FAILED


tkt_uuid: 540313ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: cmdline
priority: 5 Medium
foundin: None
resolution: Accepted
title: Add [getKnownOpt{ions}]
comment:
  >From "Melissa Chawla" <hershey@panasas.com>
  I've added 2 new procedures to the tcllib/cmdline package:

  The getKnownOpt and getKnownOptions procedures offer a
  way for options 
  that
  are not in the optionList to be ignored.  This way, you
  can have two
  independant locations in your application where
  commandline arguments 
  are
  parsed.  I bumped the package version to 1.2.  If I
  pass the args "-foo 
  x -bar
  a b c -debug 1, where -bar is not in the options list,
  then "-bar a b c" 
  will
  remain in argv without causing a problem.

  The reason I need this feature is that when I start
  TclHttpd, it checks 
  the
  commandline options and throws an error if there are
  options that it 
  doesn't
  know about.  But I've deliberately added options that
  my customized web 
  server
  libraries will look at, and until now, I had no "nice"
  way to pass those
  options through the TclHttpd option check to my
  application.

  My patch includes tests as well as improved
  documentation (in the code)
  throughout the package.


tkt_uuid: 1799702fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ip
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: ::ip::reduceToAggregates with weird netmask broken
comment:
  ::ip::reduceToAggregates returns an invalid result (i.e., a result that is not functionally the same as its input) when the netmask "255.255.0.255" is used in conjuction with disjoint, but still overlapping subnets.

  Example:

  tcl>package require ip
  1.1.1
  tcl>set iplist [list 1.2.0.4/255.255.0.255 1.2.3.0/255.255.255.0]
  tcl>set reducediplist [::ip::reduceToAggregates $iplist]
  tcl>puts $reducediplist
  1.2.0.4/16
  tcl>::ip::isOverlap 1.2.1.1/32 [lindex $iplist 0]
  0
  tcl>::ip::isOverlap 1.2.1.1/32 [lindex $iplist 1]
  0
  tcl>::ip::isOverlap 1.2.1.1/32 [lindex $reducediplist 0]
  1


tkt_uuid: 2855302fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
title: LexNormalize should be a public routine
comment:
  It is often useful to be able to lexically normalize a path (removing . and ..) without going to the disk and without resolving links. fileutil already has a routine LexNormalize that does this but it is internal and not documented. This is a request to make the command an "official" part of the interface and document it.

  /Ashok


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: 443645ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Fixed
title: pop3::retrieve fails...
comment:
  I've been trying out the new tcllib pop3 module 
  included in the latest ActiveTcl distribution 
  (8.3.3.2) some more, and found that pop3::retrieve 
  fails on some POP3 servers with an unknown "size" 
  variable message...

  The new retrieval scheme ("blob" vs. the old "line-by-
  line") assumes POP3 servers _always_ respond with the 
  message size directly after the "+OK" answer. 

  Although an example scenario in the POP3 RFC seems to 
  suggest this, I do not think it is required POP3 
  behaviour (at least from the various versions of the 
  POP3 RFCs I've read [RFC1725, RFC1939]).

  Unfortunatly, various POP3 server implementations 
  think the same way...

  Though I'm somewhat partial to the line-by-line 
  approach [possibly more robust?] myself, the current 
  scheme might still work by issuing a separate command 
  (like LIST) to retrieve the mail message size.

  -- AH.


tkt_uuid: 1779424fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 5 Medium
foundin: None
resolution: Fixed
title: Example Error ::struct::list filterfor
comment:
  Example in documentation for did not work.
  I remove the expr {..} layer and it worked as expected

  tcl_patchLevel 8.4.4
  % ::struct::list filterfor x {1 2 3 4 5} {expr {($x % 2) == 0}}
  syntax error in expression "expr {($x % 2) == 0}": variable references require preceding $
  % ::struct::list filterfor x {1 2 3 4 5} {($x % 2) == 0} 
  2 4


tkt_uuid: 1742078fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: html
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: html::nl2br procedure bug
comment:
  The "html::nl2br" procedure is designed to replace all line-endings with the HTML <br> construct.  It appears to be missing a common line-ending combo.  Here's the original procedure:

  proc ::html::nl2br {s} {
      return [string map [list \n\r <br> \n <br> \r <br>] $s]
  }

  It's missing a substitution of the common "\r\n" combo.  Ultimately, the current procedure replaces that combo with 2 <br>'s, which is incorrect.  Now, maybe the existing "\n\r" is just transposed by accident, as that seems odd anyway...

  I'd suggest the following replacement if that's the case:

  proc ::html::nl2br {s} {
      return [string map [list \r\n <br> \n <br> \r <br>] $s]
  }

  Jeff


tkt_uuid: 1740573fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: html
priority: 5 Medium
foundin: None
resolution: Fixed
title: html - documentation, examples needed
comment:
  The documentation for the html package has some errors and typographical errors.

  The synopsis lists the procedures in not quite alphabetical order.  The init procedure appears between refresh and row.

  The explanation for ::html::cell uses upper case tags whereas lower case tags are really used.

  The explanation for ::html::openTag lists the arguments as "tags args" when the code uses "tags param".  Using multiple args (implied by args) will fail.

  ::html::row should say that it does NOT used defaults for the td tag as defined in the ::html::init call.

  Examples would be very instructive.


tkt_uuid: 650919ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: pop3d
priority: 5 Medium
foundin: None
resolution: Fixed
title: STAT command produces incorrect results
comment:
  The POP3 RFC specifies that STAT returns a +OK 
  response followed by two numbers (number of 
  messages, and number of octets).

  The tcllib pop3d returns the first number and then 
  a string.  This causes some pop3d clients problems 
  (notably the Java Mail 1.3 Sun POP3 provider).


tkt_uuid: 633250ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 8
foundin: None
resolution: Out of Date
title: mpexpand: Tcl 8.3 required
comment:
  Using configure will find required Tcl 8.3

  # ./configure          
  loading cache ./config.cache
  checking for a BSD compatible install... (cached)
  /usr/bin/ginstall -c
  checking executable extension based on host type... 
  checking for tclsh... (cached) /usr/local/bin/tclsh8.3
  creating ./config.status
  creating Makefile

  but during installation "make" may fail due to usage of
  different tclsh interpreter - in my case tclsh has to
  be a tclsh8.2 interpreter. "configure -bindir=..." does
  not help as the search path is not changed.

  # make
  make html-doc
  make[1]: Entering directory `/home/fis/tmp/tcllib-1.3'
  make[2]: Entering directory `/home/fis/tmp/tcllib-1.3'
  Gen (html): ./modules/base64/base64.man
  bad option "unset": must be anymore, donesearch,
  exists, get, names, nextelement, set, size, or
  startsearch
      while executing
  "::mp expand $text"
      (procedure "passes" line 10)
      invoked from within
  "passes"
      (procedure "main" line 6)
      invoked from within
  "main"
      (file "./modules/doctools/mpexpand" line 737)
  Gen (html): ./modules/base64/uuencode.man


  Please insert

  package require Tcl 8.3

  to mpexpand and it'll work.


tkt_uuid: 929727ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Invalid
title: BWidget notebook page name bug
comment:
  BWidget notebook page name retrieval uses wrong index.
  Here is the diff that I made:

  diff notebook.tcl BWidget-1.7.0/notebook.tcl 
  336c336
  <       append script " \[NoteBook::_get_page_name [list $path] current 1\]"
  ---
  >       append script " \[NoteBook::_get_page_name [list $path] current 2\]"


tkt_uuid: 1151534fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Danish language file
comment:
  Hi, I just created a Danish language file for bwidget.
  Please feel free to include it in the distro.


  - elhaard


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: 1276561fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 7 High
foundin: None
resolution: Fixed
title: Handling of dates/times
comment:
  Dates/times are handled incorrectly in tcllib in
  non-English locales.
  Look at this piece of code from mime.tcl:

  --------- piece of code ------
              set gmt [clock format $clock -format "%d %b
  %Y %H:%M:%S" \
                             -gmt true]
              if {[set diff [expr {($clock-[clock scan
  $gmt])/60}]] < 0} {
                  set s -
                  set diff [expr {-($diff)}]
              } else {
                  set s +
              }
  ------------------------------
  Time in this format doesn't get scanned back into
  seconds by clock scan,
  because, for example, in Russian locale (ru_RU.KOI8-R)
  in looks like:

  30 <unicode string> 2005 11:32:07

  Unicode string here transcribes as "avgust" which is
  russian name for
  August. So Tcl error "unable to convert date-time
  string" appears.
  I suggest to replace it with something like:

              set gmt [clock format $clock -format
  "%Y-%m-%d %H:%M:%S" \
                             -gmt true]

  Also I suggest to check in other such places (use of
  clock format / clock scan) in tcllib's code.


tkt_uuid: 1889835fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: fix for extra CR/LF's inserted into binary file data
comment:
  The mime::buildmessageaux procedure has logic to insert carriage return line feeds in the middle of file data even when the encoding is binary.  The problem occurs when the number of bytes is greater than 32766 so the file is read in more than one read call.   Here are my changed lines in the version of mime.tcl that was released with tcllib 1.8.  I believe that the head version is the same, at least in this procedure.  I am no expert on mime and encodings, but I suspect the "\r\n" can be removed when $converter is not {} too.   This excerpt starts around line 2030 of the file mime.tcl:


      while {($size != 0) && (![eof $fd])} {
  if {$size < 0 || $size > 32766} {
      set X [read $fd 32766]
  } else {
      set X [read $fd $size]
  }
  if {$size > 0} {
      set size [expr {$size - [string length $X]}]
  }
  if {[string compare $converter ""]} {
      append result "[$converter -mode encode -- $X]\r\n"
  } else {
      # append result "$X\r\n" 
              # ECH fix - if binary do not mess up chunk boundaries
      append result $X
  }
      }
          # ECH fix - now add the \r\n after the data
  if {![string compare $converter ""]} { append result "\r\n" } ;# ECH fix

              if {$closeP} {
                  catch { close $state(fd) }
                  unset state(fd)
              }


tkt_uuid: 1272910fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: statistics
priority: 5 Medium
foundin: None
resolution: None
title: math::statistics - failed tests with Tcl 8.5
comment:
  ==== Quantiles-1.0 Quantiles - raw data FAILED
  ==== Contents of test case:

    set values [::math::statistics::quantiles
  $::data_linear {0.25 0.55 0.95}]

  ---- Result was:
  2.0 6.0 10.0
  ---- Result should have been (tolerant matching):
  3.0 6.0 10.0
  ==== Quantiles-1.0 FAILED


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: 1861370fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: math
priority: 5 Medium
foundin: None
title: Submission: Chi-squared distribution
comment:
  Hi,

  I'm submitting an implementation of the (central) chi-squared distribution.

  This time around, I did a more systematic job of testing the code, by using a test-driven development approach. To do that, I used my little "simple test" library.

  I'm attaching the code that implements the chi-squared library first. Then I'll post the simple test code.

  Dependencies:
   - Gamma distribution
   - Simple test

  Eric


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: 1969042fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Typewriter/fixed-width font
comment:
  Doctools has a command [emph] for empasizing text. Another font variation, which is very common in documentation, is that of "typewriter" or fixed-width fonts, to underline that something is exact text as typed by a user or the computer. In LaTeX this is marked up using the \texttt command, in WubWikit it is marked up using backquotes (`tt`), and so on.

  The [example] and [example_begin]...[example_end] commands in doctools already use such a font where available, but always put the text on separate lines. In this, they are rather like the verbatim and alltt environments of LaTeX, but this RFE is for something like \texttt.

  For output formats where this font variation is not possible, the command need not have any effect. I find it rather annoying not to have this style variation for HTML pages or LaTeX, however.


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: 461434ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: html
priority: 5 Medium
foundin: None
resolution: None
title: docs mention formatCode
comment:
  The man page for html mentions the proc formatCode 
  which isn't implemented in the library.  It's only in 
  the proc list, not in the main body.  

  Fix: add it in (from Jeff's implementation?) or leave 
  out the doc mention.


tkt_uuid: 2820727fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: tclapps :: tkchat
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Linux standalone executable not working on x86_64
comment:
  Using archlinux x86_64, just downloaded tkchat 1.465 standalone executable for linux. When i try to run it in a terminal i get:

  $  /home/saedelaere/Downloads/tkchat-linux-ix86
  couldn't load file "/tmp/tclfsB20G": libXft.so.2: wrong ELF class: ELFCLASS64
      while executing
  "load /home/saedelaere/Downloads/tkchat-linux-ix86/lib/tk8.5/../libtk8.5.so Tk"
      ("package ifneeded Tk 8.5.7" script)
      invoked from within
  "package require Tk  8.4"
      (file "/home/saedelaere/Downloads/tkchat-linux-ix86/bin/tkchat.tcl" line 36)
      invoked from within
  "source [file join $starkit::topdir bin tkchat.tcl]"
      (file "/home/saedelaere/Downloads/tkchat-linux-ix86/main.tcl" line 28)

  Some infos about my system
  $  uname -a
  Linux 2.6.30-ARCH #1 SMP PREEMPT Sat Jul 4 02:24:43 CEST 2009 x86_64
  tcl/tk 8.5.7

  Using a tclkit (8.5.1) and tkchat.kit works.

  Regards


tkt_uuid: 1579744fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: Tcl Tip 278
comment:
  This diff might be helpfull in order to make sure
  BWidget still works after Tcl's Tip 278 will be
  implemented.
  See http://tip.tcl.tk/278.

  These changes were made by me in order get aMSN running
  again when using Tcl's Tip 278 branch.


tkt_uuid: 1584235fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Nlist against win. IIS behaves bizar
comment:
  Hi,
  Tested with tcllib 1.9 (ftp 2.4.4)
  (Test cases perform different be also 'strange' with
  tcllib 1.8) AGAINST A WINDOWS IIS server! When I test
  against a Solaris machine everything works fine.

  ftp::NList handle ?directory? 
  When directory is passed I encountered following problems:

  Case1: directory has >1 node and NOT ending with a slash
  (eg. edidata/Catalog )The resulting files are prefixed
  with the entire directory. Correct I think BUT the
  filename portion is separared with a backslash (should
  be slash). The directory keeps his slash.

  Case2: When I append a slash to directory
  (edidata/Catalog/). This solves the problem.
  (This is the correct behaviour I think.)

  Case3: directory is only one node and NOT ending with a
  slash (eg. Catalog ) the resulting files are NOT
  PREFIXED with the directory name. (which should be I
  think, altough not documented)

  Case4: When I append a slash to directory
  (edidata/Catalog/). This solves the problem 
  (This is the correct behaviour I think.)


  Testcases:
  on ftp server directory structure:
  editdata/Catalog
  Catalog contains some files eg. 
  einpr45012023322_I.XML einpr45012023322_I.XML

  package require ftp

  set h_ftp [ftp::Open 10.17.100.239 myUser myPwd -port
  23 -mode active]

  # Case 1
  ftp::NList $h_ftp  edidata/Catalog

  # Case 2
  ftp::NList $h_ftp  edidata/Catalog/

  ftp::Cd $h_ftp edidata

  # Case 3
  ftp::NList $h_ftp  Catalog

  # Case 4
  ftp::NList $h_ftp  Catalog/


  Output AGAINST IIS ftp server WITH the option Directory
  listing style = 'MS-DOS':
  % package require ftp
  2.4.4
  %
  % set h_ftp [ftp::Open 10.17.100.239 myUser myPwd -port
  23 -mode active]
  0
  %
  % # Case 1
  % ftp::NList $h_ftp  edidata/Catalog
  {edidata/Catalog\einpr45012023322_I.XML}
  {edidata/Catalog\einpr47121440651_I.XML
  }
  %
  % # Case 2
  % ftp::NList $h_ftp  edidata/Catalog/
  edidata/Catalog/einpr45012023322_I.XML
  edidata/Catalog/einpr47121440651_I.XML
  %
  % ftp::Cd $h_ftp edidata
  1
  %
  % # Case 3
  % ftp::NList $h_ftp  Catalog
  einpr45012023322_I.XML einpr47121440651_I.XML
  %
  % # Case 4
  % ftp::NList $h_ftp  Catalog/
  Catalog/einpr45012023322_I.XML
  Catalog/einpr47121440651_I.XML

  Output (OK I think) AGAINST SOLARIS machine (ftpd daemon):

  % package require ftp
  2.4.4
  %
  % set h_ftp [ftp::Open srvdev myUser myPwd -port 21
  -mode active]
  0
  %
  % # Case 1
  % ftp::NList $h_ftp  edidata/Catalog
  edidata/Catalog/einpr45012023322_I.XML
  edidata/Catalog/einpr47121440651_I.XML
  %
  % # Case 2
  % ftp::NList $h_ftp  edidata/Catalog/
  edidata/Catalog/einpr45012023322_I.XML
  edidata/Catalog/einpr47121440651_I.XML
  %
  % ftp::Cd $h_ftp edidata
  1
  %
  % # Case 3
  % ftp::NList $h_ftp  Catalog
  Catalog/einpr45012023322_I.XML
  Catalog/einpr47121440651_I.XML
  %
  % # Case 4
  % ftp::NList $h_ftp  Catalog/
  Catalog/einpr45012023322_I.XML
  Catalog/einpr47121440651_I.XML

  Output AGAINST IIS with directory listing style = 'UNIX':
  % package require ftp
  2.4.4
  %
  % set h_ftp [ftp::Open 10.17.100.239 els.vedior
  mon23oct -port 23 -mode active]
  0
  % # Case 1
  % ftp::NList $h_ftp  edidata/Catalog
  edidata/Catalog/einpr45012023322_I.XML
  edidata/Catalog/einpr47121440651_I.XML
  %
  % # Case 2
  % ftp::NList $h_ftp  edidata/Catalog/
  edidata/Catalog/einpr45012023322_I.XML
  edidata/Catalog/einpr47121440651_I.XML
  %
  % ftp::Cd $h_ftp edidata
  1
  %
  % # Case 3
  % ftp::NList $h_ftp  Catalog
  einpr45012023322_I.XML einpr47121440651_I.XML
  %
  % # Case 4
  % ftp::NList $h_ftp  Catalog/
  Catalog/einpr45012023322_I.XML
  Catalog/einpr47121440651_I.XML

  THIS IS ALMOST CORRECT in "Case 3" the file is not
  prefixed with the directory.

  My Workarounds: 
  1) Avoid IIS
  2) If IIS: set directory listing to UNIX, and do not
  use single node directories (I added an extra directory
  level just to avoid this problem)


tkt_uuid: 3162548fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tar
priority: 8
foundin: None
resolution: Accepted
title: tar -- support existing/nonseekable channels
comment:
  The attached patch adds a "-chan" option to [contents/stat/get/untar/create]  (but *not* [add/remove], foor good reasons), which interprets the first argument as a channel name instead of filename. This allows to pass already opened channels, seekable or not. One typical usage is the emulation of 'tar cf - | ...':

     ::tar::create  $pipe  $listoffiles -chan

  Which is typically useful for Wub, to serve content that is to be tarred on-the-fly, instead of (currently) using tempfiles.
  The same applies on input, where seek is emulated by repeated reads when the channel is not seekable; similarly a "tar tf -" can thus be done on any pipe or socket.

  Note that the responsibility for 'fconfigure -translation binary' is left to the caller; only raw IO are done on the provided channel, and it is left open on return. 

  I have not included the (needed) documentation update; I would appreciate a hand since I don't have the renderer handy ;-)


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: 756939ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ncgi
priority: 8
foundin: None
resolution: Accepted
title: No way to get a list of only the known keys
comment:
  The package provides a command to ask if a key is 
  present in the ncgi package, but has no command to 
  return a list of all known keys ...

  Indirectly possible through 'nvlist' and stripping out the 
  data elements.


tkt_uuid: 1800413fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: dtplite errors/warnings reported twice
comment:
  Using CVS HEAD, running dtplite on some man pages produces:

  man3/Ns_Sls.man
  DocTools Warning (depr_ltype): In macro at line 69, column 0:
  DocTools Warning (depr_ltype): Deprecated list type "arg".
  DocTools Warning (depr_ltype): Please use "arguments" instead.
  DocTools Warning (depr_ltype): In macro at line 69, column 0:
  DocTools Warning (depr_ltype): Deprecated list type "arg".
  DocTools Warning (depr_ltype): Please use "arguments" instead.


  The same warning is printed twice. Same for genuine errors, not just depreciation warnings.

  The messages are quite verbose and can result in thousands of lines of output which is hard to read.


tkt_uuid: 873666ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: scrollw.tcl does not support -relief
comment:
  BWidget's ScrolledWindow does not support options
  -relief and -bd at creation time

  May be the statement 
  set sw    [frame $path \
              -relief flat -borderwidth 0 -background $bg \
      -highlightthickness 0 -takefocus 0]
  is to change to
  set sw    [eval frame $path \
      -background $bg \
      -highlightthickness 0 -takefocus 0  \   
  [Widget::subcget $path :cmd]]


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: 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: 957180ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: log
priority: 5 Medium
foundin: None
resolution: Accepted
title: Various bug fixes and enhancements to the logger package
comment:
  Bugfixes and Enhancements to logger:

  * fixed broken logger::services and added tests
  * implemented ${log}::services and added tests and
  changed docs
  * fixed broken cleanup in ${log}::delete and the testsuite
  * fixed some bad uses of set in namespaces which could
  lead to overwrite of global vars.
    used 'variable' instead of 'set' where appropriate
  * added introspection commands with docs and tests
    ${log}::servicename and logger::servicecmd
  * added introspection to ${log}::logproc with docs and
  tests
  * bumped version No to 0.4
  * added introspection to ${log}::delproc with docs and test


tkt_uuid: 781246ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: ftp
priority: 4
foundin: None
resolution: Not Applicable Here
title: Support SSL connections in FTP package
comment:
  would be nice to include an option in ftp::open to use 
  tls or not. i am sure u guys can tell me how to make it 
  work without having to wait for next version :)


tkt_uuid: 437950ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: mclistbox
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: mclistbox snapshot does not build
comment:
  after downloading the mclistbox nightly snapshot from
  scriptics ftp site, an attempt to configure it
  the first time results in:
  creating cache ./config.cache
  configure: error: can not find install-sh or install.sh
  in config /vol/tclsrcsol
  /tcl84/mclistbox/config
  make: *** No targets specified and no makefile found. 
  Stop.


  Either the code should come with instructions for
  installation or with the files it needs.

  Will this code be integrated into tklib?  That
  would probably be better than spending a lot of time on
  a stand alone distribution.


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: 528392ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Invalid
title: Missing commands in nroff format
comment:
  The nroff format does not implement the commands [lb]
  and [rb]. These are necessary for entering code
  examples in the man pages.


tkt_uuid: 842066ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: ncgi
priority: 5 Medium
foundin: None
title: need ncgi::exists
comment:
  Hi, 

  I need this simple function:

  proc ::ncgi::exists { var } {
     variable value
     return [info exists value($var)]
  }

  ncgi::empty does _not_ what i want.

  Thanks,
  Christoph


tkt_uuid: 3437761fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: keyboard traversal broken if spaces in widget pathnames
comment:
  If you have widgets whose pathnames contain spaces, you get errors when attempting to traverse focus between them with the Tab key. Example error log pasted below. 
  Annoyingly, this error affects all Tk widgets including ttk, once the BWidget package has been loaded.

  wrong # args: should be "ttk::takefocus w"
      while executing
  "ttk::takefocus .foo bar"
      ("uplevel" body line 1)
      invoked from within
  "uplevel \#0 $value $w"
      (procedure "focusOK" line 12)
      invoked from within
  "focusOK $cur"
      (procedure "Widget::focusNext" line 36)
      invoked from within
  "Widget::focusNext .foo\ foo"
      invoked from within
  "Widget::traverseTo [Widget::focusNext .foo\ foo] "
      (command bound to event)


tkt_uuid: 784269ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: {Ctrl f} menu item accelerator broken
comment:
  I've been using BWidgets 1.6.0 to create a simple interface 
  for viewing some text.  One of my 'Edit' menu items is 
  'Find...' for which I wanted to use the control-f sequence as 
  an accelerator.  Try as I might, it didn't work so I dug into 
  how the menus are created in mainframe.tcl and discovered 
  a problem with the regular expression used when looking for 
  the F1 -> F19 special keyboard keys.

  As it turns out, the regular expression that's supposed to be 
  looking for "f1", "f2", ... "f19" is matching "f" as well.  Since 
  it matches, the variable gets converted to upper case, which 
  it apparently has to be for the special F keys.  However, this 
  changes what should be <Control-f> to <Control-F> which 
  means you have to hold the shift key in order to activate it.

  The regular expression checks I'm referring to is in 
  _parse_accelerator() routine near the bottom of 
  mainframe.tcl.  The expression is {f[1]?[0-9]*} but should 
  be, I believe, {f1?[0-9]}.  This new expression matches 
  everything its supposed to and doesn't match "f".

  I've attached a simple test case to show what I'm talking 
  about.


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: 1475567fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: tklib: plotchart
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: interaction with elements of the plots
comment:
  it would be nice if one could interact with the 
  plotted data
  - click on a rectangle and get the data associated 
  with it
  - change the look of a rectangle (i.e. for let them 
  blink)


tkt_uuid: 1063774fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: textutil
priority: 5 Medium
foundin: None
resolution: Accepted
title: [splitn string ?len=1?] split string in chunks of length len
comment:
  Dear tcllib maintainers, 
   
  This is a patch against tcllib, adding a new procedure splitn to 
  split.tcl and in addition having relevant tests in split.test. 
   
  [splitn string ?len=1?] will split string into chunks of length $len.  
  These are returned in a list.  If the string length is not an entire 
  multiple of $len, the last chunk will be short.  With an empty 
  string the empty list is returned.  And a nonpositive len will result 
  in an error. 
   
  The implementation used for splitn is almost identical to code 
  submitted by Bryan Oakley in a ``contest'' I did on c.l.t ... as this 
  was the first submitted code that used more than one algorithm 
  depending on the string length, I asked B.O. if I could use it.  
  Unfortunately I got no reply sofar.  But my spare time is running 
  short, so I will submit this patch now.  Once I get B.O.'s reply I 
  will forward it to the tcllib project. 
   
  Except as stated above the code is in the public domain. 
   
  Best regards, Robert S. 


tkt_uuid: 447042ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Accepted
title: Package versions and dependencies
comment:
  Here's a big patch that fixes many bugs dealing with
  what versions of what packages are in tcllib, and
  what versions of what packages they depend on.  Bugs
  fixed by this patch are:

  447038
  447035
  447033
  447013
  447012
  447011
  447010
  232017


tkt_uuid: 654762ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: doctools
priority: 7 High
foundin: None
resolution: Not Applicable Here
title: doctools - Add backend 'docbook'
comment:
  It would be nice to have a backend for doctools that
  produces docbook.  Because docbook has more information
  than doctools, this transformation cannot be completely
  automated, and requires human intervention to complete,
  but at least it would be a start.

  Eventually, it would be nice to see Tcl itself make use
  of docbook, but I  don't suppose that will happen any
  time soon.


tkt_uuid: 1885638fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 2
foundin: None
resolution: Works For Me
title: Tree "see" problem in some situations
comment:
  The BWidget Tree object has problems with "see" in some situations.
  Example code:
   
    pack [set sw [ScrolledWindow .sw]]
    set lb [Tree $sw.lb]
    $sw setwidget $lb
    for {set i 0} {$i<100} {incr i} {
      if {$i} {
        $lb insert end  "Item_[expr ($i-1)/10]" "Item_$i" -text "This is item $i"
        } else {
        $lb insert end root "Item_$i" -text "This is item $i"
       }
    } 
    $lb itemconfigure Item_0 -open 1
    $lb itemconfigure Item_2 -open 1
    $lb selection set Item_27
    ### update ; ### "see" works correct with update
    $lb see Item_27

  The Item_27 is scrolled outside by one line (Item_28 is the 1st visible leaf). 

  See also bug report #1885621 regarding ListBox "see".
  In simpler situations (e.g. only 1 level tree like in ListBox example) Tree widget does "see" scroll correct. 

  Tested on BWidget 1.8.


tkt_uuid: 1891251fffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: tklib: plotchart
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Support of long ylabels in horizontal bar charts
comment:
  Hi,
  The goal of this patch is to take into account for long y labels in an horizontal plotchart.
  I have allread discussed that problem on comp.lang.tcl where the solution has been suggested by other Tclers :
  http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/ab5ee289991f81f/6821b6d40899d276?lnk=gst&q=plotchart#6821b6d40899d276
  The problem is that, when long labels are to be displayed, some are hidden because there is no space left on the canvas.
  The patch is fixing the problem by computing the longest y label to display : this allows to set the view accordingly.
  The problem is located in the file plotchart.tcl, in the proc "::Plotchart::createHorizontalBarchart".
  The following code takes into account for the size of the current default font used in the barchart and is not perfect because Plotchart does not take into account the fonts yet.

     label .invisibleLabel
     set fontname [.invisibleLabel cget -font]
     destroy .invisibleLabel
     
     set xspacemax 0
     foreach ylab $ylabels {
         set xspace [font measure $fontname $ylab]
         if {$xspace> $xspacemax} then {
             set xspacemax $xspace
         }
     }
     set text_width [expr {int ( $xspacemax / 10.) + 1}]

     foreach {pxmin pymin pxmax pymax} [MarginsRectangle $w $notext $text_width] {break}

  Best regards,

  Michaël


tkt_uuid: 225308ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
priority: 5 Medium
resolution: Fixed
title: BWidget: tk8.4 breaks Entry widget state option
comment:
  Tk8.4 introduced the -state normal/disabled options for the entry widget. These conflict with the implementation of -state in the BWidget Entry widget. The workaround is to
  create the BWidget Entry widget and configure the state using a separate command. A better solution would be to modify BWidget to recognise Tk 8.4 or later and use the new entry widget features.


tkt_uuid: 1176744fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: counter
priority: 5 Medium
foundin: None
resolution: Fixed
title: counter, improper use of alt=
comment:
  It should be title= as firefox doesn't (correctly)
  display a tooltip for alt.

  RCS file:
  /cvsroot/tcllib/tcllib/modules/counter/counter.tcl,v
  retrieving revision 1.18
  diff -c -r1.18 counter.tcl
  *** counter.tcl3 Oct 2004 23:06:55 -00001.18
  --- counter.tcl5 Apr 2005 02:04:43 -0000
  ***************
  *** 1019,1025 ****
            set img src=$options(-images)/$options(-gif)
        }
        append result "<td valign=bottom><img $img
  height=$height\
  !         width=$options(-width) alt=$value></td>\n"
        }
        append result "</tr>"
    
  --- 1019,1025 ----
            set img src=$options(-images)/$options(-gif)
        }
        append result "<td valign=bottom><img $img
  height=$height\
  !         width=$options(-width) title=$value></td>\n"
        }
        append result "</tr>"
    


tkt_uuid: 1891275fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: math :: bignum :: float
priority: 5 Medium
foundin: None
title: ::math::bigfloat::tostr should be able return non-sci notat
comment:
  ::math::bigfloat::tostr [::math::bigfloat::div [::math::bigfloat::fromstr 15637289764914.0 10] [::math::bigfloat::fromstr 2.0 10]]  yeilds 7.818644882e+12

  It would be useful for me to have the ability to tell "tostr" to never return something in scientific notation (i.e., I want "7818644882000.0" instead of "7.818644882e+12")


tkt_uuid: 1608793fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: tklib: khim
priority: 5 Medium
foundin: None
resolution: Accepted
title: Czech message file for tklib's KHIM
comment:
  Hi,

  I upload cs.msg.gz

  this is message file with czech translation for tklib
   for KHIM (Kevin's Hacky Input Method).

  Michal <wohnivec@dix.cz>


tkt_uuid: 547331ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: stooop
priority: 7 High
foundin: None
resolution: Not Applicable Here
title: stooop redefines [::proc] !
comment:
  It looks to me like the package stooop is
  redefining the commands [::proc]!  Yuck!

  It seems like a better idea to me for stooop
  to define and export [::stooop::proc].  Then
  if I want to import it and make use of it as
  a replacement for [proc] in my namespace, or
  for a replacement for [::proc] more globally,
  I have that choice.  Currently the stooop
  package makes the choice for you.


tkt_uuid: 781973ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: textutil
priority: 8
foundin: None
resolution: Fixed
title: ::textutil::expander mishandles unterminated macros
comment:
  ::textutil::expander has an error mode setting that governs 
  how errors are handled when an error is found while 
  expanding a string.  For example, the error can be thrown 
  normally, the error message can be inserted into the output 
  in place of the macro, or the macro text can be left in the 
  output unchanged.

  If ::textutil::expander encounters an unterminated macro, 
  e.g., if it encounters the left macro bracket but there is no 
  matching right macro bracket, then it always throws a 
  normal error, ignoring the error mode.  This is a common 
  error for novices to make, and the current implementation 
  means that the unterminated macro error must be handled 
  differently from other errors in the expander's input.

  ::textutil::expander should be changed so that the 
  unterminated macro error is handled like all other errors.


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: 1028668fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: exif -- make field(19) optional
comment:
  Our old Canon PowerShot S100 camera generates files, 
  which cause the following error from exif::analyze: 
   
  can't read "field(19)": no such element in array 
  % set errorInfo 
  can't read "field(19)": no such element in array 
      while executing 
  "expr {$field(19)-0x3000}" 
      (procedure "makerNote" line 130) 
      invoked from within 
  "makerNote $data $offset" 
      (procedure "exifSubIFD" line 18) 
      invoked from within 
  "exifSubIFD $data $offset" 
      (procedure "app1" line 62) 
      invoked from within 
  "app1 $data $thumbnail" 
      (procedure "exif::analyze" line 30) 
      invoked from within 
  "exif::analyze file7" 
      ("uplevel" body line 1) 
      invoked from within 
  "uplevel #0 {exif::analyze file7}" 
   
  The attached patch makes the code check for the presence 
  of field(19) prior to using it. 


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: 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: 735450ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftpd
priority: 5 Medium
foundin: None
resolution: Fixed
title: ftpd - Check usage of fcopy
comment:
  We have to check if fcopy is properly used with respect 
  to -encoding on control and data channels, for versions 
  of Tcl from 8.3/8.4. Especially binary versus text 
  downloads.


tkt_uuid: 1427220fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: None
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: TraceLog: Debugging helper
comment:
  Looking for a home for this mini app.
  Can be broken up into a log extension and Tk 
  interface if need be.

  The package provides a simple Tcl source code
  execution flow tracer.  It is a detailed tracer that 
  will allow tracing down to the line-level of 
  execution.  It operates by adding traces to 
  procedures and logging the entry arguments and 
  results to the log package. If Tk is available it 
  will log to its own window and redirect ::log 
  messages there as well.

  Example of usage is to add these lines at the start 
  of a script.

  package require TraceLog
  ::TraceLog::Init
  ::TraceLog::SetCreateLog

  Any feedback or comments welcome.


tkt_uuid: 737171ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Documentation
priority: 5 Medium
foundin: None
resolution: Fixed
title: Suggested fix for two typos in dtp docs
comment:
  dtp , a program in tclapps, should have the following
  two typos fixed:

  approx. line 42 - change appropiate to appropriate.

  approx. line 50 - copleted should be completed.


tkt_uuid: 1784637fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: linearalgebra
priority: 5 Medium
foundin: None
resolution: Fixed
title: Changes in matmul between vers. 1.0 and 1.0.1
comment:
  I found a different (wrong) behaviuor between version 1.0 and 1.0.1 in matrix multiplikation. See the attached file.
  The result for variable pvv should be: 1.6848 (vers. 1.0)
  but I got: 0.5220 0.1606 0.2770 0.3830 0.4059 ...


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: 653266ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: ListBox Shift-extended selection fails
comment:
  Extending a selection using the shift key in a BWidget 
  ListBox causes a failure if the list item tags are not 
  integers (and maybe if they are too). It appears to 
  assume that the tags are numbers and applies "incr" to 
  them. I have attached a patch to fix this problem.


tkt_uuid: 1220090fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 3 Low
foundin: None
resolution: Fixed
title: subsection markup doesn't detect duplicate anchors
comment:
  If a doctools file has two "subsection" tags with the same title, the 
  two subsections will have identical HTML anchor string.  Doctools 
  should issue a warning, and provide a way for the author to resolve 
  the ambiguity without necessarily changing their titles.


tkt_uuid: 1007762fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: ctext
priority: 5 Medium
foundin: None
resolution: Fixed
title: Several options not working as expected in ctext widget
comment:
  I ran into a few oddities while using ctext to create a
  syntax-sensitive editor:

  After creation:

  .c configure -linemap 0 ==> unknown option 

  While creating the widget:
  -font has no effect (it is suppressed) but afterwards
  it does have. It seems to me unnecessary to suppress
  this option.


tkt_uuid: 1687902fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: tree
priority: 5 Medium
foundin: None
title: Documentation improvement
comment:
  Today, for the first time, I took a proper look at the struct::tree package to figure out what it was for. Unfortunately, I had to go source-diving to really understand what it was doing...

  Apparently the documentation can be improved. What I got hung up on was the fact that the meaning of a "node", as used with most of the subcommands, was not clear from the start. After having gone source-diving and rereading the man page I find some hints, but apparently these are not prominent enough for me to spot them on the first reading.

  Some concrete possibilities for how to improve things:

  1. In the Description:

    A tree is a collection of elements, called nodes, one of 
    which is distinguished as a root, along with a relation 
    ("parenthood") that places a hierarchical structure on 
    the nodes.

  insert "(strings)" after "elements". I think this would actually have been sufficient for me, but as it were I was at a loss about the nature of these elements.

  2. Extend the Description with a paragraph comparing trees to arrays, e.g.:

    A tree is thus similar to an array, but with three important differences:
    1. Trees are accessed through an object command, whereas arrays are accessed as variables. (This means trees cannot be local to a procedure.)
    2. Trees have a hierarchical structure, whereas an array is just an unordered collection.
    3. Each node of a tree has a separate collection of attributes and values. This is like an array where every element is a dictionary.

  It might also be good to place a paragraph detailing any restrictions on the names of nodes somewhere above the command descriptions, as that is often useful information when planning interfaces for other things to be built on top of trees. (E.g., if spaces are not allowed in node names then one probably cannot use [list] to construct node names.)


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: 1230699fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: html
priority: 5 Medium
foundin: None
resolution: Duplicate
title: ::html::textInput size attribute always default
comment:
  The output of
      html::textInput name "" size="15"
  is
      <input type="text" name="name" value="" size="45" size=15>
  which results in a field of size 45 (the second size=15 parameter
  is apparently ignored.)

  I think the fix is as follows:

  In html.tcl, proc ::html::textInput, the line
      append html [default input.size]
  should be
      append html [default input.size $args]


  Thanks,
  Greg

  greg@groupscope.com


tkt_uuid: 1000259fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: win98 demo->DIalog Tab->Abort,Retry,Ignore->Show -- Fails
comment:
  win98 demo->DIalog Tab->Abort,Retry,Ignore->Show -- 
  Fails

  Windows98
  BWidget 1.7 (ActiveTcl 8.5.0.0 beta-2)

  Trace:
  bad -default value "": must be abort, retry, ignore, ok, 
  cancel, no, or yes
  bad -default value "": must be abort, retry, ignore, ok, 
  cancel, no, or yes
      while executing
  "tk_messageBox -message {Message for 
  MessageBox} -default {} -icon error -parent . -title Fehler -
  type abortretryignore"
      ("eval" body line 1)
      invoked from within
  "eval [list tk_messageBox] [array get tkMBoxArgs]"
      (procedure "MessageDlg::create" line 81)
      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 "tk::ButtonUp" line 24)
      invoked from within
  "tk::ButtonUp .mainframe.frame.nb.fdemoDlg.titf3.f.but"
      (command bound to event)


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: 1160005fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: plotchart
priority: 5 Medium
foundin: None
resolution: None
title: tklib plotchart test suite failure using tcl/tk 8.5 alpha
comment:
  Platform: sparc solaris sun c compiler
  Tcl/Tk latest from cvs
  tklib latest from cvs

  After configure and building, I ran the test suite and
  got this
  error:

  Module: plotchart
  modules/plotchart/plotchart.test
  Plotchart 1.0
  modules/plotchart/plotcontour.test
  couldn't read file "plotchart.tcl": no such file or
  directory
      while executing
  "source plotchart.tcl"
      (file
  "/vol/tclsrcsol/tcl85/tklib/modules/plotchart/plotcontour.test"
  line 3)
      invoked from within
  "source [pSet file]"


  Before the error appeared, a series of tk widgets
  appeared with plotting information.


tkt_uuid: 474846ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: uri
priority: 5 Medium
foundin: None
resolution: Fixed
title: Failure to handle ftp uri's
comment:
  URI handling for ftp url's seems to be flawed.

  (1) splitting an FTP url that contains user/password
  information results in an error:

  % uri::split ftp://user:password@host:1234/where/ever
  expected integer but got ""

  % uri::split ftp://user@host:1234/where/ever
  expected integer but got ""

  (2) Password field is ignored when joining

  % uri::join port 1234 path where/ever \
          scheme ftp host host type {} \
          user foo pwd password
  ftp://foo@host:1234where/ever

  (3) invalid URL produced by joining (see above)

  (4) geturl fails

  % uri::geturl ftp://nowhere.com/nothing
  invalid command name "ftp::geturl"


tkt_uuid: 843932ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: Line continuation missing in entry.tcl
comment:
  In the cvs from 2003-11-10, the is a line continuation 
  missing in file entry.tcl in function Entry::create.

  The diff is:

  112c112
  <             -foreground [Widget::getMegawidgetOption 
  $path -disabledforeground]
  ---
  >             -foreground [Widget::getMegawidgetOption 
  $path -disabledforeground]\


tkt_uuid: 940375ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Duplicate
title: tcllib 1.6 install error due to doc. generation bug
comment:
  There is a problem generating the nroff documentation,
  which causes the installation of tcllib 1.6 to fail.

  In detail: When selecting the "Doc. Nroff" checkbox in
  the installer GUI, keeping "Simulate installation" off,
  and clicking on "Install", I get this output and error
  message:

  <47 triton->tcllib-1.6> wish installer.tcl 
  Installing Tcllib 1.6
  You have chosen the following configuration ...

  Packages:      install/lib/tcllib1.6
  Examples:      install/bin/tcllib_examples1.6
  Documentation:

          NROFF:  install/man/mann
          HTML:   install/lib/tcllib1.6/tcllib_doc

  Error in startup script: @--> invalid command name "option"
      while executing
  "::doctools::_format dt {[comment {-*- tcl -*- doctools
  manpage}]
  [comment { $Id: s.multiplexer.man 1.4 04/02/10
  23:36:58-08:00 tcl@bluepeak.home $ }]
  ..."
      ("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 multiplexer nroff n install/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)


  My wish shell is v8.4.5. This error happens whether I'm
  on Solaris or on Linux. The error seems to be caused by
  a problem encountered when processing the
  multiplexer.man documentation file. The same error also
  occurs for graph.man and struct_tree.man (both in
  module struct).

  These errors did not occur in tcllib 1.4.

  It would be good to fix this since it is somewhat
  frustrating for users to have the installation fail
  halfway through.

  I am not familiar with doctools or the doctools
  documentation format, but hopefully someone who is can
  identify the source of the problem from these symptoms.


tkt_uuid: 3490008fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: grammar_peg
priority: 5 Medium
foundin: None
resolution: Fixed
title: nonterminal delete does not work
comment:
  When I try to do a [$grammar nonterminal delete SymbolName] I get the following error:

  can't read "nt": variable is array

  Looking at the code in CVS, this looks like the culprit.  I have not had time to test this theory:

  ...
  322method NtDelete {nts} {
  323 set references $re($nt)
  ...


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: 723307ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: tree
priority: 8
foundin: None
title: Tree Walk: Add Break/Return/Error Support
comment:
  The struct::tree functions within tcllib work VERY well - 
  but during some recent development I realized that there 
  was no clean way to "stop" a tree walk when walking 
  the nodes of a tree (either direction or both directions).

  I consider struct::tree strcutures to be a distinct 
  alternative to the already very powerful arrays and lists 
  wtihin tcl.

  The ability to attribute nodes with keys and manipulate 
  them is very powerful, but when working with large tree 
  structures and then trying to navigate them or search 
  until something is found, the walk command works, but 
  does NOT stop until it reaches the end of the tree.

  Adding the abilty to break/return/error during a walk 
  would definately increase the already useflness of this 
  library.

  contact me with any questions.

  Dave Bigelow
  davidhbigelow@compuserve.com


tkt_uuid: 470273ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: BWidget: MainFrame menu inconsistency
comment:
  Motivation:
  -----------

  The BWidget MainFrame widget shows a slight
  inconsistency in the
  handling of menu (de-)activation when using multiple
  tags.

  Consider this small example:

  ------- snip
  package require BWidget
  set descmenu {
   "&File" all file 0 {
    {command "Exit 1" {tag_bla tag1} "" {} -command exit}
    {command "Exit 2" {tag_bla tag2} "" {} -command exit}
   }
  }
  set mainframe [MainFrame .mainframe -menu $descmenu]
  pack $mainframe -expand yes -fill both

  #$mainframe setmenustate tag1 normal
  ------- snap

  Start the program, both menuentries are active. Now,
  remove the comment #
  from the setmenustate line, start the program: the
  "Exit 1"-entry is
  suddenly _disabled_ instead of normal.


  Discussion:
  -----------
  Internally, BWidget uses the tags as boolean states
  whether a menu
  should be shown normal or disabled. Only if each and
  every tag is set
  to normal (1) the entry is displayed in normal state.

  Unfortunately, the default initialization of the
  entries is set to 0
  (disabled)! (The menues after the start do not reflect
  this, they are
  all normal).

  For the example given above, after init, one has this:

    tag_bla 0
    tag1    0
    tag2    0

  After the setmenustate, tag1 is 1, but tag_bla is still
  0, making the
  entry be displayed as disabled (0).

  Possible remedies:
  ------------------
  1) have MainFrame make a refresh of the Menudisplay
  according to the
      tags. This would probably break a great many
  existing applications
      that do not set the tags explicitly to normal.
  2) document this as a known quirk and have everyone
  maually set all
      the tags to normal with setmenustate when starting
  their program
  3) change the behaviour of the default initialization
  to 1 (normal).
      This *could* break existing programs who rely on
  this
      ... undocumented feature, but I doubt it.

  I'd tend to 3), as I see this as the expected
  behaviour. Anyway, I
  attached the patches for it (they fix the same problem
  for the menus
  themselves, too) in diff -c format.

  The line must be changed in 
    proc MainFrame::_create_menubar { path descmenu } 
  and 
    proc MainFrame::_create_entries { path menu bg
  entries } {


  Bastien


tkt_uuid: 552968ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: graph
priority: 5 Medium
foundin: None
resolution: Duplicate
title: Feature Req: new introspection methods
comment:
  I've made modifications to the struct::graph module
  that I've found useful in my own scripts.  

  These modifications add several new submethods. 
  Introspection: keys (returns a list of keys), keyexists
  (returns 1 or 0 depending on whether a given key
  exists), and getall (returns a serialized list suitable
  for using with [array set]); and an append and lappend
  (to avoid doing a 'get/[l]append/set' manually).

  A patch for the graph.tcl, .test, and .n files is
  attached.


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: 3475081fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: yaml
priority: 8
foundin: None
resolution: Not Applicable Here
title: Parser accepts invalid YAML input, mistranslates others
comment:
  The yaml parser v0.3.6 (tcllib cvs head) accepts the following invalid YAML text:

      list-no-comma: [ "a" "b" "c" ]

  It returns {list-no-comma {a b c}} whereas it should throw an error complaining about the lack of commas between the quoted list elements.
  Entering the above string into the online YAML validator/parser at

      http://yaml-online-parser.appspot.com/

  returns:

  ERROR:

  while parsing a flow sequence
    in "<unicode string>", line 1, column 16:
      list-no-comma: [ "a" "b" "c" ]
                     ^
  expected ',' or ']', but got '<scalar>'
    in "<unicode string>", line 1, column 22:
      list-no-comma: [ "a" "b" "c" ]
                           ^

  The second block in the error report is the important one.


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: 1198465fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Documentation
priority: 5 Medium
foundin: None
resolution: None
title: Documentation glitch in ActiveStates's 8.4.9.1 release
comment:
  Hello out there,
  not entirely sure whether this is the right place but I
  couldn't find a better one.
  In the HTML docs the 'start page' for TkLib
  (.../tklib/toc.html) in the new release (8.4.9.1) by
  ActiveState is empty at least when viewed with Firefox
  (asking for this page's source code showed a blank page
  as well).
  Best regards
  Helmut Giese

  PS: There is another - albeit different - small issue
  with TkTable's start page, which I will report at there.


tkt_uuid: 1740862fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: Documentation
priority: 5 Medium
foundin: None
resolution: Fixed
title: replace {expand} uses
comment:
  The latest Tcl 8.5 cvs head appears to no longer support {expand}, the deprecated notation for {*}. Tcllib has a dozen or more cases of use, including man page references.  See fileutil, fumagic, grammar_fa, pluginmgr, page, snit, transfer treeql, and transfer...


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: 1151935fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: statistics
priority: 5 Medium
foundin: None
resolution: None
title: math::stats divide by zero error
comment:
  If the sum of the numbers sent to math::stats is zero
  there will be a divide by zero error when it goes to
  calculate the coefficient of variation.


tkt_uuid: 1897843fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: stringprep
priority: 5 Medium
foundin: None
resolution: Fixed
title: saslprep test 1.7 fails
comment:
  sparc solaris 9, sun c compiler, cvs head for tcl and tcllib.

  ++++ saslprep-1.6 PASSED
  ---- saslprep-1.7 start

  ==== saslprep-1.7 Error - bidirectional check FAILED
  ==== Contents of test case:

          list [catch {::stringprep::stringprep saslprep $input} res] $res
      
  ---- Result was:
  1 {can't read "first_ral": no such variable}
  ---- Result should have been (exact matching):
  1 invalid_bidi
  ==== saslprep-1.7 FAILED


tkt_uuid: 1017743fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3d
priority: 5 Medium
foundin: None
resolution: Fixed
title: pop3d test suite failure
comment:
  platform: sparc blade 100 solaris 8 sun c compiler tcl
  8.4.7 latest tcllib cvs snapshot (from aug 26, 2004).

  I am seeing the following error messages

  Module: pop3d
  modules/pop3d/pop3d.test
  - pop3d 1.0.2
  - udb   1.1
  - dbox  1.0.1
  - mime  1.4
  - md5   2.0.1
  NONE
  can't read "conn()": no such element in array
      while executing
  "upvar $conn($sock) cstate"
      ("state" arm line 6)
      invoked from within
  "switch -exact -- $cmd {
          list {
              if {[llength $args] > 0} {
                  return -code error "wrong # args:
  should be \"$name conn list\""
              }
              return ..."
      (procedure "::pop3d::_conn" line 3)
      invoked from within
  "::pop3d::_conn pop3d40 state {}"
      ("eval" body line 1)
      invoked from within
  "eval [list ::pop3d::_$cmd $name] $args"
      (procedure "::pop3d::Pop3dProc" line 14)
      invoked from within
  "$srv conn state [$srv conn list]"
      invoked from within
  "set res [$srv conn state [$srv conn list]]"
      ("after" script)

  ==== pop3-srv-7.2 auth, APOP/USER FAILED
  ==== Contents of test case:

      newfsrv
      set res ""
      set trace [subshellpar {
          package require md5 2
          set c [socket localhost $port]
          regexp {(<.*>)} [gets $c] -> id
          set hash [string tolower [md5::md5 -hex
  ${id}smash]]
          puts $c "APOP ak $hash" ; flush $c
          set line [gets $c]
          puts $c "USER foo" ; flush $c
          puts "$line [gets $c]"
          after 5000
          close $c
      } {
          after 3000 {
              set res [$srv conn state [$srv conn list]]
          }
      } port [$srv cget -port]] ; # {}
      
      # Postprocess state to remove variable data from
  comparison
      set res [ppcstate $res]
      delfsrv
      list $trace $res

  ---- Result was:
  {+OK congratulations -ERR client already authenticated} {}
  ---- Result should have been (exact matching):
  {+OK congratulations -ERR client already authenticated}
  {deleted {} id <==@%%> l
  ogon {} msg 3 name ak remotehost 127.0.0.1 remoteport
  {} server 1 size 3 state t
  rans storage usr0}
  ==== pop3-srv-7.2 FAILED
  NONE
  can't read "conn()": no such element in array
      while executing
  "upvar $conn($sock) cstate"
      ("state" arm line 6)
      invoked from within
  "switch -exact -- $cmd {
          list {
              if {[llength $args] > 0} {
                  return -code error "wrong # args:
  should be \"$name conn list\""
              }
              return ..."
      (procedure "::pop3d::_conn" line 3)
      invoked from within
  "::pop3d::_conn pop3d42 state {}"
      ("eval" body line 1)
      invoked from within
  "eval [list ::pop3d::_$cmd $name] $args"
      (procedure "::pop3d::Pop3dProc" line 14)
      invoked from within
  "$srv conn state [$srv conn list]"
      invoked from within
  "set res [$srv conn state [$srv conn list]]"
      ("after" script)

  ==== pop3-srv-7.4.0 APOP FAILED
  ==== Contents of test case:

          newfsrv
          set res ""
          set trace [subshellpar {
              package require md5 2
              set c [socket localhost $port]
              gets $c line ; regexp {(<.*>)} $line -> id
              set hash [string tolower [md5::md5 -hex
  ${id}$pass]]
              puts $c "APOP $user $hash" ; flush $c ;
  gets $c line
              after 3000
              close $c
              puts $line
          } {
              after 2000 {
                  set res [$srv conn state [$srv conn list]]
              }
          } port [$srv cget -port] user $user pass $pass]
  ; # {}

          # Postprocess state to remove variable data
  from comparison
          set res [ppcstate $res]
          delfsrv
          list $trace $res
      
  ---- Result was:
  {-ERR authentication failed, sorry} {}
  ---- Result should have been (exact matching):
  {-ERR authentication failed, sorry} {deleted {} id
  <==@%%> logon {} msg 0 name f
  oo remotehost 127.0.0.1 remoteport {} server 1 size 0
  state auth storage {}}
  ==== pop3-srv-7.4.0 FAILED

  NONE
  can't read "conn()": no such element in array
      while executing
  "upvar $conn($sock) cstate"
      ("state" arm line 6)
      invoked from within
  "switch -exact -- $cmd {
          list {
              if {[llength $args] > 0} {
                  return -code error "wrong # args:
  should be \"$name conn list\""
              }
              return ..."
      (procedure "::pop3d::_conn" line 3)
      invoked from within
  "::pop3d::_conn pop3d44 state {}"
      ("eval" body line 1)
      invoked from within
  "eval [list ::pop3d::_$cmd $name] $args"
      (procedure "::pop3d::Pop3dProc" line 14)
      invoked from within
  "$srv conn state [$srv conn list]"
      invoked from within
  "set res [$srv conn state [$srv conn list]]"
      ("after" script)

  ==== pop3-srv-7.4.1 APOP FAILED
  ==== Contents of test case:

          newfsrv
          set res ""
          set trace [subshellpar {
              package require md5 2
              set c [socket localhost $port]
              gets $c line ; regexp {(<.*>)} $line -> id
              set hash [string tolower [md5::md5 -hex
  ${id}$pass]]
              puts $c "APOP $user $hash" ; flush $c ;
  gets $c line
              after 3000
              close $c
              puts $line
          } {
              after 2000 {
                  set res [$srv conn state [$srv conn list]]
              }
          } port [$srv cget -port] user $user pass $pass]
  ; # {}

          # Postprocess state to remove variable data
  from comparison
          set res [ppcstate $res]
          delfsrv
          list $trace $res
      
  ---- Result was:
  {-ERR authentication failed, sorry} {}
  ---- Result should have been (exact matching):
  {-ERR authentication failed, sorry} {deleted {} id
  <==@%%> logon {} msg 0 name a
  k remotehost 127.0.0.1 remoteport {} server 1 size 0
  state auth storage {}}
  ==== pop3-srv-7.4.1 FAILED

  NONE
  can't read "conn()": no such element in array
      while executing
  "upvar $conn($sock) cstate"
      ("state" arm line 6)
      invoked from within
  "switch -exact -- $cmd {
          list {
              if {[llength $args] > 0} {
                  return -code error "wrong # args:
  should be \"$name conn list\""
              }
              return ..."
      (procedure "::pop3d::_conn" line 3)
      invoked from within
  "::pop3d::_conn pop3d46 state {}"
      ("eval" body line 1)
      invoked from within
  "eval [list ::pop3d::_$cmd $name] $args"
      (procedure "::pop3d::Pop3dProc" line 14)
      invoked from within
  "$srv conn state [$srv conn list]"
      invoked from within
  "set res [$srv conn state [$srv conn list]]"
      ("after" script)

  ==== pop3-srv-7.4.2 APOP FAILED
  ==== Contents of test case:

          newfsrv
          set res ""
          set trace [subshellpar {
              package require md5 2
              set c [socket localhost $port]
              gets $c line ; regexp {(<.*>)} $line -> id
              set hash [string tolower [md5::md5 -hex
  ${id}$pass]]
              puts $c "APOP $user $hash" ; flush $c ;
  gets $c line
              after 3000
              close $c
              puts $line
          } {
              after 2000 {
                  set res [$srv conn state [$srv conn list]]
              }
          } port [$srv cget -port] user $user pass $pass]
  ; # {}

          # Postprocess state to remove variable data
  from comparison
          set res [ppcstate $res]
          delfsrv
          list $trace $res
      
  ---- Result was:
  {+OK congratulations} {}
  ---- Result should have been (exact matching):
  {+OK congratulations} {deleted {} id <==@%%> logon {}
  msg 3 name ak remotehost 1
  27.0.0.1 remoteport {} server 1 size 3 state trans
  storage usr0}
  ==== pop3-srv-7.4.2 FAILED

  modules/pop3d/pop3d_dbox.test
  - pop3d::dbox 1.0.1
  - mime        1.4
  - md5         2.0.1
  modules/pop3d/pop3d_udb.test
  - pop3d::udb 1.1

  Module: profiler
  modules/profiler/profiler.test
  - profiler 0.2.2


tkt_uuid: 1035281fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: plotchart
priority: 5 Medium
foundin: None
resolution: None
title: Plotchart::determineScale return wrong values
comment:
  In this case Plotchart::determineScale returns wrong
  values:

  puts "-1.7 26.8: [determineScale -1.7 26.8]"

  >> -1.7 26.8: -1.0 21.0 10.0 <<

  Version Plotchart 0.9


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: 517066ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: tcllib: request for new module
priority: 5 Medium
foundin: None
title: EXIF digital image parser
comment:
  Please incorporate this module into TclLib at your convenience.

  This is a pure-tcl namespace for parsing EXIF data blocks from JPEG images generated by digital 
  cameras, scanners, etc. It provides primarily textual information, rather than returning the raw data 
  in a form convenient for further processing.

  Attached: A zip file with code and documentation.


tkt_uuid: 1879627fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: list
priority: 5 Medium
foundin: None
resolution: Duplicate
title: struct::list test suite case failure
comment:
  tcl 8.5.1 cvs head
  tcllib cvs head
  sparc solaris 9


  ---- assign-4.4 start

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

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

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

  ---- 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


tkt_uuid: 513320ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: BWidget PanedWindow problem
comment:
  When using the PanedWindow with the '-weights
  available' argument, and panes get added after the
  PanedWindow is realised (got Configure event),  the
  weights are no longer honoured.


tkt_uuid: 898067ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: ftp::NList error when directory empty
comment:
  When executing ftp::NList on an empty directory
  follwing error message appears
  "error     error | E: Error getting directory listing!"

  The manual says:
  This command has the same behavior as the ::ftp::List 
  command, ...

  Ths ftp::List command does not show an error on emty
  dirs ...

  This a non-blocking message ...

  Regards,

  Christophe De Clercq


tkt_uuid: 1695124fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
title: doctools - Extend testsuite
comment:
  The testsuite of doctools is quite small, it especially does not really test the markup language, nor the output of the various backends.


tkt_uuid: 1703408fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: asn
priority: 3 Low
foundin: None
resolution: Fixed
title: Routine for setting the ASN NULL encoding
comment:
  Hello,
  while using the ASN TclLib1.9 I realised that I got a routine for reading the ASN NULL value but none for setting one. Is this correct?
  If it is could we add it to the lib?
  Kind regards
  KK 


tkt_uuid: 3147481fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: fileutil
priority: 5 Medium
foundin: None
resolution: Fixed
title: find error on hidden, unreadable directory in Windows
comment:
  I am using ActiveTcl 8.5.9.1 on Windows XP SP3.

    fileutil::find $env(SYSTEMDRIVE)/ {string match *.pdf}
    couldn't read directory "C:/System Volume Information/*": permission denied
        while executing
    "glob -nocomplain -directory $current -types f          -- *"
        (procedure "GLOBF" line 8)
        invoked from within
    "GLOBF $current"
        (procedure "find" line 48)
        invoked from within
    "find $env(SYSTEMDRIVE)/ {string match *.pdf}"
        (file "./error.tcl" line 6)

  Maybe "glob -nocomplain" should not error out, but for now I added a check to
  make sure the directory is readable in GLOBF and GLOBD as a workaround.
  My workaround, along with my workaround for bug 3141568, looks like this:

      proc ::fileutil::GLOBF {current} {
          if {![file readable $current]} {
              return {}
          }
          if {([file type $current] eq {link}) && !([file exists [file readlink $current]] && [file readable [file readlink $current]])} {
              return {}
          }


tkt_uuid: 1510449fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: None
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Feature request: Robots exclusion rules parser/checker
comment:
  It would be nice to see an extension that allows
  parsing of a webserver's robots.txt file to see if our
  client is allowed to access a specific resource. Such
  an extension should return a boolean value.

  This feature would prove very useful when making web
  spiders (in general, web clients requiring no user
  interaction).


tkt_uuid: 532774ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ncgi
priority: 5 Medium
foundin: None
resolution: Accepted
title: ncgi::nvlist very slow for large queries
comment:
  Obtaining the results of form submissions where a 
  field contains a large amount of data ( >5-10kb ) 
  causes the CPU to max out for long periods of time 
  (several minutes for 40kb on a reasonably fast PC).

  The problem is caused by the regular expression:

  regexp -- (.*)=(.*) $x dummy varname val

  which doesn't seem to handle really large strings well.

  My fix was to use the following:

  set pos [string first "=" $x]
  set len [string length $x]

  if { $pos>=0 } {
      if { $pos == 0 } { # if the = is at the 
  beginning ...
          if { $len>1 } { # ... and there is something 
  to the right ...
              set varname anonymous
              set val [string range $x 1 [expr $len-1]]
          } else { # ... otherwise, all we have is an =
              set varname anonymous
              set val ""
          }
      } elseif { $pos==[expr $len-1] } { # if the = is 
  at the end ...
          set varname [string range $x 0 [expr $pos-1]]
          set val ""
      } else {
          set varname [string range $x 0 [expr $pos-1]]
          set val [string range $x [expr $pos+1] [expr 
  $len-1]]
      }
  } else { # no = was found ...
      set varname anonymous
      set val $x
  }

  in place of:

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

  in ncgi::nvlist in tcllib/ncgi. I know that the 
  problem exists in tcllib version 1.1 and 1.2.


tkt_uuid: 616522ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Out of Date
title: ListBox::_multiple_select error
comment:
  When trying to select the first elemet in the my list I get 
  the following error ...

  can't read "y": no such variable
      while executing
  "if { $y <= 6 } {
          if { [lindex [$path.c yview] 0] > 0 } {
              set scroll [list yview -1]
              DropSite::setcursor sb_up_arrow
    ..."
      (procedure "ListBox::_multiple_select" line 53)
      invoked from within
  "ListBox::_multiple_select .menu.frame.control.f0.frame.
  sTitleFrameControl.f.sTitleExecuteTCList.f.sTitleOP.f.list
  box n [string range [lindex [.menu.fr..."
      (command bound to event)

  Found in ...
       ActiveState ActiveTcl 8.3.4.2


tkt_uuid: 806537ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: bwidget - Progressbar problem
comment:
  Hi,

  When using the progressbar widget with large values, it
  is not 
  correctly drawn.  The following script shows the
  behaviour on my (32 bit arithmetic) machine:


  package require BWidget

  set max  100000000
  set incr   1000000

  pack [ProgressBar .pb -maximum $max -variable x]

  for { set x 0 } { $x < $max } { incr x $incr } {
      after 10
      puts $x
  }


  The attached patch fixes this problem.

  Kind regards,

  Jos


tkt_uuid: 1438365fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: possible error condition when port in use
comment:
  In line 632, there is a possible error condition with
  the command "rename $chan {}". 

  I've run into a case (with a user-defined port and
  channel) in which the user-defined port is in use (by
  an outside application), but the channel doesn't exist.
  In this case, the "rename $chan {}" errors out:
  can't delete "::test": command doesn't exist.

  But the real error should be that the port is already
  in use (line 634).

  This can be fixed by verifying that the channel exists
  before trying to do a rename (in line 631 for example).


tkt_uuid: 2790985fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tar
priority: 5 Medium
foundin: None
resolution: Fixed
title: fail to extract tar created by mks tools
comment:
  The 3rd call to readHearder blows up attempting to tar::untar this file made by windows tar.exe from MKS. Single file tar test case attached.
  FWIW, bsdtar windows exe running on same machine with same file) can extract the file fine. There is apparently confusion over the seek for preceding read as it seems not to return a proper header block. But bsdtar isn't affected. Thanks for any help.. Roy

  ERROR LOOKS LIKE THIS
  (app) 268 % ::tar::untar  ../dia/srch-30apr-01may-2009/test-mks.tar
  expected integer but got "0"


tkt_uuid: 1398330fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: tklib: ico
priority: 5 Medium
foundin: None
resolution: Fixed
title: memchan-based vfs compatibility patch
comment:
  The issue was discovered when I was trying to generate
  an icon dynamically and place it into in-memory vfs.
  writeIconICO does a wrong thing when [file size] is not
  updated immediately as the file is written. 

  Many VFSs implemented at the script level update file
  metadata only on [close], when the appropriate callback
  is called. Before closing the file, we may write 6
  bytes in it and still get [file size]==0.

  The patch presented here prevents writeIconICO from
  relying on [file size] of the newly-created file. As
  long as the ICO format is the only one that may be
  created from scratch, no issues with other formats are
  expected.


tkt_uuid: 547274ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ncgi
priority: 5 Medium
foundin: None
resolution: Fixed
title: ncgi:nvlist bug
comment:
  When I have POST header as of 
  application/x-url-form-encoded;encoding=ISO-8859-1
  I got the following error message:


  Unknown Content-Type: application/x-www-form-
  urlencoded; charset=ISO-8859-1
      while executing
  "ncgi::nvlist"
      (procedure "ncgi::input" line 11)
      invoked from within
  "ncgi::input"
      (file "/var/www/billing/callback.tcl" line 6)

  I realized that probably 
  string 296 of cgi.tcl
  should be

  application/x-www-form-urlencoded*
  instead of just
  application/x-www-form-urlencoded    


tkt_uuid: 485715ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: csv
priority: 5 Medium
foundin: None
resolution: None
title: csvcut example program output problem
comment:
  csvcut produces "non-standard" (whatever that means :-)
  output for csv input files with fields with embedded
  blanks:

  $ cat /tmp/sample.csv
  1,2,"this is a test",4
  $ csvcut 0-4 /tmp/sample.csv
  1,2,this is a test,4

  Notice the quoting of the column with spaces is lost
  during the cut.  If the quoted field contains a comma,
  the spacing is maintained however!


tkt_uuid: 2886893fffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: ldap
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: fix documentation for ldapx's ldap class
comment:
  ldapx's ldap class documentation contains two errors showing "::ldapx::ldap create" when it should be "::ldapx::entry create".  Patch attached.


tkt_uuid: 3575707fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: csv
priority: 5 Medium
foundin: None
resolution: Accepted
title: add opt arg to csv::join to force insertion of delimiter
comment:
  the proc ::csv::join currently surrounds values by the delimiter characters only when a value contains the delimiter. The patch attached adds an optional argument to ::csv::join, ::csv::joinlist, and ::csv:joinmatrix to make ::csv::join always surround fields by the delimiter character.


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: 585093ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct
priority: 6
foundin: None
resolution: Fixed
title: Pool package namespace problems
comment:
  The ::struct::pool command in tcllib 1.3 references
  variables and commands in/under the ::pool namespace,
  instead of in the ::struct::pool namespace.

  Since there is no struct::pool category, I'm filing
  this against the struct category.


tkt_uuid: 1267636fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: log
priority: 7 High
foundin: None
resolution: Accepted
title: logger: appender and formatter support
comment:
  The attached tar.gz file is for inclusion into the
  logger package. It introduces the concepts of appenders
  (console and colorConsole are included) and formatters
  to logger. 

  There is no existing code in logger changed, and all
  additions use  existing external apis. Additionally,
  the log procs generated try to resolve (hardcode) any
  pre-resolvable items to optimize log runtime.

  example of usage:

  % set log [logger::init testLog]
  ::logger::tree::testLog
  % logger::applyAppender -appender console -serviceCmd
  $log -conversionPattern {\[%d\] \[%c\] \[%M\] \[%p\] %m}

  % ${log}::error "this is error"
  [2005/08/22 10:14:13] [testLog] [global] [error] this
  is error



  I would welcome any review comments.

  doc attached in man and html format


tkt_uuid: 1699575fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: graph
priority: 3 Low
foundin: None
resolution: Fixed
title: criticl accelerators have wrong error msgs with Tcl 8.5
comment:
  The struct::graph testsuite throws a lot of errors due to wrong style error messages when using Tcl 8.5 and the critcl wrappers.


tkt_uuid: 1693491fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: grammar_fa
priority: 5 Medium
foundin: None
resolution: Accepted
title: Expand the grammar::fa::dexec
comment:
  Here is my implementation for the feature request. I only did the .tcl and the .man. I don't quite understand the .test format and procedures, so no .test file.

  Thanks,
  Bogdan.


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: 603924ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: struct :: graph
priority: 5 Medium
foundin: None
title: add getall / keys / keyexists to graph
comment:
  As the graph object stores data exactly like nodes and
  arcs do, it would be more symetric to have the extra
  subcommands, that were added to nodes and arcs.

  Implementation is trivial (copy nodes / arcs procs, one
  line change).


tkt_uuid: 1061100fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: dns
priority: 5 Medium
foundin: None
resolution: Works For Me
title: ip::equal should only look at significant bits
comment:
  It seems that the comparison, the two must have identical bits in the 
  longest match, but I think what is actually wanted is identical bits in 
  the shortest match.  

  Both the first and second comparisons should match, but the
  first succeeds and the second doesn't.  The third succeeds
  when I make sure that the longest has the same bits as the
  shortest.

  The fourth example is what I would use this for most commonly (is 
  this address a part of this subnet - would it match a route in the
  routing table, eg)?  However it will always fail since the subnet
  doesn't have all the significant bits of the /32.  

  I hope this is a bug and not purposeful because I would really like the 
  other feature.  :)

  % ip::equal 129.12/16 129.12/24
  1
  % ip::equal 129.12/12 129.12/16
  0
  % ip::equal 129/12 129/16
  1

  % ip::equal 129.12/16 129.12.1.1/24        
  0

  % ip::equal 129.12/16 129.12.1.1
  0
  % ip::equal 129.12/16 129.12.0.1/24
  1
  % ip::equal 129.12/16 129.12.1.1/24        
  0


tkt_uuid: 224476ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
priority: 5 Medium
resolution: Fixed
title: BWidget - MainFrame::setmenustate broken
comment:
  The following script works with BWidget 1.2.1, but raises an error in 1.3.0:

  --
  package require BWidget
  MainFrame .mf -menu {
          &File {fileTag} file 0 { }
  }
  pack .mf -side top -expand true -fill both
  .mf setmenustate fileTag disabled;# <== here's the problem
  --
  The error message is:
  --
  Error in startup script: syntax error in expression "1 && disabled"
      while executing
  "expr $expression"
      (procedure "MainFrame::setmenustate" line 25)
      invoked from within
  "MainFrame::setmenustate .mf fileTag disabled"
      ("eval" body line 1)
      invoked from within
  "eval MainFrame::$cmd .mf $args"
      (procedure ".mf" line 1)
      invoked from within
  ".mf setmenustate fileTag disabled"
  --

  It looks like this was introduced in mainframe.tcl revision 1.2.

  Suggested fix: revert to the old implementation.


tkt_uuid: 3610022fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Invalid
title: Unprotected close causes script crash
comment:
  In tcllib /modules/ftp on a line near the end of the ftp.tcl file there is:

  close $ftp(SourceCI)

  Can you please change this to:

  catch {close $ftp(SourceCI)}

  to prevent crashes? Thanks!


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: 1651842fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: notebook: -raisecmd should be able to forbid raising
comment:
  if the command associated with -leavecmd returns 0, the page is not left. (BTW, there's a spelling mistake in the docs :)) Thus I can make some checks whether I want to allow the user to move on..


  The same should be true for the -raisecmd.. if it returns 0, don't raise the page, but stay where you are instead..


  I had a brief look at noteboo.tcl (bwidget 1.8) and simply copied the code used at -leavecmd

  % diff notebook.tcl.ori notebook.tcl
  697c697,700
  <           uplevel \#0 $cmd
  ---
  >             set code [catch {uplevel \#0 $cmd} res]
  >             if { $code == 1 || $res == 0 } {
  >                 return -code $code $res
  >             }


  this kinda works.. if the command returns 0 the tab is not raised, however, the tab I was at before now does not appear selected anymore..



  Just an idea :)


tkt_uuid: 449276ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 6
foundin: None
resolution: Fixed
title: SelectColor widget can't be created
comment:
  On behalf of: Bruce Hartweg <brhartweg@bigfoot.com>.

  I've found a problem with the BWidget package that is 
  include in the ActiveTcl "BI" distro.  The SelectColor 
  widget doesn't work. There is no proc define for 
  SelectColor. I'm not sure if this is  just an 
  ActiveState problem of a bad or corrupted file or a 
  problem ion the controlled file of BWidget, so I 
  posted this message as well as mailed it to Jeff.


tkt_uuid: 1923685fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: graph
priority: 9 Immediate
foundin: None
resolution: Fixed
title: Crash in tcllibc with struct::graph...
comment:
  I have observed a crash with tcllibc and the struct::graph package. Under ActiveTcl 8.5.1, the attached script crashes. Using teacup to uninstall tcllibc, the script runs fine. Please note that both attached files must be in the same directory to get the attached script to run.


tkt_uuid: 1195267fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Out of Date
title: initializing multipart files too slow
comment:
  This problem occurs with WinXP and TclTk 8.5a2

  The attached multi-part MIME file of about 1.3MB
  initializes in under 1 second with TclTk 8.4.9, or on
  Linux, but takes around 8 seconds to initialize with
  WinXP and TclTk 8.5a2

  Single-part MIME files are very much faster, even much
  larger ones

  This could be a clue: a similar problem happened in
  older versions of Tcl under Windows if the 'encoding'
  directory were not present under lib/tcl8.x -- but in
  8.5 wish crashes on startup if the 'encoding' directory
  is not present so I cannot test the effect of this


tkt_uuid: 3039090fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: asn
priority: 5 Medium
foundin: None
resolution: Accepted
title: asn::asnGetBigInteger returns incorrect value
comment:
  % package require asn
  0.8.3
  % set data "\x02\x03\x01\x00\x01"; asn::asnGetBigInteger data val; puts [::math::bignum::tostr $val]
  -65535
  % set data "\x02\x03\x81\x00\x01"; asn::asnGetBigInteger data val; puts [::math::bignum::tostr $val]
  -8323071


  Correct values of those ASN.1 sequences are 65537 and -8323071.  I suspect this is an issue with misinterpreting X.690:
          8.3.3      The contents octets shall be a two's complement binary number equal to the integer value, and consisting of
          bits 8 to 1 of the first octet, followed by bits 8 to 1 of the second octet, followed by bits 8 to 1 of each octet in turn up to
          and including the last octet of the contents octets.
              NOTE ­ The value of a two's complement binary number is derived by numbering the bits in the contents octets, starting with bit
              1 of the last octet as bit zero and ending the numbering with bit 8 of the first octet. Each bit is assigned a numerical value of 2N,
              where N is its position in the above numbering sequence. The value of the two's complement binary number is obtained by
              summing the numerical values assigned to each bit for those bits which are set to one, excluding bit 8 of the first octet, and then
              reducing this value by the numerical value assigned to bit 8 of the first octet if that bit is set to one.


  A working implementation:

  proc ::asn::asnGetBigInteger {data_var bignum_var} {
      # require math::bignum only if it is used
      package require math::bignum

      # Tag is 0x02. We expect that the length of the integer is coded with
      # maximal efficiency, i.e. without a prefix 0x81 prefix. If a prefix
      # is used this decoder will fail.

      upvar $data_var data $bignum_var bignum

      asnGetByte   data tag

      if {$tag != 0x02} {
          return -code error \
              [format "Expected Integer (0x02), but got %02x" $tag]
      }

      asnGetLength data len
      asnGetBytes  data $len integerBytes

      binary scan [string index $integerBytes 0] H* hex_head
      set head [expr 0x$hex_head]
      set replacement_head [expr $head & 0x7f]
      set integerBytes [string replace $integerBytes 0 0 [format %c $replacement_head]]

      binary scan $integerBytes H* hex

      set bignum [math::bignum::fromstr $hex 16]

      if {($head >> 7) && 1} {
          set bigsub [math::bignum::pow [::math::bignum::fromstr 2] [::math::bignum::fromstr [expr ($len * 8) - 1]]]
          set bignum [math::bignum::sub $bignum $bigsub]
      }

      return $bignum
  }


  Tests of new implementation:
  % package require asn
  % set data "\x02\x03\x01\x00\x01"; asn::asnGetBigInteger data val; puts [::math::bignum::tostr $val]
  65537
  % set data "\x02\x03\x81\x00\x01"; asn::asnGetBigInteger data val; puts [::math::bignum::tostr $val]
  -8323071
  % 


  Comparison with another ASN.1 Parser:

  $ echo -ne '\x02\x03\x01\x00\x01' > a
  $ echo -ne '\x02\x03\x81\x00\x01' > b
  $ openssl asn1parse -in a -inform der
      0:d=0  hl=2 l=   3 prim: INTEGER           :010001
  $ openssl asn1parse -in b -inform der
      0:d=0  hl=2 l=   3 prim: INTEGER           :-7EFFFF
  $ tclsh
  % expr 0x010001
  65537
  % expr -0x7EFFFF
  -8323071


tkt_uuid: 606141ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: csv
priority: 8
foundin: None
resolution: Fixed
title: csv bug: empty field in middle of row
comment:
  csv has a bug parsing an empty field in the middle of a
  row.

  In the attached tarball, see sample.data (taken from MS
  Access export file).  The fourth field in the last
  three rows is empty, but csv parses it as containing a
  single double-quote character.  The fix is a single
  line added to  csv.tcl, see csv.diff in the tarball, or
  csv-fixed.tcl.  Run the sample program  csv-test.tcl to
  see the difference in action.

  I'd be grateful if you could incluge this fix in the
  next release, as I am relying on the csv package in one
  of my projects.

  -Tod Olson <tod@uchicago.edu>


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: 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: 3312880fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ftpd
priority: 5 Medium
foundin: None
resolution: Fixed
title: FTP command "RNFR" checks filesystem paths
comment:
  RNFR checks the native filesystem for the pathname specified.

  The offending logic is:
          if {[file exists $path]} {...}

  This will fail unless you are using the native filesystem driver and a docroot of "/"

  To check for existence, perhaps rename could be called with "newname" of "" (empty string) ?


tkt_uuid: 1627892fffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: tcllib: request for new module
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Networking: what about SSH ??
comment:
  Hi,

  There are ssh library for ruby, for python but NOTHING for tcl !!

  I am really talking about SSH (not SSL).

  I think it could be a part of the Networking module and you could start with an ssh client (i.e not server).

  for ssh see:
  http://www.ssh.com/products/ssh_secure_shell/

  http://www.googlesyndicatedsearch.com/u/ietf?hl=fr&ie=ISO-8859-1&q=ssh&btnG=Rechercher

  thank you
  bye
  FD 


tkt_uuid: 1274322fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: apps : tkchat
priority: 5 Medium
foundin: None
title: Support for pastebin and similar sites
comment:
  Consider the possibility of adding support for sites
  like pastebin, etc. into tkchat. Not sure about the
  interface. Maybe a Post button which puts the sata into
  pastebin, etc. and then posts only the link to the
  chat. That way a user can paste something large to post
  into the chat UI and then through pastebin instead of
  doing the indirection manually.


tkt_uuid: 867604ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: Problem with focus and spinbox
comment:
  If trying the following code:

  package require BWidget
  pack [spinbox .b1]
  pack [spinbox .b2]
  .b1 insert end hello
  .b2 insert end hello

  and using the <Tab> key, content in the spinbox is not
  selected.

  Solutions seems to add:

  bind Spinbox <<TraverseIn>> [bind Entry 
  <<TraverseIn>>]

  in file init.tcl


tkt_uuid: 2794454fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: cmdline
priority: 5 Medium
foundin: None
resolution: None
title: error in info command
comment:
  line 196 of the source code reads: "if {[info exist result(?)] || [info exists result(help)]} {"

  I believe that first "exist" should read "exists"


tkt_uuid: 532791ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: matrix
priority: 5 Medium
foundin: None
resolution: Fixed
title: Error unsetting element in linked matrix
comment:
  Linked matrix objects don't correctly handle individual array 
  elements being unset. Here's a simple test case run 
  interactively:

  % package require struct
  1.2
  % 
  ::struct::matrix test
  test
  % test add columns 3
  % test add row 
  {1 2 3}
  % test add row {a b c}
  % test link arr
  % array get arr
  0,0 1 
  1,0 2 0,1 a 2,0 3 1,1 b 2,1 c
  % unset arr(0,0)
  % array get arr
  1,0 2 
  0,1 a 2,0 3 1,1 b 2,1 c
  % test get rect 0 0 end end
  {1 2 3} {a b 
  c}

  This bug also renders matrix objects unusable with a TkTable 
  widget (by linking to the same global array variable), as TkTable 
  makes extensive use of unsetting individual elements of a linked 
  array variable in its row and column manipulations.


tkt_uuid: 519594ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Invalid
title: parseaddress can't cope with spaces
comment:
  mime::parseaddress fails on simple, common cases. Specifically, it fails for some fairly typical user 
  input

       somebody@some.org someoneelse@other.com

  When I try to stress it and send mail to 

       foo<>bar@grill.com

  The parse "succeeds" but the send fails.


tkt_uuid: 772442ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: snit
priority: 5 Medium
foundin: None
title: snit: Explore alternative for pkg mgmt setup
comment:
  Snit currently does

      catch {package require snit::__dummy__}

  to setup package management in the internal slave 
  interp it uses to process class definitions.

  This is a bit of a hack. Explore if an alias for 'package' 
  can be used as well.


tkt_uuid: 1488712fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: toggle scrollbars on/off in ScrolledWindow
comment:
  The following code is a correction to toggle scrollbars 
  on/off:

  # -----------------------------------------------------
  ------------------------
  #  Command ScrolledWindow::configure
  # -----------------------------------------------------
  ------------------------
  proc ScrolledWindow::configure { path args } {
      Widget::getVariable $path data

      set res [Widget::configure $path $args]
      if { [Widget::hasChanged $path -background bg] } {
  $path configure -background $bg
  catch {$path.hscroll configure -background $bg}
  catch {$path.vscroll configure -background $bg}
      }

      if {[Widget::hasChanged $path -scrollbar scrollbar] 
  | \
      [Widget::hasChanged $path -auto auto]| \
      [Widget::hasChanged $path -sides sides]} {
  _setData $path $scrollbar $auto $sides
  foreach {vmin vmax} [$path.hscroll get] { break }
  set data(hsb,packed) [expr {$data(hsb,present) && 
  \
  (!$data(hsb,auto) || ($vmin != 0 || $vmax !
  = 1))}]
  foreach {vmin vmax} [$path.vscroll get] { break }
  set data(vsb,packed) [expr {$data(vsb,present) && 
  \
  (!$data(vsb,auto) || ($vmin != 0 || $vmax !
  = 1))}]

  set data(ipad) [Widget::cget $path -ipad]

  if {$data(hsb,packed)} {
      grid $path.hscroll -column 1 -row $data(hsb,
  row) \
      -sticky ew -ipady $data(ipad)
  } else {
              if {![info exists data(hlock)]} {
                  set data(hsb,packed) 0
                  grid remove $path.hscroll
           }
  }
  if {$data(vsb,packed)} {
      grid $path.vscroll -column $data(vsb,column) -
  row 1 \
      -sticky ns -ipadx $data(ipad)
  } else {
              if {![info exists data(hlock)]} {
                  set data(vsb,packed) 0
                  grid remove $path.vscroll
           }
  }
      }
      return $res
  }


tkt_uuid: 3428262fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: json
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: JSON: Trailing spaces added to number value
comment:
  When the source json is { "a" : 0 }, then the resulting dict is: { a {0 } } (not {a 0}). This may be significant when comparing json results coming from two different sources.

  To fix this problem, please change near this line:
  string is double -failindex last $txt
  the following line:
  set num [string range $txt 0 [expr {$last - 1}]]
  into:
  set num [string trim [string range $txt 0 [expr {$last - 1}]]]


tkt_uuid: 1285549fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Out of Date
title: comm 4.2.1 doesn't work on Tk8.3.4
comment:
  Upgrading from tcllib1.3 to tcllib1.7 includes an upgrade 
  from comm-4.0 to comm-4.2.1. 

  Under tcl/tk 8.3.4 comm-4.0 works fine but comm-4.2.1 
  does not.

  The doco for comm says it requires 8.2.

  To test this try the following under 8.3.4

  Pre-conditions:
    Both versions of comm are somewhere in
    your auto-path. What I have done is install
    tcllib-1.3, copy tcllib/comm to a temp location
    as comm-1.3. Then uninstall tcllib-1.3 and install
    tcllib-1.7. Copy comm-1.3 back to tcllib/

  Test:
   1) Open two wish shells
   2) In both: package require -exact comm 4.0 -> 4.0
   3) In one: comm::comm self -> <id>
   4) In the other: comm::comm send <id> puts fred
      --> "fred" appears in console of first shell.

   Now repeat this but use this alternate step 2:
   2) In both: package require comm -> 4.2.1

   The outcome in the second case is that nothing
   happens.


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: 1416780fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pop3
priority: 5 Medium
foundin: None
resolution: Fixed
title: pop3: test suite bugs
comment:
  with -debug 1:

  * pop3 1.6.3
  - comm 4.3
  WARNING: removeFile removing
  "/local/src/tcllib/__pop3d.log":
    not created by makeFile
  WARNING: removeFile removing
  "/local/src/tcllib/__pop3d.log":
    not a file
  WARNING: cleanupTests deleting
  /local/src/tcllib/coserv.sub...


tkt_uuid: 2695564fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: math :: linearalgebra
priority: 8
foundin: None
resolution: Fixed
title: mkWilkinson+ may be wrong
comment:
  Hi,

  Try 

  math::linearalgebra::show [math::linearalgebra::mkWilkinsonW+ 7]

  and see :

  3.0000 1.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
  1.0000 2.0000 1.0000 0.0000 0.0000 0.0000 0.0000 
  0.0000 1.0000 1.0000 1.0000 0.0000 0.0000 0.0000 
  0.0000 0.0000 1.0000 0.0000 1.0000 0.0000 0.0000 
  0.0000 0.0000 0.0000 1.0000 -1.0000 1.0000 0.0000 
  0.0000 0.0000 0.0000 0.0000 1.0000 2.0000 1.0000 
  0.0000 0.0000 0.0000 0.0000 0.0000 1.0000 3.0000 

  but the diagonal must contain only positive 
  terms, as shown in :

  http://www.uni-kassel.de/hrz/server/UNIX+SW-Infos/graphics/MatLab-5.3/help/techdoc/ref/wilkinson.html

  The following fixes the problem :

  proc mkWilkinsonW+ { size } {
      set result {}
      for { set j 0 } { $j < $size } { incr j } {
          set row {}
          for { set i 0 } { $i < $size } { incr i } {
              if { $i == $j } {
              # int(n/2)+1-min(i, n- i+1)
                set min [expr {(($i+1)>$size-($i+1)+1? $size-($i+1)+1 : ($i+1))}]
                set entry [expr {int($size/2) + 1 - $min}]
              } elseif { $i == $j+1 || $i+1 == $j } {
                  set entry 1
              } else {
                  set entry 0
              }
              lappend row $entry
          }
          lappend result $row
      }
      return $result
  }

  math::linearalgebra::show [mkWilkinsonW+ 7]

  The problem was to correctly manage the 
  move for the mathematical formula (where i
  starts from 1) to Tcl (where i starts 
  from 0).

  Best regards,

  Michaël


tkt_uuid: 708502ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: struct
priority: 7 High
foundin: None
resolution: Accepted
title: Longest common subsequence of two lists
comment:
  The core of a differential file comparison program,
  such as Unix 'diff', is the ability to compute or
  approximate the longest common subsequence
  of two lists. In response to requests from Pascal
  Scheffers and Jean-Claude Wippler for a pure-Tcl
  'diff' for wikit, I've developed Tcl code that implements
  the Hunt-McIlroy algorithm for longest common
  subsequence.

  It strikes me that this fits the [chart of proposed
  additional list functionality] that Andreas has
  placed on the Wiki, and that a natural place to
  put it in Tcllib would be as

       [::struct::list lcs $list1 $list2]

  But of course, we don't have the ::struct::list
  command yet, so I've no framework in which to
  fit this.

  I'm attaching source code, test suite, and a
  draft manual page for the comparison code
  to this article for your review.  I'm presuming
  that it should fit nicely with feature request
  # 577055. But I think that Andreas should
  review it and commit if he approves, since he
  seems to be the leader for this functionality.


tkt_uuid: 1205536fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: ComboBox Return binding broken if -bwlistbox set
comment:
  The Return binding on a ComboBox is broken if the -bwlistbox option is 
  set. The problem is that the binding is set on the underlying canvas rather 
  than on the BWidget ListBox widget, and so the "curselection" method 
  isn't supported.

  The attached patch fixes the problem by passing the path to the ListBox 
  widget, rather than %W (which will expand to the name of the underlying 
  canvas widget).


tkt_uuid: 481019ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: comm
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: comm registry mechanism
comment:
  I would love to see comm get some sort of automated or
  nearly transparent registration name server, making it
  even closer to Tk's send than it currently is.


tkt_uuid: 3609342fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: doctools
priority: 7 High
foundin: None
title: dtplite should not generate keyword link if no keywords
comment:
  When the manpages do not define any keywords, the Keyword index links takes you to a blank page. I prefer the keyword link to be only generated if at least one keyword is present. Of course, some might say every page must have a keyword but I happen to disagree :-)

  I have a patch for this. Will submit after further testing.


tkt_uuid: 930101ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Out of Date
title: Help with Tcllib MIME
comment:
  Can anyone help me out with the following problem? I am 
  using Tcllib 1.0.

  THE CODE

  I am using the following code:
  [mime::initialize -canonical "text/html; charset=US-
  ASCII" -string $body]
  [mime::setheader $message Subject $subject]
  [smtp::sendmessage $message -originator $fromemail -
  recipients $toemail -servers $emailserver -ports 
  $emailport]
  [mime::finalize $message]

  THE ERROR

  When I use the variable "old" as described below, I have 
  no problems in sending the email. However, as soon as I 
  start defining attribute values in my HTML such as 
  width=100% (see the variable "new" defined below), I 
  get the following error:

  key message-id not in header

  THE MESSAGE

  [append old "<html><head> "
  append old "<title>eSampleMail</title> "
  append old "<style>"
  append old "</style>"
  append old "</head>"
  append old "<body>"
  append old "<table>"
  append old "<tr><td>We are pleased to 
  provide you with the most recent updates to 
  myserver.com</td></tr>"
  append old "</table>"
  append old "</body>"
  append old "</html>"
  NULL]

  [append new "<html><head> "
  append new "<title>eSampleMail</title> "
  append new "<style>"
  append new "</style>"
  append new "</head>"
  append new "<body>"
  append new "<table width=100%>"
  append new "<tr><td>We are pleased to 
  provide you with the most recent updates to 
  myserver.com</td></tr>"
  append new "</table>"
  append new "</body>"
  append new "</html>"
  NULL]


  Please help.


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: 1657338fffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: blowfish
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Blowfish CFB mode
comment:
  Hi, 
  This patch enables CFB (Crypto Forward Block) stream encryption in the blowfish module.
  It has a simple test in the test suite, and I used it to decrypt data encrypted in a cryptofs (fuse userland encrypted filesystem) so I think it works.
  I'm no crypto expert...
  As far as I know, the limitation is that you can not call the encrypt/decrypt multipletimes if you don't use a full block, so ONLY the last block is allowed to be less than 64bits in size, which should not be a problem.

  Regards


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: 943994ffffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: doctools
priority: 9 Immediate
foundin: None
title: standard doctools target for TEA / Makefile authors
comment:
  The doctools package supports processing
  of a nice documentation markup language.

  Any Tcl package author who uses doctools
  markup to create documentation, will need
  a doc: target in his TEA Makefile to produce
  documentation in installable formats like
  nroff and html.  This suggests an application
  built around doctools.

  Candidates are mpexpand and dtp, but neither
  is routinely installed enough for simple use.

  Request that some such app get installed
  routinely when tcllib is installed, and that
  sample doc: target rules be made available,
  perhaps within the TEA sampleextension itself.


tkt_uuid: 1178045fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: ldap
priority: 5 Medium
foundin: None
resolution: Invalid
title: Bad conversion for UTF-8 strings
comment:
  UTF-8 are not handled correctly in LDAP module (or may be 
  ASN). 
   
  Repeat by: 
   
  ---------------------------------------------- 
  package require ldap 
  set x [::ldap::connect ldap.u-strasbg.fr] 
  set y [::ldap::search $x o=ulp {(cn=*jamet an*)} *] 
  set z [lindex $y 0] 
  array set t [lindex $z 1] 
  puts $t(cn) 
  --------------------------------------------- 
   
  I get UTF-8 characters on dislay, even if stdout is 
  fconfigured with the normal "iso8859-15" encoding. 
   


tkt_uuid: 1043107fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Fixed
title: MainFrame: Accelerator Ctrl f does not work
comment:
  A Ctrl f accelerator in a MainFrame menu definition
  does not work.

  Example script:

  package require BWidget

  set menuDef {
      "Datei" {} {} 0 {
          {command "E Entry" {} "" {Ctrl e} \
               -command  {puts "E Entry called"}}
          {command "F Entry" {} "" {Ctrl f} \
               -command  {puts "F Entry called"}}
          {command "G Entry" {} "" {Ctrl g} \
               -command  {puts "G Entry called"}}
      }
  }

  MainFrame .mf -menu $menuDef

  Control-e and Control-g fire, Control-f does not.

  The reason is in MainFrame::_parse_accelerator. The
  regexp {f[1]?[0-9]*} tries to select f1 etc, to
  capitalize the f, but unfortunately the regexp also
  match a single 'f'. This ends in the Binding
   <Control-Key-F> instead of the necessary <Control-Key-f>.


tkt_uuid: 520903ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Duplicate
title: ScrolledWindow: 'jumping' wi
comment:
  Motivation:
  The ScrolledWindow widget has a problem when making it
  centered together with automanaged scrollbars: each
  time the displayed frame changes its size, the
  scrollbars might get gridded for a short time when they
  are not needed and consequently ungridded shortly after
  that, causing the inner frame to 'jump'.

  The following patch addresses this by adding an
  -autodelay option. If this is used, the widget will
  wait (-autodelay milliseconds) before it calls the
  routine the grids/ungrids the scrollbars and will
  always use the last values given to it so that multiple
  calls to the widget just get 'compressed' to one call,
  effectively using the last valid values.

  The attached tar contains the diff to the actual head,
  the complete new panedw.tcl source and the updated
  documentation in case the patch should be accepted.

  Effects to existing code:
  None. The default is to behave like no -autodelay was
  given.

  Bugs:
  None that I knew of.


tkt_uuid: 985601ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 6
foundin: None
resolution: Fixed
title: doctools - engine parameters not documented
comment:
  Neither the general methods to query and set engine
  parameters are documented, nor are the actual
  parameters defined by the predefined formatters.


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: 602726ffffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: None
title: Open -mode passive fails
comment:
  Hi all.

  I tried to download a file using the -mode passive
  option when 
  establishing the link. It connected, autenticated, sent the
  data transfer command, but hung on the actual transfer
  - just
  like active mode with a firewall.

  I captured the data stream, and didn't find the PASV
  exchange
  anywhere. To check it the server permitted passive mode, I
  did the exchange with the command-line ftp command - no
  problem. (And the data stream opened with the PASV cmd
  in this case)

  Suggestions?

  John


tkt_uuid: 2010798fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: md5
priority: 5 Medium
foundin: None
resolution: Fixed
title: variable pollution on package require md5
comment:
  The final 'namespace eval' in md5x.tcl seems to have a 'creative writing' problem regarding the variable e.

  e.g

  % set e myvalue
  myvalue
  % package require md5
  2.0.5
  %set e
  critcl


  Looking in cvs - it seems an 'unset e' has been added, but this isn't enough, as the original e is still the variable being written to.

  Looks like it just needs an extra line:
  variable e 


tkt_uuid: 1292966fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ftp
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: Performance: connection timeout
comment:
  Hi,

  When I try to connect via (latest version 2.4.1):
  ftp::Open $some_ip anonymous "" -mode passive

  I takes sometimes more than a minut (sometimes a timeout).
  * We only have this when starting on Solaris connecting
  to Windows via a Fortigate 200 Antivirus Appl. and a
  firewall.
  * Windows to Windows via Fortigate and firewall works fine.
  * Solaris to whatever OS not via Fortigate and firewall
  works fine
  * When I test the connection via regular UNIX ftp
  command -->
  no problem

  The line of code slowing down is located in ftp.tcl
  proc ftp::OpenControlConn
  --> set peer [fconfigure $ftp(CtrlSock) -peername]

  This line is used only for a DisplayMsg. (I think this
  line should be in the if statement, but this is not the
  real issue).

  I found an old bug report on fconfigure -peername (tcl
  project):
  [ 533301 ] fconfigure -peername very slow

  Does somebody have an idea?

  Moving the fconfigure line into the 
  #    if { $VERBOSE } {

  block fixes my problem when VERBOSE mode is off.


tkt_uuid: 1272754fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: counter
priority: 5 Medium
foundin: None
resolution: Fixed
title: counter - failed tests with Tcl 8.5
comment:
  ==== counter-avg counter::count FAILED
  ==== Contents of test case:

      counter::init avg
      counter::count avg 2.2
      counter::count avg 3.3
      counter::count avg 9.8
      counter::get avg -avg

  ---- Result was:
  5.1000000000000005
  ---- Result should have been (exact matching):
  5.1
  ==== counter-avg FAILED

  ==== counter-hist histogram average FAILED
  ==== Contents of test case:

      counter::init hist -hist 10
      counter::count hist 2.2
      counter::count hist 18.6
      counter::count hist 14.1
      counter::count hist 26.9
      counter::count hist 20.4
      counter::count hist 23.3
      counter::count hist 53.3
      counter::get hist -avg

  ---- Result was:
  22.685714285714283
  ---- Result should have been (exact matching):
  22.6857142857
  ==== counter-hist FAILED


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

  * struct::queue 1.4
  test name 'queue-8.3' re-used; prior use in
  /local/src/tcllib/modules/struct/queue.test


tkt_uuid: 1949752fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: ncgi
priority: 5 Medium
foundin: None
resolution: Fixed
title: Documentation - misprint
comment:
  http://tcllib.sourceforge.net/doc/ncgi.html:
  ...
  ::ncgi::exists name
      Returns 1 if the CGI variable name is not present.
  ...

  In fact, it will return 1 if variable IS present and will return 0 if it's NOT. Obvious misprint in the documentation.


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: 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: 607085ffffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: struct
priority: 8
foundin: None
resolution: Accepted
title: priority queue
comment:
  Hi, simple priority queue implementation.

  Not perfect and missing docs (and more tests, as always).


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: 3396787fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: json
priority: 5 Medium
foundin: None
resolution: Fixed
title: strange if condition in json::write
comment:
  proc ::json::write::indented and proc ::json::write::aligned both start with the following test:

  if {[llength [info level]] > 2} { 

  this should never ever be true. possibly " ..[info level 0].." was meant, but if I try [::json::write::indented 1 1] for example,
  the interpreter would interupt execution, throwing an error itself, doesn't it.


tkt_uuid: 1800344fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Accepted
title: Extra <br> tags before new definition list
comment:
  Using tcllib from cvs HEAD.



  Here's some markup:

  [call [cmd ns_limits_get] [arg limit]]

  Get the current configuration options and accumulated runtime statistics for
  the named limits bundle. The result is a list in Tcl array-get format which
  can be used, for example, to initialise a hash table.

  [list_begin definitions]

  [lst_item nrunning]
  The number of connections currently running with a URL which is mapped to
  this limit bundle.



  Here's the HTML output:

  <dt><a name="2"><b class='cmd'>ns_limits_get</b> <i class='arg'>limit</i></a></dt><dd>


  Get the current configuration options and accumulated runtime statistics for
  the named limits bundle. The result is a list in Tcl array-get format which
  can be used, for example, to initialise a hash table.


  </p><br><br>
  <dl>

  <dt>nrunning</dt><dd>
  The number of connections currently running with a URL which is mapped to
  this limit bundle.



  There is a an extra pair of <br><br> tags between the closing </p> and opening <dl> which is throwing the formatting off.


tkt_uuid: 475846ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: control
priority: 5 Medium
foundin: None
resolution: Fixed
title: install leaves control broken
comment:
  The control package makes use of Tcl's auto-loader
  to load only the commands that are actually used.
  In order for this to work, a "tclIndex" file must
  be generated and installed, but tcllib's 'make install'
  does not do this.

  Note also that 'make install' blindly installs all
  *.tcl files, assuming they are all part of the package.
  If other Tcl scripts (developer aids, etc.) are
  included in the source directory, they need to have
  a name not matching *.tcl so they are not mistakenly
  installed.

  Proposed fix to control:
  rename index.tcl -> genIndex
  generate tclIndex and check it in to CVS
      now developer responsbility to keep it
      up to date.

  Proposed fix to tcllib Makefile:
  have 'make install' install files named
      'tclIndex' as well as '*.tcl'

  As currently shipped with tcllib 1.1, control 0.0
  does not work at all.


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: 3608240fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: queue
priority: 5 Medium
foundin: None
resolution: Fixed
title: struct::queue error, procs peek and get
comment:
  Last action "qp peek [qp size]" gives an incorrect result [1 2 3 4 5] instead of [2 3 4 5]

  script:

  package require struct::queue
  struct::queue qp
  qp put 1 2 3
  puts [qp peek [qp size]]
  qp get
  puts [qp peek [qp size]]
  qp put 4 5
  puts [qp peek [qp size]]

  output:

  1 2 3
  2 3
  1 2 3 4 5


tkt_uuid: 1645333fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: asn
priority: 5 Medium
foundin: None
resolution: Fixed
title: asnGetContext fails if encoding is primitive
comment:
  Currently (as of version 0.7 of asn package) function asnGetContext  contain following check

     if {($tag & 0xE0) != 0x0a0} {
          return -code error \
              [format "Expected Context (0xa0), but got %02x" $tag]
     }

  This check true if context-dependent tag has constructed encoding. However it is possible to have context-dependent tag with primitive encoding. For example, in PKCS7 format encrypted message data are stored as context-dependent tag with primitive encoding.

  So, this check should be relaxed as 

    if {($tag & 0xC0) != 0x80} 

  for more strict conformance with BER. It would be very nice to add additional optional parameter "encodingType" to asnGetContext, which would return value of 0x20 bit of the tag, thus letting application to know whether encoding of this tag was constructed or primitive.

  Simular changes should be applied to asnGetApplication, which has the same problem.


tkt_uuid: 455732ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mclistbox
priority: 5 Medium
foundin: None
resolution: Fixed
title: selection breaks if 1st column invisible
comment:
  Version info:
  wish: 8.3.3
  mclistbox: 1.02 (and the cvs version)

  The selection gets stuck on the first entry if the
  first column of the mclistbox is made invisble.

  The following snippet produces the error:

  --snip---
  package require mclistbox
  namespace import ::mclistbox::*

  set lb [mclistbox .lb]

  $lb column add uid -visible 0
  $lb column add login -label "Login" -width 10
  $lb column add name -label "Name" -width 14

  $lb insert end [list 0 a anaampje]
  $lb insert end [list 1 b bnaampje]
  $lb insert end [list 2 c cnaampje]

  pack $lb
  ---snip---

  Adding -label or -widht options to the invisible column
  does not matter.

  Moving the invisible column to the end fixes it.

  Happy bughunting,

  Ric


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: 1779348fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: profiler
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: profiler test suite peculiar behavior
comment:
  I downloaded from activestate's ftp site today the latest tcl, tk, tcllib cvs head snapshot tars. On a sparc solaris 9 system, using sun's c compiler, I built the pieces and installed them. All this is being done within Sun's standard xterm window, running under GNOME, displaying back to Exceed X server running on Windows XP sp2.

  I then ran a make test for tcllib. Things went well until:
  [    ]  [8.5a7] pop3d       ~~       T   152 P   152 S     0 F     0
  [  * ]  [8.5a7] profiler    ---- profiler::leaveHandler::initialize_descendent_ti[  * ]  [8.5a7] profiler    PASS profiler::leaveHandler::initialize_descendent_ti[  * ]  [8.5a7] profiler    ---- profiler::leaveHandler::increment_descendent_tim[   *]  [8.5a7] profiler    PASS profiler::leaveHandler::increment_descendent_tim[   *]  [8.5a7] profiler    ---- profiler-4.1                                    [   *]  [8.5a7] profiler    PASS profiler-4.1                                    [   *]  [8.5a7] profiler    ---- profiler-5.1                                    [   *]  [8.5a7] profiler    PASS profiler-5.1                                    [  * ]  [8.5a7] profiler    ---- profiler-6.1                                    [  * ]  [8.5a7] profiler    PASS profiler-6.1                                    [  * ]  [8.5a7] profiler    ---- profiler-7.1                                    [  * ]  [8.5a7] profiler    PASS profiler-7.1                                    [  * ]  [8.5a7] profiler    SKIP profiler-7.2                                    [ *  ]  [8.5a7] profiler    ---- profiler-7.2-85                                 [ *  ]  [8.5a7] profiler    PASS profiler-7.2-85                                 [ *  ]  [8.5a7] profiler    ---- profiler-7.3                                    [ *  ]  [8.5a7] profiler    PASS profiler-7.3                                    [ *  ]  [8.5a7] profiler    ---- profiler-7.4                                    [*   ]  [8.5a7] profiler    PASS profiler-7.4                                    [*   ]  [8.5a7] profiler    ---- profiler-7.5                                    [*   ]  [8.5a7] profiler    PASS profiler-7.5                                    [*   ]  [8.5a7] profiler    ---- profiler-8.1                                    [*   ]  [8.5a7] profiler    PASS profiler-8.1                                    [ *  ]  [8.5a7] profiler    ---- profiler-8.2                                    [ *  ]  [8.5a7] profiler    PASS profiler-8.2                                    [ *  ]  [8.5a7] profiler    ---- profiler-9.1                                    [ *  ]  [8.5a7] profiler    PASS profiler-9.1                                    [    ]  [8.5a7] profiler    ~~       T    21 P    15 S     6 F     0               

  Notice that for some reason, profiler outputs each of its steps, instead of writing them on top of each other like the previous tests all did.

  This is a make test performed "interactively" with output going to stdout/stderr.

  I've seen this kind of thing happen with the test suite at other times. I understand that others may not be able to duplicate the problem. I am reporting it because there appears to be something weird going on in the test suite software itself, or perhaps in this particular test.


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: 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: 707607ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: Tcllib source README missing web info
comment:
  the README for the tcllib source or install
  distribution does not mention the sf.net web site.

  The attached patch adds a mention of the site to the
  README file.
  I'm uncertain where in the installation directory such
  a mention should go - should the README be installed?


tkt_uuid: 763731ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Fixed
title: word_encode makes encoded words that are too long
comment:
  RFC2047 says that encoded words should be no longer than 
  75 characters including all delimiters. The current 
  implementation of word_encode places no bounds upon the 
  length of encoded word it will attempt to create. If using the 
  quoted-printable method it will insert soft newlines at 72 
  characters of encoded content which is not permitted. If 
  using the base64 method it will wrap the content of the 
  encoded word at 60 encoded characters (45 bytes of 
  encoded content) which is also not permitted. 

  I have attached a patch that fixes these problems and also 
  addresses other restrictions of RFC2047, namely that 
  encoded words must end with integral characters (no 
  encoded character may be spread between two encoded 
  words). This requires that the encoding proc knows the 
  actual length of each character in the chosen encoding and 
  to calculate this it has been necessary to convert the given 
  strings back to UTF so that the encoded words can be built 
  up character by character in order to meet these 
  requirements. As this conversion is quite likely to just have 
  happened in the other direction a switch has been added to 
  indicate that the string is still in UTF form and conversion 
  from the passed in charset is not necessary.

  There is also a new switch for the maximum length of the 
  resulting encoded word for situations where the maximum 
  length must be less than the default (currently set at 66 
  which works for the Subject: header) such as in an Address 
  field where it must coexist with the email address within the 
  76 character limit.

  As the passing in of a long string or the requirement for a 
  shorter one may cause the generation of more than one 
  encoded word they are returned in the "wrapped" format, 
  separated by "\n " so they can still br dropped straight into a  
  header field and be valid.

  I have also fixed some reversed terminology in the docs for 
  field_decode.

  I have attached a patch with these fixes and a large number 
  of tests for both RFC compliance and implementation errors 
  made along the way. Some of the tests and implementation  
  rely on improvements from Patch #758742 "charset 
  mapencoding improvements" and bugfixes from Bug 
  #763669 "Problems with qp_encode and encoded_word, 
  no_softbreak"

  Matthew


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.


tkt_uuid: 665737ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: exif
priority: 7 High
foundin: None
resolution: Fixed
title: (v1.3) coding error causes failure in exif::makerNote
comment:
  In tcllib 1.3's exif module, in the exif::makerNote
  procedure, under the "$tag == 15" elseif (line 544),
  there are eight references in 'if' expressions to '$v'
  instead of the proper '$value'.  This bug goes
  unnoticed in many cases, but an error will occur if
  '$v' happens to contain a value that TCL can't convert
  to a boolean.  In my case, parsing JPEGs from a Canon
  EOS-D60, 3 files out of 150 caused a problem.  In each
  case, $v returned "+1/3", which TCL refused to booleanize.

  The fix ($v => $value in the eight 'if' clauses) fixed
  things nicely.


tkt_uuid: 733442ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: md5
priority: 5 Medium
foundin: None
resolution: Fixed
title: procheck reports parse error
comment:
  unix> procheck md5.tcl
  ...
  md5.tcl:349 (parse) parse error: PARSE syntax 13757
  {syntax error in expression " ($x << $i) | (($x >> R$i)
  & S$i)"}
  expr { ($x << $i) | (($x >> R$i) & S$i)}
       ^
  ...

  On examining the md5.tcl file, lines 328 - 351 are
  never executed because of if {0} {...} block. But it
  would be better if procheck did not report any parse
  errors.


tkt_uuid: 1557494fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: sasl
priority: 5 Medium
foundin: None
resolution: Accepted
title: NTLM responses ignores negotiated encoding
comment:
  The procedure SASL::NTLM::CreateResponse will always 
  sent the domain, host and user in litte endian unicode 
  when creating the type 3 message. This is incorrect if 
  the server has indicated in the type 2 message that 
  Unicode is not supported.

  If the flag Unicode is not set OEM encoding should be 
  used instead.

  I have noticed this issue on a Windows NTLM 
  authenticating proxy and am in the position to do some 
  additional testing, I will see if I can create a patch 
  for this issue on short notice. 


tkt_uuid: 2557107fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: doctools
priority: 5 Medium
foundin: None
resolution: Fixed
title: dtplite seems to insist on presence of keywords
comment:
  I have a simple test file as follows:
  ----
  [manpage_begin "test" "n" "0.0"]
  [copyright {2009 "Ashok"}]
  [moddesc "sample"]
  [description]

  [manpage_end]
  ----

  If I place it in a directory, say doc, and run the command

  tclsh86 C:\bin\Tcl86\bin\dtplite.tcl -o doc html doc

  the following error is spit out:
  C:\bin\Tcl86\bin\dtplite.tcl: Docidx Error in macro at line 2, column 0:
  [index_end]
  --> (FmtError) IDX error (idx/endcmd), "index_end" : Command not allowed here..

  Adding a [keywords foo] to the above file fixes the error.

  Keywords should be always required. Note that running the command
  tclsh86 C:\bin\Tcl86\bin\dtplite.tcl -o test.html html test.man
  (where test.man is the above file) works fine.

  /Ashok


tkt_uuid: 3483716fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Fixed
title: transfer encoding ignored for message/*
comment:
  The handling of message/* types in ::mime::parsepart currently ignores the Content-Transfer-Encoding (tcllib 1.13 / mime 1.5.4) .

  Example

  Content-Type: message/delivery-status; name="deliverystatus.txt"
  Content-Disposition: attachment; filename="deliverystatus.txt"; size=138;
  creation-date="Thu, 02 Feb 2012 13:50:05 GMT";
  modification-date="Thu, 02 Feb 2012 13:50:05 GMT"
  Content-Description: deliverystatus.txt
  Content-Transfer-Encoding: base64

  T3JpZ2luYWwtUmVjaXBpZW50OiA8L2ZheD1ibHViYkBndW1taS5ib290PgpBY3Rpb246IGZhaWxl
  ZApEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCAjNS4xLjAgQWRkcmVzcyByZWplY3RlZC4KUmVt
  b3RlLU1UQTogNTMuMjQuMjgyLjE1MA==


  The attached patch fixes this problem for base64 encoded messages.


tkt_uuid: 456255ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: base64
priority: 5 Medium
foundin: None
resolution: Fixed
title: export public API only
comment:
  In some modules, there is a single line code:

      namespace export *

  This exports public as well as private API.

  I am providing a patch generated based on the
  convention that all
  public APIs begin with lower case first letter. So,
  please verify the list of public APIs I have added to
  the "namespace export" list.


tkt_uuid: 1558352fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: asn
priority: 5 Medium
foundin: None
title: ASN Package
comment:
  Dear TCL Experts and Developer,

  Recently , I used TCL Asn linrary package which made 
  lots of thing easier. However, I found that bugs or 
  possibilites of improvement.

  Please check the following and see if it will be a 
  good idea to make following changes:

  1. TAG Verification
  In all of the asn Package, after reading TAG value it 
  is verified with Universal TAG , e.g.

      if {$tag != 0x02} {
          return -code error \
              [format "Expected Integer (0x02), but got 
  %02x" $tag]
      }

  This , however , is true only when universal TAGs are 
  in use. In many cases private TAG are also use for 
  the data encoding.

  I think , such checks should be removed as it should 
  be consider programmer responsibility to verify if 
  the TAG is expected , universal or private. Library 
  should not provide any restriction.


  2. TAG Length
  The library package consider TAG length as one byte 
  only. This , however , might not be true in some case 
  where the TAG can be of 2 bytes.

  This should be corrected with the possibility of TAG 
  with variable length.

  3. PeekBytes Procedure?
  There is no procedure for PeekBytes. Sometimes it is 
  necessary to read the byte/bytes without affecting 
  the original Data. ::asn::asnPeekByte though exist 
  but there is nothing like PeekBytes

  4. Output of getByte
  The output byte of asnGetByte gives the result in 
  decimal format. Since it is binary data I will 
  suggest the result should be hex coded format to keep 
  all things in same format.


  5. Introduction of Choce Structure ( and others )
  The ASN library package should be able to handle 
  other kinds of ASN structure e.g. Choice structure

  The Choice structure allows to match one of the 
  various possibilites:

  Choice :: {

            1. Money
            2. Car
            3. Nothing
            
            }

  With this type of encoding any one of the above 
  choice may happen. Therefore , there should be a 
  possibility of passing TAG values as an argument and 
  the procedure should try which to match the TAG and 
  then pass the value back of the choice which actually 
  appeared .

  Similarly , we have SEQOF , SETOF types of data 
  structure which should also be consider.

  Many thanks!

  Wajih


tkt_uuid: 1386101fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: rc4
priority: 9 Immediate
foundin: None
resolution: Fixed
title: rc4 critcl fails when used with channels
comment:
  As reported by RJ Bacon:
   package require rc4
   rc4::rc4 -key 01234567 -infile xxzzy.dat
  will die.
  The problem is that the key returned by RC4Init when
  using critcl is not an array but we attempt to treat it
  like on and upvar it.


tkt_uuid: 899152ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: None
priority: 5 Medium
foundin: None
resolution: Fixed
title: installer should [package require Tcl 8]
comment:
  By mistake I tried to install using
  Tcl 7.6.  Led to some surprising
  suggestions for install locations.

  Probably a good idea to
  [package require Tcl 8] early
  in installer.tcl.  The installer
  should not have to support Tcl 7,
  because none of the packages
  to be installed supports Tcl 7.


tkt_uuid: 436762ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: None
title: BWidget tree and listbox binding bug
comment:
  Version: BWidget CVS nightly from 21.06.2001

  In BWidget version 1.2.1, the following code worked:

  Tree .t 
  bind .t <ButtonPress-3> {foo}
  ListBox .l
  bind .l <ButtonPress-3> {foo}

  This doesn't work anymore. Looking through the CVS for
  tree.tcl,
  I saw that somewhere between tree Rev1.1 (from
  BWidget-1.2.1) and tree Rev1.11 a change was made that
  broke the above code.

  Looking further, ericm tried out some fancy things in
  tree Rev 1.27 that made it work again, but has undone
  them in 1.28. (I suppose the same applies for
  listbox.tcl).

  I need that sort of things to get a popup menu on right
  mouseclick in the whole tree (listbox) area, not just
  when right-clicking on items or icons ( a la ".t
  bindText" and ".t bindImage".

  Any idea how to get this to work?

  Salut,
         Bastien


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: 3440045fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: pki
priority: 5 Medium
foundin: None
resolution: Fixed
title: ::pki::x509::_list_to_dn invalid char
comment:
  here is another fix, may be is already considered

  proc ::pki::x509::_list_to_dn {name} {
  set ret ""
  foreach {oid_name value} $name {
  if {![regexp {[^ A-Za-z0-9'()+,.:/?=-]} $value]} {
  set avalue [::asn::asnPrintableString $value]
  } else {
  set avalue [::asn::asnUTF8String $value]
  }
  append ret [::asn::asnSet \
  [::asn::asnSequence \
  [::asn::asnObjectIdentifier [::pki::_oid_name_to_number $oid_name]] \
  $avalue \
  ] \
  ] \
  }

  return $ret
  }


tkt_uuid: 586720ffffffffffffffffffffffffffffffffff
type: Patch
status: Deleted
subsystem: mclistbox
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: comcmd itemconfigure, few options added
comment:
  Command itemconfigure index column list ?list 
  Allows one to configure any given cell of a 
  mclistbox. The arguments index and column specify a 
  cell to be configures. 
  list argument is a set of option-value pairs as in the 
  listbox command itemconfigure. 

                    
  ::mclistbox::ResizeColumnsOfAllListboxes 
  This command adjusts widths of columns according to set 
  fonts of all mclistboxes in active an application. This 
  function is supposed to be called after any font 
  change. 

  Option -selectcolumn 
  Specifies behavior of selection. If -selectcolumn is 
  set to 1 and -selectmode is set to single, 
  then only one cell instead of hole line is highlighted 
  upon click. Default value is 0. 

  Opton -usexscroll 
  Specifies whether corresponding xscrollbar is visible. 
  This option works only if -usecolumnxscroll is set to 
  1. If the value is 1, 
  it makes corresponding xscrollbar visible. Default 
  value is 1. 


  PS. Sorry for previous anonymous submission of the same
  patch.

  Arkdi 


tkt_uuid: 3495047fffffffffffffffffffffffffffffffff
type: Bug
status: Deleted
subsystem: A Category Is Missing
priority: 1 Zero
foundin: None
resolution: Not Applicable Here
title: Bug Database link broken on tcllib home page
comment:
  If logged in, goes to 'add new bug report' page.
  When not logged in, gives error.
  I suppose it should go to the bug list like the 'patch' link goes to the patch list.
  Maybe also add a 'feature request' link?


tkt_uuid: 1416774fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Fixed
title: mime: test suite bugs
comment:
  with -debug 1:

  * mime 1.4.1
  test name 'mime-7.1' re-used; prior use in
  /local/src/tcllib/modules/mime/mime.test
  env array elements created:     TZ


tkt_uuid: 1869943fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: base64
priority: 5 Medium
foundin: None
resolution: Rejected
title: base64::decode fails while decoding invalid base64 strings
comment:
  base64::decode fails while decoding invalid base64 strings.
  If the string is "=" or "àà=" or "{what ever you want invalid base64 characters}={what ever you want}", it will bug when reading the "=" character.

  With the patch, it will return the empty string.


tkt_uuid: 3458158fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: tklib :: widget
priority: 8
foundin: None
resolution: Fixed
title: widget::calendar 1.0
comment:
  widget::dateentry use widget::calendar for select date. New version widget::calendar 1.0 has wrong bindings. Click on month/year close calendar frame. Version 0.98 calendar works fine.


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: 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: 1425947fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: mime
priority: 5 Medium
foundin: None
resolution: Duplicate
title: mime::parsedatetime - error on months
comment:
  When using ::mime::parsedatetime on months ( long and
  short ) as well as on "proper", there are errors
  handling months. there are more ways to fix the error,
  but I think the easiest is :

  Change variables to :

    variable MONTHS_SHORT [list None Jan Feb Mar Apr May
  Jun Jul Aug Sep Oct Nov Dec]
    variable MONTHS_LONG  [list None January February
  March April May June July                             
         August Sepember October November December]

  You need the first element to be "None" ( could be
  dummy), because %m (clock format option) returns values
  from 1-12 not from 0-11

  Also you must change clock format option %e to %m on
  all month related functions, because %e returns the day
  of the month not the month.

  Change the line that read :

  return [lindex $MONTHS_LONG [clock format $clock
  -format %e]]

  to :

  return [lindex $MONTHS_LONG [clock format $clock
  -format %m]]

  Change the line that read :

  return [lindex $MONTHS_SHORT [clock format $clock
  -format %e]]

  to :

  return [lindex $MONTHS_SHORT [clock format $clock
  -format %m]]

  Change the line that read :

   set mon [lindex $MONTHS_SHORT [clock format $clock
  -format %e]]

  to :

   set mon [lindex $MONTHS_SHORT [clock format $clock
  -format %m]]


tkt_uuid: 465210ffffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: csv
priority: 5 Medium
foundin: None
resolution: Fixed
title: ::csv::joinlist sepChar handling
comment:
    file: csv.tcl Rev. 1.5

    procedure: ::csv::joinlist

  doesn't handle "sepChar" argument.
  "join $record" should be "join $record $sepChar"


tkt_uuid: 2828086fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: bwidget
priority: 5 Medium
foundin: None
resolution: Accepted
title: Add <<TreeSelect>> event for keyboard navigation
comment:
  The attached patch updates tree.tcl to support the <<TreeSelect>> virtual event for KeyPress-Up and KeyPress-Down. Many users use the keyboard to navigate tree widgets and this brings the BWidget tree in line with current UI best practices. 


tkt_uuid: 1599978fffffffffffffffffffffffffffffffff
type: RFE
status: Closed
subsystem: log
priority: 5 Medium
foundin: None
title: RFE: add emergency and alert levels to logger
comment:
  Hi,

  The syslog protocol supports the following levels of severity (copied from http://tools.ietf.org/html/rfc3164#section-4.1.1):

  ---------------------
          Numerical         Severity
            Code

             0       Emergency: system is unusable
             1       Alert: action must be taken immediately
             2       Critical: critical conditions
             3       Error: error conditions
             4       Warning: warning conditions
             5       Notice: normal but significant condition
             6       Informational: informational messages
             7       Debug: debug-level messages

             Table 2. syslog Message Severities
  ---------------------

  The "emergency" and "alert" levels are currently missing from tcllib's logger package. These should be added to make it consistent with syslog protocol.


tkt_uuid: 772430ffffffffffffffffffffffffffffffffff
type: RFE
status: Deleted
subsystem: snit
priority: 5 Medium
foundin: None
resolution: Not Applicable Here
title: snit: clean up error stacks, hide internals.
comment:
  From a mail by Will, author of snit:

  I'd like Snit to do a much better job of cleaning up error 
  stack trace so that the Snit internals are hidden by 
  default.


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: 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: 3553350fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: htmlparse
priority: 5 Medium
foundin: None
resolution: Fixed
title: htmlparse does't handle callback command containing "&"
comment:
  If the callback command contains a "&" character, it is treated as part of the regular expression substitution string and ends up creating incorrect commands.   The same likely happens if the command contains \0 or similar sequences special to regsub.

  htmlparse should escape any special characters in the command before creating the substitution string.


tkt_uuid: 2909962fffffffffffffffffffffffffffffffff
type: Patch
status: Closed
subsystem: json
priority: 5 Medium
foundin: None
resolution: Accepted
title: Faster, more readable implementation of json parser
comment:
  When parsing documents of some nontrivial size (i.e. >100kB), I have found the json parser package 1.0 to be far too slow.

  Here is a considerably faster implementation (I have measured speed gains of a factor of 30). The main difference is that a regular expression is used for tokenizing the json text.

  This means that the parsing process restrict itself to a sequence of recognized tokens; it is blind to non-whitespace text between recognized tokens. I have therefore added a proc json::validate which can be used to test the validity of the entire text.

  I have not touched the *2json procs.

  The code is commented according to our internal guidelines; adaptations to the tcllib guidelines may thus have to be made if it is to be published in a future tcllib release.

  I haven't changed the package version number, and my CVS has tampered with the CVS mark in the header.


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: 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: 2800387fffffffffffffffffffffffffffffffff
type: Bug
status: Closed
subsystem: struct :: graph
priority: 5 Medium
foundin: None
resolution: Fixed
title: struct::graph:op::{kruskal,prim}
comment:
  The documentation for these commands should state their complexities, as that is the primary factor for choosing one or the other.

  I would also prefer it if the phrase "minimum spanning tree" was replaced by "minimum weight spanning tree", as that better highlights the dependence on this factor. The abbreviation MST is fine, however.

  Finally, it should be pointed out that returning only the arcs means all 1-vertex components are missing from the forest computed. This is not so likely to be an issue in real life, but the documentation is making a claim which is false in that situation.


